diff --git a/CHANGELOG.md b/CHANGELOG.md index dce7aaf39..48f54bcb3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [7.1.0](https://github.com/harttle/liquidjs/compare/v7.0.2...v7.1.0) (2019-02-20) + + +### Features + +* throw an Error if delimiter not matched ([c33d8f6](https://github.com/harttle/liquidjs/commit/c33d8f6)) + # [7.0.0](https://github.com/harttle/liquidjs/compare/v6.4.3...v7.0.0) (2019-02-14) diff --git a/dist/liquid.common.js b/dist/liquid.common.js index 1774fe40d..8fb31fdcc 100644 --- a/dist/liquid.common.js +++ b/dist/liquid.common.js @@ -1,5 +1,5 @@ /* - * liquidjs@7.0.2, https://github.com/harttle/liquidjs + * liquidjs@7.1.0, https://github.com/harttle/liquidjs * (c) 2016-2019 harttle * Released under the MIT License. */ @@ -312,7 +312,6 @@ function captureStack() { var LiquidError = /** @class */ (function () { function LiquidError(err, token) { this.input = token.input; - this.line = token.line; this.file = token.file; this.originalError = err; this.token = token; @@ -321,7 +320,7 @@ var LiquidError = /** @class */ (function () { this.name = obj.constructor.name; captureStack.call(obj); var err = this.originalError; - var context = mkContext(this.input, this.line); + var context = mkContext(this.input, this.token.line); this.message = mkMessage(err.message, this.token); this.stack = this.message + '\n' + context + '\n' + (this.stack || this.message) + @@ -402,7 +401,7 @@ function mkMessage(msg, token) { msg += ', file:' + token.file; } if (token.line) { - msg += ', line:' + token.line; + msg += ", line:" + token.line + ", col:" + token.col; } return msg; } @@ -718,7 +717,8 @@ function trimRight(token, greedy) { } var Token = /** @class */ (function () { - function Token(raw, pos, input, file, line) { + function Token(raw, col, input, file, line) { + this.col = col; this.line = line; this.raw = raw; this.input = input; @@ -790,20 +790,25 @@ var Tokenizer = /** @class */ (function () { Tokenizer.prototype.tokenize = function (input, file) { var tokens = []; var p = 0; - var line = 1; + var curLine = 1; var state = ParseState.HTML; var buffer = ''; - var bufferBegin = 0; + var lineBegin = 0; + var line = 1; + var col = 1; while (p < input.length) { - if (input[p] === '\n') - line++; + if (input[p] === '\n') { + curLine++; + lineBegin = p + 1; + } var bin = input.substr(p, 2); if (state === ParseState.HTML) { if (bin === '{{' || bin === '{%') { if (buffer) - tokens.push(new HTMLToken(buffer, bufferBegin, input, file, line)); + tokens.push(new HTMLToken(buffer, col, input, file, line)); buffer = bin; - bufferBegin = p; + line = curLine; + col = p - lineBegin + 1; p += 2; state = bin === '{{' ? ParseState.OUTPUT : ParseState.TAG; continue; @@ -811,26 +816,33 @@ var Tokenizer = /** @class */ (function () { } else if (state === ParseState.OUTPUT && bin === '}}') { buffer += '}}'; - tokens.push(new OutputToken(buffer, bufferBegin, input, file, line)); + tokens.push(new OutputToken(buffer, col, input, file, line)); p += 2; buffer = ''; - bufferBegin = p; + line = curLine; + col = p - lineBegin + 1; state = ParseState.HTML; continue; } else if (bin === '%}') { buffer += '%}'; - tokens.push(new TagToken(buffer, bufferBegin, input, file, line)); + tokens.push(new TagToken(buffer, col, input, file, line)); p += 2; buffer = ''; - bufferBegin = p; + line = curLine; + col = p - lineBegin + 1; state = ParseState.HTML; continue; } buffer += input[p++]; } + if (state !== ParseState.HTML) { + var t = state === ParseState.OUTPUT ? 'output' : 'tag'; + var str = buffer.length > 16 ? buffer.slice(0, 13) + '...' : buffer; + throw new TokenizationError(new Error(t + " \"" + str + "\" not closed"), new Token(buffer, col, input, file, line)); + } if (buffer) - tokens.push(new HTMLToken(buffer, bufferBegin, input, file, line)); + tokens.push(new HTMLToken(buffer, col, input, file, line)); whiteSpaceCtrl(tokens, this.options); return tokens; }; diff --git a/dist/liquid.common.js.map b/dist/liquid.common.js.map index eeda79e37..18820d117 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/parser/lexical.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/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.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) {\n return function (...args) {\n return new Promise((resolve, reject) => {\n fn(...args, (err, result) => {\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 = []\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 (object, iteratee: ((val: any, key: string, obj: object) => boolean | void)) {\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\n/*\n * Assigns own enumerable string keyed properties of source objects to the destination object.\n * Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * Note: This method mutates object and is loosely based on Object.assign.\n *\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @return {Object} Returns object.\n */\nexport function assign (obj: object, ...srcs: object[]): object {\n obj = isObject(obj) ? obj : {}\n srcs.forEach(src => binaryAssign(obj, src))\n return obj\n}\n\nfunction binaryAssign (target: object, src: object): object {\n for (const key in src) if (src.hasOwnProperty(key)) target[key] = src[key]\n return target\n}\n\nexport function last (arr: any[]): any {\n return arr[arr.length - 1]\n}\n\nexport function uniq (arr: any[]): any[] {\n const u = {}\n const a = []\n for (let i = 0, l = arr.length; i < l; ++i) {\n if (u.hasOwnProperty(arr[i])) {\n continue\n }\n a.push(arr[i])\n u[arr[i]] = 1\n }\n return a\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 (arguments.length === 1) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr = []\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","// 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 integer = /-?\\d+/\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 literalLine = new RegExp(`^${literal.source}$`, 'i')\nexport const variableLine = new RegExp(`^${variable.source}$`)\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}$`)\nexport const integerLine = new RegExp(`^${integer.source}$`)\n\n// filter related\nexport const valueDeclaration = new RegExp(`(?:${identifier.source}\\\\s*:\\\\s*)?${value.source}`)\nexport const valueList = new RegExp(`${valueDeclaration.source}(\\\\s*,\\\\s*${valueDeclaration.source})*`)\nexport const filter = new RegExp(`${identifier.source}(?:\\\\s*:\\\\s*${valueList.source})?`, 'g')\nexport const filterCapture = new RegExp(`(${identifier.source})(?:\\\\s*:\\\\s*(${valueList.source}))?`)\nexport const filterLine = new RegExp(`^${filterCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isInteger (str) {\n return integerLine.test(str)\n}\n\nexport function isLiteral (str) {\n return literalLine.test(str)\n}\n\nexport function isRange (str) {\n return rangeLine.test(str)\n}\n\nexport function isVariable (str) {\n return variableLine.test(str)\n}\n\nexport function matchValue (str) {\n return value.exec(str)\n}\n\nexport function parseLiteral (str) {\n let res = str.match(numberLine)\n if (res) {\n return Number(str)\n }\n res = str.match(boolLine)\n if (res) {\n return str.toLowerCase() === 'true'\n }\n res = str.match(quotedLine)\n if (res) {\n return str.slice(1, -1)\n }\n throw new TypeError(`cannot parse '${str}' as literal`)\n}\n","import * as _ from './underscore'\nimport Token from 'src/parser/token'\n\nfunction captureStack () {\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n}\n\nabstract class LiquidError {\n name: string\n message: string\n stack: string\n private line: string\n private file: string\n private input: string\n private token: Token\n private originalError: Error\n constructor (err, token) {\n this.input = token.input\n this.line = token.line\n this.file = token.file\n this.originalError = err\n this.token = token\n }\n captureStackTrace (obj) {\n this.name = obj.constructor.name\n\n captureStack.call(obj)\n const err = this.originalError\n const context = mkContext(this.input, this.line)\n this.message = mkMessage(err.message, this.token)\n this.stack = this.message + '\\n' + context +\n '\\n' + (this.stack || this.message) +\n (err.stack ? '\\nFrom ' + err.stack : '')\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor (message, token) {\n super({ message }, token)\n super.captureStackTrace(this)\n }\n}\nTokenizationError.prototype = _.create(Error.prototype) as any\nTokenizationError.prototype.constructor = TokenizationError\n\nexport class ParseError extends LiquidError {\n constructor (err, token) {\n super(err, token)\n this.message = err.message\n super.captureStackTrace(this)\n }\n}\nParseError.prototype = _.create(Error.prototype) as any\nParseError.prototype.constructor = ParseError\n\nexport class RenderError extends LiquidError {\n constructor (err, tpl) {\n super(err, tpl.token)\n this.message = err.message\n super.captureStackTrace(this)\n }\n}\nRenderError.prototype = _.create(Error.prototype) as any\nRenderError.prototype.constructor = RenderError\n\nexport class RenderBreakError {\n message: string\n resolvedHTML: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nRenderBreakError.prototype = _.create(Error.prototype) as any\nRenderBreakError.prototype.constructor = RenderBreakError\n\nexport class AssertionError {\n message: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nAssertionError.prototype = _.create(Error.prototype) as any\nAssertionError.prototype.constructor = AssertionError\n\nfunction mkContext (input, targetLine) {\n const lines = input.split('\\n')\n const begin = Math.max(targetLine - 2, 1)\n const end = Math.min(targetLine + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === targetLine) ? '>> ' : ' '\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, token) {\n msg = msg || ''\n if (token.file) {\n msg += ', file:' + token.file\n }\n if (token.line) {\n msg += ', line:' + token.line\n }\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","import * 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 // eslint-disable-line\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 // eslint-disable-line\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 // eslint-disable-line\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 // eslint-disable-line\n /** ``trim_value_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_value_right?: boolean // eslint-disable-line\n /** `trim_value_left` is similar to `trim_value_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_value_left?: boolean // eslint-disable-line\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\nexport interface NormalizedOptions extends LiquidOptions {\n root?: string[]\n}\n\nexport const defaultOptions: NormalizedOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_value_right: false,\n trim_value_left: false,\n greedy: true,\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\nfunction normalizeStringArray (value: string | string[]): 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 * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport { NormalizedOptions, defaultOptions } from '../liquid-options'\nimport BlockMode from './block-mode'\n\nexport default class Scope {\n opts: NormalizedOptions\n contexts: Array\n blocks: object = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts: NormalizedOptions = defaultOptions) {\n this.opts = { ...defaultOptions, ...opts }\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => _.assign(ctx, val), _.create(null))\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 })\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 {\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 readProperty (obj, key) {\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) {\n str = String(str)\n const seq = []\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 (!lexical.isInteger(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) {\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) {\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, begin) {\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) as (filepath: string) => Promise\nconst readFileAsync = _.promisify(readFile) as (filepath: string, encoding: string) => Promise\n\nconst fs: IFS = {\n exists: filepath => {\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 { LiquidOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: LiquidOptions) {\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) {\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_value_left\n}\n\nfunction shouldTrimRight (token: DelimitedToken, inRaw: boolean, options) {\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_value_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\n line: number\n raw: string\n input: string\n file: string\n value: string\n constructor (raw, pos, input, file, line) {\n this.line = line\n this.raw = 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, begin, input, file, line) {\n super(str, begin, input, file, line)\n this.type = 'html'\n this.value = str\n }\n}\n","import Token from './token'\n\nexport default class DelimitedToken extends Token {\n trimLeft: boolean\n trimRight: boolean\n constructor (raw, pos, input, file, line) {\n super(raw, pos, input, file, line)\n this.trimLeft = raw[2] === '-'\n this.trimRight = raw[raw.length - 3] === '-'\n this.value = raw.slice(this.trimLeft ? 3 : 2, this.trimRight ? -3 : -2).trim()\n }\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, pos, input, file, line) {\n super(raw, pos, input, file, line)\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, pos, input, file, line) {\n super(raw, pos, input, file, line)\n this.type = 'output'\n }\n}\n","import whiteSpaceCtrl from './whitespace-ctrl'\nimport HTMLToken from './html-token'\nimport TagToken from './tag-token'\nimport OutputToken from './output-token'\nimport { LiquidOptions, defaultOptions } from 'src/liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: LiquidOptions\n constructor (options: LiquidOptions = defaultOptions) {\n this.options = options\n }\n tokenize (input: string, file?: string) {\n const tokens = []\n let p = 0\n let line = 1\n let state = ParseState.HTML\n let buffer = ''\n let bufferBegin = 0\n\n while (p < input.length) {\n if (input[p] === '\\n') line++\n const bin = input.substr(p, 2)\n if (state === ParseState.HTML) {\n if (bin === '{{' || bin === '{%') {\n if (buffer) tokens.push(new HTMLToken(buffer, bufferBegin, input, file, line))\n buffer = bin\n bufferBegin = p\n p += 2\n state = bin === '{{' ? ParseState.OUTPUT : ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && bin === '}}') {\n buffer += '}}'\n tokens.push(new OutputToken(buffer, bufferBegin, input, file, line))\n p += 2\n buffer = ''\n bufferBegin = p\n state = ParseState.HTML\n continue\n } else if (bin === '%}') {\n buffer += '%}'\n tokens.push(new TagToken(buffer, bufferBegin, input, file, line))\n p += 2\n buffer = ''\n bufferBegin = p\n state = ParseState.HTML\n continue\n }\n buffer += input[p++]\n }\n if (buffer) tokens.push(new HTMLToken(buffer, bufferBegin, input, file, line))\n\n whiteSpaceCtrl(tokens, this.options)\n return tokens\n }\n}\n","import { RenderBreakError, RenderError } from 'src/util/error'\nimport assert from 'src/util/assert'\n\nexport default class Render {\n async renderTemplates (templates, 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 instanceof RenderBreakError) {\n e.resolvedHTML = html\n throw e\n }\n throw e instanceof 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'\n\nconst operators = {\n '==': (l, r) => l === r,\n '!=': (l, r) => l !== r,\n '>': (l, r) => l !== null && r !== null && l > r,\n '<': (l, r) => l !== null && r !== null && l < r,\n '>=': (l, r) => l !== null && r !== null && l >= r,\n '<=': (l, r) => l !== null && r !== null && l <= r,\n 'contains': (l, r) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l, r) => isTruthy(l) && isTruthy(r),\n 'or': (l, r) => isTruthy(l) || isTruthy(r)\n}\n\nexport function evalExp (exp, scope) {\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 const range = []\n for (let j = low; j <= high; j++) {\n range.push(j)\n }\n return range\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str, scope) {\n str = str && str.trim()\n if (!str) return undefined\n\n if (lexical.isLiteral(str)) {\n return lexical.parseLiteral(str)\n }\n if (lexical.isVariable(str)) {\n return scope.get(str)\n }\n throw new TypeError(`cannot eval '${str}' as value`)\n}\n\nexport function isTruthy (val) {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val) {\n return val === false || undefined === val || val === null\n}\n","import { hashCapture } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\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, 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 Token from 'src/parser/token'\n\nexport default class Template {\n token: Token;\n constructor (token) {\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 token: TagToken\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 assert from 'src/util/assert'\nimport * as lexical from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\n\ntype impl = (value: any, ...args: any[]) => any\n\nconst valueRE = new RegExp(`${lexical.value.source}`, 'g')\n\nexport default class Filter {\n name: string\n impl: impl\n args: string[]\n private static impls: {[key: string]: impl} = {}\n\n constructor (str: string, strictFilters: boolean = false) {\n const match = lexical.filterLine.exec(str)\n assert(match, 'illegal filter: ' + str)\n\n const name = match[1]\n const argList = match[2] || ''\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 = this.parseArgs(argList)\n }\n parseArgs (argList: string): string[] {\n let match; const args = []\n while ((match = valueRE.exec(argList.trim()))) {\n const v = match[0]\n const re = new RegExp(`${v}\\\\s*:`, 'g')\n const keyMatch = re.exec(match.input)\n const currentMatchIsKey = keyMatch && keyMatch.index === match.index\n currentMatchIsKey ? args.push(`'${v}'`) : args.push(v)\n }\n return args\n }\n render (value: any, scope: Scope): any {\n const args = this.args.map(arg => evalValue(arg, scope))\n args.unshift(value)\n return this.impl.apply(null, args)\n }\n static register (name, filter) {\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'\n\ntype parseToken = (token: Token, remainTokens: Array) => ITemplate\ntype eventHandler = ((arg?: Token | ITemplate) => void)\n\nexport default class ParseStream {\n private tokens: Array\n private handlers: {[key: string]: eventHandler} = {}\n private stopRequested: boolean\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: eventHandler) {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: Token | ITemplate) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n }\n start () {\n this.trigger('start')\n let token\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' &&\n 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 * as lexical from 'src/parser/lexical'\nimport assert from 'src/util/assert'\nimport Filter from './filter'\nimport Scope from 'src/scope/scope'\n\nexport default class {\n initial: any\n filters: Array\n constructor (str: string, strictFilters?: boolean) {\n let match = lexical.matchValue(str)\n assert(match, `illegal value string: ${str}`)\n\n const initial = match[0]\n str = str.substr(match.index + match[0].length)\n\n const filters = []\n while ((match = lexical.filter.exec(str))) {\n filters.push([match[0].trim()])\n }\n\n this.initial = initial\n this.filters = filters.map(str => new Filter(str, strictFilters))\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 Token from 'src/parser/token'\n\nexport default class extends Template implements ITemplate {\n str: string\n constructor (token: Token) {\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'\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 = []\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'\n\nconst re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n\nexport default {\n parse: function (token) {\n const match = token.args.match(re)\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (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}\n","/*\n * Call functions in serial until someone resolved.\n * @param iterable the array to iterate with.\n * @param iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function anySeries (iterable, iteratee) {\n let ret: Promise = Promise.reject(new Error('init'))\n iterable.forEach(function (item, idx) {\n ret = ret.catch(() => iteratee(item, idx, iterable))\n })\n return ret\n}\n\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 (iterable, iteratee) {\n let ret: Promise = Promise.resolve('init')\n const result = []\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 { RenderBreakError } from 'src/util/error'\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\nfunction parse (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\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 = 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 => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n}\n\nasync function render (scope, hash) {\n let collection = evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]])\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, i) => {\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 instanceof 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\nexport default { parse, render }\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'\n\nconst re = new RegExp(`(${identifier.source})`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = tagToken.args.match(re)\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}\n","import { evalExp } from 'src/render/syntax'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p = []\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:when', token => {\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 => 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) {\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}\n","export default {\n parse: function (tagToken, remainTokens) {\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\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}\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'\n\nconst staticFileRE = /[^\\s,]+/\nconst withRE = new RegExp(`with\\\\s+(${value.source})`)\n\nexport default {\n parse: function (token) {\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, 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'\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(identifier)\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}\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\n\nconst groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\nconst candidatesRE = new RegExp(rValue.source, 'g')\n\nexport default {\n parse: function (tagToken) {\n let match = groupRE.exec(tagToken.args)\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) {\n const group = evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n\n const groups = scope.opts.groups = scope.opts.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'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', token => {\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 => 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) {\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}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes'\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}\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'\n\nconst staticFileRE = /\\S+/\n\nexport default {\n parse: function (token, remainTokens) {\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, 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}\n","import BlockMode from 'src/scope/block-mode'\n\nexport default {\n parse: function (token, remainTokens) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n\n this.tpls = []\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', tpl => 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) {\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}\n","export default {\n parse: function (tagToken, remainTokens) {\n this.tokens = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\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.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'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n parse: function (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\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 = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => 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: async function (scope, 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 => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row\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}\n","import { evalExp, isFalsy } from 'src/render/syntax'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream = 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) {\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}\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) {\n return String(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str) {\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 => escape(unescape(str)),\n 'newline_to_br': v => v.replace(/\\n/g, '
'),\n 'strip_html': v => String(v).replace(/|||<.*?>/g, '')\n}\n","export default {\n 'append': (v, arg) => v + arg,\n 'prepend': (v, arg) => arg + v,\n 'capitalize': str => String(str).charAt(0).toUpperCase() + str.slice(1),\n 'concat': (v, arg) => Array.prototype.concat.call(v, arg),\n 'lstrip': v => String(v).replace(/^\\s+/, ''),\n 'downcase': v => v.toLowerCase(),\n 'upcase': str => String(str).toUpperCase(),\n 'remove': (v, arg) => v.split(arg).join(''),\n 'remove_first': (v, l) => v.replace(l, ''),\n 'replace': (v, pattern, replacement) =>\n String(v).split(pattern).join(replacement),\n 'replace_first': (v, arg1, arg2) => String(v).replace(arg1, arg2),\n 'rstrip': str => String(str).replace(/\\s+$/, ''),\n 'split': (v, arg) => String(v).split(arg),\n 'strip': (v) => String(v).trim(),\n 'strip_newlines': v => String(v).replace(/\\n/g, ''),\n 'truncate': (v, l, o) => {\n v = String(v)\n o = (o === undefined) ? '...' : o\n l = l || 16\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v, l, o) => {\n if (o === undefined) o = '...'\n const arr = v.split(' ')\n let ret = arr.slice(0, l).join(' ')\n if (arr.length > l) ret += o\n return ret\n }\n}\n","export default {\n 'abs': v => Math.abs(v),\n 'ceil': v => Math.ceil(v),\n 'divided_by': (v, arg) => v / arg,\n 'floor': v => Math.floor(v),\n 'minus': bindFixed((v, arg) => v - arg),\n 'modulo': bindFixed((v, arg) => v % arg),\n 'round': (v, arg) => {\n const amp = Math.pow(10, arg || 0)\n return Math.round(v * amp) / amp\n },\n 'plus': bindFixed((v, arg) => Number(v) + Number(arg)),\n 'times': (v, arg) => v * arg\n}\n\nfunction getFixed (v) {\n const p = String(v).split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction bindFixed (cb) {\n return (l, r) => {\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 => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': x => x.split(' ').map(encodeURIComponent).join('+')\n}\n","import { last } from 'src/util/underscore'\n\nexport default {\n 'join': (v, arg) => v.join(arg === undefined ? ' ' : arg),\n 'last': v => last(v),\n 'first': v => v[0],\n 'map': (arr, arg) => arr.map(v => v[arg]),\n 'reverse': v => v.reverse(),\n 'sort': (v, arg) => v.sort(arg),\n 'size': v => v.length,\n 'slice': (v, begin, length) => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'uniq': function (arr) {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(val)) {\n return false\n }\n u[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) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d) {\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) {\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, startDay) {\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) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d) {\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) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst formatCodes = {\n a: function (d) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d) {\n return dayNames[d.getDay()]\n },\n b: function (d) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d) {\n return monthNames[d.getMonth()]\n },\n c: function (d) {\n return d.toLocaleString()\n },\n C: function (d) {\n return _date.century(d)\n },\n d: function (d) {\n return padStart(d.getDate(), 2, '0')\n },\n e: function (d) {\n return padStart(d.getDate(), 2)\n },\n H: function (d) {\n return padStart(d.getHours(), 2, '0')\n },\n I: function (d) {\n return padStart(String(d.getHours() % 12 || 12), 2, '0')\n },\n j: function (d) {\n return padStart(_date.getDayOfYear(d), 3, '0')\n },\n k: function (d) {\n return padStart(d.getHours(), 2)\n },\n l: function (d) {\n return padStart(String(d.getHours() % 12 || 12), 2)\n },\n L: function (d) {\n return padStart(d.getMilliseconds(), 3, '0')\n },\n m: function (d) {\n return padStart(d.getMonth() + 1, 2, '0')\n },\n M: function (d) {\n return padStart(d.getMinutes(), 2, '0')\n },\n p: function (d) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d) {\n return _date.getSuffix(d)\n },\n s: function (d) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d) {\n return padStart(d.getSeconds(), 2, '0')\n },\n u: function (d) {\n return d.getDay() || 7\n },\n U: function (d) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d) {\n return d.getDay()\n },\n W: function (d) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d) {\n return d.toLocaleDateString()\n },\n X: function (d) {\n return d.toLocaleTimeString()\n },\n y: function (d) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d) {\n return d.getFullYear()\n },\n z: function (d) {\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, format) {\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.call(this, d) : '%' + ch\n }\n}\n","import strftime from 'src/util/strftime'\nimport { isString } from 'src/util/underscore'\n\nexport default {\n 'date': (v, arg) => {\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) {\n return date instanceof Date && !isNaN(date.getTime())\n}\n","import { isTruthy } from 'src/render/syntax'\n\nexport default {\n 'default': (v, arg) => 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'\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, NormalizedOptions, defaultOptions, normalize } from './liquid-options'\n\nexport default class Liquid {\n public options: NormalizedOptions\n private cache: object\n private parser: Parser\n private renderer: Render\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n const options = { ...defaultOptions, ...normalize(opts) }\n if (options.cache) {\n this.cache = {}\n }\n this.options = options\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, 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, 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, filter) {\n return Filter.register(name, filter)\n }\n registerTag (name: string, tag: ITagImplOptions) {\n return Tag.register(name, tag)\n }\n plugin (plugin) {\n return plugin.call(this, Liquid)\n }\n express () {\n const self = this\n return function (filePath: string, ctx: object, cb: (err: Error, 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":["range","tslib_1.__extends","_.create","_\r\n .range","_.padStart","_.isArray","_.isString","BlockMode","_.assign","path","_.last","value","_.isObject","filter","_.isNil","_.isFunction","lexical.isInteger","_.promisify","stat","readFile","fs","extname","resolve","lexical.tagLine","operators","lexical.operators","lexical.quoteBalanced","lexical.rangeLine","lexical.isLiteral","lexical.parseLiteral","lexical.isVariable","lexical.value","lexical.filterLine","lexical.matchValue","lexical.filter","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/parser/lexical.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/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.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) {\n return function (...args) {\n return new Promise((resolve, reject) => {\n fn(...args, (err, result) => {\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 = []\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 (object, iteratee: ((val: any, key: string, obj: object) => boolean | void)) {\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\n/*\n * Assigns own enumerable string keyed properties of source objects to the destination object.\n * Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * Note: This method mutates object and is loosely based on Object.assign.\n *\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @return {Object} Returns object.\n */\nexport function assign (obj: object, ...srcs: object[]): object {\n obj = isObject(obj) ? obj : {}\n srcs.forEach(src => binaryAssign(obj, src))\n return obj\n}\n\nfunction binaryAssign (target: object, src: object): object {\n for (const key in src) if (src.hasOwnProperty(key)) target[key] = src[key]\n return target\n}\n\nexport function last (arr: any[]): any {\n return arr[arr.length - 1]\n}\n\nexport function uniq (arr: any[]): any[] {\n const u = {}\n const a = []\n for (let i = 0, l = arr.length; i < l; ++i) {\n if (u.hasOwnProperty(arr[i])) {\n continue\n }\n a.push(arr[i])\n u[arr[i]] = 1\n }\n return a\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 (arguments.length === 1) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr = []\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","// 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 integer = /-?\\d+/\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 literalLine = new RegExp(`^${literal.source}$`, 'i')\nexport const variableLine = new RegExp(`^${variable.source}$`)\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}$`)\nexport const integerLine = new RegExp(`^${integer.source}$`)\n\n// filter related\nexport const valueDeclaration = new RegExp(`(?:${identifier.source}\\\\s*:\\\\s*)?${value.source}`)\nexport const valueList = new RegExp(`${valueDeclaration.source}(\\\\s*,\\\\s*${valueDeclaration.source})*`)\nexport const filter = new RegExp(`${identifier.source}(?:\\\\s*:\\\\s*${valueList.source})?`, 'g')\nexport const filterCapture = new RegExp(`(${identifier.source})(?:\\\\s*:\\\\s*(${valueList.source}))?`)\nexport const filterLine = new RegExp(`^${filterCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isInteger (str) {\n return integerLine.test(str)\n}\n\nexport function isLiteral (str) {\n return literalLine.test(str)\n}\n\nexport function isRange (str) {\n return rangeLine.test(str)\n}\n\nexport function isVariable (str) {\n return variableLine.test(str)\n}\n\nexport function matchValue (str) {\n return value.exec(str)\n}\n\nexport function parseLiteral (str) {\n let res = str.match(numberLine)\n if (res) {\n return Number(str)\n }\n res = str.match(boolLine)\n if (res) {\n return str.toLowerCase() === 'true'\n }\n res = str.match(quotedLine)\n if (res) {\n return str.slice(1, -1)\n }\n throw new TypeError(`cannot parse '${str}' as literal`)\n}\n","import * as _ from './underscore'\nimport Token from 'src/parser/token'\n\nfunction captureStack () {\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n}\n\nabstract class LiquidError {\n name: string\n message: string\n stack: string\n private file: string\n private input: string\n private token: Token\n private originalError: Error\n constructor (err, token) {\n this.input = token.input\n this.file = token.file\n this.originalError = err\n this.token = token\n }\n captureStackTrace (obj) {\n this.name = obj.constructor.name\n\n captureStack.call(obj)\n const err = this.originalError\n const context = mkContext(this.input, this.token.line)\n this.message = mkMessage(err.message, this.token)\n this.stack = this.message + '\\n' + context +\n '\\n' + (this.stack || this.message) +\n (err.stack ? '\\nFrom ' + err.stack : '')\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor (message, token) {\n super({ message }, token)\n super.captureStackTrace(this)\n }\n}\nTokenizationError.prototype = _.create(Error.prototype) as any\nTokenizationError.prototype.constructor = TokenizationError\n\nexport class ParseError extends LiquidError {\n constructor (err, token) {\n super(err, token)\n this.message = err.message\n super.captureStackTrace(this)\n }\n}\nParseError.prototype = _.create(Error.prototype) as any\nParseError.prototype.constructor = ParseError\n\nexport class RenderError extends LiquidError {\n constructor (err, tpl) {\n super(err, tpl.token)\n this.message = err.message\n super.captureStackTrace(this)\n }\n}\nRenderError.prototype = _.create(Error.prototype) as any\nRenderError.prototype.constructor = RenderError\n\nexport class RenderBreakError {\n message: string\n resolvedHTML: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nRenderBreakError.prototype = _.create(Error.prototype) as any\nRenderBreakError.prototype.constructor = RenderBreakError\n\nexport class AssertionError {\n message: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nAssertionError.prototype = _.create(Error.prototype) as any\nAssertionError.prototype.constructor = AssertionError\n\nfunction mkContext (input, targetLine) {\n const lines = input.split('\\n')\n const begin = Math.max(targetLine - 2, 1)\n const end = Math.min(targetLine + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === targetLine) ? '>> ' : ' '\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, token) {\n msg = msg || ''\n if (token.file) {\n msg += ', file:' + token.file\n }\n if (token.line) {\n msg += `, line:${token.line}, col:${token.col}`\n }\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","import * 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 // eslint-disable-line\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 // eslint-disable-line\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 // eslint-disable-line\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 // eslint-disable-line\n /** ``trim_value_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_value_right?: boolean // eslint-disable-line\n /** `trim_value_left` is similar to `trim_value_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_value_left?: boolean // eslint-disable-line\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\nexport interface NormalizedOptions extends LiquidOptions {\n root?: string[]\n}\n\nexport const defaultOptions: NormalizedOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_value_right: false,\n trim_value_left: false,\n greedy: true,\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\nfunction normalizeStringArray (value: string | string[]): 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 * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport { NormalizedOptions, defaultOptions } from '../liquid-options'\nimport BlockMode from './block-mode'\n\nexport default class Scope {\n opts: NormalizedOptions\n contexts: Array\n blocks: object = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts: NormalizedOptions = defaultOptions) {\n this.opts = { ...defaultOptions, ...opts }\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => _.assign(ctx, val), _.create(null))\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 })\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 {\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 readProperty (obj, key) {\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) {\n str = String(str)\n const seq = []\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 (!lexical.isInteger(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) {\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) {\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, begin) {\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) as (filepath: string) => Promise\nconst readFileAsync = _.promisify(readFile) as (filepath: string, encoding: string) => Promise\n\nconst fs: IFS = {\n exists: filepath => {\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 { LiquidOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: LiquidOptions) {\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) {\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_value_left\n}\n\nfunction shouldTrimRight (token: DelimitedToken, inRaw: boolean, options) {\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_value_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\n line: number\n col: number\n raw: string\n input: string\n file: string\n value: string\n constructor (raw, col, input, file, line) {\n this.col = col\n this.line = line\n this.raw = 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, begin, input, file, line) {\n super(str, begin, input, file, line)\n this.type = 'html'\n this.value = str\n }\n}\n","import Token from './token'\n\nexport default class DelimitedToken extends Token {\n trimLeft: boolean\n trimRight: boolean\n constructor (raw, pos, input, file, line) {\n super(raw, pos, input, file, line)\n this.trimLeft = raw[2] === '-'\n this.trimRight = raw[raw.length - 3] === '-'\n this.value = raw.slice(this.trimLeft ? 3 : 2, this.trimRight ? -3 : -2).trim()\n }\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, pos, input, file, line) {\n super(raw, pos, input, file, line)\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, pos, input, file, line) {\n super(raw, pos, input, file, line)\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 { LiquidOptions, defaultOptions } from 'src/liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: LiquidOptions\n constructor (options: LiquidOptions = defaultOptions) {\n this.options = options\n }\n tokenize (input: string, file?: string) {\n const tokens = []\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 const bin = input.substr(p, 2)\n if (state === ParseState.HTML) {\n if (bin === '{{' || bin === '{%') {\n if (buffer) tokens.push(new HTMLToken(buffer, col, input, file, line))\n buffer = bin\n line = curLine\n col = p - lineBegin + 1\n p += 2\n state = bin === '{{' ? ParseState.OUTPUT : ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && bin === '}}') {\n buffer += '}}'\n tokens.push(new OutputToken(buffer, col, input, file, line))\n p += 2\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n } else if (bin === '%}') {\n buffer += '%}'\n tokens.push(new TagToken(buffer, col, input, file, line))\n p += 2\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 new Error(`${t} \"${str}\" not closed`),\n new Token(buffer, col, input, file, line)\n )\n }\n if (buffer) tokens.push(new HTMLToken(buffer, col, input, file, line))\n\n whiteSpaceCtrl(tokens, this.options)\n return tokens\n }\n}\n","import { RenderBreakError, RenderError } from 'src/util/error'\nimport assert from 'src/util/assert'\n\nexport default class Render {\n async renderTemplates (templates, 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 instanceof RenderBreakError) {\n e.resolvedHTML = html\n throw e\n }\n throw e instanceof 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'\n\nconst operators = {\n '==': (l, r) => l === r,\n '!=': (l, r) => l !== r,\n '>': (l, r) => l !== null && r !== null && l > r,\n '<': (l, r) => l !== null && r !== null && l < r,\n '>=': (l, r) => l !== null && r !== null && l >= r,\n '<=': (l, r) => l !== null && r !== null && l <= r,\n 'contains': (l, r) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l, r) => isTruthy(l) && isTruthy(r),\n 'or': (l, r) => isTruthy(l) || isTruthy(r)\n}\n\nexport function evalExp (exp, scope) {\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 const range = []\n for (let j = low; j <= high; j++) {\n range.push(j)\n }\n return range\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str, scope) {\n str = str && str.trim()\n if (!str) return undefined\n\n if (lexical.isLiteral(str)) {\n return lexical.parseLiteral(str)\n }\n if (lexical.isVariable(str)) {\n return scope.get(str)\n }\n throw new TypeError(`cannot eval '${str}' as value`)\n}\n\nexport function isTruthy (val) {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val) {\n return val === false || undefined === val || val === null\n}\n","import { hashCapture } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\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, 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 Token from 'src/parser/token'\n\nexport default class Template {\n token: Token;\n constructor (token) {\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 token: TagToken\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 assert from 'src/util/assert'\nimport * as lexical from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\n\ntype impl = (value: any, ...args: any[]) => any\n\nconst valueRE = new RegExp(`${lexical.value.source}`, 'g')\n\nexport default class Filter {\n name: string\n impl: impl\n args: string[]\n private static impls: {[key: string]: impl} = {}\n\n constructor (str: string, strictFilters: boolean = false) {\n const match = lexical.filterLine.exec(str)\n assert(match, 'illegal filter: ' + str)\n\n const name = match[1]\n const argList = match[2] || ''\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 = this.parseArgs(argList)\n }\n parseArgs (argList: string): string[] {\n let match; const args = []\n while ((match = valueRE.exec(argList.trim()))) {\n const v = match[0]\n const re = new RegExp(`${v}\\\\s*:`, 'g')\n const keyMatch = re.exec(match.input)\n const currentMatchIsKey = keyMatch && keyMatch.index === match.index\n currentMatchIsKey ? args.push(`'${v}'`) : args.push(v)\n }\n return args\n }\n render (value: any, scope: Scope): any {\n const args = this.args.map(arg => evalValue(arg, scope))\n args.unshift(value)\n return this.impl.apply(null, args)\n }\n static register (name, filter) {\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'\n\ntype parseToken = (token: Token, remainTokens: Array) => ITemplate\ntype eventHandler = ((arg?: Token | ITemplate) => void)\n\nexport default class ParseStream {\n private tokens: Array\n private handlers: {[key: string]: eventHandler} = {}\n private stopRequested: boolean\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: eventHandler) {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: Token | ITemplate) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n }\n start () {\n this.trigger('start')\n let token\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' &&\n 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 * as lexical from 'src/parser/lexical'\nimport assert from 'src/util/assert'\nimport Filter from './filter'\nimport Scope from 'src/scope/scope'\n\nexport default class {\n initial: any\n filters: Array\n constructor (str: string, strictFilters?: boolean) {\n let match = lexical.matchValue(str)\n assert(match, `illegal value string: ${str}`)\n\n const initial = match[0]\n str = str.substr(match.index + match[0].length)\n\n const filters = []\n while ((match = lexical.filter.exec(str))) {\n filters.push([match[0].trim()])\n }\n\n this.initial = initial\n this.filters = filters.map(str => new Filter(str, strictFilters))\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 Token from 'src/parser/token'\n\nexport default class extends Template implements ITemplate {\n str: string\n constructor (token: Token) {\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'\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 = []\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'\n\nconst re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n\nexport default {\n parse: function (token) {\n const match = token.args.match(re)\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (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}\n","/*\n * Call functions in serial until someone resolved.\n * @param iterable the array to iterate with.\n * @param iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function anySeries (iterable, iteratee) {\n let ret: Promise = Promise.reject(new Error('init'))\n iterable.forEach(function (item, idx) {\n ret = ret.catch(() => iteratee(item, idx, iterable))\n })\n return ret\n}\n\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 (iterable, iteratee) {\n let ret: Promise = Promise.resolve('init')\n const result = []\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 { RenderBreakError } from 'src/util/error'\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\nfunction parse (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\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 = 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 => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n}\n\nasync function render (scope, hash) {\n let collection = evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]])\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, i) => {\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 instanceof 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\nexport default { parse, render }\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'\n\nconst re = new RegExp(`(${identifier.source})`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = tagToken.args.match(re)\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}\n","import { evalExp } from 'src/render/syntax'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p = []\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:when', token => {\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 => 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) {\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}\n","export default {\n parse: function (tagToken, remainTokens) {\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\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}\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'\n\nconst staticFileRE = /[^\\s,]+/\nconst withRE = new RegExp(`with\\\\s+(${value.source})`)\n\nexport default {\n parse: function (token) {\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, 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'\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(identifier)\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}\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\n\nconst groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\nconst candidatesRE = new RegExp(rValue.source, 'g')\n\nexport default {\n parse: function (tagToken) {\n let match = groupRE.exec(tagToken.args)\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) {\n const group = evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n\n const groups = scope.opts.groups = scope.opts.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'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', token => {\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 => 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) {\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}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes'\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}\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'\n\nconst staticFileRE = /\\S+/\n\nexport default {\n parse: function (token, remainTokens) {\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, 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}\n","import BlockMode from 'src/scope/block-mode'\n\nexport default {\n parse: function (token, remainTokens) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n\n this.tpls = []\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', tpl => 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) {\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}\n","export default {\n parse: function (tagToken, remainTokens) {\n this.tokens = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\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.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'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n parse: function (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\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 = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => 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: async function (scope, 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 => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row\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}\n","import { evalExp, isFalsy } from 'src/render/syntax'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream = 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) {\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}\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) {\n return String(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str) {\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 => escape(unescape(str)),\n 'newline_to_br': v => v.replace(/\\n/g, '
'),\n 'strip_html': v => String(v).replace(/|||<.*?>/g, '')\n}\n","export default {\n 'append': (v, arg) => v + arg,\n 'prepend': (v, arg) => arg + v,\n 'capitalize': str => String(str).charAt(0).toUpperCase() + str.slice(1),\n 'concat': (v, arg) => Array.prototype.concat.call(v, arg),\n 'lstrip': v => String(v).replace(/^\\s+/, ''),\n 'downcase': v => v.toLowerCase(),\n 'upcase': str => String(str).toUpperCase(),\n 'remove': (v, arg) => v.split(arg).join(''),\n 'remove_first': (v, l) => v.replace(l, ''),\n 'replace': (v, pattern, replacement) =>\n String(v).split(pattern).join(replacement),\n 'replace_first': (v, arg1, arg2) => String(v).replace(arg1, arg2),\n 'rstrip': str => String(str).replace(/\\s+$/, ''),\n 'split': (v, arg) => String(v).split(arg),\n 'strip': (v) => String(v).trim(),\n 'strip_newlines': v => String(v).replace(/\\n/g, ''),\n 'truncate': (v, l, o) => {\n v = String(v)\n o = (o === undefined) ? '...' : o\n l = l || 16\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v, l, o) => {\n if (o === undefined) o = '...'\n const arr = v.split(' ')\n let ret = arr.slice(0, l).join(' ')\n if (arr.length > l) ret += o\n return ret\n }\n}\n","export default {\n 'abs': v => Math.abs(v),\n 'ceil': v => Math.ceil(v),\n 'divided_by': (v, arg) => v / arg,\n 'floor': v => Math.floor(v),\n 'minus': bindFixed((v, arg) => v - arg),\n 'modulo': bindFixed((v, arg) => v % arg),\n 'round': (v, arg) => {\n const amp = Math.pow(10, arg || 0)\n return Math.round(v * amp) / amp\n },\n 'plus': bindFixed((v, arg) => Number(v) + Number(arg)),\n 'times': (v, arg) => v * arg\n}\n\nfunction getFixed (v) {\n const p = String(v).split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction bindFixed (cb) {\n return (l, r) => {\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 => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': x => x.split(' ').map(encodeURIComponent).join('+')\n}\n","import { last } from 'src/util/underscore'\n\nexport default {\n 'join': (v, arg) => v.join(arg === undefined ? ' ' : arg),\n 'last': v => last(v),\n 'first': v => v[0],\n 'map': (arr, arg) => arr.map(v => v[arg]),\n 'reverse': v => v.reverse(),\n 'sort': (v, arg) => v.sort(arg),\n 'size': v => v.length,\n 'slice': (v, begin, length) => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'uniq': function (arr) {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(val)) {\n return false\n }\n u[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) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d) {\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) {\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, startDay) {\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) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d) {\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) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst formatCodes = {\n a: function (d) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d) {\n return dayNames[d.getDay()]\n },\n b: function (d) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d) {\n return monthNames[d.getMonth()]\n },\n c: function (d) {\n return d.toLocaleString()\n },\n C: function (d) {\n return _date.century(d)\n },\n d: function (d) {\n return padStart(d.getDate(), 2, '0')\n },\n e: function (d) {\n return padStart(d.getDate(), 2)\n },\n H: function (d) {\n return padStart(d.getHours(), 2, '0')\n },\n I: function (d) {\n return padStart(String(d.getHours() % 12 || 12), 2, '0')\n },\n j: function (d) {\n return padStart(_date.getDayOfYear(d), 3, '0')\n },\n k: function (d) {\n return padStart(d.getHours(), 2)\n },\n l: function (d) {\n return padStart(String(d.getHours() % 12 || 12), 2)\n },\n L: function (d) {\n return padStart(d.getMilliseconds(), 3, '0')\n },\n m: function (d) {\n return padStart(d.getMonth() + 1, 2, '0')\n },\n M: function (d) {\n return padStart(d.getMinutes(), 2, '0')\n },\n p: function (d) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d) {\n return _date.getSuffix(d)\n },\n s: function (d) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d) {\n return padStart(d.getSeconds(), 2, '0')\n },\n u: function (d) {\n return d.getDay() || 7\n },\n U: function (d) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d) {\n return d.getDay()\n },\n W: function (d) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d) {\n return d.toLocaleDateString()\n },\n X: function (d) {\n return d.toLocaleTimeString()\n },\n y: function (d) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d) {\n return d.getFullYear()\n },\n z: function (d) {\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, format) {\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.call(this, d) : '%' + ch\n }\n}\n","import strftime from 'src/util/strftime'\nimport { isString } from 'src/util/underscore'\n\nexport default {\n 'date': (v, arg) => {\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) {\n return date instanceof Date && !isNaN(date.getTime())\n}\n","import { isTruthy } from 'src/render/syntax'\n\nexport default {\n 'default': (v, arg) => 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'\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, NormalizedOptions, defaultOptions, normalize } from './liquid-options'\n\nexport default class Liquid {\n public options: NormalizedOptions\n private cache: object\n private parser: Parser\n private renderer: Render\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n const options = { ...defaultOptions, ...normalize(opts) }\n if (options.cache) {\n this.cache = {}\n }\n this.options = options\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, 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, 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, filter) {\n return Filter.register(name, filter)\n }\n registerTag (name: string, tag: ITagImplOptions) {\n return Tag.register(name, tag)\n }\n plugin (plugin) {\n return plugin.call(this, Liquid)\n }\n express () {\n const self = this\n return function (filePath: string, ctx: object, cb: (err: Error, 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":["range","tslib_1.__extends","_.create","_\r\n .range","_.padStart","_.isArray","_.isString","BlockMode","_.assign","path","_.last","value","_.isObject","filter","_.isNil","_.isFunction","lexical.isInteger","_.promisify","stat","readFile","fs","extname","resolve","lexical.tagLine","operators","lexical.operators","lexical.quoteBalanced","lexical.rangeLine","lexical.isLiteral","lexical.parseLiteral","lexical.isVariable","lexical.value","lexical.filterLine","lexical.matchValue","lexical.filter","Value","HTML","re","hash","rValue","staticFileRE","_.forOwn","builtinTags"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAA;AACvC,IAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAA;;;;;;AAOzC,SAAgB,QAAQ,CAAE,KAAU;IAClC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAA;CAC/C;AAED,SAAgB,UAAU,CAAE,KAAU;IACpC,OAAO,OAAO,KAAK,KAAK,UAAU,CAAA;CACnC;AAED,SAAgB,SAAS,CAAE,EAAE;IAC3B,OAAO;QAAU,cAAO;aAAP,UAAO,EAAP,qBAAO,EAAP,IAAO;YAAP,yBAAO;;QACtB,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;YACjC,EAAE,eAAI,IAAI,SAAE,UAAC,GAAG,EAAE,MAAM;oBACtB,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;iBACpC,IAAC;SACH,CAAC,CAAA;KACH,CAAA;CACF;AAED,SAAgB,SAAS,CAAE,KAAU;IACnC,IAAI,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAC3B,IAAI,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAA;IACpE,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;IAClE,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,EAAE,CAAA;IAC/C,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAAE,OAAO,eAAe,CAAC,KAAK,CAAC,CAAA;IACjF,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;IACvD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;CACzB;AAED,SAAS,eAAe,CAAE,KAAU;IAClC,IAAM,KAAK,GAAG,EAAE,CAAA;IAChB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,UAAC,GAAG,EAAE,KAAK;QACtC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;YACnB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;gBAC/B,OAAM;aACP;YACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;SAClB;QACD,OAAO,KAAK,CAAA;KACb,CAAC,CAAA;CACH;AAED,SAAgB,MAAM,CAAyC,KAAS;IACtE,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;CAC5B;AAED,SAAgB,KAAK,CAAE,KAAU;IAC/B,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAA;CAC7C;AAED,SAAgB,OAAO,CAAE,KAAU;;IAEjC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,gBAAgB,CAAA;CAC9C;AAED,AAOA;;;;;;;;AAQA,SAAgB,MAAM,CAAE,MAAM,EAAE,QAAkE;IAChG,MAAM,GAAG,MAAM,IAAI,EAAE,CAAA;IACrB,KAAK,IAAM,CAAC,IAAI,MAAM,EAAE;QACtB,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;YAC5B,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,KAAK;gBAAE,MAAK;SACpD;KACF;IACD,OAAO,MAAM,CAAA;CACd;;;;;;;;;;;;AAaD,SAAgB,MAAM,CAAE,GAAW;IAAE,cAAiB;SAAjB,UAAiB,EAAjB,qBAAiB,EAAjB,IAAiB;QAAjB,6BAAiB;;IACpD,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,CAAA;IAC9B,IAAI,CAAC,OAAO,CAAC,UAAA,GAAG,IAAI,OAAA,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,GAAA,CAAC,CAAA;IAC3C,OAAO,GAAG,CAAA;CACX;AAED,SAAS,YAAY,CAAE,MAAc,EAAE,GAAW;IAChD,KAAK,IAAM,GAAG,IAAI,GAAG;QAAE,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;IAC1E,OAAO,MAAM,CAAA;CACd;AAED,SAAgB,IAAI,CAAE,GAAU;IAC9B,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;CAC3B;AAED,AAaA;;;;;;AAMA,SAAgB,QAAQ,CAAE,KAAU;IAClC,IAAM,IAAI,GAAG,OAAO,KAAK,CAAA;IACzB,OAAO,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,UAAU,CAAC,CAAA;CACpE;;;;;;;;;AAUD,SAAgB,KAAK,CAAE,KAAa,EAAE,IAAa,EAAE,IAAa;IAChE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;QAC1B,IAAI,GAAG,KAAK,CAAA;QACZ,KAAK,GAAG,CAAC,CAAA;KACV;IACD,IAAI,GAAG,IAAI,IAAI,CAAC,CAAA;IAEhB,IAAM,GAAG,GAAG,EAAE,CAAA;IACd,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE;QACvC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;KACZ;IACD,OAAO,GAAG,CAAA;CACX;AAED,SAAgB,QAAQ,CAAE,GAAQ,EAAE,MAAc,EAAE,EAAgB;IAAhB,mBAAA,EAAA,QAAgB;IAClE,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;IACjB,IAAI,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,MAAM,CAAA;IAC3B,OAAO,CAAC,EAAE,GAAG,CAAC;QAAE,GAAG,GAAG,EAAE,GAAG,GAAG,CAAA;IAC9B,OAAO,GAAG,CAAA;CACX;;ACpKD;AACA,IAAM,YAAY,GAAG,SAAS,CAAA;AAC9B,IAAM,YAAY,GAAG,SAAS,CAAA;AAC9B,AAAO,IAAM,MAAM,GAAG,IAAI,MAAM,CAAI,YAAY,CAAC,MAAM,SAAI,YAAY,CAAC,MAAQ,CAAC,CAAA;AACjF,AAAO,IAAM,aAAa,GAAG,IAAI,MAAM,CAAC,QAAM,MAAM,CAAC,MAAM,cAAU,CAAC,CAAA;;AAGtE,AAAO,IAAM,OAAO,GAAG,OAAO,CAAA;AAC9B,AAAO,IAAM,MAAM,GAAG,oBAAoB,CAAA;AAC1C,AAAO,IAAM,IAAI,GAAG,YAAY,CAAA;;AAGhC,AAAO,IAAM,UAAU,GAAG,YAAY,CAAA;AACtC,AAAO,IAAM,SAAS,GAAG,IAAI,MAAM,CAAC,WAAS,MAAM,CAAC,MAAM,oBAAiB,CAAC,CAAA;AAC5E,AAAO,IAAM,OAAO,GAAG,IAAI,MAAM,CAAC,QAAM,MAAM,CAAC,MAAM,SAAI,IAAI,CAAC,MAAM,SAAI,MAAM,CAAC,MAAM,MAAG,CAAC,CAAA;AACzF,AAAO,IAAM,QAAQ,GAAG,IAAI,MAAM,CAAI,UAAU,CAAC,MAAM,cAAS,UAAU,CAAC,MAAM,SAAI,SAAS,CAAC,MAAM,OAAI,CAAC,CAAA;;AAG1G,AAAO,IAAM,UAAU,GAAG,IAAI,MAAM,CAAC,QAAM,QAAQ,CAAC,MAAM,SAAI,MAAM,CAAC,MAAM,MAAG,CAAC,CAAA;AAC/E,AAAO,IAAMA,OAAK,GAAG,IAAI,MAAM,CAAC,QAAM,UAAU,CAAC,MAAM,cAAS,UAAU,CAAC,MAAM,QAAK,CAAC,CAAA;AACvF,AAAO,IAAM,YAAY,GAAG,IAAI,MAAM,CAAC,SAAO,UAAU,CAAC,MAAM,gBAAW,UAAU,CAAC,MAAM,SAAM,CAAC,CAAA;AAElG,AAAO,IAAM,KAAK,GAAG,IAAI,MAAM,CAAC,QAAM,QAAQ,CAAC,MAAM,SAAI,OAAO,CAAC,MAAM,SAAIA,OAAK,CAAC,MAAM,MAAG,CAAC,CAAA;;AAG3F,AAAO,IAAM,IAAI,GAAG,IAAI,MAAM,CAAC,QAAM,UAAU,CAAC,MAAM,qBAAgB,KAAK,CAAC,MAAM,MAAG,CAAC,CAAA;AACtF,AAAO,IAAM,WAAW,GAAG,IAAI,MAAM,CAAC,MAAI,UAAU,CAAC,MAAM,mBAAc,KAAK,CAAC,MAAM,MAAG,EAAE,GAAG,CAAC,CAAA;;AAG9F,AAAO,IAAM,OAAO,GAAG,IAAI,MAAM,CAAC,WAAS,UAAU,CAAC,MAAM,2BAAwB,CAAC,CAAA;AACrF,AAAO,IAAM,WAAW,GAAG,IAAI,MAAM,CAAC,MAAI,OAAO,CAAC,MAAM,MAAG,EAAE,GAAG,CAAC,CAAA;AACjE,AAAO,IAAM,YAAY,GAAG,IAAI,MAAM,CAAC,MAAI,QAAQ,CAAC,MAAM,MAAG,CAAC,CAAA;AAC9D,AAAO,IAAM,UAAU,GAAG,IAAI,MAAM,CAAC,MAAI,MAAM,CAAC,MAAM,MAAG,CAAC,CAAA;AAC1D,AAAO,IAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,MAAI,IAAI,CAAC,MAAM,MAAG,EAAE,GAAG,CAAC,CAAA;AAC3D,AAAO,IAAM,UAAU,GAAG,IAAI,MAAM,CAAC,MAAI,MAAM,CAAC,MAAM,MAAG,CAAC,CAAA;AAC1D,AAAO,IAAM,SAAS,GAAG,IAAI,MAAM,CAAC,MAAI,YAAY,CAAC,MAAM,MAAG,CAAC,CAAA;AAC/D,AAAO,IAAM,WAAW,GAAG,IAAI,MAAM,CAAC,MAAI,OAAO,CAAC,MAAM,MAAG,CAAC,CAAA;;AAG5D,AAAO,IAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,QAAM,UAAU,CAAC,MAAM,mBAAc,KAAK,CAAC,MAAQ,CAAC,CAAA;AAC/F,AAAO,IAAM,SAAS,GAAG,IAAI,MAAM,CAAI,gBAAgB,CAAC,MAAM,kBAAa,gBAAgB,CAAC,MAAM,OAAI,CAAC,CAAA;AACvG,AAAO,IAAM,MAAM,GAAG,IAAI,MAAM,CAAI,UAAU,CAAC,MAAM,oBAAe,SAAS,CAAC,MAAM,OAAI,EAAE,GAAG,CAAC,CAAA;AAC9F,AAAO,IAAM,aAAa,GAAG,IAAI,MAAM,CAAC,MAAI,UAAU,CAAC,MAAM,sBAAiB,SAAS,CAAC,MAAM,QAAK,CAAC,CAAA;AACpG,AAAO,IAAM,UAAU,GAAG,IAAI,MAAM,CAAC,MAAI,aAAa,CAAC,MAAM,MAAG,CAAC,CAAA;AAEjE,AAAO,IAAM,SAAS,GAAG;IACvB,UAAU;IACV,WAAW;IACX,gCAAgC;CACjC,CAAA;AAED,SAAgB,SAAS,CAAE,GAAG;IAC5B,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;CAC7B;AAED,SAAgB,SAAS,CAAE,GAAG;IAC5B,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;CAC7B;AAED,SAIgB,UAAU,CAAE,GAAG;IAC7B,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;CAC9B;AAED,SAAgB,UAAU,CAAE,GAAG;IAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;CACvB;AAED,SAAgB,YAAY,CAAE,GAAG;IAC/B,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IAC/B,IAAI,GAAG,EAAE;QACP,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;KACnB;IACD,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IACzB,IAAI,GAAG,EAAE;QACP,OAAO,GAAG,CAAC,WAAW,EAAE,KAAK,MAAM,CAAA;KACpC;IACD,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IAC3B,IAAI,GAAG,EAAE;QACP,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;KACxB;IACD,MAAM,IAAI,SAAS,CAAC,mBAAiB,GAAG,iBAAc,CAAC,CAAA;CACxD;;AClFD,SAAS,YAAY;IACnB,IAAI,KAAK,CAAC,iBAAiB,EAAE;QAC3B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;KAChD;CACF;AAED;IAQE,qBAAa,GAAG,EAAE,KAAK;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;QACxB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;QACtB,IAAI,CAAC,aAAa,GAAG,GAAG,CAAA;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;KACnB;IACD,uCAAiB,GAAjB,UAAmB,GAAG;QACpB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAA;QAEhC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACtB,IAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAA;QAC9B,IAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACtD,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QACjD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,OAAO;YACxC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC;aAChC,GAAG,CAAC,KAAK,GAAG,SAAS,GAAG,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAA;KAC7C;IACH,kBAAC;CAAA,IAAA;AAED;IAAuCC,qCAAW;IAChD,2BAAa,OAAO,EAAE,KAAK;QAA3B,YACE,kBAAM,EAAE,OAAO,SAAA,EAAE,EAAE,KAAK,CAAC,SAE1B;QADC,iBAAM,iBAAiB,aAAC,KAAI,CAAC,CAAA;;KAC9B;IACH,wBAAC;CALD,CAAuC,WAAW,GAKjD;AACD,iBAAiB,CAAC,SAAS,GAAGC,MAAQ,CAAC,KAAK,CAAC,SAAS,CAAQ,CAAA;AAC9D,iBAAiB,CAAC,SAAS,CAAC,WAAW,GAAG,iBAAiB,CAAA;AAE3D;IAAgCD,8BAAW;IACzC,oBAAa,GAAG,EAAE,KAAK;QAAvB,YACE,kBAAM,GAAG,EAAE,KAAK,CAAC,SAGlB;QAFC,KAAI,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAA;QAC1B,iBAAM,iBAAiB,aAAC,KAAI,CAAC,CAAA;;KAC9B;IACH,iBAAC;CAND,CAAgC,WAAW,GAM1C;AACD,UAAU,CAAC,SAAS,GAAGC,MAAQ,CAAC,KAAK,CAAC,SAAS,CAAQ,CAAA;AACvD,UAAU,CAAC,SAAS,CAAC,WAAW,GAAG,UAAU,CAAA;AAE7C;IAAiCD,+BAAW;IAC1C,qBAAa,GAAG,EAAE,GAAG;QAArB,YACE,kBAAM,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,SAGtB;QAFC,KAAI,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAA;QAC1B,iBAAM,iBAAiB,aAAC,KAAI,CAAC,CAAA;;KAC9B;IACH,kBAAC;CAND,CAAiC,WAAW,GAM3C;AACD,WAAW,CAAC,SAAS,GAAGC,MAAQ,CAAC,KAAK,CAAC,SAAS,CAAQ,CAAA;AACxD,WAAW,CAAC,SAAS,CAAC,WAAW,GAAG,WAAW,CAAA;AAE/C;IAGE,0BAAa,OAAO;QAClB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,GAAG,EAAE,CAAA;KAC5B;IACH,uBAAC;CAAA,IAAA;AACD,gBAAgB,CAAC,SAAS,GAAGA,MAAQ,CAAC,KAAK,CAAC,SAAS,CAAQ,CAAA;AAC7D,gBAAgB,CAAC,SAAS,CAAC,WAAW,GAAG,gBAAgB,CAAA;AAEzD;IAEE,wBAAa,OAAO;QAClB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,GAAG,EAAE,CAAA;KAC5B;IACH,qBAAC;CAAA,IAAA;AACD,cAAc,CAAC,SAAS,GAAGA,MAAQ,CAAC,KAAK,CAAC,SAAS,CAAQ,CAAA;AAC3D,cAAc,CAAC,SAAS,CAAC,WAAW,GAAG,cAAc,CAAA;AAErD,SAAS,SAAS,CAAE,KAAK,EAAE,UAAU;IACnC,IAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC/B,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IACzC,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IAElD,IAAM,OAAO,GAAGC,KACR,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC;SACrB,GAAG,CAAC,UAAA,UAAU;QACb,IAAM,SAAS,GAAG,CAAC,UAAU,KAAK,UAAU,IAAI,KAAK,GAAG,KAAK,CAAA;QAC7D,IAAM,GAAG,GAAGC,QAAU,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAA;QAC9D,IAAM,IAAI,GAAG,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAA;QAClC,OAAO,KAAG,SAAS,GAAG,GAAG,UAAK,IAAM,CAAA;KACrC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAA;IAEb,OAAO,OAAO,CAAA;CACf;AAED,SAAS,SAAS,CAAE,GAAG,EAAE,KAAK;IAC5B,GAAG,GAAG,GAAG,IAAI,EAAE,CAAA;IACf,IAAI,KAAK,CAAC,IAAI,EAAE;QACd,GAAG,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI,CAAA;KAC9B;IACD,IAAI,KAAK,CAAC,IAAI,EAAE;QACd,GAAG,IAAI,YAAU,KAAK,CAAC,IAAI,cAAS,KAAK,CAAC,GAAK,CAAA;KAChD;IACD,OAAO,GAAG,CAAA;CACX;;iBC/GwB,SAAc,EAAE,OAAgB;IACvD,IAAI,CAAC,SAAS,EAAE;QACd,OAAO,GAAG,OAAO,IAAI,YAAU,SAAS,gBAAa,CAAA;QACrD,MAAM,IAAI,cAAc,CAAC,OAAO,CAAC,CAAA;KAClC;CACF;;ACwBM,IAAM,cAAc,GAAsB;IAC/C,IAAI,EAAE,CAAC,GAAG,CAAC;IACX,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,EAAE;IACX,eAAe,EAAE,IAAI;IACrB,cAAc,EAAE,KAAK;IACrB,aAAa,EAAE,KAAK;IACpB,gBAAgB,EAAE,KAAK;IACvB,eAAe,EAAE,KAAK;IACtB,MAAM,EAAE,IAAI;IACZ,cAAc,EAAE,KAAK;IACrB,gBAAgB,EAAE,KAAK;CACxB,CAAA;AAED,SAAgB,SAAS,CAAE,OAAsB;IAC/C,OAAO,GAAG,OAAO,IAAI,EAAE,CAAA;IACvB,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;QAClC,OAAO,CAAC,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;KAClD;IACD,OAAO,OAA4B,CAAA;CACpC;AAED,SAAS,oBAAoB,CAAE,KAAwB;IACrD,IAAIC,OAAS,CAAC,KAAK,CAAC;QAAE,OAAO,KAAiB,CAAA;IAC9C,IAAIC,QAAU,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,KAAe,CAAC,CAAA;IAC/C,OAAO,EAAE,CAAA;CACV;;ACzDD,IAAK,SAKJ;AALD,WAAK,SAAS;;IAEZ,6CAAM,CAAA;;IAEN,2CAAK,CAAA;CACN,EALI,SAAS,KAAT,SAAS,QAKb;AAED,kBAAe,SAAS,CAAA;;ACDxB;IAKE,eAAa,GAAgB,EAAE,IAAwC;QAA1D,oBAAA,EAAA,QAAgB;QAAE,qBAAA,EAAA,qBAAwC;QAFvE,WAAM,GAAW,EAAE,CAAA;QACnB,cAAS,GAAcC,WAAS,CAAC,MAAM,CAAA;QAErC,IAAI,CAAC,IAAI,gBAAQ,cAAc,EAAK,IAAI,CAAE,CAAA;QAC1C,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAA;KAC5B;IACD,sBAAM,GAAN;QACE,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,GAAG,IAAK,OAAAC,MAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,GAAA,EAAEN,MAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;KAC9E;IACD,mBAAG,GAAH,UAAKO,OAAY;QAAjB,iBAIC;QAHC,IAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAACA,OAAI,CAAC,CAAA;QAC1C,IAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAIC,IAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACpE,OAAO,KAAK,CAAC,MAAM,CAAC,UAACC,QAAK,EAAE,GAAG,IAAK,OAAA,KAAI,CAAC,YAAY,CAACA,QAAK,EAAE,GAAG,CAAC,GAAA,EAAE,KAAK,CAAC,CAAA;KAC1E;IACD,mBAAG,GAAH,UAAKF,OAAY,EAAE,CAAM;QACvB,IAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAACA,OAAI,CAAC,CAAA;QAC1C,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAIC,IAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAClE,KAAK,CAAC,IAAI,CAAC,UAAC,GAAG,EAAE,CAAC;YAChB,IAAI,CAACE,QAAU,CAAC,KAAK,CAAC,EAAE;gBACtB,OAAO,IAAI,CAAA;aACZ;YACD,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC1B,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACd,OAAO,IAAI,CAAA;aACZ;YACD,IAAI,SAAS,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE;gBAC5B,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;aAChB;YACD,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;SACnB,CAAC,CAAA;KACH;IACD,uBAAO,GAAP,UAAS,GAAW;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;KAClC;IACD,oBAAI,GAAJ,UAAM,GAAW;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;KAC/B;IACD,mBAAG,GAAH,UAAK,GAAY;QACf,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAA;SAC3B;QACD,IAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,KAAK,GAAG,GAAA,CAAC,CAAA;QACzD,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YACZ,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC,CAAA;SACnD;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;KACrC;IACD,8BAAc,GAAd,UAAgB,GAAW,EAAEC,SAAoD;QAApD,0BAAA,EAAAA,0BAAgD,OAAA,IAAI,GAAA;QAC/E,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YAClD,IAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YAClC,IAAI,CAACA,SAAM,CAAC,SAAS,CAAC;gBAAE,SAAQ;YAChC,IAAI,GAAG,IAAI,SAAS,EAAE;gBACpB,OAAO,SAAS,CAAA;aACjB;SACF;QACD,OAAO,IAAI,CAAA;KACZ;IACD,4BAAY,GAAZ,UAAc,GAAG,EAAE,GAAG;QACpB,IAAI,GAAG,CAAA;QACP,IAAIC,KAAO,CAAC,GAAG,CAAC,EAAE;YAChB,GAAG,GAAG,SAAS,CAAA;SAChB;aAAM;YACL,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;YACnB,GAAG,GAAG,GAAG,KAAK,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;YAC/C,IAAIC,UAAY,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE;gBAC3C,GAAG,GAAG,GAAG,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAA;aACrC;SACF;QACD,IAAID,KAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC9C,MAAM,IAAI,SAAS,CAAC,yBAAuB,GAAK,CAAC,CAAA;SAClD;QACD,OAAO,GAAG,CAAA;KACX;;;;;;;;;IAUD,iCAAiB,GAAjB,UAAmB,GAAG;QACpB,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QACjB,IAAM,GAAG,GAAG,EAAE,CAAA;QACd,IAAI,IAAI,GAAG,EAAE,CAAA;QACb,IAAI,CAAC,CAAA;QACL,IAAI,CAAC,GAAG,CAAC,CAAA;QACT,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE;YACrB,QAAQ,GAAG,CAAC,CAAC,CAAC;gBACZ,KAAK,GAAG;oBACN,IAAI,EAAE,CAAA;oBAEN,IAAM,SAAS,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;oBAC5B,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;wBAC1B,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;wBACjC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAc,SAAS,UAAK,GAAK,CAAC,CAAA;wBACnD,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;wBAC1B,IAAI,EAAE,CAAA;wBACN,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;qBACV;yBAAM;wBACL,CAAC,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;wBACjC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,oBAAkB,GAAK,CAAC,CAAA;wBACzC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;wBAC1B,IAAI,CAACE,SAAiB,CAAC,IAAI,CAAC,EAAE;4BAC5B,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;yBAC9B;wBACD,IAAI,EAAE,CAAA;wBACN,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;qBACV;oBACD,MAAK;gBACP,KAAK,GAAG;oBACN,IAAI,EAAE,CAAA;oBACN,CAAC,EAAE,CAAA;oBACH,MAAK;gBACP;oBACE,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAA;oBACd,CAAC,EAAE,CAAA;aACN;SACF;QACD,IAAI,EAAE,CAAA;QAEN,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;YACf,MAAM,IAAI,SAAS,CAAC,oBAAiB,GAAG,OAAG,CAAC,CAAA;SAC7C;QACD,OAAO,GAAG,CAAA;QAEV,SAAS,IAAI;YACX,IAAI,IAAI,CAAC,MAAM;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC/B,IAAI,GAAG,EAAE,CAAA;SACV;KACF;IACH,YAAC;CAAA,IAAA;AAED,SAAS,QAAQ,CAAE,GAAG;IACpB,IAAID,UAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;QAC/B,OAAO,GAAG,CAAC,SAAS,EAAE,CAAA;KACvB;IACD,IAAIA,UAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;QAC9B,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAA;KACtB;IACD,OAAO,GAAG,CAAA;CACX;AAED,SAAS,QAAQ,CAAE,GAAG;IACpB,IAAI,CAACD,KAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,GAAG,CAAC,IAAI,CAAA;IACvC,IAAIT,OAAS,CAAC,GAAG,CAAC,IAAIC,QAAU,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,MAAM,CAAA;IACxD,OAAO,GAAG,CAAC,IAAI,CAAA;CAChB;AAED,SAAS,iBAAiB,CAAE,GAAG,EAAE,KAAK;IACpC,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACvC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;YAClB,KAAK,EAAE,CAAA;SACR;QACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;YAClB,KAAK,EAAE,CAAA;YACP,IAAI,KAAK,KAAK,CAAC,EAAE;gBACf,OAAO,CAAC,CAAA;aACT;SACF;KACF;IACD,OAAO,CAAC,CAAC,CAAA;CACV;;AC7KD;IAAA;KAA4B;IAAD,mBAAC;CAAA,IAAA;AAC5B;IAAA;KAA2B;IAAD,kBAAC;CAAA,IAAA;AAC3B;IAAA;KAA8B;IAAD,qBAAC;CAAA,IAAA;AAC9B;IAAA;KAA8B;IAAD,qBAAC;CAAA,IAAA;;;;;;;;;;;;;;;ACE9B,IAAM,SAAS,GAAGW,SAAW,CAACC,OAAI,CAA0C,CAAA;AAC5E,IAAM,aAAa,GAAGD,SAAW,CAACE,WAAQ,CAA4D,CAAA;AAEtG,IAAMC,IAAE,GAAQ;IACd,MAAM,EAAE,UAAA,QAAQ;QACd,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,cAAM,OAAA,IAAI,GAAA,CAAC,CAAC,KAAK,CAAC,cAAM,OAAA,KAAK,GAAA,CAAC,CAAA;KAC/D;IACD,QAAQ,EAAE,UAAA,QAAQ;QAChB,OAAO,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;KACvC;IACD,OAAO,EAAE,UAAC,IAAY,EAAE,IAAY,EAAE,GAAW;QAC/C,IAAI,CAACC,YAAO,CAAC,IAAI,CAAC;YAAE,IAAI,IAAI,GAAG,CAAA;QAC/B,OAAOC,YAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;KAC3B;CACF,CAAA;;SCduB,cAAc,CAAE,MAAe,EAAE,OAAsB;IAC7E,OAAO,cAAK,MAAM,EAAE,IAAI,IAAK,OAAO,CAAE,CAAA;IACtC,IAAI,KAAK,GAAG,KAAK,CAAA;IAEjB,MAAM,CAAC,OAAO,CAAC,UAAC,KAAY,EAAE,CAAS;QACrC,IAAI,cAAc,CAAC,KAAuB,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE;YAC3D,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;SACxC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAK,KAAkB,CAAC,IAAI,KAAK,KAAK;YAAE,KAAK,GAAG,IAAI,CAAA;QAC5E,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAK,KAAkB,CAAC,IAAI,KAAK,QAAQ;YAAE,KAAK,GAAG,KAAK,CAAA;QAEhF,IAAI,eAAe,CAAC,KAAuB,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE;YAC5D,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;SACzC;KACF,CAAC,CAAA;CACH;AAED,SAAS,cAAc,CAAE,KAAqB,EAAE,KAAc,EAAE,OAAO;IACrE,IAAI,KAAK;QAAE,OAAO,KAAK,CAAA;IACvB,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,aAAa,CAAA;IACxE,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,eAAe,CAAA;CAC9E;AAED,SAAS,eAAe,CAAE,KAAqB,EAAE,KAAc,EAAE,OAAO;IACtE,IAAI,KAAK;QAAE,OAAO,KAAK,CAAA;IACvB,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,cAAc,CAAA;IAC1E,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,gBAAgB,CAAA;CAChF;AAED,SAAS,QAAQ,CAAE,KAAY,EAAE,MAAe;IAC9C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;QAAE,OAAM;IAE3C,IAAM,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,YAAY,CAAA;IAC7C,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;CAC7C;AAED,SAAS,SAAS,CAAE,KAAY,EAAE,MAAe;IAC/C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;QAAE,OAAM;IAE3C,IAAM,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,eAAe,CAAA;IACjD,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;CAC9C;;AC/CD;IAQE,eAAa,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI;QACtC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;KACjB;IACH,YAAC;CAAA,IAAA;;ACbD;IAAuCrB,6BAAK;IAC1C,mBAAa,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI;QAA1C,YACE,kBAAM,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,SAGrC;QAFC,KAAI,CAAC,IAAI,GAAG,MAAM,CAAA;QAClB,KAAI,CAAC,KAAK,GAAG,GAAG,CAAA;;KACjB;IACH,gBAAC;CAND,CAAuC,KAAK,GAM3C;;ACND;IAA4CA,kCAAK;IAG/C,wBAAa,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI;QAAxC,YACE,kBAAM,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,SAInC;QAHC,KAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAA;QAC9B,KAAI,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,CAAA;QAC5C,KAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,EAAE,KAAI,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;;KAC/E;IACH,qBAAC;CATD,CAA4C,KAAK,GAShD;;ACPD;IAAsCA,4BAAc;IAGlD,kBAAa,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI;QAAxC,YACE,kBAAM,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,SAQnC;QAPC,KAAI,CAAC,IAAI,GAAG,KAAK,CAAA;QACjB,IAAM,KAAK,GAAG,KAAI,CAAC,KAAK,CAAC,KAAK,CAACsB,OAAe,CAAC,CAAA;QAC/C,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,IAAI,iBAAiB,CAAC,oBAAoB,EAAE,KAAI,CAAC,CAAA;SACxD;QACD,KAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACpB,KAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;;KACrB;IACH,eAAC;CAbD,CAAsC,cAAc,GAanD;;ACfD;IAAyCtB,+BAAc;IACrD,qBAAa,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI;QAAxC,YACE,kBAAM,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,SAEnC;QADC,KAAI,CAAC,IAAI,GAAG,QAAQ,CAAA;;KACrB;IACH,kBAAC;CALD,CAAyC,cAAc,GAKtD;;ACCD,IAAK,UAAgC;AAArC,WAAK,UAAU;IAAG,2CAAI,CAAA;IAAE,+CAAM,CAAA;IAAE,yCAAG,CAAA;CAAE,EAAhC,UAAU,KAAV,UAAU,QAAsB;AAErC;IAEE,mBAAa,OAAuC;QAAvC,wBAAA,EAAA,wBAAuC;QAClD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;KACvB;IACD,4BAAQ,GAAR,UAAU,KAAa,EAAE,IAAa;QACpC,IAAM,MAAM,GAAG,EAAE,CAAA;QACjB,IAAI,CAAC,GAAG,CAAC,CAAA;QACT,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,IAAI,KAAK,GAAG,UAAU,CAAC,IAAI,CAAA;QAC3B,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,IAAI,SAAS,GAAG,CAAC,CAAA;QACjB,IAAI,IAAI,GAAG,CAAC,CAAA;QACZ,IAAI,GAAG,GAAG,CAAC,CAAA;QAEX,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE;YACvB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;gBACrB,OAAO,EAAE,CAAA;gBACT,SAAS,GAAG,CAAC,GAAG,CAAC,CAAA;aAClB;YACD,IAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAC9B,IAAI,KAAK,KAAK,UAAU,CAAC,IAAI,EAAE;gBAC7B,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE;oBAChC,IAAI,MAAM;wBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;oBACtE,MAAM,GAAG,GAAG,CAAA;oBACZ,IAAI,GAAG,OAAO,CAAA;oBACd,GAAG,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAA;oBACvB,CAAC,IAAI,CAAC,CAAA;oBACN,KAAK,GAAG,GAAG,KAAK,IAAI,GAAG,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,CAAA;oBACzD,SAAQ;iBACT;aACF;iBAAM,IAAI,KAAK,KAAK,UAAU,CAAC,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;gBACtD,MAAM,IAAI,IAAI,CAAA;gBACd,MAAM,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;gBAC5D,CAAC,IAAI,CAAC,CAAA;gBACN,MAAM,GAAG,EAAE,CAAA;gBACX,IAAI,GAAG,OAAO,CAAA;gBACd,GAAG,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAA;gBACvB,KAAK,GAAG,UAAU,CAAC,IAAI,CAAA;gBACvB,SAAQ;aACT;iBAAM,IAAI,GAAG,KAAK,IAAI,EAAE;gBACvB,MAAM,IAAI,IAAI,CAAA;gBACd,MAAM,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;gBACzD,CAAC,IAAI,CAAC,CAAA;gBACN,MAAM,GAAG,EAAE,CAAA;gBACX,IAAI,GAAG,OAAO,CAAA;gBACd,GAAG,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAA;gBACvB,KAAK,GAAG,UAAU,CAAC,IAAI,CAAA;gBACvB,SAAQ;aACT;YACD,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAA;SACrB;QACD,IAAI,KAAK,KAAK,UAAU,CAAC,IAAI,EAAE;YAC7B,IAAM,CAAC,GAAG,KAAK,KAAK,UAAU,CAAC,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAA;YACxD,IAAM,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,MAAM,CAAA;YACrE,MAAM,IAAI,iBAAiB,CACzB,IAAI,KAAK,CAAI,CAAC,WAAK,GAAG,kBAAc,CAAC,EACrC,IAAI,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAC1C,CAAA;SACF;QACD,IAAI,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;QAEtE,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QACpC,OAAO,MAAM,CAAA;KACd;IACH,gBAAC;CAAA,IAAA;;ACxED;IAAA;KAkBC;IAjBO,gCAAe,GAArB,UAAuB,SAAS,EAAE,KAAK;;;;;;wBACrC,MAAM,CAAC,KAAK,EAAE,0CAA0C,CAAC,CAAA;wBAErD,IAAI,GAAG,EAAE,CAAA;8BACc,EAAT,uBAAS;;;8BAAT,uBAAS,CAAA;wBAAhB,GAAG;;;;wBAEV,KAAA,IAAI,CAAA;wBAAI,qBAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAA;;wBAA/B,IAAI,GAAJ,KAAQ,SAAuB,CAAA;;;;wBAE/B,IAAI,GAAC,YAAY,gBAAgB,EAAE;4BACjC,GAAC,CAAC,YAAY,GAAG,IAAI,CAAA;4BACrB,MAAM,GAAC,CAAA;yBACR;wBACD,MAAM,GAAC,YAAY,WAAW,GAAG,GAAC,GAAG,IAAI,WAAW,CAAC,GAAC,EAAE,GAAG,CAAC,CAAA;;wBAR9C,IAAS,CAAA;;4BAW3B,sBAAO,IAAI,EAAA;;;;KACZ;IACH,aAAC;CAAA,IAAA;;AClBD,IAAMuB,WAAS,GAAG;IAChB,IAAI,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,CAAC,GAAA;IACvB,IAAI,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,CAAC,GAAA;IACvB,GAAG,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAA;IAChD,GAAG,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAA;IAChD,IAAI,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,GAAA;IAClD,IAAI,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,GAAA;IAClD,UAAU,EAAE,UAAC,CAAC,EAAE,CAAC;QACf,IAAI,CAAC,CAAC;YAAE,OAAO,KAAK,CAAA;QACpB,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU;YAAE,OAAO,KAAK,CAAA;QACjD,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;KACzB;IACD,KAAK,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAA;IAC3C,IAAI,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAA;CAC3C,CAAA;AAED,SAAgB,OAAO,CAAE,GAAG,EAAE,KAAK;IACjC,MAAM,CAAC,KAAK,EAAE,oCAAoC,CAAC,CAAA;IACnD,IAAM,WAAW,GAAGC,SAAiB,CAAA;IACrC,IAAI,KAAK,CAAA;IACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC3C,IAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;QACjC,IAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAKC,aAAqB,CAAC,MAAM,UAAK,UAAU,CAAC,MAAM,UAAKA,aAAqB,CAAC,MAAM,OAAI,CAAC,CAAA;QACtH,KAAK,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG;YAC9B,IAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YAClC,IAAM,EAAE,GAAGF,WAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;YACrC,IAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YAClC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;SAChB;KACF;IAED,KAAK,KAAK,GAAG,GAAG,CAAC,KAAK,CAACG,SAAiB,CAAC,GAAG;QAC1C,IAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QACtC,IAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QACvC,IAAM,KAAK,GAAG,EAAE,CAAA;QAChB,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE;YAChC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;SACd;QACD,OAAO,KAAK,CAAA;KACb;IAED,OAAO,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;CAC7B;AAED,SAAgB,SAAS,CAAE,GAAG,EAAE,KAAK;IACnC,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAA;IACvB,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAA;IAE1B,IAAIC,SAAiB,CAAC,GAAG,CAAC,EAAE;QAC1B,OAAOC,YAAoB,CAAC,GAAG,CAAC,CAAA;KACjC;IACD,IAAIC,UAAkB,CAAC,GAAG,CAAC,EAAE;QAC3B,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;KACtB;IACD,MAAM,IAAI,SAAS,CAAC,kBAAgB,GAAG,eAAY,CAAC,CAAA;CACrD;AAED,SAAgB,QAAQ,CAAE,GAAG;IAC3B,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;CACrB;AAED,SAAgB,OAAO,CAAE,GAAG;IAC1B,OAAO,GAAG,KAAK,KAAK,IAAI,SAAS,KAAK,GAAG,IAAI,GAAG,KAAK,IAAI,CAAA;CAC1D;;AC/DD;;;;;;AAMA;IAEE,cAAa,MAAM,EAAE,KAAK;QACxB,IAAI,KAAK,CAAA;QACT,WAAW,CAAC,SAAS,GAAG,CAAC,CAAA;QACzB,QAAQ,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG;YACzC,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YAClB,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YAClB,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;SAC9B;KACF;IACH,WAAC;CAAA,IAAA;;AClBD;IAEE,kBAAa,KAAK;QAChB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;KACnB;IACH,eAAC;CAAA,IAAA;;ACKD;IAAiC7B,uBAAQ;IAMvC,aAAa,KAAe,EAAE,MAAe,EAAE,MAAc;QAA7D,YACE,kBAAM,KAAK,CAAC,SAUb;QATC,KAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;QAEtB,IAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAClC,MAAM,CAAC,IAAI,EAAE,SAAO,KAAK,CAAC,IAAI,eAAY,CAAC,CAAA;QAC3C,KAAI,CAAC,IAAI,GAAG,MAAM,CAA4B,IAAI,CAAC,CAAA;QACnD,KAAI,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACzB,IAAI,KAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACnB,KAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;SAC/B;;KACF;IACK,oBAAM,GAAZ,UAAc,KAAY;;;;;;wBAClB,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;wBACvC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;wBACtB,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE;4BACrC,sBAAO,EAAE,EAAA;yBACV;wBACY,qBAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,EAAA;;wBAArC,IAAI,GAAG,SAA8B;wBAC3C,sBAAO,SAAS,CAAC,IAAI,CAAC,EAAA;;;;KACvB;IACM,YAAQ,GAAf,UAAiB,IAAY,EAAE,GAAoB;QACjD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAA;KACtB;IACM,SAAK,GAAZ;QACE,GAAG,CAAC,KAAK,GAAG,EAAE,CAAA;KACf;IA5BM,SAAK,GAAuC,EAAE,CAAA;IA6BvD,UAAC;CAAA,CAjCgC,QAAQ,GAiCxC;;ACtCD,IAAM,OAAO,GAAG,IAAI,MAAM,CAAC,KAAG8B,KAAa,CAAC,MAAQ,EAAE,GAAG,CAAC,CAAA;AAE1D;IAME,gBAAa,GAAW,EAAE,aAA8B;QAA9B,8BAAA,EAAA,qBAA8B;QACtD,IAAM,KAAK,GAAGC,UAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC1C,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,GAAG,CAAC,CAAA;QAEvC,IAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACrB,IAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAC9B,IAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC/B,IAAI,CAAC,IAAI,IAAI,aAAa;YAAE,MAAM,IAAI,SAAS,CAAC,uBAAqB,IAAM,CAAC,CAAA;QAE5E,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,KAAK,UAAA,CAAC,IAAI,OAAA,CAAC,GAAA,CAAC,CAAA;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;KACpC;IACD,0BAAS,GAAT,UAAW,OAAe;QACxB,IAAI,KAAK,CAAC;QAAC,IAAM,IAAI,GAAG,EAAE,CAAA;QAC1B,QAAQ,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG;YAC7C,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YAClB,IAAM,EAAE,GAAG,IAAI,MAAM,CAAI,CAAC,UAAO,EAAE,GAAG,CAAC,CAAA;YACvC,IAAM,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YACrC,IAAM,iBAAiB,GAAG,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAA;YACpE,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAI,CAAC,MAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;SACvD;QACD,OAAO,IAAI,CAAA;KACZ;IACD,uBAAM,GAAN,UAAQrB,QAAU,EAAE,KAAY;QAC9B,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,GAAA,CAAC,CAAA;QACxD,IAAI,CAAC,OAAO,CAACA,QAAK,CAAC,CAAA;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;KACnC;IACM,eAAQ,GAAf,UAAiB,IAAI,EAAEE,SAAM;QAC3B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAGA,SAAM,CAAA;KAC5B;IACM,YAAK,GAAZ;QACE,MAAM,CAAC,KAAK,GAAG,EAAE,CAAA;KAClB;IApCc,YAAK,GAA0B,EAAE,CAAA;IAqClD,aAAC;CAzCD,IAyCC;;AC5CD;IAME,qBAAa,MAAoB,EAAE,UAAsB;QAJjD,aAAQ,GAAkC,EAAE,CAAA;QAKlD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;KAC7B;IACD,wBAAE,GAAF,UAAI,IAAY,EAAE,EAAgB;QAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;QACxB,OAAO,IAAI,CAAA;KACZ;IACD,6BAAO,GAAP,UAAS,KAAa,EAAE,GAAuB;QAC7C,IAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC9B,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE;YAC3B,CAAC,CAAC,GAAG,CAAC,CAAA;YACN,OAAO,IAAI,CAAA;SACZ;KACF;IACD,2BAAK,GAAL;QACE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACrB,IAAI,KAAK,CAAA;QACT,OAAO,CAAC,IAAI,CAAC,aAAa,KAAK,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE;YAC3D,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;gBAAE,SAAQ;YAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;gBACpB,IAAI,CAAC,OAAO,CAAC,SAAO,KAAK,CAAC,IAAM,EAAE,KAAK,CAAC,EAAE;gBAC5C,SAAQ;aACT;YACD,IAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;YACpD,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;SACnC;QACD,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC5C,OAAO,IAAI,CAAA;KACZ;IACD,0BAAI,GAAJ;QACE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;QACzB,OAAO,IAAI,CAAA;KACZ;IACH,kBAAC;CAAA,IAAA;;ACxCD;IAGE,mBAAa,GAAW,EAAE,aAAuB;QAC/C,IAAI,KAAK,GAAGoB,UAAkB,CAAC,GAAG,CAAC,CAAA;QACnC,MAAM,CAAC,KAAK,EAAE,2BAAyB,GAAK,CAAC,CAAA;QAE7C,IAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACxB,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QAE/C,IAAM,OAAO,GAAG,EAAE,CAAA;QAClB,QAAQ,KAAK,GAAGC,MAAc,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;YACzC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;SAChC;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,IAAI,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC,GAAA,CAAC,CAAA;KAClE;IACD,yBAAK,GAAL,UAAO,KAAY;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CACxB,UAAC,IAAI,EAAErB,SAAM,IAAK,OAAAA,SAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAA,EAC5C,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;KAChC;IACH,gBAAC;CAAA,IAAA;;ACtBD;IAAoCZ,0BAAQ;IAE1C,gBAAa,KAAkB,EAAE,aAAuB;QAAxD,YACE,kBAAM,KAAK,CAAC,SAEb;QADC,KAAI,CAAC,KAAK,GAAG,IAAIkC,SAAK,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA;;KACnD;IACK,uBAAM,GAAZ,UAAc,KAAY;;;;;4BACX,qBAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAA;;wBAApC,IAAI,GAAG,SAA6B;wBAC1C,sBAAO,SAAS,CAAC,IAAI,CAAC,EAAA;;;;KACvB;IACH,aAAC;CAVD,CAAoC,QAAQ,GAU3C;;ACbD;IAA6BlC,6BAAQ;IAEnC,mBAAa,KAAY;QAAzB,YACE,kBAAM,KAAK,CAAC,SAEb;QADC,KAAI,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAA;;KACvB;IACK,0BAAM,GAAZ;;;gBACE,sBAAO,IAAI,CAAC,GAAG,EAAA;;;KAChB;IACH,gBAAC;CATD,CAA6B,QAAQ,GASpC;;ACHD;IAGE,gBAAa,MAAc;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;KACrB;IACD,sBAAK,GAAL,UAAO,MAAoB;QACzB,IAAI,KAAK,CAAA;QACT,IAAM,SAAS,GAAG,EAAE,CAAA;QACpB,QAAQ,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG;YAC/B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;SAC/C;QACD,OAAO,SAAS,CAAA;KACjB;IACD,2BAAU,GAAV,UAAY,KAAY,EAAE,YAA0B;QAClD,IAAI;YACF,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE;gBACxB,OAAO,IAAI,GAAG,CAAC,KAAiB,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;aAC7D;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAC3B,OAAO,IAAI,MAAM,CAAC,KAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;aAC5E;YACD,OAAO,IAAImC,WAAI,CAAC,KAAK,CAAC,CAAA;SACvB;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,IAAI,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;SAC/B;KACF;IACD,4BAAW,GAAX,UAAa,MAAoB;QAAjC,iBAEC;QADC,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,UAAC,KAAK,EAAE,MAAM,IAAK,OAAA,KAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,GAAA,CAAC,CAAA;KAClF;IACH,aAAC;CAAA,IAAA;;ACpCD,IAAM,EAAE,GAAG,IAAI,MAAM,CAAC,MAAI,UAAU,CAAC,MAAM,iBAAc,CAAC,CAAA;AAE1D,eAAe;IACb,KAAK,EAAE,UAAU,KAAK;QACpB,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAClC,MAAM,CAAC,KAAK,EAAE,mBAAiB,KAAK,CAAC,GAAK,CAAC,CAAA;QAC3C,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;KACtB;IACD,MAAM,EAAE,UAAU,KAAK;QACrB,IAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAA;QAC7B,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QACxD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACf,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;KAC3B;CACF,CAAA;;ACnBD;;;;;;AAMA,AAQA;;;;;;AAMA,SAAgB,SAAS,CAAE,QAAQ,EAAE,QAAQ;IAC3C,IAAI,GAAG,GAAiB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAC/C,IAAM,MAAM,GAAG,EAAE,CAAA;IACjB,QAAQ,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,GAAG;QAClC,GAAG,GAAG,GAAG;aACN,IAAI,CAAC,cAAM,OAAA,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAA,CAAC;aACzC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAA,CAAC,CAAA;KAC7B,CAAC,CAAA;IACF,OAAO,GAAG,CAAC,IAAI,CAAC,cAAM,OAAA,MAAM,GAAA,CAAC,CAAA;CAC9B;;ACtBD,IAAMC,IAAE,GAAG,IAAI,MAAM,CAAC,OAAK,UAAU,CAAC,MAAM,gBAAa;KACvD,MAAI,KAAK,CAAC,MAAM,MAAG,CAAA;KACnB,YAAU,IAAI,CAAC,MAAM,OAAI,CAAA;IACzB,qBAAqB;KACrB,YAAU,IAAI,CAAC,MAAM,QAAK,CAAA,CAAC,CAAA;AAE7B,SAAS,KAAK,CAAE,QAAQ,EAAE,YAAY;IAAtC,iBAqBC;IApBC,IAAM,KAAK,GAAGA,IAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IACpC,MAAM,CAAC,KAAK,EAAE,kBAAgB,QAAQ,CAAC,GAAK,CAAC,CAAA;IAC7C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IACxB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IAC1B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAE1B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;IACnB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;IAEvB,IAAI,CAAC,CAAA;IACL,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;SACxD,EAAE,CAAC,OAAO,EAAE,cAAM,QAAC,CAAC,GAAG,KAAI,CAAC,SAAS,IAAC,CAAC;SACvC,EAAE,CAAC,UAAU,EAAE,cAAM,QAAC,CAAC,GAAG,KAAI,CAAC,aAAa,IAAC,CAAC;SAC9C,EAAE,CAAC,YAAY,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;SACrC,EAAE,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;SAClC,EAAE,CAAC,KAAK,EAAE;QACT,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;KAClD,CAAC,CAAA;IAEJ,MAAM,CAAC,KAAK,EAAE,CAAA;CACf;AAED,SAAe,MAAM,CAAE,KAAK,EAAEC,OAAI;;;;;;;oBAC5B,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;oBAEhD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;wBACxB,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;4BACjD,UAAU,GAAG,CAAC,UAAU,CAAC,CAAA;yBAC1B;6BAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,EAAE;4BAC/B,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,UAAC,GAAG,IAAK,OAAA,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,GAAA,CAAC,CAAA;yBAC1E;qBACF;oBACD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;wBAC9C,sBAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,EAAA;qBACvE;oBAEK,MAAM,GAAGA,OAAI,CAAC,MAAM,IAAI,CAAC,CAAA;oBACzB,KAAK,GAAG,CAACA,OAAI,CAAC,KAAK,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,GAAGA,OAAI,CAAC,KAAK,CAAA;oBAEzE,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAA;oBACrD,IAAI,IAAI,CAAC,QAAQ;wBAAE,UAAU,CAAC,OAAO,EAAE,CAAA;oBAEjC,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,UAAC,IAAI,EAAE,CAAC;wBACtC,IAAM,GAAG,GAAG,EAAE,CAAA;wBACd,GAAG,CAAC,KAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;wBACzB,GAAG,CAAC,SAAS,CAAC,GAAG;4BACf,KAAK,EAAE,CAAC,KAAK,CAAC;4BACd,KAAK,EAAE,CAAC,GAAG,CAAC;4BACZ,MAAM,EAAE,CAAC;4BACT,IAAI,EAAE,CAAC,KAAK,UAAU,CAAC,MAAM,GAAG,CAAC;4BACjC,MAAM,EAAE,UAAU,CAAC,MAAM;4BACzB,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC;4BAC7B,OAAO,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC;yBACnC,CAAA;wBACD,OAAO,GAAG,CAAA;qBACX,CAAC,CAAA;oBAEE,IAAI,GAAG,EAAE,CAAA;oBACT,QAAQ,GAAG,KAAK,CAAA;oBACpB,qBAAM,SAAS,CAAC,QAAQ,EAAE,UAAM,OAAO;;;;;wCACrC,IAAI,QAAQ;4CAAE,sBAAM;wCAEpB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;;;;wCAEjB,KAAA,IAAI,CAAA;wCAAI,qBAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAA;;wCAAzE,IAAI,GAAJ,KAAQ,SAAiE,CAAA;;;;wCAEzE,IAAI,GAAC,YAAY,gBAAgB,EAAE;4CACjC,IAAI,IAAI,GAAC,CAAC,YAAY,CAAA;4CACtB,IAAI,GAAC,CAAC,OAAO,KAAK,OAAO,EAAE;gDACzB,QAAQ,GAAG,IAAI,CAAA;6CAChB;yCACF;;4CAAM,MAAM,GAAC,CAAA;;;wCAEhB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;;;;6BACnB,CAAC,EAAA;;oBAfF,SAeE,CAAA;oBACF,sBAAO,IAAI,EAAA;;;;CACZ;AAED,UAAe,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,CAAA;;ACrFhC,IAAMD,IAAE,GAAG,IAAI,MAAM,CAAC,MAAI,UAAU,CAAC,MAAM,MAAG,CAAC,CAAA;AAE/C,cAAe;IACb,KAAK,EAAE,UAAU,QAAkB,EAAE,YAAqB;QAAnD,iBAcN;QAbC,IAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAACA,IAAE,CAAC,CAAA;QACrC,MAAM,CAAC,KAAK,EAAK,QAAQ,CAAC,IAAI,0BAAuB,CAAC,CAAA;QAEtD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACxB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;QAEnB,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;QAC3D,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;aAC7C,EAAE,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,KAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;aAC/C,EAAE,CAAC,KAAK,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;SAClD,CAAC,CAAA;QACJ,MAAM,CAAC,KAAK,EAAE,CAAA;KACf;IACD,MAAM,EAAE,UAAgB,KAAY;;;;;4BACrB,qBAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAA;;wBAAxE,IAAI,GAAG,SAAiE;wBACxE,GAAG,GAAG,IAAI,YAAY,EAAE,CAAA;wBAC9B,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;wBACzB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;;;;;KAChB;CACF,CAAA;;AC7BD,WAAe;IACb,KAAK,EAAE,UAAU,QAAQ,EAAE,YAAY;QAAhC,iBAqBN;QApBC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;QACzB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;QACf,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QAEvB,IAAI,CAAC,GAAG,EAAE,CAAA;QACV,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;aACxD,EAAE,CAAC,UAAU,EAAE,UAAA,KAAK;YACnB,KAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACd,GAAG,EAAE,KAAK,CAAC,IAAI;gBACf,SAAS,EAAE,CAAC,GAAG,EAAE;aAClB,CAAC,CAAA;SACH,CAAC;aACD,EAAE,CAAC,UAAU,EAAE,cAAM,QAAC,CAAC,GAAG,KAAI,CAAC,aAAa,IAAC,CAAC;aAC9C,EAAE,CAAC,aAAa,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;aACtC,EAAE,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;aAClC,EAAE,CAAC,KAAK,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;SAClD,CAAC,CAAA;QAEJ,MAAM,CAAC,KAAK,EAAE,CAAA;KACf;IAED,MAAM,EAAE,UAAU,KAAK;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAC5B,IAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YACtC,IAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YACtC,IAAI,GAAG,KAAK,IAAI,EAAE;gBAChB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;aACrE;SACF;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;KACvE;CACF,CAAA;;ACrCD,cAAe;IACb,KAAK,EAAE,UAAU,QAAQ,EAAE,YAAY;QACrC,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;QAC3D,MAAM;aACH,EAAE,CAAC,OAAO,EAAE,UAAA,KAAK;YAChB,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;gBAAE,MAAM,CAAC,IAAI,EAAE,CAAA;SAC/C,CAAC;aACD,EAAE,CAAC,KAAK,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;SAClD,CAAC,CAAA;QACJ,MAAM,CAAC,KAAK,EAAE,CAAA;KACf;CACF,CAAA;;ACPD,IAAM,YAAY,GAAG,SAAS,CAAA;AAC9B,IAAM,MAAM,GAAG,IAAI,MAAM,CAAC,cAAY,KAAK,CAAC,MAAM,MAAG,CAAC,CAAA;AAEtD,cAAe;IACb,KAAK,EAAE,UAAU,KAAK;QACpB,IAAI,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACzC,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;SAC5B;QAED,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;SACtB;QAED,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC/B,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;SACrB;KACF;IACD,MAAM,EAAE,UAAgB,KAAK,EAAEC,OAAI;;;;;;6BAE7B,KAAK,CAAC,IAAI,CAAC,eAAe,EAA1B,wBAA0B;6BACxB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAA3B,wBAA2B;wBACvB,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;wBAC7B,qBAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,EAAA;;wBAAjF,QAAQ,GAAG,SAAsE,CAAA;;;wBAEjF,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;;;;wBAGzC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAA;;;wBAE7B,MAAM,CAAC,QAAQ,EAAE,oCAAoC,CAAC,CAAA;wBAEhD,YAAY,GAAG,KAAK,CAAC,MAAM,CAAA;wBAC3B,eAAe,GAAG,KAAK,CAAC,SAAS,CAAA;wBAEvC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAA;wBACjB,KAAK,CAAC,SAAS,GAAG/B,WAAS,CAAC,MAAM,CAAA;wBAClC,IAAI,IAAI,CAAC,IAAI,EAAE;4BACb+B,OAAI,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;yBAC7C;wBACiB,qBAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,EAAA;;wBAA/D,SAAS,GAAG,SAAmD;wBACrE,KAAK,CAAC,IAAI,CAACA,OAAI,CAAC,CAAA;wBACH,qBAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,EAAA;;wBAAnE,IAAI,GAAG,SAA4D;wBACzE,KAAK,CAAC,GAAG,CAACA,OAAI,CAAC,CAAA;wBACf,KAAK,CAAC,MAAM,GAAG,YAAY,CAAA;wBAC3B,KAAK,CAAC,SAAS,GAAG,eAAe,CAAA;wBACjC,sBAAO,IAAI,EAAA;;;;KACZ;CACF,CAAA;;ACjDD,gBAAe;IACb,KAAK,EAAE,UAAU,KAAe;QAC9B,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QAC1C,MAAM,CAAC,KAAK,EAAE,wBAAsB,KAAK,CAAC,IAAM,CAAC,CAAA;QACjD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;KACzB;IACD,MAAM,EAAE,UAAU,KAAY;QAC5B,IAAI,OAAO,GAAG,KAAK,CAAC,cAAc,CAChC,IAAI,CAAC,QAAQ,EACb,UAAA,GAAG;YACD,OAAO,EAAE,GAAG,YAAY,YAAY,CAAC,IAAI,EAAE,GAAG,YAAY,WAAW,CAAC,CAAA;SACvE,CACF,CAAA;QACD,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,GAAG,IAAI,cAAc,EAAE,CAAA;YAC9B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;SACvB;QACD,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;YAC9C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;SAC3B;QACD,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;KAChC;CACF,CAAA;;ACxBD,IAAM,OAAO,GAAG,IAAI,MAAM,CAAC,UAAQC,KAAM,CAAC,MAAM,sBAAmB,CAAC,CAAA;AACpE,IAAM,YAAY,GAAG,IAAI,MAAM,CAACA,KAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAEnD,YAAe;IACb,KAAK,EAAE,UAAU,QAAQ;QACvB,IAAI,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACvC,MAAM,CAAC,KAAK,EAAE,kBAAgB,QAAQ,CAAC,GAAK,CAAC,CAAA;QAE7C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAC3B,IAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QAE3B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;QAEpB,QAAQ,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG;YAC9C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;SAC/B;QACD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,uBAAqB,QAAQ,CAAC,GAAK,CAAC,CAAA;KACpE;IAED,MAAM,EAAE,UAAU,KAAK;QACrB,IAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAC1C,IAAM,WAAW,GAAG,WAAS,KAAK,MAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAEjE,IAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAA;QAC1D,IAAI,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;QAE7B,IAAI,GAAG,KAAK,SAAS,EAAE;YACrB,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;SAC9B;QAED,IAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QACtC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAA;QACxC,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAA;QAEzB,OAAO,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;KACnC;CACF,CAAA;;ACtCD,SAAe;IACb,KAAK,EAAE,UAAU,QAAQ,EAAE,YAAY;QAAhC,iBAwBN;QAvBC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAA;QAClB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QAEvB,IAAI,CAAC,CAAA;QACL,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;aACxD,EAAE,CAAC,OAAO,EAAE,cAAM,OAAA,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACpC,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,SAAS,GAAG,CAAC,GAAG,EAAE,CAAC;SACpB,CAAC,GAAA,CAAC;aACF,EAAE,CAAC,WAAW,EAAE,UAAA,KAAK;YACpB,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,SAAS,EAAE,CAAC,GAAG,EAAE;aAClB,CAAC,CAAA;SACH,CAAC;aACD,EAAE,CAAC,UAAU,EAAE,cAAM,QAAC,CAAC,GAAG,KAAI,CAAC,aAAa,IAAC,CAAC;aAC9C,EAAE,CAAC,WAAW,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;aACpC,EAAE,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;aAClC,EAAE,CAAC,KAAK,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;SAClD,CAAC,CAAA;QAEJ,MAAM,CAAC,KAAK,EAAE,CAAA;KACf;IAED,MAAM,EAAE,UAAU,KAAK;QACrB,KAAqB,UAAa,EAAb,KAAA,IAAI,CAAC,QAAQ,EAAb,cAAa,EAAb,IAAa,EAAE;YAA/B,IAAM,MAAM,SAAA;YACf,IAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YACxC,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;gBAClB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;aACrE;SACF;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;KACvE;CACF,CAAA;;AClCD,gBAAe;IACb,KAAK,EAAE,UAAU,KAAK;QACpB,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QAC1C,MAAM,CAAC,KAAK,EAAE,wBAAsB,KAAK,CAAC,IAAM,CAAC,CAAA;QACjD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;KACzB;IACD,MAAM,EAAE,UAAU,KAAK;QACrB,IAAI,OAAO,GAAG,KAAK,CAAC,cAAc,CAChC,IAAI,CAAC,QAAQ,EACb,UAAA,GAAG;YACD,OAAO,EAAE,GAAG,YAAY,YAAY,CAAC,IAAI,EAAE,GAAG,YAAY,WAAW,CAAC,CAAA;SACvE,CACF,CAAA;QACD,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,GAAG,IAAI,cAAc,EAAE,CAAA;YAC9B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;SACvB;QACD,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;YAC9C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;SAC3B;QACD,IAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAClC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QACxB,OAAO,GAAG,CAAA;KACX;CACF,CAAA;;ACvBD,IAAMC,cAAY,GAAG,KAAK,CAAA;AAE1B,aAAe;IACb,KAAK,EAAE,UAAU,KAAK,EAAE,YAAY;QAClC,IAAI,KAAK,GAAGA,cAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACzC,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;SAC7B;QAED,KAAK,GAAGD,KAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC/B,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;SACvB;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;KACnD;IACD,MAAM,EAAE,UAAgB,KAAK,EAAED,OAAI;;;;;;wBAC3B,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe;8BACrC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;8BAC7B,IAAI,CAAC,YAAY,CAAA;wBACrB,MAAM,CAAC,MAAM,EAAE,yCAAyC,CAAC,CAAA;;wBAGzD,KAAK,CAAC,SAAS,GAAG/B,WAAS,CAAC,KAAK,CAAA;wBACpB,qBAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAA;;wBAAnE,IAAI,GAAG,SAA4D;wBACzE,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE;4BAClC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAA;yBACxB;wBACiB,qBAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAA;;wBAA7D,SAAS,GAAG,SAAiD;wBACnE,KAAK,CAAC,IAAI,CAAC+B,OAAI,CAAC,CAAA;wBAChB,KAAK,CAAC,SAAS,GAAG/B,WAAS,CAAC,MAAM,CAAA;wBAClB,qBAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,EAAA;;wBAAtE,OAAO,GAAG,SAA4D;wBAC5E,KAAK,CAAC,GAAG,CAAC+B,OAAI,CAAC,CAAA;wBACf,sBAAO,OAAO,EAAA;;;;KACf;CACF,CAAA;;ACtCD,YAAe;IACb,KAAK,EAAE,UAAU,KAAK,EAAE,YAAY;QAA7B,iBAYN;QAXC,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACpC,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;QAElC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAA;QACd,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;aACxD,EAAE,CAAC,cAAc,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;aACvC,EAAE,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,KAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;aAC1C,EAAE,CAAC,KAAK,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,SAAO,KAAK,CAAC,GAAG,gBAAa,CAAC,CAAA;SAC/C,CAAC,CAAA;QACJ,MAAM,CAAC,KAAK,EAAE,CAAA;KACf;IACD,MAAM,EAAE,UAAgB,KAAK;;;;;;wBACrB,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;8BAChC,YAAY,KAAK,SAAS,CAAA,EAA1B,wBAA0B;wBACnC,KAAA,YAAY,CAAA;;4BACZ,qBAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAA;;wBAA5D,KAAA,SAA4D,CAAA;;;wBAF1D,IAAI,KAEsD;wBAEhE,IAAI,KAAK,CAAC,SAAS,KAAK/B,WAAS,CAAC,KAAK,EAAE;4BACvC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;4BAC/B,sBAAO,EAAE,EAAA;yBACV;wBACD,sBAAO,IAAI,EAAA;;;;KACZ;CACF,CAAA;;AC5BD,UAAe;IACb,KAAK,EAAE,UAAU,QAAQ,EAAE,YAAY;QAAhC,iBAaN;QAZC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;QAEhB,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;QAC3D,MAAM;aACH,EAAE,CAAC,OAAO,EAAE,UAAA,KAAK;YAChB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,CAAC,IAAI,EAAE,CAAA;;gBACrC,KAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;SAC7B,CAAC;aACD,EAAE,CAAC,KAAK,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;SAClD,CAAC,CAAA;QACJ,MAAM,CAAC,KAAK,EAAE,CAAA;KACf;IACD,MAAM,EAAE;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,GAAG,GAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;KACpD;CACF,CAAA;;ACbD,IAAM8B,IAAE,GAAG,IAAI,MAAM,CAAC,OAAK,UAAU,CAAC,MAAM,gBAAa;KACvD,MAAI,KAAK,CAAC,MAAM,MAAG,CAAA;KACnB,YAAU,IAAI,CAAC,MAAM,QAAK,CAAA,CAAC,CAAA;AAE7B,eAAe;IACb,KAAK,EAAE,UAAU,QAAQ,EAAE,YAAY;QAAhC,iBAkBN;QAjBC,IAAM,KAAK,GAAGA,IAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACpC,MAAM,CAAC,KAAK,EAAE,kBAAgB,QAAQ,CAAC,GAAK,CAAC,CAAA;QAE7C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACxB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QAC1B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;QAEnB,IAAI,CAAC,CAAA;QACL,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;aACxD,EAAE,CAAC,OAAO,EAAE,cAAM,QAAC,CAAC,GAAG,KAAI,CAAC,SAAS,IAAC,CAAC;aACvC,EAAE,CAAC,iBAAiB,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;aAC1C,EAAE,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;aAClC,EAAE,CAAC,KAAK,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;SAClD,CAAC,CAAA;QAEJ,MAAM,CAAC,KAAK,EAAE,CAAA;KACf;IAED,MAAM,EAAE,UAAgB,KAAK,EAAEC,OAAI;;;;;;;wBAC7B,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,CAAA;wBAChD,MAAM,GAAGA,OAAI,CAAC,MAAM,IAAI,CAAC,CAAA;wBACzB,KAAK,GAAG,CAACA,OAAI,CAAC,KAAK,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,GAAGA,OAAI,CAAC,KAAK,CAAA;wBAEzE,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAA;wBAC/C,IAAI,GAAGA,OAAI,CAAC,IAAI,IAAI,UAAU,CAAC,MAAM,CAAA;wBACrC,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,UAAA,IAAI;4BAClC,IAAM,GAAG,GAAG,EAAE,CAAA;4BACd,GAAG,CAAC,KAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;4BACzB,OAAO,GAAG,CAAA;yBACX,CAAC,CAAA;wBAGE,IAAI,GAAG,EAAE,CAAA;wBACb,qBAAM,SAAS,CAAC,QAAQ,EAAE,UAAO,OAAO,EAAE,GAAG;;;;;4CAC3C,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;4CAC1B,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAA;4CAC5B,IAAI,GAAG,KAAK,CAAC,EAAE;gDACb,IAAI,GAAG,KAAK,CAAC,EAAE;oDACb,IAAI,IAAI,OAAO,CAAA;iDAChB;gDACD,IAAI,IAAI,oBAAiB,GAAG,QAAI,CAAA;6CACjC;4CAED,IAAI,IAAI,oBAAiB,GAAG,QAAI,CAAA;4CAChC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;4CACnB,KAAA,IAAI,CAAA;4CAAI,qBAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAA;;4CAAzE,IAAI,GAAJ,KAAQ,SAAiE,CAAA;4CACzE,IAAI,IAAI,OAAO,CAAA;4CACf,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;4CAClB,sBAAO,IAAI,EAAA;;;iCACZ,CAAC,EAAA;;wBAhBF,SAgBE,CAAA;wBACF,IAAI,GAAG,GAAG,CAAC,EAAE;4BACX,IAAI,IAAI,OAAO,CAAA;yBAChB;wBACD,sBAAO,IAAI,EAAA;;;;KACZ;CACF,CAAA;;ACjED,aAAe;IACb,KAAK,EAAE,UAAU,QAAQ,EAAE,YAAY;QAAhC,iBAiBN;QAhBC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;QACnB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QACvB,IAAI,CAAC,CAAA;QACL,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;aACxD,EAAE,CAAC,OAAO,EAAE;YACX,CAAC,GAAG,KAAI,CAAC,SAAS,CAAA;YAClB,KAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;SAC1B,CAAC;aACD,EAAE,CAAC,UAAU,EAAE,cAAM,QAAC,CAAC,GAAG,KAAI,CAAC,aAAa,IAAC,CAAC;aAC9C,EAAE,CAAC,eAAe,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;aACxC,EAAE,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;aAClC,EAAE,CAAC,KAAK,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;SAClD,CAAC,CAAA;QAEJ,MAAM,CAAC,KAAK,EAAE,CAAA;KACf;IAED,MAAM,EAAE,UAAU,KAAK;QACrB,IAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QACtC,OAAO,OAAO,CAAC,IAAI,CAAC;cAChB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;cAC3D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;KACpE;CACF,CAAA;;AC1BD,YAAe;IACb,MAAM,EAAE;;;gBACN,MAAM,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAA;;;KACpC;CACF,CAAA;;ACJD,eAAe;IACb,MAAM,EAAE;;;gBACN,MAAM,IAAI,gBAAgB,CAAC,UAAU,CAAC,CAAA;;;KACvC;CACF,CAAA;;ACaD,IAAM,IAAI,GAAuC;IAC/C,MAAM,UAAA,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,SAAA,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,SAAA,EAAE,OAAO,SAAA,EAAE,SAAS,WAAA,EAAE,SAAS,WAAA,EAAE,KAAK,OAAA,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAA,EAAE,KAAK,OAAA,EAAE,GAAG,KAAA,EAAE,QAAQ,UAAA,EAAE,MAAM,QAAA,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ;CAC/K,CAAA;;ACrBD,IAAM,SAAS,GAAG;IAChB,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,OAAO;CACb,CAAA;AACD,IAAM,WAAW,GAAG;IAClB,OAAO,EAAE,GAAG;IACZ,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;CACb,CAAA;AAED,SAAS,MAAM,CAAE,GAAG;IAClB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,UAAA,CAAC,IAAI,OAAA,SAAS,CAAC,CAAC,CAAC,GAAA,CAAC,CAAA;CAC5D;AAED,SAAS,QAAQ,CAAE,GAAG;IACpB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,wBAAwB,EAAE,UAAA,CAAC,IAAI,OAAA,WAAW,CAAC,CAAC,CAAC,GAAA,CAAC,CAAA;CAC1E;AAED,WAAe;IACb,QAAQ,EAAE,MAAM;IAChB,aAAa,EAAE,UAAA,GAAG,IAAI,OAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAA;IAC3C,eAAe,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAA;IAChD,YAAY,EAAE,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,2DAA2D,EAAE,EAAE,CAAC,GAAA;CACtG,CAAA;;AC5BD,UAAe;IACb,QAAQ,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,GAAG,GAAG,GAAA;IAC7B,SAAS,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,GAAG,GAAG,CAAC,GAAA;IAC9B,YAAY,EAAE,UAAA,GAAG,IAAI,OAAA,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAA;IACvE,QAAQ,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,GAAA;IACzD,QAAQ,EAAE,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAA;IAC5C,UAAU,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,WAAW,EAAE,GAAA;IAChC,QAAQ,EAAE,UAAA,GAAG,IAAI,OAAA,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,GAAA;IAC1C,QAAQ,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAA;IAC3C,cAAc,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,GAAA;IAC1C,SAAS,EAAE,UAAC,CAAC,EAAE,OAAO,EAAE,WAAW;QACjC,OAAA,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;KAAA;IAC5C,eAAe,EAAE,UAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAK,OAAA,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAA;IACjE,QAAQ,EAAE,UAAA,GAAG,IAAI,OAAA,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAA;IAChD,OAAO,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAA;IACzC,OAAO,EAAE,UAAC,CAAC,IAAK,OAAA,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAA;IAChC,gBAAgB,EAAE,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAA;IACnD,UAAU,EAAE,UAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAClB,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACb,CAAC,GAAG,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,CAAA;QACjC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;QACX,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,CAAC,CAAA;QAC3B,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;KACrC;IACD,eAAe,EAAE,UAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,SAAS;YAAE,CAAC,GAAG,KAAK,CAAA;QAC9B,IAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACxB,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACnC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;YAAE,GAAG,IAAI,CAAC,CAAA;QAC5B,OAAO,GAAG,CAAA;KACX;CACF,CAAA;;AC/BD,WAAe;IACb,KAAK,EAAE,UAAA,CAAC,IAAI,OAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAA;IACvB,MAAM,EAAE,UAAA,CAAC,IAAI,OAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAA;IACzB,YAAY,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,GAAG,GAAG,GAAA;IACjC,OAAO,EAAE,UAAA,CAAC,IAAI,OAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAA;IAC3B,OAAO,EAAE,SAAS,CAAC,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,GAAG,GAAG,GAAA,CAAC;IACvC,QAAQ,EAAE,SAAS,CAAC,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,GAAG,GAAG,GAAA,CAAC;IACxC,OAAO,EAAE,UAAC,CAAC,EAAE,GAAG;QACd,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;KACjC;IACD,MAAM,EAAE,SAAS,CAAC,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAA,CAAC;IACtD,OAAO,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,GAAG,GAAG,GAAA;CAC7B,CAAA;AAED,SAAS,QAAQ,CAAE,CAAC;IAClB,IAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC9B,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;CACxC;AAED,SAAS,SAAS,CAAE,EAAE;IACpB,OAAO,UAAC,CAAC,EAAE,CAAC;QACV,IAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;QAC5C,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;KAC3B,CAAA;CACF;;ACzBD,UAAe;IACb,YAAY,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA;IACjE,YAAY,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA;CAClE,CAAA;;ACDD,YAAe;IACb,MAAM,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,GAAG,GAAG,GAAG,GAAG,CAAC,GAAA;IACzD,MAAM,EAAE,UAAA,CAAC,IAAI,OAAA,IAAI,CAAC,CAAC,CAAC,GAAA;IACpB,OAAO,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,GAAA;IAClB,KAAK,EAAE,UAAC,GAAG,EAAE,GAAG,IAAK,OAAA,GAAG,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,GAAG,CAAC,GAAA,CAAC,GAAA;IACzC,SAAS,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,EAAE,GAAA;IAC3B,MAAM,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA;IAC/B,MAAM,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,GAAA;IACrB,OAAO,EAAE,UAAC,CAAC,EAAE,KAAK,EAAE,MAAM;QACxB,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,GAAG,CAAC,CAAA;QACpC,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,CAAA;KACtC;IACD,MAAM,EAAE,UAAU,GAAG;QACnB,IAAM,CAAC,GAAG,EAAE,CAAA;QACZ,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,MAAM,CAAC,UAAA,GAAG;YAC3B,IAAI,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBACzB,OAAO,KAAK,CAAA;aACb;YACD,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;YACb,OAAO,IAAI,CAAA;SACZ,CAAC,CAAA;KACH;CACF,CAAA;;ACtBD,IAAM,UAAU,GAAG;IACjB,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ;IACxE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU;CAC/C,CAAA;AACD,IAAM,QAAQ,GAAG;IACf,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU;CAC7E,CAAA;AACD,IAAM,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAC5C,IAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AACxC,IAAM,QAAQ,GAAG;IACf,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;IACP,SAAS,EAAE,IAAI;CAChB,CAAA;AAED,SAAS,IAAI,CAAE,GAAG;IAChB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;CACvB;;AAGD,IAAM,KAAK,GAAG;IACZ,WAAW,EAAE,UAAU,CAAC;QACtB,IAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAA;QACzC,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;KACzD;IAED,YAAY,EAAE,UAAU,CAAC;QACvB,IAAI,GAAG,GAAG,CAAC,CAAA;QACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE;YACrC,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;SAC/B;QACD,OAAO,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAA;KACzB;IAED,aAAa,EAAE,UAAU,CAAC,EAAE,QAAQ;;QAElC,IAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;;QAE1D,IAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAC5C,IAAM,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAA;QAC3C,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;KAClE;IAED,UAAU,EAAE,UAAU,CAAC;QACrB,IAAM,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;QAC5B,OAAO,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,GAAG,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;KAC1E;IAED,SAAS,EAAE,UAAU,CAAC;QACpB,IAAM,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAA;QAClC,IAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACrC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAA;KAC9C;IAED,OAAO,EAAE,UAAU,CAAC;QAClB,OAAO,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;KAChE;CACF,CAAA;AAED,IAAM,WAAW,GAAG;IAClB,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,aAAa,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;KACjC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;KAC5B;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,eAAe,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;KACrC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;KAChC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,CAAC,CAAC,cAAc,EAAE,CAAA;KAC1B;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;KACxB;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;KACrC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;KAChC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;KACtC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;KACzD;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;KAC/C;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAA;KACjC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;KACpD;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,QAAQ,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;KAC7C;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;KAC1C;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,QAAQ,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;KACxC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,QAAQ,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,EAAC;KACzC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,QAAQ,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,EAAC;KACzC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;KAC1B;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAA;KACtC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,QAAQ,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;KACxC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;KACvB;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;KACjC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,CAAC,CAAC,MAAM,EAAE,CAAA;KAClB;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;KACjC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,CAAC,CAAC,kBAAkB,EAAE,CAAA;KAC9B;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,CAAC,CAAC,kBAAkB,EAAE,CAAA;KAC9B;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;KAClD;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;KACvB;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,IAAM,EAAE,GAAG,CAAC,CAAC,iBAAiB,EAAE,GAAG,EAAE,GAAG,GAAG,CAAA;QAC3C,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;KACrE;IACD,GAAG,EAAE;QACH,OAAO,GAAG,CAAA;KACX;CACF,CAAC;AACD,WAAmB,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;AACtC,WAAmB,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAA;AAEtC,mBAAyB,CAAC,EAAE,MAAM;IAChC,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,SAAS,GAAG,MAAM,CAAA;IAEtB,OAAO,IAAI,EAAE;QACX,IAAM,CAAC,GAAG,KAAK,CAAA;QACf,IAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;;QAGjC,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,MAAM,GAAG,SAAS,CAAA;SAC1B;;QAGD,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;QAC7C,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;;QAGxC,IAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAC/B,IAAM,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,CAAA;QAC5B,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,CAAA;KAC/C;CACF;;ACpLD,WAAe;IACb,MAAM,EAAE,UAAC,CAAC,EAAE,GAAG;QACb,IAAI,IAAI,GAAG,CAAC,CAAA;QACZ,IAAI,CAAC,KAAK,KAAK,EAAE;YACf,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;SAClB;aAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;YACtB,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;SACnB;QACD,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;KACnD;CACF,CAAA;AAED,SAAS,WAAW,CAAE,IAAI;IACxB,OAAO,IAAI,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;CACtD;;ACfD,UAAe;IACb,SAAS,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAA;CAC7C,CAAA;;ACID,kCAAoB,IAAI,EAAK,GAAG,EAAK,IAAI,EAAK,GAAG,EAAK,IAAI,EAAK,GAAG,EAAK,KAAK,EAAE;;ACS9E;IAOE,gBAAa,IAAwB;QAAxB,qBAAA,EAAA,SAAwB;QAArC,iBAYC;QAXC,IAAM,OAAO,gBAAQ,cAAc,EAAK,SAAS,CAAC,IAAI,CAAC,CAAE,CAAA;QACzD,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;SAChB;QACD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,MAAM,EAAE,CAAA;QAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAE5CG,MAAQ,CAACC,IAAW,EAAE,UAAC,IAAI,EAAE,IAAI,IAAK,OAAA,KAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,GAAA,CAAC,CAAA;QACnED,MAAQ,CAAC,cAAc,EAAE,UAAC,OAAO,EAAE,IAAI,IAAK,OAAA,KAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,GAAA,CAAC,CAAA;KAChF;IACD,sBAAK,GAAL,UAAO,IAAY,EAAE,QAAiB;QACpC,IAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QACtD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;KACjC;IACD,uBAAM,GAAN,UAAQ,GAAqB,EAAE,GAAY,EAAE,IAAoB;QAC/D,IAAM,OAAO,gBAAQ,IAAI,CAAC,OAAO,EAAK,SAAS,CAAC,IAAI,CAAC,CAAE,CAAA;QACvD,IAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QACrC,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;KACjD;IACK,+BAAc,GAApB,UAAsB,IAAY,EAAE,GAAY,EAAE,IAAoB;;;;;4BACxD,qBAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAA;;wBAA5B,GAAG,GAAG,SAAsB;wBAClC,sBAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,EAAA;;;;KACnC;IACK,4BAAW,GAAjB,UAAmB,IAAI,EAAE,IAAoB;;;;;;;wBACrC,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;wBACzB,KAAK,GAAG,OAAO,CAAC,IAAI,GAAO,OAAO,CAAC,IAAI,QAAK,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAA;wBAClF,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAArB,IAAE,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAA,CAAC,CAAA;8BAEjD,EAAL,eAAK;;;8BAAL,mBAAK,CAAA;wBAAjB,QAAQ;wBACX,qBAAMA,IAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAA;;wBAA/B,IAAI,EAAE,SAAyB,CAAC;4BAAE,wBAAQ;wBAE1C,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;4BAAE,sBAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAA;wBAC7D,KAAA,IAAI,CAAC,KAAK,CAAA;wBAAC,qBAAMA,IAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAA;;wBAA9C,KAAK,GAAG,SAAA,IAAI,GAAO,SAA2B,EAAE,QAAQ,EAAC;wBAC/D,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK;4BAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAA;wBACpD,sBAAO,KAAK,EAAA;;wBANS,IAAK,CAAA;;;wBAStB,GAAG,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAQ,CAAA;wBACtC,GAAG,CAAC,OAAO,GAAG,gCAA6B,IAAI,gBAAS,KAAK,OAAG,CAAA;wBAChE,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAA;wBACnB,MAAM,GAAG,CAAA;;;;KACV;IACK,2BAAU,GAAhB,UAAkB,IAAI,EAAE,GAAY,EAAE,IAAoB;;;;;;wBAClD,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;wBACb,qBAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,EAAA;;wBAAjD,SAAS,GAAG,SAAqC;wBACvD,sBAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,EAAA;;;;KACzC;IACD,0BAAS,GAAT,UAAW,GAAW,EAAE,KAAY;QAClC,OAAO,IAAIe,SAAK,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;KAChE;IACD,+BAAc,GAAd,UAAgB,IAAI,EAAE,MAAM;QAC1B,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;KACrC;IACD,4BAAW,GAAX,UAAa,IAAY,EAAE,GAAoB;QAC7C,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;KAC/B;IACD,uBAAM,GAAN,UAAQ,MAAM;QACZ,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;KACjC;IACD,wBAAO,GAAP;QACE,IAAM,IAAI,GAAG,IAAI,CAAA;QACjB,OAAO,UAAU,QAAgB,EAAE,GAAW,EAAE,EAAuC;YACrF,IAAM,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAA;YAChC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAA,IAAI,IAAI,OAAA,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,GAAA,EAAE,EAAE,CAAC,CAAA;SACtE,CAAA;KACF;IACM,cAAO,GAAG,MAAM,CAAA;IAChB,eAAQ,GAAG,QAAQ,CAAA;IACnB,cAAO,GAAG,OAAO,CAAA;IACjB,cAAO,GAAG,OAAO,CAAA;IACjB,gBAAS,GAAG,SAAS,CAAA;IACrB,YAAK,GAAG,KAAK,CAAA;IACtB,aAAC;CAlFD,IAkFC;;;;"} \ No newline at end of file diff --git a/dist/liquid.js b/dist/liquid.js index cb38b8606..d01643572 100644 --- a/dist/liquid.js +++ b/dist/liquid.js @@ -1,5 +1,5 @@ /* - * liquidjs@7.0.2, https://github.com/harttle/liquidjs + * liquidjs@7.1.0, https://github.com/harttle/liquidjs * (c) 2016-2019 harttle * Released under the MIT License. */ @@ -300,7 +300,6 @@ var LiquidError = /** @class */ (function () { function LiquidError(err, token) { this.input = token.input; - this.line = token.line; this.file = token.file; this.originalError = err; this.token = token; @@ -309,7 +308,7 @@ this.name = obj.constructor.name; captureStack.call(obj); var err = this.originalError; - var context = mkContext(this.input, this.line); + var context = mkContext(this.input, this.token.line); this.message = mkMessage(err.message, this.token); this.stack = this.message + '\n' + context + '\n' + (this.stack || this.message) + @@ -390,7 +389,7 @@ msg += ', file:' + token.file; } if (token.line) { - msg += ', line:' + token.line; + msg += ", line:" + token.line + ", col:" + token.col; } return msg; } @@ -743,7 +742,8 @@ } var Token = /** @class */ (function () { - function Token(raw, pos, input, file, line) { + function Token(raw, col, input, file, line) { + this.col = col; this.line = line; this.raw = raw; this.input = input; @@ -815,20 +815,25 @@ Tokenizer.prototype.tokenize = function (input, file) { var tokens = []; var p = 0; - var line = 1; + var curLine = 1; var state = ParseState.HTML; var buffer = ''; - var bufferBegin = 0; + var lineBegin = 0; + var line = 1; + var col = 1; while (p < input.length) { - if (input[p] === '\n') - line++; + if (input[p] === '\n') { + curLine++; + lineBegin = p + 1; + } var bin = input.substr(p, 2); if (state === ParseState.HTML) { if (bin === '{{' || bin === '{%') { if (buffer) - tokens.push(new HTMLToken(buffer, bufferBegin, input, file, line)); + tokens.push(new HTMLToken(buffer, col, input, file, line)); buffer = bin; - bufferBegin = p; + line = curLine; + col = p - lineBegin + 1; p += 2; state = bin === '{{' ? ParseState.OUTPUT : ParseState.TAG; continue; @@ -836,26 +841,33 @@ } else if (state === ParseState.OUTPUT && bin === '}}') { buffer += '}}'; - tokens.push(new OutputToken(buffer, bufferBegin, input, file, line)); + tokens.push(new OutputToken(buffer, col, input, file, line)); p += 2; buffer = ''; - bufferBegin = p; + line = curLine; + col = p - lineBegin + 1; state = ParseState.HTML; continue; } else if (bin === '%}') { buffer += '%}'; - tokens.push(new TagToken(buffer, bufferBegin, input, file, line)); + tokens.push(new TagToken(buffer, col, input, file, line)); p += 2; buffer = ''; - bufferBegin = p; + line = curLine; + col = p - lineBegin + 1; state = ParseState.HTML; continue; } buffer += input[p++]; } + if (state !== ParseState.HTML) { + var t = state === ParseState.OUTPUT ? 'output' : 'tag'; + var str = buffer.length > 16 ? buffer.slice(0, 13) + '...' : buffer; + throw new TokenizationError(new Error(t + " \"" + str + "\" not closed"), new Token(buffer, col, input, file, line)); + } if (buffer) - tokens.push(new HTMLToken(buffer, bufferBegin, input, file, line)); + tokens.push(new HTMLToken(buffer, col, input, file, line)); whiteSpaceCtrl(tokens, this.options); return tokens; }; diff --git a/dist/liquid.js.map b/dist/liquid.js.map index 94146de62..c64fa5d74 100644 --- a/dist/liquid.js.map +++ b/dist/liquid.js.map @@ -1 +1 @@ -{"version":3,"file":"liquid.js","sources":["../src/util/underscore.ts","../src/parser/lexical.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/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.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) {\n return function (...args) {\n return new Promise((resolve, reject) => {\n fn(...args, (err, result) => {\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 = []\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 (object, iteratee: ((val: any, key: string, obj: object) => boolean | void)) {\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\n/*\n * Assigns own enumerable string keyed properties of source objects to the destination object.\n * Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * Note: This method mutates object and is loosely based on Object.assign.\n *\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @return {Object} Returns object.\n */\nexport function assign (obj: object, ...srcs: object[]): object {\n obj = isObject(obj) ? obj : {}\n srcs.forEach(src => binaryAssign(obj, src))\n return obj\n}\n\nfunction binaryAssign (target: object, src: object): object {\n for (const key in src) if (src.hasOwnProperty(key)) target[key] = src[key]\n return target\n}\n\nexport function last (arr: any[]): any {\n return arr[arr.length - 1]\n}\n\nexport function uniq (arr: any[]): any[] {\n const u = {}\n const a = []\n for (let i = 0, l = arr.length; i < l; ++i) {\n if (u.hasOwnProperty(arr[i])) {\n continue\n }\n a.push(arr[i])\n u[arr[i]] = 1\n }\n return a\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 (arguments.length === 1) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr = []\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","// 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 integer = /-?\\d+/\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 literalLine = new RegExp(`^${literal.source}$`, 'i')\nexport const variableLine = new RegExp(`^${variable.source}$`)\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}$`)\nexport const integerLine = new RegExp(`^${integer.source}$`)\n\n// filter related\nexport const valueDeclaration = new RegExp(`(?:${identifier.source}\\\\s*:\\\\s*)?${value.source}`)\nexport const valueList = new RegExp(`${valueDeclaration.source}(\\\\s*,\\\\s*${valueDeclaration.source})*`)\nexport const filter = new RegExp(`${identifier.source}(?:\\\\s*:\\\\s*${valueList.source})?`, 'g')\nexport const filterCapture = new RegExp(`(${identifier.source})(?:\\\\s*:\\\\s*(${valueList.source}))?`)\nexport const filterLine = new RegExp(`^${filterCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isInteger (str) {\n return integerLine.test(str)\n}\n\nexport function isLiteral (str) {\n return literalLine.test(str)\n}\n\nexport function isRange (str) {\n return rangeLine.test(str)\n}\n\nexport function isVariable (str) {\n return variableLine.test(str)\n}\n\nexport function matchValue (str) {\n return value.exec(str)\n}\n\nexport function parseLiteral (str) {\n let res = str.match(numberLine)\n if (res) {\n return Number(str)\n }\n res = str.match(boolLine)\n if (res) {\n return str.toLowerCase() === 'true'\n }\n res = str.match(quotedLine)\n if (res) {\n return str.slice(1, -1)\n }\n throw new TypeError(`cannot parse '${str}' as literal`)\n}\n","import * as _ from './underscore'\nimport Token from 'src/parser/token'\n\nfunction captureStack () {\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n}\n\nabstract class LiquidError {\n name: string\n message: string\n stack: string\n private line: string\n private file: string\n private input: string\n private token: Token\n private originalError: Error\n constructor (err, token) {\n this.input = token.input\n this.line = token.line\n this.file = token.file\n this.originalError = err\n this.token = token\n }\n captureStackTrace (obj) {\n this.name = obj.constructor.name\n\n captureStack.call(obj)\n const err = this.originalError\n const context = mkContext(this.input, this.line)\n this.message = mkMessage(err.message, this.token)\n this.stack = this.message + '\\n' + context +\n '\\n' + (this.stack || this.message) +\n (err.stack ? '\\nFrom ' + err.stack : '')\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor (message, token) {\n super({ message }, token)\n super.captureStackTrace(this)\n }\n}\nTokenizationError.prototype = _.create(Error.prototype) as any\nTokenizationError.prototype.constructor = TokenizationError\n\nexport class ParseError extends LiquidError {\n constructor (err, token) {\n super(err, token)\n this.message = err.message\n super.captureStackTrace(this)\n }\n}\nParseError.prototype = _.create(Error.prototype) as any\nParseError.prototype.constructor = ParseError\n\nexport class RenderError extends LiquidError {\n constructor (err, tpl) {\n super(err, tpl.token)\n this.message = err.message\n super.captureStackTrace(this)\n }\n}\nRenderError.prototype = _.create(Error.prototype) as any\nRenderError.prototype.constructor = RenderError\n\nexport class RenderBreakError {\n message: string\n resolvedHTML: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nRenderBreakError.prototype = _.create(Error.prototype) as any\nRenderBreakError.prototype.constructor = RenderBreakError\n\nexport class AssertionError {\n message: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nAssertionError.prototype = _.create(Error.prototype) as any\nAssertionError.prototype.constructor = AssertionError\n\nfunction mkContext (input, targetLine) {\n const lines = input.split('\\n')\n const begin = Math.max(targetLine - 2, 1)\n const end = Math.min(targetLine + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === targetLine) ? '>> ' : ' '\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, token) {\n msg = msg || ''\n if (token.file) {\n msg += ', file:' + token.file\n }\n if (token.line) {\n msg += ', line:' + token.line\n }\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","import * 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 // eslint-disable-line\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 // eslint-disable-line\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 // eslint-disable-line\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 // eslint-disable-line\n /** ``trim_value_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_value_right?: boolean // eslint-disable-line\n /** `trim_value_left` is similar to `trim_value_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_value_left?: boolean // eslint-disable-line\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\nexport interface NormalizedOptions extends LiquidOptions {\n root?: string[]\n}\n\nexport const defaultOptions: NormalizedOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_value_right: false,\n trim_value_left: false,\n greedy: true,\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\nfunction normalizeStringArray (value: string | string[]): 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 * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport { NormalizedOptions, defaultOptions } from '../liquid-options'\nimport BlockMode from './block-mode'\n\nexport default class Scope {\n opts: NormalizedOptions\n contexts: Array\n blocks: object = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts: NormalizedOptions = defaultOptions) {\n this.opts = { ...defaultOptions, ...opts }\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => _.assign(ctx, val), _.create(null))\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 })\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 {\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 readProperty (obj, key) {\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) {\n str = String(str)\n const seq = []\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 (!lexical.isInteger(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) {\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) {\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, begin) {\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, path) {\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, filepath, ext) {\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 { LiquidOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: LiquidOptions) {\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) {\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_value_left\n}\n\nfunction shouldTrimRight (token: DelimitedToken, inRaw: boolean, options) {\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_value_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\n line: number\n raw: string\n input: string\n file: string\n value: string\n constructor (raw, pos, input, file, line) {\n this.line = line\n this.raw = 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, begin, input, file, line) {\n super(str, begin, input, file, line)\n this.type = 'html'\n this.value = str\n }\n}\n","import Token from './token'\n\nexport default class DelimitedToken extends Token {\n trimLeft: boolean\n trimRight: boolean\n constructor (raw, pos, input, file, line) {\n super(raw, pos, input, file, line)\n this.trimLeft = raw[2] === '-'\n this.trimRight = raw[raw.length - 3] === '-'\n this.value = raw.slice(this.trimLeft ? 3 : 2, this.trimRight ? -3 : -2).trim()\n }\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, pos, input, file, line) {\n super(raw, pos, input, file, line)\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, pos, input, file, line) {\n super(raw, pos, input, file, line)\n this.type = 'output'\n }\n}\n","import whiteSpaceCtrl from './whitespace-ctrl'\nimport HTMLToken from './html-token'\nimport TagToken from './tag-token'\nimport OutputToken from './output-token'\nimport { LiquidOptions, defaultOptions } from 'src/liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: LiquidOptions\n constructor (options: LiquidOptions = defaultOptions) {\n this.options = options\n }\n tokenize (input: string, file?: string) {\n const tokens = []\n let p = 0\n let line = 1\n let state = ParseState.HTML\n let buffer = ''\n let bufferBegin = 0\n\n while (p < input.length) {\n if (input[p] === '\\n') line++\n const bin = input.substr(p, 2)\n if (state === ParseState.HTML) {\n if (bin === '{{' || bin === '{%') {\n if (buffer) tokens.push(new HTMLToken(buffer, bufferBegin, input, file, line))\n buffer = bin\n bufferBegin = p\n p += 2\n state = bin === '{{' ? ParseState.OUTPUT : ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && bin === '}}') {\n buffer += '}}'\n tokens.push(new OutputToken(buffer, bufferBegin, input, file, line))\n p += 2\n buffer = ''\n bufferBegin = p\n state = ParseState.HTML\n continue\n } else if (bin === '%}') {\n buffer += '%}'\n tokens.push(new TagToken(buffer, bufferBegin, input, file, line))\n p += 2\n buffer = ''\n bufferBegin = p\n state = ParseState.HTML\n continue\n }\n buffer += input[p++]\n }\n if (buffer) tokens.push(new HTMLToken(buffer, bufferBegin, input, file, line))\n\n whiteSpaceCtrl(tokens, this.options)\n return tokens\n }\n}\n","import { RenderBreakError, RenderError } from 'src/util/error'\nimport assert from 'src/util/assert'\n\nexport default class Render {\n async renderTemplates (templates, 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 instanceof RenderBreakError) {\n e.resolvedHTML = html\n throw e\n }\n throw e instanceof 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'\n\nconst operators = {\n '==': (l, r) => l === r,\n '!=': (l, r) => l !== r,\n '>': (l, r) => l !== null && r !== null && l > r,\n '<': (l, r) => l !== null && r !== null && l < r,\n '>=': (l, r) => l !== null && r !== null && l >= r,\n '<=': (l, r) => l !== null && r !== null && l <= r,\n 'contains': (l, r) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l, r) => isTruthy(l) && isTruthy(r),\n 'or': (l, r) => isTruthy(l) || isTruthy(r)\n}\n\nexport function evalExp (exp, scope) {\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 const range = []\n for (let j = low; j <= high; j++) {\n range.push(j)\n }\n return range\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str, scope) {\n str = str && str.trim()\n if (!str) return undefined\n\n if (lexical.isLiteral(str)) {\n return lexical.parseLiteral(str)\n }\n if (lexical.isVariable(str)) {\n return scope.get(str)\n }\n throw new TypeError(`cannot eval '${str}' as value`)\n}\n\nexport function isTruthy (val) {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val) {\n return val === false || undefined === val || val === null\n}\n","import { hashCapture } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\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, 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 Token from 'src/parser/token'\n\nexport default class Template {\n token: Token;\n constructor (token) {\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 token: TagToken\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 assert from 'src/util/assert'\nimport * as lexical from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\n\ntype impl = (value: any, ...args: any[]) => any\n\nconst valueRE = new RegExp(`${lexical.value.source}`, 'g')\n\nexport default class Filter {\n name: string\n impl: impl\n args: string[]\n private static impls: {[key: string]: impl} = {}\n\n constructor (str: string, strictFilters: boolean = false) {\n const match = lexical.filterLine.exec(str)\n assert(match, 'illegal filter: ' + str)\n\n const name = match[1]\n const argList = match[2] || ''\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 = this.parseArgs(argList)\n }\n parseArgs (argList: string): string[] {\n let match; const args = []\n while ((match = valueRE.exec(argList.trim()))) {\n const v = match[0]\n const re = new RegExp(`${v}\\\\s*:`, 'g')\n const keyMatch = re.exec(match.input)\n const currentMatchIsKey = keyMatch && keyMatch.index === match.index\n currentMatchIsKey ? args.push(`'${v}'`) : args.push(v)\n }\n return args\n }\n render (value: any, scope: Scope): any {\n const args = this.args.map(arg => evalValue(arg, scope))\n args.unshift(value)\n return this.impl.apply(null, args)\n }\n static register (name, filter) {\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'\n\ntype parseToken = (token: Token, remainTokens: Array) => ITemplate\ntype eventHandler = ((arg?: Token | ITemplate) => void)\n\nexport default class ParseStream {\n private tokens: Array\n private handlers: {[key: string]: eventHandler} = {}\n private stopRequested: boolean\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: eventHandler) {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: Token | ITemplate) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n }\n start () {\n this.trigger('start')\n let token\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' &&\n 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 * as lexical from 'src/parser/lexical'\nimport assert from 'src/util/assert'\nimport Filter from './filter'\nimport Scope from 'src/scope/scope'\n\nexport default class {\n initial: any\n filters: Array\n constructor (str: string, strictFilters?: boolean) {\n let match = lexical.matchValue(str)\n assert(match, `illegal value string: ${str}`)\n\n const initial = match[0]\n str = str.substr(match.index + match[0].length)\n\n const filters = []\n while ((match = lexical.filter.exec(str))) {\n filters.push([match[0].trim()])\n }\n\n this.initial = initial\n this.filters = filters.map(str => new Filter(str, strictFilters))\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 Token from 'src/parser/token'\n\nexport default class extends Template implements ITemplate {\n str: string\n constructor (token: Token) {\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'\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 = []\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'\n\nconst re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n\nexport default {\n parse: function (token) {\n const match = token.args.match(re)\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (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}\n","/*\n * Call functions in serial until someone resolved.\n * @param iterable the array to iterate with.\n * @param iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function anySeries (iterable, iteratee) {\n let ret: Promise = Promise.reject(new Error('init'))\n iterable.forEach(function (item, idx) {\n ret = ret.catch(() => iteratee(item, idx, iterable))\n })\n return ret\n}\n\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 (iterable, iteratee) {\n let ret: Promise = Promise.resolve('init')\n const result = []\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 { RenderBreakError } from 'src/util/error'\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\nfunction parse (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\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 = 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 => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n}\n\nasync function render (scope, hash) {\n let collection = evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]])\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, i) => {\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 instanceof 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\nexport default { parse, render }\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'\n\nconst re = new RegExp(`(${identifier.source})`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = tagToken.args.match(re)\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}\n","import { evalExp } from 'src/render/syntax'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p = []\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:when', token => {\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 => 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) {\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}\n","export default {\n parse: function (tagToken, remainTokens) {\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\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}\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'\n\nconst staticFileRE = /[^\\s,]+/\nconst withRE = new RegExp(`with\\\\s+(${value.source})`)\n\nexport default {\n parse: function (token) {\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, 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'\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(identifier)\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}\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\n\nconst groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\nconst candidatesRE = new RegExp(rValue.source, 'g')\n\nexport default {\n parse: function (tagToken) {\n let match = groupRE.exec(tagToken.args)\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) {\n const group = evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n\n const groups = scope.opts.groups = scope.opts.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'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', token => {\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 => 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) {\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}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes'\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}\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'\n\nconst staticFileRE = /\\S+/\n\nexport default {\n parse: function (token, remainTokens) {\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, 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}\n","import BlockMode from 'src/scope/block-mode'\n\nexport default {\n parse: function (token, remainTokens) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n\n this.tpls = []\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', tpl => 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) {\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}\n","export default {\n parse: function (tagToken, remainTokens) {\n this.tokens = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\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.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'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n parse: function (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\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 = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => 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: async function (scope, 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 => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row\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}\n","import { evalExp, isFalsy } from 'src/render/syntax'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream = 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) {\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}\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) {\n return String(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str) {\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 => escape(unescape(str)),\n 'newline_to_br': v => v.replace(/\\n/g, '
'),\n 'strip_html': v => String(v).replace(/|||<.*?>/g, '')\n}\n","export default {\n 'append': (v, arg) => v + arg,\n 'prepend': (v, arg) => arg + v,\n 'capitalize': str => String(str).charAt(0).toUpperCase() + str.slice(1),\n 'concat': (v, arg) => Array.prototype.concat.call(v, arg),\n 'lstrip': v => String(v).replace(/^\\s+/, ''),\n 'downcase': v => v.toLowerCase(),\n 'upcase': str => String(str).toUpperCase(),\n 'remove': (v, arg) => v.split(arg).join(''),\n 'remove_first': (v, l) => v.replace(l, ''),\n 'replace': (v, pattern, replacement) =>\n String(v).split(pattern).join(replacement),\n 'replace_first': (v, arg1, arg2) => String(v).replace(arg1, arg2),\n 'rstrip': str => String(str).replace(/\\s+$/, ''),\n 'split': (v, arg) => String(v).split(arg),\n 'strip': (v) => String(v).trim(),\n 'strip_newlines': v => String(v).replace(/\\n/g, ''),\n 'truncate': (v, l, o) => {\n v = String(v)\n o = (o === undefined) ? '...' : o\n l = l || 16\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v, l, o) => {\n if (o === undefined) o = '...'\n const arr = v.split(' ')\n let ret = arr.slice(0, l).join(' ')\n if (arr.length > l) ret += o\n return ret\n }\n}\n","export default {\n 'abs': v => Math.abs(v),\n 'ceil': v => Math.ceil(v),\n 'divided_by': (v, arg) => v / arg,\n 'floor': v => Math.floor(v),\n 'minus': bindFixed((v, arg) => v - arg),\n 'modulo': bindFixed((v, arg) => v % arg),\n 'round': (v, arg) => {\n const amp = Math.pow(10, arg || 0)\n return Math.round(v * amp) / amp\n },\n 'plus': bindFixed((v, arg) => Number(v) + Number(arg)),\n 'times': (v, arg) => v * arg\n}\n\nfunction getFixed (v) {\n const p = String(v).split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction bindFixed (cb) {\n return (l, r) => {\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 => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': x => x.split(' ').map(encodeURIComponent).join('+')\n}\n","import { last } from 'src/util/underscore'\n\nexport default {\n 'join': (v, arg) => v.join(arg === undefined ? ' ' : arg),\n 'last': v => last(v),\n 'first': v => v[0],\n 'map': (arr, arg) => arr.map(v => v[arg]),\n 'reverse': v => v.reverse(),\n 'sort': (v, arg) => v.sort(arg),\n 'size': v => v.length,\n 'slice': (v, begin, length) => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'uniq': function (arr) {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(val)) {\n return false\n }\n u[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) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d) {\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) {\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, startDay) {\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) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d) {\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) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst formatCodes = {\n a: function (d) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d) {\n return dayNames[d.getDay()]\n },\n b: function (d) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d) {\n return monthNames[d.getMonth()]\n },\n c: function (d) {\n return d.toLocaleString()\n },\n C: function (d) {\n return _date.century(d)\n },\n d: function (d) {\n return padStart(d.getDate(), 2, '0')\n },\n e: function (d) {\n return padStart(d.getDate(), 2)\n },\n H: function (d) {\n return padStart(d.getHours(), 2, '0')\n },\n I: function (d) {\n return padStart(String(d.getHours() % 12 || 12), 2, '0')\n },\n j: function (d) {\n return padStart(_date.getDayOfYear(d), 3, '0')\n },\n k: function (d) {\n return padStart(d.getHours(), 2)\n },\n l: function (d) {\n return padStart(String(d.getHours() % 12 || 12), 2)\n },\n L: function (d) {\n return padStart(d.getMilliseconds(), 3, '0')\n },\n m: function (d) {\n return padStart(d.getMonth() + 1, 2, '0')\n },\n M: function (d) {\n return padStart(d.getMinutes(), 2, '0')\n },\n p: function (d) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d) {\n return _date.getSuffix(d)\n },\n s: function (d) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d) {\n return padStart(d.getSeconds(), 2, '0')\n },\n u: function (d) {\n return d.getDay() || 7\n },\n U: function (d) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d) {\n return d.getDay()\n },\n W: function (d) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d) {\n return d.toLocaleDateString()\n },\n X: function (d) {\n return d.toLocaleTimeString()\n },\n y: function (d) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d) {\n return d.getFullYear()\n },\n z: function (d) {\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, format) {\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.call(this, d) : '%' + ch\n }\n}\n","import strftime from 'src/util/strftime'\nimport { isString } from 'src/util/underscore'\n\nexport default {\n 'date': (v, arg) => {\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) {\n return date instanceof Date && !isNaN(date.getTime())\n}\n","import { isTruthy } from 'src/render/syntax'\n\nexport default {\n 'default': (v, arg) => 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'\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, NormalizedOptions, defaultOptions, normalize } from './liquid-options'\n\nexport default class Liquid {\n public options: NormalizedOptions\n private cache: object\n private parser: Parser\n private renderer: Render\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n const options = { ...defaultOptions, ...normalize(opts) }\n if (options.cache) {\n this.cache = {}\n }\n this.options = options\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, 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, 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, filter) {\n return Filter.register(name, filter)\n }\n registerTag (name: string, tag: ITagImplOptions) {\n return Tag.register(name, tag)\n }\n plugin (plugin) {\n return plugin.call(this, Liquid)\n }\n express () {\n const self = this\n return function (filePath: string, ctx: object, cb: (err: Error, 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":["range","tslib_1.__extends","_.create","_\r\n .range","_.padStart","_.isArray","_.isString","BlockMode","_.assign","_.last","value","_.isObject","filter","_.isNil","_.isFunction","lexical.isInteger","last","lexical.tagLine","operators","lexical.operators","lexical.quoteBalanced","lexical.rangeLine","lexical.isLiteral","lexical.parseLiteral","lexical.isVariable","lexical.value","lexical.filterLine","lexical.matchValue","lexical.filter","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/parser/lexical.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/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.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) {\n return function (...args) {\n return new Promise((resolve, reject) => {\n fn(...args, (err, result) => {\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 = []\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 (object, iteratee: ((val: any, key: string, obj: object) => boolean | void)) {\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\n/*\n * Assigns own enumerable string keyed properties of source objects to the destination object.\n * Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * Note: This method mutates object and is loosely based on Object.assign.\n *\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @return {Object} Returns object.\n */\nexport function assign (obj: object, ...srcs: object[]): object {\n obj = isObject(obj) ? obj : {}\n srcs.forEach(src => binaryAssign(obj, src))\n return obj\n}\n\nfunction binaryAssign (target: object, src: object): object {\n for (const key in src) if (src.hasOwnProperty(key)) target[key] = src[key]\n return target\n}\n\nexport function last (arr: any[]): any {\n return arr[arr.length - 1]\n}\n\nexport function uniq (arr: any[]): any[] {\n const u = {}\n const a = []\n for (let i = 0, l = arr.length; i < l; ++i) {\n if (u.hasOwnProperty(arr[i])) {\n continue\n }\n a.push(arr[i])\n u[arr[i]] = 1\n }\n return a\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 (arguments.length === 1) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr = []\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","// 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 integer = /-?\\d+/\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 literalLine = new RegExp(`^${literal.source}$`, 'i')\nexport const variableLine = new RegExp(`^${variable.source}$`)\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}$`)\nexport const integerLine = new RegExp(`^${integer.source}$`)\n\n// filter related\nexport const valueDeclaration = new RegExp(`(?:${identifier.source}\\\\s*:\\\\s*)?${value.source}`)\nexport const valueList = new RegExp(`${valueDeclaration.source}(\\\\s*,\\\\s*${valueDeclaration.source})*`)\nexport const filter = new RegExp(`${identifier.source}(?:\\\\s*:\\\\s*${valueList.source})?`, 'g')\nexport const filterCapture = new RegExp(`(${identifier.source})(?:\\\\s*:\\\\s*(${valueList.source}))?`)\nexport const filterLine = new RegExp(`^${filterCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isInteger (str) {\n return integerLine.test(str)\n}\n\nexport function isLiteral (str) {\n return literalLine.test(str)\n}\n\nexport function isRange (str) {\n return rangeLine.test(str)\n}\n\nexport function isVariable (str) {\n return variableLine.test(str)\n}\n\nexport function matchValue (str) {\n return value.exec(str)\n}\n\nexport function parseLiteral (str) {\n let res = str.match(numberLine)\n if (res) {\n return Number(str)\n }\n res = str.match(boolLine)\n if (res) {\n return str.toLowerCase() === 'true'\n }\n res = str.match(quotedLine)\n if (res) {\n return str.slice(1, -1)\n }\n throw new TypeError(`cannot parse '${str}' as literal`)\n}\n","import * as _ from './underscore'\nimport Token from 'src/parser/token'\n\nfunction captureStack () {\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n}\n\nabstract class LiquidError {\n name: string\n message: string\n stack: string\n private file: string\n private input: string\n private token: Token\n private originalError: Error\n constructor (err, token) {\n this.input = token.input\n this.file = token.file\n this.originalError = err\n this.token = token\n }\n captureStackTrace (obj) {\n this.name = obj.constructor.name\n\n captureStack.call(obj)\n const err = this.originalError\n const context = mkContext(this.input, this.token.line)\n this.message = mkMessage(err.message, this.token)\n this.stack = this.message + '\\n' + context +\n '\\n' + (this.stack || this.message) +\n (err.stack ? '\\nFrom ' + err.stack : '')\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor (message, token) {\n super({ message }, token)\n super.captureStackTrace(this)\n }\n}\nTokenizationError.prototype = _.create(Error.prototype) as any\nTokenizationError.prototype.constructor = TokenizationError\n\nexport class ParseError extends LiquidError {\n constructor (err, token) {\n super(err, token)\n this.message = err.message\n super.captureStackTrace(this)\n }\n}\nParseError.prototype = _.create(Error.prototype) as any\nParseError.prototype.constructor = ParseError\n\nexport class RenderError extends LiquidError {\n constructor (err, tpl) {\n super(err, tpl.token)\n this.message = err.message\n super.captureStackTrace(this)\n }\n}\nRenderError.prototype = _.create(Error.prototype) as any\nRenderError.prototype.constructor = RenderError\n\nexport class RenderBreakError {\n message: string\n resolvedHTML: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nRenderBreakError.prototype = _.create(Error.prototype) as any\nRenderBreakError.prototype.constructor = RenderBreakError\n\nexport class AssertionError {\n message: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nAssertionError.prototype = _.create(Error.prototype) as any\nAssertionError.prototype.constructor = AssertionError\n\nfunction mkContext (input, targetLine) {\n const lines = input.split('\\n')\n const begin = Math.max(targetLine - 2, 1)\n const end = Math.min(targetLine + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === targetLine) ? '>> ' : ' '\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, token) {\n msg = msg || ''\n if (token.file) {\n msg += ', file:' + token.file\n }\n if (token.line) {\n msg += `, line:${token.line}, col:${token.col}`\n }\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","import * 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 // eslint-disable-line\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 // eslint-disable-line\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 // eslint-disable-line\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 // eslint-disable-line\n /** ``trim_value_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_value_right?: boolean // eslint-disable-line\n /** `trim_value_left` is similar to `trim_value_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_value_left?: boolean // eslint-disable-line\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\nexport interface NormalizedOptions extends LiquidOptions {\n root?: string[]\n}\n\nexport const defaultOptions: NormalizedOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_value_right: false,\n trim_value_left: false,\n greedy: true,\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\nfunction normalizeStringArray (value: string | string[]): 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 * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport { NormalizedOptions, defaultOptions } from '../liquid-options'\nimport BlockMode from './block-mode'\n\nexport default class Scope {\n opts: NormalizedOptions\n contexts: Array\n blocks: object = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts: NormalizedOptions = defaultOptions) {\n this.opts = { ...defaultOptions, ...opts }\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => _.assign(ctx, val), _.create(null))\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 })\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 {\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 readProperty (obj, key) {\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) {\n str = String(str)\n const seq = []\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 (!lexical.isInteger(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) {\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) {\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, begin) {\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, path) {\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, filepath, ext) {\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 { LiquidOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: LiquidOptions) {\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) {\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_value_left\n}\n\nfunction shouldTrimRight (token: DelimitedToken, inRaw: boolean, options) {\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_value_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\n line: number\n col: number\n raw: string\n input: string\n file: string\n value: string\n constructor (raw, col, input, file, line) {\n this.col = col\n this.line = line\n this.raw = 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, begin, input, file, line) {\n super(str, begin, input, file, line)\n this.type = 'html'\n this.value = str\n }\n}\n","import Token from './token'\n\nexport default class DelimitedToken extends Token {\n trimLeft: boolean\n trimRight: boolean\n constructor (raw, pos, input, file, line) {\n super(raw, pos, input, file, line)\n this.trimLeft = raw[2] === '-'\n this.trimRight = raw[raw.length - 3] === '-'\n this.value = raw.slice(this.trimLeft ? 3 : 2, this.trimRight ? -3 : -2).trim()\n }\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, pos, input, file, line) {\n super(raw, pos, input, file, line)\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, pos, input, file, line) {\n super(raw, pos, input, file, line)\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 { LiquidOptions, defaultOptions } from 'src/liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: LiquidOptions\n constructor (options: LiquidOptions = defaultOptions) {\n this.options = options\n }\n tokenize (input: string, file?: string) {\n const tokens = []\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 const bin = input.substr(p, 2)\n if (state === ParseState.HTML) {\n if (bin === '{{' || bin === '{%') {\n if (buffer) tokens.push(new HTMLToken(buffer, col, input, file, line))\n buffer = bin\n line = curLine\n col = p - lineBegin + 1\n p += 2\n state = bin === '{{' ? ParseState.OUTPUT : ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && bin === '}}') {\n buffer += '}}'\n tokens.push(new OutputToken(buffer, col, input, file, line))\n p += 2\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n } else if (bin === '%}') {\n buffer += '%}'\n tokens.push(new TagToken(buffer, col, input, file, line))\n p += 2\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 new Error(`${t} \"${str}\" not closed`),\n new Token(buffer, col, input, file, line)\n )\n }\n if (buffer) tokens.push(new HTMLToken(buffer, col, input, file, line))\n\n whiteSpaceCtrl(tokens, this.options)\n return tokens\n }\n}\n","import { RenderBreakError, RenderError } from 'src/util/error'\nimport assert from 'src/util/assert'\n\nexport default class Render {\n async renderTemplates (templates, 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 instanceof RenderBreakError) {\n e.resolvedHTML = html\n throw e\n }\n throw e instanceof 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'\n\nconst operators = {\n '==': (l, r) => l === r,\n '!=': (l, r) => l !== r,\n '>': (l, r) => l !== null && r !== null && l > r,\n '<': (l, r) => l !== null && r !== null && l < r,\n '>=': (l, r) => l !== null && r !== null && l >= r,\n '<=': (l, r) => l !== null && r !== null && l <= r,\n 'contains': (l, r) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l, r) => isTruthy(l) && isTruthy(r),\n 'or': (l, r) => isTruthy(l) || isTruthy(r)\n}\n\nexport function evalExp (exp, scope) {\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 const range = []\n for (let j = low; j <= high; j++) {\n range.push(j)\n }\n return range\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str, scope) {\n str = str && str.trim()\n if (!str) return undefined\n\n if (lexical.isLiteral(str)) {\n return lexical.parseLiteral(str)\n }\n if (lexical.isVariable(str)) {\n return scope.get(str)\n }\n throw new TypeError(`cannot eval '${str}' as value`)\n}\n\nexport function isTruthy (val) {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val) {\n return val === false || undefined === val || val === null\n}\n","import { hashCapture } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\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, 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 Token from 'src/parser/token'\n\nexport default class Template {\n token: Token;\n constructor (token) {\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 token: TagToken\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 assert from 'src/util/assert'\nimport * as lexical from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\n\ntype impl = (value: any, ...args: any[]) => any\n\nconst valueRE = new RegExp(`${lexical.value.source}`, 'g')\n\nexport default class Filter {\n name: string\n impl: impl\n args: string[]\n private static impls: {[key: string]: impl} = {}\n\n constructor (str: string, strictFilters: boolean = false) {\n const match = lexical.filterLine.exec(str)\n assert(match, 'illegal filter: ' + str)\n\n const name = match[1]\n const argList = match[2] || ''\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 = this.parseArgs(argList)\n }\n parseArgs (argList: string): string[] {\n let match; const args = []\n while ((match = valueRE.exec(argList.trim()))) {\n const v = match[0]\n const re = new RegExp(`${v}\\\\s*:`, 'g')\n const keyMatch = re.exec(match.input)\n const currentMatchIsKey = keyMatch && keyMatch.index === match.index\n currentMatchIsKey ? args.push(`'${v}'`) : args.push(v)\n }\n return args\n }\n render (value: any, scope: Scope): any {\n const args = this.args.map(arg => evalValue(arg, scope))\n args.unshift(value)\n return this.impl.apply(null, args)\n }\n static register (name, filter) {\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'\n\ntype parseToken = (token: Token, remainTokens: Array) => ITemplate\ntype eventHandler = ((arg?: Token | ITemplate) => void)\n\nexport default class ParseStream {\n private tokens: Array\n private handlers: {[key: string]: eventHandler} = {}\n private stopRequested: boolean\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: eventHandler) {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: Token | ITemplate) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n }\n start () {\n this.trigger('start')\n let token\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' &&\n 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 * as lexical from 'src/parser/lexical'\nimport assert from 'src/util/assert'\nimport Filter from './filter'\nimport Scope from 'src/scope/scope'\n\nexport default class {\n initial: any\n filters: Array\n constructor (str: string, strictFilters?: boolean) {\n let match = lexical.matchValue(str)\n assert(match, `illegal value string: ${str}`)\n\n const initial = match[0]\n str = str.substr(match.index + match[0].length)\n\n const filters = []\n while ((match = lexical.filter.exec(str))) {\n filters.push([match[0].trim()])\n }\n\n this.initial = initial\n this.filters = filters.map(str => new Filter(str, strictFilters))\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 Token from 'src/parser/token'\n\nexport default class extends Template implements ITemplate {\n str: string\n constructor (token: Token) {\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'\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 = []\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'\n\nconst re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n\nexport default {\n parse: function (token) {\n const match = token.args.match(re)\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (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}\n","/*\n * Call functions in serial until someone resolved.\n * @param iterable the array to iterate with.\n * @param iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function anySeries (iterable, iteratee) {\n let ret: Promise = Promise.reject(new Error('init'))\n iterable.forEach(function (item, idx) {\n ret = ret.catch(() => iteratee(item, idx, iterable))\n })\n return ret\n}\n\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 (iterable, iteratee) {\n let ret: Promise = Promise.resolve('init')\n const result = []\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 { RenderBreakError } from 'src/util/error'\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\nfunction parse (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\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 = 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 => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n}\n\nasync function render (scope, hash) {\n let collection = evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]])\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, i) => {\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 instanceof 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\nexport default { parse, render }\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'\n\nconst re = new RegExp(`(${identifier.source})`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = tagToken.args.match(re)\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}\n","import { evalExp } from 'src/render/syntax'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p = []\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:when', token => {\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 => 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) {\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}\n","export default {\n parse: function (tagToken, remainTokens) {\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\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}\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'\n\nconst staticFileRE = /[^\\s,]+/\nconst withRE = new RegExp(`with\\\\s+(${value.source})`)\n\nexport default {\n parse: function (token) {\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, 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'\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(identifier)\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}\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\n\nconst groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\nconst candidatesRE = new RegExp(rValue.source, 'g')\n\nexport default {\n parse: function (tagToken) {\n let match = groupRE.exec(tagToken.args)\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) {\n const group = evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n\n const groups = scope.opts.groups = scope.opts.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'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', token => {\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 => 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) {\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}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes'\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}\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'\n\nconst staticFileRE = /\\S+/\n\nexport default {\n parse: function (token, remainTokens) {\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, 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}\n","import BlockMode from 'src/scope/block-mode'\n\nexport default {\n parse: function (token, remainTokens) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n\n this.tpls = []\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', tpl => 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) {\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}\n","export default {\n parse: function (tagToken, remainTokens) {\n this.tokens = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\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.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'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n parse: function (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\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 = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => 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: async function (scope, 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 => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row\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}\n","import { evalExp, isFalsy } from 'src/render/syntax'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream = 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) {\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}\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) {\n return String(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str) {\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 => escape(unescape(str)),\n 'newline_to_br': v => v.replace(/\\n/g, '
'),\n 'strip_html': v => String(v).replace(/|||<.*?>/g, '')\n}\n","export default {\n 'append': (v, arg) => v + arg,\n 'prepend': (v, arg) => arg + v,\n 'capitalize': str => String(str).charAt(0).toUpperCase() + str.slice(1),\n 'concat': (v, arg) => Array.prototype.concat.call(v, arg),\n 'lstrip': v => String(v).replace(/^\\s+/, ''),\n 'downcase': v => v.toLowerCase(),\n 'upcase': str => String(str).toUpperCase(),\n 'remove': (v, arg) => v.split(arg).join(''),\n 'remove_first': (v, l) => v.replace(l, ''),\n 'replace': (v, pattern, replacement) =>\n String(v).split(pattern).join(replacement),\n 'replace_first': (v, arg1, arg2) => String(v).replace(arg1, arg2),\n 'rstrip': str => String(str).replace(/\\s+$/, ''),\n 'split': (v, arg) => String(v).split(arg),\n 'strip': (v) => String(v).trim(),\n 'strip_newlines': v => String(v).replace(/\\n/g, ''),\n 'truncate': (v, l, o) => {\n v = String(v)\n o = (o === undefined) ? '...' : o\n l = l || 16\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v, l, o) => {\n if (o === undefined) o = '...'\n const arr = v.split(' ')\n let ret = arr.slice(0, l).join(' ')\n if (arr.length > l) ret += o\n return ret\n }\n}\n","export default {\n 'abs': v => Math.abs(v),\n 'ceil': v => Math.ceil(v),\n 'divided_by': (v, arg) => v / arg,\n 'floor': v => Math.floor(v),\n 'minus': bindFixed((v, arg) => v - arg),\n 'modulo': bindFixed((v, arg) => v % arg),\n 'round': (v, arg) => {\n const amp = Math.pow(10, arg || 0)\n return Math.round(v * amp) / amp\n },\n 'plus': bindFixed((v, arg) => Number(v) + Number(arg)),\n 'times': (v, arg) => v * arg\n}\n\nfunction getFixed (v) {\n const p = String(v).split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction bindFixed (cb) {\n return (l, r) => {\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 => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': x => x.split(' ').map(encodeURIComponent).join('+')\n}\n","import { last } from 'src/util/underscore'\n\nexport default {\n 'join': (v, arg) => v.join(arg === undefined ? ' ' : arg),\n 'last': v => last(v),\n 'first': v => v[0],\n 'map': (arr, arg) => arr.map(v => v[arg]),\n 'reverse': v => v.reverse(),\n 'sort': (v, arg) => v.sort(arg),\n 'size': v => v.length,\n 'slice': (v, begin, length) => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'uniq': function (arr) {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(val)) {\n return false\n }\n u[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) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d) {\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) {\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, startDay) {\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) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d) {\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) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst formatCodes = {\n a: function (d) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d) {\n return dayNames[d.getDay()]\n },\n b: function (d) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d) {\n return monthNames[d.getMonth()]\n },\n c: function (d) {\n return d.toLocaleString()\n },\n C: function (d) {\n return _date.century(d)\n },\n d: function (d) {\n return padStart(d.getDate(), 2, '0')\n },\n e: function (d) {\n return padStart(d.getDate(), 2)\n },\n H: function (d) {\n return padStart(d.getHours(), 2, '0')\n },\n I: function (d) {\n return padStart(String(d.getHours() % 12 || 12), 2, '0')\n },\n j: function (d) {\n return padStart(_date.getDayOfYear(d), 3, '0')\n },\n k: function (d) {\n return padStart(d.getHours(), 2)\n },\n l: function (d) {\n return padStart(String(d.getHours() % 12 || 12), 2)\n },\n L: function (d) {\n return padStart(d.getMilliseconds(), 3, '0')\n },\n m: function (d) {\n return padStart(d.getMonth() + 1, 2, '0')\n },\n M: function (d) {\n return padStart(d.getMinutes(), 2, '0')\n },\n p: function (d) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d) {\n return _date.getSuffix(d)\n },\n s: function (d) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d) {\n return padStart(d.getSeconds(), 2, '0')\n },\n u: function (d) {\n return d.getDay() || 7\n },\n U: function (d) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d) {\n return d.getDay()\n },\n W: function (d) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d) {\n return d.toLocaleDateString()\n },\n X: function (d) {\n return d.toLocaleTimeString()\n },\n y: function (d) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d) {\n return d.getFullYear()\n },\n z: function (d) {\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, format) {\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.call(this, d) : '%' + ch\n }\n}\n","import strftime from 'src/util/strftime'\nimport { isString } from 'src/util/underscore'\n\nexport default {\n 'date': (v, arg) => {\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) {\n return date instanceof Date && !isNaN(date.getTime())\n}\n","import { isTruthy } from 'src/render/syntax'\n\nexport default {\n 'default': (v, arg) => 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'\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, NormalizedOptions, defaultOptions, normalize } from './liquid-options'\n\nexport default class Liquid {\n public options: NormalizedOptions\n private cache: object\n private parser: Parser\n private renderer: Render\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n const options = { ...defaultOptions, ...normalize(opts) }\n if (options.cache) {\n this.cache = {}\n }\n this.options = options\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, 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, 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, filter) {\n return Filter.register(name, filter)\n }\n registerTag (name: string, tag: ITagImplOptions) {\n return Tag.register(name, tag)\n }\n plugin (plugin) {\n return plugin.call(this, Liquid)\n }\n express () {\n const self = this\n return function (filePath: string, ctx: object, cb: (err: Error, 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":["range","tslib_1.__extends","_.create","_\r\n .range","_.padStart","_.isArray","_.isString","BlockMode","_.assign","_.last","value","_.isObject","filter","_.isNil","_.isFunction","lexical.isInteger","last","lexical.tagLine","operators","lexical.operators","lexical.quoteBalanced","lexical.rangeLine","lexical.isLiteral","lexical.parseLiteral","lexical.isVariable","lexical.value","lexical.filterLine","lexical.matchValue","lexical.filter","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 d9d7bd7e0..607025ec3 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 n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)};function e(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}var c=function(){return(c=Object.assign||function(t){for(var e,r=1,n=arguments.length;rs[0]&&e[1]=|<|>|\s+contains\s+/];function G(){Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}var V=function(){function t(t,e){this.input=e.input,this.line=e.line,this.file=e.file,this.originalError=t,this.token=e}return t.prototype.captureStackTrace=function(t){this.name=t.constructor.name,G.call(t);var e,i,o,r,s,n=this.originalError,u=(e=this.input,i=this.line,o=e.split("\n"),r=Math.max(i-2,1),s=Math.min(i+3,o.length),function(t,e,r){1===arguments.length&&(e=t,t=0),r=r||1;for(var n=[],i=t;i> ":" ",r=w(String(t),String(s).length),n=o[t-1];return""+e+r+"| "+n}).join("\n"));this.message=function(t,e){t=t||"",e.file&&(t+=", file:"+e.file);e.line&&(t+=", line:"+e.line);return t}(n.message,this.token),this.stack=this.message+"\n"+u+"\n"+(this.stack||this.message)+(n.stack?"\nFrom "+n.stack:"")},t}(),W=function(n){function t(t,e){var r=n.call(this,{message:t},e)||this;return n.prototype.captureStackTrace.call(r,r),r}return e(t,n),t}(V);W.prototype=a(Error.prototype),W.prototype.constructor=W;var B=function(n){function t(t,e){var r=n.call(this,t,e)||this;return r.message=t.message,n.prototype.captureStackTrace.call(r,r),r}return e(t,n),t}(V);B.prototype=a(Error.prototype),B.prototype.constructor=B;var J=function(n){function t(t,e){var r=n.call(this,t,e.token)||this;return r.message=t.message,n.prototype.captureStackTrace.call(r,r),r}return e(t,n),t}(V);J.prototype=a(Error.prototype),J.prototype.constructor=J;var X=function(t){G.call(this),this.message=t+""};X.prototype=a(Error.prototype),X.prototype.constructor=X;var K=function(t){G.call(this),this.message=t+""};function Q(t,e){if(!t)throw new K(e=e||"expect "+t+" to be true")}K.prototype=a(Error.prototype),K.prototype.constructor=K;var Z,tt,et={root:["."],cache:!1,extname:"",dynamicPartials:!0,trim_tag_right:!1,trim_tag_left:!1,trim_value_right:!1,trim_value_left:!1,greedy:!0,strict_filters:!1,strict_variables:!1};function rt(t){var e;return(t=t||{}).hasOwnProperty("root")&&(t.root=p(e=t.root)?e:l(e)?[e]:[]),t}(tt=Z||(Z={}))[tt.OUTPUT=0]="OUTPUT",tt[tt.STORE=1]="STORE";var nt=Z,it=function(){function t(t,e){void 0===t&&(t={}),void 0===e&&(e=et),this.blocks={},this.blockMode=nt.OUTPUT,this.opts=c({},et,e),this.contexts=[t||{}]}return t.prototype.getAll=function(){return this.contexts.reduce(function(t,e){return function(e){for(var t=[],r=1;r":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(n),r=u,[4,this.liquid.renderer.renderTemplates(this.templates,c)];case 1:return u=r+t.sent(),u+="",c.pop(n),[2,u]}})})})];case 1:return t.sent(),0"),[2,u]}})})}},unless:{parse:function(t,e){var r,n=this;this.templates=[],this.elseTemplates=[];var i=this.liquid.parser.parseStream(e).on("start",function(){r=n.templates,n.cond=t.args}).on("tag:else",function(){return r=n.elseTemplates}).on("tag:endunless",function(){return i.stop()}).on("template",function(t){return r.push(t)}).on("end",function(){throw new Error("tag "+t.raw+" not closed")});i.start()},render:function(t){return St(Tt(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 X("break")})})}},continue:{render:function(){return h(this,void 0,void 0,function(){return d(this,function(t){throw new X("continue")})})}}},se={"&":"&","<":"<",">":">",'"':""","'":"'"},ue={"&":"&","<":"<",">":">",""":'"',"'":"'"};function ae(t){return String(t).replace(/&|<|>|"|'/g,function(t){return se[t]})}var ce={escape:ae,escape_once:function(t){return ae(String(t).replace(/&(amp|lt|gt|#34|#39);/g,function(t){return ue[t]}))},newline_to_br:function(t){return t.replace(/\n/g,"
")},strip_html:function(t){return String(t).replace(/|||<.*?>/g,"")}},le={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)},concat:function(t,e){return Array.prototype.concat.call(t,e)},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,r){return String(t).split(e).join(r)},replace_first:function(t,e,r){return String(t).replace(e,r)},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,r){return r=void 0===r?"...":r,e=e||16,(t=String(t)).length<=e?t:t.substr(0,e-r.length)+r},truncatewords:function(t,e,r){void 0===r&&(r="...");var n=t.split(" "),i=n.slice(0,e).join(" ");return n.length>e&&(i+=r),i}},fe={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:he(function(t,e){return t-e}),modulo:he(function(t,e){return t%e}),round:function(t,e){var r=Math.pow(10,e||0);return Math.round(t*r)/r},plus:he(function(t,e){return Number(t)+Number(e)}),times:function(t,e){return t*e}};function pe(t){var e=String(t).split(".");return 1s[0]&&e[1]=|<|>|\s+contains\s+/];function G(){Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}var V=function(){function t(t,e){this.input=e.input,this.file=e.file,this.originalError=t,this.token=e}return t.prototype.captureStackTrace=function(t){this.name=t.constructor.name,G.call(t);var e,i,o,r,s,n=this.originalError,u=(e=this.input,i=this.token.line,o=e.split("\n"),r=Math.max(i-2,1),s=Math.min(i+3,o.length),function(t,e,r){1===arguments.length&&(e=t,t=0),r=r||1;for(var n=[],i=t;i> ":" ",r=w(String(t),String(s).length),n=o[t-1];return""+e+r+"| "+n}).join("\n"));this.message=function(t,e){t=t||"",e.file&&(t+=", file:"+e.file);e.line&&(t+=", line:"+e.line+", col:"+e.col);return t}(n.message,this.token),this.stack=this.message+"\n"+u+"\n"+(this.stack||this.message)+(n.stack?"\nFrom "+n.stack:"")},t}(),W=function(n){function t(t,e){var r=n.call(this,{message:t},e)||this;return n.prototype.captureStackTrace.call(r,r),r}return e(t,n),t}(V);W.prototype=a(Error.prototype),W.prototype.constructor=W;var B=function(n){function t(t,e){var r=n.call(this,t,e)||this;return r.message=t.message,n.prototype.captureStackTrace.call(r,r),r}return e(t,n),t}(V);B.prototype=a(Error.prototype),B.prototype.constructor=B;var J=function(n){function t(t,e){var r=n.call(this,t,e.token)||this;return r.message=t.message,n.prototype.captureStackTrace.call(r,r),r}return e(t,n),t}(V);J.prototype=a(Error.prototype),J.prototype.constructor=J;var X=function(t){G.call(this),this.message=t+""};X.prototype=a(Error.prototype),X.prototype.constructor=X;var K=function(t){G.call(this),this.message=t+""};function Q(t,e){if(!t)throw new K(e=e||"expect "+t+" to be true")}K.prototype=a(Error.prototype),K.prototype.constructor=K;var Z,tt,et={root:["."],cache:!1,extname:"",dynamicPartials:!0,trim_tag_right:!1,trim_tag_left:!1,trim_value_right:!1,trim_value_left:!1,greedy:!0,strict_filters:!1,strict_variables:!1};function rt(t){var e;return(t=t||{}).hasOwnProperty("root")&&(t.root=f(e=t.root)?e:l(e)?[e]:[]),t}(tt=Z||(Z={}))[tt.OUTPUT=0]="OUTPUT",tt[tt.STORE=1]="STORE";var nt=Z,it=function(){function t(t,e){void 0===t&&(t={}),void 0===e&&(e=et),this.blocks={},this.blockMode=nt.OUTPUT,this.opts=h({},et,e),this.contexts=[t||{}]}return t.prototype.getAll=function(){return this.contexts.reduce(function(t,e){return function(e){for(var t=[],r=1;r":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(n),r=u,[4,this.liquid.renderer.renderTemplates(this.templates,c)];case 1:return u=r+t.sent(),u+="",c.pop(n),[2,u]}})})})];case 1:return t.sent(),0"),[2,u]}})})}},unless:{parse:function(t,e){var r,n=this;this.templates=[],this.elseTemplates=[];var i=this.liquid.parser.parseStream(e).on("start",function(){r=n.templates,n.cond=t.args}).on("tag:else",function(){return r=n.elseTemplates}).on("tag:endunless",function(){return i.stop()}).on("template",function(t){return r.push(t)}).on("end",function(){throw new Error("tag "+t.raw+" not closed")});i.start()},render:function(t){return St(Tt(this.cond,t))?this.liquid.renderer.renderTemplates(this.templates,t):this.liquid.renderer.renderTemplates(this.elseTemplates,t)}},break:{render:function(){return d(this,void 0,void 0,function(){return g(this,function(t){throw new X("break")})})}},continue:{render:function(){return d(this,void 0,void 0,function(){return g(this,function(t){throw new X("continue")})})}}},se={"&":"&","<":"<",">":">",'"':""","'":"'"},ue={"&":"&","<":"<",">":">",""":'"',"'":"'"};function ae(t){return String(t).replace(/&|<|>|"|'/g,function(t){return se[t]})}var ce={escape:ae,escape_once:function(t){return ae(String(t).replace(/&(amp|lt|gt|#34|#39);/g,function(t){return ue[t]}))},newline_to_br:function(t){return t.replace(/\n/g,"
")},strip_html:function(t){return String(t).replace(/|||<.*?>/g,"")}},le={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)},concat:function(t,e){return Array.prototype.concat.call(t,e)},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,r){return String(t).split(e).join(r)},replace_first:function(t,e,r){return String(t).replace(e,r)},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,r){return r=void 0===r?"...":r,e=e||16,(t=String(t)).length<=e?t:t.substr(0,e-r.length)+r},truncatewords:function(t,e,r){void 0===r&&(r="...");var n=t.split(" "),i=n.slice(0,e).join(" ");return n.length>e&&(i+=r),i}},fe={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:he(function(t,e){return t-e}),modulo:he(function(t,e){return t%e}),round:function(t,e){var r=Math.pow(10,e||0);return Math.round(t*r)/r},plus:he(function(t,e){return Number(t)+Number(e)}),times:function(t,e){return t*e}};function pe(t){var e=String(t).split(".");return 1 {\n fn(...args, (err, result) => {\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 = []\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 (object, iteratee: ((val: any, key: string, obj: object) => boolean | void)) {\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\n/*\n * Assigns own enumerable string keyed properties of source objects to the destination object.\n * Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * Note: This method mutates object and is loosely based on Object.assign.\n *\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @return {Object} Returns object.\n */\nexport function assign (obj: object, ...srcs: object[]): object {\n obj = isObject(obj) ? obj : {}\n srcs.forEach(src => binaryAssign(obj, src))\n return obj\n}\n\nfunction binaryAssign (target: object, src: object): object {\n for (const key in src) if (src.hasOwnProperty(key)) target[key] = src[key]\n return target\n}\n\nexport function last (arr: any[]): any {\n return arr[arr.length - 1]\n}\n\nexport function uniq (arr: any[]): any[] {\n const u = {}\n const a = []\n for (let i = 0, l = arr.length; i < l; ++i) {\n if (u.hasOwnProperty(arr[i])) {\n continue\n }\n a.push(arr[i])\n u[arr[i]] = 1\n }\n return a\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 (arguments.length === 1) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr = []\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","// 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 integer = /-?\\d+/\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 literalLine = new RegExp(`^${literal.source}$`, 'i')\nexport const variableLine = new RegExp(`^${variable.source}$`)\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}$`)\nexport const integerLine = new RegExp(`^${integer.source}$`)\n\n// filter related\nexport const valueDeclaration = new RegExp(`(?:${identifier.source}\\\\s*:\\\\s*)?${value.source}`)\nexport const valueList = new RegExp(`${valueDeclaration.source}(\\\\s*,\\\\s*${valueDeclaration.source})*`)\nexport const filter = new RegExp(`${identifier.source}(?:\\\\s*:\\\\s*${valueList.source})?`, 'g')\nexport const filterCapture = new RegExp(`(${identifier.source})(?:\\\\s*:\\\\s*(${valueList.source}))?`)\nexport const filterLine = new RegExp(`^${filterCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isInteger (str) {\n return integerLine.test(str)\n}\n\nexport function isLiteral (str) {\n return literalLine.test(str)\n}\n\nexport function isRange (str) {\n return rangeLine.test(str)\n}\n\nexport function isVariable (str) {\n return variableLine.test(str)\n}\n\nexport function matchValue (str) {\n return value.exec(str)\n}\n\nexport function parseLiteral (str) {\n let res = str.match(numberLine)\n if (res) {\n return Number(str)\n }\n res = str.match(boolLine)\n if (res) {\n return str.toLowerCase() === 'true'\n }\n res = str.match(quotedLine)\n if (res) {\n return str.slice(1, -1)\n }\n throw new TypeError(`cannot parse '${str}' as literal`)\n}\n","import * as _ from './underscore'\nimport Token from 'src/parser/token'\n\nfunction captureStack () {\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n}\n\nabstract class LiquidError {\n name: string\n message: string\n stack: string\n private line: string\n private file: string\n private input: string\n private token: Token\n private originalError: Error\n constructor (err, token) {\n this.input = token.input\n this.line = token.line\n this.file = token.file\n this.originalError = err\n this.token = token\n }\n captureStackTrace (obj) {\n this.name = obj.constructor.name\n\n captureStack.call(obj)\n const err = this.originalError\n const context = mkContext(this.input, this.line)\n this.message = mkMessage(err.message, this.token)\n this.stack = this.message + '\\n' + context +\n '\\n' + (this.stack || this.message) +\n (err.stack ? '\\nFrom ' + err.stack : '')\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor (message, token) {\n super({ message }, token)\n super.captureStackTrace(this)\n }\n}\nTokenizationError.prototype = _.create(Error.prototype) as any\nTokenizationError.prototype.constructor = TokenizationError\n\nexport class ParseError extends LiquidError {\n constructor (err, token) {\n super(err, token)\n this.message = err.message\n super.captureStackTrace(this)\n }\n}\nParseError.prototype = _.create(Error.prototype) as any\nParseError.prototype.constructor = ParseError\n\nexport class RenderError extends LiquidError {\n constructor (err, tpl) {\n super(err, tpl.token)\n this.message = err.message\n super.captureStackTrace(this)\n }\n}\nRenderError.prototype = _.create(Error.prototype) as any\nRenderError.prototype.constructor = RenderError\n\nexport class RenderBreakError {\n message: string\n resolvedHTML: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nRenderBreakError.prototype = _.create(Error.prototype) as any\nRenderBreakError.prototype.constructor = RenderBreakError\n\nexport class AssertionError {\n message: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nAssertionError.prototype = _.create(Error.prototype) as any\nAssertionError.prototype.constructor = AssertionError\n\nfunction mkContext (input, targetLine) {\n const lines = input.split('\\n')\n const begin = Math.max(targetLine - 2, 1)\n const end = Math.min(targetLine + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === targetLine) ? '>> ' : ' '\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, token) {\n msg = msg || ''\n if (token.file) {\n msg += ', file:' + token.file\n }\n if (token.line) {\n msg += ', line:' + token.line\n }\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","import * 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 // eslint-disable-line\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 // eslint-disable-line\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 // eslint-disable-line\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 // eslint-disable-line\n /** ``trim_value_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_value_right?: boolean // eslint-disable-line\n /** `trim_value_left` is similar to `trim_value_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_value_left?: boolean // eslint-disable-line\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\nexport interface NormalizedOptions extends LiquidOptions {\n root?: string[]\n}\n\nexport const defaultOptions: NormalizedOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_value_right: false,\n trim_value_left: false,\n greedy: true,\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\nfunction normalizeStringArray (value: string | string[]): 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 * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport { NormalizedOptions, defaultOptions } from '../liquid-options'\nimport BlockMode from './block-mode'\n\nexport default class Scope {\n opts: NormalizedOptions\n contexts: Array\n blocks: object = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts: NormalizedOptions = defaultOptions) {\n this.opts = { ...defaultOptions, ...opts }\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => _.assign(ctx, val), _.create(null))\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 })\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 {\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 readProperty (obj, key) {\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) {\n str = String(str)\n const seq = []\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 (!lexical.isInteger(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) {\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) {\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, begin) {\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, path) {\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, filepath, ext) {\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\n line: number\n raw: string\n input: string\n file: string\n value: string\n constructor (raw, pos, input, file, line) {\n this.line = line\n this.raw = 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 OutputToken from './output-token'\nimport { LiquidOptions, defaultOptions } from 'src/liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: LiquidOptions\n constructor (options: LiquidOptions = defaultOptions) {\n this.options = options\n }\n tokenize (input: string, file?: string) {\n const tokens = []\n let p = 0\n let line = 1\n let state = ParseState.HTML\n let buffer = ''\n let bufferBegin = 0\n\n while (p < input.length) {\n if (input[p] === '\\n') line++\n const bin = input.substr(p, 2)\n if (state === ParseState.HTML) {\n if (bin === '{{' || bin === '{%') {\n if (buffer) tokens.push(new HTMLToken(buffer, bufferBegin, input, file, line))\n buffer = bin\n bufferBegin = p\n p += 2\n state = bin === '{{' ? ParseState.OUTPUT : ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && bin === '}}') {\n buffer += '}}'\n tokens.push(new OutputToken(buffer, bufferBegin, input, file, line))\n p += 2\n buffer = ''\n bufferBegin = p\n state = ParseState.HTML\n continue\n } else if (bin === '%}') {\n buffer += '%}'\n tokens.push(new TagToken(buffer, bufferBegin, input, file, line))\n p += 2\n buffer = ''\n bufferBegin = p\n state = ParseState.HTML\n continue\n }\n buffer += input[p++]\n }\n if (buffer) tokens.push(new HTMLToken(buffer, bufferBegin, input, file, line))\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, begin, input, file, line) {\n super(str, begin, input, file, line)\n this.type = 'html'\n this.value = str\n }\n}\n","import Token from './token'\n\nexport default class DelimitedToken extends Token {\n trimLeft: boolean\n trimRight: boolean\n constructor (raw, pos, input, file, line) {\n super(raw, pos, input, file, line)\n this.trimLeft = raw[2] === '-'\n this.trimRight = raw[raw.length - 3] === '-'\n this.value = raw.slice(this.trimLeft ? 3 : 2, this.trimRight ? -3 : -2).trim()\n }\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, pos, input, file, line) {\n super(raw, pos, input, file, line)\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, pos, input, file, line) {\n super(raw, pos, input, file, line)\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 { LiquidOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: LiquidOptions) {\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) {\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_value_left\n}\n\nfunction shouldTrimRight (token: DelimitedToken, inRaw: boolean, options) {\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_value_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 { RenderBreakError, RenderError } from 'src/util/error'\nimport assert from 'src/util/assert'\n\nexport default class Render {\n async renderTemplates (templates, 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 instanceof RenderBreakError) {\n e.resolvedHTML = html\n throw e\n }\n throw e instanceof 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'\n\nconst operators = {\n '==': (l, r) => l === r,\n '!=': (l, r) => l !== r,\n '>': (l, r) => l !== null && r !== null && l > r,\n '<': (l, r) => l !== null && r !== null && l < r,\n '>=': (l, r) => l !== null && r !== null && l >= r,\n '<=': (l, r) => l !== null && r !== null && l <= r,\n 'contains': (l, r) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l, r) => isTruthy(l) && isTruthy(r),\n 'or': (l, r) => isTruthy(l) || isTruthy(r)\n}\n\nexport function evalExp (exp, scope) {\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 const range = []\n for (let j = low; j <= high; j++) {\n range.push(j)\n }\n return range\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str, scope) {\n str = str && str.trim()\n if (!str) return undefined\n\n if (lexical.isLiteral(str)) {\n return lexical.parseLiteral(str)\n }\n if (lexical.isVariable(str)) {\n return scope.get(str)\n }\n throw new TypeError(`cannot eval '${str}' as value`)\n}\n\nexport function isTruthy (val) {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val) {\n return val === false || undefined === val || val === null\n}\n","import { hashCapture } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\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, 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 Token from 'src/parser/token'\n\nexport default class Template {\n token: Token;\n constructor (token) {\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 token: TagToken\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 assert from 'src/util/assert'\nimport * as lexical from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\n\ntype impl = (value: any, ...args: any[]) => any\n\nconst valueRE = new RegExp(`${lexical.value.source}`, 'g')\n\nexport default class Filter {\n name: string\n impl: impl\n args: string[]\n private static impls: {[key: string]: impl} = {}\n\n constructor (str: string, strictFilters: boolean = false) {\n const match = lexical.filterLine.exec(str)\n assert(match, 'illegal filter: ' + str)\n\n const name = match[1]\n const argList = match[2] || ''\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 = this.parseArgs(argList)\n }\n parseArgs (argList: string): string[] {\n let match; const args = []\n while ((match = valueRE.exec(argList.trim()))) {\n const v = match[0]\n const re = new RegExp(`${v}\\\\s*:`, 'g')\n const keyMatch = re.exec(match.input)\n const currentMatchIsKey = keyMatch && keyMatch.index === match.index\n currentMatchIsKey ? args.push(`'${v}'`) : args.push(v)\n }\n return args\n }\n render (value: any, scope: Scope): any {\n const args = this.args.map(arg => evalValue(arg, scope))\n args.unshift(value)\n return this.impl.apply(null, args)\n }\n static register (name, filter) {\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'\n\ntype parseToken = (token: Token, remainTokens: Array) => ITemplate\ntype eventHandler = ((arg?: Token | ITemplate) => void)\n\nexport default class ParseStream {\n private tokens: Array\n private handlers: {[key: string]: eventHandler} = {}\n private stopRequested: boolean\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: eventHandler) {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: Token | ITemplate) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n }\n start () {\n this.trigger('start')\n let token\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' &&\n 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 * as lexical from 'src/parser/lexical'\nimport assert from 'src/util/assert'\nimport Filter from './filter'\nimport Scope from 'src/scope/scope'\n\nexport default class {\n initial: any\n filters: Array\n constructor (str: string, strictFilters?: boolean) {\n let match = lexical.matchValue(str)\n assert(match, `illegal value string: ${str}`)\n\n const initial = match[0]\n str = str.substr(match.index + match[0].length)\n\n const filters = []\n while ((match = lexical.filter.exec(str))) {\n filters.push([match[0].trim()])\n }\n\n this.initial = initial\n this.filters = filters.map(str => new Filter(str, strictFilters))\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 Token from 'src/parser/token'\n\nexport default class extends Template implements ITemplate {\n str: string\n constructor (token: Token) {\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'\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 = []\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'\n\nconst re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n\nexport default {\n parse: function (token) {\n const match = token.args.match(re)\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (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}\n","/*\n * Call functions in serial until someone resolved.\n * @param iterable the array to iterate with.\n * @param iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function anySeries (iterable, iteratee) {\n let ret: Promise = Promise.reject(new Error('init'))\n iterable.forEach(function (item, idx) {\n ret = ret.catch(() => iteratee(item, idx, iterable))\n })\n return ret\n}\n\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 (iterable, iteratee) {\n let ret: Promise = Promise.resolve('init')\n const result = []\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 { RenderBreakError } from 'src/util/error'\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\nfunction parse (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\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 = 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 => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n}\n\nasync function render (scope, hash) {\n let collection = evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]])\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, i) => {\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 instanceof 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\nexport default { parse, render }\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'\n\nconst re = new RegExp(`(${identifier.source})`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = tagToken.args.match(re)\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}\n","import { evalExp } from 'src/render/syntax'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p = []\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:when', token => {\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 => 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) {\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}\n","export default {\n parse: function (tagToken, remainTokens) {\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\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}\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'\n\nconst staticFileRE = /[^\\s,]+/\nconst withRE = new RegExp(`with\\\\s+(${value.source})`)\n\nexport default {\n parse: function (token) {\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, 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'\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(identifier)\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}\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\n\nconst groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\nconst candidatesRE = new RegExp(rValue.source, 'g')\n\nexport default {\n parse: function (tagToken) {\n let match = groupRE.exec(tagToken.args)\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) {\n const group = evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n\n const groups = scope.opts.groups = scope.opts.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'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', token => {\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 => 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) {\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}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes'\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}\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'\n\nconst staticFileRE = /\\S+/\n\nexport default {\n parse: function (token, remainTokens) {\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, 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}\n","import BlockMode from 'src/scope/block-mode'\n\nexport default {\n parse: function (token, remainTokens) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n\n this.tpls = []\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', tpl => 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) {\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}\n","export default {\n parse: function (tagToken, remainTokens) {\n this.tokens = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\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.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'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n parse: function (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\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 = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => 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: async function (scope, 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 => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row\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}\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'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream = 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) {\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}\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) {\n return String(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str) {\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 => escape(unescape(str)),\n 'newline_to_br': v => v.replace(/\\n/g, '
'),\n 'strip_html': v => String(v).replace(/|||<.*?>/g, '')\n}\n","export default {\n 'append': (v, arg) => v + arg,\n 'prepend': (v, arg) => arg + v,\n 'capitalize': str => String(str).charAt(0).toUpperCase() + str.slice(1),\n 'concat': (v, arg) => Array.prototype.concat.call(v, arg),\n 'lstrip': v => String(v).replace(/^\\s+/, ''),\n 'downcase': v => v.toLowerCase(),\n 'upcase': str => String(str).toUpperCase(),\n 'remove': (v, arg) => v.split(arg).join(''),\n 'remove_first': (v, l) => v.replace(l, ''),\n 'replace': (v, pattern, replacement) =>\n String(v).split(pattern).join(replacement),\n 'replace_first': (v, arg1, arg2) => String(v).replace(arg1, arg2),\n 'rstrip': str => String(str).replace(/\\s+$/, ''),\n 'split': (v, arg) => String(v).split(arg),\n 'strip': (v) => String(v).trim(),\n 'strip_newlines': v => String(v).replace(/\\n/g, ''),\n 'truncate': (v, l, o) => {\n v = String(v)\n o = (o === undefined) ? '...' : o\n l = l || 16\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v, l, o) => {\n if (o === undefined) o = '...'\n const arr = v.split(' ')\n let ret = arr.slice(0, l).join(' ')\n if (arr.length > l) ret += o\n return ret\n }\n}\n","export default {\n 'abs': v => Math.abs(v),\n 'ceil': v => Math.ceil(v),\n 'divided_by': (v, arg) => v / arg,\n 'floor': v => Math.floor(v),\n 'minus': bindFixed((v, arg) => v - arg),\n 'modulo': bindFixed((v, arg) => v % arg),\n 'round': (v, arg) => {\n const amp = Math.pow(10, arg || 0)\n return Math.round(v * amp) / amp\n },\n 'plus': bindFixed((v, arg) => Number(v) + Number(arg)),\n 'times': (v, arg) => v * arg\n}\n\nfunction getFixed (v) {\n const p = String(v).split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction bindFixed (cb) {\n return (l, r) => {\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 => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': x => x.split(' ').map(encodeURIComponent).join('+')\n}\n","import { last } from 'src/util/underscore'\n\nexport default {\n 'join': (v, arg) => v.join(arg === undefined ? ' ' : arg),\n 'last': v => last(v),\n 'first': v => v[0],\n 'map': (arr, arg) => arr.map(v => v[arg]),\n 'reverse': v => v.reverse(),\n 'sort': (v, arg) => v.sort(arg),\n 'size': v => v.length,\n 'slice': (v, begin, length) => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'uniq': function (arr) {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(val)) {\n return false\n }\n u[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) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d) {\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) {\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, startDay) {\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) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d) {\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) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst formatCodes = {\n a: function (d) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d) {\n return dayNames[d.getDay()]\n },\n b: function (d) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d) {\n return monthNames[d.getMonth()]\n },\n c: function (d) {\n return d.toLocaleString()\n },\n C: function (d) {\n return _date.century(d)\n },\n d: function (d) {\n return padStart(d.getDate(), 2, '0')\n },\n e: function (d) {\n return padStart(d.getDate(), 2)\n },\n H: function (d) {\n return padStart(d.getHours(), 2, '0')\n },\n I: function (d) {\n return padStart(String(d.getHours() % 12 || 12), 2, '0')\n },\n j: function (d) {\n return padStart(_date.getDayOfYear(d), 3, '0')\n },\n k: function (d) {\n return padStart(d.getHours(), 2)\n },\n l: function (d) {\n return padStart(String(d.getHours() % 12 || 12), 2)\n },\n L: function (d) {\n return padStart(d.getMilliseconds(), 3, '0')\n },\n m: function (d) {\n return padStart(d.getMonth() + 1, 2, '0')\n },\n M: function (d) {\n return padStart(d.getMinutes(), 2, '0')\n },\n p: function (d) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d) {\n return _date.getSuffix(d)\n },\n s: function (d) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d) {\n return padStart(d.getSeconds(), 2, '0')\n },\n u: function (d) {\n return d.getDay() || 7\n },\n U: function (d) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d) {\n return d.getDay()\n },\n W: function (d) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d) {\n return d.toLocaleDateString()\n },\n X: function (d) {\n return d.toLocaleTimeString()\n },\n y: function (d) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d) {\n return d.getFullYear()\n },\n z: function (d) {\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, format) {\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.call(this, 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, arg) => {\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) {\n return date instanceof Date && !isNaN(date.getTime())\n}\n","import { isTruthy } from 'src/render/syntax'\n\nexport default {\n 'default': (v, arg) => 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'\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, NormalizedOptions, defaultOptions, normalize } from './liquid-options'\n\nexport default class Liquid {\n public options: NormalizedOptions\n private cache: object\n private parser: Parser\n private renderer: Render\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n const options = { ...defaultOptions, ...normalize(opts) }\n if (options.cache) {\n this.cache = {}\n }\n this.options = options\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, 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, 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, filter) {\n return Filter.register(name, filter)\n }\n registerTag (name: string, tag: ITagImplOptions) {\n return Tag.register(name, tag)\n }\n plugin (plugin) {\n return plugin.call(this, Liquid)\n }\n express () {\n const self = this\n return function (filePath: string, ctx: object, cb: (err: Error, 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","create","proto","isArray","forOwn","object","iteratee","k","hasOwnProperty","last","arr","length","type","padStart","str","ch","n","String","quoted","RegExp","source","quoteBalanced","number","bool","identifier","subscript","literal","variable","rangeLimit","range","rangeCapture","hash","hashCapture","tagLine","literalLine","variableLine","numberLine","boolLine","quotedLine","rangeLine","integerLine","valueDeclaration","valueList","filter","filterCapture","filterLine","operators","captureStack","Error","captureStackTrace","this","constructor","err","token","input","line","file","originalError","LiquidError","obj","name","targetLine","lines","begin","end","context","split","Math","max","min","start","stop","step","arguments","i","_\r\n .range","map","lineNumber","indicator","num","_.padStart","text","join","message","msg","mkMessage","stack","_super","_this","tslib_1.__extends","TokenizationError","_.create","ParseError","tpl","RenderError","RenderBreakError","predicate","AssertionError","BlockMode","defaultOptions","root","extname","dynamicPartials","trim_tag_right","trim_tag_left","trim_value_right","trim_value_left","greedy","strict_filters","strict_variables","normalize","options","_.isArray","_.isString","ctx","opts","OUTPUT","contexts","Scope","reduce","val","_i","srcs","forEach","src","target","binaryAssign","_.assign","path","paths","propertyAccessSeq","scope","findContextFor","_.last","readProperty","v","some","_.isObject","undefined","unshift","pop","findIndex","TypeError","splice","candidate","_.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","pos","Token","trimLeft","trimRight","trim","match","lexical.tagLine","args","DelimitedToken","Tokenizer","tokens","p","state","HTML","buffer","bufferBegin","bin","substr","HTMLToken","TAG","OutputToken","TagToken","inRaw","rLeft","rRight","whiteSpaceCtrl","Render","templates","html","templates_1","_a","render","_b","e_1","resolvedHTML","==","l","r","!=",">","<",">=","<=","contains","and","isTruthy","or","evalExp","exp","operatorREs","lexical.operators","operatorRE","expRE","lexical.quoteBalanced","op","lexical.rangeLine","low","evalValue","high","res","Number","toLowerCase","lexical.parseLiteral","isFalsy","markup","lastIndex","exec","liquid","impl","Tag","impls","parse","Hash","tag","Template","valueRE","lexical.value","strictFilters","lexical.filterLine","argList","Filter","x","parseArgs","keyMatch","index","arg","apply","parseToken","ParseStream","cb","handlers","event","h","trigger","stopRequested","shift","template","initial","filters","lexical.filter","default_1","prev","Value","Output","Parser","remainTokens","e","re","AssignScope","mapSeries","iterable","ret","result","item","idx","then","tagToken","collection","reversed","elseTemplates","stream","parser","parseStream","on","keys","offset","limit","reverse","first","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","col","unless","break","continue","escapeMap","&","\"","'","unescapeMap","&","<",">",""","'","escape","m","escape_once","newline_to_br","strip_html","append","prepend","capitalize","charAt","toUpperCase","concat","lstrip","downcase","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","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","isNaN","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/parser/lexical.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/tag-token.ts","../src/parser/output-token.ts","../src/parser/whitespace-ctrl.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.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/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) {\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) {\n return function (...args) {\n return new Promise((resolve, reject) => {\n fn(...args, (err, result) => {\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 = []\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 (object, iteratee: ((val: any, key: string, obj: object) => boolean | void)) {\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\n/*\n * Assigns own enumerable string keyed properties of source objects to the destination object.\n * Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * Note: This method mutates object and is loosely based on Object.assign.\n *\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @return {Object} Returns object.\n */\nexport function assign (obj: object, ...srcs: object[]): object {\n obj = isObject(obj) ? obj : {}\n srcs.forEach(src => binaryAssign(obj, src))\n return obj\n}\n\nfunction binaryAssign (target: object, src: object): object {\n for (const key in src) if (src.hasOwnProperty(key)) target[key] = src[key]\n return target\n}\n\nexport function last (arr: any[]): any {\n return arr[arr.length - 1]\n}\n\nexport function uniq (arr: any[]): any[] {\n const u = {}\n const a = []\n for (let i = 0, l = arr.length; i < l; ++i) {\n if (u.hasOwnProperty(arr[i])) {\n continue\n }\n a.push(arr[i])\n u[arr[i]] = 1\n }\n return a\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 (arguments.length === 1) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr = []\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","// 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 integer = /-?\\d+/\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 literalLine = new RegExp(`^${literal.source}$`, 'i')\nexport const variableLine = new RegExp(`^${variable.source}$`)\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}$`)\nexport const integerLine = new RegExp(`^${integer.source}$`)\n\n// filter related\nexport const valueDeclaration = new RegExp(`(?:${identifier.source}\\\\s*:\\\\s*)?${value.source}`)\nexport const valueList = new RegExp(`${valueDeclaration.source}(\\\\s*,\\\\s*${valueDeclaration.source})*`)\nexport const filter = new RegExp(`${identifier.source}(?:\\\\s*:\\\\s*${valueList.source})?`, 'g')\nexport const filterCapture = new RegExp(`(${identifier.source})(?:\\\\s*:\\\\s*(${valueList.source}))?`)\nexport const filterLine = new RegExp(`^${filterCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isInteger (str) {\n return integerLine.test(str)\n}\n\nexport function isLiteral (str) {\n return literalLine.test(str)\n}\n\nexport function isRange (str) {\n return rangeLine.test(str)\n}\n\nexport function isVariable (str) {\n return variableLine.test(str)\n}\n\nexport function matchValue (str) {\n return value.exec(str)\n}\n\nexport function parseLiteral (str) {\n let res = str.match(numberLine)\n if (res) {\n return Number(str)\n }\n res = str.match(boolLine)\n if (res) {\n return str.toLowerCase() === 'true'\n }\n res = str.match(quotedLine)\n if (res) {\n return str.slice(1, -1)\n }\n throw new TypeError(`cannot parse '${str}' as literal`)\n}\n","import * as _ from './underscore'\nimport Token from 'src/parser/token'\n\nfunction captureStack () {\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n}\n\nabstract class LiquidError {\n name: string\n message: string\n stack: string\n private file: string\n private input: string\n private token: Token\n private originalError: Error\n constructor (err, token) {\n this.input = token.input\n this.file = token.file\n this.originalError = err\n this.token = token\n }\n captureStackTrace (obj) {\n this.name = obj.constructor.name\n\n captureStack.call(obj)\n const err = this.originalError\n const context = mkContext(this.input, this.token.line)\n this.message = mkMessage(err.message, this.token)\n this.stack = this.message + '\\n' + context +\n '\\n' + (this.stack || this.message) +\n (err.stack ? '\\nFrom ' + err.stack : '')\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor (message, token) {\n super({ message }, token)\n super.captureStackTrace(this)\n }\n}\nTokenizationError.prototype = _.create(Error.prototype) as any\nTokenizationError.prototype.constructor = TokenizationError\n\nexport class ParseError extends LiquidError {\n constructor (err, token) {\n super(err, token)\n this.message = err.message\n super.captureStackTrace(this)\n }\n}\nParseError.prototype = _.create(Error.prototype) as any\nParseError.prototype.constructor = ParseError\n\nexport class RenderError extends LiquidError {\n constructor (err, tpl) {\n super(err, tpl.token)\n this.message = err.message\n super.captureStackTrace(this)\n }\n}\nRenderError.prototype = _.create(Error.prototype) as any\nRenderError.prototype.constructor = RenderError\n\nexport class RenderBreakError {\n message: string\n resolvedHTML: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nRenderBreakError.prototype = _.create(Error.prototype) as any\nRenderBreakError.prototype.constructor = RenderBreakError\n\nexport class AssertionError {\n message: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nAssertionError.prototype = _.create(Error.prototype) as any\nAssertionError.prototype.constructor = AssertionError\n\nfunction mkContext (input, targetLine) {\n const lines = input.split('\\n')\n const begin = Math.max(targetLine - 2, 1)\n const end = Math.min(targetLine + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === targetLine) ? '>> ' : ' '\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, token) {\n msg = msg || ''\n if (token.file) {\n msg += ', file:' + token.file\n }\n if (token.line) {\n msg += `, line:${token.line}, col:${token.col}`\n }\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","import * 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 // eslint-disable-line\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 // eslint-disable-line\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 // eslint-disable-line\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 // eslint-disable-line\n /** ``trim_value_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_value_right?: boolean // eslint-disable-line\n /** `trim_value_left` is similar to `trim_value_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_value_left?: boolean // eslint-disable-line\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\nexport interface NormalizedOptions extends LiquidOptions {\n root?: string[]\n}\n\nexport const defaultOptions: NormalizedOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_value_right: false,\n trim_value_left: false,\n greedy: true,\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\nfunction normalizeStringArray (value: string | string[]): 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 * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport { NormalizedOptions, defaultOptions } from '../liquid-options'\nimport BlockMode from './block-mode'\n\nexport default class Scope {\n opts: NormalizedOptions\n contexts: Array\n blocks: object = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts: NormalizedOptions = defaultOptions) {\n this.opts = { ...defaultOptions, ...opts }\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => _.assign(ctx, val), _.create(null))\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 })\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 {\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 readProperty (obj, key) {\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) {\n str = String(str)\n const seq = []\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 (!lexical.isInteger(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) {\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) {\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, begin) {\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, path) {\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, filepath, ext) {\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\n line: number\n col: number\n raw: string\n input: string\n file: string\n value: string\n constructor (raw, col, input, file, line) {\n this.col = col\n this.line = line\n this.raw = 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 { LiquidOptions, defaultOptions } from 'src/liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: LiquidOptions\n constructor (options: LiquidOptions = defaultOptions) {\n this.options = options\n }\n tokenize (input: string, file?: string) {\n const tokens = []\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 const bin = input.substr(p, 2)\n if (state === ParseState.HTML) {\n if (bin === '{{' || bin === '{%') {\n if (buffer) tokens.push(new HTMLToken(buffer, col, input, file, line))\n buffer = bin\n line = curLine\n col = p - lineBegin + 1\n p += 2\n state = bin === '{{' ? ParseState.OUTPUT : ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && bin === '}}') {\n buffer += '}}'\n tokens.push(new OutputToken(buffer, col, input, file, line))\n p += 2\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n } else if (bin === '%}') {\n buffer += '%}'\n tokens.push(new TagToken(buffer, col, input, file, line))\n p += 2\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 new Error(`${t} \"${str}\" not closed`),\n new Token(buffer, col, input, file, line)\n )\n }\n if (buffer) tokens.push(new HTMLToken(buffer, col, input, file, line))\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, begin, input, file, line) {\n super(str, begin, input, file, line)\n this.type = 'html'\n this.value = str\n }\n}\n","import Token from './token'\n\nexport default class DelimitedToken extends Token {\n trimLeft: boolean\n trimRight: boolean\n constructor (raw, pos, input, file, line) {\n super(raw, pos, input, file, line)\n this.trimLeft = raw[2] === '-'\n this.trimRight = raw[raw.length - 3] === '-'\n this.value = raw.slice(this.trimLeft ? 3 : 2, this.trimRight ? -3 : -2).trim()\n }\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, pos, input, file, line) {\n super(raw, pos, input, file, line)\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, pos, input, file, line) {\n super(raw, pos, input, file, line)\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 { LiquidOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: LiquidOptions) {\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) {\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_value_left\n}\n\nfunction shouldTrimRight (token: DelimitedToken, inRaw: boolean, options) {\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_value_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 { RenderBreakError, RenderError } from 'src/util/error'\nimport assert from 'src/util/assert'\n\nexport default class Render {\n async renderTemplates (templates, 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 instanceof RenderBreakError) {\n e.resolvedHTML = html\n throw e\n }\n throw e instanceof 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'\n\nconst operators = {\n '==': (l, r) => l === r,\n '!=': (l, r) => l !== r,\n '>': (l, r) => l !== null && r !== null && l > r,\n '<': (l, r) => l !== null && r !== null && l < r,\n '>=': (l, r) => l !== null && r !== null && l >= r,\n '<=': (l, r) => l !== null && r !== null && l <= r,\n 'contains': (l, r) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l, r) => isTruthy(l) && isTruthy(r),\n 'or': (l, r) => isTruthy(l) || isTruthy(r)\n}\n\nexport function evalExp (exp, scope) {\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 const range = []\n for (let j = low; j <= high; j++) {\n range.push(j)\n }\n return range\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str, scope) {\n str = str && str.trim()\n if (!str) return undefined\n\n if (lexical.isLiteral(str)) {\n return lexical.parseLiteral(str)\n }\n if (lexical.isVariable(str)) {\n return scope.get(str)\n }\n throw new TypeError(`cannot eval '${str}' as value`)\n}\n\nexport function isTruthy (val) {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val) {\n return val === false || undefined === val || val === null\n}\n","import { hashCapture } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\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, 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 Token from 'src/parser/token'\n\nexport default class Template {\n token: Token;\n constructor (token) {\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 token: TagToken\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 assert from 'src/util/assert'\nimport * as lexical from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\n\ntype impl = (value: any, ...args: any[]) => any\n\nconst valueRE = new RegExp(`${lexical.value.source}`, 'g')\n\nexport default class Filter {\n name: string\n impl: impl\n args: string[]\n private static impls: {[key: string]: impl} = {}\n\n constructor (str: string, strictFilters: boolean = false) {\n const match = lexical.filterLine.exec(str)\n assert(match, 'illegal filter: ' + str)\n\n const name = match[1]\n const argList = match[2] || ''\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 = this.parseArgs(argList)\n }\n parseArgs (argList: string): string[] {\n let match; const args = []\n while ((match = valueRE.exec(argList.trim()))) {\n const v = match[0]\n const re = new RegExp(`${v}\\\\s*:`, 'g')\n const keyMatch = re.exec(match.input)\n const currentMatchIsKey = keyMatch && keyMatch.index === match.index\n currentMatchIsKey ? args.push(`'${v}'`) : args.push(v)\n }\n return args\n }\n render (value: any, scope: Scope): any {\n const args = this.args.map(arg => evalValue(arg, scope))\n args.unshift(value)\n return this.impl.apply(null, args)\n }\n static register (name, filter) {\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'\n\ntype parseToken = (token: Token, remainTokens: Array) => ITemplate\ntype eventHandler = ((arg?: Token | ITemplate) => void)\n\nexport default class ParseStream {\n private tokens: Array\n private handlers: {[key: string]: eventHandler} = {}\n private stopRequested: boolean\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: eventHandler) {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: Token | ITemplate) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n }\n start () {\n this.trigger('start')\n let token\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' &&\n 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 * as lexical from 'src/parser/lexical'\nimport assert from 'src/util/assert'\nimport Filter from './filter'\nimport Scope from 'src/scope/scope'\n\nexport default class {\n initial: any\n filters: Array\n constructor (str: string, strictFilters?: boolean) {\n let match = lexical.matchValue(str)\n assert(match, `illegal value string: ${str}`)\n\n const initial = match[0]\n str = str.substr(match.index + match[0].length)\n\n const filters = []\n while ((match = lexical.filter.exec(str))) {\n filters.push([match[0].trim()])\n }\n\n this.initial = initial\n this.filters = filters.map(str => new Filter(str, strictFilters))\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 Token from 'src/parser/token'\n\nexport default class extends Template implements ITemplate {\n str: string\n constructor (token: Token) {\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'\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 = []\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'\n\nconst re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n\nexport default {\n parse: function (token) {\n const match = token.args.match(re)\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (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}\n","/*\n * Call functions in serial until someone resolved.\n * @param iterable the array to iterate with.\n * @param iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function anySeries (iterable, iteratee) {\n let ret: Promise = Promise.reject(new Error('init'))\n iterable.forEach(function (item, idx) {\n ret = ret.catch(() => iteratee(item, idx, iterable))\n })\n return ret\n}\n\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 (iterable, iteratee) {\n let ret: Promise = Promise.resolve('init')\n const result = []\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 { RenderBreakError } from 'src/util/error'\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\nfunction parse (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\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 = 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 => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n}\n\nasync function render (scope, hash) {\n let collection = evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]])\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, i) => {\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 instanceof 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\nexport default { parse, render }\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'\n\nconst re = new RegExp(`(${identifier.source})`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = tagToken.args.match(re)\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}\n","import { evalExp } from 'src/render/syntax'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p = []\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:when', token => {\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 => 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) {\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}\n","export default {\n parse: function (tagToken, remainTokens) {\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\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}\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'\n\nconst staticFileRE = /[^\\s,]+/\nconst withRE = new RegExp(`with\\\\s+(${value.source})`)\n\nexport default {\n parse: function (token) {\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, 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'\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(identifier)\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}\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\n\nconst groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\nconst candidatesRE = new RegExp(rValue.source, 'g')\n\nexport default {\n parse: function (tagToken) {\n let match = groupRE.exec(tagToken.args)\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) {\n const group = evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n\n const groups = scope.opts.groups = scope.opts.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'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', token => {\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 => 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) {\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}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes'\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}\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'\n\nconst staticFileRE = /\\S+/\n\nexport default {\n parse: function (token, remainTokens) {\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, 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}\n","import BlockMode from 'src/scope/block-mode'\n\nexport default {\n parse: function (token, remainTokens) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n\n this.tpls = []\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', tpl => 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) {\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}\n","export default {\n parse: function (tagToken, remainTokens) {\n this.tokens = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\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.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'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n parse: function (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\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 = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => 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: async function (scope, 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 => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row\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}\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'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream = 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) {\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}\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) {\n return String(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str) {\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 => escape(unescape(str)),\n 'newline_to_br': v => v.replace(/\\n/g, '
'),\n 'strip_html': v => String(v).replace(/|||<.*?>/g, '')\n}\n","export default {\n 'append': (v, arg) => v + arg,\n 'prepend': (v, arg) => arg + v,\n 'capitalize': str => String(str).charAt(0).toUpperCase() + str.slice(1),\n 'concat': (v, arg) => Array.prototype.concat.call(v, arg),\n 'lstrip': v => String(v).replace(/^\\s+/, ''),\n 'downcase': v => v.toLowerCase(),\n 'upcase': str => String(str).toUpperCase(),\n 'remove': (v, arg) => v.split(arg).join(''),\n 'remove_first': (v, l) => v.replace(l, ''),\n 'replace': (v, pattern, replacement) =>\n String(v).split(pattern).join(replacement),\n 'replace_first': (v, arg1, arg2) => String(v).replace(arg1, arg2),\n 'rstrip': str => String(str).replace(/\\s+$/, ''),\n 'split': (v, arg) => String(v).split(arg),\n 'strip': (v) => String(v).trim(),\n 'strip_newlines': v => String(v).replace(/\\n/g, ''),\n 'truncate': (v, l, o) => {\n v = String(v)\n o = (o === undefined) ? '...' : o\n l = l || 16\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v, l, o) => {\n if (o === undefined) o = '...'\n const arr = v.split(' ')\n let ret = arr.slice(0, l).join(' ')\n if (arr.length > l) ret += o\n return ret\n }\n}\n","export default {\n 'abs': v => Math.abs(v),\n 'ceil': v => Math.ceil(v),\n 'divided_by': (v, arg) => v / arg,\n 'floor': v => Math.floor(v),\n 'minus': bindFixed((v, arg) => v - arg),\n 'modulo': bindFixed((v, arg) => v % arg),\n 'round': (v, arg) => {\n const amp = Math.pow(10, arg || 0)\n return Math.round(v * amp) / amp\n },\n 'plus': bindFixed((v, arg) => Number(v) + Number(arg)),\n 'times': (v, arg) => v * arg\n}\n\nfunction getFixed (v) {\n const p = String(v).split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction bindFixed (cb) {\n return (l, r) => {\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 => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': x => x.split(' ').map(encodeURIComponent).join('+')\n}\n","import { last } from 'src/util/underscore'\n\nexport default {\n 'join': (v, arg) => v.join(arg === undefined ? ' ' : arg),\n 'last': v => last(v),\n 'first': v => v[0],\n 'map': (arr, arg) => arr.map(v => v[arg]),\n 'reverse': v => v.reverse(),\n 'sort': (v, arg) => v.sort(arg),\n 'size': v => v.length,\n 'slice': (v, begin, length) => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'uniq': function (arr) {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(val)) {\n return false\n }\n u[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) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d) {\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) {\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, startDay) {\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) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d) {\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) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst formatCodes = {\n a: function (d) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d) {\n return dayNames[d.getDay()]\n },\n b: function (d) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d) {\n return monthNames[d.getMonth()]\n },\n c: function (d) {\n return d.toLocaleString()\n },\n C: function (d) {\n return _date.century(d)\n },\n d: function (d) {\n return padStart(d.getDate(), 2, '0')\n },\n e: function (d) {\n return padStart(d.getDate(), 2)\n },\n H: function (d) {\n return padStart(d.getHours(), 2, '0')\n },\n I: function (d) {\n return padStart(String(d.getHours() % 12 || 12), 2, '0')\n },\n j: function (d) {\n return padStart(_date.getDayOfYear(d), 3, '0')\n },\n k: function (d) {\n return padStart(d.getHours(), 2)\n },\n l: function (d) {\n return padStart(String(d.getHours() % 12 || 12), 2)\n },\n L: function (d) {\n return padStart(d.getMilliseconds(), 3, '0')\n },\n m: function (d) {\n return padStart(d.getMonth() + 1, 2, '0')\n },\n M: function (d) {\n return padStart(d.getMinutes(), 2, '0')\n },\n p: function (d) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d) {\n return _date.getSuffix(d)\n },\n s: function (d) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d) {\n return padStart(d.getSeconds(), 2, '0')\n },\n u: function (d) {\n return d.getDay() || 7\n },\n U: function (d) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d) {\n return d.getDay()\n },\n W: function (d) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d) {\n return d.toLocaleDateString()\n },\n X: function (d) {\n return d.toLocaleTimeString()\n },\n y: function (d) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d) {\n return d.getFullYear()\n },\n z: function (d) {\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, format) {\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.call(this, 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, arg) => {\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) {\n return date instanceof Date && !isNaN(date.getTime())\n}\n","import { isTruthy } from 'src/render/syntax'\n\nexport default {\n 'default': (v, arg) => 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'\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, NormalizedOptions, defaultOptions, normalize } from './liquid-options'\n\nexport default class Liquid {\n public options: NormalizedOptions\n private cache: object\n private parser: Parser\n private renderer: Render\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n const options = { ...defaultOptions, ...normalize(opts) }\n if (options.cache) {\n this.cache = {}\n }\n this.options = options\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, 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, 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, filter) {\n return Filter.register(name, filter)\n }\n registerTag (name: string, tag: ITagImplOptions) {\n return Tag.register(name, tag)\n }\n plugin (plugin) {\n return plugin.call(this, Liquid)\n }\n express () {\n const self = this\n return function (filePath: string, ctx: object, cb: (err: Error, 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","create","proto","isArray","forOwn","object","iteratee","k","hasOwnProperty","last","arr","length","type","padStart","str","ch","n","String","quoted","RegExp","source","quoteBalanced","number","bool","identifier","subscript","literal","variable","rangeLimit","range","rangeCapture","hash","hashCapture","tagLine","literalLine","variableLine","numberLine","boolLine","quotedLine","rangeLine","integerLine","valueDeclaration","valueList","filter","filterCapture","filterLine","operators","captureStack","Error","captureStackTrace","this","constructor","err","token","input","file","originalError","LiquidError","obj","name","targetLine","lines","begin","end","context","line","split","Math","max","min","start","stop","step","arguments","i","_\r\n .range","map","lineNumber","indicator","num","_.padStart","text","join","message","msg","col","mkMessage","stack","_super","_this","tslib_1.__extends","TokenizationError","_.create","ParseError","tpl","RenderError","RenderBreakError","predicate","AssertionError","BlockMode","defaultOptions","root","extname","dynamicPartials","trim_tag_right","trim_tag_left","trim_value_right","trim_value_left","greedy","strict_filters","strict_variables","normalize","options","_.isArray","_.isString","ctx","opts","OUTPUT","contexts","Scope","reduce","val","_i","srcs","forEach","src","target","binaryAssign","_.assign","path","paths","propertyAccessSeq","scope","findContextFor","_.last","readProperty","v","some","_.isObject","undefined","unshift","pop","findIndex","TypeError","splice","candidate","_.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","match","lexical.tagLine","args","DelimitedToken","Tokenizer","tokens","p","curLine","state","HTML","buffer","lineBegin","bin","substr","HTMLToken","TAG","OutputToken","TagToken","inRaw","rLeft","rRight","whiteSpaceCtrl","t","Render","templates","html","templates_1","_a","render","_b","e_1","resolvedHTML","==","l","r","!=",">","<",">=","<=","contains","and","isTruthy","or","evalExp","exp","operatorREs","lexical.operators","operatorRE","expRE","lexical.quoteBalanced","op","lexical.rangeLine","low","evalValue","high","res","Number","toLowerCase","lexical.parseLiteral","isFalsy","markup","lastIndex","exec","liquid","impl","Tag","impls","parse","Hash","tag","Template","valueRE","lexical.value","strictFilters","lexical.filterLine","argList","Filter","x","parseArgs","keyMatch","index","arg","apply","parseToken","ParseStream","cb","handlers","event","h","trigger","stopRequested","shift","template","initial","filters","lexical.filter","default_1","prev","Value","Output","Parser","remainTokens","e","re","AssignScope","mapSeries","iterable","ret","result","item","idx","then","tagToken","collection","reversed","elseTemplates","stream","parser","parseStream","on","keys","offset","limit","reverse","first","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","continue","escapeMap","&","\"","'","unescapeMap","&","<",">",""","'","escape","m","escape_once","newline_to_br","strip_html","append","prepend","capitalize","charAt","toUpperCase","concat","lstrip","downcase","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","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","isNaN","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":"8+DAAA,IAAMA,EAAQC,OAAOC,UAAUC,SACzBC,EAAWC,MAAMH,UAAUC,kBAOjBG,EAAUC,GACxB,MAA6B,oBAAtBP,EAAMQ,KAAKD,YAGJE,EAAYF,GAC1B,MAAwB,mBAAVA,WAaAG,EAAWH,GACzB,OAAII,EAAMJ,GAAe,GACrBE,EAAWF,EAAMK,WAAmBF,EAAUH,EAAMK,aACpDH,EAAWF,EAAMM,UAAkBH,EAAUH,EAAMM,YACnDJ,EAAWF,EAAMO,MAAcP,EAAMO,QACQ,EAA7C,CAACd,EAAOI,GAAUW,QAAQR,EAAMJ,WAKZI,EALmDA,EAMrES,EAAQ,GACPC,KAAKP,UAAUH,EAAO,SAACW,EAAKX,GACjC,GAAIY,EAASZ,GAAQ,CACnB,IAA8B,IAA1BS,EAAMD,QAAQR,GAChB,OAEFS,EAAMI,KAAKb,GAEb,OAAOA,KAbLE,EAAWF,EAAMJ,UAAkBI,EAAMJ,WACtCH,EAAMQ,KAAKD,GAGpB,IAA0BA,EAClBS,WAYQK,EAA+CC,GAC7D,OAAOrB,OAAOoB,OAAOC,YAGPX,EAAOJ,GACrB,OAAOA,MAAAA,WAGOgB,EAAShB,GAEvB,MAA6B,mBAAtBP,EAAMQ,KAAKD,YAkBJiB,EAAQC,EAAQC,GAE9B,IAAK,IAAMC,KADXF,EAASA,GAAU,GAEjB,GAAIA,EAAOG,eAAeD,KACe,IAAnCD,EAASD,EAAOE,GAAIA,EAAGF,GAAmB,MAGlD,OAAOA,WAyBOI,EAAMC,GACpB,OAAOA,EAAIA,EAAIC,OAAS,YAsBVZ,EAAUZ,GACxB,IAAMyB,SAAczB,EACpB,OAAiB,OAAVA,IAA4B,WAATyB,GAA8B,aAATA,YAyBjCC,EAAUC,EAAUH,EAAgBI,gBAAAA,OAGlD,IADA,IAAIC,EAAIL,GADRG,EAAMG,OAAOH,IACQH,OACR,EAANK,KAASF,EAAMC,EAAKD,EAC3B,OAAOA,EClKT,IAEaI,EAAS,IAAIC,OAFL,UAE4BC,WAD5B,UACmDA,QAC3DC,EAAgB,IAAIF,OAAO,MAAMD,EAAOE,oBAIxCE,EAAS,qBACTC,EAAO,aAGPC,EAAa,aACbC,EAAY,IAAIN,OAAO,SAASD,EAAOE,0BACvCM,EAAU,IAAIP,OAAO,MAAMD,EAAOE,WAAUG,EAAKH,WAAUE,EAAOF,YAClEO,EAAW,IAAIR,OAAUK,EAAWJ,gBAAeI,EAAWJ,WAAUK,EAAUL,aAGlFQ,EAAa,IAAIT,OAAO,MAAMQ,EAASP,WAAUE,EAAOF,YACxDS,EAAQ,IAAIV,OAAO,MAAMS,EAAWR,gBAAeQ,EAAWR,cAC9DU,EAAe,IAAIX,OAAO,OAAOS,EAAWR,kBAAiBQ,EAAWR,eAExEjC,EAAQ,IAAIgC,OAAO,MAAMQ,EAASP,WAAUM,EAAQN,WAAUS,EAAMT,YAGpEW,EAAO,IAAIZ,OAAO,MAAMK,EAAWJ,uBAAsBjC,EAAMiC,YAC/DY,EAAc,IAAIb,OAAO,IAAIK,EAAWJ,qBAAoBjC,EAAMiC,WAAW,KAG7Ea,EAAU,IAAId,OAAO,SAASK,EAAWJ,iCACzCc,EAAc,IAAIf,OAAO,IAAIO,EAAQN,WAAW,KAChDe,EAAe,IAAIhB,OAAO,IAAIQ,EAASP,YACvCgB,EAAa,IAAIjB,OAAO,IAAIG,EAAOF,YACnCiB,EAAW,IAAIlB,OAAO,IAAII,EAAKH,WAAW,KAC1CkB,EAAa,IAAInB,OAAO,IAAID,EAAOE,YACnCmB,EAAY,IAAIpB,OAAO,IAAIW,EAAaV,YACxCoB,EAAc,IAAIrB,OAAO,IA7Bf,QA6B2BC,YAGrCqB,EAAmB,IAAItB,OAAO,MAAMK,EAAWJ,qBAAoBjC,EAAMiC,QACzEsB,EAAY,IAAIvB,OAAUsB,EAAiBrB,oBAAmBqB,EAAiBrB,aAC/EuB,EAAS,IAAIxB,OAAUK,EAAWJ,sBAAqBsB,EAAUtB,YAAY,KAC7EwB,EAAgB,IAAIzB,OAAO,IAAIK,EAAWJ,wBAAuBsB,EAAUtB,cAC3EyB,EAAa,IAAI1B,OAAO,IAAIyB,EAAcxB,YAE1C0B,EAAY,CACvB,WACA,YACA,kCC7CF,SAASC,IACHC,MAAMC,mBACRD,MAAMC,kBAAkBC,KAAMA,KAAKC,aAIvC,iBAQE,WAAaC,EAAKC,GAChBH,KAAKI,MAAQD,EAAMC,MACnBJ,KAAKK,KAAOF,EAAME,KAClBL,KAAKM,cAAgBJ,EACrBF,KAAKG,MAAQA,EAajB,OAXEI,8BAAA,SAAmBC,GACjBR,KAAKS,KAAOD,EAAIP,YAAYQ,KAE5BZ,EAAa3D,KAAKsE,GAClB,IA2DgBJ,EAAOM,EACnBC,EACAC,EACAC,EA9DEX,EAAMF,KAAKM,cACXQ,GA0DUV,EA1DUJ,KAAKI,MA0DRM,EA1DeV,KAAKG,MAAMY,KA2D7CJ,EAAQP,EAAMY,MAAM,MACpBJ,EAAQK,KAAKC,IAAIR,EAAa,EAAG,GACjCG,EAAMI,KAAKE,IAAIT,EAAa,EAAGC,EAAMlD,iBFwDtB2D,EAAeC,EAAeC,GAC1B,IAArBC,UAAU9D,SACZ4D,EAAOD,EACPA,EAAQ,GAEVE,EAAOA,GAAQ,EAGf,IADA,IAAM9D,EAAM,GACHgE,EAAIJ,EAAOI,EAAIH,EAAMG,GAAKF,EACjC9D,EAAIV,KAAK0E,GAEX,OAAOhE,EEjESiE,CACPb,EAAOC,EAAM,GACnBa,IAAI,SAAAC,GACH,IAAMC,EAAaD,IAAejB,EAAc,MAAQ,MAClDmB,EAAMC,EAAW/D,OAAO4D,GAAa5D,OAAO8C,GAAKpD,QACjDsE,EAAOpB,EAAMgB,EAAa,GAChC,MAAO,GAAGC,EAAYC,OAAQE,IAE/BC,KAAK,OAtENhC,KAAKiC,QA2ET,SAAoBC,EAAK/B,GACvB+B,EAAMA,GAAO,GACT/B,EAAME,OACR6B,GAAO,UAAY/B,EAAME,MAEvBF,EAAMY,OACRmB,GAAO,UAAU/B,EAAMY,cAAaZ,EAAMgC,KAE5C,OAAOD,EAnFUE,CAAUlC,EAAI+B,QAASjC,KAAKG,OAC3CH,KAAKqC,MAAQrC,KAAKiC,QAAU,KAAOnB,EACjC,MAAQd,KAAKqC,OAASrC,KAAKiC,UACxB/B,EAAImC,MAAQ,UAAYnC,EAAImC,MAAQ,wBAK3C,WAAaJ,EAAS9B,GAAtB,MACEmC,YAAM,CAAEL,WAAW9B,gBACnBmC,YAAMvC,yBAAkBwC,KAE5B,OALuCC,UAAAjC,GAMvCkC,EAAkB7G,UAAY8G,EAAS5C,MAAMlE,WAC7C6G,EAAkB7G,UAAUqE,YAAcwC,EAE1C,kBACE,WAAavC,EAAKC,GAAlB,MACEmC,YAAMpC,EAAKC,gBACXoC,EAAKN,QAAU/B,EAAI+B,QACnBK,YAAMvC,yBAAkBwC,KAE5B,OANgCC,UAAAjC,GAOhCoC,EAAW/G,UAAY8G,EAAS5C,MAAMlE,WACtC+G,EAAW/G,UAAUqE,YAAc0C,EAEnC,kBACE,WAAazC,EAAK0C,GAAlB,MACEN,YAAMpC,EAAK0C,EAAIzC,oBACfoC,EAAKN,QAAU/B,EAAI+B,QACnBK,YAAMvC,yBAAkBwC,KAE5B,OANiCC,UAAAjC,GAOjCsC,EAAYjH,UAAY8G,EAAS5C,MAAMlE,WACvCiH,EAAYjH,UAAUqE,YAAc4C,EAEpC,MAGE,SAAaZ,GACXpC,EAAa3D,KAAK8D,MAClBA,KAAKiC,QAAUA,EAAU,IAG7Ba,EAAiBlH,UAAY8G,EAAS5C,MAAMlE,WAC5CkH,EAAiBlH,UAAUqE,YAAc6C,EAEzC,MAEE,SAAab,GACXpC,EAAa3D,KAAK8D,MAClBA,KAAKiC,QAAUA,EAAU,eC9EJc,EAAgBd,GACvC,IAAKc,EAEH,MAAM,IAAIC,EADVf,EAAUA,GAAW,UAAUc,iBD+EnCC,EAAepH,UAAY8G,EAAS5C,MAAMlE,WAC1CoH,EAAepH,UAAUqE,YAAc+C,EErDhC,IC/BFC,EAAAA,GD+BQC,GAAoC,CAC/CC,KAAM,CAAC,KACPzG,OAAO,EACP0G,QAAS,GACTC,iBAAiB,EACjBC,gBAAgB,EAChBC,eAAe,EACfC,kBAAkB,EAClBC,iBAAiB,EACjBC,QAAQ,EACRC,gBAAgB,EAChBC,kBAAkB,YAGJC,GAAWC,GAQ3B,IAA+B7H,EAH7B,OAJA6H,EAAUA,GAAW,IACTxG,eAAe,UACzBwG,EAAQX,KAMNY,EADyB9H,EALS6H,EAAQX,MAMjBlH,EACzB+H,EAAW/H,GAAe,CAACA,GACxB,IANA6H,GClDJb,GAAAA,IAAAA,6BAIHA,8BAGaA,gBCIb,WAAagB,EAAkBC,gBAAlBD,mBAAkBC,MAF/BlE,YAAiB,GACjBA,eAAuBiD,GAAUkB,OAE/BnE,KAAKkE,UAAYhB,GAAmBgB,GACpClE,KAAKoE,SAAW,CAACH,GAAO,IAgI5B,OA9HEI,mBAAA,WACE,OAAOrE,KAAKoE,SAASE,OAAO,SAACL,EAAKM,GAAQ,gBNkFtB/D,OAAa,aAAAgE,mBAAAA,IAAAC,oBAGnC,OAFAjE,EAAM3D,EAAS2D,GAAOA,EAAM,GAC5BiE,EAAKC,QAAQ,SAAAC,GAAO,OAItB,SAAuBC,EAAgBD,GACrC,IAAK,IAAM/H,KAAO+H,EAASA,EAAIrH,eAAeV,KAAMgI,EAAOhI,GAAO+H,EAAI/H,IACtE,OAAOgI,EANaC,CAAarE,EAAKmE,KAC/BnE,EMrFqCsE,CAASb,EAAKM,IAAM7B,EAAS,QAEzE2B,gBAAA,SAAKU,GAAL,WACQC,EAAQhF,KAAKiF,kBAAkBF,GAC/BG,EAAQlF,KAAKmF,eAAeH,EAAM,KAAOI,EAAOpF,KAAKoE,UAC3D,OAAOY,EAAMV,OAAO,SAACrI,EAAOW,GAAQ,OAAA2F,EAAK8C,aAAapJ,EAAOW,IAAMsI,IAErEb,gBAAA,SAAKU,EAAcO,GACjB,IAAMN,EAAQhF,KAAKiF,kBAAkBF,GACjCG,EAAQlF,KAAKmF,eAAeH,EAAM,KAAOI,EAAOpF,KAAKoE,UACzDY,EAAMO,KAAK,SAAC3I,EAAK4E,GACf,OAAKgE,EAAWN,KAGZ1D,IAAMwD,EAAMvH,OAAS,GACvByH,EAAMtI,GAAO0I,GACN,SAELG,IAAcP,EAAMtI,KACtBsI,EAAMtI,GAAO,SAEfsI,EAAQA,EAAMtI,SAGlByH,oBAAA,SAASJ,GACP,OAAOjE,KAAKoE,SAASsB,QAAQzB,IAE/BI,iBAAA,SAAMJ,GACJ,OAAOjE,KAAKoE,SAAStH,KAAKmH,IAE5BI,gBAAA,SAAKJ,GACH,IAAK1C,UAAU9D,OACb,OAAOuC,KAAKoE,SAASuB,MAEvB,IAAMnE,EAAIxB,KAAKoE,SAASwB,UAAU,SAAAV,GAAS,OAAAA,IAAUjB,IACrD,IAAW,IAAPzC,EACF,MAAM,IAAIqE,UAAU,+BAEtB,OAAO7F,KAAKoE,SAAS0B,OAAOtE,EAAG,GAAG,IAEpC6C,2BAAA,SAAgBzH,EAAa6C,gBAAAA,aAAgD,OAAA,IAC3E,IAAK,IAAI+B,EAAIxB,KAAKoE,SAAS3G,OAAS,EAAQ,GAAL+D,EAAQA,IAAK,CAClD,IAAMuE,EAAY/F,KAAKoE,SAAS5C,GAChC,GAAK/B,EAAOsG,IACRnJ,KAAOmJ,EACT,OAAOA,EAGX,OAAO,MAET1B,yBAAA,SAAc7D,EAAK5D,GACjB,IAAI2H,EAsFW/D,EA5Ef,GATIwF,EAAQxF,GACV+D,OAAMkB,GAENjF,EAwEN,SAAmBA,GACjB,GAAIyF,EAAazF,EAAIlE,WACnB,OAAOkE,EAAIlE,YAEb,GAAI2J,EAAazF,EAAIjE,UACnB,OAAOiE,EAAIjE,WAEb,OAAOiE,EA/EGjE,CAASiE,GACf+D,EAAc,SAAR3H,EAkFLoJ,GADYxF,EAjFmBA,GAkFnB0F,QACbnC,EAAUvD,IAAQwD,EAAWxD,IAAaA,EAAI/C,OADnB+C,EAAI0F,KAlFQ1F,EAAI5D,GACvCqJ,EAAazF,EAAI2F,yBACnB5B,EAAM/D,EAAI2F,sBAAsBvJ,KAGhCoJ,EAAQzB,IAAQvE,KAAKkE,KAAKN,iBAC5B,MAAM,IAAIiC,UAAU,uBAAuBjJ,GAE7C,OAAO2H,GAWTF,8BAAA,SAAmBzG,GACjBA,EAAMG,OAAOH,GAKb,IAJA,IAEIwI,EL5CmBxI,EK0CjByI,EAAM,GACR5F,EAAO,GAEPe,EAAI,EACDA,EAAI5D,EAAIH,QACb,OAAQG,EAAI4D,IACV,IAAK,IACH1E,IAEA,IAAMwJ,EAAY1I,EAAI4D,EAAI,GAMxBA,EALE,OAAO+E,KAAKD,IAEdE,GAAc,KADdJ,EAAIxI,EAAInB,QAAQ6J,EAAW9E,EAAI,IACd,cAAc8E,OAAc1I,GAC7C6C,EAAO7C,EAAI6I,MAAMjF,EAAI,EAAG4E,GACxBtJ,IACIsJ,EAAI,IAGRI,GAAc,KADdJ,EAAIM,GAAkB9I,EAAK4D,EAAI,IACd,kBAAkB5D,GACnC6C,EAAO7C,EAAI6I,MAAMjF,EAAI,EAAG4E,GL7DTxI,EK8DQ6C,EL7D1BnB,EAAYiH,KAAK3I,KK8DZ6C,EAAO1C,OAAOiC,KAAK2G,IAAIlG,KAEzB3D,IACIsJ,EAAI,GAEV,MACF,IAAK,IACHtJ,IACA0E,IACA,MACF,QACEf,GAAQ7C,EAAI4D,GACZA,IAKN,GAFA1E,KAEKuJ,EAAI5I,OACP,MAAM,IAAIoI,UAAU,iBAAiBjI,OAEvC,OAAOyI,EAEP,SAASvJ,IACH2D,EAAKhD,QAAQ4I,EAAIvJ,KAAK2D,GAC1BA,EAAO,UAqBb,SAASiG,GAAmB9I,EAAKgD,GAE/B,IADA,IAAIyB,EAAQ,EACHb,EAAIZ,EAAOY,EAAI5D,EAAIH,OAAQ+D,IAIlC,GAHe,MAAX5D,EAAI4D,IACNa,IAEa,MAAXzE,EAAI4D,IAEQ,MADda,EAEE,OAAOb,EAIb,OAAQ,EC5KV,OAAA,gBACA,gBACA,gBACA,gLC+Ce,CAAEoF,SAtBjB,SAAyBC,oEACvB,SAAO,IAAIC,QAAQ,SAACC,EAASC,GAC3B,IAAMC,EAAM,IAAIC,eAChBD,EAAIE,OAAS,WACO,KAAdF,EAAIG,QAAiBH,EAAIG,OAAS,IACpCL,EAAQE,EAAII,cAEZL,EAAO,IAAIlH,MAAMmH,EAAIK,cAGzBL,EAAIM,QAAU,WACZP,EAAO,IAAIlH,MAAM,sDAEnBmH,EAAIO,KAAK,MAAOX,GAChBI,EAAIQ,eAQmBV,QAhC3B,SAAkB5D,EAAMuE,EAAUC,GAGhC,OAFIxE,EAAK1F,QAAyB,MAAfF,EAAK4F,KAAeA,GAAQ,KAhBjD,SAAqBA,EAAM4B,GACzB,IAAM6C,EAAOC,SAASC,cAAc,QACpCF,EAAKG,KAAO5E,EAEZ,IAAM6E,EAAOH,SAASI,qBAAqB,QAAQ,GACnDD,EAAKE,aAAaN,EAAMI,EAAKG,YAE7B,IAAMC,EAAIP,SAASC,cAAc,KACjCM,EAAEL,KAAOhD,EACT,IAAMsD,EAAWD,EAAEL,KAGnB,OAFAC,EAAKM,YAAYV,GAEVS,EAKKE,CAAWpF,EAAMuE,GAClBc,QAAQ,4BAA6B,SAAC5K,EAAK6K,EAAQ1D,GAC5D,IAAMxH,EAAOwH,EAAK/D,MAAM,KAAK2E,MAC7B,MAAI,SAASY,KAAKhJ,GAAcK,EACzB6K,EAAS1D,EAAO4C,KA0BSe,OAJpC,4EACE,UAAO,SC/CT,ICQKC,GAAAA,MDAH,SAAaC,EAAKzG,EAAK/B,EAAOC,EAAMU,GAClCf,KAAKmC,IAAMA,EACXnC,KAAKe,KAAOA,EACZf,KAAK4I,IAAMA,EACX5I,KAAKI,MAAQA,EACbJ,KAAKK,KAAOA,kBEVd,WAAazC,EAAKgD,EAAOR,EAAOC,EAAMU,GAAtC,MACEuB,YAAM1E,EAAKgD,EAAOR,EAAOC,EAAMU,gBAC/BwB,EAAK7E,KAAO,OACZ6E,EAAKtG,MAAQ2B,IAEjB,OANuC4E,UAAAqG,mBCGrC,WAAaD,EAAKE,EAAK1I,EAAOC,EAAMU,GAApC,MACEuB,YAAMsG,EAAKE,EAAK1I,EAAOC,EAAMU,gBAC7BwB,EAAKwG,SAAsB,MAAXH,EAAI,GACpBrG,EAAKyG,UAAoC,MAAxBJ,EAAIA,EAAInL,OAAS,GAClC8E,EAAKtG,MAAQ2M,EAAInC,MAAMlE,EAAKwG,SAAW,EAAI,EAAGxG,EAAKyG,WAAa,GAAK,GAAGC,SAE5E,OAT4CzG,UAAAqG,mBCK1C,WAAaD,EAAKE,EAAK1I,EAAOC,EAAMU,GAApC,MACEuB,YAAMsG,EAAKE,EAAK1I,EAAOC,EAAMU,SAC7BwB,EAAK7E,KAAO,MACZ,IAAMwL,EAAQ3G,EAAKtG,MAAMiN,MAAMC,GAC/B,IAAKD,EACH,MAAM,IAAIzG,EAAkB,qBAAsBF,UAEpDA,EAAK9B,KAAOyI,EAAM,GAClB3G,EAAK6G,KAAOF,EAAM,KAEtB,OAbsC1G,UAAA6G,mBCDpC,WAAaT,EAAKE,EAAK1I,EAAOC,EAAMU,GAApC,MACEuB,YAAMsG,EAAKE,EAAK1I,EAAOC,EAAMU,gBAC7BwB,EAAK7E,KAAO,WAEhB,OALyC8E,UAAA6G,KJMpCV,GAAAA,KAAAA,0BAAmBA,yBAAQA,mBAEhC,kBAEE,WAAa7E,gBAAAA,MACX9D,KAAK8D,QAAUA,EA8DnB,OA5DEwF,qBAAA,SAAUlJ,EAAeC,GAUvB,IATA,IAAMkJ,EAAS,GACXC,EAAI,EACJC,EAAU,EACVC,EAAQf,GAAWgB,KACnBC,EAAS,GACTC,EAAY,EACZ9I,EAAO,EACPoB,EAAM,EAEHqH,EAAIpJ,EAAM3C,QAAQ,CACN,OAAb2C,EAAMoJ,KACRC,IACAI,EAAYL,EAAI,GAElB,IAAMM,EAAM1J,EAAM2J,OAAOP,EAAG,GAC5B,GAAIE,IAAUf,GAAWgB,MACvB,GAAY,OAARG,GAAwB,OAARA,EAAc,CAC5BF,GAAQL,EAAOzM,KAAK,IAAIkN,GAAUJ,EAAQzH,EAAK/B,EAAOC,EAAMU,IAEhEA,EAAO0I,EACPtH,EAAMqH,EAAIK,EAAY,EACtBL,GAAK,EACLE,EAAgB,QAJhBE,EAASE,GAIcnB,GAAWxE,OAASwE,GAAWsB,IACtD,cAEG,CAAA,GAAIP,IAAUf,GAAWxE,QAAkB,OAAR2F,EAAc,CACtDF,GAAU,KACVL,EAAOzM,KAAK,IAAIoN,GAAYN,EAAQzH,EAAK/B,EAAOC,EAAMU,IAEtD6I,EAAS,GACT7I,EAAO0I,EACPtH,GAHAqH,GAAK,GAGKK,EAAY,EACtBH,EAAQf,GAAWgB,KACnB,SACK,GAAY,OAARG,EAAc,CACvBF,GAAU,KACVL,EAAOzM,KAAK,IAAIqN,GAASP,EAAQzH,EAAK/B,EAAOC,EAAMU,IAEnD6I,EAAS,GACT7I,EAAO0I,EACPtH,GAHAqH,GAAK,GAGKK,EAAY,EACtBH,EAAQf,GAAWgB,KACnB,UAEFC,GAAUxJ,EAAMoJ,KAElB,GAAIE,IAAUf,GAAWgB,KAWzB,OAHIC,GAAQL,EAAOzM,KAAK,IAAIkN,GAAUJ,EAAQzH,EAAK/B,EAAOC,EAAMU,aKjE5BwI,EAAiBzF,GACvDA,KAAYJ,QAAQ,GAASI,GAC7B,IAAIsG,GAAQ,EAEZb,EAAO7E,QAAQ,SAACvE,EAAcqB,GAoBhC,IAA0BrB,EAAuC2D,EANxC3D,EAAuC2D,EAAvC3D,EAbFA,EAayC2D,EAbTA,GAAPsG,IAe3B,QAAfjK,EAAMzC,KAAuByC,EAAM4I,UAAYjF,EAAQP,cACxC,WAAfpD,EAAMzC,KAA0ByC,EAAM4I,UAAYjF,EAAQL,qBAA9D,IASF,SAAmBtD,EAAcuD,GAC/B,GAAKvD,GAAwB,SAAfA,EAAMzC,KAApB,CAEA,IAAM2M,EAAQ3G,EAAS,QAAU,aACjCvD,EAAMlE,MAAQkE,EAAMlE,MAAMuM,QAAQ6B,EAAO,KA5BrCtB,CAASQ,EAAO/H,EAAI,GAAIsC,EAAQJ,QAGf,QAAfvD,EAAMzC,MAA+C,QAA5ByC,EAAmBM,OAAgB2J,GAAQ,GACrD,QAAfjK,EAAMzC,MAA+C,WAA5ByC,EAAmBM,OAAmB2J,GAAQ,GAcrDjK,EAZFA,EAYyC2D,EAZTA,GAAPsG,IAc5B,QAAfjK,EAAMzC,KAAuByC,EAAM6I,WAAalF,EAAQR,eACzC,WAAfnD,EAAMzC,KAA0ByC,EAAM6I,WAAalF,EAAQN,sBAA/D,IAUF,SAAoBrD,EAAcuD,GAChC,GAAKvD,GAAwB,SAAfA,EAAMzC,KAApB,CAEA,IAAM4M,EAAS5G,EAAS,QAAU,gBAClCvD,EAAMlE,MAAQkE,EAAMlE,MAAMuM,QAAQ8B,EAAQ,KA5BtCtB,CAAUO,EAAO/H,EAAI,GAAIsC,EAAQJ,ULsDnC6G,CAAehB,EAAQvJ,KAAK8D,SACrByF,EAVL,IAAMiB,EAAId,IAAUf,GAAWxE,OAAS,SAAW,MAC7CvG,EAAsB,GAAhBgM,EAAOnM,OAAcmM,EAAOnD,MAAM,EAAG,IAAM,MAAQmD,EAC/D,MAAM,IAAInH,EACR,IAAI3C,MAAS0K,OAAM5M,kBACnB,IAAIiL,GAAMe,EAAQzH,EAAK/B,EAAOC,EAAMU,wBMhE5C,cAkBA,OAjBQ0J,4BAAN,SAAuBC,EAAWxF,2GAChCsB,EAAOtB,EAAO,4CAEVyF,EAAO,OACOC,0BAAApG,wBAAP5B,wBAEC,6BAARiI,EAAAF,KAAc/H,EAAIkI,OAAO5F,kBAAzByF,EAAAE,EAAQE,sBAER,0BAAiBjI,EAEf,MADAkI,EAAEC,aAAeN,EACXK,EAER,MAAMA,aAAanI,EAAcmI,EAAI,IAAInI,EAAYmI,EAAGpI,iBAR1C4B,iBAWlB,SAAOmG,cChBL/K,GAAY,CAChBsL,KAAM,SAACC,EAAGC,GAAM,OAAAD,IAAMC,GACtBC,KAAM,SAACF,EAAGC,GAAM,OAAAD,IAAMC,GACtBE,IAAK,SAACH,EAAGC,GAAM,OAAM,OAAND,GAAoB,OAANC,GAAkBA,EAAJD,GAC3CI,IAAK,SAACJ,EAAGC,GAAM,OAAM,OAAND,GAAoB,OAANC,GAAcD,EAAIC,GAC/CI,KAAM,SAACL,EAAGC,GAAM,OAAM,OAAND,GAAoB,OAANC,GAAmBA,GAALD,GAC5CM,KAAM,SAACN,EAAGC,GAAM,OAAM,OAAND,GAAoB,OAANC,GAAcD,GAAKC,GACjDM,SAAY,SAACP,EAAGC,GACd,QAAKD,IACoB,mBAAdA,EAAE1O,UACU,EAAhB0O,EAAE1O,QAAQ2O,KAEnBO,IAAO,SAACR,EAAGC,GAAM,OAAAQ,GAAST,IAAMS,GAASR,IACzCS,GAAM,SAACV,EAAGC,GAAM,OAAAQ,GAAST,IAAMS,GAASR,cAG1BU,GAASC,EAAK7G,GAC5BsB,EAAOtB,EAAO,sCAGd,IAFA,IACIgE,EADE8C,EAAcC,EAEXzK,EAAI,EAAGA,EAAIwK,EAAYvO,OAAQ+D,IAAK,CAC3C,IAAM0K,EAAaF,EAAYxK,GACzB2K,EAAQ,IAAIlO,OAAO,KAAKmO,EAAsBlO,YAAWgO,EAAWhO,YAAWkO,EAAsBlO,aAC3G,GAAKgL,EAAQ6C,EAAI7C,MAAMiD,GAAS,CAC9B,IAAMhB,EAAIW,GAAQ5C,EAAM,GAAIhE,GAG5B,OAAOmH,EAFIzM,GAAUsJ,EAAM,GAAGD,SAEpBkC,EADAW,GAAQ5C,EAAM,GAAIhE,KAKhC,GAAKgE,EAAQ6C,EAAI7C,MAAMoD,GAAqB,CAI1C,IAHA,IAAMC,EAAMC,GAAUtD,EAAM,GAAIhE,GAC1BuH,EAAOD,GAAUtD,EAAM,GAAIhE,GAC3BvG,EAAQ,GACLyH,EAAImG,EAAKnG,GAAKqG,EAAMrG,IAC3BzH,EAAM7B,KAAKsJ,GAEb,OAAOzH,EAGT,OAAO6N,GAAUT,EAAK7G,YAGRsH,GAAW5O,EAAKsH,GAE9B,GADAtH,EAAMA,GAAOA,EAAIqL,OACjB,CAEA,GhBIyBrL,EgBJHA,EhBKfoB,EAAYuH,KAAK3I,GgBJtB,gBhBmB0BA,GAC5B,IAAI8O,EAAM9O,EAAIsL,MAAMhK,GACpB,GAAIwN,EACF,OAAOC,OAAO/O,GAGhB,GADA8O,EAAM9O,EAAIsL,MAAM/J,GAEd,MAA6B,SAAtBvB,EAAIgP,cAGb,GADAF,EAAM9O,EAAIsL,MAAM9J,GAEd,OAAOxB,EAAI6I,MAAM,GAAI,GAEvB,MAAM,IAAIZ,UAAU,iBAAiBjI,kBgBhC5BiP,CAAqBjP,OhBGLA,EAQCA,EgBT1B,GhBS0BA,EgBTHA,EhBUhBqB,EAAasH,KAAK3I,GgBTvB,OAAOsH,EAAMyB,IAAI/I,GAEnB,MAAM,IAAIiI,UAAU,gBAAgBjI,0BAGtBgO,GAAUrH,GACxB,OAAQuI,GAAQvI,YAGFuI,GAASvI,GACvB,OAAe,IAARA,GAAAA,MAA+BA,ECxDxC,OAEE,SAAawI,EAAQ7H,GACnB,IAAIgE,EAEJ,IADApK,EAAYkO,UAAY,EAChB9D,EAAQpK,EAAYmO,KAAKF,IAAU,CACzC,IAAM1P,EAAI6L,EAAM,GACV5D,EAAI4D,EAAM,GAChBlJ,KAAK3C,GAAKmP,GAAUlH,EAAGJ,QCb3B,SAAa/E,GACXH,KAAKG,MAAQA,kBCaf,WAAaA,EAAiBoJ,EAAiB2D,GAA/C,MACE5K,YAAMnC,SACNoC,EAAK9B,KAAON,EAAMM,KAElB,IAAM0M,EAAOC,EAAIC,MAAMlN,EAAMM,aAC7B+F,EAAO2G,EAAM,OAAOhN,EAAMM,mBAC1B8B,EAAK4K,KAAOpQ,EAAkCoQ,GAC9C5K,EAAK4K,KAAKD,OAASA,EACf3K,EAAK4K,KAAKG,OACZ/K,EAAK4K,KAAKG,MAAMnN,EAAOoJ,KAkB7B,OAjCiC/G,OAkBzB4K,mBAAN,SAAclI,mGAGZ,OAFMrG,EAAO,IAAI0O,GAAKvN,KAAKG,MAAMiJ,KAAMlE,GAEZ,mBADrBiI,EAAOnN,KAAKmN,MACFrC,UACP,OAEUqC,EAAKrC,OAAO5F,EAAOrG,WACtC,SAAOzC,EADMyO,iBAGRuC,WAAP,SAAiB3M,EAAc+M,GAC7BJ,EAAIC,MAAM5M,GAAQ+M,GAEbJ,QAAP,WACEA,EAAIC,MAAQ,IA3BPD,QAA4C,MAJpBK,ICL3BC,GAAU,IAAIzP,OAAO,GAAG0P,EAAczP,OAAU,mBAQpD,WAAaN,EAAagQ,gBAAAA,MACxB,IAAM1E,EAAQ2E,EAAmBZ,KAAKrP,GACtC4I,EAAO0C,EAAO,mBAAqBtL,GAEnC,IAAM6C,EAAOyI,EAAM,GACb4E,EAAU5E,EAAM,IAAM,GACtBiE,EAAOY,EAAOV,MAAM5M,GAC1B,IAAK0M,GAAQS,EAAe,MAAM,IAAI/H,UAAU,qBAAqBpF,GAErET,KAAKS,KAAOA,EACZT,KAAKmN,KAAOA,YAASa,GAAK,OAAAA,GAC1BhO,KAAKoJ,KAAOpJ,KAAKiO,UAAUH,GAwB/B,OAtBEC,sBAAA,SAAWD,GAET,IADA,IAAI5E,EAAaE,EAAO,GAChBF,EAAQwE,GAAQT,KAAKa,EAAQ7E,SAAU,CAC7C,IAAM3D,EAAI4D,EAAM,GAEVgF,EADK,IAAIjQ,OAAUqH,UAAU,KACf2H,KAAK/D,EAAM9I,OACL8N,GAAYA,EAASC,QAAUjF,EAAMiF,MAC3C/E,EAAKtM,KAAK,IAAIwI,OAAQ8D,EAAKtM,KAAKwI,GAEtD,OAAO8D,GAET2E,mBAAA,SAAQ9R,EAAYiJ,GAClB,IAAMkE,EAAOpJ,KAAKoJ,KAAK1H,IAAI,SAAA0M,GAAO,OAAA5B,GAAU4B,EAAKlJ,KAEjD,OADAkE,EAAK1D,QAAQzJ,GACN+D,KAAKmN,KAAKkB,MAAM,KAAMjF,IAExB2E,WAAP,SAAiBtN,EAAMhB,GACrBsO,EAAOV,MAAM5M,GAAQhB,GAEhBsO,QAAP,WACEA,EAAOV,MAAQ,IAnCFU,QAA+B,sBCD9C,WAAaxE,EAAsB+E,GAJ3BtO,cAA0C,GAKhDA,KAAKuJ,OAASA,EACdvJ,KAAKsO,WAAaA,EAgCtB,OA9BEC,eAAA,SAAI9N,EAAc+N,GAEhB,OADAxO,KAAKyO,SAAShO,GAAQ+N,EACfxO,MAETuO,oBAAA,SAASG,EAAeN,GACtB,IAAMO,EAAI3O,KAAKyO,SAASC,GACxB,GAAiB,mBAANC,EAET,OADAA,EAAEP,IACK,GAGXG,kBAAA,WAEE,IAAIpO,EACJ,IAFAH,KAAK4O,QAAQ,UAEL5O,KAAK6O,gBAAkB1O,EAAQH,KAAKuJ,OAAOuF,UACjD,KAAI9O,KAAK4O,QAAQ,QAASzO,IACP,QAAfA,EAAMzC,MACNsC,KAAK4O,QAAQ,OAAOzO,EAAMM,KAAQN,IADtC,CAIA,IAAM4O,EAAW/O,KAAKsO,WAAWnO,EAAOH,KAAKuJ,QAC7CvJ,KAAK4O,QAAQ,WAAYG,GAG3B,OADK/O,KAAK6O,eAAe7O,KAAK4O,QAAQ,OAC/B5O,MAETuO,iBAAA,WAEE,OADAvO,KAAK6O,eAAgB,EACd7O,yBCnCT,WAAapC,EAAagQ,GACxB,ItByDwBhQ,EsBzDpBsL,GtByDoBtL,EsBzDOA,EtB0D1B3B,EAAMgR,KAAKrP,IsBzDhB4I,EAAO0C,EAAO,yBAAyBtL,GAEvC,IAAMoR,EAAU9F,EAAM,GACtBtL,EAAMA,EAAImM,OAAOb,EAAMiF,MAAQjF,EAAM,GAAGzL,QAGxC,IADA,IAAMwR,EAAU,GACR/F,EAAQgG,EAAejC,KAAKrP,IAClCqR,EAAQnS,KAAK,CAACoM,EAAM,GAAGD,SAGzBjJ,KAAKgP,QAAUA,EACfhP,KAAKiP,QAAUA,EAAQvN,IAAI,SAAA9D,GAAO,OAAA,IAAImQ,GAAOnQ,EAAKgQ,KAOtD,OALEuB,kBAAA,SAAOjK,GACL,OAAOlF,KAAKiP,QAAQ3K,OAClB,SAAC8K,EAAM3P,GAAW,OAAAA,EAAOqL,OAAOsE,EAAMlK,IACtC4G,GAAQ9L,KAAKgP,QAAS9J,yBClB1B,WAAa/E,EAAoByN,GAAjC,MACEtL,YAAMnC,gBACNoC,EAAKtG,MAAQ,IAAIoT,GAAMlP,EAAMlE,MAAO2R,KAMxC,OAVoCpL,OAM5B8M,mBAAN,SAAcpK,2FACC,SAAMlF,KAAK/D,MAAMA,MAAMiJ,WACpC,SAAO9I,EADMyO,oBAPmB4C,mBCDlC,WAAatN,GAAb,MACEmC,YAAMnC,gBACNoC,EAAK3E,IAAMuC,EAAMlE,QAKrB,OAT6BuG,OAMrB2M,mBAAN,4EACE,SAAOnP,KAAKpC,aAPa6P,kBCS3B,WAAaP,GACXlN,KAAKkN,OAASA,EA0BlB,OAxBEqC,kBAAA,SAAOhG,GAGL,IAFA,IAAIpJ,EACEuK,EAAY,GACVvK,EAAQoJ,EAAOuF,SACrBpE,EAAU5N,KAAKkD,KAAKsO,WAAWnO,EAAOoJ,IAExC,OAAOmB,GAET6E,uBAAA,SAAYpP,EAAcqP,GACxB,IACE,MAAmB,QAAfrP,EAAMzC,KACD,IAAI0P,GAAIjN,EAAmBqP,EAAcxP,KAAKkN,QAEpC,WAAf/M,EAAMzC,KACD,IAAI4R,GAAOnP,EAAsBH,KAAKkN,OAAOpJ,QAAQH,gBAEvD,IAAIgG,GAAKxJ,GAChB,MAAOsP,GACP,MAAM,IAAI9M,EAAW8M,EAAGtP,KAG5BoP,wBAAA,SAAahG,GAAb,WACE,OAAO,IAAIgF,GAAYhF,EAAQ,SAACpJ,EAAOoJ,GAAW,OAAAhH,EAAK+L,WAAWnO,EAAOoJ,WClCvEmG,GAAK,IAAIzR,OAAO,IAAIK,EAAWJ,0BAEtB,CACboP,MAAO,SAAUnN,GACf,IAAM+I,EAAQ/I,EAAMiJ,KAAKF,MAAMwG,IAC/BlJ,EAAO0C,EAAO,iBAAiB/I,EAAMyI,KACrC5I,KAAKpD,IAAMsM,EAAM,GACjBlJ,KAAK/D,MAAQiN,EAAM,IAErB4B,OAAQ,SAAU5F,GAChB,IAAMjB,EAAM,IAAI0L,GAGhB,OAFA1L,EAAIjE,KAAKpD,KAAOoD,KAAKkN,OAAOV,UAAUxM,KAAK/D,MAAOiJ,GAClDA,EAAMpI,KAAKmH,GACJ6C,QAAQC,QAAQ,eCGX6I,GAAWC,EAAUzS,GACnC,IAAI0S,EAAoBhJ,QAAQC,QAAQ,QAClCgJ,EAAS,GAMf,OALAF,EAASnL,QAAQ,SAAUsL,EAAMC,GAC/BH,EAAMA,EACHI,KAAK,WAAM,OAAA9S,EAAS4S,EAAMC,EAAKJ,KAC/BK,KAAK,SAAAlC,GAAK,OAAA+B,EAAOjT,KAAKkR,OAEpB8B,EAAII,KAAK,WAAM,OAAAH,ICrBxB,IAAML,GAAK,IAAIzR,OAAO,KAAKK,EAAWJ,sBAChCjC,EAAMiC,kBACAW,EAAKX,sCAELW,EAAKX,qBAiFF,CAAEoP,MA/EjB,SAAgB6C,EAAUX,GAA1B,IAUMhG,SATEN,EAAQwG,GAAGzC,KAAKkD,EAAS/G,MAC/B5C,EAAO0C,EAAO,gBAAgBiH,EAASvH,KACvC5I,KAAKvB,SAAWyK,EAAM,GACtBlJ,KAAKoQ,WAAalH,EAAM,GACxBlJ,KAAKqQ,WAAanH,EAAM,GAExBlJ,KAAK0K,UAAY,GACjB1K,KAAKsQ,cAAgB,GAGrB,IAAMC,EAASvQ,KAAKkN,OAAOsD,OAAOC,YAAYjB,GAC3CkB,GAAG,QAAS,WAAM,OAAClH,EAAIjH,EAAKmI,YAC5BgG,GAAG,WAAY,WAAM,OAAClH,EAAIjH,EAAK+N,gBAC/BI,GAAG,aAAc,WAAM,OAAAH,EAAOlP,SAC9BqP,GAAG,WAAY,SAAA9N,GAAO,OAAA4G,EAAE1M,KAAK8F,KAC7B8N,GAAG,MAAO,WACT,MAAM,IAAI5Q,MAAM,OAAOqQ,EAASvH,qBAGpC2H,EAAOnP,SA2De0J,OAxDxB,SAAuB5F,EAAOrG,kHAU5B,OAPK5B,EAFDmT,EAAatE,GAAQ9L,KAAKoQ,WAAYlL,MAGpClJ,EAASoU,IAAmC,EAApBA,EAAW3S,OACrC2S,EAAa,CAACA,GACLvT,EAASuT,KAClBA,EAAazU,OAAOgV,KAAKP,GAAY1O,IAAI,SAAC9E,GAAQ,MAAA,CAACA,EAAKwT,EAAWxT,QAGlEK,EAAQmT,IAAgBA,EAAW3S,QAIlCmT,EAAS/R,EAAK+R,QAAU,EACxBC,OAAwBpL,IAAf5G,EAAKgS,MAAuBT,EAAW3S,OAASoB,EAAKgS,MAEpET,EAAaA,EAAW3J,MAAMmK,EAAQA,EAASC,GAC3C7Q,KAAKqQ,UAAUD,EAAWU,UAExB1M,EAAWgM,EAAW1O,IAAI,SAACsO,EAAMxO,GACrC,IAAMyC,EAAM,GAWZ,OAVAA,EAAI1B,EAAK9D,UAAYuR,EACrB/L,EAAa,QAAI,CACf8M,MAAa,IAANvP,EACP2M,MAAO3M,EAAI,EACXwP,OAAQxP,EACRjE,KAAMiE,IAAM4O,EAAW3S,OAAS,EAChCA,OAAQ2S,EAAW3S,OACnBwT,OAAQb,EAAW3S,OAAS+D,EAC5B0P,QAASd,EAAW3S,OAAS+D,EAAI,GAE5ByC,IAGL0G,EAAO,GACPwG,GAAW,KACTvB,GAAUxL,EAAU,SAAMtD,gGAC9B,GAAIqQ,EAAU,UAEdjM,EAAMpI,KAAKgE,oBAED,6BAAR+J,EAAAF,KAAc3K,KAAKkN,OAAOkE,SAASC,gBAAgBrR,KAAK0K,UAAWxF,kBAAnEyF,EAAAE,EAAQE,sBAER,4BAAiBjI,GAKV,MAAMkI,SAJXL,GAAQK,EAAEC,aACQ,UAAdD,EAAE/I,UACJkP,GAAW,uBAIjBjM,EAAMS,IAAI7E,mBAxCHd,KAAKkN,OAAOkE,SAASC,gBAAgBrR,KAAKsQ,cAAepL,WA0ClE,OAhBA2F,YAgBOF,UClFH+E,GAAK,IAAIzR,OAAO,IAAIK,EAAWJ,eAEtB,CACboP,MAAO,SAAU6C,EAAoBX,GAA9B,WACCtG,EAAQiH,EAAS/G,KAAKF,MAAMwG,IAClClJ,EAAO0C,EAAUiH,EAAS/G,8BAE1BpJ,KAAKvB,SAAWyK,EAAM,GACtBlJ,KAAK0K,UAAY,GAEjB,IAAM6F,EAASvQ,KAAKkN,OAAOsD,OAAOC,YAAYjB,GAC9Ce,EAAOG,GAAG,iBAAkB,WAAM,OAAAH,EAAOlP,SACtCqP,GAAG,WAAY,SAAA9N,GAAO,OAAAL,EAAKmI,UAAU5N,KAAK8F,KAC1C8N,GAAG,MAAO,WACT,MAAM,IAAI5Q,MAAM,OAAOqQ,EAASvH,qBAEpC2H,EAAOnP,SAET0J,OAAQ,SAAgB5F,mGACT,SAAMlF,KAAKkN,OAAOkE,SAASC,gBAAgBrR,KAAK0K,UAAWxF,kBAAlEyF,EAAOE,UACP5G,EAAM,IAAIqN,IACZtR,KAAKvB,UAAYkM,EACrBzF,EAAMpI,KAAKmH,iBC3BA,CACbqJ,MAAO,SAAU6C,EAAUX,GAApB,WACLxP,KAAKuR,KAAOpB,EAAS/G,KACrBpJ,KAAKwR,MAAQ,GACbxR,KAAKsQ,cAAgB,GAErB,IAAI9G,EAAI,GACF+G,EAASvQ,KAAKkN,OAAOsD,OAAOC,YAAYjB,GAC3CkB,GAAG,WAAY,SAAAvQ,GACdoC,EAAKiP,MAAM1U,KAAK,CACdyH,IAAKpE,EAAMiJ,KACXsB,UAAWlB,EAAI,OAGlBkH,GAAG,WAAY,WAAM,OAAClH,EAAIjH,EAAK+N,gBAC/BI,GAAG,cAAe,WAAM,OAAAH,EAAOlP,SAC/BqP,GAAG,WAAY,SAAA9N,GAAO,OAAA4G,EAAE1M,KAAK8F,KAC7B8N,GAAG,MAAO,WACT,MAAM,IAAI5Q,MAAM,OAAOqQ,EAASvH,qBAGpC2H,EAAOnP,SAGT0J,OAAQ,SAAU5F,GAChB,IAAK,IAAI1D,EAAI,EAAGA,EAAIxB,KAAKwR,MAAM/T,OAAQ+D,IAAK,CAC1C,IAAMiQ,EAASzR,KAAKwR,MAAMhQ,GAG1B,GAFYsK,GAAQ2F,EAAOlN,IAAKW,KACnB4G,GAAQ9L,KAAKuR,KAAMrM,GAE9B,OAAOlF,KAAKkN,OAAOkE,SAASC,gBAAgBI,EAAO/G,UAAWxF,GAGlE,OAAOlF,KAAKkN,OAAOkE,SAASC,gBAAgBrR,KAAKsQ,cAAepL,QCnCrD,CACboI,MAAO,SAAU6C,EAAUX,GACzB,IAAMe,EAASvQ,KAAKkN,OAAOsD,OAAOC,YAAYjB,GAC9Ce,EACGG,GAAG,QAAS,SAAAvQ,GACQ,eAAfA,EAAMM,MAAuB8P,EAAOlP,SAEzCqP,GAAG,MAAO,WACT,MAAM,IAAI5Q,MAAM,OAAOqQ,EAASvH,qBAEpC2H,EAAOnP,UCLLsQ,GAAe,UACfC,GAAS,IAAI1T,OAAO,YAAYhC,EAAMiC,eAE7B,CACboP,MAAO,SAAUnN,GACf,IAAI+I,EAAQwI,GAAazE,KAAK9M,EAAMiJ,MAChCF,IACFlJ,KAAK4R,YAAc1I,EAAM,KAG3BA,EAAQjN,EAAMgR,KAAK9M,EAAMiJ,SAEvBpJ,KAAK/D,MAAQiN,EAAM,KAGrBA,EAAQyI,GAAO1E,KAAK9M,EAAMiJ,SAExBpJ,KAAK6R,KAAO3I,EAAM,KAGtB4B,OAAQ,SAAgB5F,EAAOrG,kHAEzBqG,EAAMhB,KAAKb,gBACTjE,EAAW6N,KAAKjN,KAAK/D,QACjB8S,EAAW/O,KAAK/D,MAAMwK,MAAM,GAAI,MACrBzG,KAAKkN,OAAO4E,eAAe/C,EAAU7J,EAAM6M,SAAU7M,EAAMhB,kCAA5EwD,EAAWmD,sBAEXnD,EAAW8E,GAAUxM,KAAK/D,MAAOiJ,uCAGnCwC,EAAW1H,KAAK4R,6BAYA,OAVlBpL,EAAOkB,EAAU,sCAEXsK,EAAe9M,EAAM+M,OACrBC,EAAkBhN,EAAMiN,UAE9BjN,EAAM+M,OAAS,GACf/M,EAAMiN,UAAYlP,GAAUkB,OACxBnE,KAAK6R,OACPhT,EAAK6I,GAAY8E,GAAUxM,KAAK6R,KAAM3M,OAEhBlF,KAAKkN,OAAOkF,YAAY1K,EAAUxC,EAAMhB,cAEnD,OAFPwG,EAAYG,SAClB3F,EAAMpI,KAAK+B,MACQmB,KAAKkN,OAAOkE,SAASC,gBAAgB3G,EAAWxF,WAInE,OAJMyF,EAAOE,SACb3F,EAAMS,IAAI9G,GACVqG,EAAM+M,OAASD,EACf9M,EAAMiN,UAAYD,KACXvH,aC/CI,CACb2C,MAAO,SAAUnN,GACf,IAAM+I,EAAQ/I,EAAMiJ,KAAKF,MAAM5K,GAC/BkI,EAAO0C,EAAO,sBAAsB/I,EAAMiJ,MAC1CpJ,KAAKvB,SAAWyK,EAAM,IAExB4B,OAAQ,SAAU5F,GAChB,IAAIpE,EAAUoE,EAAMC,eAClBnF,KAAKvB,SACL,SAAAwF,GACE,QAASA,aAAeqN,IAAmBrN,aAAe0L,MAU9D,OAPK7O,IACHA,EAAU,IAAIuR,GACdnN,EAAMQ,QAAQ5E,IAEsB,iBAA3BA,EAAQd,KAAKvB,YACtBqC,EAAQd,KAAKvB,UAAY,KAElBqC,EAAQd,KAAKvB,YCtBpB6T,GAAU,IAAIrU,OAAO,QAAQsU,EAAOrU,4BACpCsU,GAAe,IAAIvU,OAAOsU,EAAOrU,OAAQ,QAEhC,CACboP,MAAO,SAAU6C,GACf,IAAIjH,EAAQoJ,GAAQrF,KAAKkD,EAAS/G,MAClC5C,EAAO0C,EAAO,gBAAgBiH,EAASvH,KAEvC5I,KAAKyS,MAAQvJ,EAAM,IAAM,GACzB,IAAMwJ,EAAaxJ,EAAM,GAIzB,IAFAlJ,KAAK0S,WAAa,GAEVxJ,EAAQsJ,GAAavF,KAAKyF,IAChC1S,KAAK0S,WAAW5V,KAAKoM,EAAM,IAE7B1C,EAAOxG,KAAK0S,WAAWjV,OAAQ,qBAAqB0S,EAASvH,MAG/DkC,OAAQ,SAAU5F,GAChB,IACMyN,EAAc,SADNnG,GAAUxM,KAAKyS,MAAOvN,OACIlF,KAAK0S,WAAW1Q,KAAK,KAEvD4Q,EAAS1N,EAAMhB,KAAK0O,OAAS1N,EAAMhB,KAAK0O,QAAU,GACpD3C,EAAM2C,EAAOD,QAELlN,IAARwK,IACFA,EAAM2C,EAAOD,GAAe,GAG9B,IAAM5M,EAAY/F,KAAK0S,WAAWzC,GAIlC,OAHAA,GAAOA,EAAM,GAAKjQ,KAAK0S,WAAWjV,OAClCmV,EAAOD,GAAe1C,EAEfzD,GAAUzG,EAAWb,QCpCjB,CACboI,MAAO,SAAU6C,EAAUX,GAApB,IAIDhG,SAHJxJ,KAAK6S,SAAW,GAChB7S,KAAKsQ,cAAgB,GAGrB,IAAMC,EAASvQ,KAAKkN,OAAOsD,OAAOC,YAAYjB,GAC3CkB,GAAG,QAAS,WAAM,OAAAnO,EAAKsQ,SAAS/V,KAAK,CACpCyU,KAAMpB,EAAS/G,KACfsB,UAAYlB,EAAI,OAEjBkH,GAAG,YAAa,SAAAvQ,GACfoC,EAAKsQ,SAAS/V,KAAK,CACjByU,KAAMpR,EAAMiJ,KACZsB,UAAWlB,EAAI,OAGlBkH,GAAG,WAAY,WAAM,OAAClH,EAAIjH,EAAK+N,gBAC/BI,GAAG,YAAa,WAAM,OAAAH,EAAOlP,SAC7BqP,GAAG,WAAY,SAAA9N,GAAO,OAAA4G,EAAE1M,KAAK8F,KAC7B8N,GAAG,MAAO,WACT,MAAM,IAAI5Q,MAAM,OAAOqQ,EAASvH,qBAGpC2H,EAAOnP,SAGT0J,OAAQ,SAAU5F,GAChB,IAAqB,QAAA2F,EAAA7K,KAAK6S,SAALrO,WAAAA,IAAe,CAA/B,IAAMiN,OAET,GAAI7F,GADSE,GAAQ2F,EAAOF,KAAMrM,IAEhC,OAAOlF,KAAKkN,OAAOkE,SAASC,gBAAgBI,EAAO/G,UAAWxF,GAGlE,OAAOlF,KAAKkN,OAAOkE,SAASC,gBAAgBrR,KAAKsQ,cAAepL,QChCrD,CACboI,MAAO,SAAUnN,GACf,IAAM+I,EAAQ/I,EAAMiJ,KAAKF,MAAM5K,GAC/BkI,EAAO0C,EAAO,sBAAsB/I,EAAMiJ,MAC1CpJ,KAAKvB,SAAWyK,EAAM,IAExB4B,OAAQ,SAAU5F,GAChB,IAAIpE,EAAUoE,EAAMC,eAClBnF,KAAKvB,SACL,SAAAwF,GACE,QAASA,aAAeqN,IAAmBrN,aAAe0L,MAGzD7O,IACHA,EAAU,IAAIgS,GACd5N,EAAMQ,QAAQ5E,IAEsB,iBAA3BA,EAAQd,KAAKvB,YACtBqC,EAAQd,KAAKvB,UAAY,GAE3B,IAAM8F,EAAMzD,EAAQd,KAAKvB,UAEzB,OADAqC,EAAQd,KAAKvB,YACN8F,ICrBLmN,GAAe,SAEN,CACbpE,MAAO,SAAUnN,EAAOqP,GACtB,IAAItG,EAAQwI,GAAazE,KAAK9M,EAAMiJ,MAChCF,IACFlJ,KAAK+S,aAAe7J,EAAM,KAG5BA,EAAQqJ,EAAOtF,KAAK9M,EAAMiJ,SAExBpJ,KAAKgT,OAAS9J,EAAM,IAGtBlJ,KAAKiT,KAAOjT,KAAKkN,OAAOsD,OAAOlD,MAAMkC,IAEvC1E,OAAQ,SAAgB5F,EAAOrG,uGAQhB,OAJb2H,EAHMwM,EAAS9N,EAAMhB,KAAKb,gBACtBmJ,GAAUxM,KAAKgT,OAAQ9N,GACvBlF,KAAK+S,aACM,2CAGf7N,EAAMiN,UAAYlP,GAAUiQ,SACTlT,KAAKkN,OAAOkE,SAASC,gBAAgBrR,KAAKiT,KAAM/N,WAIjD,OAJZyF,EAAOE,cACYpF,IAArBP,EAAM+M,OAAO,MACf/M,EAAM+M,OAAO,IAAMtH,MAEG3K,KAAKkN,OAAOkF,YAAYY,EAAQ9N,EAAMhB,cAG9C,OAHVwG,EAAYG,SAClB3F,EAAMpI,KAAK+B,GACXqG,EAAMiN,UAAYlP,GAAUkB,UACNnE,KAAKkN,OAAOkE,SAASC,gBAAgB3G,EAAWxF,WAEtE,OAFMiO,EAAUtI,SAChB3F,EAAMS,IAAI9G,MACHsU,aCpCI,CACb7F,MAAO,SAAUnN,EAAOqP,GAAjB,WACCtG,EAAQ,MAAM+D,KAAK9M,EAAMiJ,MAC/BpJ,KAAKoT,MAAQlK,EAAQA,EAAM,GAAK,GAEhClJ,KAAKiT,KAAO,GACZ,IAAM1C,EAASvQ,KAAKkN,OAAOsD,OAAOC,YAAYjB,GAC3CkB,GAAG,eAAgB,WAAM,OAAAH,EAAOlP,SAChCqP,GAAG,WAAY,SAAA9N,GAAO,OAAAL,EAAK0Q,KAAKnW,KAAK8F,KACrC8N,GAAG,MAAO,WACT,MAAM,IAAI5Q,MAAM,OAAOK,EAAMyI,qBAEjC2H,EAAOnP,SAET0J,OAAQ,SAAgB5F,iHAEQO,KADxB4N,EAAenO,EAAM+M,OAAOjS,KAAKoT,eAEnCvI,EAAAwI,gBACA,SAAMrT,KAAKkN,OAAOkE,SAASC,gBAAgBrR,KAAKiT,KAAM/N,WAAtD2F,EAAAE,0BAEJ,OAJMJ,IAIFzF,EAAMiN,YAAclP,GAAUiQ,OAChChO,EAAM+M,OAAOjS,KAAKoT,OAASzI,KACpB,QAEFA,aC1BI,CACb2C,MAAO,SAAU6C,EAAUX,GAApB,WACLxP,KAAKuJ,OAAS,GAEd,IAAMgH,EAASvQ,KAAKkN,OAAOsD,OAAOC,YAAYjB,GAC9Ce,EACGG,GAAG,QAAS,SAAAvQ,GACQ,WAAfA,EAAMM,KAAmB8P,EAAOlP,OAC/BkB,EAAKgH,OAAOzM,KAAKqD,KAEvBuQ,GAAG,MAAO,WACT,MAAM,IAAI5Q,MAAM,OAAOqQ,EAASvH,qBAEpC2H,EAAOnP,SAET0J,OAAQ,WACN,OAAO9K,KAAKuJ,OAAO7H,IAAI,SAAAvB,GAAS,OAAAA,EAAMyI,MAAK5G,KAAK,MCX9C0N,GAAK,IAAIzR,OAAO,KAAKK,EAAWJ,sBAChCjC,EAAMiC,kBACAW,EAAKX,cCYXoV,GAA2C,CAC/CC,UAAQC,IAAOC,GAAKC,WAASC,KAAQC,GAAMC,WAASC,WAASC,aAAWC,aAAWC,SAAOC,GAAMC,GAAInB,UAAQI,SAAOxK,OAAKwL,SDX3G,CACb9G,MAAO,SAAU6C,EAAUX,GAApB,IAQDhG,SAPEN,EAAQwG,GAAGzC,KAAKkD,EAAS/G,MAC/B5C,EAAO0C,EAAO,gBAAgBiH,EAASvH,KAEvC5I,KAAKvB,SAAWyK,EAAM,GACtBlJ,KAAKoQ,WAAalH,EAAM,GACxBlJ,KAAK0K,UAAY,GAGjB,IAAM6F,EAASvQ,KAAKkN,OAAOsD,OAAOC,YAAYjB,GAC3CkB,GAAG,QAAS,WAAM,OAAClH,EAAIjH,EAAKmI,YAC5BgG,GAAG,kBAAmB,WAAM,OAAAH,EAAOlP,SACnCqP,GAAG,WAAY,SAAA9N,GAAO,OAAA4G,EAAE1M,KAAK8F,KAC7B8N,GAAG,MAAO,WACT,MAAM,IAAI5Q,MAAM,OAAOqQ,EAASvH,qBAGpC2H,EAAOnP,SAGT0J,OAAQ,SAAgB5F,EAAOrG,oHAe7B,OAdIuR,EAAatE,GAAQ9L,KAAKoQ,WAAYlL,IAAU,GAC9C0L,EAAS/R,EAAK+R,QAAU,EACxBC,OAAwBpL,IAAf5G,EAAKgS,MAAuBT,EAAW3S,OAASoB,EAAKgS,MAEpET,EAAaA,EAAW3J,MAAMmK,EAAQA,EAASC,GACzCwD,EAAOxV,EAAKwV,MAAQjE,EAAW3S,OAC/B2G,EAAWgM,EAAW1O,IAAI,SAAAsO,GAC9B,IAAM/L,EAAM,GAEZ,OADAA,EAAI1B,EAAK9D,UAAYuR,EACd/L,IAIL0G,EAAO,MACLiF,GAAUxL,EAAU,SAAOtD,EAASmP,gGAYhC,OAXRqE,EAAMrT,KAAKsT,MAAMtE,EAAMoE,GAAQ,EAEnB,KADNlS,EAAO8N,EAAMoE,EAAQ,KAEb,IAARC,IACF3J,GAAQ,SAEVA,GAAQ,iBAAiB2J,QAG3B3J,GAAQ,iBAAiBxI,OACzB+C,EAAMpI,KAAKgE,GACX+J,EAAAF,KAAc3K,KAAKkN,OAAOkE,SAASC,gBAAgBrR,KAAK0K,UAAWxF,WAGnE,OAHAyF,EAAAE,EAAQE,SACRJ,GAAQ,QACRzF,EAAMS,IAAI7E,MACH6J,kBAKT,OApBAE,SAiBU,EAANyJ,IACF3J,GAAQ,YAEHA,UC7CyH6J,OClBrH,CACblH,MAAO,SAAU6C,EAAUX,GAApB,IAGDhG,SAFJxJ,KAAK0K,UAAY,GACjB1K,KAAKsQ,cAAgB,GAErB,IAAMC,EAASvQ,KAAKkN,OAAOsD,OAAOC,YAAYjB,GAC3CkB,GAAG,QAAS,WACXlH,EAAIjH,EAAKmI,UACTnI,EAAKgP,KAAOpB,EAAS/G,OAEtBsH,GAAG,WAAY,WAAM,OAAClH,EAAIjH,EAAK+N,gBAC/BI,GAAG,gBAAiB,WAAM,OAAAH,EAAOlP,SACjCqP,GAAG,WAAY,SAAA9N,GAAO,OAAA4G,EAAE1M,KAAK8F,KAC7B8N,GAAG,MAAO,WACT,MAAM,IAAI5Q,MAAM,OAAOqQ,EAASvH,qBAGpC2H,EAAOnP,SAGT0J,OAAQ,SAAU5F,GAEhB,OAAO4H,GADMhB,GAAQ9L,KAAKuR,KAAMrM,IAE5BlF,KAAKkN,OAAOkE,SAASC,gBAAgBrR,KAAK0K,UAAWxF,GACrDlF,KAAKkN,OAAOkE,SAASC,gBAAgBrR,KAAKsQ,cAAepL,KDN2EuP,MElB7H,CACb3J,OAAQ,4EACN,MAAM,IAAIhI,EAAiB,eFgB6H4R,SGlB7I,CACb5J,OAAQ,4EACN,MAAM,IAAIhI,EAAiB,mBCJzB6R,GAAY,CAChBC,IAAK,QACLrJ,IAAK,OACLD,IAAK,OACLuJ,IAAK,QACLC,IAAK,SAEDC,GAAc,CAClBC,QAAS,IACTC,OAAQ,IACRC,OAAQ,IACRC,QAAS,IACTC,QAAS,KAGX,SAASC,GAAQzX,GACf,OAAOG,OAAOH,GAAK4K,QAAQ,aAAc,SAAA8M,GAAK,OAAAX,GAAUW,YAO3C,CACbD,OAAUA,GACVE,YAAe,SAAA3X,GAAO,OAAAyX,GALftX,OAK+BH,GALnB4K,QAAQ,yBAA0B,SAAA8M,GAAK,OAAAP,GAAYO,OAMtEE,cAAiB,SAAAlQ,GAAK,OAAAA,EAAEkD,QAAQ,MAAO,WACvCiN,WAAc,SAAAnQ,GAAK,OAAAvH,OAAOuH,GAAGkD,QAAQ,4DAA6D,SC3BrF,CACbkN,OAAU,SAACpQ,EAAG8I,GAAQ,OAAA9I,EAAI8I,GAC1BuH,QAAW,SAACrQ,EAAG8I,GAAQ,OAAAA,EAAM9I,GAC7BsQ,WAAc,SAAAhY,GAAO,OAAAG,OAAOH,GAAKiY,OAAO,GAAGC,cAAgBlY,EAAI6I,MAAM,IACrEsP,OAAU,SAACzQ,EAAG8I,GAAQ,OAAArS,MAAMH,UAAUma,OAAO7Z,KAAKoJ,EAAG8I,IACrD4H,OAAU,SAAA1Q,GAAK,OAAAvH,OAAOuH,GAAGkD,QAAQ,OAAQ,KACzCyN,SAAY,SAAA3Q,GAAK,OAAAA,EAAEsH,eACnBsJ,OAAU,SAAAtY,GAAO,OAAAG,OAAOH,GAAKkY,eAC7BK,OAAU,SAAC7Q,EAAG8I,GAAQ,OAAA9I,EAAEtE,MAAMoN,GAAKpM,KAAK,KACxCoU,aAAgB,SAAC9Q,EAAG6F,GAAM,OAAA7F,EAAEkD,QAAQ2C,EAAG,KACvC3C,QAAW,SAAClD,EAAG+Q,EAASC,GACtB,OAAAvY,OAAOuH,GAAGtE,MAAMqV,GAASrU,KAAKsU,IAChCC,cAAiB,SAACjR,EAAGkR,EAAMC,GAAS,OAAA1Y,OAAOuH,GAAGkD,QAAQgO,EAAMC,IAC5DC,OAAU,SAAA9Y,GAAO,OAAAG,OAAOH,GAAK4K,QAAQ,OAAQ,KAC7CxH,MAAS,SAACsE,EAAG8I,GAAQ,OAAArQ,OAAOuH,GAAGtE,MAAMoN,IACrCuI,MAAS,SAACrR,GAAM,OAAAvH,OAAOuH,GAAG2D,QAC1B2N,eAAkB,SAAAtR,GAAK,OAAAvH,OAAOuH,GAAGkD,QAAQ,MAAO,KAChDqO,SAAY,SAACvR,EAAG6F,EAAG2L,GAIjB,OAFAA,OAAWrR,IAANqR,EAAmB,MAAQA,EAChC3L,EAAIA,GAAK,IAFT7F,EAAIvH,OAAOuH,IAGL7H,QAAU0N,EAAU7F,EACnBA,EAAEyE,OAAO,EAAGoB,EAAI2L,EAAErZ,QAAUqZ,GAErCC,cAAiB,SAACzR,EAAG6F,EAAG2L,QACZrR,IAANqR,IAAiBA,EAAI,OACzB,IAAMtZ,EAAM8H,EAAEtE,MAAM,KAChB8O,EAAMtS,EAAIiJ,MAAM,EAAG0E,GAAGnJ,KAAK,KAE/B,OADIxE,EAAIC,OAAS0N,IAAG2E,GAAOgH,GACpBhH,OC7BI,CACbkH,IAAO,SAAA1R,GAAK,OAAArE,KAAK+V,IAAI1R,IACrB2R,KAAQ,SAAA3R,GAAK,OAAArE,KAAKgW,KAAK3R,IACvB4R,WAAc,SAAC5R,EAAG8I,GAAQ,OAAA9I,EAAI8I,GAC9BmG,MAAS,SAAAjP,GAAK,OAAArE,KAAKsT,MAAMjP,IACzB6R,MAASC,GAAU,SAAC9R,EAAG8I,GAAQ,OAAA9I,EAAI8I,IACnCiJ,OAAUD,GAAU,SAAC9R,EAAG8I,GAAQ,OAAA9I,EAAI8I,IACpCkJ,MAAS,SAAChS,EAAG8I,GACX,IAAMmJ,EAAMtW,KAAKuW,IAAI,GAAIpJ,GAAO,GAChC,OAAOnN,KAAKqW,MAAMhS,EAAIiS,GAAOA,GAE/BE,KAAQL,GAAU,SAAC9R,EAAG8I,GAAQ,OAAAzB,OAAOrH,GAAKqH,OAAOyB,KACjDsJ,MAAS,SAACpS,EAAG8I,GAAQ,OAAA9I,EAAI8I,IAG3B,SAASuJ,GAAUrS,GACjB,IAAMkE,EAAIzL,OAAOuH,GAAGtE,MAAM,KAC1B,OAAmB,EAAXwI,EAAE/L,OAAc+L,EAAE,GAAG/L,OAAS,EAGxC,SAAS2Z,GAAW5I,GAClB,OAAO,SAACrD,EAAGC,GACT,IAAMwM,EAAI3W,KAAKC,IAAIyW,GAASxM,GAAIwM,GAASvM,IACzC,OAAOoD,EAAGrD,EAAGC,GAAGyM,QAAQD,WCvBb,CACbE,WAAc,SAAA9J,GAAK,OAAAA,EAAEhN,MAAM,KAAKU,IAAIqW,oBAAoB/V,KAAK,MAC7DgW,WAAc,SAAAhK,GAAK,OAAAA,EAAEhN,MAAM,KAAKU,IAAIuW,oBAAoBjW,KAAK,UCAhD,CACbA,KAAQ,SAACsD,EAAG8I,GAAQ,OAAA9I,EAAEtD,UAAayD,IAAR2I,EAAoB,IAAMA,IACrD7Q,KAAQ,SAAA+H,GAAK,OAAA/H,EAAK+H,IAClByL,MAAS,SAAAzL,GAAK,OAAAA,EAAE,IAChB5D,IAAO,SAAClE,EAAK4Q,GAAQ,OAAA5Q,EAAIkE,IAAI,SAAA4D,GAAK,OAAAA,EAAE8I,MACpC0C,QAAW,SAAAxL,GAAK,OAAAA,EAAEwL,WAClBoH,KAAQ,SAAC5S,EAAG8I,GAAQ,OAAA9I,EAAE4S,KAAK9J,IAC3BlI,KAAQ,SAAAZ,GAAK,OAAAA,EAAE7H,QACfgJ,MAAS,SAACnB,EAAG1E,EAAOnD,GAElB,YADegI,IAAXhI,IAAsBA,EAAS,GAC5B6H,EAAEmB,MAAM7F,EAAOA,EAAQnD,IAEhC0a,KAAQ,SAAU3a,GAChB,IAAM4a,EAAI,GACV,OAAQ5a,GAAO,IAAIiC,OAAO,SAAA8E,GACxB,OAAI6T,EAAE9a,eAAeiH,KAGrB6T,EAAE7T,IAAO,OClBT8T,GAAa,CACjB,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAChE,YAAa,UAAW,WAAY,YAEhCC,GAAW,CACf,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,YAE9DC,GAAkBF,GAAW3W,IAAI8W,IACjCC,GAAgBH,GAAS5W,IAAI8W,IAC7BE,GAAW,CACfC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,QAAW,MAGb,SAASN,GAAM5a,GACb,OAAOA,EAAI6I,MAAM,EAAG,GAItB,IAAMsS,GAAQ,CACZC,YAAa,SAAUC,GAErB,MAAO,CAAC,GADIF,GAAMG,WAAWD,GAAK,GAAK,GACtB,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,KAGvDE,aAAc,SAAUF,GAEtB,IADA,IAAIpX,EAAM,EACDL,EAAI,EAAGA,EAAIyX,EAAEG,aAAc5X,EAClCK,GAAOkX,GAAMC,YAAYC,GAAGzX,GAE9B,OAAOK,EAAMoX,EAAEI,WAGjBC,cAAe,SAAUL,EAAGM,GAE1B,IAAMC,EAAMxZ,KAAKmZ,aAAaF,IAAMM,EAAWN,EAAEQ,UAG3CvJ,EAAQ,EADD,IAAIwJ,KAAKT,EAAEU,cAAe,EAAG,GACnBF,SAAWF,EAClC,OAAO5b,EAASI,OAAOkD,KAAKsT,OAAOiF,EAAMtJ,GAAQ,GAAK,GAAI,EAAG,MAG/DgJ,WAAY,SAAUD,GACpB,IAAMW,EAAOX,EAAEU,cACf,QAAyB,IAAP,EAAPC,MAAoBA,EAAO,KAAQA,EAAO,KAAQ,GAAKA,KAGpEC,UAAW,SAAUZ,GACnB,IAAMrb,EAAMqb,EAAEI,UAAUxd,WAClBsS,EAAQ2L,SAASlc,EAAI6I,OAAO,IAClC,OAAOiS,GAASvK,IAAUuK,GAAkB,SAG9CqB,QAAS,SAAUd,GACjB,OAAOa,SAASb,EAAEU,cAAc9d,WAAWme,UAAU,EAAG,GAAI,MAI1DC,GAAc,CAClB7R,EAAG,SAAU6Q,GACX,OAAOR,GAAcQ,EAAEQ,WAEzBS,EAAG,SAAUjB,GACX,OAAOX,GAASW,EAAEQ,WAEpBU,EAAG,SAAUlB,GACX,OAAOV,GAAgBU,EAAEG,aAE3BgB,EAAG,SAAUnB,GACX,OAAOZ,GAAWY,EAAEG,aAEtBiB,EAAG,SAAUpB,GACX,OAAOA,EAAEqB,kBAEXC,EAAG,SAAUtB,GACX,OAAOF,GAAMgB,QAAQd,IAEvBA,EAAG,SAAUA,GACX,OAAOtb,EAASsb,EAAEI,UAAW,EAAG,MAElC5J,EAAG,SAAUwJ,GACX,OAAOtb,EAASsb,EAAEI,UAAW,IAE/BmB,EAAG,SAAUvB,GACX,OAAOtb,EAASsb,EAAEwB,WAAY,EAAG,MAEnCC,EAAG,SAAUzB,GACX,OAAOtb,EAASI,OAAOkb,EAAEwB,WAAa,IAAM,IAAK,EAAG,MAEtDrU,EAAG,SAAU6S,GACX,OAAOtb,EAASob,GAAMI,aAAaF,GAAI,EAAG,MAE5C5b,EAAG,SAAU4b,GACX,OAAOtb,EAASsb,EAAEwB,WAAY,IAEhCtP,EAAG,SAAU8N,GACX,OAAOtb,EAASI,OAAOkb,EAAEwB,WAAa,IAAM,IAAK,IAEnDE,EAAG,SAAU1B,GACX,OAAOtb,EAASsb,EAAE2B,kBAAmB,EAAG,MAE1CtF,EAAG,SAAU2D,GACX,OAAOtb,EAASsb,EAAEG,WAAa,EAAG,EAAG,MAEvCyB,EAAG,SAAU5B,GACX,OAAOtb,EAASsb,EAAE6B,aAAc,EAAG,MAErCtR,EAAG,SAAUyP,GACX,OAAQA,EAAEwB,WAAa,GAAK,KAAO,MAErCM,EAAG,SAAU9B,GACX,OAAQA,EAAEwB,WAAa,GAAK,KAAO,MAErCO,EAAG,SAAU/B,GACX,OAAOF,GAAMc,UAAUZ,IAEzBgC,EAAG,SAAUhC,GACX,OAAOhY,KAAKqW,MAAM2B,EAAEiC,UAAY,MAElCC,EAAG,SAAUlC,GACX,OAAOtb,EAASsb,EAAEmC,aAAc,EAAG,MAErChD,EAAG,SAAUa,GACX,OAAOA,EAAEQ,UAAY,GAEvB4B,EAAG,SAAUpC,GACX,OAAOF,GAAMO,cAAcL,EAAG,IAEhCqC,EAAG,SAAUrC,GACX,OAAOA,EAAEQ,UAEX8B,EAAG,SAAUtC,GACX,OAAOF,GAAMO,cAAcL,EAAG,IAEhCjL,EAAG,SAAUiL,GACX,OAAOA,EAAEuC,sBAEXC,EAAG,SAAUxC,GACX,OAAOA,EAAEyC,sBAEXC,EAAG,SAAU1C,GACX,OAAOA,EAAEU,cAAc9d,WAAWme,UAAU,EAAG,IAEjD4B,EAAG,SAAU3C,GACX,OAAOA,EAAEU,eAEXkC,EAAG,SAAU5C,GACX,IAAM6C,EAAK7C,EAAE8C,oBAAsB,GAAK,IACxC,OAAa,EAALD,EAAS,IAAM,KAAOne,EAASI,OAAOkD,KAAK+V,IAAI8E,IAAM,EAAG,MAElEE,IAAK,WACH,MAAO,MAGV/B,GAAoBtL,EAAIsL,GAAYE,EACpCF,GAAoBgC,EAAIhC,GAAYU,cCvJjBhQ,GAAS/M,GAAQse,GAASrV,GCL/B,CACbsV,KAAQ,SAAC7W,EAAG8I,GACV,IAUkB+N,EAVdA,EAAO7W,EAMX,MALU,QAANA,EACF6W,EAAO,IAAIzC,KACF1d,EAASsJ,KAClB6W,EAAO,IAAIzC,KAAKpU,KAMA6W,EAJCA,aAKEzC,OAAS0C,MAAMD,EAAKE,oBFiJpBpD,EAAGqD,GAI1B,IAHA,IAAIC,EAAS,GACTC,EAAYF,IAEH,CACX,IAAMlR,EAAI,MACJqR,EAAUrR,EAAE6B,KAAKuP,GAGvB,IAAKC,EACH,OAAOF,EAASC,EAIlBD,GAAUC,EAAU/V,MAAM,EAAG2E,EAAE4B,UAAY,GAC3CwP,EAAYA,EAAU/V,MAAM2E,EAAE4B,WAG9B,IAAMnP,EAAK4e,EAAQ,GAAG5G,OAAO,GACvB6G,EAAOzC,GAAYpc,GACzB0e,GAAUG,EAAOA,EAAKxgB,KAAK8D,KAAMiZ,GAAK,IAAMpb,GE1KjB8e,CAASR,EAAM/N,GAAO9I,ICTtC,CACbwT,QAAW,SAACxT,EAAG8I,GAAQ,OAAAxC,GAAStG,GAAKA,EAAI8I,IFK4BwO,sBGgBrE,WAAa1Y,gBAAAA,MAAb,WACQJ,OAAeZ,GAAmBW,GAAUK,IAC9CJ,EAAQpH,QACVsD,KAAKtD,MAAQ,IAEfsD,KAAK8D,QAAUA,EACf9D,KAAKwQ,OAAS,IAAIjB,GAAOvP,MACzBA,KAAKoR,SAAW,IAAI3G,GACpBzK,KAAK6c,UAAY,IAAIvT,GAAUtJ,KAAK8D,SAEpCgZ,EAASC,GAAa,SAACC,EAAMvc,GAAS,OAAA8B,EAAK0a,YAAYxc,EAAMuc,KAC7DF,EAASI,GAAgB,SAACC,EAAS1c,GAAS,OAAA8B,EAAK6a,eAAe3c,EAAM0c,KAgE1E,OA9DEE,kBAAA,SAAO1S,EAAcjD,GACnB,IAAM6B,EAASvJ,KAAK6c,UAAUS,SAAS3S,EAAMjD,GAC7C,OAAO1H,KAAKwQ,OAAOlD,MAAM/D,IAE3B8T,mBAAA,SAAQza,EAAuBqB,EAAcC,GAC3C,IAAMJ,OAAe9D,KAAK8D,QAAYD,GAAUK,IAC1CgB,EAAQ,IAAIb,GAAMJ,EAAKH,GAC7B,OAAO9D,KAAKoR,SAASC,gBAAgBzO,EAAKsC,IAEtCmY,2BAAN,SAAsB1S,EAAc1G,EAAcC,iGACpC,SAAMlE,KAAKsN,MAAM3C,WAC7B,OADM/H,EAAMiI,YACL7K,KAAK8K,OAAOlI,EAAKqB,EAAKC,UAEzBmZ,wBAAN,SAAmBhd,EAAM6D,wHACjBJ,EAAUD,GAAUK,GACpBqZ,EAAQzZ,EAAQX,KAAWW,EAAQX,YAASnD,KAAK8D,QAAQX,MAAQnD,KAAK8D,QAAQX,KAC9E6B,EAAQuY,EAAM7b,IAAI,SAAAyB,GAAQ,OAAAqa,GAAGzW,QAAQ5D,EAAM9C,EAAMkC,EAAKuB,QAAQV,eAE7Cqa,4BAAAjZ,YAAZkD,UACG8V,GAAG9U,OAAOhB,kBAAtB,OAAMqD,SAEF/K,KAAK8D,QAAQpH,OAASsD,KAAKtD,MAAMgL,MAAkB1H,KAAKtD,MAAMgL,KACpDmD,EAAA7K,KAAKsN,SAAYkQ,GAAG5W,SAASc,kBAE3C,OAFMzL,EAAQ4O,QAAA7K,MAAW+K,SAA6BrD,IAClD1H,KAAK8D,QAAQpH,QAAOsD,KAAKtD,MAAMgL,GAAYzL,MACxCA,iBANcuI,iBAYvB,MAHMtE,EAAM,IAAIJ,MAAM,WAClBmC,QAAU,6BAA6B5B,WAAakd,MACxDrd,EAAIwd,KAAO,SACLxd,QAEFmd,uBAAN,SAAkBhd,EAAM4D,EAAcC,mGAElB,OADZJ,EAAUD,GAAUK,MACFlE,KAAKoS,YAAY/R,EAAMyD,WAC/C,OADM4G,EAAYG,YACX7K,KAAK8K,OAAOJ,EAAWzG,EAAKC,UAErCmZ,sBAAA,SAAWzf,EAAasH,GACtB,OAAO,IAAImK,GAAMzR,EAAKoC,KAAK8D,QAAQH,gBAAgB1H,MAAMiJ,IAE3DmY,2BAAA,SAAgB5c,EAAMhB,GACpB,OAAOsO,GAAO4P,SAASld,EAAMhB,IAE/B4d,wBAAA,SAAa5c,EAAc+M,GACzB,OAAOJ,GAAIuQ,SAASld,EAAM+M,IAE5B6P,mBAAA,SAAQO,GACN,OAAOA,EAAO1hB,KAAK8D,KAAMqd,IAE3BA,oBAAA,WACE,IAAMQ,EAAO7d,KACb,OAAO,SAAU8d,EAAkB7Z,EAAauK,GAC9C,IAAMtK,EAAO,CAAEf,KAAMnD,KAAKmD,MAC1B0a,EAAKE,WAAWD,EAAU7Z,EAAKC,GAAMgM,KAAK,SAAAvF,GAAQ,OAAA6D,EAAG,KAAM7D,IAAO6D,MAG/D6O,UAAUA,YACCzR,GACXyR,UAAUvQ,GACVuQ,UAAUvR,GACVuR,YAAY7Q,GACZ6Q,QAAQW"} \ No newline at end of file diff --git a/dist/parser/token.d.ts b/dist/parser/token.d.ts index 1574a4953..01c2f832a 100644 --- a/dist/parser/token.d.ts +++ b/dist/parser/token.d.ts @@ -1,9 +1,10 @@ export default class Token { type: string; line: number; + col: number; raw: string; input: string; file: string; value: string; - constructor(raw: any, pos: any, input: any, file: any, line: any); + constructor(raw: any, col: any, input: any, file: any, line: any); } diff --git a/dist/util/error.d.ts b/dist/util/error.d.ts index 7af225251..d27672393 100644 --- a/dist/util/error.d.ts +++ b/dist/util/error.d.ts @@ -2,7 +2,6 @@ declare abstract class LiquidError { name: string; message: string; stack: string; - private line; private file; private input; private token; diff --git a/package-lock.json b/package-lock.json index 6fb8d85ec..61d6b8f11 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "liquidjs", - "version": "7.0.2", + "version": "7.1.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 0e39715c7..6a67e089a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "liquidjs", - "version": "7.0.2", + "version": "7.1.0", "description": "Liquid template engine by pure JavaScript: compatible to shopify, easy to extend.", "main": "dist/liquid.common.js", "types": "dist/liquid.d.ts",