{"version":3,"file":"chunks-b180264cd1f963ce/commons/npm.liquidjs.85534219606aea61.js","mappings":"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","sources":["webpack://assemble/./node_modules/liquidjs/dist/liquid.browser.esm.js"],"sourcesContent":["/*\n * liquidjs@9.16.1, https://github.com/harttle/liquidjs\n * (c) 2016-2020 harttle\n * Released under the MIT License.\n */\nclass Drop {\r\n valueOf() {\r\n return undefined;\r\n }\r\n liquidMethodMissing(key) {\r\n return undefined;\r\n }\r\n}\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\n\nconst toStr = Object.prototype.toString;\r\nconst toLowerCase = String.prototype.toLowerCase;\r\n/*\r\n * Checks if value is classified as a String primitive or object.\r\n * @param {any} value The value to check.\r\n * @return {Boolean} Returns true if value is a string, else false.\r\n */\r\nfunction isString(value) {\r\n return toStr.call(value) === '[object String]';\r\n}\r\nfunction isFunction(value) {\r\n return typeof value === 'function';\r\n}\r\nfunction stringify(value) {\r\n value = toValue(value);\r\n return isNil(value) ? '' : String(value);\r\n}\r\nfunction toValue(value) {\r\n return value instanceof Drop ? value.valueOf() : value;\r\n}\r\nfunction isNumber(value) {\r\n return typeof value === 'number';\r\n}\r\nfunction toLiquid(value) {\r\n if (value && isFunction(value.toLiquid))\r\n return toLiquid(value.toLiquid());\r\n return value;\r\n}\r\nfunction isNil(value) {\r\n return value === null || value === undefined;\r\n}\r\nfunction isArray(value) {\r\n // be compatible with IE 8\r\n return toStr.call(value) === '[object Array]';\r\n}\r\n/*\r\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\r\n * The iteratee is invoked with three arguments: (value, key, object).\r\n * Iteratee functions may exit iteration early by explicitly returning false.\r\n * @param {Object} object The object to iterate over.\r\n * @param {Function} iteratee The function invoked per iteration.\r\n * @return {Object} Returns object.\r\n */\r\nfunction forOwn(object, iteratee) {\r\n object = object || {};\r\n for (const k in object) {\r\n if (object.hasOwnProperty(k)) {\r\n if (iteratee(object[k], k, object) === false)\r\n break;\r\n }\r\n }\r\n return object;\r\n}\r\nfunction last(arr) {\r\n return arr[arr.length - 1];\r\n}\r\n/*\r\n * Checks if value is the language type of Object.\r\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\r\n * @param {any} value The value to check.\r\n * @return {Boolean} Returns true if value is an object, else false.\r\n */\r\nfunction isObject(value) {\r\n const type = typeof value;\r\n return value !== null && (type === 'object' || type === 'function');\r\n}\r\nfunction range(start, stop, step = 1) {\r\n const arr = [];\r\n for (let i = start; i < stop; i += step) {\r\n arr.push(i);\r\n }\r\n return arr;\r\n}\r\nfunction padStart(str, length, ch = ' ') {\r\n return pad(str, length, ch, (str, ch) => ch + str);\r\n}\r\nfunction padEnd(str, length, ch = ' ') {\r\n return pad(str, length, ch, (str, ch) => str + ch);\r\n}\r\nfunction pad(str, length, ch, add) {\r\n str = String(str);\r\n let n = length - str.length;\r\n while (n-- > 0)\r\n str = add(str, ch);\r\n return str;\r\n}\r\nfunction identify(val) {\r\n return val;\r\n}\r\nfunction snakeCase(str) {\r\n return str.replace(/(\\w?)([A-Z])/g, (_, a, b) => (a ? a + '_' : '') + b.toLowerCase());\r\n}\r\nfunction changeCase(str) {\r\n const hasLowerCase = [...str].some(ch => ch >= 'a' && ch <= 'z');\r\n return hasLowerCase ? str.toUpperCase() : str.toLowerCase();\r\n}\r\nfunction ellipsis(str, N) {\r\n return str.length > N ? str.substr(0, N - 3) + '...' : str;\r\n}\r\n// compare string in case-insensitive way, undefined values to the tail\r\nfunction caseInsensitiveCompare(a, b) {\r\n if (a == null && b == null)\r\n return 0;\r\n if (a == null)\r\n return 1;\r\n if (b == null)\r\n return -1;\r\n a = toLowerCase.call(a);\r\n b = toLowerCase.call(b);\r\n if (a < b)\r\n return -1;\r\n if (a > b)\r\n return 1;\r\n return 0;\r\n}\n\nclass Node {\r\n constructor(key, value, next, prev) {\r\n this.key = key;\r\n this.value = value;\r\n this.next = next;\r\n this.prev = prev;\r\n }\r\n}\r\nclass LRU {\r\n constructor(limit, size = 0) {\r\n this.limit = limit;\r\n this.size = size;\r\n this.cache = {};\r\n this.head = new Node('HEAD', null, null, null);\r\n this.tail = new Node('TAIL', null, null, null);\r\n this.head.next = this.tail;\r\n this.tail.prev = this.head;\r\n }\r\n write(key, value) {\r\n if (this.cache[key]) {\r\n this.cache[key].value = value;\r\n }\r\n else {\r\n const node = new Node(key, value, this.head.next, this.head);\r\n this.head.next.prev = node;\r\n this.head.next = node;\r\n this.cache[key] = node;\r\n this.size++;\r\n this.ensureLimit();\r\n }\r\n }\r\n read(key) {\r\n if (!this.cache[key])\r\n return;\r\n const { value } = this.cache[key];\r\n this.remove(key);\r\n this.write(key, value);\r\n return value;\r\n }\r\n remove(key) {\r\n const node = this.cache[key];\r\n node.prev.next = node.next;\r\n node.next.prev = node.prev;\r\n delete this.cache[key];\r\n this.size--;\r\n }\r\n clear() {\r\n this.head.next = this.tail;\r\n this.tail.prev = this.head;\r\n this.size = 0;\r\n this.cache = {};\r\n }\r\n ensureLimit() {\r\n if (this.size > this.limit)\r\n this.remove(this.tail.prev.key);\r\n }\r\n}\n\nconst defaultOptions = {\r\n root: ['.'],\r\n cache: undefined,\r\n extname: '',\r\n dynamicPartials: true,\r\n jsTruthy: false,\r\n trimTagRight: false,\r\n trimTagLeft: false,\r\n trimOutputRight: false,\r\n trimOutputLeft: false,\r\n greedy: true,\r\n tagDelimiterLeft: '{%',\r\n tagDelimiterRight: '%}',\r\n outputDelimiterLeft: '{{',\r\n outputDelimiterRight: '}}',\r\n strictFilters: false,\r\n strictVariables: false,\r\n lenientIf: false,\r\n globals: {}\r\n};\r\nfunction normalize(options) {\r\n options = options || {};\r\n if (options.hasOwnProperty('root')) {\r\n options.root = normalizeStringArray(options.root);\r\n }\r\n if (options.hasOwnProperty('cache')) {\r\n let cache;\r\n if (typeof options.cache === 'number')\r\n cache = options.cache > 0 ? new LRU(options.cache) : undefined;\r\n else if (typeof options.cache === 'object')\r\n cache = options.cache;\r\n else\r\n cache = options.cache ? new LRU(1024) : undefined;\r\n options.cache = cache;\r\n }\r\n return options;\r\n}\r\nfunction applyDefault(options) {\r\n return Object.assign({}, defaultOptions, options);\r\n}\r\nfunction normalizeStringArray(value) {\r\n if (isArray(value))\r\n return value;\r\n if (isString(value))\r\n return [value];\r\n return [];\r\n}\n\nclass LiquidError extends Error {\r\n constructor(err, token) {\r\n super(err.message);\r\n this.originalError = err;\r\n this.token = token;\r\n }\r\n update() {\r\n const err = this.originalError;\r\n const context = mkContext(this.token);\r\n this.message = mkMessage(err.message, this.token);\r\n this.stack = this.message + '\\n' + context +\r\n '\\n' + this.stack + '\\nFrom ' + err.stack;\r\n }\r\n}\r\nclass TokenizationError extends LiquidError {\r\n constructor(message, token) {\r\n super(new Error(message), token);\r\n this.name = 'TokenizationError';\r\n super.update();\r\n }\r\n}\r\nclass ParseError extends LiquidError {\r\n constructor(err, token) {\r\n super(err, token);\r\n this.name = 'ParseError';\r\n this.message = err.message;\r\n super.update();\r\n }\r\n}\r\nclass RenderError extends LiquidError {\r\n constructor(err, tpl) {\r\n super(err, tpl.token);\r\n this.name = 'RenderError';\r\n this.message = err.message;\r\n super.update();\r\n }\r\n static is(obj) {\r\n return obj instanceof RenderError;\r\n }\r\n}\r\nclass UndefinedVariableError extends LiquidError {\r\n constructor(err, token) {\r\n super(err, token);\r\n this.name = 'UndefinedVariableError';\r\n this.message = err.message;\r\n super.update();\r\n }\r\n}\r\n// only used internally; raised where we don't have token information,\r\n// so it can't be an UndefinedVariableError.\r\nclass InternalUndefinedVariableError extends Error {\r\n constructor(variableName) {\r\n super(`undefined variable: ${variableName}`);\r\n this.name = 'InternalUndefinedVariableError';\r\n this.variableName = variableName;\r\n }\r\n}\r\nclass AssertionError extends Error {\r\n constructor(message) {\r\n super(message);\r\n this.name = 'AssertionError';\r\n this.message = message + '';\r\n }\r\n}\r\nfunction mkContext(token) {\r\n const [line] = token.getPosition();\r\n const lines = token.input.split('\\n');\r\n const begin = Math.max(line - 2, 1);\r\n const end = Math.min(line + 3, lines.length);\r\n const context = range(begin, end + 1)\r\n .map(lineNumber => {\r\n const indicator = (lineNumber === line) ? '>> ' : ' ';\r\n const num = padStart(String(lineNumber), String(end).length);\r\n const text = lines[lineNumber - 1];\r\n return `${indicator}${num}| ${text}`;\r\n })\r\n .join('\\n');\r\n return context;\r\n}\r\nfunction mkMessage(msg, token) {\r\n if (token.file)\r\n msg += `, file:${token.file}`;\r\n const [line, col] = token.getPosition();\r\n msg += `, line:${line}, col:${col}`;\r\n return msg;\r\n}\n\nclass Context {\r\n constructor(env = {}, opts = defaultOptions, sync = false) {\r\n this.scopes = [{}];\r\n this.registers = {};\r\n this.sync = sync;\r\n this.opts = opts;\r\n this.globals = opts.globals;\r\n this.environments = env;\r\n }\r\n getRegister(key, defaultValue = {}) {\r\n return (this.registers[key] = this.registers[key] || defaultValue);\r\n }\r\n setRegister(key, value) {\r\n return (this.registers[key] = value);\r\n }\r\n saveRegister(...keys) {\r\n return keys.map(key => [key, this.getRegister(key)]);\r\n }\r\n restoreRegister(keyValues) {\r\n return keyValues.forEach(([key, value]) => this.setRegister(key, value));\r\n }\r\n getAll() {\r\n return [this.globals, this.environments, ...this.scopes]\r\n .reduce((ctx, val) => __assign(ctx, val), {});\r\n }\r\n get(paths) {\r\n const scope = this.findScope(paths[0]);\r\n return this.getFromScope(scope, paths);\r\n }\r\n getFromScope(scope, paths) {\r\n if (typeof paths === 'string')\r\n paths = paths.split('.');\r\n return paths.reduce((scope, path) => {\r\n scope = readProperty(scope, path);\r\n if (isNil(scope) && this.opts.strictVariables) {\r\n throw new InternalUndefinedVariableError(path);\r\n }\r\n return scope;\r\n }, scope);\r\n }\r\n push(ctx) {\r\n return this.scopes.push(ctx);\r\n }\r\n pop() {\r\n return this.scopes.pop();\r\n }\r\n bottom() {\r\n return this.scopes[0];\r\n }\r\n findScope(key) {\r\n for (let i = this.scopes.length - 1; i >= 0; i--) {\r\n const candidate = this.scopes[i];\r\n if (key in candidate)\r\n return candidate;\r\n }\r\n if (key in this.environments)\r\n return this.environments;\r\n return this.globals;\r\n }\r\n}\r\nfunction readProperty(obj, key) {\r\n if (isNil(obj))\r\n return obj;\r\n obj = toLiquid(obj);\r\n if (obj instanceof Drop) {\r\n if (isFunction(obj[key]))\r\n return obj[key]();\r\n if (obj.hasOwnProperty(key))\r\n return obj[key];\r\n return obj.liquidMethodMissing(key);\r\n }\r\n if (key === 'size')\r\n return readSize(obj);\r\n if (key === 'first')\r\n return readFirst(obj);\r\n if (key === 'last')\r\n return readLast(obj);\r\n return obj[key];\r\n}\r\nfunction readFirst(obj) {\r\n if (isArray(obj))\r\n return obj[0];\r\n return obj['first'];\r\n}\r\nfunction readLast(obj) {\r\n if (isArray(obj))\r\n return obj[obj.length - 1];\r\n return obj['last'];\r\n}\r\nfunction readSize(obj) {\r\n if (isArray(obj) || isString(obj))\r\n return obj.length;\r\n return obj['size'];\r\n}\n\nfunction domResolve(root, path) {\r\n const base = document.createElement('base');\r\n base.href = root;\r\n const head = document.getElementsByTagName('head')[0];\r\n head.insertBefore(base, head.firstChild);\r\n const a = document.createElement('a');\r\n a.href = path;\r\n const resolved = a.href;\r\n head.removeChild(base);\r\n return resolved;\r\n}\r\nfunction resolve(root, filepath, ext) {\r\n if (root.length && last(root) !== '/')\r\n root += '/';\r\n const url = domResolve(root, filepath);\r\n return url.replace(/^(\\w+:\\/\\/[^/]+)(\\/[^?]+)/, (str, origin, path) => {\r\n const last = path.split('/').pop();\r\n if (/\\.\\w+$/.test(last))\r\n return str;\r\n return origin + path + ext;\r\n });\r\n}\r\nasync function readFile(url) {\r\n return new Promise((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.onload = () => {\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n resolve(xhr.responseText);\r\n }\r\n else {\r\n reject(new Error(xhr.statusText));\r\n }\r\n };\r\n xhr.onerror = () => {\r\n reject(new Error('An error occurred whilst receiving the response.'));\r\n };\r\n xhr.open('GET', url);\r\n xhr.send();\r\n });\r\n}\r\nfunction readFileSync(url) {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.send();\r\n if (xhr.status < 200 || xhr.status >= 300) {\r\n throw new Error(xhr.statusText);\r\n }\r\n return xhr.responseText;\r\n}\r\nasync function exists(filepath) {\r\n return true;\r\n}\r\nfunction existsSync(filepath) {\r\n return true;\r\n}\n\nvar fs = /*#__PURE__*/Object.freeze({\n resolve: resolve,\n readFile: readFile,\n readFileSync: readFileSync,\n exists: exists,\n existsSync: existsSync\n});\n\nvar TokenKind;\r\n(function (TokenKind) {\r\n TokenKind[TokenKind[\"Number\"] = 1] = \"Number\";\r\n TokenKind[TokenKind[\"Literal\"] = 2] = \"Literal\";\r\n TokenKind[TokenKind[\"Tag\"] = 4] = \"Tag\";\r\n TokenKind[TokenKind[\"Output\"] = 8] = \"Output\";\r\n TokenKind[TokenKind[\"HTML\"] = 16] = \"HTML\";\r\n TokenKind[TokenKind[\"Filter\"] = 32] = \"Filter\";\r\n TokenKind[TokenKind[\"Hash\"] = 64] = \"Hash\";\r\n TokenKind[TokenKind[\"PropertyAccess\"] = 128] = \"PropertyAccess\";\r\n TokenKind[TokenKind[\"Word\"] = 256] = \"Word\";\r\n TokenKind[TokenKind[\"Range\"] = 512] = \"Range\";\r\n TokenKind[TokenKind[\"Quoted\"] = 1024] = \"Quoted\";\r\n TokenKind[TokenKind[\"Operator\"] = 2048] = \"Operator\";\r\n TokenKind[TokenKind[\"Delimited\"] = 12] = \"Delimited\";\r\n})(TokenKind || (TokenKind = {}));\n\nfunction isDelimitedToken(val) {\r\n return !!(getKind(val) & TokenKind.Delimited);\r\n}\r\nfunction isOperatorToken(val) {\r\n return getKind(val) === TokenKind.Operator;\r\n}\r\nfunction isHTMLToken(val) {\r\n return getKind(val) === TokenKind.HTML;\r\n}\r\nfunction isOutputToken(val) {\r\n return getKind(val) === TokenKind.Output;\r\n}\r\nfunction isTagToken(val) {\r\n return getKind(val) === TokenKind.Tag;\r\n}\r\nfunction isQuotedToken(val) {\r\n return getKind(val) === TokenKind.Quoted;\r\n}\r\nfunction isLiteralToken(val) {\r\n return getKind(val) === TokenKind.Literal;\r\n}\r\nfunction isNumberToken(val) {\r\n return getKind(val) === TokenKind.Number;\r\n}\r\nfunction isPropertyAccessToken(val) {\r\n return getKind(val) === TokenKind.PropertyAccess;\r\n}\r\nfunction isWordToken(val) {\r\n return getKind(val) === TokenKind.Word;\r\n}\r\nfunction isRangeToken(val) {\r\n return getKind(val) === TokenKind.Range;\r\n}\r\nfunction getKind(val) {\r\n return val ? val.kind : -1;\r\n}\n\nvar typeGuards = /*#__PURE__*/Object.freeze({\n isDelimitedToken: isDelimitedToken,\n isOperatorToken: isOperatorToken,\n isHTMLToken: isHTMLToken,\n isOutputToken: isOutputToken,\n isTagToken: isTagToken,\n isQuotedToken: isQuotedToken,\n isLiteralToken: isLiteralToken,\n isNumberToken: isNumberToken,\n isPropertyAccessToken: isPropertyAccessToken,\n isWordToken: isWordToken,\n isRangeToken: isRangeToken\n});\n\n// **DO NOT CHANGE THIS FILE**\r\n//\r\n// This file is generated by bin/character-gen.js\r\n// bitmask character types to boost performance\r\nconst TYPES = [0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 4, 4, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 8, 0, 0, 0, 0, 8, 0, 0, 0, 64, 0, 65, 0, 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0, 0, 2, 2, 2, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0];\r\nconst IDENTIFIER = 1;\r\nconst BLANK = 4;\r\nconst QUOTE = 8;\r\nconst INLINE_BLANK = 16;\r\nconst NUMBER = 32;\r\nconst SIGN = 64;\r\nTYPES[160] = TYPES[5760] = TYPES[6158] = TYPES[8192] = TYPES[8193] = TYPES[8194] = TYPES[8195] = TYPES[8196] = TYPES[8197] = TYPES[8198] = TYPES[8199] = TYPES[8200] = TYPES[8201] = TYPES[8202] = TYPES[8232] = TYPES[8233] = TYPES[8239] = TYPES[8287] = TYPES[12288] = BLANK;\n\nfunction whiteSpaceCtrl(tokens, options) {\r\n let inRaw = false;\r\n for (let i = 0; i < tokens.length; i++) {\r\n const token = tokens[i];\r\n if (!isDelimitedToken(token))\r\n continue;\r\n if (!inRaw && token.trimLeft) {\r\n trimLeft(tokens[i - 1], options.greedy);\r\n }\r\n if (isTagToken(token)) {\r\n if (token.name === 'raw')\r\n inRaw = true;\r\n else if (token.name === 'endraw')\r\n inRaw = false;\r\n }\r\n if (!inRaw && token.trimRight) {\r\n trimRight(tokens[i + 1], options.greedy);\r\n }\r\n }\r\n}\r\nfunction trimLeft(token, greedy) {\r\n if (!token || !isHTMLToken(token))\r\n return;\r\n const mask = greedy ? BLANK : INLINE_BLANK;\r\n while (TYPES[token.input.charCodeAt(token.end - 1 - token.trimRight)] & mask)\r\n token.trimRight++;\r\n}\r\nfunction trimRight(token, greedy) {\r\n if (!token || !isHTMLToken(token))\r\n return;\r\n const mask = greedy ? BLANK : INLINE_BLANK;\r\n while (TYPES[token.input.charCodeAt(token.begin + token.trimLeft)] & mask)\r\n token.trimLeft++;\r\n if (token.input.charAt(token.begin + token.trimLeft) === '\\n')\r\n token.trimLeft++;\r\n}\n\nclass Token {\r\n constructor(kind, input, begin, end, file) {\r\n this.kind = kind;\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n }\r\n getText() {\r\n return this.input.slice(this.begin, this.end);\r\n }\r\n getPosition() {\r\n let [row, col] = [1, 1];\r\n for (let i = 0; i < this.begin; i++) {\r\n if (this.input[i] === '\\n') {\r\n row++;\r\n col = 1;\r\n }\r\n else\r\n col++;\r\n }\r\n return [row, col];\r\n }\r\n size() {\r\n return this.end - this.begin;\r\n }\r\n}\n\nclass NumberToken extends Token {\r\n constructor(whole, decimal) {\r\n super(TokenKind.Number, whole.input, whole.begin, decimal ? decimal.end : whole.end, whole.file);\r\n this.whole = whole;\r\n this.decimal = decimal;\r\n }\r\n}\n\nclass IdentifierToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Word, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.content = this.getText();\r\n }\r\n isNumber(allowSign = false) {\r\n const begin = allowSign && TYPES[this.input.charCodeAt(this.begin)] & SIGN\r\n ? this.begin + 1\r\n : this.begin;\r\n for (let i = begin; i < this.end; i++) {\r\n if (!(TYPES[this.input.charCodeAt(i)] & NUMBER))\r\n return false;\r\n }\r\n return true;\r\n }\r\n}\n\nclass EmptyDrop extends Drop {\r\n equals(value) {\r\n if (isString(value) || isArray(value))\r\n return value.length === 0;\r\n if (isObject(value))\r\n return Object.keys(value).length === 0;\r\n return false;\r\n }\r\n gt() {\r\n return false;\r\n }\r\n geq() {\r\n return false;\r\n }\r\n lt() {\r\n return false;\r\n }\r\n leq() {\r\n return false;\r\n }\r\n valueOf() {\r\n return '';\r\n }\r\n}\n\nclass BlankDrop extends EmptyDrop {\r\n equals(value) {\r\n if (value === false)\r\n return true;\r\n if (isNil(toValue(value)))\r\n return true;\r\n if (isString(value))\r\n return /^\\s*$/.test(value);\r\n return super.equals(value);\r\n }\r\n}\n\nclass NullDrop extends Drop {\r\n equals(value) {\r\n return isNil(toValue(value)) || value instanceof BlankDrop;\r\n }\r\n gt() {\r\n return false;\r\n }\r\n geq() {\r\n return false;\r\n }\r\n lt() {\r\n return false;\r\n }\r\n leq() {\r\n return false;\r\n }\r\n valueOf() {\r\n return null;\r\n }\r\n}\n\nconst literalValues = {\r\n 'true': true,\r\n 'false': false,\r\n 'nil': new NullDrop(),\r\n 'null': new NullDrop(),\r\n 'empty': new EmptyDrop(),\r\n 'blank': new BlankDrop()\r\n};\n\nclass LiteralToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Literal, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.literal = this.getText();\r\n }\r\n}\n\nconst precedence = {\r\n '==': 1,\r\n '!=': 1,\r\n '>': 1,\r\n '<': 1,\r\n '>=': 1,\r\n '<=': 1,\r\n 'contains': 1,\r\n 'and': 0,\r\n 'or': 0\r\n};\r\nclass OperatorToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Operator, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.operator = this.getText();\r\n }\r\n getPrecedence() {\r\n return precedence[this.getText()];\r\n }\r\n}\n\nconst rHex = /[\\da-fA-F]/;\r\nconst rOct = /[0-7]/;\r\nconst escapeChar = {\r\n b: '\\b',\r\n f: '\\f',\r\n n: '\\n',\r\n r: '\\r',\r\n t: '\\t',\r\n v: '\\x0B'\r\n};\r\nfunction hexVal(c) {\r\n const code = c.charCodeAt(0);\r\n if (code >= 97)\r\n return code - 87;\r\n if (code >= 65)\r\n return code - 55;\r\n return code - 48;\r\n}\r\nfunction parseStringLiteral(str) {\r\n let ret = '';\r\n for (let i = 1; i < str.length - 1; i++) {\r\n if (str[i] !== '\\\\') {\r\n ret += str[i];\r\n continue;\r\n }\r\n if (escapeChar[str[i + 1]] !== undefined) {\r\n ret += escapeChar[str[++i]];\r\n }\r\n else if (str[i + 1] === 'u') {\r\n let val = 0;\r\n let j = i + 2;\r\n while (j <= i + 5 && rHex.test(str[j])) {\r\n val = val * 16 + hexVal(str[j++]);\r\n }\r\n i = j - 1;\r\n ret += String.fromCharCode(val);\r\n }\r\n else if (!rOct.test(str[i + 1])) {\r\n ret += str[++i];\r\n }\r\n else {\r\n let j = i + 1;\r\n let val = 0;\r\n while (j <= i + 3 && rOct.test(str[j])) {\r\n val = val * 8 + hexVal(str[j++]);\r\n }\r\n i = j - 1;\r\n ret += String.fromCharCode(val);\r\n }\r\n }\r\n return ret;\r\n}\n\nclass PropertyAccessToken extends Token {\r\n constructor(variable, props, end) {\r\n super(TokenKind.PropertyAccess, variable.input, variable.begin, end, variable.file);\r\n this.variable = variable;\r\n this.props = props;\r\n }\r\n getVariableAsText() {\r\n if (this.variable instanceof IdentifierToken) {\r\n return this.variable.getText();\r\n }\r\n else {\r\n return parseStringLiteral(this.variable.getText());\r\n }\r\n }\r\n}\n\nfunction assert(predicate, message) {\r\n if (!predicate) {\r\n const msg = message ? message() : `expect ${predicate} to be true`;\r\n throw new AssertionError(msg);\r\n }\r\n}\n\nclass FilterToken extends Token {\r\n constructor(name, args, input, begin, end, file) {\r\n super(TokenKind.Filter, input, begin, end, file);\r\n this.name = name;\r\n this.args = args;\r\n }\r\n}\n\nclass HashToken extends Token {\r\n constructor(input, begin, end, name, value, file) {\r\n super(TokenKind.Hash, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.name = name;\r\n this.value = value;\r\n this.file = file;\r\n }\r\n}\n\nclass QuotedToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Quoted, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n }\r\n}\n\nclass HTMLToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.HTML, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.trimLeft = 0;\r\n this.trimRight = 0;\r\n }\r\n getContent() {\r\n return this.input.slice(this.begin + this.trimLeft, this.end - this.trimRight);\r\n }\r\n}\n\nclass DelimitedToken extends Token {\r\n constructor(kind, content, input, begin, end, trimLeft, trimRight, file) {\r\n super(kind, input, begin, end, file);\r\n this.trimLeft = false;\r\n this.trimRight = false;\r\n this.content = this.getText();\r\n const tl = content[0] === '-';\r\n const tr = last(content) === '-';\r\n this.content = content\r\n .slice(tl ? 1 : 0, tr ? -1 : content.length)\r\n .trim();\r\n this.trimLeft = tl || trimLeft;\r\n this.trimRight = tr || trimRight;\r\n }\r\n}\n\nclass TagToken extends DelimitedToken {\r\n constructor(input, begin, end, options, file) {\r\n const { trimTagLeft, trimTagRight, tagDelimiterLeft, tagDelimiterRight } = options;\r\n const value = input.slice(begin + tagDelimiterLeft.length, end - tagDelimiterRight.length);\r\n super(TokenKind.Tag, value, input, begin, end, trimTagLeft, trimTagRight, file);\r\n const tokenizer = new Tokenizer(this.content);\r\n this.name = tokenizer.readIdentifier().getText();\r\n if (!this.name)\r\n throw new TokenizationError(`illegal tag syntax`, this);\r\n tokenizer.skipBlank();\r\n this.args = tokenizer.remaining();\r\n }\r\n}\n\nclass RangeToken extends Token {\r\n constructor(input, begin, end, lhs, rhs, file) {\r\n super(TokenKind.Range, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.lhs = lhs;\r\n this.rhs = rhs;\r\n this.file = file;\r\n }\r\n}\n\nclass OutputToken extends DelimitedToken {\r\n constructor(input, begin, end, options, file) {\r\n const { trimOutputLeft, trimOutputRight, outputDelimiterLeft, outputDelimiterRight } = options;\r\n const value = input.slice(begin + outputDelimiterLeft.length, end - outputDelimiterRight.length);\r\n super(TokenKind.Output, value, input, begin, end, trimOutputLeft, trimOutputRight, file);\r\n }\r\n}\n\nconst trie = {\r\n a: { n: { d: { end: true, needBoundary: true } } },\r\n o: { r: { end: true, needBoundary: true } },\r\n c: { o: { n: { t: { a: { i: { n: { s: { end: true, needBoundary: true } } } } } } } },\r\n '=': { '=': { end: true } },\r\n '!': { '=': { end: true } },\r\n '>': { end: true, '=': { end: true } },\r\n '<': { end: true, '=': { end: true } }\r\n};\r\nfunction matchOperator(str, begin, end = str.length) {\r\n let node = trie;\r\n let i = begin;\r\n let info;\r\n while (node[str[i]] && i < end) {\r\n node = node[str[i++]];\r\n if (node['end'])\r\n info = node;\r\n }\r\n if (!info)\r\n return -1;\r\n if (info['needBoundary'] && str.charCodeAt(i) & IDENTIFIER)\r\n return -1;\r\n return i;\r\n}\n\nclass Tokenizer {\r\n constructor(input, file = '') {\r\n this.input = input;\r\n this.file = file;\r\n this.p = 0;\r\n this.rawBeginAt = -1;\r\n this.N = input.length;\r\n }\r\n *readExpression() {\r\n const operand = this.readValue();\r\n if (!operand)\r\n return;\r\n yield operand;\r\n while (this.p < this.N) {\r\n const operator = this.readOperator();\r\n if (!operator)\r\n return;\r\n const operand = this.readValue();\r\n if (!operand)\r\n return;\r\n yield operator;\r\n yield operand;\r\n }\r\n }\r\n readOperator() {\r\n this.skipBlank();\r\n const end = matchOperator(this.input, this.p, this.p + 8);\r\n if (end === -1)\r\n return;\r\n return new OperatorToken(this.input, this.p, (this.p = end), this.file);\r\n }\r\n readFilters() {\r\n const filters = [];\r\n while (true) {\r\n const filter = this.readFilter();\r\n if (!filter)\r\n return filters;\r\n filters.push(filter);\r\n }\r\n }\r\n readFilter() {\r\n this.skipBlank();\r\n if (this.end())\r\n return null;\r\n assert(this.peek() === '|', () => `unexpected token at ${this.snapshot()}`);\r\n this.p++;\r\n const begin = this.p;\r\n const name = this.readIdentifier();\r\n if (!name.size())\r\n return null;\r\n const args = [];\r\n this.skipBlank();\r\n if (this.peek() === ':') {\r\n do {\r\n ++this.p;\r\n const arg = this.readFilterArg();\r\n arg && args.push(arg);\r\n while (this.p < this.N && this.peek() !== ',' && this.peek() !== '|')\r\n ++this.p;\r\n } while (this.peek() === ',');\r\n }\r\n return new FilterToken(name.getText(), args, this.input, begin, this.p, this.file);\r\n }\r\n readFilterArg() {\r\n const key = this.readValue();\r\n if (!key)\r\n return;\r\n this.skipBlank();\r\n if (this.peek() !== ':')\r\n return key;\r\n ++this.p;\r\n const value = this.readValue();\r\n return [key.getText(), value];\r\n }\r\n readTopLevelTokens(options = defaultOptions) {\r\n const tokens = [];\r\n while (this.p < this.N) {\r\n const token = this.readTopLevelToken(options);\r\n tokens.push(token);\r\n }\r\n whiteSpaceCtrl(tokens, options);\r\n return tokens;\r\n }\r\n readTopLevelToken(options) {\r\n const { tagDelimiterLeft, outputDelimiterLeft } = options;\r\n if (this.rawBeginAt > -1)\r\n return this.readEndrawOrRawContent(options);\r\n if (this.match(tagDelimiterLeft))\r\n return this.readTagToken(options);\r\n if (this.match(outputDelimiterLeft))\r\n return this.readOutputToken(options);\r\n return this.readHTMLToken(options);\r\n }\r\n readHTMLToken(options) {\r\n const begin = this.p;\r\n while (this.p < this.N) {\r\n const { tagDelimiterLeft, outputDelimiterLeft } = options;\r\n if (this.match(tagDelimiterLeft))\r\n break;\r\n if (this.match(outputDelimiterLeft))\r\n break;\r\n ++this.p;\r\n }\r\n return new HTMLToken(this.input, begin, this.p, this.file);\r\n }\r\n readTagToken(options) {\r\n const { file, input } = this;\r\n const { tagDelimiterRight } = options;\r\n const begin = this.p;\r\n if (this.readTo(tagDelimiterRight) === -1) {\r\n throw this.mkError(`tag ${this.snapshot(begin)} not closed`, begin);\r\n }\r\n const token = new TagToken(input, begin, this.p, options, file);\r\n if (token.name === 'raw')\r\n this.rawBeginAt = begin;\r\n return token;\r\n }\r\n readOutputToken(options) {\r\n const { file, input } = this;\r\n const { outputDelimiterRight } = options;\r\n const begin = this.p;\r\n if (this.readTo(outputDelimiterRight) === -1) {\r\n throw this.mkError(`output ${this.snapshot(begin)} not closed`, begin);\r\n }\r\n return new OutputToken(input, begin, this.p, options, file);\r\n }\r\n readEndrawOrRawContent(options) {\r\n const { tagDelimiterLeft, tagDelimiterRight } = options;\r\n const begin = this.p;\r\n let leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length;\r\n while (this.p < this.N) {\r\n if (this.readIdentifier().getText() !== 'endraw') {\r\n leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length;\r\n continue;\r\n }\r\n while (this.p <= this.N) {\r\n if (this.rmatch(tagDelimiterRight)) {\r\n const end = this.p;\r\n if (begin === leftPos) {\r\n this.rawBeginAt = -1;\r\n return new TagToken(this.input, begin, end, options, this.file);\r\n }\r\n else {\r\n this.p = leftPos;\r\n return new HTMLToken(this.input, begin, leftPos, this.file);\r\n }\r\n }\r\n if (this.rmatch(tagDelimiterLeft))\r\n break;\r\n this.p++;\r\n }\r\n }\r\n throw this.mkError(`raw ${this.snapshot(this.rawBeginAt)} not closed`, begin);\r\n }\r\n mkError(msg, begin) {\r\n return new TokenizationError(msg, new IdentifierToken(this.input, begin, this.N, this.file));\r\n }\r\n snapshot(begin = this.p) {\r\n return JSON.stringify(ellipsis(this.input.slice(begin), 16));\r\n }\r\n /**\r\n * @deprecated\r\n */\r\n readWord() {\r\n console.warn('Tokenizer#readWord() will be removed, use #readIdentifier instead');\r\n return this.readIdentifier();\r\n }\r\n readIdentifier() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n while (this.peekType() & IDENTIFIER)\r\n ++this.p;\r\n return new IdentifierToken(this.input, begin, this.p, this.file);\r\n }\r\n readHashes() {\r\n const hashes = [];\r\n while (true) {\r\n const hash = this.readHash();\r\n if (!hash)\r\n return hashes;\r\n hashes.push(hash);\r\n }\r\n }\r\n readHash() {\r\n this.skipBlank();\r\n if (this.peek() === ',')\r\n ++this.p;\r\n const begin = this.p;\r\n const name = this.readIdentifier();\r\n if (!name.size())\r\n return;\r\n let value;\r\n this.skipBlank();\r\n if (this.peek() === ':') {\r\n ++this.p;\r\n value = this.readValue();\r\n }\r\n return new HashToken(this.input, begin, this.p, name, value, this.file);\r\n }\r\n remaining() {\r\n return this.input.slice(this.p);\r\n }\r\n advance(i = 1) {\r\n this.p += i;\r\n }\r\n end() {\r\n return this.p >= this.N;\r\n }\r\n readTo(end) {\r\n while (this.p < this.N) {\r\n ++this.p;\r\n if (this.rmatch(end))\r\n return this.p;\r\n }\r\n return -1;\r\n }\r\n readValue() {\r\n const value = this.readQuoted() || this.readRange();\r\n if (value)\r\n return value;\r\n if (this.peek() === '[') {\r\n this.p++;\r\n const prop = this.readQuoted();\r\n if (!prop)\r\n return;\r\n if (this.peek() !== ']')\r\n return;\r\n this.p++;\r\n return new PropertyAccessToken(prop, [], this.p);\r\n }\r\n const variable = this.readIdentifier();\r\n if (!variable.size())\r\n return;\r\n let isNumber = variable.isNumber(true);\r\n const props = [];\r\n while (true) {\r\n if (this.peek() === '[') {\r\n isNumber = false;\r\n this.p++;\r\n const prop = this.readValue() || new IdentifierToken(this.input, this.p, this.p, this.file);\r\n this.readTo(']');\r\n props.push(prop);\r\n }\r\n else if (this.peek() === '.' && this.peek(1) !== '.') { // skip range syntax\r\n this.p++;\r\n const prop = this.readIdentifier();\r\n if (!prop.size())\r\n break;\r\n if (!prop.isNumber())\r\n isNumber = false;\r\n props.push(prop);\r\n }\r\n else\r\n break;\r\n }\r\n if (!props.length && literalValues.hasOwnProperty(variable.content)) {\r\n return new LiteralToken(this.input, variable.begin, variable.end, this.file);\r\n }\r\n if (isNumber)\r\n return new NumberToken(variable, props[0]);\r\n return new PropertyAccessToken(variable, props, this.p);\r\n }\r\n readRange() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n if (this.peek() !== '(')\r\n return;\r\n ++this.p;\r\n const lhs = this.readValueOrThrow();\r\n this.p += 2;\r\n const rhs = this.readValueOrThrow();\r\n ++this.p;\r\n return new RangeToken(this.input, begin, this.p, lhs, rhs, this.file);\r\n }\r\n readValueOrThrow() {\r\n const value = this.readValue();\r\n assert(value, () => `unexpected token ${this.snapshot()}, value expected`);\r\n return value;\r\n }\r\n readQuoted() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n if (!(this.peekType() & QUOTE))\r\n return;\r\n ++this.p;\r\n let escaped = false;\r\n while (this.p < this.N) {\r\n ++this.p;\r\n if (this.input[this.p - 1] === this.input[begin] && !escaped)\r\n break;\r\n if (escaped)\r\n escaped = false;\r\n else if (this.input[this.p - 1] === '\\\\')\r\n escaped = true;\r\n }\r\n return new QuotedToken(this.input, begin, this.p, this.file);\r\n }\r\n readFileName() {\r\n const begin = this.p;\r\n while (!(this.peekType() & BLANK) && this.peek() !== ',' && this.p < this.N)\r\n this.p++;\r\n return new IdentifierToken(this.input, begin, this.p, this.file);\r\n }\r\n match(word) {\r\n for (let i = 0; i < word.length; i++) {\r\n if (word[i] !== this.input[this.p + i])\r\n return false;\r\n }\r\n return true;\r\n }\r\n rmatch(pattern) {\r\n for (let i = 0; i < pattern.length; i++) {\r\n if (pattern[pattern.length - 1 - i] !== this.input[this.p - 1 - i])\r\n return false;\r\n }\r\n return true;\r\n }\r\n peekType(n = 0) {\r\n return TYPES[this.input.charCodeAt(this.p + n)];\r\n }\r\n peek(n = 0) {\r\n return this.input[this.p + n];\r\n }\r\n skipBlank() {\r\n while (this.peekType() & BLANK)\r\n ++this.p;\r\n }\r\n}\n\nclass Emitter {\r\n constructor() {\r\n this.html = '';\r\n this.break = false;\r\n this.continue = false;\r\n }\r\n write(html) {\r\n this.html += html;\r\n }\r\n}\n\nclass Render {\r\n *renderTemplates(templates, ctx, emitter = new Emitter()) {\r\n for (const tpl of templates) {\r\n try {\r\n const html = yield tpl.render(ctx, emitter);\r\n html && emitter.write(html);\r\n if (emitter.break || emitter.continue)\r\n break;\r\n }\r\n catch (e) {\r\n const err = RenderError.is(e) ? e : new RenderError(e, tpl);\r\n throw err;\r\n }\r\n }\r\n return emitter.html;\r\n }\r\n}\n\nclass ParseStream {\r\n constructor(tokens, parseToken) {\r\n this.handlers = {};\r\n this.stopRequested = false;\r\n this.tokens = tokens;\r\n this.parseToken = parseToken;\r\n }\r\n on(name, cb) {\r\n this.handlers[name] = cb;\r\n return this;\r\n }\r\n trigger(event, arg) {\r\n const h = this.handlers[event];\r\n return h ? (h(arg), true) : false;\r\n }\r\n start() {\r\n this.trigger('start');\r\n let token;\r\n while (!this.stopRequested && (token = this.tokens.shift())) {\r\n if (this.trigger('token', token))\r\n continue;\r\n if (isTagToken(token) && this.trigger(`tag:${token.name}`, token)) {\r\n continue;\r\n }\r\n const template = this.parseToken(token, this.tokens);\r\n this.trigger('template', template);\r\n }\r\n if (!this.stopRequested)\r\n this.trigger('end');\r\n return this;\r\n }\r\n stop() {\r\n this.stopRequested = true;\r\n return this;\r\n }\r\n}\n\nclass TemplateImpl {\r\n constructor(token) {\r\n this.token = token;\r\n }\r\n}\n\nfunction isComparable(arg) {\r\n return arg && isFunction(arg.equals);\r\n}\n\nfunction isTruthy(val, ctx) {\r\n return !isFalsy(val, ctx);\r\n}\r\nfunction isFalsy(val, ctx) {\r\n if (ctx.opts.jsTruthy) {\r\n return !val;\r\n }\r\n else {\r\n return val === false || undefined === val || val === null;\r\n }\r\n}\n\nconst operatorImpls = {\r\n '==': (l, r) => {\r\n if (isComparable(l))\r\n return l.equals(r);\r\n if (isComparable(r))\r\n return r.equals(l);\r\n return l === r;\r\n },\r\n '!=': (l, r) => {\r\n if (isComparable(l))\r\n return !l.equals(r);\r\n if (isComparable(r))\r\n return !r.equals(l);\r\n return l !== r;\r\n },\r\n '>': (l, r) => {\r\n if (isComparable(l))\r\n return l.gt(r);\r\n if (isComparable(r))\r\n return r.lt(l);\r\n return l > r;\r\n },\r\n '<': (l, r) => {\r\n if (isComparable(l))\r\n return l.lt(r);\r\n if (isComparable(r))\r\n return r.gt(l);\r\n return l < r;\r\n },\r\n '>=': (l, r) => {\r\n if (isComparable(l))\r\n return l.geq(r);\r\n if (isComparable(r))\r\n return r.leq(l);\r\n return l >= r;\r\n },\r\n '<=': (l, r) => {\r\n if (isComparable(l))\r\n return l.leq(r);\r\n if (isComparable(r))\r\n return r.geq(l);\r\n return l <= r;\r\n },\r\n 'contains': (l, r) => {\r\n return l && isFunction(l.indexOf) ? l.indexOf(r) > -1 : false;\r\n },\r\n 'and': (l, r, ctx) => isTruthy(l, ctx) && isTruthy(r, ctx),\r\n 'or': (l, r, ctx) => isTruthy(l, ctx) || isTruthy(r, ctx)\r\n};\n\nclass Expression {\r\n constructor(str, lenient = false) {\r\n this.operands = [];\r\n const tokenizer = new Tokenizer(str);\r\n this.postfix = [...toPostfix(tokenizer.readExpression())];\r\n this.lenient = lenient;\r\n }\r\n evaluate(ctx) {\r\n for (const token of this.postfix) {\r\n if (isOperatorToken(token)) {\r\n const r = this.operands.pop();\r\n const l = this.operands.pop();\r\n const result = evalOperatorToken(token, l, r, ctx);\r\n this.operands.push(result);\r\n }\r\n else {\r\n this.operands.push(evalToken(token, ctx, this.lenient && this.postfix.length === 1));\r\n }\r\n }\r\n return this.operands[0];\r\n }\r\n *value(ctx) {\r\n return toValue(this.evaluate(ctx));\r\n }\r\n}\r\nfunction evalToken(token, ctx, lenient = false) {\r\n assert(ctx, () => 'unable to evaluate: context not defined');\r\n if (isPropertyAccessToken(token)) {\r\n const variable = token.getVariableAsText();\r\n const props = token.props.map(prop => evalToken(prop, ctx));\r\n try {\r\n return ctx.get([variable, ...props]);\r\n }\r\n catch (e) {\r\n if (lenient && e instanceof InternalUndefinedVariableError) {\r\n return null;\r\n }\r\n else {\r\n throw (new UndefinedVariableError(e, token));\r\n }\r\n }\r\n }\r\n if (isRangeToken(token))\r\n return evalRangeToken(token, ctx);\r\n if (isLiteralToken(token))\r\n return evalLiteralToken(token);\r\n if (isNumberToken(token))\r\n return evalNumberToken(token);\r\n if (isWordToken(token))\r\n return token.getText();\r\n if (isQuotedToken(token))\r\n return evalQuotedToken(token);\r\n}\r\nfunction evalNumberToken(token) {\r\n const str = token.whole.content + '.' + (token.decimal ? token.decimal.content : '');\r\n return Number(str);\r\n}\r\nfunction evalQuotedToken(token) {\r\n return parseStringLiteral(token.getText());\r\n}\r\nfunction evalOperatorToken(token, lhs, rhs, ctx) {\r\n const impl = operatorImpls[token.operator];\r\n return impl(lhs, rhs, ctx);\r\n}\r\nfunction evalLiteralToken(token) {\r\n return literalValues[token.literal];\r\n}\r\nfunction evalRangeToken(token, ctx) {\r\n const low = evalToken(token.lhs, ctx);\r\n const high = evalToken(token.rhs, ctx);\r\n return range(+low, +high + 1);\r\n}\r\nfunction* toPostfix(tokens) {\r\n const ops = [];\r\n for (const token of tokens) {\r\n if (isOperatorToken(token)) {\r\n while (ops.length && ops[ops.length - 1].getPrecedence() > token.getPrecedence()) {\r\n yield ops.pop();\r\n }\r\n ops.push(token);\r\n }\r\n else\r\n yield token;\r\n }\r\n while (ops.length) {\r\n yield ops.pop();\r\n }\r\n}\n\n/**\r\n * Key-Value Pairs Representing Tag Arguments\r\n * Example:\r\n * For the markup `, foo:'bar', coo:2 reversed %}`,\r\n * hash['foo'] === 'bar'\r\n * hash['coo'] === 2\r\n * hash['reversed'] === undefined\r\n */\r\nclass Hash {\r\n constructor(markup) {\r\n this.hash = {};\r\n const tokenizer = new Tokenizer(markup);\r\n for (const hash of tokenizer.readHashes()) {\r\n this.hash[hash.name.content] = hash.value;\r\n }\r\n }\r\n *render(ctx) {\r\n const hash = {};\r\n for (const key of Object.keys(this.hash)) {\r\n hash[key] = yield evalToken(this.hash[key], ctx);\r\n }\r\n return hash;\r\n }\r\n}\n\nfunction createResolvedThenable(value) {\r\n const ret = {\r\n then: (resolve) => resolve(value),\r\n catch: () => ret\r\n };\r\n return ret;\r\n}\r\nfunction createRejectedThenable(err) {\r\n const ret = {\r\n then: (resolve, reject) => {\r\n if (reject)\r\n return reject(err);\r\n return ret;\r\n },\r\n catch: (reject) => reject(err)\r\n };\r\n return ret;\r\n}\r\nfunction isThenable(val) {\r\n return val && isFunction(val.then);\r\n}\r\nfunction isAsyncIterator(val) {\r\n return val && isFunction(val.next) && isFunction(val.throw) && isFunction(val.return);\r\n}\r\n// convert an async iterator to a thenable (Promise compatible)\r\nfunction toThenable(val) {\r\n if (isThenable(val))\r\n return val;\r\n if (isAsyncIterator(val))\r\n return reduce();\r\n return createResolvedThenable(val);\r\n function reduce(prev) {\r\n let state;\r\n try {\r\n state = val.next(prev);\r\n }\r\n catch (err) {\r\n return createRejectedThenable(err);\r\n }\r\n if (state.done)\r\n return createResolvedThenable(state.value);\r\n return toThenable(state.value).then(reduce, err => {\r\n let state;\r\n try {\r\n state = val.throw(err);\r\n }\r\n catch (e) {\r\n return createRejectedThenable(e);\r\n }\r\n if (state.done)\r\n return createResolvedThenable(state.value);\r\n return reduce(state.value);\r\n });\r\n }\r\n}\r\nfunction toPromise(val) {\r\n return Promise.resolve(toThenable(val));\r\n}\r\n// get the value of async iterator in synchronous manner\r\nfunction toValue$1(val) {\r\n let ret;\r\n toThenable(val)\r\n .then((x) => {\r\n ret = x;\r\n return createResolvedThenable(ret);\r\n })\r\n .catch((err) => {\r\n throw err;\r\n });\r\n return ret;\r\n}\n\nclass Tag extends TemplateImpl {\r\n constructor(token, tokens, liquid) {\r\n super(token);\r\n this.name = token.name;\r\n const impl = liquid.tags.get(token.name);\r\n this.impl = Object.create(impl);\r\n this.impl.liquid = liquid;\r\n if (this.impl.parse) {\r\n this.impl.parse(token, tokens);\r\n }\r\n }\r\n *render(ctx, emitter) {\r\n const hash = yield new Hash(this.token.args).render(ctx);\r\n const impl = this.impl;\r\n if (isFunction(impl.render))\r\n return yield impl.render(ctx, emitter, hash);\r\n }\r\n}\n\nfunction isKeyValuePair(arr) {\r\n return isArray(arr);\r\n}\n\nclass Filter {\r\n constructor(name, impl, args, liquid) {\r\n this.name = name;\r\n this.impl = impl || identify;\r\n this.args = args;\r\n this.liquid = liquid;\r\n }\r\n *render(value, context) {\r\n const argv = [];\r\n for (const arg of this.args) {\r\n if (isKeyValuePair(arg))\r\n argv.push([arg[0], yield evalToken(arg[1], context)]);\r\n else\r\n argv.push(yield evalToken(arg, context));\r\n }\r\n return yield this.impl.apply({ context, liquid: this.liquid }, [value, ...argv]);\r\n }\r\n}\n\nclass Value {\r\n /**\r\n * @param str the value to be valuated, eg.: \"foobar\" | truncate: 3\r\n */\r\n constructor(str, filterMap, liquid) {\r\n this.filterMap = filterMap;\r\n this.filters = [];\r\n const tokenizer = new Tokenizer(str);\r\n this.initial = tokenizer.readValue();\r\n this.filters = tokenizer.readFilters().map(({ name, args }) => new Filter(name, this.filterMap.get(name), args, liquid));\r\n }\r\n *value(ctx) {\r\n const lenient = ctx.opts.lenientIf && this.filters.length > 0 && this.filters[0].name === 'default';\r\n let val = yield evalToken(this.initial, ctx, lenient);\r\n for (const filter of this.filters) {\r\n val = yield filter.render(val, ctx);\r\n }\r\n return val;\r\n }\r\n}\n\nclass Output extends TemplateImpl {\r\n constructor(token, filters, liquid) {\r\n super(token);\r\n this.value = new Value(token.content, filters, liquid);\r\n }\r\n *render(ctx, emitter) {\r\n const val = yield this.value.value(ctx);\r\n emitter.write(stringify(toValue(val)));\r\n }\r\n}\n\nclass HTML extends TemplateImpl {\r\n constructor(token) {\r\n super(token);\r\n this.str = token.getContent();\r\n }\r\n *render(ctx, emitter) {\r\n emitter.write(this.str);\r\n }\r\n}\n\nclass Parser {\r\n constructor(liquid) {\r\n this.liquid = liquid;\r\n }\r\n parse(tokens) {\r\n let token;\r\n const templates = [];\r\n while ((token = tokens.shift())) {\r\n templates.push(this.parseToken(token, tokens));\r\n }\r\n return templates;\r\n }\r\n parseToken(token, remainTokens) {\r\n try {\r\n if (isTagToken(token)) {\r\n return new Tag(token, remainTokens, this.liquid);\r\n }\r\n if (isOutputToken(token)) {\r\n return new Output(token, this.liquid.filters, this.liquid);\r\n }\r\n return new HTML(token);\r\n }\r\n catch (e) {\r\n throw new ParseError(e, token);\r\n }\r\n }\r\n parseStream(tokens) {\r\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens));\r\n }\r\n}\n\nvar assign = {\r\n parse: function (token) {\r\n const tokenizer = new Tokenizer(token.args);\r\n this.key = tokenizer.readIdentifier().content;\r\n tokenizer.skipBlank();\r\n assert(tokenizer.peek() === '=', () => `illegal token ${token.getText()}`);\r\n tokenizer.advance();\r\n this.value = tokenizer.remaining();\r\n },\r\n render: function* (ctx) {\r\n ctx.bottom()[this.key] = yield this.liquid._evalValue(this.value, ctx);\r\n }\r\n};\n\nfunction toEnumerable(val) {\r\n if (isArray(val))\r\n return val;\r\n if (isString(val) && val.length > 0)\r\n return [val];\r\n if (isObject(val))\r\n return Object.keys(val).map((key) => [key, val[key]]);\r\n return [];\r\n}\r\nfunction toArray(val) {\r\n if (isArray(val))\r\n return val;\r\n return [val];\r\n}\n\nclass ForloopDrop extends Drop {\r\n constructor(length) {\r\n super();\r\n this.i = 0;\r\n this.length = length;\r\n }\r\n next() {\r\n this.i++;\r\n }\r\n index0() {\r\n return this.i;\r\n }\r\n index() {\r\n return this.i + 1;\r\n }\r\n first() {\r\n return this.i === 0;\r\n }\r\n last() {\r\n return this.i === this.length - 1;\r\n }\r\n rindex() {\r\n return this.length - this.i;\r\n }\r\n rindex0() {\r\n return this.length - this.i - 1;\r\n }\r\n valueOf() {\r\n return JSON.stringify(this);\r\n }\r\n}\n\nvar For = {\r\n type: 'block',\r\n parse: function (token, remainTokens) {\r\n const toknenizer = new Tokenizer(token.args);\r\n const variable = toknenizer.readIdentifier();\r\n const inStr = toknenizer.readIdentifier();\r\n const collection = toknenizer.readValue();\r\n assert(variable.size() && inStr.content === 'in' && collection, () => `illegal tag: ${token.getText()}`);\r\n this.variable = variable.content;\r\n this.collection = collection;\r\n this.hash = new Hash(toknenizer.remaining());\r\n this.templates = [];\r\n this.elseTemplates = [];\r\n let p;\r\n const stream = this.liquid.parser.parseStream(remainTokens)\r\n .on('start', () => (p = this.templates))\r\n .on('tag:else', () => (p = this.elseTemplates))\r\n .on('tag:endfor', () => stream.stop())\r\n .on('template', (tpl) => p.push(tpl))\r\n .on('end', () => {\r\n throw new Error(`tag ${token.getText()} not closed`);\r\n });\r\n stream.start();\r\n },\r\n render: function* (ctx, emitter) {\r\n const r = this.liquid.renderer;\r\n let collection = toEnumerable(yield evalToken(this.collection, ctx));\r\n if (!collection.length) {\r\n yield r.renderTemplates(this.elseTemplates, ctx, emitter);\r\n return;\r\n }\r\n const hash = yield this.hash.render(ctx);\r\n const offset = hash.offset || 0;\r\n const limit = (hash.limit === undefined) ? collection.length : hash.limit;\r\n collection = collection.slice(offset, offset + limit);\r\n if ('reversed' in hash)\r\n collection.reverse();\r\n const scope = { forloop: new ForloopDrop(collection.length) };\r\n ctx.push(scope);\r\n for (const item of collection) {\r\n scope[this.variable] = item;\r\n yield r.renderTemplates(this.templates, ctx, emitter);\r\n if (emitter.break) {\r\n emitter.break = false;\r\n break;\r\n }\r\n emitter.continue = false;\r\n scope.forloop.next();\r\n }\r\n ctx.pop();\r\n }\r\n};\n\nvar capture = {\r\n parse: function (tagToken, remainTokens) {\r\n const tokenizer = new Tokenizer(tagToken.args);\r\n this.variable = readVariableName(tokenizer);\r\n assert(this.variable, () => `${tagToken.args} not valid identifier`);\r\n this.templates = [];\r\n const stream = this.liquid.parser.parseStream(remainTokens);\r\n stream.on('tag:endcapture', () => stream.stop())\r\n .on('template', (tpl) => this.templates.push(tpl))\r\n .on('end', () => {\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n });\r\n stream.start();\r\n },\r\n render: function* (ctx) {\r\n const r = this.liquid.renderer;\r\n const html = yield r.renderTemplates(this.templates, ctx);\r\n ctx.bottom()[this.variable] = html;\r\n }\r\n};\r\nfunction readVariableName(tokenizer) {\r\n const word = tokenizer.readIdentifier().content;\r\n if (word)\r\n return word;\r\n const quoted = tokenizer.readQuoted();\r\n if (quoted)\r\n return evalQuotedToken(quoted);\r\n}\n\nvar Case = {\r\n parse: function (tagToken, remainTokens) {\r\n this.cond = tagToken.args;\r\n this.cases = [];\r\n this.elseTemplates = [];\r\n let p = [];\r\n const stream = this.liquid.parser.parseStream(remainTokens)\r\n .on('tag:when', (token) => {\r\n this.cases.push({\r\n val: token.args,\r\n templates: p = []\r\n });\r\n })\r\n .on('tag:else', () => (p = this.elseTemplates))\r\n .on('tag:endcase', () => stream.stop())\r\n .on('template', (tpl) => p.push(tpl))\r\n .on('end', () => {\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n });\r\n stream.start();\r\n },\r\n render: function* (ctx, emitter) {\r\n const r = this.liquid.renderer;\r\n const cond = yield new Expression(this.cond).value(ctx);\r\n for (let i = 0; i < this.cases.length; i++) {\r\n const branch = this.cases[i];\r\n const val = yield new Expression(branch.val).value(ctx);\r\n if (val === cond) {\r\n yield r.renderTemplates(branch.templates, ctx, emitter);\r\n return;\r\n }\r\n }\r\n yield r.renderTemplates(this.elseTemplates, ctx, emitter);\r\n }\r\n};\n\nvar comment = {\r\n parse: function (tagToken, remainTokens) {\r\n const stream = this.liquid.parser.parseStream(remainTokens);\r\n stream\r\n .on('token', (token) => {\r\n if (token.name === 'endcomment')\r\n stream.stop();\r\n })\r\n .on('end', () => {\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n });\r\n stream.start();\r\n }\r\n};\n\nvar BlockMode;\r\n(function (BlockMode) {\r\n /* store rendered html into blocks */\r\n BlockMode[BlockMode[\"OUTPUT\"] = 0] = \"OUTPUT\";\r\n /* output rendered html directly */\r\n BlockMode[BlockMode[\"STORE\"] = 1] = \"STORE\";\r\n})(BlockMode || (BlockMode = {}));\r\nvar BlockMode$1 = BlockMode;\n\nvar include = {\r\n parse: function (token) {\r\n const args = token.args;\r\n const tokenizer = new Tokenizer(args);\r\n this.file = this.liquid.options.dynamicPartials\r\n ? tokenizer.readValue()\r\n : tokenizer.readFileName();\r\n assert(this.file, () => `illegal argument \"${token.args}\"`);\r\n const begin = tokenizer.p;\r\n const withStr = tokenizer.readIdentifier();\r\n if (withStr.content === 'with') {\r\n tokenizer.skipBlank();\r\n if (tokenizer.peek() !== ':') {\r\n this.withVar = tokenizer.readValue();\r\n }\r\n else\r\n tokenizer.p = begin;\r\n }\r\n else\r\n tokenizer.p = begin;\r\n this.hash = new Hash(tokenizer.remaining());\r\n },\r\n render: function* (ctx, emitter) {\r\n const { liquid, hash, withVar, file } = this;\r\n const { renderer } = liquid;\r\n const filepath = ctx.opts.dynamicPartials\r\n ? (isQuotedToken(file)\r\n ? yield renderer.renderTemplates(liquid.parse(evalQuotedToken(file)), ctx)\r\n : yield evalToken(file, ctx))\r\n : file.getText();\r\n assert(filepath, () => `illegal filename \"${file.getText()}\":\"${filepath}\"`);\r\n const saved = ctx.saveRegister('blocks', 'blockMode');\r\n ctx.setRegister('blocks', {});\r\n ctx.setRegister('blockMode', BlockMode$1.OUTPUT);\r\n const scope = yield hash.render(ctx);\r\n if (withVar)\r\n scope[filepath] = evalToken(withVar, ctx);\r\n const templates = yield liquid._parseFile(filepath, ctx.opts, ctx.sync);\r\n ctx.push(scope);\r\n yield renderer.renderTemplates(templates, ctx, emitter);\r\n ctx.pop();\r\n ctx.restoreRegister(saved);\r\n }\r\n};\n\nvar render = {\r\n parse: function (token) {\r\n const args = token.args;\r\n const tokenizer = new Tokenizer(args);\r\n this.file = this.liquid.options.dynamicPartials\r\n ? tokenizer.readValue()\r\n : tokenizer.readFileName();\r\n assert(this.file, () => `illegal argument \"${token.args}\"`);\r\n while (!tokenizer.end()) {\r\n tokenizer.skipBlank();\r\n const begin = tokenizer.p;\r\n const keyword = tokenizer.readIdentifier();\r\n if (keyword.content === 'with' || keyword.content === 'for') {\r\n tokenizer.skipBlank();\r\n if (tokenizer.peek() !== ':') {\r\n const value = tokenizer.readValue();\r\n if (value) {\r\n const beforeAs = tokenizer.p;\r\n const asStr = tokenizer.readIdentifier();\r\n let alias;\r\n if (asStr.content === 'as')\r\n alias = tokenizer.readIdentifier();\r\n else\r\n tokenizer.p = beforeAs;\r\n this[keyword.content] = { value, alias: alias && alias.content };\r\n tokenizer.skipBlank();\r\n if (tokenizer.peek() === ',')\r\n tokenizer.advance();\r\n continue;\r\n }\r\n }\r\n }\r\n tokenizer.p = begin;\r\n break;\r\n }\r\n this.hash = new Hash(tokenizer.remaining());\r\n },\r\n render: function* (ctx, emitter) {\r\n const { liquid, file, hash } = this;\r\n const { renderer } = liquid;\r\n const filepath = ctx.opts.dynamicPartials\r\n ? (isQuotedToken(file)\r\n ? yield renderer.renderTemplates(liquid.parse(evalQuotedToken(file)), ctx)\r\n : evalToken(file, ctx))\r\n : file.getText();\r\n assert(filepath, () => `illegal filename \"${file.getText()}\":\"${filepath}\"`);\r\n const childCtx = new Context({}, ctx.opts, ctx.sync);\r\n const scope = yield hash.render(ctx);\r\n if (this['with']) {\r\n const { value, alias } = this['with'];\r\n scope[alias || filepath] = evalToken(value, ctx);\r\n }\r\n childCtx.push(scope);\r\n if (this['for']) {\r\n const { value, alias } = this['for'];\r\n let collection = evalToken(value, ctx);\r\n collection = toEnumerable(collection);\r\n scope['forloop'] = new ForloopDrop(collection.length);\r\n for (const item of collection) {\r\n scope[alias] = item;\r\n const templates = yield liquid._parseFile(filepath, childCtx.opts, childCtx.sync);\r\n yield renderer.renderTemplates(templates, childCtx, emitter);\r\n scope.forloop.next();\r\n }\r\n }\r\n else {\r\n const templates = yield liquid._parseFile(filepath, childCtx.opts, childCtx.sync);\r\n yield renderer.renderTemplates(templates, childCtx, emitter);\r\n }\r\n }\r\n};\n\nvar decrement = {\r\n parse: function (token) {\r\n const tokenizer = new Tokenizer(token.args);\r\n this.variable = tokenizer.readIdentifier().content;\r\n },\r\n render: function (context, emitter) {\r\n const scope = context.environments;\r\n if (!isNumber(scope[this.variable])) {\r\n scope[this.variable] = 0;\r\n }\r\n emitter.write(stringify(--scope[this.variable]));\r\n }\r\n};\n\nvar cycle = {\r\n parse: function (tagToken) {\r\n const tokenizer = new Tokenizer(tagToken.args);\r\n const group = tokenizer.readValue();\r\n tokenizer.skipBlank();\r\n this.candidates = [];\r\n if (group) {\r\n if (tokenizer.peek() === ':') {\r\n this.group = group;\r\n tokenizer.advance();\r\n }\r\n else\r\n this.candidates.push(group);\r\n }\r\n while (!tokenizer.end()) {\r\n const value = tokenizer.readValue();\r\n if (value)\r\n this.candidates.push(value);\r\n tokenizer.readTo(',');\r\n }\r\n assert(this.candidates.length, () => `empty candidates: ${tagToken.getText()}`);\r\n },\r\n render: function (ctx, emitter) {\r\n const group = evalToken(this.group, ctx);\r\n const fingerprint = `cycle:${group}:` + this.candidates.join(',');\r\n const groups = ctx.getRegister('cycle');\r\n let idx = groups[fingerprint];\r\n if (idx === undefined) {\r\n idx = groups[fingerprint] = 0;\r\n }\r\n const candidate = this.candidates[idx];\r\n idx = (idx + 1) % this.candidates.length;\r\n groups[fingerprint] = idx;\r\n const html = evalToken(candidate, ctx);\r\n emitter.write(html);\r\n }\r\n};\n\nvar If = {\r\n parse: function (tagToken, remainTokens) {\r\n this.branches = [];\r\n this.elseTemplates = [];\r\n let p;\r\n const stream = this.liquid.parser.parseStream(remainTokens)\r\n .on('start', () => this.branches.push({\r\n cond: tagToken.args,\r\n templates: (p = [])\r\n }))\r\n .on('tag:elsif', (token) => {\r\n this.branches.push({\r\n cond: token.args,\r\n templates: p = []\r\n });\r\n })\r\n .on('tag:else', () => (p = this.elseTemplates))\r\n .on('tag:endif', () => stream.stop())\r\n .on('template', (tpl) => p.push(tpl))\r\n .on('end', () => {\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n });\r\n stream.start();\r\n },\r\n render: function* (ctx, emitter) {\r\n const r = this.liquid.renderer;\r\n for (const branch of this.branches) {\r\n const cond = yield new Expression(branch.cond, ctx.opts.lenientIf).value(ctx);\r\n if (isTruthy(cond, ctx)) {\r\n yield r.renderTemplates(branch.templates, ctx, emitter);\r\n return;\r\n }\r\n }\r\n yield r.renderTemplates(this.elseTemplates, ctx, emitter);\r\n }\r\n};\n\nvar increment = {\r\n parse: function (token) {\r\n const tokenizer = new Tokenizer(token.args);\r\n this.variable = tokenizer.readIdentifier().content;\r\n },\r\n render: function (context, emitter) {\r\n const scope = context.environments;\r\n if (!isNumber(scope[this.variable])) {\r\n scope[this.variable] = 0;\r\n }\r\n const val = scope[this.variable];\r\n scope[this.variable]++;\r\n emitter.write(stringify(val));\r\n }\r\n};\n\nvar layout = {\r\n parse: function (token, remainTokens) {\r\n const tokenizer = new Tokenizer(token.args);\r\n const file = this.liquid.options.dynamicPartials ? tokenizer.readValue() : tokenizer.readFileName();\r\n assert(file, () => `illegal argument \"${token.args}\"`);\r\n this.file = file;\r\n this.hash = new Hash(tokenizer.remaining());\r\n this.tpls = this.liquid.parser.parse(remainTokens);\r\n },\r\n render: function* (ctx, emitter) {\r\n const { liquid, hash, file } = this;\r\n const { renderer } = liquid;\r\n const filepath = ctx.opts.dynamicPartials\r\n ? (isQuotedToken(file)\r\n ? yield renderer.renderTemplates(liquid.parse(evalQuotedToken(file)), ctx)\r\n : evalToken(this.file, ctx))\r\n : file.getText();\r\n assert(filepath, () => `illegal filename \"${file.getText()}\":\"${filepath}\"`);\r\n // render the remaining tokens immediately\r\n ctx.setRegister('blockMode', BlockMode$1.STORE);\r\n const blocks = ctx.getRegister('blocks');\r\n const html = yield renderer.renderTemplates(this.tpls, ctx);\r\n if (blocks[''] === undefined)\r\n blocks[''] = html;\r\n const templates = yield liquid._parseFile(filepath, ctx.opts, ctx.sync);\r\n ctx.push(yield hash.render(ctx));\r\n ctx.setRegister('blockMode', BlockMode$1.OUTPUT);\r\n const partial = yield renderer.renderTemplates(templates, ctx);\r\n ctx.pop();\r\n emitter.write(partial);\r\n }\r\n};\n\nvar block = {\r\n parse: function (token, remainTokens) {\r\n const match = /\\w+/.exec(token.args);\r\n this.block = match ? match[0] : '';\r\n this.tpls = [];\r\n const stream = this.liquid.parser.parseStream(remainTokens)\r\n .on('tag:endblock', () => stream.stop())\r\n .on('template', (tpl) => this.tpls.push(tpl))\r\n .on('end', () => {\r\n throw new Error(`tag ${token.getText()} not closed`);\r\n });\r\n stream.start();\r\n },\r\n render: function* (ctx, emitter) {\r\n const blocks = ctx.getRegister('blocks');\r\n const childDefined = blocks[this.block];\r\n const r = this.liquid.renderer;\r\n const html = childDefined !== undefined\r\n ? childDefined\r\n : yield r.renderTemplates(this.tpls, ctx);\r\n if (ctx.getRegister('blockMode', BlockMode$1.OUTPUT) === BlockMode$1.STORE) {\r\n blocks[this.block] = html;\r\n return;\r\n }\r\n emitter.write(html);\r\n }\r\n};\n\nvar raw = {\r\n parse: function (tagToken, remainTokens) {\r\n this.tokens = [];\r\n const stream = this.liquid.parser.parseStream(remainTokens);\r\n stream\r\n .on('token', (token) => {\r\n if (token.name === 'endraw')\r\n stream.stop();\r\n else\r\n this.tokens.push(token);\r\n })\r\n .on('end', () => {\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n });\r\n stream.start();\r\n },\r\n render: function () {\r\n return this.tokens.map((token) => token.getText()).join('');\r\n }\r\n};\n\nclass TablerowloopDrop extends ForloopDrop {\r\n constructor(length, cols) {\r\n super(length);\r\n this.length = length;\r\n this.cols = cols;\r\n }\r\n row() {\r\n return Math.floor(this.i / this.cols) + 1;\r\n }\r\n col0() {\r\n return (this.i % this.cols);\r\n }\r\n col() {\r\n return this.col0() + 1;\r\n }\r\n col_first() {\r\n return this.col0() === 0;\r\n }\r\n col_last() {\r\n return this.col() === this.cols;\r\n }\r\n}\n\nvar tablerow = {\r\n parse: function (tagToken, remainTokens) {\r\n const tokenizer = new Tokenizer(tagToken.args);\r\n this.variable = tokenizer.readIdentifier();\r\n tokenizer.skipBlank();\r\n const tmp = tokenizer.readIdentifier();\r\n assert(tmp && tmp.content === 'in', () => `illegal tag: ${tagToken.getText()}`);\r\n this.collection = tokenizer.readValue();\r\n this.hash = new Hash(tokenizer.remaining());\r\n this.templates = [];\r\n let p;\r\n const stream = this.liquid.parser.parseStream(remainTokens)\r\n .on('start', () => (p = this.templates))\r\n .on('tag:endtablerow', () => stream.stop())\r\n .on('template', (tpl) => p.push(tpl))\r\n .on('end', () => {\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n });\r\n stream.start();\r\n },\r\n render: function* (ctx, emitter) {\r\n let collection = toEnumerable(yield evalToken(this.collection, ctx));\r\n const hash = yield this.hash.render(ctx);\r\n const offset = hash.offset || 0;\r\n const limit = (hash.limit === undefined) ? collection.length : hash.limit;\r\n collection = collection.slice(offset, offset + limit);\r\n const cols = hash.cols || collection.length;\r\n const r = this.liquid.renderer;\r\n const tablerowloop = new TablerowloopDrop(collection.length, cols);\r\n const scope = { tablerowloop };\r\n ctx.push(scope);\r\n for (let idx = 0; idx < collection.length; idx++, tablerowloop.next()) {\r\n scope[this.variable.content] = collection[idx];\r\n if (tablerowloop.col0() === 0) {\r\n if (tablerowloop.row() !== 1)\r\n emitter.write('');\r\n emitter.write(``);\r\n }\r\n emitter.write(``);\r\n yield r.renderTemplates(this.templates, ctx, emitter);\r\n emitter.write('');\r\n }\r\n if (collection.length)\r\n emitter.write('');\r\n ctx.pop();\r\n }\r\n};\n\nvar unless = {\r\n parse: function (tagToken, remainTokens) {\r\n this.templates = [];\r\n this.branches = [];\r\n this.elseTemplates = [];\r\n let p;\r\n const stream = this.liquid.parser.parseStream(remainTokens)\r\n .on('start', () => {\r\n p = this.templates;\r\n this.cond = tagToken.args;\r\n })\r\n .on('tag:elsif', (token) => {\r\n this.branches.push({\r\n cond: token.args,\r\n templates: p = []\r\n });\r\n })\r\n .on('tag:else', () => (p = this.elseTemplates))\r\n .on('tag:endunless', () => stream.stop())\r\n .on('template', (tpl) => p.push(tpl))\r\n .on('end', () => {\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n });\r\n stream.start();\r\n },\r\n render: function* (ctx, emitter) {\r\n const r = this.liquid.renderer;\r\n const cond = yield new Expression(this.cond, ctx.opts.lenientIf).value(ctx);\r\n if (isFalsy(cond, ctx)) {\r\n yield r.renderTemplates(this.templates, ctx, emitter);\r\n return;\r\n }\r\n for (const branch of this.branches) {\r\n const cond = yield new Expression(branch.cond, ctx.opts.lenientIf).value(ctx);\r\n if (isTruthy(cond, ctx)) {\r\n yield r.renderTemplates(branch.templates, ctx, emitter);\r\n return;\r\n }\r\n }\r\n yield r.renderTemplates(this.elseTemplates, ctx, emitter);\r\n }\r\n};\n\nvar Break = {\r\n render: function (ctx, emitter) {\r\n emitter.break = true;\r\n }\r\n};\n\nvar Continue = {\r\n render: function (ctx, emitter) {\r\n emitter.continue = true;\r\n }\r\n};\n\nconst tags = {\r\n assign, 'for': For, capture, 'case': Case, comment, include, render, decrement, increment, cycle, 'if': If, layout, block, raw, tablerow, unless, 'break': Break, 'continue': Continue\r\n};\n\nconst escapeMap = {\r\n '&': '&',\r\n '<': '<',\r\n '>': '>',\r\n '\"': '"',\r\n \"'\": '''\r\n};\r\nconst unescapeMap = {\r\n '&': '&',\r\n '<': '<',\r\n '>': '>',\r\n '"': '\"',\r\n ''': \"'\"\r\n};\r\nfunction escape(str) {\r\n return stringify(str).replace(/&|<|>|\"|'/g, m => escapeMap[m]);\r\n}\r\nfunction unescape(str) {\r\n return String(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m]);\r\n}\r\nfunction escapeOnce(str) {\r\n return escape(unescape(str));\r\n}\r\nfunction newlineToBr(v) {\r\n return v.replace(/\\n/g, '
');\r\n}\r\nfunction stripHtml(v) {\r\n return v.replace(/|||<.*?>/g, '');\r\n}\n\nconst abs = Math.abs;\r\nconst atLeast = Math.max;\r\nconst atMost = Math.min;\r\nconst ceil = Math.ceil;\r\nconst dividedBy = (v, arg) => v / arg;\r\nconst floor = Math.floor;\r\nconst minus = (v, arg) => v - arg;\r\nconst modulo = (v, arg) => v % arg;\r\nconst times = (v, arg) => v * arg;\r\nfunction round(v, arg = 0) {\r\n const amp = Math.pow(10, arg);\r\n return Math.round(v * amp) / amp;\r\n}\r\nfunction plus(v, arg) {\r\n return Number(v) + Number(arg);\r\n}\r\nfunction sortNatural(input, property) {\r\n if (!input || !input.sort)\r\n return [];\r\n if (property !== undefined) {\r\n return [...input].sort((lhs, rhs) => caseInsensitiveCompare(lhs[property], rhs[property]));\r\n }\r\n return [...input].sort(caseInsensitiveCompare);\r\n}\n\nconst urlDecode = (x) => x.split('+').map(decodeURIComponent).join(' ');\r\nconst urlEncode = (x) => x.split(' ').map(encodeURIComponent).join('+');\n\nconst join = (v, arg) => v.join(arg === undefined ? ' ' : arg);\r\nconst last$1 = (v) => isArray(v) ? last(v) : '';\r\nconst first = (v) => isArray(v) ? v[0] : '';\r\nconst reverse = (v) => [...v].reverse();\r\nfunction sort(arr, property) {\r\n const getValue = (obj) => property ? this.context.getFromScope(obj, property.split('.')) : obj;\r\n return toArray(arr).sort((lhs, rhs) => {\r\n lhs = getValue(lhs);\r\n rhs = getValue(rhs);\r\n return lhs < rhs ? -1 : (lhs > rhs ? 1 : 0);\r\n });\r\n}\r\nconst size = (v) => (v && v.length) || 0;\r\nfunction map(arr, property) {\r\n return toArray(arr).map(obj => this.context.getFromScope(obj, property.split('.')));\r\n}\r\nfunction concat(v, arg) {\r\n return toArray(v).concat(arg);\r\n}\r\nfunction slice(v, begin, length = 1) {\r\n begin = begin < 0 ? v.length + begin : begin;\r\n return v.slice(begin, begin + length);\r\n}\r\nfunction where(arr, property, expected) {\r\n return toArray(arr).filter(obj => {\r\n const value = this.context.getFromScope(obj, String(property).split('.'));\r\n return expected === undefined ? isTruthy(value, this.context) : value === expected;\r\n });\r\n}\r\nfunction uniq(arr) {\r\n const u = {};\r\n return (arr || []).filter(val => {\r\n if (u.hasOwnProperty(String(val)))\r\n return false;\r\n u[String(val)] = true;\r\n return true;\r\n });\r\n}\n\nconst rFormat = /%([-_0^#:]+)?(\\d+)?([EO])?(.)/;\r\nconst monthNames = [\r\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\r\n 'September', 'October', 'November', 'December'\r\n];\r\nconst dayNames = [\r\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\r\n];\r\nconst monthNamesShort = monthNames.map(abbr);\r\nconst dayNamesShort = dayNames.map(abbr);\r\nconst suffixes = {\r\n 1: 'st',\r\n 2: 'nd',\r\n 3: 'rd',\r\n 'default': 'th'\r\n};\r\nfunction abbr(str) {\r\n return str.slice(0, 3);\r\n}\r\n// prototype extensions\r\nfunction daysInMonth(d) {\r\n const feb = isLeapYear(d) ? 29 : 28;\r\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\r\n}\r\nfunction getDayOfYear(d) {\r\n let num = 0;\r\n for (let i = 0; i < d.getMonth(); ++i) {\r\n num += daysInMonth(d)[i];\r\n }\r\n return num + d.getDate();\r\n}\r\nfunction getWeekOfYear(d, startDay) {\r\n // Skip to startDay of this week\r\n const now = getDayOfYear(d) + (startDay - d.getDay());\r\n // Find the first startDay of the year\r\n const jan1 = new Date(d.getFullYear(), 0, 1);\r\n const then = (7 - jan1.getDay() + startDay);\r\n return String(Math.floor((now - then) / 7) + 1);\r\n}\r\nfunction isLeapYear(d) {\r\n const year = d.getFullYear();\r\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)));\r\n}\r\nfunction getSuffix(d) {\r\n const str = d.getDate().toString();\r\n const index = parseInt(str.slice(-1));\r\n return suffixes[index] || suffixes['default'];\r\n}\r\nfunction century(d) {\r\n return parseInt(d.getFullYear().toString().substring(0, 2), 10);\r\n}\r\n// default to 0\r\nconst padWidths = {\r\n d: 2,\r\n e: 2,\r\n H: 2,\r\n I: 2,\r\n j: 3,\r\n k: 2,\r\n l: 2,\r\n L: 3,\r\n m: 2,\r\n M: 2,\r\n S: 2,\r\n U: 2,\r\n W: 2\r\n};\r\n// default to '0'\r\nconst padChars = {\r\n a: ' ',\r\n A: ' ',\r\n b: ' ',\r\n B: ' ',\r\n c: ' ',\r\n e: ' ',\r\n k: ' ',\r\n l: ' ',\r\n p: ' ',\r\n P: ' '\r\n};\r\nconst formatCodes = {\r\n a: (d) => dayNamesShort[d.getDay()],\r\n A: (d) => dayNames[d.getDay()],\r\n b: (d) => monthNamesShort[d.getMonth()],\r\n B: (d) => monthNames[d.getMonth()],\r\n c: (d) => d.toLocaleString(),\r\n C: (d) => century(d),\r\n d: (d) => d.getDate(),\r\n e: (d) => d.getDate(),\r\n H: (d) => d.getHours(),\r\n I: (d) => String(d.getHours() % 12 || 12),\r\n j: (d) => getDayOfYear(d),\r\n k: (d) => d.getHours(),\r\n l: (d) => String(d.getHours() % 12 || 12),\r\n L: (d) => d.getMilliseconds(),\r\n m: (d) => d.getMonth() + 1,\r\n M: (d) => d.getMinutes(),\r\n N: (d, opts) => {\r\n const width = Number(opts.width) || 9;\r\n const str = String(d.getMilliseconds()).substr(0, width);\r\n return padEnd(str, width, '0');\r\n },\r\n p: (d) => (d.getHours() < 12 ? 'AM' : 'PM'),\r\n P: (d) => (d.getHours() < 12 ? 'am' : 'pm'),\r\n q: (d) => getSuffix(d),\r\n s: (d) => Math.round(d.valueOf() / 1000),\r\n S: (d) => d.getSeconds(),\r\n u: (d) => d.getDay() || 7,\r\n U: (d) => getWeekOfYear(d, 0),\r\n w: (d) => d.getDay(),\r\n W: (d) => getWeekOfYear(d, 1),\r\n x: (d) => d.toLocaleDateString(),\r\n X: (d) => d.toLocaleTimeString(),\r\n y: (d) => d.getFullYear().toString().substring(2, 4),\r\n Y: (d) => d.getFullYear(),\r\n z: (d, opts) => {\r\n const offset = d.getTimezoneOffset();\r\n const nOffset = Math.abs(offset);\r\n const h = Math.floor(nOffset / 60);\r\n const m = nOffset % 60;\r\n return (offset > 0 ? '-' : '+') +\r\n padStart(h, 2, '0') +\r\n (opts.flags[':'] ? ':' : '') +\r\n padStart(m, 2, '0');\r\n },\r\n 't': () => '\\t',\r\n 'n': () => '\\n',\r\n '%': () => '%'\r\n};\r\nformatCodes.h = formatCodes.b;\r\nfunction strftime (d, formatStr) {\r\n let output = '';\r\n let remaining = formatStr;\r\n let match;\r\n while ((match = rFormat.exec(remaining))) {\r\n output += remaining.slice(0, match.index);\r\n remaining = remaining.slice(match.index + match[0].length);\r\n output += format(d, match);\r\n }\r\n return output + remaining;\r\n}\r\nfunction format(d, match) {\r\n const [input, flagStr = '', width, modifier, conversion] = match;\r\n const convert = formatCodes[conversion];\r\n if (!convert)\r\n return input;\r\n const flags = {};\r\n for (const flag of flagStr)\r\n flags[flag] = true;\r\n let ret = String(convert(d, { flags, width, modifier }));\r\n let padChar = padChars[conversion] || '0';\r\n let padWidth = width || padWidths[conversion] || 0;\r\n if (flags['^'])\r\n ret = ret.toUpperCase();\r\n else if (flags['#'])\r\n ret = changeCase(ret);\r\n if (flags['_'])\r\n padChar = ' ';\r\n else if (flags['0'])\r\n padChar = '0';\r\n if (flags['-'])\r\n padWidth = 0;\r\n return padStart(ret, padWidth, padChar);\r\n}\n\nfunction date(v, arg) {\r\n let date = v;\r\n if (v === 'now' || v === 'today') {\r\n date = new Date();\r\n }\r\n else if (isNumber(v)) {\r\n date = new Date(v * 1000);\r\n }\r\n else if (isString(v)) {\r\n date = /^\\d+$/.test(v) ? new Date(+v * 1000) : new Date(v);\r\n }\r\n return isValidDate(date) ? strftime(date, arg) : v;\r\n}\r\nfunction isValidDate(date) {\r\n return date instanceof Date && !isNaN(date.getTime());\r\n}\n\nfunction Default(v, arg) {\r\n if (isArray(v) || isString(v))\r\n return v.length ? v : arg;\r\n return isFalsy(toValue(v), this.context) ? arg : v;\r\n}\r\nfunction json(v) {\r\n return JSON.stringify(v);\r\n}\n\n/**\r\n * String related filters\r\n *\r\n * * prefer stringify() to String() since `undefined`, `null` should eval ''\r\n */\r\nfunction append(v, arg) {\r\n assert(arg !== undefined, () => 'append expect 2 arguments');\r\n return stringify(v) + stringify(arg);\r\n}\r\nfunction prepend(v, arg) {\r\n assert(arg !== undefined, () => 'prepend expect 2 arguments');\r\n return stringify(arg) + stringify(v);\r\n}\r\nfunction lstrip(v) {\r\n return stringify(v).replace(/^\\s+/, '');\r\n}\r\nfunction downcase(v) {\r\n return stringify(v).toLowerCase();\r\n}\r\nfunction upcase(str) {\r\n return stringify(str).toUpperCase();\r\n}\r\nfunction remove(v, arg) {\r\n return stringify(v).split(String(arg)).join('');\r\n}\r\nfunction removeFirst(v, l) {\r\n return stringify(v).replace(String(l), '');\r\n}\r\nfunction rstrip(str) {\r\n return stringify(str).replace(/\\s+$/, '');\r\n}\r\nfunction split(v, arg) {\r\n return stringify(v).split(String(arg));\r\n}\r\nfunction strip(v) {\r\n return stringify(v).trim();\r\n}\r\nfunction stripNewlines(v) {\r\n return stringify(v).replace(/\\n/g, '');\r\n}\r\nfunction capitalize(str) {\r\n str = stringify(str);\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n}\r\nfunction replace(v, pattern, replacement) {\r\n return stringify(v).split(String(pattern)).join(replacement);\r\n}\r\nfunction replaceFirst(v, arg1, arg2) {\r\n return stringify(v).replace(String(arg1), arg2);\r\n}\r\nfunction truncate(v, l = 50, o = '...') {\r\n v = stringify(v);\r\n if (v.length <= l)\r\n return v;\r\n return v.substr(0, l - o.length) + o;\r\n}\r\nfunction truncatewords(v, l = 15, o = '...') {\r\n const arr = v.split(/\\s+/);\r\n let ret = arr.slice(0, l).join(' ');\r\n if (arr.length >= l)\r\n ret += o;\r\n return ret;\r\n}\n\n\n\nvar builtinFilters = /*#__PURE__*/Object.freeze({\n escape: escape,\n escapeOnce: escapeOnce,\n newlineToBr: newlineToBr,\n stripHtml: stripHtml,\n abs: abs,\n atLeast: atLeast,\n atMost: atMost,\n ceil: ceil,\n dividedBy: dividedBy,\n floor: floor,\n minus: minus,\n modulo: modulo,\n times: times,\n round: round,\n plus: plus,\n sortNatural: sortNatural,\n urlDecode: urlDecode,\n urlEncode: urlEncode,\n join: join,\n last: last$1,\n first: first,\n reverse: reverse,\n sort: sort,\n size: size,\n map: map,\n concat: concat,\n slice: slice,\n where: where,\n uniq: uniq,\n date: date,\n Default: Default,\n json: json,\n append: append,\n prepend: prepend,\n lstrip: lstrip,\n downcase: downcase,\n upcase: upcase,\n remove: remove,\n removeFirst: removeFirst,\n rstrip: rstrip,\n split: split,\n strip: strip,\n stripNewlines: stripNewlines,\n capitalize: capitalize,\n replace: replace,\n replaceFirst: replaceFirst,\n truncate: truncate,\n truncatewords: truncatewords\n});\n\nclass TagMap {\r\n constructor() {\r\n this.impls = {};\r\n }\r\n get(name) {\r\n const impl = this.impls[name];\r\n assert(impl, () => `tag \"${name}\" not found`);\r\n return impl;\r\n }\r\n set(name, impl) {\r\n this.impls[name] = impl;\r\n }\r\n}\n\nclass FilterMap {\r\n constructor(strictFilters, liquid) {\r\n this.strictFilters = strictFilters;\r\n this.liquid = liquid;\r\n this.impls = {};\r\n }\r\n get(name) {\r\n const impl = this.impls[name];\r\n assert(impl || !this.strictFilters, () => `undefined filter: ${name}`);\r\n return impl;\r\n }\r\n set(name, impl) {\r\n this.impls[name] = impl;\r\n }\r\n create(name, args) {\r\n return new Filter(name, this.get(name), args, this.liquid);\r\n }\r\n}\n\nclass Liquid {\r\n constructor(opts = {}) {\r\n this.options = applyDefault(normalize(opts));\r\n this.parser = new Parser(this);\r\n this.renderer = new Render();\r\n this.fs = opts.fs || fs;\r\n this.filters = new FilterMap(this.options.strictFilters, this);\r\n this.tags = new TagMap();\r\n forOwn(tags, (conf, name) => this.registerTag(snakeCase(name), conf));\r\n forOwn(builtinFilters, (handler, name) => this.registerFilter(snakeCase(name), handler));\r\n }\r\n parse(html, filepath) {\r\n const tokenizer = new Tokenizer(html, filepath);\r\n const tokens = tokenizer.readTopLevelTokens(this.options);\r\n return this.parser.parse(tokens);\r\n }\r\n _render(tpl, scope, opts, sync) {\r\n const options = Object.assign({}, this.options, normalize(opts));\r\n const ctx = new Context(scope, options, sync);\r\n return this.renderer.renderTemplates(tpl, ctx);\r\n }\r\n async render(tpl, scope, opts) {\r\n return toPromise(this._render(tpl, scope, opts, false));\r\n }\r\n renderSync(tpl, scope, opts) {\r\n return toValue$1(this._render(tpl, scope, opts, true));\r\n }\r\n _parseAndRender(html, scope, opts, sync) {\r\n const tpl = this.parse(html);\r\n return this._render(tpl, scope, opts, sync);\r\n }\r\n async parseAndRender(html, scope, opts) {\r\n return toPromise(this._parseAndRender(html, scope, opts, false));\r\n }\r\n parseAndRenderSync(html, scope, opts) {\r\n return toValue$1(this._parseAndRender(html, scope, opts, true));\r\n }\r\n *_parseFile(file, opts, sync) {\r\n const options = Object.assign({}, this.options, normalize(opts));\r\n const paths = options.root.map(root => this.fs.resolve(root, file, options.extname));\r\n if (this.fs.fallback !== undefined) {\r\n const filepath = this.fs.fallback(file);\r\n if (filepath !== undefined)\r\n paths.push(filepath);\r\n }\r\n for (const filepath of paths) {\r\n const { cache } = options;\r\n if (cache) {\r\n const tpls = yield cache.read(filepath);\r\n if (tpls)\r\n return tpls;\r\n }\r\n if (!(sync ? this.fs.existsSync(filepath) : yield this.fs.exists(filepath)))\r\n continue;\r\n const tpl = this.parse(sync ? this.fs.readFileSync(filepath) : yield this.fs.readFile(filepath), filepath);\r\n if (cache)\r\n cache.write(filepath, tpl);\r\n return tpl;\r\n }\r\n throw this.lookupError(file, options.root);\r\n }\r\n async parseFile(file, opts) {\r\n return toPromise(this._parseFile(file, opts, false));\r\n }\r\n parseFileSync(file, opts) {\r\n return toValue$1(this._parseFile(file, opts, true));\r\n }\r\n async renderFile(file, ctx, opts) {\r\n const templates = await this.parseFile(file, opts);\r\n return this.render(templates, ctx, opts);\r\n }\r\n renderFileSync(file, ctx, opts) {\r\n const options = normalize(opts);\r\n const templates = this.parseFileSync(file, options);\r\n return this.renderSync(templates, ctx, opts);\r\n }\r\n _evalValue(str, ctx) {\r\n const value = new Value(str, this.filters, this);\r\n return value.value(ctx);\r\n }\r\n async evalValue(str, ctx) {\r\n return toPromise(this._evalValue(str, ctx));\r\n }\r\n evalValueSync(str, ctx) {\r\n return toValue$1(this._evalValue(str, ctx));\r\n }\r\n registerFilter(name, filter) {\r\n this.filters.set(name, filter);\r\n }\r\n registerTag(name, tag) {\r\n this.tags.set(name, tag);\r\n }\r\n plugin(plugin) {\r\n return plugin.call(this, Liquid);\r\n }\r\n express() {\r\n const self = this; // eslint-disable-line\r\n return function (filePath, ctx, callback) {\r\n const opts = { root: [...normalizeStringArray(this.root), ...self.options.root] };\r\n self.renderFile(filePath, ctx, opts).then(html => callback(null, html), callback);\r\n };\r\n }\r\n lookupError(file, roots) {\r\n const err = new Error('ENOENT');\r\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`;\r\n err.code = 'ENOENT';\r\n return err;\r\n }\r\n /**\r\n * @deprecated use parseFile instead\r\n */\r\n async getTemplate(file, opts) {\r\n return this.parseFile(file, opts);\r\n }\r\n /**\r\n * @deprecated use parseFileSync instead\r\n */\r\n getTemplateSync(file, opts) {\r\n return this.parseFileSync(file, opts);\r\n }\r\n}\n\nexport { AssertionError, Context, Drop, Emitter, Expression, Hash, Liquid, ParseError, ParseStream, TagToken, Token, TokenizationError, Tokenizer, typeGuards as TypeGuards, assert, evalQuotedToken, evalToken, isFalsy, isTruthy, toPromise, toThenable, toValue$1 as toValue };\n"],"names":["Drop","valueOf","liquidMethodMissing","key","__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","toStr","toString","toLowerCase","String","isString","value","isFunction","stringify","isNil","toValue","isNumber","toLiquid","isArray","forOwn","object","iteratee","k","last","arr","isObject","type","range","start","stop","step","push","padStart","str","ch","pad","add","identify","val","snakeCase","replace","_","a","b","caseInsensitiveCompare","Node","constructor","next","prev","LRU","limit","size","cache","head","tail","write","node","ensureLimit","read","remove","clear","defaultOptions","root","undefined","extname","dynamicPartials","jsTruthy","trimTagRight","trimTagLeft","trimOutputRight","trimOutputLeft","greedy","tagDelimiterLeft","tagDelimiterRight","outputDelimiterLeft","outputDelimiterRight","strictFilters","strictVariables","lenientIf","globals","normalize","options","normalizeStringArray","LiquidError","Error","err","token","super","message","originalError","update","context","line","getPosition","lines","input","split","begin","Math","max","end","min","map","lineNumber","join","mkContext","msg","file","col","mkMessage","stack","TokenizationError","name","ParseError","RenderError","tpl","static","obj","UndefinedVariableError","InternalUndefinedVariableError","variableName","AssertionError","Context","env","opts","sync","scopes","registers","environments","getRegister","defaultValue","setRegister","saveRegister","keys","restoreRegister","keyValues","forEach","getAll","reduce","ctx","get","paths","scope","findScope","getFromScope","path","readSize","readFirst","readLast","readProperty","pop","bottom","candidate","TokenKind","fs","freeze","resolve","filepath","ext","url","base","document","createElement","href","getElementsByTagName","insertBefore","firstChild","resolved","removeChild","domResolve","origin","test","readFile","async","Promise","reject","xhr","XMLHttpRequest","onload","status","responseText","statusText","onerror","open","send","readFileSync","exists","existsSync","isDelimitedToken","getKind","Delimited","isOperatorToken","Operator","isHTMLToken","HTML","isOutputToken","Output","isTagToken","Tag","isQuotedToken","Quoted","isLiteralToken","Literal","isNumberToken","Number","isPropertyAccessToken","PropertyAccess","isWordToken","Word","isRangeToken","Range","kind","typeGuards","TYPES","trimLeft","mask","charCodeAt","trimRight","charAt","Token","getText","slice","row","NumberToken","whole","decimal","IdentifierToken","content","allowSign","EmptyDrop","equals","gt","geq","lt","leq","BlankDrop","NullDrop","literalValues","LiteralToken","literal","precedence","OperatorToken","operator","getPrecedence","rHex","rOct","escapeChar","f","r","v","hexVal","c","code","parseStringLiteral","ret","j","fromCharCode","PropertyAccessToken","variable","props","getVariableAsText","assert","predicate","FilterToken","args","Filter","HashToken","Hash","QuotedToken","HTMLToken","getContent","DelimitedToken","tl","tr","trim","TagToken","tokenizer","Tokenizer","readIdentifier","skipBlank","remaining","RangeToken","lhs","rhs","OutputToken","trie","d","needBoundary","o","rawBeginAt","N","operand","readValue","readOperator","info","matchOperator","readFilters","filters","filter","readFilter","peek","snapshot","arg","readFilterArg","readTopLevelTokens","tokens","readTopLevelToken","inRaw","whiteSpaceCtrl","readEndrawOrRawContent","match","readTagToken","readOutputToken","readHTMLToken","readTo","mkError","leftPos","rmatch","JSON","substr","readWord","console","warn","peekType","readHashes","hashes","hash","readHash","advance","readQuoted","readRange","prop","readValueOrThrow","escaped","readFileName","word","pattern","Emitter","html","break","continue","Render","templates","emitter","render","e","is","ParseStream","parseToken","handlers","stopRequested","on","cb","trigger","event","h","shift","template","TemplateImpl","isComparable","isTruthy","isFalsy","operatorImpls","l","indexOf","Expression","lenient","operands","postfix","toPostfix","readExpression","evaluate","result","evalOperatorToken","evalToken","low","high","evalRangeToken","evalLiteralToken","evalNumberToken","evalQuotedToken","impl","ops","markup","createResolvedThenable","then","catch","createRejectedThenable","toThenable","isThenable","throw","return","isAsyncIterator","state","done","toPromise","toValue$1","x","liquid","tags","create","parse","argv","Value","filterMap","initial","Parser","remainTokens","parseStream","_evalValue","toEnumerable","toArray","ForloopDrop","index0","index","first","rindex","rindex0","For","toknenizer","inStr","collection","elseTemplates","stream","parser","renderer","renderTemplates","offset","reverse","forloop","item","capture","tagToken","quoted","readVariableName","BlockMode","Case","cond","cases","branch","comment","BlockMode$1","include","withVar","saved","OUTPUT","_parseFile","keyword","beforeAs","alias","childCtx","decrement","cycle","group","candidates","fingerprint","groups","idx","If","branches","increment","layout","tpls","STORE","blocks","partial","block","exec","childDefined","raw","TablerowloopDrop","cols","floor","col0","col_first","col_last","tablerow","tmp","tablerowloop","unless","escapeMap","unescapeMap","escape","m","abs","atLeast","atMost","ceil","rFormat","monthNames","dayNames","monthNamesShort","abbr","dayNamesShort","suffixes","daysInMonth","feb","year","getFullYear","isLeapYear","getDayOfYear","num","getMonth","getDate","getWeekOfYear","startDay","now","getDay","Date","padWidths","H","I","L","M","S","U","W","padChars","A","B","P","formatCodes","toLocaleString","C","parseInt","substring","century","getHours","getMilliseconds","getMinutes","width","padEnd","q","getSuffix","round","getSeconds","u","w","toLocaleDateString","X","toLocaleTimeString","y","Y","z","getTimezoneOffset","nOffset","flags","format","flagStr","modifier","conversion","convert","flag","padChar","padWidth","toUpperCase","some","builtinFilters","escapeOnce","unescape","newlineToBr","stripHtml","dividedBy","minus","modulo","times","amp","pow","plus","sortNatural","property","sort","urlDecode","decodeURIComponent","urlEncode","encodeURIComponent","getValue","concat","where","expected","uniq","date","isNaN","getTime","isValidDate","formatStr","output","strftime","Default","json","append","prepend","lstrip","downcase","upcase","removeFirst","rstrip","strip","stripNewlines","capitalize","replacement","replaceFirst","arg1","arg2","truncate","truncatewords","TagMap","impls","set","FilterMap","Liquid","conf","registerTag","handler","registerFilter","_render","renderSync","_parseAndRender","parseAndRenderSync","fallback","lookupError","parseFileSync","parseFile","renderFileSync","evalValueSync","tag","plugin","express","self","filePath","callback","renderFile","roots","getTemplateSync"],"sourceRoot":""}