diff --git a/CHANGELOG.md b/CHANGELOG.md index 018a2565e..8e0252144 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [7.2.2](https://github.com/harttle/liquidjs/compare/v7.2.1...v7.2.2) (2019-02-23) + + +### Bug Fixes + +* filters break when argument contains [()|, fixes [#89](https://github.com/harttle/liquidjs/issues/89) ([e977669](https://github.com/harttle/liquidjs/commit/e977669)) + ## [7.2.1](https://github.com/harttle/liquidjs/compare/v7.2.0...v7.2.1) (2019-02-22) diff --git a/dist/benchmark/demo.d.ts b/dist/benchmark/demo.d.ts new file mode 100644 index 000000000..e4a4b0b20 --- /dev/null +++ b/dist/benchmark/demo.d.ts @@ -0,0 +1 @@ +export default function (): Promise<{}>; diff --git a/dist/benchmark/index.d.ts b/dist/benchmark/index.d.ts new file mode 100644 index 000000000..509db1866 --- /dev/null +++ b/dist/benchmark/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/benchmark/output.d.ts b/dist/benchmark/output.d.ts new file mode 100644 index 000000000..e4a4b0b20 --- /dev/null +++ b/dist/benchmark/output.d.ts @@ -0,0 +1 @@ +export default function (): Promise<{}>; diff --git a/dist/benchmark/tag.d.ts b/dist/benchmark/tag.d.ts new file mode 100644 index 000000000..e4a4b0b20 --- /dev/null +++ b/dist/benchmark/tag.d.ts @@ -0,0 +1 @@ +export default function (): Promise<{}>; diff --git a/dist/demo/typescript/index.d.ts b/dist/demo/typescript/index.d.ts new file mode 100644 index 000000000..509db1866 --- /dev/null +++ b/dist/demo/typescript/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/liquid.common.js b/dist/liquid.common.js index f3e645fa6..96c006431 100644 --- a/dist/liquid.common.js +++ b/dist/liquid.common.js @@ -1,5 +1,5 @@ /* - * liquidjs@7.2.1, https://github.com/harttle/liquidjs + * liquidjs@7.2.2, https://github.com/harttle/liquidjs * (c) 2016-2019 harttle * Released under the MIT License. */ @@ -208,76 +208,6 @@ function padStart(str, length, ch) { return str; } -// quote related -var singleQuoted = /'[^']*'/; -var doubleQuoted = /"[^"]*"/; -var quoted = new RegExp(singleQuoted.source + "|" + doubleQuoted.source); -var quoteBalanced = new RegExp("(?:" + quoted.source + "|[^'\"])*"); -// basic types -var integer = /-?\d+/; -var number = /[+-]?(?:\d+\.?\d*|\.?\d+)/; -var bool = /true|false/; -// property access -var identifier = /[\w-]+[?]?/; -var subscript = new RegExp("\\[(?:" + quoted.source + "|[\\w-\\.]+)\\]"); -var literal = new RegExp("(?:" + quoted.source + "|" + bool.source + "|" + number.source + ")"); -var variable = new RegExp(identifier.source + "(?:\\." + identifier.source + "|" + subscript.source + ")*"); -// range related -var rangeLimit = new RegExp("(?:" + variable.source + "|" + number.source + ")"); -var range$1 = new RegExp("\\(" + rangeLimit.source + "\\.\\." + rangeLimit.source + "\\)"); -var rangeCapture = new RegExp("\\((" + rangeLimit.source + ")\\.\\.(" + rangeLimit.source + ")\\)"); -var value = new RegExp("(?:" + variable.source + "|" + literal.source + "|" + range$1.source + ")"); -// hash related -var hash = new RegExp("(?:" + identifier.source + ")\\s*:\\s*(?:" + value.source + ")"); -var hashCapture = new RegExp("(" + identifier.source + ")\\s*:\\s*(" + value.source + ")", 'g'); -// full match -var tagLine = new RegExp("^\\s*(" + identifier.source + ")\\s*([\\s\\S]*?)\\s*$"); -var literalLine = new RegExp("^" + literal.source + "$", 'i'); -var variableLine = new RegExp("^" + variable.source + "$"); -var numberLine = new RegExp("^" + number.source + "$"); -var boolLine = new RegExp("^" + bool.source + "$", 'i'); -var quotedLine = new RegExp("^" + quoted.source + "$"); -var rangeLine = new RegExp("^" + rangeCapture.source + "$"); -var integerLine = new RegExp("^" + integer.source + "$"); -// filter related -var valueDeclaration = new RegExp("(?:" + identifier.source + "\\s*:\\s*)?" + value.source); -var valueList = new RegExp(valueDeclaration.source + "(\\s*,\\s*" + valueDeclaration.source + ")*"); -var filter = new RegExp(identifier.source + "(?:\\s*:\\s*" + valueList.source + ")?", 'g'); -var filterCapture = new RegExp("(" + identifier.source + ")(?:\\s*:\\s*(" + valueList.source + "))?"); -var filterLine = new RegExp("^" + filterCapture.source + "$"); -var operators = [ - /\s+or\s+/, - /\s+and\s+/, - /==|!=|<=|>=|<|>|\s+contains\s+/ -]; -function isInteger(str) { - return integerLine.test(str); -} -function isLiteral(str) { - return literalLine.test(str); -} -function isVariable(str) { - return variableLine.test(str); -} -function matchValue(str) { - return value.exec(str); -} -function parseLiteral(str) { - var res = str.match(numberLine); - if (res) { - return Number(str); - } - res = str.match(boolLine); - if (res) { - return str.toLowerCase() === 'true'; - } - res = str.match(quotedLine); - if (res) { - return str.slice(1, -1); - } - throw new TypeError("cannot parse '" + str + "' as literal"); -} - var LiquidError = /** @class */ (function (_super) { __extends(LiquidError, _super); function LiquidError(err, token) { @@ -437,7 +367,7 @@ var Scope = /** @class */ (function () { var _this = this; var paths = this.propertyAccessSeq(path$$1); var scope = this.findContextFor(paths[0]) || last(this.contexts); - return paths.reduce(function (value$$1, key) { return _this.readProperty(value$$1, key); }, scope); + return paths.reduce(function (value, key) { return _this.readProperty(value, key); }, scope); }; Scope.prototype.set = function (path$$1, v) { var paths = this.propertyAccessSeq(path$$1); @@ -473,11 +403,11 @@ var Scope = /** @class */ (function () { } return this.contexts.splice(i, 1)[0]; }; - Scope.prototype.findContextFor = function (key, filter$$1) { - if (filter$$1 === void 0) { filter$$1 = function () { return true; }; } + Scope.prototype.findContextFor = function (key, filter) { + if (filter === void 0) { filter = function () { return true; }; } for (var i = this.contexts.length - 1; i >= 0; i--) { var candidate = this.contexts[i]; - if (!filter$$1(candidate)) + if (!filter(candidate)) continue; if (key in candidate) { return candidate; @@ -532,7 +462,7 @@ var Scope = /** @class */ (function () { j = matchRightBracket(str, i + 1); assert(j !== -1, "unbalanced []: " + str); name = str.slice(i + 1, j); - if (!isInteger(name)) { // foo[bar] vs. foo[1] + if (!/^[+-]?\d+$/.test(name)) { // foo[bar] vs. foo[1] name = String(this.get(name)); } push(); @@ -726,6 +656,37 @@ var DelimitedToken = /** @class */ (function (_super) { return DelimitedToken; }(Token)); +// quote related +var singleQuoted = /'[^']*'/; +var doubleQuoted = /"[^"]*"/; +var quoted = new RegExp(singleQuoted.source + "|" + doubleQuoted.source); +var quoteBalanced = new RegExp("(?:" + quoted.source + "|[^'\"])*"); +// basic types +var number = /[+-]?(?:\d+\.?\d*|\.?\d+)/; +var bool = /true|false/; +// property access +var identifier = /[\w-]+[?]?/; +var subscript = new RegExp("\\[(?:" + quoted.source + "|[\\w-\\.]+)\\]"); +var literal = new RegExp("(?:" + quoted.source + "|" + bool.source + "|" + number.source + ")"); +var variable = new RegExp(identifier.source + "(?:\\." + identifier.source + "|" + subscript.source + ")*"); +// range related +var rangeLimit = new RegExp("(?:" + variable.source + "|" + number.source + ")"); +var range$1 = new RegExp("\\(" + rangeLimit.source + "\\.\\." + rangeLimit.source + "\\)"); +var rangeCapture = new RegExp("\\((" + rangeLimit.source + ")\\.\\.(" + rangeLimit.source + ")\\)"); +var value = new RegExp("(?:" + variable.source + "|" + literal.source + "|" + range$1.source + ")"); +// hash related +var hash = new RegExp("(?:" + identifier.source + ")\\s*:\\s*(?:" + value.source + ")"); +var hashCapture = new RegExp("(" + identifier.source + ")\\s*:\\s*(" + value.source + ")", 'g'); +// full match +var tagLine = new RegExp("^\\s*(" + identifier.source + ")\\s*([\\s\\S]*?)\\s*$"); +var quotedLine = new RegExp("^" + quoted.source + "$"); +var rangeLine = new RegExp("^" + rangeCapture.source + "$"); +var operators = [ + /\s+or\s+/, + /\s+and\s+/, + /==|!=|<=|>=|<|>|\s+contains\s+/ +]; + var TagToken = /** @class */ (function (_super) { __extends(TagToken, _super); function TagToken(raw, value$$1, input, line, pos, file) { @@ -918,16 +879,18 @@ function evalExp(exp, scope) { return evalValue(exp, scope); } function evalValue(str, scope) { - str = str && str.trim(); if (!str) - return undefined; - if (isLiteral(str)) { - return parseLiteral(str); - } - if (isVariable(str)) { - return scope.get(str); - } - throw new TypeError("cannot eval '" + str + "' as value"); + return null; + str = str.trim(); + if (str === 'true') + return true; + if (str === 'false') + return false; + if (!isNaN(Number(str))) + return Number(str); + if ((str[0] === '"' || str[0] === "'") && str[0] === last(str)) + return str.slice(1, -1); + return scope.get(str); } function isTruthy(val) { return !isFalsy(val); @@ -1005,39 +968,21 @@ var Tag = /** @class */ (function (_super) { return Tag; }(Template)); -var valueRE = new RegExp("" + value.source, 'g'); var Filter = /** @class */ (function () { - function Filter(str, strictFilters) { - if (strictFilters === void 0) { strictFilters = false; } - var match = filterLine.exec(str); - assert(match, 'illegal filter: ' + str); - var name = match[1]; - var argList = match[2] || ''; + function Filter(name, args, strictFilters) { var impl = Filter.impls[name]; if (!impl && strictFilters) throw new TypeError("undefined filter: " + name); this.name = name; this.impl = impl || (function (x) { return x; }); - this.args = this.parseArgs(argList); + this.args = args; } - Filter.prototype.parseArgs = function (argList) { - var match; - var args = []; - while ((match = valueRE.exec(argList.trim()))) { - var v = match[0]; - var re = new RegExp(v + "\\s*:", 'g'); - var keyMatch = re.exec(match.input); - var currentMatchIsKey = keyMatch && keyMatch.index === match.index; - currentMatchIsKey ? args.push("'" + v + "'") : args.push(v); - } - return args; - }; - Filter.prototype.render = function (value$$1, scope) { + Filter.prototype.render = function (value, scope) { var args = this.args.map(function (arg) { return evalValue(arg, scope); }); - return this.impl.apply(null, [value$$1].concat(args)); + return this.impl.apply(null, [value].concat(args)); }; - Filter.register = function (name, filter$$1) { - Filter.impls[name] = filter$$1; + Filter.register = function (name, filter) { + Filter.impls[name] = filter; }; Filter.clear = function () { Filter.impls = {}; @@ -1088,19 +1033,87 @@ var ParseStream = /** @class */ (function () { return ParseStream; }()); +var ParseState$1; +(function (ParseState) { + ParseState[ParseState["INIT"] = 0] = "INIT"; + ParseState[ParseState["FILTER_NAME"] = 1] = "FILTER_NAME"; + ParseState[ParseState["FILTER_ARG"] = 2] = "FILTER_ARG"; +})(ParseState$1 || (ParseState$1 = {})); var default_1 = /** @class */ (function () { + /** + * @param str value string, like: "i have a dream | truncate: 3 + */ function default_1(str, strictFilters) { this.filters = []; - var match = matchValue(str); - assert(match, "illegal value string: " + str); - this.initial = match[0]; - str = str.substr(match.index + match[0].length); - while ((match = filter.exec(str))) { - this.filters.push(new Filter(match[0].trim(), strictFilters)); + var buffer = ''; + var quoted = ''; + var state = ParseState$1.INIT; + var sealed = false; + var filterName = ''; + var filterArgs = []; + for (var i = 0; i < str.length; i++) { + if (quoted) { + if (str[i] === quoted) { + quoted = ''; + sealed = true; + } + buffer += str[i]; + } + else if (/\s/.test(str[i])) { + if (!buffer) + continue; + else + sealed = true; + } + else if (str[i] === '|') { + if (state === ParseState$1.INIT) { + this.initial = buffer; + } + else { + if (state === ParseState$1.FILTER_NAME) + filterName = buffer; + else + filterArgs.push(buffer); + this.filters.push(new Filter(filterName, filterArgs, strictFilters)); + filterName = ''; + filterArgs = []; + } + state = ParseState$1.FILTER_NAME; + buffer = ''; + sealed = false; + } + else if (state === ParseState$1.FILTER_NAME && str[i] === ':') { + filterName = buffer; + state = ParseState$1.FILTER_ARG; + buffer = ''; + sealed = false; + } + else if (state === ParseState$1.FILTER_ARG && str[i] === ',') { + filterArgs.push(buffer); + buffer = ''; + sealed = false; + } + else if (sealed) + continue; + else { + if ((str[i] === '"' || str[i] === "'") && !quoted) + quoted = str[i]; + buffer += str[i]; + } + } + if (buffer) { + if (state === ParseState$1.INIT) + this.initial = buffer; + else if (state === ParseState$1.FILTER_NAME) + this.filters.push(new Filter(buffer, [], strictFilters)); + else { + filterArgs.push(buffer); + this.filters.push(new Filter(filterName, filterArgs, strictFilters)); + } } } default_1.prototype.value = function (scope) { - return this.filters.reduce(function (prev, filter$$1) { return filter$$1.render(prev, scope); }, evalExp(this.initial, scope)); + return this.filters.reduce(function (prev, filter) { return filter.render(prev, scope); }, evalExp(this.initial, scope)); }; return default_1; }()); diff --git a/dist/liquid.common.js.map b/dist/liquid.common.js.map index 364d1fa02..c6de9cc1f 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/filter.ts","../src/parser/parse-stream.ts","../src/template/value.ts","../src/template/output.ts","../src/template/html.ts","../src/parser/parser.ts","../src/builtin/tags/assign.ts","../src/util/promise.ts","../src/builtin/tags/for.ts","../src/builtin/tags/capture.ts","../src/builtin/tags/case.ts","../src/builtin/tags/comment.ts","../src/builtin/tags/include.ts","../src/builtin/tags/decrement.ts","../src/builtin/tags/cycle.ts","../src/builtin/tags/if.ts","../src/builtin/tags/increment.ts","../src/builtin/tags/layout.ts","../src/builtin/tags/block.ts","../src/builtin/tags/raw.ts","../src/builtin/tags/tablerow.ts","../src/builtin/tags/unless.ts","../src/builtin/tags/break.ts","../src/builtin/tags/continue.ts","../src/builtin/tags/index.ts","../src/builtin/filters/html.ts","../src/builtin/filters/string.ts","../src/builtin/filters/math.ts","../src/builtin/filters/url.ts","../src/builtin/filters/array.ts","../src/util/strftime.ts","../src/builtin/filters/date.ts","../src/builtin/filters/object.ts","../src/builtin/filters/index.ts","../src/liquid.ts"],"sourcesContent":["const toStr = Object.prototype.toString\nconst arrToStr = Array.prototype.toString\n\n/*\n * Checks if value is classified as a String primitive or object.\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is a string, else false.\n */\nexport function isString (value: any) {\n return toStr.call(value) === '[object String]'\n}\n\nexport function isFunction (value: any) {\n return typeof value === 'function'\n}\n\nexport function promisify (fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise;\nexport function promisify (fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void):(arg1: T1, arg2: T2) => Promise;\nexport function promisify (fn: any) {\n return function (...args: any[]) {\n return new Promise((resolve, reject) => {\n fn(...args, (err: Error, result: any) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value: any): string {\n if (isNil(value)) return ''\n if (isFunction(value.to_liquid)) return stringify(value.to_liquid())\n if (isFunction(value.toLiquid)) return stringify(value.toLiquid())\n if (isFunction(value.to_s)) return value.to_s()\n if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value)\n if (isFunction(value.toString)) return value.toString()\n return toStr.call(value)\n}\n\nfunction defaultToString (value: any): string {\n const cache: string[] = []\n return JSON.stringify(value, (key, value) => {\n if (isObject(value)) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n}\n\nexport function create (proto: T1): T2 {\n return Object.create(proto)\n}\n\nexport function isNil (value: any): boolean {\n return value === null || value === undefined\n}\n\nexport function isArray (value: any): boolean {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value: any): boolean {\n const signature = toStr.call(value)\n // [object XXXError]\n return signature.substr(-6, 5) === 'Error' ||\n (typeof value.message === 'string' && typeof value.name === 'string')\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (\n object: {[key: string]: T} | undefined,\n iteratee: ((val: T, key: string, obj: {[key: string]: T}) => boolean | void)\n) {\n object = object || {}\n for (const k in object) {\n if (object.hasOwnProperty(k)) {\n if (iteratee(object[k], k, object) === false) break\n }\n }\n return object\n}\n\nexport function last (arr: T[]): T;\nexport function last (arr: string): string;\nexport function last (arr: any[] | string): any | string {\n return arr[arr.length - 1]\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value: any): boolean {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\n/*\n * A function to create flexibly-numbered lists of integers,\n * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.\n * Returns a list of integers from start (inclusive) to stop (exclusive),\n * incremented (or decremented) by step, exclusive.\n * Note that ranges that stop before they start are considered to be zero-length instead of\n * negative — if you'd like a negative range, use a negative step.\n */\nexport function range (start: number, stop?: number, step?: number) {\n if (stop === undefined) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr: number[] = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n\nexport function padStart (str: any, length: number, ch: string = ' ') {\n str = String(str)\n let n = length - str.length\n while (n-- > 0) str = ch + str\n return str\n}\n","// 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: string) {\n return integerLine.test(str)\n}\n\nexport function isLiteral (str: string) {\n return literalLine.test(str)\n}\n\nexport function isRange (str: string) {\n return rangeLine.test(str)\n}\n\nexport function isVariable (str: string) {\n return variableLine.test(str)\n}\n\nexport function matchValue (str: string) {\n return value.exec(str)\n}\n\nexport function parseLiteral (str: string) {\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'\nimport ITemplate from 'src/template/itemplate'\n\nabstract class LiquidError extends Error {\n private token: Token\n private originalError: Error\n constructor (err: Error, token: Token) {\n super(err.message)\n this.originalError = err\n this.token = token\n }\n protected update () {\n const err = this.originalError\n const context = mkContext(this.token)\n this.message = mkMessage(err.message, this.token)\n this.stack = this.message + '\\n' + context +\n '\\n' + this.stack + '\\nFrom ' + err.stack\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor (message: string, token: Token) {\n super(new Error(message), token)\n this.name = 'TokenizationError'\n super.update()\n }\n}\n\nexport class ParseError extends LiquidError {\n constructor (err: Error, token: Token) {\n super(err, token)\n this.name = 'ParseError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderError extends LiquidError {\n constructor (err: Error, tpl: ITemplate) {\n super(err, tpl.token)\n this.name = 'RenderError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderBreakError extends Error {\n resolvedHTML: string = ''\n constructor (message: string) {\n super(message)\n this.name = 'RenderBreakError'\n this.message = message + ''\n }\n}\n\nexport class AssertionError extends Error {\n constructor (message: string) {\n super(message)\n this.name = 'AssertionError'\n this.message = message + ''\n }\n}\n\nfunction mkContext (token: Token) {\n const lines = token.input.split('\\n')\n const begin = Math.max(token.line - 2, 1)\n const end = Math.min(token.line + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === token.line) ? '>> ' : ' '\n const num = _.padStart(String(lineNumber), String(end).length)\n const text = lines[lineNumber - 1]\n return `${indicator}${num}| ${text}`\n })\n .join('\\n')\n\n return context\n}\n\nfunction mkMessage (msg: string, token: Token) {\n if (token.file) msg += `, file:${token.file}`\n msg += `, line:${token.line}, col:${token.col}`\n return msg\n}\n","import { AssertionError } from './error'\n\nexport default function (predicate: any, message?: string) {\n if (!predicate) {\n message = message || `expect ${predicate} to be true`\n throw new AssertionError(message)\n }\n}\n","/* eslint-disable camelcase */\n\nimport * as _ from './util/underscore'\n\nexport interface LiquidOptions {\n /** `root` is a directory or an array of directories to resolve layouts and includes, as well as the filename passed in when calling `.renderFile()`. If an array, the files are looked up in the order they occur in the array. Defaults to `[\".\"]` */\n root?: string | string[]\n /** `extname` is used to lookup the template file when filepath doesn't include an extension name. Eg: setting to `\".html\"` will allow including file by basename. Defaults to `\"\"`. */\n extname?: string\n /** `cache` indicates whether or not to cache resolved templates. Defaults to `false`. */\n cache?: boolean\n /** `dynamicPartials`: if set, treat `` parameter in `{%include filepath %}`, `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */\n dynamicPartials?: boolean\n /** `strict_filters` is used to enable strict filter existence. If set to `false`, undefined filters will be rendered as empty string. Otherwise, undefined filters will cause an exception. Defaults to `false`. */\n strict_filters?: boolean\n /** `strict_variables` is used to enable strict variable derivation. If set to `false`, undefined variables will be rendered as empty string. Otherwise, undefined variables will cause an exception. Defaults to `false`. */\n strict_variables?: boolean\n /** `trim_tag_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of tags (`{% %}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_tag_right?: boolean\n /** `trim_tag_left` is similar to `trim_tag_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_tag_left?: boolean\n /** ``trim_output_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_output_right?: boolean\n /** `trim_output_left` is similar to `trim_output_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_output_left?: boolean\n /** `tag_delimiter_left` and `tag_delimiter_right` are used to override the delimiter for liquid tags **/\n tag_delimiter_left?: string,\n tag_delimiter_right?: string,\n /** `output_delimiter_left` and `output_delimiter_right` are used to override the delimiter for liquid outputs **/\n output_delimiter_left?: string,\n output_delimiter_right?: string,\n /** `greedy` is used to specify whether `trim_left`/`trim_right` is greedy. When set to `true`, all consecutive blank characters including `\\n` will be trimed regardless of line breaks. Defaults to `true`. */\n greedy?: boolean\n}\n\nexport interface NormalizedOptions extends LiquidOptions {\n root?: string[]\n}\n\nexport interface NormalizedFullOptions extends NormalizedOptions {\n root: string[]\n extname: string\n cache: boolean\n dynamicPartials: boolean\n strict_filters: boolean\n strict_variables: boolean\n trim_tag_right: boolean\n trim_tag_left: boolean\n trim_output_right: boolean\n trim_output_left: boolean\n tag_delimiter_left: string,\n tag_delimiter_right: string,\n output_delimiter_left: string,\n output_delimiter_right: string,\n greedy: boolean\n}\n\nconst defaultOptions: NormalizedFullOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_output_right: false,\n trim_output_left: false,\n greedy: true,\n tag_delimiter_left: '{%',\n tag_delimiter_right: '%}',\n output_delimiter_left: '{{',\n output_delimiter_right: '}}',\n strict_filters: false,\n strict_variables: false\n}\n\nexport function normalize (options?: LiquidOptions): NormalizedOptions {\n options = options || {}\n if (options.hasOwnProperty('root')) {\n options.root = normalizeStringArray(options.root)\n }\n return options as NormalizedOptions\n}\n\nexport function applyDefault (options?: NormalizedOptions): NormalizedFullOptions {\n return { ...defaultOptions, ...options }\n}\n\nfunction normalizeStringArray (value: any): string[] {\n if (_.isArray(value)) return value as string[]\n if (_.isString(value)) return [value as string]\n return []\n}\n","enum BlockMode {\n /* store rendered html into blocks */\n OUTPUT,\n /* output rendered html directly */\n STORE\n}\n\nexport default BlockMode\n","import * as _ from '../util/underscore'\nimport { __assign } from 'tslib'\nimport * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\nimport BlockMode from './block-mode'\nimport IContext from './icontext'\n\nexport default class Scope {\n opts: NormalizedFullOptions\n contexts: Array\n blocks: object = {}\n groups: {[key: string]: number} = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts?: NormalizedFullOptions) {\n this.opts = applyDefault(opts)\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => __assign(ctx, val), {})\n }\n get (path: string): any {\n const paths = this.propertyAccessSeq(path)\n const scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n return paths.reduce((value, key) => this.readProperty(value, key), scope)\n }\n set (path: string, v: any): void {\n const paths = this.propertyAccessSeq(path)\n let scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n paths.some((key, i) => {\n if (!_.isObject(scope)) {\n return true\n }\n if (i === paths.length - 1) {\n scope[key] = v\n return true\n }\n if (undefined === scope[key]) {\n scope[key] = {}\n }\n scope = scope[key]\n return false\n })\n }\n unshift (ctx: object) {\n return this.contexts.unshift(ctx)\n }\n push (ctx: object) {\n return this.contexts.push(ctx)\n }\n pop (ctx?: object): object | undefined {\n if (!arguments.length) {\n return this.contexts.pop()\n }\n const i = this.contexts.findIndex(scope => scope === ctx)\n if (i === -1) {\n throw new TypeError('scope not found, cannot pop')\n }\n return this.contexts.splice(i, 1)[0]\n }\n findContextFor (key: string, filter: ((conttext: object) => boolean) = () => true) {\n for (let i = this.contexts.length - 1; i >= 0; i--) {\n const candidate = this.contexts[i]\n if (!filter(candidate)) continue\n if (key in candidate) {\n return candidate\n }\n }\n return null\n }\n private readProperty (obj: IContext, key: string) {\n let val\n if (_.isNil(obj)) {\n val = undefined\n } else {\n obj = toLiquid(obj)\n val = key === 'size' ? readSize(obj) : obj[key]\n if (_.isFunction(obj.liquid_method_missing)) {\n val = obj.liquid_method_missing!(key)\n }\n }\n if (_.isNil(val) && this.opts.strict_variables) {\n throw new TypeError(`undefined variable: ${key}`)\n }\n return val\n }\n\n /*\n * Parse property access sequence from access string\n * @example\n * accessSeq(\"foo.bar\") // ['foo', 'bar']\n * accessSeq(\"foo['bar']\") // ['foo', 'bar']\n * accessSeq(\"foo['b]r']\") // ['foo', 'b]r']\n * accessSeq(\"foo[bar.coo]\") // ['foo', 'bar'], for bar.coo == 'bar'\n */\n propertyAccessSeq (str: string) {\n str = String(str)\n const seq: string[] = []\n let name = ''\n let j\n let i = 0\n while (i < str.length) {\n switch (str[i]) {\n case '[':\n push()\n\n const delemiter = str[i + 1]\n if (/['\"]/.test(delemiter)) { // foo[\"bar\"]\n j = str.indexOf(delemiter, i + 2)\n assert(j !== -1, `unbalanced ${delemiter}: ${str}`)\n name = str.slice(i + 2, j)\n push()\n i = j + 2\n } else { // foo[bar.coo]\n j = matchRightBracket(str, i + 1)\n assert(j !== -1, `unbalanced []: ${str}`)\n name = str.slice(i + 1, j)\n if (!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: IContext) {\n if (_.isFunction(obj.to_liquid)) {\n return obj.to_liquid()\n }\n if (_.isFunction(obj.toLiquid)) {\n return obj.toLiquid()\n }\n return obj\n}\n\nfunction readSize (obj: IContext) {\n if (!_.isNil(obj.size)) return obj.size\n if (_.isArray(obj) || _.isString(obj)) return obj.length\n return obj.size\n}\n\nfunction matchRightBracket (str: string, begin: number) {\n let stack = 1 // count of '[' - count of ']'\n for (let i = begin; i < str.length; i++) {\n if (str[i] === '[') {\n stack++\n }\n if (str[i] === ']') {\n stack--\n if (stack === 0) {\n return i\n }\n }\n }\n return -1\n}\n","export class CaptureScope {}\nexport class AssignScope {}\nexport class IncrementScope {}\nexport class DecrementScope {}\n","import * as _ from '../util/underscore'\nimport { resolve, extname } from 'path'\nimport { stat, readFile } from 'fs'\nimport IFS from './ifs'\n\nconst statAsync = _.promisify(stat)\nconst readFileAsync = _.promisify(readFile)\n\nconst fs: IFS = {\n exists: (filepath: string) => {\n return statAsync(filepath).then(() => true).catch(() => false)\n },\n readFile: filepath => {\n return readFileAsync(filepath, 'utf8')\n },\n resolve: (root: string, file: string, ext: string) => {\n if (!extname(file)) file += ext\n return resolve(root, file)\n }\n}\n\nexport default fs\n","import DelimitedToken from 'src/parser/delimited-token'\nimport Token from 'src/parser/token'\nimport TagToken from 'src/parser/tag-token'\nimport { NormalizedFullOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: NormalizedFullOptions) {\n options = { greedy: true, ...options }\n let inRaw = false\n\n tokens.forEach((token: Token, i: number) => {\n if (shouldTrimLeft(token as DelimitedToken, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && (token as TagToken).name === 'raw') inRaw = true\n if (token.type === 'tag' && (token as TagToken).name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token as DelimitedToken, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimLeft || options.trim_tag_left\n if (token.type === 'output') return token.trimLeft || options.trim_output_left\n}\n\nfunction shouldTrimRight (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimRight || options.trim_tag_right\n if (token.type === 'output') return token.trimRight || options.trim_output_right\n}\n\nfunction trimLeft (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rLeft = greedy ? /\\s+$/g : /[\\t\\r ]*$/g\n token.value = token.value.replace(rLeft, '')\n}\n\nfunction trimRight (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rRight = greedy ? /^\\s+/g : /^[\\t\\r ]*\\n?/g\n token.value = token.value.replace(rRight, '')\n}\n","export default class Token {\n type: string = 'notset'\n line: number\n col: number\n raw: string\n input: string\n file?: string\n value: string\n constructor (raw: string, input: string, line: number, col: number, file?: string) {\n this.col = col\n this.line = line\n this.raw = raw\n this.value = raw\n this.input = input\n this.file = file\n }\n}\n","import Token from './token'\n\nexport default class HTMLToken extends Token {\n constructor (str: string, input: string, line: number, col: number, file?: string) {\n super(str, input, line, col, file)\n this.type = 'html'\n this.value = str\n }\n}\n","import Token from './token'\nimport { last } from 'src/util/underscore'\n\nexport default class DelimitedToken extends Token {\n trimLeft: boolean\n trimRight: boolean\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, input, line, pos, file)\n this.trimLeft = value[0] === '-'\n this.trimRight = last(value) === '-'\n this.value = value\n .slice(\n this.trimLeft ? 1 : 0,\n this.trimRight ? -1 : value.length\n )\n .trim()\n }\n}\n","import DelimitedToken from './delimited-token'\nimport { TokenizationError } from 'src/util/error'\nimport * as lexical from './lexical'\n\nexport default class TagToken extends DelimitedToken {\n name: string\n args: string\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'tag'\n const match = this.value.match(lexical.tagLine)\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, this)\n }\n this.name = match[1]\n this.args = match[2]\n }\n}\n","import DelimitedToken from './delimited-token'\n\nexport default class OutputToken extends DelimitedToken {\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'output'\n }\n}\n","import whiteSpaceCtrl from './whitespace-ctrl'\nimport HTMLToken from './html-token'\nimport TagToken from './tag-token'\nimport Token from './token'\nimport OutputToken from './output-token'\nimport { TokenizationError } from 'src/util/error'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: NormalizedFullOptions\n constructor (options?: NormalizedFullOptions) {\n this.options = applyDefault(options)\n }\n tokenize (input: string, file?: string) {\n const tokens: Token[] = []\n const tagL = this.options.tag_delimiter_left\n const tagR = this.options.tag_delimiter_right\n const outputL = this.options.output_delimiter_left\n const outputR = this.options.output_delimiter_right\n let p = 0\n let curLine = 1\n let state = ParseState.HTML\n let buffer = ''\n let lineBegin = 0\n let line = 1\n let col = 1\n\n while (p < input.length) {\n if (input[p] === '\\n') {\n curLine++\n lineBegin = p + 1\n }\n if (state === ParseState.HTML) {\n if (input.substr(p, outputL.length) === outputL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = outputL\n line = curLine\n col = p - lineBegin + 1\n p += outputL.length\n state = ParseState.OUTPUT\n continue\n } else if (input.substr(p, tagL.length) === tagL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = tagL\n line = curLine\n col = p - lineBegin + 1\n p += tagL.length\n state = ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && input.substr(p, outputR.length) === outputR) {\n buffer += outputR\n tokens.push(new OutputToken(buffer, buffer.slice(outputL.length, -outputR.length), input, line, col, file))\n p += outputR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n } else if (input.substr(p, tagR.length) === tagR) {\n buffer += tagR\n tokens.push(new TagToken(buffer, buffer.slice(tagL.length, -tagR.length), input, line, col, file))\n p += tagR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n }\n buffer += input[p++]\n }\n if (state !== ParseState.HTML) {\n const t = state === ParseState.OUTPUT ? 'output' : 'tag'\n const str = buffer.length > 16 ? buffer.slice(0, 13) + '...' : buffer\n throw new TokenizationError(\n `${t} \"${str}\" not closed`,\n new Token(buffer, input, line, col, file)\n )\n }\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n\n whiteSpaceCtrl(tokens, this.options)\n return tokens\n }\n}\n","import { RenderError } from 'src/util/error'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Render {\n async renderTemplates (templates: ITemplate[], scope: Scope) {\n assert(scope, 'unable to evalTemplates: scope undefined')\n\n let html = ''\n for (const tpl of templates) {\n try {\n html += await tpl.render(scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n e.resolvedHTML = html\n throw e\n }\n throw e.name === 'RenderError' ? e : new RenderError(e, tpl)\n }\n }\n return html\n }\n}\n","import * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport Scope from 'src/scope/scope'\nimport { range } from 'src/util/underscore'\n\nconst operators = {\n '==': (l: any, r: any) => l === r,\n '!=': (l: any, r: any) => l !== r,\n '>': (l: any, r: any) => l !== null && r !== null && l > r,\n '<': (l: any, r: any) => l !== null && r !== null && l < r,\n '>=': (l: any, r: any) => l !== null && r !== null && l >= r,\n '<=': (l: any, r: any) => l !== null && r !== null && l <= r,\n 'contains': (l: any, r: any) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l: any, r: any) => isTruthy(l) && isTruthy(r),\n 'or': (l: any, r: any) => isTruthy(l) || isTruthy(r)\n}\n\nexport function evalExp (exp: string, scope: Scope): any {\n assert(scope, 'unable to evalExp: scope undefined')\n const operatorREs = lexical.operators\n let match\n for (let i = 0; i < operatorREs.length; i++) {\n const operatorRE = operatorREs[i]\n const expRE = new RegExp(`^(${lexical.quoteBalanced.source})(${operatorRE.source})(${lexical.quoteBalanced.source})$`)\n if ((match = exp.match(expRE))) {\n const l = evalExp(match[1], scope)\n const op = operators[match[2].trim()]\n const r = evalExp(match[3], scope)\n return op(l, r)\n }\n }\n\n if ((match = exp.match(lexical.rangeLine))) {\n const low = evalValue(match[1], scope)\n const high = evalValue(match[2], scope)\n return range(low, high + 1)\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str: string, scope: Scope) {\n 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: any): boolean {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val: any): boolean {\n return val === false || undefined === val || val === null\n}\n","import { hashCapture } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\n\n/**\n * Key-Value Pairs Representing Tag Arguments\n * Example:\n * For the markup `{% include 'head.html' foo='bar' %}`,\n * hash['foo'] === 'bar'\n */\nexport default class Hash {\n [key: string]: any\n constructor (markup: string, scope: Scope) {\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n this[k] = evalValue(v, scope)\n }\n }\n}\n","export default abstract class Template {\n token: T;\n constructor (token: T) {\n this.token = token\n }\n}\n","import { create, stringify } from 'src/util/underscore'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITagImpl from './itag-impl'\nimport ITagImplOptions from './itag-impl-options'\nimport Liquid from 'src/liquid'\nimport Hash from './hash'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\n\nexport default class Tag extends Template implements ITemplate {\n name: string\n private impl: ITagImpl\n static impls: { [key: string]: ITagImplOptions } = {}\n\n constructor (token: TagToken, tokens: Token[], liquid: Liquid) {\n super(token)\n this.name = token.name\n\n const impl = Tag.impls[token.name]\n assert(impl, `tag ${token.name} not found`)\n this.impl = create(impl)\n this.impl.liquid = liquid\n if (this.impl.parse) {\n this.impl.parse(token, tokens)\n }\n }\n async render (scope: Scope) {\n const hash = new Hash(this.token.args, scope)\n const impl = this.impl\n if (typeof impl.render !== 'function') {\n return ''\n }\n const html = await impl.render(scope, hash)\n return stringify(html)\n }\n static register (name: string, tag: ITagImplOptions) {\n Tag.impls[name] = tag\n }\n static clear () {\n Tag.impls = {}\n }\n}\n","import assert from 'src/util/assert'\nimport * as lexical from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\nimport { FilterImpl } from './filter-impl'\n\nconst valueRE = new RegExp(`${lexical.value.source}`, 'g')\n\nexport default class Filter {\n name: string\n impl: FilterImpl\n args: string[]\n private static impls: {[key: string]: FilterImpl} = {}\n\n constructor (str: string, strictFilters: boolean = false) {\n const match = lexical.filterLine.exec(str) as string[]\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: string[] = []\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 return this.impl.apply(null, [value, ...args])\n }\n static register (name: string, filter: FilterImpl) {\n Filter.impls[name] = filter\n }\n static clear () {\n Filter.impls = {}\n }\n}\n","import Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from './tag-token'\n\ntype ParseToken = ((token: Token, remainTokens: Array) => ITemplate)\n\nexport default class ParseStream {\n private tokens: Array\n private handlers: {[key: string]: (arg: any) => void} = {}\n private stopRequested: boolean = false\n private parseToken: ParseToken\n\n constructor (tokens: Array, parseToken: ParseToken) {\n this.tokens = tokens\n this.parseToken = parseToken\n }\n on (name: string, cb: (arg: T) => void): ParseStream {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: T) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n return false\n }\n start () {\n this.trigger('start')\n let token: Token | undefined\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' && this.trigger(`tag:${(token).name}`, token)) {\n continue\n }\n const template = this.parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n }\n stop () {\n this.stopRequested = true\n return this\n }\n}\n","import { evalExp } from 'src/render/syntax'\nimport * as lexical from 'src/parser/lexical'\nimport assert from 'src/util/assert'\nimport Filter from './filter/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: RegExpExecArray | null = lexical.matchValue(str) as RegExpExecArray\n assert(match, `illegal value string: ${str}`)\n\n this.initial = match[0]\n str = str.substr(match.index + match[0].length)\n\n while ((match = lexical.filter.exec(str))) {\n this.filters.push(new Filter(match[0].trim(), strictFilters))\n }\n }\n value (scope: Scope) {\n return this.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(this.initial, scope))\n }\n}\n","import Value from './value'\nimport { stringify } from 'src/util/underscore'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport OutputToken from 'src/parser/output-token'\n\nexport default class Output extends Template implements ITemplate {\n value: Value\n constructor (token: OutputToken, strictFilters?: boolean) {\n super(token)\n this.value = new Value(token.value, strictFilters)\n }\n async render (scope: Scope): Promise {\n const html = await this.value.value(scope)\n return stringify(html)\n }\n}\n","import Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport HTMLToken from 'src/parser/html-token'\n\nexport default class extends Template implements ITemplate {\n str: string\n constructor (token: HTMLToken) {\n super(token)\n this.str = token.value\n }\n async render (): Promise {\n return this.str\n }\n}\n","import { ParseError } from '../util/error'\nimport Liquid from 'src/liquid'\nimport ParseStream from './parse-stream'\nimport Token from './token'\nimport TagToken from './tag-token'\nimport OutputToken from './output-token'\nimport Tag from 'src/template/tag/tag'\nimport Output from 'src/template/output'\nimport HTML from 'src/template/html'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Parser {\n liquid: Liquid\n\n constructor (liquid: Liquid) {\n this.liquid = liquid\n }\n parse (tokens: Array) {\n let token\n const templates: ITemplate[] = []\n while ((token = tokens.shift())) {\n templates.push(this.parseToken(token, tokens))\n }\n return templates\n }\n parseToken (token: Token, remainTokens: Array) {\n try {\n if (token.type === 'tag') {\n return new Tag(token as TagToken, remainTokens, this.liquid)\n }\n if (token.type === 'output') {\n return new Output(token as OutputToken, this.liquid.options.strict_filters)\n }\n return new HTML(token)\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n parseStream (tokens: Array) {\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens))\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { AssignScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(re) as RegExpMatchArray\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (scope: Scope) {\n const ctx = new AssignScope()\n ctx[this.key] = this.liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n} as ITagImplOptions\n","/*\n * Call functions in serial until someone rejected.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function mapSeries (\n iterable: T1[],\n iteratee: (item: T1, idx: number, iterable: T1[]) => Promise | T2\n): Promise {\n let ret = Promise.resolve(0)\n const result: T2[] = []\n iterable.forEach(function (item, idx) {\n ret = ret\n .then(() => iteratee(item, idx, iterable))\n .then(x => result.push(x))\n })\n return ret.then(() => result)\n}\n","import { mapSeries } from 'src/util/promise'\nimport { isString, isObject, isArray } from 'src/util/underscore'\nimport { evalExp } from 'src/render/syntax'\nimport assert from 'src/util/assert'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n type: 'block',\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n this.variable = match[1]\n this.collection = match[2]\n this.reversed = !!match[3]\n\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endfor', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection] as string[]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]]) as Array<[string, any]>\n }\n }\n if (!isArray(collection) || !collection.length) {\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n if (this.reversed) collection.reverse()\n\n const contexts = collection.map((item: string, i: number) => {\n const ctx = {}\n ctx[this.variable] = item\n ctx['forloop'] = {\n first: i === 0,\n index: i + 1,\n index0: i,\n last: i === collection.length - 1,\n length: collection.length,\n rindex: collection.length - i,\n rindex0: collection.length - i - 1\n }\n return ctx\n })\n\n let html = ''\n let finished = false\n await mapSeries(contexts, async context => {\n if (finished) return\n\n scope.push(context)\n try {\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n html += e.resolvedHTML\n if (e.message === 'break') {\n finished = true\n }\n } else throw e\n }\n scope.pop(context)\n })\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = tagToken.args.match(re) as RegExpMatchArray\n assert(match, `${tagToken.args} not valid identifier`)\n\n this.variable = match[1]\n this.templates = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', () => stream.stop())\n .on('template', (tpl) => this.templates.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const html = await this.liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = new CaptureScope()\n ctx[this.variable] = html\n scope.push(ctx)\n }\n} as ITagImplOptions\n","import { evalExp } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p: ITemplate[] = []\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:when', (token: TagToken) => {\n this.cases.push({\n val: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endcase', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = evalExp(branch.val, scope)\n const cond = evalExp(this.cond, scope)\n if (val === cond) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value, quotedLine } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /[^\\s,]+/\nconst withRE = new RegExp(`with\\\\s+(${value.source})`)\n\nexport default {\n parse: function (token: TagToken) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticValue = match[0]\n }\n\n match = value.exec(token.args)\n if (match) {\n this.value = match[0]\n }\n\n match = withRE.exec(token.args)\n if (match) {\n this.with = match[1]\n }\n },\n render: async function (scope: Scope, hash: Hash) {\n let filepath\n if (scope.opts.dynamicPartials) {\n if (quotedLine.exec(this.value)) {\n const template = this.value.slice(1, -1)\n filepath = await this.liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = evalValue(this.value, scope)\n }\n } else {\n filepath = this.staticValue\n }\n assert(filepath, `cannot include with empty filename`)\n\n const originBlocks = scope.blocks\n const originBlockMode = scope.blockMode\n\n scope.blocks = {}\n scope.blockMode = BlockMode.OUTPUT\n if (this.with) {\n hash[filepath] = evalValue(this.with, scope)\n }\n const templates = await this.liquid.getTemplate(filepath, scope.opts)\n scope.push(hash)\n const html = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.blocks = originBlocks\n scope.blockMode = originBlockMode\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, DecrementScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(identifier) as RegExpMatchArray\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope: Scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new DecrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n return --context[this.variable]\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\nconst candidatesRE = new RegExp(rValue.source, 'g')\n\nexport default {\n parse: function (tagToken: TagToken) {\n let match: RegExpExecArray | null = groupRE.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.group = match[1] || ''\n const candidates = match[2]\n\n this.candidates = []\n\n while ((match = candidatesRE.exec(candidates))) {\n this.candidates.push(match[0])\n }\n assert(this.candidates.length, `empty candidates: ${tagToken.raw}`)\n },\n\n render: function (scope: Scope) {\n const group = evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n const groups = scope.groups\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n\n return evalValue(candidate, scope)\n }\n}\n","import { evalExp, isTruthy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', (token: TagToken) => {\n this.branches.push({\n cond: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endif', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (const branch of this.branches) {\n const cond = evalExp(branch.cond, scope)\n if (isTruthy(cond)) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match![0]\n },\n render: function (scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new IncrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n const val = context[this.variable]\n context[this.variable]++\n return val\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /\\S+/\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticLayout = match[0]\n }\n\n match = rValue.exec(token.args)\n if (match) {\n this.layout = match[0]\n }\n\n this.tpls = this.liquid.parser.parse(remainTokens)\n },\n render: async function (scope: Scope, hash: Hash) {\n const layout = scope.opts.dynamicPartials\n ? evalValue(this.layout, scope)\n : this.staticLayout\n assert(layout, `cannot apply layout with empty filename`)\n\n // render the remaining tokens immediately\n scope.blockMode = BlockMode.STORE\n const html = await this.liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.blocks[''] === undefined) {\n scope.blocks[''] = html\n }\n const templates = await this.liquid.getTemplate(layout, scope.opts)\n scope.push(hash)\n scope.blockMode = BlockMode.OUTPUT\n const partial = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n} as ITagImplOptions\n","import BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n this.tpls = [] as ITemplate[]\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', (tpl: ITemplate) => this.tpls.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${token.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const childDefined = scope.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await this.liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.blockMode === BlockMode.STORE) {\n scope.blocks[this.block] = html\n return ''\n }\n return html\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.tokens = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endraw') stream.stop()\n else this.tokens.push(token)\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: function () {\n return this.tokens.map((token: Token) => token.raw).join('')\n }\n}\n","import { mapSeries } from 'src/util/promise'\nimport assert from 'src/util/assert'\nimport { evalExp } from 'src/render/syntax'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.variable = match[1]\n this.collection = match[2]\n this.templates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope) || []\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = hash.cols || collection.length\n const contexts = collection.map((item: any) => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row: number = 0\n let html = ''\n await mapSeries(contexts, async (context, idx) => {\n row = Math.floor(idx / cols) + 1\n const col = (idx % cols) + 1\n if (col === 1) {\n if (row !== 1) {\n html += ''\n }\n html += ``\n }\n\n html += ``\n scope.push(context)\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n html += ''\n scope.pop(context)\n return html\n })\n if (row > 0) {\n html += ''\n }\n return html\n }\n} as ITagImplOptions\n","import { evalExp, isFalsy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n const cond = evalExp(this.cond, scope)\n return isFalsy(cond)\n ? this.liquid.renderer.renderTemplates(this.templates, scope)\n : this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('break')\n }\n}\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('continue')\n }\n}\n","import assign from './assign'\nimport For from './for'\nimport capture from './capture'\nimport Case from './case'\nimport comment from './comment'\nimport include from './include'\nimport decrement from './decrement'\nimport cycle from './cycle'\nimport If from './if'\nimport increment from './increment'\nimport layout from './layout'\nimport block from './block'\nimport raw from './raw'\nimport tablerow from './tablerow'\nimport unless from './unless'\nimport Break from './break'\nimport Continue from './continue'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst tags: { [key: string]: ITagImplOptions } = {\n assign, 'for': For, capture, 'case': Case, comment, include, decrement, increment, cycle, 'if': If, layout, block, raw, tablerow, unless, 'break': Break, 'continue': Continue\n}\n\nexport default tags\n","const escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nfunction escape (str: string) {\n return String(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str: string) {\n return String(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nexport default {\n 'escape': escape,\n 'escape_once': (str: string) => escape(unescape(str)),\n 'newline_to_br': (v: string) => v.replace(/\\n/g, '
'),\n 'strip_html': (v: string) => v.replace(/|||<.*?>/g, '')\n}\n","import { FilterImpl } from 'src/template/filter/filter-impl'\n\nexport default {\n 'append': (v: string, arg: string) => v + arg,\n 'prepend': (v: string, arg: string) => arg + v,\n 'capitalize': (str: string) => String(str).charAt(0).toUpperCase() + str.slice(1),\n 'lstrip': (v: string) => String(v).replace(/^\\s+/, ''),\n 'downcase': (v: string) => v.toLowerCase(),\n 'upcase': (str: string) => String(str).toUpperCase(),\n 'remove': (v: string, arg: string) => v.split(arg).join(''),\n 'remove_first': (v: string, l: string) => v.replace(l, ''),\n 'replace': (v: string, pattern: string, replacement: string) =>\n String(v).split(pattern).join(replacement),\n 'replace_first': (v: string, arg1: string, arg2: string) => String(v).replace(arg1, arg2),\n 'rstrip': (str: string) => String(str).replace(/\\s+$/, ''),\n 'split': (v: string, arg: string) => String(v).split(arg),\n 'strip': (v: string) => String(v).trim(),\n 'strip_newlines': (v: string) => String(v).replace(/\\n/g, ''),\n 'truncate': (v: string, l: number = 50, o: string = '...') => {\n v = String(v)\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v: string, l: number = 15, o: string = '...') => {\n const arr = v.split(/\\s+/)\n let ret = arr.slice(0, l).join(' ')\n if (arr.length >= l) ret += o\n return ret\n }\n} as {[key: string]: FilterImpl}\n","export default {\n 'abs': (v: number) => Math.abs(v),\n 'ceil': (v: number) => Math.ceil(v),\n 'divided_by': (v: number, arg: number) => v / arg,\n 'floor': (v: number) => Math.floor(v),\n 'minus': bindFixed((v: number, arg: number) => v - arg),\n 'modulo': bindFixed((v: number, arg: number) => v % arg),\n 'round': (v: number, arg: number = 0) => {\n const amp = Math.pow(10, arg)\n return Math.round(v * amp) / amp\n },\n 'plus': bindFixed((v: number, arg: number) => Number(v) + Number(arg)),\n 'times': (v: number, arg: number) => v * arg\n}\n\nfunction getFixed (v: number) {\n const p = String(v).split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction bindFixed (cb: (v: number, arg: number) => number) {\n return (l: number, r: number) => {\n const f = Math.max(getFixed(l), getFixed(r))\n return cb(l, r).toFixed(f)\n }\n}\n","export default {\n 'url_decode': (x: string) => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': (x: string) => x.split(' ').map(encodeURIComponent).join('+')\n}\n","import { last } from 'src/util/underscore'\n\nexport default {\n 'join': (v: any[], arg: string) => v.join(arg === undefined ? ' ' : arg),\n 'last': (v: T[]): T => last(v),\n 'first': (v: T[]): T => v[0],\n 'map': (arr: {[key: string]: T1}[], arg: string): T1[] => arr.map(v => v[arg]),\n 'reverse': (v: any[]) => v.reverse(),\n 'sort': (v: T[], arg: (lhs: T, rhs: T) => number) => v.sort(arg),\n 'size': (v: string | any[]) => v.length,\n 'concat': (v: T1[], arg: T2[] | T2): Array => Array.prototype.concat.call(v, arg),\n 'slice': (v: T[], begin: number, length: number): T[] => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'uniq': function (arr: T[]): T[] {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(String(val))) return false\n u[String(val)] = true\n return true\n })\n }\n}\n","import { padStart } from './underscore'\n\nconst monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst monthNamesShort = monthNames.map(abbr)\nconst dayNamesShort = dayNames.map(abbr)\nconst suffixes = {\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n 'default': 'th'\n}\n\nfunction abbr (str: string) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d: Date) {\n const feb = _date.isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n },\n\n getDayOfYear: function (d: Date) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += _date.daysInMonth(d)[i]\n }\n return num + d.getDate()\n },\n\n getWeekOfYear: function (d: Date, startDay: number) {\n // Skip to startDay of this week\n const now = this.getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return padStart(String(Math.floor((now - then) / 7) + 1), 2, '0')\n },\n\n isLeapYear: function (d: Date) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d: Date) {\n const str = d.getDate().toString()\n const index = parseInt(str.slice(-1))\n return suffixes[index] || suffixes['default']\n },\n\n century: function (d: Date) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst formatCodes = {\n a: function (d: Date) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d: Date) {\n return dayNames[d.getDay()]\n },\n b: function (d: Date) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d: Date) {\n return monthNames[d.getMonth()]\n },\n c: function (d: Date) {\n return d.toLocaleString()\n },\n C: function (d: Date) {\n return _date.century(d)\n },\n d: function (d: Date) {\n return padStart(d.getDate(), 2, '0')\n },\n e: function (d: Date) {\n return padStart(d.getDate(), 2)\n },\n H: function (d: Date) {\n return padStart(d.getHours(), 2, '0')\n },\n I: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2, '0')\n },\n j: function (d: Date) {\n return padStart(_date.getDayOfYear(d), 3, '0')\n },\n k: function (d: Date) {\n return padStart(d.getHours(), 2)\n },\n l: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2)\n },\n L: function (d: Date) {\n return padStart(d.getMilliseconds(), 3, '0')\n },\n m: function (d: Date) {\n return padStart(d.getMonth() + 1, 2, '0')\n },\n M: function (d: Date) {\n return padStart(d.getMinutes(), 2, '0')\n },\n p: function (d: Date) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d: Date) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d: Date) {\n return _date.getSuffix(d)\n },\n s: function (d: Date) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d: Date) {\n return padStart(d.getSeconds(), 2, '0')\n },\n u: function (d: Date) {\n return d.getDay() || 7\n },\n U: function (d: Date) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d: Date) {\n return d.getDay()\n },\n W: function (d: Date) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d: Date) {\n return d.toLocaleDateString()\n },\n X: function (d: Date) {\n return d.toLocaleTimeString()\n },\n y: function (d: Date) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d: Date) {\n return d.getFullYear()\n },\n z: function (d: Date) {\n const tz = d.getTimezoneOffset() / 60 * 100\n return (tz > 0 ? '-' : '+') + padStart(String(Math.abs(tz)), 4, '0')\n },\n '%': function () {\n return '%'\n }\n};\n(formatCodes as any).h = formatCodes.b;\n(formatCodes as any).N = formatCodes.L\n\nexport default function (d: Date, format: string) {\n let output = ''\n let remaining = format\n\n while (true) {\n const r = /%./g\n const results = r.exec(remaining)\n\n // No more format codes. Add the remaining text and return\n if (!results) {\n return output + remaining\n }\n\n // Add the preceding text\n output += remaining.slice(0, r.lastIndex - 2)\n remaining = remaining.slice(r.lastIndex)\n\n // Add the format code\n const ch = results[0].charAt(1)\n const func = formatCodes[ch]\n output += func ? func(d) : '%' + ch\n }\n}\n","import strftime from 'src/util/strftime'\nimport { isString } from 'src/util/underscore'\n\nexport default {\n 'date': (v: string | Date, arg: string) => {\n let date = v\n if (v === 'now') {\n date = new Date()\n } else if (isString(v)) {\n date = new Date(v)\n }\n return isValidDate(date) ? strftime(date, arg) : v\n }\n}\n\nfunction isValidDate (date: any): date is Date {\n return date instanceof Date && !isNaN(date.getTime())\n}\n","import { isTruthy } from 'src/render/syntax'\n\nexport default {\n 'default': (v: T1, arg: T2): T1 | T2 => isTruthy(v) ? v : arg\n}\n","import html from './html'\nimport str from './string'\nimport math from './math'\nimport url from './url'\nimport array from './array'\nimport date from './date'\nimport obj from './object'\n\nexport default { ...html, ...str, ...math, ...url, ...date, ...obj, ...array }\n","import Scope from './scope/scope'\nimport * as Types from './types'\nimport fs from 'src/fs'\nimport * as _ from './util/underscore'\nimport ITemplate from './template/itemplate'\nimport Tokenizer from './parser/tokenizer'\nimport Render from './render/render'\nimport Tag from './template/tag/tag'\nimport Filter from './template/filter/filter'\nimport Parser from './parser/parser'\nimport ITagImplOptions from './template/tag/itag-impl-options'\nimport Value from './template/value'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './render/syntax'\nimport builtinTags from './builtin/tags'\nimport builtinFilters from './builtin/filters'\nimport { LiquidOptions, NormalizedFullOptions, applyDefault, normalize } from './liquid-options'\nimport { FilterImpl } from './template/filter/filter-impl'\n\nexport default class Liquid {\n public options: NormalizedFullOptions\n public renderer: Render\n public parser: Parser\n private cache: object = {}\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n this.options = applyDefault(normalize(opts))\n this.parser = new Parser(this)\n this.renderer = new Render()\n this.tokenizer = new Tokenizer(this.options)\n\n _.forOwn(builtinTags, (conf, name) => this.registerTag(name, conf))\n _.forOwn(builtinFilters, (handler, name) => this.registerFilter(name, handler))\n }\n parse (html: string, filepath?: string) {\n const tokens = this.tokenizer.tokenize(html, filepath)\n return this.parser.parse(tokens)\n }\n render (tpl: Array, ctx?: object, opts?: LiquidOptions) {\n const options = { ...this.options, ...normalize(opts) }\n const scope = new Scope(ctx, options)\n return this.renderer.renderTemplates(tpl, scope)\n }\n async parseAndRender (html: string, ctx?: object, opts?: LiquidOptions) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n }\n async getTemplate (file: string, opts?: LiquidOptions) {\n const options = normalize(opts)\n const roots = options.root ? [...options.root, ...this.options.root] : this.options.root\n const paths = roots.map(root => fs.resolve(root, file, this.options.extname))\n\n for (const filepath of paths) {\n if (!(await fs.exists(filepath))) continue\n\n if (this.options.cache && this.cache[filepath]) return this.cache[filepath]\n const value = this.parse(await fs.readFile(filepath), filepath)\n if (this.options.cache) this.cache[filepath] = value\n return value\n }\n\n const err = new Error('ENOENT') as any\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`\n err.code = 'ENOENT'\n throw err\n }\n async renderFile (file: string, ctx?: object, opts?: LiquidOptions) {\n const options = normalize(opts)\n const templates = await this.getTemplate(file, options)\n return this.render(templates, ctx, opts)\n }\n evalValue (str: string, scope: Scope) {\n return new Value(str, this.options.strict_filters).value(scope)\n }\n registerFilter (name: string, filter: FilterImpl) {\n return Filter.register(name, filter)\n }\n registerTag (name: string, tag: ITagImplOptions) {\n return Tag.register(name, tag)\n }\n plugin (plugin: (this: Liquid, L: typeof Liquid) => void) {\n return plugin.call(this, Liquid)\n }\n express () {\n const self = this\n return function (this: any, filePath: string, ctx: object, cb: (err: Error | null, html?: string) => void) {\n const opts = { root: this.root }\n self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb)\n }\n }\n static default = Liquid\n static isTruthy = isTruthy\n static isFalsy = isFalsy\n static evalExp = evalExp\n static evalValue = evalValue\n static Types = Types\n}\n"],"names":["range","tslib_1.__extends","_\r\n .range","_.padStart","_.isArray","_.isString","BlockMode","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/util/error.ts","../src/util/assert.ts","../src/liquid-options.ts","../src/scope/block-mode.ts","../src/scope/scope.ts","../src/scope/scopes.ts","../src/fs/node.ts","../src/parser/whitespace-ctrl.ts","../src/parser/token.ts","../src/parser/html-token.ts","../src/parser/delimited-token.ts","../src/parser/lexical.ts","../src/parser/tag-token.ts","../src/parser/output-token.ts","../src/parser/tokenizer.ts","../src/render/render.ts","../src/render/syntax.ts","../src/template/tag/hash.ts","../src/template/template.ts","../src/template/tag/tag.ts","../src/template/filter/filter.ts","../src/parser/parse-stream.ts","../src/template/value.ts","../src/template/output.ts","../src/template/html.ts","../src/parser/parser.ts","../src/builtin/tags/assign.ts","../src/util/promise.ts","../src/builtin/tags/for.ts","../src/builtin/tags/capture.ts","../src/builtin/tags/case.ts","../src/builtin/tags/comment.ts","../src/builtin/tags/include.ts","../src/builtin/tags/decrement.ts","../src/builtin/tags/cycle.ts","../src/builtin/tags/if.ts","../src/builtin/tags/increment.ts","../src/builtin/tags/layout.ts","../src/builtin/tags/block.ts","../src/builtin/tags/raw.ts","../src/builtin/tags/tablerow.ts","../src/builtin/tags/unless.ts","../src/builtin/tags/break.ts","../src/builtin/tags/continue.ts","../src/builtin/tags/index.ts","../src/builtin/filters/html.ts","../src/builtin/filters/string.ts","../src/builtin/filters/math.ts","../src/builtin/filters/url.ts","../src/builtin/filters/array.ts","../src/util/strftime.ts","../src/builtin/filters/date.ts","../src/builtin/filters/object.ts","../src/builtin/filters/index.ts","../src/liquid.ts"],"sourcesContent":["const toStr = Object.prototype.toString\nconst arrToStr = Array.prototype.toString\n\n/*\n * Checks if value is classified as a String primitive or object.\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is a string, else false.\n */\nexport function isString (value: any) {\n return toStr.call(value) === '[object String]'\n}\n\nexport function isFunction (value: any) {\n return typeof value === 'function'\n}\n\nexport function promisify (fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise;\nexport function promisify (fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void):(arg1: T1, arg2: T2) => Promise;\nexport function promisify (fn: any) {\n return function (...args: any[]) {\n return new Promise((resolve, reject) => {\n fn(...args, (err: Error, result: any) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value: any): string {\n if (isNil(value)) return ''\n if (isFunction(value.to_liquid)) return stringify(value.to_liquid())\n if (isFunction(value.toLiquid)) return stringify(value.toLiquid())\n if (isFunction(value.to_s)) return value.to_s()\n if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value)\n if (isFunction(value.toString)) return value.toString()\n return toStr.call(value)\n}\n\nfunction defaultToString (value: any): string {\n const cache: string[] = []\n return JSON.stringify(value, (key, value) => {\n if (isObject(value)) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n}\n\nexport function create (proto: T1): T2 {\n return Object.create(proto)\n}\n\nexport function isNil (value: any): boolean {\n return value === null || value === undefined\n}\n\nexport function isArray (value: any): boolean {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value: any): boolean {\n const signature = toStr.call(value)\n // [object XXXError]\n return signature.substr(-6, 5) === 'Error' ||\n (typeof value.message === 'string' && typeof value.name === 'string')\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (\n object: {[key: string]: T} | undefined,\n iteratee: ((val: T, key: string, obj: {[key: string]: T}) => boolean | void)\n) {\n object = object || {}\n for (const k in object) {\n if (object.hasOwnProperty(k)) {\n if (iteratee(object[k], k, object) === false) break\n }\n }\n return object\n}\n\nexport function last (arr: T[]): T;\nexport function last (arr: string): string;\nexport function last (arr: any[] | string): any | string {\n return arr[arr.length - 1]\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value: any): boolean {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\n/*\n * A function to create flexibly-numbered lists of integers,\n * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.\n * Returns a list of integers from start (inclusive) to stop (exclusive),\n * incremented (or decremented) by step, exclusive.\n * Note that ranges that stop before they start are considered to be zero-length instead of\n * negative — if you'd like a negative range, use a negative step.\n */\nexport function range (start: number, stop?: number, step?: number) {\n if (stop === undefined) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr: number[] = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n\nexport function padStart (str: any, length: number, ch: string = ' ') {\n str = String(str)\n let n = length - str.length\n while (n-- > 0) str = ch + str\n return str\n}\n","import * as _ from './underscore'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\n\nabstract class LiquidError extends Error {\n private token: Token\n private originalError: Error\n constructor (err: Error, token: Token) {\n super(err.message)\n this.originalError = err\n this.token = token\n }\n protected update () {\n const err = this.originalError\n const context = mkContext(this.token)\n this.message = mkMessage(err.message, this.token)\n this.stack = this.message + '\\n' + context +\n '\\n' + this.stack + '\\nFrom ' + err.stack\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor (message: string, token: Token) {\n super(new Error(message), token)\n this.name = 'TokenizationError'\n super.update()\n }\n}\n\nexport class ParseError extends LiquidError {\n constructor (err: Error, token: Token) {\n super(err, token)\n this.name = 'ParseError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderError extends LiquidError {\n constructor (err: Error, tpl: ITemplate) {\n super(err, tpl.token)\n this.name = 'RenderError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderBreakError extends Error {\n resolvedHTML: string = ''\n constructor (message: string) {\n super(message)\n this.name = 'RenderBreakError'\n this.message = message + ''\n }\n}\n\nexport class AssertionError extends Error {\n constructor (message: string) {\n super(message)\n this.name = 'AssertionError'\n this.message = message + ''\n }\n}\n\nfunction mkContext (token: Token) {\n const lines = token.input.split('\\n')\n const begin = Math.max(token.line - 2, 1)\n const end = Math.min(token.line + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === token.line) ? '>> ' : ' '\n const num = _.padStart(String(lineNumber), String(end).length)\n const text = lines[lineNumber - 1]\n return `${indicator}${num}| ${text}`\n })\n .join('\\n')\n\n return context\n}\n\nfunction mkMessage (msg: string, token: Token) {\n if (token.file) msg += `, file:${token.file}`\n msg += `, line:${token.line}, col:${token.col}`\n return msg\n}\n","import { AssertionError } from './error'\n\nexport default function (predicate: any, message?: string) {\n if (!predicate) {\n message = message || `expect ${predicate} to be true`\n throw new AssertionError(message)\n }\n}\n","/* eslint-disable camelcase */\n\nimport * as _ from './util/underscore'\n\nexport interface LiquidOptions {\n /** `root` is a directory or an array of directories to resolve layouts and includes, as well as the filename passed in when calling `.renderFile()`. If an array, the files are looked up in the order they occur in the array. Defaults to `[\".\"]` */\n root?: string | string[]\n /** `extname` is used to lookup the template file when filepath doesn't include an extension name. Eg: setting to `\".html\"` will allow including file by basename. Defaults to `\"\"`. */\n extname?: string\n /** `cache` indicates whether or not to cache resolved templates. Defaults to `false`. */\n cache?: boolean\n /** `dynamicPartials`: if set, treat `` parameter in `{%include filepath %}`, `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */\n dynamicPartials?: boolean\n /** `strict_filters` is used to enable strict filter existence. If set to `false`, undefined filters will be rendered as empty string. Otherwise, undefined filters will cause an exception. Defaults to `false`. */\n strict_filters?: boolean\n /** `strict_variables` is used to enable strict variable derivation. If set to `false`, undefined variables will be rendered as empty string. Otherwise, undefined variables will cause an exception. Defaults to `false`. */\n strict_variables?: boolean\n /** `trim_tag_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of tags (`{% %}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_tag_right?: boolean\n /** `trim_tag_left` is similar to `trim_tag_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_tag_left?: boolean\n /** ``trim_output_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_output_right?: boolean\n /** `trim_output_left` is similar to `trim_output_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_output_left?: boolean\n /** `tag_delimiter_left` and `tag_delimiter_right` are used to override the delimiter for liquid tags **/\n tag_delimiter_left?: string,\n tag_delimiter_right?: string,\n /** `output_delimiter_left` and `output_delimiter_right` are used to override the delimiter for liquid outputs **/\n output_delimiter_left?: string,\n output_delimiter_right?: string,\n /** `greedy` is used to specify whether `trim_left`/`trim_right` is greedy. When set to `true`, all consecutive blank characters including `\\n` will be trimed regardless of line breaks. Defaults to `true`. */\n greedy?: boolean\n}\n\ninterface NormalizedOptions extends LiquidOptions {\n root?: string[]\n}\n\nexport interface NormalizedFullOptions extends NormalizedOptions {\n root: string[]\n extname: string\n cache: boolean\n dynamicPartials: boolean\n strict_filters: boolean\n strict_variables: boolean\n trim_tag_right: boolean\n trim_tag_left: boolean\n trim_output_right: boolean\n trim_output_left: boolean\n tag_delimiter_left: string,\n tag_delimiter_right: string,\n output_delimiter_left: string,\n output_delimiter_right: string,\n greedy: boolean\n}\n\nconst defaultOptions: NormalizedFullOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_output_right: false,\n trim_output_left: false,\n greedy: true,\n tag_delimiter_left: '{%',\n tag_delimiter_right: '%}',\n output_delimiter_left: '{{',\n output_delimiter_right: '}}',\n strict_filters: false,\n strict_variables: false\n}\n\nexport function normalize (options?: LiquidOptions): NormalizedOptions {\n options = options || {}\n if (options.hasOwnProperty('root')) {\n options.root = normalizeStringArray(options.root)\n }\n return options as NormalizedOptions\n}\n\nexport function applyDefault (options?: NormalizedOptions): NormalizedFullOptions {\n return { ...defaultOptions, ...options }\n}\n\nfunction normalizeStringArray (value: any): string[] {\n if (_.isArray(value)) return value as string[]\n if (_.isString(value)) return [value as string]\n return []\n}\n","enum BlockMode {\n /* store rendered html into blocks */\n OUTPUT,\n /* output rendered html directly */\n STORE\n}\n\nexport default BlockMode\n","import * as _ from '../util/underscore'\nimport { __assign } from 'tslib'\nimport assert from '../util/assert'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\nimport BlockMode from './block-mode'\nimport IContext from './icontext'\n\nexport default class Scope {\n opts: NormalizedFullOptions\n contexts: Array\n blocks: object = {}\n groups: {[key: string]: number} = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts?: NormalizedFullOptions) {\n this.opts = applyDefault(opts)\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => __assign(ctx, val), {})\n }\n get (path: string): any {\n const paths = this.propertyAccessSeq(path)\n const scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n return paths.reduce((value, key) => this.readProperty(value, key), scope)\n }\n set (path: string, v: any): void {\n const paths = this.propertyAccessSeq(path)\n let scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n paths.some((key, i) => {\n if (!_.isObject(scope)) {\n return true\n }\n if (i === paths.length - 1) {\n scope[key] = v\n return true\n }\n if (undefined === scope[key]) {\n scope[key] = {}\n }\n scope = scope[key]\n return false\n })\n }\n unshift (ctx: object) {\n return this.contexts.unshift(ctx)\n }\n push (ctx: object) {\n return this.contexts.push(ctx)\n }\n pop (ctx?: object): object | undefined {\n if (!arguments.length) {\n return this.contexts.pop()\n }\n const i = this.contexts.findIndex(scope => scope === ctx)\n if (i === -1) {\n throw new TypeError('scope not found, cannot pop')\n }\n return this.contexts.splice(i, 1)[0]\n }\n findContextFor (key: string, filter: ((conttext: object) => boolean) = () => true) {\n for (let i = this.contexts.length - 1; i >= 0; i--) {\n const candidate = this.contexts[i]\n if (!filter(candidate)) continue\n if (key in candidate) {\n return candidate\n }\n }\n return null\n }\n private readProperty (obj: IContext, key: string) {\n let val\n if (_.isNil(obj)) {\n val = undefined\n } else {\n obj = toLiquid(obj)\n val = key === 'size' ? readSize(obj) : obj[key]\n if (_.isFunction(obj.liquid_method_missing)) {\n val = obj.liquid_method_missing!(key)\n }\n }\n if (_.isNil(val) && this.opts.strict_variables) {\n throw new TypeError(`undefined variable: ${key}`)\n }\n return val\n }\n\n /*\n * Parse property access sequence from access string\n * @example\n * accessSeq(\"foo.bar\") // ['foo', 'bar']\n * accessSeq(\"foo['bar']\") // ['foo', 'bar']\n * accessSeq(\"foo['b]r']\") // ['foo', 'b]r']\n * accessSeq(\"foo[bar.coo]\") // ['foo', 'bar'], for bar.coo == 'bar'\n */\n propertyAccessSeq (str: string) {\n str = String(str)\n const seq: string[] = []\n let name = ''\n let j\n let i = 0\n while (i < str.length) {\n switch (str[i]) {\n case '[':\n push()\n\n const delemiter = str[i + 1]\n if (/['\"]/.test(delemiter)) { // foo[\"bar\"]\n j = str.indexOf(delemiter, i + 2)\n assert(j !== -1, `unbalanced ${delemiter}: ${str}`)\n name = str.slice(i + 2, j)\n push()\n i = j + 2\n } else { // foo[bar.coo]\n j = matchRightBracket(str, i + 1)\n assert(j !== -1, `unbalanced []: ${str}`)\n name = str.slice(i + 1, j)\n if (!/^[+-]?\\d+$/.test(name)) { // foo[bar] vs. foo[1]\n name = String(this.get(name))\n }\n push()\n i = j + 1\n }\n break\n case '.':// foo.bar, foo[0].bar\n push()\n i++\n break\n default:// foo.bar\n name += str[i]\n i++\n }\n }\n push()\n\n if (!seq.length) {\n throw new TypeError(`invalid path:\"${str}\"`)\n }\n return seq\n\n function push () {\n if (name.length) seq.push(name)\n name = ''\n }\n }\n}\n\nfunction toLiquid (obj: IContext) {\n if (_.isFunction(obj.to_liquid)) {\n return obj.to_liquid()\n }\n if (_.isFunction(obj.toLiquid)) {\n return obj.toLiquid()\n }\n return obj\n}\n\nfunction readSize (obj: IContext) {\n if (!_.isNil(obj.size)) return obj.size\n if (_.isArray(obj) || _.isString(obj)) return obj.length\n return obj.size\n}\n\nfunction matchRightBracket (str: string, begin: number) {\n let stack = 1 // count of '[' - count of ']'\n for (let i = begin; i < str.length; i++) {\n if (str[i] === '[') {\n stack++\n }\n if (str[i] === ']') {\n stack--\n if (stack === 0) {\n return i\n }\n }\n }\n return -1\n}\n","export class CaptureScope {}\nexport class AssignScope {}\nexport class IncrementScope {}\nexport class DecrementScope {}\n","import * as _ from '../util/underscore'\nimport { resolve, extname } from 'path'\nimport { stat, readFile } from 'fs'\nimport IFS from './ifs'\n\nconst statAsync = _.promisify(stat)\nconst readFileAsync = _.promisify(readFile)\n\nconst fs: IFS = {\n exists: (filepath: string) => {\n return statAsync(filepath).then(() => true).catch(() => false)\n },\n readFile: filepath => {\n return readFileAsync(filepath, 'utf8')\n },\n resolve: (root: string, file: string, ext: string) => {\n if (!extname(file)) file += ext\n return resolve(root, file)\n }\n}\n\nexport default fs\n","import DelimitedToken from 'src/parser/delimited-token'\nimport Token from 'src/parser/token'\nimport TagToken from 'src/parser/tag-token'\nimport { NormalizedFullOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: NormalizedFullOptions) {\n options = { greedy: true, ...options }\n let inRaw = false\n\n tokens.forEach((token: Token, i: number) => {\n if (shouldTrimLeft(token as DelimitedToken, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && (token as TagToken).name === 'raw') inRaw = true\n if (token.type === 'tag' && (token as TagToken).name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token as DelimitedToken, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimLeft || options.trim_tag_left\n if (token.type === 'output') return token.trimLeft || options.trim_output_left\n}\n\nfunction shouldTrimRight (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimRight || options.trim_tag_right\n if (token.type === 'output') return token.trimRight || options.trim_output_right\n}\n\nfunction trimLeft (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rLeft = greedy ? /\\s+$/g : /[\\t\\r ]*$/g\n token.value = token.value.replace(rLeft, '')\n}\n\nfunction trimRight (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rRight = greedy ? /^\\s+/g : /^[\\t\\r ]*\\n?/g\n token.value = token.value.replace(rRight, '')\n}\n","export default class Token {\n type: string = 'notset'\n line: number\n col: number\n raw: string\n input: string\n file?: string\n value: string\n constructor (raw: string, input: string, line: number, col: number, file?: string) {\n this.col = col\n this.line = line\n this.raw = raw\n this.value = raw\n this.input = input\n this.file = file\n }\n}\n","import Token from './token'\n\nexport default class HTMLToken extends Token {\n constructor (str: string, input: string, line: number, col: number, file?: string) {\n super(str, input, line, col, file)\n this.type = 'html'\n this.value = str\n }\n}\n","import Token from './token'\nimport { last } from 'src/util/underscore'\n\nexport default class DelimitedToken extends Token {\n trimLeft: boolean\n trimRight: boolean\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, input, line, pos, file)\n this.trimLeft = value[0] === '-'\n this.trimRight = last(value) === '-'\n this.value = value\n .slice(\n this.trimLeft ? 1 : 0,\n this.trimRight ? -1 : value.length\n )\n .trim()\n }\n}\n","// quote related\nconst singleQuoted = /'[^']*'/\nconst doubleQuoted = /\"[^\"]*\"/\nexport const quoted = new RegExp(`${singleQuoted.source}|${doubleQuoted.source}`)\nexport const quoteBalanced = new RegExp(`(?:${quoted.source}|[^'\"])*`)\n\n// basic types\nexport const number = /[+-]?(?:\\d+\\.?\\d*|\\.?\\d+)/\nexport const bool = /true|false/\n\n// property access\nexport const identifier = /[\\w-]+[?]?/\nexport const subscript = new RegExp(`\\\\[(?:${quoted.source}|[\\\\w-\\\\.]+)\\\\]`)\nexport const literal = new RegExp(`(?:${quoted.source}|${bool.source}|${number.source})`)\nexport const variable = new RegExp(`${identifier.source}(?:\\\\.${identifier.source}|${subscript.source})*`)\n\n// range related\nexport const rangeLimit = new RegExp(`(?:${variable.source}|${number.source})`)\nexport const range = new RegExp(`\\\\(${rangeLimit.source}\\\\.\\\\.${rangeLimit.source}\\\\)`)\nexport const rangeCapture = new RegExp(`\\\\((${rangeLimit.source})\\\\.\\\\.(${rangeLimit.source})\\\\)`)\n\nexport const value = new RegExp(`(?:${variable.source}|${literal.source}|${range.source})`)\n\n// hash related\nexport const hash = new RegExp(`(?:${identifier.source})\\\\s*:\\\\s*(?:${value.source})`)\nexport const hashCapture = new RegExp(`(${identifier.source})\\\\s*:\\\\s*(${value.source})`, 'g')\n\n// full match\nexport const tagLine = new RegExp(`^\\\\s*(${identifier.source})\\\\s*([\\\\s\\\\S]*?)\\\\s*$`)\nexport const numberLine = new RegExp(`^${number.source}$`)\nexport const boolLine = new RegExp(`^${bool.source}$`, 'i')\nexport const quotedLine = new RegExp(`^${quoted.source}$`)\nexport const rangeLine = new RegExp(`^${rangeCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isRange (str: string) {\n return rangeLine.test(str)\n}\n","import DelimitedToken from './delimited-token'\nimport { TokenizationError } from 'src/util/error'\nimport * as lexical from './lexical'\n\nexport default class TagToken extends DelimitedToken {\n name: string\n args: string\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'tag'\n const match = this.value.match(lexical.tagLine)\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, this)\n }\n this.name = match[1]\n this.args = match[2]\n }\n}\n","import DelimitedToken from './delimited-token'\n\nexport default class OutputToken extends DelimitedToken {\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'output'\n }\n}\n","import whiteSpaceCtrl from './whitespace-ctrl'\nimport HTMLToken from './html-token'\nimport TagToken from './tag-token'\nimport Token from './token'\nimport OutputToken from './output-token'\nimport { TokenizationError } from 'src/util/error'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: NormalizedFullOptions\n constructor (options?: NormalizedFullOptions) {\n this.options = applyDefault(options)\n }\n tokenize (input: string, file?: string) {\n const tokens: Token[] = []\n const tagL = this.options.tag_delimiter_left\n const tagR = this.options.tag_delimiter_right\n const outputL = this.options.output_delimiter_left\n const outputR = this.options.output_delimiter_right\n let p = 0\n let curLine = 1\n let state = ParseState.HTML\n let buffer = ''\n let lineBegin = 0\n let line = 1\n let col = 1\n\n while (p < input.length) {\n if (input[p] === '\\n') {\n curLine++\n lineBegin = p + 1\n }\n if (state === ParseState.HTML) {\n if (input.substr(p, outputL.length) === outputL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = outputL\n line = curLine\n col = p - lineBegin + 1\n p += outputL.length\n state = ParseState.OUTPUT\n continue\n } else if (input.substr(p, tagL.length) === tagL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = tagL\n line = curLine\n col = p - lineBegin + 1\n p += tagL.length\n state = ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && input.substr(p, outputR.length) === outputR) {\n buffer += outputR\n tokens.push(new OutputToken(buffer, buffer.slice(outputL.length, -outputR.length), input, line, col, file))\n p += outputR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n } else if (input.substr(p, tagR.length) === tagR) {\n buffer += tagR\n tokens.push(new TagToken(buffer, buffer.slice(tagL.length, -tagR.length), input, line, col, file))\n p += tagR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n }\n buffer += input[p++]\n }\n if (state !== ParseState.HTML) {\n const t = state === ParseState.OUTPUT ? 'output' : 'tag'\n const str = buffer.length > 16 ? buffer.slice(0, 13) + '...' : buffer\n throw new TokenizationError(\n `${t} \"${str}\" not closed`,\n new Token(buffer, input, line, col, file)\n )\n }\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n\n whiteSpaceCtrl(tokens, this.options)\n return tokens\n }\n}\n","import { RenderError } from 'src/util/error'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Render {\n async renderTemplates (templates: ITemplate[], scope: Scope) {\n assert(scope, 'unable to evalTemplates: scope undefined')\n\n let html = ''\n for (const tpl of templates) {\n try {\n html += await tpl.render(scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n e.resolvedHTML = html\n throw e\n }\n throw e.name === 'RenderError' ? e : new RenderError(e, tpl)\n }\n }\n return html\n }\n}\n","import * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport Scope from 'src/scope/scope'\nimport { range, last } from 'src/util/underscore'\n\nconst operators = {\n '==': (l: any, r: any) => l === r,\n '!=': (l: any, r: any) => l !== r,\n '>': (l: any, r: any) => l !== null && r !== null && l > r,\n '<': (l: any, r: any) => l !== null && r !== null && l < r,\n '>=': (l: any, r: any) => l !== null && r !== null && l >= r,\n '<=': (l: any, r: any) => l !== null && r !== null && l <= r,\n 'contains': (l: any, r: any) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l: any, r: any) => isTruthy(l) && isTruthy(r),\n 'or': (l: any, r: any) => isTruthy(l) || isTruthy(r)\n}\n\nexport function evalExp (exp: string, scope: Scope): any {\n assert(scope, 'unable to evalExp: scope undefined')\n const operatorREs = lexical.operators\n let match\n for (let i = 0; i < operatorREs.length; i++) {\n const operatorRE = operatorREs[i]\n const expRE = new RegExp(`^(${lexical.quoteBalanced.source})(${operatorRE.source})(${lexical.quoteBalanced.source})$`)\n if ((match = exp.match(expRE))) {\n const l = evalExp(match[1], scope)\n const op = operators[match[2].trim()]\n const r = evalExp(match[3], scope)\n return op(l, r)\n }\n }\n\n if ((match = exp.match(lexical.rangeLine))) {\n const low = evalValue(match[1], scope)\n const high = evalValue(match[2], scope)\n return range(low, high + 1)\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str: string, scope: Scope) {\n if (!str) return null\n str = str.trim()\n\n if (str === 'true') return true\n if (str === 'false') return false\n if (!isNaN(Number(str))) return Number(str)\n if ((str[0] === '\"' || str[0] === \"'\") && str[0] === last(str)) return str.slice(1, -1)\n return scope.get(str)\n}\n\nexport function isTruthy (val: any): boolean {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val: any): boolean {\n return val === false || undefined === val || val === null\n}\n","import { hashCapture } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\n\n/**\n * Key-Value Pairs Representing Tag Arguments\n * Example:\n * For the markup `{% include 'head.html' foo='bar' %}`,\n * hash['foo'] === 'bar'\n */\nexport default class Hash {\n [key: string]: any\n constructor (markup: string, scope: Scope) {\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n this[k] = evalValue(v, scope)\n }\n }\n}\n","export default abstract class Template {\n token: T;\n constructor (token: T) {\n this.token = token\n }\n}\n","import { create, stringify } from 'src/util/underscore'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITagImpl from './itag-impl'\nimport ITagImplOptions from './itag-impl-options'\nimport Liquid from 'src/liquid'\nimport Hash from './hash'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\n\nexport default class Tag extends Template implements ITemplate {\n name: string\n private impl: ITagImpl\n static impls: { [key: string]: ITagImplOptions } = {}\n\n constructor (token: TagToken, tokens: Token[], liquid: Liquid) {\n super(token)\n this.name = token.name\n\n const impl = Tag.impls[token.name]\n assert(impl, `tag ${token.name} not found`)\n this.impl = create(impl)\n this.impl.liquid = liquid\n if (this.impl.parse) {\n this.impl.parse(token, tokens)\n }\n }\n async render (scope: Scope) {\n const hash = new Hash(this.token.args, scope)\n const impl = this.impl\n if (typeof impl.render !== 'function') {\n return ''\n }\n const html = await impl.render(scope, hash)\n return stringify(html)\n }\n static register (name: string, tag: ITagImplOptions) {\n Tag.impls[name] = tag\n }\n static clear () {\n Tag.impls = {}\n }\n}\n","import { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\nimport { FilterImpl } from './filter-impl'\n\nexport default class Filter {\n name: string\n impl: FilterImpl\n args: string[]\n private static impls: {[key: string]: FilterImpl} = {}\n\n constructor (name: string, args: string[], strictFilters: boolean) {\n const impl = Filter.impls[name]\n if (!impl && strictFilters) throw new TypeError(`undefined filter: ${name}`)\n\n this.name = name\n this.impl = impl || (x => x)\n this.args = args\n }\n render (value: any, scope: Scope): any {\n const args = this.args.map(arg => evalValue(arg, scope))\n return this.impl.apply(null, [value, ...args])\n }\n static register (name: string, filter: FilterImpl) {\n Filter.impls[name] = filter\n }\n static clear () {\n Filter.impls = {}\n }\n}\n","import Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from './tag-token'\n\ntype ParseToken = ((token: Token, remainTokens: Array) => ITemplate)\n\nexport default class ParseStream {\n private tokens: Array\n private handlers: {[key: string]: (arg: any) => void} = {}\n private stopRequested: boolean = false\n private parseToken: ParseToken\n\n constructor (tokens: Array, parseToken: ParseToken) {\n this.tokens = tokens\n this.parseToken = parseToken\n }\n on (name: string, cb: (arg: T) => void): ParseStream {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: T) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n return false\n }\n start () {\n this.trigger('start')\n let token: Token | undefined\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' && this.trigger(`tag:${(token).name}`, token)) {\n continue\n }\n const template = this.parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n }\n stop () {\n this.stopRequested = true\n return this\n }\n}\n","import { evalExp } from 'src/render/syntax'\nimport Filter from './filter/filter'\nimport Scope from 'src/scope/scope'\n\nenum ParseState {\n INIT = 0,\n FILTER_NAME = 1,\n FILTER_ARG = 2\n}\n\nexport default class {\n initial: any\n filters: Array = []\n\n /**\n * @param str value string, like: \"i have a dream | truncate: 3\n */\n constructor (str: string, strictFilters: boolean) {\n let buffer = ''\n let quoted = ''\n let state = ParseState.INIT\n let sealed = false\n\n let filterName = ''\n let filterArgs: string[] = []\n\n for (let i = 0; i < str.length; i++) {\n if (quoted) {\n if (str[i] === quoted) {\n quoted = ''\n sealed = true\n }\n buffer += str[i]\n } else if (/\\s/.test(str[i])) {\n if (!buffer) continue\n else sealed = true\n } else if (str[i] === '|') {\n if (state === ParseState.INIT) {\n this.initial = buffer\n } else {\n if (state === ParseState.FILTER_NAME) filterName = buffer\n else filterArgs.push(buffer)\n this.filters.push(new Filter(filterName, filterArgs, strictFilters))\n filterName = ''\n filterArgs = []\n }\n state = ParseState.FILTER_NAME\n buffer = ''\n sealed = false\n } else if (state === ParseState.FILTER_NAME && str[i] === ':') {\n filterName = buffer\n state = ParseState.FILTER_ARG\n buffer = ''\n sealed = false\n } else if (state === ParseState.FILTER_ARG && str[i] === ',') {\n filterArgs.push(buffer)\n buffer = ''\n sealed = false\n } else if (sealed) continue\n else {\n if ((str[i] === '\"' || str[i] === \"'\") && !quoted) quoted = str[i]\n buffer += str[i]\n }\n }\n\n if (buffer) {\n if (state === ParseState.INIT) this.initial = buffer\n else if (state === ParseState.FILTER_NAME) this.filters.push(new Filter(buffer, [], strictFilters))\n else {\n filterArgs.push(buffer)\n this.filters.push(new Filter(filterName, filterArgs, strictFilters))\n }\n }\n }\n value (scope: Scope) {\n return this.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(this.initial, scope))\n }\n}\n","import Value from './value'\nimport { stringify } from 'src/util/underscore'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport OutputToken from 'src/parser/output-token'\n\nexport default class Output extends Template implements ITemplate {\n value: Value\n constructor (token: OutputToken, strictFilters: boolean) {\n super(token)\n this.value = new Value(token.value, strictFilters)\n }\n async render (scope: Scope): Promise {\n const html = await this.value.value(scope)\n return stringify(html)\n }\n}\n","import Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport HTMLToken from 'src/parser/html-token'\n\nexport default class extends Template implements ITemplate {\n str: string\n constructor (token: HTMLToken) {\n super(token)\n this.str = token.value\n }\n async render (): Promise {\n return this.str\n }\n}\n","import { ParseError } from '../util/error'\nimport Liquid from 'src/liquid'\nimport ParseStream from './parse-stream'\nimport Token from './token'\nimport TagToken from './tag-token'\nimport OutputToken from './output-token'\nimport Tag from 'src/template/tag/tag'\nimport Output from 'src/template/output'\nimport HTML from 'src/template/html'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Parser {\n liquid: Liquid\n\n constructor (liquid: Liquid) {\n this.liquid = liquid\n }\n parse (tokens: Array) {\n let token\n const templates: ITemplate[] = []\n while ((token = tokens.shift())) {\n templates.push(this.parseToken(token, tokens))\n }\n return templates\n }\n parseToken (token: Token, remainTokens: Array) {\n try {\n if (token.type === 'tag') {\n return new Tag(token as TagToken, remainTokens, this.liquid)\n }\n if (token.type === 'output') {\n return new Output(token as OutputToken, this.liquid.options.strict_filters)\n }\n return new HTML(token)\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n parseStream (tokens: Array) {\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens))\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { AssignScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(re) as RegExpMatchArray\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (scope: Scope) {\n const ctx = new AssignScope()\n ctx[this.key] = this.liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n} as ITagImplOptions\n","/*\n * Call functions in serial until someone rejected.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function mapSeries (\n iterable: T1[],\n iteratee: (item: T1, idx: number, iterable: T1[]) => Promise | T2\n): Promise {\n let ret = Promise.resolve(0)\n const result: T2[] = []\n iterable.forEach(function (item, idx) {\n ret = ret\n .then(() => iteratee(item, idx, iterable))\n .then(x => result.push(x))\n })\n return ret.then(() => result)\n}\n","import { mapSeries } from 'src/util/promise'\nimport { isString, isObject, isArray } from 'src/util/underscore'\nimport { evalExp } from 'src/render/syntax'\nimport assert from 'src/util/assert'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n type: 'block',\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n this.variable = match[1]\n this.collection = match[2]\n this.reversed = !!match[3]\n\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endfor', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection] as string[]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]]) as Array<[string, any]>\n }\n }\n if (!isArray(collection) || !collection.length) {\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n if (this.reversed) collection.reverse()\n\n const contexts = collection.map((item: string, i: number) => {\n const ctx = {}\n ctx[this.variable] = item\n ctx['forloop'] = {\n first: i === 0,\n index: i + 1,\n index0: i,\n last: i === collection.length - 1,\n length: collection.length,\n rindex: collection.length - i,\n rindex0: collection.length - i - 1\n }\n return ctx\n })\n\n let html = ''\n let finished = false\n await mapSeries(contexts, async context => {\n if (finished) return\n\n scope.push(context)\n try {\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n html += e.resolvedHTML\n if (e.message === 'break') {\n finished = true\n }\n } else throw e\n }\n scope.pop(context)\n })\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = tagToken.args.match(re) as RegExpMatchArray\n assert(match, `${tagToken.args} not valid identifier`)\n\n this.variable = match[1]\n this.templates = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', () => stream.stop())\n .on('template', (tpl) => this.templates.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const html = await this.liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = new CaptureScope()\n ctx[this.variable] = html\n scope.push(ctx)\n }\n} as ITagImplOptions\n","import { evalExp } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p: ITemplate[] = []\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:when', (token: TagToken) => {\n this.cases.push({\n val: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endcase', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = evalExp(branch.val, scope)\n const cond = evalExp(this.cond, scope)\n if (val === cond) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value, quotedLine } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /[^\\s,]+/\nconst withRE = new RegExp(`with\\\\s+(${value.source})`)\n\nexport default {\n parse: function (token: TagToken) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticValue = match[0]\n }\n\n match = value.exec(token.args)\n if (match) {\n this.value = match[0]\n }\n\n match = withRE.exec(token.args)\n if (match) {\n this.with = match[1]\n }\n },\n render: async function (scope: Scope, hash: Hash) {\n let filepath\n if (scope.opts.dynamicPartials) {\n if (quotedLine.exec(this.value)) {\n const template = this.value.slice(1, -1)\n filepath = await this.liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = evalValue(this.value, scope)\n }\n } else {\n filepath = this.staticValue\n }\n assert(filepath, `cannot include with empty filename`)\n\n const originBlocks = scope.blocks\n const originBlockMode = scope.blockMode\n\n scope.blocks = {}\n scope.blockMode = BlockMode.OUTPUT\n if (this.with) {\n hash[filepath] = evalValue(this.with, scope)\n }\n const templates = await this.liquid.getTemplate(filepath, scope.opts)\n scope.push(hash)\n const html = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.blocks = originBlocks\n scope.blockMode = originBlockMode\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, DecrementScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(identifier) as RegExpMatchArray\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope: Scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new DecrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n return --context[this.variable]\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\nconst candidatesRE = new RegExp(rValue.source, 'g')\n\nexport default {\n parse: function (tagToken: TagToken) {\n let match: RegExpExecArray | null = groupRE.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.group = match[1] || ''\n const candidates = match[2]\n\n this.candidates = []\n\n while ((match = candidatesRE.exec(candidates))) {\n this.candidates.push(match[0])\n }\n assert(this.candidates.length, `empty candidates: ${tagToken.raw}`)\n },\n\n render: function (scope: Scope) {\n const group = evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n const groups = scope.groups\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n\n return evalValue(candidate, scope)\n }\n}\n","import { evalExp, isTruthy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', (token: TagToken) => {\n this.branches.push({\n cond: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endif', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (const branch of this.branches) {\n const cond = evalExp(branch.cond, scope)\n if (isTruthy(cond)) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match![0]\n },\n render: function (scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new IncrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n const val = context[this.variable]\n context[this.variable]++\n return val\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /\\S+/\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticLayout = match[0]\n }\n\n match = rValue.exec(token.args)\n if (match) {\n this.layout = match[0]\n }\n\n this.tpls = this.liquid.parser.parse(remainTokens)\n },\n render: async function (scope: Scope, hash: Hash) {\n const layout = scope.opts.dynamicPartials\n ? evalValue(this.layout, scope)\n : this.staticLayout\n assert(layout, `cannot apply layout with empty filename`)\n\n // render the remaining tokens immediately\n scope.blockMode = BlockMode.STORE\n const html = await this.liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.blocks[''] === undefined) {\n scope.blocks[''] = html\n }\n const templates = await this.liquid.getTemplate(layout, scope.opts)\n scope.push(hash)\n scope.blockMode = BlockMode.OUTPUT\n const partial = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n} as ITagImplOptions\n","import BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n this.tpls = [] as ITemplate[]\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', (tpl: ITemplate) => this.tpls.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${token.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const childDefined = scope.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await this.liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.blockMode === BlockMode.STORE) {\n scope.blocks[this.block] = html\n return ''\n }\n return html\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.tokens = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endraw') stream.stop()\n else this.tokens.push(token)\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: function () {\n return this.tokens.map((token: Token) => token.raw).join('')\n }\n}\n","import { mapSeries } from 'src/util/promise'\nimport assert from 'src/util/assert'\nimport { evalExp } from 'src/render/syntax'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.variable = match[1]\n this.collection = match[2]\n this.templates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope) || []\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = hash.cols || collection.length\n const contexts = collection.map((item: any) => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row: number = 0\n let html = ''\n await mapSeries(contexts, async (context, idx) => {\n row = Math.floor(idx / cols) + 1\n const col = (idx % cols) + 1\n if (col === 1) {\n if (row !== 1) {\n html += ''\n }\n html += ``\n }\n\n html += ``\n scope.push(context)\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n html += ''\n scope.pop(context)\n return html\n })\n if (row > 0) {\n html += ''\n }\n return html\n }\n} as ITagImplOptions\n","import { evalExp, isFalsy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n const cond = evalExp(this.cond, scope)\n return isFalsy(cond)\n ? this.liquid.renderer.renderTemplates(this.templates, scope)\n : this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('break')\n }\n}\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('continue')\n }\n}\n","import assign from './assign'\nimport For from './for'\nimport capture from './capture'\nimport Case from './case'\nimport comment from './comment'\nimport include from './include'\nimport decrement from './decrement'\nimport cycle from './cycle'\nimport If from './if'\nimport increment from './increment'\nimport layout from './layout'\nimport block from './block'\nimport raw from './raw'\nimport tablerow from './tablerow'\nimport unless from './unless'\nimport Break from './break'\nimport Continue from './continue'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst tags: { [key: string]: ITagImplOptions } = {\n assign, 'for': For, capture, 'case': Case, comment, include, decrement, increment, cycle, 'if': If, layout, block, raw, tablerow, unless, 'break': Break, 'continue': Continue\n}\n\nexport default tags\n","const escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nfunction escape (str: string) {\n return String(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str: string) {\n return String(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nexport default {\n 'escape': escape,\n 'escape_once': (str: string) => escape(unescape(str)),\n 'newline_to_br': (v: string) => v.replace(/\\n/g, '
'),\n 'strip_html': (v: string) => v.replace(/|||<.*?>/g, '')\n}\n","import { FilterImpl } from 'src/template/filter/filter-impl'\n\nexport default {\n 'append': (v: string, arg: string) => v + arg,\n 'prepend': (v: string, arg: string) => arg + v,\n 'capitalize': (str: string) => String(str).charAt(0).toUpperCase() + str.slice(1),\n 'lstrip': (v: string) => String(v).replace(/^\\s+/, ''),\n 'downcase': (v: string) => v.toLowerCase(),\n 'upcase': (str: string) => String(str).toUpperCase(),\n 'remove': (v: string, arg: string) => v.split(arg).join(''),\n 'remove_first': (v: string, l: string) => v.replace(l, ''),\n 'replace': (v: string, pattern: string, replacement: string) =>\n String(v).split(pattern).join(replacement),\n 'replace_first': (v: string, arg1: string, arg2: string) => String(v).replace(arg1, arg2),\n 'rstrip': (str: string) => String(str).replace(/\\s+$/, ''),\n 'split': (v: string, arg: string) => String(v).split(arg),\n 'strip': (v: string) => String(v).trim(),\n 'strip_newlines': (v: string) => String(v).replace(/\\n/g, ''),\n 'truncate': (v: string, l: number = 50, o: string = '...') => {\n v = String(v)\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v: string, l: number = 15, o: string = '...') => {\n const arr = v.split(/\\s+/)\n let ret = arr.slice(0, l).join(' ')\n if (arr.length >= l) ret += o\n return ret\n }\n} as {[key: string]: FilterImpl}\n","export default {\n 'abs': (v: number) => Math.abs(v),\n 'ceil': (v: number) => Math.ceil(v),\n 'divided_by': (v: number, arg: number) => v / arg,\n 'floor': (v: number) => Math.floor(v),\n 'minus': bindFixed((v: number, arg: number) => v - arg),\n 'modulo': bindFixed((v: number, arg: number) => v % arg),\n 'round': (v: number, arg: number = 0) => {\n const amp = Math.pow(10, arg)\n return Math.round(v * amp) / amp\n },\n 'plus': bindFixed((v: number, arg: number) => Number(v) + Number(arg)),\n 'times': (v: number, arg: number) => v * arg\n}\n\nfunction getFixed (v: number) {\n const p = String(v).split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction bindFixed (cb: (v: number, arg: number) => number) {\n return (l: number, r: number) => {\n const f = Math.max(getFixed(l), getFixed(r))\n return cb(l, r).toFixed(f)\n }\n}\n","export default {\n 'url_decode': (x: string) => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': (x: string) => x.split(' ').map(encodeURIComponent).join('+')\n}\n","import { last } from 'src/util/underscore'\n\nexport default {\n 'join': (v: any[], arg: string) => v.join(arg === undefined ? ' ' : arg),\n 'last': (v: T[]): T => last(v),\n 'first': (v: T[]): T => v[0],\n 'map': (arr: {[key: string]: T1}[], arg: string): T1[] => arr.map(v => v[arg]),\n 'reverse': (v: any[]) => v.reverse(),\n 'sort': (v: T[], arg: (lhs: T, rhs: T) => number) => v.sort(arg),\n 'size': (v: string | any[]) => v.length,\n 'concat': (v: T1[], arg: T2[] | T2): Array => Array.prototype.concat.call(v, arg),\n 'slice': (v: T[], begin: number, length: number): T[] => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'uniq': function (arr: T[]): T[] {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(String(val))) return false\n u[String(val)] = true\n return true\n })\n }\n}\n","import { padStart } from './underscore'\n\nconst monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst monthNamesShort = monthNames.map(abbr)\nconst dayNamesShort = dayNames.map(abbr)\nconst suffixes = {\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n 'default': 'th'\n}\n\nfunction abbr (str: string) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d: Date) {\n const feb = _date.isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n },\n\n getDayOfYear: function (d: Date) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += _date.daysInMonth(d)[i]\n }\n return num + d.getDate()\n },\n\n getWeekOfYear: function (d: Date, startDay: number) {\n // Skip to startDay of this week\n const now = this.getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return padStart(String(Math.floor((now - then) / 7) + 1), 2, '0')\n },\n\n isLeapYear: function (d: Date) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d: Date) {\n const str = d.getDate().toString()\n const index = parseInt(str.slice(-1))\n return suffixes[index] || suffixes['default']\n },\n\n century: function (d: Date) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst formatCodes = {\n a: function (d: Date) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d: Date) {\n return dayNames[d.getDay()]\n },\n b: function (d: Date) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d: Date) {\n return monthNames[d.getMonth()]\n },\n c: function (d: Date) {\n return d.toLocaleString()\n },\n C: function (d: Date) {\n return _date.century(d)\n },\n d: function (d: Date) {\n return padStart(d.getDate(), 2, '0')\n },\n e: function (d: Date) {\n return padStart(d.getDate(), 2)\n },\n H: function (d: Date) {\n return padStart(d.getHours(), 2, '0')\n },\n I: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2, '0')\n },\n j: function (d: Date) {\n return padStart(_date.getDayOfYear(d), 3, '0')\n },\n k: function (d: Date) {\n return padStart(d.getHours(), 2)\n },\n l: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2)\n },\n L: function (d: Date) {\n return padStart(d.getMilliseconds(), 3, '0')\n },\n m: function (d: Date) {\n return padStart(d.getMonth() + 1, 2, '0')\n },\n M: function (d: Date) {\n return padStart(d.getMinutes(), 2, '0')\n },\n p: function (d: Date) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d: Date) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d: Date) {\n return _date.getSuffix(d)\n },\n s: function (d: Date) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d: Date) {\n return padStart(d.getSeconds(), 2, '0')\n },\n u: function (d: Date) {\n return d.getDay() || 7\n },\n U: function (d: Date) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d: Date) {\n return d.getDay()\n },\n W: function (d: Date) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d: Date) {\n return d.toLocaleDateString()\n },\n X: function (d: Date) {\n return d.toLocaleTimeString()\n },\n y: function (d: Date) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d: Date) {\n return d.getFullYear()\n },\n z: function (d: Date) {\n const tz = d.getTimezoneOffset() / 60 * 100\n return (tz > 0 ? '-' : '+') + padStart(String(Math.abs(tz)), 4, '0')\n },\n '%': function () {\n return '%'\n }\n};\n(formatCodes as any).h = formatCodes.b;\n(formatCodes as any).N = formatCodes.L\n\nexport default function (d: Date, format: string) {\n let output = ''\n let remaining = format\n\n while (true) {\n const r = /%./g\n const results = r.exec(remaining)\n\n // No more format codes. Add the remaining text and return\n if (!results) {\n return output + remaining\n }\n\n // Add the preceding text\n output += remaining.slice(0, r.lastIndex - 2)\n remaining = remaining.slice(r.lastIndex)\n\n // Add the format code\n const ch = results[0].charAt(1)\n const func = formatCodes[ch]\n output += func ? func(d) : '%' + ch\n }\n}\n","import strftime from 'src/util/strftime'\nimport { isString } from 'src/util/underscore'\n\nexport default {\n 'date': (v: string | Date, arg: string) => {\n let date = v\n if (v === 'now') {\n date = new Date()\n } else if (isString(v)) {\n date = new Date(v)\n }\n return isValidDate(date) ? strftime(date, arg) : v\n }\n}\n\nfunction isValidDate (date: any): date is Date {\n return date instanceof Date && !isNaN(date.getTime())\n}\n","import { isTruthy } from 'src/render/syntax'\n\nexport default {\n 'default': (v: T1, arg: T2): T1 | T2 => isTruthy(v) ? v : arg\n}\n","import html from './html'\nimport str from './string'\nimport math from './math'\nimport url from './url'\nimport array from './array'\nimport date from './date'\nimport obj from './object'\n\nexport default { ...html, ...str, ...math, ...url, ...date, ...obj, ...array }\n","import Scope from './scope/scope'\nimport * as Types from './types'\nimport fs from 'src/fs'\nimport * as _ from './util/underscore'\nimport ITemplate from './template/itemplate'\nimport Tokenizer from './parser/tokenizer'\nimport Render from './render/render'\nimport Tag from './template/tag/tag'\nimport Filter from './template/filter/filter'\nimport Parser from './parser/parser'\nimport ITagImplOptions from './template/tag/itag-impl-options'\nimport Value from './template/value'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './render/syntax'\nimport builtinTags from './builtin/tags'\nimport builtinFilters from './builtin/filters'\nimport { LiquidOptions, NormalizedFullOptions, applyDefault, normalize } from './liquid-options'\nimport { FilterImpl } from './template/filter/filter-impl'\n\nexport default class Liquid {\n public options: NormalizedFullOptions\n public renderer: Render\n public parser: Parser\n private cache: object = {}\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n this.options = applyDefault(normalize(opts))\n this.parser = new Parser(this)\n this.renderer = new Render()\n this.tokenizer = new Tokenizer(this.options)\n\n _.forOwn(builtinTags, (conf, name) => this.registerTag(name, conf))\n _.forOwn(builtinFilters, (handler, name) => this.registerFilter(name, handler))\n }\n parse (html: string, filepath?: string) {\n const tokens = this.tokenizer.tokenize(html, filepath)\n return this.parser.parse(tokens)\n }\n render (tpl: Array, ctx?: object, opts?: LiquidOptions) {\n const options = { ...this.options, ...normalize(opts) }\n const scope = new Scope(ctx, options)\n return this.renderer.renderTemplates(tpl, scope)\n }\n async parseAndRender (html: string, ctx?: object, opts?: LiquidOptions) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n }\n async getTemplate (file: string, opts?: LiquidOptions) {\n const options = normalize(opts)\n const roots = options.root ? [...options.root, ...this.options.root] : this.options.root\n const paths = roots.map(root => fs.resolve(root, file, this.options.extname))\n\n for (const filepath of paths) {\n if (!(await fs.exists(filepath))) continue\n\n if (this.options.cache && this.cache[filepath]) return this.cache[filepath]\n const value = this.parse(await fs.readFile(filepath), filepath)\n if (this.options.cache) this.cache[filepath] = value\n return value\n }\n\n const err = new Error('ENOENT') as any\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`\n err.code = 'ENOENT'\n throw err\n }\n async renderFile (file: string, ctx?: object, opts?: LiquidOptions) {\n const options = normalize(opts)\n const templates = await this.getTemplate(file, options)\n return this.render(templates, ctx, opts)\n }\n evalValue (str: string, scope: Scope) {\n return new Value(str, this.options.strict_filters).value(scope)\n }\n registerFilter (name: string, filter: FilterImpl) {\n return Filter.register(name, filter)\n }\n registerTag (name: string, tag: ITagImplOptions) {\n return Tag.register(name, tag)\n }\n plugin (plugin: (this: Liquid, L: typeof Liquid) => void) {\n return plugin.call(this, Liquid)\n }\n express () {\n const self = this\n return function (this: any, filePath: string, ctx: object, cb: (err: Error | null, html?: string) => void) {\n const opts = { root: this.root }\n self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb)\n }\n }\n static default = Liquid\n static isTruthy = isTruthy\n static isFalsy = isFalsy\n static evalExp = evalExp\n static evalValue = evalValue\n static Types = Types\n}\n"],"names":["tslib_1.__extends","_\r\n .range","_.padStart","_.isArray","_.isString","BlockMode","path","_.last","_.isObject","_.isNil","_.isFunction","_.promisify","stat","readFile","fs","extname","resolve","range","value","lexical.tagLine","operators","lexical.operators","lexical.quoteBalanced","lexical.rangeLine","ParseState","Value","HTML","re","hash","rValue","staticFileRE","_.forOwn","builtinTags"],"mappings":"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"} \ No newline at end of file diff --git a/dist/liquid.js b/dist/liquid.js index b6601b272..7e56977d4 100644 --- a/dist/liquid.js +++ b/dist/liquid.js @@ -1,5 +1,5 @@ /* - * liquidjs@7.2.1, https://github.com/harttle/liquidjs + * liquidjs@7.2.2, https://github.com/harttle/liquidjs * (c) 2016-2019 harttle * Released under the MIT License. */ @@ -196,76 +196,6 @@ return str; } - // quote related - var singleQuoted = /'[^']*'/; - var doubleQuoted = /"[^"]*"/; - var quoted = new RegExp(singleQuoted.source + "|" + doubleQuoted.source); - var quoteBalanced = new RegExp("(?:" + quoted.source + "|[^'\"])*"); - // basic types - var integer = /-?\d+/; - var number = /[+-]?(?:\d+\.?\d*|\.?\d+)/; - var bool = /true|false/; - // property access - var identifier = /[\w-]+[?]?/; - var subscript = new RegExp("\\[(?:" + quoted.source + "|[\\w-\\.]+)\\]"); - var literal = new RegExp("(?:" + quoted.source + "|" + bool.source + "|" + number.source + ")"); - var variable = new RegExp(identifier.source + "(?:\\." + identifier.source + "|" + subscript.source + ")*"); - // range related - var rangeLimit = new RegExp("(?:" + variable.source + "|" + number.source + ")"); - var range$1 = new RegExp("\\(" + rangeLimit.source + "\\.\\." + rangeLimit.source + "\\)"); - var rangeCapture = new RegExp("\\((" + rangeLimit.source + ")\\.\\.(" + rangeLimit.source + ")\\)"); - var value = new RegExp("(?:" + variable.source + "|" + literal.source + "|" + range$1.source + ")"); - // hash related - var hash = new RegExp("(?:" + identifier.source + ")\\s*:\\s*(?:" + value.source + ")"); - var hashCapture = new RegExp("(" + identifier.source + ")\\s*:\\s*(" + value.source + ")", 'g'); - // full match - var tagLine = new RegExp("^\\s*(" + identifier.source + ")\\s*([\\s\\S]*?)\\s*$"); - var literalLine = new RegExp("^" + literal.source + "$", 'i'); - var variableLine = new RegExp("^" + variable.source + "$"); - var numberLine = new RegExp("^" + number.source + "$"); - var boolLine = new RegExp("^" + bool.source + "$", 'i'); - var quotedLine = new RegExp("^" + quoted.source + "$"); - var rangeLine = new RegExp("^" + rangeCapture.source + "$"); - var integerLine = new RegExp("^" + integer.source + "$"); - // filter related - var valueDeclaration = new RegExp("(?:" + identifier.source + "\\s*:\\s*)?" + value.source); - var valueList = new RegExp(valueDeclaration.source + "(\\s*,\\s*" + valueDeclaration.source + ")*"); - var filter = new RegExp(identifier.source + "(?:\\s*:\\s*" + valueList.source + ")?", 'g'); - var filterCapture = new RegExp("(" + identifier.source + ")(?:\\s*:\\s*(" + valueList.source + "))?"); - var filterLine = new RegExp("^" + filterCapture.source + "$"); - var operators = [ - /\s+or\s+/, - /\s+and\s+/, - /==|!=|<=|>=|<|>|\s+contains\s+/ - ]; - function isInteger(str) { - return integerLine.test(str); - } - function isLiteral(str) { - return literalLine.test(str); - } - function isVariable(str) { - return variableLine.test(str); - } - function matchValue(str) { - return value.exec(str); - } - function parseLiteral(str) { - var res = str.match(numberLine); - if (res) { - return Number(str); - } - res = str.match(boolLine); - if (res) { - return str.toLowerCase() === 'true'; - } - res = str.match(quotedLine); - if (res) { - return str.slice(1, -1); - } - throw new TypeError("cannot parse '" + str + "' as literal"); - } - var LiquidError = /** @class */ (function (_super) { __extends(LiquidError, _super); function LiquidError(err, token) { @@ -425,7 +355,7 @@ var _this = this; var paths = this.propertyAccessSeq(path); var scope = this.findContextFor(paths[0]) || last(this.contexts); - return paths.reduce(function (value$$1, key) { return _this.readProperty(value$$1, key); }, scope); + return paths.reduce(function (value, key) { return _this.readProperty(value, key); }, scope); }; Scope.prototype.set = function (path, v) { var paths = this.propertyAccessSeq(path); @@ -461,11 +391,11 @@ } return this.contexts.splice(i, 1)[0]; }; - Scope.prototype.findContextFor = function (key, filter$$1) { - if (filter$$1 === void 0) { filter$$1 = function () { return true; }; } + Scope.prototype.findContextFor = function (key, filter) { + if (filter === void 0) { filter = function () { return true; }; } for (var i = this.contexts.length - 1; i >= 0; i--) { var candidate = this.contexts[i]; - if (!filter$$1(candidate)) + if (!filter(candidate)) continue; if (key in candidate) { return candidate; @@ -520,7 +450,7 @@ j = matchRightBracket(str, i + 1); assert(j !== -1, "unbalanced []: " + str); name = str.slice(i + 1, j); - if (!isInteger(name)) { // foo[bar] vs. foo[1] + if (!/^[+-]?\d+$/.test(name)) { // foo[bar] vs. foo[1] name = String(this.get(name)); } push(); @@ -751,6 +681,37 @@ return DelimitedToken; }(Token)); + // quote related + var singleQuoted = /'[^']*'/; + var doubleQuoted = /"[^"]*"/; + var quoted = new RegExp(singleQuoted.source + "|" + doubleQuoted.source); + var quoteBalanced = new RegExp("(?:" + quoted.source + "|[^'\"])*"); + // basic types + var number = /[+-]?(?:\d+\.?\d*|\.?\d+)/; + var bool = /true|false/; + // property access + var identifier = /[\w-]+[?]?/; + var subscript = new RegExp("\\[(?:" + quoted.source + "|[\\w-\\.]+)\\]"); + var literal = new RegExp("(?:" + quoted.source + "|" + bool.source + "|" + number.source + ")"); + var variable = new RegExp(identifier.source + "(?:\\." + identifier.source + "|" + subscript.source + ")*"); + // range related + var rangeLimit = new RegExp("(?:" + variable.source + "|" + number.source + ")"); + var range$1 = new RegExp("\\(" + rangeLimit.source + "\\.\\." + rangeLimit.source + "\\)"); + var rangeCapture = new RegExp("\\((" + rangeLimit.source + ")\\.\\.(" + rangeLimit.source + ")\\)"); + var value = new RegExp("(?:" + variable.source + "|" + literal.source + "|" + range$1.source + ")"); + // hash related + var hash = new RegExp("(?:" + identifier.source + ")\\s*:\\s*(?:" + value.source + ")"); + var hashCapture = new RegExp("(" + identifier.source + ")\\s*:\\s*(" + value.source + ")", 'g'); + // full match + var tagLine = new RegExp("^\\s*(" + identifier.source + ")\\s*([\\s\\S]*?)\\s*$"); + var quotedLine = new RegExp("^" + quoted.source + "$"); + var rangeLine = new RegExp("^" + rangeCapture.source + "$"); + var operators = [ + /\s+or\s+/, + /\s+and\s+/, + /==|!=|<=|>=|<|>|\s+contains\s+/ + ]; + var TagToken = /** @class */ (function (_super) { __extends(TagToken, _super); function TagToken(raw, value$$1, input, line, pos, file) { @@ -943,16 +904,18 @@ return evalValue(exp, scope); } function evalValue(str, scope) { - str = str && str.trim(); if (!str) - return undefined; - if (isLiteral(str)) { - return parseLiteral(str); - } - if (isVariable(str)) { - return scope.get(str); - } - throw new TypeError("cannot eval '" + str + "' as value"); + return null; + str = str.trim(); + if (str === 'true') + return true; + if (str === 'false') + return false; + if (!isNaN(Number(str))) + return Number(str); + if ((str[0] === '"' || str[0] === "'") && str[0] === last(str)) + return str.slice(1, -1); + return scope.get(str); } function isTruthy(val) { return !isFalsy(val); @@ -1030,39 +993,21 @@ return Tag; }(Template)); - var valueRE = new RegExp("" + value.source, 'g'); var Filter = /** @class */ (function () { - function Filter(str, strictFilters) { - if (strictFilters === void 0) { strictFilters = false; } - var match = filterLine.exec(str); - assert(match, 'illegal filter: ' + str); - var name = match[1]; - var argList = match[2] || ''; + function Filter(name, args, strictFilters) { var impl = Filter.impls[name]; if (!impl && strictFilters) throw new TypeError("undefined filter: " + name); this.name = name; this.impl = impl || (function (x) { return x; }); - this.args = this.parseArgs(argList); + this.args = args; } - Filter.prototype.parseArgs = function (argList) { - var match; - var args = []; - while ((match = valueRE.exec(argList.trim()))) { - var v = match[0]; - var re = new RegExp(v + "\\s*:", 'g'); - var keyMatch = re.exec(match.input); - var currentMatchIsKey = keyMatch && keyMatch.index === match.index; - currentMatchIsKey ? args.push("'" + v + "'") : args.push(v); - } - return args; - }; - Filter.prototype.render = function (value$$1, scope) { + Filter.prototype.render = function (value, scope) { var args = this.args.map(function (arg) { return evalValue(arg, scope); }); - return this.impl.apply(null, [value$$1].concat(args)); + return this.impl.apply(null, [value].concat(args)); }; - Filter.register = function (name, filter$$1) { - Filter.impls[name] = filter$$1; + Filter.register = function (name, filter) { + Filter.impls[name] = filter; }; Filter.clear = function () { Filter.impls = {}; @@ -1113,19 +1058,87 @@ return ParseStream; }()); + var ParseState$1; + (function (ParseState) { + ParseState[ParseState["INIT"] = 0] = "INIT"; + ParseState[ParseState["FILTER_NAME"] = 1] = "FILTER_NAME"; + ParseState[ParseState["FILTER_ARG"] = 2] = "FILTER_ARG"; + })(ParseState$1 || (ParseState$1 = {})); var default_1 = /** @class */ (function () { + /** + * @param str value string, like: "i have a dream | truncate: 3 + */ function default_1(str, strictFilters) { this.filters = []; - var match = matchValue(str); - assert(match, "illegal value string: " + str); - this.initial = match[0]; - str = str.substr(match.index + match[0].length); - while ((match = filter.exec(str))) { - this.filters.push(new Filter(match[0].trim(), strictFilters)); + var buffer = ''; + var quoted = ''; + var state = ParseState$1.INIT; + var sealed = false; + var filterName = ''; + var filterArgs = []; + for (var i = 0; i < str.length; i++) { + if (quoted) { + if (str[i] === quoted) { + quoted = ''; + sealed = true; + } + buffer += str[i]; + } + else if (/\s/.test(str[i])) { + if (!buffer) + continue; + else + sealed = true; + } + else if (str[i] === '|') { + if (state === ParseState$1.INIT) { + this.initial = buffer; + } + else { + if (state === ParseState$1.FILTER_NAME) + filterName = buffer; + else + filterArgs.push(buffer); + this.filters.push(new Filter(filterName, filterArgs, strictFilters)); + filterName = ''; + filterArgs = []; + } + state = ParseState$1.FILTER_NAME; + buffer = ''; + sealed = false; + } + else if (state === ParseState$1.FILTER_NAME && str[i] === ':') { + filterName = buffer; + state = ParseState$1.FILTER_ARG; + buffer = ''; + sealed = false; + } + else if (state === ParseState$1.FILTER_ARG && str[i] === ',') { + filterArgs.push(buffer); + buffer = ''; + sealed = false; + } + else if (sealed) + continue; + else { + if ((str[i] === '"' || str[i] === "'") && !quoted) + quoted = str[i]; + buffer += str[i]; + } + } + if (buffer) { + if (state === ParseState$1.INIT) + this.initial = buffer; + else if (state === ParseState$1.FILTER_NAME) + this.filters.push(new Filter(buffer, [], strictFilters)); + else { + filterArgs.push(buffer); + this.filters.push(new Filter(filterName, filterArgs, strictFilters)); + } } } default_1.prototype.value = function (scope) { - return this.filters.reduce(function (prev, filter$$1) { return filter$$1.render(prev, scope); }, evalExp(this.initial, scope)); + return this.filters.reduce(function (prev, filter) { return filter.render(prev, scope); }, evalExp(this.initial, scope)); }; return default_1; }()); diff --git a/dist/liquid.js.map b/dist/liquid.js.map index 54ef29443..d5490e695 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/filter.ts","../src/parser/parse-stream.ts","../src/template/value.ts","../src/template/output.ts","../src/template/html.ts","../src/parser/parser.ts","../src/builtin/tags/assign.ts","../src/util/promise.ts","../src/builtin/tags/for.ts","../src/builtin/tags/capture.ts","../src/builtin/tags/case.ts","../src/builtin/tags/comment.ts","../src/builtin/tags/include.ts","../src/builtin/tags/decrement.ts","../src/builtin/tags/cycle.ts","../src/builtin/tags/if.ts","../src/builtin/tags/increment.ts","../src/builtin/tags/layout.ts","../src/builtin/tags/block.ts","../src/builtin/tags/raw.ts","../src/builtin/tags/tablerow.ts","../src/builtin/tags/unless.ts","../src/builtin/tags/break.ts","../src/builtin/tags/continue.ts","../src/builtin/tags/index.ts","../src/builtin/filters/html.ts","../src/builtin/filters/string.ts","../src/builtin/filters/math.ts","../src/builtin/filters/url.ts","../src/builtin/filters/array.ts","../src/util/strftime.ts","../src/builtin/filters/date.ts","../src/builtin/filters/object.ts","../src/builtin/filters/index.ts","../src/liquid.ts"],"sourcesContent":["const toStr = Object.prototype.toString\nconst arrToStr = Array.prototype.toString\n\n/*\n * Checks if value is classified as a String primitive or object.\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is a string, else false.\n */\nexport function isString (value: any) {\n return toStr.call(value) === '[object String]'\n}\n\nexport function isFunction (value: any) {\n return typeof value === 'function'\n}\n\nexport function promisify (fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise;\nexport function promisify (fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void):(arg1: T1, arg2: T2) => Promise;\nexport function promisify (fn: any) {\n return function (...args: any[]) {\n return new Promise((resolve, reject) => {\n fn(...args, (err: Error, result: any) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value: any): string {\n if (isNil(value)) return ''\n if (isFunction(value.to_liquid)) return stringify(value.to_liquid())\n if (isFunction(value.toLiquid)) return stringify(value.toLiquid())\n if (isFunction(value.to_s)) return value.to_s()\n if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value)\n if (isFunction(value.toString)) return value.toString()\n return toStr.call(value)\n}\n\nfunction defaultToString (value: any): string {\n const cache: string[] = []\n return JSON.stringify(value, (key, value) => {\n if (isObject(value)) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n}\n\nexport function create (proto: T1): T2 {\n return Object.create(proto)\n}\n\nexport function isNil (value: any): boolean {\n return value === null || value === undefined\n}\n\nexport function isArray (value: any): boolean {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value: any): boolean {\n const signature = toStr.call(value)\n // [object XXXError]\n return signature.substr(-6, 5) === 'Error' ||\n (typeof value.message === 'string' && typeof value.name === 'string')\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (\n object: {[key: string]: T} | undefined,\n iteratee: ((val: T, key: string, obj: {[key: string]: T}) => boolean | void)\n) {\n object = object || {}\n for (const k in object) {\n if (object.hasOwnProperty(k)) {\n if (iteratee(object[k], k, object) === false) break\n }\n }\n return object\n}\n\nexport function last (arr: T[]): T;\nexport function last (arr: string): string;\nexport function last (arr: any[] | string): any | string {\n return arr[arr.length - 1]\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value: any): boolean {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\n/*\n * A function to create flexibly-numbered lists of integers,\n * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.\n * Returns a list of integers from start (inclusive) to stop (exclusive),\n * incremented (or decremented) by step, exclusive.\n * Note that ranges that stop before they start are considered to be zero-length instead of\n * negative — if you'd like a negative range, use a negative step.\n */\nexport function range (start: number, stop?: number, step?: number) {\n if (stop === undefined) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr: number[] = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n\nexport function padStart (str: any, length: number, ch: string = ' ') {\n str = String(str)\n let n = length - str.length\n while (n-- > 0) str = ch + str\n return str\n}\n","// 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: string) {\n return integerLine.test(str)\n}\n\nexport function isLiteral (str: string) {\n return literalLine.test(str)\n}\n\nexport function isRange (str: string) {\n return rangeLine.test(str)\n}\n\nexport function isVariable (str: string) {\n return variableLine.test(str)\n}\n\nexport function matchValue (str: string) {\n return value.exec(str)\n}\n\nexport function parseLiteral (str: string) {\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'\nimport ITemplate from 'src/template/itemplate'\n\nabstract class LiquidError extends Error {\n private token: Token\n private originalError: Error\n constructor (err: Error, token: Token) {\n super(err.message)\n this.originalError = err\n this.token = token\n }\n protected update () {\n const err = this.originalError\n const context = mkContext(this.token)\n this.message = mkMessage(err.message, this.token)\n this.stack = this.message + '\\n' + context +\n '\\n' + this.stack + '\\nFrom ' + err.stack\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor (message: string, token: Token) {\n super(new Error(message), token)\n this.name = 'TokenizationError'\n super.update()\n }\n}\n\nexport class ParseError extends LiquidError {\n constructor (err: Error, token: Token) {\n super(err, token)\n this.name = 'ParseError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderError extends LiquidError {\n constructor (err: Error, tpl: ITemplate) {\n super(err, tpl.token)\n this.name = 'RenderError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderBreakError extends Error {\n resolvedHTML: string = ''\n constructor (message: string) {\n super(message)\n this.name = 'RenderBreakError'\n this.message = message + ''\n }\n}\n\nexport class AssertionError extends Error {\n constructor (message: string) {\n super(message)\n this.name = 'AssertionError'\n this.message = message + ''\n }\n}\n\nfunction mkContext (token: Token) {\n const lines = token.input.split('\\n')\n const begin = Math.max(token.line - 2, 1)\n const end = Math.min(token.line + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === token.line) ? '>> ' : ' '\n const num = _.padStart(String(lineNumber), String(end).length)\n const text = lines[lineNumber - 1]\n return `${indicator}${num}| ${text}`\n })\n .join('\\n')\n\n return context\n}\n\nfunction mkMessage (msg: string, token: Token) {\n if (token.file) msg += `, file:${token.file}`\n msg += `, line:${token.line}, col:${token.col}`\n return msg\n}\n","import { AssertionError } from './error'\n\nexport default function (predicate: any, message?: string) {\n if (!predicate) {\n message = message || `expect ${predicate} to be true`\n throw new AssertionError(message)\n }\n}\n","/* eslint-disable camelcase */\n\nimport * as _ from './util/underscore'\n\nexport interface LiquidOptions {\n /** `root` is a directory or an array of directories to resolve layouts and includes, as well as the filename passed in when calling `.renderFile()`. If an array, the files are looked up in the order they occur in the array. Defaults to `[\".\"]` */\n root?: string | string[]\n /** `extname` is used to lookup the template file when filepath doesn't include an extension name. Eg: setting to `\".html\"` will allow including file by basename. Defaults to `\"\"`. */\n extname?: string\n /** `cache` indicates whether or not to cache resolved templates. Defaults to `false`. */\n cache?: boolean\n /** `dynamicPartials`: if set, treat `` parameter in `{%include filepath %}`, `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */\n dynamicPartials?: boolean\n /** `strict_filters` is used to enable strict filter existence. If set to `false`, undefined filters will be rendered as empty string. Otherwise, undefined filters will cause an exception. Defaults to `false`. */\n strict_filters?: boolean\n /** `strict_variables` is used to enable strict variable derivation. If set to `false`, undefined variables will be rendered as empty string. Otherwise, undefined variables will cause an exception. Defaults to `false`. */\n strict_variables?: boolean\n /** `trim_tag_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of tags (`{% %}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_tag_right?: boolean\n /** `trim_tag_left` is similar to `trim_tag_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_tag_left?: boolean\n /** ``trim_output_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_output_right?: boolean\n /** `trim_output_left` is similar to `trim_output_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_output_left?: boolean\n /** `tag_delimiter_left` and `tag_delimiter_right` are used to override the delimiter for liquid tags **/\n tag_delimiter_left?: string,\n tag_delimiter_right?: string,\n /** `output_delimiter_left` and `output_delimiter_right` are used to override the delimiter for liquid outputs **/\n output_delimiter_left?: string,\n output_delimiter_right?: string,\n /** `greedy` is used to specify whether `trim_left`/`trim_right` is greedy. When set to `true`, all consecutive blank characters including `\\n` will be trimed regardless of line breaks. Defaults to `true`. */\n greedy?: boolean\n}\n\nexport interface NormalizedOptions extends LiquidOptions {\n root?: string[]\n}\n\nexport interface NormalizedFullOptions extends NormalizedOptions {\n root: string[]\n extname: string\n cache: boolean\n dynamicPartials: boolean\n strict_filters: boolean\n strict_variables: boolean\n trim_tag_right: boolean\n trim_tag_left: boolean\n trim_output_right: boolean\n trim_output_left: boolean\n tag_delimiter_left: string,\n tag_delimiter_right: string,\n output_delimiter_left: string,\n output_delimiter_right: string,\n greedy: boolean\n}\n\nconst defaultOptions: NormalizedFullOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_output_right: false,\n trim_output_left: false,\n greedy: true,\n tag_delimiter_left: '{%',\n tag_delimiter_right: '%}',\n output_delimiter_left: '{{',\n output_delimiter_right: '}}',\n strict_filters: false,\n strict_variables: false\n}\n\nexport function normalize (options?: LiquidOptions): NormalizedOptions {\n options = options || {}\n if (options.hasOwnProperty('root')) {\n options.root = normalizeStringArray(options.root)\n }\n return options as NormalizedOptions\n}\n\nexport function applyDefault (options?: NormalizedOptions): NormalizedFullOptions {\n return { ...defaultOptions, ...options }\n}\n\nfunction normalizeStringArray (value: any): string[] {\n if (_.isArray(value)) return value as string[]\n if (_.isString(value)) return [value as string]\n return []\n}\n","enum BlockMode {\n /* store rendered html into blocks */\n OUTPUT,\n /* output rendered html directly */\n STORE\n}\n\nexport default BlockMode\n","import * as _ from '../util/underscore'\nimport { __assign } from 'tslib'\nimport * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\nimport BlockMode from './block-mode'\nimport IContext from './icontext'\n\nexport default class Scope {\n opts: NormalizedFullOptions\n contexts: Array\n blocks: object = {}\n groups: {[key: string]: number} = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts?: NormalizedFullOptions) {\n this.opts = applyDefault(opts)\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => __assign(ctx, val), {})\n }\n get (path: string): any {\n const paths = this.propertyAccessSeq(path)\n const scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n return paths.reduce((value, key) => this.readProperty(value, key), scope)\n }\n set (path: string, v: any): void {\n const paths = this.propertyAccessSeq(path)\n let scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n paths.some((key, i) => {\n if (!_.isObject(scope)) {\n return true\n }\n if (i === paths.length - 1) {\n scope[key] = v\n return true\n }\n if (undefined === scope[key]) {\n scope[key] = {}\n }\n scope = scope[key]\n return false\n })\n }\n unshift (ctx: object) {\n return this.contexts.unshift(ctx)\n }\n push (ctx: object) {\n return this.contexts.push(ctx)\n }\n pop (ctx?: object): object | undefined {\n if (!arguments.length) {\n return this.contexts.pop()\n }\n const i = this.contexts.findIndex(scope => scope === ctx)\n if (i === -1) {\n throw new TypeError('scope not found, cannot pop')\n }\n return this.contexts.splice(i, 1)[0]\n }\n findContextFor (key: string, filter: ((conttext: object) => boolean) = () => true) {\n for (let i = this.contexts.length - 1; i >= 0; i--) {\n const candidate = this.contexts[i]\n if (!filter(candidate)) continue\n if (key in candidate) {\n return candidate\n }\n }\n return null\n }\n private readProperty (obj: IContext, key: string) {\n let val\n if (_.isNil(obj)) {\n val = undefined\n } else {\n obj = toLiquid(obj)\n val = key === 'size' ? readSize(obj) : obj[key]\n if (_.isFunction(obj.liquid_method_missing)) {\n val = obj.liquid_method_missing!(key)\n }\n }\n if (_.isNil(val) && this.opts.strict_variables) {\n throw new TypeError(`undefined variable: ${key}`)\n }\n return val\n }\n\n /*\n * Parse property access sequence from access string\n * @example\n * accessSeq(\"foo.bar\") // ['foo', 'bar']\n * accessSeq(\"foo['bar']\") // ['foo', 'bar']\n * accessSeq(\"foo['b]r']\") // ['foo', 'b]r']\n * accessSeq(\"foo[bar.coo]\") // ['foo', 'bar'], for bar.coo == 'bar'\n */\n propertyAccessSeq (str: string) {\n str = String(str)\n const seq: string[] = []\n let name = ''\n let j\n let i = 0\n while (i < str.length) {\n switch (str[i]) {\n case '[':\n push()\n\n const delemiter = str[i + 1]\n if (/['\"]/.test(delemiter)) { // foo[\"bar\"]\n j = str.indexOf(delemiter, i + 2)\n assert(j !== -1, `unbalanced ${delemiter}: ${str}`)\n name = str.slice(i + 2, j)\n push()\n i = j + 2\n } else { // foo[bar.coo]\n j = matchRightBracket(str, i + 1)\n assert(j !== -1, `unbalanced []: ${str}`)\n name = str.slice(i + 1, j)\n if (!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: IContext) {\n if (_.isFunction(obj.to_liquid)) {\n return obj.to_liquid()\n }\n if (_.isFunction(obj.toLiquid)) {\n return obj.toLiquid()\n }\n return obj\n}\n\nfunction readSize (obj: IContext) {\n if (!_.isNil(obj.size)) return obj.size\n if (_.isArray(obj) || _.isString(obj)) return obj.length\n return obj.size\n}\n\nfunction matchRightBracket (str: string, begin: number) {\n let stack = 1 // count of '[' - count of ']'\n for (let i = begin; i < str.length; i++) {\n if (str[i] === '[') {\n stack++\n }\n if (str[i] === ']') {\n stack--\n if (stack === 0) {\n return i\n }\n }\n }\n return -1\n}\n","export class CaptureScope {}\nexport class AssignScope {}\nexport class IncrementScope {}\nexport class DecrementScope {}\n","import { last } from '../util/underscore'\nimport IFS from './ifs'\n\nfunction domResolve (root: string, path: string) {\n const base = document.createElement('base')\n base.href = root\n\n const head = document.getElementsByTagName('head')[0]\n head.insertBefore(base, head.firstChild)\n\n const a = document.createElement('a')\n a.href = path\n const resolved = a.href\n head.removeChild(base)\n\n return resolved\n}\n\nfunction resolve (root: string, filepath: string, ext: string) {\n if (root.length && last(root) !== '/') root += '/'\n const url = domResolve(root, filepath)\n return url.replace(/^(\\w+:\\/\\/[^/]+)(\\/[^?]+)/, (str, origin, path) => {\n const last = path.split('/').pop()\n if (/\\.\\w+$/.test(last)) return str\n return origin + path + ext\n })\n}\n\nasync function readFile (url: string): Promise {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.responseText as string)\n } else {\n reject(new Error(xhr.statusText))\n }\n }\n xhr.onerror = () => {\n reject(new Error('An error occurred whilst receiving the response.'))\n }\n xhr.open('GET', url)\n xhr.send()\n })\n}\n\nasync function exists () {\n return true\n}\n\nexport default { readFile, resolve, exists } as IFS\n","import DelimitedToken from 'src/parser/delimited-token'\nimport Token from 'src/parser/token'\nimport TagToken from 'src/parser/tag-token'\nimport { NormalizedFullOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: NormalizedFullOptions) {\n options = { greedy: true, ...options }\n let inRaw = false\n\n tokens.forEach((token: Token, i: number) => {\n if (shouldTrimLeft(token as DelimitedToken, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && (token as TagToken).name === 'raw') inRaw = true\n if (token.type === 'tag' && (token as TagToken).name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token as DelimitedToken, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimLeft || options.trim_tag_left\n if (token.type === 'output') return token.trimLeft || options.trim_output_left\n}\n\nfunction shouldTrimRight (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimRight || options.trim_tag_right\n if (token.type === 'output') return token.trimRight || options.trim_output_right\n}\n\nfunction trimLeft (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rLeft = greedy ? /\\s+$/g : /[\\t\\r ]*$/g\n token.value = token.value.replace(rLeft, '')\n}\n\nfunction trimRight (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rRight = greedy ? /^\\s+/g : /^[\\t\\r ]*\\n?/g\n token.value = token.value.replace(rRight, '')\n}\n","export default class Token {\n type: string = 'notset'\n line: number\n col: number\n raw: string\n input: string\n file?: string\n value: string\n constructor (raw: string, input: string, line: number, col: number, file?: string) {\n this.col = col\n this.line = line\n this.raw = raw\n this.value = raw\n this.input = input\n this.file = file\n }\n}\n","import Token from './token'\n\nexport default class HTMLToken extends Token {\n constructor (str: string, input: string, line: number, col: number, file?: string) {\n super(str, input, line, col, file)\n this.type = 'html'\n this.value = str\n }\n}\n","import Token from './token'\nimport { last } from 'src/util/underscore'\n\nexport default class DelimitedToken extends Token {\n trimLeft: boolean\n trimRight: boolean\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, input, line, pos, file)\n this.trimLeft = value[0] === '-'\n this.trimRight = last(value) === '-'\n this.value = value\n .slice(\n this.trimLeft ? 1 : 0,\n this.trimRight ? -1 : value.length\n )\n .trim()\n }\n}\n","import DelimitedToken from './delimited-token'\nimport { TokenizationError } from 'src/util/error'\nimport * as lexical from './lexical'\n\nexport default class TagToken extends DelimitedToken {\n name: string\n args: string\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'tag'\n const match = this.value.match(lexical.tagLine)\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, this)\n }\n this.name = match[1]\n this.args = match[2]\n }\n}\n","import DelimitedToken from './delimited-token'\n\nexport default class OutputToken extends DelimitedToken {\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'output'\n }\n}\n","import whiteSpaceCtrl from './whitespace-ctrl'\nimport HTMLToken from './html-token'\nimport TagToken from './tag-token'\nimport Token from './token'\nimport OutputToken from './output-token'\nimport { TokenizationError } from 'src/util/error'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: NormalizedFullOptions\n constructor (options?: NormalizedFullOptions) {\n this.options = applyDefault(options)\n }\n tokenize (input: string, file?: string) {\n const tokens: Token[] = []\n const tagL = this.options.tag_delimiter_left\n const tagR = this.options.tag_delimiter_right\n const outputL = this.options.output_delimiter_left\n const outputR = this.options.output_delimiter_right\n let p = 0\n let curLine = 1\n let state = ParseState.HTML\n let buffer = ''\n let lineBegin = 0\n let line = 1\n let col = 1\n\n while (p < input.length) {\n if (input[p] === '\\n') {\n curLine++\n lineBegin = p + 1\n }\n if (state === ParseState.HTML) {\n if (input.substr(p, outputL.length) === outputL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = outputL\n line = curLine\n col = p - lineBegin + 1\n p += outputL.length\n state = ParseState.OUTPUT\n continue\n } else if (input.substr(p, tagL.length) === tagL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = tagL\n line = curLine\n col = p - lineBegin + 1\n p += tagL.length\n state = ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && input.substr(p, outputR.length) === outputR) {\n buffer += outputR\n tokens.push(new OutputToken(buffer, buffer.slice(outputL.length, -outputR.length), input, line, col, file))\n p += outputR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n } else if (input.substr(p, tagR.length) === tagR) {\n buffer += tagR\n tokens.push(new TagToken(buffer, buffer.slice(tagL.length, -tagR.length), input, line, col, file))\n p += tagR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n }\n buffer += input[p++]\n }\n if (state !== ParseState.HTML) {\n const t = state === ParseState.OUTPUT ? 'output' : 'tag'\n const str = buffer.length > 16 ? buffer.slice(0, 13) + '...' : buffer\n throw new TokenizationError(\n `${t} \"${str}\" not closed`,\n new Token(buffer, input, line, col, file)\n )\n }\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n\n whiteSpaceCtrl(tokens, this.options)\n return tokens\n }\n}\n","import { RenderError } from 'src/util/error'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Render {\n async renderTemplates (templates: ITemplate[], scope: Scope) {\n assert(scope, 'unable to evalTemplates: scope undefined')\n\n let html = ''\n for (const tpl of templates) {\n try {\n html += await tpl.render(scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n e.resolvedHTML = html\n throw e\n }\n throw e.name === 'RenderError' ? e : new RenderError(e, tpl)\n }\n }\n return html\n }\n}\n","import * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport Scope from 'src/scope/scope'\nimport { range } from 'src/util/underscore'\n\nconst operators = {\n '==': (l: any, r: any) => l === r,\n '!=': (l: any, r: any) => l !== r,\n '>': (l: any, r: any) => l !== null && r !== null && l > r,\n '<': (l: any, r: any) => l !== null && r !== null && l < r,\n '>=': (l: any, r: any) => l !== null && r !== null && l >= r,\n '<=': (l: any, r: any) => l !== null && r !== null && l <= r,\n 'contains': (l: any, r: any) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l: any, r: any) => isTruthy(l) && isTruthy(r),\n 'or': (l: any, r: any) => isTruthy(l) || isTruthy(r)\n}\n\nexport function evalExp (exp: string, scope: Scope): any {\n assert(scope, 'unable to evalExp: scope undefined')\n const operatorREs = lexical.operators\n let match\n for (let i = 0; i < operatorREs.length; i++) {\n const operatorRE = operatorREs[i]\n const expRE = new RegExp(`^(${lexical.quoteBalanced.source})(${operatorRE.source})(${lexical.quoteBalanced.source})$`)\n if ((match = exp.match(expRE))) {\n const l = evalExp(match[1], scope)\n const op = operators[match[2].trim()]\n const r = evalExp(match[3], scope)\n return op(l, r)\n }\n }\n\n if ((match = exp.match(lexical.rangeLine))) {\n const low = evalValue(match[1], scope)\n const high = evalValue(match[2], scope)\n return range(low, high + 1)\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str: string, scope: Scope) {\n 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: any): boolean {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val: any): boolean {\n return val === false || undefined === val || val === null\n}\n","import { hashCapture } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\n\n/**\n * Key-Value Pairs Representing Tag Arguments\n * Example:\n * For the markup `{% include 'head.html' foo='bar' %}`,\n * hash['foo'] === 'bar'\n */\nexport default class Hash {\n [key: string]: any\n constructor (markup: string, scope: Scope) {\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n this[k] = evalValue(v, scope)\n }\n }\n}\n","export default abstract class Template {\n token: T;\n constructor (token: T) {\n this.token = token\n }\n}\n","import { create, stringify } from 'src/util/underscore'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITagImpl from './itag-impl'\nimport ITagImplOptions from './itag-impl-options'\nimport Liquid from 'src/liquid'\nimport Hash from './hash'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\n\nexport default class Tag extends Template implements ITemplate {\n name: string\n private impl: ITagImpl\n static impls: { [key: string]: ITagImplOptions } = {}\n\n constructor (token: TagToken, tokens: Token[], liquid: Liquid) {\n super(token)\n this.name = token.name\n\n const impl = Tag.impls[token.name]\n assert(impl, `tag ${token.name} not found`)\n this.impl = create(impl)\n this.impl.liquid = liquid\n if (this.impl.parse) {\n this.impl.parse(token, tokens)\n }\n }\n async render (scope: Scope) {\n const hash = new Hash(this.token.args, scope)\n const impl = this.impl\n if (typeof impl.render !== 'function') {\n return ''\n }\n const html = await impl.render(scope, hash)\n return stringify(html)\n }\n static register (name: string, tag: ITagImplOptions) {\n Tag.impls[name] = tag\n }\n static clear () {\n Tag.impls = {}\n }\n}\n","import assert from 'src/util/assert'\nimport * as lexical from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\nimport { FilterImpl } from './filter-impl'\n\nconst valueRE = new RegExp(`${lexical.value.source}`, 'g')\n\nexport default class Filter {\n name: string\n impl: FilterImpl\n args: string[]\n private static impls: {[key: string]: FilterImpl} = {}\n\n constructor (str: string, strictFilters: boolean = false) {\n const match = lexical.filterLine.exec(str) as string[]\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: string[] = []\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 return this.impl.apply(null, [value, ...args])\n }\n static register (name: string, filter: FilterImpl) {\n Filter.impls[name] = filter\n }\n static clear () {\n Filter.impls = {}\n }\n}\n","import Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from './tag-token'\n\ntype ParseToken = ((token: Token, remainTokens: Array) => ITemplate)\n\nexport default class ParseStream {\n private tokens: Array\n private handlers: {[key: string]: (arg: any) => void} = {}\n private stopRequested: boolean = false\n private parseToken: ParseToken\n\n constructor (tokens: Array, parseToken: ParseToken) {\n this.tokens = tokens\n this.parseToken = parseToken\n }\n on (name: string, cb: (arg: T) => void): ParseStream {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: T) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n return false\n }\n start () {\n this.trigger('start')\n let token: Token | undefined\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' && this.trigger(`tag:${(token).name}`, token)) {\n continue\n }\n const template = this.parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n }\n stop () {\n this.stopRequested = true\n return this\n }\n}\n","import { evalExp } from 'src/render/syntax'\nimport * as lexical from 'src/parser/lexical'\nimport assert from 'src/util/assert'\nimport Filter from './filter/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: RegExpExecArray | null = lexical.matchValue(str) as RegExpExecArray\n assert(match, `illegal value string: ${str}`)\n\n this.initial = match[0]\n str = str.substr(match.index + match[0].length)\n\n while ((match = lexical.filter.exec(str))) {\n this.filters.push(new Filter(match[0].trim(), strictFilters))\n }\n }\n value (scope: Scope) {\n return this.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(this.initial, scope))\n }\n}\n","import Value from './value'\nimport { stringify } from 'src/util/underscore'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport OutputToken from 'src/parser/output-token'\n\nexport default class Output extends Template implements ITemplate {\n value: Value\n constructor (token: OutputToken, strictFilters?: boolean) {\n super(token)\n this.value = new Value(token.value, strictFilters)\n }\n async render (scope: Scope): Promise {\n const html = await this.value.value(scope)\n return stringify(html)\n }\n}\n","import Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport HTMLToken from 'src/parser/html-token'\n\nexport default class extends Template implements ITemplate {\n str: string\n constructor (token: HTMLToken) {\n super(token)\n this.str = token.value\n }\n async render (): Promise {\n return this.str\n }\n}\n","import { ParseError } from '../util/error'\nimport Liquid from 'src/liquid'\nimport ParseStream from './parse-stream'\nimport Token from './token'\nimport TagToken from './tag-token'\nimport OutputToken from './output-token'\nimport Tag from 'src/template/tag/tag'\nimport Output from 'src/template/output'\nimport HTML from 'src/template/html'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Parser {\n liquid: Liquid\n\n constructor (liquid: Liquid) {\n this.liquid = liquid\n }\n parse (tokens: Array) {\n let token\n const templates: ITemplate[] = []\n while ((token = tokens.shift())) {\n templates.push(this.parseToken(token, tokens))\n }\n return templates\n }\n parseToken (token: Token, remainTokens: Array) {\n try {\n if (token.type === 'tag') {\n return new Tag(token as TagToken, remainTokens, this.liquid)\n }\n if (token.type === 'output') {\n return new Output(token as OutputToken, this.liquid.options.strict_filters)\n }\n return new HTML(token)\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n parseStream (tokens: Array) {\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens))\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { AssignScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(re) as RegExpMatchArray\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (scope: Scope) {\n const ctx = new AssignScope()\n ctx[this.key] = this.liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n} as ITagImplOptions\n","/*\n * Call functions in serial until someone rejected.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function mapSeries (\n iterable: T1[],\n iteratee: (item: T1, idx: number, iterable: T1[]) => Promise | T2\n): Promise {\n let ret = Promise.resolve(0)\n const result: T2[] = []\n iterable.forEach(function (item, idx) {\n ret = ret\n .then(() => iteratee(item, idx, iterable))\n .then(x => result.push(x))\n })\n return ret.then(() => result)\n}\n","import { mapSeries } from 'src/util/promise'\nimport { isString, isObject, isArray } from 'src/util/underscore'\nimport { evalExp } from 'src/render/syntax'\nimport assert from 'src/util/assert'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n type: 'block',\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n this.variable = match[1]\n this.collection = match[2]\n this.reversed = !!match[3]\n\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endfor', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection] as string[]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]]) as Array<[string, any]>\n }\n }\n if (!isArray(collection) || !collection.length) {\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n if (this.reversed) collection.reverse()\n\n const contexts = collection.map((item: string, i: number) => {\n const ctx = {}\n ctx[this.variable] = item\n ctx['forloop'] = {\n first: i === 0,\n index: i + 1,\n index0: i,\n last: i === collection.length - 1,\n length: collection.length,\n rindex: collection.length - i,\n rindex0: collection.length - i - 1\n }\n return ctx\n })\n\n let html = ''\n let finished = false\n await mapSeries(contexts, async context => {\n if (finished) return\n\n scope.push(context)\n try {\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n html += e.resolvedHTML\n if (e.message === 'break') {\n finished = true\n }\n } else throw e\n }\n scope.pop(context)\n })\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = tagToken.args.match(re) as RegExpMatchArray\n assert(match, `${tagToken.args} not valid identifier`)\n\n this.variable = match[1]\n this.templates = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', () => stream.stop())\n .on('template', (tpl) => this.templates.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const html = await this.liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = new CaptureScope()\n ctx[this.variable] = html\n scope.push(ctx)\n }\n} as ITagImplOptions\n","import { evalExp } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p: ITemplate[] = []\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:when', (token: TagToken) => {\n this.cases.push({\n val: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endcase', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = evalExp(branch.val, scope)\n const cond = evalExp(this.cond, scope)\n if (val === cond) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value, quotedLine } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /[^\\s,]+/\nconst withRE = new RegExp(`with\\\\s+(${value.source})`)\n\nexport default {\n parse: function (token: TagToken) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticValue = match[0]\n }\n\n match = value.exec(token.args)\n if (match) {\n this.value = match[0]\n }\n\n match = withRE.exec(token.args)\n if (match) {\n this.with = match[1]\n }\n },\n render: async function (scope: Scope, hash: Hash) {\n let filepath\n if (scope.opts.dynamicPartials) {\n if (quotedLine.exec(this.value)) {\n const template = this.value.slice(1, -1)\n filepath = await this.liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = evalValue(this.value, scope)\n }\n } else {\n filepath = this.staticValue\n }\n assert(filepath, `cannot include with empty filename`)\n\n const originBlocks = scope.blocks\n const originBlockMode = scope.blockMode\n\n scope.blocks = {}\n scope.blockMode = BlockMode.OUTPUT\n if (this.with) {\n hash[filepath] = evalValue(this.with, scope)\n }\n const templates = await this.liquid.getTemplate(filepath, scope.opts)\n scope.push(hash)\n const html = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.blocks = originBlocks\n scope.blockMode = originBlockMode\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, DecrementScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(identifier) as RegExpMatchArray\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope: Scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new DecrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n return --context[this.variable]\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\nconst candidatesRE = new RegExp(rValue.source, 'g')\n\nexport default {\n parse: function (tagToken: TagToken) {\n let match: RegExpExecArray | null = groupRE.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.group = match[1] || ''\n const candidates = match[2]\n\n this.candidates = []\n\n while ((match = candidatesRE.exec(candidates))) {\n this.candidates.push(match[0])\n }\n assert(this.candidates.length, `empty candidates: ${tagToken.raw}`)\n },\n\n render: function (scope: Scope) {\n const group = evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n const groups = scope.groups\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n\n return evalValue(candidate, scope)\n }\n}\n","import { evalExp, isTruthy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', (token: TagToken) => {\n this.branches.push({\n cond: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endif', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (const branch of this.branches) {\n const cond = evalExp(branch.cond, scope)\n if (isTruthy(cond)) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match![0]\n },\n render: function (scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new IncrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n const val = context[this.variable]\n context[this.variable]++\n return val\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /\\S+/\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticLayout = match[0]\n }\n\n match = rValue.exec(token.args)\n if (match) {\n this.layout = match[0]\n }\n\n this.tpls = this.liquid.parser.parse(remainTokens)\n },\n render: async function (scope: Scope, hash: Hash) {\n const layout = scope.opts.dynamicPartials\n ? evalValue(this.layout, scope)\n : this.staticLayout\n assert(layout, `cannot apply layout with empty filename`)\n\n // render the remaining tokens immediately\n scope.blockMode = BlockMode.STORE\n const html = await this.liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.blocks[''] === undefined) {\n scope.blocks[''] = html\n }\n const templates = await this.liquid.getTemplate(layout, scope.opts)\n scope.push(hash)\n scope.blockMode = BlockMode.OUTPUT\n const partial = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n} as ITagImplOptions\n","import BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n this.tpls = [] as ITemplate[]\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', (tpl: ITemplate) => this.tpls.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${token.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const childDefined = scope.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await this.liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.blockMode === BlockMode.STORE) {\n scope.blocks[this.block] = html\n return ''\n }\n return html\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.tokens = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endraw') stream.stop()\n else this.tokens.push(token)\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: function () {\n return this.tokens.map((token: Token) => token.raw).join('')\n }\n}\n","import { mapSeries } from 'src/util/promise'\nimport assert from 'src/util/assert'\nimport { evalExp } from 'src/render/syntax'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.variable = match[1]\n this.collection = match[2]\n this.templates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope) || []\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = hash.cols || collection.length\n const contexts = collection.map((item: any) => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row: number = 0\n let html = ''\n await mapSeries(contexts, async (context, idx) => {\n row = Math.floor(idx / cols) + 1\n const col = (idx % cols) + 1\n if (col === 1) {\n if (row !== 1) {\n html += ''\n }\n html += ``\n }\n\n html += ``\n scope.push(context)\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n html += ''\n scope.pop(context)\n return html\n })\n if (row > 0) {\n html += ''\n }\n return html\n }\n} as ITagImplOptions\n","import { evalExp, isFalsy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n const cond = evalExp(this.cond, scope)\n return isFalsy(cond)\n ? this.liquid.renderer.renderTemplates(this.templates, scope)\n : this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('break')\n }\n}\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('continue')\n }\n}\n","import assign from './assign'\nimport For from './for'\nimport capture from './capture'\nimport Case from './case'\nimport comment from './comment'\nimport include from './include'\nimport decrement from './decrement'\nimport cycle from './cycle'\nimport If from './if'\nimport increment from './increment'\nimport layout from './layout'\nimport block from './block'\nimport raw from './raw'\nimport tablerow from './tablerow'\nimport unless from './unless'\nimport Break from './break'\nimport Continue from './continue'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst tags: { [key: string]: ITagImplOptions } = {\n assign, 'for': For, capture, 'case': Case, comment, include, decrement, increment, cycle, 'if': If, layout, block, raw, tablerow, unless, 'break': Break, 'continue': Continue\n}\n\nexport default tags\n","const escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nfunction escape (str: string) {\n return String(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str: string) {\n return String(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nexport default {\n 'escape': escape,\n 'escape_once': (str: string) => escape(unescape(str)),\n 'newline_to_br': (v: string) => v.replace(/\\n/g, '
'),\n 'strip_html': (v: string) => v.replace(/|||<.*?>/g, '')\n}\n","import { FilterImpl } from 'src/template/filter/filter-impl'\n\nexport default {\n 'append': (v: string, arg: string) => v + arg,\n 'prepend': (v: string, arg: string) => arg + v,\n 'capitalize': (str: string) => String(str).charAt(0).toUpperCase() + str.slice(1),\n 'lstrip': (v: string) => String(v).replace(/^\\s+/, ''),\n 'downcase': (v: string) => v.toLowerCase(),\n 'upcase': (str: string) => String(str).toUpperCase(),\n 'remove': (v: string, arg: string) => v.split(arg).join(''),\n 'remove_first': (v: string, l: string) => v.replace(l, ''),\n 'replace': (v: string, pattern: string, replacement: string) =>\n String(v).split(pattern).join(replacement),\n 'replace_first': (v: string, arg1: string, arg2: string) => String(v).replace(arg1, arg2),\n 'rstrip': (str: string) => String(str).replace(/\\s+$/, ''),\n 'split': (v: string, arg: string) => String(v).split(arg),\n 'strip': (v: string) => String(v).trim(),\n 'strip_newlines': (v: string) => String(v).replace(/\\n/g, ''),\n 'truncate': (v: string, l: number = 50, o: string = '...') => {\n v = String(v)\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v: string, l: number = 15, o: string = '...') => {\n const arr = v.split(/\\s+/)\n let ret = arr.slice(0, l).join(' ')\n if (arr.length >= l) ret += o\n return ret\n }\n} as {[key: string]: FilterImpl}\n","export default {\n 'abs': (v: number) => Math.abs(v),\n 'ceil': (v: number) => Math.ceil(v),\n 'divided_by': (v: number, arg: number) => v / arg,\n 'floor': (v: number) => Math.floor(v),\n 'minus': bindFixed((v: number, arg: number) => v - arg),\n 'modulo': bindFixed((v: number, arg: number) => v % arg),\n 'round': (v: number, arg: number = 0) => {\n const amp = Math.pow(10, arg)\n return Math.round(v * amp) / amp\n },\n 'plus': bindFixed((v: number, arg: number) => Number(v) + Number(arg)),\n 'times': (v: number, arg: number) => v * arg\n}\n\nfunction getFixed (v: number) {\n const p = String(v).split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction bindFixed (cb: (v: number, arg: number) => number) {\n return (l: number, r: number) => {\n const f = Math.max(getFixed(l), getFixed(r))\n return cb(l, r).toFixed(f)\n }\n}\n","export default {\n 'url_decode': (x: string) => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': (x: string) => x.split(' ').map(encodeURIComponent).join('+')\n}\n","import { last } from 'src/util/underscore'\n\nexport default {\n 'join': (v: any[], arg: string) => v.join(arg === undefined ? ' ' : arg),\n 'last': (v: T[]): T => last(v),\n 'first': (v: T[]): T => v[0],\n 'map': (arr: {[key: string]: T1}[], arg: string): T1[] => arr.map(v => v[arg]),\n 'reverse': (v: any[]) => v.reverse(),\n 'sort': (v: T[], arg: (lhs: T, rhs: T) => number) => v.sort(arg),\n 'size': (v: string | any[]) => v.length,\n 'concat': (v: T1[], arg: T2[] | T2): Array => Array.prototype.concat.call(v, arg),\n 'slice': (v: T[], begin: number, length: number): T[] => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'uniq': function (arr: T[]): T[] {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(String(val))) return false\n u[String(val)] = true\n return true\n })\n }\n}\n","import { padStart } from './underscore'\n\nconst monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst monthNamesShort = monthNames.map(abbr)\nconst dayNamesShort = dayNames.map(abbr)\nconst suffixes = {\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n 'default': 'th'\n}\n\nfunction abbr (str: string) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d: Date) {\n const feb = _date.isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n },\n\n getDayOfYear: function (d: Date) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += _date.daysInMonth(d)[i]\n }\n return num + d.getDate()\n },\n\n getWeekOfYear: function (d: Date, startDay: number) {\n // Skip to startDay of this week\n const now = this.getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return padStart(String(Math.floor((now - then) / 7) + 1), 2, '0')\n },\n\n isLeapYear: function (d: Date) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d: Date) {\n const str = d.getDate().toString()\n const index = parseInt(str.slice(-1))\n return suffixes[index] || suffixes['default']\n },\n\n century: function (d: Date) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst formatCodes = {\n a: function (d: Date) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d: Date) {\n return dayNames[d.getDay()]\n },\n b: function (d: Date) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d: Date) {\n return monthNames[d.getMonth()]\n },\n c: function (d: Date) {\n return d.toLocaleString()\n },\n C: function (d: Date) {\n return _date.century(d)\n },\n d: function (d: Date) {\n return padStart(d.getDate(), 2, '0')\n },\n e: function (d: Date) {\n return padStart(d.getDate(), 2)\n },\n H: function (d: Date) {\n return padStart(d.getHours(), 2, '0')\n },\n I: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2, '0')\n },\n j: function (d: Date) {\n return padStart(_date.getDayOfYear(d), 3, '0')\n },\n k: function (d: Date) {\n return padStart(d.getHours(), 2)\n },\n l: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2)\n },\n L: function (d: Date) {\n return padStart(d.getMilliseconds(), 3, '0')\n },\n m: function (d: Date) {\n return padStart(d.getMonth() + 1, 2, '0')\n },\n M: function (d: Date) {\n return padStart(d.getMinutes(), 2, '0')\n },\n p: function (d: Date) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d: Date) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d: Date) {\n return _date.getSuffix(d)\n },\n s: function (d: Date) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d: Date) {\n return padStart(d.getSeconds(), 2, '0')\n },\n u: function (d: Date) {\n return d.getDay() || 7\n },\n U: function (d: Date) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d: Date) {\n return d.getDay()\n },\n W: function (d: Date) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d: Date) {\n return d.toLocaleDateString()\n },\n X: function (d: Date) {\n return d.toLocaleTimeString()\n },\n y: function (d: Date) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d: Date) {\n return d.getFullYear()\n },\n z: function (d: Date) {\n const tz = d.getTimezoneOffset() / 60 * 100\n return (tz > 0 ? '-' : '+') + padStart(String(Math.abs(tz)), 4, '0')\n },\n '%': function () {\n return '%'\n }\n};\n(formatCodes as any).h = formatCodes.b;\n(formatCodes as any).N = formatCodes.L\n\nexport default function (d: Date, format: string) {\n let output = ''\n let remaining = format\n\n while (true) {\n const r = /%./g\n const results = r.exec(remaining)\n\n // No more format codes. Add the remaining text and return\n if (!results) {\n return output + remaining\n }\n\n // Add the preceding text\n output += remaining.slice(0, r.lastIndex - 2)\n remaining = remaining.slice(r.lastIndex)\n\n // Add the format code\n const ch = results[0].charAt(1)\n const func = formatCodes[ch]\n output += func ? func(d) : '%' + ch\n }\n}\n","import strftime from 'src/util/strftime'\nimport { isString } from 'src/util/underscore'\n\nexport default {\n 'date': (v: string | Date, arg: string) => {\n let date = v\n if (v === 'now') {\n date = new Date()\n } else if (isString(v)) {\n date = new Date(v)\n }\n return isValidDate(date) ? strftime(date, arg) : v\n }\n}\n\nfunction isValidDate (date: any): date is Date {\n return date instanceof Date && !isNaN(date.getTime())\n}\n","import { isTruthy } from 'src/render/syntax'\n\nexport default {\n 'default': (v: T1, arg: T2): T1 | T2 => isTruthy(v) ? v : arg\n}\n","import html from './html'\nimport str from './string'\nimport math from './math'\nimport url from './url'\nimport array from './array'\nimport date from './date'\nimport obj from './object'\n\nexport default { ...html, ...str, ...math, ...url, ...date, ...obj, ...array }\n","import Scope from './scope/scope'\nimport * as Types from './types'\nimport fs from 'src/fs'\nimport * as _ from './util/underscore'\nimport ITemplate from './template/itemplate'\nimport Tokenizer from './parser/tokenizer'\nimport Render from './render/render'\nimport Tag from './template/tag/tag'\nimport Filter from './template/filter/filter'\nimport Parser from './parser/parser'\nimport ITagImplOptions from './template/tag/itag-impl-options'\nimport Value from './template/value'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './render/syntax'\nimport builtinTags from './builtin/tags'\nimport builtinFilters from './builtin/filters'\nimport { LiquidOptions, NormalizedFullOptions, applyDefault, normalize } from './liquid-options'\nimport { FilterImpl } from './template/filter/filter-impl'\n\nexport default class Liquid {\n public options: NormalizedFullOptions\n public renderer: Render\n public parser: Parser\n private cache: object = {}\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n this.options = applyDefault(normalize(opts))\n this.parser = new Parser(this)\n this.renderer = new Render()\n this.tokenizer = new Tokenizer(this.options)\n\n _.forOwn(builtinTags, (conf, name) => this.registerTag(name, conf))\n _.forOwn(builtinFilters, (handler, name) => this.registerFilter(name, handler))\n }\n parse (html: string, filepath?: string) {\n const tokens = this.tokenizer.tokenize(html, filepath)\n return this.parser.parse(tokens)\n }\n render (tpl: Array, ctx?: object, opts?: LiquidOptions) {\n const options = { ...this.options, ...normalize(opts) }\n const scope = new Scope(ctx, options)\n return this.renderer.renderTemplates(tpl, scope)\n }\n async parseAndRender (html: string, ctx?: object, opts?: LiquidOptions) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n }\n async getTemplate (file: string, opts?: LiquidOptions) {\n const options = normalize(opts)\n const roots = options.root ? [...options.root, ...this.options.root] : this.options.root\n const paths = roots.map(root => fs.resolve(root, file, this.options.extname))\n\n for (const filepath of paths) {\n if (!(await fs.exists(filepath))) continue\n\n if (this.options.cache && this.cache[filepath]) return this.cache[filepath]\n const value = this.parse(await fs.readFile(filepath), filepath)\n if (this.options.cache) this.cache[filepath] = value\n return value\n }\n\n const err = new Error('ENOENT') as any\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`\n err.code = 'ENOENT'\n throw err\n }\n async renderFile (file: string, ctx?: object, opts?: LiquidOptions) {\n const options = normalize(opts)\n const templates = await this.getTemplate(file, options)\n return this.render(templates, ctx, opts)\n }\n evalValue (str: string, scope: Scope) {\n return new Value(str, this.options.strict_filters).value(scope)\n }\n registerFilter (name: string, filter: FilterImpl) {\n return Filter.register(name, filter)\n }\n registerTag (name: string, tag: ITagImplOptions) {\n return Tag.register(name, tag)\n }\n plugin (plugin: (this: Liquid, L: typeof Liquid) => void) {\n return plugin.call(this, Liquid)\n }\n express () {\n const self = this\n return function (this: any, filePath: string, ctx: object, cb: (err: Error | null, html?: string) => void) {\n const opts = { root: this.root }\n self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb)\n }\n }\n static default = Liquid\n static isTruthy = isTruthy\n static isFalsy = isFalsy\n static evalExp = evalExp\n static evalValue = evalValue\n static Types = Types\n}\n"],"names":["range","tslib_1.__extends","_\r\n .range","_.padStart","_.isArray","_.isString","BlockMode","_.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/util/error.ts","../src/util/assert.ts","../src/liquid-options.ts","../src/scope/block-mode.ts","../src/scope/scope.ts","../src/scope/scopes.ts","../src/fs/browser.ts","../src/parser/whitespace-ctrl.ts","../src/parser/token.ts","../src/parser/html-token.ts","../src/parser/delimited-token.ts","../src/parser/lexical.ts","../src/parser/tag-token.ts","../src/parser/output-token.ts","../src/parser/tokenizer.ts","../src/render/render.ts","../src/render/syntax.ts","../src/template/tag/hash.ts","../src/template/template.ts","../src/template/tag/tag.ts","../src/template/filter/filter.ts","../src/parser/parse-stream.ts","../src/template/value.ts","../src/template/output.ts","../src/template/html.ts","../src/parser/parser.ts","../src/builtin/tags/assign.ts","../src/util/promise.ts","../src/builtin/tags/for.ts","../src/builtin/tags/capture.ts","../src/builtin/tags/case.ts","../src/builtin/tags/comment.ts","../src/builtin/tags/include.ts","../src/builtin/tags/decrement.ts","../src/builtin/tags/cycle.ts","../src/builtin/tags/if.ts","../src/builtin/tags/increment.ts","../src/builtin/tags/layout.ts","../src/builtin/tags/block.ts","../src/builtin/tags/raw.ts","../src/builtin/tags/tablerow.ts","../src/builtin/tags/unless.ts","../src/builtin/tags/break.ts","../src/builtin/tags/continue.ts","../src/builtin/tags/index.ts","../src/builtin/filters/html.ts","../src/builtin/filters/string.ts","../src/builtin/filters/math.ts","../src/builtin/filters/url.ts","../src/builtin/filters/array.ts","../src/util/strftime.ts","../src/builtin/filters/date.ts","../src/builtin/filters/object.ts","../src/builtin/filters/index.ts","../src/liquid.ts"],"sourcesContent":["const toStr = Object.prototype.toString\nconst arrToStr = Array.prototype.toString\n\n/*\n * Checks if value is classified as a String primitive or object.\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is a string, else false.\n */\nexport function isString (value: any) {\n return toStr.call(value) === '[object String]'\n}\n\nexport function isFunction (value: any) {\n return typeof value === 'function'\n}\n\nexport function promisify (fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise;\nexport function promisify (fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void):(arg1: T1, arg2: T2) => Promise;\nexport function promisify (fn: any) {\n return function (...args: any[]) {\n return new Promise((resolve, reject) => {\n fn(...args, (err: Error, result: any) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value: any): string {\n if (isNil(value)) return ''\n if (isFunction(value.to_liquid)) return stringify(value.to_liquid())\n if (isFunction(value.toLiquid)) return stringify(value.toLiquid())\n if (isFunction(value.to_s)) return value.to_s()\n if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value)\n if (isFunction(value.toString)) return value.toString()\n return toStr.call(value)\n}\n\nfunction defaultToString (value: any): string {\n const cache: string[] = []\n return JSON.stringify(value, (key, value) => {\n if (isObject(value)) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n}\n\nexport function create (proto: T1): T2 {\n return Object.create(proto)\n}\n\nexport function isNil (value: any): boolean {\n return value === null || value === undefined\n}\n\nexport function isArray (value: any): boolean {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value: any): boolean {\n const signature = toStr.call(value)\n // [object XXXError]\n return signature.substr(-6, 5) === 'Error' ||\n (typeof value.message === 'string' && typeof value.name === 'string')\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (\n object: {[key: string]: T} | undefined,\n iteratee: ((val: T, key: string, obj: {[key: string]: T}) => boolean | void)\n) {\n object = object || {}\n for (const k in object) {\n if (object.hasOwnProperty(k)) {\n if (iteratee(object[k], k, object) === false) break\n }\n }\n return object\n}\n\nexport function last (arr: T[]): T;\nexport function last (arr: string): string;\nexport function last (arr: any[] | string): any | string {\n return arr[arr.length - 1]\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value: any): boolean {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\n/*\n * A function to create flexibly-numbered lists of integers,\n * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.\n * Returns a list of integers from start (inclusive) to stop (exclusive),\n * incremented (or decremented) by step, exclusive.\n * Note that ranges that stop before they start are considered to be zero-length instead of\n * negative — if you'd like a negative range, use a negative step.\n */\nexport function range (start: number, stop?: number, step?: number) {\n if (stop === undefined) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr: number[] = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n\nexport function padStart (str: any, length: number, ch: string = ' ') {\n str = String(str)\n let n = length - str.length\n while (n-- > 0) str = ch + str\n return str\n}\n","import * as _ from './underscore'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\n\nabstract class LiquidError extends Error {\n private token: Token\n private originalError: Error\n constructor (err: Error, token: Token) {\n super(err.message)\n this.originalError = err\n this.token = token\n }\n protected update () {\n const err = this.originalError\n const context = mkContext(this.token)\n this.message = mkMessage(err.message, this.token)\n this.stack = this.message + '\\n' + context +\n '\\n' + this.stack + '\\nFrom ' + err.stack\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor (message: string, token: Token) {\n super(new Error(message), token)\n this.name = 'TokenizationError'\n super.update()\n }\n}\n\nexport class ParseError extends LiquidError {\n constructor (err: Error, token: Token) {\n super(err, token)\n this.name = 'ParseError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderError extends LiquidError {\n constructor (err: Error, tpl: ITemplate) {\n super(err, tpl.token)\n this.name = 'RenderError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderBreakError extends Error {\n resolvedHTML: string = ''\n constructor (message: string) {\n super(message)\n this.name = 'RenderBreakError'\n this.message = message + ''\n }\n}\n\nexport class AssertionError extends Error {\n constructor (message: string) {\n super(message)\n this.name = 'AssertionError'\n this.message = message + ''\n }\n}\n\nfunction mkContext (token: Token) {\n const lines = token.input.split('\\n')\n const begin = Math.max(token.line - 2, 1)\n const end = Math.min(token.line + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === token.line) ? '>> ' : ' '\n const num = _.padStart(String(lineNumber), String(end).length)\n const text = lines[lineNumber - 1]\n return `${indicator}${num}| ${text}`\n })\n .join('\\n')\n\n return context\n}\n\nfunction mkMessage (msg: string, token: Token) {\n if (token.file) msg += `, file:${token.file}`\n msg += `, line:${token.line}, col:${token.col}`\n return msg\n}\n","import { AssertionError } from './error'\n\nexport default function (predicate: any, message?: string) {\n if (!predicate) {\n message = message || `expect ${predicate} to be true`\n throw new AssertionError(message)\n }\n}\n","/* eslint-disable camelcase */\n\nimport * as _ from './util/underscore'\n\nexport interface LiquidOptions {\n /** `root` is a directory or an array of directories to resolve layouts and includes, as well as the filename passed in when calling `.renderFile()`. If an array, the files are looked up in the order they occur in the array. Defaults to `[\".\"]` */\n root?: string | string[]\n /** `extname` is used to lookup the template file when filepath doesn't include an extension name. Eg: setting to `\".html\"` will allow including file by basename. Defaults to `\"\"`. */\n extname?: string\n /** `cache` indicates whether or not to cache resolved templates. Defaults to `false`. */\n cache?: boolean\n /** `dynamicPartials`: if set, treat `` parameter in `{%include filepath %}`, `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */\n dynamicPartials?: boolean\n /** `strict_filters` is used to enable strict filter existence. If set to `false`, undefined filters will be rendered as empty string. Otherwise, undefined filters will cause an exception. Defaults to `false`. */\n strict_filters?: boolean\n /** `strict_variables` is used to enable strict variable derivation. If set to `false`, undefined variables will be rendered as empty string. Otherwise, undefined variables will cause an exception. Defaults to `false`. */\n strict_variables?: boolean\n /** `trim_tag_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of tags (`{% %}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_tag_right?: boolean\n /** `trim_tag_left` is similar to `trim_tag_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_tag_left?: boolean\n /** ``trim_output_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_output_right?: boolean\n /** `trim_output_left` is similar to `trim_output_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_output_left?: boolean\n /** `tag_delimiter_left` and `tag_delimiter_right` are used to override the delimiter for liquid tags **/\n tag_delimiter_left?: string,\n tag_delimiter_right?: string,\n /** `output_delimiter_left` and `output_delimiter_right` are used to override the delimiter for liquid outputs **/\n output_delimiter_left?: string,\n output_delimiter_right?: string,\n /** `greedy` is used to specify whether `trim_left`/`trim_right` is greedy. When set to `true`, all consecutive blank characters including `\\n` will be trimed regardless of line breaks. Defaults to `true`. */\n greedy?: boolean\n}\n\ninterface NormalizedOptions extends LiquidOptions {\n root?: string[]\n}\n\nexport interface NormalizedFullOptions extends NormalizedOptions {\n root: string[]\n extname: string\n cache: boolean\n dynamicPartials: boolean\n strict_filters: boolean\n strict_variables: boolean\n trim_tag_right: boolean\n trim_tag_left: boolean\n trim_output_right: boolean\n trim_output_left: boolean\n tag_delimiter_left: string,\n tag_delimiter_right: string,\n output_delimiter_left: string,\n output_delimiter_right: string,\n greedy: boolean\n}\n\nconst defaultOptions: NormalizedFullOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_output_right: false,\n trim_output_left: false,\n greedy: true,\n tag_delimiter_left: '{%',\n tag_delimiter_right: '%}',\n output_delimiter_left: '{{',\n output_delimiter_right: '}}',\n strict_filters: false,\n strict_variables: false\n}\n\nexport function normalize (options?: LiquidOptions): NormalizedOptions {\n options = options || {}\n if (options.hasOwnProperty('root')) {\n options.root = normalizeStringArray(options.root)\n }\n return options as NormalizedOptions\n}\n\nexport function applyDefault (options?: NormalizedOptions): NormalizedFullOptions {\n return { ...defaultOptions, ...options }\n}\n\nfunction normalizeStringArray (value: any): string[] {\n if (_.isArray(value)) return value as string[]\n if (_.isString(value)) return [value as string]\n return []\n}\n","enum BlockMode {\n /* store rendered html into blocks */\n OUTPUT,\n /* output rendered html directly */\n STORE\n}\n\nexport default BlockMode\n","import * as _ from '../util/underscore'\nimport { __assign } from 'tslib'\nimport assert from '../util/assert'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\nimport BlockMode from './block-mode'\nimport IContext from './icontext'\n\nexport default class Scope {\n opts: NormalizedFullOptions\n contexts: Array\n blocks: object = {}\n groups: {[key: string]: number} = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts?: NormalizedFullOptions) {\n this.opts = applyDefault(opts)\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => __assign(ctx, val), {})\n }\n get (path: string): any {\n const paths = this.propertyAccessSeq(path)\n const scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n return paths.reduce((value, key) => this.readProperty(value, key), scope)\n }\n set (path: string, v: any): void {\n const paths = this.propertyAccessSeq(path)\n let scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n paths.some((key, i) => {\n if (!_.isObject(scope)) {\n return true\n }\n if (i === paths.length - 1) {\n scope[key] = v\n return true\n }\n if (undefined === scope[key]) {\n scope[key] = {}\n }\n scope = scope[key]\n return false\n })\n }\n unshift (ctx: object) {\n return this.contexts.unshift(ctx)\n }\n push (ctx: object) {\n return this.contexts.push(ctx)\n }\n pop (ctx?: object): object | undefined {\n if (!arguments.length) {\n return this.contexts.pop()\n }\n const i = this.contexts.findIndex(scope => scope === ctx)\n if (i === -1) {\n throw new TypeError('scope not found, cannot pop')\n }\n return this.contexts.splice(i, 1)[0]\n }\n findContextFor (key: string, filter: ((conttext: object) => boolean) = () => true) {\n for (let i = this.contexts.length - 1; i >= 0; i--) {\n const candidate = this.contexts[i]\n if (!filter(candidate)) continue\n if (key in candidate) {\n return candidate\n }\n }\n return null\n }\n private readProperty (obj: IContext, key: string) {\n let val\n if (_.isNil(obj)) {\n val = undefined\n } else {\n obj = toLiquid(obj)\n val = key === 'size' ? readSize(obj) : obj[key]\n if (_.isFunction(obj.liquid_method_missing)) {\n val = obj.liquid_method_missing!(key)\n }\n }\n if (_.isNil(val) && this.opts.strict_variables) {\n throw new TypeError(`undefined variable: ${key}`)\n }\n return val\n }\n\n /*\n * Parse property access sequence from access string\n * @example\n * accessSeq(\"foo.bar\") // ['foo', 'bar']\n * accessSeq(\"foo['bar']\") // ['foo', 'bar']\n * accessSeq(\"foo['b]r']\") // ['foo', 'b]r']\n * accessSeq(\"foo[bar.coo]\") // ['foo', 'bar'], for bar.coo == 'bar'\n */\n propertyAccessSeq (str: string) {\n str = String(str)\n const seq: string[] = []\n let name = ''\n let j\n let i = 0\n while (i < str.length) {\n switch (str[i]) {\n case '[':\n push()\n\n const delemiter = str[i + 1]\n if (/['\"]/.test(delemiter)) { // foo[\"bar\"]\n j = str.indexOf(delemiter, i + 2)\n assert(j !== -1, `unbalanced ${delemiter}: ${str}`)\n name = str.slice(i + 2, j)\n push()\n i = j + 2\n } else { // foo[bar.coo]\n j = matchRightBracket(str, i + 1)\n assert(j !== -1, `unbalanced []: ${str}`)\n name = str.slice(i + 1, j)\n if (!/^[+-]?\\d+$/.test(name)) { // foo[bar] vs. foo[1]\n name = String(this.get(name))\n }\n push()\n i = j + 1\n }\n break\n case '.':// foo.bar, foo[0].bar\n push()\n i++\n break\n default:// foo.bar\n name += str[i]\n i++\n }\n }\n push()\n\n if (!seq.length) {\n throw new TypeError(`invalid path:\"${str}\"`)\n }\n return seq\n\n function push () {\n if (name.length) seq.push(name)\n name = ''\n }\n }\n}\n\nfunction toLiquid (obj: IContext) {\n if (_.isFunction(obj.to_liquid)) {\n return obj.to_liquid()\n }\n if (_.isFunction(obj.toLiquid)) {\n return obj.toLiquid()\n }\n return obj\n}\n\nfunction readSize (obj: IContext) {\n if (!_.isNil(obj.size)) return obj.size\n if (_.isArray(obj) || _.isString(obj)) return obj.length\n return obj.size\n}\n\nfunction matchRightBracket (str: string, begin: number) {\n let stack = 1 // count of '[' - count of ']'\n for (let i = begin; i < str.length; i++) {\n if (str[i] === '[') {\n stack++\n }\n if (str[i] === ']') {\n stack--\n if (stack === 0) {\n return i\n }\n }\n }\n return -1\n}\n","export class CaptureScope {}\nexport class AssignScope {}\nexport class IncrementScope {}\nexport class DecrementScope {}\n","import { last } from '../util/underscore'\nimport IFS from './ifs'\n\nfunction domResolve (root: string, path: string) {\n const base = document.createElement('base')\n base.href = root\n\n const head = document.getElementsByTagName('head')[0]\n head.insertBefore(base, head.firstChild)\n\n const a = document.createElement('a')\n a.href = path\n const resolved = a.href\n head.removeChild(base)\n\n return resolved\n}\n\nfunction resolve (root: string, filepath: string, ext: string) {\n if (root.length && last(root) !== '/') root += '/'\n const url = domResolve(root, filepath)\n return url.replace(/^(\\w+:\\/\\/[^/]+)(\\/[^?]+)/, (str, origin, path) => {\n const last = path.split('/').pop()\n if (/\\.\\w+$/.test(last)) return str\n return origin + path + ext\n })\n}\n\nasync function readFile (url: string): Promise {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.responseText as string)\n } else {\n reject(new Error(xhr.statusText))\n }\n }\n xhr.onerror = () => {\n reject(new Error('An error occurred whilst receiving the response.'))\n }\n xhr.open('GET', url)\n xhr.send()\n })\n}\n\nasync function exists () {\n return true\n}\n\nexport default { readFile, resolve, exists } as IFS\n","import DelimitedToken from 'src/parser/delimited-token'\nimport Token from 'src/parser/token'\nimport TagToken from 'src/parser/tag-token'\nimport { NormalizedFullOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: NormalizedFullOptions) {\n options = { greedy: true, ...options }\n let inRaw = false\n\n tokens.forEach((token: Token, i: number) => {\n if (shouldTrimLeft(token as DelimitedToken, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && (token as TagToken).name === 'raw') inRaw = true\n if (token.type === 'tag' && (token as TagToken).name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token as DelimitedToken, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimLeft || options.trim_tag_left\n if (token.type === 'output') return token.trimLeft || options.trim_output_left\n}\n\nfunction shouldTrimRight (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimRight || options.trim_tag_right\n if (token.type === 'output') return token.trimRight || options.trim_output_right\n}\n\nfunction trimLeft (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rLeft = greedy ? /\\s+$/g : /[\\t\\r ]*$/g\n token.value = token.value.replace(rLeft, '')\n}\n\nfunction trimRight (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rRight = greedy ? /^\\s+/g : /^[\\t\\r ]*\\n?/g\n token.value = token.value.replace(rRight, '')\n}\n","export default class Token {\n type: string = 'notset'\n line: number\n col: number\n raw: string\n input: string\n file?: string\n value: string\n constructor (raw: string, input: string, line: number, col: number, file?: string) {\n this.col = col\n this.line = line\n this.raw = raw\n this.value = raw\n this.input = input\n this.file = file\n }\n}\n","import Token from './token'\n\nexport default class HTMLToken extends Token {\n constructor (str: string, input: string, line: number, col: number, file?: string) {\n super(str, input, line, col, file)\n this.type = 'html'\n this.value = str\n }\n}\n","import Token from './token'\nimport { last } from 'src/util/underscore'\n\nexport default class DelimitedToken extends Token {\n trimLeft: boolean\n trimRight: boolean\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, input, line, pos, file)\n this.trimLeft = value[0] === '-'\n this.trimRight = last(value) === '-'\n this.value = value\n .slice(\n this.trimLeft ? 1 : 0,\n this.trimRight ? -1 : value.length\n )\n .trim()\n }\n}\n","// quote related\nconst singleQuoted = /'[^']*'/\nconst doubleQuoted = /\"[^\"]*\"/\nexport const quoted = new RegExp(`${singleQuoted.source}|${doubleQuoted.source}`)\nexport const quoteBalanced = new RegExp(`(?:${quoted.source}|[^'\"])*`)\n\n// basic types\nexport const number = /[+-]?(?:\\d+\\.?\\d*|\\.?\\d+)/\nexport const bool = /true|false/\n\n// property access\nexport const identifier = /[\\w-]+[?]?/\nexport const subscript = new RegExp(`\\\\[(?:${quoted.source}|[\\\\w-\\\\.]+)\\\\]`)\nexport const literal = new RegExp(`(?:${quoted.source}|${bool.source}|${number.source})`)\nexport const variable = new RegExp(`${identifier.source}(?:\\\\.${identifier.source}|${subscript.source})*`)\n\n// range related\nexport const rangeLimit = new RegExp(`(?:${variable.source}|${number.source})`)\nexport const range = new RegExp(`\\\\(${rangeLimit.source}\\\\.\\\\.${rangeLimit.source}\\\\)`)\nexport const rangeCapture = new RegExp(`\\\\((${rangeLimit.source})\\\\.\\\\.(${rangeLimit.source})\\\\)`)\n\nexport const value = new RegExp(`(?:${variable.source}|${literal.source}|${range.source})`)\n\n// hash related\nexport const hash = new RegExp(`(?:${identifier.source})\\\\s*:\\\\s*(?:${value.source})`)\nexport const hashCapture = new RegExp(`(${identifier.source})\\\\s*:\\\\s*(${value.source})`, 'g')\n\n// full match\nexport const tagLine = new RegExp(`^\\\\s*(${identifier.source})\\\\s*([\\\\s\\\\S]*?)\\\\s*$`)\nexport const numberLine = new RegExp(`^${number.source}$`)\nexport const boolLine = new RegExp(`^${bool.source}$`, 'i')\nexport const quotedLine = new RegExp(`^${quoted.source}$`)\nexport const rangeLine = new RegExp(`^${rangeCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isRange (str: string) {\n return rangeLine.test(str)\n}\n","import DelimitedToken from './delimited-token'\nimport { TokenizationError } from 'src/util/error'\nimport * as lexical from './lexical'\n\nexport default class TagToken extends DelimitedToken {\n name: string\n args: string\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'tag'\n const match = this.value.match(lexical.tagLine)\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, this)\n }\n this.name = match[1]\n this.args = match[2]\n }\n}\n","import DelimitedToken from './delimited-token'\n\nexport default class OutputToken extends DelimitedToken {\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'output'\n }\n}\n","import whiteSpaceCtrl from './whitespace-ctrl'\nimport HTMLToken from './html-token'\nimport TagToken from './tag-token'\nimport Token from './token'\nimport OutputToken from './output-token'\nimport { TokenizationError } from 'src/util/error'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: NormalizedFullOptions\n constructor (options?: NormalizedFullOptions) {\n this.options = applyDefault(options)\n }\n tokenize (input: string, file?: string) {\n const tokens: Token[] = []\n const tagL = this.options.tag_delimiter_left\n const tagR = this.options.tag_delimiter_right\n const outputL = this.options.output_delimiter_left\n const outputR = this.options.output_delimiter_right\n let p = 0\n let curLine = 1\n let state = ParseState.HTML\n let buffer = ''\n let lineBegin = 0\n let line = 1\n let col = 1\n\n while (p < input.length) {\n if (input[p] === '\\n') {\n curLine++\n lineBegin = p + 1\n }\n if (state === ParseState.HTML) {\n if (input.substr(p, outputL.length) === outputL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = outputL\n line = curLine\n col = p - lineBegin + 1\n p += outputL.length\n state = ParseState.OUTPUT\n continue\n } else if (input.substr(p, tagL.length) === tagL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = tagL\n line = curLine\n col = p - lineBegin + 1\n p += tagL.length\n state = ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && input.substr(p, outputR.length) === outputR) {\n buffer += outputR\n tokens.push(new OutputToken(buffer, buffer.slice(outputL.length, -outputR.length), input, line, col, file))\n p += outputR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n } else if (input.substr(p, tagR.length) === tagR) {\n buffer += tagR\n tokens.push(new TagToken(buffer, buffer.slice(tagL.length, -tagR.length), input, line, col, file))\n p += tagR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n }\n buffer += input[p++]\n }\n if (state !== ParseState.HTML) {\n const t = state === ParseState.OUTPUT ? 'output' : 'tag'\n const str = buffer.length > 16 ? buffer.slice(0, 13) + '...' : buffer\n throw new TokenizationError(\n `${t} \"${str}\" not closed`,\n new Token(buffer, input, line, col, file)\n )\n }\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n\n whiteSpaceCtrl(tokens, this.options)\n return tokens\n }\n}\n","import { RenderError } from 'src/util/error'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Render {\n async renderTemplates (templates: ITemplate[], scope: Scope) {\n assert(scope, 'unable to evalTemplates: scope undefined')\n\n let html = ''\n for (const tpl of templates) {\n try {\n html += await tpl.render(scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n e.resolvedHTML = html\n throw e\n }\n throw e.name === 'RenderError' ? e : new RenderError(e, tpl)\n }\n }\n return html\n }\n}\n","import * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport Scope from 'src/scope/scope'\nimport { range, last } from 'src/util/underscore'\n\nconst operators = {\n '==': (l: any, r: any) => l === r,\n '!=': (l: any, r: any) => l !== r,\n '>': (l: any, r: any) => l !== null && r !== null && l > r,\n '<': (l: any, r: any) => l !== null && r !== null && l < r,\n '>=': (l: any, r: any) => l !== null && r !== null && l >= r,\n '<=': (l: any, r: any) => l !== null && r !== null && l <= r,\n 'contains': (l: any, r: any) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l: any, r: any) => isTruthy(l) && isTruthy(r),\n 'or': (l: any, r: any) => isTruthy(l) || isTruthy(r)\n}\n\nexport function evalExp (exp: string, scope: Scope): any {\n assert(scope, 'unable to evalExp: scope undefined')\n const operatorREs = lexical.operators\n let match\n for (let i = 0; i < operatorREs.length; i++) {\n const operatorRE = operatorREs[i]\n const expRE = new RegExp(`^(${lexical.quoteBalanced.source})(${operatorRE.source})(${lexical.quoteBalanced.source})$`)\n if ((match = exp.match(expRE))) {\n const l = evalExp(match[1], scope)\n const op = operators[match[2].trim()]\n const r = evalExp(match[3], scope)\n return op(l, r)\n }\n }\n\n if ((match = exp.match(lexical.rangeLine))) {\n const low = evalValue(match[1], scope)\n const high = evalValue(match[2], scope)\n return range(low, high + 1)\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str: string, scope: Scope) {\n if (!str) return null\n str = str.trim()\n\n if (str === 'true') return true\n if (str === 'false') return false\n if (!isNaN(Number(str))) return Number(str)\n if ((str[0] === '\"' || str[0] === \"'\") && str[0] === last(str)) return str.slice(1, -1)\n return scope.get(str)\n}\n\nexport function isTruthy (val: any): boolean {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val: any): boolean {\n return val === false || undefined === val || val === null\n}\n","import { hashCapture } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\n\n/**\n * Key-Value Pairs Representing Tag Arguments\n * Example:\n * For the markup `{% include 'head.html' foo='bar' %}`,\n * hash['foo'] === 'bar'\n */\nexport default class Hash {\n [key: string]: any\n constructor (markup: string, scope: Scope) {\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n this[k] = evalValue(v, scope)\n }\n }\n}\n","export default abstract class Template {\n token: T;\n constructor (token: T) {\n this.token = token\n }\n}\n","import { create, stringify } from 'src/util/underscore'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITagImpl from './itag-impl'\nimport ITagImplOptions from './itag-impl-options'\nimport Liquid from 'src/liquid'\nimport Hash from './hash'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\n\nexport default class Tag extends Template implements ITemplate {\n name: string\n private impl: ITagImpl\n static impls: { [key: string]: ITagImplOptions } = {}\n\n constructor (token: TagToken, tokens: Token[], liquid: Liquid) {\n super(token)\n this.name = token.name\n\n const impl = Tag.impls[token.name]\n assert(impl, `tag ${token.name} not found`)\n this.impl = create(impl)\n this.impl.liquid = liquid\n if (this.impl.parse) {\n this.impl.parse(token, tokens)\n }\n }\n async render (scope: Scope) {\n const hash = new Hash(this.token.args, scope)\n const impl = this.impl\n if (typeof impl.render !== 'function') {\n return ''\n }\n const html = await impl.render(scope, hash)\n return stringify(html)\n }\n static register (name: string, tag: ITagImplOptions) {\n Tag.impls[name] = tag\n }\n static clear () {\n Tag.impls = {}\n }\n}\n","import { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\nimport { FilterImpl } from './filter-impl'\n\nexport default class Filter {\n name: string\n impl: FilterImpl\n args: string[]\n private static impls: {[key: string]: FilterImpl} = {}\n\n constructor (name: string, args: string[], strictFilters: boolean) {\n const impl = Filter.impls[name]\n if (!impl && strictFilters) throw new TypeError(`undefined filter: ${name}`)\n\n this.name = name\n this.impl = impl || (x => x)\n this.args = args\n }\n render (value: any, scope: Scope): any {\n const args = this.args.map(arg => evalValue(arg, scope))\n return this.impl.apply(null, [value, ...args])\n }\n static register (name: string, filter: FilterImpl) {\n Filter.impls[name] = filter\n }\n static clear () {\n Filter.impls = {}\n }\n}\n","import Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from './tag-token'\n\ntype ParseToken = ((token: Token, remainTokens: Array) => ITemplate)\n\nexport default class ParseStream {\n private tokens: Array\n private handlers: {[key: string]: (arg: any) => void} = {}\n private stopRequested: boolean = false\n private parseToken: ParseToken\n\n constructor (tokens: Array, parseToken: ParseToken) {\n this.tokens = tokens\n this.parseToken = parseToken\n }\n on (name: string, cb: (arg: T) => void): ParseStream {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: T) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n return false\n }\n start () {\n this.trigger('start')\n let token: Token | undefined\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' && this.trigger(`tag:${(token).name}`, token)) {\n continue\n }\n const template = this.parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n }\n stop () {\n this.stopRequested = true\n return this\n }\n}\n","import { evalExp } from 'src/render/syntax'\nimport Filter from './filter/filter'\nimport Scope from 'src/scope/scope'\n\nenum ParseState {\n INIT = 0,\n FILTER_NAME = 1,\n FILTER_ARG = 2\n}\n\nexport default class {\n initial: any\n filters: Array = []\n\n /**\n * @param str value string, like: \"i have a dream | truncate: 3\n */\n constructor (str: string, strictFilters: boolean) {\n let buffer = ''\n let quoted = ''\n let state = ParseState.INIT\n let sealed = false\n\n let filterName = ''\n let filterArgs: string[] = []\n\n for (let i = 0; i < str.length; i++) {\n if (quoted) {\n if (str[i] === quoted) {\n quoted = ''\n sealed = true\n }\n buffer += str[i]\n } else if (/\\s/.test(str[i])) {\n if (!buffer) continue\n else sealed = true\n } else if (str[i] === '|') {\n if (state === ParseState.INIT) {\n this.initial = buffer\n } else {\n if (state === ParseState.FILTER_NAME) filterName = buffer\n else filterArgs.push(buffer)\n this.filters.push(new Filter(filterName, filterArgs, strictFilters))\n filterName = ''\n filterArgs = []\n }\n state = ParseState.FILTER_NAME\n buffer = ''\n sealed = false\n } else if (state === ParseState.FILTER_NAME && str[i] === ':') {\n filterName = buffer\n state = ParseState.FILTER_ARG\n buffer = ''\n sealed = false\n } else if (state === ParseState.FILTER_ARG && str[i] === ',') {\n filterArgs.push(buffer)\n buffer = ''\n sealed = false\n } else if (sealed) continue\n else {\n if ((str[i] === '\"' || str[i] === \"'\") && !quoted) quoted = str[i]\n buffer += str[i]\n }\n }\n\n if (buffer) {\n if (state === ParseState.INIT) this.initial = buffer\n else if (state === ParseState.FILTER_NAME) this.filters.push(new Filter(buffer, [], strictFilters))\n else {\n filterArgs.push(buffer)\n this.filters.push(new Filter(filterName, filterArgs, strictFilters))\n }\n }\n }\n value (scope: Scope) {\n return this.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(this.initial, scope))\n }\n}\n","import Value from './value'\nimport { stringify } from 'src/util/underscore'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport OutputToken from 'src/parser/output-token'\n\nexport default class Output extends Template implements ITemplate {\n value: Value\n constructor (token: OutputToken, strictFilters: boolean) {\n super(token)\n this.value = new Value(token.value, strictFilters)\n }\n async render (scope: Scope): Promise {\n const html = await this.value.value(scope)\n return stringify(html)\n }\n}\n","import Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport HTMLToken from 'src/parser/html-token'\n\nexport default class extends Template implements ITemplate {\n str: string\n constructor (token: HTMLToken) {\n super(token)\n this.str = token.value\n }\n async render (): Promise {\n return this.str\n }\n}\n","import { ParseError } from '../util/error'\nimport Liquid from 'src/liquid'\nimport ParseStream from './parse-stream'\nimport Token from './token'\nimport TagToken from './tag-token'\nimport OutputToken from './output-token'\nimport Tag from 'src/template/tag/tag'\nimport Output from 'src/template/output'\nimport HTML from 'src/template/html'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Parser {\n liquid: Liquid\n\n constructor (liquid: Liquid) {\n this.liquid = liquid\n }\n parse (tokens: Array) {\n let token\n const templates: ITemplate[] = []\n while ((token = tokens.shift())) {\n templates.push(this.parseToken(token, tokens))\n }\n return templates\n }\n parseToken (token: Token, remainTokens: Array) {\n try {\n if (token.type === 'tag') {\n return new Tag(token as TagToken, remainTokens, this.liquid)\n }\n if (token.type === 'output') {\n return new Output(token as OutputToken, this.liquid.options.strict_filters)\n }\n return new HTML(token)\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n parseStream (tokens: Array) {\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens))\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { AssignScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(re) as RegExpMatchArray\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (scope: Scope) {\n const ctx = new AssignScope()\n ctx[this.key] = this.liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n} as ITagImplOptions\n","/*\n * Call functions in serial until someone rejected.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function mapSeries (\n iterable: T1[],\n iteratee: (item: T1, idx: number, iterable: T1[]) => Promise | T2\n): Promise {\n let ret = Promise.resolve(0)\n const result: T2[] = []\n iterable.forEach(function (item, idx) {\n ret = ret\n .then(() => iteratee(item, idx, iterable))\n .then(x => result.push(x))\n })\n return ret.then(() => result)\n}\n","import { mapSeries } from 'src/util/promise'\nimport { isString, isObject, isArray } from 'src/util/underscore'\nimport { evalExp } from 'src/render/syntax'\nimport assert from 'src/util/assert'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n type: 'block',\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n this.variable = match[1]\n this.collection = match[2]\n this.reversed = !!match[3]\n\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endfor', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection] as string[]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]]) as Array<[string, any]>\n }\n }\n if (!isArray(collection) || !collection.length) {\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n if (this.reversed) collection.reverse()\n\n const contexts = collection.map((item: string, i: number) => {\n const ctx = {}\n ctx[this.variable] = item\n ctx['forloop'] = {\n first: i === 0,\n index: i + 1,\n index0: i,\n last: i === collection.length - 1,\n length: collection.length,\n rindex: collection.length - i,\n rindex0: collection.length - i - 1\n }\n return ctx\n })\n\n let html = ''\n let finished = false\n await mapSeries(contexts, async context => {\n if (finished) return\n\n scope.push(context)\n try {\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n html += e.resolvedHTML\n if (e.message === 'break') {\n finished = true\n }\n } else throw e\n }\n scope.pop(context)\n })\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = tagToken.args.match(re) as RegExpMatchArray\n assert(match, `${tagToken.args} not valid identifier`)\n\n this.variable = match[1]\n this.templates = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', () => stream.stop())\n .on('template', (tpl) => this.templates.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const html = await this.liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = new CaptureScope()\n ctx[this.variable] = html\n scope.push(ctx)\n }\n} as ITagImplOptions\n","import { evalExp } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p: ITemplate[] = []\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:when', (token: TagToken) => {\n this.cases.push({\n val: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endcase', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = evalExp(branch.val, scope)\n const cond = evalExp(this.cond, scope)\n if (val === cond) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value, quotedLine } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /[^\\s,]+/\nconst withRE = new RegExp(`with\\\\s+(${value.source})`)\n\nexport default {\n parse: function (token: TagToken) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticValue = match[0]\n }\n\n match = value.exec(token.args)\n if (match) {\n this.value = match[0]\n }\n\n match = withRE.exec(token.args)\n if (match) {\n this.with = match[1]\n }\n },\n render: async function (scope: Scope, hash: Hash) {\n let filepath\n if (scope.opts.dynamicPartials) {\n if (quotedLine.exec(this.value)) {\n const template = this.value.slice(1, -1)\n filepath = await this.liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = evalValue(this.value, scope)\n }\n } else {\n filepath = this.staticValue\n }\n assert(filepath, `cannot include with empty filename`)\n\n const originBlocks = scope.blocks\n const originBlockMode = scope.blockMode\n\n scope.blocks = {}\n scope.blockMode = BlockMode.OUTPUT\n if (this.with) {\n hash[filepath] = evalValue(this.with, scope)\n }\n const templates = await this.liquid.getTemplate(filepath, scope.opts)\n scope.push(hash)\n const html = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.blocks = originBlocks\n scope.blockMode = originBlockMode\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, DecrementScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(identifier) as RegExpMatchArray\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope: Scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new DecrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n return --context[this.variable]\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\nconst candidatesRE = new RegExp(rValue.source, 'g')\n\nexport default {\n parse: function (tagToken: TagToken) {\n let match: RegExpExecArray | null = groupRE.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.group = match[1] || ''\n const candidates = match[2]\n\n this.candidates = []\n\n while ((match = candidatesRE.exec(candidates))) {\n this.candidates.push(match[0])\n }\n assert(this.candidates.length, `empty candidates: ${tagToken.raw}`)\n },\n\n render: function (scope: Scope) {\n const group = evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n const groups = scope.groups\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n\n return evalValue(candidate, scope)\n }\n}\n","import { evalExp, isTruthy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', (token: TagToken) => {\n this.branches.push({\n cond: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endif', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (const branch of this.branches) {\n const cond = evalExp(branch.cond, scope)\n if (isTruthy(cond)) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match![0]\n },\n render: function (scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new IncrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n const val = context[this.variable]\n context[this.variable]++\n return val\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /\\S+/\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticLayout = match[0]\n }\n\n match = rValue.exec(token.args)\n if (match) {\n this.layout = match[0]\n }\n\n this.tpls = this.liquid.parser.parse(remainTokens)\n },\n render: async function (scope: Scope, hash: Hash) {\n const layout = scope.opts.dynamicPartials\n ? evalValue(this.layout, scope)\n : this.staticLayout\n assert(layout, `cannot apply layout with empty filename`)\n\n // render the remaining tokens immediately\n scope.blockMode = BlockMode.STORE\n const html = await this.liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.blocks[''] === undefined) {\n scope.blocks[''] = html\n }\n const templates = await this.liquid.getTemplate(layout, scope.opts)\n scope.push(hash)\n scope.blockMode = BlockMode.OUTPUT\n const partial = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n} as ITagImplOptions\n","import BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n this.tpls = [] as ITemplate[]\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', (tpl: ITemplate) => this.tpls.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${token.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const childDefined = scope.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await this.liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.blockMode === BlockMode.STORE) {\n scope.blocks[this.block] = html\n return ''\n }\n return html\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.tokens = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endraw') stream.stop()\n else this.tokens.push(token)\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: function () {\n return this.tokens.map((token: Token) => token.raw).join('')\n }\n}\n","import { mapSeries } from 'src/util/promise'\nimport assert from 'src/util/assert'\nimport { evalExp } from 'src/render/syntax'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.variable = match[1]\n this.collection = match[2]\n this.templates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope) || []\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = hash.cols || collection.length\n const contexts = collection.map((item: any) => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row: number = 0\n let html = ''\n await mapSeries(contexts, async (context, idx) => {\n row = Math.floor(idx / cols) + 1\n const col = (idx % cols) + 1\n if (col === 1) {\n if (row !== 1) {\n html += ''\n }\n html += ``\n }\n\n html += ``\n scope.push(context)\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n html += ''\n scope.pop(context)\n return html\n })\n if (row > 0) {\n html += ''\n }\n return html\n }\n} as ITagImplOptions\n","import { evalExp, isFalsy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n const cond = evalExp(this.cond, scope)\n return isFalsy(cond)\n ? this.liquid.renderer.renderTemplates(this.templates, scope)\n : this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('break')\n }\n}\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('continue')\n }\n}\n","import assign from './assign'\nimport For from './for'\nimport capture from './capture'\nimport Case from './case'\nimport comment from './comment'\nimport include from './include'\nimport decrement from './decrement'\nimport cycle from './cycle'\nimport If from './if'\nimport increment from './increment'\nimport layout from './layout'\nimport block from './block'\nimport raw from './raw'\nimport tablerow from './tablerow'\nimport unless from './unless'\nimport Break from './break'\nimport Continue from './continue'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst tags: { [key: string]: ITagImplOptions } = {\n assign, 'for': For, capture, 'case': Case, comment, include, decrement, increment, cycle, 'if': If, layout, block, raw, tablerow, unless, 'break': Break, 'continue': Continue\n}\n\nexport default tags\n","const escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nfunction escape (str: string) {\n return String(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str: string) {\n return String(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nexport default {\n 'escape': escape,\n 'escape_once': (str: string) => escape(unescape(str)),\n 'newline_to_br': (v: string) => v.replace(/\\n/g, '
'),\n 'strip_html': (v: string) => v.replace(/|||<.*?>/g, '')\n}\n","import { FilterImpl } from 'src/template/filter/filter-impl'\n\nexport default {\n 'append': (v: string, arg: string) => v + arg,\n 'prepend': (v: string, arg: string) => arg + v,\n 'capitalize': (str: string) => String(str).charAt(0).toUpperCase() + str.slice(1),\n 'lstrip': (v: string) => String(v).replace(/^\\s+/, ''),\n 'downcase': (v: string) => v.toLowerCase(),\n 'upcase': (str: string) => String(str).toUpperCase(),\n 'remove': (v: string, arg: string) => v.split(arg).join(''),\n 'remove_first': (v: string, l: string) => v.replace(l, ''),\n 'replace': (v: string, pattern: string, replacement: string) =>\n String(v).split(pattern).join(replacement),\n 'replace_first': (v: string, arg1: string, arg2: string) => String(v).replace(arg1, arg2),\n 'rstrip': (str: string) => String(str).replace(/\\s+$/, ''),\n 'split': (v: string, arg: string) => String(v).split(arg),\n 'strip': (v: string) => String(v).trim(),\n 'strip_newlines': (v: string) => String(v).replace(/\\n/g, ''),\n 'truncate': (v: string, l: number = 50, o: string = '...') => {\n v = String(v)\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v: string, l: number = 15, o: string = '...') => {\n const arr = v.split(/\\s+/)\n let ret = arr.slice(0, l).join(' ')\n if (arr.length >= l) ret += o\n return ret\n }\n} as {[key: string]: FilterImpl}\n","export default {\n 'abs': (v: number) => Math.abs(v),\n 'ceil': (v: number) => Math.ceil(v),\n 'divided_by': (v: number, arg: number) => v / arg,\n 'floor': (v: number) => Math.floor(v),\n 'minus': bindFixed((v: number, arg: number) => v - arg),\n 'modulo': bindFixed((v: number, arg: number) => v % arg),\n 'round': (v: number, arg: number = 0) => {\n const amp = Math.pow(10, arg)\n return Math.round(v * amp) / amp\n },\n 'plus': bindFixed((v: number, arg: number) => Number(v) + Number(arg)),\n 'times': (v: number, arg: number) => v * arg\n}\n\nfunction getFixed (v: number) {\n const p = String(v).split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction bindFixed (cb: (v: number, arg: number) => number) {\n return (l: number, r: number) => {\n const f = Math.max(getFixed(l), getFixed(r))\n return cb(l, r).toFixed(f)\n }\n}\n","export default {\n 'url_decode': (x: string) => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': (x: string) => x.split(' ').map(encodeURIComponent).join('+')\n}\n","import { last } from 'src/util/underscore'\n\nexport default {\n 'join': (v: any[], arg: string) => v.join(arg === undefined ? ' ' : arg),\n 'last': (v: T[]): T => last(v),\n 'first': (v: T[]): T => v[0],\n 'map': (arr: {[key: string]: T1}[], arg: string): T1[] => arr.map(v => v[arg]),\n 'reverse': (v: any[]) => v.reverse(),\n 'sort': (v: T[], arg: (lhs: T, rhs: T) => number) => v.sort(arg),\n 'size': (v: string | any[]) => v.length,\n 'concat': (v: T1[], arg: T2[] | T2): Array => Array.prototype.concat.call(v, arg),\n 'slice': (v: T[], begin: number, length: number): T[] => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'uniq': function (arr: T[]): T[] {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(String(val))) return false\n u[String(val)] = true\n return true\n })\n }\n}\n","import { padStart } from './underscore'\n\nconst monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst monthNamesShort = monthNames.map(abbr)\nconst dayNamesShort = dayNames.map(abbr)\nconst suffixes = {\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n 'default': 'th'\n}\n\nfunction abbr (str: string) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d: Date) {\n const feb = _date.isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n },\n\n getDayOfYear: function (d: Date) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += _date.daysInMonth(d)[i]\n }\n return num + d.getDate()\n },\n\n getWeekOfYear: function (d: Date, startDay: number) {\n // Skip to startDay of this week\n const now = this.getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return padStart(String(Math.floor((now - then) / 7) + 1), 2, '0')\n },\n\n isLeapYear: function (d: Date) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d: Date) {\n const str = d.getDate().toString()\n const index = parseInt(str.slice(-1))\n return suffixes[index] || suffixes['default']\n },\n\n century: function (d: Date) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst formatCodes = {\n a: function (d: Date) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d: Date) {\n return dayNames[d.getDay()]\n },\n b: function (d: Date) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d: Date) {\n return monthNames[d.getMonth()]\n },\n c: function (d: Date) {\n return d.toLocaleString()\n },\n C: function (d: Date) {\n return _date.century(d)\n },\n d: function (d: Date) {\n return padStart(d.getDate(), 2, '0')\n },\n e: function (d: Date) {\n return padStart(d.getDate(), 2)\n },\n H: function (d: Date) {\n return padStart(d.getHours(), 2, '0')\n },\n I: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2, '0')\n },\n j: function (d: Date) {\n return padStart(_date.getDayOfYear(d), 3, '0')\n },\n k: function (d: Date) {\n return padStart(d.getHours(), 2)\n },\n l: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2)\n },\n L: function (d: Date) {\n return padStart(d.getMilliseconds(), 3, '0')\n },\n m: function (d: Date) {\n return padStart(d.getMonth() + 1, 2, '0')\n },\n M: function (d: Date) {\n return padStart(d.getMinutes(), 2, '0')\n },\n p: function (d: Date) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d: Date) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d: Date) {\n return _date.getSuffix(d)\n },\n s: function (d: Date) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d: Date) {\n return padStart(d.getSeconds(), 2, '0')\n },\n u: function (d: Date) {\n return d.getDay() || 7\n },\n U: function (d: Date) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d: Date) {\n return d.getDay()\n },\n W: function (d: Date) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d: Date) {\n return d.toLocaleDateString()\n },\n X: function (d: Date) {\n return d.toLocaleTimeString()\n },\n y: function (d: Date) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d: Date) {\n return d.getFullYear()\n },\n z: function (d: Date) {\n const tz = d.getTimezoneOffset() / 60 * 100\n return (tz > 0 ? '-' : '+') + padStart(String(Math.abs(tz)), 4, '0')\n },\n '%': function () {\n return '%'\n }\n};\n(formatCodes as any).h = formatCodes.b;\n(formatCodes as any).N = formatCodes.L\n\nexport default function (d: Date, format: string) {\n let output = ''\n let remaining = format\n\n while (true) {\n const r = /%./g\n const results = r.exec(remaining)\n\n // No more format codes. Add the remaining text and return\n if (!results) {\n return output + remaining\n }\n\n // Add the preceding text\n output += remaining.slice(0, r.lastIndex - 2)\n remaining = remaining.slice(r.lastIndex)\n\n // Add the format code\n const ch = results[0].charAt(1)\n const func = formatCodes[ch]\n output += func ? func(d) : '%' + ch\n }\n}\n","import strftime from 'src/util/strftime'\nimport { isString } from 'src/util/underscore'\n\nexport default {\n 'date': (v: string | Date, arg: string) => {\n let date = v\n if (v === 'now') {\n date = new Date()\n } else if (isString(v)) {\n date = new Date(v)\n }\n return isValidDate(date) ? strftime(date, arg) : v\n }\n}\n\nfunction isValidDate (date: any): date is Date {\n return date instanceof Date && !isNaN(date.getTime())\n}\n","import { isTruthy } from 'src/render/syntax'\n\nexport default {\n 'default': (v: T1, arg: T2): T1 | T2 => isTruthy(v) ? v : arg\n}\n","import html from './html'\nimport str from './string'\nimport math from './math'\nimport url from './url'\nimport array from './array'\nimport date from './date'\nimport obj from './object'\n\nexport default { ...html, ...str, ...math, ...url, ...date, ...obj, ...array }\n","import Scope from './scope/scope'\nimport * as Types from './types'\nimport fs from 'src/fs'\nimport * as _ from './util/underscore'\nimport ITemplate from './template/itemplate'\nimport Tokenizer from './parser/tokenizer'\nimport Render from './render/render'\nimport Tag from './template/tag/tag'\nimport Filter from './template/filter/filter'\nimport Parser from './parser/parser'\nimport ITagImplOptions from './template/tag/itag-impl-options'\nimport Value from './template/value'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './render/syntax'\nimport builtinTags from './builtin/tags'\nimport builtinFilters from './builtin/filters'\nimport { LiquidOptions, NormalizedFullOptions, applyDefault, normalize } from './liquid-options'\nimport { FilterImpl } from './template/filter/filter-impl'\n\nexport default class Liquid {\n public options: NormalizedFullOptions\n public renderer: Render\n public parser: Parser\n private cache: object = {}\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n this.options = applyDefault(normalize(opts))\n this.parser = new Parser(this)\n this.renderer = new Render()\n this.tokenizer = new Tokenizer(this.options)\n\n _.forOwn(builtinTags, (conf, name) => this.registerTag(name, conf))\n _.forOwn(builtinFilters, (handler, name) => this.registerFilter(name, handler))\n }\n parse (html: string, filepath?: string) {\n const tokens = this.tokenizer.tokenize(html, filepath)\n return this.parser.parse(tokens)\n }\n render (tpl: Array, ctx?: object, opts?: LiquidOptions) {\n const options = { ...this.options, ...normalize(opts) }\n const scope = new Scope(ctx, options)\n return this.renderer.renderTemplates(tpl, scope)\n }\n async parseAndRender (html: string, ctx?: object, opts?: LiquidOptions) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n }\n async getTemplate (file: string, opts?: LiquidOptions) {\n const options = normalize(opts)\n const roots = options.root ? [...options.root, ...this.options.root] : this.options.root\n const paths = roots.map(root => fs.resolve(root, file, this.options.extname))\n\n for (const filepath of paths) {\n if (!(await fs.exists(filepath))) continue\n\n if (this.options.cache && this.cache[filepath]) return this.cache[filepath]\n const value = this.parse(await fs.readFile(filepath), filepath)\n if (this.options.cache) this.cache[filepath] = value\n return value\n }\n\n const err = new Error('ENOENT') as any\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`\n err.code = 'ENOENT'\n throw err\n }\n async renderFile (file: string, ctx?: object, opts?: LiquidOptions) {\n const options = normalize(opts)\n const templates = await this.getTemplate(file, options)\n return this.render(templates, ctx, opts)\n }\n evalValue (str: string, scope: Scope) {\n return new Value(str, this.options.strict_filters).value(scope)\n }\n registerFilter (name: string, filter: FilterImpl) {\n return Filter.register(name, filter)\n }\n registerTag (name: string, tag: ITagImplOptions) {\n return Tag.register(name, tag)\n }\n plugin (plugin: (this: Liquid, L: typeof Liquid) => void) {\n return plugin.call(this, Liquid)\n }\n express () {\n const self = this\n return function (this: any, filePath: string, ctx: object, cb: (err: Error | null, html?: string) => void) {\n const opts = { root: this.root }\n self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb)\n }\n }\n static default = Liquid\n static isTruthy = isTruthy\n static isFalsy = isFalsy\n static evalExp = evalExp\n static evalValue = evalValue\n static Types = Types\n}\n"],"names":["tslib_1.__extends","_\r\n .range","_.padStart","_.isArray","_.isString","BlockMode","_.last","_.isObject","_.isNil","_.isFunction","last","range","value","lexical.tagLine","operators","lexical.operators","lexical.quoteBalanced","lexical.rangeLine","ParseState","Value","HTML","re","hash","rValue","staticFileRE","_.forOwn","builtinTags"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAAA,IAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAA;IACvC,IAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAA;IAEzC;;;;;AAKA,aAAgB,QAAQ,CAAE,KAAU;QAClC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAA;IAChD,CAAC;AAED,aAAgB,UAAU,CAAE,KAAU;QACpC,OAAO,OAAO,KAAK,KAAK,UAAU,CAAA;IACpC,CAAC;AAID,aAUgB,SAAS,CAAE,KAAU;QACnC,IAAI,KAAK,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAA;QAC3B,IAAI,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAA;QACpE,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;YAAE,OAAO,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;QAClE,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC,IAAI,EAAE,CAAA;QAC/C,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,eAAe,CAAC,KAAK,CAAC,CAAA;QACjF,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;QACvD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,SAAS,eAAe,CAAE,KAAU;QAClC,IAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,UAAC,GAAG,EAAE,KAAK;YACtC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACnB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;oBAC/B,OAAM;iBACP;gBACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;aAClB;YACD,OAAO,KAAK,CAAA;SACb,CAAC,CAAA;IACJ,CAAC;AAED,aAAgB,MAAM,CAAyC,KAAS;QACtE,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC7B,CAAC;AAED,aAAgB,KAAK,CAAE,KAAU;QAC/B,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAA;IAC9C,CAAC;AAED,aAAgB,OAAO,CAAE,KAAU;;QAEjC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,gBAAgB,CAAA;IAC/C,CAAC;AAED,IAOA;;;;;;;;AAQA,aAAgB,MAAM,CACpB,MAAsC,EACtC,QAA4E;QAE5E,MAAM,GAAG,MAAM,IAAI,EAAE,CAAA;QACrB,KAAK,IAAM,CAAC,IAAI,MAAM,EAAE;YACtB,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;gBAC5B,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,KAAK;oBAAE,MAAK;aACpD;SACF;QACD,OAAO,MAAM,CAAA;IACf,CAAC;AAID,aAAgB,IAAI,CAAE,GAAmB;QACvC,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC5B,CAAC;IAED;;;;;;AAMA,aAAgB,QAAQ,CAAE,KAAU;QAClC,IAAM,IAAI,GAAG,OAAO,KAAK,CAAA;QACzB,OAAO,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,UAAU,CAAC,CAAA;IACrE,CAAC;IAED;;;;;;;;AAQA,aAAgB,KAAK,CAAE,KAAa,EAAE,IAAa,EAAE,IAAa;QAChE,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,IAAI,GAAG,KAAK,CAAA;YACZ,KAAK,GAAG,CAAC,CAAA;SACV;QACD,IAAI,GAAG,IAAI,IAAI,CAAC,CAAA;QAEhB,IAAM,GAAG,GAAa,EAAE,CAAA;QACxB,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE;YACvC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;SACZ;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;AAED,aAAgB,QAAQ,CAAE,GAAQ,EAAE,MAAc,EAAE,EAAgB;QAAhB,mBAAA,EAAA,QAAgB;QAClE,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QACjB,IAAI,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,MAAM,CAAA;QAC3B,OAAO,CAAC,EAAE,GAAG,CAAC;YAAE,GAAG,GAAG,EAAE,GAAG,GAAG,CAAA;QAC9B,OAAO,GAAG,CAAA;IACZ,CAAC;;ICpID;QAAmCA,+BAAK;QAGtC,qBAAa,GAAU,EAAE,KAAY;YAArC,YACE,kBAAM,GAAG,CAAC,OAAO,CAAC,SAGnB;YAFC,KAAI,CAAC,aAAa,GAAG,GAAG,CAAA;YACxB,KAAI,CAAC,KAAK,GAAG,KAAK,CAAA;;SACnB;QACS,4BAAM,GAAhB;YACE,IAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAA;YAC9B,IAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACrC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;YACjD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,OAAO;gBACxC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,GAAG,GAAG,CAAC,KAAK,CAAA;SAC5C;QACH,kBAAC;IAAD,CAfA,CAAmC,KAAK,GAevC;IAED;QAAuCA,qCAAW;QAChD,2BAAa,OAAe,EAAE,KAAY;YAA1C,YACE,kBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,SAGjC;YAFC,KAAI,CAAC,IAAI,GAAG,mBAAmB,CAAA;YAC/B,iBAAM,MAAM,YAAE,CAAA;;SACf;QACH,wBAAC;IAAD,CANA,CAAuC,WAAW,GAMjD;IAED;QAAgCA,8BAAW;QACzC,oBAAa,GAAU,EAAE,KAAY;YAArC,YACE,kBAAM,GAAG,EAAE,KAAK,CAAC,SAIlB;YAHC,KAAI,CAAC,IAAI,GAAG,YAAY,CAAA;YACxB,KAAI,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAA;YAC1B,iBAAM,MAAM,YAAE,CAAA;;SACf;QACH,iBAAC;IAAD,CAPA,CAAgC,WAAW,GAO1C;IAED;QAAiCA,+BAAW;QAC1C,qBAAa,GAAU,EAAE,GAAc;YAAvC,YACE,kBAAM,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,SAItB;YAHC,KAAI,CAAC,IAAI,GAAG,aAAa,CAAA;YACzB,KAAI,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAA;YAC1B,iBAAM,MAAM,YAAE,CAAA;;SACf;QACH,kBAAC;IAAD,CAPA,CAAiC,WAAW,GAO3C;IAED;QAAsCA,oCAAK;QAEzC,0BAAa,OAAe;YAA5B,YACE,kBAAM,OAAO,CAAC,SAGf;YALD,kBAAY,GAAW,EAAE,CAAA;YAGvB,KAAI,CAAC,IAAI,GAAG,kBAAkB,CAAA;YAC9B,KAAI,CAAC,OAAO,GAAG,OAAO,GAAG,EAAE,CAAA;;SAC5B;QACH,uBAAC;IAAD,CAPA,CAAsC,KAAK,GAO1C;IAED;QAAoCA,kCAAK;QACvC,wBAAa,OAAe;YAA5B,YACE,kBAAM,OAAO,CAAC,SAGf;YAFC,KAAI,CAAC,IAAI,GAAG,gBAAgB,CAAA;YAC5B,KAAI,CAAC,OAAO,GAAG,OAAO,GAAG,EAAE,CAAA;;SAC5B;QACH,qBAAC;IAAD,CANA,CAAoC,KAAK,GAMxC;IAED,SAAS,SAAS,CAAE,KAAY;QAC9B,IAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACrC,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;QACzC,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;QAElD,IAAM,OAAO,GAAGC,KACR,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC;aACrB,GAAG,CAAC,UAAA,UAAU;YACb,IAAM,SAAS,GAAG,CAAC,UAAU,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,GAAG,KAAK,CAAA;YAC7D,IAAM,GAAG,GAAGC,QAAU,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAA;YAC9D,IAAM,IAAI,GAAG,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAA;YAClC,OAAO,KAAG,SAAS,GAAG,GAAG,UAAK,IAAM,CAAA;SACrC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAA;QAEb,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,SAAS,SAAS,CAAE,GAAW,EAAE,KAAY;QAC3C,IAAI,KAAK,CAAC,IAAI;YAAE,GAAG,IAAI,YAAU,KAAK,CAAC,IAAM,CAAA;QAC7C,GAAG,IAAI,YAAU,KAAK,CAAC,IAAI,cAAS,KAAK,CAAC,GAAK,CAAA;QAC/C,OAAO,GAAG,CAAA;IACZ,CAAC;;qBCpFwB,SAAc,EAAE,OAAgB;QACvD,IAAI,CAAC,SAAS,EAAE;YACd,OAAO,GAAG,OAAO,IAAI,YAAU,SAAS,gBAAa,CAAA;YACrD,MAAM,IAAI,cAAc,CAAC,OAAO,CAAC,CAAA;SAClC;IACH,CAAC;;ICPD;IAyDA,IAAM,cAAc,GAA0B;QAC5C,IAAI,EAAE,CAAC,GAAG,CAAC;QACX,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,EAAE;QACX,eAAe,EAAE,IAAI;QACrB,cAAc,EAAE,KAAK;QACrB,aAAa,EAAE,KAAK;QACpB,iBAAiB,EAAE,KAAK;QACxB,gBAAgB,EAAE,KAAK;QACvB,MAAM,EAAE,IAAI;QACZ,kBAAkB,EAAE,IAAI;QACxB,mBAAmB,EAAE,IAAI;QACzB,qBAAqB,EAAE,IAAI;QAC3B,sBAAsB,EAAE,IAAI;QAC5B,cAAc,EAAE,KAAK;QACrB,gBAAgB,EAAE,KAAK;KACxB,CAAA;AAED,aAAgB,SAAS,CAAE,OAAuB;QAChD,OAAO,GAAG,OAAO,IAAI,EAAE,CAAA;QACvB,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;YAClC,OAAO,CAAC,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;SAClD;QACD,OAAO,OAA4B,CAAA;IACrC,CAAC;AAED,aAAgB,YAAY,CAAE,OAA2B;QACvD,oBAAY,cAAc,EAAK,OAAO,EAAE;IAC1C,CAAC;IAED,SAAS,oBAAoB,CAAE,KAAU;QACvC,IAAIC,OAAS,CAAC,KAAK,CAAC;YAAE,OAAO,KAAiB,CAAA;QAC9C,IAAIC,QAAU,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,KAAe,CAAC,CAAA;QAC/C,OAAO,EAAE,CAAA;IACX,CAAC;;IC3FD,IAAK,SAKJ;IALD,WAAK,SAAS;;QAEZ,6CAAM,CAAA;;QAEN,2CAAK,CAAA;IACP,CAAC,EALI,SAAS,KAAT,SAAS,QAKb;AAED,sBAAe,SAAS,CAAA;;ICAxB;QAME,eAAa,GAAgB,EAAE,IAA4B;YAA9C,oBAAA,EAAA,QAAgB;YAH7B,WAAM,GAAW,EAAE,CAAA;YACnB,WAAM,GAA4B,EAAE,CAAA;YACpC,cAAS,GAAcC,WAAS,CAAC,MAAM,CAAA;YAErC,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;YAC9B,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAA;SAC5B;QACD,sBAAM,GAAN;YACE,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,GAAG,IAAK,OAAA,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,GAAA,EAAE,EAAE,CAAC,CAAA;SAClE;QACD,mBAAG,GAAH,UAAK,IAAY;YAAjB,iBAIC;YAHC,IAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;YAC1C,IAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAIC,IAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACpE,OAAO,KAAK,CAAC,MAAM,CAAC,UAAC,KAAK,EAAE,GAAG,IAAK,OAAA,KAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,GAAA,EAAE,KAAK,CAAC,CAAA;SAC1E;QACD,mBAAG,GAAH,UAAK,IAAY,EAAE,CAAM;YACvB,IAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;YAC1C,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAIA,IAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAClE,KAAK,CAAC,IAAI,CAAC,UAAC,GAAG,EAAE,CAAC;gBAChB,IAAI,CAACC,QAAU,CAAC,KAAK,CAAC,EAAE;oBACtB,OAAO,IAAI,CAAA;iBACZ;gBACD,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC1B,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;oBACd,OAAO,IAAI,CAAA;iBACZ;gBACD,IAAI,SAAS,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE;oBAC5B,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;iBAChB;gBACD,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;gBAClB,OAAO,KAAK,CAAA;aACb,CAAC,CAAA;SACH;QACD,uBAAO,GAAP,UAAS,GAAW;YAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;SAClC;QACD,oBAAI,GAAJ,UAAM,GAAW;YACf,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;SAC/B;QACD,mBAAG,GAAH,UAAK,GAAY;YACf,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;gBACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAA;aAC3B;YACD,IAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,KAAK,GAAG,GAAA,CAAC,CAAA;YACzD,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;gBACZ,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC,CAAA;aACnD;YACD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;SACrC;QACD,8BAAc,GAAd,UAAgB,GAAW,EAAE,MAAoD;YAApD,uBAAA,EAAA,uBAAgD,OAAA,IAAI,GAAA;YAC/E,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;gBAClD,IAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;gBAClC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;oBAAE,SAAQ;gBAChC,IAAI,GAAG,IAAI,SAAS,EAAE;oBACpB,OAAO,SAAS,CAAA;iBACjB;aACF;YACD,OAAO,IAAI,CAAA;SACZ;QACO,4BAAY,GAApB,UAAsB,GAAa,EAAE,GAAW;YAC9C,IAAI,GAAG,CAAA;YACP,IAAIC,KAAO,CAAC,GAAG,CAAC,EAAE;gBAChB,GAAG,GAAG,SAAS,CAAA;aAChB;iBAAM;gBACL,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;gBACnB,GAAG,GAAG,GAAG,KAAK,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;gBAC/C,IAAIC,UAAY,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE;oBAC3C,GAAG,GAAG,GAAG,CAAC,qBAAsB,CAAC,GAAG,CAAC,CAAA;iBACtC;aACF;YACD,IAAID,KAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC9C,MAAM,IAAI,SAAS,CAAC,yBAAuB,GAAK,CAAC,CAAA;aAClD;YACD,OAAO,GAAG,CAAA;SACX;;;;;;;;;QAUD,iCAAiB,GAAjB,UAAmB,GAAW;YAC5B,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;YACjB,IAAM,GAAG,GAAa,EAAE,CAAA;YACxB,IAAI,IAAI,GAAG,EAAE,CAAA;YACb,IAAI,CAAC,CAAA;YACL,IAAI,CAAC,GAAG,CAAC,CAAA;YACT,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE;gBACrB,QAAQ,GAAG,CAAC,CAAC,CAAC;oBACZ,KAAK,GAAG;wBACN,IAAI,EAAE,CAAA;wBAEN,IAAM,SAAS,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;wBAC5B,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;4BAC1B,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;4BACjC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAc,SAAS,UAAK,GAAK,CAAC,CAAA;4BACnD,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;4BAC1B,IAAI,EAAE,CAAA;4BACN,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;yBACV;6BAAM;4BACL,CAAC,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;4BACjC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,oBAAkB,GAAK,CAAC,CAAA;4BACzC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;4BAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gCAC5B,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;6BAC9B;4BACD,IAAI,EAAE,CAAA;4BACN,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;yBACV;wBACD,MAAK;oBACP,KAAK,GAAG;wBACN,IAAI,EAAE,CAAA;wBACN,CAAC,EAAE,CAAA;wBACH,MAAK;oBACP;wBACE,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAA;wBACd,CAAC,EAAE,CAAA;iBACN;aACF;YACD,IAAI,EAAE,CAAA;YAEN,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;gBACf,MAAM,IAAI,SAAS,CAAC,oBAAiB,GAAG,OAAG,CAAC,CAAA;aAC7C;YACD,OAAO,GAAG,CAAA;YAEV,SAAS,IAAI;gBACX,IAAI,IAAI,CAAC,MAAM;oBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC/B,IAAI,GAAG,EAAE,CAAA;aACV;SACF;QACH,YAAC;IAAD,CAAC,IAAA;IAED,SAAS,QAAQ,CAAE,GAAa;QAC9B,IAAIC,UAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YAC/B,OAAO,GAAG,CAAC,SAAS,EAAE,CAAA;SACvB;QACD,IAAIA,UAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC9B,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAA;SACtB;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,SAAS,QAAQ,CAAE,GAAa;QAC9B,IAAI,CAACD,KAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,GAAG,CAAC,IAAI,CAAA;QACvC,IAAIL,OAAS,CAAC,GAAG,CAAC,IAAIC,QAAU,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC,MAAM,CAAA;QACxD,OAAO,GAAG,CAAC,IAAI,CAAA;IACjB,CAAC;IAED,SAAS,iBAAiB,CAAE,GAAW,EAAE,KAAa;QACpD,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;gBAClB,KAAK,EAAE,CAAA;aACR;YACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;gBAClB,KAAK,EAAE,CAAA;gBACP,IAAI,KAAK,KAAK,CAAC,EAAE;oBACf,OAAO,CAAC,CAAA;iBACT;aACF;SACF;QACD,OAAO,CAAC,CAAC,CAAA;IACX,CAAC;;IChLD;QAAA;SAA4B;QAAD,mBAAC;IAAD,CAAC,IAAA;IAC5B;QAAA;SAA2B;QAAD,kBAAC;IAAD,CAAC,IAAA;IAC3B;QAAA;SAA8B;QAAD,qBAAC;IAAD,CAAC,IAAA;IAC9B;QAAA;SAA8B;QAAD,qBAAC;IAAD,CAAC,IAAA;;;;;;;;;;;;;;;ICA9B,SAAS,UAAU,CAAE,IAAY,EAAE,IAAY;QAC7C,IAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAC3C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAEhB,IAAM,IAAI,GAAG,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QACrD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QAExC,IAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;QACrC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAA;QACb,IAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAA;QACvB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QAEtB,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,SAAS,OAAO,CAAE,IAAY,EAAE,QAAgB,EAAE,GAAW;QAC3D,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG;YAAE,IAAI,IAAI,GAAG,CAAA;QAClD,IAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QACtC,OAAO,GAAG,CAAC,OAAO,CAAC,2BAA2B,EAAE,UAAC,GAAG,EAAE,MAAM,EAAE,IAAI;YAChE,IAAMM,OAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;YAClC,IAAI,QAAQ,CAAC,IAAI,CAACA,OAAI,CAAC;gBAAE,OAAO,GAAG,CAAA;YACnC,OAAO,MAAM,GAAG,IAAI,GAAG,GAAG,CAAA;SAC3B,CAAC,CAAA;IACJ,CAAC;IAED,SAAe,QAAQ,CAAE,GAAW;;;gBAClC,sBAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;wBACjC,IAAM,GAAG,GAAG,IAAI,cAAc,EAAE,CAAA;wBAChC,GAAG,CAAC,MAAM,GAAG;4BACX,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;gCACzC,OAAO,CAAC,GAAG,CAAC,YAAsB,CAAC,CAAA;6BACpC;iCAAM;gCACL,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAA;6BAClC;yBACF,CAAA;wBACD,GAAG,CAAC,OAAO,GAAG;4BACZ,MAAM,CAAC,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC,CAAA;yBACtE,CAAA;wBACD,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;wBACpB,GAAG,CAAC,IAAI,EAAE,CAAA;qBACX,CAAC,EAAA;;;KACH;IAED,SAAe,MAAM;;;gBACnB,sBAAO,IAAI,EAAA;;;KACZ;AAED,aAAe,EAAE,QAAQ,UAAA,EAAE,OAAO,SAAA,EAAE,MAAM,QAAA,EAAS,CAAA;;aC7C3B,cAAc,CAAE,MAAe,EAAE,OAA8B;QACrF,OAAO,cAAK,MAAM,EAAE,IAAI,IAAK,OAAO,CAAE,CAAA;QACtC,IAAI,KAAK,GAAG,KAAK,CAAA;QAEjB,MAAM,CAAC,OAAO,CAAC,UAAC,KAAY,EAAE,CAAS;YACrC,IAAI,cAAc,CAAC,KAAuB,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE;gBAC3D,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;aACxC;YAED,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAK,KAAkB,CAAC,IAAI,KAAK,KAAK;gBAAE,KAAK,GAAG,IAAI,CAAA;YAC5E,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAK,KAAkB,CAAC,IAAI,KAAK,QAAQ;gBAAE,KAAK,GAAG,KAAK,CAAA;YAEhF,IAAI,eAAe,CAAC,KAAuB,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE;gBAC5D,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;aACzC;SACF,CAAC,CAAA;IACJ,CAAC;IAED,SAAS,cAAc,CAAE,KAAqB,EAAE,KAAc,EAAE,OAA8B;QAC5F,IAAI,KAAK;YAAE,OAAO,KAAK,CAAA;QACvB,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,aAAa,CAAA;QACxE,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAA;IAChF,CAAC;IAED,SAAS,eAAe,CAAE,KAAqB,EAAE,KAAc,EAAE,OAA8B;QAC7F,IAAI,KAAK;YAAE,OAAO,KAAK,CAAA;QACvB,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,cAAc,CAAA;QAC1E,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,iBAAiB,CAAA;IAClF,CAAC;IAED,SAAS,QAAQ,CAAE,KAAY,EAAE,MAAe;QAC9C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,OAAM;QAE3C,IAAM,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,YAAY,CAAA;QAC7C,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAC9C,CAAC;IAED,SAAS,SAAS,CAAE,KAAY,EAAE,MAAe;QAC/C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,OAAM;QAE3C,IAAM,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,eAAe,CAAA;QACjD,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAC/C,CAAC;;IC/CD;QAQE,eAAa,GAAW,EAAE,KAAa,EAAE,IAAY,EAAE,GAAW,EAAE,IAAa;YAPjF,SAAI,GAAW,QAAQ,CAAA;YAQrB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;YACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;YAChB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;YACd,IAAI,CAAC,KAAK,GAAG,GAAG,CAAA;YAChB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;YAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;SACjB;QACH,YAAC;IAAD,CAAC,IAAA;;ICdD;QAAuCV,6BAAK;QAC1C,mBAAa,GAAW,EAAE,KAAa,EAAE,IAAY,EAAE,GAAW,EAAE,IAAa;YAAjF,YACE,kBAAM,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,SAGnC;YAFC,KAAI,CAAC,IAAI,GAAG,MAAM,CAAA;YAClB,KAAI,CAAC,KAAK,GAAG,GAAG,CAAA;;SACjB;QACH,gBAAC;IAAD,CANA,CAAuC,KAAK,GAM3C;;ICLD;QAA4CA,kCAAK;QAG/C,wBAAa,GAAW,EAAE,KAAa,EAAE,KAAa,EAAE,IAAY,EAAE,GAAW,EAAE,IAAa;YAAhG,YACE,kBAAM,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,SASnC;YARC,KAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAA;YAChC,KAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAA;YACpC,KAAI,CAAC,KAAK,GAAG,KAAK;iBACf,KAAK,CACJ,KAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,EACrB,KAAI,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CACnC;iBACA,IAAI,EAAE,CAAA;;SACV;QACH,qBAAC;IAAD,CAdA,CAA4C,KAAK,GAchD;;ICjBD;IACA,IAAM,YAAY,GAAG,SAAS,CAAA;IAC9B,IAAM,YAAY,GAAG,SAAS,CAAA;AAC9B,IAAO,IAAM,MAAM,GAAG,IAAI,MAAM,CAAI,YAAY,CAAC,MAAM,SAAI,YAAY,CAAC,MAAQ,CAAC,CAAA;AACjF,IAAO,IAAM,aAAa,GAAG,IAAI,MAAM,CAAC,QAAM,MAAM,CAAC,MAAM,cAAU,CAAC,CAAA;IAEtE;AACA,IAAO,IAAM,MAAM,GAAG,2BAA2B,CAAA;AACjD,IAAO,IAAM,IAAI,GAAG,YAAY,CAAA;IAEhC;AACA,IAAO,IAAM,UAAU,GAAG,YAAY,CAAA;AACtC,IAAO,IAAM,SAAS,GAAG,IAAI,MAAM,CAAC,WAAS,MAAM,CAAC,MAAM,oBAAiB,CAAC,CAAA;AAC5E,IAAO,IAAM,OAAO,GAAG,IAAI,MAAM,CAAC,QAAM,MAAM,CAAC,MAAM,SAAI,IAAI,CAAC,MAAM,SAAI,MAAM,CAAC,MAAM,MAAG,CAAC,CAAA;AACzF,IAAO,IAAM,QAAQ,GAAG,IAAI,MAAM,CAAI,UAAU,CAAC,MAAM,cAAS,UAAU,CAAC,MAAM,SAAI,SAAS,CAAC,MAAM,OAAI,CAAC,CAAA;IAE1G;AACA,IAAO,IAAM,UAAU,GAAG,IAAI,MAAM,CAAC,QAAM,QAAQ,CAAC,MAAM,SAAI,MAAM,CAAC,MAAM,MAAG,CAAC,CAAA;AAC/E,IAAO,IAAMW,OAAK,GAAG,IAAI,MAAM,CAAC,QAAM,UAAU,CAAC,MAAM,cAAS,UAAU,CAAC,MAAM,QAAK,CAAC,CAAA;AACvF,IAAO,IAAM,YAAY,GAAG,IAAI,MAAM,CAAC,SAAO,UAAU,CAAC,MAAM,gBAAW,UAAU,CAAC,MAAM,SAAM,CAAC,CAAA;AAElG,IAAO,IAAM,KAAK,GAAG,IAAI,MAAM,CAAC,QAAM,QAAQ,CAAC,MAAM,SAAI,OAAO,CAAC,MAAM,SAAIA,OAAK,CAAC,MAAM,MAAG,CAAC,CAAA;IAE3F;AACA,IAAO,IAAM,IAAI,GAAG,IAAI,MAAM,CAAC,QAAM,UAAU,CAAC,MAAM,qBAAgB,KAAK,CAAC,MAAM,MAAG,CAAC,CAAA;AACtF,IAAO,IAAM,WAAW,GAAG,IAAI,MAAM,CAAC,MAAI,UAAU,CAAC,MAAM,mBAAc,KAAK,CAAC,MAAM,MAAG,EAAE,GAAG,CAAC,CAAA;IAE9F;AACA,IAAO,IAAM,OAAO,GAAG,IAAI,MAAM,CAAC,WAAS,UAAU,CAAC,MAAM,2BAAwB,CAAC,CAAA;AACrF,IAEO,IAAM,UAAU,GAAG,IAAI,MAAM,CAAC,MAAI,MAAM,CAAC,MAAM,MAAG,CAAC,CAAA;AAC1D,IAAO,IAAM,SAAS,GAAG,IAAI,MAAM,CAAC,MAAI,YAAY,CAAC,MAAM,MAAG,CAAC,CAAA;AAE/D,IAAO,IAAM,SAAS,GAAG;QACvB,UAAU;QACV,WAAW;QACX,gCAAgC;KACjC,CAAA;;IClCD;QAAsCX,4BAAc;QAGlD,kBAAa,GAAW,EAAEY,QAAa,EAAE,KAAa,EAAE,IAAY,EAAE,GAAW,EAAE,IAAa;YAAhG,YACE,kBAAM,GAAG,EAAEA,QAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,SAQ1C;YAPC,KAAI,CAAC,IAAI,GAAG,KAAK,CAAA;YACjB,IAAM,KAAK,GAAG,KAAI,CAAC,KAAK,CAAC,KAAK,CAACC,OAAe,CAAC,CAAA;YAC/C,IAAI,CAAC,KAAK,EAAE;gBACV,MAAM,IAAI,iBAAiB,CAAC,oBAAoB,EAAE,KAAI,CAAC,CAAA;aACxD;YACD,KAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YACpB,KAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;;SACrB;QACH,eAAC;IAAD,CAbA,CAAsC,cAAc,GAanD;;ICfD;QAAyCb,+BAAc;QACrD,qBAAa,GAAW,EAAE,KAAa,EAAE,KAAa,EAAE,IAAY,EAAE,GAAW,EAAE,IAAa;YAAhG,YACE,kBAAM,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,SAE1C;YADC,KAAI,CAAC,IAAI,GAAG,QAAQ,CAAA;;SACrB;QACH,kBAAC;IAAD,CALA,CAAyC,cAAc,GAKtD;;ICCD,IAAK,UAAgC;IAArC,WAAK,UAAU;QAAG,2CAAI,CAAA;QAAE,+CAAM,CAAA;QAAE,yCAAG,CAAA;IAAC,CAAC,EAAhC,UAAU,KAAV,UAAU,QAAsB;IAErC;QAEE,mBAAa,OAA+B;YAC1C,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;SACrC;QACD,4BAAQ,GAAR,UAAU,KAAa,EAAE,IAAa;YACpC,IAAM,MAAM,GAAY,EAAE,CAAA;YAC1B,IAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAA;YAC5C,IAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAA;YAC7C,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAA;YAClD,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAA;YACnD,IAAI,CAAC,GAAG,CAAC,CAAA;YACT,IAAI,OAAO,GAAG,CAAC,CAAA;YACf,IAAI,KAAK,GAAG,UAAU,CAAC,IAAI,CAAA;YAC3B,IAAI,MAAM,GAAG,EAAE,CAAA;YACf,IAAI,SAAS,GAAG,CAAC,CAAA;YACjB,IAAI,IAAI,GAAG,CAAC,CAAA;YACZ,IAAI,GAAG,GAAG,CAAC,CAAA;YAEX,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE;gBACvB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;oBACrB,OAAO,EAAE,CAAA;oBACT,SAAS,GAAG,CAAC,GAAG,CAAC,CAAA;iBAClB;gBACD,IAAI,KAAK,KAAK,UAAU,CAAC,IAAI,EAAE;oBAC7B,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,OAAO,EAAE;wBAC/C,IAAI,MAAM;4BAAE,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAA;wBACtE,MAAM,GAAG,OAAO,CAAA;wBAChB,IAAI,GAAG,OAAO,CAAA;wBACd,GAAG,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAA;wBACvB,CAAC,IAAI,OAAO,CAAC,MAAM,CAAA;wBACnB,KAAK,GAAG,UAAU,CAAC,MAAM,CAAA;wBACzB,SAAQ;qBACT;yBAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;wBAChD,IAAI,MAAM;4BAAE,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAA;wBACtE,MAAM,GAAG,IAAI,CAAA;wBACb,IAAI,GAAG,OAAO,CAAA;wBACd,GAAG,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAA;wBACvB,CAAC,IAAI,IAAI,CAAC,MAAM,CAAA;wBAChB,KAAK,GAAG,UAAU,CAAC,GAAG,CAAA;wBACtB,SAAQ;qBACT;iBACF;qBAAM,IAAI,KAAK,KAAK,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,OAAO,EAAE;oBACrF,MAAM,IAAI,OAAO,CAAA;oBACjB,MAAM,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAA;oBAC3G,CAAC,IAAI,OAAO,CAAC,MAAM,CAAA;oBACnB,MAAM,GAAG,EAAE,CAAA;oBACX,IAAI,GAAG,OAAO,CAAA;oBACd,GAAG,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAA;oBACvB,KAAK,GAAG,UAAU,CAAC,IAAI,CAAA;oBACvB,SAAQ;iBACT;qBAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;oBAChD,MAAM,IAAI,IAAI,CAAA;oBACd,MAAM,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAA;oBAClG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAA;oBAChB,MAAM,GAAG,EAAE,CAAA;oBACX,IAAI,GAAG,OAAO,CAAA;oBACd,GAAG,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAA;oBACvB,KAAK,GAAG,UAAU,CAAC,IAAI,CAAA;oBACvB,SAAQ;iBACT;gBACD,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAA;aACrB;YACD,IAAI,KAAK,KAAK,UAAU,CAAC,IAAI,EAAE;gBAC7B,IAAM,CAAC,GAAG,KAAK,KAAK,UAAU,CAAC,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAA;gBACxD,IAAM,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,MAAM,CAAA;gBACrE,MAAM,IAAI,iBAAiB,CACtB,CAAC,WAAK,GAAG,kBAAc,EAC1B,IAAI,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAC1C,CAAA;aACF;YACD,IAAI,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAA;YAEtE,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;YACpC,OAAO,MAAM,CAAA;SACd;QACH,gBAAC;IAAD,CAAC,IAAA;;ICjFD;QAAA;SAkBC;QAjBO,gCAAe,GAArB,UAAuB,SAAsB,EAAE,KAAY;;;;;;4BACzD,MAAM,CAAC,KAAK,EAAE,0CAA0C,CAAC,CAAA;4BAErD,IAAI,GAAG,EAAE,CAAA;kCACc,EAAT,uBAAS;;;kCAAT,uBAAS,CAAA;4BAAhB,GAAG;;;;4BAEV,KAAA,IAAI,CAAA;4BAAI,qBAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAA;;4BAA/B,IAAI,GAAJ,KAAQ,SAAuB,CAAA;;;;4BAE/B,IAAI,GAAC,CAAC,IAAI,KAAK,kBAAkB,EAAE;gCACjC,GAAC,CAAC,YAAY,GAAG,IAAI,CAAA;gCACrB,MAAM,GAAC,CAAA;6BACR;4BACD,MAAM,GAAC,CAAC,IAAI,KAAK,aAAa,GAAG,GAAC,GAAG,IAAI,WAAW,CAAC,GAAC,EAAE,GAAG,CAAC,CAAA;;4BAR9C,IAAS,CAAA;;gCAW3B,sBAAO,IAAI,EAAA;;;;SACZ;QACH,aAAC;IAAD,CAAC,IAAA;;IClBD,IAAMc,WAAS,GAAG;QAChB,IAAI,EAAE,UAAC,CAAM,EAAE,CAAM,IAAK,OAAA,CAAC,KAAK,CAAC,GAAA;QACjC,IAAI,EAAE,UAAC,CAAM,EAAE,CAAM,IAAK,OAAA,CAAC,KAAK,CAAC,GAAA;QACjC,GAAG,EAAE,UAAC,CAAM,EAAE,CAAM,IAAK,OAAA,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAA;QAC1D,GAAG,EAAE,UAAC,CAAM,EAAE,CAAM,IAAK,OAAA,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAA;QAC1D,IAAI,EAAE,UAAC,CAAM,EAAE,CAAM,IAAK,OAAA,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,GAAA;QAC5D,IAAI,EAAE,UAAC,CAAM,EAAE,CAAM,IAAK,OAAA,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,GAAA;QAC5D,UAAU,EAAE,UAAC,CAAM,EAAE,CAAM;YACzB,IAAI,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAA;YACpB,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU;gBAAE,OAAO,KAAK,CAAA;YACjD,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;SACzB;QACD,KAAK,EAAE,UAAC,CAAM,EAAE,CAAM,IAAK,OAAA,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAA;QACrD,IAAI,EAAE,UAAC,CAAM,EAAE,CAAM,IAAK,OAAA,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAA;KACrD,CAAA;AAED,aAAgB,OAAO,CAAE,GAAW,EAAE,KAAY;QAChD,MAAM,CAAC,KAAK,EAAE,oCAAoC,CAAC,CAAA;QACnD,IAAM,WAAW,GAAGC,SAAiB,CAAA;QACrC,IAAI,KAAK,CAAA;QACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC3C,IAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;YACjC,IAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAKC,aAAqB,CAAC,MAAM,UAAK,UAAU,CAAC,MAAM,UAAKA,aAAqB,CAAC,MAAM,OAAI,CAAC,CAAA;YACtH,KAAK,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG;gBAC9B,IAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;gBAClC,IAAM,EAAE,GAAGF,WAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;gBACrC,IAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;gBAClC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;aAChB;SACF;QAED,KAAK,KAAK,GAAG,GAAG,CAAC,KAAK,CAACG,SAAiB,CAAC,GAAG;YAC1C,IAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YACtC,IAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YACvC,OAAO,KAAK,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,CAAA;SAC5B;QAED,OAAO,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC9B,CAAC;AAED,aAAgB,SAAS,CAAE,GAAW,EAAE,KAAY;QAClD,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAA;QACrB,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;QAEhB,IAAI,GAAG,KAAK,MAAM;YAAE,OAAO,IAAI,CAAA;QAC/B,IAAI,GAAG,KAAK,OAAO;YAAE,OAAO,KAAK,CAAA;QACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;QAC3C,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACvF,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACvB,CAAC;AAED,aAAgB,QAAQ,CAAE,GAAQ;QAChC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACtB,CAAC;AAED,aAAgB,OAAO,CAAE,GAAQ;QAC/B,OAAO,GAAG,KAAK,KAAK,IAAI,SAAS,KAAK,GAAG,IAAI,GAAG,KAAK,IAAI,CAAA;IAC3D,CAAC;;IC1DD;;;;;;IAMA;QAEE,cAAa,MAAc,EAAE,KAAY;YACvC,IAAI,KAAK,CAAA;YACT,WAAW,CAAC,SAAS,GAAG,CAAC,CAAA;YACzB,QAAQ,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG;gBACzC,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;gBAClB,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;gBAClB,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;aAC9B;SACF;QACH,WAAC;IAAD,CAAC,IAAA;;ICrBD;QAEE,kBAAa,KAAQ;YACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;SACnB;QACH,eAAC;IAAD,CAAC,IAAA;;ICOD;QAAiCjB,uBAAkB;QAKjD,aAAa,KAAe,EAAE,MAAe,EAAE,MAAc;YAA7D,YACE,kBAAM,KAAK,CAAC,SAUb;YATC,KAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;YAEtB,IAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAClC,MAAM,CAAC,IAAI,EAAE,SAAO,KAAK,CAAC,IAAI,eAAY,CAAC,CAAA;YAC3C,KAAI,CAAC,IAAI,GAAG,MAAM,CAA4B,IAAI,CAAC,CAAA;YACnD,KAAI,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;YACzB,IAAI,KAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACnB,KAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;aAC/B;;SACF;QACK,oBAAM,GAAZ,UAAc,KAAY;;;;;;4BAClB,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;4BACvC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;4BACtB,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE;gCACrC,sBAAO,EAAE,EAAA;6BACV;4BACY,qBAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,EAAA;;4BAArC,IAAI,GAAG,SAA8B;4BAC3C,sBAAO,SAAS,CAAC,IAAI,CAAC,EAAA;;;;SACvB;QACM,YAAQ,GAAf,UAAiB,IAAY,EAAE,GAAoB;YACjD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAA;SACtB;QACM,SAAK,GAAZ;YACE,GAAG,CAAC,KAAK,GAAG,EAAE,CAAA;SACf;QA5BM,SAAK,GAAuC,EAAE,CAAA;QA6BvD,UAAC;KAAA,CAhCgC,QAAQ,GAgCxC;;ICxCD;QAME,gBAAa,IAAY,EAAE,IAAc,EAAE,aAAsB;YAC/D,IAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC/B,IAAI,CAAC,IAAI,IAAI,aAAa;gBAAE,MAAM,IAAI,SAAS,CAAC,uBAAqB,IAAM,CAAC,CAAA;YAE5E,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;YAChB,IAAI,CAAC,IAAI,GAAG,IAAI,KAAK,UAAA,CAAC,IAAI,OAAA,CAAC,GAAA,CAAC,CAAA;YAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;SACjB;QACD,uBAAM,GAAN,UAAQ,KAAU,EAAE,KAAY;YAC9B,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,GAAA,CAAC,CAAA;YACxD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,SAAK,IAAI,EAAE,CAAA;SAC/C;QACM,eAAQ,GAAf,UAAiB,IAAY,EAAE,MAAkB;YAC/C,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAA;SAC5B;QACM,YAAK,GAAZ;YACE,MAAM,CAAC,KAAK,GAAG,EAAE,CAAA;SAClB;QAnBc,YAAK,GAAgC,EAAE,CAAA;QAoBxD,aAAC;KAxBD,IAwBC;;ICtBD;QAME,qBAAa,MAAoB,EAAE,UAAsB;YAJjD,aAAQ,GAAwC,EAAE,CAAA;YAClD,kBAAa,GAAY,KAAK,CAAA;YAIpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;YACpB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;SAC7B;QACD,wBAAE,GAAF,UAA6C,IAAY,EAAE,EAAoB;YAC7E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;YACxB,OAAO,IAAI,CAAA;SACZ;QACD,6BAAO,GAAP,UAAuC,KAAa,EAAE,GAAO;YAC3D,IAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;YAC9B,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE;gBAC3B,CAAC,CAAC,GAAG,CAAC,CAAA;gBACN,OAAO,IAAI,CAAA;aACZ;YACD,OAAO,KAAK,CAAA;SACb;QACD,2BAAK,GAAL;YACE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YACrB,IAAI,KAAwB,CAAA;YAC5B,OAAO,CAAC,IAAI,CAAC,aAAa,KAAK,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE;gBAC3D,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;oBAAE,SAAQ;gBAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,SAAkB,KAAM,CAAC,IAAM,EAAE,KAAK,CAAC,EAAE;oBAChF,SAAQ;iBACT;gBACD,IAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;gBACpD,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;aACnC;YACD,IAAI,CAAC,IAAI,CAAC,aAAa;gBAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;YAC5C,OAAO,IAAI,CAAA;SACZ;QACD,0BAAI,GAAJ;YACE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;YACzB,OAAO,IAAI,CAAA;SACZ;QACH,kBAAC;IAAD,CAAC,IAAA;;IC1CD,IAAKkB,YAIJ;IAJD,WAAK,UAAU;QACb,2CAAQ,CAAA;QACR,yDAAe,CAAA;QACf,uDAAc,CAAA;IAChB,CAAC,EAJIA,YAAU,KAAVA,YAAU,QAId;IAED;;;;QAOE,mBAAa,GAAW,EAAE,aAAsB;YALhD,YAAO,GAAkB,EAAE,CAAA;YAMzB,IAAI,MAAM,GAAG,EAAE,CAAA;YACf,IAAI,MAAM,GAAG,EAAE,CAAA;YACf,IAAI,KAAK,GAAGA,YAAU,CAAC,IAAI,CAAA;YAC3B,IAAI,MAAM,GAAG,KAAK,CAAA;YAElB,IAAI,UAAU,GAAG,EAAE,CAAA;YACnB,IAAI,UAAU,GAAa,EAAE,CAAA;YAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,IAAI,MAAM,EAAE;oBACV,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;wBACrB,MAAM,GAAG,EAAE,CAAA;wBACX,MAAM,GAAG,IAAI,CAAA;qBACd;oBACD,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAA;iBACjB;qBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;oBAC5B,IAAI,CAAC,MAAM;wBAAE,SAAQ;;wBAChB,MAAM,GAAG,IAAI,CAAA;iBACnB;qBAAM,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;oBACzB,IAAI,KAAK,KAAKA,YAAU,CAAC,IAAI,EAAE;wBAC7B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;qBACtB;yBAAM;wBACL,IAAI,KAAK,KAAKA,YAAU,CAAC,WAAW;4BAAE,UAAU,GAAG,MAAM,CAAA;;4BACpD,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;wBAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAA;wBACpE,UAAU,GAAG,EAAE,CAAA;wBACf,UAAU,GAAG,EAAE,CAAA;qBAChB;oBACD,KAAK,GAAGA,YAAU,CAAC,WAAW,CAAA;oBAC9B,MAAM,GAAG,EAAE,CAAA;oBACX,MAAM,GAAG,KAAK,CAAA;iBACf;qBAAM,IAAI,KAAK,KAAKA,YAAU,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;oBAC7D,UAAU,GAAG,MAAM,CAAA;oBACnB,KAAK,GAAGA,YAAU,CAAC,UAAU,CAAA;oBAC7B,MAAM,GAAG,EAAE,CAAA;oBACX,MAAM,GAAG,KAAK,CAAA;iBACf;qBAAM,IAAI,KAAK,KAAKA,YAAU,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;oBAC5D,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;oBACvB,MAAM,GAAG,EAAE,CAAA;oBACX,MAAM,GAAG,KAAK,CAAA;iBACf;qBAAM,IAAI,MAAM;oBAAE,SAAQ;qBACtB;oBACH,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM;wBAAE,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;oBAClE,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAA;iBACjB;aACF;YAED,IAAI,MAAM,EAAE;gBACV,IAAI,KAAK,KAAKA,YAAU,CAAC,IAAI;oBAAE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;qBAC/C,IAAI,KAAK,KAAKA,YAAU,CAAC,WAAW;oBAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC,CAAA;qBAC9F;oBACH,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;oBACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAA;iBACrE;aACF;SACF;QACD,yBAAK,GAAL,UAAO,KAAY;YACjB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CACxB,UAAC,IAAI,EAAE,MAAM,IAAK,OAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAA,EAC5C,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;SAChC;QACH,gBAAC;IAAD,CAAC,IAAA;;ICxED;QAAoClB,0BAAqB;QAEvD,gBAAa,KAAkB,EAAE,aAAsB;YAAvD,YACE,kBAAM,KAAK,CAAC,SAEb;YADC,KAAI,CAAC,KAAK,GAAG,IAAImB,SAAK,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA;;SACnD;QACK,uBAAM,GAAZ,UAAc,KAAY;;;;;gCACX,qBAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAA;;4BAApC,IAAI,GAAG,SAA6B;4BAC1C,sBAAO,SAAS,CAAC,IAAI,CAAC,EAAA;;;;SACvB;QACH,aAAC;IAAD,CAVA,CAAoC,QAAQ,GAU3C;;ICbD;QAA6BnB,6BAAmB;QAE9C,mBAAa,KAAgB;YAA7B,YACE,kBAAM,KAAK,CAAC,SAEb;YADC,KAAI,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAA;;SACvB;QACK,0BAAM,GAAZ;;;oBACE,sBAAO,IAAI,CAAC,GAAG,EAAA;;;SAChB;QACH,gBAAC;IAAD,CATA,CAA6B,QAAQ,GASpC;;ICFD;QAGE,gBAAa,MAAc;YACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;SACrB;QACD,sBAAK,GAAL,UAAO,MAAoB;YACzB,IAAI,KAAK,CAAA;YACT,IAAM,SAAS,GAAgB,EAAE,CAAA;YACjC,QAAQ,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG;gBAC/B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;aAC/C;YACD,OAAO,SAAS,CAAA;SACjB;QACD,2BAAU,GAAV,UAAY,KAAY,EAAE,YAA0B;YAClD,IAAI;gBACF,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE;oBACxB,OAAO,IAAI,GAAG,CAAC,KAAiB,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;iBAC7D;gBACD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;oBAC3B,OAAO,IAAI,MAAM,CAAC,KAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;iBAC5E;gBACD,OAAO,IAAIoB,WAAI,CAAC,KAAK,CAAC,CAAA;aACvB;YAAC,OAAO,CAAC,EAAE;gBACV,MAAM,IAAI,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;aAC/B;SACF;QACD,4BAAW,GAAX,UAAa,MAAoB;YAAjC,iBAEC;YADC,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,UAAC,KAAK,EAAE,MAAM,IAAK,OAAA,KAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,GAAA,CAAC,CAAA;SAClF;QACH,aAAC;IAAD,CAAC,IAAA;;IClCD,IAAM,EAAE,GAAG,IAAI,MAAM,CAAC,MAAI,UAAU,CAAC,MAAM,iBAAc,CAAC,CAAA;AAE1D,iBAAe;QACb,KAAK,EAAE,UAAU,KAAe;YAC9B,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAqB,CAAA;YACtD,MAAM,CAAC,KAAK,EAAE,mBAAiB,KAAK,CAAC,GAAK,CAAC,CAAA;YAC3C,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;SACtB;QACD,MAAM,EAAE,UAAU,KAAY;YAC5B,IAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAA;YAC7B,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YACxD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACf,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;SAC3B;KACiB,CAAA;;ICtBpB;;;;;;AAMA,aAAgB,SAAS,CACvB,QAAc,EACd,QAAqE;QAErE,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAC5B,IAAM,MAAM,GAAS,EAAE,CAAA;QACvB,QAAQ,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,GAAG;YAClC,GAAG,GAAG,GAAG;iBACN,IAAI,CAAC,cAAM,OAAA,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAA,CAAC;iBACzC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAA,CAAC,CAAA;SAC7B,CAAC,CAAA;QACF,OAAO,GAAG,CAAC,IAAI,CAAC,cAAM,OAAA,MAAM,GAAA,CAAC,CAAA;IAC/B,CAAC;;ICLD,IAAMC,IAAE,GAAG,IAAI,MAAM,CAAC,OAAK,UAAU,CAAC,MAAM,gBAAa;SACvD,MAAI,KAAK,CAAC,MAAM,MAAG,CAAA;SACnB,YAAU,IAAI,CAAC,MAAM,OAAI,CAAA;QACzB,qBAAqB;SACrB,YAAU,IAAI,CAAC,MAAM,QAAK,CAAA,CAAC,CAAA;AAE7B,cAAgC;QAC9B,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,UAAU,QAAkB,EAAE,YAAqB;YAAnD,iBAqBN;YApBC,IAAM,KAAK,GAAGA,IAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAoB,CAAA;YACvD,MAAM,CAAC,KAAK,EAAE,kBAAgB,QAAQ,CAAC,GAAK,CAAC,CAAA;YAC7C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YACxB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YAC1B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAE1B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;YACnB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;YAEvB,IAAI,CAAC,CAAA;YACL,IAAM,MAAM,GAAgB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;iBACrE,EAAE,CAAC,OAAO,EAAE,cAAM,QAAC,CAAC,GAAG,KAAI,CAAC,SAAS,IAAC,CAAC;iBACvC,EAAE,CAAC,UAAU,EAAE,cAAM,QAAC,CAAC,GAAG,KAAI,CAAC,aAAa,IAAC,CAAC;iBAC9C,EAAE,CAAC,YAAY,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;iBACrC,EAAE,CAAC,UAAU,EAAE,UAAC,GAAc,IAAK,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;iBAC/C,EAAE,CAAC,KAAK,EAAE;gBACT,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;aAClD,CAAC,CAAA;YAEJ,MAAM,CAAC,KAAK,EAAE,CAAA;SACf;QACD,MAAM,EAAE,UAAgB,KAAY,EAAEC,OAAU;;;;;;;4BAC1C,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;4BAEhD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;gCACxB,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;oCACjD,UAAU,GAAG,CAAC,UAAU,CAAa,CAAA;iCACtC;qCAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,EAAE;oCAC/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,CAAyB,CAAA;iCAClG;6BACF;4BACD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;gCAC9C,sBAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,EAAA;6BACvE;4BAEK,MAAM,GAAGA,OAAI,CAAC,MAAM,IAAI,CAAC,CAAA;4BACzB,KAAK,GAAG,CAACA,OAAI,CAAC,KAAK,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,GAAGA,OAAI,CAAC,KAAK,CAAA;4BAEzE,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAA;4BACrD,IAAI,IAAI,CAAC,QAAQ;gCAAE,UAAU,CAAC,OAAO,EAAE,CAAA;4BAEjC,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,UAAC,IAAY,EAAE,CAAS;gCACtD,IAAM,GAAG,GAAG,EAAE,CAAA;gCACd,GAAG,CAAC,KAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;gCACzB,GAAG,CAAC,SAAS,CAAC,GAAG;oCACf,KAAK,EAAE,CAAC,KAAK,CAAC;oCACd,KAAK,EAAE,CAAC,GAAG,CAAC;oCACZ,MAAM,EAAE,CAAC;oCACT,IAAI,EAAE,CAAC,KAAK,UAAU,CAAC,MAAM,GAAG,CAAC;oCACjC,MAAM,EAAE,UAAU,CAAC,MAAM;oCACzB,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC;oCAC7B,OAAO,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC;iCACnC,CAAA;gCACD,OAAO,GAAG,CAAA;6BACX,CAAC,CAAA;4BAEE,IAAI,GAAG,EAAE,CAAA;4BACT,QAAQ,GAAG,KAAK,CAAA;4BACpB,qBAAM,SAAS,CAAC,QAAQ,EAAE,UAAM,OAAO;;;;;gDACrC,IAAI,QAAQ;oDAAE,sBAAM;gDAEpB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;;;;gDAEjB,KAAA,IAAI,CAAA;gDAAI,qBAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAA;;gDAAzE,IAAI,GAAJ,KAAQ,SAAiE,CAAA;;;;gDAEzE,IAAI,GAAC,CAAC,IAAI,KAAK,kBAAkB,EAAE;oDACjC,IAAI,IAAI,GAAC,CAAC,YAAY,CAAA;oDACtB,IAAI,GAAC,CAAC,OAAO,KAAK,OAAO,EAAE;wDACzB,QAAQ,GAAG,IAAI,CAAA;qDAChB;iDACF;;oDAAM,MAAM,GAAC,CAAA;;;gDAEhB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;;;;qCACnB,CAAC,EAAA;;4BAfF,SAeE,CAAA;4BACF,sBAAO,IAAI,EAAA;;;;SACZ;KACF,CAAA;;IC1FD,IAAMD,IAAE,GAAG,IAAI,MAAM,CAAC,MAAI,UAAU,CAAC,MAAM,MAAG,CAAC,CAAA;AAE/C,kBAAe;QACb,KAAK,EAAE,UAAU,QAAkB,EAAE,YAAqB;YAAnD,iBAcN;YAbC,IAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAACA,IAAE,CAAqB,CAAA;YACzD,MAAM,CAAC,KAAK,EAAK,QAAQ,CAAC,IAAI,0BAAuB,CAAC,CAAA;YAEtD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YACxB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;YAEnB,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;YAC3D,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;iBAC7C,EAAE,CAAC,UAAU,EAAE,UAAC,GAAG,IAAK,OAAA,KAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;iBACjD,EAAE,CAAC,KAAK,EAAE;gBACT,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;aAClD,CAAC,CAAA;YACJ,MAAM,CAAC,KAAK,EAAE,CAAA;SACf;QACD,MAAM,EAAE,UAAgB,KAAY;;;;;gCACrB,qBAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAA;;4BAAxE,IAAI,GAAG,SAAiE;4BACxE,GAAG,GAAG,IAAI,YAAY,EAAE,CAAA;4BAC9B,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;4BACzB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;;;;;SAChB;KACiB,CAAA;;ACxBpB,eAAe;QACb,KAAK,EAAE,UAAU,QAAkB,EAAE,YAAqB;YAAnD,iBAqBN;YApBC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;YACzB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;YACf,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;YAEvB,IAAI,CAAC,GAAgB,EAAE,CAAA;YACvB,IAAM,MAAM,GAAgB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;iBACrE,EAAE,CAAC,UAAU,EAAE,UAAC,KAAe;gBAC9B,KAAI,CAAC,KAAK,CAAC,IAAI,CAAC;oBACd,GAAG,EAAE,KAAK,CAAC,IAAI;oBACf,SAAS,EAAE,CAAC,GAAG,EAAE;iBAClB,CAAC,CAAA;aACH,CAAC;iBACD,EAAE,CAAC,UAAU,EAAE,cAAM,QAAC,CAAC,GAAG,KAAI,CAAC,aAAa,IAAC,CAAC;iBAC9C,EAAE,CAAC,aAAa,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;iBACtC,EAAE,CAAC,UAAU,EAAE,UAAC,GAAc,IAAK,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;iBAC/C,EAAE,CAAC,KAAK,EAAE;gBACT,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;aAClD,CAAC,CAAA;YAEJ,MAAM,CAAC,KAAK,EAAE,CAAA;SACf;QAED,MAAM,EAAE,UAAU,KAAY;YAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1C,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBAC5B,IAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;gBACtC,IAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;gBACtC,IAAI,GAAG,KAAK,IAAI,EAAE;oBAChB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;iBACrE;aACF;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;SACvE;KACiB,CAAA;;ACvCpB,kBAAe;QACb,KAAK,EAAE,UAAU,QAAkB,EAAE,YAAqB;YACxD,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;YAC3D,MAAM;iBACH,EAAE,CAAC,OAAO,EAAE,UAAC,KAAe;gBAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;oBAAE,MAAM,CAAC,IAAI,EAAE,CAAA;aAC/C,CAAC;iBACD,EAAE,CAAC,KAAK,EAAE;gBACT,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;aAClD,CAAC,CAAA;YACJ,MAAM,CAAC,KAAK,EAAE,CAAA;SACf;KACiB,CAAA;;ICPpB,IAAM,YAAY,GAAG,SAAS,CAAA;IAC9B,IAAM,MAAM,GAAG,IAAI,MAAM,CAAC,cAAY,KAAK,CAAC,MAAM,MAAG,CAAC,CAAA;AAEtD,kBAAgC;QAC9B,KAAK,EAAE,UAAU,KAAe;YAC9B,IAAI,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACzC,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;aAC5B;YAED,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC9B,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;aACtB;YAED,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC/B,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;aACrB;SACF;QACD,MAAM,EAAE,UAAgB,KAAY,EAAEC,OAAU;;;;;;iCAE1C,KAAK,CAAC,IAAI,CAAC,eAAe,EAA1B,wBAA0B;iCACxB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAA3B,wBAA2B;4BACvB,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;4BAC7B,qBAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,EAAA;;4BAAjF,QAAQ,GAAG,SAAsE,CAAA;;;4BAEjF,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;;;;4BAGzC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAA;;;4BAE7B,MAAM,CAAC,QAAQ,EAAE,oCAAoC,CAAC,CAAA;4BAEhD,YAAY,GAAG,KAAK,CAAC,MAAM,CAAA;4BAC3B,eAAe,GAAG,KAAK,CAAC,SAAS,CAAA;4BAEvC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAA;4BACjB,KAAK,CAAC,SAAS,GAAGjB,WAAS,CAAC,MAAM,CAAA;4BAClC,IAAI,IAAI,CAAC,IAAI,EAAE;gCACbiB,OAAI,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;6BAC7C;4BACiB,qBAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,EAAA;;4BAA/D,SAAS,GAAG,SAAmD;4BACrE,KAAK,CAAC,IAAI,CAACA,OAAI,CAAC,CAAA;4BACH,qBAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,EAAA;;4BAAnE,IAAI,GAAG,SAA4D;4BACzE,KAAK,CAAC,GAAG,CAACA,OAAI,CAAC,CAAA;4BACf,KAAK,CAAC,MAAM,GAAG,YAAY,CAAA;4BAC3B,KAAK,CAAC,SAAS,GAAG,eAAe,CAAA;4BACjC,sBAAO,IAAI,EAAA;;;;SACZ;KACF,CAAA;;ACpDD,oBAAe;QACb,KAAK,EAAE,UAAU,KAAe;YAC9B,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAqB,CAAA;YAC9D,MAAM,CAAC,KAAK,EAAE,wBAAsB,KAAK,CAAC,IAAM,CAAC,CAAA;YACjD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;SACzB;QACD,MAAM,EAAE,UAAU,KAAY;YAC5B,IAAI,OAAO,GAAG,KAAK,CAAC,cAAc,CAChC,IAAI,CAAC,QAAQ,EACb,UAAA,GAAG;gBACD,OAAO,EAAE,GAAG,YAAY,YAAY,CAAC,IAAI,EAAE,GAAG,YAAY,WAAW,CAAC,CAAA;aACvE,CACF,CAAA;YACD,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAO,GAAG,IAAI,cAAc,EAAE,CAAA;gBAC9B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;aACvB;YACD,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;gBAC9C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;aAC3B;YACD,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;SAChC;KACiB,CAAA;;ICtBpB,IAAM,OAAO,GAAG,IAAI,MAAM,CAAC,UAAQC,KAAM,CAAC,MAAM,sBAAmB,CAAC,CAAA;IACpE,IAAM,YAAY,GAAG,IAAI,MAAM,CAACA,KAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAEnD,gBAAgC;QAC9B,KAAK,EAAE,UAAU,QAAkB;YACjC,IAAI,KAAK,GAA2B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAoB,CAAA;YAClF,MAAM,CAAC,KAAK,EAAE,kBAAgB,QAAQ,CAAC,GAAK,CAAC,CAAA;YAE7C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YAC3B,IAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YAE3B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;YAEpB,QAAQ,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG;gBAC9C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;aAC/B;YACD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,uBAAqB,QAAQ,CAAC,GAAK,CAAC,CAAA;SACpE;QAED,MAAM,EAAE,UAAU,KAAY;YAC5B,IAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YAC1C,IAAM,WAAW,GAAG,WAAS,KAAK,MAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACjE,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;YAC3B,IAAI,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;YAE7B,IAAI,GAAG,KAAK,SAAS,EAAE;gBACrB,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;aAC9B;YAED,IAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;YACtC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAA;YACxC,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAA;YAEzB,OAAO,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;SACnC;KACF,CAAA;;AClCD,aAAe;QACb,KAAK,EAAE,UAAU,QAAkB,EAAE,YAAqB;YAAnD,iBAwBN;YAvBC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAA;YAClB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;YAEvB,IAAI,CAAC,CAAA;YACL,IAAM,MAAM,GAAgB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;iBACrE,EAAE,CAAC,OAAO,EAAE,cAAM,OAAA,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACpC,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,SAAS,GAAG,CAAC,GAAG,EAAE,CAAC;aACpB,CAAC,GAAA,CAAC;iBACF,EAAE,CAAC,WAAW,EAAE,UAAC,KAAe;gBAC/B,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACjB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,SAAS,EAAE,CAAC,GAAG,EAAE;iBAClB,CAAC,CAAA;aACH,CAAC;iBACD,EAAE,CAAC,UAAU,EAAE,cAAM,QAAC,CAAC,GAAG,KAAI,CAAC,aAAa,IAAC,CAAC;iBAC9C,EAAE,CAAC,WAAW,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;iBACpC,EAAE,CAAC,UAAU,EAAE,UAAC,GAAc,IAAK,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;iBAC/C,EAAE,CAAC,KAAK,EAAE;gBACT,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;aAClD,CAAC,CAAA;YAEJ,MAAM,CAAC,KAAK,EAAE,CAAA;SACf;QAED,MAAM,EAAE,UAAU,KAAY;YAC5B,KAAqB,UAAa,EAAb,KAAA,IAAI,CAAC,QAAQ,EAAb,cAAa,EAAb,IAAa,EAAE;gBAA/B,IAAM,MAAM,SAAA;gBACf,IAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;gBACxC,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;oBAClB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;iBACrE;aACF;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;SACvE;KACiB,CAAA;;ACvCpB,oBAAe;QACb,KAAK,EAAE,UAAU,KAAK;YACpB,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;YAC1C,MAAM,CAAC,KAAK,EAAE,wBAAsB,KAAK,CAAC,IAAM,CAAC,CAAA;YACjD,IAAI,CAAC,QAAQ,GAAG,KAAM,CAAC,CAAC,CAAC,CAAA;SAC1B;QACD,MAAM,EAAE,UAAU,KAAK;YACrB,IAAI,OAAO,GAAG,KAAK,CAAC,cAAc,CAChC,IAAI,CAAC,QAAQ,EACb,UAAA,GAAG;gBACD,OAAO,EAAE,GAAG,YAAY,YAAY,CAAC,IAAI,EAAE,GAAG,YAAY,WAAW,CAAC,CAAA;aACvE,CACF,CAAA;YACD,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAO,GAAG,IAAI,cAAc,EAAE,CAAA;gBAC9B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;aACvB;YACD,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;gBAC9C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;aAC3B;YACD,IAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAClC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;YACxB,OAAO,GAAG,CAAA;SACX;KACiB,CAAA;;ICnBpB,IAAMC,cAAY,GAAG,KAAK,CAAA;AAE1B,iBAAe;QACb,KAAK,EAAE,UAAU,KAAe,EAAE,YAAqB;YACrD,IAAI,KAAK,GAAGA,cAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACzC,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;aAC7B;YAED,KAAK,GAAGD,KAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC/B,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;aACvB;YAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;SACnD;QACD,MAAM,EAAE,UAAgB,KAAY,EAAED,OAAU;;;;;;4BACxC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe;kCACrC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;kCAC7B,IAAI,CAAC,YAAY,CAAA;4BACrB,MAAM,CAAC,MAAM,EAAE,yCAAyC,CAAC,CAAA;;4BAGzD,KAAK,CAAC,SAAS,GAAGjB,WAAS,CAAC,KAAK,CAAA;4BACpB,qBAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAA;;4BAAnE,IAAI,GAAG,SAA4D;4BACzE,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE;gCAClC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAA;6BACxB;4BACiB,qBAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAA;;4BAA7D,SAAS,GAAG,SAAiD;4BACnE,KAAK,CAAC,IAAI,CAACiB,OAAI,CAAC,CAAA;4BAChB,KAAK,CAAC,SAAS,GAAGjB,WAAS,CAAC,MAAM,CAAA;4BAClB,qBAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,EAAA;;4BAAtE,OAAO,GAAG,SAA4D;4BAC5E,KAAK,CAAC,GAAG,CAACiB,OAAI,CAAC,CAAA;4BACf,sBAAO,OAAO,EAAA;;;;SACf;KACiB,CAAA;;ACrCpB,gBAAe;QACb,KAAK,EAAE,UAAU,KAAe,EAAE,YAAqB;YAAhD,iBAWN;YAVC,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACpC,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;YAClC,IAAI,CAAC,IAAI,GAAG,EAAiB,CAAA;YAC7B,IAAM,MAAM,GAAgB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;iBACrE,EAAE,CAAC,cAAc,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;iBACvC,EAAE,CAAC,UAAU,EAAE,UAAC,GAAc,IAAK,OAAA,KAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;iBACvD,EAAE,CAAC,KAAK,EAAE;gBACT,MAAM,IAAI,KAAK,CAAC,SAAO,KAAK,CAAC,GAAG,gBAAa,CAAC,CAAA;aAC/C,CAAC,CAAA;YACJ,MAAM,CAAC,KAAK,EAAE,CAAA;SACf;QACD,MAAM,EAAE,UAAgB,KAAY;;;;;;4BAC5B,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;kCAChC,YAAY,KAAK,SAAS,CAAA,EAA1B,wBAA0B;4BACnC,KAAA,YAAY,CAAA;;gCACZ,qBAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAA;;4BAA5D,KAAA,SAA4D,CAAA;;;4BAF1D,IAAI,KAEsD;4BAEhE,IAAI,KAAK,CAAC,SAAS,KAAKjB,WAAS,CAAC,KAAK,EAAE;gCACvC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;gCAC/B,sBAAO,EAAE,EAAA;6BACV;4BACD,sBAAO,IAAI,EAAA;;;;SACZ;KACiB,CAAA;;AC7BpB,cAAgC;QAC9B,KAAK,EAAE,UAAU,QAAkB,EAAE,YAAqB;YAAnD,iBAaN;YAZC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;YAEhB,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;YAC3D,MAAM;iBACH,EAAE,CAAC,OAAO,EAAE,UAAC,KAAe;gBAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;oBAAE,MAAM,CAAC,IAAI,EAAE,CAAA;;oBACrC,KAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;aAC7B,CAAC;iBACD,EAAE,CAAC,KAAK,EAAE;gBACT,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;aAClD,CAAC,CAAA;YACJ,MAAM,CAAC,KAAK,EAAE,CAAA;SACf;QACD,MAAM,EAAE;YACN,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAC,KAAY,IAAK,OAAA,KAAK,CAAC,GAAG,GAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;SAC7D;KACF,CAAA;;ICVD,IAAMgB,IAAE,GAAG,IAAI,MAAM,CAAC,OAAK,UAAU,CAAC,MAAM,gBAAa;SACvD,MAAI,KAAK,CAAC,MAAM,MAAG,CAAA;SACnB,YAAU,IAAI,CAAC,MAAM,QAAK,CAAA,CAAC,CAAA;AAE7B,mBAAe;QACb,KAAK,EAAE,UAAU,QAAkB,EAAE,YAAqB;YAAnD,iBAkBN;YAjBC,IAAM,KAAK,GAAGA,IAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAoB,CAAA;YACvD,MAAM,CAAC,KAAK,EAAE,kBAAgB,QAAQ,CAAC,GAAK,CAAC,CAAA;YAE7C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YACxB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YAC1B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;YAEnB,IAAI,CAAC,CAAA;YACL,IAAM,MAAM,GAAgB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;iBACrE,EAAE,CAAC,OAAO,EAAE,cAAM,QAAC,CAAC,GAAG,KAAI,CAAC,SAAS,IAAC,CAAC;iBACvC,EAAE,CAAC,iBAAiB,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;iBAC1C,EAAE,CAAC,UAAU,EAAE,UAAC,GAAc,IAAK,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;iBAC/C,EAAE,CAAC,KAAK,EAAE;gBACT,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;aAClD,CAAC,CAAA;YAEJ,MAAM,CAAC,KAAK,EAAE,CAAA;SACf;QAED,MAAM,EAAE,UAAgB,KAAY,EAAEC,OAAU;;;;;;;4BAC1C,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,CAAA;4BAChD,MAAM,GAAGA,OAAI,CAAC,MAAM,IAAI,CAAC,CAAA;4BACzB,KAAK,GAAG,CAACA,OAAI,CAAC,KAAK,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,GAAGA,OAAI,CAAC,KAAK,CAAA;4BAEzE,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAA;4BAC/C,IAAI,GAAGA,OAAI,CAAC,IAAI,IAAI,UAAU,CAAC,MAAM,CAAA;4BACrC,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,UAAC,IAAS;gCACxC,IAAM,GAAG,GAAG,EAAE,CAAA;gCACd,GAAG,CAAC,KAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;gCACzB,OAAO,GAAG,CAAA;6BACX,CAAC,CAAA;4BAEE,GAAG,GAAW,CAAC,CAAA;4BACf,IAAI,GAAG,EAAE,CAAA;4BACb,qBAAM,SAAS,CAAC,QAAQ,EAAE,UAAO,OAAO,EAAE,GAAG;;;;;gDAC3C,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;gDAC1B,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAA;gDAC5B,IAAI,GAAG,KAAK,CAAC,EAAE;oDACb,IAAI,GAAG,KAAK,CAAC,EAAE;wDACb,IAAI,IAAI,OAAO,CAAA;qDAChB;oDACD,IAAI,IAAI,oBAAiB,GAAG,QAAI,CAAA;iDACjC;gDAED,IAAI,IAAI,oBAAiB,GAAG,QAAI,CAAA;gDAChC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gDACnB,KAAA,IAAI,CAAA;gDAAI,qBAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAA;;gDAAzE,IAAI,GAAJ,KAAQ,SAAiE,CAAA;gDACzE,IAAI,IAAI,OAAO,CAAA;gDACf,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gDAClB,sBAAO,IAAI,EAAA;;;qCACZ,CAAC,EAAA;;4BAhBF,SAgBE,CAAA;4BACF,IAAI,GAAG,GAAG,CAAC,EAAE;gCACX,IAAI,IAAI,OAAO,CAAA;6BAChB;4BACD,sBAAO,IAAI,EAAA;;;;SACZ;KACiB,CAAA;;ACnEpB,iBAAe;QACb,KAAK,EAAE,UAAU,QAAkB,EAAE,YAAqB;YAAnD,iBAiBN;YAhBC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;YACnB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;YACvB,IAAI,CAAC,CAAA;YACL,IAAM,MAAM,GAAgB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;iBACrE,EAAE,CAAC,OAAO,EAAE;gBACX,CAAC,GAAG,KAAI,CAAC,SAAS,CAAA;gBAClB,KAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;aAC1B,CAAC;iBACD,EAAE,CAAC,UAAU,EAAE,cAAM,QAAC,CAAC,GAAG,KAAI,CAAC,aAAa,IAAC,CAAC;iBAC9C,EAAE,CAAC,eAAe,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;iBACxC,EAAE,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;iBAClC,EAAE,CAAC,KAAK,EAAE;gBACT,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;aAClD,CAAC,CAAA;YAEJ,MAAM,CAAC,KAAK,EAAE,CAAA;SACf;QAED,MAAM,EAAE,UAAU,KAAY;YAC5B,IAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YACtC,OAAO,OAAO,CAAC,IAAI,CAAC;kBAChB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;kBAC3D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;SACpE;KACiB,CAAA;;AC/BpB,gBAAe;QACb,MAAM,EAAE;;;oBACN,MAAM,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAA;;;SACpC;KACF,CAAA;;ACJD,mBAAe;QACb,MAAM,EAAE;;;oBACN,MAAM,IAAI,gBAAgB,CAAC,UAAU,CAAC,CAAA;;;SACvC;KACF,CAAA;;ICaD,IAAM,IAAI,GAAuC;QAC/C,MAAM,QAAA,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;KAC/K,CAAA;;ICrBD,IAAM,SAAS,GAAG;QAChB,GAAG,EAAE,OAAO;QACZ,GAAG,EAAE,MAAM;QACX,GAAG,EAAE,MAAM;QACX,GAAG,EAAE,OAAO;QACZ,GAAG,EAAE,OAAO;KACb,CAAA;IACD,IAAM,WAAW,GAAG;QAClB,OAAO,EAAE,GAAG;QACZ,MAAM,EAAE,GAAG;QACX,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,GAAG;QACZ,OAAO,EAAE,GAAG;KACb,CAAA;IAED,SAAS,MAAM,CAAE,GAAW;QAC1B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,UAAA,CAAC,IAAI,OAAA,SAAS,CAAC,CAAC,CAAC,GAAA,CAAC,CAAA;IAC7D,CAAC;IAED,SAAS,QAAQ,CAAE,GAAW;QAC5B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,wBAAwB,EAAE,UAAA,CAAC,IAAI,OAAA,WAAW,CAAC,CAAC,CAAC,GAAA,CAAC,CAAA;IAC3E,CAAC;AAED,eAAe;QACb,QAAQ,EAAE,MAAM;QAChB,aAAa,EAAE,UAAC,GAAW,IAAK,OAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAA;QACrD,eAAe,EAAE,UAAC,CAAS,IAAK,OAAA,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAA;QAC1D,YAAY,EAAE,UAAC,CAAS,IAAK,OAAA,CAAC,CAAC,OAAO,CAAC,2DAA2D,EAAE,EAAE,CAAC,GAAA;KACxG,CAAA;;AC1BD,cAAe;QACb,QAAQ,EAAE,UAAC,CAAS,EAAE,GAAW,IAAK,OAAA,CAAC,GAAG,GAAG,GAAA;QAC7C,SAAS,EAAE,UAAC,CAAS,EAAE,GAAW,IAAK,OAAA,GAAG,GAAG,CAAC,GAAA;QAC9C,YAAY,EAAE,UAAC,GAAW,IAAK,OAAA,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAA;QACjF,QAAQ,EAAE,UAAC,CAAS,IAAK,OAAA,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAA;QACtD,UAAU,EAAE,UAAC,CAAS,IAAK,OAAA,CAAC,CAAC,WAAW,EAAE,GAAA;QAC1C,QAAQ,EAAE,UAAC,GAAW,IAAK,OAAA,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,GAAA;QACpD,QAAQ,EAAE,UAAC,CAAS,EAAE,GAAW,IAAK,OAAA,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAA;QAC3D,cAAc,EAAE,UAAC,CAAS,EAAE,CAAS,IAAK,OAAA,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,GAAA;QAC1D,SAAS,EAAE,UAAC,CAAS,EAAE,OAAe,EAAE,WAAmB;YACzD,OAAA,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;SAAA;QAC5C,eAAe,EAAE,UAAC,CAAS,EAAE,IAAY,EAAE,IAAY,IAAK,OAAA,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAA;QACzF,QAAQ,EAAE,UAAC,GAAW,IAAK,OAAA,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAA;QAC1D,OAAO,EAAE,UAAC,CAAS,EAAE,GAAW,IAAK,OAAA,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAA;QACzD,OAAO,EAAE,UAAC,CAAS,IAAK,OAAA,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAA;QACxC,gBAAgB,EAAE,UAAC,CAAS,IAAK,OAAA,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAA;QAC7D,UAAU,EAAE,UAAC,CAAS,EAAE,CAAc,EAAE,CAAiB;YAAjC,kBAAA,EAAA,MAAc;YAAE,kBAAA,EAAA,SAAiB;YACvD,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YACb,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC;gBAAE,OAAO,CAAC,CAAA;YAC3B,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;SACrC;QACD,eAAe,EAAE,UAAC,CAAS,EAAE,CAAc,EAAE,CAAiB;YAAjC,kBAAA,EAAA,MAAc;YAAE,kBAAA,EAAA,SAAiB;YAC5D,IAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAC1B,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACnC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;gBAAE,GAAG,IAAI,CAAC,CAAA;YAC7B,OAAO,GAAG,CAAA;SACX;KAC6B,CAAA;;AC7BhC,eAAe;QACb,KAAK,EAAE,UAAC,CAAS,IAAK,OAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAA;QACjC,MAAM,EAAE,UAAC,CAAS,IAAK,OAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAA;QACnC,YAAY,EAAE,UAAC,CAAS,EAAE,GAAW,IAAK,OAAA,CAAC,GAAG,GAAG,GAAA;QACjD,OAAO,EAAE,UAAC,CAAS,IAAK,OAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAA;QACrC,OAAO,EAAE,SAAS,CAAC,UAAC,CAAS,EAAE,GAAW,IAAK,OAAA,CAAC,GAAG,GAAG,GAAA,CAAC;QACvD,QAAQ,EAAE,SAAS,CAAC,UAAC,CAAS,EAAE,GAAW,IAAK,OAAA,CAAC,GAAG,GAAG,GAAA,CAAC;QACxD,OAAO,EAAE,UAAC,CAAS,EAAE,GAAe;YAAf,oBAAA,EAAA,OAAe;YAClC,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;YAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;SACjC;QACD,MAAM,EAAE,SAAS,CAAC,UAAC,CAAS,EAAE,GAAW,IAAK,OAAA,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAA,CAAC;QACtE,OAAO,EAAE,UAAC,CAAS,EAAE,GAAW,IAAK,OAAA,CAAC,GAAG,GAAG,GAAA;KAC7C,CAAA;IAED,SAAS,QAAQ,CAAE,CAAS;QAC1B,IAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC9B,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IACzC,CAAC;IAED,SAAS,SAAS,CAAE,EAAsC;QACxD,OAAO,UAAC,CAAS,EAAE,CAAS;YAC1B,IAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;YAC5C,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;SAC3B,CAAA;IACH,CAAC;;ACzBD,cAAe;QACb,YAAY,EAAE,UAAC,CAAS,IAAK,OAAA,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA;QAC3E,YAAY,EAAE,UAAC,CAAS,IAAK,OAAA,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA;KAC5E,CAAA;;ACDD,gBAAe;QACb,MAAM,EAAE,UAAC,CAAQ,EAAE,GAAW,IAAK,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,GAAG,GAAG,GAAG,GAAG,CAAC,GAAA;QACxE,MAAM,EAAE,UAAI,CAAM,IAAQ,OAAA,IAAI,CAAC,CAAC,CAAC,GAAA;QACjC,OAAO,EAAE,UAAI,CAAM,IAAQ,OAAA,CAAC,CAAC,CAAC,CAAC,GAAA;QAC/B,KAAK,EAAE,UAAS,GAA0B,EAAE,GAAW,IAAW,OAAA,GAAG,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,GAAG,CAAC,GAAA,CAAC,GAAA;QACtF,SAAS,EAAE,UAAC,CAAQ,IAAK,OAAA,CAAC,CAAC,OAAO,EAAE,GAAA;QACpC,MAAM,EAAE,UAAI,CAAM,EAAE,GAA+B,IAAK,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA;QACnE,MAAM,EAAE,UAAC,CAAiB,IAAK,OAAA,CAAC,CAAC,MAAM,GAAA;QACvC,QAAQ,EAAE,UAAS,CAAO,EAAE,GAAc,IAAqB,OAAA,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,GAAA;QAClG,OAAO,EAAE,UAAI,CAAM,EAAE,KAAa,EAAE,MAAc;YAChD,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM,GAAG,CAAC,CAAA;YACpC,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,CAAA;SACtC;QACD,MAAM,EAAE,UAAa,GAAQ;YAC3B,IAAM,CAAC,GAAG,EAAE,CAAA;YACZ,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,MAAM,CAAC,UAAA,GAAG;gBAC3B,IAAI,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAA;gBAC/C,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAA;gBACrB,OAAO,IAAI,CAAA;aACZ,CAAC,CAAA;SACH;KACF,CAAA;;ICrBD,IAAM,UAAU,GAAG;QACjB,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ;QACxE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU;KAC/C,CAAA;IACD,IAAM,QAAQ,GAAG;QACf,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU;KAC7E,CAAA;IACD,IAAM,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC5C,IAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACxC,IAAM,QAAQ,GAAG;QACf,CAAC,EAAE,IAAI;QACP,CAAC,EAAE,IAAI;QACP,CAAC,EAAE,IAAI;QACP,SAAS,EAAE,IAAI;KAChB,CAAA;IAED,SAAS,IAAI,CAAE,GAAW;QACxB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACxB,CAAC;IAED;IACA,IAAM,KAAK,GAAG;QACZ,WAAW,EAAE,UAAU,CAAO;YAC5B,IAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAA;YACzC,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;SACzD;QAED,YAAY,EAAE,UAAU,CAAO;YAC7B,IAAI,GAAG,GAAG,CAAC,CAAA;YACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE;gBACrC,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;aAC/B;YACD,OAAO,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAA;SACzB;QAED,aAAa,EAAE,UAAU,CAAO,EAAE,QAAgB;;YAEhD,IAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;;YAE1D,IAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;YAC5C,IAAM,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAA;YAC3C,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;SAClE;QAED,UAAU,EAAE,UAAU,CAAO;YAC3B,IAAM,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;YAC5B,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;SAC1E;QAED,SAAS,EAAE,UAAU,CAAO;YAC1B,IAAM,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAA;YAClC,IAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACrC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAA;SAC9C;QAED,OAAO,EAAE,UAAU,CAAO;YACxB,OAAO,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;SAChE;KACF,CAAA;IAED,IAAM,WAAW,GAAG;QAClB,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,aAAa,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;SACjC;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;SAC5B;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,eAAe,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;SACrC;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;SAChC;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,CAAC,CAAC,cAAc,EAAE,CAAA;SAC1B;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;SACxB;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;SACrC;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;SAChC;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;SACtC;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;SACzD;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;SAC/C;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAA;SACjC;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;SACpD;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,QAAQ,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;SAC7C;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;SAC1C;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,QAAQ,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;SACxC;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,QAAQ,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,EAAC;SACzC;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,QAAQ,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,EAAC;SACzC;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;SAC1B;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAA;SACtC;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,QAAQ,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;SACxC;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;SACvB;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;SACjC;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,CAAC,CAAC,MAAM,EAAE,CAAA;SAClB;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;SACjC;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,CAAC,CAAC,kBAAkB,EAAE,CAAA;SAC9B;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,CAAC,CAAC,kBAAkB,EAAE,CAAA;SAC9B;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;SAClD;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;SACvB;QACD,CAAC,EAAE,UAAU,CAAO;YAClB,IAAM,EAAE,GAAG,CAAC,CAAC,iBAAiB,EAAE,GAAG,EAAE,GAAG,GAAG,CAAA;YAC3C,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;SACrE;QACD,GAAG,EAAE;YACH,OAAO,GAAG,CAAA;SACX;KACF,CAAC;IACD,WAAmB,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;IACtC,WAAmB,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAA;AAEtC,uBAAyB,CAAO,EAAE,MAAc;QAC9C,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,IAAI,SAAS,GAAG,MAAM,CAAA;QAEtB,OAAO,IAAI,EAAE;YACX,IAAM,CAAC,GAAG,KAAK,CAAA;YACf,IAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;;YAGjC,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAO,MAAM,GAAG,SAAS,CAAA;aAC1B;;YAGD,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;YAC7C,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;;YAGxC,IAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YAC/B,IAAM,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,CAAA;YAC5B,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,CAAA;SACpC;IACH,CAAC;;ACpLD,eAAe;QACb,MAAM,EAAE,UAAC,CAAgB,EAAE,GAAW;YACpC,IAAI,IAAI,GAAG,CAAC,CAAA;YACZ,IAAI,CAAC,KAAK,KAAK,EAAE;gBACf,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;aAClB;iBAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;gBACtB,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;aACnB;YACD,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;SACnD;KACF,CAAA;IAED,SAAS,WAAW,CAAE,IAAS;QAC7B,OAAO,IAAI,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IACvD,CAAC;;ACfD,cAAe;QACb,SAAS,EAAE,UAAS,CAAK,EAAE,GAAO,IAAc,OAAA,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAA;KACtE,CAAA;;ACID,sCAAoB,IAAI,EAAK,GAAG,EAAK,IAAI,EAAK,GAAG,EAAK,IAAI,EAAK,GAAG,EAAK,KAAK,EAAE;;ICU9E;QAOE,gBAAa,IAAwB;YAAxB,qBAAA,EAAA,SAAwB;YAArC,iBAQC;YAXO,UAAK,GAAW,EAAE,CAAA;YAIxB,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;YAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAA;YAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,MAAM,EAAE,CAAA;YAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAE5CG,MAAQ,CAACC,IAAW,EAAE,UAAC,IAAI,EAAE,IAAI,IAAK,OAAA,KAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,GAAA,CAAC,CAAA;YACnED,MAAQ,CAAC,cAAc,EAAE,UAAC,OAAO,EAAE,IAAI,IAAK,OAAA,KAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,GAAA,CAAC,CAAA;SAChF;QACD,sBAAK,GAAL,UAAO,IAAY,EAAE,QAAiB;YACpC,IAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;YACtD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;SACjC;QACD,uBAAM,GAAN,UAAQ,GAAqB,EAAE,GAAY,EAAE,IAAoB;YAC/D,IAAM,OAAO,gBAAQ,IAAI,CAAC,OAAO,EAAK,SAAS,CAAC,IAAI,CAAC,CAAE,CAAA;YACvD,IAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;YACrC,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;SACjD;QACK,+BAAc,GAApB,UAAsB,IAAY,EAAE,GAAY,EAAE,IAAoB;;;;;gCACxD,qBAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAA;;4BAA5B,GAAG,GAAG,SAAsB;4BAClC,sBAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,EAAA;;;;SACnC;QACK,4BAAW,GAAjB,UAAmB,IAAY,EAAE,IAAoB;;;;;;;4BAC7C,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;4BACzB,KAAK,GAAG,OAAO,CAAC,IAAI,GAAO,OAAO,CAAC,IAAI,QAAK,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAA;4BAClF,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAA,CAAC,CAAA;kCAEjD,EAAL,eAAK;;;kCAAL,mBAAK,CAAA;4BAAjB,QAAQ;4BACX,qBAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAA;;4BAA/B,IAAI,EAAE,SAAyB,CAAC;gCAAE,wBAAQ;4BAE1C,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;gCAAE,sBAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAA;4BAC7D,KAAA,IAAI,CAAC,KAAK,CAAA;4BAAC,qBAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAA;;4BAA9C,KAAK,GAAG,SAAA,IAAI,GAAO,SAA2B,EAAE,QAAQ,EAAC;4BAC/D,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK;gCAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAA;4BACpD,sBAAO,KAAK,EAAA;;4BANS,IAAK,CAAA;;;4BAStB,GAAG,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAQ,CAAA;4BACtC,GAAG,CAAC,OAAO,GAAG,gCAA6B,IAAI,gBAAS,KAAK,OAAG,CAAA;4BAChE,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAA;4BACnB,MAAM,GAAG,CAAA;;;;SACV;QACK,2BAAU,GAAhB,UAAkB,IAAY,EAAE,GAAY,EAAE,IAAoB;;;;;;4BAC1D,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;4BACb,qBAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,EAAA;;4BAAjD,SAAS,GAAG,SAAqC;4BACvD,sBAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,EAAA;;;;SACzC;QACD,0BAAS,GAAT,UAAW,GAAW,EAAE,KAAY;YAClC,OAAO,IAAIN,SAAK,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;SAChE;QACD,+BAAc,GAAd,UAAgB,IAAY,EAAE,MAAkB;YAC9C,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;SACrC;QACD,4BAAW,GAAX,UAAa,IAAY,EAAE,GAAoB;YAC7C,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;SAC/B;QACD,uBAAM,GAAN,UAAQ,MAAgD;YACtD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;SACjC;QACD,wBAAO,GAAP;YACE,IAAM,IAAI,GAAG,IAAI,CAAA;YACjB,OAAO,UAAqB,QAAgB,EAAE,GAAW,EAAE,EAA8C;gBACvG,IAAM,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAA;gBAChC,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;aACtE,CAAA;SACF;QACM,cAAO,GAAG,MAAM,CAAA;QAChB,eAAQ,GAAG,QAAQ,CAAA;QACnB,cAAO,GAAG,OAAO,CAAA;QACjB,cAAO,GAAG,OAAO,CAAA;QACjB,gBAAS,GAAG,SAAS,CAAA;QACrB,YAAK,GAAG,KAAK,CAAA;QACtB,aAAC;KA9ED,IA8EC;;;;;;;;"} \ No newline at end of file diff --git a/dist/liquid.min.js b/dist/liquid.min.js index f695bcbc2..2d00ea146 100644 --- a/dist/liquid.min.js +++ b/dist/liquid.min.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Liquid=e()}(this,function(){"use strict";var r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)};function e(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}var v=function(){return(v=Object.assign||function(t){for(var e,n=1,r=arguments.length;ns[0]&&e[1]=|<|>|\s+contains\s+/];var B=function(r){function t(t,e){var n=r.call(this,t.message)||this;return n.originalError=t,n.token=e,n}return e(t,r),t.prototype.update=function(){var i,o,t,s,e=this.originalError,n=(i=this.token,o=i.input.split("\n"),t=Math.max(i.line-2,1),s=Math.min(i.line+3,o.length),m(t,s+1).map(function(t){var e=t===i.line?">> ":" ",n=w(String(t),String(s).length),r=o[t-1];return""+e+n+"| "+r}).join("\n"));this.message=function(t,e){e.file&&(t+=", file:"+e.file);return t+=", line:"+e.line+", col:"+e.col}(e.message,this.token),this.stack=this.message+"\n"+n+"\n"+this.stack+"\nFrom "+e.stack},t}(Error),G=function(r){function t(t,e){var n=r.call(this,new Error(t),e)||this;return n.name="TokenizationError",r.prototype.update.call(n),n}return e(t,r),t}(B),V=function(r){function t(t,e){var n=r.call(this,t,e)||this;return n.name="ParseError",n.message=t.message,r.prototype.update.call(n),n}return e(t,r),t}(B),W=function(r){function t(t,e){var n=r.call(this,t,e.token)||this;return n.name="RenderError",n.message=t.message,r.prototype.update.call(n),n}return e(t,r),t}(B),J=function(n){function t(t){var e=n.call(this,t)||this;return e.resolvedHTML="",e.name="RenderBreakError",e.message=t+"",e}return e(t,n),t}(Error),X=function(n){function t(t){var e=n.call(this,t)||this;return e.name="AssertionError",e.message=t+"",e}return e(t,n),t}(Error);function K(t,e){if(!t)throw new X(e=e||"expect "+t+" to be true")}var Q,Z,tt={root:["."],cache:!1,extname:"",dynamicPartials:!0,trim_tag_right:!1,trim_tag_left:!1,trim_output_right:!1,trim_output_left:!1,greedy:!0,tag_delimiter_left:"{%",tag_delimiter_right:"%}",output_delimiter_left:"{{",output_delimiter_right:"}}",strict_filters:!1,strict_variables:!1};function et(t){var e;return(t=t||{}).hasOwnProperty("root")&&(t.root=f(e=t.root)?e:l(e)?[e]:[]),t}function nt(t){return v({},tt,t)}(Z=Q||(Q={}))[Z.OUTPUT=0]="OUTPUT",Z[Z.STORE=1]="STORE";var rt=Q,it=function(){function t(t,e){void 0===t&&(t={}),this.blocks={},this.groups={},this.blockMode=rt.OUTPUT,this.opts=nt(e),this.contexts=[t||{}]}return t.prototype.getAll=function(){return this.contexts.reduce(function(t,e){return v(t,e)},{})},t.prototype.get=function(t){var n=this,e=this.propertyAccessSeq(t),r=this.findContextFor(e[0])||p(this.contexts);return e.reduce(function(t,e){return n.readProperty(t,e)},r)},t.prototype.set=function(t,n){var r=this.propertyAccessSeq(t),i=this.findContextFor(r[0])||p(this.contexts);r.some(function(t,e){return!g(i)||(e===r.length-1?(i[t]=n,!0):(void 0===i[t]&&(i[t]={}),i=i[t],!1))})},t.prototype.unshift=function(t){return this.contexts.unshift(t)},t.prototype.push=function(t){return this.contexts.push(t)},t.prototype.pop=function(e){if(!arguments.length)return this.contexts.pop();var t=this.contexts.findIndex(function(t){return t===e});if(-1===t)throw new TypeError("scope not found, cannot pop");return this.contexts.splice(t,1)[0]},t.prototype.findContextFor=function(t,e){void 0===e&&(e=function(){return!0});for(var n=this.contexts.length-1;0<=n;n--){var r=this.contexts[n];if(e(r)&&t in r)return r}return null},t.prototype.readProperty=function(t,e){var n,r;if(u(t)?n=void 0:(t=function(t){if(s(t.to_liquid))return t.to_liquid();if(s(t.toLiquid))return t.toLiquid();return t}(t),n="size"===e?u((r=t).size)&&(f(r)||l(r))?r.length:r.size:t[e],s(t.liquid_method_missing)&&(n=t.liquid_method_missing(e))),u(n)&&this.opts.strict_variables)throw new TypeError("undefined variable: "+e);return n},t.prototype.propertyAccessSeq=function(t){t=String(t);for(var e,n,r=[],i="",o=0;o":function(t,e){return null!==t&&null!==e&&e=":function(t,e){return null!==t&&null!==e&&e<=t},"<=":function(t,e){return null!==t&&null!==e&&t<=e},contains:function(t,e){return!!t&&("function"==typeof t.indexOf&&-1"),u+=''),u+='',c.push(r),n=u,[4,this.liquid.renderer.renderTemplates(this.templates,c)];case 1:return u=n+t.sent(),u+="",c.pop(r),[2,u]}})})})];case 1:return t.sent(),0"),[2,u]}})})}},unless:{parse:function(t,e){var n,r=this;this.templates=[],this.elseTemplates=[];var i=this.liquid.parser.parseStream(e).on("start",function(){n=r.templates,r.cond=t.args}).on("tag:else",function(){return n=r.elseTemplates}).on("tag:endunless",function(){return i.stop()}).on("template",function(t){return n.push(t)}).on("end",function(){throw new Error("tag "+t.raw+" not closed")});i.start()},render:function(t){return 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 J("break")})})}},continue:{render:function(){return h(this,void 0,void 0,function(){return d(this,function(t){throw new J("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 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)},lstrip:function(t){return String(t).replace(/^\s+/,"")},downcase:function(t){return t.toLowerCase()},upcase:function(t){return String(t).toUpperCase()},remove:function(t,e){return t.split(e).join("")},remove_first:function(t,e){return t.replace(e,"")},replace:function(t,e,n){return String(t).split(e).join(n)},replace_first:function(t,e,n){return String(t).replace(e,n)},rstrip:function(t){return String(t).replace(/\s+$/,"")},split:function(t,e){return String(t).split(e)},strip:function(t){return String(t).trim()},strip_newlines:function(t){return String(t).replace(/\n/g,"")},truncate:function(t,e,n){return void 0===e&&(e=50),void 0===n&&(n="..."),(t=String(t)).length<=e?t:t.substr(0,e-n.length)+n},truncatewords:function(t,e,n){void 0===e&&(e=15),void 0===n&&(n="...");var r=t.split(/\s+/),i=r.slice(0,e).join(" ");return r.length>=e&&(i+=n),i}},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){void 0===e&&(e=0);var n=Math.pow(10,e);return Math.round(t*n)/n},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]> ":" ",n=w(String(t),String(s).length),r=o[t-1];return""+e+n+"| "+r}).join("\n"));this.message=function(t,e){e.file&&(t+=", file:"+e.file);return t+=", line:"+e.line+", col:"+e.col}(e.message,this.token),this.stack=this.message+"\n"+n+"\n"+this.stack+"\nFrom "+e.stack},t}(Error),y=function(r){function t(t,e){var n=r.call(this,new Error(t),e)||this;return n.name="TokenizationError",r.prototype.update.call(n),n}return e(t,r),t}(t),n=function(r){function t(t,e){var n=r.call(this,t,e)||this;return n.name="ParseError",n.message=t.message,r.prototype.update.call(n),n}return e(t,r),t}(t),b=function(r){function t(t,e){var n=r.call(this,t,e.token)||this;return n.name="RenderError",n.message=t.message,r.prototype.update.call(n),n}return e(t,r),t}(t),T=function(n){function t(t){var e=n.call(this,t)||this;return e.resolvedHTML="",e.name="RenderBreakError",e.message=t+"",e}return e(t,n),t}(Error),E=function(n){function t(t){var e=n.call(this,t)||this;return e.name="AssertionError",e.message=t+"",e}return e(t,n),t}(Error);function x(t,e){if(!t)throw new E(e=e||"expect "+t+" to be true")}var _,k,S={root:["."],cache:!1,extname:"",dynamicPartials:!0,trim_tag_right:!1,trim_tag_left:!1,trim_output_right:!1,trim_output_left:!1,greedy:!0,tag_delimiter_left:"{%",tag_delimiter_right:"%}",output_delimiter_left:"{{",output_delimiter_right:"}}",strict_filters:!1,strict_variables:!1};function R(t){var e;return(t=t||{}).hasOwnProperty("root")&&(t.root=f(e=t.root)?e:l(e)?[e]:[]),t}function q(t){return v({},S,t)}(k=_||(_={}))[k.OUTPUT=0]="OUTPUT",k[k.STORE=1]="STORE";var M=_,O=function(){function t(t,e){void 0===t&&(t={}),this.blocks={},this.groups={},this.blockMode=M.OUTPUT,this.opts=q(e),this.contexts=[t||{}]}return t.prototype.getAll=function(){return this.contexts.reduce(function(t,e){return v(t,e)},{})},t.prototype.get=function(t){var n=this,e=this.propertyAccessSeq(t),r=this.findContextFor(e[0])||h(this.contexts);return e.reduce(function(t,e){return n.readProperty(t,e)},r)},t.prototype.set=function(t,n){var r=this.propertyAccessSeq(t),i=this.findContextFor(r[0])||h(this.contexts);r.some(function(t,e){return!g(i)||(e===r.length-1?(i[t]=n,!0):(void 0===i[t]&&(i[t]={}),i=i[t],!1))})},t.prototype.unshift=function(t){return this.contexts.unshift(t)},t.prototype.push=function(t){return this.contexts.push(t)},t.prototype.pop=function(e){if(!arguments.length)return this.contexts.pop();var t=this.contexts.findIndex(function(t){return t===e});if(-1===t)throw new TypeError("scope not found, cannot pop");return this.contexts.splice(t,1)[0]},t.prototype.findContextFor=function(t,e){void 0===e&&(e=function(){return!0});for(var n=this.contexts.length-1;0<=n;n--){var r=this.contexts[n];if(e(r)&&t in r)return r}return null},t.prototype.readProperty=function(t,e){var n,r;if(u(t)?n=void 0:(t=function(t){if(s(t.to_liquid))return t.to_liquid();if(s(t.toLiquid))return t.toLiquid();return t}(t),n="size"===e?u((r=t).size)&&(f(r)||l(r))?r.length:r.size:t[e],s(t.liquid_method_missing)&&(n=t.liquid_method_missing(e))),u(n)&&this.opts.strict_variables)throw new TypeError("undefined variable: "+e);return n},t.prototype.propertyAccessSeq=function(t){t=String(t);for(var e,n=[],r="",i=0;i=|<|>|\s+contains\s+/],st=function(a){function t(t,e,n,r,i,o){var s=a.call(this,t,e,n,r,i,o)||this;s.type="tag";var u=s.value.match(nt);if(!u)throw new y("illegal tag syntax",s);return s.name=u[1],s.args=u[2],s}return e(t,a),t}(C),ut=function(u){function t(t,e,n,r,i,o){var s=u.call(this,t,e,n,r,i,o)||this;return s.type="output",s}return e(t,u),t}(C);(D=j||(j={}))[D.HTML=0]="HTML",D[D.OUTPUT=1]="OUTPUT",D[D.TAG=2]="TAG";var at=function(){function t(t){this.options=q(t)}return t.prototype.tokenize=function(t,e){for(var n=[],r=this.options.tag_delimiter_left,i=this.options.tag_delimiter_right,o=this.options.output_delimiter_left,s=this.options.output_delimiter_right,u=0,a=1,c=j.HTML,l="",f=0,h=1,p=1;u":function(t,e){return null!==t&&null!==e&&e=":function(t,e){return null!==t&&null!==e&&e<=t},"<=":function(t,e){return null!==t&&null!==e&&t<=e},contains:function(t,e){return!!t&&("function"==typeof t.indexOf&&-1"),u+=''),u+='',c.push(r),n=u,[4,this.liquid.renderer.renderTemplates(this.templates,c)];case 1:return u=n+t.sent(),u+="",c.pop(r),[2,u]}})})})];case 1:return t.sent(),0"),[2,u]}})})}},unless:{parse:function(t,e){var n,r=this;this.templates=[],this.elseTemplates=[];var i=this.liquid.parser.parseStream(e).on("start",function(){n=r.templates,r.cond=t.args}).on("tag:else",function(){return n=r.elseTemplates}).on("tag:endunless",function(){return i.stop()}).on("template",function(t){return n.push(t)}).on("end",function(){throw new Error("tag "+t.raw+" not closed")});i.start()},render:function(t){return dt(ft(this.cond,t))?this.liquid.renderer.renderTemplates(this.templates,t):this.liquid.renderer.renderTemplates(this.elseTemplates,t)}},break:{render:function(){return p(this,void 0,void 0,function(){return d(this,function(t){throw new T("break")})})}},continue:{render:function(){return p(this,void 0,void 0,function(){return d(this,function(t){throw new T("continue")})})}}},Xt={"&":"&","<":"<",">":">",'"':""","'":"'"},Kt={"&":"&","<":"<",">":">",""":'"',"'":"'"};function Qt(t){return String(t).replace(/&|<|>|"|'/g,function(t){return Xt[t]})}var Zt={escape:Qt,escape_once:function(t){return Qt(String(t).replace(/&(amp|lt|gt|#34|#39);/g,function(t){return Kt[t]}))},newline_to_br:function(t){return t.replace(/\n/g,"
")},strip_html:function(t){return t.replace(/|||<.*?>/g,"")}},te={append:function(t,e){return t+e},prepend:function(t,e){return e+t},capitalize:function(t){return String(t).charAt(0).toUpperCase()+t.slice(1)},lstrip:function(t){return String(t).replace(/^\s+/,"")},downcase:function(t){return t.toLowerCase()},upcase:function(t){return String(t).toUpperCase()},remove:function(t,e){return t.split(e).join("")},remove_first:function(t,e){return t.replace(e,"")},replace:function(t,e,n){return String(t).split(e).join(n)},replace_first:function(t,e,n){return String(t).replace(e,n)},rstrip:function(t){return String(t).replace(/\s+$/,"")},split:function(t,e){return String(t).split(e)},strip:function(t){return String(t).trim()},strip_newlines:function(t){return String(t).replace(/\n/g,"")},truncate:function(t,e,n){return void 0===e&&(e=50),void 0===n&&(n="..."),(t=String(t)).length<=e?t:t.substr(0,e-n.length)+n},truncatewords:function(t,e,n){void 0===e&&(e=15),void 0===n&&(n="...");var r=t.split(/\s+/),i=r.slice(0,e).join(" ");return r.length>=e&&(i+=n),i}},ee={abs:function(t){return Math.abs(t)},ceil:function(t){return Math.ceil(t)},divided_by:function(t,e){return t/e},floor:function(t){return Math.floor(t)},minus:re(function(t,e){return t-e}),modulo:re(function(t,e){return t%e}),round:function(t,e){void 0===e&&(e=0);var n=Math.pow(10,e);return Math.round(t*n)/n},plus:re(function(t,e){return Number(t)+Number(e)}),times:function(t,e){return t*e}};function ne(t){var e=String(t).split(".");return 1 (fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise;\nexport function promisify (fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void):(arg1: T1, arg2: T2) => Promise;\nexport function promisify (fn: any) {\n return function (...args: any[]) {\n return new Promise((resolve, reject) => {\n fn(...args, (err: Error, result: any) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value: any): string {\n if (isNil(value)) return ''\n if (isFunction(value.to_liquid)) return stringify(value.to_liquid())\n if (isFunction(value.toLiquid)) return stringify(value.toLiquid())\n if (isFunction(value.to_s)) return value.to_s()\n if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value)\n if (isFunction(value.toString)) return value.toString()\n return toStr.call(value)\n}\n\nfunction defaultToString (value: any): string {\n const cache: string[] = []\n return JSON.stringify(value, (key, value) => {\n if (isObject(value)) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n}\n\nexport function create (proto: T1): T2 {\n return Object.create(proto)\n}\n\nexport function isNil (value: any): boolean {\n return value === null || value === undefined\n}\n\nexport function isArray (value: any): boolean {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value: any): boolean {\n const signature = toStr.call(value)\n // [object XXXError]\n return signature.substr(-6, 5) === 'Error' ||\n (typeof value.message === 'string' && typeof value.name === 'string')\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (\n object: {[key: string]: T} | undefined,\n iteratee: ((val: T, key: string, obj: {[key: string]: T}) => boolean | void)\n) {\n object = object || {}\n for (const k in object) {\n if (object.hasOwnProperty(k)) {\n if (iteratee(object[k], k, object) === false) break\n }\n }\n return object\n}\n\nexport function last (arr: T[]): T;\nexport function last (arr: string): string;\nexport function last (arr: any[] | string): any | string {\n return arr[arr.length - 1]\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value: any): boolean {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\n/*\n * A function to create flexibly-numbered lists of integers,\n * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.\n * Returns a list of integers from start (inclusive) to stop (exclusive),\n * incremented (or decremented) by step, exclusive.\n * Note that ranges that stop before they start are considered to be zero-length instead of\n * negative — if you'd like a negative range, use a negative step.\n */\nexport function range (start: number, stop?: number, step?: number) {\n if (stop === undefined) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr: number[] = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n\nexport function padStart (str: any, length: number, ch: string = ' ') {\n str = String(str)\n let n = length - str.length\n while (n-- > 0) str = ch + str\n return str\n}\n","// 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: string) {\n return integerLine.test(str)\n}\n\nexport function isLiteral (str: string) {\n return literalLine.test(str)\n}\n\nexport function isRange (str: string) {\n return rangeLine.test(str)\n}\n\nexport function isVariable (str: string) {\n return variableLine.test(str)\n}\n\nexport function matchValue (str: string) {\n return value.exec(str)\n}\n\nexport function parseLiteral (str: string) {\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'\nimport ITemplate from 'src/template/itemplate'\n\nabstract class LiquidError extends Error {\n private token: Token\n private originalError: Error\n constructor (err: Error, token: Token) {\n super(err.message)\n this.originalError = err\n this.token = token\n }\n protected update () {\n const err = this.originalError\n const context = mkContext(this.token)\n this.message = mkMessage(err.message, this.token)\n this.stack = this.message + '\\n' + context +\n '\\n' + this.stack + '\\nFrom ' + err.stack\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor (message: string, token: Token) {\n super(new Error(message), token)\n this.name = 'TokenizationError'\n super.update()\n }\n}\n\nexport class ParseError extends LiquidError {\n constructor (err: Error, token: Token) {\n super(err, token)\n this.name = 'ParseError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderError extends LiquidError {\n constructor (err: Error, tpl: ITemplate) {\n super(err, tpl.token)\n this.name = 'RenderError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderBreakError extends Error {\n resolvedHTML: string = ''\n constructor (message: string) {\n super(message)\n this.name = 'RenderBreakError'\n this.message = message + ''\n }\n}\n\nexport class AssertionError extends Error {\n constructor (message: string) {\n super(message)\n this.name = 'AssertionError'\n this.message = message + ''\n }\n}\n\nfunction mkContext (token: Token) {\n const lines = token.input.split('\\n')\n const begin = Math.max(token.line - 2, 1)\n const end = Math.min(token.line + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === token.line) ? '>> ' : ' '\n const num = _.padStart(String(lineNumber), String(end).length)\n const text = lines[lineNumber - 1]\n return `${indicator}${num}| ${text}`\n })\n .join('\\n')\n\n return context\n}\n\nfunction mkMessage (msg: string, token: Token) {\n if (token.file) msg += `, file:${token.file}`\n msg += `, line:${token.line}, col:${token.col}`\n return msg\n}\n","import { AssertionError } from './error'\n\nexport default function (predicate: any, message?: string) {\n if (!predicate) {\n message = message || `expect ${predicate} to be true`\n throw new AssertionError(message)\n }\n}\n","/* eslint-disable camelcase */\n\nimport * as _ from './util/underscore'\n\nexport interface LiquidOptions {\n /** `root` is a directory or an array of directories to resolve layouts and includes, as well as the filename passed in when calling `.renderFile()`. If an array, the files are looked up in the order they occur in the array. Defaults to `[\".\"]` */\n root?: string | string[]\n /** `extname` is used to lookup the template file when filepath doesn't include an extension name. Eg: setting to `\".html\"` will allow including file by basename. Defaults to `\"\"`. */\n extname?: string\n /** `cache` indicates whether or not to cache resolved templates. Defaults to `false`. */\n cache?: boolean\n /** `dynamicPartials`: if set, treat `` parameter in `{%include filepath %}`, `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */\n dynamicPartials?: boolean\n /** `strict_filters` is used to enable strict filter existence. If set to `false`, undefined filters will be rendered as empty string. Otherwise, undefined filters will cause an exception. Defaults to `false`. */\n strict_filters?: boolean\n /** `strict_variables` is used to enable strict variable derivation. If set to `false`, undefined variables will be rendered as empty string. Otherwise, undefined variables will cause an exception. Defaults to `false`. */\n strict_variables?: boolean\n /** `trim_tag_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of tags (`{% %}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_tag_right?: boolean\n /** `trim_tag_left` is similar to `trim_tag_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_tag_left?: boolean\n /** ``trim_output_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_output_right?: boolean\n /** `trim_output_left` is similar to `trim_output_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_output_left?: boolean\n /** `tag_delimiter_left` and `tag_delimiter_right` are used to override the delimiter for liquid tags **/\n tag_delimiter_left?: string,\n tag_delimiter_right?: string,\n /** `output_delimiter_left` and `output_delimiter_right` are used to override the delimiter for liquid outputs **/\n output_delimiter_left?: string,\n output_delimiter_right?: string,\n /** `greedy` is used to specify whether `trim_left`/`trim_right` is greedy. When set to `true`, all consecutive blank characters including `\\n` will be trimed regardless of line breaks. Defaults to `true`. */\n greedy?: boolean\n}\n\nexport interface NormalizedOptions extends LiquidOptions {\n root?: string[]\n}\n\nexport interface NormalizedFullOptions extends NormalizedOptions {\n root: string[]\n extname: string\n cache: boolean\n dynamicPartials: boolean\n strict_filters: boolean\n strict_variables: boolean\n trim_tag_right: boolean\n trim_tag_left: boolean\n trim_output_right: boolean\n trim_output_left: boolean\n tag_delimiter_left: string,\n tag_delimiter_right: string,\n output_delimiter_left: string,\n output_delimiter_right: string,\n greedy: boolean\n}\n\nconst defaultOptions: NormalizedFullOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_output_right: false,\n trim_output_left: false,\n greedy: true,\n tag_delimiter_left: '{%',\n tag_delimiter_right: '%}',\n output_delimiter_left: '{{',\n output_delimiter_right: '}}',\n strict_filters: false,\n strict_variables: false\n}\n\nexport function normalize (options?: LiquidOptions): NormalizedOptions {\n options = options || {}\n if (options.hasOwnProperty('root')) {\n options.root = normalizeStringArray(options.root)\n }\n return options as NormalizedOptions\n}\n\nexport function applyDefault (options?: NormalizedOptions): NormalizedFullOptions {\n return { ...defaultOptions, ...options }\n}\n\nfunction normalizeStringArray (value: any): string[] {\n if (_.isArray(value)) return value as string[]\n if (_.isString(value)) return [value as string]\n return []\n}\n","enum BlockMode {\n /* store rendered html into blocks */\n OUTPUT,\n /* output rendered html directly */\n STORE\n}\n\nexport default BlockMode\n","import * as _ from '../util/underscore'\nimport { __assign } from 'tslib'\nimport * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\nimport BlockMode from './block-mode'\nimport IContext from './icontext'\n\nexport default class Scope {\n opts: NormalizedFullOptions\n contexts: Array\n blocks: object = {}\n groups: {[key: string]: number} = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts?: NormalizedFullOptions) {\n this.opts = applyDefault(opts)\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => __assign(ctx, val), {})\n }\n get (path: string): any {\n const paths = this.propertyAccessSeq(path)\n const scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n return paths.reduce((value, key) => this.readProperty(value, key), scope)\n }\n set (path: string, v: any): void {\n const paths = this.propertyAccessSeq(path)\n let scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n paths.some((key, i) => {\n if (!_.isObject(scope)) {\n return true\n }\n if (i === paths.length - 1) {\n scope[key] = v\n return true\n }\n if (undefined === scope[key]) {\n scope[key] = {}\n }\n scope = scope[key]\n return false\n })\n }\n unshift (ctx: object) {\n return this.contexts.unshift(ctx)\n }\n push (ctx: object) {\n return this.contexts.push(ctx)\n }\n pop (ctx?: object): object | undefined {\n if (!arguments.length) {\n return this.contexts.pop()\n }\n const i = this.contexts.findIndex(scope => scope === ctx)\n if (i === -1) {\n throw new TypeError('scope not found, cannot pop')\n }\n return this.contexts.splice(i, 1)[0]\n }\n findContextFor (key: string, filter: ((conttext: object) => boolean) = () => true) {\n for (let i = this.contexts.length - 1; i >= 0; i--) {\n const candidate = this.contexts[i]\n if (!filter(candidate)) continue\n if (key in candidate) {\n return candidate\n }\n }\n return null\n }\n private readProperty (obj: IContext, key: string) {\n let val\n if (_.isNil(obj)) {\n val = undefined\n } else {\n obj = toLiquid(obj)\n val = key === 'size' ? readSize(obj) : obj[key]\n if (_.isFunction(obj.liquid_method_missing)) {\n val = obj.liquid_method_missing!(key)\n }\n }\n if (_.isNil(val) && this.opts.strict_variables) {\n throw new TypeError(`undefined variable: ${key}`)\n }\n return val\n }\n\n /*\n * Parse property access sequence from access string\n * @example\n * accessSeq(\"foo.bar\") // ['foo', 'bar']\n * accessSeq(\"foo['bar']\") // ['foo', 'bar']\n * accessSeq(\"foo['b]r']\") // ['foo', 'b]r']\n * accessSeq(\"foo[bar.coo]\") // ['foo', 'bar'], for bar.coo == 'bar'\n */\n propertyAccessSeq (str: string) {\n str = String(str)\n const seq: string[] = []\n let name = ''\n let j\n let i = 0\n while (i < str.length) {\n switch (str[i]) {\n case '[':\n push()\n\n const delemiter = str[i + 1]\n if (/['\"]/.test(delemiter)) { // foo[\"bar\"]\n j = str.indexOf(delemiter, i + 2)\n assert(j !== -1, `unbalanced ${delemiter}: ${str}`)\n name = str.slice(i + 2, j)\n push()\n i = j + 2\n } else { // foo[bar.coo]\n j = matchRightBracket(str, i + 1)\n assert(j !== -1, `unbalanced []: ${str}`)\n name = str.slice(i + 1, j)\n if (!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: IContext) {\n if (_.isFunction(obj.to_liquid)) {\n return obj.to_liquid()\n }\n if (_.isFunction(obj.toLiquid)) {\n return obj.toLiquid()\n }\n return obj\n}\n\nfunction readSize (obj: IContext) {\n if (!_.isNil(obj.size)) return obj.size\n if (_.isArray(obj) || _.isString(obj)) return obj.length\n return obj.size\n}\n\nfunction matchRightBracket (str: string, begin: number) {\n let stack = 1 // count of '[' - count of ']'\n for (let i = begin; i < str.length; i++) {\n if (str[i] === '[') {\n stack++\n }\n if (str[i] === ']') {\n stack--\n if (stack === 0) {\n return i\n }\n }\n }\n return -1\n}\n","export class CaptureScope {}\nexport class AssignScope {}\nexport class IncrementScope {}\nexport class DecrementScope {}\n","import { last } from '../util/underscore'\nimport IFS from './ifs'\n\nfunction domResolve (root: string, path: string) {\n const base = document.createElement('base')\n base.href = root\n\n const head = document.getElementsByTagName('head')[0]\n head.insertBefore(base, head.firstChild)\n\n const a = document.createElement('a')\n a.href = path\n const resolved = a.href\n head.removeChild(base)\n\n return resolved\n}\n\nfunction resolve (root: string, filepath: string, ext: string) {\n if (root.length && last(root) !== '/') root += '/'\n const url = domResolve(root, filepath)\n return url.replace(/^(\\w+:\\/\\/[^/]+)(\\/[^?]+)/, (str, origin, path) => {\n const last = path.split('/').pop()\n if (/\\.\\w+$/.test(last)) return str\n return origin + path + ext\n })\n}\n\nasync function readFile (url: string): Promise {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.responseText as string)\n } else {\n reject(new Error(xhr.statusText))\n }\n }\n xhr.onerror = () => {\n reject(new Error('An error occurred whilst receiving the response.'))\n }\n xhr.open('GET', url)\n xhr.send()\n })\n}\n\nasync function exists () {\n return true\n}\n\nexport default { readFile, resolve, exists } as IFS\n","export default class Token {\n type: string = 'notset'\n line: number\n col: number\n raw: string\n input: string\n file?: string\n value: string\n constructor (raw: string, input: string, line: number, col: number, file?: string) {\n this.col = col\n this.line = line\n this.raw = raw\n this.value = raw\n this.input = input\n this.file = file\n }\n}\n","import whiteSpaceCtrl from './whitespace-ctrl'\nimport HTMLToken from './html-token'\nimport TagToken from './tag-token'\nimport Token from './token'\nimport OutputToken from './output-token'\nimport { TokenizationError } from 'src/util/error'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: NormalizedFullOptions\n constructor (options?: NormalizedFullOptions) {\n this.options = applyDefault(options)\n }\n tokenize (input: string, file?: string) {\n const tokens: Token[] = []\n const tagL = this.options.tag_delimiter_left\n const tagR = this.options.tag_delimiter_right\n const outputL = this.options.output_delimiter_left\n const outputR = this.options.output_delimiter_right\n let p = 0\n let curLine = 1\n let state = ParseState.HTML\n let buffer = ''\n let lineBegin = 0\n let line = 1\n let col = 1\n\n while (p < input.length) {\n if (input[p] === '\\n') {\n curLine++\n lineBegin = p + 1\n }\n if (state === ParseState.HTML) {\n if (input.substr(p, outputL.length) === outputL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = outputL\n line = curLine\n col = p - lineBegin + 1\n p += outputL.length\n state = ParseState.OUTPUT\n continue\n } else if (input.substr(p, tagL.length) === tagL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = tagL\n line = curLine\n col = p - lineBegin + 1\n p += tagL.length\n state = ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && input.substr(p, outputR.length) === outputR) {\n buffer += outputR\n tokens.push(new OutputToken(buffer, buffer.slice(outputL.length, -outputR.length), input, line, col, file))\n p += outputR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n } else if (input.substr(p, tagR.length) === tagR) {\n buffer += tagR\n tokens.push(new TagToken(buffer, buffer.slice(tagL.length, -tagR.length), input, line, col, file))\n p += tagR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n }\n buffer += input[p++]\n }\n if (state !== ParseState.HTML) {\n const t = state === ParseState.OUTPUT ? 'output' : 'tag'\n const str = buffer.length > 16 ? buffer.slice(0, 13) + '...' : buffer\n throw new TokenizationError(\n `${t} \"${str}\" not closed`,\n new Token(buffer, input, line, col, file)\n )\n }\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n\n whiteSpaceCtrl(tokens, this.options)\n return tokens\n }\n}\n","import Token from './token'\n\nexport default class HTMLToken extends Token {\n constructor (str: string, input: string, line: number, col: number, file?: string) {\n super(str, input, line, col, file)\n this.type = 'html'\n this.value = str\n }\n}\n","import Token from './token'\nimport { last } from 'src/util/underscore'\n\nexport default class DelimitedToken extends Token {\n trimLeft: boolean\n trimRight: boolean\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, input, line, pos, file)\n this.trimLeft = value[0] === '-'\n this.trimRight = last(value) === '-'\n this.value = value\n .slice(\n this.trimLeft ? 1 : 0,\n this.trimRight ? -1 : value.length\n )\n .trim()\n }\n}\n","import DelimitedToken from './delimited-token'\nimport { TokenizationError } from 'src/util/error'\nimport * as lexical from './lexical'\n\nexport default class TagToken extends DelimitedToken {\n name: string\n args: string\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'tag'\n const match = this.value.match(lexical.tagLine)\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, this)\n }\n this.name = match[1]\n this.args = match[2]\n }\n}\n","import DelimitedToken from './delimited-token'\n\nexport default class OutputToken extends DelimitedToken {\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'output'\n }\n}\n","import DelimitedToken from 'src/parser/delimited-token'\nimport Token from 'src/parser/token'\nimport TagToken from 'src/parser/tag-token'\nimport { NormalizedFullOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: NormalizedFullOptions) {\n options = { greedy: true, ...options }\n let inRaw = false\n\n tokens.forEach((token: Token, i: number) => {\n if (shouldTrimLeft(token as DelimitedToken, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && (token as TagToken).name === 'raw') inRaw = true\n if (token.type === 'tag' && (token as TagToken).name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token as DelimitedToken, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimLeft || options.trim_tag_left\n if (token.type === 'output') return token.trimLeft || options.trim_output_left\n}\n\nfunction shouldTrimRight (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimRight || options.trim_tag_right\n if (token.type === 'output') return token.trimRight || options.trim_output_right\n}\n\nfunction trimLeft (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rLeft = greedy ? /\\s+$/g : /[\\t\\r ]*$/g\n token.value = token.value.replace(rLeft, '')\n}\n\nfunction trimRight (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rRight = greedy ? /^\\s+/g : /^[\\t\\r ]*\\n?/g\n token.value = token.value.replace(rRight, '')\n}\n","import { RenderError } from 'src/util/error'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Render {\n async renderTemplates (templates: ITemplate[], scope: Scope) {\n assert(scope, 'unable to evalTemplates: scope undefined')\n\n let html = ''\n for (const tpl of templates) {\n try {\n html += await tpl.render(scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n e.resolvedHTML = html\n throw e\n }\n throw e.name === 'RenderError' ? e : new RenderError(e, tpl)\n }\n }\n return html\n }\n}\n","import * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport Scope from 'src/scope/scope'\nimport { range } from 'src/util/underscore'\n\nconst operators = {\n '==': (l: any, r: any) => l === r,\n '!=': (l: any, r: any) => l !== r,\n '>': (l: any, r: any) => l !== null && r !== null && l > r,\n '<': (l: any, r: any) => l !== null && r !== null && l < r,\n '>=': (l: any, r: any) => l !== null && r !== null && l >= r,\n '<=': (l: any, r: any) => l !== null && r !== null && l <= r,\n 'contains': (l: any, r: any) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l: any, r: any) => isTruthy(l) && isTruthy(r),\n 'or': (l: any, r: any) => isTruthy(l) || isTruthy(r)\n}\n\nexport function evalExp (exp: string, scope: Scope): any {\n assert(scope, 'unable to evalExp: scope undefined')\n const operatorREs = lexical.operators\n let match\n for (let i = 0; i < operatorREs.length; i++) {\n const operatorRE = operatorREs[i]\n const expRE = new RegExp(`^(${lexical.quoteBalanced.source})(${operatorRE.source})(${lexical.quoteBalanced.source})$`)\n if ((match = exp.match(expRE))) {\n const l = evalExp(match[1], scope)\n const op = operators[match[2].trim()]\n const r = evalExp(match[3], scope)\n return op(l, r)\n }\n }\n\n if ((match = exp.match(lexical.rangeLine))) {\n const low = evalValue(match[1], scope)\n const high = evalValue(match[2], scope)\n return range(low, high + 1)\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str: string, scope: Scope) {\n 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: any): boolean {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val: any): boolean {\n return val === false || undefined === val || val === null\n}\n","import { hashCapture } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\n\n/**\n * Key-Value Pairs Representing Tag Arguments\n * Example:\n * For the markup `{% include 'head.html' foo='bar' %}`,\n * hash['foo'] === 'bar'\n */\nexport default class Hash {\n [key: string]: any\n constructor (markup: string, scope: Scope) {\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n this[k] = evalValue(v, scope)\n }\n }\n}\n","export default abstract class Template {\n token: T;\n constructor (token: T) {\n this.token = token\n }\n}\n","import { create, stringify } from 'src/util/underscore'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITagImpl from './itag-impl'\nimport ITagImplOptions from './itag-impl-options'\nimport Liquid from 'src/liquid'\nimport Hash from './hash'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\n\nexport default class Tag extends Template implements ITemplate {\n name: string\n private impl: ITagImpl\n static impls: { [key: string]: ITagImplOptions } = {}\n\n constructor (token: TagToken, tokens: Token[], liquid: Liquid) {\n super(token)\n this.name = token.name\n\n const impl = Tag.impls[token.name]\n assert(impl, `tag ${token.name} not found`)\n this.impl = create(impl)\n this.impl.liquid = liquid\n if (this.impl.parse) {\n this.impl.parse(token, tokens)\n }\n }\n async render (scope: Scope) {\n const hash = new Hash(this.token.args, scope)\n const impl = this.impl\n if (typeof impl.render !== 'function') {\n return ''\n }\n const html = await impl.render(scope, hash)\n return stringify(html)\n }\n static register (name: string, tag: ITagImplOptions) {\n Tag.impls[name] = tag\n }\n static clear () {\n Tag.impls = {}\n }\n}\n","import assert from 'src/util/assert'\nimport * as lexical from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\nimport { FilterImpl } from './filter-impl'\n\nconst valueRE = new RegExp(`${lexical.value.source}`, 'g')\n\nexport default class Filter {\n name: string\n impl: FilterImpl\n args: string[]\n private static impls: {[key: string]: FilterImpl} = {}\n\n constructor (str: string, strictFilters: boolean = false) {\n const match = lexical.filterLine.exec(str) as string[]\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: string[] = []\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 return this.impl.apply(null, [value, ...args])\n }\n static register (name: string, filter: FilterImpl) {\n Filter.impls[name] = filter\n }\n static clear () {\n Filter.impls = {}\n }\n}\n","import Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from './tag-token'\n\ntype ParseToken = ((token: Token, remainTokens: Array) => ITemplate)\n\nexport default class ParseStream {\n private tokens: Array\n private handlers: {[key: string]: (arg: any) => void} = {}\n private stopRequested: boolean = false\n private parseToken: ParseToken\n\n constructor (tokens: Array, parseToken: ParseToken) {\n this.tokens = tokens\n this.parseToken = parseToken\n }\n on (name: string, cb: (arg: T) => void): ParseStream {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: T) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n return false\n }\n start () {\n this.trigger('start')\n let token: Token | undefined\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' && this.trigger(`tag:${(token).name}`, token)) {\n continue\n }\n const template = this.parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n }\n stop () {\n this.stopRequested = true\n return this\n }\n}\n","import { evalExp } from 'src/render/syntax'\nimport * as lexical from 'src/parser/lexical'\nimport assert from 'src/util/assert'\nimport Filter from './filter/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: RegExpExecArray | null = lexical.matchValue(str) as RegExpExecArray\n assert(match, `illegal value string: ${str}`)\n\n this.initial = match[0]\n str = str.substr(match.index + match[0].length)\n\n while ((match = lexical.filter.exec(str))) {\n this.filters.push(new Filter(match[0].trim(), strictFilters))\n }\n }\n value (scope: Scope) {\n return this.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(this.initial, scope))\n }\n}\n","import Value from './value'\nimport { stringify } from 'src/util/underscore'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport OutputToken from 'src/parser/output-token'\n\nexport default class Output extends Template implements ITemplate {\n value: Value\n constructor (token: OutputToken, strictFilters?: boolean) {\n super(token)\n this.value = new Value(token.value, strictFilters)\n }\n async render (scope: Scope): Promise {\n const html = await this.value.value(scope)\n return stringify(html)\n }\n}\n","import Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport HTMLToken from 'src/parser/html-token'\n\nexport default class extends Template implements ITemplate {\n str: string\n constructor (token: HTMLToken) {\n super(token)\n this.str = token.value\n }\n async render (): Promise {\n return this.str\n }\n}\n","import { ParseError } from '../util/error'\nimport Liquid from 'src/liquid'\nimport ParseStream from './parse-stream'\nimport Token from './token'\nimport TagToken from './tag-token'\nimport OutputToken from './output-token'\nimport Tag from 'src/template/tag/tag'\nimport Output from 'src/template/output'\nimport HTML from 'src/template/html'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Parser {\n liquid: Liquid\n\n constructor (liquid: Liquid) {\n this.liquid = liquid\n }\n parse (tokens: Array) {\n let token\n const templates: ITemplate[] = []\n while ((token = tokens.shift())) {\n templates.push(this.parseToken(token, tokens))\n }\n return templates\n }\n parseToken (token: Token, remainTokens: Array) {\n try {\n if (token.type === 'tag') {\n return new Tag(token as TagToken, remainTokens, this.liquid)\n }\n if (token.type === 'output') {\n return new Output(token as OutputToken, this.liquid.options.strict_filters)\n }\n return new HTML(token)\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n parseStream (tokens: Array) {\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens))\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { AssignScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(re) as RegExpMatchArray\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (scope: Scope) {\n const ctx = new AssignScope()\n ctx[this.key] = this.liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n} as ITagImplOptions\n","/*\n * Call functions in serial until someone rejected.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function mapSeries (\n iterable: T1[],\n iteratee: (item: T1, idx: number, iterable: T1[]) => Promise | T2\n): Promise {\n let ret = Promise.resolve(0)\n const result: T2[] = []\n iterable.forEach(function (item, idx) {\n ret = ret\n .then(() => iteratee(item, idx, iterable))\n .then(x => result.push(x))\n })\n return ret.then(() => result)\n}\n","import { mapSeries } from 'src/util/promise'\nimport { isString, isObject, isArray } from 'src/util/underscore'\nimport { evalExp } from 'src/render/syntax'\nimport assert from 'src/util/assert'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n type: 'block',\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n this.variable = match[1]\n this.collection = match[2]\n this.reversed = !!match[3]\n\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endfor', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection] as string[]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]]) as Array<[string, any]>\n }\n }\n if (!isArray(collection) || !collection.length) {\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n if (this.reversed) collection.reverse()\n\n const contexts = collection.map((item: string, i: number) => {\n const ctx = {}\n ctx[this.variable] = item\n ctx['forloop'] = {\n first: i === 0,\n index: i + 1,\n index0: i,\n last: i === collection.length - 1,\n length: collection.length,\n rindex: collection.length - i,\n rindex0: collection.length - i - 1\n }\n return ctx\n })\n\n let html = ''\n let finished = false\n await mapSeries(contexts, async context => {\n if (finished) return\n\n scope.push(context)\n try {\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n html += e.resolvedHTML\n if (e.message === 'break') {\n finished = true\n }\n } else throw e\n }\n scope.pop(context)\n })\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = tagToken.args.match(re) as RegExpMatchArray\n assert(match, `${tagToken.args} not valid identifier`)\n\n this.variable = match[1]\n this.templates = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', () => stream.stop())\n .on('template', (tpl) => this.templates.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const html = await this.liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = new CaptureScope()\n ctx[this.variable] = html\n scope.push(ctx)\n }\n} as ITagImplOptions\n","import { evalExp } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p: ITemplate[] = []\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:when', (token: TagToken) => {\n this.cases.push({\n val: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endcase', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = evalExp(branch.val, scope)\n const cond = evalExp(this.cond, scope)\n if (val === cond) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value, quotedLine } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /[^\\s,]+/\nconst withRE = new RegExp(`with\\\\s+(${value.source})`)\n\nexport default {\n parse: function (token: TagToken) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticValue = match[0]\n }\n\n match = value.exec(token.args)\n if (match) {\n this.value = match[0]\n }\n\n match = withRE.exec(token.args)\n if (match) {\n this.with = match[1]\n }\n },\n render: async function (scope: Scope, hash: Hash) {\n let filepath\n if (scope.opts.dynamicPartials) {\n if (quotedLine.exec(this.value)) {\n const template = this.value.slice(1, -1)\n filepath = await this.liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = evalValue(this.value, scope)\n }\n } else {\n filepath = this.staticValue\n }\n assert(filepath, `cannot include with empty filename`)\n\n const originBlocks = scope.blocks\n const originBlockMode = scope.blockMode\n\n scope.blocks = {}\n scope.blockMode = BlockMode.OUTPUT\n if (this.with) {\n hash[filepath] = evalValue(this.with, scope)\n }\n const templates = await this.liquid.getTemplate(filepath, scope.opts)\n scope.push(hash)\n const html = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.blocks = originBlocks\n scope.blockMode = originBlockMode\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, DecrementScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(identifier) as RegExpMatchArray\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope: Scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new DecrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n return --context[this.variable]\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\nconst candidatesRE = new RegExp(rValue.source, 'g')\n\nexport default {\n parse: function (tagToken: TagToken) {\n let match: RegExpExecArray | null = groupRE.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.group = match[1] || ''\n const candidates = match[2]\n\n this.candidates = []\n\n while ((match = candidatesRE.exec(candidates))) {\n this.candidates.push(match[0])\n }\n assert(this.candidates.length, `empty candidates: ${tagToken.raw}`)\n },\n\n render: function (scope: Scope) {\n const group = evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n const groups = scope.groups\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n\n return evalValue(candidate, scope)\n }\n}\n","import { evalExp, isTruthy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', (token: TagToken) => {\n this.branches.push({\n cond: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endif', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (const branch of this.branches) {\n const cond = evalExp(branch.cond, scope)\n if (isTruthy(cond)) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match![0]\n },\n render: function (scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new IncrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n const val = context[this.variable]\n context[this.variable]++\n return val\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /\\S+/\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticLayout = match[0]\n }\n\n match = rValue.exec(token.args)\n if (match) {\n this.layout = match[0]\n }\n\n this.tpls = this.liquid.parser.parse(remainTokens)\n },\n render: async function (scope: Scope, hash: Hash) {\n const layout = scope.opts.dynamicPartials\n ? evalValue(this.layout, scope)\n : this.staticLayout\n assert(layout, `cannot apply layout with empty filename`)\n\n // render the remaining tokens immediately\n scope.blockMode = BlockMode.STORE\n const html = await this.liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.blocks[''] === undefined) {\n scope.blocks[''] = html\n }\n const templates = await this.liquid.getTemplate(layout, scope.opts)\n scope.push(hash)\n scope.blockMode = BlockMode.OUTPUT\n const partial = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n} as ITagImplOptions\n","import BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n this.tpls = [] as ITemplate[]\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', (tpl: ITemplate) => this.tpls.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${token.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const childDefined = scope.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await this.liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.blockMode === BlockMode.STORE) {\n scope.blocks[this.block] = html\n return ''\n }\n return html\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.tokens = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endraw') stream.stop()\n else this.tokens.push(token)\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: function () {\n return this.tokens.map((token: Token) => token.raw).join('')\n }\n}\n","import { mapSeries } from 'src/util/promise'\nimport assert from 'src/util/assert'\nimport { evalExp } from 'src/render/syntax'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.variable = match[1]\n this.collection = match[2]\n this.templates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope) || []\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = hash.cols || collection.length\n const contexts = collection.map((item: any) => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row: number = 0\n let html = ''\n await mapSeries(contexts, async (context, idx) => {\n row = Math.floor(idx / cols) + 1\n const col = (idx % cols) + 1\n if (col === 1) {\n if (row !== 1) {\n html += ''\n }\n html += ``\n }\n\n html += ``\n scope.push(context)\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n html += ''\n scope.pop(context)\n return html\n })\n if (row > 0) {\n html += ''\n }\n return html\n }\n} as ITagImplOptions\n","import assign from './assign'\nimport For from './for'\nimport capture from './capture'\nimport Case from './case'\nimport comment from './comment'\nimport include from './include'\nimport decrement from './decrement'\nimport cycle from './cycle'\nimport If from './if'\nimport increment from './increment'\nimport layout from './layout'\nimport block from './block'\nimport raw from './raw'\nimport tablerow from './tablerow'\nimport unless from './unless'\nimport Break from './break'\nimport Continue from './continue'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst tags: { [key: string]: ITagImplOptions } = {\n assign, 'for': For, capture, 'case': Case, comment, include, decrement, increment, cycle, 'if': If, layout, block, raw, tablerow, unless, 'break': Break, 'continue': Continue\n}\n\nexport default tags\n","import { evalExp, isFalsy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n const cond = evalExp(this.cond, scope)\n return isFalsy(cond)\n ? this.liquid.renderer.renderTemplates(this.templates, scope)\n : this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('break')\n }\n}\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('continue')\n }\n}\n","const escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nfunction escape (str: string) {\n return String(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str: string) {\n return String(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nexport default {\n 'escape': escape,\n 'escape_once': (str: string) => escape(unescape(str)),\n 'newline_to_br': (v: string) => v.replace(/\\n/g, '
'),\n 'strip_html': (v: string) => v.replace(/|||<.*?>/g, '')\n}\n","import { FilterImpl } from 'src/template/filter/filter-impl'\n\nexport default {\n 'append': (v: string, arg: string) => v + arg,\n 'prepend': (v: string, arg: string) => arg + v,\n 'capitalize': (str: string) => String(str).charAt(0).toUpperCase() + str.slice(1),\n 'lstrip': (v: string) => String(v).replace(/^\\s+/, ''),\n 'downcase': (v: string) => v.toLowerCase(),\n 'upcase': (str: string) => String(str).toUpperCase(),\n 'remove': (v: string, arg: string) => v.split(arg).join(''),\n 'remove_first': (v: string, l: string) => v.replace(l, ''),\n 'replace': (v: string, pattern: string, replacement: string) =>\n String(v).split(pattern).join(replacement),\n 'replace_first': (v: string, arg1: string, arg2: string) => String(v).replace(arg1, arg2),\n 'rstrip': (str: string) => String(str).replace(/\\s+$/, ''),\n 'split': (v: string, arg: string) => String(v).split(arg),\n 'strip': (v: string) => String(v).trim(),\n 'strip_newlines': (v: string) => String(v).replace(/\\n/g, ''),\n 'truncate': (v: string, l: number = 50, o: string = '...') => {\n v = String(v)\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v: string, l: number = 15, o: string = '...') => {\n const arr = v.split(/\\s+/)\n let ret = arr.slice(0, l).join(' ')\n if (arr.length >= l) ret += o\n return ret\n }\n} as {[key: string]: FilterImpl}\n","export default {\n 'abs': (v: number) => Math.abs(v),\n 'ceil': (v: number) => Math.ceil(v),\n 'divided_by': (v: number, arg: number) => v / arg,\n 'floor': (v: number) => Math.floor(v),\n 'minus': bindFixed((v: number, arg: number) => v - arg),\n 'modulo': bindFixed((v: number, arg: number) => v % arg),\n 'round': (v: number, arg: number = 0) => {\n const amp = Math.pow(10, arg)\n return Math.round(v * amp) / amp\n },\n 'plus': bindFixed((v: number, arg: number) => Number(v) + Number(arg)),\n 'times': (v: number, arg: number) => v * arg\n}\n\nfunction getFixed (v: number) {\n const p = String(v).split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction bindFixed (cb: (v: number, arg: number) => number) {\n return (l: number, r: number) => {\n const f = Math.max(getFixed(l), getFixed(r))\n return cb(l, r).toFixed(f)\n }\n}\n","export default {\n 'url_decode': (x: string) => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': (x: string) => x.split(' ').map(encodeURIComponent).join('+')\n}\n","import { last } from 'src/util/underscore'\n\nexport default {\n 'join': (v: any[], arg: string) => v.join(arg === undefined ? ' ' : arg),\n 'last': (v: T[]): T => last(v),\n 'first': (v: T[]): T => v[0],\n 'map': (arr: {[key: string]: T1}[], arg: string): T1[] => arr.map(v => v[arg]),\n 'reverse': (v: any[]) => v.reverse(),\n 'sort': (v: T[], arg: (lhs: T, rhs: T) => number) => v.sort(arg),\n 'size': (v: string | any[]) => v.length,\n 'concat': (v: T1[], arg: T2[] | T2): Array => Array.prototype.concat.call(v, arg),\n 'slice': (v: T[], begin: number, length: number): T[] => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'uniq': function (arr: T[]): T[] {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(String(val))) return false\n u[String(val)] = true\n return true\n })\n }\n}\n","import { padStart } from './underscore'\n\nconst monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst monthNamesShort = monthNames.map(abbr)\nconst dayNamesShort = dayNames.map(abbr)\nconst suffixes = {\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n 'default': 'th'\n}\n\nfunction abbr (str: string) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d: Date) {\n const feb = _date.isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n },\n\n getDayOfYear: function (d: Date) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += _date.daysInMonth(d)[i]\n }\n return num + d.getDate()\n },\n\n getWeekOfYear: function (d: Date, startDay: number) {\n // Skip to startDay of this week\n const now = this.getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return padStart(String(Math.floor((now - then) / 7) + 1), 2, '0')\n },\n\n isLeapYear: function (d: Date) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d: Date) {\n const str = d.getDate().toString()\n const index = parseInt(str.slice(-1))\n return suffixes[index] || suffixes['default']\n },\n\n century: function (d: Date) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst formatCodes = {\n a: function (d: Date) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d: Date) {\n return dayNames[d.getDay()]\n },\n b: function (d: Date) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d: Date) {\n return monthNames[d.getMonth()]\n },\n c: function (d: Date) {\n return d.toLocaleString()\n },\n C: function (d: Date) {\n return _date.century(d)\n },\n d: function (d: Date) {\n return padStart(d.getDate(), 2, '0')\n },\n e: function (d: Date) {\n return padStart(d.getDate(), 2)\n },\n H: function (d: Date) {\n return padStart(d.getHours(), 2, '0')\n },\n I: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2, '0')\n },\n j: function (d: Date) {\n return padStart(_date.getDayOfYear(d), 3, '0')\n },\n k: function (d: Date) {\n return padStart(d.getHours(), 2)\n },\n l: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2)\n },\n L: function (d: Date) {\n return padStart(d.getMilliseconds(), 3, '0')\n },\n m: function (d: Date) {\n return padStart(d.getMonth() + 1, 2, '0')\n },\n M: function (d: Date) {\n return padStart(d.getMinutes(), 2, '0')\n },\n p: function (d: Date) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d: Date) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d: Date) {\n return _date.getSuffix(d)\n },\n s: function (d: Date) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d: Date) {\n return padStart(d.getSeconds(), 2, '0')\n },\n u: function (d: Date) {\n return d.getDay() || 7\n },\n U: function (d: Date) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d: Date) {\n return d.getDay()\n },\n W: function (d: Date) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d: Date) {\n return d.toLocaleDateString()\n },\n X: function (d: Date) {\n return d.toLocaleTimeString()\n },\n y: function (d: Date) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d: Date) {\n return d.getFullYear()\n },\n z: function (d: Date) {\n const tz = d.getTimezoneOffset() / 60 * 100\n return (tz > 0 ? '-' : '+') + padStart(String(Math.abs(tz)), 4, '0')\n },\n '%': function () {\n return '%'\n }\n};\n(formatCodes as any).h = formatCodes.b;\n(formatCodes as any).N = formatCodes.L\n\nexport default function (d: Date, format: string) {\n let output = ''\n let remaining = format\n\n while (true) {\n const r = /%./g\n const results = r.exec(remaining)\n\n // No more format codes. Add the remaining text and return\n if (!results) {\n return output + remaining\n }\n\n // Add the preceding text\n output += remaining.slice(0, r.lastIndex - 2)\n remaining = remaining.slice(r.lastIndex)\n\n // Add the format code\n const ch = results[0].charAt(1)\n const func = formatCodes[ch]\n output += func ? func(d) : '%' + ch\n }\n}\n","import html from './html'\nimport str from './string'\nimport math from './math'\nimport url from './url'\nimport array from './array'\nimport date from './date'\nimport obj from './object'\n\nexport default { ...html, ...str, ...math, ...url, ...date, ...obj, ...array }\n","import strftime from 'src/util/strftime'\nimport { isString } from 'src/util/underscore'\n\nexport default {\n 'date': (v: string | Date, arg: string) => {\n let date = v\n if (v === 'now') {\n date = new Date()\n } else if (isString(v)) {\n date = new Date(v)\n }\n return isValidDate(date) ? strftime(date, arg) : v\n }\n}\n\nfunction isValidDate (date: any): date is Date {\n return date instanceof Date && !isNaN(date.getTime())\n}\n","import { isTruthy } from 'src/render/syntax'\n\nexport default {\n 'default': (v: T1, arg: T2): T1 | T2 => isTruthy(v) ? v : arg\n}\n","import Scope from './scope/scope'\nimport * as Types from './types'\nimport fs from 'src/fs'\nimport * as _ from './util/underscore'\nimport ITemplate from './template/itemplate'\nimport Tokenizer from './parser/tokenizer'\nimport Render from './render/render'\nimport Tag from './template/tag/tag'\nimport Filter from './template/filter/filter'\nimport Parser from './parser/parser'\nimport ITagImplOptions from './template/tag/itag-impl-options'\nimport Value from './template/value'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './render/syntax'\nimport builtinTags from './builtin/tags'\nimport builtinFilters from './builtin/filters'\nimport { LiquidOptions, NormalizedFullOptions, applyDefault, normalize } from './liquid-options'\nimport { FilterImpl } from './template/filter/filter-impl'\n\nexport default class Liquid {\n public options: NormalizedFullOptions\n public renderer: Render\n public parser: Parser\n private cache: object = {}\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n this.options = applyDefault(normalize(opts))\n this.parser = new Parser(this)\n this.renderer = new Render()\n this.tokenizer = new Tokenizer(this.options)\n\n _.forOwn(builtinTags, (conf, name) => this.registerTag(name, conf))\n _.forOwn(builtinFilters, (handler, name) => this.registerFilter(name, handler))\n }\n parse (html: string, filepath?: string) {\n const tokens = this.tokenizer.tokenize(html, filepath)\n return this.parser.parse(tokens)\n }\n render (tpl: Array, ctx?: object, opts?: LiquidOptions) {\n const options = { ...this.options, ...normalize(opts) }\n const scope = new Scope(ctx, options)\n return this.renderer.renderTemplates(tpl, scope)\n }\n async parseAndRender (html: string, ctx?: object, opts?: LiquidOptions) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n }\n async getTemplate (file: string, opts?: LiquidOptions) {\n const options = normalize(opts)\n const roots = options.root ? [...options.root, ...this.options.root] : this.options.root\n const paths = roots.map(root => fs.resolve(root, file, this.options.extname))\n\n for (const filepath of paths) {\n if (!(await fs.exists(filepath))) continue\n\n if (this.options.cache && this.cache[filepath]) return this.cache[filepath]\n const value = this.parse(await fs.readFile(filepath), filepath)\n if (this.options.cache) this.cache[filepath] = value\n return value\n }\n\n const err = new Error('ENOENT') as any\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`\n err.code = 'ENOENT'\n throw err\n }\n async renderFile (file: string, ctx?: object, opts?: LiquidOptions) {\n const options = normalize(opts)\n const templates = await this.getTemplate(file, options)\n return this.render(templates, ctx, opts)\n }\n evalValue (str: string, scope: Scope) {\n return new Value(str, this.options.strict_filters).value(scope)\n }\n registerFilter (name: string, filter: FilterImpl) {\n return Filter.register(name, filter)\n }\n registerTag (name: string, tag: ITagImplOptions) {\n return Tag.register(name, tag)\n }\n plugin (plugin: (this: Liquid, L: typeof Liquid) => void) {\n return plugin.call(this, Liquid)\n }\n express () {\n const self = this\n return function (this: any, filePath: string, ctx: object, cb: (err: Error | null, html?: string) => void) {\n const opts = { root: this.root }\n self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb)\n }\n }\n static default = Liquid\n static isTruthy = isTruthy\n static isFalsy = isFalsy\n static evalExp = evalExp\n static evalValue = evalValue\n static Types = Types\n}\n"],"names":["toStr","Object","prototype","toString","arrToStr","Array","isString","value","call","isFunction","stringify","isNil","to_liquid","toLiquid","to_s","indexOf","cache","JSON","key","isObject","push","isArray","forOwn","object","iteratee","k","hasOwnProperty","last","arr","length","type","range","start","stop","step","undefined","i","padStart","str","ch","n","String","quoted","RegExp","source","quoteBalanced","number","bool","identifier","subscript","literal","variable","rangeLimit","rangeCapture","hash","hashCapture","tagLine","literalLine","variableLine","numberLine","boolLine","quotedLine","rangeLine","integerLine","valueDeclaration","valueList","filter","filterCapture","filterLine","operators","err","token","_super","message","_this","originalError","tslib_1.__extends","LiquidError","lines","begin","end","this","context","input","split","Math","max","line","min","_\r\n .range","map","lineNumber","indicator","num","_.padStart","text","join","msg","file","col","mkMessage","stack","Error","name","update","tpl","predicate","AssertionError","BlockMode","defaultOptions","root","extname","dynamicPartials","trim_tag_right","trim_tag_left","trim_output_right","trim_output_left","greedy","tag_delimiter_left","tag_delimiter_right","output_delimiter_left","output_delimiter_right","strict_filters","strict_variables","normalize","options","_.isArray","_.isString","applyDefault","ctx","opts","OUTPUT","contexts","Scope","reduce","val","__assign","path","paths","propertyAccessSeq","scope","findContextFor","_.last","readProperty","v","some","_.isObject","unshift","arguments","pop","findIndex","TypeError","splice","candidate","obj","_.isNil","_.isFunction","size","liquid_method_missing","j","seq","delemiter","test","assert","slice","matchRightBracket","get","readFile","url","Promise","resolve","reject","xhr","XMLHttpRequest","onload","status","responseText","statusText","onerror","open","send","filepath","ext","base","document","createElement","href","head","getElementsByTagName","insertBefore","firstChild","a","resolved","removeChild","domResolve","replace","origin","exists","ParseState","raw","Token","pos","trimLeft","trimRight","trim","match","lexical.tagLine","TokenizationError","args","DelimitedToken","Tokenizer","tokens","tagL","tagR","outputL","outputR","p","curLine","state","HTML","buffer","lineBegin","substr","HTMLToken","TAG","OutputToken","TagToken","inRaw","forEach","rLeft","rRight","whiteSpaceCtrl","t","Render","templates","html","templates_1","_i","_a","render","_b","e_1","resolvedHTML","RenderError","==","l","r","!=",">","<",">=","<=","contains","and","isTruthy","or","evalExp","exp","operatorREs","lexical.operators","operatorRE","expRE","lexical.quoteBalanced","op","lexical.rangeLine","evalValue","res","Number","toLowerCase","lexical.parseLiteral","isFalsy","markup","lastIndex","exec","liquid","proto","impl","Tag","impls","create","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","lexical.filter","filters","default_1","prev","Value","Output","Parser","remainTokens","e","ParseError","re","AssignScope","mapSeries","iterable","ret","result","item","idx","then","tagToken","collection","reversed","elseTemplates","stream","parser","parseStream","on","keys","offset","limit","reverse","first","index0","rindex","rindex0","finished","renderer","renderTemplates","CaptureScope","cond","cases","branch","staticFileRE","withRE","staticValue","with","parseAndRender","getAll","originBlocks","blocks","originBlockMode","blockMode","getTemplate","DecrementScope","groupRE","rValue","candidatesRE","group","candidates","fingerprint","groups","branches","IncrementScope","staticLayout","layout","tpls","STORE","partial","block","childDefined","tags","assign","for","For","capture","case","Case","comment","include","decrement","increment","cycle","if","If","tablerow","cols","row","floor","unless","break","RenderBreakError","continue","escapeMap","&","\"","'","unescapeMap","&","<",">",""","'","escape","m","escape_once","newline_to_br","strip_html","append","prepend","capitalize","charAt","toUpperCase","lstrip","downcase","upcase","remove","remove_first","pattern","replacement","replace_first","arg1","arg2","rstrip","strip","strip_newlines","truncate","o","truncatewords","abs","ceil","divided_by","minus","bindFixed","modulo","round","amp","pow","plus","times","getFixed","f","toFixed","url_decode","decodeURIComponent","url_encode","encodeURIComponent","sort","concat","uniq","u","monthNames","dayNames","monthNamesShort","abbr","dayNamesShort","suffixes","1","2","3","default","_date","daysInMonth","d","isLeapYear","getDayOfYear","getMonth","getDate","getWeekOfYear","startDay","now","getDay","Date","getFullYear","year","getSuffix","parseInt","century","substring","formatCodes","A","b","B","c","toLocaleString","C","H","getHours","I","L","getMilliseconds","M","getMinutes","P","q","s","valueOf","S","getSeconds","U","w","W","toLocaleDateString","X","toLocaleTimeString","y","Y","z","tz","getTimezoneOffset","%","N","math","date","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/util/error.ts","../src/util/assert.ts","../src/liquid-options.ts","../src/scope/block-mode.ts","../src/scope/scope.ts","../src/scope/scopes.ts","../src/fs/browser.ts","../src/parser/token.ts","../src/parser/tokenizer.ts","../src/parser/html-token.ts","../src/parser/delimited-token.ts","../src/parser/lexical.ts","../src/parser/tag-token.ts","../src/parser/output-token.ts","../src/parser/whitespace-ctrl.ts","../src/render/render.ts","../src/render/syntax.ts","../src/template/tag/hash.ts","../src/template/value.ts","../src/template/template.ts","../src/template/tag/tag.ts","../src/template/filter/filter.ts","../src/parser/parse-stream.ts","../src/template/output.ts","../src/template/html.ts","../src/parser/parser.ts","../src/builtin/tags/assign.ts","../src/util/promise.ts","../src/builtin/tags/for.ts","../src/builtin/tags/capture.ts","../src/builtin/tags/case.ts","../src/builtin/tags/comment.ts","../src/builtin/tags/include.ts","../src/builtin/tags/decrement.ts","../src/builtin/tags/cycle.ts","../src/builtin/tags/if.ts","../src/builtin/tags/increment.ts","../src/builtin/tags/layout.ts","../src/builtin/tags/block.ts","../src/builtin/tags/raw.ts","../src/builtin/tags/tablerow.ts","../src/builtin/tags/index.ts","../src/builtin/tags/unless.ts","../src/builtin/tags/break.ts","../src/builtin/tags/continue.ts","../src/builtin/filters/html.ts","../src/builtin/filters/string.ts","../src/builtin/filters/math.ts","../src/builtin/filters/url.ts","../src/builtin/filters/array.ts","../src/util/strftime.ts","../src/builtin/filters/index.ts","../src/builtin/filters/date.ts","../src/builtin/filters/object.ts","../src/liquid.ts"],"sourcesContent":["const toStr = Object.prototype.toString\nconst arrToStr = Array.prototype.toString\n\n/*\n * Checks if value is classified as a String primitive or object.\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is a string, else false.\n */\nexport function isString (value: any) {\n return toStr.call(value) === '[object String]'\n}\n\nexport function isFunction (value: any) {\n return typeof value === 'function'\n}\n\nexport function promisify (fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise;\nexport function promisify (fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void):(arg1: T1, arg2: T2) => Promise;\nexport function promisify (fn: any) {\n return function (...args: any[]) {\n return new Promise((resolve, reject) => {\n fn(...args, (err: Error, result: any) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value: any): string {\n if (isNil(value)) return ''\n if (isFunction(value.to_liquid)) return stringify(value.to_liquid())\n if (isFunction(value.toLiquid)) return stringify(value.toLiquid())\n if (isFunction(value.to_s)) return value.to_s()\n if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value)\n if (isFunction(value.toString)) return value.toString()\n return toStr.call(value)\n}\n\nfunction defaultToString (value: any): string {\n const cache: string[] = []\n return JSON.stringify(value, (key, value) => {\n if (isObject(value)) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n}\n\nexport function create (proto: T1): T2 {\n return Object.create(proto)\n}\n\nexport function isNil (value: any): boolean {\n return value === null || value === undefined\n}\n\nexport function isArray (value: any): boolean {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value: any): boolean {\n const signature = toStr.call(value)\n // [object XXXError]\n return signature.substr(-6, 5) === 'Error' ||\n (typeof value.message === 'string' && typeof value.name === 'string')\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (\n object: {[key: string]: T} | undefined,\n iteratee: ((val: T, key: string, obj: {[key: string]: T}) => boolean | void)\n) {\n object = object || {}\n for (const k in object) {\n if (object.hasOwnProperty(k)) {\n if (iteratee(object[k], k, object) === false) break\n }\n }\n return object\n}\n\nexport function last (arr: T[]): T;\nexport function last (arr: string): string;\nexport function last (arr: any[] | string): any | string {\n return arr[arr.length - 1]\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value: any): boolean {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\n/*\n * A function to create flexibly-numbered lists of integers,\n * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.\n * Returns a list of integers from start (inclusive) to stop (exclusive),\n * incremented (or decremented) by step, exclusive.\n * Note that ranges that stop before they start are considered to be zero-length instead of\n * negative — if you'd like a negative range, use a negative step.\n */\nexport function range (start: number, stop?: number, step?: number) {\n if (stop === undefined) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr: number[] = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n\nexport function padStart (str: any, length: number, ch: string = ' ') {\n str = String(str)\n let n = length - str.length\n while (n-- > 0) str = ch + str\n return str\n}\n","import * as _ from './underscore'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\n\nabstract class LiquidError extends Error {\n private token: Token\n private originalError: Error\n constructor (err: Error, token: Token) {\n super(err.message)\n this.originalError = err\n this.token = token\n }\n protected update () {\n const err = this.originalError\n const context = mkContext(this.token)\n this.message = mkMessage(err.message, this.token)\n this.stack = this.message + '\\n' + context +\n '\\n' + this.stack + '\\nFrom ' + err.stack\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor (message: string, token: Token) {\n super(new Error(message), token)\n this.name = 'TokenizationError'\n super.update()\n }\n}\n\nexport class ParseError extends LiquidError {\n constructor (err: Error, token: Token) {\n super(err, token)\n this.name = 'ParseError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderError extends LiquidError {\n constructor (err: Error, tpl: ITemplate) {\n super(err, tpl.token)\n this.name = 'RenderError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderBreakError extends Error {\n resolvedHTML: string = ''\n constructor (message: string) {\n super(message)\n this.name = 'RenderBreakError'\n this.message = message + ''\n }\n}\n\nexport class AssertionError extends Error {\n constructor (message: string) {\n super(message)\n this.name = 'AssertionError'\n this.message = message + ''\n }\n}\n\nfunction mkContext (token: Token) {\n const lines = token.input.split('\\n')\n const begin = Math.max(token.line - 2, 1)\n const end = Math.min(token.line + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === token.line) ? '>> ' : ' '\n const num = _.padStart(String(lineNumber), String(end).length)\n const text = lines[lineNumber - 1]\n return `${indicator}${num}| ${text}`\n })\n .join('\\n')\n\n return context\n}\n\nfunction mkMessage (msg: string, token: Token) {\n if (token.file) msg += `, file:${token.file}`\n msg += `, line:${token.line}, col:${token.col}`\n return msg\n}\n","import { AssertionError } from './error'\n\nexport default function (predicate: any, message?: string) {\n if (!predicate) {\n message = message || `expect ${predicate} to be true`\n throw new AssertionError(message)\n }\n}\n","/* eslint-disable camelcase */\n\nimport * as _ from './util/underscore'\n\nexport interface LiquidOptions {\n /** `root` is a directory or an array of directories to resolve layouts and includes, as well as the filename passed in when calling `.renderFile()`. If an array, the files are looked up in the order they occur in the array. Defaults to `[\".\"]` */\n root?: string | string[]\n /** `extname` is used to lookup the template file when filepath doesn't include an extension name. Eg: setting to `\".html\"` will allow including file by basename. Defaults to `\"\"`. */\n extname?: string\n /** `cache` indicates whether or not to cache resolved templates. Defaults to `false`. */\n cache?: boolean\n /** `dynamicPartials`: if set, treat `` parameter in `{%include filepath %}`, `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */\n dynamicPartials?: boolean\n /** `strict_filters` is used to enable strict filter existence. If set to `false`, undefined filters will be rendered as empty string. Otherwise, undefined filters will cause an exception. Defaults to `false`. */\n strict_filters?: boolean\n /** `strict_variables` is used to enable strict variable derivation. If set to `false`, undefined variables will be rendered as empty string. Otherwise, undefined variables will cause an exception. Defaults to `false`. */\n strict_variables?: boolean\n /** `trim_tag_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of tags (`{% %}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_tag_right?: boolean\n /** `trim_tag_left` is similar to `trim_tag_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_tag_left?: boolean\n /** ``trim_output_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_output_right?: boolean\n /** `trim_output_left` is similar to `trim_output_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_output_left?: boolean\n /** `tag_delimiter_left` and `tag_delimiter_right` are used to override the delimiter for liquid tags **/\n tag_delimiter_left?: string,\n tag_delimiter_right?: string,\n /** `output_delimiter_left` and `output_delimiter_right` are used to override the delimiter for liquid outputs **/\n output_delimiter_left?: string,\n output_delimiter_right?: string,\n /** `greedy` is used to specify whether `trim_left`/`trim_right` is greedy. When set to `true`, all consecutive blank characters including `\\n` will be trimed regardless of line breaks. Defaults to `true`. */\n greedy?: boolean\n}\n\ninterface NormalizedOptions extends LiquidOptions {\n root?: string[]\n}\n\nexport interface NormalizedFullOptions extends NormalizedOptions {\n root: string[]\n extname: string\n cache: boolean\n dynamicPartials: boolean\n strict_filters: boolean\n strict_variables: boolean\n trim_tag_right: boolean\n trim_tag_left: boolean\n trim_output_right: boolean\n trim_output_left: boolean\n tag_delimiter_left: string,\n tag_delimiter_right: string,\n output_delimiter_left: string,\n output_delimiter_right: string,\n greedy: boolean\n}\n\nconst defaultOptions: NormalizedFullOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_output_right: false,\n trim_output_left: false,\n greedy: true,\n tag_delimiter_left: '{%',\n tag_delimiter_right: '%}',\n output_delimiter_left: '{{',\n output_delimiter_right: '}}',\n strict_filters: false,\n strict_variables: false\n}\n\nexport function normalize (options?: LiquidOptions): NormalizedOptions {\n options = options || {}\n if (options.hasOwnProperty('root')) {\n options.root = normalizeStringArray(options.root)\n }\n return options as NormalizedOptions\n}\n\nexport function applyDefault (options?: NormalizedOptions): NormalizedFullOptions {\n return { ...defaultOptions, ...options }\n}\n\nfunction normalizeStringArray (value: any): string[] {\n if (_.isArray(value)) return value as string[]\n if (_.isString(value)) return [value as string]\n return []\n}\n","enum BlockMode {\n /* store rendered html into blocks */\n OUTPUT,\n /* output rendered html directly */\n STORE\n}\n\nexport default BlockMode\n","import * as _ from '../util/underscore'\nimport { __assign } from 'tslib'\nimport assert from '../util/assert'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\nimport BlockMode from './block-mode'\nimport IContext from './icontext'\n\nexport default class Scope {\n opts: NormalizedFullOptions\n contexts: Array\n blocks: object = {}\n groups: {[key: string]: number} = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts?: NormalizedFullOptions) {\n this.opts = applyDefault(opts)\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => __assign(ctx, val), {})\n }\n get (path: string): any {\n const paths = this.propertyAccessSeq(path)\n const scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n return paths.reduce((value, key) => this.readProperty(value, key), scope)\n }\n set (path: string, v: any): void {\n const paths = this.propertyAccessSeq(path)\n let scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n paths.some((key, i) => {\n if (!_.isObject(scope)) {\n return true\n }\n if (i === paths.length - 1) {\n scope[key] = v\n return true\n }\n if (undefined === scope[key]) {\n scope[key] = {}\n }\n scope = scope[key]\n return false\n })\n }\n unshift (ctx: object) {\n return this.contexts.unshift(ctx)\n }\n push (ctx: object) {\n return this.contexts.push(ctx)\n }\n pop (ctx?: object): object | undefined {\n if (!arguments.length) {\n return this.contexts.pop()\n }\n const i = this.contexts.findIndex(scope => scope === ctx)\n if (i === -1) {\n throw new TypeError('scope not found, cannot pop')\n }\n return this.contexts.splice(i, 1)[0]\n }\n findContextFor (key: string, filter: ((conttext: object) => boolean) = () => true) {\n for (let i = this.contexts.length - 1; i >= 0; i--) {\n const candidate = this.contexts[i]\n if (!filter(candidate)) continue\n if (key in candidate) {\n return candidate\n }\n }\n return null\n }\n private readProperty (obj: IContext, key: string) {\n let val\n if (_.isNil(obj)) {\n val = undefined\n } else {\n obj = toLiquid(obj)\n val = key === 'size' ? readSize(obj) : obj[key]\n if (_.isFunction(obj.liquid_method_missing)) {\n val = obj.liquid_method_missing!(key)\n }\n }\n if (_.isNil(val) && this.opts.strict_variables) {\n throw new TypeError(`undefined variable: ${key}`)\n }\n return val\n }\n\n /*\n * Parse property access sequence from access string\n * @example\n * accessSeq(\"foo.bar\") // ['foo', 'bar']\n * accessSeq(\"foo['bar']\") // ['foo', 'bar']\n * accessSeq(\"foo['b]r']\") // ['foo', 'b]r']\n * accessSeq(\"foo[bar.coo]\") // ['foo', 'bar'], for bar.coo == 'bar'\n */\n propertyAccessSeq (str: string) {\n str = String(str)\n const seq: string[] = []\n let name = ''\n let j\n let i = 0\n while (i < str.length) {\n switch (str[i]) {\n case '[':\n push()\n\n const delemiter = str[i + 1]\n if (/['\"]/.test(delemiter)) { // foo[\"bar\"]\n j = str.indexOf(delemiter, i + 2)\n assert(j !== -1, `unbalanced ${delemiter}: ${str}`)\n name = str.slice(i + 2, j)\n push()\n i = j + 2\n } else { // foo[bar.coo]\n j = matchRightBracket(str, i + 1)\n assert(j !== -1, `unbalanced []: ${str}`)\n name = str.slice(i + 1, j)\n if (!/^[+-]?\\d+$/.test(name)) { // foo[bar] vs. foo[1]\n name = String(this.get(name))\n }\n push()\n i = j + 1\n }\n break\n case '.':// foo.bar, foo[0].bar\n push()\n i++\n break\n default:// foo.bar\n name += str[i]\n i++\n }\n }\n push()\n\n if (!seq.length) {\n throw new TypeError(`invalid path:\"${str}\"`)\n }\n return seq\n\n function push () {\n if (name.length) seq.push(name)\n name = ''\n }\n }\n}\n\nfunction toLiquid (obj: IContext) {\n if (_.isFunction(obj.to_liquid)) {\n return obj.to_liquid()\n }\n if (_.isFunction(obj.toLiquid)) {\n return obj.toLiquid()\n }\n return obj\n}\n\nfunction readSize (obj: IContext) {\n if (!_.isNil(obj.size)) return obj.size\n if (_.isArray(obj) || _.isString(obj)) return obj.length\n return obj.size\n}\n\nfunction matchRightBracket (str: string, begin: number) {\n let stack = 1 // count of '[' - count of ']'\n for (let i = begin; i < str.length; i++) {\n if (str[i] === '[') {\n stack++\n }\n if (str[i] === ']') {\n stack--\n if (stack === 0) {\n return i\n }\n }\n }\n return -1\n}\n","export class CaptureScope {}\nexport class AssignScope {}\nexport class IncrementScope {}\nexport class DecrementScope {}\n","import { last } from '../util/underscore'\nimport IFS from './ifs'\n\nfunction domResolve (root: string, path: string) {\n const base = document.createElement('base')\n base.href = root\n\n const head = document.getElementsByTagName('head')[0]\n head.insertBefore(base, head.firstChild)\n\n const a = document.createElement('a')\n a.href = path\n const resolved = a.href\n head.removeChild(base)\n\n return resolved\n}\n\nfunction resolve (root: string, filepath: string, ext: string) {\n if (root.length && last(root) !== '/') root += '/'\n const url = domResolve(root, filepath)\n return url.replace(/^(\\w+:\\/\\/[^/]+)(\\/[^?]+)/, (str, origin, path) => {\n const last = path.split('/').pop()\n if (/\\.\\w+$/.test(last)) return str\n return origin + path + ext\n })\n}\n\nasync function readFile (url: string): Promise {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.responseText as string)\n } else {\n reject(new Error(xhr.statusText))\n }\n }\n xhr.onerror = () => {\n reject(new Error('An error occurred whilst receiving the response.'))\n }\n xhr.open('GET', url)\n xhr.send()\n })\n}\n\nasync function exists () {\n return true\n}\n\nexport default { readFile, resolve, exists } as IFS\n","export default class Token {\n type: string = 'notset'\n line: number\n col: number\n raw: string\n input: string\n file?: string\n value: string\n constructor (raw: string, input: string, line: number, col: number, file?: string) {\n this.col = col\n this.line = line\n this.raw = raw\n this.value = raw\n this.input = input\n this.file = file\n }\n}\n","import whiteSpaceCtrl from './whitespace-ctrl'\nimport HTMLToken from './html-token'\nimport TagToken from './tag-token'\nimport Token from './token'\nimport OutputToken from './output-token'\nimport { TokenizationError } from 'src/util/error'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: NormalizedFullOptions\n constructor (options?: NormalizedFullOptions) {\n this.options = applyDefault(options)\n }\n tokenize (input: string, file?: string) {\n const tokens: Token[] = []\n const tagL = this.options.tag_delimiter_left\n const tagR = this.options.tag_delimiter_right\n const outputL = this.options.output_delimiter_left\n const outputR = this.options.output_delimiter_right\n let p = 0\n let curLine = 1\n let state = ParseState.HTML\n let buffer = ''\n let lineBegin = 0\n let line = 1\n let col = 1\n\n while (p < input.length) {\n if (input[p] === '\\n') {\n curLine++\n lineBegin = p + 1\n }\n if (state === ParseState.HTML) {\n if (input.substr(p, outputL.length) === outputL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = outputL\n line = curLine\n col = p - lineBegin + 1\n p += outputL.length\n state = ParseState.OUTPUT\n continue\n } else if (input.substr(p, tagL.length) === tagL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = tagL\n line = curLine\n col = p - lineBegin + 1\n p += tagL.length\n state = ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && input.substr(p, outputR.length) === outputR) {\n buffer += outputR\n tokens.push(new OutputToken(buffer, buffer.slice(outputL.length, -outputR.length), input, line, col, file))\n p += outputR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n } else if (input.substr(p, tagR.length) === tagR) {\n buffer += tagR\n tokens.push(new TagToken(buffer, buffer.slice(tagL.length, -tagR.length), input, line, col, file))\n p += tagR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n }\n buffer += input[p++]\n }\n if (state !== ParseState.HTML) {\n const t = state === ParseState.OUTPUT ? 'output' : 'tag'\n const str = buffer.length > 16 ? buffer.slice(0, 13) + '...' : buffer\n throw new TokenizationError(\n `${t} \"${str}\" not closed`,\n new Token(buffer, input, line, col, file)\n )\n }\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n\n whiteSpaceCtrl(tokens, this.options)\n return tokens\n }\n}\n","import Token from './token'\n\nexport default class HTMLToken extends Token {\n constructor (str: string, input: string, line: number, col: number, file?: string) {\n super(str, input, line, col, file)\n this.type = 'html'\n this.value = str\n }\n}\n","import Token from './token'\nimport { last } from 'src/util/underscore'\n\nexport default class DelimitedToken extends Token {\n trimLeft: boolean\n trimRight: boolean\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, input, line, pos, file)\n this.trimLeft = value[0] === '-'\n this.trimRight = last(value) === '-'\n this.value = value\n .slice(\n this.trimLeft ? 1 : 0,\n this.trimRight ? -1 : value.length\n )\n .trim()\n }\n}\n","// quote related\nconst singleQuoted = /'[^']*'/\nconst doubleQuoted = /\"[^\"]*\"/\nexport const quoted = new RegExp(`${singleQuoted.source}|${doubleQuoted.source}`)\nexport const quoteBalanced = new RegExp(`(?:${quoted.source}|[^'\"])*`)\n\n// basic types\nexport const number = /[+-]?(?:\\d+\\.?\\d*|\\.?\\d+)/\nexport const bool = /true|false/\n\n// property access\nexport const identifier = /[\\w-]+[?]?/\nexport const subscript = new RegExp(`\\\\[(?:${quoted.source}|[\\\\w-\\\\.]+)\\\\]`)\nexport const literal = new RegExp(`(?:${quoted.source}|${bool.source}|${number.source})`)\nexport const variable = new RegExp(`${identifier.source}(?:\\\\.${identifier.source}|${subscript.source})*`)\n\n// range related\nexport const rangeLimit = new RegExp(`(?:${variable.source}|${number.source})`)\nexport const range = new RegExp(`\\\\(${rangeLimit.source}\\\\.\\\\.${rangeLimit.source}\\\\)`)\nexport const rangeCapture = new RegExp(`\\\\((${rangeLimit.source})\\\\.\\\\.(${rangeLimit.source})\\\\)`)\n\nexport const value = new RegExp(`(?:${variable.source}|${literal.source}|${range.source})`)\n\n// hash related\nexport const hash = new RegExp(`(?:${identifier.source})\\\\s*:\\\\s*(?:${value.source})`)\nexport const hashCapture = new RegExp(`(${identifier.source})\\\\s*:\\\\s*(${value.source})`, 'g')\n\n// full match\nexport const tagLine = new RegExp(`^\\\\s*(${identifier.source})\\\\s*([\\\\s\\\\S]*?)\\\\s*$`)\nexport const numberLine = new RegExp(`^${number.source}$`)\nexport const boolLine = new RegExp(`^${bool.source}$`, 'i')\nexport const quotedLine = new RegExp(`^${quoted.source}$`)\nexport const rangeLine = new RegExp(`^${rangeCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isRange (str: string) {\n return rangeLine.test(str)\n}\n","import DelimitedToken from './delimited-token'\nimport { TokenizationError } from 'src/util/error'\nimport * as lexical from './lexical'\n\nexport default class TagToken extends DelimitedToken {\n name: string\n args: string\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'tag'\n const match = this.value.match(lexical.tagLine)\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, this)\n }\n this.name = match[1]\n this.args = match[2]\n }\n}\n","import DelimitedToken from './delimited-token'\n\nexport default class OutputToken extends DelimitedToken {\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'output'\n }\n}\n","import DelimitedToken from 'src/parser/delimited-token'\nimport Token from 'src/parser/token'\nimport TagToken from 'src/parser/tag-token'\nimport { NormalizedFullOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: NormalizedFullOptions) {\n options = { greedy: true, ...options }\n let inRaw = false\n\n tokens.forEach((token: Token, i: number) => {\n if (shouldTrimLeft(token as DelimitedToken, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && (token as TagToken).name === 'raw') inRaw = true\n if (token.type === 'tag' && (token as TagToken).name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token as DelimitedToken, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimLeft || options.trim_tag_left\n if (token.type === 'output') return token.trimLeft || options.trim_output_left\n}\n\nfunction shouldTrimRight (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimRight || options.trim_tag_right\n if (token.type === 'output') return token.trimRight || options.trim_output_right\n}\n\nfunction trimLeft (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rLeft = greedy ? /\\s+$/g : /[\\t\\r ]*$/g\n token.value = token.value.replace(rLeft, '')\n}\n\nfunction trimRight (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rRight = greedy ? /^\\s+/g : /^[\\t\\r ]*\\n?/g\n token.value = token.value.replace(rRight, '')\n}\n","import { RenderError } from 'src/util/error'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Render {\n async renderTemplates (templates: ITemplate[], scope: Scope) {\n assert(scope, 'unable to evalTemplates: scope undefined')\n\n let html = ''\n for (const tpl of templates) {\n try {\n html += await tpl.render(scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n e.resolvedHTML = html\n throw e\n }\n throw e.name === 'RenderError' ? e : new RenderError(e, tpl)\n }\n }\n return html\n }\n}\n","import * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport Scope from 'src/scope/scope'\nimport { range, last } from 'src/util/underscore'\n\nconst operators = {\n '==': (l: any, r: any) => l === r,\n '!=': (l: any, r: any) => l !== r,\n '>': (l: any, r: any) => l !== null && r !== null && l > r,\n '<': (l: any, r: any) => l !== null && r !== null && l < r,\n '>=': (l: any, r: any) => l !== null && r !== null && l >= r,\n '<=': (l: any, r: any) => l !== null && r !== null && l <= r,\n 'contains': (l: any, r: any) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l: any, r: any) => isTruthy(l) && isTruthy(r),\n 'or': (l: any, r: any) => isTruthy(l) || isTruthy(r)\n}\n\nexport function evalExp (exp: string, scope: Scope): any {\n assert(scope, 'unable to evalExp: scope undefined')\n const operatorREs = lexical.operators\n let match\n for (let i = 0; i < operatorREs.length; i++) {\n const operatorRE = operatorREs[i]\n const expRE = new RegExp(`^(${lexical.quoteBalanced.source})(${operatorRE.source})(${lexical.quoteBalanced.source})$`)\n if ((match = exp.match(expRE))) {\n const l = evalExp(match[1], scope)\n const op = operators[match[2].trim()]\n const r = evalExp(match[3], scope)\n return op(l, r)\n }\n }\n\n if ((match = exp.match(lexical.rangeLine))) {\n const low = evalValue(match[1], scope)\n const high = evalValue(match[2], scope)\n return range(low, high + 1)\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str: string, scope: Scope) {\n if (!str) return null\n str = str.trim()\n\n if (str === 'true') return true\n if (str === 'false') return false\n if (!isNaN(Number(str))) return Number(str)\n if ((str[0] === '\"' || str[0] === \"'\") && str[0] === last(str)) return str.slice(1, -1)\n return scope.get(str)\n}\n\nexport function isTruthy (val: any): boolean {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val: any): boolean {\n return val === false || undefined === val || val === null\n}\n","import { hashCapture } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\n\n/**\n * Key-Value Pairs Representing Tag Arguments\n * Example:\n * For the markup `{% include 'head.html' foo='bar' %}`,\n * hash['foo'] === 'bar'\n */\nexport default class Hash {\n [key: string]: any\n constructor (markup: string, scope: Scope) {\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n this[k] = evalValue(v, scope)\n }\n }\n}\n","import { evalExp } from 'src/render/syntax'\nimport Filter from './filter/filter'\nimport Scope from 'src/scope/scope'\n\nenum ParseState {\n INIT = 0,\n FILTER_NAME = 1,\n FILTER_ARG = 2\n}\n\nexport default class {\n initial: any\n filters: Array = []\n\n /**\n * @param str value string, like: \"i have a dream | truncate: 3\n */\n constructor (str: string, strictFilters: boolean) {\n let buffer = ''\n let quoted = ''\n let state = ParseState.INIT\n let sealed = false\n\n let filterName = ''\n let filterArgs: string[] = []\n\n for (let i = 0; i < str.length; i++) {\n if (quoted) {\n if (str[i] === quoted) {\n quoted = ''\n sealed = true\n }\n buffer += str[i]\n } else if (/\\s/.test(str[i])) {\n if (!buffer) continue\n else sealed = true\n } else if (str[i] === '|') {\n if (state === ParseState.INIT) {\n this.initial = buffer\n } else {\n if (state === ParseState.FILTER_NAME) filterName = buffer\n else filterArgs.push(buffer)\n this.filters.push(new Filter(filterName, filterArgs, strictFilters))\n filterName = ''\n filterArgs = []\n }\n state = ParseState.FILTER_NAME\n buffer = ''\n sealed = false\n } else if (state === ParseState.FILTER_NAME && str[i] === ':') {\n filterName = buffer\n state = ParseState.FILTER_ARG\n buffer = ''\n sealed = false\n } else if (state === ParseState.FILTER_ARG && str[i] === ',') {\n filterArgs.push(buffer)\n buffer = ''\n sealed = false\n } else if (sealed) continue\n else {\n if ((str[i] === '\"' || str[i] === \"'\") && !quoted) quoted = str[i]\n buffer += str[i]\n }\n }\n\n if (buffer) {\n if (state === ParseState.INIT) this.initial = buffer\n else if (state === ParseState.FILTER_NAME) this.filters.push(new Filter(buffer, [], strictFilters))\n else {\n filterArgs.push(buffer)\n this.filters.push(new Filter(filterName, filterArgs, strictFilters))\n }\n }\n }\n value (scope: Scope) {\n return this.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(this.initial, scope))\n }\n}\n","export default abstract class Template {\n token: T;\n constructor (token: T) {\n this.token = token\n }\n}\n","import { create, stringify } from 'src/util/underscore'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITagImpl from './itag-impl'\nimport ITagImplOptions from './itag-impl-options'\nimport Liquid from 'src/liquid'\nimport Hash from './hash'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\n\nexport default class Tag extends Template implements ITemplate {\n name: string\n private impl: ITagImpl\n static impls: { [key: string]: ITagImplOptions } = {}\n\n constructor (token: TagToken, tokens: Token[], liquid: Liquid) {\n super(token)\n this.name = token.name\n\n const impl = Tag.impls[token.name]\n assert(impl, `tag ${token.name} not found`)\n this.impl = create(impl)\n this.impl.liquid = liquid\n if (this.impl.parse) {\n this.impl.parse(token, tokens)\n }\n }\n async render (scope: Scope) {\n const hash = new Hash(this.token.args, scope)\n const impl = this.impl\n if (typeof impl.render !== 'function') {\n return ''\n }\n const html = await impl.render(scope, hash)\n return stringify(html)\n }\n static register (name: string, tag: ITagImplOptions) {\n Tag.impls[name] = tag\n }\n static clear () {\n Tag.impls = {}\n }\n}\n","import { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\nimport { FilterImpl } from './filter-impl'\n\nexport default class Filter {\n name: string\n impl: FilterImpl\n args: string[]\n private static impls: {[key: string]: FilterImpl} = {}\n\n constructor (name: string, args: string[], strictFilters: boolean) {\n const impl = Filter.impls[name]\n if (!impl && strictFilters) throw new TypeError(`undefined filter: ${name}`)\n\n this.name = name\n this.impl = impl || (x => x)\n this.args = args\n }\n render (value: any, scope: Scope): any {\n const args = this.args.map(arg => evalValue(arg, scope))\n return this.impl.apply(null, [value, ...args])\n }\n static register (name: string, filter: FilterImpl) {\n Filter.impls[name] = filter\n }\n static clear () {\n Filter.impls = {}\n }\n}\n","import Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from './tag-token'\n\ntype ParseToken = ((token: Token, remainTokens: Array) => ITemplate)\n\nexport default class ParseStream {\n private tokens: Array\n private handlers: {[key: string]: (arg: any) => void} = {}\n private stopRequested: boolean = false\n private parseToken: ParseToken\n\n constructor (tokens: Array, parseToken: ParseToken) {\n this.tokens = tokens\n this.parseToken = parseToken\n }\n on (name: string, cb: (arg: T) => void): ParseStream {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: T) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n return false\n }\n start () {\n this.trigger('start')\n let token: Token | undefined\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' && this.trigger(`tag:${(token).name}`, token)) {\n continue\n }\n const template = this.parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n }\n stop () {\n this.stopRequested = true\n return this\n }\n}\n","import Value from './value'\nimport { stringify } from 'src/util/underscore'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport OutputToken from 'src/parser/output-token'\n\nexport default class Output extends Template implements ITemplate {\n value: Value\n constructor (token: OutputToken, strictFilters: boolean) {\n super(token)\n this.value = new Value(token.value, strictFilters)\n }\n async render (scope: Scope): Promise {\n const html = await this.value.value(scope)\n return stringify(html)\n }\n}\n","import Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport HTMLToken from 'src/parser/html-token'\n\nexport default class extends Template implements ITemplate {\n str: string\n constructor (token: HTMLToken) {\n super(token)\n this.str = token.value\n }\n async render (): Promise {\n return this.str\n }\n}\n","import { ParseError } from '../util/error'\nimport Liquid from 'src/liquid'\nimport ParseStream from './parse-stream'\nimport Token from './token'\nimport TagToken from './tag-token'\nimport OutputToken from './output-token'\nimport Tag from 'src/template/tag/tag'\nimport Output from 'src/template/output'\nimport HTML from 'src/template/html'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Parser {\n liquid: Liquid\n\n constructor (liquid: Liquid) {\n this.liquid = liquid\n }\n parse (tokens: Array) {\n let token\n const templates: ITemplate[] = []\n while ((token = tokens.shift())) {\n templates.push(this.parseToken(token, tokens))\n }\n return templates\n }\n parseToken (token: Token, remainTokens: Array) {\n try {\n if (token.type === 'tag') {\n return new Tag(token as TagToken, remainTokens, this.liquid)\n }\n if (token.type === 'output') {\n return new Output(token as OutputToken, this.liquid.options.strict_filters)\n }\n return new HTML(token)\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n parseStream (tokens: Array) {\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens))\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { AssignScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(re) as RegExpMatchArray\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (scope: Scope) {\n const ctx = new AssignScope()\n ctx[this.key] = this.liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n} as ITagImplOptions\n","/*\n * Call functions in serial until someone rejected.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function mapSeries (\n iterable: T1[],\n iteratee: (item: T1, idx: number, iterable: T1[]) => Promise | T2\n): Promise {\n let ret = Promise.resolve(0)\n const result: T2[] = []\n iterable.forEach(function (item, idx) {\n ret = ret\n .then(() => iteratee(item, idx, iterable))\n .then(x => result.push(x))\n })\n return ret.then(() => result)\n}\n","import { mapSeries } from 'src/util/promise'\nimport { isString, isObject, isArray } from 'src/util/underscore'\nimport { evalExp } from 'src/render/syntax'\nimport assert from 'src/util/assert'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n type: 'block',\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n this.variable = match[1]\n this.collection = match[2]\n this.reversed = !!match[3]\n\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endfor', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection] as string[]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]]) as Array<[string, any]>\n }\n }\n if (!isArray(collection) || !collection.length) {\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n if (this.reversed) collection.reverse()\n\n const contexts = collection.map((item: string, i: number) => {\n const ctx = {}\n ctx[this.variable] = item\n ctx['forloop'] = {\n first: i === 0,\n index: i + 1,\n index0: i,\n last: i === collection.length - 1,\n length: collection.length,\n rindex: collection.length - i,\n rindex0: collection.length - i - 1\n }\n return ctx\n })\n\n let html = ''\n let finished = false\n await mapSeries(contexts, async context => {\n if (finished) return\n\n scope.push(context)\n try {\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n html += e.resolvedHTML\n if (e.message === 'break') {\n finished = true\n }\n } else throw e\n }\n scope.pop(context)\n })\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = tagToken.args.match(re) as RegExpMatchArray\n assert(match, `${tagToken.args} not valid identifier`)\n\n this.variable = match[1]\n this.templates = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', () => stream.stop())\n .on('template', (tpl) => this.templates.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const html = await this.liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = new CaptureScope()\n ctx[this.variable] = html\n scope.push(ctx)\n }\n} as ITagImplOptions\n","import { evalExp } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p: ITemplate[] = []\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:when', (token: TagToken) => {\n this.cases.push({\n val: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endcase', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = evalExp(branch.val, scope)\n const cond = evalExp(this.cond, scope)\n if (val === cond) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value, quotedLine } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /[^\\s,]+/\nconst withRE = new RegExp(`with\\\\s+(${value.source})`)\n\nexport default {\n parse: function (token: TagToken) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticValue = match[0]\n }\n\n match = value.exec(token.args)\n if (match) {\n this.value = match[0]\n }\n\n match = withRE.exec(token.args)\n if (match) {\n this.with = match[1]\n }\n },\n render: async function (scope: Scope, hash: Hash) {\n let filepath\n if (scope.opts.dynamicPartials) {\n if (quotedLine.exec(this.value)) {\n const template = this.value.slice(1, -1)\n filepath = await this.liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = evalValue(this.value, scope)\n }\n } else {\n filepath = this.staticValue\n }\n assert(filepath, `cannot include with empty filename`)\n\n const originBlocks = scope.blocks\n const originBlockMode = scope.blockMode\n\n scope.blocks = {}\n scope.blockMode = BlockMode.OUTPUT\n if (this.with) {\n hash[filepath] = evalValue(this.with, scope)\n }\n const templates = await this.liquid.getTemplate(filepath, scope.opts)\n scope.push(hash)\n const html = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.blocks = originBlocks\n scope.blockMode = originBlockMode\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, DecrementScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(identifier) as RegExpMatchArray\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope: Scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new DecrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n return --context[this.variable]\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\nconst candidatesRE = new RegExp(rValue.source, 'g')\n\nexport default {\n parse: function (tagToken: TagToken) {\n let match: RegExpExecArray | null = groupRE.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.group = match[1] || ''\n const candidates = match[2]\n\n this.candidates = []\n\n while ((match = candidatesRE.exec(candidates))) {\n this.candidates.push(match[0])\n }\n assert(this.candidates.length, `empty candidates: ${tagToken.raw}`)\n },\n\n render: function (scope: Scope) {\n const group = evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n const groups = scope.groups\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n\n return evalValue(candidate, scope)\n }\n}\n","import { evalExp, isTruthy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', (token: TagToken) => {\n this.branches.push({\n cond: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endif', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (const branch of this.branches) {\n const cond = evalExp(branch.cond, scope)\n if (isTruthy(cond)) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match![0]\n },\n render: function (scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new IncrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n const val = context[this.variable]\n context[this.variable]++\n return val\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /\\S+/\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticLayout = match[0]\n }\n\n match = rValue.exec(token.args)\n if (match) {\n this.layout = match[0]\n }\n\n this.tpls = this.liquid.parser.parse(remainTokens)\n },\n render: async function (scope: Scope, hash: Hash) {\n const layout = scope.opts.dynamicPartials\n ? evalValue(this.layout, scope)\n : this.staticLayout\n assert(layout, `cannot apply layout with empty filename`)\n\n // render the remaining tokens immediately\n scope.blockMode = BlockMode.STORE\n const html = await this.liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.blocks[''] === undefined) {\n scope.blocks[''] = html\n }\n const templates = await this.liquid.getTemplate(layout, scope.opts)\n scope.push(hash)\n scope.blockMode = BlockMode.OUTPUT\n const partial = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n} as ITagImplOptions\n","import BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n this.tpls = [] as ITemplate[]\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', (tpl: ITemplate) => this.tpls.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${token.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const childDefined = scope.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await this.liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.blockMode === BlockMode.STORE) {\n scope.blocks[this.block] = html\n return ''\n }\n return html\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.tokens = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endraw') stream.stop()\n else this.tokens.push(token)\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: function () {\n return this.tokens.map((token: Token) => token.raw).join('')\n }\n}\n","import { mapSeries } from 'src/util/promise'\nimport assert from 'src/util/assert'\nimport { evalExp } from 'src/render/syntax'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.variable = match[1]\n this.collection = match[2]\n this.templates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope) || []\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = hash.cols || collection.length\n const contexts = collection.map((item: any) => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row: number = 0\n let html = ''\n await mapSeries(contexts, async (context, idx) => {\n row = Math.floor(idx / cols) + 1\n const col = (idx % cols) + 1\n if (col === 1) {\n if (row !== 1) {\n html += ''\n }\n html += ``\n }\n\n html += ``\n scope.push(context)\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n html += ''\n scope.pop(context)\n return html\n })\n if (row > 0) {\n html += ''\n }\n return html\n }\n} as ITagImplOptions\n","import assign from './assign'\nimport For from './for'\nimport capture from './capture'\nimport Case from './case'\nimport comment from './comment'\nimport include from './include'\nimport decrement from './decrement'\nimport cycle from './cycle'\nimport If from './if'\nimport increment from './increment'\nimport layout from './layout'\nimport block from './block'\nimport raw from './raw'\nimport tablerow from './tablerow'\nimport unless from './unless'\nimport Break from './break'\nimport Continue from './continue'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst tags: { [key: string]: ITagImplOptions } = {\n assign, 'for': For, capture, 'case': Case, comment, include, decrement, increment, cycle, 'if': If, layout, block, raw, tablerow, unless, 'break': Break, 'continue': Continue\n}\n\nexport default tags\n","import { evalExp, isFalsy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n const cond = evalExp(this.cond, scope)\n return isFalsy(cond)\n ? this.liquid.renderer.renderTemplates(this.templates, scope)\n : this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('break')\n }\n}\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('continue')\n }\n}\n","const escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nfunction escape (str: string) {\n return String(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str: string) {\n return String(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nexport default {\n 'escape': escape,\n 'escape_once': (str: string) => escape(unescape(str)),\n 'newline_to_br': (v: string) => v.replace(/\\n/g, '
'),\n 'strip_html': (v: string) => v.replace(/|||<.*?>/g, '')\n}\n","import { FilterImpl } from 'src/template/filter/filter-impl'\n\nexport default {\n 'append': (v: string, arg: string) => v + arg,\n 'prepend': (v: string, arg: string) => arg + v,\n 'capitalize': (str: string) => String(str).charAt(0).toUpperCase() + str.slice(1),\n 'lstrip': (v: string) => String(v).replace(/^\\s+/, ''),\n 'downcase': (v: string) => v.toLowerCase(),\n 'upcase': (str: string) => String(str).toUpperCase(),\n 'remove': (v: string, arg: string) => v.split(arg).join(''),\n 'remove_first': (v: string, l: string) => v.replace(l, ''),\n 'replace': (v: string, pattern: string, replacement: string) =>\n String(v).split(pattern).join(replacement),\n 'replace_first': (v: string, arg1: string, arg2: string) => String(v).replace(arg1, arg2),\n 'rstrip': (str: string) => String(str).replace(/\\s+$/, ''),\n 'split': (v: string, arg: string) => String(v).split(arg),\n 'strip': (v: string) => String(v).trim(),\n 'strip_newlines': (v: string) => String(v).replace(/\\n/g, ''),\n 'truncate': (v: string, l: number = 50, o: string = '...') => {\n v = String(v)\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v: string, l: number = 15, o: string = '...') => {\n const arr = v.split(/\\s+/)\n let ret = arr.slice(0, l).join(' ')\n if (arr.length >= l) ret += o\n return ret\n }\n} as {[key: string]: FilterImpl}\n","export default {\n 'abs': (v: number) => Math.abs(v),\n 'ceil': (v: number) => Math.ceil(v),\n 'divided_by': (v: number, arg: number) => v / arg,\n 'floor': (v: number) => Math.floor(v),\n 'minus': bindFixed((v: number, arg: number) => v - arg),\n 'modulo': bindFixed((v: number, arg: number) => v % arg),\n 'round': (v: number, arg: number = 0) => {\n const amp = Math.pow(10, arg)\n return Math.round(v * amp) / amp\n },\n 'plus': bindFixed((v: number, arg: number) => Number(v) + Number(arg)),\n 'times': (v: number, arg: number) => v * arg\n}\n\nfunction getFixed (v: number) {\n const p = String(v).split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction bindFixed (cb: (v: number, arg: number) => number) {\n return (l: number, r: number) => {\n const f = Math.max(getFixed(l), getFixed(r))\n return cb(l, r).toFixed(f)\n }\n}\n","export default {\n 'url_decode': (x: string) => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': (x: string) => x.split(' ').map(encodeURIComponent).join('+')\n}\n","import { last } from 'src/util/underscore'\n\nexport default {\n 'join': (v: any[], arg: string) => v.join(arg === undefined ? ' ' : arg),\n 'last': (v: T[]): T => last(v),\n 'first': (v: T[]): T => v[0],\n 'map': (arr: {[key: string]: T1}[], arg: string): T1[] => arr.map(v => v[arg]),\n 'reverse': (v: any[]) => v.reverse(),\n 'sort': (v: T[], arg: (lhs: T, rhs: T) => number) => v.sort(arg),\n 'size': (v: string | any[]) => v.length,\n 'concat': (v: T1[], arg: T2[] | T2): Array => Array.prototype.concat.call(v, arg),\n 'slice': (v: T[], begin: number, length: number): T[] => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'uniq': function (arr: T[]): T[] {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(String(val))) return false\n u[String(val)] = true\n return true\n })\n }\n}\n","import { padStart } from './underscore'\n\nconst monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst monthNamesShort = monthNames.map(abbr)\nconst dayNamesShort = dayNames.map(abbr)\nconst suffixes = {\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n 'default': 'th'\n}\n\nfunction abbr (str: string) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d: Date) {\n const feb = _date.isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n },\n\n getDayOfYear: function (d: Date) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += _date.daysInMonth(d)[i]\n }\n return num + d.getDate()\n },\n\n getWeekOfYear: function (d: Date, startDay: number) {\n // Skip to startDay of this week\n const now = this.getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return padStart(String(Math.floor((now - then) / 7) + 1), 2, '0')\n },\n\n isLeapYear: function (d: Date) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d: Date) {\n const str = d.getDate().toString()\n const index = parseInt(str.slice(-1))\n return suffixes[index] || suffixes['default']\n },\n\n century: function (d: Date) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst formatCodes = {\n a: function (d: Date) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d: Date) {\n return dayNames[d.getDay()]\n },\n b: function (d: Date) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d: Date) {\n return monthNames[d.getMonth()]\n },\n c: function (d: Date) {\n return d.toLocaleString()\n },\n C: function (d: Date) {\n return _date.century(d)\n },\n d: function (d: Date) {\n return padStart(d.getDate(), 2, '0')\n },\n e: function (d: Date) {\n return padStart(d.getDate(), 2)\n },\n H: function (d: Date) {\n return padStart(d.getHours(), 2, '0')\n },\n I: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2, '0')\n },\n j: function (d: Date) {\n return padStart(_date.getDayOfYear(d), 3, '0')\n },\n k: function (d: Date) {\n return padStart(d.getHours(), 2)\n },\n l: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2)\n },\n L: function (d: Date) {\n return padStart(d.getMilliseconds(), 3, '0')\n },\n m: function (d: Date) {\n return padStart(d.getMonth() + 1, 2, '0')\n },\n M: function (d: Date) {\n return padStart(d.getMinutes(), 2, '0')\n },\n p: function (d: Date) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d: Date) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d: Date) {\n return _date.getSuffix(d)\n },\n s: function (d: Date) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d: Date) {\n return padStart(d.getSeconds(), 2, '0')\n },\n u: function (d: Date) {\n return d.getDay() || 7\n },\n U: function (d: Date) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d: Date) {\n return d.getDay()\n },\n W: function (d: Date) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d: Date) {\n return d.toLocaleDateString()\n },\n X: function (d: Date) {\n return d.toLocaleTimeString()\n },\n y: function (d: Date) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d: Date) {\n return d.getFullYear()\n },\n z: function (d: Date) {\n const tz = d.getTimezoneOffset() / 60 * 100\n return (tz > 0 ? '-' : '+') + padStart(String(Math.abs(tz)), 4, '0')\n },\n '%': function () {\n return '%'\n }\n};\n(formatCodes as any).h = formatCodes.b;\n(formatCodes as any).N = formatCodes.L\n\nexport default function (d: Date, format: string) {\n let output = ''\n let remaining = format\n\n while (true) {\n const r = /%./g\n const results = r.exec(remaining)\n\n // No more format codes. Add the remaining text and return\n if (!results) {\n return output + remaining\n }\n\n // Add the preceding text\n output += remaining.slice(0, r.lastIndex - 2)\n remaining = remaining.slice(r.lastIndex)\n\n // Add the format code\n const ch = results[0].charAt(1)\n const func = formatCodes[ch]\n output += func ? func(d) : '%' + ch\n }\n}\n","import html from './html'\nimport str from './string'\nimport math from './math'\nimport url from './url'\nimport array from './array'\nimport date from './date'\nimport obj from './object'\n\nexport default { ...html, ...str, ...math, ...url, ...date, ...obj, ...array }\n","import strftime from 'src/util/strftime'\nimport { isString } from 'src/util/underscore'\n\nexport default {\n 'date': (v: string | Date, arg: string) => {\n let date = v\n if (v === 'now') {\n date = new Date()\n } else if (isString(v)) {\n date = new Date(v)\n }\n return isValidDate(date) ? strftime(date, arg) : v\n }\n}\n\nfunction isValidDate (date: any): date is Date {\n return date instanceof Date && !isNaN(date.getTime())\n}\n","import { isTruthy } from 'src/render/syntax'\n\nexport default {\n 'default': (v: T1, arg: T2): T1 | T2 => isTruthy(v) ? v : arg\n}\n","import Scope from './scope/scope'\nimport * as Types from './types'\nimport fs from 'src/fs'\nimport * as _ from './util/underscore'\nimport ITemplate from './template/itemplate'\nimport Tokenizer from './parser/tokenizer'\nimport Render from './render/render'\nimport Tag from './template/tag/tag'\nimport Filter from './template/filter/filter'\nimport Parser from './parser/parser'\nimport ITagImplOptions from './template/tag/itag-impl-options'\nimport Value from './template/value'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './render/syntax'\nimport builtinTags from './builtin/tags'\nimport builtinFilters from './builtin/filters'\nimport { LiquidOptions, NormalizedFullOptions, applyDefault, normalize } from './liquid-options'\nimport { FilterImpl } from './template/filter/filter-impl'\n\nexport default class Liquid {\n public options: NormalizedFullOptions\n public renderer: Render\n public parser: Parser\n private cache: object = {}\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n this.options = applyDefault(normalize(opts))\n this.parser = new Parser(this)\n this.renderer = new Render()\n this.tokenizer = new Tokenizer(this.options)\n\n _.forOwn(builtinTags, (conf, name) => this.registerTag(name, conf))\n _.forOwn(builtinFilters, (handler, name) => this.registerFilter(name, handler))\n }\n parse (html: string, filepath?: string) {\n const tokens = this.tokenizer.tokenize(html, filepath)\n return this.parser.parse(tokens)\n }\n render (tpl: Array, ctx?: object, opts?: LiquidOptions) {\n const options = { ...this.options, ...normalize(opts) }\n const scope = new Scope(ctx, options)\n return this.renderer.renderTemplates(tpl, scope)\n }\n async parseAndRender (html: string, ctx?: object, opts?: LiquidOptions) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n }\n async getTemplate (file: string, opts?: LiquidOptions) {\n const options = normalize(opts)\n const roots = options.root ? [...options.root, ...this.options.root] : this.options.root\n const paths = roots.map(root => fs.resolve(root, file, this.options.extname))\n\n for (const filepath of paths) {\n if (!(await fs.exists(filepath))) continue\n\n if (this.options.cache && this.cache[filepath]) return this.cache[filepath]\n const value = this.parse(await fs.readFile(filepath), filepath)\n if (this.options.cache) this.cache[filepath] = value\n return value\n }\n\n const err = new Error('ENOENT') as any\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`\n err.code = 'ENOENT'\n throw err\n }\n async renderFile (file: string, ctx?: object, opts?: LiquidOptions) {\n const options = normalize(opts)\n const templates = await this.getTemplate(file, options)\n return this.render(templates, ctx, opts)\n }\n evalValue (str: string, scope: Scope) {\n return new Value(str, this.options.strict_filters).value(scope)\n }\n registerFilter (name: string, filter: FilterImpl) {\n return Filter.register(name, filter)\n }\n registerTag (name: string, tag: ITagImplOptions) {\n return Tag.register(name, tag)\n }\n plugin (plugin: (this: Liquid, L: typeof Liquid) => void) {\n return plugin.call(this, Liquid)\n }\n express () {\n const self = this\n return function (this: any, filePath: string, ctx: object, cb: (err: Error | null, html?: string) => void) {\n const opts = { root: this.root }\n self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb)\n }\n }\n static default = Liquid\n static isTruthy = isTruthy\n static isFalsy = isFalsy\n static evalExp = evalExp\n static evalValue = evalValue\n static Types = Types\n}\n"],"names":["toStr","Object","prototype","toString","arrToStr","Array","isString","value","call","isFunction","stringify","isNil","to_liquid","toLiquid","to_s","indexOf","cache","JSON","key","isObject","push","isArray","forOwn","object","iteratee","k","hasOwnProperty","last","arr","length","type","range","start","stop","step","undefined","i","padStart","str","ch","n","String","err","token","_super","message","_this","originalError","tslib_1.__extends","LiquidError","lines","begin","end","this","context","input","split","Math","max","line","min","_\r\n .range","map","lineNumber","indicator","num","_.padStart","text","join","msg","file","col","mkMessage","stack","Error","name","update","tpl","predicate","AssertionError","BlockMode","defaultOptions","root","extname","dynamicPartials","trim_tag_right","trim_tag_left","trim_output_right","trim_output_left","greedy","tag_delimiter_left","tag_delimiter_right","output_delimiter_left","output_delimiter_right","strict_filters","strict_variables","normalize","options","_.isArray","_.isString","applyDefault","ctx","opts","OUTPUT","contexts","Scope","reduce","val","__assign","path","paths","propertyAccessSeq","scope","findContextFor","_.last","readProperty","v","some","_.isObject","unshift","arguments","pop","findIndex","TypeError","splice","filter","candidate","obj","_.isNil","_.isFunction","size","liquid_method_missing","j","seq","delemiter","test","assert","slice","matchRightBracket","get","readFile","url","Promise","resolve","reject","xhr","XMLHttpRequest","onload","status","responseText","statusText","onerror","open","send","filepath","ext","base","document","createElement","href","head","getElementsByTagName","insertBefore","firstChild","a","resolved","removeChild","domResolve","replace","origin","exists","ParseState","raw","Token","pos","trimLeft","trimRight","trim","quoted","RegExp","source","quoteBalanced","number","identifier","subscript","literal","variable","rangeLimit","rangeCapture","hash","hashCapture","tagLine","quotedLine","rangeLine","operators","match","lexical.tagLine","TokenizationError","args","DelimitedToken","Tokenizer","tokens","tagL","tagR","outputL","outputR","p","curLine","state","HTML","buffer","lineBegin","substr","HTMLToken","TAG","OutputToken","TagToken","inRaw","forEach","rLeft","rRight","whiteSpaceCtrl","t","Render","templates","html","templates_1","_i","_a","render","_b","e_1","resolvedHTML","RenderError","==","l","r","!=",">","<",">=","<=","contains","and","isTruthy","or","evalExp","exp","operatorREs","lexical.operators","operatorRE","expRE","lexical.quoteBalanced","op","lexical.rangeLine","evalValue","isNaN","Number","isFalsy","markup","lastIndex","exec","liquid","proto","impl","Tag","impls","create","parse","Hash","tag","Template","strictFilters","Filter","x","arg","apply","parseToken","ParseStream","cb","handlers","event","h","trigger","stopRequested","shift","template","INIT","sealed","filterName","filterArgs","initial","FILTER_NAME","filters","FILTER_ARG","default_1","prev","Value","Output","Parser","remainTokens","e","ParseError","re","AssignScope","mapSeries","iterable","ret","result","item","idx","then","tagToken","collection","reversed","elseTemplates","stream","parser","parseStream","on","keys","offset","limit","reverse","first","index","index0","rindex","rindex0","finished","renderer","renderTemplates","CaptureScope","cond","cases","branch","staticFileRE","withRE","staticValue","with","parseAndRender","getAll","originBlocks","blocks","originBlockMode","blockMode","getTemplate","DecrementScope","groupRE","rValue","candidatesRE","group","candidates","fingerprint","groups","branches","IncrementScope","staticLayout","layout","tpls","STORE","partial","block","childDefined","tags","assign","for","For","capture","case","Case","comment","include","decrement","increment","cycle","if","If","tablerow","cols","row","floor","unless","break","RenderBreakError","continue","escapeMap","&","\"","'","unescapeMap","&","<",">",""","'","escape","m","escape_once","newline_to_br","strip_html","append","prepend","capitalize","charAt","toUpperCase","lstrip","downcase","toLowerCase","upcase","remove","remove_first","pattern","replacement","replace_first","arg1","arg2","rstrip","strip","strip_newlines","truncate","o","truncatewords","abs","ceil","divided_by","minus","bindFixed","modulo","round","amp","pow","plus","times","getFixed","f","toFixed","url_decode","decodeURIComponent","url_encode","encodeURIComponent","sort","concat","uniq","u","monthNames","dayNames","monthNamesShort","abbr","dayNamesShort","suffixes","1","2","3","default","_date","daysInMonth","d","isLeapYear","getDayOfYear","getMonth","getDate","getWeekOfYear","startDay","now","getDay","Date","getFullYear","year","getSuffix","parseInt","century","substring","formatCodes","A","b","B","c","toLocaleString","C","H","getHours","I","L","getMilliseconds","M","getMinutes","P","q","s","valueOf","S","getSeconds","U","w","W","toLocaleDateString","X","toLocaleTimeString","y","Y","z","tz","getTimezoneOffset","%","N","math","date","getTime","format","output","remaining","results","func","strftime","array","tokenizer","_.forOwn","builtinTags","conf","registerTag","builtinFilters","handler","registerFilter","Liquid","tokenize","roots","fs","paths_1","code","register","plugin","self","filePath","renderFile","Types"],"mappings":"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"} \ No newline at end of file diff --git a/dist/rollup.config.d.ts b/dist/rollup.config.d.ts new file mode 100644 index 000000000..51c0afd80 --- /dev/null +++ b/dist/rollup.config.d.ts @@ -0,0 +1,43 @@ +declare const _default: ({ + output: { + file: string; + name: string; + format: string; + sourcemap: boolean; + banner: string; + }[]; + external: string[]; + plugins: import("rollup").Plugin[]; + treeshake: { + propertyReadSideEffects: boolean; + }; + input: string; +} | { + output: { + file: string; + name: string; + format: string; + sourcemap: boolean; + banner: string; + }[]; + plugins: any[]; + treeshake: { + propertyReadSideEffects: boolean; + }; + input: string; + external?: undefined; +} | { + output: { + file: string; + name: string; + format: string; + sourcemap: boolean; + }[]; + plugins: any[]; + treeshake: { + propertyReadSideEffects: boolean; + }; + input: string; + external?: undefined; +})[]; +export default _default; diff --git a/dist/src/builtin/filters/array.d.ts b/dist/src/builtin/filters/array.d.ts new file mode 100644 index 000000000..0d48ffe8f --- /dev/null +++ b/dist/src/builtin/filters/array.d.ts @@ -0,0 +1,15 @@ +declare const _default: { + 'join': (v: any[], arg: string) => string; + 'last': (v: T[]) => T; + 'first': (v: T[]) => T; + 'map': (arr: { + [key: string]: T1; + }[], arg: string) => T1[]; + 'reverse': (v: any[]) => any[]; + 'sort': (v: T[], arg: (lhs: T, rhs: T) => number) => T[]; + 'size': (v: string | any[]) => number; + 'concat': (v: T1[], arg: T2 | T2[]) => (T1 | T2)[]; + 'slice': (v: T[], begin: number, length: number) => T[]; + 'uniq': (arr: T[]) => T[]; +}; +export default _default; diff --git a/dist/src/builtin/filters/date.d.ts b/dist/src/builtin/filters/date.d.ts new file mode 100644 index 000000000..8b2e69ab0 --- /dev/null +++ b/dist/src/builtin/filters/date.d.ts @@ -0,0 +1,4 @@ +declare const _default: { + 'date': (v: string | Date, arg: string) => string | Date; +}; +export default _default; diff --git a/dist/src/builtin/filters/html.d.ts b/dist/src/builtin/filters/html.d.ts new file mode 100644 index 000000000..23600e019 --- /dev/null +++ b/dist/src/builtin/filters/html.d.ts @@ -0,0 +1,8 @@ +declare function escape(str: string): string; +declare const _default: { + 'escape': typeof escape; + 'escape_once': (str: string) => string; + 'newline_to_br': (v: string) => string; + 'strip_html': (v: string) => string; +}; +export default _default; diff --git a/dist/src/builtin/filters/index.d.ts b/dist/src/builtin/filters/index.d.ts new file mode 100644 index 000000000..da2b76608 --- /dev/null +++ b/dist/src/builtin/filters/index.d.ts @@ -0,0 +1,32 @@ +declare const _default: { + 'join': (v: any[], arg: string) => string; + 'last': (v: T[]) => T; + 'first': (v: T[]) => T; + 'map': (arr: { + [key: string]: T1; + }[], arg: string) => T1[]; + 'reverse': (v: any[]) => any[]; + 'sort': (v: T[], arg: (lhs: T, rhs: T) => number) => T[]; + 'size': (v: string | any[]) => number; + 'concat': (v: T1[], arg: T2 | T2[]) => (T1 | T2)[]; + 'slice': (v: T[], begin: number, length: number) => T[]; + 'uniq': (arr: T[]) => T[]; + 'default': (v: T1, arg: T2) => T1 | T2; + 'date': (v: string | Date, arg: string) => string | Date; + 'url_decode': (x: string) => string; + 'url_encode': (x: string) => string; + 'abs': (v: number) => number; + 'ceil': (v: number) => number; + 'divided_by': (v: number, arg: number) => number; + 'floor': (v: number) => number; + 'minus': (l: number, r: number) => string; + 'modulo': (l: number, r: number) => string; + 'round': (v: number, arg?: number) => number; + 'plus': (l: number, r: number) => string; + 'times': (v: number, arg: number) => number; + 'escape': (str: string) => string; + 'escape_once': (str: string) => string; + 'newline_to_br': (v: string) => string; + 'strip_html': (v: string) => string; +}; +export default _default; diff --git a/dist/src/builtin/filters/math.d.ts b/dist/src/builtin/filters/math.d.ts new file mode 100644 index 000000000..e5f8330d2 --- /dev/null +++ b/dist/src/builtin/filters/math.d.ts @@ -0,0 +1,12 @@ +declare const _default: { + 'abs': (v: number) => number; + 'ceil': (v: number) => number; + 'divided_by': (v: number, arg: number) => number; + 'floor': (v: number) => number; + 'minus': (l: number, r: number) => string; + 'modulo': (l: number, r: number) => string; + 'round': (v: number, arg?: number) => number; + 'plus': (l: number, r: number) => string; + 'times': (v: number, arg: number) => number; +}; +export default _default; diff --git a/dist/src/builtin/filters/object.d.ts b/dist/src/builtin/filters/object.d.ts new file mode 100644 index 000000000..d5ec20a60 --- /dev/null +++ b/dist/src/builtin/filters/object.d.ts @@ -0,0 +1,4 @@ +declare const _default: { + 'default': (v: T1, arg: T2) => T1 | T2; +}; +export default _default; diff --git a/dist/src/builtin/filters/string.d.ts b/dist/src/builtin/filters/string.d.ts new file mode 100644 index 000000000..c46d278d8 --- /dev/null +++ b/dist/src/builtin/filters/string.d.ts @@ -0,0 +1,5 @@ +import { FilterImpl } from 'src/template/filter/filter-impl'; +declare const _default: { + [key: string]: FilterImpl; +}; +export default _default; diff --git a/dist/src/builtin/filters/url.d.ts b/dist/src/builtin/filters/url.d.ts new file mode 100644 index 000000000..1c595dcb6 --- /dev/null +++ b/dist/src/builtin/filters/url.d.ts @@ -0,0 +1,5 @@ +declare const _default: { + 'url_decode': (x: string) => string; + 'url_encode': (x: string) => string; +}; +export default _default; diff --git a/dist/src/builtin/tags/assign.d.ts b/dist/src/builtin/tags/assign.d.ts new file mode 100644 index 000000000..b05d7ea10 --- /dev/null +++ b/dist/src/builtin/tags/assign.d.ts @@ -0,0 +1,3 @@ +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; +export default _default; diff --git a/dist/src/builtin/tags/block.d.ts b/dist/src/builtin/tags/block.d.ts new file mode 100644 index 000000000..b05d7ea10 --- /dev/null +++ b/dist/src/builtin/tags/block.d.ts @@ -0,0 +1,3 @@ +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; +export default _default; diff --git a/dist/src/builtin/tags/break.d.ts b/dist/src/builtin/tags/break.d.ts new file mode 100644 index 000000000..6fd7eb732 --- /dev/null +++ b/dist/src/builtin/tags/break.d.ts @@ -0,0 +1,4 @@ +declare const _default: { + render: () => Promise; +}; +export default _default; diff --git a/dist/src/builtin/tags/capture.d.ts b/dist/src/builtin/tags/capture.d.ts new file mode 100644 index 000000000..b05d7ea10 --- /dev/null +++ b/dist/src/builtin/tags/capture.d.ts @@ -0,0 +1,3 @@ +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; +export default _default; diff --git a/dist/src/builtin/tags/case.d.ts b/dist/src/builtin/tags/case.d.ts new file mode 100644 index 000000000..b05d7ea10 --- /dev/null +++ b/dist/src/builtin/tags/case.d.ts @@ -0,0 +1,3 @@ +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; +export default _default; diff --git a/dist/src/builtin/tags/comment.d.ts b/dist/src/builtin/tags/comment.d.ts new file mode 100644 index 000000000..b05d7ea10 --- /dev/null +++ b/dist/src/builtin/tags/comment.d.ts @@ -0,0 +1,3 @@ +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; +export default _default; diff --git a/dist/src/builtin/tags/continue.d.ts b/dist/src/builtin/tags/continue.d.ts new file mode 100644 index 000000000..6fd7eb732 --- /dev/null +++ b/dist/src/builtin/tags/continue.d.ts @@ -0,0 +1,4 @@ +declare const _default: { + render: () => Promise; +}; +export default _default; diff --git a/dist/src/builtin/tags/cycle.d.ts b/dist/src/builtin/tags/cycle.d.ts new file mode 100644 index 000000000..b05d7ea10 --- /dev/null +++ b/dist/src/builtin/tags/cycle.d.ts @@ -0,0 +1,3 @@ +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; +export default _default; diff --git a/dist/src/builtin/tags/decrement.d.ts b/dist/src/builtin/tags/decrement.d.ts new file mode 100644 index 000000000..b05d7ea10 --- /dev/null +++ b/dist/src/builtin/tags/decrement.d.ts @@ -0,0 +1,3 @@ +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; +export default _default; diff --git a/dist/src/builtin/tags/for.d.ts b/dist/src/builtin/tags/for.d.ts new file mode 100644 index 000000000..b05d7ea10 --- /dev/null +++ b/dist/src/builtin/tags/for.d.ts @@ -0,0 +1,3 @@ +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; +export default _default; diff --git a/dist/src/builtin/tags/if.d.ts b/dist/src/builtin/tags/if.d.ts new file mode 100644 index 000000000..b05d7ea10 --- /dev/null +++ b/dist/src/builtin/tags/if.d.ts @@ -0,0 +1,3 @@ +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; +export default _default; diff --git a/dist/src/builtin/tags/include.d.ts b/dist/src/builtin/tags/include.d.ts new file mode 100644 index 000000000..b05d7ea10 --- /dev/null +++ b/dist/src/builtin/tags/include.d.ts @@ -0,0 +1,3 @@ +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; +export default _default; diff --git a/dist/src/builtin/tags/increment.d.ts b/dist/src/builtin/tags/increment.d.ts new file mode 100644 index 000000000..b05d7ea10 --- /dev/null +++ b/dist/src/builtin/tags/increment.d.ts @@ -0,0 +1,3 @@ +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; +export default _default; diff --git a/dist/src/builtin/tags/index.d.ts b/dist/src/builtin/tags/index.d.ts new file mode 100644 index 000000000..c763955b6 --- /dev/null +++ b/dist/src/builtin/tags/index.d.ts @@ -0,0 +1,5 @@ +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const tags: { + [key: string]: ITagImplOptions; +}; +export default tags; diff --git a/dist/src/builtin/tags/layout.d.ts b/dist/src/builtin/tags/layout.d.ts new file mode 100644 index 000000000..b05d7ea10 --- /dev/null +++ b/dist/src/builtin/tags/layout.d.ts @@ -0,0 +1,3 @@ +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; +export default _default; diff --git a/dist/src/builtin/tags/raw.d.ts b/dist/src/builtin/tags/raw.d.ts new file mode 100644 index 000000000..b05d7ea10 --- /dev/null +++ b/dist/src/builtin/tags/raw.d.ts @@ -0,0 +1,3 @@ +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; +export default _default; diff --git a/dist/src/builtin/tags/tablerow.d.ts b/dist/src/builtin/tags/tablerow.d.ts new file mode 100644 index 000000000..b05d7ea10 --- /dev/null +++ b/dist/src/builtin/tags/tablerow.d.ts @@ -0,0 +1,3 @@ +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; +export default _default; diff --git a/dist/src/builtin/tags/unless.d.ts b/dist/src/builtin/tags/unless.d.ts new file mode 100644 index 000000000..b05d7ea10 --- /dev/null +++ b/dist/src/builtin/tags/unless.d.ts @@ -0,0 +1,3 @@ +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; +export default _default; diff --git a/dist/src/fs/browser.d.ts b/dist/src/fs/browser.d.ts new file mode 100644 index 000000000..f242e1186 --- /dev/null +++ b/dist/src/fs/browser.d.ts @@ -0,0 +1,3 @@ +import IFS from './ifs'; +declare const _default: IFS; +export default _default; diff --git a/dist/src/fs/ifs.d.ts b/dist/src/fs/ifs.d.ts new file mode 100644 index 000000000..213c8533a --- /dev/null +++ b/dist/src/fs/ifs.d.ts @@ -0,0 +1,5 @@ +export default interface IFS { + exists: (filepath: string) => Promise; + readFile: (filepath: string) => Promise; + resolve: (root: string, file: string, ext: string) => string; +} diff --git a/dist/src/fs/node.d.ts b/dist/src/fs/node.d.ts new file mode 100644 index 000000000..aeeb97c10 --- /dev/null +++ b/dist/src/fs/node.d.ts @@ -0,0 +1,3 @@ +import IFS from './ifs'; +declare const fs: IFS; +export default fs; diff --git a/dist/src/liquid-options.d.ts b/dist/src/liquid-options.d.ts new file mode 100644 index 000000000..e016d23be --- /dev/null +++ b/dist/src/liquid-options.d.ts @@ -0,0 +1,53 @@ +export interface LiquidOptions { + /** `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 `["."]` */ + root?: string | string[]; + /** `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 `""`. */ + extname?: string; + /** `cache` indicates whether or not to cache resolved templates. Defaults to `false`. */ + cache?: boolean; + /** `dynamicPartials`: if set, treat `` parameter in `{%include filepath %}`, `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */ + dynamicPartials?: boolean; + /** `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`. */ + strict_filters?: boolean; + /** `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`. */ + strict_variables?: boolean; + /** `trim_tag_right` is used to strip blank characters (including ` `, `\t`, and `\r`) from the right of tags (`{% %}`) until `\n` (inclusive). Defaults to `false`. */ + trim_tag_right?: boolean; + /** `trim_tag_left` is similar to `trim_tag_right`, whereas the `\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */ + trim_tag_left?: boolean; + /** ``trim_output_right` is used to strip blank characters (including ` `, `\t`, and `\r`) from the right of values (`{{ }}`) until `\n` (inclusive). Defaults to `false`. */ + trim_output_right?: boolean; + /** `trim_output_left` is similar to `trim_output_right`, whereas the `\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */ + trim_output_left?: boolean; + /** `tag_delimiter_left` and `tag_delimiter_right` are used to override the delimiter for liquid tags **/ + tag_delimiter_left?: string; + tag_delimiter_right?: string; + /** `output_delimiter_left` and `output_delimiter_right` are used to override the delimiter for liquid outputs **/ + output_delimiter_left?: string; + output_delimiter_right?: string; + /** `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`. */ + greedy?: boolean; +} +interface NormalizedOptions extends LiquidOptions { + root?: string[]; +} +export interface NormalizedFullOptions extends NormalizedOptions { + root: string[]; + extname: string; + cache: boolean; + dynamicPartials: boolean; + strict_filters: boolean; + strict_variables: boolean; + trim_tag_right: boolean; + trim_tag_left: boolean; + trim_output_right: boolean; + trim_output_left: boolean; + tag_delimiter_left: string; + tag_delimiter_right: string; + output_delimiter_left: string; + output_delimiter_right: string; + greedy: boolean; +} +export declare function normalize(options?: LiquidOptions): NormalizedOptions; +export declare function applyDefault(options?: NormalizedOptions): NormalizedFullOptions; +export {}; diff --git a/dist/src/liquid.d.ts b/dist/src/liquid.d.ts new file mode 100644 index 000000000..87e38ea56 --- /dev/null +++ b/dist/src/liquid.d.ts @@ -0,0 +1,33 @@ +import Scope from './scope/scope'; +import * as Types from './types'; +import ITemplate from './template/itemplate'; +import Render from './render/render'; +import Parser from './parser/parser'; +import ITagImplOptions from './template/tag/itag-impl-options'; +import { isTruthy, isFalsy, evalExp, evalValue } from './render/syntax'; +import { LiquidOptions, NormalizedFullOptions } from './liquid-options'; +import { FilterImpl } from './template/filter/filter-impl'; +export default class Liquid { + options: NormalizedFullOptions; + renderer: Render; + parser: Parser; + private cache; + private tokenizer; + constructor(opts?: LiquidOptions); + parse(html: string, filepath?: string): ITemplate[]; + render(tpl: Array, ctx?: object, opts?: LiquidOptions): Promise; + parseAndRender(html: string, ctx?: object, opts?: LiquidOptions): Promise; + getTemplate(file: string, opts?: LiquidOptions): Promise; + renderFile(file: string, ctx?: object, opts?: LiquidOptions): Promise; + evalValue(str: string, scope: Scope): any; + registerFilter(name: string, filter: FilterImpl): void; + registerTag(name: string, tag: ITagImplOptions): void; + plugin(plugin: (this: Liquid, L: typeof Liquid) => void): void; + express(): (this: any, filePath: string, ctx: object, cb: (err: Error | null, html?: string | undefined) => void) => void; + static default: typeof Liquid; + static isTruthy: typeof isTruthy; + static isFalsy: typeof isFalsy; + static evalExp: typeof evalExp; + static evalValue: typeof evalValue; + static Types: typeof Types; +} diff --git a/dist/src/parser/delimited-token.d.ts b/dist/src/parser/delimited-token.d.ts new file mode 100644 index 000000000..418cf3ea0 --- /dev/null +++ b/dist/src/parser/delimited-token.d.ts @@ -0,0 +1,6 @@ +import Token from './token'; +export default class DelimitedToken extends Token { + trimLeft: boolean; + trimRight: boolean; + constructor(raw: string, value: string, input: string, line: number, pos: number, file?: string); +} diff --git a/dist/src/parser/html-token.d.ts b/dist/src/parser/html-token.d.ts new file mode 100644 index 000000000..041e4a8fb --- /dev/null +++ b/dist/src/parser/html-token.d.ts @@ -0,0 +1,4 @@ +import Token from './token'; +export default class HTMLToken extends Token { + constructor(str: string, input: string, line: number, col: number, file?: string); +} diff --git a/dist/src/parser/lexical.d.ts b/dist/src/parser/lexical.d.ts new file mode 100644 index 000000000..a2c7eee63 --- /dev/null +++ b/dist/src/parser/lexical.d.ts @@ -0,0 +1,21 @@ +export declare const quoted: RegExp; +export declare const quoteBalanced: RegExp; +export declare const number: RegExp; +export declare const bool: RegExp; +export declare const identifier: RegExp; +export declare const subscript: RegExp; +export declare const literal: RegExp; +export declare const variable: RegExp; +export declare const rangeLimit: RegExp; +export declare const range: RegExp; +export declare const rangeCapture: RegExp; +export declare const value: RegExp; +export declare const hash: RegExp; +export declare const hashCapture: RegExp; +export declare const tagLine: RegExp; +export declare const numberLine: RegExp; +export declare const boolLine: RegExp; +export declare const quotedLine: RegExp; +export declare const rangeLine: RegExp; +export declare const operators: RegExp[]; +export declare function isRange(str: string): boolean; diff --git a/dist/src/parser/output-token.d.ts b/dist/src/parser/output-token.d.ts new file mode 100644 index 000000000..1d9e43de5 --- /dev/null +++ b/dist/src/parser/output-token.d.ts @@ -0,0 +1,4 @@ +import DelimitedToken from './delimited-token'; +export default class OutputToken extends DelimitedToken { + constructor(raw: string, value: string, input: string, line: number, pos: number, file?: string); +} diff --git a/dist/src/parser/parse-stream.d.ts b/dist/src/parser/parse-stream.d.ts new file mode 100644 index 000000000..a550002db --- /dev/null +++ b/dist/src/parser/parse-stream.d.ts @@ -0,0 +1,15 @@ +import Token from 'src/parser/token'; +import ITemplate from 'src/template/itemplate'; +declare type ParseToken = ((token: Token, remainTokens: Array) => ITemplate); +export default class ParseStream { + private tokens; + private handlers; + private stopRequested; + private parseToken; + constructor(tokens: Array, parseToken: ParseToken); + on(name: string, cb: (arg: T) => void): ParseStream; + trigger(event: string, arg?: T): boolean; + start(): this; + stop(): this; +} +export {}; diff --git a/dist/src/parser/parser.d.ts b/dist/src/parser/parser.d.ts new file mode 100644 index 000000000..fa2b4e773 --- /dev/null +++ b/dist/src/parser/parser.d.ts @@ -0,0 +1,14 @@ +import Liquid from 'src/liquid'; +import ParseStream from './parse-stream'; +import Token from './token'; +import Tag from 'src/template/tag/tag'; +import Output from 'src/template/output'; +import HTML from 'src/template/html'; +import ITemplate from 'src/template/itemplate'; +export default class Parser { + liquid: Liquid; + constructor(liquid: Liquid); + parse(tokens: Array): ITemplate[]; + parseToken(token: Token, remainTokens: Array): Tag | Output | HTML; + parseStream(tokens: Array): ParseStream; +} diff --git a/dist/src/parser/tag-token.d.ts b/dist/src/parser/tag-token.d.ts new file mode 100644 index 000000000..ac0d4b6d9 --- /dev/null +++ b/dist/src/parser/tag-token.d.ts @@ -0,0 +1,6 @@ +import DelimitedToken from './delimited-token'; +export default class TagToken extends DelimitedToken { + name: string; + args: string; + constructor(raw: string, value: string, input: string, line: number, pos: number, file?: string); +} diff --git a/dist/src/parser/token.d.ts b/dist/src/parser/token.d.ts new file mode 100644 index 000000000..22857d659 --- /dev/null +++ b/dist/src/parser/token.d.ts @@ -0,0 +1,10 @@ +export default class Token { + type: string; + line: number; + col: number; + raw: string; + input: string; + file?: string; + value: string; + constructor(raw: string, input: string, line: number, col: number, file?: string); +} diff --git a/dist/src/parser/tokenizer.d.ts b/dist/src/parser/tokenizer.d.ts new file mode 100644 index 000000000..d55268258 --- /dev/null +++ b/dist/src/parser/tokenizer.d.ts @@ -0,0 +1,7 @@ +import Token from './token'; +import { NormalizedFullOptions } from '../liquid-options'; +export default class Tokenizer { + options: NormalizedFullOptions; + constructor(options?: NormalizedFullOptions); + tokenize(input: string, file?: string): Token[]; +} diff --git a/dist/src/parser/whitespace-ctrl.d.ts b/dist/src/parser/whitespace-ctrl.d.ts new file mode 100644 index 000000000..21cf629d4 --- /dev/null +++ b/dist/src/parser/whitespace-ctrl.d.ts @@ -0,0 +1,3 @@ +import Token from 'src/parser/token'; +import { NormalizedFullOptions } from 'src/liquid-options'; +export default function whiteSpaceCtrl(tokens: Token[], options: NormalizedFullOptions): void; diff --git a/dist/src/render/render.d.ts b/dist/src/render/render.d.ts new file mode 100644 index 000000000..b097cd8cc --- /dev/null +++ b/dist/src/render/render.d.ts @@ -0,0 +1,5 @@ +import Scope from 'src/scope/scope'; +import ITemplate from 'src/template/itemplate'; +export default class Render { + renderTemplates(templates: ITemplate[], scope: Scope): Promise; +} diff --git a/dist/src/render/syntax.d.ts b/dist/src/render/syntax.d.ts new file mode 100644 index 000000000..d97cbc4e7 --- /dev/null +++ b/dist/src/render/syntax.d.ts @@ -0,0 +1,5 @@ +import Scope from 'src/scope/scope'; +export declare function evalExp(exp: string, scope: Scope): any; +export declare function evalValue(str: string, scope: Scope): any; +export declare function isTruthy(val: any): boolean; +export declare function isFalsy(val: any): boolean; diff --git a/dist/src/scope/block-mode.d.ts b/dist/src/scope/block-mode.d.ts new file mode 100644 index 000000000..3f0bc6c83 --- /dev/null +++ b/dist/src/scope/block-mode.d.ts @@ -0,0 +1,5 @@ +declare enum BlockMode { + OUTPUT = 0, + STORE = 1 +} +export default BlockMode; diff --git a/dist/src/scope/icontext.d.ts b/dist/src/scope/icontext.d.ts new file mode 100644 index 000000000..5b3df5e55 --- /dev/null +++ b/dist/src/scope/icontext.d.ts @@ -0,0 +1,4 @@ +export default interface IContext { + [key: string]: any; + liquid_method_missing?: (key: string) => any; +} diff --git a/dist/src/scope/scope.d.ts b/dist/src/scope/scope.d.ts new file mode 100644 index 000000000..fa97bd8fd --- /dev/null +++ b/dist/src/scope/scope.d.ts @@ -0,0 +1,22 @@ +import { NormalizedFullOptions } from '../liquid-options'; +import BlockMode from './block-mode'; +import IContext from './icontext'; +export default class Scope { + opts: NormalizedFullOptions; + contexts: Array; + blocks: object; + groups: { + [key: string]: number; + }; + blockMode: BlockMode; + constructor(ctx?: object, opts?: NormalizedFullOptions); + getAll(): IContext; + get(path: string): any; + set(path: string, v: any): void; + unshift(ctx: object): number; + push(ctx: object): number; + pop(ctx?: object): object | undefined; + findContextFor(key: string, filter?: ((conttext: object) => boolean)): IContext | null; + private readProperty; + propertyAccessSeq(str: string): string[]; +} diff --git a/dist/src/scope/scopes.d.ts b/dist/src/scope/scopes.d.ts new file mode 100644 index 000000000..e4ebea46d --- /dev/null +++ b/dist/src/scope/scopes.d.ts @@ -0,0 +1,8 @@ +export declare class CaptureScope { +} +export declare class AssignScope { +} +export declare class IncrementScope { +} +export declare class DecrementScope { +} diff --git a/dist/src/template/filter/filter-impl.d.ts b/dist/src/template/filter/filter-impl.d.ts new file mode 100644 index 000000000..16786256a --- /dev/null +++ b/dist/src/template/filter/filter-impl.d.ts @@ -0,0 +1 @@ +export declare type FilterImpl = (value: any, ...args: any[]) => any; diff --git a/dist/src/template/filter/filter.d.ts b/dist/src/template/filter/filter.d.ts new file mode 100644 index 000000000..69c50c6ac --- /dev/null +++ b/dist/src/template/filter/filter.d.ts @@ -0,0 +1,12 @@ +import Scope from 'src/scope/scope'; +import { FilterImpl } from './filter-impl'; +export default class Filter { + name: string; + impl: FilterImpl; + args: string[]; + private static impls; + constructor(name: string, args: string[], strictFilters: boolean); + render(value: any, scope: Scope): any; + static register(name: string, filter: FilterImpl): void; + static clear(): void; +} diff --git a/dist/src/template/html.d.ts b/dist/src/template/html.d.ts new file mode 100644 index 000000000..50169ca39 --- /dev/null +++ b/dist/src/template/html.d.ts @@ -0,0 +1,8 @@ +import Template from 'src/template/template'; +import ITemplate from 'src/template/itemplate'; +import HTMLToken from 'src/parser/html-token'; +export default class extends Template implements ITemplate { + str: string; + constructor(token: HTMLToken); + render(): Promise; +} diff --git a/dist/src/template/itemplate.d.ts b/dist/src/template/itemplate.d.ts new file mode 100644 index 000000000..cdfdfa80c --- /dev/null +++ b/dist/src/template/itemplate.d.ts @@ -0,0 +1,6 @@ +import Scope from 'src/scope/scope'; +import Token from 'src/parser/token'; +export default interface ITemplate { + token: Token; + render(scope: Scope): Promise; +} diff --git a/dist/src/template/output.d.ts b/dist/src/template/output.d.ts new file mode 100644 index 000000000..812a0be2b --- /dev/null +++ b/dist/src/template/output.d.ts @@ -0,0 +1,10 @@ +import Value from './value'; +import Template from 'src/template/template'; +import ITemplate from 'src/template/itemplate'; +import Scope from 'src/scope/scope'; +import OutputToken from 'src/parser/output-token'; +export default class Output extends Template implements ITemplate { + value: Value; + constructor(token: OutputToken, strictFilters: boolean); + render(scope: Scope): Promise; +} diff --git a/dist/src/template/tag/hash.d.ts b/dist/src/template/tag/hash.d.ts new file mode 100644 index 000000000..b2a325db1 --- /dev/null +++ b/dist/src/template/tag/hash.d.ts @@ -0,0 +1,11 @@ +import Scope from 'src/scope/scope'; +/** + * Key-Value Pairs Representing Tag Arguments + * Example: + * For the markup `{% include 'head.html' foo='bar' %}`, + * hash['foo'] === 'bar' + */ +export default class Hash { + [key: string]: any; + constructor(markup: string, scope: Scope); +} diff --git a/dist/src/template/tag/itag-impl-options.d.ts b/dist/src/template/tag/itag-impl-options.d.ts new file mode 100644 index 000000000..fc1b08a63 --- /dev/null +++ b/dist/src/template/tag/itag-impl-options.d.ts @@ -0,0 +1,9 @@ +import Scope from 'src/scope/scope'; +import TagToken from 'src/parser/tag-token'; +import Token from 'src/parser/token'; +import Hash from 'src/template/tag/hash'; +import ITagImpl from './itag-impl'; +export default interface ITagImplOptions { + parse?: (this: ITagImpl, token: TagToken, remainingTokens: Array) => void; + render?: (this: ITagImpl, scope: Scope, hash: Hash) => any | Promise; +} diff --git a/dist/src/template/tag/itag-impl.d.ts b/dist/src/template/tag/itag-impl.d.ts new file mode 100644 index 000000000..674972aa5 --- /dev/null +++ b/dist/src/template/tag/itag-impl.d.ts @@ -0,0 +1,6 @@ +import Liquid from 'src/liquid'; +import ITagImplOptions from './itag-impl-options'; +export default interface ITagImpl extends ITagImplOptions { + liquid: Liquid; + [key: string]: any; +} diff --git a/dist/src/template/tag/tag.d.ts b/dist/src/template/tag/tag.d.ts new file mode 100644 index 000000000..175d73882 --- /dev/null +++ b/dist/src/template/tag/tag.d.ts @@ -0,0 +1,18 @@ +import Scope from 'src/scope/scope'; +import ITagImplOptions from './itag-impl-options'; +import Liquid from 'src/liquid'; +import Template from 'src/template/template'; +import ITemplate from 'src/template/itemplate'; +import TagToken from 'src/parser/tag-token'; +import Token from 'src/parser/token'; +export default class Tag extends Template implements ITemplate { + name: string; + private impl; + static impls: { + [key: string]: ITagImplOptions; + }; + constructor(token: TagToken, tokens: Token[], liquid: Liquid); + render(scope: Scope): Promise; + static register(name: string, tag: ITagImplOptions): void; + static clear(): void; +} diff --git a/dist/src/template/template.d.ts b/dist/src/template/template.d.ts new file mode 100644 index 000000000..a6bda3b2d --- /dev/null +++ b/dist/src/template/template.d.ts @@ -0,0 +1,4 @@ +export default abstract class Template { + token: T; + constructor(token: T); +} diff --git a/dist/src/template/value.d.ts b/dist/src/template/value.d.ts new file mode 100644 index 000000000..1cc87e6d9 --- /dev/null +++ b/dist/src/template/value.d.ts @@ -0,0 +1,11 @@ +import Filter from './filter/filter'; +import Scope from 'src/scope/scope'; +export default class { + initial: any; + filters: Array; + /** + * @param str value string, like: "i have a dream | truncate: 3 + */ + constructor(str: string, strictFilters: boolean); + value(scope: Scope): any; +} diff --git a/dist/src/types.d.ts b/dist/src/types.d.ts new file mode 100644 index 000000000..ac78bd4e9 --- /dev/null +++ b/dist/src/types.d.ts @@ -0,0 +1,2 @@ +export { AssignScope, CaptureScope, IncrementScope, DecrementScope } from './scope/scopes'; +export { ParseError, TokenizationError, RenderBreakError, AssertionError } from './util/error'; diff --git a/dist/src/util/assert.d.ts b/dist/src/util/assert.d.ts new file mode 100644 index 000000000..a6177e3b0 --- /dev/null +++ b/dist/src/util/assert.d.ts @@ -0,0 +1 @@ +export default function (predicate: any, message?: string): void; diff --git a/dist/src/util/error.d.ts b/dist/src/util/error.d.ts new file mode 100644 index 000000000..5d0fd82fe --- /dev/null +++ b/dist/src/util/error.d.ts @@ -0,0 +1,25 @@ +import Token from 'src/parser/token'; +import ITemplate from 'src/template/itemplate'; +declare abstract class LiquidError extends Error { + private token; + private originalError; + constructor(err: Error, token: Token); + protected update(): void; +} +export declare class TokenizationError extends LiquidError { + constructor(message: string, token: Token); +} +export declare class ParseError extends LiquidError { + constructor(err: Error, token: Token); +} +export declare class RenderError extends LiquidError { + constructor(err: Error, tpl: ITemplate); +} +export declare class RenderBreakError extends Error { + resolvedHTML: string; + constructor(message: string); +} +export declare class AssertionError extends Error { + constructor(message: string); +} +export {}; diff --git a/dist/src/util/promise.d.ts b/dist/src/util/promise.d.ts new file mode 100644 index 000000000..6140ae2de --- /dev/null +++ b/dist/src/util/promise.d.ts @@ -0,0 +1 @@ +export declare function mapSeries(iterable: T1[], iteratee: (item: T1, idx: number, iterable: T1[]) => Promise | T2): Promise; diff --git a/dist/src/util/strftime.d.ts b/dist/src/util/strftime.d.ts new file mode 100644 index 000000000..8627363d5 --- /dev/null +++ b/dist/src/util/strftime.d.ts @@ -0,0 +1 @@ +export default function (d: Date, format: string): string; diff --git a/dist/src/util/underscore.d.ts b/dist/src/util/underscore.d.ts new file mode 100644 index 000000000..a5df471c3 --- /dev/null +++ b/dist/src/util/underscore.d.ts @@ -0,0 +1,21 @@ +export declare function isString(value: any): boolean; +export declare function isFunction(value: any): boolean; +export declare function promisify(fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise; +export declare function promisify(fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void): (arg1: T1, arg2: T2) => Promise; +export declare function stringify(value: any): string; +export declare function create(proto: T1): T2; +export declare function isNil(value: any): boolean; +export declare function isArray(value: any): boolean; +export declare function isError(value: any): boolean; +export declare function forOwn(object: { + [key: string]: T; +} | undefined, iteratee: ((val: T, key: string, obj: { + [key: string]: T; +}) => boolean | void)): { + [key: string]: T; +}; +export declare function last(arr: T[]): T; +export declare function last(arr: string): string; +export declare function isObject(value: any): boolean; +export declare function range(start: number, stop?: number, step?: number): number[]; +export declare function padStart(str: any, length: number, ch?: string): any; diff --git a/package-lock.json b/package-lock.json index c1186c3ac..68e65e7fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "liquidjs", - "version": "7.2.1", + "version": "7.2.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index b5e07da2c..f4d5e1496 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "liquidjs", - "version": "7.2.1", + "version": "7.2.2", "description": "Liquid template engine by pure JavaScript: compatible to shopify, easy to extend.", "main": "dist/liquid.common.js", "types": "dist/liquid.d.ts",