@aswin.dev/editor 0.7.1 → 0.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +56 -0
- package/dist/{AiChatSidebar-DWGPVtvC.js → AiChatSidebar-Dt5pvG5t.js} +37 -51
- package/dist/{AiFeatureMenu-duUFSfDf.js → AiFeatureMenu-BipxcGap.js} +1 -1
- package/dist/{CloudEditor-CFldoCOb.js → CloudEditor-CnUX0IOW.js} +283 -239
- package/dist/{CollaboratorBar-Bw-lbt61.js → CollaboratorBar-NaaZTjbs.js} +2 -2
- package/dist/{CommentsSidebar-BaD5F53-.js → CommentsSidebar-DE6ZsM4D.js} +9 -10
- package/dist/CountdownBlock-Ba3T-i2X.js +1536 -0
- package/dist/{CountdownToolbar-Dg4F8MTk.js → CountdownToolbar-CbhSp_uq.js} +1 -1
- package/dist/{DesignReferenceSidebar-BSH7uNP_.js → DesignReferenceSidebar-CZg97bbj.js} +1 -1
- package/dist/{ModuleBrowserModal-6phxZSKI.js → ModuleBrowserModal-D2EVdexc.js} +4 -4
- package/dist/{ModulePreviewCanvas-BW8L3eQX.js → ModulePreviewCanvas-P3N-nxkU.js} +52 -47
- package/dist/{NumberWithSuffix-BpUzQOJt.js → NumberWithSuffix-CihczoAd.js} +1 -1
- package/dist/{ParagraphEditor-DNSzAB-I.js → ParagraphEditor-BbRuKhWv.js} +7 -7
- package/dist/{SaveModuleDialog-zMQTpez7.js → SaveModuleDialog-DLZa3m3O.js} +2 -2
- package/dist/{SnapshotHistory-Do-A5rYU.js → SnapshotHistory-Csg1_jXi.js} +3 -3
- package/dist/{TestEmailModal-DGj_9V1u.js → TestEmailModal-m3okLbJz.js} +2 -2
- package/dist/{TitleEditor-C7IDnAoS.js → TitleEditor-CtJIS5ER.js} +2 -2
- package/dist/{TplModal-BAsVzcTb.js → TplModal-CQCrKeKP.js} +1 -1
- package/dist/{blockTypeIcons-C6LDKvmd.js → blockTypeIcons-Dah0pgt-.js} +50 -19
- package/dist/bundle-stats.json +8 -8
- package/dist/cdn/chunks/AccessibilityPanel-Bt_fD7QT.js +97 -0
- package/dist/cdn/chunks/AccessibilityPanel-Bt_fD7QT.js.map +1 -0
- package/dist/cdn/chunks/AiFeatureMenu-Bn-0rgfr.js +59 -0
- package/dist/cdn/chunks/AiFeatureMenu-Bn-0rgfr.js.map +1 -0
- package/dist/cdn/chunks/BlockA11yBadge-Cj18Iw0p.js +33 -0
- package/dist/cdn/chunks/BlockA11yBadge-Cj18Iw0p.js.map +1 -0
- package/dist/cdn/chunks/CloudEditor-56lVcdot.js +1220 -0
- package/dist/cdn/chunks/CloudEditor-56lVcdot.js.map +1 -0
- package/dist/cdn/chunks/CollaboratorBar-B7DCV3xp.js +51 -0
- package/dist/cdn/chunks/CollaboratorBar-B7DCV3xp.js.map +1 -0
- package/dist/cdn/chunks/CountdownToolbar-BtaD3d3-.js +212 -0
- package/dist/cdn/chunks/CountdownToolbar-BtaD3d3-.js.map +1 -0
- package/dist/cdn/chunks/ModuleBrowserModal-CiIY7ZGv.js +195 -0
- package/dist/cdn/chunks/ModuleBrowserModal-CiIY7ZGv.js.map +1 -0
- package/dist/cdn/chunks/ModulePreviewCanvas-M7_OGV2m.js +113 -0
- package/dist/cdn/chunks/ModulePreviewCanvas-M7_OGV2m.js.map +1 -0
- package/dist/cdn/chunks/NumberWithSuffix-DfVBnsgc.js +423 -0
- package/dist/cdn/chunks/NumberWithSuffix-DfVBnsgc.js.map +1 -0
- package/dist/cdn/chunks/ParagraphEditor-1XJOpiLX.js +544 -0
- package/dist/cdn/chunks/ParagraphEditor-1XJOpiLX.js.map +1 -0
- package/dist/cdn/chunks/RichTextEditorContent-C2q8sbp2.js +106 -0
- package/dist/cdn/chunks/RichTextEditorContent-C2q8sbp2.js.map +1 -0
- package/dist/cdn/chunks/SaveModuleDialog-BNxh1jPT.js +119 -0
- package/dist/cdn/chunks/SaveModuleDialog-BNxh1jPT.js.map +1 -0
- package/dist/cdn/chunks/TitleEditor-IF7VzLTk.js +171 -0
- package/dist/cdn/chunks/TitleEditor-IF7VzLTk.js.map +1 -0
- package/dist/cdn/chunks/blockTypeIcons-tPBKQ8WC.js +24 -0
- package/dist/cdn/chunks/blockTypeIcons-tPBKQ8WC.js.map +1 -0
- package/dist/cdn/chunks/de-B05yW8Gi.js +840 -0
- package/dist/cdn/chunks/de-B05yW8Gi.js.map +1 -0
- package/dist/cdn/chunks/de-BPHtelu7.js +209 -0
- package/dist/cdn/chunks/de-BPHtelu7.js.map +1 -0
- package/dist/cdn/chunks/de-BRDqJwJe.js +89 -0
- package/dist/cdn/chunks/de-BRDqJwJe.js.map +1 -0
- package/dist/cdn/chunks/draggable-C-1_gch3.js +11572 -0
- package/dist/cdn/chunks/draggable-C-1_gch3.js.map +1 -0
- package/dist/cdn/chunks/emojiData-DUHzsh4j.js +19 -0
- package/dist/cdn/chunks/emojiData-DUHzsh4j.js.map +1 -0
- package/dist/cdn/chunks/en-BII7695P.js +840 -0
- package/dist/cdn/chunks/en-BII7695P.js.map +1 -0
- package/dist/cdn/chunks/en-Cdj_Ikl1.js +89 -0
- package/dist/cdn/chunks/en-Cdj_Ikl1.js.map +1 -0
- package/dist/cdn/chunks/en-DejwuJhw.js +209 -0
- package/dist/cdn/chunks/en-DejwuJhw.js.map +1 -0
- package/dist/cdn/chunks/extensions-B0eT-yjf.js +598 -0
- package/dist/cdn/chunks/extensions-B0eT-yjf.js.map +1 -0
- package/dist/cdn/chunks/features-BrvE2Fzv.js +9677 -0
- package/dist/cdn/chunks/features-BrvE2Fzv.js.map +1 -0
- package/dist/cdn/chunks/icons-C7wtAD8p.js +1043 -0
- package/dist/cdn/chunks/icons-C7wtAD8p.js.map +1 -0
- package/dist/cdn/chunks/liquid.browser-CllF-us3.js +3279 -0
- package/dist/cdn/chunks/liquid.browser-CllF-us3.js.map +1 -0
- package/dist/cdn/chunks/media-library-Cl5XuaKy.js +6030 -0
- package/dist/cdn/chunks/media-library-Cl5XuaKy.js.map +1 -0
- package/dist/cdn/chunks/pusher-i7-OBujc.js +2508 -0
- package/dist/cdn/chunks/pusher-i7-OBujc.js.map +1 -0
- package/dist/cdn/chunks/quality-Va91a3N8.js +1456 -0
- package/dist/cdn/chunks/quality-Va91a3N8.js.map +1 -0
- package/dist/cdn/chunks/readableTextColor-DhoK4XiZ.js +32 -0
- package/dist/cdn/chunks/readableTextColor-DhoK4XiZ.js.map +1 -0
- package/dist/cdn/chunks/renderer-si0Zgxeb.js +642 -0
- package/dist/cdn/chunks/renderer-si0Zgxeb.js.map +1 -0
- package/dist/cdn/chunks/rolldown-runtime-BNuo_Jkg.js +20 -0
- package/dist/cdn/chunks/src-BLyYIbdZ.js +497 -0
- package/dist/cdn/chunks/src-BLyYIbdZ.js.map +1 -0
- package/dist/cdn/chunks/styleConstants-DfcU8u_r.js +57 -0
- package/dist/cdn/chunks/styleConstants-DfcU8u_r.js.map +1 -0
- package/dist/cdn/chunks/styles-C6BQLT9F.js +5807 -0
- package/dist/cdn/chunks/styles-C6BQLT9F.js.map +1 -0
- package/dist/cdn/chunks/tiptap-D8whBv5F.js +14654 -0
- package/dist/cdn/chunks/tiptap-D8whBv5F.js.map +1 -0
- package/dist/cdn/editor.css +2 -0
- package/dist/cdn/editor.js +367 -0
- package/dist/cdn/editor.js.map +1 -0
- package/dist/{cloud-6ZmAvF0j.js → cloud-BoS0J0vs.js} +1 -1
- package/dist/{de-DWcgp-7T.js → de-C74F9xK3.js} +112 -3
- package/dist/dist-C2grMquk.js +1261 -0
- package/dist/{dist-CivF9P8b.js → dist-Djgi0A6k.js} +92 -77
- package/dist/{en-Cxd4fhNm.js → en-B24jVTeO.js} +112 -3
- package/dist/{extensions-D__hOlV1.js → extensions-DsmjHqBF.js} +14 -14
- package/dist/index.d.ts +21 -10
- package/dist/{pencil-BZJPNYWR.js → pencil-Bpimrzzw.js} +5 -2
- package/dist/style.css +1 -1
- package/dist/styles-BMFMtR9R.js +6341 -0
- package/dist/templatical-editor.js +197 -139
- package/dist/undo-2-m1EUDbUg.js +16 -0
- package/dist/{useEditorCore-wslttMH-.js → useEditorCore-CtNAo0uy.js} +2154 -2025
- package/dist/useMergeTag-2vTcVpNo.js +34 -0
- package/package.json +12 -12
- package/dist/CountdownBlock-DaYGxKqo.js +0 -92
- package/dist/check-DJrpDKO_.js +0 -7
- package/dist/dist-C04s_fLA.js +0 -563
- package/dist/styles-B4tjX5SP.js +0 -5224
- package/dist/useMergeTag-DX0XG5V9.js +0 -34
- /package/dist/{clock-ik2pRJKG.js → clock-Ba4p3rJM.js} +0 -0
- /package/dist/{readableTextColor-DVuzNX1y.js → readableTextColor-C_9OpzBw.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"liquid.browser-CllF-us3.js","names":[],"sources":["../../../../../node_modules/.pnpm/liquidjs@10.25.7/node_modules/liquidjs/dist/liquid.browser.mjs"],"sourcesContent":["/*\n * liquidjs@10.25.7, https://github.com/harttle/liquidjs\n * (c) 2016-2026 harttle\n * Released under the MIT License.\n */\nclass Token {\r\n constructor(kind, input, begin, end, file) {\r\n this.kind = kind;\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n }\r\n getText() {\r\n return this.input.slice(this.begin, this.end);\r\n }\r\n getPosition() {\r\n let [row, col] = [1, 1];\r\n for (let i = 0; i < this.begin; i++) {\r\n if (this.input[i] === '\\n') {\r\n row++;\r\n col = 1;\r\n }\r\n else\r\n col++;\r\n }\r\n return [row, col];\r\n }\r\n size() {\r\n return this.end - this.begin;\r\n }\r\n}\n\nclass Drop {\r\n liquidMethodMissing(key, context) {\r\n return undefined;\r\n }\r\n}\n\nconst toString$1 = Object.prototype.toString;\r\nconst toLowerCase = String.prototype.toLowerCase;\r\nconst hasOwnProperty = Object.hasOwnProperty;\r\nfunction isString(value) {\r\n return typeof value === 'string';\r\n}\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nfunction isFunction(value) {\r\n return typeof value === 'function';\r\n}\r\nfunction isPromise(val) {\r\n return val && isFunction(val.then);\r\n}\r\nfunction isIterator(val) {\r\n return val && isFunction(val.next) && isFunction(val.throw) && isFunction(val.return);\r\n}\r\nfunction stringify(value) {\r\n value = toValue(value);\r\n if (isString(value))\r\n return value;\r\n if (isNil(value))\r\n return '';\r\n if (isArray(value))\r\n return value.map(x => stringify(x)).join('');\r\n return String(value);\r\n}\r\nfunction toEnumerable(val) {\r\n val = toValue(val);\r\n if (isArray(val))\r\n return val;\r\n if (isString(val) && val.length > 0)\r\n return [val];\r\n if (isIterable(val))\r\n return Array.from(val);\r\n if (isObject(val))\r\n return Object.keys(val).map((key) => [key, val[key]]);\r\n return [];\r\n}\r\nfunction toArray(val) {\r\n val = toValue(val);\r\n if (isNil(val))\r\n return [];\r\n if (isArray(val))\r\n return val;\r\n return [val];\r\n}\r\nfunction toValue(value) {\r\n return (value instanceof Drop && isFunction(value.valueOf)) ? value.valueOf() : value;\r\n}\r\nfunction toNumber(value) {\r\n return +toValue(value) || 0;\r\n}\r\nfunction isNumber(value) {\r\n return typeof value === 'number';\r\n}\r\nfunction toLiquid(value) {\r\n if (value && isFunction(value.toLiquid))\r\n return toLiquid(value.toLiquid());\r\n return value;\r\n}\r\nfunction isNil(value) {\r\n return value == null;\r\n}\r\nfunction isUndefined(value) {\r\n return value === undefined;\r\n}\r\nfunction isArray(value) {\r\n // be compatible with IE 8\r\n return toString$1.call(value) === '[object Array]';\r\n}\r\nfunction isArrayLike(value) {\r\n return value && isNumber(value.length);\r\n}\r\nfunction isIterable(value) {\r\n return isObject(value) && Symbol.iterator in value;\r\n}\r\n/*\r\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\r\n * The iteratee is invoked with three arguments: (value, key, object).\r\n * Iteratee functions may exit iteration early by explicitly returning false.\r\n * @param {Object} object The object to iterate over.\r\n * @param {Function} iteratee The function invoked per iteration.\r\n * @return {Object} Returns object.\r\n */\r\nfunction forOwn(obj, iteratee) {\r\n obj = obj || {};\r\n for (const k in obj) {\r\n if (hasOwnProperty.call(obj, k)) {\r\n if (iteratee(obj[k], k, obj) === false)\r\n break;\r\n }\r\n }\r\n return obj;\r\n}\r\nfunction last(arr) {\r\n return arr[arr.length - 1];\r\n}\r\n/*\r\n * Checks if value is the language type of Object.\r\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\r\n * @param {any} value The value to check.\r\n * @return {Boolean} Returns true if value is an object, else false.\r\n */\r\nfunction isObject(value) {\r\n const type = typeof value;\r\n return value !== null && (type === 'object' || type === 'function');\r\n}\r\nfunction range(start, stop, step = 1) {\r\n const arr = [];\r\n for (let i = start; i < stop; i += step) {\r\n arr.push(i);\r\n }\r\n return arr;\r\n}\r\nfunction padStart(str, length, ch = ' ') {\r\n return pad(str, length, ch, (str, ch) => ch + str);\r\n}\r\nfunction padEnd(str, length, ch = ' ') {\r\n return pad(str, length, ch, (str, ch) => str + ch);\r\n}\r\nfunction pad(str, length, ch, add) {\r\n str = String(str);\r\n let n = length - str.length;\r\n while (n-- > 0)\r\n str = add(str, ch);\r\n return str;\r\n}\r\nfunction identify(val) {\r\n return val;\r\n}\r\nfunction changeCase(str) {\r\n const hasLowerCase = [...str].some(ch => ch >= 'a' && ch <= 'z');\r\n return hasLowerCase ? str.toUpperCase() : str.toLowerCase();\r\n}\r\nfunction ellipsis(str, N) {\r\n return str.length > N ? str.slice(0, N - 3) + '...' : str;\r\n}\r\nfunction orderedCompare(a, b) {\r\n if (isNil(a) && isNil(b))\r\n return 0;\r\n if (isNil(a))\r\n return 1;\r\n if (isNil(b))\r\n return -1;\r\n if (a < b)\r\n return -1;\r\n if (a > b)\r\n return 1;\r\n return 0;\r\n}\r\n// compare string in case-insensitive way, undefined values to the tail\r\nfunction caseInsensitiveCompare(a, b) {\r\n if (isNil(a) && isNil(b))\r\n return 0;\r\n if (isNil(a))\r\n return 1;\r\n if (isNil(b))\r\n return -1;\r\n a = toLowerCase.call(a);\r\n b = toLowerCase.call(b);\r\n if (a < b)\r\n return -1;\r\n if (a > b)\r\n return 1;\r\n return 0;\r\n}\r\nfunction argumentsToValue(fn) {\r\n return function (...args) { return fn.call(this, ...args.map(toValue)); };\r\n}\r\nfunction argumentsToNumber(fn) {\r\n return function (...args) { return fn.call(this, ...args.map(toNumber)); };\r\n}\r\n/** Return an array containing unique elements from _array_. Works with nested arrays and objects. */\r\nfunction* strictUniq(array) {\r\n const seen = new Set();\r\n for (const element of array) {\r\n const key = JSON.stringify(element);\r\n if (!seen.has(key)) {\r\n seen.add(key);\r\n yield element;\r\n }\r\n }\r\n}\n\n/**\r\n * targeting ES5, extends Error won't create a proper prototype chain, need a trait to keep track of classes\r\n */\r\nconst TRAIT = '__liquidClass__';\r\nclass LiquidError extends Error {\r\n constructor(err, token) {\r\n /**\r\n * note: for ES5 targeting, `this` will be replaced by return value of Error(),\r\n * thus everything on `this` will be lost, avoid calling `LiquidError` methods here\r\n */\r\n super(typeof err === 'string' ? err : err.message);\r\n this.context = '';\r\n if (typeof err !== 'string')\r\n Object.defineProperty(this, 'originalError', { value: err, enumerable: false });\r\n Object.defineProperty(this, 'token', { value: token, enumerable: false });\r\n Object.defineProperty(this, TRAIT, { value: 'LiquidError', enumerable: false });\r\n }\r\n update() {\r\n Object.defineProperty(this, 'context', { value: mkContext(this.token), enumerable: false });\r\n this.message = mkMessage(this.message, this.token);\r\n this.stack = this.message + '\\n' + this.context +\r\n '\\n' + this.stack;\r\n if (this.originalError)\r\n this.stack += '\\nFrom ' + this.originalError.stack;\r\n }\r\n static is(obj) {\r\n return (obj === null || obj === void 0 ? void 0 : obj[TRAIT]) === 'LiquidError';\r\n }\r\n}\r\nclass TokenizationError extends LiquidError {\r\n constructor(message, token) {\r\n super(message, token);\r\n this.name = 'TokenizationError';\r\n super.update();\r\n }\r\n}\r\nclass ParseError extends LiquidError {\r\n constructor(err, token) {\r\n super(err, token);\r\n this.name = 'ParseError';\r\n this.message = err.message;\r\n super.update();\r\n }\r\n}\r\nclass RenderError extends LiquidError {\r\n constructor(err, tpl) {\r\n super(err, tpl.token);\r\n this.name = 'RenderError';\r\n this.message = err.message;\r\n super.update();\r\n }\r\n static is(obj) {\r\n return obj.name === 'RenderError';\r\n }\r\n}\r\nclass LiquidErrors extends LiquidError {\r\n constructor(errors) {\r\n super(errors[0], errors[0].token);\r\n this.errors = errors;\r\n this.name = 'LiquidErrors';\r\n const s = errors.length > 1 ? 's' : '';\r\n this.message = `${errors.length} error${s} found`;\r\n super.update();\r\n }\r\n static is(obj) {\r\n return obj.name === 'LiquidErrors';\r\n }\r\n}\r\nclass UndefinedVariableError extends LiquidError {\r\n constructor(err, token) {\r\n super(err, token);\r\n this.name = 'UndefinedVariableError';\r\n this.message = err.message;\r\n super.update();\r\n }\r\n}\r\n// only used internally; raised where we don't have token information,\r\n// so it can't be an UndefinedVariableError.\r\nclass InternalUndefinedVariableError extends Error {\r\n constructor(variableName) {\r\n super(`undefined variable: ${variableName}`);\r\n this.name = 'InternalUndefinedVariableError';\r\n this.variableName = variableName;\r\n }\r\n}\r\nclass AssertionError extends Error {\r\n constructor(message) {\r\n super(message);\r\n this.name = 'AssertionError';\r\n this.message = message + '';\r\n }\r\n}\r\nfunction mkContext(token) {\r\n const [line, col] = token.getPosition();\r\n const lines = token.input.split('\\n');\r\n const begin = Math.max(line - 2, 1);\r\n const end = Math.min(line + 3, lines.length);\r\n const context = range(begin, end + 1)\r\n .map(lineNumber => {\r\n const rowIndicator = (lineNumber === line) ? '>> ' : ' ';\r\n const num = padStart(String(lineNumber), String(end).length);\r\n let text = `${rowIndicator}${num}| `;\r\n const colIndicator = lineNumber === line\r\n ? '\\n' + padStart('^', col + text.length)\r\n : '';\r\n text += lines[lineNumber - 1];\r\n text += colIndicator;\r\n return text;\r\n })\r\n .join('\\n');\r\n return context;\r\n}\r\nfunction mkMessage(msg, token) {\r\n if (token.file)\r\n msg += `, file:${token.file}`;\r\n const [line, col] = token.getPosition();\r\n msg += `, line:${line}, col:${col}`;\r\n return msg;\r\n}\n\n// **DO NOT CHANGE THIS FILE**\r\n//\r\n// This file is generated by bin/character-gen.js\r\n// bitmask character types to boost performance\r\nconst TYPES = [0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 4, 4, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 8, 0, 0, 0, 0, 8, 0, 0, 0, 64, 0, 65, 0, 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0, 0, 2, 2, 2, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0];\r\nconst WORD = 1;\r\nconst BLANK = 4;\r\nconst QUOTE = 8;\r\nconst INLINE_BLANK = 16;\r\nconst NUMBER = 32;\r\nconst SIGN = 64;\r\nconst PUNCTUATION = 128;\r\nfunction isWord(char) {\r\n const code = char.charCodeAt(0);\r\n return code >= 128 ? !TYPES[code] : !!(TYPES[code] & WORD);\r\n}\r\nTYPES[160] = TYPES[5760] = TYPES[6158] = TYPES[8192] = TYPES[8193] = TYPES[8194] = TYPES[8195] = TYPES[8196] = TYPES[8197] = TYPES[8198] = TYPES[8199] = TYPES[8200] = TYPES[8201] = TYPES[8202] = TYPES[8232] = TYPES[8233] = TYPES[8239] = TYPES[8287] = TYPES[12288] = BLANK;\r\nTYPES[8220] = TYPES[8221] = PUNCTUATION;\n\nfunction assert(predicate, message) {\r\n if (!predicate) {\r\n const msg = typeof message === 'function'\r\n ? message()\r\n : (message || `expect ${predicate} to be true`);\r\n throw new AssertionError(msg);\r\n }\r\n}\r\nfunction assertEmpty(predicate, message = `unexpected ${JSON.stringify(predicate)}`) {\r\n assert(!predicate, message);\r\n}\n\nclass NullDrop extends Drop {\r\n equals(value) {\r\n return isNil(toValue(value));\r\n }\r\n gt() {\r\n return false;\r\n }\r\n geq() {\r\n return false;\r\n }\r\n lt() {\r\n return false;\r\n }\r\n leq() {\r\n return false;\r\n }\r\n valueOf() {\r\n return null;\r\n }\r\n}\n\nclass EmptyDrop extends Drop {\r\n equals(value) {\r\n if (value instanceof EmptyDrop)\r\n return false;\r\n value = toValue(value);\r\n if (isString(value) || isArray(value))\r\n return value.length === 0;\r\n if (isObject(value))\r\n return Object.keys(value).length === 0;\r\n return false;\r\n }\r\n gt() {\r\n return false;\r\n }\r\n geq() {\r\n return false;\r\n }\r\n lt() {\r\n return false;\r\n }\r\n leq() {\r\n return false;\r\n }\r\n valueOf() {\r\n return '';\r\n }\r\n static is(value) {\r\n return value instanceof EmptyDrop;\r\n }\r\n}\n\nclass BlankDrop extends EmptyDrop {\r\n equals(value) {\r\n if (value === false)\r\n return true;\r\n if (isNil(toValue(value)))\r\n return true;\r\n if (isString(value))\r\n return /^\\s*$/.test(value);\r\n return super.equals(value);\r\n }\r\n static is(value) {\r\n return value instanceof BlankDrop;\r\n }\r\n}\n\nclass ForloopDrop extends Drop {\r\n constructor(length, collection, variable) {\r\n super();\r\n this.i = 0;\r\n this.length = length;\r\n this.name = `${variable}-${collection}`;\r\n }\r\n next() {\r\n this.i++;\r\n }\r\n index0() {\r\n return this.i;\r\n }\r\n index() {\r\n return this.i + 1;\r\n }\r\n first() {\r\n return this.i === 0;\r\n }\r\n last() {\r\n return this.i === this.length - 1;\r\n }\r\n rindex() {\r\n return this.length - this.i;\r\n }\r\n rindex0() {\r\n return this.length - this.i - 1;\r\n }\r\n valueOf() {\r\n return JSON.stringify(this);\r\n }\r\n}\n\nclass SimpleEmitter {\r\n constructor() {\r\n this.buffer = '';\r\n }\r\n write(html) {\r\n this.buffer += stringify(html);\r\n }\r\n}\n\nclass StreamedEmitter {\r\n constructor() {\r\n this.buffer = '';\r\n this.stream = null;\r\n throw new Error('streaming not supported in browser');\r\n }\r\n}\n\nclass KeepingTypeEmitter {\r\n constructor() {\r\n this.buffer = '';\r\n }\r\n write(html) {\r\n html = toValue(html);\r\n // This will only preserve the type if the value is isolated.\r\n // I.E:\r\n // {{ my-port }} -> 42\r\n // {{ my-host }}:{{ my-port }} -> 'host:42'\r\n if (typeof html !== 'string' && this.buffer === '') {\r\n this.buffer = html;\r\n }\r\n else {\r\n this.buffer = stringify(this.buffer) + stringify(html);\r\n }\r\n }\r\n}\n\nclass BlockDrop extends Drop {\r\n constructor(\r\n // the block render from layout template\r\n superBlockRender = () => '') {\r\n super();\r\n this.superBlockRender = superBlockRender;\r\n }\r\n /**\r\n * Provide parent access in child block by\r\n * {{ block.super }}\r\n */\r\n *super() {\r\n const emitter = new SimpleEmitter();\r\n yield this.superBlockRender(emitter);\r\n return emitter.buffer;\r\n }\r\n}\n\nfunction isComparable(arg) {\r\n return (arg &&\r\n isFunction(arg.equals) &&\r\n isFunction(arg.gt) &&\r\n isFunction(arg.geq) &&\r\n isFunction(arg.lt) &&\r\n isFunction(arg.leq));\r\n}\n\nconst nil = new NullDrop();\r\nconst literalValues = {\r\n 'true': true,\r\n 'false': false,\r\n 'nil': nil,\r\n 'null': nil,\r\n 'empty': new EmptyDrop(),\r\n 'blank': new BlankDrop()\r\n};\n\nfunction createTrie(input) {\r\n const trie = {};\r\n for (const [name, data] of Object.entries(input)) {\r\n let node = trie;\r\n for (let i = 0; i < name.length; i++) {\r\n const c = name[i];\r\n node[c] = node[c] || {};\r\n if (i === name.length - 1 && isWord(name[i])) {\r\n node[c].needBoundary = true;\r\n }\r\n node = node[c];\r\n }\r\n node.data = data;\r\n node.end = true;\r\n }\r\n return trie;\r\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\n\nfunction toLiquidAsync(asyncFn, syncFn) {\r\n const syncImpl = syncFn || asyncFn;\r\n return (sync, ...args) => {\r\n return sync ? syncImpl(...args) : asyncFn(...args);\r\n };\r\n}\r\n// convert an async iterator to a Promise\r\nfunction toPromise(val) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n if (!isIterator(val))\r\n return val;\r\n let value;\r\n let done = false;\r\n let next = 'next';\r\n do {\r\n const state = val[next](value);\r\n done = state.done;\r\n value = state.value;\r\n next = 'next';\r\n try {\r\n if (isIterator(value))\r\n value = toPromise(value);\r\n if (isPromise(value))\r\n value = yield value;\r\n }\r\n catch (err) {\r\n next = 'throw';\r\n value = err;\r\n }\r\n } while (!done);\r\n return value;\r\n });\r\n}\r\n// convert an async iterator to a value in a synchronous manner\r\nfunction toValueSync(val) {\r\n if (!isIterator(val))\r\n return val;\r\n let value;\r\n let done = false;\r\n let next = 'next';\r\n do {\r\n const state = val[next](value);\r\n done = state.done;\r\n value = state.value;\r\n next = 'next';\r\n if (isIterator(value)) {\r\n try {\r\n value = toValueSync(value);\r\n }\r\n catch (err) {\r\n next = 'throw';\r\n value = err;\r\n }\r\n }\r\n } while (!done);\r\n return value;\r\n}\n\nconst rFormat = /%([-_0^#:]+)?(\\d+)?([EO])?(.)/;\r\n// prototype extensions\r\nfunction daysInMonth(d) {\r\n const feb = isLeapYear(d) ? 29 : 28;\r\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\r\n}\r\nfunction getDayOfYear(d) {\r\n let num = 0;\r\n for (let i = 0; i < d.getMonth(); ++i) {\r\n num += daysInMonth(d)[i];\r\n }\r\n return num + d.getDate();\r\n}\r\nfunction getWeekOfYear(d, startDay) {\r\n // Skip to startDay of this week\r\n const now = getDayOfYear(d) + (startDay - d.getDay());\r\n // Find the first startDay of the year\r\n const jan1 = new Date(d.getFullYear(), 0, 1);\r\n const then = (7 - jan1.getDay() + startDay);\r\n return String(Math.floor((now - then) / 7) + 1);\r\n}\r\nfunction isLeapYear(d) {\r\n const year = d.getFullYear();\r\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)));\r\n}\r\nfunction ordinal(d) {\r\n const date = d.getDate();\r\n if ([11, 12, 13].includes(date))\r\n return 'th';\r\n switch (date % 10) {\r\n case 1: return 'st';\r\n case 2: return 'nd';\r\n case 3: return 'rd';\r\n default: return 'th';\r\n }\r\n}\r\nfunction century(d) {\r\n return parseInt(d.getFullYear().toString().substring(0, 2), 10);\r\n}\r\n// default to 0\r\nconst padWidths = {\r\n d: 2,\r\n e: 2,\r\n H: 2,\r\n I: 2,\r\n j: 3,\r\n k: 2,\r\n l: 2,\r\n L: 3,\r\n m: 2,\r\n M: 2,\r\n S: 2,\r\n U: 2,\r\n W: 2\r\n};\r\nconst padSpaceChars = new Set('aAbBceklpP');\r\nfunction getTimezoneOffset(d, opts) {\r\n const nOffset = Math.abs(d.getTimezoneOffset());\r\n const h = Math.floor(nOffset / 60);\r\n const m = nOffset % 60;\r\n return (d.getTimezoneOffset() > 0 ? '-' : '+') +\r\n padStart(h, 2, '0') +\r\n (opts.flags[':'] ? ':' : '') +\r\n padStart(m, 2, '0');\r\n}\r\nconst formatCodes = {\r\n a: (d) => d.getShortWeekdayName(),\r\n A: (d) => d.getLongWeekdayName(),\r\n b: (d) => d.getShortMonthName(),\r\n B: (d) => d.getLongMonthName(),\r\n c: (d) => d.toLocaleString(),\r\n C: (d) => century(d),\r\n d: (d) => d.getDate(),\r\n e: (d) => d.getDate(),\r\n H: (d) => d.getHours(),\r\n I: (d) => String(d.getHours() % 12 || 12),\r\n j: (d) => getDayOfYear(d),\r\n k: (d) => d.getHours(),\r\n l: (d) => String(d.getHours() % 12 || 12),\r\n L: (d) => d.getMilliseconds(),\r\n m: (d) => d.getMonth() + 1,\r\n M: (d) => d.getMinutes(),\r\n N: (d, opts) => {\r\n const width = Number(opts.width) || 9;\r\n const str = String(d.getMilliseconds()).slice(0, width);\r\n return padEnd(str, width, '0');\r\n },\r\n p: (d) => (d.getHours() < 12 ? 'AM' : 'PM'),\r\n P: (d) => (d.getHours() < 12 ? 'am' : 'pm'),\r\n q: (d) => ordinal(d),\r\n s: (d) => Math.round(d.getTime() / 1000),\r\n S: (d) => d.getSeconds(),\r\n u: (d) => d.getDay() || 7,\r\n U: (d) => getWeekOfYear(d, 0),\r\n w: (d) => d.getDay(),\r\n W: (d) => getWeekOfYear(d, 1),\r\n x: (d) => d.toLocaleDateString(),\r\n X: (d) => d.toLocaleTimeString(),\r\n y: (d) => d.getFullYear().toString().slice(2, 4),\r\n Y: (d) => d.getFullYear(),\r\n z: getTimezoneOffset,\r\n Z: (d, opts) => d.getTimeZoneName() || getTimezoneOffset(d, opts),\r\n 't': () => '\\t',\r\n 'n': () => '\\n',\r\n '%': () => '%'\r\n};\r\nformatCodes.h = formatCodes.b;\r\nfunction strftime(d, formatStr) {\r\n let output = '';\r\n let remaining = formatStr;\r\n let match;\r\n while ((match = rFormat.exec(remaining))) {\r\n output += remaining.slice(0, match.index);\r\n remaining = remaining.slice(match.index + match[0].length);\r\n output += format(d, match);\r\n }\r\n return output + remaining;\r\n}\r\nfunction format(d, match) {\r\n const [input, flagStr = '', width, modifier, conversion] = match;\r\n const convert = formatCodes[conversion];\r\n if (!convert)\r\n return input;\r\n const flags = {};\r\n for (const flag of flagStr)\r\n flags[flag] = true;\r\n let ret = String(convert(d, { flags, width, modifier }));\r\n let padChar = padSpaceChars.has(conversion) ? ' ' : '0';\r\n let padWidth = width || padWidths[conversion] || 0;\r\n if (flags['^'])\r\n ret = ret.toUpperCase();\r\n else if (flags['#'])\r\n ret = changeCase(ret);\r\n if (flags['_'])\r\n padChar = ' ';\r\n else if (flags['0'])\r\n padChar = '0';\r\n if (flags['-'])\r\n padWidth = 0;\r\n return padStart(ret, padWidth, padChar);\r\n}\n\nfunction getDateTimeFormat() {\r\n return (typeof Intl !== 'undefined' ? Intl.DateTimeFormat : undefined);\r\n}\n\n// one minute in milliseconds\r\nconst OneMinute = 60000;\r\n/**\r\n * Need support both ISO8601 and RFC2822 as in major browsers & NodeJS\r\n * RFC2822: https://datatracker.ietf.org/doc/html/rfc2822#section-3.3\r\n */\r\nconst TIMEZONE_PATTERN = /([zZ]|([+-])(\\d{2}):?(\\d{2}))$/;\r\nconst monthNames = [\r\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\r\n 'September', 'October', 'November', 'December'\r\n];\r\nconst monthNamesShort = monthNames.map(name => name.slice(0, 3));\r\nconst dayNames = [\r\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\r\n];\r\nconst dayNamesShort = dayNames.map(name => name.slice(0, 3));\r\n/**\r\n * A date implementation with timezone info, just like Ruby date\r\n *\r\n * Implementation:\r\n * - create a Date offset by it's timezone difference, avoiding overriding a bunch of methods\r\n * - rewrite getTimezoneOffset() to trick strftime\r\n */\r\nclass LiquidDate {\r\n constructor(init, locale, timezone) {\r\n this.locale = locale;\r\n this.DateTimeFormat = getDateTimeFormat();\r\n this.date = new Date(init);\r\n this.timezoneFixed = timezone !== undefined;\r\n if (timezone === undefined) {\r\n timezone = this.date.getTimezoneOffset();\r\n }\r\n this.timezoneOffset = isString(timezone) ? LiquidDate.getTimezoneOffset(timezone, this.date) : timezone;\r\n this.timezoneName = isString(timezone) ? timezone : '';\r\n const diff = (this.date.getTimezoneOffset() - this.timezoneOffset) * OneMinute;\r\n const time = this.date.getTime() + diff;\r\n this.displayDate = new Date(time);\r\n }\r\n getTime() {\r\n return this.displayDate.getTime();\r\n }\r\n getMilliseconds() {\r\n return this.displayDate.getMilliseconds();\r\n }\r\n getSeconds() {\r\n return this.displayDate.getSeconds();\r\n }\r\n getMinutes() {\r\n return this.displayDate.getMinutes();\r\n }\r\n getHours() {\r\n return this.displayDate.getHours();\r\n }\r\n getDay() {\r\n return this.displayDate.getDay();\r\n }\r\n getDate() {\r\n return this.displayDate.getDate();\r\n }\r\n getMonth() {\r\n return this.displayDate.getMonth();\r\n }\r\n getFullYear() {\r\n return this.displayDate.getFullYear();\r\n }\r\n toLocaleString(locale, init) {\r\n if (init === null || init === void 0 ? void 0 : init.timeZone) {\r\n return this.date.toLocaleString(locale, init);\r\n }\r\n return this.displayDate.toLocaleString(locale, init);\r\n }\r\n toLocaleTimeString(locale) {\r\n return this.displayDate.toLocaleTimeString(locale);\r\n }\r\n toLocaleDateString(locale) {\r\n return this.displayDate.toLocaleDateString(locale);\r\n }\r\n getTimezoneOffset() {\r\n return this.timezoneOffset;\r\n }\r\n getTimeZoneName() {\r\n if (this.timezoneFixed)\r\n return this.timezoneName;\r\n if (!this.DateTimeFormat)\r\n return;\r\n return this.DateTimeFormat().resolvedOptions().timeZone;\r\n }\r\n getLongMonthName() {\r\n var _a;\r\n return (_a = this.format({ month: 'long' })) !== null && _a !== void 0 ? _a : monthNames[this.getMonth()];\r\n }\r\n getShortMonthName() {\r\n var _a;\r\n return (_a = this.format({ month: 'short' })) !== null && _a !== void 0 ? _a : monthNamesShort[this.getMonth()];\r\n }\r\n getLongWeekdayName() {\r\n var _a;\r\n return (_a = this.format({ weekday: 'long' })) !== null && _a !== void 0 ? _a : dayNames[this.displayDate.getDay()];\r\n }\r\n getShortWeekdayName() {\r\n var _a;\r\n return (_a = this.format({ weekday: 'short' })) !== null && _a !== void 0 ? _a : dayNamesShort[this.displayDate.getDay()];\r\n }\r\n valid() {\r\n return !isNaN(this.getTime());\r\n }\r\n format(options) {\r\n return this.DateTimeFormat && this.DateTimeFormat(this.locale, options).format(this.displayDate);\r\n }\r\n /**\r\n * Create a Date object fixed to it's declared Timezone. Both\r\n * - 2021-08-06T02:29:00.000Z and\r\n * - 2021-08-06T02:29:00.000+08:00\r\n * will always be displayed as\r\n * - 2021-08-06 02:29:00\r\n * regardless timezoneOffset in JavaScript realm\r\n *\r\n * The implementation hack:\r\n * Instead of calling `.getMonth()`/`.getUTCMonth()` respect to `preserveTimezones`,\r\n * we create a different Date to trick strftime, it's both simpler and more performant.\r\n * Given that a template is expected to be parsed fewer times than rendered.\r\n */\r\n static createDateFixedToTimezone(dateString, locale) {\r\n const m = dateString.match(TIMEZONE_PATTERN);\r\n // representing a UTC timestamp\r\n if (m && m[1] === 'Z') {\r\n return new LiquidDate(+new Date(dateString), locale, 0);\r\n }\r\n // has a timezone specified\r\n if (m && m[2] && m[3] && m[4]) {\r\n const [, , sign, hours, minutes] = m;\r\n const offset = (sign === '+' ? -1 : 1) * (parseInt(hours, 10) * 60 + parseInt(minutes, 10));\r\n return new LiquidDate(+new Date(dateString), locale, offset);\r\n }\r\n return new LiquidDate(dateString, locale);\r\n }\r\n static getTimezoneOffset(timezoneName, date) {\r\n const localDateString = date.toLocaleString('en-US', { timeZone: timezoneName });\r\n const utcDateString = date.toLocaleString('en-US', { timeZone: 'UTC' });\r\n const localDate = new Date(localDateString);\r\n const utcDate = new Date(utcDateString);\r\n return (+utcDate - +localDate) / (60 * 1000);\r\n }\r\n}\n\nclass Limiter {\r\n constructor(resource, limit) {\r\n this.base = 0;\r\n this.message = `${resource} limit exceeded`;\r\n this.limit = limit;\r\n }\r\n use(count) {\r\n if (+count > 0) {\r\n assert(this.base + +count <= this.limit, this.message);\r\n this.base += +count;\r\n }\r\n }\r\n check(count) {\r\n if (+count > 0) {\r\n assert(+count <= this.limit, this.message);\r\n }\r\n }\r\n}\n\nclass DelimitedToken extends Token {\r\n constructor(kind, [contentBegin, contentEnd], input, begin, end, trimLeft, trimRight, file) {\r\n super(kind, input, begin, end, file);\r\n this.trimLeft = false;\r\n this.trimRight = false;\r\n const tl = input[contentBegin] === '-';\r\n const tr = input[contentEnd - 1] === '-';\r\n let l = tl ? contentBegin + 1 : contentBegin;\r\n let r = tr ? contentEnd - 1 : contentEnd;\r\n while (l < r && (TYPES[input.charCodeAt(l)] & BLANK))\r\n l++;\r\n while (r > l && (TYPES[input.charCodeAt(r - 1)] & BLANK))\r\n r--;\r\n this.contentRange = [l, r];\r\n this.trimLeft = tl || trimLeft;\r\n this.trimRight = tr || trimRight;\r\n }\r\n get content() {\r\n return this.input.slice(this.contentRange[0], this.contentRange[1]);\r\n }\r\n}\n\nclass TagToken extends DelimitedToken {\r\n constructor(input, begin, end, options, file) {\r\n const { trimTagLeft, trimTagRight, tagDelimiterLeft, tagDelimiterRight } = options;\r\n const [valueBegin, valueEnd] = [begin + tagDelimiterLeft.length, end - tagDelimiterRight.length];\r\n super(TokenKind.Tag, [valueBegin, valueEnd], input, begin, end, trimTagLeft, trimTagRight, file);\r\n this.tokenizer = new Tokenizer(input, options.operators, file, this.contentRange);\r\n this.name = this.tokenizer.readTagName();\r\n this.tokenizer.assert(this.name, `illegal tag syntax, tag name expected`);\r\n this.tokenizer.skipBlank();\r\n this.args = this.tokenizer.input.slice(this.tokenizer.p, this.contentRange[1]);\r\n }\r\n}\n\nclass OutputToken extends DelimitedToken {\r\n constructor(input, begin, end, options, file) {\r\n const { trimOutputLeft, trimOutputRight, outputDelimiterLeft, outputDelimiterRight } = options;\r\n const valueRange = [begin + outputDelimiterLeft.length, end - outputDelimiterRight.length];\r\n super(TokenKind.Output, valueRange, input, begin, end, trimOutputLeft, trimOutputRight, file);\r\n }\r\n}\n\nclass HTMLToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.HTML, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.trimLeft = 0;\r\n this.trimRight = 0;\r\n }\r\n getContent() {\r\n return this.input.slice(this.begin + this.trimLeft, this.end - this.trimRight);\r\n }\r\n}\n\nclass NumberToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Number, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.content = Number(this.getText());\r\n }\r\n}\n\nclass IdentifierToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Word, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.content = this.getText();\r\n }\r\n}\n\nclass LiteralToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Literal, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.literal = this.getText();\r\n this.content = literalValues[this.literal];\r\n }\r\n}\n\nconst operatorPrecedences = {\r\n '==': 2,\r\n '!=': 2,\r\n '>': 2,\r\n '<': 2,\r\n '>=': 2,\r\n '<=': 2,\r\n 'contains': 2,\r\n 'not': 1,\r\n 'and': 0,\r\n 'or': 0\r\n};\r\nconst operatorTypes = {\r\n '==': 0 /* OperatorType.Binary */,\r\n '!=': 0 /* OperatorType.Binary */,\r\n '>': 0 /* OperatorType.Binary */,\r\n '<': 0 /* OperatorType.Binary */,\r\n '>=': 0 /* OperatorType.Binary */,\r\n '<=': 0 /* OperatorType.Binary */,\r\n 'contains': 0 /* OperatorType.Binary */,\r\n 'not': 1 /* OperatorType.Unary */,\r\n 'and': 0 /* OperatorType.Binary */,\r\n 'or': 0 /* OperatorType.Binary */\r\n};\r\nclass OperatorToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Operator, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.operator = this.getText();\r\n }\r\n getPrecedence() {\r\n const key = this.getText();\r\n return key in operatorPrecedences ? operatorPrecedences[key] : 1;\r\n }\r\n}\n\nclass PropertyAccessToken extends Token {\r\n constructor(variable, props, input, begin, end, file) {\r\n super(TokenKind.PropertyAccess, input, begin, end, file);\r\n this.variable = variable;\r\n this.props = props;\r\n }\r\n}\n\nclass FilterToken extends Token {\r\n constructor(name, args, input, begin, end, file) {\r\n super(TokenKind.Filter, input, begin, end, file);\r\n this.name = name;\r\n this.args = args;\r\n }\r\n}\n\nclass HashToken extends Token {\r\n constructor(input, begin, end, name, value, file) {\r\n super(TokenKind.Hash, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.name = name;\r\n this.value = value;\r\n this.file = file;\r\n }\r\n}\n\nconst rHex = /[\\da-fA-F]/;\r\nconst rOct = /[0-7]/;\r\nconst escapeChar = {\r\n b: '\\b',\r\n f: '\\f',\r\n n: '\\n',\r\n r: '\\r',\r\n t: '\\t',\r\n v: '\\x0B'\r\n};\r\nfunction hexVal(c) {\r\n const code = c.charCodeAt(0);\r\n if (code >= 97)\r\n return code - 87;\r\n if (code >= 65)\r\n return code - 55;\r\n return code - 48;\r\n}\r\nfunction parseStringLiteral(str) {\r\n let ret = '';\r\n for (let i = 1; i < str.length - 1; i++) {\r\n if (str[i] !== '\\\\') {\r\n ret += str[i];\r\n continue;\r\n }\r\n if (escapeChar[str[i + 1]] !== undefined) {\r\n ret += escapeChar[str[++i]];\r\n }\r\n else if (str[i + 1] === 'u') {\r\n let val = 0;\r\n let j = i + 2;\r\n while (j <= i + 5 && rHex.test(str[j])) {\r\n val = val * 16 + hexVal(str[j++]);\r\n }\r\n i = j - 1;\r\n ret += String.fromCharCode(val);\r\n }\r\n else if (!rOct.test(str[i + 1])) {\r\n ret += str[++i];\r\n }\r\n else {\r\n let j = i + 1;\r\n let val = 0;\r\n while (j <= i + 3 && rOct.test(str[j])) {\r\n val = val * 8 + hexVal(str[j++]);\r\n }\r\n i = j - 1;\r\n ret += String.fromCharCode(val);\r\n }\r\n }\r\n return ret;\r\n}\n\nclass QuotedToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Quoted, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.content = parseStringLiteral(this.getText());\r\n }\r\n}\n\nclass RangeToken extends Token {\r\n constructor(input, begin, end, lhs, rhs, file) {\r\n super(TokenKind.Range, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.lhs = lhs;\r\n this.rhs = rhs;\r\n this.file = file;\r\n }\r\n}\n\n/**\r\n * LiquidTagToken is different from TagToken by not having delimiters `{%` or `%}`\r\n */\r\nclass LiquidTagToken extends DelimitedToken {\r\n constructor(input, begin, end, options, file) {\r\n super(TokenKind.Tag, [begin, end], input, begin, end, false, false, file);\r\n this.tokenizer = new Tokenizer(input, options.operators, file, this.contentRange);\r\n this.name = this.tokenizer.readTagName();\r\n this.tokenizer.assert(this.name, 'illegal liquid tag syntax');\r\n this.tokenizer.skipBlank();\r\n }\r\n get args() {\r\n return this.tokenizer.input.slice(this.tokenizer.p, this.contentRange[1]);\r\n }\r\n}\n\n/**\r\n * value expression with optional filters\r\n * e.g.\r\n * {% assign foo=\"bar\" | append: \"coo\" %}\r\n */\r\nclass FilteredValueToken extends Token {\r\n constructor(initial, filters, input, begin, end, file) {\r\n super(TokenKind.FilteredValue, input, begin, end, file);\r\n this.initial = initial;\r\n this.filters = filters;\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n }\r\n}\n\nconst polyfill = {\r\n now: () => Date.now()\r\n};\r\nfunction getPerformance() {\r\n return (typeof global === 'object' && global.performance) ||\r\n (typeof window === 'object' && window.performance) ||\r\n polyfill;\r\n}\n\nclass Render {\r\n renderTemplatesToNodeStream(templates, ctx) {\r\n const emitter = new StreamedEmitter();\r\n Promise.resolve().then(() => toPromise(this.renderTemplates(templates, ctx, emitter)))\r\n .then(() => emitter.end(), err => emitter.error(err));\r\n return emitter.stream;\r\n }\r\n *renderTemplates(templates, ctx, emitter) {\r\n if (!emitter) {\r\n emitter = ctx.opts.keepOutputType ? new KeepingTypeEmitter() : new SimpleEmitter();\r\n }\r\n const errors = [];\r\n for (const tpl of templates) {\r\n ctx.renderLimit.check(getPerformance().now());\r\n try {\r\n // if tpl.render supports emitter, it'll return empty `html`\r\n const html = yield tpl.render(ctx, emitter);\r\n // if not, it'll return an `html`, write to the emitter for it\r\n html && emitter.write(html);\r\n if (ctx.breakCalled || ctx.continueCalled)\r\n break;\r\n }\r\n catch (e) {\r\n const err = LiquidError.is(e) ? e : new RenderError(e, tpl);\r\n if (ctx.opts.catchAllErrors)\r\n errors.push(err);\r\n else\r\n throw err;\r\n }\r\n }\r\n if (errors.length) {\r\n throw new LiquidErrors(errors);\r\n }\r\n return emitter.buffer;\r\n }\r\n}\n\nclass Expression {\r\n constructor(tokens) {\r\n this.postfix = [...toPostfix(tokens)];\r\n }\r\n *evaluate(ctx, lenient) {\r\n assert(ctx, 'unable to evaluate: context not defined');\r\n const operands = [];\r\n for (const token of this.postfix) {\r\n if (isOperatorToken(token)) {\r\n const r = operands.pop();\r\n let result;\r\n if (operatorTypes[token.operator] === 1 /* OperatorType.Unary */) {\r\n result = yield ctx.opts.operators[token.operator](r, ctx);\r\n }\r\n else {\r\n const l = operands.pop();\r\n result = yield ctx.opts.operators[token.operator](l, r, ctx);\r\n }\r\n operands.push(result);\r\n }\r\n else {\r\n operands.push(yield evalToken(token, ctx, lenient));\r\n }\r\n }\r\n return operands[0];\r\n }\r\n valid() {\r\n return !!this.postfix.length;\r\n }\r\n}\r\nfunction* evalToken(token, ctx, lenient = false) {\r\n if (!token)\r\n return;\r\n if ('content' in token)\r\n return token.content;\r\n if (isPropertyAccessToken(token))\r\n return yield evalPropertyAccessToken(token, ctx, lenient);\r\n if (isRangeToken(token))\r\n return yield evalRangeToken(token, ctx);\r\n}\r\nfunction* evalPropertyAccessToken(token, ctx, lenient) {\r\n const props = [];\r\n for (const prop of token.props) {\r\n props.push((yield evalToken(prop, ctx, false)));\r\n }\r\n try {\r\n if (token.variable) {\r\n const variable = yield evalToken(token.variable, ctx, lenient);\r\n return yield ctx._getFromScope(variable, props);\r\n }\r\n else {\r\n return yield ctx._get(props);\r\n }\r\n }\r\n catch (e) {\r\n if (lenient && e.name === 'InternalUndefinedVariableError')\r\n return null;\r\n throw (new UndefinedVariableError(e, token));\r\n }\r\n}\r\nfunction evalQuotedToken(token) {\r\n return token.content;\r\n}\r\nfunction* evalRangeToken(token, ctx) {\r\n const low = yield evalToken(token.lhs, ctx);\r\n const high = yield evalToken(token.rhs, ctx);\r\n ctx.memoryLimit.use(high - low + 1);\r\n return range(+low, +high + 1);\r\n}\r\nfunction* toPostfix(tokens) {\r\n const ops = [];\r\n for (const token of tokens) {\r\n if (isOperatorToken(token)) {\r\n while (ops.length && ops[ops.length - 1].getPrecedence() > token.getPrecedence()) {\r\n yield ops.pop();\r\n }\r\n ops.push(token);\r\n }\r\n else\r\n yield token;\r\n }\r\n while (ops.length) {\r\n yield ops.pop();\r\n }\r\n}\n\nfunction isTruthy(val, ctx) {\r\n return !isFalsy(val, ctx);\r\n}\r\nfunction isFalsy(val, ctx) {\r\n val = toValue(val);\r\n if (ctx.opts.jsTruthy) {\r\n return !val;\r\n }\r\n else {\r\n return val === false || undefined === val || val === null;\r\n }\r\n}\n\nconst defaultOperators = {\r\n '==': equals,\r\n '!=': (l, r) => !equals(l, r),\r\n '>': (l, r) => {\r\n if (isComparable(l))\r\n return l.gt(r);\r\n if (isComparable(r))\r\n return r.lt(l);\r\n return toValue(l) > toValue(r);\r\n },\r\n '<': (l, r) => {\r\n if (isComparable(l))\r\n return l.lt(r);\r\n if (isComparable(r))\r\n return r.gt(l);\r\n return toValue(l) < toValue(r);\r\n },\r\n '>=': (l, r) => {\r\n if (isComparable(l))\r\n return l.geq(r);\r\n if (isComparable(r))\r\n return r.leq(l);\r\n return toValue(l) >= toValue(r);\r\n },\r\n '<=': (l, r) => {\r\n if (isComparable(l))\r\n return l.leq(r);\r\n if (isComparable(r))\r\n return r.geq(l);\r\n return toValue(l) <= toValue(r);\r\n },\r\n 'contains': (l, r) => {\r\n l = toValue(l);\r\n if (isArray(l))\r\n return l.some((i) => equals(i, r));\r\n if (isFunction(l === null || l === void 0 ? void 0 : l.indexOf))\r\n return l.indexOf(toValue(r)) > -1;\r\n return false;\r\n },\r\n 'not': (v, ctx) => isFalsy(toValue(v), ctx),\r\n 'and': (l, r, ctx) => isTruthy(toValue(l), ctx) && isTruthy(toValue(r), ctx),\r\n 'or': (l, r, ctx) => isTruthy(toValue(l), ctx) || isTruthy(toValue(r), ctx)\r\n};\r\nfunction equals(lhs, rhs) {\r\n if (isComparable(lhs))\r\n return lhs.equals(rhs);\r\n if (isComparable(rhs))\r\n return rhs.equals(lhs);\r\n lhs = toValue(lhs);\r\n rhs = toValue(rhs);\r\n if (isArray(lhs)) {\r\n return isArray(rhs) && arrayEquals(lhs, rhs);\r\n }\r\n return lhs === rhs;\r\n}\r\nfunction arrayEquals(lhs, rhs) {\r\n if (lhs.length !== rhs.length)\r\n return false;\r\n return !lhs.some((value, i) => !equals(value, rhs[i]));\r\n}\r\nfunction arrayIncludes(arr, item) {\r\n return arr.some(value => equals(value, item));\r\n}\n\nclass Node {\r\n constructor(key, value, next, prev) {\r\n this.key = key;\r\n this.value = value;\r\n this.next = next;\r\n this.prev = prev;\r\n }\r\n}\r\nclass LRU {\r\n constructor(limit, size = 0) {\r\n this.limit = limit;\r\n this.size = size;\r\n this.cache = {};\r\n this.head = new Node('HEAD', null, null, null);\r\n this.tail = new Node('TAIL', null, null, null);\r\n this.head.next = this.tail;\r\n this.tail.prev = this.head;\r\n }\r\n write(key, value) {\r\n if (this.cache[key]) {\r\n this.cache[key].value = value;\r\n }\r\n else {\r\n const node = new Node(key, value, this.head.next, this.head);\r\n this.head.next.prev = node;\r\n this.head.next = node;\r\n this.cache[key] = node;\r\n this.size++;\r\n this.ensureLimit();\r\n }\r\n }\r\n read(key) {\r\n if (!this.cache[key])\r\n return;\r\n const { value } = this.cache[key];\r\n this.remove(key);\r\n this.write(key, value);\r\n return value;\r\n }\r\n remove(key) {\r\n const node = this.cache[key];\r\n node.prev.next = node.next;\r\n node.next.prev = node.prev;\r\n delete this.cache[key];\r\n this.size--;\r\n }\r\n clear() {\r\n this.head.next = this.tail;\r\n this.tail.prev = this.head;\r\n this.size = 0;\r\n this.cache = {};\r\n }\r\n ensureLimit() {\r\n if (this.size > this.limit)\r\n this.remove(this.tail.prev.key);\r\n }\r\n}\n\nfunction domResolve(root, path) {\r\n const base = document.createElement('base');\r\n base.href = root;\r\n const head = document.getElementsByTagName('head')[0];\r\n head.insertBefore(base, head.firstChild);\r\n const a = document.createElement('a');\r\n a.href = path;\r\n const resolved = a.href;\r\n head.removeChild(base);\r\n return resolved;\r\n}\r\nfunction resolve(root, filepath, ext) {\r\n if (root.length && last(root) !== '/')\r\n root += '/';\r\n const url = domResolve(root, filepath);\r\n return url.replace(/^(\\w+:\\/\\/[^/]+)(\\/[^?]+)/, (str, origin, path) => {\r\n const last = path.split('/').pop();\r\n if (/\\.\\w+$/.test(last))\r\n return str;\r\n return origin + path + ext;\r\n });\r\n}\r\nfunction readFile(url) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return new Promise((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.onload = () => {\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n resolve(xhr.responseText);\r\n }\r\n else {\r\n reject(new Error(xhr.statusText));\r\n }\r\n };\r\n xhr.onerror = () => {\r\n reject(new Error('An error occurred whilst receiving the response.'));\r\n };\r\n xhr.open('GET', url);\r\n xhr.send();\r\n });\r\n });\r\n}\r\nfunction readFileSync(url) {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.send();\r\n if (xhr.status < 200 || xhr.status >= 300) {\r\n throw new Error(xhr.statusText);\r\n }\r\n return xhr.responseText;\r\n}\r\nfunction exists(filepath) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return true;\r\n });\r\n}\r\nfunction existsSync(filepath) {\r\n return true;\r\n}\r\nfunction dirname(filepath) {\r\n return domResolve(filepath, '.');\r\n}\r\nconst sep = '/';\n\nvar fs = /*#__PURE__*/Object.freeze({\n __proto__: null,\n resolve: resolve,\n readFile: readFile,\n readFileSync: readFileSync,\n exists: exists,\n existsSync: existsSync,\n dirname: dirname,\n sep: sep\n});\n\nfunction defaultFilter(value, defaultValue, ...args) {\r\n value = toValue(value);\r\n if (isArray(value) || isString(value))\r\n return value.length ? value : defaultValue;\r\n if (value === false && (new Map(args)).get('allow_false'))\r\n return false;\r\n return isFalsy(value, this.context) ? defaultValue : value;\r\n}\r\nfunction json(value, space = 0) {\r\n return JSON.stringify(value, null, space);\r\n}\r\nfunction inspect(value, space = 0) {\r\n const ancestors = [];\r\n return JSON.stringify(value, function (_key, value) {\r\n if (typeof value !== 'object' || value === null)\r\n return value;\r\n // `this` is the object that value is contained in, i.e., its direct parent.\r\n while (ancestors.length > 0 && ancestors[ancestors.length - 1] !== this)\r\n ancestors.pop();\r\n if (ancestors.includes(value))\r\n return '[Circular]';\r\n ancestors.push(value);\r\n return value;\r\n }, space);\r\n}\r\nfunction to_integer(value) {\r\n return Number(value);\r\n}\r\nconst raw = {\r\n raw: true,\r\n handler: identify\r\n};\r\nvar misc = {\r\n default: defaultFilter,\r\n raw,\r\n jsonify: json,\r\n to_integer,\r\n json,\r\n inspect\r\n};\n\nconst escapeMap = {\r\n '&': '&',\r\n '<': '<',\r\n '>': '>',\r\n '\"': '"',\r\n \"'\": '''\r\n};\r\nconst unescapeMap = {\r\n '&': '&',\r\n '<': '<',\r\n '>': '>',\r\n '"': '\"',\r\n ''': \"'\"\r\n};\r\nfunction escape(str) {\r\n str = stringify(str);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/&|<|>|\"|'/g, m => escapeMap[m]);\r\n}\r\nfunction xml_escape(str) {\r\n return escape.call(this, str);\r\n}\r\nfunction unescape(str) {\r\n str = stringify(str);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m]);\r\n}\r\nfunction escape_once(str) {\r\n return escape.call(this, unescape.call(this, str));\r\n}\r\nfunction newline_to_br(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/\\r?\\n/gm, '<br />\\n');\r\n}\r\nfunction strip_html(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/<script[\\s\\S]*?<\\/script>|<style[\\s\\S]*?<\\/style>|<.*?>|<!--[\\s\\S]*?-->/g, '');\r\n}\n\nvar htmlFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n escape: escape,\n xml_escape: xml_escape,\n escape_once: escape_once,\n newline_to_br: newline_to_br,\n strip_html: strip_html\n});\n\nclass MapFS {\r\n constructor(mapping) {\r\n this.mapping = mapping;\r\n this.sep = '/';\r\n }\r\n exists(filepath) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return this.existsSync(filepath);\r\n });\r\n }\r\n existsSync(filepath) {\r\n return !isNil(this.mapping[filepath]);\r\n }\r\n readFile(filepath) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return this.readFileSync(filepath);\r\n });\r\n }\r\n readFileSync(filepath) {\r\n const content = this.mapping[filepath];\r\n if (isNil(content))\r\n throw new Error(`ENOENT: ${filepath}`);\r\n return content;\r\n }\r\n dirname(filepath) {\r\n const segments = filepath.split(this.sep);\r\n segments.pop();\r\n return segments.join(this.sep);\r\n }\r\n resolve(dir, file, ext) {\r\n file += ext;\r\n if (dir === '.')\r\n return file;\r\n const segments = dir.split(/\\/+/);\r\n for (const segment of file.split(this.sep)) {\r\n if (segment === '.' || segment === '')\r\n continue;\r\n else if (segment === '..') {\r\n if (segments.length > 1 || segments[0] !== '')\r\n segments.pop();\r\n }\r\n else\r\n segments.push(segment);\r\n }\r\n return segments.join(this.sep);\r\n }\r\n}\n\nconst defaultOptions = {\r\n root: ['.'],\r\n layouts: ['.'],\r\n partials: ['.'],\r\n relativeReference: true,\r\n jekyllInclude: false,\r\n keyValueSeparator: ':',\r\n cache: undefined,\r\n extname: '',\r\n fs: fs,\r\n dynamicPartials: true,\r\n jsTruthy: false,\r\n dateFormat: '%A, %B %-e, %Y at %-l:%M %P %z',\r\n locale: '',\r\n trimTagRight: false,\r\n trimTagLeft: false,\r\n trimOutputRight: false,\r\n trimOutputLeft: false,\r\n greedy: true,\r\n tagDelimiterLeft: '{%',\r\n tagDelimiterRight: '%}',\r\n outputDelimiterLeft: '{{',\r\n outputDelimiterRight: '}}',\r\n preserveTimezones: false,\r\n strictFilters: false,\r\n strictVariables: false,\r\n ownPropertyOnly: true,\r\n lenientIf: false,\r\n globals: {},\r\n keepOutputType: false,\r\n operators: defaultOperators,\r\n memoryLimit: Infinity,\r\n parseLimit: Infinity,\r\n renderLimit: Infinity\r\n};\r\nfunction normalize(options) {\r\n var _a, _b;\r\n if (options.hasOwnProperty('root')) {\r\n if (!options.hasOwnProperty('partials'))\r\n options.partials = options.root;\r\n if (!options.hasOwnProperty('layouts'))\r\n options.layouts = options.root;\r\n }\r\n if (options.hasOwnProperty('cache')) {\r\n let cache;\r\n if (typeof options.cache === 'number')\r\n cache = options.cache > 0 ? new LRU(options.cache) : undefined;\r\n else if (typeof options.cache === 'object')\r\n cache = options.cache;\r\n else\r\n cache = options.cache ? new LRU(1024) : undefined;\r\n options.cache = cache;\r\n }\r\n options = Object.assign(Object.assign(Object.assign({}, defaultOptions), (options.jekyllInclude ? { dynamicPartials: false } : {})), options);\r\n if ((!options.fs.dirname || !options.fs.sep) && options.relativeReference) {\r\n console.warn('[LiquidJS] `fs.dirname` and `fs.sep` are required for relativeReference, set relativeReference to `false` to suppress this warning');\r\n options.relativeReference = false;\r\n }\r\n options.root = normalizeDirectoryList(options.root);\r\n options.partials = normalizeDirectoryList(options.partials);\r\n options.layouts = normalizeDirectoryList(options.layouts);\r\n options.outputEscape = options.outputEscape && getOutputEscapeFunction(options.outputEscape);\r\n if (!options.locale) {\r\n options.locale = (_b = (_a = getDateTimeFormat()) === null || _a === void 0 ? void 0 : _a().resolvedOptions().locale) !== null && _b !== void 0 ? _b : 'en-US';\r\n }\r\n if (options.templates) {\r\n options.fs = new MapFS(options.templates);\r\n options.relativeReference = true;\r\n options.root = options.partials = options.layouts = '.';\r\n }\r\n return options;\r\n}\r\nfunction getOutputEscapeFunction(nameOrFunction) {\r\n if (nameOrFunction === 'escape')\r\n return escape;\r\n if (nameOrFunction === 'json')\r\n return misc.json;\r\n assert(isFunction(nameOrFunction), '`outputEscape` need to be of type string or function');\r\n return nameOrFunction;\r\n}\r\nfunction normalizeDirectoryList(value) {\r\n let list = [];\r\n if (isArray(value))\r\n list = value;\r\n if (isString(value))\r\n list = [value];\r\n return list;\r\n}\n\nfunction whiteSpaceCtrl(tokens, options) {\r\n let inRaw = false;\r\n for (let i = 0; i < tokens.length; i++) {\r\n const token = tokens[i];\r\n if (!isDelimitedToken(token))\r\n continue;\r\n if (!inRaw && token.trimLeft) {\r\n trimLeft(tokens[i - 1], options.greedy);\r\n }\r\n if (isTagToken(token)) {\r\n if (token.name === 'raw')\r\n inRaw = true;\r\n else if (token.name === 'endraw')\r\n inRaw = false;\r\n }\r\n if (!inRaw && token.trimRight) {\r\n trimRight(tokens[i + 1], options.greedy);\r\n }\r\n }\r\n}\r\nfunction trimLeft(token, greedy) {\r\n if (!token || !isHTMLToken(token))\r\n return;\r\n const mask = greedy ? BLANK : INLINE_BLANK;\r\n while (TYPES[token.input.charCodeAt(token.end - 1 - token.trimRight)] & mask)\r\n token.trimRight++;\r\n}\r\nfunction trimRight(token, greedy) {\r\n if (!token || !isHTMLToken(token))\r\n return;\r\n const mask = greedy ? BLANK : INLINE_BLANK;\r\n while (TYPES[token.input.charCodeAt(token.begin + token.trimLeft)] & mask)\r\n token.trimLeft++;\r\n if (token.input.charAt(token.begin + token.trimLeft) === '\\n')\r\n token.trimLeft++;\r\n}\n\nclass Tokenizer {\r\n constructor(input, operators = defaultOptions.operators, file, range) {\r\n this.input = input;\r\n this.file = file;\r\n this.rawBeginAt = -1;\r\n this.p = range ? range[0] : 0;\r\n this.N = range ? range[1] : input.length;\r\n this.opTrie = createTrie(operators);\r\n this.literalTrie = createTrie(literalValues);\r\n }\r\n readExpression() {\r\n return new Expression(this.readExpressionTokens());\r\n }\r\n *readExpressionTokens() {\r\n while (this.p < this.N) {\r\n const operator = this.readOperator();\r\n if (operator) {\r\n yield operator;\r\n continue;\r\n }\r\n const operand = this.readValue();\r\n if (operand) {\r\n yield operand;\r\n continue;\r\n }\r\n return;\r\n }\r\n }\r\n readOperator() {\r\n this.skipBlank();\r\n const end = this.matchTrie(this.opTrie);\r\n if (end === -1)\r\n return;\r\n return new OperatorToken(this.input, this.p, (this.p = end), this.file);\r\n }\r\n matchTrie(trie) {\r\n let node = trie;\r\n let i = this.p;\r\n let info;\r\n while (node[this.input[i]] && i < this.N) {\r\n node = node[this.input[i++]];\r\n if (node['end'])\r\n info = node;\r\n }\r\n if (!info)\r\n return -1;\r\n if (info['needBoundary'] && isWord(this.peek(i - this.p)))\r\n return -1;\r\n return i;\r\n }\r\n readFilteredValue() {\r\n const begin = this.p;\r\n const initial = this.readExpression();\r\n this.assert(initial.valid(), `invalid value expression: ${this.snapshot()}`);\r\n const filters = this.readFilters();\r\n return new FilteredValueToken(initial, filters, this.input, begin, this.p, this.file);\r\n }\r\n readFilters() {\r\n const filters = [];\r\n while (true) {\r\n const filter = this.readFilter();\r\n if (!filter)\r\n return filters;\r\n filters.push(filter);\r\n }\r\n }\r\n readFilter() {\r\n this.skipBlank();\r\n if (this.end())\r\n return null;\r\n this.assert(this.read() === '|', `expected \"|\" before filter`);\r\n const name = this.readIdentifier();\r\n if (!name.size()) {\r\n this.assert(this.end(), `expected filter name`);\r\n return null;\r\n }\r\n const args = [];\r\n this.skipBlank();\r\n if (this.peek() === ':') {\r\n do {\r\n ++this.p;\r\n const arg = this.readFilterArg();\r\n arg && args.push(arg);\r\n this.skipBlank();\r\n this.assert(this.end() || this.peek() === ',' || this.peek() === '|', () => `unexpected character ${this.snapshot()}`);\r\n } while (this.peek() === ',');\r\n }\r\n else if (this.peek() === '|' || this.end()) ;\r\n else {\r\n throw this.error('expected \":\" after filter name');\r\n }\r\n return new FilterToken(name.getText(), args, this.input, name.begin, this.p, this.file);\r\n }\r\n readFilterArg() {\r\n const key = this.readValue();\r\n if (!key)\r\n return;\r\n this.skipBlank();\r\n if (this.peek() !== ':')\r\n return key;\r\n ++this.p;\r\n const value = this.readValue();\r\n return [key.getText(), value];\r\n }\r\n readTopLevelTokens(options = defaultOptions) {\r\n const tokens = [];\r\n while (this.p < this.N) {\r\n const token = this.readTopLevelToken(options);\r\n tokens.push(token);\r\n }\r\n whiteSpaceCtrl(tokens, options);\r\n return tokens;\r\n }\r\n readTopLevelToken(options) {\r\n const { tagDelimiterLeft, outputDelimiterLeft } = options;\r\n if (this.rawBeginAt > -1)\r\n return this.readEndrawOrRawContent(options);\r\n if (this.match(tagDelimiterLeft))\r\n return this.readTagToken(options);\r\n if (this.match(outputDelimiterLeft))\r\n return this.readOutputToken(options);\r\n return this.readHTMLToken([tagDelimiterLeft, outputDelimiterLeft]);\r\n }\r\n readHTMLToken(stopStrings) {\r\n const begin = this.p;\r\n while (this.p < this.N) {\r\n if (stopStrings.some(str => this.match(str)))\r\n break;\r\n ++this.p;\r\n }\r\n return new HTMLToken(this.input, begin, this.p, this.file);\r\n }\r\n readTagToken(options) {\r\n const { file, input } = this;\r\n const begin = this.p;\r\n if (this.readToDelimiter(options.tagDelimiterRight) === -1) {\r\n throw this.error(`tag ${this.snapshot(begin)} not closed`, begin);\r\n }\r\n const token = new TagToken(input, begin, this.p, options, file);\r\n if (token.name === 'raw')\r\n this.rawBeginAt = begin;\r\n return token;\r\n }\r\n readToDelimiter(delimiter, respectQuoted = false) {\r\n this.skipBlank();\r\n while (this.p < this.N) {\r\n if (respectQuoted && (this.peekType() & QUOTE)) {\r\n this.readQuoted();\r\n continue;\r\n }\r\n ++this.p;\r\n if (this.rmatch(delimiter))\r\n return this.p;\r\n }\r\n return -1;\r\n }\r\n readOutputToken(options = defaultOptions) {\r\n const { file, input } = this;\r\n const { outputDelimiterRight } = options;\r\n const begin = this.p;\r\n if (this.readToDelimiter(outputDelimiterRight, true) === -1) {\r\n throw this.error(`output ${this.snapshot(begin)} not closed`, begin);\r\n }\r\n return new OutputToken(input, begin, this.p, options, file);\r\n }\r\n readEndrawOrRawContent(options) {\r\n const { tagDelimiterLeft, tagDelimiterRight } = options;\r\n const begin = this.p;\r\n let leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length;\r\n while (this.p < this.N) {\r\n if (this.readIdentifier().getText() !== 'endraw') {\r\n leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length;\r\n continue;\r\n }\r\n while (this.p <= this.N) {\r\n if (this.rmatch(tagDelimiterRight)) {\r\n const end = this.p;\r\n if (begin === leftPos) {\r\n this.rawBeginAt = -1;\r\n return new TagToken(this.input, begin, end, options, this.file);\r\n }\r\n else {\r\n this.p = leftPos;\r\n return new HTMLToken(this.input, begin, leftPos, this.file);\r\n }\r\n }\r\n if (this.rmatch(tagDelimiterLeft))\r\n break;\r\n this.p++;\r\n }\r\n }\r\n throw this.error(`raw ${this.snapshot(this.rawBeginAt)} not closed`, begin);\r\n }\r\n readLiquidTagTokens(options = defaultOptions) {\r\n const tokens = [];\r\n while (this.p < this.N) {\r\n const token = this.readLiquidTagToken(options);\r\n token && tokens.push(token);\r\n }\r\n return tokens;\r\n }\r\n readLiquidTagToken(options) {\r\n this.skipBlank();\r\n if (this.end())\r\n return;\r\n const begin = this.p;\r\n this.readToDelimiter('\\n');\r\n const end = this.p;\r\n return new LiquidTagToken(this.input, begin, end, options, this.file);\r\n }\r\n error(msg, pos = this.p) {\r\n return new TokenizationError(msg, new IdentifierToken(this.input, pos, this.N, this.file));\r\n }\r\n assert(pred, msg, pos) {\r\n if (!pred)\r\n throw this.error(typeof msg === 'function' ? msg() : msg, pos);\r\n }\r\n snapshot(begin = this.p) {\r\n return JSON.stringify(ellipsis(this.input.slice(begin, this.N), 32));\r\n }\r\n /**\r\n * @deprecated use #readIdentifier instead\r\n */\r\n readWord() {\r\n return this.readIdentifier();\r\n }\r\n readIdentifier() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n while (!this.end() && isWord(this.peek()))\r\n ++this.p;\r\n return new IdentifierToken(this.input, begin, this.p, this.file);\r\n }\r\n readNonEmptyIdentifier() {\r\n const id = this.readIdentifier();\r\n return id.size() ? id : undefined;\r\n }\r\n readTagName() {\r\n this.skipBlank();\r\n // Handle inline comment tags\r\n if (this.input[this.p] === '#')\r\n return this.input.slice(this.p, ++this.p);\r\n return this.readIdentifier().getText();\r\n }\r\n readHashes(jekyllStyle) {\r\n const hashes = [];\r\n while (true) {\r\n const hash = this.readHash(jekyllStyle);\r\n if (!hash)\r\n return hashes;\r\n hashes.push(hash);\r\n }\r\n }\r\n readHash(jekyllStyle) {\r\n this.skipBlank();\r\n if (this.peek() === ',')\r\n ++this.p;\r\n const begin = this.p;\r\n const name = this.readNonEmptyIdentifier();\r\n if (!name)\r\n return;\r\n let value;\r\n this.skipBlank();\r\n const sep = isString(jekyllStyle) ? jekyllStyle : (jekyllStyle ? '=' : ':');\r\n if (this.peek() === sep) {\r\n ++this.p;\r\n value = this.readValue();\r\n }\r\n return new HashToken(this.input, begin, this.p, name, value, this.file);\r\n }\r\n remaining() {\r\n return this.input.slice(this.p, this.N);\r\n }\r\n advance(step = 1) {\r\n this.p += step;\r\n }\r\n end() {\r\n return this.p >= this.N;\r\n }\r\n read() {\r\n return this.input[this.p++];\r\n }\r\n readTo(end) {\r\n while (this.p < this.N) {\r\n ++this.p;\r\n if (this.rmatch(end))\r\n return this.p;\r\n }\r\n return -1;\r\n }\r\n readValue() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n const variable = this.readLiteral() || this.readQuoted() || this.readRange() || this.readNumber();\r\n const props = this.readProperties(!variable);\r\n if (!props.length)\r\n return variable;\r\n return new PropertyAccessToken(variable, props, this.input, begin, this.p);\r\n }\r\n readScopeValue() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n const props = this.readProperties();\r\n if (!props.length)\r\n return undefined;\r\n return new PropertyAccessToken(undefined, props, this.input, begin, this.p);\r\n }\r\n readProperties(isBegin = true) {\r\n const props = [];\r\n while (true) {\r\n if (this.peek() === '[') {\r\n this.p++;\r\n const prop = this.readValue() || new IdentifierToken(this.input, this.p, this.p, this.file);\r\n this.assert(this.readTo(']') !== -1, '[ not closed');\r\n props.push(prop);\r\n continue;\r\n }\r\n if (isBegin && !props.length) {\r\n const prop = this.readNonEmptyIdentifier();\r\n if (prop) {\r\n props.push(prop);\r\n continue;\r\n }\r\n }\r\n if (this.peek() === '.' && this.peek(1) !== '.') { // skip range syntax\r\n this.p++;\r\n const prop = this.readNonEmptyIdentifier();\r\n if (!prop)\r\n break;\r\n props.push(prop);\r\n continue;\r\n }\r\n break;\r\n }\r\n return props;\r\n }\r\n readNumber() {\r\n this.skipBlank();\r\n let decimalFound = false;\r\n let digitFound = false;\r\n let n = 0;\r\n if (this.peekType() & SIGN)\r\n n++;\r\n while (this.p + n <= this.N) {\r\n if (this.peekType(n) & NUMBER) {\r\n digitFound = true;\r\n n++;\r\n }\r\n else if (this.peek(n) === '.' && this.peek(n + 1) !== '.') {\r\n if (decimalFound || !digitFound)\r\n return;\r\n decimalFound = true;\r\n n++;\r\n }\r\n else\r\n break;\r\n }\r\n if (digitFound && !isWord(this.peek(n))) {\r\n const num = new NumberToken(this.input, this.p, this.p + n, this.file);\r\n this.advance(n);\r\n return num;\r\n }\r\n }\r\n readLiteral() {\r\n this.skipBlank();\r\n const end = this.matchTrie(this.literalTrie);\r\n if (end === -1)\r\n return;\r\n const literal = new LiteralToken(this.input, this.p, end, this.file);\r\n this.p = end;\r\n return literal;\r\n }\r\n readRange() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n if (this.peek() !== '(')\r\n return;\r\n ++this.p;\r\n const lhs = this.readValueOrThrow();\r\n this.skipBlank();\r\n this.assert(this.read() === '.' && this.read() === '.', 'invalid range syntax');\r\n const rhs = this.readValueOrThrow();\r\n this.skipBlank();\r\n this.assert(this.read() === ')', 'invalid range syntax');\r\n return new RangeToken(this.input, begin, this.p, lhs, rhs, this.file);\r\n }\r\n readValueOrThrow() {\r\n const value = this.readValue();\r\n this.assert(value, () => `unexpected token ${this.snapshot()}, value expected`);\r\n return value;\r\n }\r\n readQuoted() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n if (!(this.peekType() & QUOTE))\r\n return;\r\n ++this.p;\r\n let escaped = false;\r\n while (this.p < this.N) {\r\n ++this.p;\r\n if (this.input[this.p - 1] === this.input[begin] && !escaped)\r\n break;\r\n if (escaped)\r\n escaped = false;\r\n else if (this.input[this.p - 1] === '\\\\')\r\n escaped = true;\r\n }\r\n return new QuotedToken(this.input, begin, this.p, this.file);\r\n }\r\n *readFileNameTemplate(options) {\r\n const { outputDelimiterLeft } = options;\r\n const htmlStopStrings = [',', ' ', '\\r', '\\n', '\\t', outputDelimiterLeft];\r\n const htmlStopStringSet = new Set(htmlStopStrings);\r\n // break on ',' and ' ', outputDelimiterLeft only stops HTML token\r\n while (this.p < this.N && !htmlStopStringSet.has(this.peek())) {\r\n yield this.match(outputDelimiterLeft)\r\n ? this.readOutputToken(options)\r\n : this.readHTMLToken(htmlStopStrings);\r\n }\r\n }\r\n match(word) {\r\n for (let i = 0; i < word.length; i++) {\r\n if (word[i] !== this.input[this.p + i])\r\n return false;\r\n }\r\n return true;\r\n }\r\n rmatch(pattern) {\r\n for (let i = 0; i < pattern.length; i++) {\r\n if (pattern[pattern.length - 1 - i] !== this.input[this.p - 1 - i])\r\n return false;\r\n }\r\n return true;\r\n }\r\n peekType(n = 0) {\r\n return this.p + n >= this.N ? 0 : TYPES[this.input.charCodeAt(this.p + n)];\r\n }\r\n peek(n = 0) {\r\n return this.p + n >= this.N ? '' : this.input[this.p + n];\r\n }\r\n skipBlank() {\r\n while (this.peekType() & BLANK)\r\n ++this.p;\r\n }\r\n}\n\nclass ParseStream {\r\n constructor(tokens, parseToken) {\r\n this.handlers = {};\r\n this.stopRequested = false;\r\n this.tokens = tokens;\r\n this.parseToken = parseToken;\r\n }\r\n on(name, cb) {\r\n this.handlers[name] = cb;\r\n return this;\r\n }\r\n trigger(event, arg) {\r\n const h = this.handlers[event];\r\n return h ? (h.call(this, arg), true) : false;\r\n }\r\n start() {\r\n this.trigger('start');\r\n let token;\r\n while (!this.stopRequested && (token = this.tokens.shift())) {\r\n if (this.trigger('token', token))\r\n continue;\r\n if (isTagToken(token) && this.trigger(`tag:${token.name}`, token)) {\r\n continue;\r\n }\r\n const template = this.parseToken(token, this.tokens);\r\n this.trigger('template', template);\r\n }\r\n if (!this.stopRequested)\r\n this.trigger('end');\r\n return this;\r\n }\r\n stop() {\r\n this.stopRequested = true;\r\n return this;\r\n }\r\n}\n\nclass TemplateImpl {\r\n constructor(token) {\r\n this.token = token;\r\n }\r\n}\n\nclass Tag extends TemplateImpl {\r\n constructor(token, remainTokens, liquid) {\r\n super(token);\r\n this.name = token.name;\r\n this.liquid = liquid;\r\n this.tokenizer = token.tokenizer;\r\n }\r\n}\n\n/**\r\n * Key-Value Pairs Representing Tag Arguments\r\n * Example:\r\n * For the markup `, foo:'bar', coo:2 reversed %}`,\r\n * hash['foo'] === 'bar'\r\n * hash['coo'] === 2\r\n * hash['reversed'] === undefined\r\n */\r\nclass Hash {\r\n constructor(input, jekyllStyle) {\r\n this.hash = {};\r\n const tokenizer = input instanceof Tokenizer ? input : new Tokenizer(input, {});\r\n for (const hash of tokenizer.readHashes(jekyllStyle)) {\r\n this.hash[hash.name.content] = hash.value;\r\n }\r\n }\r\n *render(ctx) {\r\n const hash = {};\r\n for (const key of Object.keys(this.hash)) {\r\n hash[key] = this.hash[key] === undefined ? true : yield evalToken(this.hash[key], ctx);\r\n }\r\n return hash;\r\n }\r\n}\n\nfunction createTagClass(options) {\r\n return class extends Tag {\r\n constructor(token, tokens, liquid) {\r\n super(token, tokens, liquid);\r\n if (isFunction(options.parse)) {\r\n options.parse.call(this, token, tokens);\r\n }\r\n }\r\n *render(ctx, emitter) {\r\n const hash = (yield new Hash(this.token.args, ctx.opts.keyValueSeparator).render(ctx));\r\n return yield options.render.call(this, ctx, emitter, hash);\r\n }\r\n };\r\n}\n\nfunction isKeyValuePair(arr) {\r\n return isArray(arr);\r\n}\n\nclass Filter {\r\n constructor(token, options, liquid) {\r\n this.token = token;\r\n this.name = token.name;\r\n this.handler = isFunction(options)\r\n ? options\r\n : (isFunction(options === null || options === void 0 ? void 0 : options.handler) ? options.handler : identify);\r\n this.raw = !isFunction(options) && !!(options === null || options === void 0 ? void 0 : options.raw);\r\n this.args = token.args;\r\n this.liquid = liquid;\r\n }\r\n *render(value, context) {\r\n const argv = [];\r\n for (const arg of this.args) {\r\n if (isKeyValuePair(arg))\r\n argv.push([arg[0], yield evalToken(arg[1], context)]);\r\n else\r\n argv.push(yield evalToken(arg, context));\r\n }\r\n return yield this.handler.apply({ context, token: this.token, liquid: this.liquid }, [value, ...argv]);\r\n }\r\n}\n\nclass Value {\r\n /**\r\n * @param str the value to be valuated, eg.: \"foobar\" | truncate: 3\r\n */\r\n constructor(input, liquid) {\r\n this.filters = [];\r\n const token = typeof input === 'string'\r\n ? new Tokenizer(input, liquid.options.operators).readFilteredValue()\r\n : input;\r\n this.initial = token.initial;\r\n this.filters = token.filters.map(token => new Filter(token, this.getFilter(liquid, token.name), liquid));\r\n }\r\n *value(ctx, lenient) {\r\n lenient = lenient || (ctx.opts.lenientIf && this.filters.length > 0 && this.filters[0].name === 'default');\r\n let val = yield this.initial.evaluate(ctx, lenient);\r\n for (const filter of this.filters) {\r\n val = yield filter.render(val, ctx);\r\n }\r\n return val;\r\n }\r\n getFilter(liquid, name) {\r\n const impl = liquid.filters[name];\r\n assert(impl || !liquid.options.strictFilters, () => `undefined filter: ${name}`);\r\n return impl;\r\n }\r\n}\n\nclass Output extends TemplateImpl {\r\n constructor(token, liquid) {\r\n var _a;\r\n super(token);\r\n const tokenizer = new Tokenizer(token.input, liquid.options.operators, token.file, token.contentRange);\r\n this.value = new Value(tokenizer.readFilteredValue(), liquid);\r\n const filters = this.value.filters;\r\n const outputEscape = liquid.options.outputEscape;\r\n if (!((_a = filters[filters.length - 1]) === null || _a === void 0 ? void 0 : _a.raw) && outputEscape) {\r\n const token = new FilterToken(toString.call(outputEscape), [], '', 0, 0);\r\n filters.push(new Filter(token, outputEscape, liquid));\r\n }\r\n }\r\n *render(ctx, emitter) {\r\n const val = yield this.value.value(ctx, false);\r\n emitter.write(val);\r\n }\r\n *arguments() {\r\n yield this.value;\r\n }\r\n}\n\nclass HTML extends TemplateImpl {\r\n constructor(token) {\r\n super(token);\r\n this.str = token.getContent();\r\n }\r\n *render(ctx, emitter) {\r\n emitter.write(this.str);\r\n }\r\n}\n\n/**\r\n * A variable's segments and location, which can be coerced to a string.\r\n */\r\nclass Variable {\r\n constructor(segments, location) {\r\n this.segments = segments;\r\n this.location = location;\r\n }\r\n toString() {\r\n return segmentsString(this.segments, true);\r\n }\r\n /** Return this variable's segments as an array, possibly with nested arrays for nested paths. */\r\n toArray() {\r\n function* _visit(...segments) {\r\n for (const segment of segments) {\r\n if (segment instanceof Variable) {\r\n yield Array.from(_visit(...segment.segments));\r\n }\r\n else {\r\n yield segment;\r\n }\r\n }\r\n }\r\n return Array.from(_visit(...this.segments));\r\n }\r\n}\r\n/**\r\n * Group variables by the string representation of their root segment.\r\n */\r\nclass VariableMap {\r\n constructor() {\r\n this.map = new Map();\r\n }\r\n get(key) {\r\n const k = segmentsString([key.segments[0]]);\r\n if (!this.map.has(k)) {\r\n this.map.set(k, []);\r\n }\r\n return this.map.get(k);\r\n }\r\n has(key) {\r\n return this.map.has(segmentsString([key.segments[0]]));\r\n }\r\n push(variable) {\r\n this.get(variable).push(variable);\r\n }\r\n asObject() {\r\n return Object.fromEntries(this.map);\r\n }\r\n}\r\nconst defaultStaticAnalysisOptions = {\r\n partials: true\r\n};\r\nfunction* _analyze(templates, partials, sync) {\r\n const variables = new VariableMap();\r\n const globals = new VariableMap();\r\n const locals = new VariableMap();\r\n const rootScope = new DummyScope(new Set());\r\n // Names of partial templates that we've already analyzed.\r\n const seen = new Set();\r\n function updateVariables(variable, scope) {\r\n variables.push(variable);\r\n const aliased = scope.alias(variable);\r\n if (aliased !== undefined) {\r\n const root = aliased.segments[0];\r\n // TODO: What if a a template renders a rendered template? Do we need scope.parent?\r\n if (isString(root) && !rootScope.has(root)) {\r\n globals.push(aliased);\r\n }\r\n }\r\n else {\r\n const root = variable.segments[0];\r\n if (isString(root) && !scope.has(root)) {\r\n globals.push(variable);\r\n }\r\n }\r\n // Recurse for nested Variables\r\n for (const segment of variable.segments) {\r\n if (segment instanceof Variable) {\r\n updateVariables(segment, scope);\r\n }\r\n }\r\n }\r\n function* visit(template, scope) {\r\n if (template.arguments) {\r\n for (const arg of template.arguments()) {\r\n for (const variable of extractVariables(arg)) {\r\n updateVariables(variable, scope);\r\n }\r\n }\r\n }\r\n if (template.localScope) {\r\n for (const ident of template.localScope()) {\r\n scope.add(ident.content);\r\n scope.deleteAlias(ident.content);\r\n const [row, col] = ident.getPosition();\r\n locals.push(new Variable([ident.content], { row, col, file: ident.file }));\r\n }\r\n }\r\n if (template.children) {\r\n if (template.partialScope) {\r\n const partial = template.partialScope();\r\n if (partial === undefined) {\r\n // Layouts, for example, can have children that are not partials.\r\n for (const child of (yield template.children(partials, sync))) {\r\n yield visit(child, scope);\r\n }\r\n return;\r\n }\r\n if (seen.has(partial.name))\r\n return;\r\n const partialScopeNames = new Set();\r\n const partialScope = partial.isolated\r\n ? new DummyScope(partialScopeNames)\r\n : scope.push(partialScopeNames);\r\n for (const name of partial.scope) {\r\n if (isString(name)) {\r\n partialScopeNames.add(name);\r\n }\r\n else {\r\n const [alias, argument] = name;\r\n partialScopeNames.add(alias);\r\n const variables = Array.from(extractVariables(argument));\r\n if (variables.length) {\r\n partialScope.setAlias(alias, variables[0].segments);\r\n }\r\n }\r\n }\r\n for (const child of (yield template.children(partials, sync))) {\r\n yield visit(child, partialScope);\r\n seen.add(partial.name);\r\n }\r\n partialScope.pop();\r\n }\r\n else {\r\n if (template.blockScope) {\r\n scope.push(new Set(template.blockScope()));\r\n }\r\n for (const child of (yield template.children(partials, sync))) {\r\n yield visit(child, scope);\r\n }\r\n if (template.blockScope) {\r\n scope.pop();\r\n }\r\n }\r\n }\r\n }\r\n for (const template of templates) {\r\n yield visit(template, rootScope);\r\n }\r\n return {\r\n variables: variables.asObject(),\r\n globals: globals.asObject(),\r\n locals: locals.asObject()\r\n };\r\n}\r\n/**\r\n * Statically analyze a template and report variable usage.\r\n */\r\nfunction analyze(template, options = {}) {\r\n const opts = Object.assign(Object.assign({}, defaultStaticAnalysisOptions), options);\r\n return toPromise(_analyze(template, opts.partials, false));\r\n}\r\n/**\r\n * Statically analyze a template and report variable usage.\r\n */\r\nfunction analyzeSync(template, options = {}) {\r\n const opts = Object.assign(Object.assign({}, defaultStaticAnalysisOptions), options);\r\n return toValueSync(_analyze(template, opts.partials, true));\r\n}\r\n/**\r\n * A stack to manage scopes while traversing templates during static analysis.\r\n */\r\nclass DummyScope {\r\n constructor(globals) {\r\n this.stack = [{ names: globals, aliases: new Map() }];\r\n }\r\n /** Return true if `name` is in scope. */\r\n has(name) {\r\n for (const scope of this.stack) {\r\n if (scope.names.has(name)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n push(scope) {\r\n this.stack.push({ names: scope, aliases: new Map() });\r\n return this;\r\n }\r\n pop() {\r\n var _a;\r\n return (_a = this.stack.pop()) === null || _a === void 0 ? void 0 : _a.names;\r\n }\r\n // Add a name to the template scope.\r\n add(name) {\r\n this.stack[0].names.add(name);\r\n }\r\n /** Return the variable that `variable` aliases, or `variable` if it doesn't alias anything. */\r\n alias(variable) {\r\n const root = variable.segments[0];\r\n if (!isString(root))\r\n return undefined;\r\n const alias = this.getAlias(root);\r\n if (alias === undefined)\r\n return undefined;\r\n return new Variable([...alias, ...variable.segments.slice(1)], variable.location);\r\n }\r\n // TODO: `from` could be a path with multiple segments, like `include.x`.\r\n setAlias(from, to) {\r\n this.stack[this.stack.length - 1].aliases.set(from, to);\r\n }\r\n deleteAlias(name) {\r\n this.stack[this.stack.length - 1].aliases.delete(name);\r\n }\r\n getAlias(name) {\r\n for (const scope of this.stack) {\r\n if (scope.aliases.has(name)) {\r\n return scope.aliases.get(name);\r\n }\r\n // If a scope has defined `name`, then it masks aliases in parent scopes.\r\n if (scope.names.has(name)) {\r\n return undefined;\r\n }\r\n }\r\n return undefined;\r\n }\r\n}\r\nfunction* extractVariables(value) {\r\n if (isValueToken(value)) {\r\n yield* extractValueTokenVariables(value);\r\n }\r\n else if (value instanceof Value) {\r\n yield* extractFilteredValueVariables(value);\r\n }\r\n}\r\nfunction* extractFilteredValueVariables(value) {\r\n for (const token of value.initial.postfix) {\r\n if (isValueToken(token)) {\r\n yield* extractValueTokenVariables(token);\r\n }\r\n }\r\n for (const filter of value.filters) {\r\n for (const arg of filter.args) {\r\n if (isKeyValuePair(arg) && arg[1]) {\r\n yield* extractValueTokenVariables(arg[1]);\r\n }\r\n else if (isValueToken(arg)) {\r\n yield* extractValueTokenVariables(arg);\r\n }\r\n }\r\n }\r\n}\r\nfunction* extractValueTokenVariables(token) {\r\n if (isRangeToken(token)) {\r\n yield* extractValueTokenVariables(token.lhs);\r\n yield* extractValueTokenVariables(token.rhs);\r\n }\r\n else if (isPropertyAccessToken(token)) {\r\n yield extractPropertyAccessVariable(token);\r\n }\r\n}\r\nfunction extractPropertyAccessVariable(token) {\r\n const segments = [];\r\n // token is not guaranteed to have `file` set. We'll try to get it from a prop if not.\r\n let file = token.file;\r\n // Here we're flattening the first segment of a path if it is a nested path.\r\n const root = token.props[0];\r\n file = file || root.file;\r\n if (isQuotedToken(root) || isNumberToken(root) || isWordToken(root)) {\r\n segments.push(root.content);\r\n }\r\n else if (isPropertyAccessToken(root)) {\r\n // Flatten paths that start with a nested path.\r\n segments.push(...extractPropertyAccessVariable(root).segments);\r\n }\r\n for (const prop of token.props.slice(1)) {\r\n file = file || prop.file;\r\n if (isQuotedToken(prop) || isNumberToken(prop) || isWordToken(prop)) {\r\n segments.push(prop.content);\r\n }\r\n else if (isPropertyAccessToken(prop)) {\r\n segments.push(extractPropertyAccessVariable(prop));\r\n }\r\n }\r\n const [row, col] = token.getPosition();\r\n return new Variable(segments, {\r\n row,\r\n col,\r\n file\r\n });\r\n}\r\n// This is used to detect segments that can be represented with dot notation\r\n// when creating a string representation of VariableSegments.\r\nconst RE_PROPERTY = /^[\\u0080-\\uFFFFa-zA-Z_][\\u0080-\\uFFFFa-zA-Z0-9_-]*$/;\r\n/**\r\n * Return a string representation of segments using dot notation where possible.\r\n * @param segments - The property names and array indices that make up a path to a variable.\r\n * @param bracketedRoot - If false (the default), don't surround the root segment with square brackets.\r\n */\r\nfunction segmentsString(segments, bracketedRoot = false) {\r\n const buf = [];\r\n const root = segments[0];\r\n if (isString(root)) {\r\n if (!bracketedRoot || root.match(RE_PROPERTY)) {\r\n buf.push(`${root}`);\r\n }\r\n else {\r\n buf.push(`['${root}']`);\r\n }\r\n }\r\n for (const segment of segments.slice(1)) {\r\n if (segment instanceof Variable) {\r\n buf.push(`[${segmentsString(segment.segments)}]`);\r\n }\r\n else if (isString(segment)) {\r\n if (segment.match(RE_PROPERTY)) {\r\n buf.push(`.${segment}`);\r\n }\r\n else {\r\n buf.push(`['${segment}']`);\r\n }\r\n }\r\n else {\r\n buf.push(`[${segment}]`);\r\n }\r\n }\r\n return buf.join('');\r\n}\n\nvar LookupType;\r\n(function (LookupType) {\r\n LookupType[\"Partials\"] = \"partials\";\r\n LookupType[\"Layouts\"] = \"layouts\";\r\n LookupType[\"Root\"] = \"root\";\r\n})(LookupType || (LookupType = {}));\r\nclass Loader {\r\n constructor(options) {\r\n var _a, _b, _c, _d;\r\n this.options = options;\r\n if (options.relativeReference) {\r\n const sep = options.fs.sep;\r\n assert(sep, '`fs.sep` is required for relative reference');\r\n const prefixes = ['.' + sep, '..' + sep, './', '../'];\r\n this.shouldLoadRelative = (referencedFile) => prefixes.some(prefix => referencedFile.startsWith(prefix));\r\n }\r\n else {\r\n this.shouldLoadRelative = (_referencedFile) => false;\r\n }\r\n const fs = options.fs;\r\n this.contains = toLiquidAsync(((_a = fs.contains) === null || _a === void 0 ? void 0 : _a.bind(fs)) || (() => __awaiter(this, void 0, void 0, function* () { return true; })), ((_b = fs.containsSync) === null || _b === void 0 ? void 0 : _b.bind(fs)) || (() => true));\r\n this.exists = toLiquidAsync(((_c = fs.exists) === null || _c === void 0 ? void 0 : _c.bind(fs)) || (() => __awaiter(this, void 0, void 0, function* () { return false; })), (_d = fs.existsSync) === null || _d === void 0 ? void 0 : _d.bind(fs));\r\n }\r\n *lookup(file, type, sync, currentFile) {\r\n const dirs = this.options[type];\r\n for (const filepath of this.candidates(file, dirs, currentFile)) {\r\n let allowed = false;\r\n for (const dir of dirs) {\r\n if (yield this.contains(!!sync, dir, filepath)) {\r\n allowed = true;\r\n break;\r\n }\r\n }\r\n if (!allowed)\r\n continue;\r\n if (yield this.exists(!!sync, filepath))\r\n return filepath;\r\n }\r\n throw this.lookupError(file, dirs);\r\n }\r\n *candidates(file, dirs, currentFile) {\r\n const { fs, extname } = this.options;\r\n if (this.shouldLoadRelative(file) && currentFile) {\r\n const referenced = fs.resolve(this.dirname(currentFile), file, extname);\r\n yield referenced;\r\n }\r\n for (const dir of dirs) {\r\n const referenced = fs.resolve(dir, file, extname);\r\n yield referenced;\r\n }\r\n if (fs.fallback !== undefined) {\r\n const filepath = fs.fallback(file);\r\n if (filepath !== undefined)\r\n yield filepath;\r\n }\r\n }\r\n dirname(path) {\r\n const fs = this.options.fs;\r\n assert(fs.dirname, '`fs.dirname` is required for relative reference');\r\n return fs.dirname(path);\r\n }\r\n lookupError(file, roots) {\r\n const err = new Error('ENOENT');\r\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`;\r\n err.code = 'ENOENT';\r\n return err;\r\n }\r\n}\n\nclass Parser {\r\n constructor(liquid) {\r\n var _a, _b;\r\n this.liquid = liquid;\r\n this.cache = this.liquid.options.cache;\r\n this.fs = this.liquid.options.fs;\r\n this.parseFile = this.cache ? this._parseFileCached : this._parseFile;\r\n this.loader = new Loader(this.liquid.options);\r\n this.parseLimit = new Limiter('parse length', liquid.options.parseLimit);\r\n this.readFile = toLiquidAsync(((_a = this.fs.readFile) === null || _a === void 0 ? void 0 : _a.bind(this.fs)) || (() => __awaiter(this, void 0, void 0, function* () { throw new Error('readFile not implemented'); })), (_b = this.fs.readFileSync) === null || _b === void 0 ? void 0 : _b.bind(this.fs));\r\n }\r\n parse(html, filepath) {\r\n html = String(html);\r\n this.parseLimit.use(html.length);\r\n const tokenizer = new Tokenizer(html, this.liquid.options.operators, filepath);\r\n const tokens = tokenizer.readTopLevelTokens(this.liquid.options);\r\n return this.parseTokens(tokens);\r\n }\r\n parseTokens(tokens) {\r\n let token;\r\n const templates = [];\r\n const errors = [];\r\n while ((token = tokens.shift())) {\r\n try {\r\n templates.push(this.parseToken(token, tokens));\r\n }\r\n catch (err) {\r\n if (this.liquid.options.catchAllErrors)\r\n errors.push(err);\r\n else\r\n throw err;\r\n }\r\n }\r\n if (errors.length)\r\n throw new LiquidErrors(errors);\r\n return templates;\r\n }\r\n parseToken(token, remainTokens) {\r\n try {\r\n if (isTagToken(token)) {\r\n const TagClass = this.liquid.tags[token.name];\r\n assert(TagClass, `tag \"${token.name}\" not found`);\r\n return new TagClass(token, remainTokens, this.liquid, this);\r\n }\r\n if (isOutputToken(token)) {\r\n return new Output(token, this.liquid);\r\n }\r\n return new HTML(token);\r\n }\r\n catch (e) {\r\n if (LiquidError.is(e))\r\n throw e;\r\n throw new ParseError(e, token);\r\n }\r\n }\r\n parseStream(tokens) {\r\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens));\r\n }\r\n *_parseFileCached(file, sync, type = LookupType.Root, currentFile) {\r\n const cache = this.cache;\r\n const key = this.loader.shouldLoadRelative(file) ? currentFile + ',' + file : type + ':' + file;\r\n const tpls = yield cache.read(key);\r\n if (tpls)\r\n return tpls;\r\n const task = this._parseFile(file, sync, type, currentFile);\r\n // sync mode: exec the task and cache the result\r\n // async mode: cache the task before exec\r\n const taskOrTpl = sync ? yield task : toPromise(task);\r\n cache.write(key, taskOrTpl);\r\n // note: concurrent tasks will be reused, cache for failed task is removed until its end\r\n try {\r\n return yield taskOrTpl;\r\n }\r\n catch (err) {\r\n cache.remove(key);\r\n throw err;\r\n }\r\n }\r\n *_parseFile(file, sync, type = LookupType.Root, currentFile) {\r\n const filepath = yield this.loader.lookup(file, type, sync, currentFile);\r\n return this.parse(yield this.readFile(!!sync, filepath), filepath);\r\n }\r\n}\n\nvar TokenKind;\r\n(function (TokenKind) {\r\n TokenKind[TokenKind[\"Number\"] = 1] = \"Number\";\r\n TokenKind[TokenKind[\"Literal\"] = 2] = \"Literal\";\r\n TokenKind[TokenKind[\"Tag\"] = 4] = \"Tag\";\r\n TokenKind[TokenKind[\"Output\"] = 8] = \"Output\";\r\n TokenKind[TokenKind[\"HTML\"] = 16] = \"HTML\";\r\n TokenKind[TokenKind[\"Filter\"] = 32] = \"Filter\";\r\n TokenKind[TokenKind[\"Hash\"] = 64] = \"Hash\";\r\n TokenKind[TokenKind[\"PropertyAccess\"] = 128] = \"PropertyAccess\";\r\n TokenKind[TokenKind[\"Word\"] = 256] = \"Word\";\r\n TokenKind[TokenKind[\"Range\"] = 512] = \"Range\";\r\n TokenKind[TokenKind[\"Quoted\"] = 1024] = \"Quoted\";\r\n TokenKind[TokenKind[\"Operator\"] = 2048] = \"Operator\";\r\n TokenKind[TokenKind[\"FilteredValue\"] = 4096] = \"FilteredValue\";\r\n TokenKind[TokenKind[\"Delimited\"] = 12] = \"Delimited\";\r\n})(TokenKind || (TokenKind = {}));\n\nfunction isDelimitedToken(val) {\r\n return !!(getKind(val) & TokenKind.Delimited);\r\n}\r\nfunction isOperatorToken(val) {\r\n return getKind(val) === TokenKind.Operator;\r\n}\r\nfunction isHTMLToken(val) {\r\n return getKind(val) === TokenKind.HTML;\r\n}\r\nfunction isOutputToken(val) {\r\n return getKind(val) === TokenKind.Output;\r\n}\r\nfunction isTagToken(val) {\r\n return getKind(val) === TokenKind.Tag;\r\n}\r\nfunction isQuotedToken(val) {\r\n return getKind(val) === TokenKind.Quoted;\r\n}\r\nfunction isLiteralToken(val) {\r\n return getKind(val) === TokenKind.Literal;\r\n}\r\nfunction isNumberToken(val) {\r\n return getKind(val) === TokenKind.Number;\r\n}\r\nfunction isPropertyAccessToken(val) {\r\n return getKind(val) === TokenKind.PropertyAccess;\r\n}\r\nfunction isWordToken(val) {\r\n return getKind(val) === TokenKind.Word;\r\n}\r\nfunction isRangeToken(val) {\r\n return getKind(val) === TokenKind.Range;\r\n}\r\nfunction isValueToken(val) {\r\n // valueTokenBitMask = TokenKind.Number | TokenKind.Literal | TokenKind.Quoted | TokenKind.PropertyAccess | TokenKind.Range\r\n return (getKind(val) & 1667) > 0;\r\n}\r\nfunction getKind(val) {\r\n return val ? val.kind : -1;\r\n}\n\nvar typeGuards = /*#__PURE__*/Object.freeze({\n __proto__: null,\n isDelimitedToken: isDelimitedToken,\n isOperatorToken: isOperatorToken,\n isHTMLToken: isHTMLToken,\n isOutputToken: isOutputToken,\n isTagToken: isTagToken,\n isQuotedToken: isQuotedToken,\n isLiteralToken: isLiteralToken,\n isNumberToken: isNumberToken,\n isPropertyAccessToken: isPropertyAccessToken,\n isWordToken: isWordToken,\n isRangeToken: isRangeToken,\n isValueToken: isValueToken\n});\n\nclass Context {\r\n constructor(env = {}, opts = defaultOptions, renderOptions = {}, { memoryLimit, renderLimit } = {}) {\r\n var _a, _b, _c, _d, _e;\r\n /**\r\n * insert a Context-level empty scope,\r\n * for tags like `{% capture %}` `{% assign %}` to operate\r\n */\r\n this.scopes = [{}];\r\n this.registers = {};\r\n this.breakCalled = false;\r\n this.continueCalled = false;\r\n this.sync = !!renderOptions.sync;\r\n this.opts = opts;\r\n this.globals = (_a = renderOptions.globals) !== null && _a !== void 0 ? _a : opts.globals;\r\n this.environments = isObject(env) ? env : Object(env);\r\n this.strictVariables = (_b = renderOptions.strictVariables) !== null && _b !== void 0 ? _b : this.opts.strictVariables;\r\n this.ownPropertyOnly = (_c = renderOptions.ownPropertyOnly) !== null && _c !== void 0 ? _c : opts.ownPropertyOnly;\r\n this.memoryLimit = memoryLimit !== null && memoryLimit !== void 0 ? memoryLimit : new Limiter('memory alloc', (_d = renderOptions.memoryLimit) !== null && _d !== void 0 ? _d : opts.memoryLimit);\r\n this.renderLimit = renderLimit !== null && renderLimit !== void 0 ? renderLimit : new Limiter('template render', getPerformance().now() + ((_e = renderOptions.renderLimit) !== null && _e !== void 0 ? _e : opts.renderLimit));\r\n }\r\n getRegister(key, defaultValue = undefined) {\r\n return (this.registers[key] = this.registers[key] || defaultValue);\r\n }\r\n setRegister(key, value) {\r\n return (this.registers[key] = value);\r\n }\r\n saveRegister(...keys) {\r\n return keys.map(key => [key, this.getRegister(key)]);\r\n }\r\n restoreRegister(keyValues) {\r\n return keyValues.forEach(([key, value]) => this.setRegister(key, value));\r\n }\r\n getAll() {\r\n return [this.globals, this.environments, ...this.scopes]\r\n .reduce((ctx, val) => __assign(ctx, val), {});\r\n }\r\n /**\r\n * @deprecated use `_get()` or `getSync()` instead\r\n */\r\n get(paths) {\r\n return this.getSync(paths);\r\n }\r\n getSync(paths) {\r\n return toValueSync(this._get(paths));\r\n }\r\n *_get(paths) {\r\n const scope = this.findScope(paths[0]); // first prop should always be a string\r\n return yield this._getFromScope(scope, paths);\r\n }\r\n /**\r\n * @deprecated use `_get()` instead\r\n */\r\n getFromScope(scope, paths) {\r\n return toValueSync(this._getFromScope(scope, paths));\r\n }\r\n *_getFromScope(scope, paths, strictVariables = this.strictVariables) {\r\n if (isString(paths))\r\n paths = paths.split('.');\r\n for (let i = 0; i < paths.length; i++) {\r\n scope = yield this.readProperty(scope, paths[i]);\r\n if (strictVariables && isUndefined(scope)) {\r\n throw new InternalUndefinedVariableError(paths.slice(0, i + 1).join('.'));\r\n }\r\n }\r\n return scope;\r\n }\r\n push(ctx) {\r\n return this.scopes.push(ctx);\r\n }\r\n pop() {\r\n return this.scopes.pop();\r\n }\r\n bottom() {\r\n return this.scopes[0];\r\n }\r\n spawn(scope = {}) {\r\n return new Context(scope, this.opts, {\r\n sync: this.sync,\r\n globals: this.globals,\r\n strictVariables: this.strictVariables\r\n }, {\r\n renderLimit: this.renderLimit,\r\n memoryLimit: this.memoryLimit\r\n });\r\n }\r\n findScope(key) {\r\n for (let i = this.scopes.length - 1; i >= 0; i--) {\r\n const candidate = this.scopes[i];\r\n if (key in candidate)\r\n return candidate;\r\n }\r\n if (key in this.environments)\r\n return this.environments;\r\n return this.globals;\r\n }\r\n readProperty(obj, key) {\r\n obj = toLiquid(obj);\r\n key = toValue(key);\r\n if (isNil(obj))\r\n return obj;\r\n if (isArray(obj) && key < 0)\r\n return obj[obj.length + +key];\r\n const value = readJSProperty(obj, key, this.ownPropertyOnly);\r\n if (value === undefined && obj instanceof Drop)\r\n return obj.liquidMethodMissing(key, this);\r\n if (isFunction(value))\r\n return value.call(obj);\r\n if (key === 'size')\r\n return readSize(obj);\r\n else if (key === 'first')\r\n return readFirst(obj);\r\n else if (key === 'last')\r\n return readLast(obj);\r\n return value;\r\n }\r\n}\r\nfunction readJSProperty(obj, key, ownPropertyOnly) {\r\n if (ownPropertyOnly && !hasOwnProperty.call(obj, key) && !(obj instanceof Drop))\r\n return undefined;\r\n return obj[key];\r\n}\r\nfunction readFirst(obj) {\r\n if (isArray(obj))\r\n return obj[0];\r\n return obj['first'];\r\n}\r\nfunction readLast(obj) {\r\n if (isArray(obj))\r\n return obj[obj.length - 1];\r\n return obj['last'];\r\n}\r\nfunction readSize(obj) {\r\n if (hasOwnProperty.call(obj, 'size') || obj['size'] !== undefined)\r\n return obj['size'];\r\n if (isArray(obj) || isString(obj))\r\n return obj.length;\r\n if (typeof obj === 'object')\r\n return Object.keys(obj).length;\r\n}\n\nvar BlockMode;\r\n(function (BlockMode) {\r\n /* store rendered html into blocks */\r\n BlockMode[BlockMode[\"OUTPUT\"] = 0] = \"OUTPUT\";\r\n /* output rendered html directly */\r\n BlockMode[BlockMode[\"STORE\"] = 1] = \"STORE\";\r\n})(BlockMode || (BlockMode = {}));\n\nconst abs = argumentsToNumber(Math.abs);\r\nconst at_least = argumentsToNumber(Math.max);\r\nconst at_most = argumentsToNumber(Math.min);\r\nconst ceil = argumentsToNumber(Math.ceil);\r\nconst divided_by = argumentsToNumber((dividend, divisor, integerArithmetic = false) => integerArithmetic ? Math.floor(dividend / divisor) : dividend / divisor);\r\nconst floor = argumentsToNumber(Math.floor);\r\nconst minus = argumentsToNumber((v, arg) => v - arg);\r\nconst plus = argumentsToNumber((lhs, rhs) => lhs + rhs);\r\nconst modulo = argumentsToNumber((v, arg) => v % arg);\r\nconst times = argumentsToNumber((v, arg) => v * arg);\r\nfunction round(v, arg = 0) {\r\n v = toNumber(v);\r\n arg = toNumber(arg);\r\n const amp = Math.pow(10, arg);\r\n const scaled = v * amp;\r\n // Round half away from zero\r\n return Math.sign(v) * Math.round(Math.abs(scaled)) / amp;\r\n}\n\nvar mathFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n abs: abs,\n at_least: at_least,\n at_most: at_most,\n ceil: ceil,\n divided_by: divided_by,\n floor: floor,\n minus: minus,\n plus: plus,\n modulo: modulo,\n times: times,\n round: round\n});\n\nconst url_decode = (x) => decodeURIComponent(stringify(x)).replace(/\\+/g, ' ');\r\nconst url_encode = (x) => encodeURIComponent(stringify(x)).replace(/%20/g, '+');\r\nconst cgi_escape = (x) => encodeURIComponent(stringify(x))\r\n .replace(/%20/g, '+')\r\n .replace(/[!'()*]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase());\r\nconst uri_escape = (x) => encodeURI(stringify(x))\r\n .replace(/%5B/g, '[')\r\n .replace(/%5D/g, ']');\r\nconst rSlugifyDefault = /[^\\p{M}\\p{L}\\p{Nd}]+/ug;\r\nconst rSlugifyReplacers = {\r\n 'raw': /\\s+/g,\r\n 'default': rSlugifyDefault,\r\n 'pretty': /[^\\p{M}\\p{L}\\p{Nd}._~!$&'()+,;=@]+/ug,\r\n 'ascii': /[^A-Za-z0-9]+/g,\r\n 'latin': rSlugifyDefault,\r\n 'none': null\r\n};\r\nfunction slugify(str, mode = 'default', cased = false) {\r\n str = stringify(str);\r\n const replacer = rSlugifyReplacers[mode];\r\n if (replacer) {\r\n if (mode === 'latin')\r\n str = removeAccents(str);\r\n str = str.replace(replacer, '-').replace(/^-|-$/g, '');\r\n }\r\n return cased ? str : str.toLowerCase();\r\n}\r\nfunction removeAccents(str) {\r\n return str.replace(/[àáâãäå]/g, 'a')\r\n .replace(/[æ]/g, 'ae')\r\n .replace(/[ç]/g, 'c')\r\n .replace(/[èéêë]/g, 'e')\r\n .replace(/[ìíîï]/g, 'i')\r\n .replace(/[ð]/g, 'd')\r\n .replace(/[ñ]/g, 'n')\r\n .replace(/[òóôõöø]/g, 'o')\r\n .replace(/[ùúûü]/g, 'u')\r\n .replace(/[ýÿ]/g, 'y')\r\n .replace(/[ß]/g, 'ss')\r\n .replace(/[œ]/g, 'oe')\r\n .replace(/[þ]/g, 'th')\r\n .replace(/[ẞ]/g, 'SS')\r\n .replace(/[Œ]/g, 'OE')\r\n .replace(/[Þ]/g, 'TH');\r\n}\n\nvar urlFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n url_decode: url_decode,\n url_encode: url_encode,\n cgi_escape: cgi_escape,\n uri_escape: uri_escape,\n slugify: slugify\n});\n\nconst join = argumentsToValue(function (v, arg) {\r\n const array = toArray(v);\r\n const sep = isNil(arg) ? ' ' : stringify(arg);\r\n const complexity = array.length * (1 + sep.length);\r\n this.context.memoryLimit.use(complexity);\r\n return array.join(sep);\r\n});\r\nconst last$1 = argumentsToValue((v) => isArrayLike(v) ? last(v) : '');\r\nconst first = argumentsToValue((v) => isArrayLike(v) ? v[0] : '');\r\nconst reverse = argumentsToValue(function (v) {\r\n const array = toArray(v);\r\n this.context.memoryLimit.use(array.length);\r\n return [...array].reverse();\r\n});\r\nfunction* sortBy(arr, property, comparator) {\r\n const values = [];\r\n const array = toArray(arr);\r\n this.context.memoryLimit.use(array.length);\r\n for (const item of array) {\r\n values.push([\r\n item,\r\n property ? yield this.context._getFromScope(item, stringify(property).split('.'), false) : item\r\n ]);\r\n }\r\n return values.sort((lhs, rhs) => comparator(lhs[1], rhs[1])).map(tuple => tuple[0]);\r\n}\r\nfunction* sort(arr, property) {\r\n return yield* sortBy.call(this, arr, property, orderedCompare);\r\n}\r\nfunction* sort_natural(arr, property) {\r\n return yield* sortBy.call(this, arr, property, caseInsensitiveCompare);\r\n}\r\nconst size = (v) => (v && v.length) || 0;\r\nfunction* map(arr, property) {\r\n const results = [];\r\n const array = toArray(arr);\r\n this.context.memoryLimit.use(array.length);\r\n for (const item of array) {\r\n results.push(yield this.context._getFromScope(item, stringify(property), false));\r\n }\r\n return results;\r\n}\r\nfunction* sum(arr, property) {\r\n let sum = 0;\r\n const array = toArray(arr);\r\n for (const item of array) {\r\n const data = Number(property ? yield this.context._getFromScope(item, stringify(property), false) : item);\r\n sum += Number.isNaN(data) ? 0 : data;\r\n }\r\n return sum;\r\n}\r\nfunction compact(arr) {\r\n const array = toArray(arr);\r\n this.context.memoryLimit.use(array.length);\r\n return array.filter(x => !isNil(toValue(x)));\r\n}\r\nfunction concat(v, arg = []) {\r\n const lhs = toArray(v);\r\n const rhs = toArray(arg);\r\n this.context.memoryLimit.use(lhs.length + rhs.length);\r\n return lhs.concat(rhs);\r\n}\r\nfunction push(v, arg) {\r\n return concat.call(this, v, [arg]);\r\n}\r\nfunction unshift(v, arg) {\r\n const array = toArray(v);\r\n this.context.memoryLimit.use(array.length);\r\n const clone = [...array];\r\n clone.unshift(arg);\r\n return clone;\r\n}\r\nfunction pop(v) {\r\n const clone = [...toArray(v)];\r\n clone.pop();\r\n return clone;\r\n}\r\nfunction shift(v) {\r\n const array = toArray(v);\r\n this.context.memoryLimit.use(array.length);\r\n const clone = [...array];\r\n clone.shift();\r\n return clone;\r\n}\r\nfunction slice(v, begin, length = 1) {\r\n v = toValue(v);\r\n if (isNil(v))\r\n return [];\r\n if (!isArray(v))\r\n v = stringify(v);\r\n begin = begin < 0 ? v.length + begin : begin;\r\n this.context.memoryLimit.use(length);\r\n return v.slice(begin, begin + length);\r\n}\r\nfunction expectedMatcher(expected) {\r\n if (this.context.opts.jekyllWhere) {\r\n return (v) => EmptyDrop.is(expected) ? equals(v, expected) : (isArray(v) ? arrayIncludes(v, expected) : equals(v, expected));\r\n }\r\n else if (expected === undefined) {\r\n return (v) => isTruthy(v, this.context);\r\n }\r\n else {\r\n return (v) => equals(v, expected);\r\n }\r\n}\r\nfunction* filter(include, arr, property, expected) {\r\n const values = [];\r\n arr = toArray(arr);\r\n this.context.memoryLimit.use(arr.length);\r\n const token = new Tokenizer(stringify(property)).readScopeValue();\r\n for (const item of arr) {\r\n values.push(yield evalToken(token, this.context.spawn(item)));\r\n }\r\n const matcher = expectedMatcher.call(this, expected);\r\n return arr.filter((_, i) => matcher(values[i]) === include);\r\n}\r\nfunction* filter_exp(include, arr, itemName, exp) {\r\n const filtered = [];\r\n const keyTemplate = new Value(stringify(exp), this.liquid);\r\n const array = toArray(arr);\r\n this.context.memoryLimit.use(array.length);\r\n for (const item of array) {\r\n this.context.push({ [itemName]: item });\r\n const value = yield keyTemplate.value(this.context);\r\n this.context.pop();\r\n if (value === include)\r\n filtered.push(item);\r\n }\r\n return filtered;\r\n}\r\nfunction* where(arr, property, expected) {\r\n return yield* filter.call(this, true, arr, property, expected);\r\n}\r\nfunction* reject(arr, property, expected) {\r\n return yield* filter.call(this, false, arr, property, expected);\r\n}\r\nfunction* where_exp(arr, itemName, exp) {\r\n return yield* filter_exp.call(this, true, arr, itemName, exp);\r\n}\r\nfunction* reject_exp(arr, itemName, exp) {\r\n return yield* filter_exp.call(this, false, arr, itemName, exp);\r\n}\r\nfunction* group_by(arr, property) {\r\n const map = new Map();\r\n arr = toEnumerable(arr);\r\n const token = new Tokenizer(stringify(property)).readScopeValue();\r\n this.context.memoryLimit.use(arr.length);\r\n for (const item of arr) {\r\n const key = yield evalToken(token, this.context.spawn(item));\r\n if (!map.has(key))\r\n map.set(key, []);\r\n map.get(key).push(item);\r\n }\r\n return [...map.entries()].map(([name, items]) => ({ name, items }));\r\n}\r\nfunction* group_by_exp(arr, itemName, exp) {\r\n const map = new Map();\r\n const keyTemplate = new Value(stringify(exp), this.liquid);\r\n arr = toEnumerable(arr);\r\n this.context.memoryLimit.use(arr.length);\r\n for (const item of arr) {\r\n this.context.push({ [itemName]: item });\r\n const key = yield keyTemplate.value(this.context);\r\n this.context.pop();\r\n if (!map.has(key))\r\n map.set(key, []);\r\n map.get(key).push(item);\r\n }\r\n return [...map.entries()].map(([name, items]) => ({ name, items }));\r\n}\r\nfunction* search(arr, property, expected) {\r\n const token = new Tokenizer(stringify(property)).readScopeValue();\r\n const array = toArray(arr);\r\n const matcher = expectedMatcher.call(this, expected);\r\n for (let index = 0; index < array.length; index++) {\r\n const value = yield evalToken(token, this.context.spawn(array[index]));\r\n if (matcher(value))\r\n return [index, array[index]];\r\n }\r\n}\r\nfunction* search_exp(arr, itemName, exp) {\r\n const predicate = new Value(stringify(exp), this.liquid);\r\n const array = toArray(arr);\r\n for (let index = 0; index < array.length; index++) {\r\n this.context.push({ [itemName]: array[index] });\r\n const value = yield predicate.value(this.context);\r\n this.context.pop();\r\n if (value)\r\n return [index, array[index]];\r\n }\r\n}\r\nfunction* has(arr, property, expected) {\r\n const result = yield* search.call(this, arr, property, expected);\r\n return !!result;\r\n}\r\nfunction* has_exp(arr, itemName, exp) {\r\n const result = yield* search_exp.call(this, arr, itemName, exp);\r\n return !!result;\r\n}\r\nfunction* find_index(arr, property, expected) {\r\n const result = yield* search.call(this, arr, property, expected);\r\n return result ? result[0] : undefined;\r\n}\r\nfunction* find_index_exp(arr, itemName, exp) {\r\n const result = yield* search_exp.call(this, arr, itemName, exp);\r\n return result ? result[0] : undefined;\r\n}\r\nfunction* find(arr, property, expected) {\r\n const result = yield* search.call(this, arr, property, expected);\r\n return result ? result[1] : undefined;\r\n}\r\nfunction* find_exp(arr, itemName, exp) {\r\n const result = yield* search_exp.call(this, arr, itemName, exp);\r\n return result ? result[1] : undefined;\r\n}\r\nfunction uniq(arr) {\r\n arr = toArray(arr);\r\n this.context.memoryLimit.use(arr.length);\r\n return [...new Set(arr)];\r\n}\r\nfunction sample(v, count = 1) {\r\n v = toValue(v);\r\n if (isNil(v))\r\n return [];\r\n if (!isArray(v))\r\n v = stringify(v);\r\n this.context.memoryLimit.use(count);\r\n const shuffled = [...v].sort(() => Math.random() - 0.5);\r\n if (count === 1)\r\n return shuffled[0];\r\n return shuffled.slice(0, count);\r\n}\n\nvar arrayFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n join: join,\n last: last$1,\n first: first,\n reverse: reverse,\n sort: sort,\n sort_natural: sort_natural,\n size: size,\n map: map,\n sum: sum,\n compact: compact,\n concat: concat,\n push: push,\n unshift: unshift,\n pop: pop,\n shift: shift,\n slice: slice,\n where: where,\n reject: reject,\n where_exp: where_exp,\n reject_exp: reject_exp,\n group_by: group_by,\n group_by_exp: group_by_exp,\n has: has,\n has_exp: has_exp,\n find_index: find_index,\n find_index_exp: find_index_exp,\n find: find,\n find_exp: find_exp,\n uniq: uniq,\n sample: sample\n});\n\nfunction date(v, format, timezoneOffset) {\r\n var _a, _b, _c;\r\n const size = ((_a = v === null || v === void 0 ? void 0 : v.length) !== null && _a !== void 0 ? _a : 0) + ((_b = format === null || format === void 0 ? void 0 : format.length) !== null && _b !== void 0 ? _b : 0) + ((_c = timezoneOffset === null || timezoneOffset === void 0 ? void 0 : timezoneOffset.length) !== null && _c !== void 0 ? _c : 0);\r\n this.context.memoryLimit.use(size);\r\n const date = parseDate(v, this.context.opts, timezoneOffset);\r\n if (!date)\r\n return v;\r\n format = toValue(format);\r\n format = isNil(format) ? this.context.opts.dateFormat : stringify(format);\r\n return strftime(date, format);\r\n}\r\nfunction date_to_xmlschema(v) {\r\n return date.call(this, v, '%Y-%m-%dT%H:%M:%S%:z');\r\n}\r\nfunction date_to_rfc822(v) {\r\n return date.call(this, v, '%a, %d %b %Y %H:%M:%S %z');\r\n}\r\nfunction date_to_string(v, type, style) {\r\n return stringify_date.call(this, v, '%b', type, style);\r\n}\r\nfunction date_to_long_string(v, type, style) {\r\n return stringify_date.call(this, v, '%B', type, style);\r\n}\r\nfunction stringify_date(v, month_type, type, style) {\r\n const date = parseDate(v, this.context.opts);\r\n if (!date)\r\n return v;\r\n if (type === 'ordinal') {\r\n const d = date.getDate();\r\n return style === 'US'\r\n ? strftime(date, `${month_type} ${d}%q, %Y`)\r\n : strftime(date, `${d}%q ${month_type} %Y`);\r\n }\r\n return strftime(date, `%d ${month_type} %Y`);\r\n}\r\nfunction parseDate(v, opts, timezoneOffset) {\r\n let date;\r\n const defaultTimezoneOffset = timezoneOffset !== null && timezoneOffset !== void 0 ? timezoneOffset : opts.timezoneOffset;\r\n const locale = opts.locale;\r\n v = toValue(v);\r\n if (isNil(v)) {\r\n return undefined;\r\n }\r\n else if (v === 'now' || v === 'today') {\r\n date = new LiquidDate(Date.now(), locale, defaultTimezoneOffset);\r\n }\r\n else if (isNumber(v)) {\r\n date = new LiquidDate(v * 1000, locale, defaultTimezoneOffset);\r\n }\r\n else if (isString(v)) {\r\n if (/^\\d+$/.test(v)) {\r\n date = new LiquidDate(+v * 1000, locale, defaultTimezoneOffset);\r\n }\r\n else if (opts.preserveTimezones && timezoneOffset === undefined) {\r\n date = LiquidDate.createDateFixedToTimezone(v, locale);\r\n }\r\n else {\r\n date = new LiquidDate(v, locale, defaultTimezoneOffset);\r\n }\r\n }\r\n else {\r\n date = new LiquidDate(v, locale, defaultTimezoneOffset);\r\n }\r\n return date.valid() ? date : undefined;\r\n}\n\nvar dateFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n date: date,\n date_to_xmlschema: date_to_xmlschema,\n date_to_rfc822: date_to_rfc822,\n date_to_string: date_to_string,\n date_to_long_string: date_to_long_string\n});\n\n/**\r\n * String related filters\r\n *\r\n * * prefer stringify() to String() since `undefined`, `null` should eval ''\r\n */\r\nconst rCJKWord = /[\\u4E00-\\u9FFF\\uF900-\\uFAFF\\u3400-\\u4DBF\\u3040-\\u309F\\u30A0-\\u30FF\\uAC00-\\uD7AF]/gu;\r\n// Word boundary followed by word characters (for detecting words)\r\nconst rNonCJKWord = /[^\\u4E00-\\u9FFF\\uF900-\\uFAFF\\u3400-\\u4DBF\\u3040-\\u309F\\u30A0-\\u30FF\\uAC00-\\uD7AF\\s]+/gu;\r\nfunction append(v, arg) {\r\n assert(arguments.length === 2, 'append expect 2 arguments');\r\n const lhs = stringify(v);\r\n const rhs = stringify(arg);\r\n this.context.memoryLimit.use(lhs.length + rhs.length);\r\n return lhs + rhs;\r\n}\r\nfunction prepend(v, arg) {\r\n assert(arguments.length === 2, 'prepend expect 2 arguments');\r\n const lhs = stringify(v);\r\n const rhs = stringify(arg);\r\n this.context.memoryLimit.use(lhs.length + rhs.length);\r\n return rhs + lhs;\r\n}\r\nfunction lstrip(v, chars) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n if (chars) {\r\n chars = stringify(chars);\r\n this.context.memoryLimit.use(chars.length);\r\n for (let i = 0, set = new Set(chars); i < str.length; i++) {\r\n if (!set.has(str[i]))\r\n return str.slice(i);\r\n }\r\n return '';\r\n }\r\n return str.trimStart();\r\n}\r\nfunction downcase(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.toLowerCase();\r\n}\r\nfunction upcase(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return stringify(str).toUpperCase();\r\n}\r\nfunction remove(v, arg) {\r\n const str = stringify(v);\r\n arg = stringify(arg);\r\n this.context.memoryLimit.use(str.length + arg.length);\r\n return str.split(arg).join('');\r\n}\r\nfunction remove_first(v, l) {\r\n const str = stringify(v);\r\n l = stringify(l);\r\n this.context.memoryLimit.use(str.length + l.length);\r\n return str.replace(l, '');\r\n}\r\nfunction remove_last(v, l) {\r\n const str = stringify(v);\r\n const pattern = stringify(l);\r\n this.context.memoryLimit.use(str.length + pattern.length);\r\n const index = str.lastIndexOf(pattern);\r\n if (index === -1)\r\n return str;\r\n return str.substring(0, index) + str.substring(index + pattern.length);\r\n}\r\nfunction rstrip(str, chars) {\r\n str = stringify(str);\r\n this.context.memoryLimit.use(str.length);\r\n if (chars) {\r\n chars = stringify(chars);\r\n this.context.memoryLimit.use(chars.length);\r\n for (let i = str.length - 1, set = new Set(chars); i >= 0; i--) {\r\n if (!set.has(str[i]))\r\n return str.slice(0, i + 1);\r\n }\r\n return '';\r\n }\r\n return str.trimEnd();\r\n}\r\nfunction split(v, arg) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n const arr = str.split(stringify(arg));\r\n // align to ruby split, which is the behavior of shopify/liquid\r\n // see: https://ruby-doc.org/core-2.4.0/String.html#method-i-split\r\n while (arr.length && arr[arr.length - 1] === '')\r\n arr.pop();\r\n return arr;\r\n}\r\nfunction strip(v, chars) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n if (chars) {\r\n const set = new Set(stringify(chars));\r\n this.context.memoryLimit.use(set.size);\r\n let i = 0;\r\n let j = str.length - 1;\r\n while (set.has(str[i]))\r\n i++;\r\n while (j >= i && set.has(str[j]))\r\n j--;\r\n return str.slice(i, j + 1);\r\n }\r\n return str.trim();\r\n}\r\nfunction strip_newlines(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/\\r?\\n/gm, '');\r\n}\r\nfunction capitalize(str) {\r\n str = stringify(str);\r\n this.context.memoryLimit.use(str.length);\r\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\r\n}\r\nfunction replace(v, pattern, replacement) {\r\n const str = stringify(v);\r\n pattern = stringify(pattern);\r\n replacement = stringify(replacement);\r\n const parts = str.split(pattern);\r\n const outputSize = str.length + (parts.length - 1) * (replacement.length - pattern.length);\r\n this.context.memoryLimit.use(outputSize);\r\n return parts.join(replacement);\r\n}\r\nfunction replace_first(v, arg1, arg2) {\r\n const str = stringify(v);\r\n arg1 = stringify(arg1);\r\n arg2 = stringify(arg2);\r\n this.context.memoryLimit.use(str.length + arg1.length + arg2.length);\r\n return str.replace(arg1, () => arg2);\r\n}\r\nfunction replace_last(v, arg1, arg2) {\r\n const str = stringify(v);\r\n const pattern = stringify(arg1);\r\n const replacement = stringify(arg2);\r\n this.context.memoryLimit.use(str.length + pattern.length + replacement.length);\r\n const index = str.lastIndexOf(pattern);\r\n if (index === -1)\r\n return str;\r\n return str.substring(0, index) + replacement + str.substring(index + pattern.length);\r\n}\r\nfunction truncate(v, l = 50, o = '...') {\r\n const str = stringify(v);\r\n o = stringify(o);\r\n this.context.memoryLimit.use(str.length + o.length);\r\n if (str.length <= l)\r\n return v;\r\n return str.substring(0, l - o.length) + o;\r\n}\r\nfunction truncatewords(v, words = 15, o = '...') {\r\n const str = stringify(v);\r\n o = stringify(o);\r\n this.context.memoryLimit.use(str.length + o.length);\r\n const arr = str.split(/\\s+/);\r\n if (words <= 0)\r\n words = 1;\r\n let ret = arr.slice(0, words).join(' ');\r\n if (arr.length >= words)\r\n ret += o;\r\n return ret;\r\n}\r\nfunction normalize_whitespace(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/\\s+/g, ' ');\r\n}\r\nfunction number_of_words(input, mode) {\r\n const str = stringify(input);\r\n this.context.memoryLimit.use(str.length);\r\n input = str.trim();\r\n if (!input)\r\n return 0;\r\n switch (mode) {\r\n case 'cjk':\r\n // Count CJK characters and words\r\n return (input.match(rCJKWord) || []).length + (input.match(rNonCJKWord) || []).length;\r\n case 'auto':\r\n // Count CJK characters, if none, count words\r\n return rCJKWord.test(input)\r\n ? input.match(rCJKWord).length + (input.match(rNonCJKWord) || []).length\r\n : input.split(/\\s+/).length;\r\n default:\r\n // Count words only\r\n return input.split(/\\s+/).length;\r\n }\r\n}\r\nfunction array_to_sentence_string(array, connector = 'and') {\r\n connector = stringify(connector);\r\n this.context.memoryLimit.use(array.length + connector.length);\r\n switch (array.length) {\r\n case 0:\r\n return '';\r\n case 1:\r\n return array[0];\r\n case 2:\r\n return `${array[0]} ${connector} ${array[1]}`;\r\n default:\r\n return `${array.slice(0, -1).join(', ')}, ${connector} ${array[array.length - 1]}`;\r\n }\r\n}\n\nvar stringFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n append: append,\n prepend: prepend,\n lstrip: lstrip,\n downcase: downcase,\n upcase: upcase,\n remove: remove,\n remove_first: remove_first,\n remove_last: remove_last,\n rstrip: rstrip,\n split: split,\n strip: strip,\n strip_newlines: strip_newlines,\n capitalize: capitalize,\n replace: replace,\n replace_first: replace_first,\n replace_last: replace_last,\n truncate: truncate,\n truncatewords: truncatewords,\n normalize_whitespace: normalize_whitespace,\n number_of_words: number_of_words,\n array_to_sentence_string: array_to_sentence_string\n});\n\nfunction base64Encode(str) {\r\n return btoa(String.fromCharCode(...new TextEncoder().encode(str)));\r\n}\r\nfunction base64Decode(str) {\r\n return new TextDecoder().decode(Uint8Array.from(atob(str), c => c.charCodeAt(0)));\r\n}\n\n/**\r\n * Base64 related filters\r\n *\r\n * Implements base64_encode and base64_decode filters for Shopify compatibility\r\n */\r\nfunction base64_encode(value) {\r\n if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) {\r\n this.context.memoryLimit.use(value.byteLength);\r\n return value.toString('base64');\r\n }\r\n const str = stringify(value);\r\n this.context.memoryLimit.use(str.length);\r\n return base64Encode(str);\r\n}\r\nfunction base64_decode(value) {\r\n const str = stringify(value);\r\n this.context.memoryLimit.use(str.length);\r\n return base64Decode(str);\r\n}\n\nvar base64Filters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n base64_encode: base64_encode,\n base64_decode: base64_decode\n});\n\nconst filters = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, htmlFilters), mathFilters), urlFilters), arrayFilters), dateFilters), stringFilters), base64Filters), misc);\n\nclass AssignTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.identifier = this.tokenizer.readIdentifier();\r\n this.key = this.identifier.content;\r\n this.tokenizer.assert(this.key, 'expected variable name');\r\n this.tokenizer.skipBlank();\r\n this.tokenizer.assert(this.tokenizer.peek() === '=', 'expected \"=\"');\r\n this.tokenizer.advance();\r\n this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid);\r\n }\r\n *render(ctx) {\r\n ctx.bottom()[this.key] = yield this.value.value(ctx, this.liquid.options.lenientIf);\r\n }\r\n *arguments() {\r\n yield this.value;\r\n }\r\n *localScope() {\r\n yield this.identifier;\r\n }\r\n}\n\nconst MODIFIERS = ['offset', 'limit', 'reversed'];\r\nclass ForTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n const variable = this.tokenizer.readIdentifier();\r\n const inStr = this.tokenizer.readIdentifier();\r\n const collection = this.tokenizer.readValue();\r\n if (!variable.size() || inStr.content !== 'in' || !collection) {\r\n throw new Error(`illegal tag: ${token.getText()}`);\r\n }\r\n this.variable = variable.content;\r\n this.collection = collection;\r\n this.hash = new Hash(this.tokenizer, liquid.options.keyValueSeparator);\r\n this.templates = [];\r\n this.elseTemplates = [];\r\n let p;\r\n const stream = parser.parseStream(remainTokens)\r\n .on('start', () => (p = this.templates))\r\n .on('tag:else', tag => { assertEmpty(tag.args); p = this.elseTemplates; })\r\n .on('tag:endfor', tag => { assertEmpty(tag.args); stream.stop(); })\r\n .on('template', (tpl) => p.push(tpl))\r\n .on('end', () => { throw new Error(`tag ${token.getText()} not closed`); });\r\n stream.start();\r\n }\r\n *render(ctx, emitter) {\r\n const r = this.liquid.renderer;\r\n let collection = toEnumerable(yield evalToken(this.collection, ctx));\r\n if (!collection.length) {\r\n yield r.renderTemplates(this.elseTemplates, ctx, emitter);\r\n return;\r\n }\r\n const continueKey = 'continue-' + this.variable + '-' + this.collection.getText();\r\n ctx.push({ continue: ctx.getRegister(continueKey, {}) });\r\n const hash = yield this.hash.render(ctx);\r\n ctx.pop();\r\n const modifiers = this.liquid.options.orderedFilterParameters\r\n ? Object.keys(hash).filter(x => MODIFIERS.includes(x))\r\n : MODIFIERS.filter(x => hash[x] !== undefined);\r\n collection = modifiers.reduce((collection, modifier) => {\r\n if (modifier === 'offset')\r\n return offset(collection, hash['offset']);\r\n if (modifier === 'limit')\r\n return limit(collection, hash['limit']);\r\n return reversed(collection);\r\n }, collection);\r\n ctx.setRegister(continueKey, (hash['offset'] || 0) + collection.length);\r\n const scope = { forloop: new ForloopDrop(collection.length, this.collection.getText(), this.variable) };\r\n ctx.push(scope);\r\n for (const item of collection) {\r\n scope[this.variable] = item;\r\n ctx.continueCalled = ctx.breakCalled = false;\r\n yield r.renderTemplates(this.templates, ctx, emitter);\r\n if (ctx.breakCalled)\r\n break;\r\n scope.forloop.next();\r\n }\r\n ctx.continueCalled = ctx.breakCalled = false;\r\n ctx.pop();\r\n }\r\n *children() {\r\n const templates = this.templates.slice();\r\n if (this.elseTemplates) {\r\n templates.push(...this.elseTemplates);\r\n }\r\n return templates;\r\n }\r\n *arguments() {\r\n yield this.collection;\r\n for (const v of Object.values(this.hash.hash)) {\r\n if (isValueToken(v)) {\r\n yield v;\r\n }\r\n }\r\n }\r\n blockScope() {\r\n return [this.variable, 'forloop'];\r\n }\r\n}\r\nfunction reversed(arr) {\r\n return [...arr].reverse();\r\n}\r\nfunction offset(arr, count) {\r\n return arr.slice(count);\r\n}\r\nfunction limit(arr, count) {\r\n return arr.slice(0, count);\r\n}\n\nclass CaptureTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n this.templates = [];\r\n this.identifier = this.readVariable();\r\n this.variable = this.identifier.content;\r\n while (remainTokens.length) {\r\n const token = remainTokens.shift();\r\n if (isTagToken(token) && token.name === 'endcapture')\r\n return;\r\n this.templates.push(parser.parseToken(token, remainTokens));\r\n }\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n }\r\n readVariable() {\r\n let ident = this.tokenizer.readIdentifier();\r\n if (ident.content)\r\n return ident;\r\n ident = this.tokenizer.readQuoted();\r\n if (ident)\r\n return ident;\r\n throw this.tokenizer.error('invalid capture name');\r\n }\r\n *render(ctx) {\r\n const r = this.liquid.renderer;\r\n const html = yield r.renderTemplates(this.templates, ctx);\r\n ctx.bottom()[this.variable] = html;\r\n }\r\n *children() {\r\n return this.templates;\r\n }\r\n *localScope() {\r\n yield this.identifier;\r\n }\r\n}\n\nclass CaseTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n this.branches = [];\r\n this.elseTemplates = [];\r\n this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid);\r\n this.elseTemplates = [];\r\n let p = [];\r\n let elseCount = 0;\r\n const stream = parser.parseStream(remainTokens)\r\n .on('tag:when', (token) => {\r\n if (elseCount > 0) {\r\n return;\r\n }\r\n p = [];\r\n const values = [];\r\n while (!token.tokenizer.end()) {\r\n values.push(token.tokenizer.readValueOrThrow());\r\n token.tokenizer.skipBlank();\r\n if (token.tokenizer.peek() === ',') {\r\n token.tokenizer.readTo(',');\r\n }\r\n else {\r\n token.tokenizer.readTo('or');\r\n }\r\n }\r\n this.branches.push({\r\n values,\r\n templates: p\r\n });\r\n })\r\n .on('tag:else', () => {\r\n elseCount++;\r\n p = this.elseTemplates;\r\n })\r\n .on('tag:endcase', () => stream.stop())\r\n .on('template', (tpl) => {\r\n if (p !== this.elseTemplates || elseCount === 1) {\r\n p.push(tpl);\r\n }\r\n })\r\n .on('end', () => {\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n });\r\n stream.start();\r\n }\r\n *render(ctx, emitter) {\r\n const r = this.liquid.renderer;\r\n const target = toValue(yield this.value.value(ctx, ctx.opts.lenientIf));\r\n let branchHit = false;\r\n for (const branch of this.branches) {\r\n for (const valueToken of branch.values) {\r\n const value = yield evalToken(valueToken, ctx, ctx.opts.lenientIf);\r\n if (equals(target, value)) {\r\n yield r.renderTemplates(branch.templates, ctx, emitter);\r\n branchHit = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (!branchHit) {\r\n yield r.renderTemplates(this.elseTemplates, ctx, emitter);\r\n }\r\n }\r\n *arguments() {\r\n yield this.value;\r\n yield* this.branches.flatMap(b => b.values);\r\n }\r\n *children() {\r\n const templates = this.branches.flatMap(b => b.templates);\r\n if (this.elseTemplates) {\r\n templates.push(...this.elseTemplates);\r\n }\r\n return templates;\r\n }\r\n}\n\nclass CommentTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid) {\r\n super(tagToken, remainTokens, liquid);\r\n while (remainTokens.length) {\r\n const token = remainTokens.shift();\r\n if (isTagToken(token) && token.name === 'endcomment')\r\n return;\r\n }\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n }\r\n render() { }\r\n}\n\nclass RenderTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n const tokenizer = this.tokenizer;\r\n this.file = parseFilePath(tokenizer, this.liquid, parser);\r\n this.currentFile = token.file;\r\n while (!tokenizer.end()) {\r\n tokenizer.skipBlank();\r\n const begin = tokenizer.p;\r\n const keyword = tokenizer.readIdentifier();\r\n if (keyword.content === 'with' || keyword.content === 'for') {\r\n tokenizer.skipBlank();\r\n // can be normal key/value pair, like \"with: true\"\r\n if (tokenizer.peek() !== ':') {\r\n const value = tokenizer.readValue();\r\n // can be normal key, like \"with,\"\r\n if (value) {\r\n const beforeAs = tokenizer.p;\r\n const asStr = tokenizer.readIdentifier();\r\n let alias;\r\n if (asStr.content === 'as')\r\n alias = tokenizer.readIdentifier();\r\n else\r\n tokenizer.p = beforeAs;\r\n this[keyword.content] = { value, alias: alias && alias.content };\r\n tokenizer.skipBlank();\r\n if (tokenizer.peek() === ',')\r\n tokenizer.advance();\r\n continue; // matched!\r\n }\r\n }\r\n }\r\n /**\r\n * restore cursor if with/for not matched\r\n */\r\n tokenizer.p = begin;\r\n break;\r\n }\r\n this.hash = new Hash(tokenizer, liquid.options.keyValueSeparator);\r\n }\r\n *render(ctx, emitter) {\r\n const { liquid, hash } = this;\r\n const filepath = (yield renderFilePath(this['file'], ctx, liquid));\r\n assert(filepath, () => `illegal file path \"${filepath}\"`);\r\n const childCtx = ctx.spawn();\r\n const scope = childCtx.bottom();\r\n __assign(scope, yield hash.render(ctx));\r\n if (this['with']) {\r\n const { value, alias } = this['with'];\r\n scope[alias || filepath] = yield evalToken(value, ctx);\r\n }\r\n if (this['for']) {\r\n const { value, alias } = this['for'];\r\n const collection = toEnumerable(yield evalToken(value, ctx));\r\n scope['forloop'] = new ForloopDrop(collection.length, value.getText(), alias);\r\n for (const item of collection) {\r\n scope[alias] = item;\r\n const templates = (yield liquid._parsePartialFile(filepath, childCtx.sync, this['currentFile']));\r\n yield liquid.renderer.renderTemplates(templates, childCtx, emitter);\r\n scope['forloop'].next();\r\n }\r\n }\r\n else {\r\n const templates = (yield liquid._parsePartialFile(filepath, childCtx.sync, this['currentFile']));\r\n yield liquid.renderer.renderTemplates(templates, childCtx, emitter);\r\n }\r\n }\r\n *children(partials, sync) {\r\n if (partials && isString(this['file'])) {\r\n return (yield this.liquid._parsePartialFile(this['file'], sync, this['currentFile']));\r\n }\r\n return [];\r\n }\r\n partialScope() {\r\n if (isString(this['file'])) {\r\n const names = Object.keys(this.hash.hash);\r\n if (this['with']) {\r\n const { value, alias } = this['with'];\r\n if (isString(alias)) {\r\n names.push([alias, value]);\r\n }\r\n else if (isString(this.file)) {\r\n names.push([this.file, value]);\r\n }\r\n }\r\n if (this['for']) {\r\n const { value, alias } = this['for'];\r\n if (isString(alias)) {\r\n names.push([alias, value]);\r\n }\r\n else if (isString(this.file)) {\r\n names.push([this.file, value]);\r\n }\r\n }\r\n return { name: this['file'], isolated: true, scope: names };\r\n }\r\n }\r\n *arguments() {\r\n for (const v of Object.values(this.hash.hash)) {\r\n if (isValueToken(v)) {\r\n yield v;\r\n }\r\n }\r\n if (this['with']) {\r\n const { value } = this['with'];\r\n if (isValueToken(value)) {\r\n yield value;\r\n }\r\n }\r\n if (this['for']) {\r\n const { value } = this['for'];\r\n if (isValueToken(value)) {\r\n yield value;\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * @return null for \"none\",\r\n * @return Template[] for quoted with tags and/or filters\r\n * @return Token for expression (not quoted)\r\n * @throws TypeError if cannot read next token\r\n */\r\nfunction parseFilePath(tokenizer, liquid, parser) {\r\n if (liquid.options.dynamicPartials) {\r\n const file = tokenizer.readValue();\r\n tokenizer.assert(file, 'illegal file path');\r\n if (file.getText() === 'none')\r\n return;\r\n if (isQuotedToken(file)) {\r\n // for filenames like \"files/{{file}}\", eval as liquid template\r\n const templates = parser.parse(evalQuotedToken(file));\r\n return optimize(templates);\r\n }\r\n return file;\r\n }\r\n const tokens = [...tokenizer.readFileNameTemplate(liquid.options)];\r\n const templates = optimize(parser.parseTokens(tokens));\r\n return templates === 'none' ? undefined : templates;\r\n}\r\nfunction optimize(templates) {\r\n // for filenames like \"files/file.liquid\", extract the string directly\r\n if (templates.length === 1 && isHTMLToken(templates[0].token))\r\n return templates[0].token.getContent();\r\n return templates;\r\n}\r\nfunction* renderFilePath(file, ctx, liquid) {\r\n if (typeof file === 'string')\r\n return file;\r\n if (Array.isArray(file))\r\n return liquid.renderer.renderTemplates(file, ctx);\r\n return yield evalToken(file, ctx);\r\n}\n\nclass IncludeTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n const { tokenizer } = token;\r\n this['file'] = parseFilePath(tokenizer, this.liquid, parser);\r\n this['currentFile'] = token.file;\r\n const begin = tokenizer.p;\r\n const withStr = tokenizer.readIdentifier();\r\n if (withStr.content === 'with') {\r\n tokenizer.skipBlank();\r\n if (tokenizer.peek() !== ':') {\r\n this.withVar = tokenizer.readValue();\r\n }\r\n else\r\n tokenizer.p = begin;\r\n }\r\n else\r\n tokenizer.p = begin;\r\n this.hash = new Hash(tokenizer, liquid.options.jekyllInclude || liquid.options.keyValueSeparator);\r\n }\r\n *render(ctx, emitter) {\r\n const { liquid, hash, withVar } = this;\r\n const { renderer } = liquid;\r\n const filepath = (yield renderFilePath(this['file'], ctx, liquid));\r\n assert(filepath, () => `illegal file path \"${filepath}\"`);\r\n const saved = ctx.saveRegister('blocks', 'blockMode');\r\n ctx.setRegister('blocks', {});\r\n ctx.setRegister('blockMode', BlockMode.OUTPUT);\r\n const scope = (yield hash.render(ctx));\r\n if (withVar)\r\n scope[filepath] = yield evalToken(withVar, ctx);\r\n const templates = (yield liquid._parsePartialFile(filepath, ctx.sync, this['currentFile']));\r\n ctx.push(ctx.opts.jekyllInclude ? { include: scope } : scope);\r\n yield renderer.renderTemplates(templates, ctx, emitter);\r\n ctx.pop();\r\n ctx.restoreRegister(saved);\r\n }\r\n *children(partials, sync) {\r\n if (partials && isString(this['file'])) {\r\n return (yield this.liquid._parsePartialFile(this['file'], sync, this['currentFile']));\r\n }\r\n return [];\r\n }\r\n partialScope() {\r\n if (isString(this['file'])) {\r\n let names;\r\n if (this.liquid.options.jekyllInclude) {\r\n names = ['include'];\r\n }\r\n else {\r\n names = Object.keys(this.hash.hash);\r\n if (this.withVar) {\r\n names.push([this['file'], this.withVar]);\r\n }\r\n }\r\n return { name: this['file'], isolated: false, scope: names };\r\n }\r\n }\r\n *arguments() {\r\n yield* Object.values(this.hash.hash).filter(isValueToken);\r\n if (isValueToken(this['file'])) {\r\n yield this['file'];\r\n }\r\n if (isValueToken(this.withVar)) {\r\n yield this.withVar;\r\n }\r\n }\r\n}\n\nclass DecrementTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.identifier = this.tokenizer.readIdentifier();\r\n this.variable = this.identifier.content;\r\n }\r\n render(context, emitter) {\r\n const scope = context.environments;\r\n if (!isNumber(scope[this.variable])) {\r\n scope[this.variable] = 0;\r\n }\r\n emitter.write(stringify(--scope[this.variable]));\r\n }\r\n *localScope() {\r\n yield this.identifier;\r\n }\r\n}\n\nclass CycleTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.candidates = [];\r\n const group = this.tokenizer.readValue();\r\n this.tokenizer.skipBlank();\r\n if (group) {\r\n if (this.tokenizer.peek() === ':') {\r\n this.group = group;\r\n this.tokenizer.advance();\r\n }\r\n else\r\n this.candidates.push(group);\r\n }\r\n while (!this.tokenizer.end()) {\r\n const value = this.tokenizer.readValue();\r\n if (value)\r\n this.candidates.push(value);\r\n this.tokenizer.readTo(',');\r\n }\r\n this.tokenizer.assert(this.candidates.length, () => `empty candidates: \"${token.getText()}\"`);\r\n }\r\n *render(ctx, emitter) {\r\n const group = (yield evalToken(this.group, ctx));\r\n const fingerprint = `cycle:${group}:` + this.candidates.join(',');\r\n const groups = ctx.getRegister('cycle', {});\r\n let idx = groups[fingerprint];\r\n if (idx === undefined) {\r\n idx = groups[fingerprint] = 0;\r\n }\r\n const candidate = this.candidates[idx];\r\n idx = (idx + 1) % this.candidates.length;\r\n groups[fingerprint] = idx;\r\n return yield evalToken(candidate, ctx);\r\n }\r\n *arguments() {\r\n yield* this.candidates;\r\n if (this.group) {\r\n yield this.group;\r\n }\r\n }\r\n}\n\nclass IfTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n this.branches = [];\r\n let p = [];\r\n parser.parseStream(remainTokens)\r\n .on('start', () => this.branches.push({\r\n value: new Value(tagToken.tokenizer.readFilteredValue(), this.liquid),\r\n templates: (p = [])\r\n }))\r\n .on('tag:elsif', (token) => {\r\n assert(!this.elseTemplates, 'unexpected elsif after else');\r\n this.branches.push({\r\n value: new Value(token.tokenizer.readFilteredValue(), this.liquid),\r\n templates: (p = [])\r\n });\r\n })\r\n .on('tag:else', tag => {\r\n assertEmpty(tag.args);\r\n assert(!this.elseTemplates, 'duplicated else');\r\n p = this.elseTemplates = [];\r\n })\r\n .on('tag:endif', function (tag) { assertEmpty(tag.args); this.stop(); })\r\n .on('template', (tpl) => p.push(tpl))\r\n .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`); })\r\n .start();\r\n }\r\n *render(ctx, emitter) {\r\n const r = this.liquid.renderer;\r\n for (const { value, templates } of this.branches) {\r\n const v = yield value.value(ctx, ctx.opts.lenientIf);\r\n if (isTruthy(v, ctx)) {\r\n yield r.renderTemplates(templates, ctx, emitter);\r\n return;\r\n }\r\n }\r\n yield r.renderTemplates(this.elseTemplates || [], ctx, emitter);\r\n }\r\n *children() {\r\n const templates = this.branches.flatMap(b => b.templates);\r\n if (this.elseTemplates) {\r\n templates.push(...this.elseTemplates);\r\n }\r\n return templates;\r\n }\r\n arguments() {\r\n return this.branches.map(b => b.value);\r\n }\r\n}\n\nclass IncrementTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.identifier = this.tokenizer.readIdentifier();\r\n this.variable = this.identifier.content;\r\n }\r\n render(context, emitter) {\r\n const scope = context.environments;\r\n if (!isNumber(scope[this.variable])) {\r\n scope[this.variable] = 0;\r\n }\r\n const val = scope[this.variable];\r\n scope[this.variable]++;\r\n emitter.write(stringify(val));\r\n }\r\n *localScope() {\r\n yield this.identifier;\r\n }\r\n}\n\nclass LayoutTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n this.file = parseFilePath(this.tokenizer, this.liquid, parser);\r\n this['currentFile'] = token.file;\r\n this.args = new Hash(this.tokenizer, liquid.options.keyValueSeparator);\r\n this.templates = parser.parseTokens(remainTokens);\r\n }\r\n *render(ctx, emitter) {\r\n const { liquid, args, file } = this;\r\n const { renderer } = liquid;\r\n if (file === undefined) {\r\n ctx.setRegister('blockMode', BlockMode.OUTPUT);\r\n yield renderer.renderTemplates(this.templates, ctx, emitter);\r\n return;\r\n }\r\n const filepath = (yield renderFilePath(this.file, ctx, liquid));\r\n assert(filepath, () => `illegal file path \"${filepath}\"`);\r\n const templates = (yield liquid._parseLayoutFile(filepath, ctx.sync, this['currentFile']));\r\n // render remaining contents and store rendered results\r\n ctx.setRegister('blockMode', BlockMode.STORE);\r\n const html = yield renderer.renderTemplates(this.templates, ctx);\r\n const blocks = ctx.getRegister('blocks', {});\r\n // set whole content to anonymous block if anonymous doesn't specified\r\n if (blocks[''] === undefined)\r\n blocks[''] = (parent, emitter) => emitter.write(html);\r\n ctx.setRegister('blockMode', BlockMode.OUTPUT);\r\n // render the layout file use stored blocks\r\n ctx.push((yield args.render(ctx)));\r\n yield renderer.renderTemplates(templates, ctx, emitter);\r\n ctx.pop();\r\n }\r\n *children(partials) {\r\n const templates = this.templates.slice();\r\n if (partials && isString(this.file)) {\r\n templates.push(...(yield this.liquid._parsePartialFile(this.file, true, this['currentFile'])));\r\n }\r\n return templates;\r\n }\r\n *arguments() {\r\n for (const v of Object.values(this.args.hash)) {\r\n if (isValueToken(v)) {\r\n yield v;\r\n }\r\n }\r\n if (isValueToken(this.file)) {\r\n yield this.file;\r\n }\r\n }\r\n partialScope() {\r\n if (isString(this.file)) {\r\n return { name: this.file, isolated: false, scope: Object.keys(this.args.hash) };\r\n }\r\n }\r\n}\n\nclass BlockTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n this.templates = [];\r\n const match = /\\w+/.exec(token.args);\r\n this.block = match ? match[0] : '';\r\n while (remainTokens.length) {\r\n const token = remainTokens.shift();\r\n if (isTagToken(token) && token.name === 'endblock')\r\n return;\r\n const template = parser.parseToken(token, remainTokens);\r\n this.templates.push(template);\r\n }\r\n throw new Error(`tag ${token.getText()} not closed`);\r\n }\r\n *render(ctx, emitter) {\r\n const blockRender = this.getBlockRender(ctx);\r\n if (ctx.getRegister('blockMode') === BlockMode.STORE) {\r\n ctx.getRegister('blocks', {})[this.block] = blockRender;\r\n }\r\n else {\r\n yield blockRender(new BlockDrop(), emitter);\r\n }\r\n }\r\n getBlockRender(ctx) {\r\n const self = this;\r\n const { liquid, templates } = this;\r\n const renderChild = ctx.getRegister('blocks', {})[this.block];\r\n const renderCurrent = function* (superBlock, emitter) {\r\n const stack = ctx.getRegister('blockStack', []);\r\n if (stack.includes(self))\r\n throw new Error('block tag cannot be nested');\r\n stack.push(self);\r\n ctx.push({ block: superBlock });\r\n yield liquid.renderer.renderTemplates(templates, ctx, emitter);\r\n ctx.pop();\r\n stack.pop();\r\n };\r\n return renderChild\r\n ? (superBlock, emitter) => renderChild(new BlockDrop((emitter) => renderCurrent(superBlock, emitter)), emitter)\r\n : renderCurrent;\r\n }\r\n *children() {\r\n return this.templates;\r\n }\r\n blockScope() {\r\n return ['block'];\r\n }\r\n}\n\nclass RawTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid) {\r\n super(tagToken, remainTokens, liquid);\r\n this.tokens = [];\r\n while (remainTokens.length) {\r\n const token = remainTokens.shift();\r\n if (isTagToken(token) && token.name === 'endraw')\r\n return;\r\n this.tokens.push(token);\r\n }\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n }\r\n render() {\r\n return this.tokens.map((token) => token.getText()).join('');\r\n }\r\n}\n\nclass TablerowloopDrop extends ForloopDrop {\r\n constructor(length, cols, collection, variable) {\r\n super(length, collection, variable);\r\n this.length = length;\r\n this.cols = cols;\r\n }\r\n row() {\r\n return Math.floor(this.i / this.cols) + 1;\r\n }\r\n col0() {\r\n return (this.i % this.cols);\r\n }\r\n col() {\r\n return this.col0() + 1;\r\n }\r\n col_first() {\r\n return this.col0() === 0;\r\n }\r\n col_last() {\r\n return this.col() === this.cols;\r\n }\r\n}\n\nclass TablerowTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n const variable = this.tokenizer.readIdentifier();\r\n this.tokenizer.skipBlank();\r\n const predicate = this.tokenizer.readIdentifier();\r\n const collectionToken = this.tokenizer.readValue();\r\n if (predicate.content !== 'in' || !collectionToken) {\r\n throw new Error(`illegal tag: ${tagToken.getText()}`);\r\n }\r\n this.variable = variable.content;\r\n this.collection = collectionToken;\r\n this.args = new Hash(this.tokenizer, liquid.options.keyValueSeparator);\r\n this.templates = [];\r\n let p;\r\n const stream = parser.parseStream(remainTokens)\r\n .on('start', () => (p = this.templates))\r\n .on('tag:endtablerow', () => stream.stop())\r\n .on('template', (tpl) => p.push(tpl))\r\n .on('end', () => {\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n });\r\n stream.start();\r\n }\r\n *render(ctx, emitter) {\r\n let collection = toEnumerable(yield evalToken(this.collection, ctx));\r\n const args = (yield this.args.render(ctx));\r\n const offset = args.offset || 0;\r\n const limit = (args.limit === undefined) ? collection.length : args.limit;\r\n collection = collection.slice(offset, offset + limit);\r\n const cols = args.cols || collection.length;\r\n const r = this.liquid.renderer;\r\n const tablerowloop = new TablerowloopDrop(collection.length, cols, this.collection.getText(), this.variable);\r\n const scope = { tablerowloop };\r\n ctx.push(scope);\r\n for (let idx = 0; idx < collection.length; idx++, tablerowloop.next()) {\r\n scope[this.variable] = collection[idx];\r\n if (tablerowloop.col0() === 0) {\r\n if (tablerowloop.row() !== 1)\r\n emitter.write('</tr>');\r\n emitter.write(`<tr class=\"row${tablerowloop.row()}\">`);\r\n }\r\n emitter.write(`<td class=\"col${tablerowloop.col()}\">`);\r\n yield r.renderTemplates(this.templates, ctx, emitter);\r\n emitter.write('</td>');\r\n }\r\n if (collection.length)\r\n emitter.write('</tr>');\r\n ctx.pop();\r\n }\r\n *children() {\r\n return this.templates;\r\n }\r\n *arguments() {\r\n yield this.collection;\r\n for (const v of Object.values(this.args.hash)) {\r\n if (isValueToken(v)) {\r\n yield v;\r\n }\r\n }\r\n }\r\n blockScope() {\r\n return [this.variable, 'tablerowloop'];\r\n }\r\n}\n\nclass UnlessTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n this.branches = [];\r\n this.elseTemplates = [];\r\n let p = [];\r\n let elseCount = 0;\r\n parser.parseStream(remainTokens)\r\n .on('start', () => this.branches.push({\r\n value: new Value(tagToken.tokenizer.readFilteredValue(), this.liquid),\r\n test: isFalsy,\r\n templates: (p = [])\r\n }))\r\n .on('tag:elsif', (token) => {\r\n if (elseCount > 0) {\r\n p = [];\r\n return;\r\n }\r\n this.branches.push({\r\n value: new Value(token.tokenizer.readFilteredValue(), this.liquid),\r\n test: isTruthy,\r\n templates: (p = [])\r\n });\r\n })\r\n .on('tag:else', () => {\r\n elseCount++;\r\n p = this.elseTemplates;\r\n })\r\n .on('tag:endunless', function () { this.stop(); })\r\n .on('template', (tpl) => {\r\n if (p !== this.elseTemplates || elseCount === 1) {\r\n p.push(tpl);\r\n }\r\n })\r\n .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`); })\r\n .start();\r\n }\r\n *render(ctx, emitter) {\r\n const r = this.liquid.renderer;\r\n for (const { value, test, templates } of this.branches) {\r\n const v = yield value.value(ctx, ctx.opts.lenientIf);\r\n if (test(v, ctx)) {\r\n yield r.renderTemplates(templates, ctx, emitter);\r\n return;\r\n }\r\n }\r\n yield r.renderTemplates(this.elseTemplates, ctx, emitter);\r\n }\r\n *children() {\r\n const children = this.branches.flatMap(b => b.templates);\r\n if (this.elseTemplates) {\r\n children.push(...this.elseTemplates);\r\n }\r\n return children;\r\n }\r\n arguments() {\r\n return this.branches.map(b => b.value);\r\n }\r\n}\n\nclass BreakTag extends Tag {\r\n render(ctx, _emitter) {\r\n ctx.breakCalled = true;\r\n }\r\n}\n\nclass ContinueTag extends Tag {\r\n render(ctx, _emitter) {\r\n ctx.continueCalled = true;\r\n }\r\n}\n\nclass EchoTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.tokenizer.skipBlank();\r\n if (!this.tokenizer.end()) {\r\n this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid);\r\n }\r\n }\r\n *render(ctx, emitter) {\r\n if (!this.value)\r\n return;\r\n const val = yield this.value.value(ctx, false);\r\n emitter.write(val);\r\n }\r\n *arguments() {\r\n if (this.value) {\r\n yield this.value;\r\n }\r\n }\r\n}\n\nclass LiquidTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n const tokens = this.tokenizer.readLiquidTagTokens(this.liquid.options);\r\n this.templates = parser.parseTokens(tokens);\r\n }\r\n *render(ctx, emitter) {\r\n yield this.liquid.renderer.renderTemplates(this.templates, ctx, emitter);\r\n }\r\n *children() {\r\n return this.templates;\r\n }\r\n}\n\nclass InlineCommentTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid) {\r\n super(tagToken, remainTokens, liquid);\r\n if (tagToken.args.search(/\\n\\s*[^#\\s]/g) !== -1) {\r\n throw new Error('every line of an inline comment must start with a \\'#\\' character');\r\n }\r\n }\r\n render() { }\r\n}\n\nconst tags = {\r\n assign: AssignTag,\r\n 'for': ForTag,\r\n capture: CaptureTag,\r\n 'case': CaseTag,\r\n comment: CommentTag,\r\n include: IncludeTag,\r\n render: RenderTag,\r\n decrement: DecrementTag,\r\n increment: IncrementTag,\r\n cycle: CycleTag,\r\n 'if': IfTag,\r\n layout: LayoutTag,\r\n block: BlockTag,\r\n raw: RawTag,\r\n tablerow: TablerowTag,\r\n unless: UnlessTag,\r\n 'break': BreakTag,\r\n 'continue': ContinueTag,\r\n echo: EchoTag,\r\n liquid: LiquidTag,\r\n '#': InlineCommentTag\r\n};\n\nclass Liquid {\r\n constructor(opts = {}) {\r\n this.renderer = new Render();\r\n this.filters = {};\r\n this.tags = {};\r\n this.options = normalize(opts);\r\n // eslint-disable-next-line deprecation/deprecation\r\n this.parser = new Parser(this);\r\n forOwn(tags, (conf, name) => this.registerTag(name, conf));\r\n forOwn(filters, (handler, name) => this.registerFilter(name, handler));\r\n }\r\n parse(html, filepath) {\r\n const parser = new Parser(this);\r\n return parser.parse(html, filepath);\r\n }\r\n _render(tpl, scope, renderOptions) {\r\n const ctx = scope instanceof Context ? scope : new Context(scope, this.options, renderOptions);\r\n return this.renderer.renderTemplates(tpl, ctx);\r\n }\r\n render(tpl, scope, renderOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(this._render(tpl, scope, Object.assign(Object.assign({}, renderOptions), { sync: false })));\r\n });\r\n }\r\n renderSync(tpl, scope, renderOptions) {\r\n return toValueSync(this._render(tpl, scope, Object.assign(Object.assign({}, renderOptions), { sync: true })));\r\n }\r\n renderToNodeStream(tpl, scope, renderOptions = {}) {\r\n const ctx = new Context(scope, this.options, renderOptions);\r\n return this.renderer.renderTemplatesToNodeStream(tpl, ctx);\r\n }\r\n _parseAndRender(html, scope, renderOptions) {\r\n const tpl = this.parse(html);\r\n return this._render(tpl, scope, renderOptions);\r\n }\r\n parseAndRender(html, scope, renderOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(this._parseAndRender(html, scope, Object.assign(Object.assign({}, renderOptions), { sync: false })));\r\n });\r\n }\r\n parseAndRenderSync(html, scope, renderOptions) {\r\n return toValueSync(this._parseAndRender(html, scope, Object.assign(Object.assign({}, renderOptions), { sync: true })));\r\n }\r\n _parsePartialFile(file, sync, currentFile) {\r\n return new Parser(this).parseFile(file, sync, LookupType.Partials, currentFile);\r\n }\r\n _parseLayoutFile(file, sync, currentFile) {\r\n return new Parser(this).parseFile(file, sync, LookupType.Layouts, currentFile);\r\n }\r\n _parseFile(file, sync, lookupType, currentFile) {\r\n return new Parser(this).parseFile(file, sync, lookupType, currentFile);\r\n }\r\n parseFile(file, lookupType) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(new Parser(this).parseFile(file, false, lookupType));\r\n });\r\n }\r\n parseFileSync(file, lookupType) {\r\n return toValueSync(new Parser(this).parseFile(file, true, lookupType));\r\n }\r\n *_renderFile(file, ctx, renderFileOptions) {\r\n const templates = (yield this._parseFile(file, renderFileOptions.sync, renderFileOptions.lookupType));\r\n return yield this._render(templates, ctx, renderFileOptions);\r\n }\r\n renderFile(file, ctx, renderFileOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(this._renderFile(file, ctx, Object.assign(Object.assign({}, renderFileOptions), { sync: false })));\r\n });\r\n }\r\n renderFileSync(file, ctx, renderFileOptions) {\r\n return toValueSync(this._renderFile(file, ctx, Object.assign(Object.assign({}, renderFileOptions), { sync: true })));\r\n }\r\n renderFileToNodeStream(file, scope, renderOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const templates = yield this.parseFile(file);\r\n return this.renderToNodeStream(templates, scope, renderOptions);\r\n });\r\n }\r\n _evalValue(str, scope) {\r\n const value = new Value(str, this);\r\n const ctx = scope instanceof Context ? scope : new Context(scope, this.options);\r\n return value.value(ctx);\r\n }\r\n evalValue(str, scope) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(this._evalValue(str, scope));\r\n });\r\n }\r\n evalValueSync(str, scope) {\r\n return toValueSync(this._evalValue(str, scope));\r\n }\r\n registerFilter(name, filter) {\r\n this.filters[name] = filter;\r\n }\r\n registerTag(name, tag) {\r\n this.tags[name] = isFunction(tag) ? tag : createTagClass(tag);\r\n }\r\n plugin(plugin) {\r\n return plugin.call(this, Liquid);\r\n }\r\n express() {\r\n const self = this; // eslint-disable-line\r\n let firstCall = true;\r\n return function (filePath, ctx, callback) {\r\n if (firstCall) {\r\n firstCall = false;\r\n const dirs = normalizeDirectoryList(this.root);\r\n self.options.root.unshift(...dirs);\r\n self.options.layouts.unshift(...dirs);\r\n self.options.partials.unshift(...dirs);\r\n }\r\n self.renderFile(filePath, ctx).then(html => callback(null, html), callback);\r\n };\r\n }\r\n analyze(template, options = {}) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return analyze(template, options);\r\n });\r\n }\r\n analyzeSync(template, options = {}) {\r\n return analyzeSync(template, options);\r\n }\r\n parseAndAnalyze(html, filename, options = {}) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return analyze(this.parse(html, filename), options);\r\n });\r\n }\r\n parseAndAnalyzeSync(html, filename, options = {}) {\r\n return analyzeSync(this.parse(html, filename), options);\r\n }\r\n /** Return an array of all variables without their properties. */\r\n variables(template, options = {}) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const analysis = yield analyze(isString(template) ? this.parse(template) : template, options);\r\n return Object.keys(analysis.variables);\r\n });\r\n }\r\n /** Return an array of all variables without their properties. */\r\n variablesSync(template, options = {}) {\r\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options);\r\n return Object.keys(analysis.variables);\r\n }\r\n /** Return an array of all variables including their properties/paths. */\r\n fullVariables(template, options = {}) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const analysis = yield analyze(isString(template) ? this.parse(template) : template, options);\r\n return Array.from(new Set(Object.values(analysis.variables).flatMap((a) => a.map((v) => String(v)))));\r\n });\r\n }\r\n /** Return an array of all variables including their properties/paths. */\r\n fullVariablesSync(template, options = {}) {\r\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options);\r\n return Array.from(new Set(Object.values(analysis.variables).flatMap((a) => a.map((v) => String(v)))));\r\n }\r\n /** Return an array of all variables, each as an array of properties/segments. */\r\n variableSegments(template, options = {}) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const analysis = yield analyze(isString(template) ? this.parse(template) : template, options);\r\n return Array.from(strictUniq(Object.values(analysis.variables).flatMap((a) => a.map((v) => v.toArray()))));\r\n });\r\n }\r\n /** Return an array of all variables, each as an array of properties/segments. */\r\n variableSegmentsSync(template, options = {}) {\r\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options);\r\n return Array.from(strictUniq(Object.values(analysis.variables).flatMap((a) => a.map((v) => v.toArray()))));\r\n }\r\n /** Return an array of all expected context variables without their properties. */\r\n globalVariables(template, options = {}) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const analysis = yield analyze(isString(template) ? this.parse(template) : template, options);\r\n return Object.keys(analysis.globals);\r\n });\r\n }\r\n /** Return an array of all expected context variables without their properties. */\r\n globalVariablesSync(template, options = {}) {\r\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options);\r\n return Object.keys(analysis.globals);\r\n }\r\n /** Return an array of all expected context variables including their properties/paths. */\r\n globalFullVariables(template, options = {}) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const analysis = yield analyze(isString(template) ? this.parse(template) : template, options);\r\n return Array.from(new Set(Object.values(analysis.globals).flatMap((a) => a.map((v) => String(v)))));\r\n });\r\n }\r\n /** Return an array of all expected context variables including their properties/paths. */\r\n globalFullVariablesSync(template, options = {}) {\r\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options);\r\n return Array.from(new Set(Object.values(analysis.globals).flatMap((a) => a.map((v) => String(v)))));\r\n }\r\n /** Return an array of all expected context variables, each as an array of properties/segments. */\r\n globalVariableSegments(template, options = {}) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const analysis = yield analyze(isString(template) ? this.parse(template) : template, options);\r\n return Array.from(strictUniq(Object.values(analysis.globals).flatMap((a) => a.map((v) => v.toArray()))));\r\n });\r\n }\r\n /** Return an array of all expected context variables, each as an array of properties/segments. */\r\n globalVariableSegmentsSync(template, options = {}) {\r\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options);\r\n return Array.from(strictUniq(Object.values(analysis.globals).flatMap((a) => a.map((v) => v.toArray()))));\r\n }\r\n}\n\n/* istanbul ignore file */\r\nconst version = '[VI]{version}[/VI]';\n\nexport { AssertionError, AssignTag, BlockTag, BreakTag, CaptureTag, CaseTag, CommentTag, Context, ContinueTag, CycleTag, DecrementTag, Drop, EchoTag, Expression, Filter, ForTag, Hash, IfTag, IncludeTag, IncrementTag, InlineCommentTag, LayoutTag, Liquid, LiquidError, LiquidTag, LookupType, Output, ParseError, ParseStream, Parser, RawTag, RenderError, RenderTag, TablerowTag, Tag, TagToken, Token, TokenKind, TokenizationError, Tokenizer, typeGuards as TypeGuards, UndefinedVariableError, UnlessTag, Value, Variable, analyze, analyzeSync, assert, createTrie, defaultOperators, defaultOptions, evalQuotedToken, evalToken, filters, isFalsy, isTruthy, tags, toPromise, toValue, toValueSync, version };\n"],"x_google_ignoreList":[0],"mappings":"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"}
|