diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e0252144..0221e12f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [7.3.0](https://github.com/harttle/liquidjs/compare/v7.2.2...v7.3.0) (2019-02-24) + + +### Features + +* nil/null/empty/blank literals, resolves [#102](https://github.com/harttle/liquidjs/issues/102) ([88c9e96](https://github.com/harttle/liquidjs/commit/88c9e96)) + ## [7.2.2](https://github.com/harttle/liquidjs/compare/v7.2.1...v7.2.2) (2019-02-23) diff --git a/dist/liquid.common.js b/dist/liquid.common.js index 96c006431..af96df9ff 100644 --- a/dist/liquid.common.js +++ b/dist/liquid.common.js @@ -1,5 +1,5 @@ /* - * liquidjs@7.2.2, https://github.com/harttle/liquidjs + * liquidjs@7.3.0, https://github.com/harttle/liquidjs * (c) 2016-2019 harttle * Released under the MIT License. */ @@ -418,7 +418,7 @@ var Scope = /** @class */ (function () { Scope.prototype.readProperty = function (obj, key) { var val; if (isNil(obj)) { - val = undefined; + val = obj; } else { obj = toLiquid(obj); @@ -840,13 +840,136 @@ var Render = /** @class */ (function () { return Render; }()); -var operators$1 = { - '==': function (l, r) { return l === r; }, - '!=': function (l, r) { return l !== r; }, - '>': function (l, r) { return l !== null && r !== null && l > r; }, - '<': function (l, r) { return l !== null && r !== null && l < r; }, - '>=': function (l, r) { return l !== null && r !== null && l >= r; }, - '<=': function (l, r) { return l !== null && r !== null && l <= r; }, +function isComparable(arg) { + return arg && isFunction(arg.equals); +} + +var Drop = /** @class */ (function () { + function Drop() { + } + return Drop; +}()); + +function isDrop(value) { + return value instanceof Drop && isFunction(value.value); +} + +var EmptyDrop = /** @class */ (function (_super) { + __extends(EmptyDrop, _super); + function EmptyDrop() { + return _super !== null && _super.apply(this, arguments) || this; + } + EmptyDrop.prototype.equals = function (value) { + if (isString(value) || isArray(value)) + return value.length === 0; + if (isObject(value)) + return Object.keys(value).length === 0; + return false; + }; + EmptyDrop.prototype.gt = function () { + return false; + }; + EmptyDrop.prototype.geq = function () { + return false; + }; + EmptyDrop.prototype.lt = function () { + return false; + }; + EmptyDrop.prototype.leq = function () { + return false; + }; + EmptyDrop.prototype.value = function () { + return ''; + }; + return EmptyDrop; +}(Drop)); + +var BlankDrop = /** @class */ (function (_super) { + __extends(BlankDrop, _super); + function BlankDrop() { + return _super !== null && _super.apply(this, arguments) || this; + } + BlankDrop.prototype.equals = function (value) { + if (value === false) + return true; + if (isNil(isDrop(value) ? value.value() : value)) + return true; + if (isString(value)) + return /^\s*$/.test(value); + return _super.prototype.equals.call(this, value); + }; + return BlankDrop; +}(EmptyDrop)); + +var NullDrop = /** @class */ (function (_super) { + __extends(NullDrop, _super); + function NullDrop() { + return _super !== null && _super.apply(this, arguments) || this; + } + NullDrop.prototype.equals = function (value) { + return isNil(isDrop(value) ? value.value() : value) || value instanceof BlankDrop; + }; + NullDrop.prototype.gt = function () { + return false; + }; + NullDrop.prototype.geq = function () { + return false; + }; + NullDrop.prototype.lt = function () { + return false; + }; + NullDrop.prototype.leq = function () { + return false; + }; + NullDrop.prototype.value = function () { + return null; + }; + return NullDrop; +}(Drop)); + +var binaryOperators = { + '==': function (l, r) { + if (isComparable(l)) + return l.equals(r); + if (isComparable(r)) + return r.equals(l); + return l === r; + }, + '!=': function (l, r) { + if (isComparable(l)) + return !l.equals(r); + if (isComparable(r)) + return !r.equals(l); + return l !== r; + }, + '>': function (l, r) { + if (isComparable(l)) + return l.gt(r); + if (isComparable(r)) + return r.lt(l); + return l > r; + }, + '<': function (l, r) { + if (isComparable(l)) + return l.lt(r); + if (isComparable(r)) + return r.gt(l); + return l < r; + }, + '>=': function (l, r) { + if (isComparable(l)) + return l.geq(r); + if (isComparable(r)) + return r.leq(l); + return l >= r; + }, + '<=': function (l, r) { + if (isComparable(l)) + return l.leq(r); + if (isComparable(r)) + return r.geq(l); + return l <= r; + }, 'contains': function (l, r) { if (!l) return false; @@ -857,28 +980,32 @@ var operators$1 = { 'and': function (l, r) { return isTruthy(l) && isTruthy(r); }, 'or': function (l, r) { return isTruthy(l) || isTruthy(r); } }; -function evalExp(exp, scope) { - assert(scope, 'unable to evalExp: scope undefined'); +function parseExp(exp, scope) { + assert(scope, 'unable to parseExp: scope undefined'); var operatorREs = operators; var match; for (var i = 0; i < operatorREs.length; i++) { var operatorRE = operatorREs[i]; var expRE = new RegExp("^(" + quoteBalanced.source + ")(" + operatorRE.source + ")(" + quoteBalanced.source + ")$"); if ((match = exp.match(expRE))) { - var l = evalExp(match[1], scope); - var op = operators$1[match[2].trim()]; - var r = evalExp(match[3], scope); + var l = parseExp(match[1], scope); + var op = binaryOperators[match[2].trim()]; + var r = parseExp(match[3], scope); return op(l, r); } } if ((match = exp.match(rangeLine))) { - var low = evalValue(match[1], scope); - var high = evalValue(match[2], scope); + var low = parseValue(match[1], scope); + var high = parseValue(match[2], scope); return range(low, high + 1); } - return evalValue(exp, scope); + return parseValue(exp, scope); } -function evalValue(str, scope) { +function evalExp(str, scope) { + var value$$1 = parseExp(str, scope); + return isDrop(value$$1) ? value$$1.value() : value$$1; +} +function parseValue(str, scope) { if (!str) return null; str = str.trim(); @@ -886,12 +1013,22 @@ function evalValue(str, scope) { return true; if (str === 'false') return false; + if (str === 'nil' || str === 'null') + return new NullDrop(); + if (str === 'empty') + return new EmptyDrop(); + if (str === 'blank') + return new BlankDrop(); if (!isNaN(Number(str))) return Number(str); if ((str[0] === '"' || str[0] === "'") && str[0] === last(str)) return str.slice(1, -1); return scope.get(str); } +function evalValue(str, scope) { + var value$$1 = parseValue(str, scope); + return isDrop(value$$1) ? value$$1.value() : value$$1; +} function isTruthy(val) { return !isFalsy(val); } diff --git a/dist/liquid.common.js.map b/dist/liquid.common.js.map index c6de9cc1f..d0567af73 100644 --- a/dist/liquid.common.js.map +++ b/dist/liquid.common.js.map @@ -1 +1 @@ -{"version":3,"file":"liquid.common.js","sources":["../src/util/underscore.ts","../src/util/error.ts","../src/util/assert.ts","../src/liquid-options.ts","../src/scope/block-mode.ts","../src/scope/scope.ts","../src/scope/scopes.ts","../src/fs/node.ts","../src/parser/whitespace-ctrl.ts","../src/parser/token.ts","../src/parser/html-token.ts","../src/parser/delimited-token.ts","../src/parser/lexical.ts","../src/parser/tag-token.ts","../src/parser/output-token.ts","../src/parser/tokenizer.ts","../src/render/render.ts","../src/render/syntax.ts","../src/template/tag/hash.ts","../src/template/template.ts","../src/template/tag/tag.ts","../src/template/filter/filter.ts","../src/parser/parse-stream.ts","../src/template/value.ts","../src/template/output.ts","../src/template/html.ts","../src/parser/parser.ts","../src/builtin/tags/assign.ts","../src/util/promise.ts","../src/builtin/tags/for.ts","../src/builtin/tags/capture.ts","../src/builtin/tags/case.ts","../src/builtin/tags/comment.ts","../src/builtin/tags/include.ts","../src/builtin/tags/decrement.ts","../src/builtin/tags/cycle.ts","../src/builtin/tags/if.ts","../src/builtin/tags/increment.ts","../src/builtin/tags/layout.ts","../src/builtin/tags/block.ts","../src/builtin/tags/raw.ts","../src/builtin/tags/tablerow.ts","../src/builtin/tags/unless.ts","../src/builtin/tags/break.ts","../src/builtin/tags/continue.ts","../src/builtin/tags/index.ts","../src/builtin/filters/html.ts","../src/builtin/filters/string.ts","../src/builtin/filters/math.ts","../src/builtin/filters/url.ts","../src/builtin/filters/array.ts","../src/util/strftime.ts","../src/builtin/filters/date.ts","../src/builtin/filters/object.ts","../src/builtin/filters/index.ts","../src/liquid.ts"],"sourcesContent":["const toStr = Object.prototype.toString\nconst arrToStr = Array.prototype.toString\n\n/*\n * Checks if value is classified as a String primitive or object.\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is a string, else false.\n */\nexport function isString (value: any) {\n return toStr.call(value) === '[object String]'\n}\n\nexport function isFunction (value: any) {\n return typeof value === 'function'\n}\n\nexport function promisify (fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise;\nexport function promisify (fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void):(arg1: T1, arg2: T2) => Promise;\nexport function promisify (fn: any) {\n return function (...args: any[]) {\n return new Promise((resolve, reject) => {\n fn(...args, (err: Error, result: any) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value: any): string {\n if (isNil(value)) return ''\n if (isFunction(value.to_liquid)) return stringify(value.to_liquid())\n if (isFunction(value.toLiquid)) return stringify(value.toLiquid())\n if (isFunction(value.to_s)) return value.to_s()\n if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value)\n if (isFunction(value.toString)) return value.toString()\n return toStr.call(value)\n}\n\nfunction defaultToString (value: any): string {\n const cache: string[] = []\n return JSON.stringify(value, (key, value) => {\n if (isObject(value)) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n}\n\nexport function create (proto: T1): T2 {\n return Object.create(proto)\n}\n\nexport function isNil (value: any): boolean {\n return value === null || value === undefined\n}\n\nexport function isArray (value: any): boolean {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value: any): boolean {\n const signature = toStr.call(value)\n // [object XXXError]\n return signature.substr(-6, 5) === 'Error' ||\n (typeof value.message === 'string' && typeof value.name === 'string')\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (\n object: {[key: string]: T} | undefined,\n iteratee: ((val: T, key: string, obj: {[key: string]: T}) => boolean | void)\n) {\n object = object || {}\n for (const k in object) {\n if (object.hasOwnProperty(k)) {\n if (iteratee(object[k], k, object) === false) break\n }\n }\n return object\n}\n\nexport function last (arr: T[]): T;\nexport function last (arr: string): string;\nexport function last (arr: any[] | string): any | string {\n return arr[arr.length - 1]\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value: any): boolean {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\n/*\n * A function to create flexibly-numbered lists of integers,\n * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.\n * Returns a list of integers from start (inclusive) to stop (exclusive),\n * incremented (or decremented) by step, exclusive.\n * Note that ranges that stop before they start are considered to be zero-length instead of\n * negative — if you'd like a negative range, use a negative step.\n */\nexport function range (start: number, stop?: number, step?: number) {\n if (stop === undefined) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr: number[] = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n\nexport function padStart (str: any, length: number, ch: string = ' ') {\n str = String(str)\n let n = length - str.length\n while (n-- > 0) str = ch + str\n return str\n}\n","import * as _ from './underscore'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\n\nabstract class LiquidError extends Error {\n private token: Token\n private originalError: Error\n constructor (err: Error, token: Token) {\n super(err.message)\n this.originalError = err\n this.token = token\n }\n protected update () {\n const err = this.originalError\n const context = mkContext(this.token)\n this.message = mkMessage(err.message, this.token)\n this.stack = this.message + '\\n' + context +\n '\\n' + this.stack + '\\nFrom ' + err.stack\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor (message: string, token: Token) {\n super(new Error(message), token)\n this.name = 'TokenizationError'\n super.update()\n }\n}\n\nexport class ParseError extends LiquidError {\n constructor (err: Error, token: Token) {\n super(err, token)\n this.name = 'ParseError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderError extends LiquidError {\n constructor (err: Error, tpl: ITemplate) {\n super(err, tpl.token)\n this.name = 'RenderError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderBreakError extends Error {\n resolvedHTML: string = ''\n constructor (message: string) {\n super(message)\n this.name = 'RenderBreakError'\n this.message = message + ''\n }\n}\n\nexport class AssertionError extends Error {\n constructor (message: string) {\n super(message)\n this.name = 'AssertionError'\n this.message = message + ''\n }\n}\n\nfunction mkContext (token: Token) {\n const lines = token.input.split('\\n')\n const begin = Math.max(token.line - 2, 1)\n const end = Math.min(token.line + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === token.line) ? '>> ' : ' '\n const num = _.padStart(String(lineNumber), String(end).length)\n const text = lines[lineNumber - 1]\n return `${indicator}${num}| ${text}`\n })\n .join('\\n')\n\n return context\n}\n\nfunction mkMessage (msg: string, token: Token) {\n if (token.file) msg += `, file:${token.file}`\n msg += `, line:${token.line}, col:${token.col}`\n return msg\n}\n","import { AssertionError } from './error'\n\nexport default function (predicate: any, message?: string) {\n if (!predicate) {\n message = message || `expect ${predicate} to be true`\n throw new AssertionError(message)\n }\n}\n","/* eslint-disable camelcase */\n\nimport * as _ from './util/underscore'\n\nexport interface LiquidOptions {\n /** `root` is a directory or an array of directories to resolve layouts and includes, as well as the filename passed in when calling `.renderFile()`. If an array, the files are looked up in the order they occur in the array. Defaults to `[\".\"]` */\n root?: string | string[]\n /** `extname` is used to lookup the template file when filepath doesn't include an extension name. Eg: setting to `\".html\"` will allow including file by basename. Defaults to `\"\"`. */\n extname?: string\n /** `cache` indicates whether or not to cache resolved templates. Defaults to `false`. */\n cache?: boolean\n /** `dynamicPartials`: if set, treat `` parameter in `{%include filepath %}`, `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */\n dynamicPartials?: boolean\n /** `strict_filters` is used to enable strict filter existence. If set to `false`, undefined filters will be rendered as empty string. Otherwise, undefined filters will cause an exception. Defaults to `false`. */\n strict_filters?: boolean\n /** `strict_variables` is used to enable strict variable derivation. If set to `false`, undefined variables will be rendered as empty string. Otherwise, undefined variables will cause an exception. Defaults to `false`. */\n strict_variables?: boolean\n /** `trim_tag_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of tags (`{% %}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_tag_right?: boolean\n /** `trim_tag_left` is similar to `trim_tag_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_tag_left?: boolean\n /** ``trim_output_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_output_right?: boolean\n /** `trim_output_left` is similar to `trim_output_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_output_left?: boolean\n /** `tag_delimiter_left` and `tag_delimiter_right` are used to override the delimiter for liquid tags **/\n tag_delimiter_left?: string,\n tag_delimiter_right?: string,\n /** `output_delimiter_left` and `output_delimiter_right` are used to override the delimiter for liquid outputs **/\n output_delimiter_left?: string,\n output_delimiter_right?: string,\n /** `greedy` is used to specify whether `trim_left`/`trim_right` is greedy. When set to `true`, all consecutive blank characters including `\\n` will be trimed regardless of line breaks. Defaults to `true`. */\n greedy?: boolean\n}\n\ninterface NormalizedOptions extends LiquidOptions {\n root?: string[]\n}\n\nexport interface NormalizedFullOptions extends NormalizedOptions {\n root: string[]\n extname: string\n cache: boolean\n dynamicPartials: boolean\n strict_filters: boolean\n strict_variables: boolean\n trim_tag_right: boolean\n trim_tag_left: boolean\n trim_output_right: boolean\n trim_output_left: boolean\n tag_delimiter_left: string,\n tag_delimiter_right: string,\n output_delimiter_left: string,\n output_delimiter_right: string,\n greedy: boolean\n}\n\nconst defaultOptions: NormalizedFullOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_output_right: false,\n trim_output_left: false,\n greedy: true,\n tag_delimiter_left: '{%',\n tag_delimiter_right: '%}',\n output_delimiter_left: '{{',\n output_delimiter_right: '}}',\n strict_filters: false,\n strict_variables: false\n}\n\nexport function normalize (options?: LiquidOptions): NormalizedOptions {\n options = options || {}\n if (options.hasOwnProperty('root')) {\n options.root = normalizeStringArray(options.root)\n }\n return options as NormalizedOptions\n}\n\nexport function applyDefault (options?: NormalizedOptions): NormalizedFullOptions {\n return { ...defaultOptions, ...options }\n}\n\nfunction normalizeStringArray (value: any): string[] {\n if (_.isArray(value)) return value as string[]\n if (_.isString(value)) return [value as string]\n return []\n}\n","enum BlockMode {\n /* store rendered html into blocks */\n OUTPUT,\n /* output rendered html directly */\n STORE\n}\n\nexport default BlockMode\n","import * as _ from '../util/underscore'\nimport { __assign } from 'tslib'\nimport assert from '../util/assert'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\nimport BlockMode from './block-mode'\nimport IContext from './icontext'\n\nexport default class Scope {\n opts: NormalizedFullOptions\n contexts: Array\n blocks: object = {}\n groups: {[key: string]: number} = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts?: NormalizedFullOptions) {\n this.opts = applyDefault(opts)\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => __assign(ctx, val), {})\n }\n get (path: string): any {\n const paths = this.propertyAccessSeq(path)\n const scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n return paths.reduce((value, key) => this.readProperty(value, key), scope)\n }\n set (path: string, v: any): void {\n const paths = this.propertyAccessSeq(path)\n let scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n paths.some((key, i) => {\n if (!_.isObject(scope)) {\n return true\n }\n if (i === paths.length - 1) {\n scope[key] = v\n return true\n }\n if (undefined === scope[key]) {\n scope[key] = {}\n }\n scope = scope[key]\n return false\n })\n }\n unshift (ctx: object) {\n return this.contexts.unshift(ctx)\n }\n push (ctx: object) {\n return this.contexts.push(ctx)\n }\n pop (ctx?: object): object | undefined {\n if (!arguments.length) {\n return this.contexts.pop()\n }\n const i = this.contexts.findIndex(scope => scope === ctx)\n if (i === -1) {\n throw new TypeError('scope not found, cannot pop')\n }\n return this.contexts.splice(i, 1)[0]\n }\n findContextFor (key: string, filter: ((conttext: object) => boolean) = () => true) {\n for (let i = this.contexts.length - 1; i >= 0; i--) {\n const candidate = this.contexts[i]\n if (!filter(candidate)) continue\n if (key in candidate) {\n return candidate\n }\n }\n return null\n }\n private readProperty (obj: IContext, key: string) {\n let val\n if (_.isNil(obj)) {\n val = undefined\n } else {\n obj = toLiquid(obj)\n val = key === 'size' ? readSize(obj) : obj[key]\n if (_.isFunction(obj.liquid_method_missing)) {\n val = obj.liquid_method_missing!(key)\n }\n }\n if (_.isNil(val) && this.opts.strict_variables) {\n throw new TypeError(`undefined variable: ${key}`)\n }\n return val\n }\n\n /*\n * Parse property access sequence from access string\n * @example\n * accessSeq(\"foo.bar\") // ['foo', 'bar']\n * accessSeq(\"foo['bar']\") // ['foo', 'bar']\n * accessSeq(\"foo['b]r']\") // ['foo', 'b]r']\n * accessSeq(\"foo[bar.coo]\") // ['foo', 'bar'], for bar.coo == 'bar'\n */\n propertyAccessSeq (str: string) {\n str = String(str)\n const seq: string[] = []\n let name = ''\n let j\n let i = 0\n while (i < str.length) {\n switch (str[i]) {\n case '[':\n push()\n\n const delemiter = str[i + 1]\n if (/['\"]/.test(delemiter)) { // foo[\"bar\"]\n j = str.indexOf(delemiter, i + 2)\n assert(j !== -1, `unbalanced ${delemiter}: ${str}`)\n name = str.slice(i + 2, j)\n push()\n i = j + 2\n } else { // foo[bar.coo]\n j = matchRightBracket(str, i + 1)\n assert(j !== -1, `unbalanced []: ${str}`)\n name = str.slice(i + 1, j)\n if (!/^[+-]?\\d+$/.test(name)) { // foo[bar] vs. foo[1]\n name = String(this.get(name))\n }\n push()\n i = j + 1\n }\n break\n case '.':// foo.bar, foo[0].bar\n push()\n i++\n break\n default:// foo.bar\n name += str[i]\n i++\n }\n }\n push()\n\n if (!seq.length) {\n throw new TypeError(`invalid path:\"${str}\"`)\n }\n return seq\n\n function push () {\n if (name.length) seq.push(name)\n name = ''\n }\n }\n}\n\nfunction toLiquid (obj: IContext) {\n if (_.isFunction(obj.to_liquid)) {\n return obj.to_liquid()\n }\n if (_.isFunction(obj.toLiquid)) {\n return obj.toLiquid()\n }\n return obj\n}\n\nfunction readSize (obj: IContext) {\n if (!_.isNil(obj.size)) return obj.size\n if (_.isArray(obj) || _.isString(obj)) return obj.length\n return obj.size\n}\n\nfunction matchRightBracket (str: string, begin: number) {\n let stack = 1 // count of '[' - count of ']'\n for (let i = begin; i < str.length; i++) {\n if (str[i] === '[') {\n stack++\n }\n if (str[i] === ']') {\n stack--\n if (stack === 0) {\n return i\n }\n }\n }\n return -1\n}\n","export class CaptureScope {}\nexport class AssignScope {}\nexport class IncrementScope {}\nexport class DecrementScope {}\n","import * as _ from '../util/underscore'\nimport { resolve, extname } from 'path'\nimport { stat, readFile } from 'fs'\nimport IFS from './ifs'\n\nconst statAsync = _.promisify(stat)\nconst readFileAsync = _.promisify(readFile)\n\nconst fs: IFS = {\n exists: (filepath: string) => {\n return statAsync(filepath).then(() => true).catch(() => false)\n },\n readFile: filepath => {\n return readFileAsync(filepath, 'utf8')\n },\n resolve: (root: string, file: string, ext: string) => {\n if (!extname(file)) file += ext\n return resolve(root, file)\n }\n}\n\nexport default fs\n","import DelimitedToken from 'src/parser/delimited-token'\nimport Token from 'src/parser/token'\nimport TagToken from 'src/parser/tag-token'\nimport { NormalizedFullOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: NormalizedFullOptions) {\n options = { greedy: true, ...options }\n let inRaw = false\n\n tokens.forEach((token: Token, i: number) => {\n if (shouldTrimLeft(token as DelimitedToken, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && (token as TagToken).name === 'raw') inRaw = true\n if (token.type === 'tag' && (token as TagToken).name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token as DelimitedToken, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimLeft || options.trim_tag_left\n if (token.type === 'output') return token.trimLeft || options.trim_output_left\n}\n\nfunction shouldTrimRight (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimRight || options.trim_tag_right\n if (token.type === 'output') return token.trimRight || options.trim_output_right\n}\n\nfunction trimLeft (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rLeft = greedy ? /\\s+$/g : /[\\t\\r ]*$/g\n token.value = token.value.replace(rLeft, '')\n}\n\nfunction trimRight (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rRight = greedy ? /^\\s+/g : /^[\\t\\r ]*\\n?/g\n token.value = token.value.replace(rRight, '')\n}\n","export default class Token {\n type: string = 'notset'\n line: number\n col: number\n raw: string\n input: string\n file?: string\n value: string\n constructor (raw: string, input: string, line: number, col: number, file?: string) {\n this.col = col\n this.line = line\n this.raw = raw\n this.value = raw\n this.input = input\n this.file = file\n }\n}\n","import Token from './token'\n\nexport default class HTMLToken extends Token {\n constructor (str: string, input: string, line: number, col: number, file?: string) {\n super(str, input, line, col, file)\n this.type = 'html'\n this.value = str\n }\n}\n","import Token from './token'\nimport { last } from 'src/util/underscore'\n\nexport default class DelimitedToken extends Token {\n trimLeft: boolean\n trimRight: boolean\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, input, line, pos, file)\n this.trimLeft = value[0] === '-'\n this.trimRight = last(value) === '-'\n this.value = value\n .slice(\n this.trimLeft ? 1 : 0,\n this.trimRight ? -1 : value.length\n )\n .trim()\n }\n}\n","// quote related\nconst singleQuoted = /'[^']*'/\nconst doubleQuoted = /\"[^\"]*\"/\nexport const quoted = new RegExp(`${singleQuoted.source}|${doubleQuoted.source}`)\nexport const quoteBalanced = new RegExp(`(?:${quoted.source}|[^'\"])*`)\n\n// basic types\nexport const number = /[+-]?(?:\\d+\\.?\\d*|\\.?\\d+)/\nexport const bool = /true|false/\n\n// property access\nexport const identifier = /[\\w-]+[?]?/\nexport const subscript = new RegExp(`\\\\[(?:${quoted.source}|[\\\\w-\\\\.]+)\\\\]`)\nexport const literal = new RegExp(`(?:${quoted.source}|${bool.source}|${number.source})`)\nexport const variable = new RegExp(`${identifier.source}(?:\\\\.${identifier.source}|${subscript.source})*`)\n\n// range related\nexport const rangeLimit = new RegExp(`(?:${variable.source}|${number.source})`)\nexport const range = new RegExp(`\\\\(${rangeLimit.source}\\\\.\\\\.${rangeLimit.source}\\\\)`)\nexport const rangeCapture = new RegExp(`\\\\((${rangeLimit.source})\\\\.\\\\.(${rangeLimit.source})\\\\)`)\n\nexport const value = new RegExp(`(?:${variable.source}|${literal.source}|${range.source})`)\n\n// hash related\nexport const hash = new RegExp(`(?:${identifier.source})\\\\s*:\\\\s*(?:${value.source})`)\nexport const hashCapture = new RegExp(`(${identifier.source})\\\\s*:\\\\s*(${value.source})`, 'g')\n\n// full match\nexport const tagLine = new RegExp(`^\\\\s*(${identifier.source})\\\\s*([\\\\s\\\\S]*?)\\\\s*$`)\nexport const numberLine = new RegExp(`^${number.source}$`)\nexport const boolLine = new RegExp(`^${bool.source}$`, 'i')\nexport const quotedLine = new RegExp(`^${quoted.source}$`)\nexport const rangeLine = new RegExp(`^${rangeCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isRange (str: string) {\n return rangeLine.test(str)\n}\n","import DelimitedToken from './delimited-token'\nimport { TokenizationError } from 'src/util/error'\nimport * as lexical from './lexical'\n\nexport default class TagToken extends DelimitedToken {\n name: string\n args: string\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'tag'\n const match = this.value.match(lexical.tagLine)\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, this)\n }\n this.name = match[1]\n this.args = match[2]\n }\n}\n","import DelimitedToken from './delimited-token'\n\nexport default class OutputToken extends DelimitedToken {\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'output'\n }\n}\n","import whiteSpaceCtrl from './whitespace-ctrl'\nimport HTMLToken from './html-token'\nimport TagToken from './tag-token'\nimport Token from './token'\nimport OutputToken from './output-token'\nimport { TokenizationError } from 'src/util/error'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: NormalizedFullOptions\n constructor (options?: NormalizedFullOptions) {\n this.options = applyDefault(options)\n }\n tokenize (input: string, file?: string) {\n const tokens: Token[] = []\n const tagL = this.options.tag_delimiter_left\n const tagR = this.options.tag_delimiter_right\n const outputL = this.options.output_delimiter_left\n const outputR = this.options.output_delimiter_right\n let p = 0\n let curLine = 1\n let state = ParseState.HTML\n let buffer = ''\n let lineBegin = 0\n let line = 1\n let col = 1\n\n while (p < input.length) {\n if (input[p] === '\\n') {\n curLine++\n lineBegin = p + 1\n }\n if (state === ParseState.HTML) {\n if (input.substr(p, outputL.length) === outputL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = outputL\n line = curLine\n col = p - lineBegin + 1\n p += outputL.length\n state = ParseState.OUTPUT\n continue\n } else if (input.substr(p, tagL.length) === tagL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = tagL\n line = curLine\n col = p - lineBegin + 1\n p += tagL.length\n state = ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && input.substr(p, outputR.length) === outputR) {\n buffer += outputR\n tokens.push(new OutputToken(buffer, buffer.slice(outputL.length, -outputR.length), input, line, col, file))\n p += outputR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n } else if (input.substr(p, tagR.length) === tagR) {\n buffer += tagR\n tokens.push(new TagToken(buffer, buffer.slice(tagL.length, -tagR.length), input, line, col, file))\n p += tagR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n }\n buffer += input[p++]\n }\n if (state !== ParseState.HTML) {\n const t = state === ParseState.OUTPUT ? 'output' : 'tag'\n const str = buffer.length > 16 ? buffer.slice(0, 13) + '...' : buffer\n throw new TokenizationError(\n `${t} \"${str}\" not closed`,\n new Token(buffer, input, line, col, file)\n )\n }\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n\n whiteSpaceCtrl(tokens, this.options)\n return tokens\n }\n}\n","import { RenderError } from 'src/util/error'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Render {\n async renderTemplates (templates: ITemplate[], scope: Scope) {\n assert(scope, 'unable to evalTemplates: scope undefined')\n\n let html = ''\n for (const tpl of templates) {\n try {\n html += await tpl.render(scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n e.resolvedHTML = html\n throw e\n }\n throw e.name === 'RenderError' ? e : new RenderError(e, tpl)\n }\n }\n return html\n }\n}\n","import * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport Scope from 'src/scope/scope'\nimport { range, last } from 'src/util/underscore'\n\nconst operators = {\n '==': (l: any, r: any) => l === r,\n '!=': (l: any, r: any) => l !== r,\n '>': (l: any, r: any) => l !== null && r !== null && l > r,\n '<': (l: any, r: any) => l !== null && r !== null && l < r,\n '>=': (l: any, r: any) => l !== null && r !== null && l >= r,\n '<=': (l: any, r: any) => l !== null && r !== null && l <= r,\n 'contains': (l: any, r: any) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l: any, r: any) => isTruthy(l) && isTruthy(r),\n 'or': (l: any, r: any) => isTruthy(l) || isTruthy(r)\n}\n\nexport function evalExp (exp: string, scope: Scope): any {\n assert(scope, 'unable to evalExp: scope undefined')\n const operatorREs = lexical.operators\n let match\n for (let i = 0; i < operatorREs.length; i++) {\n const operatorRE = operatorREs[i]\n const expRE = new RegExp(`^(${lexical.quoteBalanced.source})(${operatorRE.source})(${lexical.quoteBalanced.source})$`)\n if ((match = exp.match(expRE))) {\n const l = evalExp(match[1], scope)\n const op = operators[match[2].trim()]\n const r = evalExp(match[3], scope)\n return op(l, r)\n }\n }\n\n if ((match = exp.match(lexical.rangeLine))) {\n const low = evalValue(match[1], scope)\n const high = evalValue(match[2], scope)\n return range(low, high + 1)\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str: string, scope: Scope) {\n if (!str) return null\n str = str.trim()\n\n if (str === 'true') return true\n if (str === 'false') return false\n if (!isNaN(Number(str))) return Number(str)\n if ((str[0] === '\"' || str[0] === \"'\") && str[0] === last(str)) return str.slice(1, -1)\n return scope.get(str)\n}\n\nexport function isTruthy (val: any): boolean {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val: any): boolean {\n return val === false || undefined === val || val === null\n}\n","import { hashCapture } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\n\n/**\n * Key-Value Pairs Representing Tag Arguments\n * Example:\n * For the markup `{% include 'head.html' foo='bar' %}`,\n * hash['foo'] === 'bar'\n */\nexport default class Hash {\n [key: string]: any\n constructor (markup: string, scope: Scope) {\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n this[k] = evalValue(v, scope)\n }\n }\n}\n","export default abstract class Template {\n token: T;\n constructor (token: T) {\n this.token = token\n }\n}\n","import { create, stringify } from 'src/util/underscore'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITagImpl from './itag-impl'\nimport ITagImplOptions from './itag-impl-options'\nimport Liquid from 'src/liquid'\nimport Hash from './hash'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\n\nexport default class Tag extends Template implements ITemplate {\n name: string\n private impl: ITagImpl\n static impls: { [key: string]: ITagImplOptions } = {}\n\n constructor (token: TagToken, tokens: Token[], liquid: Liquid) {\n super(token)\n this.name = token.name\n\n const impl = Tag.impls[token.name]\n assert(impl, `tag ${token.name} not found`)\n this.impl = create(impl)\n this.impl.liquid = liquid\n if (this.impl.parse) {\n this.impl.parse(token, tokens)\n }\n }\n async render (scope: Scope) {\n const hash = new Hash(this.token.args, scope)\n const impl = this.impl\n if (typeof impl.render !== 'function') {\n return ''\n }\n const html = await impl.render(scope, hash)\n return stringify(html)\n }\n static register (name: string, tag: ITagImplOptions) {\n Tag.impls[name] = tag\n }\n static clear () {\n Tag.impls = {}\n }\n}\n","import { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\nimport { FilterImpl } from './filter-impl'\n\nexport default class Filter {\n name: string\n impl: FilterImpl\n args: string[]\n private static impls: {[key: string]: FilterImpl} = {}\n\n constructor (name: string, args: string[], strictFilters: boolean) {\n const impl = Filter.impls[name]\n if (!impl && strictFilters) throw new TypeError(`undefined filter: ${name}`)\n\n this.name = name\n this.impl = impl || (x => x)\n this.args = args\n }\n render (value: any, scope: Scope): any {\n const args = this.args.map(arg => evalValue(arg, scope))\n return this.impl.apply(null, [value, ...args])\n }\n static register (name: string, filter: FilterImpl) {\n Filter.impls[name] = filter\n }\n static clear () {\n Filter.impls = {}\n }\n}\n","import Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from './tag-token'\n\ntype ParseToken = ((token: Token, remainTokens: Array) => ITemplate)\n\nexport default class ParseStream {\n private tokens: Array\n private handlers: {[key: string]: (arg: any) => void} = {}\n private stopRequested: boolean = false\n private parseToken: ParseToken\n\n constructor (tokens: Array, parseToken: ParseToken) {\n this.tokens = tokens\n this.parseToken = parseToken\n }\n on (name: string, cb: (arg: T) => void): ParseStream {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: T) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n return false\n }\n start () {\n this.trigger('start')\n let token: Token | undefined\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' && this.trigger(`tag:${(token).name}`, token)) {\n continue\n }\n const template = this.parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n }\n stop () {\n this.stopRequested = true\n return this\n }\n}\n","import { evalExp } from 'src/render/syntax'\nimport Filter from './filter/filter'\nimport Scope from 'src/scope/scope'\n\nenum ParseState {\n INIT = 0,\n FILTER_NAME = 1,\n FILTER_ARG = 2\n}\n\nexport default class {\n initial: any\n filters: Array = []\n\n /**\n * @param str value string, like: \"i have a dream | truncate: 3\n */\n constructor (str: string, strictFilters: boolean) {\n let buffer = ''\n let quoted = ''\n let state = ParseState.INIT\n let sealed = false\n\n let filterName = ''\n let filterArgs: string[] = []\n\n for (let i = 0; i < str.length; i++) {\n if (quoted) {\n if (str[i] === quoted) {\n quoted = ''\n sealed = true\n }\n buffer += str[i]\n } else if (/\\s/.test(str[i])) {\n if (!buffer) continue\n else sealed = true\n } else if (str[i] === '|') {\n if (state === ParseState.INIT) {\n this.initial = buffer\n } else {\n if (state === ParseState.FILTER_NAME) filterName = buffer\n else filterArgs.push(buffer)\n this.filters.push(new Filter(filterName, filterArgs, strictFilters))\n filterName = ''\n filterArgs = []\n }\n state = ParseState.FILTER_NAME\n buffer = ''\n sealed = false\n } else if (state === ParseState.FILTER_NAME && str[i] === ':') {\n filterName = buffer\n state = ParseState.FILTER_ARG\n buffer = ''\n sealed = false\n } else if (state === ParseState.FILTER_ARG && str[i] === ',') {\n filterArgs.push(buffer)\n buffer = ''\n sealed = false\n } else if (sealed) continue\n else {\n if ((str[i] === '\"' || str[i] === \"'\") && !quoted) quoted = str[i]\n buffer += str[i]\n }\n }\n\n if (buffer) {\n if (state === ParseState.INIT) this.initial = buffer\n else if (state === ParseState.FILTER_NAME) this.filters.push(new Filter(buffer, [], strictFilters))\n else {\n filterArgs.push(buffer)\n this.filters.push(new Filter(filterName, filterArgs, strictFilters))\n }\n }\n }\n value (scope: Scope) {\n return this.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(this.initial, scope))\n }\n}\n","import Value from './value'\nimport { stringify } from 'src/util/underscore'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport OutputToken from 'src/parser/output-token'\n\nexport default class Output extends Template implements ITemplate {\n value: Value\n constructor (token: OutputToken, strictFilters: boolean) {\n super(token)\n this.value = new Value(token.value, strictFilters)\n }\n async render (scope: Scope): Promise {\n const html = await this.value.value(scope)\n return stringify(html)\n }\n}\n","import Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport HTMLToken from 'src/parser/html-token'\n\nexport default class extends Template implements ITemplate {\n str: string\n constructor (token: HTMLToken) {\n super(token)\n this.str = token.value\n }\n async render (): Promise {\n return this.str\n }\n}\n","import { ParseError } from '../util/error'\nimport Liquid from 'src/liquid'\nimport ParseStream from './parse-stream'\nimport Token from './token'\nimport TagToken from './tag-token'\nimport OutputToken from './output-token'\nimport Tag from 'src/template/tag/tag'\nimport Output from 'src/template/output'\nimport HTML from 'src/template/html'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Parser {\n liquid: Liquid\n\n constructor (liquid: Liquid) {\n this.liquid = liquid\n }\n parse (tokens: Array) {\n let token\n const templates: ITemplate[] = []\n while ((token = tokens.shift())) {\n templates.push(this.parseToken(token, tokens))\n }\n return templates\n }\n parseToken (token: Token, remainTokens: Array) {\n try {\n if (token.type === 'tag') {\n return new Tag(token as TagToken, remainTokens, this.liquid)\n }\n if (token.type === 'output') {\n return new Output(token as OutputToken, this.liquid.options.strict_filters)\n }\n return new HTML(token)\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n parseStream (tokens: Array) {\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens))\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { AssignScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(re) as RegExpMatchArray\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (scope: Scope) {\n const ctx = new AssignScope()\n ctx[this.key] = this.liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n} as ITagImplOptions\n","/*\n * Call functions in serial until someone rejected.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function mapSeries (\n iterable: T1[],\n iteratee: (item: T1, idx: number, iterable: T1[]) => Promise | T2\n): Promise {\n let ret = Promise.resolve(0)\n const result: T2[] = []\n iterable.forEach(function (item, idx) {\n ret = ret\n .then(() => iteratee(item, idx, iterable))\n .then(x => result.push(x))\n })\n return ret.then(() => result)\n}\n","import { mapSeries } from 'src/util/promise'\nimport { isString, isObject, isArray } from 'src/util/underscore'\nimport { evalExp } from 'src/render/syntax'\nimport assert from 'src/util/assert'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n type: 'block',\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n this.variable = match[1]\n this.collection = match[2]\n this.reversed = !!match[3]\n\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endfor', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection] as string[]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]]) as Array<[string, any]>\n }\n }\n if (!isArray(collection) || !collection.length) {\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n if (this.reversed) collection.reverse()\n\n const contexts = collection.map((item: string, i: number) => {\n const ctx = {}\n ctx[this.variable] = item\n ctx['forloop'] = {\n first: i === 0,\n index: i + 1,\n index0: i,\n last: i === collection.length - 1,\n length: collection.length,\n rindex: collection.length - i,\n rindex0: collection.length - i - 1\n }\n return ctx\n })\n\n let html = ''\n let finished = false\n await mapSeries(contexts, async context => {\n if (finished) return\n\n scope.push(context)\n try {\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n html += e.resolvedHTML\n if (e.message === 'break') {\n finished = true\n }\n } else throw e\n }\n scope.pop(context)\n })\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = tagToken.args.match(re) as RegExpMatchArray\n assert(match, `${tagToken.args} not valid identifier`)\n\n this.variable = match[1]\n this.templates = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', () => stream.stop())\n .on('template', (tpl) => this.templates.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const html = await this.liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = new CaptureScope()\n ctx[this.variable] = html\n scope.push(ctx)\n }\n} as ITagImplOptions\n","import { evalExp } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p: ITemplate[] = []\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:when', (token: TagToken) => {\n this.cases.push({\n val: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endcase', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = evalExp(branch.val, scope)\n const cond = evalExp(this.cond, scope)\n if (val === cond) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value, quotedLine } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /[^\\s,]+/\nconst withRE = new RegExp(`with\\\\s+(${value.source})`)\n\nexport default {\n parse: function (token: TagToken) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticValue = match[0]\n }\n\n match = value.exec(token.args)\n if (match) {\n this.value = match[0]\n }\n\n match = withRE.exec(token.args)\n if (match) {\n this.with = match[1]\n }\n },\n render: async function (scope: Scope, hash: Hash) {\n let filepath\n if (scope.opts.dynamicPartials) {\n if (quotedLine.exec(this.value)) {\n const template = this.value.slice(1, -1)\n filepath = await this.liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = evalValue(this.value, scope)\n }\n } else {\n filepath = this.staticValue\n }\n assert(filepath, `cannot include with empty filename`)\n\n const originBlocks = scope.blocks\n const originBlockMode = scope.blockMode\n\n scope.blocks = {}\n scope.blockMode = BlockMode.OUTPUT\n if (this.with) {\n hash[filepath] = evalValue(this.with, scope)\n }\n const templates = await this.liquid.getTemplate(filepath, scope.opts)\n scope.push(hash)\n const html = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.blocks = originBlocks\n scope.blockMode = originBlockMode\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, DecrementScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(identifier) as RegExpMatchArray\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope: Scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new DecrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n return --context[this.variable]\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\nconst candidatesRE = new RegExp(rValue.source, 'g')\n\nexport default {\n parse: function (tagToken: TagToken) {\n let match: RegExpExecArray | null = groupRE.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.group = match[1] || ''\n const candidates = match[2]\n\n this.candidates = []\n\n while ((match = candidatesRE.exec(candidates))) {\n this.candidates.push(match[0])\n }\n assert(this.candidates.length, `empty candidates: ${tagToken.raw}`)\n },\n\n render: function (scope: Scope) {\n const group = evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n const groups = scope.groups\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n\n return evalValue(candidate, scope)\n }\n}\n","import { evalExp, isTruthy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', (token: TagToken) => {\n this.branches.push({\n cond: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endif', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (const branch of this.branches) {\n const cond = evalExp(branch.cond, scope)\n if (isTruthy(cond)) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match![0]\n },\n render: function (scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new IncrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n const val = context[this.variable]\n context[this.variable]++\n return val\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /\\S+/\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticLayout = match[0]\n }\n\n match = rValue.exec(token.args)\n if (match) {\n this.layout = match[0]\n }\n\n this.tpls = this.liquid.parser.parse(remainTokens)\n },\n render: async function (scope: Scope, hash: Hash) {\n const layout = scope.opts.dynamicPartials\n ? evalValue(this.layout, scope)\n : this.staticLayout\n assert(layout, `cannot apply layout with empty filename`)\n\n // render the remaining tokens immediately\n scope.blockMode = BlockMode.STORE\n const html = await this.liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.blocks[''] === undefined) {\n scope.blocks[''] = html\n }\n const templates = await this.liquid.getTemplate(layout, scope.opts)\n scope.push(hash)\n scope.blockMode = BlockMode.OUTPUT\n const partial = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n} as ITagImplOptions\n","import BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n this.tpls = [] as ITemplate[]\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', (tpl: ITemplate) => this.tpls.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${token.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const childDefined = scope.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await this.liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.blockMode === BlockMode.STORE) {\n scope.blocks[this.block] = html\n return ''\n }\n return html\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.tokens = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endraw') stream.stop()\n else this.tokens.push(token)\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: function () {\n return this.tokens.map((token: Token) => token.raw).join('')\n }\n}\n","import { mapSeries } from 'src/util/promise'\nimport assert from 'src/util/assert'\nimport { evalExp } from 'src/render/syntax'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.variable = match[1]\n this.collection = match[2]\n this.templates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope) || []\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = hash.cols || collection.length\n const contexts = collection.map((item: any) => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row: number = 0\n let html = ''\n await mapSeries(contexts, async (context, idx) => {\n row = Math.floor(idx / cols) + 1\n const col = (idx % cols) + 1\n if (col === 1) {\n if (row !== 1) {\n html += ''\n }\n html += ``\n }\n\n html += ``\n scope.push(context)\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n html += ''\n scope.pop(context)\n return html\n })\n if (row > 0) {\n html += ''\n }\n return html\n }\n} as ITagImplOptions\n","import { evalExp, isFalsy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n const cond = evalExp(this.cond, scope)\n return isFalsy(cond)\n ? this.liquid.renderer.renderTemplates(this.templates, scope)\n : this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('break')\n }\n}\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('continue')\n }\n}\n","import assign from './assign'\nimport For from './for'\nimport capture from './capture'\nimport Case from './case'\nimport comment from './comment'\nimport include from './include'\nimport decrement from './decrement'\nimport cycle from './cycle'\nimport If from './if'\nimport increment from './increment'\nimport layout from './layout'\nimport block from './block'\nimport raw from './raw'\nimport tablerow from './tablerow'\nimport unless from './unless'\nimport Break from './break'\nimport Continue from './continue'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst tags: { [key: string]: ITagImplOptions } = {\n assign, 'for': For, capture, 'case': Case, comment, include, decrement, increment, cycle, 'if': If, layout, block, raw, tablerow, unless, 'break': Break, 'continue': Continue\n}\n\nexport default tags\n","const escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nfunction escape (str: string) {\n return String(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str: string) {\n return String(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nexport default {\n 'escape': escape,\n 'escape_once': (str: string) => escape(unescape(str)),\n 'newline_to_br': (v: string) => v.replace(/\\n/g, '
'),\n 'strip_html': (v: string) => v.replace(/|||<.*?>/g, '')\n}\n","import { FilterImpl } from 'src/template/filter/filter-impl'\n\nexport default {\n 'append': (v: string, arg: string) => v + arg,\n 'prepend': (v: string, arg: string) => arg + v,\n 'capitalize': (str: string) => String(str).charAt(0).toUpperCase() + str.slice(1),\n 'lstrip': (v: string) => String(v).replace(/^\\s+/, ''),\n 'downcase': (v: string) => v.toLowerCase(),\n 'upcase': (str: string) => String(str).toUpperCase(),\n 'remove': (v: string, arg: string) => v.split(arg).join(''),\n 'remove_first': (v: string, l: string) => v.replace(l, ''),\n 'replace': (v: string, pattern: string, replacement: string) =>\n String(v).split(pattern).join(replacement),\n 'replace_first': (v: string, arg1: string, arg2: string) => String(v).replace(arg1, arg2),\n 'rstrip': (str: string) => String(str).replace(/\\s+$/, ''),\n 'split': (v: string, arg: string) => String(v).split(arg),\n 'strip': (v: string) => String(v).trim(),\n 'strip_newlines': (v: string) => String(v).replace(/\\n/g, ''),\n 'truncate': (v: string, l: number = 50, o: string = '...') => {\n v = String(v)\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v: string, l: number = 15, o: string = '...') => {\n const arr = v.split(/\\s+/)\n let ret = arr.slice(0, l).join(' ')\n if (arr.length >= l) ret += o\n return ret\n }\n} as {[key: string]: FilterImpl}\n","export default {\n 'abs': (v: number) => Math.abs(v),\n 'ceil': (v: number) => Math.ceil(v),\n 'divided_by': (v: number, arg: number) => v / arg,\n 'floor': (v: number) => Math.floor(v),\n 'minus': bindFixed((v: number, arg: number) => v - arg),\n 'modulo': bindFixed((v: number, arg: number) => v % arg),\n 'round': (v: number, arg: number = 0) => {\n const amp = Math.pow(10, arg)\n return Math.round(v * amp) / amp\n },\n 'plus': bindFixed((v: number, arg: number) => Number(v) + Number(arg)),\n 'times': (v: number, arg: number) => v * arg\n}\n\nfunction getFixed (v: number) {\n const p = String(v).split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction bindFixed (cb: (v: number, arg: number) => number) {\n return (l: number, r: number) => {\n const f = Math.max(getFixed(l), getFixed(r))\n return cb(l, r).toFixed(f)\n }\n}\n","export default {\n 'url_decode': (x: string) => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': (x: string) => x.split(' ').map(encodeURIComponent).join('+')\n}\n","import { last } from 'src/util/underscore'\n\nexport default {\n 'join': (v: any[], arg: string) => v.join(arg === undefined ? ' ' : arg),\n 'last': (v: T[]): T => last(v),\n 'first': (v: T[]): T => v[0],\n 'map': (arr: {[key: string]: T1}[], arg: string): T1[] => arr.map(v => v[arg]),\n 'reverse': (v: any[]) => v.reverse(),\n 'sort': (v: T[], arg: (lhs: T, rhs: T) => number) => v.sort(arg),\n 'size': (v: string | any[]) => v.length,\n 'concat': (v: T1[], arg: T2[] | T2): Array => Array.prototype.concat.call(v, arg),\n 'slice': (v: T[], begin: number, length: number): T[] => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'uniq': function (arr: T[]): T[] {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(String(val))) return false\n u[String(val)] = true\n return true\n })\n }\n}\n","import { padStart } from './underscore'\n\nconst monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst monthNamesShort = monthNames.map(abbr)\nconst dayNamesShort = dayNames.map(abbr)\nconst suffixes = {\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n 'default': 'th'\n}\n\nfunction abbr (str: string) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d: Date) {\n const feb = _date.isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n },\n\n getDayOfYear: function (d: Date) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += _date.daysInMonth(d)[i]\n }\n return num + d.getDate()\n },\n\n getWeekOfYear: function (d: Date, startDay: number) {\n // Skip to startDay of this week\n const now = this.getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return padStart(String(Math.floor((now - then) / 7) + 1), 2, '0')\n },\n\n isLeapYear: function (d: Date) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d: Date) {\n const str = d.getDate().toString()\n const index = parseInt(str.slice(-1))\n return suffixes[index] || suffixes['default']\n },\n\n century: function (d: Date) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst formatCodes = {\n a: function (d: Date) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d: Date) {\n return dayNames[d.getDay()]\n },\n b: function (d: Date) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d: Date) {\n return monthNames[d.getMonth()]\n },\n c: function (d: Date) {\n return d.toLocaleString()\n },\n C: function (d: Date) {\n return _date.century(d)\n },\n d: function (d: Date) {\n return padStart(d.getDate(), 2, '0')\n },\n e: function (d: Date) {\n return padStart(d.getDate(), 2)\n },\n H: function (d: Date) {\n return padStart(d.getHours(), 2, '0')\n },\n I: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2, '0')\n },\n j: function (d: Date) {\n return padStart(_date.getDayOfYear(d), 3, '0')\n },\n k: function (d: Date) {\n return padStart(d.getHours(), 2)\n },\n l: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2)\n },\n L: function (d: Date) {\n return padStart(d.getMilliseconds(), 3, '0')\n },\n m: function (d: Date) {\n return padStart(d.getMonth() + 1, 2, '0')\n },\n M: function (d: Date) {\n return padStart(d.getMinutes(), 2, '0')\n },\n p: function (d: Date) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d: Date) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d: Date) {\n return _date.getSuffix(d)\n },\n s: function (d: Date) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d: Date) {\n return padStart(d.getSeconds(), 2, '0')\n },\n u: function (d: Date) {\n return d.getDay() || 7\n },\n U: function (d: Date) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d: Date) {\n return d.getDay()\n },\n W: function (d: Date) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d: Date) {\n return d.toLocaleDateString()\n },\n X: function (d: Date) {\n return d.toLocaleTimeString()\n },\n y: function (d: Date) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d: Date) {\n return d.getFullYear()\n },\n z: function (d: Date) {\n const tz = d.getTimezoneOffset() / 60 * 100\n return (tz > 0 ? '-' : '+') + padStart(String(Math.abs(tz)), 4, '0')\n },\n '%': function () {\n return '%'\n }\n};\n(formatCodes as any).h = formatCodes.b;\n(formatCodes as any).N = formatCodes.L\n\nexport default function (d: Date, format: string) {\n let output = ''\n let remaining = format\n\n while (true) {\n const r = /%./g\n const results = r.exec(remaining)\n\n // No more format codes. Add the remaining text and return\n if (!results) {\n return output + remaining\n }\n\n // Add the preceding text\n output += remaining.slice(0, r.lastIndex - 2)\n remaining = remaining.slice(r.lastIndex)\n\n // Add the format code\n const ch = results[0].charAt(1)\n const func = formatCodes[ch]\n output += func ? func(d) : '%' + ch\n }\n}\n","import strftime from 'src/util/strftime'\nimport { isString } from 'src/util/underscore'\n\nexport default {\n 'date': (v: string | Date, arg: string) => {\n let date = v\n if (v === 'now') {\n date = new Date()\n } else if (isString(v)) {\n date = new Date(v)\n }\n return isValidDate(date) ? strftime(date, arg) : v\n }\n}\n\nfunction isValidDate (date: any): date is Date {\n return date instanceof Date && !isNaN(date.getTime())\n}\n","import { isTruthy } from 'src/render/syntax'\n\nexport default {\n 'default': (v: T1, arg: T2): T1 | T2 => isTruthy(v) ? v : arg\n}\n","import html from './html'\nimport str from './string'\nimport math from './math'\nimport url from './url'\nimport array from './array'\nimport date from './date'\nimport obj from './object'\n\nexport default { ...html, ...str, ...math, ...url, ...date, ...obj, ...array }\n","import Scope from './scope/scope'\nimport * as Types from './types'\nimport fs from 'src/fs'\nimport * as _ from './util/underscore'\nimport ITemplate from './template/itemplate'\nimport Tokenizer from './parser/tokenizer'\nimport Render from './render/render'\nimport Tag from './template/tag/tag'\nimport Filter from './template/filter/filter'\nimport Parser from './parser/parser'\nimport ITagImplOptions from './template/tag/itag-impl-options'\nimport Value from './template/value'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './render/syntax'\nimport builtinTags from './builtin/tags'\nimport builtinFilters from './builtin/filters'\nimport { LiquidOptions, NormalizedFullOptions, applyDefault, normalize } from './liquid-options'\nimport { FilterImpl } from './template/filter/filter-impl'\n\nexport default class Liquid {\n public options: NormalizedFullOptions\n public renderer: Render\n public parser: Parser\n private cache: object = {}\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n this.options = applyDefault(normalize(opts))\n this.parser = new Parser(this)\n this.renderer = new Render()\n this.tokenizer = new Tokenizer(this.options)\n\n _.forOwn(builtinTags, (conf, name) => this.registerTag(name, conf))\n _.forOwn(builtinFilters, (handler, name) => this.registerFilter(name, handler))\n }\n parse (html: string, filepath?: string) {\n const tokens = this.tokenizer.tokenize(html, filepath)\n return this.parser.parse(tokens)\n }\n render (tpl: Array, ctx?: object, opts?: LiquidOptions) {\n const options = { ...this.options, ...normalize(opts) }\n const scope = new Scope(ctx, options)\n return this.renderer.renderTemplates(tpl, scope)\n }\n async parseAndRender (html: string, ctx?: object, opts?: LiquidOptions) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n }\n async getTemplate (file: string, opts?: LiquidOptions) {\n const options = normalize(opts)\n const roots = options.root ? [...options.root, ...this.options.root] : this.options.root\n const paths = roots.map(root => fs.resolve(root, file, this.options.extname))\n\n for (const filepath of paths) {\n if (!(await fs.exists(filepath))) continue\n\n if (this.options.cache && this.cache[filepath]) return this.cache[filepath]\n const value = this.parse(await fs.readFile(filepath), filepath)\n if (this.options.cache) this.cache[filepath] = value\n return value\n }\n\n const err = new Error('ENOENT') as any\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`\n err.code = 'ENOENT'\n throw err\n }\n async renderFile (file: string, ctx?: object, opts?: LiquidOptions) {\n const options = normalize(opts)\n const templates = await this.getTemplate(file, options)\n return this.render(templates, ctx, opts)\n }\n evalValue (str: string, scope: Scope) {\n return new Value(str, this.options.strict_filters).value(scope)\n }\n registerFilter (name: string, filter: FilterImpl) {\n return Filter.register(name, filter)\n }\n registerTag (name: string, tag: ITagImplOptions) {\n return Tag.register(name, tag)\n }\n plugin (plugin: (this: Liquid, L: typeof Liquid) => void) {\n return plugin.call(this, Liquid)\n }\n express () {\n const self = this\n return function (this: any, filePath: string, ctx: object, cb: (err: Error | null, html?: string) => void) {\n const opts = { root: this.root }\n self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb)\n }\n }\n static default = Liquid\n static isTruthy = isTruthy\n static isFalsy = isFalsy\n static evalExp = evalExp\n static evalValue = evalValue\n static Types = Types\n}\n"],"names":["tslib_1.__extends","_\r\n .range","_.padStart","_.isArray","_.isString","BlockMode","path","_.last","_.isObject","_.isNil","_.isFunction","_.promisify","stat","readFile","fs","extname","resolve","range","value","lexical.tagLine","operators","lexical.operators","lexical.quoteBalanced","lexical.rangeLine","ParseState","Value","HTML","re","hash","rValue","staticFileRE","_.forOwn","builtinTags"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"liquid.common.js","sources":["../src/util/underscore.ts","../src/util/error.ts","../src/util/assert.ts","../src/liquid-options.ts","../src/scope/block-mode.ts","../src/scope/scope.ts","../src/scope/scopes.ts","../src/fs/node.ts","../src/parser/whitespace-ctrl.ts","../src/parser/token.ts","../src/parser/html-token.ts","../src/parser/delimited-token.ts","../src/parser/lexical.ts","../src/parser/tag-token.ts","../src/parser/output-token.ts","../src/parser/tokenizer.ts","../src/render/render.ts","../src/drop/icomparable.ts","../src/drop/drop.ts","../src/drop/idrop.ts","../src/drop/empty-drop.ts","../src/drop/blank-drop.ts","../src/drop/null-drop.ts","../src/render/syntax.ts","../src/template/tag/hash.ts","../src/template/template.ts","../src/template/tag/tag.ts","../src/template/filter/filter.ts","../src/parser/parse-stream.ts","../src/template/value.ts","../src/template/output.ts","../src/template/html.ts","../src/parser/parser.ts","../src/builtin/tags/assign.ts","../src/util/promise.ts","../src/builtin/tags/for.ts","../src/builtin/tags/capture.ts","../src/builtin/tags/case.ts","../src/builtin/tags/comment.ts","../src/builtin/tags/include.ts","../src/builtin/tags/decrement.ts","../src/builtin/tags/cycle.ts","../src/builtin/tags/if.ts","../src/builtin/tags/increment.ts","../src/builtin/tags/layout.ts","../src/builtin/tags/block.ts","../src/builtin/tags/raw.ts","../src/builtin/tags/tablerow.ts","../src/builtin/tags/unless.ts","../src/builtin/tags/break.ts","../src/builtin/tags/continue.ts","../src/builtin/tags/index.ts","../src/builtin/filters/html.ts","../src/builtin/filters/string.ts","../src/builtin/filters/math.ts","../src/builtin/filters/url.ts","../src/builtin/filters/array.ts","../src/util/strftime.ts","../src/builtin/filters/date.ts","../src/builtin/filters/object.ts","../src/builtin/filters/index.ts","../src/liquid.ts"],"sourcesContent":["const toStr = Object.prototype.toString\nconst arrToStr = Array.prototype.toString\n\n/*\n * Checks if value is classified as a String primitive or object.\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is a string, else false.\n */\nexport function isString (value: any): value is string {\n return toStr.call(value) === '[object String]'\n}\n\nexport function isFunction (value: any): value is Function {\n return typeof value === 'function'\n}\n\nexport function promisify (fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise;\nexport function promisify (fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void):(arg1: T1, arg2: T2) => Promise;\nexport function promisify (fn: any) {\n return function (...args: any[]) {\n return new Promise((resolve, reject) => {\n fn(...args, (err: Error, result: any) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value: any): string {\n if (isNil(value)) return ''\n if (isFunction(value.to_liquid)) return stringify(value.to_liquid())\n if (isFunction(value.toLiquid)) return stringify(value.toLiquid())\n if (isFunction(value.to_s)) return value.to_s()\n if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value)\n if (isFunction(value.toString)) return value.toString()\n return toStr.call(value)\n}\n\nfunction defaultToString (value: any): string {\n const cache: any[] = []\n return JSON.stringify(value, (key, value) => {\n if (isObject(value)) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n}\n\nexport function create (proto: T1): T2 {\n return Object.create(proto)\n}\n\nexport function isNil (value: any): boolean {\n return value === null || value === undefined\n}\n\nexport function isArray (value: any): value is any[] {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value: any): value is Error {\n const signature = toStr.call(value)\n // [object XXXError]\n return signature.substr(-6, 5) === 'Error' ||\n (typeof value.message === 'string' && typeof value.name === 'string')\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (\n object: {[key: string]: T} | undefined,\n iteratee: ((val: T, key: string, obj: {[key: string]: T}) => boolean | void)\n) {\n object = object || {}\n for (const k in object) {\n if (object.hasOwnProperty(k)) {\n if (iteratee(object[k], k, object) === false) break\n }\n }\n return object\n}\n\nexport function last (arr: T[]): T;\nexport function last (arr: string): string;\nexport function last (arr: any[] | string): any | string {\n return arr[arr.length - 1]\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value: any): value is object {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\n/*\n * A function to create flexibly-numbered lists of integers,\n * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.\n * Returns a list of integers from start (inclusive) to stop (exclusive),\n * incremented (or decremented) by step, exclusive.\n * Note that ranges that stop before they start are considered to be zero-length instead of\n * negative — if you'd like a negative range, use a negative step.\n */\nexport function range (start: number, stop?: number, step?: number) {\n if (stop === undefined) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr: number[] = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n\nexport function padStart (str: any, length: number, ch: string = ' ') {\n str = String(str)\n let n = length - str.length\n while (n-- > 0) str = ch + str\n return str\n}\n","import * as _ from './underscore'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\n\nabstract class LiquidError extends Error {\n private token: Token\n private originalError: Error\n constructor (err: Error, token: Token) {\n super(err.message)\n this.originalError = err\n this.token = token\n }\n protected update () {\n const err = this.originalError\n const context = mkContext(this.token)\n this.message = mkMessage(err.message, this.token)\n this.stack = this.message + '\\n' + context +\n '\\n' + this.stack + '\\nFrom ' + err.stack\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor (message: string, token: Token) {\n super(new Error(message), token)\n this.name = 'TokenizationError'\n super.update()\n }\n}\n\nexport class ParseError extends LiquidError {\n constructor (err: Error, token: Token) {\n super(err, token)\n this.name = 'ParseError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderError extends LiquidError {\n constructor (err: Error, tpl: ITemplate) {\n super(err, tpl.token)\n this.name = 'RenderError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderBreakError extends Error {\n resolvedHTML: string = ''\n constructor (message: string) {\n super(message)\n this.name = 'RenderBreakError'\n this.message = message + ''\n }\n}\n\nexport class AssertionError extends Error {\n constructor (message: string) {\n super(message)\n this.name = 'AssertionError'\n this.message = message + ''\n }\n}\n\nfunction mkContext (token: Token) {\n const lines = token.input.split('\\n')\n const begin = Math.max(token.line - 2, 1)\n const end = Math.min(token.line + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === token.line) ? '>> ' : ' '\n const num = _.padStart(String(lineNumber), String(end).length)\n const text = lines[lineNumber - 1]\n return `${indicator}${num}| ${text}`\n })\n .join('\\n')\n\n return context\n}\n\nfunction mkMessage (msg: string, token: Token) {\n if (token.file) msg += `, file:${token.file}`\n msg += `, line:${token.line}, col:${token.col}`\n return msg\n}\n","import { AssertionError } from './error'\n\nexport default function (predicate: any, message?: string) {\n if (!predicate) {\n message = message || `expect ${predicate} to be true`\n throw new AssertionError(message)\n }\n}\n","/* eslint-disable camelcase */\n\nimport * as _ from './util/underscore'\n\nexport interface LiquidOptions {\n /** `root` is a directory or an array of directories to resolve layouts and includes, as well as the filename passed in when calling `.renderFile()`. If an array, the files are looked up in the order they occur in the array. Defaults to `[\".\"]` */\n root?: string | string[]\n /** `extname` is used to lookup the template file when filepath doesn't include an extension name. Eg: setting to `\".html\"` will allow including file by basename. Defaults to `\"\"`. */\n extname?: string\n /** `cache` indicates whether or not to cache resolved templates. Defaults to `false`. */\n cache?: boolean\n /** `dynamicPartials`: if set, treat `` parameter in `{%include filepath %}`, `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */\n dynamicPartials?: boolean\n /** `strict_filters` is used to enable strict filter existence. If set to `false`, undefined filters will be rendered as empty string. Otherwise, undefined filters will cause an exception. Defaults to `false`. */\n strict_filters?: boolean\n /** `strict_variables` is used to enable strict variable derivation. If set to `false`, undefined variables will be rendered as empty string. Otherwise, undefined variables will cause an exception. Defaults to `false`. */\n strict_variables?: boolean\n /** `trim_tag_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of tags (`{% %}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_tag_right?: boolean\n /** `trim_tag_left` is similar to `trim_tag_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_tag_left?: boolean\n /** ``trim_output_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_output_right?: boolean\n /** `trim_output_left` is similar to `trim_output_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_output_left?: boolean\n /** `tag_delimiter_left` and `tag_delimiter_right` are used to override the delimiter for liquid tags **/\n tag_delimiter_left?: string,\n tag_delimiter_right?: string,\n /** `output_delimiter_left` and `output_delimiter_right` are used to override the delimiter for liquid outputs **/\n output_delimiter_left?: string,\n output_delimiter_right?: string,\n /** `greedy` is used to specify whether `trim_left`/`trim_right` is greedy. When set to `true`, all consecutive blank characters including `\\n` will be trimed regardless of line breaks. Defaults to `true`. */\n greedy?: boolean\n}\n\ninterface NormalizedOptions extends LiquidOptions {\n root?: string[]\n}\n\nexport interface NormalizedFullOptions extends NormalizedOptions {\n root: string[]\n extname: string\n cache: boolean\n dynamicPartials: boolean\n strict_filters: boolean\n strict_variables: boolean\n trim_tag_right: boolean\n trim_tag_left: boolean\n trim_output_right: boolean\n trim_output_left: boolean\n tag_delimiter_left: string,\n tag_delimiter_right: string,\n output_delimiter_left: string,\n output_delimiter_right: string,\n greedy: boolean\n}\n\nconst defaultOptions: NormalizedFullOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_output_right: false,\n trim_output_left: false,\n greedy: true,\n tag_delimiter_left: '{%',\n tag_delimiter_right: '%}',\n output_delimiter_left: '{{',\n output_delimiter_right: '}}',\n strict_filters: false,\n strict_variables: false\n}\n\nexport function normalize (options?: LiquidOptions): NormalizedOptions {\n options = options || {}\n if (options.hasOwnProperty('root')) {\n options.root = normalizeStringArray(options.root)\n }\n return options as NormalizedOptions\n}\n\nexport function applyDefault (options?: NormalizedOptions): NormalizedFullOptions {\n return { ...defaultOptions, ...options }\n}\n\nfunction normalizeStringArray (value: any): string[] {\n if (_.isArray(value)) return value as string[]\n if (_.isString(value)) return [value as string]\n return []\n}\n","enum BlockMode {\n /* store rendered html into blocks */\n OUTPUT,\n /* output rendered html directly */\n STORE\n}\n\nexport default BlockMode\n","import * as _ from '../util/underscore'\nimport { __assign } from 'tslib'\nimport assert from '../util/assert'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\nimport BlockMode from './block-mode'\n\nexport type Context = {\n [key: string]: any\n liquid_method_missing?: (key: string) => any // eslint-disable-line\n to_liquid?: () => any // eslint-disable-line\n toLiquid?: () => any // eslint-disable-line\n}\n\nexport default class Scope {\n opts: NormalizedFullOptions\n contexts: Array\n blocks: object = {}\n groups: {[key: string]: number} = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts?: NormalizedFullOptions) {\n this.opts = applyDefault(opts)\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => __assign(ctx, val), {})\n }\n get (path: string): any {\n const paths = this.propertyAccessSeq(path)\n const scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n return paths.reduce((value, key) => this.readProperty(value, key), scope)\n }\n set (path: string, v: any): void {\n const paths = this.propertyAccessSeq(path)\n let scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n paths.some((key, i) => {\n if (!_.isObject(scope)) {\n return true\n }\n if (i === paths.length - 1) {\n scope[key] = v\n return true\n }\n if (undefined === scope[key]) {\n scope[key] = {}\n }\n scope = scope[key]\n return false\n })\n }\n unshift (ctx: object) {\n return this.contexts.unshift(ctx)\n }\n push (ctx: object) {\n return this.contexts.push(ctx)\n }\n pop (ctx?: object): object | undefined {\n if (!arguments.length) {\n return this.contexts.pop()\n }\n const i = this.contexts.findIndex(scope => scope === ctx)\n if (i === -1) {\n throw new TypeError('scope not found, cannot pop')\n }\n return this.contexts.splice(i, 1)[0]\n }\n findContextFor (key: string, filter: ((conttext: object) => boolean) = () => true) {\n for (let i = this.contexts.length - 1; i >= 0; i--) {\n const candidate = this.contexts[i]\n if (!filter(candidate)) continue\n if (key in candidate) {\n return candidate\n }\n }\n return null\n }\n private readProperty (obj: Context, key: string) {\n let val\n if (_.isNil(obj)) {\n val = obj\n } else {\n obj = toLiquid(obj)\n val = key === 'size' ? readSize(obj) : obj[key]\n if (_.isFunction(obj.liquid_method_missing)) {\n val = obj.liquid_method_missing!(key)\n }\n }\n if (_.isNil(val) && this.opts.strict_variables) {\n throw new TypeError(`undefined variable: ${key}`)\n }\n return val\n }\n\n /*\n * Parse property access sequence from access string\n * @example\n * accessSeq(\"foo.bar\") // ['foo', 'bar']\n * accessSeq(\"foo['bar']\") // ['foo', 'bar']\n * accessSeq(\"foo['b]r']\") // ['foo', 'b]r']\n * accessSeq(\"foo[bar.coo]\") // ['foo', 'bar'], for bar.coo == 'bar'\n */\n propertyAccessSeq (str: string) {\n str = String(str)\n const seq: string[] = []\n let name = ''\n let j\n let i = 0\n while (i < str.length) {\n switch (str[i]) {\n case '[':\n push()\n\n const delemiter = str[i + 1]\n if (/['\"]/.test(delemiter)) { // foo[\"bar\"]\n j = str.indexOf(delemiter, i + 2)\n assert(j !== -1, `unbalanced ${delemiter}: ${str}`)\n name = str.slice(i + 2, j)\n push()\n i = j + 2\n } else { // foo[bar.coo]\n j = matchRightBracket(str, i + 1)\n assert(j !== -1, `unbalanced []: ${str}`)\n name = str.slice(i + 1, j)\n if (!/^[+-]?\\d+$/.test(name)) { // foo[bar] vs. foo[1]\n name = String(this.get(name))\n }\n push()\n i = j + 1\n }\n break\n case '.':// foo.bar, foo[0].bar\n push()\n i++\n break\n default:// foo.bar\n name += str[i]\n i++\n }\n }\n push()\n\n if (!seq.length) {\n throw new TypeError(`invalid path:\"${str}\"`)\n }\n return seq\n\n function push () {\n if (name.length) seq.push(name)\n name = ''\n }\n }\n}\n\nfunction toLiquid (obj: Context) {\n if (_.isFunction(obj.to_liquid)) {\n return obj.to_liquid()\n }\n if (_.isFunction(obj.toLiquid)) {\n return obj.toLiquid()\n }\n return obj\n}\n\nfunction readSize (obj: Context) {\n if (!_.isNil(obj.size)) return obj.size\n if (_.isArray(obj) || _.isString(obj)) return obj.length\n return obj.size\n}\n\nfunction matchRightBracket (str: string, begin: number) {\n let stack = 1 // count of '[' - count of ']'\n for (let i = begin; i < str.length; i++) {\n if (str[i] === '[') {\n stack++\n }\n if (str[i] === ']') {\n stack--\n if (stack === 0) {\n return i\n }\n }\n }\n return -1\n}\n","export class CaptureScope {}\nexport class AssignScope {}\nexport class IncrementScope {}\nexport class DecrementScope {}\n","import * as _ from '../util/underscore'\nimport { resolve, extname } from 'path'\nimport { stat, readFile } from 'fs'\nimport IFS from './ifs'\n\nconst statAsync = _.promisify(stat)\nconst readFileAsync = _.promisify(readFile)\n\nconst fs: IFS = {\n exists: (filepath: string) => {\n return statAsync(filepath).then(() => true).catch(() => false)\n },\n readFile: filepath => {\n return readFileAsync(filepath, 'utf8')\n },\n resolve: (root: string, file: string, ext: string) => {\n if (!extname(file)) file += ext\n return resolve(root, file)\n }\n}\n\nexport default fs\n","import DelimitedToken from 'src/parser/delimited-token'\nimport Token from 'src/parser/token'\nimport TagToken from 'src/parser/tag-token'\nimport { NormalizedFullOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: NormalizedFullOptions) {\n options = { greedy: true, ...options }\n let inRaw = false\n\n tokens.forEach((token: Token, i: number) => {\n if (shouldTrimLeft(token as DelimitedToken, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && (token as TagToken).name === 'raw') inRaw = true\n if (token.type === 'tag' && (token as TagToken).name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token as DelimitedToken, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimLeft || options.trim_tag_left\n if (token.type === 'output') return token.trimLeft || options.trim_output_left\n}\n\nfunction shouldTrimRight (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimRight || options.trim_tag_right\n if (token.type === 'output') return token.trimRight || options.trim_output_right\n}\n\nfunction trimLeft (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rLeft = greedy ? /\\s+$/g : /[\\t\\r ]*$/g\n token.value = token.value.replace(rLeft, '')\n}\n\nfunction trimRight (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rRight = greedy ? /^\\s+/g : /^[\\t\\r ]*\\n?/g\n token.value = token.value.replace(rRight, '')\n}\n","export default class Token {\n type: string = 'notset'\n line: number\n col: number\n raw: string\n input: string\n file?: string\n value: string\n constructor (raw: string, input: string, line: number, col: number, file?: string) {\n this.col = col\n this.line = line\n this.raw = raw\n this.value = raw\n this.input = input\n this.file = file\n }\n}\n","import Token from './token'\n\nexport default class HTMLToken extends Token {\n constructor (str: string, input: string, line: number, col: number, file?: string) {\n super(str, input, line, col, file)\n this.type = 'html'\n this.value = str\n }\n}\n","import Token from './token'\nimport { last } from 'src/util/underscore'\n\nexport default class DelimitedToken extends Token {\n trimLeft: boolean\n trimRight: boolean\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, input, line, pos, file)\n this.trimLeft = value[0] === '-'\n this.trimRight = last(value) === '-'\n this.value = value\n .slice(\n this.trimLeft ? 1 : 0,\n this.trimRight ? -1 : value.length\n )\n .trim()\n }\n}\n","// quote related\nconst singleQuoted = /'[^']*'/\nconst doubleQuoted = /\"[^\"]*\"/\nexport const quoted = new RegExp(`${singleQuoted.source}|${doubleQuoted.source}`)\nexport const quoteBalanced = new RegExp(`(?:${quoted.source}|[^'\"])*`)\n\n// basic types\nexport const number = /[+-]?(?:\\d+\\.?\\d*|\\.?\\d+)/\nexport const bool = /true|false/\n\n// property access\nexport const identifier = /[\\w-]+[?]?/\nexport const subscript = new RegExp(`\\\\[(?:${quoted.source}|[\\\\w-\\\\.]+)\\\\]`)\nexport const literal = new RegExp(`(?:${quoted.source}|${bool.source}|${number.source})`)\nexport const variable = new RegExp(`${identifier.source}(?:\\\\.${identifier.source}|${subscript.source})*`)\n\n// range related\nexport const rangeLimit = new RegExp(`(?:${variable.source}|${number.source})`)\nexport const range = new RegExp(`\\\\(${rangeLimit.source}\\\\.\\\\.${rangeLimit.source}\\\\)`)\nexport const rangeCapture = new RegExp(`\\\\((${rangeLimit.source})\\\\.\\\\.(${rangeLimit.source})\\\\)`)\n\nexport const value = new RegExp(`(?:${variable.source}|${literal.source}|${range.source})`)\n\n// hash related\nexport const hash = new RegExp(`(?:${identifier.source})\\\\s*:\\\\s*(?:${value.source})`)\nexport const hashCapture = new RegExp(`(${identifier.source})\\\\s*:\\\\s*(${value.source})`, 'g')\n\n// full match\nexport const tagLine = new RegExp(`^\\\\s*(${identifier.source})\\\\s*([\\\\s\\\\S]*?)\\\\s*$`)\nexport const numberLine = new RegExp(`^${number.source}$`)\nexport const boolLine = new RegExp(`^${bool.source}$`, 'i')\nexport const quotedLine = new RegExp(`^${quoted.source}$`)\nexport const rangeLine = new RegExp(`^${rangeCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isRange (str: string) {\n return rangeLine.test(str)\n}\n","import DelimitedToken from './delimited-token'\nimport { TokenizationError } from 'src/util/error'\nimport * as lexical from './lexical'\n\nexport default class TagToken extends DelimitedToken {\n name: string\n args: string\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'tag'\n const match = this.value.match(lexical.tagLine)\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, this)\n }\n this.name = match[1]\n this.args = match[2]\n }\n}\n","import DelimitedToken from './delimited-token'\n\nexport default class OutputToken extends DelimitedToken {\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'output'\n }\n}\n","import whiteSpaceCtrl from './whitespace-ctrl'\nimport HTMLToken from './html-token'\nimport TagToken from './tag-token'\nimport Token from './token'\nimport OutputToken from './output-token'\nimport { TokenizationError } from 'src/util/error'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: NormalizedFullOptions\n constructor (options?: NormalizedFullOptions) {\n this.options = applyDefault(options)\n }\n tokenize (input: string, file?: string) {\n const tokens: Token[] = []\n const tagL = this.options.tag_delimiter_left\n const tagR = this.options.tag_delimiter_right\n const outputL = this.options.output_delimiter_left\n const outputR = this.options.output_delimiter_right\n let p = 0\n let curLine = 1\n let state = ParseState.HTML\n let buffer = ''\n let lineBegin = 0\n let line = 1\n let col = 1\n\n while (p < input.length) {\n if (input[p] === '\\n') {\n curLine++\n lineBegin = p + 1\n }\n if (state === ParseState.HTML) {\n if (input.substr(p, outputL.length) === outputL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = outputL\n line = curLine\n col = p - lineBegin + 1\n p += outputL.length\n state = ParseState.OUTPUT\n continue\n } else if (input.substr(p, tagL.length) === tagL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = tagL\n line = curLine\n col = p - lineBegin + 1\n p += tagL.length\n state = ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && input.substr(p, outputR.length) === outputR) {\n buffer += outputR\n tokens.push(new OutputToken(buffer, buffer.slice(outputL.length, -outputR.length), input, line, col, file))\n p += outputR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n } else if (input.substr(p, tagR.length) === tagR) {\n buffer += tagR\n tokens.push(new TagToken(buffer, buffer.slice(tagL.length, -tagR.length), input, line, col, file))\n p += tagR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n }\n buffer += input[p++]\n }\n if (state !== ParseState.HTML) {\n const t = state === ParseState.OUTPUT ? 'output' : 'tag'\n const str = buffer.length > 16 ? buffer.slice(0, 13) + '...' : buffer\n throw new TokenizationError(\n `${t} \"${str}\" not closed`,\n new Token(buffer, input, line, col, file)\n )\n }\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n\n whiteSpaceCtrl(tokens, this.options)\n return tokens\n }\n}\n","import { RenderError } from 'src/util/error'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Render {\n async renderTemplates (templates: ITemplate[], scope: Scope) {\n assert(scope, 'unable to evalTemplates: scope undefined')\n\n let html = ''\n for (const tpl of templates) {\n try {\n html += await tpl.render(scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n e.resolvedHTML = html\n throw e\n }\n throw e.name === 'RenderError' ? e : new RenderError(e, tpl)\n }\n }\n return html\n }\n}\n","import { isFunction } from 'src/util/underscore'\n\nexport interface IComparable {\n equals: (rhs: any) => boolean\n gt: (rhs: any) => boolean\n geq: (rhs: any) => boolean\n lt: (rhs: any) => boolean\n leq: (rhs: any) => boolean\n}\n\nexport function isComparable (arg: any): arg is IComparable {\n return arg && isFunction(arg.equals)\n}\n","export abstract class Drop {\n}\n","import { Drop } from './drop'\nimport { isFunction } from 'src/util/underscore'\n\nexport interface IDrop {\n value(): any\n}\n\nexport function isDrop (value: any): value is IDrop {\n return value instanceof Drop && isFunction((value as any).value)\n}\n","import { Drop } from './drop'\nimport { IComparable } from './icomparable'\nimport { isObject, isString, isArray } from 'src/util/underscore'\nimport { IDrop } from 'src/drop/idrop'\n\nexport class EmptyDrop extends Drop implements IDrop, IComparable {\n equals (value: any) {\n if (isString(value) || isArray(value)) return value.length === 0\n if (isObject(value)) return Object.keys(value).length === 0\n return false\n }\n gt () {\n return false\n }\n geq () {\n return false\n }\n lt () {\n return false\n }\n leq () {\n return false\n }\n value () {\n return ''\n }\n}\n","import { isNil, isString } from 'src/util/underscore'\nimport { isDrop } from 'src/drop/idrop'\nimport { EmptyDrop } from 'src/drop/empty-drop'\n\nexport class BlankDrop extends EmptyDrop {\n equals (value: any) {\n if (value === false) return true\n if (isNil(isDrop(value) ? value.value() : value)) return true\n if (isString(value)) return /^\\s*$/.test(value)\n return super.equals(value)\n }\n}\n","import { Drop } from './drop'\nimport { IComparable } from './icomparable'\nimport { isNil } from 'src/util/underscore'\nimport { IDrop, isDrop } from 'src/drop/idrop'\nimport { BlankDrop } from 'src/drop/blank-drop'\n\nexport class NullDrop extends Drop implements IDrop, IComparable {\n equals (value: any) {\n return isNil(isDrop(value) ? value.value() : value) || value instanceof BlankDrop\n }\n gt () {\n return false\n }\n geq () {\n return false\n }\n lt () {\n return false\n }\n leq () {\n return false\n }\n value () {\n return null\n }\n}\n","import * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport Scope from 'src/scope/scope'\nimport { range, last } from 'src/util/underscore'\nimport { isComparable } from 'src/drop/icomparable'\nimport { NullDrop } from 'src/drop/null-drop'\nimport { EmptyDrop } from 'src/drop/empty-drop'\nimport { BlankDrop } from 'src/drop/blank-drop'\nimport { isDrop } from 'src/drop/idrop'\n\nconst binaryOperators: {[key: string]: (lhs: any, rhs: any) => boolean} = {\n '==': (l: any, r: any) => {\n if (isComparable(l)) return l.equals(r)\n if (isComparable(r)) return r.equals(l)\n return l === r\n },\n '!=': (l: any, r: any) => {\n if (isComparable(l)) return !l.equals(r)\n if (isComparable(r)) return !r.equals(l)\n return l !== r\n },\n '>': (l: any, r: any) => {\n if (isComparable(l)) return l.gt(r)\n if (isComparable(r)) return r.lt(l)\n return l > r\n },\n '<': (l: any, r: any) => {\n if (isComparable(l)) return l.lt(r)\n if (isComparable(r)) return r.gt(l)\n return l < r\n },\n '>=': (l: any, r: any) => {\n if (isComparable(l)) return l.geq(r)\n if (isComparable(r)) return r.leq(l)\n return l >= r\n },\n '<=': (l: any, r: any) => {\n if (isComparable(l)) return l.leq(r)\n if (isComparable(r)) return r.geq(l)\n return l <= r\n },\n 'contains': (l: any, r: any) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l: any, r: any) => isTruthy(l) && isTruthy(r),\n 'or': (l: any, r: any) => isTruthy(l) || isTruthy(r)\n}\n\nexport function parseExp (exp: string, scope: Scope): any {\n assert(scope, 'unable to parseExp: scope undefined')\n const operatorREs = lexical.operators\n let match\n for (let i = 0; i < operatorREs.length; i++) {\n const operatorRE = operatorREs[i]\n const expRE = new RegExp(`^(${lexical.quoteBalanced.source})(${operatorRE.source})(${lexical.quoteBalanced.source})$`)\n if ((match = exp.match(expRE))) {\n const l = parseExp(match[1], scope)\n const op = binaryOperators[match[2].trim()]\n const r = parseExp(match[3], scope)\n return op(l, r)\n }\n }\n\n if ((match = exp.match(lexical.rangeLine))) {\n const low = parseValue(match[1], scope)\n const high = parseValue(match[2], scope)\n return range(low, high + 1)\n }\n\n return parseValue(exp, scope)\n}\n\nexport function evalExp (str: string, scope: Scope): any {\n const value = parseExp(str, scope)\n return isDrop(value) ? value.value() : value\n}\n\nfunction parseValue (str: string, scope: Scope): any {\n if (!str) return null\n str = str.trim()\n\n if (str === 'true') return true\n if (str === 'false') return false\n if (str === 'nil' || str === 'null') return new NullDrop()\n if (str === 'empty') return new EmptyDrop()\n if (str === 'blank') return new BlankDrop()\n if (!isNaN(Number(str))) return Number(str)\n if ((str[0] === '\"' || str[0] === \"'\") && str[0] === last(str)) return str.slice(1, -1)\n return scope.get(str)\n}\n\nexport function evalValue (str: string, scope: Scope): any {\n const value = parseValue(str, scope)\n return isDrop(value) ? value.value() : value\n}\n\nexport function isTruthy (val: any): boolean {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val: any): boolean {\n return val === false || undefined === val || val === null\n}\n","import { hashCapture } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\n\n/**\n * Key-Value Pairs Representing Tag Arguments\n * Example:\n * For the markup `{% include 'head.html' foo='bar' %}`,\n * hash['foo'] === 'bar'\n */\nexport default class Hash {\n [key: string]: any\n constructor (markup: string, scope: Scope) {\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n this[k] = evalValue(v, scope)\n }\n }\n}\n","export default abstract class Template {\n token: T;\n constructor (token: T) {\n this.token = token\n }\n}\n","import { create, stringify } from 'src/util/underscore'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITagImpl from './itag-impl'\nimport ITagImplOptions from './itag-impl-options'\nimport Liquid from 'src/liquid'\nimport Hash from './hash'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\n\nexport default class Tag extends Template implements ITemplate {\n name: string\n private impl: ITagImpl\n static impls: { [key: string]: ITagImplOptions } = {}\n\n constructor (token: TagToken, tokens: Token[], liquid: Liquid) {\n super(token)\n this.name = token.name\n\n const impl = Tag.impls[token.name]\n assert(impl, `tag ${token.name} not found`)\n this.impl = create(impl)\n this.impl.liquid = liquid\n if (this.impl.parse) {\n this.impl.parse(token, tokens)\n }\n }\n async render (scope: Scope) {\n const hash = new Hash(this.token.args, scope)\n const impl = this.impl\n if (typeof impl.render !== 'function') {\n return ''\n }\n const html = await impl.render(scope, hash)\n return stringify(html)\n }\n static register (name: string, tag: ITagImplOptions) {\n Tag.impls[name] = tag\n }\n static clear () {\n Tag.impls = {}\n }\n}\n","import { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\nimport { FilterImpl } from './filter-impl'\n\nexport default class Filter {\n name: string\n impl: FilterImpl\n args: string[]\n private static impls: {[key: string]: FilterImpl} = {}\n\n constructor (name: string, args: string[], strictFilters: boolean) {\n const impl = Filter.impls[name]\n if (!impl && strictFilters) throw new TypeError(`undefined filter: ${name}`)\n\n this.name = name\n this.impl = impl || (x => x)\n this.args = args\n }\n render (value: any, scope: Scope): any {\n const args = this.args.map(arg => evalValue(arg, scope))\n return this.impl.apply(null, [value, ...args])\n }\n static register (name: string, filter: FilterImpl) {\n Filter.impls[name] = filter\n }\n static clear () {\n Filter.impls = {}\n }\n}\n","import Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from './tag-token'\n\ntype ParseToken = ((token: Token, remainTokens: Array) => ITemplate)\n\nexport default class ParseStream {\n private tokens: Array\n private handlers: {[key: string]: (arg: any) => void} = {}\n private stopRequested: boolean = false\n private parseToken: ParseToken\n\n constructor (tokens: Array, parseToken: ParseToken) {\n this.tokens = tokens\n this.parseToken = parseToken\n }\n on (name: string, cb: (arg: T) => void): ParseStream {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: T) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n return false\n }\n start () {\n this.trigger('start')\n let token: Token | undefined\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' && this.trigger(`tag:${(token).name}`, token)) {\n continue\n }\n const template = this.parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n }\n stop () {\n this.stopRequested = true\n return this\n }\n}\n","import { evalExp } from 'src/render/syntax'\nimport Filter from './filter/filter'\nimport Scope from 'src/scope/scope'\n\nenum ParseState {\n INIT = 0,\n FILTER_NAME = 1,\n FILTER_ARG = 2\n}\n\nexport default class {\n initial: any\n filters: Array = []\n\n /**\n * @param str value string, like: \"i have a dream | truncate: 3\n */\n constructor (str: string, strictFilters: boolean) {\n let buffer = ''\n let quoted = ''\n let state = ParseState.INIT\n let sealed = false\n\n let filterName = ''\n let filterArgs: string[] = []\n\n for (let i = 0; i < str.length; i++) {\n if (quoted) {\n if (str[i] === quoted) {\n quoted = ''\n sealed = true\n }\n buffer += str[i]\n } else if (/\\s/.test(str[i])) {\n if (!buffer) continue\n else sealed = true\n } else if (str[i] === '|') {\n if (state === ParseState.INIT) {\n this.initial = buffer\n } else {\n if (state === ParseState.FILTER_NAME) filterName = buffer\n else filterArgs.push(buffer)\n this.filters.push(new Filter(filterName, filterArgs, strictFilters))\n filterName = ''\n filterArgs = []\n }\n state = ParseState.FILTER_NAME\n buffer = ''\n sealed = false\n } else if (state === ParseState.FILTER_NAME && str[i] === ':') {\n filterName = buffer\n state = ParseState.FILTER_ARG\n buffer = ''\n sealed = false\n } else if (state === ParseState.FILTER_ARG && str[i] === ',') {\n filterArgs.push(buffer)\n buffer = ''\n sealed = false\n } else if (sealed) continue\n else {\n if ((str[i] === '\"' || str[i] === \"'\") && !quoted) quoted = str[i]\n buffer += str[i]\n }\n }\n\n if (buffer) {\n if (state === ParseState.INIT) this.initial = buffer\n else if (state === ParseState.FILTER_NAME) this.filters.push(new Filter(buffer, [], strictFilters))\n else {\n filterArgs.push(buffer)\n this.filters.push(new Filter(filterName, filterArgs, strictFilters))\n }\n }\n }\n value (scope: Scope) {\n return this.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(this.initial, scope))\n }\n}\n","import Value from './value'\nimport { stringify } from 'src/util/underscore'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport OutputToken from 'src/parser/output-token'\n\nexport default class Output extends Template implements ITemplate {\n value: Value\n constructor (token: OutputToken, strictFilters: boolean) {\n super(token)\n this.value = new Value(token.value, strictFilters)\n }\n async render (scope: Scope): Promise {\n const html = await this.value.value(scope)\n return stringify(html)\n }\n}\n","import Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport HTMLToken from 'src/parser/html-token'\n\nexport default class extends Template implements ITemplate {\n str: string\n constructor (token: HTMLToken) {\n super(token)\n this.str = token.value\n }\n async render (): Promise {\n return this.str\n }\n}\n","import { ParseError } from '../util/error'\nimport Liquid from 'src/liquid'\nimport ParseStream from './parse-stream'\nimport Token from './token'\nimport TagToken from './tag-token'\nimport OutputToken from './output-token'\nimport Tag from 'src/template/tag/tag'\nimport Output from 'src/template/output'\nimport HTML from 'src/template/html'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Parser {\n liquid: Liquid\n\n constructor (liquid: Liquid) {\n this.liquid = liquid\n }\n parse (tokens: Array) {\n let token\n const templates: ITemplate[] = []\n while ((token = tokens.shift())) {\n templates.push(this.parseToken(token, tokens))\n }\n return templates\n }\n parseToken (token: Token, remainTokens: Array) {\n try {\n if (token.type === 'tag') {\n return new Tag(token as TagToken, remainTokens, this.liquid)\n }\n if (token.type === 'output') {\n return new Output(token as OutputToken, this.liquid.options.strict_filters)\n }\n return new HTML(token)\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n parseStream (tokens: Array) {\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens))\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { AssignScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(re) as RegExpMatchArray\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (scope: Scope) {\n const ctx = new AssignScope()\n ctx[this.key] = this.liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n} as ITagImplOptions\n","/*\n * Call functions in serial until someone rejected.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function mapSeries (\n iterable: T1[],\n iteratee: (item: T1, idx: number, iterable: T1[]) => Promise | T2\n): Promise {\n let ret = Promise.resolve(0)\n const result: T2[] = []\n iterable.forEach(function (item, idx) {\n ret = ret\n .then(() => iteratee(item, idx, iterable))\n .then(x => result.push(x))\n })\n return ret.then(() => result)\n}\n","import { mapSeries } from 'src/util/promise'\nimport { isString, isObject, isArray } from 'src/util/underscore'\nimport { evalExp } from 'src/render/syntax'\nimport assert from 'src/util/assert'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n type: 'block',\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n this.variable = match[1]\n this.collection = match[2]\n this.reversed = !!match[3]\n\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endfor', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection] as string[]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]]) as Array<[string, any]>\n }\n }\n if (!isArray(collection) || !collection.length) {\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n if (this.reversed) collection.reverse()\n\n const contexts = collection.map((item: string, i: number) => {\n const ctx = {}\n ctx[this.variable] = item\n ctx['forloop'] = {\n first: i === 0,\n index: i + 1,\n index0: i,\n last: i === collection.length - 1,\n length: collection.length,\n rindex: collection.length - i,\n rindex0: collection.length - i - 1\n }\n return ctx\n })\n\n let html = ''\n let finished = false\n await mapSeries(contexts, async context => {\n if (finished) return\n\n scope.push(context)\n try {\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n html += e.resolvedHTML\n if (e.message === 'break') {\n finished = true\n }\n } else throw e\n }\n scope.pop(context)\n })\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = tagToken.args.match(re) as RegExpMatchArray\n assert(match, `${tagToken.args} not valid identifier`)\n\n this.variable = match[1]\n this.templates = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', () => stream.stop())\n .on('template', (tpl) => this.templates.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const html = await this.liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = new CaptureScope()\n ctx[this.variable] = html\n scope.push(ctx)\n }\n} as ITagImplOptions\n","import { evalExp } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p: ITemplate[] = []\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:when', (token: TagToken) => {\n this.cases.push({\n val: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endcase', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = evalExp(branch.val, scope)\n const cond = evalExp(this.cond, scope)\n if (val === cond) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value, quotedLine } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /[^\\s,]+/\nconst withRE = new RegExp(`with\\\\s+(${value.source})`)\n\nexport default {\n parse: function (token: TagToken) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticValue = match[0]\n }\n\n match = value.exec(token.args)\n if (match) {\n this.value = match[0]\n }\n\n match = withRE.exec(token.args)\n if (match) {\n this.with = match[1]\n }\n },\n render: async function (scope: Scope, hash: Hash) {\n let filepath\n if (scope.opts.dynamicPartials) {\n if (quotedLine.exec(this.value)) {\n const template = this.value.slice(1, -1)\n filepath = await this.liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = evalValue(this.value, scope)\n }\n } else {\n filepath = this.staticValue\n }\n assert(filepath, `cannot include with empty filename`)\n\n const originBlocks = scope.blocks\n const originBlockMode = scope.blockMode\n\n scope.blocks = {}\n scope.blockMode = BlockMode.OUTPUT\n if (this.with) {\n hash[filepath] = evalValue(this.with, scope)\n }\n const templates = await this.liquid.getTemplate(filepath, scope.opts)\n scope.push(hash)\n const html = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.blocks = originBlocks\n scope.blockMode = originBlockMode\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, DecrementScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(identifier) as RegExpMatchArray\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope: Scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new DecrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n return --context[this.variable]\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\nconst candidatesRE = new RegExp(rValue.source, 'g')\n\nexport default {\n parse: function (tagToken: TagToken) {\n let match: RegExpExecArray | null = groupRE.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.group = match[1] || ''\n const candidates = match[2]\n\n this.candidates = []\n\n while ((match = candidatesRE.exec(candidates))) {\n this.candidates.push(match[0])\n }\n assert(this.candidates.length, `empty candidates: ${tagToken.raw}`)\n },\n\n render: function (scope: Scope) {\n const group = evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n const groups = scope.groups\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n\n return evalValue(candidate, scope)\n }\n}\n","import { evalExp, isTruthy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', (token: TagToken) => {\n this.branches.push({\n cond: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endif', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (const branch of this.branches) {\n const cond = evalExp(branch.cond, scope)\n if (isTruthy(cond)) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match![0]\n },\n render: function (scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new IncrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n const val = context[this.variable]\n context[this.variable]++\n return val\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /\\S+/\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticLayout = match[0]\n }\n\n match = rValue.exec(token.args)\n if (match) {\n this.layout = match[0]\n }\n\n this.tpls = this.liquid.parser.parse(remainTokens)\n },\n render: async function (scope: Scope, hash: Hash) {\n const layout = scope.opts.dynamicPartials\n ? evalValue(this.layout, scope)\n : this.staticLayout\n assert(layout, `cannot apply layout with empty filename`)\n\n // render the remaining tokens immediately\n scope.blockMode = BlockMode.STORE\n const html = await this.liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.blocks[''] === undefined) {\n scope.blocks[''] = html\n }\n const templates = await this.liquid.getTemplate(layout, scope.opts)\n scope.push(hash)\n scope.blockMode = BlockMode.OUTPUT\n const partial = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n} as ITagImplOptions\n","import BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n this.tpls = [] as ITemplate[]\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', (tpl: ITemplate) => this.tpls.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${token.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const childDefined = scope.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await this.liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.blockMode === BlockMode.STORE) {\n scope.blocks[this.block] = html\n return ''\n }\n return html\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.tokens = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endraw') stream.stop()\n else this.tokens.push(token)\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: function () {\n return this.tokens.map((token: Token) => token.raw).join('')\n }\n}\n","import { mapSeries } from 'src/util/promise'\nimport assert from 'src/util/assert'\nimport { evalExp } from 'src/render/syntax'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.variable = match[1]\n this.collection = match[2]\n this.templates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope) || []\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = hash.cols || collection.length\n const contexts = collection.map((item: any) => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row: number = 0\n let html = ''\n await mapSeries(contexts, async (context, idx) => {\n row = Math.floor(idx / cols) + 1\n const col = (idx % cols) + 1\n if (col === 1) {\n if (row !== 1) {\n html += ''\n }\n html += ``\n }\n\n html += ``\n scope.push(context)\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n html += ''\n scope.pop(context)\n return html\n })\n if (row > 0) {\n html += ''\n }\n return html\n }\n} as ITagImplOptions\n","import { evalExp, isFalsy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n const cond = evalExp(this.cond, scope)\n return isFalsy(cond)\n ? this.liquid.renderer.renderTemplates(this.templates, scope)\n : this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('break')\n }\n}\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('continue')\n }\n}\n","import assign from './assign'\nimport For from './for'\nimport capture from './capture'\nimport Case from './case'\nimport comment from './comment'\nimport include from './include'\nimport decrement from './decrement'\nimport cycle from './cycle'\nimport If from './if'\nimport increment from './increment'\nimport layout from './layout'\nimport block from './block'\nimport raw from './raw'\nimport tablerow from './tablerow'\nimport unless from './unless'\nimport Break from './break'\nimport Continue from './continue'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst tags: { [key: string]: ITagImplOptions } = {\n assign, 'for': For, capture, 'case': Case, comment, include, decrement, increment, cycle, 'if': If, layout, block, raw, tablerow, unless, 'break': Break, 'continue': Continue\n}\n\nexport default tags\n","const escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nfunction escape (str: string) {\n return String(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str: string) {\n return String(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nexport default {\n 'escape': escape,\n 'escape_once': (str: string) => escape(unescape(str)),\n 'newline_to_br': (v: string) => v.replace(/\\n/g, '
'),\n 'strip_html': (v: string) => v.replace(/|||<.*?>/g, '')\n}\n","import { FilterImpl } from 'src/template/filter/filter-impl'\n\nexport default {\n 'append': (v: string, arg: string) => v + arg,\n 'prepend': (v: string, arg: string) => arg + v,\n 'capitalize': (str: string) => String(str).charAt(0).toUpperCase() + str.slice(1),\n 'lstrip': (v: string) => String(v).replace(/^\\s+/, ''),\n 'downcase': (v: string) => v.toLowerCase(),\n 'upcase': (str: string) => String(str).toUpperCase(),\n 'remove': (v: string, arg: string) => v.split(arg).join(''),\n 'remove_first': (v: string, l: string) => v.replace(l, ''),\n 'replace': (v: string, pattern: string, replacement: string) =>\n String(v).split(pattern).join(replacement),\n 'replace_first': (v: string, arg1: string, arg2: string) => String(v).replace(arg1, arg2),\n 'rstrip': (str: string) => String(str).replace(/\\s+$/, ''),\n 'split': (v: string, arg: string) => String(v).split(arg),\n 'strip': (v: string) => String(v).trim(),\n 'strip_newlines': (v: string) => String(v).replace(/\\n/g, ''),\n 'truncate': (v: string, l: number = 50, o: string = '...') => {\n v = String(v)\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v: string, l: number = 15, o: string = '...') => {\n const arr = v.split(/\\s+/)\n let ret = arr.slice(0, l).join(' ')\n if (arr.length >= l) ret += o\n return ret\n }\n} as {[key: string]: FilterImpl}\n","export default {\n 'abs': (v: number) => Math.abs(v),\n 'ceil': (v: number) => Math.ceil(v),\n 'divided_by': (v: number, arg: number) => v / arg,\n 'floor': (v: number) => Math.floor(v),\n 'minus': bindFixed((v: number, arg: number) => v - arg),\n 'modulo': bindFixed((v: number, arg: number) => v % arg),\n 'round': (v: number, arg: number = 0) => {\n const amp = Math.pow(10, arg)\n return Math.round(v * amp) / amp\n },\n 'plus': bindFixed((v: number, arg: number) => Number(v) + Number(arg)),\n 'times': (v: number, arg: number) => v * arg\n}\n\nfunction getFixed (v: number) {\n const p = String(v).split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction bindFixed (cb: (v: number, arg: number) => number) {\n return (l: number, r: number) => {\n const f = Math.max(getFixed(l), getFixed(r))\n return cb(l, r).toFixed(f)\n }\n}\n","export default {\n 'url_decode': (x: string) => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': (x: string) => x.split(' ').map(encodeURIComponent).join('+')\n}\n","import { last } from 'src/util/underscore'\n\nexport default {\n 'join': (v: any[], arg: string) => v.join(arg === undefined ? ' ' : arg),\n 'last': (v: T[]): T => last(v),\n 'first': (v: T[]): T => v[0],\n 'map': (arr: {[key: string]: T1}[], arg: string): T1[] => arr.map(v => v[arg]),\n 'reverse': (v: any[]) => v.reverse(),\n 'sort': (v: T[], arg: (lhs: T, rhs: T) => number) => v.sort(arg),\n 'size': (v: string | any[]) => v.length,\n 'concat': (v: T1[], arg: T2[] | T2): Array => Array.prototype.concat.call(v, arg),\n 'slice': (v: T[], begin: number, length: number): T[] => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'uniq': function (arr: T[]): T[] {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(String(val))) return false\n u[String(val)] = true\n return true\n })\n }\n}\n","import { padStart } from './underscore'\n\nconst monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst monthNamesShort = monthNames.map(abbr)\nconst dayNamesShort = dayNames.map(abbr)\nconst suffixes = {\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n 'default': 'th'\n}\n\nfunction abbr (str: string) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d: Date) {\n const feb = _date.isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n },\n\n getDayOfYear: function (d: Date) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += _date.daysInMonth(d)[i]\n }\n return num + d.getDate()\n },\n\n getWeekOfYear: function (d: Date, startDay: number) {\n // Skip to startDay of this week\n const now = this.getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return padStart(String(Math.floor((now - then) / 7) + 1), 2, '0')\n },\n\n isLeapYear: function (d: Date) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d: Date) {\n const str = d.getDate().toString()\n const index = parseInt(str.slice(-1))\n return suffixes[index] || suffixes['default']\n },\n\n century: function (d: Date) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst formatCodes = {\n a: function (d: Date) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d: Date) {\n return dayNames[d.getDay()]\n },\n b: function (d: Date) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d: Date) {\n return monthNames[d.getMonth()]\n },\n c: function (d: Date) {\n return d.toLocaleString()\n },\n C: function (d: Date) {\n return _date.century(d)\n },\n d: function (d: Date) {\n return padStart(d.getDate(), 2, '0')\n },\n e: function (d: Date) {\n return padStart(d.getDate(), 2)\n },\n H: function (d: Date) {\n return padStart(d.getHours(), 2, '0')\n },\n I: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2, '0')\n },\n j: function (d: Date) {\n return padStart(_date.getDayOfYear(d), 3, '0')\n },\n k: function (d: Date) {\n return padStart(d.getHours(), 2)\n },\n l: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2)\n },\n L: function (d: Date) {\n return padStart(d.getMilliseconds(), 3, '0')\n },\n m: function (d: Date) {\n return padStart(d.getMonth() + 1, 2, '0')\n },\n M: function (d: Date) {\n return padStart(d.getMinutes(), 2, '0')\n },\n p: function (d: Date) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d: Date) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d: Date) {\n return _date.getSuffix(d)\n },\n s: function (d: Date) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d: Date) {\n return padStart(d.getSeconds(), 2, '0')\n },\n u: function (d: Date) {\n return d.getDay() || 7\n },\n U: function (d: Date) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d: Date) {\n return d.getDay()\n },\n W: function (d: Date) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d: Date) {\n return d.toLocaleDateString()\n },\n X: function (d: Date) {\n return d.toLocaleTimeString()\n },\n y: function (d: Date) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d: Date) {\n return d.getFullYear()\n },\n z: function (d: Date) {\n const tz = d.getTimezoneOffset() / 60 * 100\n return (tz > 0 ? '-' : '+') + padStart(String(Math.abs(tz)), 4, '0')\n },\n '%': function () {\n return '%'\n }\n};\n(formatCodes as any).h = formatCodes.b;\n(formatCodes as any).N = formatCodes.L\n\nexport default function (d: Date, format: string) {\n let output = ''\n let remaining = format\n\n while (true) {\n const r = /%./g\n const results = r.exec(remaining)\n\n // No more format codes. Add the remaining text and return\n if (!results) {\n return output + remaining\n }\n\n // Add the preceding text\n output += remaining.slice(0, r.lastIndex - 2)\n remaining = remaining.slice(r.lastIndex)\n\n // Add the format code\n const ch = results[0].charAt(1)\n const func = formatCodes[ch]\n output += func ? func(d) : '%' + ch\n }\n}\n","import strftime from 'src/util/strftime'\nimport { isString } from 'src/util/underscore'\n\nexport default {\n 'date': (v: string | Date, arg: string) => {\n let date = v\n if (v === 'now') {\n date = new Date()\n } else if (isString(v)) {\n date = new Date(v)\n }\n return isValidDate(date) ? strftime(date, arg) : v\n }\n}\n\nfunction isValidDate (date: any): date is Date {\n return date instanceof Date && !isNaN(date.getTime())\n}\n","import { isTruthy } from 'src/render/syntax'\n\nexport default {\n 'default': (v: T1, arg: T2): T1 | T2 => isTruthy(v) ? v : arg\n}\n","import html from './html'\nimport str from './string'\nimport math from './math'\nimport url from './url'\nimport array from './array'\nimport date from './date'\nimport obj from './object'\n\nexport default { ...html, ...str, ...math, ...url, ...date, ...obj, ...array }\n","import Scope from './scope/scope'\nimport * as Types from './types'\nimport fs from 'src/fs'\nimport * as _ from './util/underscore'\nimport ITemplate from './template/itemplate'\nimport Tokenizer from './parser/tokenizer'\nimport Render from './render/render'\nimport Tag from './template/tag/tag'\nimport Filter from './template/filter/filter'\nimport Parser from './parser/parser'\nimport ITagImplOptions from './template/tag/itag-impl-options'\nimport Value from './template/value'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './render/syntax'\nimport builtinTags from './builtin/tags'\nimport builtinFilters from './builtin/filters'\nimport { LiquidOptions, NormalizedFullOptions, applyDefault, normalize } from './liquid-options'\nimport { FilterImpl } from './template/filter/filter-impl'\n\nexport default class Liquid {\n public options: NormalizedFullOptions\n public renderer: Render\n public parser: Parser\n private cache: object = {}\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n this.options = applyDefault(normalize(opts))\n this.parser = new Parser(this)\n this.renderer = new Render()\n this.tokenizer = new Tokenizer(this.options)\n\n _.forOwn(builtinTags, (conf, name) => this.registerTag(name, conf))\n _.forOwn(builtinFilters, (handler, name) => this.registerFilter(name, handler))\n }\n parse (html: string, filepath?: string) {\n const tokens = this.tokenizer.tokenize(html, filepath)\n return this.parser.parse(tokens)\n }\n render (tpl: Array, ctx?: object, opts?: LiquidOptions) {\n const options = { ...this.options, ...normalize(opts) }\n const scope = new Scope(ctx, options)\n return this.renderer.renderTemplates(tpl, scope)\n }\n async parseAndRender (html: string, ctx?: object, opts?: LiquidOptions) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n }\n async getTemplate (file: string, opts?: LiquidOptions) {\n const options = normalize(opts)\n const roots = options.root ? [...options.root, ...this.options.root] : this.options.root\n const paths = roots.map(root => fs.resolve(root, file, this.options.extname))\n\n for (const filepath of paths) {\n if (!(await fs.exists(filepath))) continue\n\n if (this.options.cache && this.cache[filepath]) return this.cache[filepath]\n const value = this.parse(await fs.readFile(filepath), filepath)\n if (this.options.cache) this.cache[filepath] = value\n return value\n }\n\n const err = new Error('ENOENT') as any\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`\n err.code = 'ENOENT'\n throw err\n }\n async renderFile (file: string, ctx?: object, opts?: LiquidOptions) {\n const options = normalize(opts)\n const templates = await this.getTemplate(file, options)\n return this.render(templates, ctx, opts)\n }\n evalValue (str: string, scope: Scope) {\n return new Value(str, this.options.strict_filters).value(scope)\n }\n registerFilter (name: string, filter: FilterImpl) {\n return Filter.register(name, filter)\n }\n registerTag (name: string, tag: ITagImplOptions) {\n return Tag.register(name, tag)\n }\n plugin (plugin: (this: Liquid, L: typeof Liquid) => void) {\n return plugin.call(this, Liquid)\n }\n express () {\n const self = this\n return function (this: any, filePath: string, ctx: object, cb: (err: Error | null, html?: string) => void) {\n const opts = { root: this.root }\n self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb)\n }\n }\n static default = Liquid\n static isTruthy = isTruthy\n static isFalsy = isFalsy\n static evalExp = evalExp\n static evalValue = evalValue\n static Types = Types\n}\n"],"names":["tslib_1.__extends","_\r\n .range","_.padStart","_.isArray","_.isString","BlockMode","path","_.last","_.isObject","_.isNil","_.isFunction","_.promisify","stat","readFile","fs","extname","resolve","range","value","lexical.tagLine","lexical.operators","lexical.quoteBalanced","lexical.rangeLine","ParseState","Value","HTML","re","hash","rValue","staticFileRE","_.forOwn","builtinTags"],"mappings":"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"} \ No newline at end of file diff --git a/dist/liquid.js b/dist/liquid.js index 7e56977d4..9a76694e6 100644 --- a/dist/liquid.js +++ b/dist/liquid.js @@ -1,5 +1,5 @@ /* - * liquidjs@7.2.2, https://github.com/harttle/liquidjs + * liquidjs@7.3.0, https://github.com/harttle/liquidjs * (c) 2016-2019 harttle * Released under the MIT License. */ @@ -406,7 +406,7 @@ Scope.prototype.readProperty = function (obj, key) { var val; if (isNil(obj)) { - val = undefined; + val = obj; } else { obj = toLiquid(obj); @@ -865,13 +865,136 @@ return Render; }()); - var operators$1 = { - '==': function (l, r) { return l === r; }, - '!=': function (l, r) { return l !== r; }, - '>': function (l, r) { return l !== null && r !== null && l > r; }, - '<': function (l, r) { return l !== null && r !== null && l < r; }, - '>=': function (l, r) { return l !== null && r !== null && l >= r; }, - '<=': function (l, r) { return l !== null && r !== null && l <= r; }, + function isComparable(arg) { + return arg && isFunction(arg.equals); + } + + var Drop = /** @class */ (function () { + function Drop() { + } + return Drop; + }()); + + function isDrop(value) { + return value instanceof Drop && isFunction(value.value); + } + + var EmptyDrop = /** @class */ (function (_super) { + __extends(EmptyDrop, _super); + function EmptyDrop() { + return _super !== null && _super.apply(this, arguments) || this; + } + EmptyDrop.prototype.equals = function (value) { + if (isString(value) || isArray(value)) + return value.length === 0; + if (isObject(value)) + return Object.keys(value).length === 0; + return false; + }; + EmptyDrop.prototype.gt = function () { + return false; + }; + EmptyDrop.prototype.geq = function () { + return false; + }; + EmptyDrop.prototype.lt = function () { + return false; + }; + EmptyDrop.prototype.leq = function () { + return false; + }; + EmptyDrop.prototype.value = function () { + return ''; + }; + return EmptyDrop; + }(Drop)); + + var BlankDrop = /** @class */ (function (_super) { + __extends(BlankDrop, _super); + function BlankDrop() { + return _super !== null && _super.apply(this, arguments) || this; + } + BlankDrop.prototype.equals = function (value) { + if (value === false) + return true; + if (isNil(isDrop(value) ? value.value() : value)) + return true; + if (isString(value)) + return /^\s*$/.test(value); + return _super.prototype.equals.call(this, value); + }; + return BlankDrop; + }(EmptyDrop)); + + var NullDrop = /** @class */ (function (_super) { + __extends(NullDrop, _super); + function NullDrop() { + return _super !== null && _super.apply(this, arguments) || this; + } + NullDrop.prototype.equals = function (value) { + return isNil(isDrop(value) ? value.value() : value) || value instanceof BlankDrop; + }; + NullDrop.prototype.gt = function () { + return false; + }; + NullDrop.prototype.geq = function () { + return false; + }; + NullDrop.prototype.lt = function () { + return false; + }; + NullDrop.prototype.leq = function () { + return false; + }; + NullDrop.prototype.value = function () { + return null; + }; + return NullDrop; + }(Drop)); + + var binaryOperators = { + '==': function (l, r) { + if (isComparable(l)) + return l.equals(r); + if (isComparable(r)) + return r.equals(l); + return l === r; + }, + '!=': function (l, r) { + if (isComparable(l)) + return !l.equals(r); + if (isComparable(r)) + return !r.equals(l); + return l !== r; + }, + '>': function (l, r) { + if (isComparable(l)) + return l.gt(r); + if (isComparable(r)) + return r.lt(l); + return l > r; + }, + '<': function (l, r) { + if (isComparable(l)) + return l.lt(r); + if (isComparable(r)) + return r.gt(l); + return l < r; + }, + '>=': function (l, r) { + if (isComparable(l)) + return l.geq(r); + if (isComparable(r)) + return r.leq(l); + return l >= r; + }, + '<=': function (l, r) { + if (isComparable(l)) + return l.leq(r); + if (isComparable(r)) + return r.geq(l); + return l <= r; + }, 'contains': function (l, r) { if (!l) return false; @@ -882,28 +1005,32 @@ 'and': function (l, r) { return isTruthy(l) && isTruthy(r); }, 'or': function (l, r) { return isTruthy(l) || isTruthy(r); } }; - function evalExp(exp, scope) { - assert(scope, 'unable to evalExp: scope undefined'); + function parseExp(exp, scope) { + assert(scope, 'unable to parseExp: scope undefined'); var operatorREs = operators; var match; for (var i = 0; i < operatorREs.length; i++) { var operatorRE = operatorREs[i]; var expRE = new RegExp("^(" + quoteBalanced.source + ")(" + operatorRE.source + ")(" + quoteBalanced.source + ")$"); if ((match = exp.match(expRE))) { - var l = evalExp(match[1], scope); - var op = operators$1[match[2].trim()]; - var r = evalExp(match[3], scope); + var l = parseExp(match[1], scope); + var op = binaryOperators[match[2].trim()]; + var r = parseExp(match[3], scope); return op(l, r); } } if ((match = exp.match(rangeLine))) { - var low = evalValue(match[1], scope); - var high = evalValue(match[2], scope); + var low = parseValue(match[1], scope); + var high = parseValue(match[2], scope); return range(low, high + 1); } - return evalValue(exp, scope); + return parseValue(exp, scope); } - function evalValue(str, scope) { + function evalExp(str, scope) { + var value$$1 = parseExp(str, scope); + return isDrop(value$$1) ? value$$1.value() : value$$1; + } + function parseValue(str, scope) { if (!str) return null; str = str.trim(); @@ -911,12 +1038,22 @@ return true; if (str === 'false') return false; + if (str === 'nil' || str === 'null') + return new NullDrop(); + if (str === 'empty') + return new EmptyDrop(); + if (str === 'blank') + return new BlankDrop(); if (!isNaN(Number(str))) return Number(str); if ((str[0] === '"' || str[0] === "'") && str[0] === last(str)) return str.slice(1, -1); return scope.get(str); } + function evalValue(str, scope) { + var value$$1 = parseValue(str, scope); + return isDrop(value$$1) ? value$$1.value() : value$$1; + } function isTruthy(val) { return !isFalsy(val); } diff --git a/dist/liquid.js.map b/dist/liquid.js.map index d5490e695..4d419b057 100644 --- a/dist/liquid.js.map +++ b/dist/liquid.js.map @@ -1 +1 @@ -{"version":3,"file":"liquid.js","sources":["../src/util/underscore.ts","../src/util/error.ts","../src/util/assert.ts","../src/liquid-options.ts","../src/scope/block-mode.ts","../src/scope/scope.ts","../src/scope/scopes.ts","../src/fs/browser.ts","../src/parser/whitespace-ctrl.ts","../src/parser/token.ts","../src/parser/html-token.ts","../src/parser/delimited-token.ts","../src/parser/lexical.ts","../src/parser/tag-token.ts","../src/parser/output-token.ts","../src/parser/tokenizer.ts","../src/render/render.ts","../src/render/syntax.ts","../src/template/tag/hash.ts","../src/template/template.ts","../src/template/tag/tag.ts","../src/template/filter/filter.ts","../src/parser/parse-stream.ts","../src/template/value.ts","../src/template/output.ts","../src/template/html.ts","../src/parser/parser.ts","../src/builtin/tags/assign.ts","../src/util/promise.ts","../src/builtin/tags/for.ts","../src/builtin/tags/capture.ts","../src/builtin/tags/case.ts","../src/builtin/tags/comment.ts","../src/builtin/tags/include.ts","../src/builtin/tags/decrement.ts","../src/builtin/tags/cycle.ts","../src/builtin/tags/if.ts","../src/builtin/tags/increment.ts","../src/builtin/tags/layout.ts","../src/builtin/tags/block.ts","../src/builtin/tags/raw.ts","../src/builtin/tags/tablerow.ts","../src/builtin/tags/unless.ts","../src/builtin/tags/break.ts","../src/builtin/tags/continue.ts","../src/builtin/tags/index.ts","../src/builtin/filters/html.ts","../src/builtin/filters/string.ts","../src/builtin/filters/math.ts","../src/builtin/filters/url.ts","../src/builtin/filters/array.ts","../src/util/strftime.ts","../src/builtin/filters/date.ts","../src/builtin/filters/object.ts","../src/builtin/filters/index.ts","../src/liquid.ts"],"sourcesContent":["const toStr = Object.prototype.toString\nconst arrToStr = Array.prototype.toString\n\n/*\n * Checks if value is classified as a String primitive or object.\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is a string, else false.\n */\nexport function isString (value: any) {\n return toStr.call(value) === '[object String]'\n}\n\nexport function isFunction (value: any) {\n return typeof value === 'function'\n}\n\nexport function promisify (fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise;\nexport function promisify (fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void):(arg1: T1, arg2: T2) => Promise;\nexport function promisify (fn: any) {\n return function (...args: any[]) {\n return new Promise((resolve, reject) => {\n fn(...args, (err: Error, result: any) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value: any): string {\n if (isNil(value)) return ''\n if (isFunction(value.to_liquid)) return stringify(value.to_liquid())\n if (isFunction(value.toLiquid)) return stringify(value.toLiquid())\n if (isFunction(value.to_s)) return value.to_s()\n if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value)\n if (isFunction(value.toString)) return value.toString()\n return toStr.call(value)\n}\n\nfunction defaultToString (value: any): string {\n const cache: string[] = []\n return JSON.stringify(value, (key, value) => {\n if (isObject(value)) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n}\n\nexport function create (proto: T1): T2 {\n return Object.create(proto)\n}\n\nexport function isNil (value: any): boolean {\n return value === null || value === undefined\n}\n\nexport function isArray (value: any): boolean {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value: any): boolean {\n const signature = toStr.call(value)\n // [object XXXError]\n return signature.substr(-6, 5) === 'Error' ||\n (typeof value.message === 'string' && typeof value.name === 'string')\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (\n object: {[key: string]: T} | undefined,\n iteratee: ((val: T, key: string, obj: {[key: string]: T}) => boolean | void)\n) {\n object = object || {}\n for (const k in object) {\n if (object.hasOwnProperty(k)) {\n if (iteratee(object[k], k, object) === false) break\n }\n }\n return object\n}\n\nexport function last (arr: T[]): T;\nexport function last (arr: string): string;\nexport function last (arr: any[] | string): any | string {\n return arr[arr.length - 1]\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value: any): boolean {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\n/*\n * A function to create flexibly-numbered lists of integers,\n * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.\n * Returns a list of integers from start (inclusive) to stop (exclusive),\n * incremented (or decremented) by step, exclusive.\n * Note that ranges that stop before they start are considered to be zero-length instead of\n * negative — if you'd like a negative range, use a negative step.\n */\nexport function range (start: number, stop?: number, step?: number) {\n if (stop === undefined) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr: number[] = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n\nexport function padStart (str: any, length: number, ch: string = ' ') {\n str = String(str)\n let n = length - str.length\n while (n-- > 0) str = ch + str\n return str\n}\n","import * as _ from './underscore'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\n\nabstract class LiquidError extends Error {\n private token: Token\n private originalError: Error\n constructor (err: Error, token: Token) {\n super(err.message)\n this.originalError = err\n this.token = token\n }\n protected update () {\n const err = this.originalError\n const context = mkContext(this.token)\n this.message = mkMessage(err.message, this.token)\n this.stack = this.message + '\\n' + context +\n '\\n' + this.stack + '\\nFrom ' + err.stack\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor (message: string, token: Token) {\n super(new Error(message), token)\n this.name = 'TokenizationError'\n super.update()\n }\n}\n\nexport class ParseError extends LiquidError {\n constructor (err: Error, token: Token) {\n super(err, token)\n this.name = 'ParseError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderError extends LiquidError {\n constructor (err: Error, tpl: ITemplate) {\n super(err, tpl.token)\n this.name = 'RenderError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderBreakError extends Error {\n resolvedHTML: string = ''\n constructor (message: string) {\n super(message)\n this.name = 'RenderBreakError'\n this.message = message + ''\n }\n}\n\nexport class AssertionError extends Error {\n constructor (message: string) {\n super(message)\n this.name = 'AssertionError'\n this.message = message + ''\n }\n}\n\nfunction mkContext (token: Token) {\n const lines = token.input.split('\\n')\n const begin = Math.max(token.line - 2, 1)\n const end = Math.min(token.line + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === token.line) ? '>> ' : ' '\n const num = _.padStart(String(lineNumber), String(end).length)\n const text = lines[lineNumber - 1]\n return `${indicator}${num}| ${text}`\n })\n .join('\\n')\n\n return context\n}\n\nfunction mkMessage (msg: string, token: Token) {\n if (token.file) msg += `, file:${token.file}`\n msg += `, line:${token.line}, col:${token.col}`\n return msg\n}\n","import { AssertionError } from './error'\n\nexport default function (predicate: any, message?: string) {\n if (!predicate) {\n message = message || `expect ${predicate} to be true`\n throw new AssertionError(message)\n }\n}\n","/* eslint-disable camelcase */\n\nimport * as _ from './util/underscore'\n\nexport interface LiquidOptions {\n /** `root` is a directory or an array of directories to resolve layouts and includes, as well as the filename passed in when calling `.renderFile()`. If an array, the files are looked up in the order they occur in the array. Defaults to `[\".\"]` */\n root?: string | string[]\n /** `extname` is used to lookup the template file when filepath doesn't include an extension name. Eg: setting to `\".html\"` will allow including file by basename. Defaults to `\"\"`. */\n extname?: string\n /** `cache` indicates whether or not to cache resolved templates. Defaults to `false`. */\n cache?: boolean\n /** `dynamicPartials`: if set, treat `` parameter in `{%include filepath %}`, `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */\n dynamicPartials?: boolean\n /** `strict_filters` is used to enable strict filter existence. If set to `false`, undefined filters will be rendered as empty string. Otherwise, undefined filters will cause an exception. Defaults to `false`. */\n strict_filters?: boolean\n /** `strict_variables` is used to enable strict variable derivation. If set to `false`, undefined variables will be rendered as empty string. Otherwise, undefined variables will cause an exception. Defaults to `false`. */\n strict_variables?: boolean\n /** `trim_tag_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of tags (`{% %}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_tag_right?: boolean\n /** `trim_tag_left` is similar to `trim_tag_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_tag_left?: boolean\n /** ``trim_output_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_output_right?: boolean\n /** `trim_output_left` is similar to `trim_output_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_output_left?: boolean\n /** `tag_delimiter_left` and `tag_delimiter_right` are used to override the delimiter for liquid tags **/\n tag_delimiter_left?: string,\n tag_delimiter_right?: string,\n /** `output_delimiter_left` and `output_delimiter_right` are used to override the delimiter for liquid outputs **/\n output_delimiter_left?: string,\n output_delimiter_right?: string,\n /** `greedy` is used to specify whether `trim_left`/`trim_right` is greedy. When set to `true`, all consecutive blank characters including `\\n` will be trimed regardless of line breaks. Defaults to `true`. */\n greedy?: boolean\n}\n\ninterface NormalizedOptions extends LiquidOptions {\n root?: string[]\n}\n\nexport interface NormalizedFullOptions extends NormalizedOptions {\n root: string[]\n extname: string\n cache: boolean\n dynamicPartials: boolean\n strict_filters: boolean\n strict_variables: boolean\n trim_tag_right: boolean\n trim_tag_left: boolean\n trim_output_right: boolean\n trim_output_left: boolean\n tag_delimiter_left: string,\n tag_delimiter_right: string,\n output_delimiter_left: string,\n output_delimiter_right: string,\n greedy: boolean\n}\n\nconst defaultOptions: NormalizedFullOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_output_right: false,\n trim_output_left: false,\n greedy: true,\n tag_delimiter_left: '{%',\n tag_delimiter_right: '%}',\n output_delimiter_left: '{{',\n output_delimiter_right: '}}',\n strict_filters: false,\n strict_variables: false\n}\n\nexport function normalize (options?: LiquidOptions): NormalizedOptions {\n options = options || {}\n if (options.hasOwnProperty('root')) {\n options.root = normalizeStringArray(options.root)\n }\n return options as NormalizedOptions\n}\n\nexport function applyDefault (options?: NormalizedOptions): NormalizedFullOptions {\n return { ...defaultOptions, ...options }\n}\n\nfunction normalizeStringArray (value: any): string[] {\n if (_.isArray(value)) return value as string[]\n if (_.isString(value)) return [value as string]\n return []\n}\n","enum BlockMode {\n /* store rendered html into blocks */\n OUTPUT,\n /* output rendered html directly */\n STORE\n}\n\nexport default BlockMode\n","import * as _ from '../util/underscore'\nimport { __assign } from 'tslib'\nimport assert from '../util/assert'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\nimport BlockMode from './block-mode'\nimport IContext from './icontext'\n\nexport default class Scope {\n opts: NormalizedFullOptions\n contexts: Array\n blocks: object = {}\n groups: {[key: string]: number} = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts?: NormalizedFullOptions) {\n this.opts = applyDefault(opts)\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => __assign(ctx, val), {})\n }\n get (path: string): any {\n const paths = this.propertyAccessSeq(path)\n const scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n return paths.reduce((value, key) => this.readProperty(value, key), scope)\n }\n set (path: string, v: any): void {\n const paths = this.propertyAccessSeq(path)\n let scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n paths.some((key, i) => {\n if (!_.isObject(scope)) {\n return true\n }\n if (i === paths.length - 1) {\n scope[key] = v\n return true\n }\n if (undefined === scope[key]) {\n scope[key] = {}\n }\n scope = scope[key]\n return false\n })\n }\n unshift (ctx: object) {\n return this.contexts.unshift(ctx)\n }\n push (ctx: object) {\n return this.contexts.push(ctx)\n }\n pop (ctx?: object): object | undefined {\n if (!arguments.length) {\n return this.contexts.pop()\n }\n const i = this.contexts.findIndex(scope => scope === ctx)\n if (i === -1) {\n throw new TypeError('scope not found, cannot pop')\n }\n return this.contexts.splice(i, 1)[0]\n }\n findContextFor (key: string, filter: ((conttext: object) => boolean) = () => true) {\n for (let i = this.contexts.length - 1; i >= 0; i--) {\n const candidate = this.contexts[i]\n if (!filter(candidate)) continue\n if (key in candidate) {\n return candidate\n }\n }\n return null\n }\n private readProperty (obj: IContext, key: string) {\n let val\n if (_.isNil(obj)) {\n val = undefined\n } else {\n obj = toLiquid(obj)\n val = key === 'size' ? readSize(obj) : obj[key]\n if (_.isFunction(obj.liquid_method_missing)) {\n val = obj.liquid_method_missing!(key)\n }\n }\n if (_.isNil(val) && this.opts.strict_variables) {\n throw new TypeError(`undefined variable: ${key}`)\n }\n return val\n }\n\n /*\n * Parse property access sequence from access string\n * @example\n * accessSeq(\"foo.bar\") // ['foo', 'bar']\n * accessSeq(\"foo['bar']\") // ['foo', 'bar']\n * accessSeq(\"foo['b]r']\") // ['foo', 'b]r']\n * accessSeq(\"foo[bar.coo]\") // ['foo', 'bar'], for bar.coo == 'bar'\n */\n propertyAccessSeq (str: string) {\n str = String(str)\n const seq: string[] = []\n let name = ''\n let j\n let i = 0\n while (i < str.length) {\n switch (str[i]) {\n case '[':\n push()\n\n const delemiter = str[i + 1]\n if (/['\"]/.test(delemiter)) { // foo[\"bar\"]\n j = str.indexOf(delemiter, i + 2)\n assert(j !== -1, `unbalanced ${delemiter}: ${str}`)\n name = str.slice(i + 2, j)\n push()\n i = j + 2\n } else { // foo[bar.coo]\n j = matchRightBracket(str, i + 1)\n assert(j !== -1, `unbalanced []: ${str}`)\n name = str.slice(i + 1, j)\n if (!/^[+-]?\\d+$/.test(name)) { // foo[bar] vs. foo[1]\n name = String(this.get(name))\n }\n push()\n i = j + 1\n }\n break\n case '.':// foo.bar, foo[0].bar\n push()\n i++\n break\n default:// foo.bar\n name += str[i]\n i++\n }\n }\n push()\n\n if (!seq.length) {\n throw new TypeError(`invalid path:\"${str}\"`)\n }\n return seq\n\n function push () {\n if (name.length) seq.push(name)\n name = ''\n }\n }\n}\n\nfunction toLiquid (obj: IContext) {\n if (_.isFunction(obj.to_liquid)) {\n return obj.to_liquid()\n }\n if (_.isFunction(obj.toLiquid)) {\n return obj.toLiquid()\n }\n return obj\n}\n\nfunction readSize (obj: IContext) {\n if (!_.isNil(obj.size)) return obj.size\n if (_.isArray(obj) || _.isString(obj)) return obj.length\n return obj.size\n}\n\nfunction matchRightBracket (str: string, begin: number) {\n let stack = 1 // count of '[' - count of ']'\n for (let i = begin; i < str.length; i++) {\n if (str[i] === '[') {\n stack++\n }\n if (str[i] === ']') {\n stack--\n if (stack === 0) {\n return i\n }\n }\n }\n return -1\n}\n","export class CaptureScope {}\nexport class AssignScope {}\nexport class IncrementScope {}\nexport class DecrementScope {}\n","import { last } from '../util/underscore'\nimport IFS from './ifs'\n\nfunction domResolve (root: string, path: string) {\n const base = document.createElement('base')\n base.href = root\n\n const head = document.getElementsByTagName('head')[0]\n head.insertBefore(base, head.firstChild)\n\n const a = document.createElement('a')\n a.href = path\n const resolved = a.href\n head.removeChild(base)\n\n return resolved\n}\n\nfunction resolve (root: string, filepath: string, ext: string) {\n if (root.length && last(root) !== '/') root += '/'\n const url = domResolve(root, filepath)\n return url.replace(/^(\\w+:\\/\\/[^/]+)(\\/[^?]+)/, (str, origin, path) => {\n const last = path.split('/').pop()\n if (/\\.\\w+$/.test(last)) return str\n return origin + path + ext\n })\n}\n\nasync function readFile (url: string): Promise {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.responseText as string)\n } else {\n reject(new Error(xhr.statusText))\n }\n }\n xhr.onerror = () => {\n reject(new Error('An error occurred whilst receiving the response.'))\n }\n xhr.open('GET', url)\n xhr.send()\n })\n}\n\nasync function exists () {\n return true\n}\n\nexport default { readFile, resolve, exists } as IFS\n","import DelimitedToken from 'src/parser/delimited-token'\nimport Token from 'src/parser/token'\nimport TagToken from 'src/parser/tag-token'\nimport { NormalizedFullOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: NormalizedFullOptions) {\n options = { greedy: true, ...options }\n let inRaw = false\n\n tokens.forEach((token: Token, i: number) => {\n if (shouldTrimLeft(token as DelimitedToken, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && (token as TagToken).name === 'raw') inRaw = true\n if (token.type === 'tag' && (token as TagToken).name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token as DelimitedToken, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimLeft || options.trim_tag_left\n if (token.type === 'output') return token.trimLeft || options.trim_output_left\n}\n\nfunction shouldTrimRight (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimRight || options.trim_tag_right\n if (token.type === 'output') return token.trimRight || options.trim_output_right\n}\n\nfunction trimLeft (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rLeft = greedy ? /\\s+$/g : /[\\t\\r ]*$/g\n token.value = token.value.replace(rLeft, '')\n}\n\nfunction trimRight (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rRight = greedy ? /^\\s+/g : /^[\\t\\r ]*\\n?/g\n token.value = token.value.replace(rRight, '')\n}\n","export default class Token {\n type: string = 'notset'\n line: number\n col: number\n raw: string\n input: string\n file?: string\n value: string\n constructor (raw: string, input: string, line: number, col: number, file?: string) {\n this.col = col\n this.line = line\n this.raw = raw\n this.value = raw\n this.input = input\n this.file = file\n }\n}\n","import Token from './token'\n\nexport default class HTMLToken extends Token {\n constructor (str: string, input: string, line: number, col: number, file?: string) {\n super(str, input, line, col, file)\n this.type = 'html'\n this.value = str\n }\n}\n","import Token from './token'\nimport { last } from 'src/util/underscore'\n\nexport default class DelimitedToken extends Token {\n trimLeft: boolean\n trimRight: boolean\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, input, line, pos, file)\n this.trimLeft = value[0] === '-'\n this.trimRight = last(value) === '-'\n this.value = value\n .slice(\n this.trimLeft ? 1 : 0,\n this.trimRight ? -1 : value.length\n )\n .trim()\n }\n}\n","// quote related\nconst singleQuoted = /'[^']*'/\nconst doubleQuoted = /\"[^\"]*\"/\nexport const quoted = new RegExp(`${singleQuoted.source}|${doubleQuoted.source}`)\nexport const quoteBalanced = new RegExp(`(?:${quoted.source}|[^'\"])*`)\n\n// basic types\nexport const number = /[+-]?(?:\\d+\\.?\\d*|\\.?\\d+)/\nexport const bool = /true|false/\n\n// property access\nexport const identifier = /[\\w-]+[?]?/\nexport const subscript = new RegExp(`\\\\[(?:${quoted.source}|[\\\\w-\\\\.]+)\\\\]`)\nexport const literal = new RegExp(`(?:${quoted.source}|${bool.source}|${number.source})`)\nexport const variable = new RegExp(`${identifier.source}(?:\\\\.${identifier.source}|${subscript.source})*`)\n\n// range related\nexport const rangeLimit = new RegExp(`(?:${variable.source}|${number.source})`)\nexport const range = new RegExp(`\\\\(${rangeLimit.source}\\\\.\\\\.${rangeLimit.source}\\\\)`)\nexport const rangeCapture = new RegExp(`\\\\((${rangeLimit.source})\\\\.\\\\.(${rangeLimit.source})\\\\)`)\n\nexport const value = new RegExp(`(?:${variable.source}|${literal.source}|${range.source})`)\n\n// hash related\nexport const hash = new RegExp(`(?:${identifier.source})\\\\s*:\\\\s*(?:${value.source})`)\nexport const hashCapture = new RegExp(`(${identifier.source})\\\\s*:\\\\s*(${value.source})`, 'g')\n\n// full match\nexport const tagLine = new RegExp(`^\\\\s*(${identifier.source})\\\\s*([\\\\s\\\\S]*?)\\\\s*$`)\nexport const numberLine = new RegExp(`^${number.source}$`)\nexport const boolLine = new RegExp(`^${bool.source}$`, 'i')\nexport const quotedLine = new RegExp(`^${quoted.source}$`)\nexport const rangeLine = new RegExp(`^${rangeCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isRange (str: string) {\n return rangeLine.test(str)\n}\n","import DelimitedToken from './delimited-token'\nimport { TokenizationError } from 'src/util/error'\nimport * as lexical from './lexical'\n\nexport default class TagToken extends DelimitedToken {\n name: string\n args: string\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'tag'\n const match = this.value.match(lexical.tagLine)\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, this)\n }\n this.name = match[1]\n this.args = match[2]\n }\n}\n","import DelimitedToken from './delimited-token'\n\nexport default class OutputToken extends DelimitedToken {\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'output'\n }\n}\n","import whiteSpaceCtrl from './whitespace-ctrl'\nimport HTMLToken from './html-token'\nimport TagToken from './tag-token'\nimport Token from './token'\nimport OutputToken from './output-token'\nimport { TokenizationError } from 'src/util/error'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: NormalizedFullOptions\n constructor (options?: NormalizedFullOptions) {\n this.options = applyDefault(options)\n }\n tokenize (input: string, file?: string) {\n const tokens: Token[] = []\n const tagL = this.options.tag_delimiter_left\n const tagR = this.options.tag_delimiter_right\n const outputL = this.options.output_delimiter_left\n const outputR = this.options.output_delimiter_right\n let p = 0\n let curLine = 1\n let state = ParseState.HTML\n let buffer = ''\n let lineBegin = 0\n let line = 1\n let col = 1\n\n while (p < input.length) {\n if (input[p] === '\\n') {\n curLine++\n lineBegin = p + 1\n }\n if (state === ParseState.HTML) {\n if (input.substr(p, outputL.length) === outputL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = outputL\n line = curLine\n col = p - lineBegin + 1\n p += outputL.length\n state = ParseState.OUTPUT\n continue\n } else if (input.substr(p, tagL.length) === tagL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = tagL\n line = curLine\n col = p - lineBegin + 1\n p += tagL.length\n state = ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && input.substr(p, outputR.length) === outputR) {\n buffer += outputR\n tokens.push(new OutputToken(buffer, buffer.slice(outputL.length, -outputR.length), input, line, col, file))\n p += outputR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n } else if (input.substr(p, tagR.length) === tagR) {\n buffer += tagR\n tokens.push(new TagToken(buffer, buffer.slice(tagL.length, -tagR.length), input, line, col, file))\n p += tagR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n }\n buffer += input[p++]\n }\n if (state !== ParseState.HTML) {\n const t = state === ParseState.OUTPUT ? 'output' : 'tag'\n const str = buffer.length > 16 ? buffer.slice(0, 13) + '...' : buffer\n throw new TokenizationError(\n `${t} \"${str}\" not closed`,\n new Token(buffer, input, line, col, file)\n )\n }\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n\n whiteSpaceCtrl(tokens, this.options)\n return tokens\n }\n}\n","import { RenderError } from 'src/util/error'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Render {\n async renderTemplates (templates: ITemplate[], scope: Scope) {\n assert(scope, 'unable to evalTemplates: scope undefined')\n\n let html = ''\n for (const tpl of templates) {\n try {\n html += await tpl.render(scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n e.resolvedHTML = html\n throw e\n }\n throw e.name === 'RenderError' ? e : new RenderError(e, tpl)\n }\n }\n return html\n }\n}\n","import * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport Scope from 'src/scope/scope'\nimport { range, last } from 'src/util/underscore'\n\nconst operators = {\n '==': (l: any, r: any) => l === r,\n '!=': (l: any, r: any) => l !== r,\n '>': (l: any, r: any) => l !== null && r !== null && l > r,\n '<': (l: any, r: any) => l !== null && r !== null && l < r,\n '>=': (l: any, r: any) => l !== null && r !== null && l >= r,\n '<=': (l: any, r: any) => l !== null && r !== null && l <= r,\n 'contains': (l: any, r: any) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l: any, r: any) => isTruthy(l) && isTruthy(r),\n 'or': (l: any, r: any) => isTruthy(l) || isTruthy(r)\n}\n\nexport function evalExp (exp: string, scope: Scope): any {\n assert(scope, 'unable to evalExp: scope undefined')\n const operatorREs = lexical.operators\n let match\n for (let i = 0; i < operatorREs.length; i++) {\n const operatorRE = operatorREs[i]\n const expRE = new RegExp(`^(${lexical.quoteBalanced.source})(${operatorRE.source})(${lexical.quoteBalanced.source})$`)\n if ((match = exp.match(expRE))) {\n const l = evalExp(match[1], scope)\n const op = operators[match[2].trim()]\n const r = evalExp(match[3], scope)\n return op(l, r)\n }\n }\n\n if ((match = exp.match(lexical.rangeLine))) {\n const low = evalValue(match[1], scope)\n const high = evalValue(match[2], scope)\n return range(low, high + 1)\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str: string, scope: Scope) {\n if (!str) return null\n str = str.trim()\n\n if (str === 'true') return true\n if (str === 'false') return false\n if (!isNaN(Number(str))) return Number(str)\n if ((str[0] === '\"' || str[0] === \"'\") && str[0] === last(str)) return str.slice(1, -1)\n return scope.get(str)\n}\n\nexport function isTruthy (val: any): boolean {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val: any): boolean {\n return val === false || undefined === val || val === null\n}\n","import { hashCapture } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\n\n/**\n * Key-Value Pairs Representing Tag Arguments\n * Example:\n * For the markup `{% include 'head.html' foo='bar' %}`,\n * hash['foo'] === 'bar'\n */\nexport default class Hash {\n [key: string]: any\n constructor (markup: string, scope: Scope) {\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n this[k] = evalValue(v, scope)\n }\n }\n}\n","export default abstract class Template {\n token: T;\n constructor (token: T) {\n this.token = token\n }\n}\n","import { create, stringify } from 'src/util/underscore'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITagImpl from './itag-impl'\nimport ITagImplOptions from './itag-impl-options'\nimport Liquid from 'src/liquid'\nimport Hash from './hash'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\n\nexport default class Tag extends Template implements ITemplate {\n name: string\n private impl: ITagImpl\n static impls: { [key: string]: ITagImplOptions } = {}\n\n constructor (token: TagToken, tokens: Token[], liquid: Liquid) {\n super(token)\n this.name = token.name\n\n const impl = Tag.impls[token.name]\n assert(impl, `tag ${token.name} not found`)\n this.impl = create(impl)\n this.impl.liquid = liquid\n if (this.impl.parse) {\n this.impl.parse(token, tokens)\n }\n }\n async render (scope: Scope) {\n const hash = new Hash(this.token.args, scope)\n const impl = this.impl\n if (typeof impl.render !== 'function') {\n return ''\n }\n const html = await impl.render(scope, hash)\n return stringify(html)\n }\n static register (name: string, tag: ITagImplOptions) {\n Tag.impls[name] = tag\n }\n static clear () {\n Tag.impls = {}\n }\n}\n","import { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\nimport { FilterImpl } from './filter-impl'\n\nexport default class Filter {\n name: string\n impl: FilterImpl\n args: string[]\n private static impls: {[key: string]: FilterImpl} = {}\n\n constructor (name: string, args: string[], strictFilters: boolean) {\n const impl = Filter.impls[name]\n if (!impl && strictFilters) throw new TypeError(`undefined filter: ${name}`)\n\n this.name = name\n this.impl = impl || (x => x)\n this.args = args\n }\n render (value: any, scope: Scope): any {\n const args = this.args.map(arg => evalValue(arg, scope))\n return this.impl.apply(null, [value, ...args])\n }\n static register (name: string, filter: FilterImpl) {\n Filter.impls[name] = filter\n }\n static clear () {\n Filter.impls = {}\n }\n}\n","import Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from './tag-token'\n\ntype ParseToken = ((token: Token, remainTokens: Array) => ITemplate)\n\nexport default class ParseStream {\n private tokens: Array\n private handlers: {[key: string]: (arg: any) => void} = {}\n private stopRequested: boolean = false\n private parseToken: ParseToken\n\n constructor (tokens: Array, parseToken: ParseToken) {\n this.tokens = tokens\n this.parseToken = parseToken\n }\n on (name: string, cb: (arg: T) => void): ParseStream {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: T) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n return false\n }\n start () {\n this.trigger('start')\n let token: Token | undefined\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' && this.trigger(`tag:${(token).name}`, token)) {\n continue\n }\n const template = this.parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n }\n stop () {\n this.stopRequested = true\n return this\n }\n}\n","import { evalExp } from 'src/render/syntax'\nimport Filter from './filter/filter'\nimport Scope from 'src/scope/scope'\n\nenum ParseState {\n INIT = 0,\n FILTER_NAME = 1,\n FILTER_ARG = 2\n}\n\nexport default class {\n initial: any\n filters: Array = []\n\n /**\n * @param str value string, like: \"i have a dream | truncate: 3\n */\n constructor (str: string, strictFilters: boolean) {\n let buffer = ''\n let quoted = ''\n let state = ParseState.INIT\n let sealed = false\n\n let filterName = ''\n let filterArgs: string[] = []\n\n for (let i = 0; i < str.length; i++) {\n if (quoted) {\n if (str[i] === quoted) {\n quoted = ''\n sealed = true\n }\n buffer += str[i]\n } else if (/\\s/.test(str[i])) {\n if (!buffer) continue\n else sealed = true\n } else if (str[i] === '|') {\n if (state === ParseState.INIT) {\n this.initial = buffer\n } else {\n if (state === ParseState.FILTER_NAME) filterName = buffer\n else filterArgs.push(buffer)\n this.filters.push(new Filter(filterName, filterArgs, strictFilters))\n filterName = ''\n filterArgs = []\n }\n state = ParseState.FILTER_NAME\n buffer = ''\n sealed = false\n } else if (state === ParseState.FILTER_NAME && str[i] === ':') {\n filterName = buffer\n state = ParseState.FILTER_ARG\n buffer = ''\n sealed = false\n } else if (state === ParseState.FILTER_ARG && str[i] === ',') {\n filterArgs.push(buffer)\n buffer = ''\n sealed = false\n } else if (sealed) continue\n else {\n if ((str[i] === '\"' || str[i] === \"'\") && !quoted) quoted = str[i]\n buffer += str[i]\n }\n }\n\n if (buffer) {\n if (state === ParseState.INIT) this.initial = buffer\n else if (state === ParseState.FILTER_NAME) this.filters.push(new Filter(buffer, [], strictFilters))\n else {\n filterArgs.push(buffer)\n this.filters.push(new Filter(filterName, filterArgs, strictFilters))\n }\n }\n }\n value (scope: Scope) {\n return this.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(this.initial, scope))\n }\n}\n","import Value from './value'\nimport { stringify } from 'src/util/underscore'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport OutputToken from 'src/parser/output-token'\n\nexport default class Output extends Template implements ITemplate {\n value: Value\n constructor (token: OutputToken, strictFilters: boolean) {\n super(token)\n this.value = new Value(token.value, strictFilters)\n }\n async render (scope: Scope): Promise {\n const html = await this.value.value(scope)\n return stringify(html)\n }\n}\n","import Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport HTMLToken from 'src/parser/html-token'\n\nexport default class extends Template implements ITemplate {\n str: string\n constructor (token: HTMLToken) {\n super(token)\n this.str = token.value\n }\n async render (): Promise {\n return this.str\n }\n}\n","import { ParseError } from '../util/error'\nimport Liquid from 'src/liquid'\nimport ParseStream from './parse-stream'\nimport Token from './token'\nimport TagToken from './tag-token'\nimport OutputToken from './output-token'\nimport Tag from 'src/template/tag/tag'\nimport Output from 'src/template/output'\nimport HTML from 'src/template/html'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Parser {\n liquid: Liquid\n\n constructor (liquid: Liquid) {\n this.liquid = liquid\n }\n parse (tokens: Array) {\n let token\n const templates: ITemplate[] = []\n while ((token = tokens.shift())) {\n templates.push(this.parseToken(token, tokens))\n }\n return templates\n }\n parseToken (token: Token, remainTokens: Array) {\n try {\n if (token.type === 'tag') {\n return new Tag(token as TagToken, remainTokens, this.liquid)\n }\n if (token.type === 'output') {\n return new Output(token as OutputToken, this.liquid.options.strict_filters)\n }\n return new HTML(token)\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n parseStream (tokens: Array) {\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens))\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { AssignScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(re) as RegExpMatchArray\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (scope: Scope) {\n const ctx = new AssignScope()\n ctx[this.key] = this.liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n} as ITagImplOptions\n","/*\n * Call functions in serial until someone rejected.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function mapSeries (\n iterable: T1[],\n iteratee: (item: T1, idx: number, iterable: T1[]) => Promise | T2\n): Promise {\n let ret = Promise.resolve(0)\n const result: T2[] = []\n iterable.forEach(function (item, idx) {\n ret = ret\n .then(() => iteratee(item, idx, iterable))\n .then(x => result.push(x))\n })\n return ret.then(() => result)\n}\n","import { mapSeries } from 'src/util/promise'\nimport { isString, isObject, isArray } from 'src/util/underscore'\nimport { evalExp } from 'src/render/syntax'\nimport assert from 'src/util/assert'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n type: 'block',\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n this.variable = match[1]\n this.collection = match[2]\n this.reversed = !!match[3]\n\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endfor', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection] as string[]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]]) as Array<[string, any]>\n }\n }\n if (!isArray(collection) || !collection.length) {\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n if (this.reversed) collection.reverse()\n\n const contexts = collection.map((item: string, i: number) => {\n const ctx = {}\n ctx[this.variable] = item\n ctx['forloop'] = {\n first: i === 0,\n index: i + 1,\n index0: i,\n last: i === collection.length - 1,\n length: collection.length,\n rindex: collection.length - i,\n rindex0: collection.length - i - 1\n }\n return ctx\n })\n\n let html = ''\n let finished = false\n await mapSeries(contexts, async context => {\n if (finished) return\n\n scope.push(context)\n try {\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n html += e.resolvedHTML\n if (e.message === 'break') {\n finished = true\n }\n } else throw e\n }\n scope.pop(context)\n })\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = tagToken.args.match(re) as RegExpMatchArray\n assert(match, `${tagToken.args} not valid identifier`)\n\n this.variable = match[1]\n this.templates = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', () => stream.stop())\n .on('template', (tpl) => this.templates.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const html = await this.liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = new CaptureScope()\n ctx[this.variable] = html\n scope.push(ctx)\n }\n} as ITagImplOptions\n","import { evalExp } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p: ITemplate[] = []\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:when', (token: TagToken) => {\n this.cases.push({\n val: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endcase', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = evalExp(branch.val, scope)\n const cond = evalExp(this.cond, scope)\n if (val === cond) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value, quotedLine } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /[^\\s,]+/\nconst withRE = new RegExp(`with\\\\s+(${value.source})`)\n\nexport default {\n parse: function (token: TagToken) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticValue = match[0]\n }\n\n match = value.exec(token.args)\n if (match) {\n this.value = match[0]\n }\n\n match = withRE.exec(token.args)\n if (match) {\n this.with = match[1]\n }\n },\n render: async function (scope: Scope, hash: Hash) {\n let filepath\n if (scope.opts.dynamicPartials) {\n if (quotedLine.exec(this.value)) {\n const template = this.value.slice(1, -1)\n filepath = await this.liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = evalValue(this.value, scope)\n }\n } else {\n filepath = this.staticValue\n }\n assert(filepath, `cannot include with empty filename`)\n\n const originBlocks = scope.blocks\n const originBlockMode = scope.blockMode\n\n scope.blocks = {}\n scope.blockMode = BlockMode.OUTPUT\n if (this.with) {\n hash[filepath] = evalValue(this.with, scope)\n }\n const templates = await this.liquid.getTemplate(filepath, scope.opts)\n scope.push(hash)\n const html = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.blocks = originBlocks\n scope.blockMode = originBlockMode\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, DecrementScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(identifier) as RegExpMatchArray\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope: Scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new DecrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n return --context[this.variable]\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\nconst candidatesRE = new RegExp(rValue.source, 'g')\n\nexport default {\n parse: function (tagToken: TagToken) {\n let match: RegExpExecArray | null = groupRE.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.group = match[1] || ''\n const candidates = match[2]\n\n this.candidates = []\n\n while ((match = candidatesRE.exec(candidates))) {\n this.candidates.push(match[0])\n }\n assert(this.candidates.length, `empty candidates: ${tagToken.raw}`)\n },\n\n render: function (scope: Scope) {\n const group = evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n const groups = scope.groups\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n\n return evalValue(candidate, scope)\n }\n}\n","import { evalExp, isTruthy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', (token: TagToken) => {\n this.branches.push({\n cond: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endif', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (const branch of this.branches) {\n const cond = evalExp(branch.cond, scope)\n if (isTruthy(cond)) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match![0]\n },\n render: function (scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new IncrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n const val = context[this.variable]\n context[this.variable]++\n return val\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /\\S+/\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticLayout = match[0]\n }\n\n match = rValue.exec(token.args)\n if (match) {\n this.layout = match[0]\n }\n\n this.tpls = this.liquid.parser.parse(remainTokens)\n },\n render: async function (scope: Scope, hash: Hash) {\n const layout = scope.opts.dynamicPartials\n ? evalValue(this.layout, scope)\n : this.staticLayout\n assert(layout, `cannot apply layout with empty filename`)\n\n // render the remaining tokens immediately\n scope.blockMode = BlockMode.STORE\n const html = await this.liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.blocks[''] === undefined) {\n scope.blocks[''] = html\n }\n const templates = await this.liquid.getTemplate(layout, scope.opts)\n scope.push(hash)\n scope.blockMode = BlockMode.OUTPUT\n const partial = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n} as ITagImplOptions\n","import BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n this.tpls = [] as ITemplate[]\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', (tpl: ITemplate) => this.tpls.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${token.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const childDefined = scope.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await this.liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.blockMode === BlockMode.STORE) {\n scope.blocks[this.block] = html\n return ''\n }\n return html\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.tokens = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endraw') stream.stop()\n else this.tokens.push(token)\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: function () {\n return this.tokens.map((token: Token) => token.raw).join('')\n }\n}\n","import { mapSeries } from 'src/util/promise'\nimport assert from 'src/util/assert'\nimport { evalExp } from 'src/render/syntax'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.variable = match[1]\n this.collection = match[2]\n this.templates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope) || []\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = hash.cols || collection.length\n const contexts = collection.map((item: any) => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row: number = 0\n let html = ''\n await mapSeries(contexts, async (context, idx) => {\n row = Math.floor(idx / cols) + 1\n const col = (idx % cols) + 1\n if (col === 1) {\n if (row !== 1) {\n html += ''\n }\n html += ``\n }\n\n html += ``\n scope.push(context)\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n html += ''\n scope.pop(context)\n return html\n })\n if (row > 0) {\n html += ''\n }\n return html\n }\n} as ITagImplOptions\n","import { evalExp, isFalsy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n const cond = evalExp(this.cond, scope)\n return isFalsy(cond)\n ? this.liquid.renderer.renderTemplates(this.templates, scope)\n : this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('break')\n }\n}\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('continue')\n }\n}\n","import assign from './assign'\nimport For from './for'\nimport capture from './capture'\nimport Case from './case'\nimport comment from './comment'\nimport include from './include'\nimport decrement from './decrement'\nimport cycle from './cycle'\nimport If from './if'\nimport increment from './increment'\nimport layout from './layout'\nimport block from './block'\nimport raw from './raw'\nimport tablerow from './tablerow'\nimport unless from './unless'\nimport Break from './break'\nimport Continue from './continue'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst tags: { [key: string]: ITagImplOptions } = {\n assign, 'for': For, capture, 'case': Case, comment, include, decrement, increment, cycle, 'if': If, layout, block, raw, tablerow, unless, 'break': Break, 'continue': Continue\n}\n\nexport default tags\n","const escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nfunction escape (str: string) {\n return String(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str: string) {\n return String(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nexport default {\n 'escape': escape,\n 'escape_once': (str: string) => escape(unescape(str)),\n 'newline_to_br': (v: string) => v.replace(/\\n/g, '
'),\n 'strip_html': (v: string) => v.replace(/|||<.*?>/g, '')\n}\n","import { FilterImpl } from 'src/template/filter/filter-impl'\n\nexport default {\n 'append': (v: string, arg: string) => v + arg,\n 'prepend': (v: string, arg: string) => arg + v,\n 'capitalize': (str: string) => String(str).charAt(0).toUpperCase() + str.slice(1),\n 'lstrip': (v: string) => String(v).replace(/^\\s+/, ''),\n 'downcase': (v: string) => v.toLowerCase(),\n 'upcase': (str: string) => String(str).toUpperCase(),\n 'remove': (v: string, arg: string) => v.split(arg).join(''),\n 'remove_first': (v: string, l: string) => v.replace(l, ''),\n 'replace': (v: string, pattern: string, replacement: string) =>\n String(v).split(pattern).join(replacement),\n 'replace_first': (v: string, arg1: string, arg2: string) => String(v).replace(arg1, arg2),\n 'rstrip': (str: string) => String(str).replace(/\\s+$/, ''),\n 'split': (v: string, arg: string) => String(v).split(arg),\n 'strip': (v: string) => String(v).trim(),\n 'strip_newlines': (v: string) => String(v).replace(/\\n/g, ''),\n 'truncate': (v: string, l: number = 50, o: string = '...') => {\n v = String(v)\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v: string, l: number = 15, o: string = '...') => {\n const arr = v.split(/\\s+/)\n let ret = arr.slice(0, l).join(' ')\n if (arr.length >= l) ret += o\n return ret\n }\n} as {[key: string]: FilterImpl}\n","export default {\n 'abs': (v: number) => Math.abs(v),\n 'ceil': (v: number) => Math.ceil(v),\n 'divided_by': (v: number, arg: number) => v / arg,\n 'floor': (v: number) => Math.floor(v),\n 'minus': bindFixed((v: number, arg: number) => v - arg),\n 'modulo': bindFixed((v: number, arg: number) => v % arg),\n 'round': (v: number, arg: number = 0) => {\n const amp = Math.pow(10, arg)\n return Math.round(v * amp) / amp\n },\n 'plus': bindFixed((v: number, arg: number) => Number(v) + Number(arg)),\n 'times': (v: number, arg: number) => v * arg\n}\n\nfunction getFixed (v: number) {\n const p = String(v).split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction bindFixed (cb: (v: number, arg: number) => number) {\n return (l: number, r: number) => {\n const f = Math.max(getFixed(l), getFixed(r))\n return cb(l, r).toFixed(f)\n }\n}\n","export default {\n 'url_decode': (x: string) => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': (x: string) => x.split(' ').map(encodeURIComponent).join('+')\n}\n","import { last } from 'src/util/underscore'\n\nexport default {\n 'join': (v: any[], arg: string) => v.join(arg === undefined ? ' ' : arg),\n 'last': (v: T[]): T => last(v),\n 'first': (v: T[]): T => v[0],\n 'map': (arr: {[key: string]: T1}[], arg: string): T1[] => arr.map(v => v[arg]),\n 'reverse': (v: any[]) => v.reverse(),\n 'sort': (v: T[], arg: (lhs: T, rhs: T) => number) => v.sort(arg),\n 'size': (v: string | any[]) => v.length,\n 'concat': (v: T1[], arg: T2[] | T2): Array => Array.prototype.concat.call(v, arg),\n 'slice': (v: T[], begin: number, length: number): T[] => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'uniq': function (arr: T[]): T[] {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(String(val))) return false\n u[String(val)] = true\n return true\n })\n }\n}\n","import { padStart } from './underscore'\n\nconst monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst monthNamesShort = monthNames.map(abbr)\nconst dayNamesShort = dayNames.map(abbr)\nconst suffixes = {\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n 'default': 'th'\n}\n\nfunction abbr (str: string) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d: Date) {\n const feb = _date.isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n },\n\n getDayOfYear: function (d: Date) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += _date.daysInMonth(d)[i]\n }\n return num + d.getDate()\n },\n\n getWeekOfYear: function (d: Date, startDay: number) {\n // Skip to startDay of this week\n const now = this.getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return padStart(String(Math.floor((now - then) / 7) + 1), 2, '0')\n },\n\n isLeapYear: function (d: Date) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d: Date) {\n const str = d.getDate().toString()\n const index = parseInt(str.slice(-1))\n return suffixes[index] || suffixes['default']\n },\n\n century: function (d: Date) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst formatCodes = {\n a: function (d: Date) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d: Date) {\n return dayNames[d.getDay()]\n },\n b: function (d: Date) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d: Date) {\n return monthNames[d.getMonth()]\n },\n c: function (d: Date) {\n return d.toLocaleString()\n },\n C: function (d: Date) {\n return _date.century(d)\n },\n d: function (d: Date) {\n return padStart(d.getDate(), 2, '0')\n },\n e: function (d: Date) {\n return padStart(d.getDate(), 2)\n },\n H: function (d: Date) {\n return padStart(d.getHours(), 2, '0')\n },\n I: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2, '0')\n },\n j: function (d: Date) {\n return padStart(_date.getDayOfYear(d), 3, '0')\n },\n k: function (d: Date) {\n return padStart(d.getHours(), 2)\n },\n l: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2)\n },\n L: function (d: Date) {\n return padStart(d.getMilliseconds(), 3, '0')\n },\n m: function (d: Date) {\n return padStart(d.getMonth() + 1, 2, '0')\n },\n M: function (d: Date) {\n return padStart(d.getMinutes(), 2, '0')\n },\n p: function (d: Date) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d: Date) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d: Date) {\n return _date.getSuffix(d)\n },\n s: function (d: Date) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d: Date) {\n return padStart(d.getSeconds(), 2, '0')\n },\n u: function (d: Date) {\n return d.getDay() || 7\n },\n U: function (d: Date) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d: Date) {\n return d.getDay()\n },\n W: function (d: Date) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d: Date) {\n return d.toLocaleDateString()\n },\n X: function (d: Date) {\n return d.toLocaleTimeString()\n },\n y: function (d: Date) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d: Date) {\n return d.getFullYear()\n },\n z: function (d: Date) {\n const tz = d.getTimezoneOffset() / 60 * 100\n return (tz > 0 ? '-' : '+') + padStart(String(Math.abs(tz)), 4, '0')\n },\n '%': function () {\n return '%'\n }\n};\n(formatCodes as any).h = formatCodes.b;\n(formatCodes as any).N = formatCodes.L\n\nexport default function (d: Date, format: string) {\n let output = ''\n let remaining = format\n\n while (true) {\n const r = /%./g\n const results = r.exec(remaining)\n\n // No more format codes. Add the remaining text and return\n if (!results) {\n return output + remaining\n }\n\n // Add the preceding text\n output += remaining.slice(0, r.lastIndex - 2)\n remaining = remaining.slice(r.lastIndex)\n\n // Add the format code\n const ch = results[0].charAt(1)\n const func = formatCodes[ch]\n output += func ? func(d) : '%' + ch\n }\n}\n","import strftime from 'src/util/strftime'\nimport { isString } from 'src/util/underscore'\n\nexport default {\n 'date': (v: string | Date, arg: string) => {\n let date = v\n if (v === 'now') {\n date = new Date()\n } else if (isString(v)) {\n date = new Date(v)\n }\n return isValidDate(date) ? strftime(date, arg) : v\n }\n}\n\nfunction isValidDate (date: any): date is Date {\n return date instanceof Date && !isNaN(date.getTime())\n}\n","import { isTruthy } from 'src/render/syntax'\n\nexport default {\n 'default': (v: T1, arg: T2): T1 | T2 => isTruthy(v) ? v : arg\n}\n","import html from './html'\nimport str from './string'\nimport math from './math'\nimport url from './url'\nimport array from './array'\nimport date from './date'\nimport obj from './object'\n\nexport default { ...html, ...str, ...math, ...url, ...date, ...obj, ...array }\n","import Scope from './scope/scope'\nimport * as Types from './types'\nimport fs from 'src/fs'\nimport * as _ from './util/underscore'\nimport ITemplate from './template/itemplate'\nimport Tokenizer from './parser/tokenizer'\nimport Render from './render/render'\nimport Tag from './template/tag/tag'\nimport Filter from './template/filter/filter'\nimport Parser from './parser/parser'\nimport ITagImplOptions from './template/tag/itag-impl-options'\nimport Value from './template/value'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './render/syntax'\nimport builtinTags from './builtin/tags'\nimport builtinFilters from './builtin/filters'\nimport { LiquidOptions, NormalizedFullOptions, applyDefault, normalize } from './liquid-options'\nimport { FilterImpl } from './template/filter/filter-impl'\n\nexport default class Liquid {\n public options: NormalizedFullOptions\n public renderer: Render\n public parser: Parser\n private cache: object = {}\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n this.options = applyDefault(normalize(opts))\n this.parser = new Parser(this)\n this.renderer = new Render()\n this.tokenizer = new Tokenizer(this.options)\n\n _.forOwn(builtinTags, (conf, name) => this.registerTag(name, conf))\n _.forOwn(builtinFilters, (handler, name) => this.registerFilter(name, handler))\n }\n parse (html: string, filepath?: string) {\n const tokens = this.tokenizer.tokenize(html, filepath)\n return this.parser.parse(tokens)\n }\n render (tpl: Array, ctx?: object, opts?: LiquidOptions) {\n const options = { ...this.options, ...normalize(opts) }\n const scope = new Scope(ctx, options)\n return this.renderer.renderTemplates(tpl, scope)\n }\n async parseAndRender (html: string, ctx?: object, opts?: LiquidOptions) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n }\n async getTemplate (file: string, opts?: LiquidOptions) {\n const options = normalize(opts)\n const roots = options.root ? [...options.root, ...this.options.root] : this.options.root\n const paths = roots.map(root => fs.resolve(root, file, this.options.extname))\n\n for (const filepath of paths) {\n if (!(await fs.exists(filepath))) continue\n\n if (this.options.cache && this.cache[filepath]) return this.cache[filepath]\n const value = this.parse(await fs.readFile(filepath), filepath)\n if (this.options.cache) this.cache[filepath] = value\n return value\n }\n\n const err = new Error('ENOENT') as any\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`\n err.code = 'ENOENT'\n throw err\n }\n async renderFile (file: string, ctx?: object, opts?: LiquidOptions) {\n const options = normalize(opts)\n const templates = await this.getTemplate(file, options)\n return this.render(templates, ctx, opts)\n }\n evalValue (str: string, scope: Scope) {\n return new Value(str, this.options.strict_filters).value(scope)\n }\n registerFilter (name: string, filter: FilterImpl) {\n return Filter.register(name, filter)\n }\n registerTag (name: string, tag: ITagImplOptions) {\n return Tag.register(name, tag)\n }\n plugin (plugin: (this: Liquid, L: typeof Liquid) => void) {\n return plugin.call(this, Liquid)\n }\n express () {\n const self = this\n return function (this: any, filePath: string, ctx: object, cb: (err: Error | null, html?: string) => void) {\n const opts = { root: this.root }\n self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb)\n }\n }\n static default = Liquid\n static isTruthy = isTruthy\n static isFalsy = isFalsy\n static evalExp = evalExp\n static evalValue = evalValue\n static Types = Types\n}\n"],"names":["tslib_1.__extends","_\r\n .range","_.padStart","_.isArray","_.isString","BlockMode","_.last","_.isObject","_.isNil","_.isFunction","last","range","value","lexical.tagLine","operators","lexical.operators","lexical.quoteBalanced","lexical.rangeLine","ParseState","Value","HTML","re","hash","rValue","staticFileRE","_.forOwn","builtinTags"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"liquid.js","sources":["../src/util/underscore.ts","../src/util/error.ts","../src/util/assert.ts","../src/liquid-options.ts","../src/scope/block-mode.ts","../src/scope/scope.ts","../src/scope/scopes.ts","../src/fs/browser.ts","../src/parser/whitespace-ctrl.ts","../src/parser/token.ts","../src/parser/html-token.ts","../src/parser/delimited-token.ts","../src/parser/lexical.ts","../src/parser/tag-token.ts","../src/parser/output-token.ts","../src/parser/tokenizer.ts","../src/render/render.ts","../src/drop/icomparable.ts","../src/drop/drop.ts","../src/drop/idrop.ts","../src/drop/empty-drop.ts","../src/drop/blank-drop.ts","../src/drop/null-drop.ts","../src/render/syntax.ts","../src/template/tag/hash.ts","../src/template/template.ts","../src/template/tag/tag.ts","../src/template/filter/filter.ts","../src/parser/parse-stream.ts","../src/template/value.ts","../src/template/output.ts","../src/template/html.ts","../src/parser/parser.ts","../src/builtin/tags/assign.ts","../src/util/promise.ts","../src/builtin/tags/for.ts","../src/builtin/tags/capture.ts","../src/builtin/tags/case.ts","../src/builtin/tags/comment.ts","../src/builtin/tags/include.ts","../src/builtin/tags/decrement.ts","../src/builtin/tags/cycle.ts","../src/builtin/tags/if.ts","../src/builtin/tags/increment.ts","../src/builtin/tags/layout.ts","../src/builtin/tags/block.ts","../src/builtin/tags/raw.ts","../src/builtin/tags/tablerow.ts","../src/builtin/tags/unless.ts","../src/builtin/tags/break.ts","../src/builtin/tags/continue.ts","../src/builtin/tags/index.ts","../src/builtin/filters/html.ts","../src/builtin/filters/string.ts","../src/builtin/filters/math.ts","../src/builtin/filters/url.ts","../src/builtin/filters/array.ts","../src/util/strftime.ts","../src/builtin/filters/date.ts","../src/builtin/filters/object.ts","../src/builtin/filters/index.ts","../src/liquid.ts"],"sourcesContent":["const toStr = Object.prototype.toString\nconst arrToStr = Array.prototype.toString\n\n/*\n * Checks if value is classified as a String primitive or object.\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is a string, else false.\n */\nexport function isString (value: any): value is string {\n return toStr.call(value) === '[object String]'\n}\n\nexport function isFunction (value: any): value is Function {\n return typeof value === 'function'\n}\n\nexport function promisify (fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise;\nexport function promisify (fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void):(arg1: T1, arg2: T2) => Promise;\nexport function promisify (fn: any) {\n return function (...args: any[]) {\n return new Promise((resolve, reject) => {\n fn(...args, (err: Error, result: any) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value: any): string {\n if (isNil(value)) return ''\n if (isFunction(value.to_liquid)) return stringify(value.to_liquid())\n if (isFunction(value.toLiquid)) return stringify(value.toLiquid())\n if (isFunction(value.to_s)) return value.to_s()\n if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value)\n if (isFunction(value.toString)) return value.toString()\n return toStr.call(value)\n}\n\nfunction defaultToString (value: any): string {\n const cache: any[] = []\n return JSON.stringify(value, (key, value) => {\n if (isObject(value)) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n}\n\nexport function create (proto: T1): T2 {\n return Object.create(proto)\n}\n\nexport function isNil (value: any): boolean {\n return value === null || value === undefined\n}\n\nexport function isArray (value: any): value is any[] {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value: any): value is Error {\n const signature = toStr.call(value)\n // [object XXXError]\n return signature.substr(-6, 5) === 'Error' ||\n (typeof value.message === 'string' && typeof value.name === 'string')\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (\n object: {[key: string]: T} | undefined,\n iteratee: ((val: T, key: string, obj: {[key: string]: T}) => boolean | void)\n) {\n object = object || {}\n for (const k in object) {\n if (object.hasOwnProperty(k)) {\n if (iteratee(object[k], k, object) === false) break\n }\n }\n return object\n}\n\nexport function last (arr: T[]): T;\nexport function last (arr: string): string;\nexport function last (arr: any[] | string): any | string {\n return arr[arr.length - 1]\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value: any): value is object {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\n/*\n * A function to create flexibly-numbered lists of integers,\n * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.\n * Returns a list of integers from start (inclusive) to stop (exclusive),\n * incremented (or decremented) by step, exclusive.\n * Note that ranges that stop before they start are considered to be zero-length instead of\n * negative — if you'd like a negative range, use a negative step.\n */\nexport function range (start: number, stop?: number, step?: number) {\n if (stop === undefined) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr: number[] = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n\nexport function padStart (str: any, length: number, ch: string = ' ') {\n str = String(str)\n let n = length - str.length\n while (n-- > 0) str = ch + str\n return str\n}\n","import * as _ from './underscore'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\n\nabstract class LiquidError extends Error {\n private token: Token\n private originalError: Error\n constructor (err: Error, token: Token) {\n super(err.message)\n this.originalError = err\n this.token = token\n }\n protected update () {\n const err = this.originalError\n const context = mkContext(this.token)\n this.message = mkMessage(err.message, this.token)\n this.stack = this.message + '\\n' + context +\n '\\n' + this.stack + '\\nFrom ' + err.stack\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor (message: string, token: Token) {\n super(new Error(message), token)\n this.name = 'TokenizationError'\n super.update()\n }\n}\n\nexport class ParseError extends LiquidError {\n constructor (err: Error, token: Token) {\n super(err, token)\n this.name = 'ParseError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderError extends LiquidError {\n constructor (err: Error, tpl: ITemplate) {\n super(err, tpl.token)\n this.name = 'RenderError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderBreakError extends Error {\n resolvedHTML: string = ''\n constructor (message: string) {\n super(message)\n this.name = 'RenderBreakError'\n this.message = message + ''\n }\n}\n\nexport class AssertionError extends Error {\n constructor (message: string) {\n super(message)\n this.name = 'AssertionError'\n this.message = message + ''\n }\n}\n\nfunction mkContext (token: Token) {\n const lines = token.input.split('\\n')\n const begin = Math.max(token.line - 2, 1)\n const end = Math.min(token.line + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === token.line) ? '>> ' : ' '\n const num = _.padStart(String(lineNumber), String(end).length)\n const text = lines[lineNumber - 1]\n return `${indicator}${num}| ${text}`\n })\n .join('\\n')\n\n return context\n}\n\nfunction mkMessage (msg: string, token: Token) {\n if (token.file) msg += `, file:${token.file}`\n msg += `, line:${token.line}, col:${token.col}`\n return msg\n}\n","import { AssertionError } from './error'\n\nexport default function (predicate: any, message?: string) {\n if (!predicate) {\n message = message || `expect ${predicate} to be true`\n throw new AssertionError(message)\n }\n}\n","/* eslint-disable camelcase */\n\nimport * as _ from './util/underscore'\n\nexport interface LiquidOptions {\n /** `root` is a directory or an array of directories to resolve layouts and includes, as well as the filename passed in when calling `.renderFile()`. If an array, the files are looked up in the order they occur in the array. Defaults to `[\".\"]` */\n root?: string | string[]\n /** `extname` is used to lookup the template file when filepath doesn't include an extension name. Eg: setting to `\".html\"` will allow including file by basename. Defaults to `\"\"`. */\n extname?: string\n /** `cache` indicates whether or not to cache resolved templates. Defaults to `false`. */\n cache?: boolean\n /** `dynamicPartials`: if set, treat `` parameter in `{%include filepath %}`, `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */\n dynamicPartials?: boolean\n /** `strict_filters` is used to enable strict filter existence. If set to `false`, undefined filters will be rendered as empty string. Otherwise, undefined filters will cause an exception. Defaults to `false`. */\n strict_filters?: boolean\n /** `strict_variables` is used to enable strict variable derivation. If set to `false`, undefined variables will be rendered as empty string. Otherwise, undefined variables will cause an exception. Defaults to `false`. */\n strict_variables?: boolean\n /** `trim_tag_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of tags (`{% %}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_tag_right?: boolean\n /** `trim_tag_left` is similar to `trim_tag_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_tag_left?: boolean\n /** ``trim_output_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_output_right?: boolean\n /** `trim_output_left` is similar to `trim_output_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_output_left?: boolean\n /** `tag_delimiter_left` and `tag_delimiter_right` are used to override the delimiter for liquid tags **/\n tag_delimiter_left?: string,\n tag_delimiter_right?: string,\n /** `output_delimiter_left` and `output_delimiter_right` are used to override the delimiter for liquid outputs **/\n output_delimiter_left?: string,\n output_delimiter_right?: string,\n /** `greedy` is used to specify whether `trim_left`/`trim_right` is greedy. When set to `true`, all consecutive blank characters including `\\n` will be trimed regardless of line breaks. Defaults to `true`. */\n greedy?: boolean\n}\n\ninterface NormalizedOptions extends LiquidOptions {\n root?: string[]\n}\n\nexport interface NormalizedFullOptions extends NormalizedOptions {\n root: string[]\n extname: string\n cache: boolean\n dynamicPartials: boolean\n strict_filters: boolean\n strict_variables: boolean\n trim_tag_right: boolean\n trim_tag_left: boolean\n trim_output_right: boolean\n trim_output_left: boolean\n tag_delimiter_left: string,\n tag_delimiter_right: string,\n output_delimiter_left: string,\n output_delimiter_right: string,\n greedy: boolean\n}\n\nconst defaultOptions: NormalizedFullOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_output_right: false,\n trim_output_left: false,\n greedy: true,\n tag_delimiter_left: '{%',\n tag_delimiter_right: '%}',\n output_delimiter_left: '{{',\n output_delimiter_right: '}}',\n strict_filters: false,\n strict_variables: false\n}\n\nexport function normalize (options?: LiquidOptions): NormalizedOptions {\n options = options || {}\n if (options.hasOwnProperty('root')) {\n options.root = normalizeStringArray(options.root)\n }\n return options as NormalizedOptions\n}\n\nexport function applyDefault (options?: NormalizedOptions): NormalizedFullOptions {\n return { ...defaultOptions, ...options }\n}\n\nfunction normalizeStringArray (value: any): string[] {\n if (_.isArray(value)) return value as string[]\n if (_.isString(value)) return [value as string]\n return []\n}\n","enum BlockMode {\n /* store rendered html into blocks */\n OUTPUT,\n /* output rendered html directly */\n STORE\n}\n\nexport default BlockMode\n","import * as _ from '../util/underscore'\nimport { __assign } from 'tslib'\nimport assert from '../util/assert'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\nimport BlockMode from './block-mode'\n\nexport type Context = {\n [key: string]: any\n liquid_method_missing?: (key: string) => any // eslint-disable-line\n to_liquid?: () => any // eslint-disable-line\n toLiquid?: () => any // eslint-disable-line\n}\n\nexport default class Scope {\n opts: NormalizedFullOptions\n contexts: Array\n blocks: object = {}\n groups: {[key: string]: number} = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts?: NormalizedFullOptions) {\n this.opts = applyDefault(opts)\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => __assign(ctx, val), {})\n }\n get (path: string): any {\n const paths = this.propertyAccessSeq(path)\n const scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n return paths.reduce((value, key) => this.readProperty(value, key), scope)\n }\n set (path: string, v: any): void {\n const paths = this.propertyAccessSeq(path)\n let scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n paths.some((key, i) => {\n if (!_.isObject(scope)) {\n return true\n }\n if (i === paths.length - 1) {\n scope[key] = v\n return true\n }\n if (undefined === scope[key]) {\n scope[key] = {}\n }\n scope = scope[key]\n return false\n })\n }\n unshift (ctx: object) {\n return this.contexts.unshift(ctx)\n }\n push (ctx: object) {\n return this.contexts.push(ctx)\n }\n pop (ctx?: object): object | undefined {\n if (!arguments.length) {\n return this.contexts.pop()\n }\n const i = this.contexts.findIndex(scope => scope === ctx)\n if (i === -1) {\n throw new TypeError('scope not found, cannot pop')\n }\n return this.contexts.splice(i, 1)[0]\n }\n findContextFor (key: string, filter: ((conttext: object) => boolean) = () => true) {\n for (let i = this.contexts.length - 1; i >= 0; i--) {\n const candidate = this.contexts[i]\n if (!filter(candidate)) continue\n if (key in candidate) {\n return candidate\n }\n }\n return null\n }\n private readProperty (obj: Context, key: string) {\n let val\n if (_.isNil(obj)) {\n val = obj\n } else {\n obj = toLiquid(obj)\n val = key === 'size' ? readSize(obj) : obj[key]\n if (_.isFunction(obj.liquid_method_missing)) {\n val = obj.liquid_method_missing!(key)\n }\n }\n if (_.isNil(val) && this.opts.strict_variables) {\n throw new TypeError(`undefined variable: ${key}`)\n }\n return val\n }\n\n /*\n * Parse property access sequence from access string\n * @example\n * accessSeq(\"foo.bar\") // ['foo', 'bar']\n * accessSeq(\"foo['bar']\") // ['foo', 'bar']\n * accessSeq(\"foo['b]r']\") // ['foo', 'b]r']\n * accessSeq(\"foo[bar.coo]\") // ['foo', 'bar'], for bar.coo == 'bar'\n */\n propertyAccessSeq (str: string) {\n str = String(str)\n const seq: string[] = []\n let name = ''\n let j\n let i = 0\n while (i < str.length) {\n switch (str[i]) {\n case '[':\n push()\n\n const delemiter = str[i + 1]\n if (/['\"]/.test(delemiter)) { // foo[\"bar\"]\n j = str.indexOf(delemiter, i + 2)\n assert(j !== -1, `unbalanced ${delemiter}: ${str}`)\n name = str.slice(i + 2, j)\n push()\n i = j + 2\n } else { // foo[bar.coo]\n j = matchRightBracket(str, i + 1)\n assert(j !== -1, `unbalanced []: ${str}`)\n name = str.slice(i + 1, j)\n if (!/^[+-]?\\d+$/.test(name)) { // foo[bar] vs. foo[1]\n name = String(this.get(name))\n }\n push()\n i = j + 1\n }\n break\n case '.':// foo.bar, foo[0].bar\n push()\n i++\n break\n default:// foo.bar\n name += str[i]\n i++\n }\n }\n push()\n\n if (!seq.length) {\n throw new TypeError(`invalid path:\"${str}\"`)\n }\n return seq\n\n function push () {\n if (name.length) seq.push(name)\n name = ''\n }\n }\n}\n\nfunction toLiquid (obj: Context) {\n if (_.isFunction(obj.to_liquid)) {\n return obj.to_liquid()\n }\n if (_.isFunction(obj.toLiquid)) {\n return obj.toLiquid()\n }\n return obj\n}\n\nfunction readSize (obj: Context) {\n if (!_.isNil(obj.size)) return obj.size\n if (_.isArray(obj) || _.isString(obj)) return obj.length\n return obj.size\n}\n\nfunction matchRightBracket (str: string, begin: number) {\n let stack = 1 // count of '[' - count of ']'\n for (let i = begin; i < str.length; i++) {\n if (str[i] === '[') {\n stack++\n }\n if (str[i] === ']') {\n stack--\n if (stack === 0) {\n return i\n }\n }\n }\n return -1\n}\n","export class CaptureScope {}\nexport class AssignScope {}\nexport class IncrementScope {}\nexport class DecrementScope {}\n","import { last } from '../util/underscore'\nimport IFS from './ifs'\n\nfunction domResolve (root: string, path: string) {\n const base = document.createElement('base')\n base.href = root\n\n const head = document.getElementsByTagName('head')[0]\n head.insertBefore(base, head.firstChild)\n\n const a = document.createElement('a')\n a.href = path\n const resolved = a.href\n head.removeChild(base)\n\n return resolved\n}\n\nfunction resolve (root: string, filepath: string, ext: string) {\n if (root.length && last(root) !== '/') root += '/'\n const url = domResolve(root, filepath)\n return url.replace(/^(\\w+:\\/\\/[^/]+)(\\/[^?]+)/, (str, origin, path) => {\n const last = path.split('/').pop()\n if (/\\.\\w+$/.test(last)) return str\n return origin + path + ext\n })\n}\n\nasync function readFile (url: string): Promise {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.responseText as string)\n } else {\n reject(new Error(xhr.statusText))\n }\n }\n xhr.onerror = () => {\n reject(new Error('An error occurred whilst receiving the response.'))\n }\n xhr.open('GET', url)\n xhr.send()\n })\n}\n\nasync function exists () {\n return true\n}\n\nexport default { readFile, resolve, exists } as IFS\n","import DelimitedToken from 'src/parser/delimited-token'\nimport Token from 'src/parser/token'\nimport TagToken from 'src/parser/tag-token'\nimport { NormalizedFullOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: NormalizedFullOptions) {\n options = { greedy: true, ...options }\n let inRaw = false\n\n tokens.forEach((token: Token, i: number) => {\n if (shouldTrimLeft(token as DelimitedToken, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && (token as TagToken).name === 'raw') inRaw = true\n if (token.type === 'tag' && (token as TagToken).name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token as DelimitedToken, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimLeft || options.trim_tag_left\n if (token.type === 'output') return token.trimLeft || options.trim_output_left\n}\n\nfunction shouldTrimRight (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimRight || options.trim_tag_right\n if (token.type === 'output') return token.trimRight || options.trim_output_right\n}\n\nfunction trimLeft (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rLeft = greedy ? /\\s+$/g : /[\\t\\r ]*$/g\n token.value = token.value.replace(rLeft, '')\n}\n\nfunction trimRight (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rRight = greedy ? /^\\s+/g : /^[\\t\\r ]*\\n?/g\n token.value = token.value.replace(rRight, '')\n}\n","export default class Token {\n type: string = 'notset'\n line: number\n col: number\n raw: string\n input: string\n file?: string\n value: string\n constructor (raw: string, input: string, line: number, col: number, file?: string) {\n this.col = col\n this.line = line\n this.raw = raw\n this.value = raw\n this.input = input\n this.file = file\n }\n}\n","import Token from './token'\n\nexport default class HTMLToken extends Token {\n constructor (str: string, input: string, line: number, col: number, file?: string) {\n super(str, input, line, col, file)\n this.type = 'html'\n this.value = str\n }\n}\n","import Token from './token'\nimport { last } from 'src/util/underscore'\n\nexport default class DelimitedToken extends Token {\n trimLeft: boolean\n trimRight: boolean\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, input, line, pos, file)\n this.trimLeft = value[0] === '-'\n this.trimRight = last(value) === '-'\n this.value = value\n .slice(\n this.trimLeft ? 1 : 0,\n this.trimRight ? -1 : value.length\n )\n .trim()\n }\n}\n","// quote related\nconst singleQuoted = /'[^']*'/\nconst doubleQuoted = /\"[^\"]*\"/\nexport const quoted = new RegExp(`${singleQuoted.source}|${doubleQuoted.source}`)\nexport const quoteBalanced = new RegExp(`(?:${quoted.source}|[^'\"])*`)\n\n// basic types\nexport const number = /[+-]?(?:\\d+\\.?\\d*|\\.?\\d+)/\nexport const bool = /true|false/\n\n// property access\nexport const identifier = /[\\w-]+[?]?/\nexport const subscript = new RegExp(`\\\\[(?:${quoted.source}|[\\\\w-\\\\.]+)\\\\]`)\nexport const literal = new RegExp(`(?:${quoted.source}|${bool.source}|${number.source})`)\nexport const variable = new RegExp(`${identifier.source}(?:\\\\.${identifier.source}|${subscript.source})*`)\n\n// range related\nexport const rangeLimit = new RegExp(`(?:${variable.source}|${number.source})`)\nexport const range = new RegExp(`\\\\(${rangeLimit.source}\\\\.\\\\.${rangeLimit.source}\\\\)`)\nexport const rangeCapture = new RegExp(`\\\\((${rangeLimit.source})\\\\.\\\\.(${rangeLimit.source})\\\\)`)\n\nexport const value = new RegExp(`(?:${variable.source}|${literal.source}|${range.source})`)\n\n// hash related\nexport const hash = new RegExp(`(?:${identifier.source})\\\\s*:\\\\s*(?:${value.source})`)\nexport const hashCapture = new RegExp(`(${identifier.source})\\\\s*:\\\\s*(${value.source})`, 'g')\n\n// full match\nexport const tagLine = new RegExp(`^\\\\s*(${identifier.source})\\\\s*([\\\\s\\\\S]*?)\\\\s*$`)\nexport const numberLine = new RegExp(`^${number.source}$`)\nexport const boolLine = new RegExp(`^${bool.source}$`, 'i')\nexport const quotedLine = new RegExp(`^${quoted.source}$`)\nexport const rangeLine = new RegExp(`^${rangeCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isRange (str: string) {\n return rangeLine.test(str)\n}\n","import DelimitedToken from './delimited-token'\nimport { TokenizationError } from 'src/util/error'\nimport * as lexical from './lexical'\n\nexport default class TagToken extends DelimitedToken {\n name: string\n args: string\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'tag'\n const match = this.value.match(lexical.tagLine)\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, this)\n }\n this.name = match[1]\n this.args = match[2]\n }\n}\n","import DelimitedToken from './delimited-token'\n\nexport default class OutputToken extends DelimitedToken {\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'output'\n }\n}\n","import whiteSpaceCtrl from './whitespace-ctrl'\nimport HTMLToken from './html-token'\nimport TagToken from './tag-token'\nimport Token from './token'\nimport OutputToken from './output-token'\nimport { TokenizationError } from 'src/util/error'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: NormalizedFullOptions\n constructor (options?: NormalizedFullOptions) {\n this.options = applyDefault(options)\n }\n tokenize (input: string, file?: string) {\n const tokens: Token[] = []\n const tagL = this.options.tag_delimiter_left\n const tagR = this.options.tag_delimiter_right\n const outputL = this.options.output_delimiter_left\n const outputR = this.options.output_delimiter_right\n let p = 0\n let curLine = 1\n let state = ParseState.HTML\n let buffer = ''\n let lineBegin = 0\n let line = 1\n let col = 1\n\n while (p < input.length) {\n if (input[p] === '\\n') {\n curLine++\n lineBegin = p + 1\n }\n if (state === ParseState.HTML) {\n if (input.substr(p, outputL.length) === outputL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = outputL\n line = curLine\n col = p - lineBegin + 1\n p += outputL.length\n state = ParseState.OUTPUT\n continue\n } else if (input.substr(p, tagL.length) === tagL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = tagL\n line = curLine\n col = p - lineBegin + 1\n p += tagL.length\n state = ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && input.substr(p, outputR.length) === outputR) {\n buffer += outputR\n tokens.push(new OutputToken(buffer, buffer.slice(outputL.length, -outputR.length), input, line, col, file))\n p += outputR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n } else if (input.substr(p, tagR.length) === tagR) {\n buffer += tagR\n tokens.push(new TagToken(buffer, buffer.slice(tagL.length, -tagR.length), input, line, col, file))\n p += tagR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n }\n buffer += input[p++]\n }\n if (state !== ParseState.HTML) {\n const t = state === ParseState.OUTPUT ? 'output' : 'tag'\n const str = buffer.length > 16 ? buffer.slice(0, 13) + '...' : buffer\n throw new TokenizationError(\n `${t} \"${str}\" not closed`,\n new Token(buffer, input, line, col, file)\n )\n }\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n\n whiteSpaceCtrl(tokens, this.options)\n return tokens\n }\n}\n","import { RenderError } from 'src/util/error'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Render {\n async renderTemplates (templates: ITemplate[], scope: Scope) {\n assert(scope, 'unable to evalTemplates: scope undefined')\n\n let html = ''\n for (const tpl of templates) {\n try {\n html += await tpl.render(scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n e.resolvedHTML = html\n throw e\n }\n throw e.name === 'RenderError' ? e : new RenderError(e, tpl)\n }\n }\n return html\n }\n}\n","import { isFunction } from 'src/util/underscore'\n\nexport interface IComparable {\n equals: (rhs: any) => boolean\n gt: (rhs: any) => boolean\n geq: (rhs: any) => boolean\n lt: (rhs: any) => boolean\n leq: (rhs: any) => boolean\n}\n\nexport function isComparable (arg: any): arg is IComparable {\n return arg && isFunction(arg.equals)\n}\n","export abstract class Drop {\n}\n","import { Drop } from './drop'\nimport { isFunction } from 'src/util/underscore'\n\nexport interface IDrop {\n value(): any\n}\n\nexport function isDrop (value: any): value is IDrop {\n return value instanceof Drop && isFunction((value as any).value)\n}\n","import { Drop } from './drop'\nimport { IComparable } from './icomparable'\nimport { isObject, isString, isArray } from 'src/util/underscore'\nimport { IDrop } from 'src/drop/idrop'\n\nexport class EmptyDrop extends Drop implements IDrop, IComparable {\n equals (value: any) {\n if (isString(value) || isArray(value)) return value.length === 0\n if (isObject(value)) return Object.keys(value).length === 0\n return false\n }\n gt () {\n return false\n }\n geq () {\n return false\n }\n lt () {\n return false\n }\n leq () {\n return false\n }\n value () {\n return ''\n }\n}\n","import { isNil, isString } from 'src/util/underscore'\nimport { isDrop } from 'src/drop/idrop'\nimport { EmptyDrop } from 'src/drop/empty-drop'\n\nexport class BlankDrop extends EmptyDrop {\n equals (value: any) {\n if (value === false) return true\n if (isNil(isDrop(value) ? value.value() : value)) return true\n if (isString(value)) return /^\\s*$/.test(value)\n return super.equals(value)\n }\n}\n","import { Drop } from './drop'\nimport { IComparable } from './icomparable'\nimport { isNil } from 'src/util/underscore'\nimport { IDrop, isDrop } from 'src/drop/idrop'\nimport { BlankDrop } from 'src/drop/blank-drop'\n\nexport class NullDrop extends Drop implements IDrop, IComparable {\n equals (value: any) {\n return isNil(isDrop(value) ? value.value() : value) || value instanceof BlankDrop\n }\n gt () {\n return false\n }\n geq () {\n return false\n }\n lt () {\n return false\n }\n leq () {\n return false\n }\n value () {\n return null\n }\n}\n","import * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport Scope from 'src/scope/scope'\nimport { range, last } from 'src/util/underscore'\nimport { isComparable } from 'src/drop/icomparable'\nimport { NullDrop } from 'src/drop/null-drop'\nimport { EmptyDrop } from 'src/drop/empty-drop'\nimport { BlankDrop } from 'src/drop/blank-drop'\nimport { isDrop } from 'src/drop/idrop'\n\nconst binaryOperators: {[key: string]: (lhs: any, rhs: any) => boolean} = {\n '==': (l: any, r: any) => {\n if (isComparable(l)) return l.equals(r)\n if (isComparable(r)) return r.equals(l)\n return l === r\n },\n '!=': (l: any, r: any) => {\n if (isComparable(l)) return !l.equals(r)\n if (isComparable(r)) return !r.equals(l)\n return l !== r\n },\n '>': (l: any, r: any) => {\n if (isComparable(l)) return l.gt(r)\n if (isComparable(r)) return r.lt(l)\n return l > r\n },\n '<': (l: any, r: any) => {\n if (isComparable(l)) return l.lt(r)\n if (isComparable(r)) return r.gt(l)\n return l < r\n },\n '>=': (l: any, r: any) => {\n if (isComparable(l)) return l.geq(r)\n if (isComparable(r)) return r.leq(l)\n return l >= r\n },\n '<=': (l: any, r: any) => {\n if (isComparable(l)) return l.leq(r)\n if (isComparable(r)) return r.geq(l)\n return l <= r\n },\n 'contains': (l: any, r: any) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l: any, r: any) => isTruthy(l) && isTruthy(r),\n 'or': (l: any, r: any) => isTruthy(l) || isTruthy(r)\n}\n\nexport function parseExp (exp: string, scope: Scope): any {\n assert(scope, 'unable to parseExp: scope undefined')\n const operatorREs = lexical.operators\n let match\n for (let i = 0; i < operatorREs.length; i++) {\n const operatorRE = operatorREs[i]\n const expRE = new RegExp(`^(${lexical.quoteBalanced.source})(${operatorRE.source})(${lexical.quoteBalanced.source})$`)\n if ((match = exp.match(expRE))) {\n const l = parseExp(match[1], scope)\n const op = binaryOperators[match[2].trim()]\n const r = parseExp(match[3], scope)\n return op(l, r)\n }\n }\n\n if ((match = exp.match(lexical.rangeLine))) {\n const low = parseValue(match[1], scope)\n const high = parseValue(match[2], scope)\n return range(low, high + 1)\n }\n\n return parseValue(exp, scope)\n}\n\nexport function evalExp (str: string, scope: Scope): any {\n const value = parseExp(str, scope)\n return isDrop(value) ? value.value() : value\n}\n\nfunction parseValue (str: string, scope: Scope): any {\n if (!str) return null\n str = str.trim()\n\n if (str === 'true') return true\n if (str === 'false') return false\n if (str === 'nil' || str === 'null') return new NullDrop()\n if (str === 'empty') return new EmptyDrop()\n if (str === 'blank') return new BlankDrop()\n if (!isNaN(Number(str))) return Number(str)\n if ((str[0] === '\"' || str[0] === \"'\") && str[0] === last(str)) return str.slice(1, -1)\n return scope.get(str)\n}\n\nexport function evalValue (str: string, scope: Scope): any {\n const value = parseValue(str, scope)\n return isDrop(value) ? value.value() : value\n}\n\nexport function isTruthy (val: any): boolean {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val: any): boolean {\n return val === false || undefined === val || val === null\n}\n","import { hashCapture } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\n\n/**\n * Key-Value Pairs Representing Tag Arguments\n * Example:\n * For the markup `{% include 'head.html' foo='bar' %}`,\n * hash['foo'] === 'bar'\n */\nexport default class Hash {\n [key: string]: any\n constructor (markup: string, scope: Scope) {\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n this[k] = evalValue(v, scope)\n }\n }\n}\n","export default abstract class Template {\n token: T;\n constructor (token: T) {\n this.token = token\n }\n}\n","import { create, stringify } from 'src/util/underscore'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITagImpl from './itag-impl'\nimport ITagImplOptions from './itag-impl-options'\nimport Liquid from 'src/liquid'\nimport Hash from './hash'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\n\nexport default class Tag extends Template implements ITemplate {\n name: string\n private impl: ITagImpl\n static impls: { [key: string]: ITagImplOptions } = {}\n\n constructor (token: TagToken, tokens: Token[], liquid: Liquid) {\n super(token)\n this.name = token.name\n\n const impl = Tag.impls[token.name]\n assert(impl, `tag ${token.name} not found`)\n this.impl = create(impl)\n this.impl.liquid = liquid\n if (this.impl.parse) {\n this.impl.parse(token, tokens)\n }\n }\n async render (scope: Scope) {\n const hash = new Hash(this.token.args, scope)\n const impl = this.impl\n if (typeof impl.render !== 'function') {\n return ''\n }\n const html = await impl.render(scope, hash)\n return stringify(html)\n }\n static register (name: string, tag: ITagImplOptions) {\n Tag.impls[name] = tag\n }\n static clear () {\n Tag.impls = {}\n }\n}\n","import { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\nimport { FilterImpl } from './filter-impl'\n\nexport default class Filter {\n name: string\n impl: FilterImpl\n args: string[]\n private static impls: {[key: string]: FilterImpl} = {}\n\n constructor (name: string, args: string[], strictFilters: boolean) {\n const impl = Filter.impls[name]\n if (!impl && strictFilters) throw new TypeError(`undefined filter: ${name}`)\n\n this.name = name\n this.impl = impl || (x => x)\n this.args = args\n }\n render (value: any, scope: Scope): any {\n const args = this.args.map(arg => evalValue(arg, scope))\n return this.impl.apply(null, [value, ...args])\n }\n static register (name: string, filter: FilterImpl) {\n Filter.impls[name] = filter\n }\n static clear () {\n Filter.impls = {}\n }\n}\n","import Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from './tag-token'\n\ntype ParseToken = ((token: Token, remainTokens: Array) => ITemplate)\n\nexport default class ParseStream {\n private tokens: Array\n private handlers: {[key: string]: (arg: any) => void} = {}\n private stopRequested: boolean = false\n private parseToken: ParseToken\n\n constructor (tokens: Array, parseToken: ParseToken) {\n this.tokens = tokens\n this.parseToken = parseToken\n }\n on (name: string, cb: (arg: T) => void): ParseStream {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: T) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n return false\n }\n start () {\n this.trigger('start')\n let token: Token | undefined\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' && this.trigger(`tag:${(token).name}`, token)) {\n continue\n }\n const template = this.parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n }\n stop () {\n this.stopRequested = true\n return this\n }\n}\n","import { evalExp } from 'src/render/syntax'\nimport Filter from './filter/filter'\nimport Scope from 'src/scope/scope'\n\nenum ParseState {\n INIT = 0,\n FILTER_NAME = 1,\n FILTER_ARG = 2\n}\n\nexport default class {\n initial: any\n filters: Array = []\n\n /**\n * @param str value string, like: \"i have a dream | truncate: 3\n */\n constructor (str: string, strictFilters: boolean) {\n let buffer = ''\n let quoted = ''\n let state = ParseState.INIT\n let sealed = false\n\n let filterName = ''\n let filterArgs: string[] = []\n\n for (let i = 0; i < str.length; i++) {\n if (quoted) {\n if (str[i] === quoted) {\n quoted = ''\n sealed = true\n }\n buffer += str[i]\n } else if (/\\s/.test(str[i])) {\n if (!buffer) continue\n else sealed = true\n } else if (str[i] === '|') {\n if (state === ParseState.INIT) {\n this.initial = buffer\n } else {\n if (state === ParseState.FILTER_NAME) filterName = buffer\n else filterArgs.push(buffer)\n this.filters.push(new Filter(filterName, filterArgs, strictFilters))\n filterName = ''\n filterArgs = []\n }\n state = ParseState.FILTER_NAME\n buffer = ''\n sealed = false\n } else if (state === ParseState.FILTER_NAME && str[i] === ':') {\n filterName = buffer\n state = ParseState.FILTER_ARG\n buffer = ''\n sealed = false\n } else if (state === ParseState.FILTER_ARG && str[i] === ',') {\n filterArgs.push(buffer)\n buffer = ''\n sealed = false\n } else if (sealed) continue\n else {\n if ((str[i] === '\"' || str[i] === \"'\") && !quoted) quoted = str[i]\n buffer += str[i]\n }\n }\n\n if (buffer) {\n if (state === ParseState.INIT) this.initial = buffer\n else if (state === ParseState.FILTER_NAME) this.filters.push(new Filter(buffer, [], strictFilters))\n else {\n filterArgs.push(buffer)\n this.filters.push(new Filter(filterName, filterArgs, strictFilters))\n }\n }\n }\n value (scope: Scope) {\n return this.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(this.initial, scope))\n }\n}\n","import Value from './value'\nimport { stringify } from 'src/util/underscore'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport OutputToken from 'src/parser/output-token'\n\nexport default class Output extends Template implements ITemplate {\n value: Value\n constructor (token: OutputToken, strictFilters: boolean) {\n super(token)\n this.value = new Value(token.value, strictFilters)\n }\n async render (scope: Scope): Promise {\n const html = await this.value.value(scope)\n return stringify(html)\n }\n}\n","import Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport HTMLToken from 'src/parser/html-token'\n\nexport default class extends Template implements ITemplate {\n str: string\n constructor (token: HTMLToken) {\n super(token)\n this.str = token.value\n }\n async render (): Promise {\n return this.str\n }\n}\n","import { ParseError } from '../util/error'\nimport Liquid from 'src/liquid'\nimport ParseStream from './parse-stream'\nimport Token from './token'\nimport TagToken from './tag-token'\nimport OutputToken from './output-token'\nimport Tag from 'src/template/tag/tag'\nimport Output from 'src/template/output'\nimport HTML from 'src/template/html'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Parser {\n liquid: Liquid\n\n constructor (liquid: Liquid) {\n this.liquid = liquid\n }\n parse (tokens: Array) {\n let token\n const templates: ITemplate[] = []\n while ((token = tokens.shift())) {\n templates.push(this.parseToken(token, tokens))\n }\n return templates\n }\n parseToken (token: Token, remainTokens: Array) {\n try {\n if (token.type === 'tag') {\n return new Tag(token as TagToken, remainTokens, this.liquid)\n }\n if (token.type === 'output') {\n return new Output(token as OutputToken, this.liquid.options.strict_filters)\n }\n return new HTML(token)\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n parseStream (tokens: Array) {\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens))\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { AssignScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(re) as RegExpMatchArray\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (scope: Scope) {\n const ctx = new AssignScope()\n ctx[this.key] = this.liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n} as ITagImplOptions\n","/*\n * Call functions in serial until someone rejected.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function mapSeries (\n iterable: T1[],\n iteratee: (item: T1, idx: number, iterable: T1[]) => Promise | T2\n): Promise {\n let ret = Promise.resolve(0)\n const result: T2[] = []\n iterable.forEach(function (item, idx) {\n ret = ret\n .then(() => iteratee(item, idx, iterable))\n .then(x => result.push(x))\n })\n return ret.then(() => result)\n}\n","import { mapSeries } from 'src/util/promise'\nimport { isString, isObject, isArray } from 'src/util/underscore'\nimport { evalExp } from 'src/render/syntax'\nimport assert from 'src/util/assert'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n type: 'block',\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n this.variable = match[1]\n this.collection = match[2]\n this.reversed = !!match[3]\n\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endfor', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection] as string[]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]]) as Array<[string, any]>\n }\n }\n if (!isArray(collection) || !collection.length) {\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n if (this.reversed) collection.reverse()\n\n const contexts = collection.map((item: string, i: number) => {\n const ctx = {}\n ctx[this.variable] = item\n ctx['forloop'] = {\n first: i === 0,\n index: i + 1,\n index0: i,\n last: i === collection.length - 1,\n length: collection.length,\n rindex: collection.length - i,\n rindex0: collection.length - i - 1\n }\n return ctx\n })\n\n let html = ''\n let finished = false\n await mapSeries(contexts, async context => {\n if (finished) return\n\n scope.push(context)\n try {\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n html += e.resolvedHTML\n if (e.message === 'break') {\n finished = true\n }\n } else throw e\n }\n scope.pop(context)\n })\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = tagToken.args.match(re) as RegExpMatchArray\n assert(match, `${tagToken.args} not valid identifier`)\n\n this.variable = match[1]\n this.templates = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', () => stream.stop())\n .on('template', (tpl) => this.templates.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const html = await this.liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = new CaptureScope()\n ctx[this.variable] = html\n scope.push(ctx)\n }\n} as ITagImplOptions\n","import { evalExp } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p: ITemplate[] = []\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:when', (token: TagToken) => {\n this.cases.push({\n val: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endcase', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = evalExp(branch.val, scope)\n const cond = evalExp(this.cond, scope)\n if (val === cond) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value, quotedLine } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /[^\\s,]+/\nconst withRE = new RegExp(`with\\\\s+(${value.source})`)\n\nexport default {\n parse: function (token: TagToken) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticValue = match[0]\n }\n\n match = value.exec(token.args)\n if (match) {\n this.value = match[0]\n }\n\n match = withRE.exec(token.args)\n if (match) {\n this.with = match[1]\n }\n },\n render: async function (scope: Scope, hash: Hash) {\n let filepath\n if (scope.opts.dynamicPartials) {\n if (quotedLine.exec(this.value)) {\n const template = this.value.slice(1, -1)\n filepath = await this.liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = evalValue(this.value, scope)\n }\n } else {\n filepath = this.staticValue\n }\n assert(filepath, `cannot include with empty filename`)\n\n const originBlocks = scope.blocks\n const originBlockMode = scope.blockMode\n\n scope.blocks = {}\n scope.blockMode = BlockMode.OUTPUT\n if (this.with) {\n hash[filepath] = evalValue(this.with, scope)\n }\n const templates = await this.liquid.getTemplate(filepath, scope.opts)\n scope.push(hash)\n const html = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.blocks = originBlocks\n scope.blockMode = originBlockMode\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, DecrementScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(identifier) as RegExpMatchArray\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope: Scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new DecrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n return --context[this.variable]\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\nconst candidatesRE = new RegExp(rValue.source, 'g')\n\nexport default {\n parse: function (tagToken: TagToken) {\n let match: RegExpExecArray | null = groupRE.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.group = match[1] || ''\n const candidates = match[2]\n\n this.candidates = []\n\n while ((match = candidatesRE.exec(candidates))) {\n this.candidates.push(match[0])\n }\n assert(this.candidates.length, `empty candidates: ${tagToken.raw}`)\n },\n\n render: function (scope: Scope) {\n const group = evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n const groups = scope.groups\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n\n return evalValue(candidate, scope)\n }\n}\n","import { evalExp, isTruthy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', (token: TagToken) => {\n this.branches.push({\n cond: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endif', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (const branch of this.branches) {\n const cond = evalExp(branch.cond, scope)\n if (isTruthy(cond)) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match![0]\n },\n render: function (scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new IncrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n const val = context[this.variable]\n context[this.variable]++\n return val\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /\\S+/\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticLayout = match[0]\n }\n\n match = rValue.exec(token.args)\n if (match) {\n this.layout = match[0]\n }\n\n this.tpls = this.liquid.parser.parse(remainTokens)\n },\n render: async function (scope: Scope, hash: Hash) {\n const layout = scope.opts.dynamicPartials\n ? evalValue(this.layout, scope)\n : this.staticLayout\n assert(layout, `cannot apply layout with empty filename`)\n\n // render the remaining tokens immediately\n scope.blockMode = BlockMode.STORE\n const html = await this.liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.blocks[''] === undefined) {\n scope.blocks[''] = html\n }\n const templates = await this.liquid.getTemplate(layout, scope.opts)\n scope.push(hash)\n scope.blockMode = BlockMode.OUTPUT\n const partial = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n} as ITagImplOptions\n","import BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n this.tpls = [] as ITemplate[]\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', (tpl: ITemplate) => this.tpls.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${token.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const childDefined = scope.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await this.liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.blockMode === BlockMode.STORE) {\n scope.blocks[this.block] = html\n return ''\n }\n return html\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.tokens = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endraw') stream.stop()\n else this.tokens.push(token)\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: function () {\n return this.tokens.map((token: Token) => token.raw).join('')\n }\n}\n","import { mapSeries } from 'src/util/promise'\nimport assert from 'src/util/assert'\nimport { evalExp } from 'src/render/syntax'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.variable = match[1]\n this.collection = match[2]\n this.templates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope) || []\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = hash.cols || collection.length\n const contexts = collection.map((item: any) => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row: number = 0\n let html = ''\n await mapSeries(contexts, async (context, idx) => {\n row = Math.floor(idx / cols) + 1\n const col = (idx % cols) + 1\n if (col === 1) {\n if (row !== 1) {\n html += ''\n }\n html += ``\n }\n\n html += ``\n scope.push(context)\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n html += ''\n scope.pop(context)\n return html\n })\n if (row > 0) {\n html += ''\n }\n return html\n }\n} as ITagImplOptions\n","import { evalExp, isFalsy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n const cond = evalExp(this.cond, scope)\n return isFalsy(cond)\n ? this.liquid.renderer.renderTemplates(this.templates, scope)\n : this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('break')\n }\n}\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('continue')\n }\n}\n","import assign from './assign'\nimport For from './for'\nimport capture from './capture'\nimport Case from './case'\nimport comment from './comment'\nimport include from './include'\nimport decrement from './decrement'\nimport cycle from './cycle'\nimport If from './if'\nimport increment from './increment'\nimport layout from './layout'\nimport block from './block'\nimport raw from './raw'\nimport tablerow from './tablerow'\nimport unless from './unless'\nimport Break from './break'\nimport Continue from './continue'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst tags: { [key: string]: ITagImplOptions } = {\n assign, 'for': For, capture, 'case': Case, comment, include, decrement, increment, cycle, 'if': If, layout, block, raw, tablerow, unless, 'break': Break, 'continue': Continue\n}\n\nexport default tags\n","const escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nfunction escape (str: string) {\n return String(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str: string) {\n return String(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nexport default {\n 'escape': escape,\n 'escape_once': (str: string) => escape(unescape(str)),\n 'newline_to_br': (v: string) => v.replace(/\\n/g, '
'),\n 'strip_html': (v: string) => v.replace(/|||<.*?>/g, '')\n}\n","import { FilterImpl } from 'src/template/filter/filter-impl'\n\nexport default {\n 'append': (v: string, arg: string) => v + arg,\n 'prepend': (v: string, arg: string) => arg + v,\n 'capitalize': (str: string) => String(str).charAt(0).toUpperCase() + str.slice(1),\n 'lstrip': (v: string) => String(v).replace(/^\\s+/, ''),\n 'downcase': (v: string) => v.toLowerCase(),\n 'upcase': (str: string) => String(str).toUpperCase(),\n 'remove': (v: string, arg: string) => v.split(arg).join(''),\n 'remove_first': (v: string, l: string) => v.replace(l, ''),\n 'replace': (v: string, pattern: string, replacement: string) =>\n String(v).split(pattern).join(replacement),\n 'replace_first': (v: string, arg1: string, arg2: string) => String(v).replace(arg1, arg2),\n 'rstrip': (str: string) => String(str).replace(/\\s+$/, ''),\n 'split': (v: string, arg: string) => String(v).split(arg),\n 'strip': (v: string) => String(v).trim(),\n 'strip_newlines': (v: string) => String(v).replace(/\\n/g, ''),\n 'truncate': (v: string, l: number = 50, o: string = '...') => {\n v = String(v)\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v: string, l: number = 15, o: string = '...') => {\n const arr = v.split(/\\s+/)\n let ret = arr.slice(0, l).join(' ')\n if (arr.length >= l) ret += o\n return ret\n }\n} as {[key: string]: FilterImpl}\n","export default {\n 'abs': (v: number) => Math.abs(v),\n 'ceil': (v: number) => Math.ceil(v),\n 'divided_by': (v: number, arg: number) => v / arg,\n 'floor': (v: number) => Math.floor(v),\n 'minus': bindFixed((v: number, arg: number) => v - arg),\n 'modulo': bindFixed((v: number, arg: number) => v % arg),\n 'round': (v: number, arg: number = 0) => {\n const amp = Math.pow(10, arg)\n return Math.round(v * amp) / amp\n },\n 'plus': bindFixed((v: number, arg: number) => Number(v) + Number(arg)),\n 'times': (v: number, arg: number) => v * arg\n}\n\nfunction getFixed (v: number) {\n const p = String(v).split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction bindFixed (cb: (v: number, arg: number) => number) {\n return (l: number, r: number) => {\n const f = Math.max(getFixed(l), getFixed(r))\n return cb(l, r).toFixed(f)\n }\n}\n","export default {\n 'url_decode': (x: string) => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': (x: string) => x.split(' ').map(encodeURIComponent).join('+')\n}\n","import { last } from 'src/util/underscore'\n\nexport default {\n 'join': (v: any[], arg: string) => v.join(arg === undefined ? ' ' : arg),\n 'last': (v: T[]): T => last(v),\n 'first': (v: T[]): T => v[0],\n 'map': (arr: {[key: string]: T1}[], arg: string): T1[] => arr.map(v => v[arg]),\n 'reverse': (v: any[]) => v.reverse(),\n 'sort': (v: T[], arg: (lhs: T, rhs: T) => number) => v.sort(arg),\n 'size': (v: string | any[]) => v.length,\n 'concat': (v: T1[], arg: T2[] | T2): Array => Array.prototype.concat.call(v, arg),\n 'slice': (v: T[], begin: number, length: number): T[] => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'uniq': function (arr: T[]): T[] {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(String(val))) return false\n u[String(val)] = true\n return true\n })\n }\n}\n","import { padStart } from './underscore'\n\nconst monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst monthNamesShort = monthNames.map(abbr)\nconst dayNamesShort = dayNames.map(abbr)\nconst suffixes = {\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n 'default': 'th'\n}\n\nfunction abbr (str: string) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d: Date) {\n const feb = _date.isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n },\n\n getDayOfYear: function (d: Date) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += _date.daysInMonth(d)[i]\n }\n return num + d.getDate()\n },\n\n getWeekOfYear: function (d: Date, startDay: number) {\n // Skip to startDay of this week\n const now = this.getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return padStart(String(Math.floor((now - then) / 7) + 1), 2, '0')\n },\n\n isLeapYear: function (d: Date) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d: Date) {\n const str = d.getDate().toString()\n const index = parseInt(str.slice(-1))\n return suffixes[index] || suffixes['default']\n },\n\n century: function (d: Date) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst formatCodes = {\n a: function (d: Date) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d: Date) {\n return dayNames[d.getDay()]\n },\n b: function (d: Date) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d: Date) {\n return monthNames[d.getMonth()]\n },\n c: function (d: Date) {\n return d.toLocaleString()\n },\n C: function (d: Date) {\n return _date.century(d)\n },\n d: function (d: Date) {\n return padStart(d.getDate(), 2, '0')\n },\n e: function (d: Date) {\n return padStart(d.getDate(), 2)\n },\n H: function (d: Date) {\n return padStart(d.getHours(), 2, '0')\n },\n I: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2, '0')\n },\n j: function (d: Date) {\n return padStart(_date.getDayOfYear(d), 3, '0')\n },\n k: function (d: Date) {\n return padStart(d.getHours(), 2)\n },\n l: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2)\n },\n L: function (d: Date) {\n return padStart(d.getMilliseconds(), 3, '0')\n },\n m: function (d: Date) {\n return padStart(d.getMonth() + 1, 2, '0')\n },\n M: function (d: Date) {\n return padStart(d.getMinutes(), 2, '0')\n },\n p: function (d: Date) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d: Date) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d: Date) {\n return _date.getSuffix(d)\n },\n s: function (d: Date) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d: Date) {\n return padStart(d.getSeconds(), 2, '0')\n },\n u: function (d: Date) {\n return d.getDay() || 7\n },\n U: function (d: Date) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d: Date) {\n return d.getDay()\n },\n W: function (d: Date) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d: Date) {\n return d.toLocaleDateString()\n },\n X: function (d: Date) {\n return d.toLocaleTimeString()\n },\n y: function (d: Date) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d: Date) {\n return d.getFullYear()\n },\n z: function (d: Date) {\n const tz = d.getTimezoneOffset() / 60 * 100\n return (tz > 0 ? '-' : '+') + padStart(String(Math.abs(tz)), 4, '0')\n },\n '%': function () {\n return '%'\n }\n};\n(formatCodes as any).h = formatCodes.b;\n(formatCodes as any).N = formatCodes.L\n\nexport default function (d: Date, format: string) {\n let output = ''\n let remaining = format\n\n while (true) {\n const r = /%./g\n const results = r.exec(remaining)\n\n // No more format codes. Add the remaining text and return\n if (!results) {\n return output + remaining\n }\n\n // Add the preceding text\n output += remaining.slice(0, r.lastIndex - 2)\n remaining = remaining.slice(r.lastIndex)\n\n // Add the format code\n const ch = results[0].charAt(1)\n const func = formatCodes[ch]\n output += func ? func(d) : '%' + ch\n }\n}\n","import strftime from 'src/util/strftime'\nimport { isString } from 'src/util/underscore'\n\nexport default {\n 'date': (v: string | Date, arg: string) => {\n let date = v\n if (v === 'now') {\n date = new Date()\n } else if (isString(v)) {\n date = new Date(v)\n }\n return isValidDate(date) ? strftime(date, arg) : v\n }\n}\n\nfunction isValidDate (date: any): date is Date {\n return date instanceof Date && !isNaN(date.getTime())\n}\n","import { isTruthy } from 'src/render/syntax'\n\nexport default {\n 'default': (v: T1, arg: T2): T1 | T2 => isTruthy(v) ? v : arg\n}\n","import html from './html'\nimport str from './string'\nimport math from './math'\nimport url from './url'\nimport array from './array'\nimport date from './date'\nimport obj from './object'\n\nexport default { ...html, ...str, ...math, ...url, ...date, ...obj, ...array }\n","import Scope from './scope/scope'\nimport * as Types from './types'\nimport fs from 'src/fs'\nimport * as _ from './util/underscore'\nimport ITemplate from './template/itemplate'\nimport Tokenizer from './parser/tokenizer'\nimport Render from './render/render'\nimport Tag from './template/tag/tag'\nimport Filter from './template/filter/filter'\nimport Parser from './parser/parser'\nimport ITagImplOptions from './template/tag/itag-impl-options'\nimport Value from './template/value'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './render/syntax'\nimport builtinTags from './builtin/tags'\nimport builtinFilters from './builtin/filters'\nimport { LiquidOptions, NormalizedFullOptions, applyDefault, normalize } from './liquid-options'\nimport { FilterImpl } from './template/filter/filter-impl'\n\nexport default class Liquid {\n public options: NormalizedFullOptions\n public renderer: Render\n public parser: Parser\n private cache: object = {}\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n this.options = applyDefault(normalize(opts))\n this.parser = new Parser(this)\n this.renderer = new Render()\n this.tokenizer = new Tokenizer(this.options)\n\n _.forOwn(builtinTags, (conf, name) => this.registerTag(name, conf))\n _.forOwn(builtinFilters, (handler, name) => this.registerFilter(name, handler))\n }\n parse (html: string, filepath?: string) {\n const tokens = this.tokenizer.tokenize(html, filepath)\n return this.parser.parse(tokens)\n }\n render (tpl: Array, ctx?: object, opts?: LiquidOptions) {\n const options = { ...this.options, ...normalize(opts) }\n const scope = new Scope(ctx, options)\n return this.renderer.renderTemplates(tpl, scope)\n }\n async parseAndRender (html: string, ctx?: object, opts?: LiquidOptions) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n }\n async getTemplate (file: string, opts?: LiquidOptions) {\n const options = normalize(opts)\n const roots = options.root ? [...options.root, ...this.options.root] : this.options.root\n const paths = roots.map(root => fs.resolve(root, file, this.options.extname))\n\n for (const filepath of paths) {\n if (!(await fs.exists(filepath))) continue\n\n if (this.options.cache && this.cache[filepath]) return this.cache[filepath]\n const value = this.parse(await fs.readFile(filepath), filepath)\n if (this.options.cache) this.cache[filepath] = value\n return value\n }\n\n const err = new Error('ENOENT') as any\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`\n err.code = 'ENOENT'\n throw err\n }\n async renderFile (file: string, ctx?: object, opts?: LiquidOptions) {\n const options = normalize(opts)\n const templates = await this.getTemplate(file, options)\n return this.render(templates, ctx, opts)\n }\n evalValue (str: string, scope: Scope) {\n return new Value(str, this.options.strict_filters).value(scope)\n }\n registerFilter (name: string, filter: FilterImpl) {\n return Filter.register(name, filter)\n }\n registerTag (name: string, tag: ITagImplOptions) {\n return Tag.register(name, tag)\n }\n plugin (plugin: (this: Liquid, L: typeof Liquid) => void) {\n return plugin.call(this, Liquid)\n }\n express () {\n const self = this\n return function (this: any, filePath: string, ctx: object, cb: (err: Error | null, html?: string) => void) {\n const opts = { root: this.root }\n self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb)\n }\n }\n static default = Liquid\n static isTruthy = isTruthy\n static isFalsy = isFalsy\n static evalExp = evalExp\n static evalValue = evalValue\n static Types = Types\n}\n"],"names":["tslib_1.__extends","_\r\n .range","_.padStart","_.isArray","_.isString","BlockMode","_.last","_.isObject","_.isNil","_.isFunction","last","range","value","lexical.tagLine","lexical.operators","lexical.quoteBalanced","lexical.rangeLine","ParseState","Value","HTML","re","hash","rValue","staticFileRE","_.forOwn","builtinTags"],"mappings":"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"} \ No newline at end of file diff --git a/dist/liquid.min.js b/dist/liquid.min.js index 2d00ea146..cd1fd6f14 100644 --- a/dist/liquid.min.js +++ b/dist/liquid.min.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Liquid=e()}(this,function(){"use strict";var r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)};function e(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}var v=function(){return(v=Object.assign||function(t){for(var e,n=1,r=arguments.length;ns[0]&&e[1]> ":" ",n=w(String(t),String(s).length),r=o[t-1];return""+e+n+"| "+r}).join("\n"));this.message=function(t,e){e.file&&(t+=", file:"+e.file);return t+=", line:"+e.line+", col:"+e.col}(e.message,this.token),this.stack=this.message+"\n"+n+"\n"+this.stack+"\nFrom "+e.stack},t}(Error),y=function(r){function t(t,e){var n=r.call(this,new Error(t),e)||this;return n.name="TokenizationError",r.prototype.update.call(n),n}return e(t,r),t}(t),n=function(r){function t(t,e){var n=r.call(this,t,e)||this;return n.name="ParseError",n.message=t.message,r.prototype.update.call(n),n}return e(t,r),t}(t),b=function(r){function t(t,e){var n=r.call(this,t,e.token)||this;return n.name="RenderError",n.message=t.message,r.prototype.update.call(n),n}return e(t,r),t}(t),T=function(n){function t(t){var e=n.call(this,t)||this;return e.resolvedHTML="",e.name="RenderBreakError",e.message=t+"",e}return e(t,n),t}(Error),E=function(n){function t(t){var e=n.call(this,t)||this;return e.name="AssertionError",e.message=t+"",e}return e(t,n),t}(Error);function x(t,e){if(!t)throw new E(e=e||"expect "+t+" to be true")}var _,k,S={root:["."],cache:!1,extname:"",dynamicPartials:!0,trim_tag_right:!1,trim_tag_left:!1,trim_output_right:!1,trim_output_left:!1,greedy:!0,tag_delimiter_left:"{%",tag_delimiter_right:"%}",output_delimiter_left:"{{",output_delimiter_right:"}}",strict_filters:!1,strict_variables:!1};function R(t){var e;return(t=t||{}).hasOwnProperty("root")&&(t.root=f(e=t.root)?e:l(e)?[e]:[]),t}function q(t){return v({},S,t)}(k=_||(_={}))[k.OUTPUT=0]="OUTPUT",k[k.STORE=1]="STORE";var M=_,O=function(){function t(t,e){void 0===t&&(t={}),this.blocks={},this.groups={},this.blockMode=M.OUTPUT,this.opts=q(e),this.contexts=[t||{}]}return t.prototype.getAll=function(){return this.contexts.reduce(function(t,e){return v(t,e)},{})},t.prototype.get=function(t){var n=this,e=this.propertyAccessSeq(t),r=this.findContextFor(e[0])||h(this.contexts);return e.reduce(function(t,e){return n.readProperty(t,e)},r)},t.prototype.set=function(t,n){var r=this.propertyAccessSeq(t),i=this.findContextFor(r[0])||h(this.contexts);r.some(function(t,e){return!g(i)||(e===r.length-1?(i[t]=n,!0):(void 0===i[t]&&(i[t]={}),i=i[t],!1))})},t.prototype.unshift=function(t){return this.contexts.unshift(t)},t.prototype.push=function(t){return this.contexts.push(t)},t.prototype.pop=function(e){if(!arguments.length)return this.contexts.pop();var t=this.contexts.findIndex(function(t){return t===e});if(-1===t)throw new TypeError("scope not found, cannot pop");return this.contexts.splice(t,1)[0]},t.prototype.findContextFor=function(t,e){void 0===e&&(e=function(){return!0});for(var n=this.contexts.length-1;0<=n;n--){var r=this.contexts[n];if(e(r)&&t in r)return r}return null},t.prototype.readProperty=function(t,e){var n,r;if(u(t)?n=void 0:(t=function(t){if(s(t.to_liquid))return t.to_liquid();if(s(t.toLiquid))return t.toLiquid();return t}(t),n="size"===e?u((r=t).size)&&(f(r)||l(r))?r.length:r.size:t[e],s(t.liquid_method_missing)&&(n=t.liquid_method_missing(e))),u(n)&&this.opts.strict_variables)throw new TypeError("undefined variable: "+e);return n},t.prototype.propertyAccessSeq=function(t){t=String(t);for(var e,n=[],r="",i=0;i=|<|>|\s+contains\s+/],st=function(a){function t(t,e,n,r,i,o){var s=a.call(this,t,e,n,r,i,o)||this;s.type="tag";var u=s.value.match(nt);if(!u)throw new y("illegal tag syntax",s);return s.name=u[1],s.args=u[2],s}return e(t,a),t}(C),ut=function(u){function t(t,e,n,r,i,o){var s=u.call(this,t,e,n,r,i,o)||this;return s.type="output",s}return e(t,u),t}(C);(D=j||(j={}))[D.HTML=0]="HTML",D[D.OUTPUT=1]="OUTPUT",D[D.TAG=2]="TAG";var at=function(){function t(t){this.options=q(t)}return t.prototype.tokenize=function(t,e){for(var n=[],r=this.options.tag_delimiter_left,i=this.options.tag_delimiter_right,o=this.options.output_delimiter_left,s=this.options.output_delimiter_right,u=0,a=1,c=j.HTML,l="",f=0,h=1,p=1;u":function(t,e){return null!==t&&null!==e&&e=":function(t,e){return null!==t&&null!==e&&e<=t},"<=":function(t,e){return null!==t&&null!==e&&t<=e},contains:function(t,e){return!!t&&("function"==typeof t.indexOf&&-1"),u+=''),u+='',c.push(r),n=u,[4,this.liquid.renderer.renderTemplates(this.templates,c)];case 1:return u=n+t.sent(),u+="",c.pop(r),[2,u]}})})})];case 1:return t.sent(),0"),[2,u]}})})}},unless:{parse:function(t,e){var n,r=this;this.templates=[],this.elseTemplates=[];var i=this.liquid.parser.parseStream(e).on("start",function(){n=r.templates,r.cond=t.args}).on("tag:else",function(){return n=r.elseTemplates}).on("tag:endunless",function(){return i.stop()}).on("template",function(t){return n.push(t)}).on("end",function(){throw new Error("tag "+t.raw+" not closed")});i.start()},render:function(t){return dt(ft(this.cond,t))?this.liquid.renderer.renderTemplates(this.templates,t):this.liquid.renderer.renderTemplates(this.elseTemplates,t)}},break:{render:function(){return p(this,void 0,void 0,function(){return d(this,function(t){throw new T("break")})})}},continue:{render:function(){return p(this,void 0,void 0,function(){return d(this,function(t){throw new T("continue")})})}}},Xt={"&":"&","<":"<",">":">",'"':""","'":"'"},Kt={"&":"&","<":"<",">":">",""":'"',"'":"'"};function Qt(t){return String(t).replace(/&|<|>|"|'/g,function(t){return Xt[t]})}var Zt={escape:Qt,escape_once:function(t){return Qt(String(t).replace(/&(amp|lt|gt|#34|#39);/g,function(t){return Kt[t]}))},newline_to_br:function(t){return t.replace(/\n/g,"
")},strip_html:function(t){return t.replace(/|||<.*?>/g,"")}},te={append:function(t,e){return t+e},prepend:function(t,e){return e+t},capitalize:function(t){return String(t).charAt(0).toUpperCase()+t.slice(1)},lstrip:function(t){return String(t).replace(/^\s+/,"")},downcase:function(t){return t.toLowerCase()},upcase:function(t){return String(t).toUpperCase()},remove:function(t,e){return t.split(e).join("")},remove_first:function(t,e){return t.replace(e,"")},replace:function(t,e,n){return String(t).split(e).join(n)},replace_first:function(t,e,n){return String(t).replace(e,n)},rstrip:function(t){return String(t).replace(/\s+$/,"")},split:function(t,e){return String(t).split(e)},strip:function(t){return String(t).trim()},strip_newlines:function(t){return String(t).replace(/\n/g,"")},truncate:function(t,e,n){return void 0===e&&(e=50),void 0===n&&(n="..."),(t=String(t)).length<=e?t:t.substr(0,e-n.length)+n},truncatewords:function(t,e,n){void 0===e&&(e=15),void 0===n&&(n="...");var r=t.split(/\s+/),i=r.slice(0,e).join(" ");return r.length>=e&&(i+=n),i}},ee={abs:function(t){return Math.abs(t)},ceil:function(t){return Math.ceil(t)},divided_by:function(t,e){return t/e},floor:function(t){return Math.floor(t)},minus:re(function(t,e){return t-e}),modulo:re(function(t,e){return t%e}),round:function(t,e){void 0===e&&(e=0);var n=Math.pow(10,e);return Math.round(t*n)/n},plus:re(function(t,e){return Number(t)+Number(e)}),times:function(t,e){return t*e}};function ne(t){var e=String(t).split(".");return 1u[0]&&e[1]> ":" ",n=w(String(t),String(u).length),r=o[t-1];return""+e+n+"| "+r}).join("\n"));this.message=function(t,e){e.file&&(t+=", file:"+e.file);return t+=", line:"+e.line+", col:"+e.col}(e.message,this.token),this.stack=this.message+"\n"+n+"\n"+this.stack+"\nFrom "+e.stack},t}(Error),b=function(r){function t(t,e){var n=r.call(this,new Error(t),e)||this;return n.name="TokenizationError",r.prototype.update.call(n),n}return i(t,r),t}(t),n=function(r){function t(t,e){var n=r.call(this,t,e)||this;return n.name="ParseError",n.message=t.message,r.prototype.update.call(n),n}return i(t,r),t}(t),T=function(r){function t(t,e){var n=r.call(this,t,e.token)||this;return n.name="RenderError",n.message=t.message,r.prototype.update.call(n),n}return i(t,r),t}(t),e=function(n){function t(t){var e=n.call(this,t)||this;return e.resolvedHTML="",e.name="RenderBreakError",e.message=t+"",e}return i(t,n),t}(Error),E=function(n){function t(t){var e=n.call(this,t)||this;return e.name="AssertionError",e.message=t+"",e}return i(t,n),t}(Error);function x(t,e){if(!t)throw new E(e=e||"expect "+t+" to be true")}var k,_,q={root:["."],cache:!1,extname:"",dynamicPartials:!0,trim_tag_right:!1,trim_tag_left:!1,trim_output_right:!1,trim_output_left:!1,greedy:!0,tag_delimiter_left:"{%",tag_delimiter_right:"%}",output_delimiter_left:"{{",output_delimiter_right:"}}",strict_filters:!1,strict_variables:!1};function S(t){var e;return(t=t||{}).hasOwnProperty("root")&&(t.root=f(e=t.root)?e:l(e)?[e]:[]),t}function R(t){return v({},q,t)}(_=k||(k={}))[_.OUTPUT=0]="OUTPUT",_[_.STORE=1]="STORE";var M=k,O=function(){function t(t,e){void 0===t&&(t={}),this.blocks={},this.groups={},this.blockMode=M.OUTPUT,this.opts=R(e),this.contexts=[t||{}]}return t.prototype.getAll=function(){return this.contexts.reduce(function(t,e){return v(t,e)},{})},t.prototype.get=function(t){var n=this,e=this.propertyAccessSeq(t),r=this.findContextFor(e[0])||g(this.contexts);return e.reduce(function(t,e){return n.readProperty(t,e)},r)},t.prototype.set=function(t,n){var r=this.propertyAccessSeq(t),i=this.findContextFor(r[0])||g(this.contexts);r.some(function(t,e){return!m(i)||(e===r.length-1?(i[t]=n,!0):(void 0===i[t]&&(i[t]={}),i=i[t],!1))})},t.prototype.unshift=function(t){return this.contexts.unshift(t)},t.prototype.push=function(t){return this.contexts.push(t)},t.prototype.pop=function(e){if(!arguments.length)return this.contexts.pop();var t=this.contexts.findIndex(function(t){return t===e});if(-1===t)throw new TypeError("scope not found, cannot pop");return this.contexts.splice(t,1)[0]},t.prototype.findContextFor=function(t,e){void 0===e&&(e=function(){return!0});for(var n=this.contexts.length-1;0<=n;n--){var r=this.contexts[n];if(e(r)&&t in r)return r}return null},t.prototype.readProperty=function(t,e){var n,r;if(c(t)?n=t:(t=function(t){if(s(t.to_liquid))return t.to_liquid();if(s(t.toLiquid))return t.toLiquid();return t}(t),n="size"===e?c((r=t).size)&&(f(r)||l(r))?r.length:r.size:t[e],s(t.liquid_method_missing)&&(n=t.liquid_method_missing(e))),c(n)&&this.opts.strict_variables)throw new TypeError("undefined variable: "+e);return n},t.prototype.propertyAccessSeq=function(t){t=String(t);for(var e,n=[],r="",i=0;i=|<|>|\s+contains\s+/],ut=function(a){function t(t,e,n,r,i,o){var u=a.call(this,t,e,n,r,i,o)||this;u.type="tag";var s=u.value.match(nt);if(!s)throw new b("illegal tag syntax",u);return u.name=s[1],u.args=s[2],u}return i(t,a),t}(C),st=function(s){function t(t,e,n,r,i,o){var u=s.call(this,t,e,n,r,i,o)||this;return u.type="output",u}return i(t,s),t}(C);(D=j||(j={}))[D.HTML=0]="HTML",D[D.OUTPUT=1]="OUTPUT",D[D.TAG=2]="TAG";var at=function(){function t(t){this.options=R(t)}return t.prototype.tokenize=function(t,e){for(var n=[],r=this.options.tag_delimiter_left,i=this.options.tag_delimiter_right,o=this.options.output_delimiter_left,u=this.options.output_delimiter_right,s=0,a=1,c=j.HTML,l="",f=0,p=1,h=1;s":function(t,e){return lt(t)?t.gt(e):lt(e)?e.lt(t):e=":function(t,e){return lt(t)?t.geq(e):lt(e)?e.leq(t):e<=t},"<=":function(t,e){return lt(t)?t.leq(e):lt(e)?e.geq(t):t<=e},contains:function(t,e){return!!t&&("function"==typeof t.indexOf&&-1"),s+=''),s+='',c.push(r),n=s,[4,this.liquid.renderer.renderTemplates(this.templates,c)];case 1:return s=n+t.sent(),s+="",c.pop(r),[2,s]}})})})];case 1:return t.sent(),0"),[2,s]}})})}},unless:{parse:function(t,e){var n,r=this;this.templates=[],this.elseTemplates=[];var i=this.liquid.parser.parseStream(e).on("start",function(){n=r.templates,r.cond=t.args}).on("tag:else",function(){return n=r.elseTemplates}).on("tag:endunless",function(){return i.stop()}).on("template",function(t){return n.push(t)}).on("end",function(){throw new Error("tag "+t.raw+" not closed")});i.start()},render:function(t){return Tt(mt(this.cond,t))?this.liquid.renderer.renderTemplates(this.templates,t):this.liquid.renderer.renderTemplates(this.elseTemplates,t)}},break:{render:function(){return h(this,void 0,void 0,function(){return d(this,function(t){throw new e("break")})})}},continue:{render:function(){return h(this,void 0,void 0,function(){return d(this,function(t){throw new e("continue")})})}}},re={"&":"&","<":"<",">":">",'"':""","'":"'"},ie={"&":"&","<":"<",">":">",""":'"',"'":"'"};function oe(t){return String(t).replace(/&|<|>|"|'/g,function(t){return re[t]})}var ue={escape:oe,escape_once:function(t){return oe(String(t).replace(/&(amp|lt|gt|#34|#39);/g,function(t){return ie[t]}))},newline_to_br:function(t){return t.replace(/\n/g,"
")},strip_html:function(t){return t.replace(/|||<.*?>/g,"")}},se={append:function(t,e){return t+e},prepend:function(t,e){return e+t},capitalize:function(t){return String(t).charAt(0).toUpperCase()+t.slice(1)},lstrip:function(t){return String(t).replace(/^\s+/,"")},downcase:function(t){return t.toLowerCase()},upcase:function(t){return String(t).toUpperCase()},remove:function(t,e){return t.split(e).join("")},remove_first:function(t,e){return t.replace(e,"")},replace:function(t,e,n){return String(t).split(e).join(n)},replace_first:function(t,e,n){return String(t).replace(e,n)},rstrip:function(t){return String(t).replace(/\s+$/,"")},split:function(t,e){return String(t).split(e)},strip:function(t){return String(t).trim()},strip_newlines:function(t){return String(t).replace(/\n/g,"")},truncate:function(t,e,n){return void 0===e&&(e=50),void 0===n&&(n="..."),(t=String(t)).length<=e?t:t.substr(0,e-n.length)+n},truncatewords:function(t,e,n){void 0===e&&(e=15),void 0===n&&(n="...");var r=t.split(/\s+/),i=r.slice(0,e).join(" ");return r.length>=e&&(i+=n),i}},ae={abs:function(t){return Math.abs(t)},ceil:function(t){return Math.ceil(t)},divided_by:function(t,e){return t/e},floor:function(t){return Math.floor(t)},minus:le(function(t,e){return t-e}),modulo:le(function(t,e){return t%e}),round:function(t,e){void 0===e&&(e=0);var n=Math.pow(10,e);return Math.round(t*n)/n},plus:le(function(t,e){return Number(t)+Number(e)}),times:function(t,e){return t*e}};function ce(t){var e=String(t).split(".");return 1 (fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise;\nexport function promisify (fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void):(arg1: T1, arg2: T2) => Promise;\nexport function promisify (fn: any) {\n return function (...args: any[]) {\n return new Promise((resolve, reject) => {\n fn(...args, (err: Error, result: any) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value: any): string {\n if (isNil(value)) return ''\n if (isFunction(value.to_liquid)) return stringify(value.to_liquid())\n if (isFunction(value.toLiquid)) return stringify(value.toLiquid())\n if (isFunction(value.to_s)) return value.to_s()\n if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value)\n if (isFunction(value.toString)) return value.toString()\n return toStr.call(value)\n}\n\nfunction defaultToString (value: any): string {\n const cache: string[] = []\n return JSON.stringify(value, (key, value) => {\n if (isObject(value)) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n}\n\nexport function create (proto: T1): T2 {\n return Object.create(proto)\n}\n\nexport function isNil (value: any): boolean {\n return value === null || value === undefined\n}\n\nexport function isArray (value: any): boolean {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value: any): boolean {\n const signature = toStr.call(value)\n // [object XXXError]\n return signature.substr(-6, 5) === 'Error' ||\n (typeof value.message === 'string' && typeof value.name === 'string')\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (\n object: {[key: string]: T} | undefined,\n iteratee: ((val: T, key: string, obj: {[key: string]: T}) => boolean | void)\n) {\n object = object || {}\n for (const k in object) {\n if (object.hasOwnProperty(k)) {\n if (iteratee(object[k], k, object) === false) break\n }\n }\n return object\n}\n\nexport function last (arr: T[]): T;\nexport function last (arr: string): string;\nexport function last (arr: any[] | string): any | string {\n return arr[arr.length - 1]\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value: any): boolean {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\n/*\n * A function to create flexibly-numbered lists of integers,\n * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.\n * Returns a list of integers from start (inclusive) to stop (exclusive),\n * incremented (or decremented) by step, exclusive.\n * Note that ranges that stop before they start are considered to be zero-length instead of\n * negative — if you'd like a negative range, use a negative step.\n */\nexport function range (start: number, stop?: number, step?: number) {\n if (stop === undefined) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr: number[] = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n\nexport function padStart (str: any, length: number, ch: string = ' ') {\n str = String(str)\n let n = length - str.length\n while (n-- > 0) str = ch + str\n return str\n}\n","import * as _ from './underscore'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\n\nabstract class LiquidError extends Error {\n private token: Token\n private originalError: Error\n constructor (err: Error, token: Token) {\n super(err.message)\n this.originalError = err\n this.token = token\n }\n protected update () {\n const err = this.originalError\n const context = mkContext(this.token)\n this.message = mkMessage(err.message, this.token)\n this.stack = this.message + '\\n' + context +\n '\\n' + this.stack + '\\nFrom ' + err.stack\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor (message: string, token: Token) {\n super(new Error(message), token)\n this.name = 'TokenizationError'\n super.update()\n }\n}\n\nexport class ParseError extends LiquidError {\n constructor (err: Error, token: Token) {\n super(err, token)\n this.name = 'ParseError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderError extends LiquidError {\n constructor (err: Error, tpl: ITemplate) {\n super(err, tpl.token)\n this.name = 'RenderError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderBreakError extends Error {\n resolvedHTML: string = ''\n constructor (message: string) {\n super(message)\n this.name = 'RenderBreakError'\n this.message = message + ''\n }\n}\n\nexport class AssertionError extends Error {\n constructor (message: string) {\n super(message)\n this.name = 'AssertionError'\n this.message = message + ''\n }\n}\n\nfunction mkContext (token: Token) {\n const lines = token.input.split('\\n')\n const begin = Math.max(token.line - 2, 1)\n const end = Math.min(token.line + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === token.line) ? '>> ' : ' '\n const num = _.padStart(String(lineNumber), String(end).length)\n const text = lines[lineNumber - 1]\n return `${indicator}${num}| ${text}`\n })\n .join('\\n')\n\n return context\n}\n\nfunction mkMessage (msg: string, token: Token) {\n if (token.file) msg += `, file:${token.file}`\n msg += `, line:${token.line}, col:${token.col}`\n return msg\n}\n","import { AssertionError } from './error'\n\nexport default function (predicate: any, message?: string) {\n if (!predicate) {\n message = message || `expect ${predicate} to be true`\n throw new AssertionError(message)\n }\n}\n","/* eslint-disable camelcase */\n\nimport * as _ from './util/underscore'\n\nexport interface LiquidOptions {\n /** `root` is a directory or an array of directories to resolve layouts and includes, as well as the filename passed in when calling `.renderFile()`. If an array, the files are looked up in the order they occur in the array. Defaults to `[\".\"]` */\n root?: string | string[]\n /** `extname` is used to lookup the template file when filepath doesn't include an extension name. Eg: setting to `\".html\"` will allow including file by basename. Defaults to `\"\"`. */\n extname?: string\n /** `cache` indicates whether or not to cache resolved templates. Defaults to `false`. */\n cache?: boolean\n /** `dynamicPartials`: if set, treat `` parameter in `{%include filepath %}`, `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */\n dynamicPartials?: boolean\n /** `strict_filters` is used to enable strict filter existence. If set to `false`, undefined filters will be rendered as empty string. Otherwise, undefined filters will cause an exception. Defaults to `false`. */\n strict_filters?: boolean\n /** `strict_variables` is used to enable strict variable derivation. If set to `false`, undefined variables will be rendered as empty string. Otherwise, undefined variables will cause an exception. Defaults to `false`. */\n strict_variables?: boolean\n /** `trim_tag_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of tags (`{% %}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_tag_right?: boolean\n /** `trim_tag_left` is similar to `trim_tag_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_tag_left?: boolean\n /** ``trim_output_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_output_right?: boolean\n /** `trim_output_left` is similar to `trim_output_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_output_left?: boolean\n /** `tag_delimiter_left` and `tag_delimiter_right` are used to override the delimiter for liquid tags **/\n tag_delimiter_left?: string,\n tag_delimiter_right?: string,\n /** `output_delimiter_left` and `output_delimiter_right` are used to override the delimiter for liquid outputs **/\n output_delimiter_left?: string,\n output_delimiter_right?: string,\n /** `greedy` is used to specify whether `trim_left`/`trim_right` is greedy. When set to `true`, all consecutive blank characters including `\\n` will be trimed regardless of line breaks. Defaults to `true`. */\n greedy?: boolean\n}\n\ninterface NormalizedOptions extends LiquidOptions {\n root?: string[]\n}\n\nexport interface NormalizedFullOptions extends NormalizedOptions {\n root: string[]\n extname: string\n cache: boolean\n dynamicPartials: boolean\n strict_filters: boolean\n strict_variables: boolean\n trim_tag_right: boolean\n trim_tag_left: boolean\n trim_output_right: boolean\n trim_output_left: boolean\n tag_delimiter_left: string,\n tag_delimiter_right: string,\n output_delimiter_left: string,\n output_delimiter_right: string,\n greedy: boolean\n}\n\nconst defaultOptions: NormalizedFullOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_output_right: false,\n trim_output_left: false,\n greedy: true,\n tag_delimiter_left: '{%',\n tag_delimiter_right: '%}',\n output_delimiter_left: '{{',\n output_delimiter_right: '}}',\n strict_filters: false,\n strict_variables: false\n}\n\nexport function normalize (options?: LiquidOptions): NormalizedOptions {\n options = options || {}\n if (options.hasOwnProperty('root')) {\n options.root = normalizeStringArray(options.root)\n }\n return options as NormalizedOptions\n}\n\nexport function applyDefault (options?: NormalizedOptions): NormalizedFullOptions {\n return { ...defaultOptions, ...options }\n}\n\nfunction normalizeStringArray (value: any): string[] {\n if (_.isArray(value)) return value as string[]\n if (_.isString(value)) return [value as string]\n return []\n}\n","enum BlockMode {\n /* store rendered html into blocks */\n OUTPUT,\n /* output rendered html directly */\n STORE\n}\n\nexport default BlockMode\n","import * as _ from '../util/underscore'\nimport { __assign } from 'tslib'\nimport assert from '../util/assert'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\nimport BlockMode from './block-mode'\nimport IContext from './icontext'\n\nexport default class Scope {\n opts: NormalizedFullOptions\n contexts: Array\n blocks: object = {}\n groups: {[key: string]: number} = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts?: NormalizedFullOptions) {\n this.opts = applyDefault(opts)\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => __assign(ctx, val), {})\n }\n get (path: string): any {\n const paths = this.propertyAccessSeq(path)\n const scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n return paths.reduce((value, key) => this.readProperty(value, key), scope)\n }\n set (path: string, v: any): void {\n const paths = this.propertyAccessSeq(path)\n let scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n paths.some((key, i) => {\n if (!_.isObject(scope)) {\n return true\n }\n if (i === paths.length - 1) {\n scope[key] = v\n return true\n }\n if (undefined === scope[key]) {\n scope[key] = {}\n }\n scope = scope[key]\n return false\n })\n }\n unshift (ctx: object) {\n return this.contexts.unshift(ctx)\n }\n push (ctx: object) {\n return this.contexts.push(ctx)\n }\n pop (ctx?: object): object | undefined {\n if (!arguments.length) {\n return this.contexts.pop()\n }\n const i = this.contexts.findIndex(scope => scope === ctx)\n if (i === -1) {\n throw new TypeError('scope not found, cannot pop')\n }\n return this.contexts.splice(i, 1)[0]\n }\n findContextFor (key: string, filter: ((conttext: object) => boolean) = () => true) {\n for (let i = this.contexts.length - 1; i >= 0; i--) {\n const candidate = this.contexts[i]\n if (!filter(candidate)) continue\n if (key in candidate) {\n return candidate\n }\n }\n return null\n }\n private readProperty (obj: IContext, key: string) {\n let val\n if (_.isNil(obj)) {\n val = undefined\n } else {\n obj = toLiquid(obj)\n val = key === 'size' ? readSize(obj) : obj[key]\n if (_.isFunction(obj.liquid_method_missing)) {\n val = obj.liquid_method_missing!(key)\n }\n }\n if (_.isNil(val) && this.opts.strict_variables) {\n throw new TypeError(`undefined variable: ${key}`)\n }\n return val\n }\n\n /*\n * Parse property access sequence from access string\n * @example\n * accessSeq(\"foo.bar\") // ['foo', 'bar']\n * accessSeq(\"foo['bar']\") // ['foo', 'bar']\n * accessSeq(\"foo['b]r']\") // ['foo', 'b]r']\n * accessSeq(\"foo[bar.coo]\") // ['foo', 'bar'], for bar.coo == 'bar'\n */\n propertyAccessSeq (str: string) {\n str = String(str)\n const seq: string[] = []\n let name = ''\n let j\n let i = 0\n while (i < str.length) {\n switch (str[i]) {\n case '[':\n push()\n\n const delemiter = str[i + 1]\n if (/['\"]/.test(delemiter)) { // foo[\"bar\"]\n j = str.indexOf(delemiter, i + 2)\n assert(j !== -1, `unbalanced ${delemiter}: ${str}`)\n name = str.slice(i + 2, j)\n push()\n i = j + 2\n } else { // foo[bar.coo]\n j = matchRightBracket(str, i + 1)\n assert(j !== -1, `unbalanced []: ${str}`)\n name = str.slice(i + 1, j)\n if (!/^[+-]?\\d+$/.test(name)) { // foo[bar] vs. foo[1]\n name = String(this.get(name))\n }\n push()\n i = j + 1\n }\n break\n case '.':// foo.bar, foo[0].bar\n push()\n i++\n break\n default:// foo.bar\n name += str[i]\n i++\n }\n }\n push()\n\n if (!seq.length) {\n throw new TypeError(`invalid path:\"${str}\"`)\n }\n return seq\n\n function push () {\n if (name.length) seq.push(name)\n name = ''\n }\n }\n}\n\nfunction toLiquid (obj: IContext) {\n if (_.isFunction(obj.to_liquid)) {\n return obj.to_liquid()\n }\n if (_.isFunction(obj.toLiquid)) {\n return obj.toLiquid()\n }\n return obj\n}\n\nfunction readSize (obj: IContext) {\n if (!_.isNil(obj.size)) return obj.size\n if (_.isArray(obj) || _.isString(obj)) return obj.length\n return obj.size\n}\n\nfunction matchRightBracket (str: string, begin: number) {\n let stack = 1 // count of '[' - count of ']'\n for (let i = begin; i < str.length; i++) {\n if (str[i] === '[') {\n stack++\n }\n if (str[i] === ']') {\n stack--\n if (stack === 0) {\n return i\n }\n }\n }\n return -1\n}\n","export class CaptureScope {}\nexport class AssignScope {}\nexport class IncrementScope {}\nexport class DecrementScope {}\n","import { last } from '../util/underscore'\nimport IFS from './ifs'\n\nfunction domResolve (root: string, path: string) {\n const base = document.createElement('base')\n base.href = root\n\n const head = document.getElementsByTagName('head')[0]\n head.insertBefore(base, head.firstChild)\n\n const a = document.createElement('a')\n a.href = path\n const resolved = a.href\n head.removeChild(base)\n\n return resolved\n}\n\nfunction resolve (root: string, filepath: string, ext: string) {\n if (root.length && last(root) !== '/') root += '/'\n const url = domResolve(root, filepath)\n return url.replace(/^(\\w+:\\/\\/[^/]+)(\\/[^?]+)/, (str, origin, path) => {\n const last = path.split('/').pop()\n if (/\\.\\w+$/.test(last)) return str\n return origin + path + ext\n })\n}\n\nasync function readFile (url: string): Promise {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.responseText as string)\n } else {\n reject(new Error(xhr.statusText))\n }\n }\n xhr.onerror = () => {\n reject(new Error('An error occurred whilst receiving the response.'))\n }\n xhr.open('GET', url)\n xhr.send()\n })\n}\n\nasync function exists () {\n return true\n}\n\nexport default { readFile, resolve, exists } as IFS\n","export default class Token {\n type: string = 'notset'\n line: number\n col: number\n raw: string\n input: string\n file?: string\n value: string\n constructor (raw: string, input: string, line: number, col: number, file?: string) {\n this.col = col\n this.line = line\n this.raw = raw\n this.value = raw\n this.input = input\n this.file = file\n }\n}\n","import whiteSpaceCtrl from './whitespace-ctrl'\nimport HTMLToken from './html-token'\nimport TagToken from './tag-token'\nimport Token from './token'\nimport OutputToken from './output-token'\nimport { TokenizationError } from 'src/util/error'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: NormalizedFullOptions\n constructor (options?: NormalizedFullOptions) {\n this.options = applyDefault(options)\n }\n tokenize (input: string, file?: string) {\n const tokens: Token[] = []\n const tagL = this.options.tag_delimiter_left\n const tagR = this.options.tag_delimiter_right\n const outputL = this.options.output_delimiter_left\n const outputR = this.options.output_delimiter_right\n let p = 0\n let curLine = 1\n let state = ParseState.HTML\n let buffer = ''\n let lineBegin = 0\n let line = 1\n let col = 1\n\n while (p < input.length) {\n if (input[p] === '\\n') {\n curLine++\n lineBegin = p + 1\n }\n if (state === ParseState.HTML) {\n if (input.substr(p, outputL.length) === outputL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = outputL\n line = curLine\n col = p - lineBegin + 1\n p += outputL.length\n state = ParseState.OUTPUT\n continue\n } else if (input.substr(p, tagL.length) === tagL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = tagL\n line = curLine\n col = p - lineBegin + 1\n p += tagL.length\n state = ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && input.substr(p, outputR.length) === outputR) {\n buffer += outputR\n tokens.push(new OutputToken(buffer, buffer.slice(outputL.length, -outputR.length), input, line, col, file))\n p += outputR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n } else if (input.substr(p, tagR.length) === tagR) {\n buffer += tagR\n tokens.push(new TagToken(buffer, buffer.slice(tagL.length, -tagR.length), input, line, col, file))\n p += tagR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n }\n buffer += input[p++]\n }\n if (state !== ParseState.HTML) {\n const t = state === ParseState.OUTPUT ? 'output' : 'tag'\n const str = buffer.length > 16 ? buffer.slice(0, 13) + '...' : buffer\n throw new TokenizationError(\n `${t} \"${str}\" not closed`,\n new Token(buffer, input, line, col, file)\n )\n }\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n\n whiteSpaceCtrl(tokens, this.options)\n return tokens\n }\n}\n","import Token from './token'\n\nexport default class HTMLToken extends Token {\n constructor (str: string, input: string, line: number, col: number, file?: string) {\n super(str, input, line, col, file)\n this.type = 'html'\n this.value = str\n }\n}\n","import Token from './token'\nimport { last } from 'src/util/underscore'\n\nexport default class DelimitedToken extends Token {\n trimLeft: boolean\n trimRight: boolean\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, input, line, pos, file)\n this.trimLeft = value[0] === '-'\n this.trimRight = last(value) === '-'\n this.value = value\n .slice(\n this.trimLeft ? 1 : 0,\n this.trimRight ? -1 : value.length\n )\n .trim()\n }\n}\n","// quote related\nconst singleQuoted = /'[^']*'/\nconst doubleQuoted = /\"[^\"]*\"/\nexport const quoted = new RegExp(`${singleQuoted.source}|${doubleQuoted.source}`)\nexport const quoteBalanced = new RegExp(`(?:${quoted.source}|[^'\"])*`)\n\n// basic types\nexport const number = /[+-]?(?:\\d+\\.?\\d*|\\.?\\d+)/\nexport const bool = /true|false/\n\n// property access\nexport const identifier = /[\\w-]+[?]?/\nexport const subscript = new RegExp(`\\\\[(?:${quoted.source}|[\\\\w-\\\\.]+)\\\\]`)\nexport const literal = new RegExp(`(?:${quoted.source}|${bool.source}|${number.source})`)\nexport const variable = new RegExp(`${identifier.source}(?:\\\\.${identifier.source}|${subscript.source})*`)\n\n// range related\nexport const rangeLimit = new RegExp(`(?:${variable.source}|${number.source})`)\nexport const range = new RegExp(`\\\\(${rangeLimit.source}\\\\.\\\\.${rangeLimit.source}\\\\)`)\nexport const rangeCapture = new RegExp(`\\\\((${rangeLimit.source})\\\\.\\\\.(${rangeLimit.source})\\\\)`)\n\nexport const value = new RegExp(`(?:${variable.source}|${literal.source}|${range.source})`)\n\n// hash related\nexport const hash = new RegExp(`(?:${identifier.source})\\\\s*:\\\\s*(?:${value.source})`)\nexport const hashCapture = new RegExp(`(${identifier.source})\\\\s*:\\\\s*(${value.source})`, 'g')\n\n// full match\nexport const tagLine = new RegExp(`^\\\\s*(${identifier.source})\\\\s*([\\\\s\\\\S]*?)\\\\s*$`)\nexport const numberLine = new RegExp(`^${number.source}$`)\nexport const boolLine = new RegExp(`^${bool.source}$`, 'i')\nexport const quotedLine = new RegExp(`^${quoted.source}$`)\nexport const rangeLine = new RegExp(`^${rangeCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isRange (str: string) {\n return rangeLine.test(str)\n}\n","import DelimitedToken from './delimited-token'\nimport { TokenizationError } from 'src/util/error'\nimport * as lexical from './lexical'\n\nexport default class TagToken extends DelimitedToken {\n name: string\n args: string\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'tag'\n const match = this.value.match(lexical.tagLine)\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, this)\n }\n this.name = match[1]\n this.args = match[2]\n }\n}\n","import DelimitedToken from './delimited-token'\n\nexport default class OutputToken extends DelimitedToken {\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'output'\n }\n}\n","import DelimitedToken from 'src/parser/delimited-token'\nimport Token from 'src/parser/token'\nimport TagToken from 'src/parser/tag-token'\nimport { NormalizedFullOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: NormalizedFullOptions) {\n options = { greedy: true, ...options }\n let inRaw = false\n\n tokens.forEach((token: Token, i: number) => {\n if (shouldTrimLeft(token as DelimitedToken, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && (token as TagToken).name === 'raw') inRaw = true\n if (token.type === 'tag' && (token as TagToken).name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token as DelimitedToken, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimLeft || options.trim_tag_left\n if (token.type === 'output') return token.trimLeft || options.trim_output_left\n}\n\nfunction shouldTrimRight (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimRight || options.trim_tag_right\n if (token.type === 'output') return token.trimRight || options.trim_output_right\n}\n\nfunction trimLeft (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rLeft = greedy ? /\\s+$/g : /[\\t\\r ]*$/g\n token.value = token.value.replace(rLeft, '')\n}\n\nfunction trimRight (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rRight = greedy ? /^\\s+/g : /^[\\t\\r ]*\\n?/g\n token.value = token.value.replace(rRight, '')\n}\n","import { RenderError } from 'src/util/error'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Render {\n async renderTemplates (templates: ITemplate[], scope: Scope) {\n assert(scope, 'unable to evalTemplates: scope undefined')\n\n let html = ''\n for (const tpl of templates) {\n try {\n html += await tpl.render(scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n e.resolvedHTML = html\n throw e\n }\n throw e.name === 'RenderError' ? e : new RenderError(e, tpl)\n }\n }\n return html\n }\n}\n","import * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport Scope from 'src/scope/scope'\nimport { range, last } from 'src/util/underscore'\n\nconst operators = {\n '==': (l: any, r: any) => l === r,\n '!=': (l: any, r: any) => l !== r,\n '>': (l: any, r: any) => l !== null && r !== null && l > r,\n '<': (l: any, r: any) => l !== null && r !== null && l < r,\n '>=': (l: any, r: any) => l !== null && r !== null && l >= r,\n '<=': (l: any, r: any) => l !== null && r !== null && l <= r,\n 'contains': (l: any, r: any) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l: any, r: any) => isTruthy(l) && isTruthy(r),\n 'or': (l: any, r: any) => isTruthy(l) || isTruthy(r)\n}\n\nexport function evalExp (exp: string, scope: Scope): any {\n assert(scope, 'unable to evalExp: scope undefined')\n const operatorREs = lexical.operators\n let match\n for (let i = 0; i < operatorREs.length; i++) {\n const operatorRE = operatorREs[i]\n const expRE = new RegExp(`^(${lexical.quoteBalanced.source})(${operatorRE.source})(${lexical.quoteBalanced.source})$`)\n if ((match = exp.match(expRE))) {\n const l = evalExp(match[1], scope)\n const op = operators[match[2].trim()]\n const r = evalExp(match[3], scope)\n return op(l, r)\n }\n }\n\n if ((match = exp.match(lexical.rangeLine))) {\n const low = evalValue(match[1], scope)\n const high = evalValue(match[2], scope)\n return range(low, high + 1)\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str: string, scope: Scope) {\n if (!str) return null\n str = str.trim()\n\n if (str === 'true') return true\n if (str === 'false') return false\n if (!isNaN(Number(str))) return Number(str)\n if ((str[0] === '\"' || str[0] === \"'\") && str[0] === last(str)) return str.slice(1, -1)\n return scope.get(str)\n}\n\nexport function isTruthy (val: any): boolean {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val: any): boolean {\n return val === false || undefined === val || val === null\n}\n","import { hashCapture } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\n\n/**\n * Key-Value Pairs Representing Tag Arguments\n * Example:\n * For the markup `{% include 'head.html' foo='bar' %}`,\n * hash['foo'] === 'bar'\n */\nexport default class Hash {\n [key: string]: any\n constructor (markup: string, scope: Scope) {\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n this[k] = evalValue(v, scope)\n }\n }\n}\n","import { evalExp } from 'src/render/syntax'\nimport Filter from './filter/filter'\nimport Scope from 'src/scope/scope'\n\nenum ParseState {\n INIT = 0,\n FILTER_NAME = 1,\n FILTER_ARG = 2\n}\n\nexport default class {\n initial: any\n filters: Array = []\n\n /**\n * @param str value string, like: \"i have a dream | truncate: 3\n */\n constructor (str: string, strictFilters: boolean) {\n let buffer = ''\n let quoted = ''\n let state = ParseState.INIT\n let sealed = false\n\n let filterName = ''\n let filterArgs: string[] = []\n\n for (let i = 0; i < str.length; i++) {\n if (quoted) {\n if (str[i] === quoted) {\n quoted = ''\n sealed = true\n }\n buffer += str[i]\n } else if (/\\s/.test(str[i])) {\n if (!buffer) continue\n else sealed = true\n } else if (str[i] === '|') {\n if (state === ParseState.INIT) {\n this.initial = buffer\n } else {\n if (state === ParseState.FILTER_NAME) filterName = buffer\n else filterArgs.push(buffer)\n this.filters.push(new Filter(filterName, filterArgs, strictFilters))\n filterName = ''\n filterArgs = []\n }\n state = ParseState.FILTER_NAME\n buffer = ''\n sealed = false\n } else if (state === ParseState.FILTER_NAME && str[i] === ':') {\n filterName = buffer\n state = ParseState.FILTER_ARG\n buffer = ''\n sealed = false\n } else if (state === ParseState.FILTER_ARG && str[i] === ',') {\n filterArgs.push(buffer)\n buffer = ''\n sealed = false\n } else if (sealed) continue\n else {\n if ((str[i] === '\"' || str[i] === \"'\") && !quoted) quoted = str[i]\n buffer += str[i]\n }\n }\n\n if (buffer) {\n if (state === ParseState.INIT) this.initial = buffer\n else if (state === ParseState.FILTER_NAME) this.filters.push(new Filter(buffer, [], strictFilters))\n else {\n filterArgs.push(buffer)\n this.filters.push(new Filter(filterName, filterArgs, strictFilters))\n }\n }\n }\n value (scope: Scope) {\n return this.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(this.initial, scope))\n }\n}\n","export default abstract class Template {\n token: T;\n constructor (token: T) {\n this.token = token\n }\n}\n","import { create, stringify } from 'src/util/underscore'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITagImpl from './itag-impl'\nimport ITagImplOptions from './itag-impl-options'\nimport Liquid from 'src/liquid'\nimport Hash from './hash'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\n\nexport default class Tag extends Template implements ITemplate {\n name: string\n private impl: ITagImpl\n static impls: { [key: string]: ITagImplOptions } = {}\n\n constructor (token: TagToken, tokens: Token[], liquid: Liquid) {\n super(token)\n this.name = token.name\n\n const impl = Tag.impls[token.name]\n assert(impl, `tag ${token.name} not found`)\n this.impl = create(impl)\n this.impl.liquid = liquid\n if (this.impl.parse) {\n this.impl.parse(token, tokens)\n }\n }\n async render (scope: Scope) {\n const hash = new Hash(this.token.args, scope)\n const impl = this.impl\n if (typeof impl.render !== 'function') {\n return ''\n }\n const html = await impl.render(scope, hash)\n return stringify(html)\n }\n static register (name: string, tag: ITagImplOptions) {\n Tag.impls[name] = tag\n }\n static clear () {\n Tag.impls = {}\n }\n}\n","import { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\nimport { FilterImpl } from './filter-impl'\n\nexport default class Filter {\n name: string\n impl: FilterImpl\n args: string[]\n private static impls: {[key: string]: FilterImpl} = {}\n\n constructor (name: string, args: string[], strictFilters: boolean) {\n const impl = Filter.impls[name]\n if (!impl && strictFilters) throw new TypeError(`undefined filter: ${name}`)\n\n this.name = name\n this.impl = impl || (x => x)\n this.args = args\n }\n render (value: any, scope: Scope): any {\n const args = this.args.map(arg => evalValue(arg, scope))\n return this.impl.apply(null, [value, ...args])\n }\n static register (name: string, filter: FilterImpl) {\n Filter.impls[name] = filter\n }\n static clear () {\n Filter.impls = {}\n }\n}\n","import Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from './tag-token'\n\ntype ParseToken = ((token: Token, remainTokens: Array) => ITemplate)\n\nexport default class ParseStream {\n private tokens: Array\n private handlers: {[key: string]: (arg: any) => void} = {}\n private stopRequested: boolean = false\n private parseToken: ParseToken\n\n constructor (tokens: Array, parseToken: ParseToken) {\n this.tokens = tokens\n this.parseToken = parseToken\n }\n on (name: string, cb: (arg: T) => void): ParseStream {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: T) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n return false\n }\n start () {\n this.trigger('start')\n let token: Token | undefined\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' && this.trigger(`tag:${(token).name}`, token)) {\n continue\n }\n const template = this.parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n }\n stop () {\n this.stopRequested = true\n return this\n }\n}\n","import Value from './value'\nimport { stringify } from 'src/util/underscore'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport OutputToken from 'src/parser/output-token'\n\nexport default class Output extends Template implements ITemplate {\n value: Value\n constructor (token: OutputToken, strictFilters: boolean) {\n super(token)\n this.value = new Value(token.value, strictFilters)\n }\n async render (scope: Scope): Promise {\n const html = await this.value.value(scope)\n return stringify(html)\n }\n}\n","import Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport HTMLToken from 'src/parser/html-token'\n\nexport default class extends Template implements ITemplate {\n str: string\n constructor (token: HTMLToken) {\n super(token)\n this.str = token.value\n }\n async render (): Promise {\n return this.str\n }\n}\n","import { ParseError } from '../util/error'\nimport Liquid from 'src/liquid'\nimport ParseStream from './parse-stream'\nimport Token from './token'\nimport TagToken from './tag-token'\nimport OutputToken from './output-token'\nimport Tag from 'src/template/tag/tag'\nimport Output from 'src/template/output'\nimport HTML from 'src/template/html'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Parser {\n liquid: Liquid\n\n constructor (liquid: Liquid) {\n this.liquid = liquid\n }\n parse (tokens: Array) {\n let token\n const templates: ITemplate[] = []\n while ((token = tokens.shift())) {\n templates.push(this.parseToken(token, tokens))\n }\n return templates\n }\n parseToken (token: Token, remainTokens: Array) {\n try {\n if (token.type === 'tag') {\n return new Tag(token as TagToken, remainTokens, this.liquid)\n }\n if (token.type === 'output') {\n return new Output(token as OutputToken, this.liquid.options.strict_filters)\n }\n return new HTML(token)\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n parseStream (tokens: Array) {\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens))\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { AssignScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(re) as RegExpMatchArray\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (scope: Scope) {\n const ctx = new AssignScope()\n ctx[this.key] = this.liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n} as ITagImplOptions\n","/*\n * Call functions in serial until someone rejected.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function mapSeries (\n iterable: T1[],\n iteratee: (item: T1, idx: number, iterable: T1[]) => Promise | T2\n): Promise {\n let ret = Promise.resolve(0)\n const result: T2[] = []\n iterable.forEach(function (item, idx) {\n ret = ret\n .then(() => iteratee(item, idx, iterable))\n .then(x => result.push(x))\n })\n return ret.then(() => result)\n}\n","import { mapSeries } from 'src/util/promise'\nimport { isString, isObject, isArray } from 'src/util/underscore'\nimport { evalExp } from 'src/render/syntax'\nimport assert from 'src/util/assert'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n type: 'block',\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n this.variable = match[1]\n this.collection = match[2]\n this.reversed = !!match[3]\n\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endfor', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection] as string[]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]]) as Array<[string, any]>\n }\n }\n if (!isArray(collection) || !collection.length) {\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n if (this.reversed) collection.reverse()\n\n const contexts = collection.map((item: string, i: number) => {\n const ctx = {}\n ctx[this.variable] = item\n ctx['forloop'] = {\n first: i === 0,\n index: i + 1,\n index0: i,\n last: i === collection.length - 1,\n length: collection.length,\n rindex: collection.length - i,\n rindex0: collection.length - i - 1\n }\n return ctx\n })\n\n let html = ''\n let finished = false\n await mapSeries(contexts, async context => {\n if (finished) return\n\n scope.push(context)\n try {\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n html += e.resolvedHTML\n if (e.message === 'break') {\n finished = true\n }\n } else throw e\n }\n scope.pop(context)\n })\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = tagToken.args.match(re) as RegExpMatchArray\n assert(match, `${tagToken.args} not valid identifier`)\n\n this.variable = match[1]\n this.templates = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', () => stream.stop())\n .on('template', (tpl) => this.templates.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const html = await this.liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = new CaptureScope()\n ctx[this.variable] = html\n scope.push(ctx)\n }\n} as ITagImplOptions\n","import { evalExp } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p: ITemplate[] = []\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:when', (token: TagToken) => {\n this.cases.push({\n val: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endcase', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = evalExp(branch.val, scope)\n const cond = evalExp(this.cond, scope)\n if (val === cond) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value, quotedLine } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /[^\\s,]+/\nconst withRE = new RegExp(`with\\\\s+(${value.source})`)\n\nexport default {\n parse: function (token: TagToken) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticValue = match[0]\n }\n\n match = value.exec(token.args)\n if (match) {\n this.value = match[0]\n }\n\n match = withRE.exec(token.args)\n if (match) {\n this.with = match[1]\n }\n },\n render: async function (scope: Scope, hash: Hash) {\n let filepath\n if (scope.opts.dynamicPartials) {\n if (quotedLine.exec(this.value)) {\n const template = this.value.slice(1, -1)\n filepath = await this.liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = evalValue(this.value, scope)\n }\n } else {\n filepath = this.staticValue\n }\n assert(filepath, `cannot include with empty filename`)\n\n const originBlocks = scope.blocks\n const originBlockMode = scope.blockMode\n\n scope.blocks = {}\n scope.blockMode = BlockMode.OUTPUT\n if (this.with) {\n hash[filepath] = evalValue(this.with, scope)\n }\n const templates = await this.liquid.getTemplate(filepath, scope.opts)\n scope.push(hash)\n const html = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.blocks = originBlocks\n scope.blockMode = originBlockMode\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, DecrementScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(identifier) as RegExpMatchArray\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope: Scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new DecrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n return --context[this.variable]\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\nconst candidatesRE = new RegExp(rValue.source, 'g')\n\nexport default {\n parse: function (tagToken: TagToken) {\n let match: RegExpExecArray | null = groupRE.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.group = match[1] || ''\n const candidates = match[2]\n\n this.candidates = []\n\n while ((match = candidatesRE.exec(candidates))) {\n this.candidates.push(match[0])\n }\n assert(this.candidates.length, `empty candidates: ${tagToken.raw}`)\n },\n\n render: function (scope: Scope) {\n const group = evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n const groups = scope.groups\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n\n return evalValue(candidate, scope)\n }\n}\n","import { evalExp, isTruthy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', (token: TagToken) => {\n this.branches.push({\n cond: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endif', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (const branch of this.branches) {\n const cond = evalExp(branch.cond, scope)\n if (isTruthy(cond)) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match![0]\n },\n render: function (scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new IncrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n const val = context[this.variable]\n context[this.variable]++\n return val\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /\\S+/\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticLayout = match[0]\n }\n\n match = rValue.exec(token.args)\n if (match) {\n this.layout = match[0]\n }\n\n this.tpls = this.liquid.parser.parse(remainTokens)\n },\n render: async function (scope: Scope, hash: Hash) {\n const layout = scope.opts.dynamicPartials\n ? evalValue(this.layout, scope)\n : this.staticLayout\n assert(layout, `cannot apply layout with empty filename`)\n\n // render the remaining tokens immediately\n scope.blockMode = BlockMode.STORE\n const html = await this.liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.blocks[''] === undefined) {\n scope.blocks[''] = html\n }\n const templates = await this.liquid.getTemplate(layout, scope.opts)\n scope.push(hash)\n scope.blockMode = BlockMode.OUTPUT\n const partial = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n} as ITagImplOptions\n","import BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n this.tpls = [] as ITemplate[]\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', (tpl: ITemplate) => this.tpls.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${token.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const childDefined = scope.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await this.liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.blockMode === BlockMode.STORE) {\n scope.blocks[this.block] = html\n return ''\n }\n return html\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.tokens = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endraw') stream.stop()\n else this.tokens.push(token)\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: function () {\n return this.tokens.map((token: Token) => token.raw).join('')\n }\n}\n","import { mapSeries } from 'src/util/promise'\nimport assert from 'src/util/assert'\nimport { evalExp } from 'src/render/syntax'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.variable = match[1]\n this.collection = match[2]\n this.templates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope) || []\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = hash.cols || collection.length\n const contexts = collection.map((item: any) => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row: number = 0\n let html = ''\n await mapSeries(contexts, async (context, idx) => {\n row = Math.floor(idx / cols) + 1\n const col = (idx % cols) + 1\n if (col === 1) {\n if (row !== 1) {\n html += ''\n }\n html += ``\n }\n\n html += ``\n scope.push(context)\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n html += ''\n scope.pop(context)\n return html\n })\n if (row > 0) {\n html += ''\n }\n return html\n }\n} as ITagImplOptions\n","import assign from './assign'\nimport For from './for'\nimport capture from './capture'\nimport Case from './case'\nimport comment from './comment'\nimport include from './include'\nimport decrement from './decrement'\nimport cycle from './cycle'\nimport If from './if'\nimport increment from './increment'\nimport layout from './layout'\nimport block from './block'\nimport raw from './raw'\nimport tablerow from './tablerow'\nimport unless from './unless'\nimport Break from './break'\nimport Continue from './continue'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst tags: { [key: string]: ITagImplOptions } = {\n assign, 'for': For, capture, 'case': Case, comment, include, decrement, increment, cycle, 'if': If, layout, block, raw, tablerow, unless, 'break': Break, 'continue': Continue\n}\n\nexport default tags\n","import { evalExp, isFalsy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n const cond = evalExp(this.cond, scope)\n return isFalsy(cond)\n ? this.liquid.renderer.renderTemplates(this.templates, scope)\n : this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('break')\n }\n}\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('continue')\n }\n}\n","const escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nfunction escape (str: string) {\n return String(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str: string) {\n return String(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nexport default {\n 'escape': escape,\n 'escape_once': (str: string) => escape(unescape(str)),\n 'newline_to_br': (v: string) => v.replace(/\\n/g, '
'),\n 'strip_html': (v: string) => v.replace(/|||<.*?>/g, '')\n}\n","import { FilterImpl } from 'src/template/filter/filter-impl'\n\nexport default {\n 'append': (v: string, arg: string) => v + arg,\n 'prepend': (v: string, arg: string) => arg + v,\n 'capitalize': (str: string) => String(str).charAt(0).toUpperCase() + str.slice(1),\n 'lstrip': (v: string) => String(v).replace(/^\\s+/, ''),\n 'downcase': (v: string) => v.toLowerCase(),\n 'upcase': (str: string) => String(str).toUpperCase(),\n 'remove': (v: string, arg: string) => v.split(arg).join(''),\n 'remove_first': (v: string, l: string) => v.replace(l, ''),\n 'replace': (v: string, pattern: string, replacement: string) =>\n String(v).split(pattern).join(replacement),\n 'replace_first': (v: string, arg1: string, arg2: string) => String(v).replace(arg1, arg2),\n 'rstrip': (str: string) => String(str).replace(/\\s+$/, ''),\n 'split': (v: string, arg: string) => String(v).split(arg),\n 'strip': (v: string) => String(v).trim(),\n 'strip_newlines': (v: string) => String(v).replace(/\\n/g, ''),\n 'truncate': (v: string, l: number = 50, o: string = '...') => {\n v = String(v)\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v: string, l: number = 15, o: string = '...') => {\n const arr = v.split(/\\s+/)\n let ret = arr.slice(0, l).join(' ')\n if (arr.length >= l) ret += o\n return ret\n }\n} as {[key: string]: FilterImpl}\n","export default {\n 'abs': (v: number) => Math.abs(v),\n 'ceil': (v: number) => Math.ceil(v),\n 'divided_by': (v: number, arg: number) => v / arg,\n 'floor': (v: number) => Math.floor(v),\n 'minus': bindFixed((v: number, arg: number) => v - arg),\n 'modulo': bindFixed((v: number, arg: number) => v % arg),\n 'round': (v: number, arg: number = 0) => {\n const amp = Math.pow(10, arg)\n return Math.round(v * amp) / amp\n },\n 'plus': bindFixed((v: number, arg: number) => Number(v) + Number(arg)),\n 'times': (v: number, arg: number) => v * arg\n}\n\nfunction getFixed (v: number) {\n const p = String(v).split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction bindFixed (cb: (v: number, arg: number) => number) {\n return (l: number, r: number) => {\n const f = Math.max(getFixed(l), getFixed(r))\n return cb(l, r).toFixed(f)\n }\n}\n","export default {\n 'url_decode': (x: string) => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': (x: string) => x.split(' ').map(encodeURIComponent).join('+')\n}\n","import { last } from 'src/util/underscore'\n\nexport default {\n 'join': (v: any[], arg: string) => v.join(arg === undefined ? ' ' : arg),\n 'last': (v: T[]): T => last(v),\n 'first': (v: T[]): T => v[0],\n 'map': (arr: {[key: string]: T1}[], arg: string): T1[] => arr.map(v => v[arg]),\n 'reverse': (v: any[]) => v.reverse(),\n 'sort': (v: T[], arg: (lhs: T, rhs: T) => number) => v.sort(arg),\n 'size': (v: string | any[]) => v.length,\n 'concat': (v: T1[], arg: T2[] | T2): Array => Array.prototype.concat.call(v, arg),\n 'slice': (v: T[], begin: number, length: number): T[] => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'uniq': function (arr: T[]): T[] {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(String(val))) return false\n u[String(val)] = true\n return true\n })\n }\n}\n","import { padStart } from './underscore'\n\nconst monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst monthNamesShort = monthNames.map(abbr)\nconst dayNamesShort = dayNames.map(abbr)\nconst suffixes = {\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n 'default': 'th'\n}\n\nfunction abbr (str: string) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d: Date) {\n const feb = _date.isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n },\n\n getDayOfYear: function (d: Date) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += _date.daysInMonth(d)[i]\n }\n return num + d.getDate()\n },\n\n getWeekOfYear: function (d: Date, startDay: number) {\n // Skip to startDay of this week\n const now = this.getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return padStart(String(Math.floor((now - then) / 7) + 1), 2, '0')\n },\n\n isLeapYear: function (d: Date) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d: Date) {\n const str = d.getDate().toString()\n const index = parseInt(str.slice(-1))\n return suffixes[index] || suffixes['default']\n },\n\n century: function (d: Date) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst formatCodes = {\n a: function (d: Date) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d: Date) {\n return dayNames[d.getDay()]\n },\n b: function (d: Date) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d: Date) {\n return monthNames[d.getMonth()]\n },\n c: function (d: Date) {\n return d.toLocaleString()\n },\n C: function (d: Date) {\n return _date.century(d)\n },\n d: function (d: Date) {\n return padStart(d.getDate(), 2, '0')\n },\n e: function (d: Date) {\n return padStart(d.getDate(), 2)\n },\n H: function (d: Date) {\n return padStart(d.getHours(), 2, '0')\n },\n I: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2, '0')\n },\n j: function (d: Date) {\n return padStart(_date.getDayOfYear(d), 3, '0')\n },\n k: function (d: Date) {\n return padStart(d.getHours(), 2)\n },\n l: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2)\n },\n L: function (d: Date) {\n return padStart(d.getMilliseconds(), 3, '0')\n },\n m: function (d: Date) {\n return padStart(d.getMonth() + 1, 2, '0')\n },\n M: function (d: Date) {\n return padStart(d.getMinutes(), 2, '0')\n },\n p: function (d: Date) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d: Date) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d: Date) {\n return _date.getSuffix(d)\n },\n s: function (d: Date) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d: Date) {\n return padStart(d.getSeconds(), 2, '0')\n },\n u: function (d: Date) {\n return d.getDay() || 7\n },\n U: function (d: Date) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d: Date) {\n return d.getDay()\n },\n W: function (d: Date) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d: Date) {\n return d.toLocaleDateString()\n },\n X: function (d: Date) {\n return d.toLocaleTimeString()\n },\n y: function (d: Date) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d: Date) {\n return d.getFullYear()\n },\n z: function (d: Date) {\n const tz = d.getTimezoneOffset() / 60 * 100\n return (tz > 0 ? '-' : '+') + padStart(String(Math.abs(tz)), 4, '0')\n },\n '%': function () {\n return '%'\n }\n};\n(formatCodes as any).h = formatCodes.b;\n(formatCodes as any).N = formatCodes.L\n\nexport default function (d: Date, format: string) {\n let output = ''\n let remaining = format\n\n while (true) {\n const r = /%./g\n const results = r.exec(remaining)\n\n // No more format codes. Add the remaining text and return\n if (!results) {\n return output + remaining\n }\n\n // Add the preceding text\n output += remaining.slice(0, r.lastIndex - 2)\n remaining = remaining.slice(r.lastIndex)\n\n // Add the format code\n const ch = results[0].charAt(1)\n const func = formatCodes[ch]\n output += func ? func(d) : '%' + ch\n }\n}\n","import html from './html'\nimport str from './string'\nimport math from './math'\nimport url from './url'\nimport array from './array'\nimport date from './date'\nimport obj from './object'\n\nexport default { ...html, ...str, ...math, ...url, ...date, ...obj, ...array }\n","import strftime from 'src/util/strftime'\nimport { isString } from 'src/util/underscore'\n\nexport default {\n 'date': (v: string | Date, arg: string) => {\n let date = v\n if (v === 'now') {\n date = new Date()\n } else if (isString(v)) {\n date = new Date(v)\n }\n return isValidDate(date) ? strftime(date, arg) : v\n }\n}\n\nfunction isValidDate (date: any): date is Date {\n return date instanceof Date && !isNaN(date.getTime())\n}\n","import { isTruthy } from 'src/render/syntax'\n\nexport default {\n 'default': (v: T1, arg: T2): T1 | T2 => isTruthy(v) ? v : arg\n}\n","import Scope from './scope/scope'\nimport * as Types from './types'\nimport fs from 'src/fs'\nimport * as _ from './util/underscore'\nimport ITemplate from './template/itemplate'\nimport Tokenizer from './parser/tokenizer'\nimport Render from './render/render'\nimport Tag from './template/tag/tag'\nimport Filter from './template/filter/filter'\nimport Parser from './parser/parser'\nimport ITagImplOptions from './template/tag/itag-impl-options'\nimport Value from './template/value'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './render/syntax'\nimport builtinTags from './builtin/tags'\nimport builtinFilters from './builtin/filters'\nimport { LiquidOptions, NormalizedFullOptions, applyDefault, normalize } from './liquid-options'\nimport { FilterImpl } from './template/filter/filter-impl'\n\nexport default class Liquid {\n public options: NormalizedFullOptions\n public renderer: Render\n public parser: Parser\n private cache: object = {}\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n this.options = applyDefault(normalize(opts))\n this.parser = new Parser(this)\n this.renderer = new Render()\n this.tokenizer = new Tokenizer(this.options)\n\n _.forOwn(builtinTags, (conf, name) => this.registerTag(name, conf))\n _.forOwn(builtinFilters, (handler, name) => this.registerFilter(name, handler))\n }\n parse (html: string, filepath?: string) {\n const tokens = this.tokenizer.tokenize(html, filepath)\n return this.parser.parse(tokens)\n }\n render (tpl: Array, ctx?: object, opts?: LiquidOptions) {\n const options = { ...this.options, ...normalize(opts) }\n const scope = new Scope(ctx, options)\n return this.renderer.renderTemplates(tpl, scope)\n }\n async parseAndRender (html: string, ctx?: object, opts?: LiquidOptions) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n }\n async getTemplate (file: string, opts?: LiquidOptions) {\n const options = normalize(opts)\n const roots = options.root ? [...options.root, ...this.options.root] : this.options.root\n const paths = roots.map(root => fs.resolve(root, file, this.options.extname))\n\n for (const filepath of paths) {\n if (!(await fs.exists(filepath))) continue\n\n if (this.options.cache && this.cache[filepath]) return this.cache[filepath]\n const value = this.parse(await fs.readFile(filepath), filepath)\n if (this.options.cache) this.cache[filepath] = value\n return value\n }\n\n const err = new Error('ENOENT') as any\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`\n err.code = 'ENOENT'\n throw err\n }\n async renderFile (file: string, ctx?: object, opts?: LiquidOptions) {\n const options = normalize(opts)\n const templates = await this.getTemplate(file, options)\n return this.render(templates, ctx, opts)\n }\n evalValue (str: string, scope: Scope) {\n return new Value(str, this.options.strict_filters).value(scope)\n }\n registerFilter (name: string, filter: FilterImpl) {\n return Filter.register(name, filter)\n }\n registerTag (name: string, tag: ITagImplOptions) {\n return Tag.register(name, tag)\n }\n plugin (plugin: (this: Liquid, L: typeof Liquid) => void) {\n return plugin.call(this, Liquid)\n }\n express () {\n const self = this\n return function (this: any, filePath: string, ctx: object, cb: (err: Error | null, html?: string) => void) {\n const opts = { root: this.root }\n self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb)\n }\n }\n static default = Liquid\n static isTruthy = isTruthy\n static isFalsy = isFalsy\n static evalExp = evalExp\n static evalValue = evalValue\n static Types = Types\n}\n"],"names":["toStr","Object","prototype","toString","arrToStr","Array","isString","value","call","isFunction","stringify","isNil","to_liquid","toLiquid","to_s","indexOf","cache","JSON","key","isObject","push","isArray","forOwn","object","iteratee","k","hasOwnProperty","last","arr","length","type","range","start","stop","step","undefined","i","padStart","str","ch","n","String","err","token","_super","message","_this","originalError","tslib_1.__extends","LiquidError","lines","begin","end","this","context","input","split","Math","max","line","min","_\r\n .range","map","lineNumber","indicator","num","_.padStart","text","join","msg","file","col","mkMessage","stack","Error","name","update","tpl","predicate","AssertionError","BlockMode","defaultOptions","root","extname","dynamicPartials","trim_tag_right","trim_tag_left","trim_output_right","trim_output_left","greedy","tag_delimiter_left","tag_delimiter_right","output_delimiter_left","output_delimiter_right","strict_filters","strict_variables","normalize","options","_.isArray","_.isString","applyDefault","ctx","opts","OUTPUT","contexts","Scope","reduce","val","__assign","path","paths","propertyAccessSeq","scope","findContextFor","_.last","readProperty","v","some","_.isObject","unshift","arguments","pop","findIndex","TypeError","splice","filter","candidate","obj","_.isNil","_.isFunction","size","liquid_method_missing","j","seq","delemiter","test","assert","slice","matchRightBracket","get","readFile","url","Promise","resolve","reject","xhr","XMLHttpRequest","onload","status","responseText","statusText","onerror","open","send","filepath","ext","base","document","createElement","href","head","getElementsByTagName","insertBefore","firstChild","a","resolved","removeChild","domResolve","replace","origin","exists","ParseState","raw","Token","pos","trimLeft","trimRight","trim","quoted","RegExp","source","quoteBalanced","number","identifier","subscript","literal","variable","rangeLimit","rangeCapture","hash","hashCapture","tagLine","quotedLine","rangeLine","operators","match","lexical.tagLine","TokenizationError","args","DelimitedToken","Tokenizer","tokens","tagL","tagR","outputL","outputR","p","curLine","state","HTML","buffer","lineBegin","substr","HTMLToken","TAG","OutputToken","TagToken","inRaw","forEach","rLeft","rRight","whiteSpaceCtrl","t","Render","templates","html","templates_1","_i","_a","render","_b","e_1","resolvedHTML","RenderError","==","l","r","!=",">","<",">=","<=","contains","and","isTruthy","or","evalExp","exp","operatorREs","lexical.operators","operatorRE","expRE","lexical.quoteBalanced","op","lexical.rangeLine","evalValue","isNaN","Number","isFalsy","markup","lastIndex","exec","liquid","proto","impl","Tag","impls","create","parse","Hash","tag","Template","strictFilters","Filter","x","arg","apply","parseToken","ParseStream","cb","handlers","event","h","trigger","stopRequested","shift","template","INIT","sealed","filterName","filterArgs","initial","FILTER_NAME","filters","FILTER_ARG","default_1","prev","Value","Output","Parser","remainTokens","e","ParseError","re","AssignScope","mapSeries","iterable","ret","result","item","idx","then","tagToken","collection","reversed","elseTemplates","stream","parser","parseStream","on","keys","offset","limit","reverse","first","index","index0","rindex","rindex0","finished","renderer","renderTemplates","CaptureScope","cond","cases","branch","staticFileRE","withRE","staticValue","with","parseAndRender","getAll","originBlocks","blocks","originBlockMode","blockMode","getTemplate","DecrementScope","groupRE","rValue","candidatesRE","group","candidates","fingerprint","groups","branches","IncrementScope","staticLayout","layout","tpls","STORE","partial","block","childDefined","tags","assign","for","For","capture","case","Case","comment","include","decrement","increment","cycle","if","If","tablerow","cols","row","floor","unless","break","RenderBreakError","continue","escapeMap","&","\"","'","unescapeMap","&","<",">",""","'","escape","m","escape_once","newline_to_br","strip_html","append","prepend","capitalize","charAt","toUpperCase","lstrip","downcase","toLowerCase","upcase","remove","remove_first","pattern","replacement","replace_first","arg1","arg2","rstrip","strip","strip_newlines","truncate","o","truncatewords","abs","ceil","divided_by","minus","bindFixed","modulo","round","amp","pow","plus","times","getFixed","f","toFixed","url_decode","decodeURIComponent","url_encode","encodeURIComponent","sort","concat","uniq","u","monthNames","dayNames","monthNamesShort","abbr","dayNamesShort","suffixes","1","2","3","default","_date","daysInMonth","d","isLeapYear","getDayOfYear","getMonth","getDate","getWeekOfYear","startDay","now","getDay","Date","getFullYear","year","getSuffix","parseInt","century","substring","formatCodes","A","b","B","c","toLocaleString","C","H","getHours","I","L","getMilliseconds","M","getMinutes","P","q","s","valueOf","S","getSeconds","U","w","W","toLocaleDateString","X","toLocaleTimeString","y","Y","z","tz","getTimezoneOffset","%","N","math","date","getTime","format","output","remaining","results","func","strftime","array","tokenizer","_.forOwn","builtinTags","conf","registerTag","builtinFilters","handler","registerFilter","Liquid","tokenize","roots","fs","paths_1","code","register","plugin","self","filePath","renderFile","Types"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"liquid.min.js","sources":["../src/util/underscore.ts","../src/util/error.ts","../src/util/assert.ts","../src/liquid-options.ts","../src/scope/block-mode.ts","../src/scope/scope.ts","../src/scope/scopes.ts","../src/fs/browser.ts","../src/parser/token.ts","../src/parser/tokenizer.ts","../src/parser/html-token.ts","../src/parser/delimited-token.ts","../src/parser/lexical.ts","../src/parser/tag-token.ts","../src/parser/output-token.ts","../src/parser/whitespace-ctrl.ts","../src/render/render.ts","../src/drop/icomparable.ts","../src/drop/drop.ts","../src/drop/idrop.ts","../src/drop/empty-drop.ts","../src/drop/blank-drop.ts","../src/drop/null-drop.ts","../src/render/syntax.ts","../src/template/tag/hash.ts","../src/template/value.ts","../src/template/template.ts","../src/template/tag/tag.ts","../src/template/filter/filter.ts","../src/parser/parse-stream.ts","../src/template/output.ts","../src/template/html.ts","../src/parser/parser.ts","../src/builtin/tags/assign.ts","../src/util/promise.ts","../src/builtin/tags/for.ts","../src/builtin/tags/capture.ts","../src/builtin/tags/case.ts","../src/builtin/tags/comment.ts","../src/builtin/tags/include.ts","../src/builtin/tags/decrement.ts","../src/builtin/tags/cycle.ts","../src/builtin/tags/if.ts","../src/builtin/tags/increment.ts","../src/builtin/tags/layout.ts","../src/builtin/tags/block.ts","../src/builtin/tags/raw.ts","../src/builtin/tags/tablerow.ts","../src/builtin/tags/index.ts","../src/builtin/tags/unless.ts","../src/builtin/tags/break.ts","../src/builtin/tags/continue.ts","../src/builtin/filters/html.ts","../src/builtin/filters/string.ts","../src/builtin/filters/math.ts","../src/builtin/filters/url.ts","../src/builtin/filters/array.ts","../src/util/strftime.ts","../src/builtin/filters/index.ts","../src/builtin/filters/date.ts","../src/builtin/filters/object.ts","../src/liquid.ts"],"sourcesContent":["const toStr = Object.prototype.toString\nconst arrToStr = Array.prototype.toString\n\n/*\n * Checks if value is classified as a String primitive or object.\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is a string, else false.\n */\nexport function isString (value: any): value is string {\n return toStr.call(value) === '[object String]'\n}\n\nexport function isFunction (value: any): value is Function {\n return typeof value === 'function'\n}\n\nexport function promisify (fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise;\nexport function promisify (fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void):(arg1: T1, arg2: T2) => Promise;\nexport function promisify (fn: any) {\n return function (...args: any[]) {\n return new Promise((resolve, reject) => {\n fn(...args, (err: Error, result: any) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value: any): string {\n if (isNil(value)) return ''\n if (isFunction(value.to_liquid)) return stringify(value.to_liquid())\n if (isFunction(value.toLiquid)) return stringify(value.toLiquid())\n if (isFunction(value.to_s)) return value.to_s()\n if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value)\n if (isFunction(value.toString)) return value.toString()\n return toStr.call(value)\n}\n\nfunction defaultToString (value: any): string {\n const cache: any[] = []\n return JSON.stringify(value, (key, value) => {\n if (isObject(value)) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n}\n\nexport function create (proto: T1): T2 {\n return Object.create(proto)\n}\n\nexport function isNil (value: any): boolean {\n return value === null || value === undefined\n}\n\nexport function isArray (value: any): value is any[] {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value: any): value is Error {\n const signature = toStr.call(value)\n // [object XXXError]\n return signature.substr(-6, 5) === 'Error' ||\n (typeof value.message === 'string' && typeof value.name === 'string')\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (\n object: {[key: string]: T} | undefined,\n iteratee: ((val: T, key: string, obj: {[key: string]: T}) => boolean | void)\n) {\n object = object || {}\n for (const k in object) {\n if (object.hasOwnProperty(k)) {\n if (iteratee(object[k], k, object) === false) break\n }\n }\n return object\n}\n\nexport function last (arr: T[]): T;\nexport function last (arr: string): string;\nexport function last (arr: any[] | string): any | string {\n return arr[arr.length - 1]\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value: any): value is object {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\n/*\n * A function to create flexibly-numbered lists of integers,\n * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.\n * Returns a list of integers from start (inclusive) to stop (exclusive),\n * incremented (or decremented) by step, exclusive.\n * Note that ranges that stop before they start are considered to be zero-length instead of\n * negative — if you'd like a negative range, use a negative step.\n */\nexport function range (start: number, stop?: number, step?: number) {\n if (stop === undefined) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr: number[] = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n\nexport function padStart (str: any, length: number, ch: string = ' ') {\n str = String(str)\n let n = length - str.length\n while (n-- > 0) str = ch + str\n return str\n}\n","import * as _ from './underscore'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\n\nabstract class LiquidError extends Error {\n private token: Token\n private originalError: Error\n constructor (err: Error, token: Token) {\n super(err.message)\n this.originalError = err\n this.token = token\n }\n protected update () {\n const err = this.originalError\n const context = mkContext(this.token)\n this.message = mkMessage(err.message, this.token)\n this.stack = this.message + '\\n' + context +\n '\\n' + this.stack + '\\nFrom ' + err.stack\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor (message: string, token: Token) {\n super(new Error(message), token)\n this.name = 'TokenizationError'\n super.update()\n }\n}\n\nexport class ParseError extends LiquidError {\n constructor (err: Error, token: Token) {\n super(err, token)\n this.name = 'ParseError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderError extends LiquidError {\n constructor (err: Error, tpl: ITemplate) {\n super(err, tpl.token)\n this.name = 'RenderError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderBreakError extends Error {\n resolvedHTML: string = ''\n constructor (message: string) {\n super(message)\n this.name = 'RenderBreakError'\n this.message = message + ''\n }\n}\n\nexport class AssertionError extends Error {\n constructor (message: string) {\n super(message)\n this.name = 'AssertionError'\n this.message = message + ''\n }\n}\n\nfunction mkContext (token: Token) {\n const lines = token.input.split('\\n')\n const begin = Math.max(token.line - 2, 1)\n const end = Math.min(token.line + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === token.line) ? '>> ' : ' '\n const num = _.padStart(String(lineNumber), String(end).length)\n const text = lines[lineNumber - 1]\n return `${indicator}${num}| ${text}`\n })\n .join('\\n')\n\n return context\n}\n\nfunction mkMessage (msg: string, token: Token) {\n if (token.file) msg += `, file:${token.file}`\n msg += `, line:${token.line}, col:${token.col}`\n return msg\n}\n","import { AssertionError } from './error'\n\nexport default function (predicate: any, message?: string) {\n if (!predicate) {\n message = message || `expect ${predicate} to be true`\n throw new AssertionError(message)\n }\n}\n","/* eslint-disable camelcase */\n\nimport * as _ from './util/underscore'\n\nexport interface LiquidOptions {\n /** `root` is a directory or an array of directories to resolve layouts and includes, as well as the filename passed in when calling `.renderFile()`. If an array, the files are looked up in the order they occur in the array. Defaults to `[\".\"]` */\n root?: string | string[]\n /** `extname` is used to lookup the template file when filepath doesn't include an extension name. Eg: setting to `\".html\"` will allow including file by basename. Defaults to `\"\"`. */\n extname?: string\n /** `cache` indicates whether or not to cache resolved templates. Defaults to `false`. */\n cache?: boolean\n /** `dynamicPartials`: if set, treat `` parameter in `{%include filepath %}`, `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */\n dynamicPartials?: boolean\n /** `strict_filters` is used to enable strict filter existence. If set to `false`, undefined filters will be rendered as empty string. Otherwise, undefined filters will cause an exception. Defaults to `false`. */\n strict_filters?: boolean\n /** `strict_variables` is used to enable strict variable derivation. If set to `false`, undefined variables will be rendered as empty string. Otherwise, undefined variables will cause an exception. Defaults to `false`. */\n strict_variables?: boolean\n /** `trim_tag_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of tags (`{% %}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_tag_right?: boolean\n /** `trim_tag_left` is similar to `trim_tag_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_tag_left?: boolean\n /** ``trim_output_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_output_right?: boolean\n /** `trim_output_left` is similar to `trim_output_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_output_left?: boolean\n /** `tag_delimiter_left` and `tag_delimiter_right` are used to override the delimiter for liquid tags **/\n tag_delimiter_left?: string,\n tag_delimiter_right?: string,\n /** `output_delimiter_left` and `output_delimiter_right` are used to override the delimiter for liquid outputs **/\n output_delimiter_left?: string,\n output_delimiter_right?: string,\n /** `greedy` is used to specify whether `trim_left`/`trim_right` is greedy. When set to `true`, all consecutive blank characters including `\\n` will be trimed regardless of line breaks. Defaults to `true`. */\n greedy?: boolean\n}\n\ninterface NormalizedOptions extends LiquidOptions {\n root?: string[]\n}\n\nexport interface NormalizedFullOptions extends NormalizedOptions {\n root: string[]\n extname: string\n cache: boolean\n dynamicPartials: boolean\n strict_filters: boolean\n strict_variables: boolean\n trim_tag_right: boolean\n trim_tag_left: boolean\n trim_output_right: boolean\n trim_output_left: boolean\n tag_delimiter_left: string,\n tag_delimiter_right: string,\n output_delimiter_left: string,\n output_delimiter_right: string,\n greedy: boolean\n}\n\nconst defaultOptions: NormalizedFullOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_output_right: false,\n trim_output_left: false,\n greedy: true,\n tag_delimiter_left: '{%',\n tag_delimiter_right: '%}',\n output_delimiter_left: '{{',\n output_delimiter_right: '}}',\n strict_filters: false,\n strict_variables: false\n}\n\nexport function normalize (options?: LiquidOptions): NormalizedOptions {\n options = options || {}\n if (options.hasOwnProperty('root')) {\n options.root = normalizeStringArray(options.root)\n }\n return options as NormalizedOptions\n}\n\nexport function applyDefault (options?: NormalizedOptions): NormalizedFullOptions {\n return { ...defaultOptions, ...options }\n}\n\nfunction normalizeStringArray (value: any): string[] {\n if (_.isArray(value)) return value as string[]\n if (_.isString(value)) return [value as string]\n return []\n}\n","enum BlockMode {\n /* store rendered html into blocks */\n OUTPUT,\n /* output rendered html directly */\n STORE\n}\n\nexport default BlockMode\n","import * as _ from '../util/underscore'\nimport { __assign } from 'tslib'\nimport assert from '../util/assert'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\nimport BlockMode from './block-mode'\n\nexport type Context = {\n [key: string]: any\n liquid_method_missing?: (key: string) => any // eslint-disable-line\n to_liquid?: () => any // eslint-disable-line\n toLiquid?: () => any // eslint-disable-line\n}\n\nexport default class Scope {\n opts: NormalizedFullOptions\n contexts: Array\n blocks: object = {}\n groups: {[key: string]: number} = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts?: NormalizedFullOptions) {\n this.opts = applyDefault(opts)\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => __assign(ctx, val), {})\n }\n get (path: string): any {\n const paths = this.propertyAccessSeq(path)\n const scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n return paths.reduce((value, key) => this.readProperty(value, key), scope)\n }\n set (path: string, v: any): void {\n const paths = this.propertyAccessSeq(path)\n let scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n paths.some((key, i) => {\n if (!_.isObject(scope)) {\n return true\n }\n if (i === paths.length - 1) {\n scope[key] = v\n return true\n }\n if (undefined === scope[key]) {\n scope[key] = {}\n }\n scope = scope[key]\n return false\n })\n }\n unshift (ctx: object) {\n return this.contexts.unshift(ctx)\n }\n push (ctx: object) {\n return this.contexts.push(ctx)\n }\n pop (ctx?: object): object | undefined {\n if (!arguments.length) {\n return this.contexts.pop()\n }\n const i = this.contexts.findIndex(scope => scope === ctx)\n if (i === -1) {\n throw new TypeError('scope not found, cannot pop')\n }\n return this.contexts.splice(i, 1)[0]\n }\n findContextFor (key: string, filter: ((conttext: object) => boolean) = () => true) {\n for (let i = this.contexts.length - 1; i >= 0; i--) {\n const candidate = this.contexts[i]\n if (!filter(candidate)) continue\n if (key in candidate) {\n return candidate\n }\n }\n return null\n }\n private readProperty (obj: Context, key: string) {\n let val\n if (_.isNil(obj)) {\n val = obj\n } else {\n obj = toLiquid(obj)\n val = key === 'size' ? readSize(obj) : obj[key]\n if (_.isFunction(obj.liquid_method_missing)) {\n val = obj.liquid_method_missing!(key)\n }\n }\n if (_.isNil(val) && this.opts.strict_variables) {\n throw new TypeError(`undefined variable: ${key}`)\n }\n return val\n }\n\n /*\n * Parse property access sequence from access string\n * @example\n * accessSeq(\"foo.bar\") // ['foo', 'bar']\n * accessSeq(\"foo['bar']\") // ['foo', 'bar']\n * accessSeq(\"foo['b]r']\") // ['foo', 'b]r']\n * accessSeq(\"foo[bar.coo]\") // ['foo', 'bar'], for bar.coo == 'bar'\n */\n propertyAccessSeq (str: string) {\n str = String(str)\n const seq: string[] = []\n let name = ''\n let j\n let i = 0\n while (i < str.length) {\n switch (str[i]) {\n case '[':\n push()\n\n const delemiter = str[i + 1]\n if (/['\"]/.test(delemiter)) { // foo[\"bar\"]\n j = str.indexOf(delemiter, i + 2)\n assert(j !== -1, `unbalanced ${delemiter}: ${str}`)\n name = str.slice(i + 2, j)\n push()\n i = j + 2\n } else { // foo[bar.coo]\n j = matchRightBracket(str, i + 1)\n assert(j !== -1, `unbalanced []: ${str}`)\n name = str.slice(i + 1, j)\n if (!/^[+-]?\\d+$/.test(name)) { // foo[bar] vs. foo[1]\n name = String(this.get(name))\n }\n push()\n i = j + 1\n }\n break\n case '.':// foo.bar, foo[0].bar\n push()\n i++\n break\n default:// foo.bar\n name += str[i]\n i++\n }\n }\n push()\n\n if (!seq.length) {\n throw new TypeError(`invalid path:\"${str}\"`)\n }\n return seq\n\n function push () {\n if (name.length) seq.push(name)\n name = ''\n }\n }\n}\n\nfunction toLiquid (obj: Context) {\n if (_.isFunction(obj.to_liquid)) {\n return obj.to_liquid()\n }\n if (_.isFunction(obj.toLiquid)) {\n return obj.toLiquid()\n }\n return obj\n}\n\nfunction readSize (obj: Context) {\n if (!_.isNil(obj.size)) return obj.size\n if (_.isArray(obj) || _.isString(obj)) return obj.length\n return obj.size\n}\n\nfunction matchRightBracket (str: string, begin: number) {\n let stack = 1 // count of '[' - count of ']'\n for (let i = begin; i < str.length; i++) {\n if (str[i] === '[') {\n stack++\n }\n if (str[i] === ']') {\n stack--\n if (stack === 0) {\n return i\n }\n }\n }\n return -1\n}\n","export class CaptureScope {}\nexport class AssignScope {}\nexport class IncrementScope {}\nexport class DecrementScope {}\n","import { last } from '../util/underscore'\nimport IFS from './ifs'\n\nfunction domResolve (root: string, path: string) {\n const base = document.createElement('base')\n base.href = root\n\n const head = document.getElementsByTagName('head')[0]\n head.insertBefore(base, head.firstChild)\n\n const a = document.createElement('a')\n a.href = path\n const resolved = a.href\n head.removeChild(base)\n\n return resolved\n}\n\nfunction resolve (root: string, filepath: string, ext: string) {\n if (root.length && last(root) !== '/') root += '/'\n const url = domResolve(root, filepath)\n return url.replace(/^(\\w+:\\/\\/[^/]+)(\\/[^?]+)/, (str, origin, path) => {\n const last = path.split('/').pop()\n if (/\\.\\w+$/.test(last)) return str\n return origin + path + ext\n })\n}\n\nasync function readFile (url: string): Promise {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.responseText as string)\n } else {\n reject(new Error(xhr.statusText))\n }\n }\n xhr.onerror = () => {\n reject(new Error('An error occurred whilst receiving the response.'))\n }\n xhr.open('GET', url)\n xhr.send()\n })\n}\n\nasync function exists () {\n return true\n}\n\nexport default { readFile, resolve, exists } as IFS\n","export default class Token {\n type: string = 'notset'\n line: number\n col: number\n raw: string\n input: string\n file?: string\n value: string\n constructor (raw: string, input: string, line: number, col: number, file?: string) {\n this.col = col\n this.line = line\n this.raw = raw\n this.value = raw\n this.input = input\n this.file = file\n }\n}\n","import whiteSpaceCtrl from './whitespace-ctrl'\nimport HTMLToken from './html-token'\nimport TagToken from './tag-token'\nimport Token from './token'\nimport OutputToken from './output-token'\nimport { TokenizationError } from 'src/util/error'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: NormalizedFullOptions\n constructor (options?: NormalizedFullOptions) {\n this.options = applyDefault(options)\n }\n tokenize (input: string, file?: string) {\n const tokens: Token[] = []\n const tagL = this.options.tag_delimiter_left\n const tagR = this.options.tag_delimiter_right\n const outputL = this.options.output_delimiter_left\n const outputR = this.options.output_delimiter_right\n let p = 0\n let curLine = 1\n let state = ParseState.HTML\n let buffer = ''\n let lineBegin = 0\n let line = 1\n let col = 1\n\n while (p < input.length) {\n if (input[p] === '\\n') {\n curLine++\n lineBegin = p + 1\n }\n if (state === ParseState.HTML) {\n if (input.substr(p, outputL.length) === outputL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = outputL\n line = curLine\n col = p - lineBegin + 1\n p += outputL.length\n state = ParseState.OUTPUT\n continue\n } else if (input.substr(p, tagL.length) === tagL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = tagL\n line = curLine\n col = p - lineBegin + 1\n p += tagL.length\n state = ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && input.substr(p, outputR.length) === outputR) {\n buffer += outputR\n tokens.push(new OutputToken(buffer, buffer.slice(outputL.length, -outputR.length), input, line, col, file))\n p += outputR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n } else if (input.substr(p, tagR.length) === tagR) {\n buffer += tagR\n tokens.push(new TagToken(buffer, buffer.slice(tagL.length, -tagR.length), input, line, col, file))\n p += tagR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n }\n buffer += input[p++]\n }\n if (state !== ParseState.HTML) {\n const t = state === ParseState.OUTPUT ? 'output' : 'tag'\n const str = buffer.length > 16 ? buffer.slice(0, 13) + '...' : buffer\n throw new TokenizationError(\n `${t} \"${str}\" not closed`,\n new Token(buffer, input, line, col, file)\n )\n }\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n\n whiteSpaceCtrl(tokens, this.options)\n return tokens\n }\n}\n","import Token from './token'\n\nexport default class HTMLToken extends Token {\n constructor (str: string, input: string, line: number, col: number, file?: string) {\n super(str, input, line, col, file)\n this.type = 'html'\n this.value = str\n }\n}\n","import Token from './token'\nimport { last } from 'src/util/underscore'\n\nexport default class DelimitedToken extends Token {\n trimLeft: boolean\n trimRight: boolean\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, input, line, pos, file)\n this.trimLeft = value[0] === '-'\n this.trimRight = last(value) === '-'\n this.value = value\n .slice(\n this.trimLeft ? 1 : 0,\n this.trimRight ? -1 : value.length\n )\n .trim()\n }\n}\n","// quote related\nconst singleQuoted = /'[^']*'/\nconst doubleQuoted = /\"[^\"]*\"/\nexport const quoted = new RegExp(`${singleQuoted.source}|${doubleQuoted.source}`)\nexport const quoteBalanced = new RegExp(`(?:${quoted.source}|[^'\"])*`)\n\n// basic types\nexport const number = /[+-]?(?:\\d+\\.?\\d*|\\.?\\d+)/\nexport const bool = /true|false/\n\n// property access\nexport const identifier = /[\\w-]+[?]?/\nexport const subscript = new RegExp(`\\\\[(?:${quoted.source}|[\\\\w-\\\\.]+)\\\\]`)\nexport const literal = new RegExp(`(?:${quoted.source}|${bool.source}|${number.source})`)\nexport const variable = new RegExp(`${identifier.source}(?:\\\\.${identifier.source}|${subscript.source})*`)\n\n// range related\nexport const rangeLimit = new RegExp(`(?:${variable.source}|${number.source})`)\nexport const range = new RegExp(`\\\\(${rangeLimit.source}\\\\.\\\\.${rangeLimit.source}\\\\)`)\nexport const rangeCapture = new RegExp(`\\\\((${rangeLimit.source})\\\\.\\\\.(${rangeLimit.source})\\\\)`)\n\nexport const value = new RegExp(`(?:${variable.source}|${literal.source}|${range.source})`)\n\n// hash related\nexport const hash = new RegExp(`(?:${identifier.source})\\\\s*:\\\\s*(?:${value.source})`)\nexport const hashCapture = new RegExp(`(${identifier.source})\\\\s*:\\\\s*(${value.source})`, 'g')\n\n// full match\nexport const tagLine = new RegExp(`^\\\\s*(${identifier.source})\\\\s*([\\\\s\\\\S]*?)\\\\s*$`)\nexport const numberLine = new RegExp(`^${number.source}$`)\nexport const boolLine = new RegExp(`^${bool.source}$`, 'i')\nexport const quotedLine = new RegExp(`^${quoted.source}$`)\nexport const rangeLine = new RegExp(`^${rangeCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isRange (str: string) {\n return rangeLine.test(str)\n}\n","import DelimitedToken from './delimited-token'\nimport { TokenizationError } from 'src/util/error'\nimport * as lexical from './lexical'\n\nexport default class TagToken extends DelimitedToken {\n name: string\n args: string\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'tag'\n const match = this.value.match(lexical.tagLine)\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, this)\n }\n this.name = match[1]\n this.args = match[2]\n }\n}\n","import DelimitedToken from './delimited-token'\n\nexport default class OutputToken extends DelimitedToken {\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'output'\n }\n}\n","import DelimitedToken from 'src/parser/delimited-token'\nimport Token from 'src/parser/token'\nimport TagToken from 'src/parser/tag-token'\nimport { NormalizedFullOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: NormalizedFullOptions) {\n options = { greedy: true, ...options }\n let inRaw = false\n\n tokens.forEach((token: Token, i: number) => {\n if (shouldTrimLeft(token as DelimitedToken, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && (token as TagToken).name === 'raw') inRaw = true\n if (token.type === 'tag' && (token as TagToken).name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token as DelimitedToken, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimLeft || options.trim_tag_left\n if (token.type === 'output') return token.trimLeft || options.trim_output_left\n}\n\nfunction shouldTrimRight (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimRight || options.trim_tag_right\n if (token.type === 'output') return token.trimRight || options.trim_output_right\n}\n\nfunction trimLeft (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rLeft = greedy ? /\\s+$/g : /[\\t\\r ]*$/g\n token.value = token.value.replace(rLeft, '')\n}\n\nfunction trimRight (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rRight = greedy ? /^\\s+/g : /^[\\t\\r ]*\\n?/g\n token.value = token.value.replace(rRight, '')\n}\n","import { RenderError } from 'src/util/error'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Render {\n async renderTemplates (templates: ITemplate[], scope: Scope) {\n assert(scope, 'unable to evalTemplates: scope undefined')\n\n let html = ''\n for (const tpl of templates) {\n try {\n html += await tpl.render(scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n e.resolvedHTML = html\n throw e\n }\n throw e.name === 'RenderError' ? e : new RenderError(e, tpl)\n }\n }\n return html\n }\n}\n","import { isFunction } from 'src/util/underscore'\n\nexport interface IComparable {\n equals: (rhs: any) => boolean\n gt: (rhs: any) => boolean\n geq: (rhs: any) => boolean\n lt: (rhs: any) => boolean\n leq: (rhs: any) => boolean\n}\n\nexport function isComparable (arg: any): arg is IComparable {\n return arg && isFunction(arg.equals)\n}\n","export abstract class Drop {\n}\n","import { Drop } from './drop'\nimport { isFunction } from 'src/util/underscore'\n\nexport interface IDrop {\n value(): any\n}\n\nexport function isDrop (value: any): value is IDrop {\n return value instanceof Drop && isFunction((value as any).value)\n}\n","import { Drop } from './drop'\nimport { IComparable } from './icomparable'\nimport { isObject, isString, isArray } from 'src/util/underscore'\nimport { IDrop } from 'src/drop/idrop'\n\nexport class EmptyDrop extends Drop implements IDrop, IComparable {\n equals (value: any) {\n if (isString(value) || isArray(value)) return value.length === 0\n if (isObject(value)) return Object.keys(value).length === 0\n return false\n }\n gt () {\n return false\n }\n geq () {\n return false\n }\n lt () {\n return false\n }\n leq () {\n return false\n }\n value () {\n return ''\n }\n}\n","import { isNil, isString } from 'src/util/underscore'\nimport { isDrop } from 'src/drop/idrop'\nimport { EmptyDrop } from 'src/drop/empty-drop'\n\nexport class BlankDrop extends EmptyDrop {\n equals (value: any) {\n if (value === false) return true\n if (isNil(isDrop(value) ? value.value() : value)) return true\n if (isString(value)) return /^\\s*$/.test(value)\n return super.equals(value)\n }\n}\n","import { Drop } from './drop'\nimport { IComparable } from './icomparable'\nimport { isNil } from 'src/util/underscore'\nimport { IDrop, isDrop } from 'src/drop/idrop'\nimport { BlankDrop } from 'src/drop/blank-drop'\n\nexport class NullDrop extends Drop implements IDrop, IComparable {\n equals (value: any) {\n return isNil(isDrop(value) ? value.value() : value) || value instanceof BlankDrop\n }\n gt () {\n return false\n }\n geq () {\n return false\n }\n lt () {\n return false\n }\n leq () {\n return false\n }\n value () {\n return null\n }\n}\n","import * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport Scope from 'src/scope/scope'\nimport { range, last } from 'src/util/underscore'\nimport { isComparable } from 'src/drop/icomparable'\nimport { NullDrop } from 'src/drop/null-drop'\nimport { EmptyDrop } from 'src/drop/empty-drop'\nimport { BlankDrop } from 'src/drop/blank-drop'\nimport { isDrop } from 'src/drop/idrop'\n\nconst binaryOperators: {[key: string]: (lhs: any, rhs: any) => boolean} = {\n '==': (l: any, r: any) => {\n if (isComparable(l)) return l.equals(r)\n if (isComparable(r)) return r.equals(l)\n return l === r\n },\n '!=': (l: any, r: any) => {\n if (isComparable(l)) return !l.equals(r)\n if (isComparable(r)) return !r.equals(l)\n return l !== r\n },\n '>': (l: any, r: any) => {\n if (isComparable(l)) return l.gt(r)\n if (isComparable(r)) return r.lt(l)\n return l > r\n },\n '<': (l: any, r: any) => {\n if (isComparable(l)) return l.lt(r)\n if (isComparable(r)) return r.gt(l)\n return l < r\n },\n '>=': (l: any, r: any) => {\n if (isComparable(l)) return l.geq(r)\n if (isComparable(r)) return r.leq(l)\n return l >= r\n },\n '<=': (l: any, r: any) => {\n if (isComparable(l)) return l.leq(r)\n if (isComparable(r)) return r.geq(l)\n return l <= r\n },\n 'contains': (l: any, r: any) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l: any, r: any) => isTruthy(l) && isTruthy(r),\n 'or': (l: any, r: any) => isTruthy(l) || isTruthy(r)\n}\n\nexport function parseExp (exp: string, scope: Scope): any {\n assert(scope, 'unable to parseExp: scope undefined')\n const operatorREs = lexical.operators\n let match\n for (let i = 0; i < operatorREs.length; i++) {\n const operatorRE = operatorREs[i]\n const expRE = new RegExp(`^(${lexical.quoteBalanced.source})(${operatorRE.source})(${lexical.quoteBalanced.source})$`)\n if ((match = exp.match(expRE))) {\n const l = parseExp(match[1], scope)\n const op = binaryOperators[match[2].trim()]\n const r = parseExp(match[3], scope)\n return op(l, r)\n }\n }\n\n if ((match = exp.match(lexical.rangeLine))) {\n const low = parseValue(match[1], scope)\n const high = parseValue(match[2], scope)\n return range(low, high + 1)\n }\n\n return parseValue(exp, scope)\n}\n\nexport function evalExp (str: string, scope: Scope): any {\n const value = parseExp(str, scope)\n return isDrop(value) ? value.value() : value\n}\n\nfunction parseValue (str: string, scope: Scope): any {\n if (!str) return null\n str = str.trim()\n\n if (str === 'true') return true\n if (str === 'false') return false\n if (str === 'nil' || str === 'null') return new NullDrop()\n if (str === 'empty') return new EmptyDrop()\n if (str === 'blank') return new BlankDrop()\n if (!isNaN(Number(str))) return Number(str)\n if ((str[0] === '\"' || str[0] === \"'\") && str[0] === last(str)) return str.slice(1, -1)\n return scope.get(str)\n}\n\nexport function evalValue (str: string, scope: Scope): any {\n const value = parseValue(str, scope)\n return isDrop(value) ? value.value() : value\n}\n\nexport function isTruthy (val: any): boolean {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val: any): boolean {\n return val === false || undefined === val || val === null\n}\n","import { hashCapture } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\n\n/**\n * Key-Value Pairs Representing Tag Arguments\n * Example:\n * For the markup `{% include 'head.html' foo='bar' %}`,\n * hash['foo'] === 'bar'\n */\nexport default class Hash {\n [key: string]: any\n constructor (markup: string, scope: Scope) {\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n this[k] = evalValue(v, scope)\n }\n }\n}\n","import { evalExp } from 'src/render/syntax'\nimport Filter from './filter/filter'\nimport Scope from 'src/scope/scope'\n\nenum ParseState {\n INIT = 0,\n FILTER_NAME = 1,\n FILTER_ARG = 2\n}\n\nexport default class {\n initial: any\n filters: Array = []\n\n /**\n * @param str value string, like: \"i have a dream | truncate: 3\n */\n constructor (str: string, strictFilters: boolean) {\n let buffer = ''\n let quoted = ''\n let state = ParseState.INIT\n let sealed = false\n\n let filterName = ''\n let filterArgs: string[] = []\n\n for (let i = 0; i < str.length; i++) {\n if (quoted) {\n if (str[i] === quoted) {\n quoted = ''\n sealed = true\n }\n buffer += str[i]\n } else if (/\\s/.test(str[i])) {\n if (!buffer) continue\n else sealed = true\n } else if (str[i] === '|') {\n if (state === ParseState.INIT) {\n this.initial = buffer\n } else {\n if (state === ParseState.FILTER_NAME) filterName = buffer\n else filterArgs.push(buffer)\n this.filters.push(new Filter(filterName, filterArgs, strictFilters))\n filterName = ''\n filterArgs = []\n }\n state = ParseState.FILTER_NAME\n buffer = ''\n sealed = false\n } else if (state === ParseState.FILTER_NAME && str[i] === ':') {\n filterName = buffer\n state = ParseState.FILTER_ARG\n buffer = ''\n sealed = false\n } else if (state === ParseState.FILTER_ARG && str[i] === ',') {\n filterArgs.push(buffer)\n buffer = ''\n sealed = false\n } else if (sealed) continue\n else {\n if ((str[i] === '\"' || str[i] === \"'\") && !quoted) quoted = str[i]\n buffer += str[i]\n }\n }\n\n if (buffer) {\n if (state === ParseState.INIT) this.initial = buffer\n else if (state === ParseState.FILTER_NAME) this.filters.push(new Filter(buffer, [], strictFilters))\n else {\n filterArgs.push(buffer)\n this.filters.push(new Filter(filterName, filterArgs, strictFilters))\n }\n }\n }\n value (scope: Scope) {\n return this.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(this.initial, scope))\n }\n}\n","export default abstract class Template {\n token: T;\n constructor (token: T) {\n this.token = token\n }\n}\n","import { create, stringify } from 'src/util/underscore'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITagImpl from './itag-impl'\nimport ITagImplOptions from './itag-impl-options'\nimport Liquid from 'src/liquid'\nimport Hash from './hash'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\n\nexport default class Tag extends Template implements ITemplate {\n name: string\n private impl: ITagImpl\n static impls: { [key: string]: ITagImplOptions } = {}\n\n constructor (token: TagToken, tokens: Token[], liquid: Liquid) {\n super(token)\n this.name = token.name\n\n const impl = Tag.impls[token.name]\n assert(impl, `tag ${token.name} not found`)\n this.impl = create(impl)\n this.impl.liquid = liquid\n if (this.impl.parse) {\n this.impl.parse(token, tokens)\n }\n }\n async render (scope: Scope) {\n const hash = new Hash(this.token.args, scope)\n const impl = this.impl\n if (typeof impl.render !== 'function') {\n return ''\n }\n const html = await impl.render(scope, hash)\n return stringify(html)\n }\n static register (name: string, tag: ITagImplOptions) {\n Tag.impls[name] = tag\n }\n static clear () {\n Tag.impls = {}\n }\n}\n","import { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\nimport { FilterImpl } from './filter-impl'\n\nexport default class Filter {\n name: string\n impl: FilterImpl\n args: string[]\n private static impls: {[key: string]: FilterImpl} = {}\n\n constructor (name: string, args: string[], strictFilters: boolean) {\n const impl = Filter.impls[name]\n if (!impl && strictFilters) throw new TypeError(`undefined filter: ${name}`)\n\n this.name = name\n this.impl = impl || (x => x)\n this.args = args\n }\n render (value: any, scope: Scope): any {\n const args = this.args.map(arg => evalValue(arg, scope))\n return this.impl.apply(null, [value, ...args])\n }\n static register (name: string, filter: FilterImpl) {\n Filter.impls[name] = filter\n }\n static clear () {\n Filter.impls = {}\n }\n}\n","import Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from './tag-token'\n\ntype ParseToken = ((token: Token, remainTokens: Array) => ITemplate)\n\nexport default class ParseStream {\n private tokens: Array\n private handlers: {[key: string]: (arg: any) => void} = {}\n private stopRequested: boolean = false\n private parseToken: ParseToken\n\n constructor (tokens: Array, parseToken: ParseToken) {\n this.tokens = tokens\n this.parseToken = parseToken\n }\n on (name: string, cb: (arg: T) => void): ParseStream {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: T) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n return false\n }\n start () {\n this.trigger('start')\n let token: Token | undefined\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' && this.trigger(`tag:${(token).name}`, token)) {\n continue\n }\n const template = this.parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n }\n stop () {\n this.stopRequested = true\n return this\n }\n}\n","import Value from './value'\nimport { stringify } from 'src/util/underscore'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport OutputToken from 'src/parser/output-token'\n\nexport default class Output extends Template implements ITemplate {\n value: Value\n constructor (token: OutputToken, strictFilters: boolean) {\n super(token)\n this.value = new Value(token.value, strictFilters)\n }\n async render (scope: Scope): Promise {\n const html = await this.value.value(scope)\n return stringify(html)\n }\n}\n","import Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport HTMLToken from 'src/parser/html-token'\n\nexport default class extends Template implements ITemplate {\n str: string\n constructor (token: HTMLToken) {\n super(token)\n this.str = token.value\n }\n async render (): Promise {\n return this.str\n }\n}\n","import { ParseError } from '../util/error'\nimport Liquid from 'src/liquid'\nimport ParseStream from './parse-stream'\nimport Token from './token'\nimport TagToken from './tag-token'\nimport OutputToken from './output-token'\nimport Tag from 'src/template/tag/tag'\nimport Output from 'src/template/output'\nimport HTML from 'src/template/html'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Parser {\n liquid: Liquid\n\n constructor (liquid: Liquid) {\n this.liquid = liquid\n }\n parse (tokens: Array) {\n let token\n const templates: ITemplate[] = []\n while ((token = tokens.shift())) {\n templates.push(this.parseToken(token, tokens))\n }\n return templates\n }\n parseToken (token: Token, remainTokens: Array) {\n try {\n if (token.type === 'tag') {\n return new Tag(token as TagToken, remainTokens, this.liquid)\n }\n if (token.type === 'output') {\n return new Output(token as OutputToken, this.liquid.options.strict_filters)\n }\n return new HTML(token)\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n parseStream (tokens: Array) {\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens))\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { AssignScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(re) as RegExpMatchArray\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (scope: Scope) {\n const ctx = new AssignScope()\n ctx[this.key] = this.liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n} as ITagImplOptions\n","/*\n * Call functions in serial until someone rejected.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function mapSeries (\n iterable: T1[],\n iteratee: (item: T1, idx: number, iterable: T1[]) => Promise | T2\n): Promise {\n let ret = Promise.resolve(0)\n const result: T2[] = []\n iterable.forEach(function (item, idx) {\n ret = ret\n .then(() => iteratee(item, idx, iterable))\n .then(x => result.push(x))\n })\n return ret.then(() => result)\n}\n","import { mapSeries } from 'src/util/promise'\nimport { isString, isObject, isArray } from 'src/util/underscore'\nimport { evalExp } from 'src/render/syntax'\nimport assert from 'src/util/assert'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n type: 'block',\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n this.variable = match[1]\n this.collection = match[2]\n this.reversed = !!match[3]\n\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endfor', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection] as string[]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]]) as Array<[string, any]>\n }\n }\n if (!isArray(collection) || !collection.length) {\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n if (this.reversed) collection.reverse()\n\n const contexts = collection.map((item: string, i: number) => {\n const ctx = {}\n ctx[this.variable] = item\n ctx['forloop'] = {\n first: i === 0,\n index: i + 1,\n index0: i,\n last: i === collection.length - 1,\n length: collection.length,\n rindex: collection.length - i,\n rindex0: collection.length - i - 1\n }\n return ctx\n })\n\n let html = ''\n let finished = false\n await mapSeries(contexts, async context => {\n if (finished) return\n\n scope.push(context)\n try {\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n html += e.resolvedHTML\n if (e.message === 'break') {\n finished = true\n }\n } else throw e\n }\n scope.pop(context)\n })\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = tagToken.args.match(re) as RegExpMatchArray\n assert(match, `${tagToken.args} not valid identifier`)\n\n this.variable = match[1]\n this.templates = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', () => stream.stop())\n .on('template', (tpl) => this.templates.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const html = await this.liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = new CaptureScope()\n ctx[this.variable] = html\n scope.push(ctx)\n }\n} as ITagImplOptions\n","import { evalExp } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p: ITemplate[] = []\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:when', (token: TagToken) => {\n this.cases.push({\n val: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endcase', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = evalExp(branch.val, scope)\n const cond = evalExp(this.cond, scope)\n if (val === cond) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value, quotedLine } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /[^\\s,]+/\nconst withRE = new RegExp(`with\\\\s+(${value.source})`)\n\nexport default {\n parse: function (token: TagToken) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticValue = match[0]\n }\n\n match = value.exec(token.args)\n if (match) {\n this.value = match[0]\n }\n\n match = withRE.exec(token.args)\n if (match) {\n this.with = match[1]\n }\n },\n render: async function (scope: Scope, hash: Hash) {\n let filepath\n if (scope.opts.dynamicPartials) {\n if (quotedLine.exec(this.value)) {\n const template = this.value.slice(1, -1)\n filepath = await this.liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = evalValue(this.value, scope)\n }\n } else {\n filepath = this.staticValue\n }\n assert(filepath, `cannot include with empty filename`)\n\n const originBlocks = scope.blocks\n const originBlockMode = scope.blockMode\n\n scope.blocks = {}\n scope.blockMode = BlockMode.OUTPUT\n if (this.with) {\n hash[filepath] = evalValue(this.with, scope)\n }\n const templates = await this.liquid.getTemplate(filepath, scope.opts)\n scope.push(hash)\n const html = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.blocks = originBlocks\n scope.blockMode = originBlockMode\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, DecrementScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(identifier) as RegExpMatchArray\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope: Scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new DecrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n return --context[this.variable]\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\nconst candidatesRE = new RegExp(rValue.source, 'g')\n\nexport default {\n parse: function (tagToken: TagToken) {\n let match: RegExpExecArray | null = groupRE.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.group = match[1] || ''\n const candidates = match[2]\n\n this.candidates = []\n\n while ((match = candidatesRE.exec(candidates))) {\n this.candidates.push(match[0])\n }\n assert(this.candidates.length, `empty candidates: ${tagToken.raw}`)\n },\n\n render: function (scope: Scope) {\n const group = evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n const groups = scope.groups\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n\n return evalValue(candidate, scope)\n }\n}\n","import { evalExp, isTruthy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', (token: TagToken) => {\n this.branches.push({\n cond: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endif', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (const branch of this.branches) {\n const cond = evalExp(branch.cond, scope)\n if (isTruthy(cond)) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match![0]\n },\n render: function (scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new IncrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n const val = context[this.variable]\n context[this.variable]++\n return val\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /\\S+/\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticLayout = match[0]\n }\n\n match = rValue.exec(token.args)\n if (match) {\n this.layout = match[0]\n }\n\n this.tpls = this.liquid.parser.parse(remainTokens)\n },\n render: async function (scope: Scope, hash: Hash) {\n const layout = scope.opts.dynamicPartials\n ? evalValue(this.layout, scope)\n : this.staticLayout\n assert(layout, `cannot apply layout with empty filename`)\n\n // render the remaining tokens immediately\n scope.blockMode = BlockMode.STORE\n const html = await this.liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.blocks[''] === undefined) {\n scope.blocks[''] = html\n }\n const templates = await this.liquid.getTemplate(layout, scope.opts)\n scope.push(hash)\n scope.blockMode = BlockMode.OUTPUT\n const partial = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n} as ITagImplOptions\n","import BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n this.tpls = [] as ITemplate[]\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', (tpl: ITemplate) => this.tpls.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${token.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const childDefined = scope.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await this.liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.blockMode === BlockMode.STORE) {\n scope.blocks[this.block] = html\n return ''\n }\n return html\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.tokens = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endraw') stream.stop()\n else this.tokens.push(token)\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: function () {\n return this.tokens.map((token: Token) => token.raw).join('')\n }\n}\n","import { mapSeries } from 'src/util/promise'\nimport assert from 'src/util/assert'\nimport { evalExp } from 'src/render/syntax'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.variable = match[1]\n this.collection = match[2]\n this.templates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope) || []\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = hash.cols || collection.length\n const contexts = collection.map((item: any) => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row: number = 0\n let html = ''\n await mapSeries(contexts, async (context, idx) => {\n row = Math.floor(idx / cols) + 1\n const col = (idx % cols) + 1\n if (col === 1) {\n if (row !== 1) {\n html += ''\n }\n html += ``\n }\n\n html += ``\n scope.push(context)\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n html += ''\n scope.pop(context)\n return html\n })\n if (row > 0) {\n html += ''\n }\n return html\n }\n} as ITagImplOptions\n","import assign from './assign'\nimport For from './for'\nimport capture from './capture'\nimport Case from './case'\nimport comment from './comment'\nimport include from './include'\nimport decrement from './decrement'\nimport cycle from './cycle'\nimport If from './if'\nimport increment from './increment'\nimport layout from './layout'\nimport block from './block'\nimport raw from './raw'\nimport tablerow from './tablerow'\nimport unless from './unless'\nimport Break from './break'\nimport Continue from './continue'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst tags: { [key: string]: ITagImplOptions } = {\n assign, 'for': For, capture, 'case': Case, comment, include, decrement, increment, cycle, 'if': If, layout, block, raw, tablerow, unless, 'break': Break, 'continue': Continue\n}\n\nexport default tags\n","import { evalExp, isFalsy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n const cond = evalExp(this.cond, scope)\n return isFalsy(cond)\n ? this.liquid.renderer.renderTemplates(this.templates, scope)\n : this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('break')\n }\n}\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('continue')\n }\n}\n","const escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nfunction escape (str: string) {\n return String(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str: string) {\n return String(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nexport default {\n 'escape': escape,\n 'escape_once': (str: string) => escape(unescape(str)),\n 'newline_to_br': (v: string) => v.replace(/\\n/g, '
'),\n 'strip_html': (v: string) => v.replace(/|||<.*?>/g, '')\n}\n","import { FilterImpl } from 'src/template/filter/filter-impl'\n\nexport default {\n 'append': (v: string, arg: string) => v + arg,\n 'prepend': (v: string, arg: string) => arg + v,\n 'capitalize': (str: string) => String(str).charAt(0).toUpperCase() + str.slice(1),\n 'lstrip': (v: string) => String(v).replace(/^\\s+/, ''),\n 'downcase': (v: string) => v.toLowerCase(),\n 'upcase': (str: string) => String(str).toUpperCase(),\n 'remove': (v: string, arg: string) => v.split(arg).join(''),\n 'remove_first': (v: string, l: string) => v.replace(l, ''),\n 'replace': (v: string, pattern: string, replacement: string) =>\n String(v).split(pattern).join(replacement),\n 'replace_first': (v: string, arg1: string, arg2: string) => String(v).replace(arg1, arg2),\n 'rstrip': (str: string) => String(str).replace(/\\s+$/, ''),\n 'split': (v: string, arg: string) => String(v).split(arg),\n 'strip': (v: string) => String(v).trim(),\n 'strip_newlines': (v: string) => String(v).replace(/\\n/g, ''),\n 'truncate': (v: string, l: number = 50, o: string = '...') => {\n v = String(v)\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v: string, l: number = 15, o: string = '...') => {\n const arr = v.split(/\\s+/)\n let ret = arr.slice(0, l).join(' ')\n if (arr.length >= l) ret += o\n return ret\n }\n} as {[key: string]: FilterImpl}\n","export default {\n 'abs': (v: number) => Math.abs(v),\n 'ceil': (v: number) => Math.ceil(v),\n 'divided_by': (v: number, arg: number) => v / arg,\n 'floor': (v: number) => Math.floor(v),\n 'minus': bindFixed((v: number, arg: number) => v - arg),\n 'modulo': bindFixed((v: number, arg: number) => v % arg),\n 'round': (v: number, arg: number = 0) => {\n const amp = Math.pow(10, arg)\n return Math.round(v * amp) / amp\n },\n 'plus': bindFixed((v: number, arg: number) => Number(v) + Number(arg)),\n 'times': (v: number, arg: number) => v * arg\n}\n\nfunction getFixed (v: number) {\n const p = String(v).split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction bindFixed (cb: (v: number, arg: number) => number) {\n return (l: number, r: number) => {\n const f = Math.max(getFixed(l), getFixed(r))\n return cb(l, r).toFixed(f)\n }\n}\n","export default {\n 'url_decode': (x: string) => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': (x: string) => x.split(' ').map(encodeURIComponent).join('+')\n}\n","import { last } from 'src/util/underscore'\n\nexport default {\n 'join': (v: any[], arg: string) => v.join(arg === undefined ? ' ' : arg),\n 'last': (v: T[]): T => last(v),\n 'first': (v: T[]): T => v[0],\n 'map': (arr: {[key: string]: T1}[], arg: string): T1[] => arr.map(v => v[arg]),\n 'reverse': (v: any[]) => v.reverse(),\n 'sort': (v: T[], arg: (lhs: T, rhs: T) => number) => v.sort(arg),\n 'size': (v: string | any[]) => v.length,\n 'concat': (v: T1[], arg: T2[] | T2): Array => Array.prototype.concat.call(v, arg),\n 'slice': (v: T[], begin: number, length: number): T[] => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'uniq': function (arr: T[]): T[] {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(String(val))) return false\n u[String(val)] = true\n return true\n })\n }\n}\n","import { padStart } from './underscore'\n\nconst monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst monthNamesShort = monthNames.map(abbr)\nconst dayNamesShort = dayNames.map(abbr)\nconst suffixes = {\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n 'default': 'th'\n}\n\nfunction abbr (str: string) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d: Date) {\n const feb = _date.isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n },\n\n getDayOfYear: function (d: Date) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += _date.daysInMonth(d)[i]\n }\n return num + d.getDate()\n },\n\n getWeekOfYear: function (d: Date, startDay: number) {\n // Skip to startDay of this week\n const now = this.getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return padStart(String(Math.floor((now - then) / 7) + 1), 2, '0')\n },\n\n isLeapYear: function (d: Date) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d: Date) {\n const str = d.getDate().toString()\n const index = parseInt(str.slice(-1))\n return suffixes[index] || suffixes['default']\n },\n\n century: function (d: Date) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst formatCodes = {\n a: function (d: Date) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d: Date) {\n return dayNames[d.getDay()]\n },\n b: function (d: Date) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d: Date) {\n return monthNames[d.getMonth()]\n },\n c: function (d: Date) {\n return d.toLocaleString()\n },\n C: function (d: Date) {\n return _date.century(d)\n },\n d: function (d: Date) {\n return padStart(d.getDate(), 2, '0')\n },\n e: function (d: Date) {\n return padStart(d.getDate(), 2)\n },\n H: function (d: Date) {\n return padStart(d.getHours(), 2, '0')\n },\n I: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2, '0')\n },\n j: function (d: Date) {\n return padStart(_date.getDayOfYear(d), 3, '0')\n },\n k: function (d: Date) {\n return padStart(d.getHours(), 2)\n },\n l: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2)\n },\n L: function (d: Date) {\n return padStart(d.getMilliseconds(), 3, '0')\n },\n m: function (d: Date) {\n return padStart(d.getMonth() + 1, 2, '0')\n },\n M: function (d: Date) {\n return padStart(d.getMinutes(), 2, '0')\n },\n p: function (d: Date) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d: Date) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d: Date) {\n return _date.getSuffix(d)\n },\n s: function (d: Date) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d: Date) {\n return padStart(d.getSeconds(), 2, '0')\n },\n u: function (d: Date) {\n return d.getDay() || 7\n },\n U: function (d: Date) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d: Date) {\n return d.getDay()\n },\n W: function (d: Date) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d: Date) {\n return d.toLocaleDateString()\n },\n X: function (d: Date) {\n return d.toLocaleTimeString()\n },\n y: function (d: Date) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d: Date) {\n return d.getFullYear()\n },\n z: function (d: Date) {\n const tz = d.getTimezoneOffset() / 60 * 100\n return (tz > 0 ? '-' : '+') + padStart(String(Math.abs(tz)), 4, '0')\n },\n '%': function () {\n return '%'\n }\n};\n(formatCodes as any).h = formatCodes.b;\n(formatCodes as any).N = formatCodes.L\n\nexport default function (d: Date, format: string) {\n let output = ''\n let remaining = format\n\n while (true) {\n const r = /%./g\n const results = r.exec(remaining)\n\n // No more format codes. Add the remaining text and return\n if (!results) {\n return output + remaining\n }\n\n // Add the preceding text\n output += remaining.slice(0, r.lastIndex - 2)\n remaining = remaining.slice(r.lastIndex)\n\n // Add the format code\n const ch = results[0].charAt(1)\n const func = formatCodes[ch]\n output += func ? func(d) : '%' + ch\n }\n}\n","import html from './html'\nimport str from './string'\nimport math from './math'\nimport url from './url'\nimport array from './array'\nimport date from './date'\nimport obj from './object'\n\nexport default { ...html, ...str, ...math, ...url, ...date, ...obj, ...array }\n","import strftime from 'src/util/strftime'\nimport { isString } from 'src/util/underscore'\n\nexport default {\n 'date': (v: string | Date, arg: string) => {\n let date = v\n if (v === 'now') {\n date = new Date()\n } else if (isString(v)) {\n date = new Date(v)\n }\n return isValidDate(date) ? strftime(date, arg) : v\n }\n}\n\nfunction isValidDate (date: any): date is Date {\n return date instanceof Date && !isNaN(date.getTime())\n}\n","import { isTruthy } from 'src/render/syntax'\n\nexport default {\n 'default': (v: T1, arg: T2): T1 | T2 => isTruthy(v) ? v : arg\n}\n","import Scope from './scope/scope'\nimport * as Types from './types'\nimport fs from 'src/fs'\nimport * as _ from './util/underscore'\nimport ITemplate from './template/itemplate'\nimport Tokenizer from './parser/tokenizer'\nimport Render from './render/render'\nimport Tag from './template/tag/tag'\nimport Filter from './template/filter/filter'\nimport Parser from './parser/parser'\nimport ITagImplOptions from './template/tag/itag-impl-options'\nimport Value from './template/value'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './render/syntax'\nimport builtinTags from './builtin/tags'\nimport builtinFilters from './builtin/filters'\nimport { LiquidOptions, NormalizedFullOptions, applyDefault, normalize } from './liquid-options'\nimport { FilterImpl } from './template/filter/filter-impl'\n\nexport default class Liquid {\n public options: NormalizedFullOptions\n public renderer: Render\n public parser: Parser\n private cache: object = {}\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n this.options = applyDefault(normalize(opts))\n this.parser = new Parser(this)\n this.renderer = new Render()\n this.tokenizer = new Tokenizer(this.options)\n\n _.forOwn(builtinTags, (conf, name) => this.registerTag(name, conf))\n _.forOwn(builtinFilters, (handler, name) => this.registerFilter(name, handler))\n }\n parse (html: string, filepath?: string) {\n const tokens = this.tokenizer.tokenize(html, filepath)\n return this.parser.parse(tokens)\n }\n render (tpl: Array, ctx?: object, opts?: LiquidOptions) {\n const options = { ...this.options, ...normalize(opts) }\n const scope = new Scope(ctx, options)\n return this.renderer.renderTemplates(tpl, scope)\n }\n async parseAndRender (html: string, ctx?: object, opts?: LiquidOptions) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n }\n async getTemplate (file: string, opts?: LiquidOptions) {\n const options = normalize(opts)\n const roots = options.root ? [...options.root, ...this.options.root] : this.options.root\n const paths = roots.map(root => fs.resolve(root, file, this.options.extname))\n\n for (const filepath of paths) {\n if (!(await fs.exists(filepath))) continue\n\n if (this.options.cache && this.cache[filepath]) return this.cache[filepath]\n const value = this.parse(await fs.readFile(filepath), filepath)\n if (this.options.cache) this.cache[filepath] = value\n return value\n }\n\n const err = new Error('ENOENT') as any\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`\n err.code = 'ENOENT'\n throw err\n }\n async renderFile (file: string, ctx?: object, opts?: LiquidOptions) {\n const options = normalize(opts)\n const templates = await this.getTemplate(file, options)\n return this.render(templates, ctx, opts)\n }\n evalValue (str: string, scope: Scope) {\n return new Value(str, this.options.strict_filters).value(scope)\n }\n registerFilter (name: string, filter: FilterImpl) {\n return Filter.register(name, filter)\n }\n registerTag (name: string, tag: ITagImplOptions) {\n return Tag.register(name, tag)\n }\n plugin (plugin: (this: Liquid, L: typeof Liquid) => void) {\n return plugin.call(this, Liquid)\n }\n express () {\n const self = this\n return function (this: any, filePath: string, ctx: object, cb: (err: Error | null, html?: string) => void) {\n const opts = { root: this.root }\n self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb)\n }\n }\n static default = Liquid\n static isTruthy = isTruthy\n static isFalsy = isFalsy\n static evalExp = evalExp\n static evalValue = evalValue\n static Types = Types\n}\n"],"names":["toStr","Object","prototype","toString","arrToStr","Array","isString","value","call","isFunction","stringify","isNil","to_liquid","toLiquid","to_s","indexOf","cache","JSON","key","isObject","push","isArray","forOwn","object","iteratee","k","hasOwnProperty","last","arr","length","type","range","start","stop","step","undefined","i","padStart","str","ch","n","String","err","token","_super","message","_this","originalError","tslib_1.__extends","LiquidError","lines","begin","end","this","context","input","split","Math","max","line","min","_\r\n .range","map","lineNumber","indicator","num","_.padStart","text","join","msg","file","col","mkMessage","stack","Error","name","update","tpl","predicate","AssertionError","BlockMode","defaultOptions","root","extname","dynamicPartials","trim_tag_right","trim_tag_left","trim_output_right","trim_output_left","greedy","tag_delimiter_left","tag_delimiter_right","output_delimiter_left","output_delimiter_right","strict_filters","strict_variables","normalize","options","_.isArray","_.isString","applyDefault","ctx","opts","OUTPUT","contexts","Scope","reduce","val","__assign","path","paths","propertyAccessSeq","scope","findContextFor","_.last","readProperty","v","some","_.isObject","unshift","arguments","pop","findIndex","TypeError","splice","filter","candidate","obj","_.isNil","_.isFunction","size","liquid_method_missing","j","seq","delemiter","test","assert","slice","matchRightBracket","get","readFile","url","Promise","resolve","reject","xhr","XMLHttpRequest","onload","status","responseText","statusText","onerror","open","send","filepath","ext","base","document","createElement","href","head","getElementsByTagName","insertBefore","firstChild","a","resolved","removeChild","domResolve","replace","origin","exists","ParseState","raw","Token","pos","trimLeft","trimRight","trim","quoted","RegExp","source","quoteBalanced","number","identifier","subscript","literal","variable","rangeLimit","rangeCapture","hash","hashCapture","tagLine","quotedLine","rangeLine","operators","match","lexical.tagLine","TokenizationError","args","DelimitedToken","Tokenizer","tokens","tagL","tagR","outputL","outputR","p","curLine","state","HTML","buffer","lineBegin","substr","HTMLToken","TAG","OutputToken","TagToken","inRaw","forEach","rLeft","rRight","whiteSpaceCtrl","t","Render","templates","html","templates_1","_i","_a","render","_b","e_1","resolvedHTML","RenderError","isComparable","arg","equals","isDrop","Drop","EmptyDrop","keys","BlankDrop","NullDrop","binaryOperators","==","l","r","!=",">","gt","lt","<",">=","geq","leq","<=","contains","and","isTruthy","or","evalExp","parseExp","exp","operatorREs","lexical.operators","operatorRE","expRE","lexical.quoteBalanced","op","lexical.rangeLine","parseValue","isNaN","Number","evalValue","isFalsy","markup","lastIndex","exec","liquid","proto","impl","Tag","impls","create","parse","Hash","tag","Template","strictFilters","Filter","x","apply","parseToken","ParseStream","cb","handlers","event","h","trigger","stopRequested","shift","template","INIT","sealed","filterName","filterArgs","initial","FILTER_NAME","filters","FILTER_ARG","default_1","prev","Value","Output","Parser","remainTokens","e","ParseError","re","AssignScope","mapSeries","iterable","ret","result","item","idx","then","tagToken","collection","reversed","elseTemplates","stream","parser","parseStream","on","offset","limit","reverse","first","index","index0","rindex","rindex0","finished","renderer","renderTemplates","CaptureScope","cond","cases","branch","staticFileRE","withRE","staticValue","with","parseAndRender","getAll","originBlocks","blocks","originBlockMode","blockMode","getTemplate","DecrementScope","groupRE","rValue","candidatesRE","group","candidates","fingerprint","groups","branches","IncrementScope","staticLayout","layout","tpls","STORE","partial","block","childDefined","tags","assign","for","For","capture","case","Case","comment","include","decrement","increment","cycle","if","If","tablerow","cols","row","floor","unless","break","RenderBreakError","continue","escapeMap","&","\"","'","unescapeMap","&","<",">",""","'","escape","m","escape_once","newline_to_br","strip_html","append","prepend","capitalize","charAt","toUpperCase","lstrip","downcase","toLowerCase","upcase","remove","remove_first","pattern","replacement","replace_first","arg1","arg2","rstrip","strip","strip_newlines","truncate","o","truncatewords","abs","ceil","divided_by","minus","bindFixed","modulo","round","amp","pow","plus","times","getFixed","f","toFixed","url_decode","decodeURIComponent","url_encode","encodeURIComponent","sort","concat","uniq","u","monthNames","dayNames","monthNamesShort","abbr","dayNamesShort","suffixes","1","2","3","default","_date","daysInMonth","d","isLeapYear","getDayOfYear","getMonth","getDate","getWeekOfYear","startDay","now","getDay","Date","getFullYear","year","getSuffix","parseInt","century","substring","formatCodes","A","b","B","c","toLocaleString","C","H","getHours","I","L","getMilliseconds","M","getMinutes","P","q","s","valueOf","S","getSeconds","U","w","W","toLocaleDateString","X","toLocaleTimeString","y","Y","z","tz","getTimezoneOffset","%","N","math","date","getTime","format","output","remaining","results","func","strftime","array","tokenizer","_.forOwn","builtinTags","conf","registerTag","builtinFilters","handler","registerFilter","Liquid","tokenize","roots","fs","paths_1","code","register","plugin","self","filePath","renderFile","Types"],"mappings":"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"} \ No newline at end of file diff --git a/dist/src/drop/blank-drop.d.ts b/dist/src/drop/blank-drop.d.ts new file mode 100644 index 000000000..84424417d --- /dev/null +++ b/dist/src/drop/blank-drop.d.ts @@ -0,0 +1,4 @@ +import { EmptyDrop } from 'src/drop/empty-drop'; +export declare class BlankDrop extends EmptyDrop { + equals(value: any): boolean; +} diff --git a/dist/src/drop/drop.d.ts b/dist/src/drop/drop.d.ts new file mode 100644 index 000000000..93a1d0470 --- /dev/null +++ b/dist/src/drop/drop.d.ts @@ -0,0 +1,2 @@ +export declare abstract class Drop { +} diff --git a/dist/src/drop/empty-drop.d.ts b/dist/src/drop/empty-drop.d.ts new file mode 100644 index 000000000..fe178530e --- /dev/null +++ b/dist/src/drop/empty-drop.d.ts @@ -0,0 +1,11 @@ +import { Drop } from './drop'; +import { IComparable } from './icomparable'; +import { IDrop } from 'src/drop/idrop'; +export declare class EmptyDrop extends Drop implements IDrop, IComparable { + equals(value: any): boolean; + gt(): boolean; + geq(): boolean; + lt(): boolean; + leq(): boolean; + value(): string; +} diff --git a/dist/src/drop/icomparable.d.ts b/dist/src/drop/icomparable.d.ts new file mode 100644 index 000000000..f50316c59 --- /dev/null +++ b/dist/src/drop/icomparable.d.ts @@ -0,0 +1,8 @@ +export interface IComparable { + equals: (rhs: any) => boolean; + gt: (rhs: any) => boolean; + geq: (rhs: any) => boolean; + lt: (rhs: any) => boolean; + leq: (rhs: any) => boolean; +} +export declare function isComparable(arg: any): arg is IComparable; diff --git a/dist/src/drop/idrop.d.ts b/dist/src/drop/idrop.d.ts new file mode 100644 index 000000000..4f159537b --- /dev/null +++ b/dist/src/drop/idrop.d.ts @@ -0,0 +1,4 @@ +export interface IDrop { + value(): any; +} +export declare function isDrop(value: any): value is IDrop; diff --git a/dist/src/drop/null-drop.d.ts b/dist/src/drop/null-drop.d.ts new file mode 100644 index 000000000..4c2e344ab --- /dev/null +++ b/dist/src/drop/null-drop.d.ts @@ -0,0 +1,11 @@ +import { Drop } from './drop'; +import { IComparable } from './icomparable'; +import { IDrop } from 'src/drop/idrop'; +export declare class NullDrop extends Drop implements IDrop, IComparable { + equals(value: any): boolean; + gt(): boolean; + geq(): boolean; + lt(): boolean; + leq(): boolean; + value(): null; +} diff --git a/dist/src/render/syntax.d.ts b/dist/src/render/syntax.d.ts index d97cbc4e7..ca4a7acbf 100644 --- a/dist/src/render/syntax.d.ts +++ b/dist/src/render/syntax.d.ts @@ -1,5 +1,6 @@ import Scope from 'src/scope/scope'; -export declare function evalExp(exp: string, scope: Scope): any; +export declare function parseExp(exp: string, scope: Scope): any; +export declare function evalExp(str: string, scope: Scope): any; export declare function evalValue(str: string, scope: Scope): any; export declare function isTruthy(val: any): boolean; export declare function isFalsy(val: any): boolean; diff --git a/dist/src/scope/scope.d.ts b/dist/src/scope/scope.d.ts index fa97bd8fd..af01d1bbf 100644 --- a/dist/src/scope/scope.d.ts +++ b/dist/src/scope/scope.d.ts @@ -1,22 +1,27 @@ import { NormalizedFullOptions } from '../liquid-options'; import BlockMode from './block-mode'; -import IContext from './icontext'; +export declare type Context = { + [key: string]: any; + liquid_method_missing?: (key: string) => any; + to_liquid?: () => any; + toLiquid?: () => any; +}; export default class Scope { opts: NormalizedFullOptions; - contexts: Array; + contexts: Array; blocks: object; groups: { [key: string]: number; }; blockMode: BlockMode; constructor(ctx?: object, opts?: NormalizedFullOptions); - getAll(): IContext; + getAll(): Context; get(path: string): any; set(path: string, v: any): void; unshift(ctx: object): number; push(ctx: object): number; pop(ctx?: object): object | undefined; - findContextFor(key: string, filter?: ((conttext: object) => boolean)): IContext | null; + findContextFor(key: string, filter?: ((conttext: object) => boolean)): Context | null; private readProperty; propertyAccessSeq(str: string): string[]; } diff --git a/dist/src/util/underscore.d.ts b/dist/src/util/underscore.d.ts index a5df471c3..afb06d546 100644 --- a/dist/src/util/underscore.d.ts +++ b/dist/src/util/underscore.d.ts @@ -1,12 +1,12 @@ -export declare function isString(value: any): boolean; -export declare function isFunction(value: any): boolean; +export declare function isString(value: any): value is string; +export declare function isFunction(value: any): value is Function; export declare function promisify(fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise; export declare function promisify(fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void): (arg1: T1, arg2: T2) => Promise; export declare function stringify(value: any): string; export declare function create(proto: T1): T2; export declare function isNil(value: any): boolean; -export declare function isArray(value: any): boolean; -export declare function isError(value: any): boolean; +export declare function isArray(value: any): value is any[]; +export declare function isError(value: any): value is Error; export declare function forOwn(object: { [key: string]: T; } | undefined, iteratee: ((val: T, key: string, obj: { @@ -16,6 +16,6 @@ export declare function forOwn(object: { }; export declare function last(arr: T[]): T; export declare function last(arr: string): string; -export declare function isObject(value: any): boolean; +export declare function isObject(value: any): value is object; export declare function range(start: number, stop?: number, step?: number): number[]; export declare function padStart(str: any, length: number, ch?: string): any; diff --git a/package-lock.json b/package-lock.json index 68e65e7fd..2fb8d0825 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "liquidjs", - "version": "7.2.2", + "version": "7.3.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index f4d5e1496..28a90c8e1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "liquidjs", - "version": "7.2.2", + "version": "7.3.0", "description": "Liquid template engine by pure JavaScript: compatible to shopify, easy to extend.", "main": "dist/liquid.common.js", "types": "dist/liquid.d.ts",