From b51b0dabca7e6fcc6d3be7a82e70dc39a5545d8e Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 14 Feb 2019 16:02:23 +0000 Subject: [PATCH] chore(release): 7.0.0 [skip ci] # [7.0.0](https://github.com/harttle/liquidjs/compare/v6.4.3...v7.0.0) (2019-02-14) ### chore * **TypeScript:** ship Liquid to class ([1cc7249](https://github.com/harttle/liquidjs/commit/1cc7249)) ### BREAKING CHANGES * **TypeScript:** calling `Liquid()` without `new` now becomes invalid --- CHANGELOG.md | 12 + dist/liquid.common.js | 5886 ++++++++++++++----------------------- dist/liquid.common.js.map | 2 +- dist/liquid.js | 5684 ++++++++++++++--------------------- dist/liquid.js.map | 2 +- dist/liquid.min.js | 2 +- dist/liquid.min.js.map | 2 +- package-lock.json | 2 +- package.json | 2 +- 9 files changed, 4439 insertions(+), 7155 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eafd4c7f6..dce7aaf39 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +# [7.0.0](https://github.com/harttle/liquidjs/compare/v6.4.3...v7.0.0) (2019-02-14) + + +### chore + +* **TypeScript:** ship Liquid to class ([1cc7249](https://github.com/harttle/liquidjs/commit/1cc7249)) + + +### BREAKING CHANGES + +* **TypeScript:** calling `Liquid()` without `new` now becomes invalid + ## [6.4.3](https://github.com/harttle/liquidjs/compare/v6.4.2...v6.4.3) (2019-02-13) diff --git a/dist/liquid.common.js b/dist/liquid.common.js index 2ce5c22c5..99394ea19 100644 --- a/dist/liquid.common.js +++ b/dist/liquid.common.js @@ -1,3645 +1,2265 @@ /* - * liquidjs@6.4.3, https://github.com/harttle/liquidjs + * liquidjs@7.0.0, https://github.com/harttle/liquidjs * (c) 2016-2019 harttle * Released under the MIT License. */ 'use strict'; -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } - -var path = _interopDefault(require('path')); -var fs = _interopDefault(require('fs')); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { - return typeof obj; -} : function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; -}; - -var asyncToGenerator = function (fn) { - return function () { - var gen = fn.apply(this, arguments); - return new Promise(function (resolve, reject) { - function step(key, arg) { - try { - var info = gen[key](arg); - var value = info.value; - } catch (error) { - reject(error); - return; - } - - if (info.done) { - resolve(value); - } else { - return Promise.resolve(value).then(function (value) { - step("next", value); - }, function (err) { - step("throw", err); - }); - } - } - - return step("next"); - }); - }; -}; - -/** - * Copyright (c) 2014-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -!function (global) { - - var Op = Object.prototype; - var hasOwn = Op.hasOwnProperty; - var undefined; // More compressible than void 0. - var $Symbol = typeof Symbol === "function" ? Symbol : {}; - var iteratorSymbol = $Symbol.iterator || "@@iterator"; - var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; - var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; - - var inModule = (typeof module === "undefined" ? "undefined" : _typeof(module)) === "object"; - var runtime = global.regeneratorRuntime; - if (runtime) { - if (inModule) { - // If regeneratorRuntime is defined globally and we're in a module, - // make the exports object identical to regeneratorRuntime. - module.exports = runtime; - } - // Don't bother evaluating the rest of this file if the runtime was - // already defined globally. - return; - } - - // Define the runtime globally (as expected by generated code) as either - // module.exports (if we're in a module) or a new, empty object. - runtime = global.regeneratorRuntime = inModule ? module.exports : {}; - - function wrap(innerFn, outerFn, self, tryLocsList) { - // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. - var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; - var generator = Object.create(protoGenerator.prototype); - var context = new Context(tryLocsList || []); - - // The ._invoke method unifies the implementations of the .next, - // .throw, and .return methods. - generator._invoke = makeInvokeMethod(innerFn, self, context); - - return generator; - } - runtime.wrap = wrap; - - // Try/catch helper to minimize deoptimizations. Returns a completion - // record like context.tryEntries[i].completion. This interface could - // have been (and was previously) designed to take a closure to be - // invoked without arguments, but in all the cases we care about we - // already have an existing method we want to call, so there's no need - // to create a new function object. We can even get away with assuming - // the method takes exactly one argument, since that happens to be true - // in every case, so we don't have to touch the arguments object. The - // only additional allocation required is the completion record, which - // has a stable shape and so hopefully should be cheap to allocate. - function tryCatch(fn, obj, arg) { - try { - return { type: "normal", arg: fn.call(obj, arg) }; - } catch (err) { - return { type: "throw", arg: err }; - } - } - - var GenStateSuspendedStart = "suspendedStart"; - var GenStateSuspendedYield = "suspendedYield"; - var GenStateExecuting = "executing"; - var GenStateCompleted = "completed"; - - // Returning this object from the innerFn has the same effect as - // breaking out of the dispatch switch statement. - var ContinueSentinel = {}; - - // Dummy constructor functions that we use as the .constructor and - // .constructor.prototype properties for functions that return Generator - // objects. For full spec compliance, you may wish to configure your - // minifier not to mangle the names of these two functions. - function Generator() {} - function GeneratorFunction() {} - function GeneratorFunctionPrototype() {} - - // This is a polyfill for %IteratorPrototype% for environments that - // don't natively support it. - var IteratorPrototype = {}; - IteratorPrototype[iteratorSymbol] = function () { - return this; - }; - - var getProto = Object.getPrototypeOf; - var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); - if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { - // This environment has a native %IteratorPrototype%; use it instead - // of the polyfill. - IteratorPrototype = NativeIteratorPrototype; - } - - var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); - GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; - GeneratorFunctionPrototype.constructor = GeneratorFunction; - GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = "GeneratorFunction"; - - // Helper for defining the .next, .throw, and .return methods of the - // Iterator interface in terms of a single ._invoke method. - function defineIteratorMethods(prototype) { - ["next", "throw", "return"].forEach(function (method) { - prototype[method] = function (arg) { - return this._invoke(method, arg); - }; - }); - } - - runtime.isGeneratorFunction = function (genFun) { - var ctor = typeof genFun === "function" && genFun.constructor; - return ctor ? ctor === GeneratorFunction || - // For the native GeneratorFunction constructor, the best we can - // do is to check its .name property. - (ctor.displayName || ctor.name) === "GeneratorFunction" : false; - }; - - runtime.mark = function (genFun) { - if (Object.setPrototypeOf) { - Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); - } else { - genFun.__proto__ = GeneratorFunctionPrototype; - if (!(toStringTagSymbol in genFun)) { - genFun[toStringTagSymbol] = "GeneratorFunction"; - } - } - genFun.prototype = Object.create(Gp); - return genFun; - }; - - // Within the body of any async function, `await x` is transformed to - // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test - // `hasOwn.call(value, "__await")` to determine if the yielded value is - // meant to be awaited. - runtime.awrap = function (arg) { - return { __await: arg }; - }; - - function AsyncIterator(generator) { - function invoke(method, arg, resolve, reject) { - var record = tryCatch(generator[method], generator, arg); - if (record.type === "throw") { - reject(record.arg); - } else { - var result = record.arg; - var value = result.value; - if (value && (typeof value === "undefined" ? "undefined" : _typeof(value)) === "object" && hasOwn.call(value, "__await")) { - return Promise.resolve(value.__await).then(function (value) { - invoke("next", value, resolve, reject); - }, function (err) { - invoke("throw", err, resolve, reject); - }); - } - - return Promise.resolve(value).then(function (unwrapped) { - // When a yielded Promise is resolved, its final value becomes - // the .value of the Promise<{value,done}> result for the - // current iteration. - result.value = unwrapped; - resolve(result); - }, function (error) { - // If a rejected Promise was yielded, throw the rejection back - // into the async generator function so it can be handled there. - return invoke("throw", error, resolve, reject); - }); - } - } - - var previousPromise; - - function enqueue(method, arg) { - function callInvokeWithMethodAndArg() { - return new Promise(function (resolve, reject) { - invoke(method, arg, resolve, reject); - }); - } - - return previousPromise = - // If enqueue has been called before, then we want to wait until - // all previous Promises have been resolved before calling invoke, - // so that results are always delivered in the correct order. If - // enqueue has not been called before, then it is important to - // call invoke immediately, without waiting on a callback to fire, - // so that the async generator function has the opportunity to do - // any necessary setup in a predictable way. This predictability - // is why the Promise constructor synchronously invokes its - // executor callback, and why async functions synchronously - // execute code before the first await. Since we implement simple - // async functions in terms of async generators, it is especially - // important to get this right, even though it requires care. - previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, - // Avoid propagating failures to Promises returned by later - // invocations of the iterator. - callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); - } - - // Define the unified helper method that is used to implement .next, - // .throw, and .return (see defineIteratorMethods). - this._invoke = enqueue; - } - - defineIteratorMethods(AsyncIterator.prototype); - AsyncIterator.prototype[asyncIteratorSymbol] = function () { - return this; - }; - runtime.AsyncIterator = AsyncIterator; - - // Note that simple async functions are implemented on top of - // AsyncIterator objects; they just return a Promise for the value of - // the final result produced by the iterator. - runtime.async = function (innerFn, outerFn, self, tryLocsList) { - var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList)); - - return runtime.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator. - : iter.next().then(function (result) { - return result.done ? result.value : iter.next(); - }); - }; - - function makeInvokeMethod(innerFn, self, context) { - var state = GenStateSuspendedStart; - - return function invoke(method, arg) { - if (state === GenStateExecuting) { - throw new Error("Generator is already running"); - } - - if (state === GenStateCompleted) { - if (method === "throw") { - throw arg; - } - - // Be forgiving, per 25.3.3.3.3 of the spec: - // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume - return doneResult(); - } - - context.method = method; - context.arg = arg; - - while (true) { - var delegate = context.delegate; - if (delegate) { - var delegateResult = maybeInvokeDelegate(delegate, context); - if (delegateResult) { - if (delegateResult === ContinueSentinel) continue; - return delegateResult; - } - } - - if (context.method === "next") { - // Setting context._sent for legacy support of Babel's - // function.sent implementation. - context.sent = context._sent = context.arg; - } else if (context.method === "throw") { - if (state === GenStateSuspendedStart) { - state = GenStateCompleted; - throw context.arg; - } - - context.dispatchException(context.arg); - } else if (context.method === "return") { - context.abrupt("return", context.arg); - } - - state = GenStateExecuting; - - var record = tryCatch(innerFn, self, context); - if (record.type === "normal") { - // If an exception is thrown from innerFn, we leave state === - // GenStateExecuting and loop back for another invocation. - state = context.done ? GenStateCompleted : GenStateSuspendedYield; - - if (record.arg === ContinueSentinel) { - continue; - } - - return { - value: record.arg, - done: context.done - }; - } else if (record.type === "throw") { - state = GenStateCompleted; - // Dispatch the exception by looping back around to the - // context.dispatchException(context.arg) call above. - context.method = "throw"; - context.arg = record.arg; - } - } - }; - } - - // Call delegate.iterator[context.method](context.arg) and handle the - // result, either by returning a { value, done } result from the - // delegate iterator, or by modifying context.method and context.arg, - // setting context.delegate to null, and returning the ContinueSentinel. - function maybeInvokeDelegate(delegate, context) { - var method = delegate.iterator[context.method]; - if (method === undefined) { - // A .throw or .return when the delegate iterator has no .throw - // method always terminates the yield* loop. - context.delegate = null; - - if (context.method === "throw") { - if (delegate.iterator.return) { - // If the delegate iterator has a return method, give it a - // chance to clean up. - context.method = "return"; - context.arg = undefined; - maybeInvokeDelegate(delegate, context); - - if (context.method === "throw") { - // If maybeInvokeDelegate(context) changed context.method from - // "return" to "throw", let that override the TypeError below. - return ContinueSentinel; - } - } - - context.method = "throw"; - context.arg = new TypeError("The iterator does not provide a 'throw' method"); - } - - return ContinueSentinel; - } - - var record = tryCatch(method, delegate.iterator, context.arg); - - if (record.type === "throw") { - context.method = "throw"; - context.arg = record.arg; - context.delegate = null; - return ContinueSentinel; - } - - var info = record.arg; - - if (!info) { - context.method = "throw"; - context.arg = new TypeError("iterator result is not an object"); - context.delegate = null; - return ContinueSentinel; - } - - if (info.done) { - // Assign the result of the finished delegate to the temporary - // variable specified by delegate.resultName (see delegateYield). - context[delegate.resultName] = info.value; - - // Resume execution at the desired location (see delegateYield). - context.next = delegate.nextLoc; - - // If context.method was "throw" but the delegate handled the - // exception, let the outer generator proceed normally. If - // context.method was "next", forget context.arg since it has been - // "consumed" by the delegate iterator. If context.method was - // "return", allow the original .return call to continue in the - // outer generator. - if (context.method !== "return") { - context.method = "next"; - context.arg = undefined; - } - } else { - // Re-yield the result returned by the delegate method. - return info; - } - - // The delegate iterator is finished, so forget it and continue with - // the outer generator. - context.delegate = null; - return ContinueSentinel; - } - - // Define Generator.prototype.{next,throw,return} in terms of the - // unified ._invoke helper method. - defineIteratorMethods(Gp); - - Gp[toStringTagSymbol] = "Generator"; - - // A Generator should always return itself as the iterator object when the - // @@iterator function is called on it. Some browsers' implementations of the - // iterator prototype chain incorrectly implement this, causing the Generator - // object to not be returned from this call. This ensures that doesn't happen. - // See https://github.com/facebook/regenerator/issues/274 for more details. - Gp[iteratorSymbol] = function () { - return this; - }; - - Gp.toString = function () { - return "[object Generator]"; - }; - - function pushTryEntry(locs) { - var entry = { tryLoc: locs[0] }; - - if (1 in locs) { - entry.catchLoc = locs[1]; - } - - if (2 in locs) { - entry.finallyLoc = locs[2]; - entry.afterLoc = locs[3]; - } - - this.tryEntries.push(entry); - } - - function resetTryEntry(entry) { - var record = entry.completion || {}; - record.type = "normal"; - delete record.arg; - entry.completion = record; - } - - function Context(tryLocsList) { - // The root entry object (effectively a try statement without a catch - // or a finally block) gives us a place to store values thrown from - // locations where there is no enclosing try statement. - this.tryEntries = [{ tryLoc: "root" }]; - tryLocsList.forEach(pushTryEntry, this); - this.reset(true); - } - - runtime.keys = function (object) { - var keys = []; - for (var key in object) { - keys.push(key); - } - keys.reverse(); - - // Rather than returning an object with a next method, we keep - // things simple and return the next function itself. - return function next() { - while (keys.length) { - var key = keys.pop(); - if (key in object) { - next.value = key; - next.done = false; - return next; - } - } - - // To avoid creating an additional object, we just hang the .value - // and .done properties off the next function object itself. This - // also ensures that the minifier will not anonymize the function. - next.done = true; - return next; - }; - }; - - function values(iterable) { - if (iterable) { - var iteratorMethod = iterable[iteratorSymbol]; - if (iteratorMethod) { - return iteratorMethod.call(iterable); - } - - if (typeof iterable.next === "function") { - return iterable; - } - - if (!isNaN(iterable.length)) { - var i = -1, - next = function next() { - while (++i < iterable.length) { - if (hasOwn.call(iterable, i)) { - next.value = iterable[i]; - next.done = false; - return next; - } - } - - next.value = undefined; - next.done = true; - - return next; - }; - - return next.next = next; - } - } - - // Return an iterator with no values. - return { next: doneResult }; - } - runtime.values = values; - - function doneResult() { - return { value: undefined, done: true }; - } - - Context.prototype = { - constructor: Context, - - reset: function reset(skipTempReset) { - this.prev = 0; - this.next = 0; - // Resetting context._sent for legacy support of Babel's - // function.sent implementation. - this.sent = this._sent = undefined; - this.done = false; - this.delegate = null; - - this.method = "next"; - this.arg = undefined; - - this.tryEntries.forEach(resetTryEntry); - - if (!skipTempReset) { - for (var name in this) { - // Not sure about the optimal order of these conditions: - if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) { - this[name] = undefined; - } - } - } - }, - - stop: function stop() { - this.done = true; - - var rootEntry = this.tryEntries[0]; - var rootRecord = rootEntry.completion; - if (rootRecord.type === "throw") { - throw rootRecord.arg; - } - - return this.rval; - }, - - dispatchException: function dispatchException(exception) { - if (this.done) { - throw exception; - } - - var context = this; - function handle(loc, caught) { - record.type = "throw"; - record.arg = exception; - context.next = loc; - - if (caught) { - // If the dispatched exception was caught by a catch block, - // then let that catch block handle the exception normally. - context.method = "next"; - context.arg = undefined; - } - - return !!caught; - } - - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - var record = entry.completion; - - if (entry.tryLoc === "root") { - // Exception thrown outside of any try block that could handle - // it, so set the completion value of the entire function to - // throw the exception. - return handle("end"); - } - - if (entry.tryLoc <= this.prev) { - var hasCatch = hasOwn.call(entry, "catchLoc"); - var hasFinally = hasOwn.call(entry, "finallyLoc"); - - if (hasCatch && hasFinally) { - if (this.prev < entry.catchLoc) { - return handle(entry.catchLoc, true); - } else if (this.prev < entry.finallyLoc) { - return handle(entry.finallyLoc); - } - } else if (hasCatch) { - if (this.prev < entry.catchLoc) { - return handle(entry.catchLoc, true); - } - } else if (hasFinally) { - if (this.prev < entry.finallyLoc) { - return handle(entry.finallyLoc); - } - } else { - throw new Error("try statement without catch or finally"); - } - } - } - }, - - abrupt: function abrupt(type, arg) { - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { - var finallyEntry = entry; - break; - } - } - - if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) { - // Ignore the finally entry if control is not jumping to a - // location outside the try/catch block. - finallyEntry = null; - } - - var record = finallyEntry ? finallyEntry.completion : {}; - record.type = type; - record.arg = arg; - - if (finallyEntry) { - this.method = "next"; - this.next = finallyEntry.finallyLoc; - return ContinueSentinel; - } - - return this.complete(record); - }, - - complete: function complete(record, afterLoc) { - if (record.type === "throw") { - throw record.arg; - } - - if (record.type === "break" || record.type === "continue") { - this.next = record.arg; - } else if (record.type === "return") { - this.rval = this.arg = record.arg; - this.method = "return"; - this.next = "end"; - } else if (record.type === "normal" && afterLoc) { - this.next = afterLoc; - } - - return ContinueSentinel; - }, - - finish: function finish(finallyLoc) { - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - if (entry.finallyLoc === finallyLoc) { - this.complete(entry.completion, entry.afterLoc); - resetTryEntry(entry); - return ContinueSentinel; - } - } - }, - - "catch": function _catch(tryLoc) { - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - if (entry.tryLoc === tryLoc) { - var record = entry.completion; - if (record.type === "throw") { - var thrown = record.arg; - resetTryEntry(entry); - } - return thrown; - } - } - - // The context.catch method must only be called with a location - // argument that corresponds to a known catch block. - throw new Error("illegal catch attempt"); - }, - - delegateYield: function delegateYield(iterable, resultName, nextLoc) { - this.delegate = { - iterator: values(iterable), - resultName: resultName, - nextLoc: nextLoc - }; - - if (this.method === "next") { - // Deliberately forget the last sent value so that we don't - // accidentally pass it on to the delegate. - this.arg = undefined; - } - - return ContinueSentinel; - } - }; -}( -// In sloppy mode, unbound `this` refers to the global object, fallback to -// Function constructor if we're in global strict mode. That is sadly a form -// of indirect eval which violates Content Security Policy. -function () { - return this || (typeof self === "undefined" ? "undefined" : _typeof(self)) === "object" && self; -}() || Function("return this")()); - -var toStr = Object.prototype.toString; -var arrToStr = Array.prototype.toString; - -/* - * Checks if value is classified as a String primitive or object. - * @param {any} value The value to check. - * @return {Boolean} Returns true if value is a string, else false. - */ -function isString(value) { - return toStr.call(value) === '[object String]'; -} - -function isFunction(value) { - return typeof value === 'function'; -} - -function promisify(fn) { - return function () { - var _arguments = arguments; - - return new Promise(function (resolve, reject) { - fn.apply(undefined, Array.prototype.slice.call(_arguments).concat([function (err, result) { - err ? reject(err) : resolve(result); - }])); - }); - }; -} - -function stringify(value) { - if (isNil(value)) return String(value); - if (isFunction(value.to_liquid)) return stringify(value.to_liquid()); - if (isFunction(value.toLiquid)) return stringify(value.toLiquid()); - if (isFunction(value.to_s)) return value.to_s(); - if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value); - if (isFunction(value.toString)) return value.toString(); - return toStr.call(value); -} - -function defaultToString(value) { - var cache = []; - return JSON.stringify(value, function (key, value) { - if (isObject(value)) { - if (cache.indexOf(value) !== -1) { - return; - } - cache.push(value); - } - return value; - }); -} - -function create(proto) { - return Object.create(proto); -} - -function isNil(value) { - return value === null || value === undefined; -} - -function isArray(value) { - // be compatible with IE 8 - return toStr.call(value) === '[object Array]'; -} - -/* - * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property. - * The iteratee is invoked with three arguments: (value, key, object). - * Iteratee functions may exit iteration early by explicitly returning false. - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @return {Object} Returns object. - */ -function forOwn(object, iteratee) { - object = object || {}; - for (var k in object) { - if (object.hasOwnProperty(k)) { - if (iteratee(object[k], k, object) === false) break; - } - } - return object; -} - -/* - * Assigns own enumerable string keyed properties of source objects to the destination object. - * Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * Note: This method mutates object and is loosely based on Object.assign. - * - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @return {Object} Returns object. - */ -function assign(object) { - object = isObject(object) ? object : {}; - var srcs = Array.prototype.slice.call(arguments, 1); - srcs.forEach(function (src) { - return Object.assign(object, src); - }); - return object; -} - -function last(arr) { - return arr[arr.length - 1]; -} - -function uniq(arr) { - var u = {}; - var a = []; - for (var i = 0, l = arr.length; i < l; ++i) { - if (u.hasOwnProperty(arr[i])) { - continue; - } - a.push(arr[i]); - u[arr[i]] = 1; - } - return a; -} - -/* - * Checks if value is the language type of Object. - * (e.g. arrays, functions, objects, regexes, new Number(0), and new String('')) - * @param {any} value The value to check. - * @return {Boolean} Returns true if value is an object, else false. - */ -function isObject(value) { - var type = typeof value === 'undefined' ? 'undefined' : _typeof(value); - return value !== null && (type === 'object' || type === 'function'); -} - -/* - * A function to create flexibly-numbered lists of integers, - * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1. - * Returns a list of integers from start (inclusive) to stop (exclusive), - * incremented (or decremented) by step, exclusive. - * Note that ranges that stop before they start are considered to be zero-length instead of - * negative — if you'd like a negative range, use a negative step. - */ -function range(start, stop, step) { - if (arguments.length === 1) { - stop = start; - start = 0; - } - step = step || 1; - - var arr = []; - for (var i = start; i < stop; i += step) { - arr.push(i); - } - return arr; -} - -// quote related -var singleQuoted = /'[^']*'/; -var doubleQuoted = /"[^"]*"/; -var quoted = new RegExp(singleQuoted.source + '|' + doubleQuoted.source); -var quoteBalanced = new RegExp('(?:' + quoted.source + '|[^\'"])*'); - -// basic types -var integer = /-?\d+/; -var number = /-?\d+\.?\d*|\.?\d+/; -var bool = /true|false/; - -// property access -var identifier = /[\w-]+[?]?/; -var subscript = new RegExp('\\[(?:' + quoted.source + '|[\\w-\\.]+)\\]'); -var literal = new RegExp('(?:' + quoted.source + '|' + bool.source + '|' + number.source + ')'); -var variable = new RegExp(identifier.source + '(?:\\.' + identifier.source + '|' + subscript.source + ')*'); - -// range related -var rangeLimit = new RegExp('(?:' + variable.source + '|' + number.source + ')'); -var range$1 = new RegExp('\\(' + rangeLimit.source + '\\.\\.' + rangeLimit.source + '\\)'); -var rangeCapture = new RegExp('\\((' + rangeLimit.source + ')\\.\\.(' + rangeLimit.source + ')\\)'); - -var value = new RegExp('(?:' + variable.source + '|' + literal.source + '|' + range$1.source + ')'); - -// hash related -var hash = new RegExp('(?:' + identifier.source + ')\\s*:\\s*(?:' + value.source + ')'); -var hashCapture = new RegExp('(' + identifier.source + ')\\s*:\\s*(' + value.source + ')', 'g'); - -// full match -var tagLine = new RegExp('^\\s*(' + identifier.source + ')\\s*([\\s\\S]*)\\s*$'); -var literalLine = new RegExp('^' + literal.source + '$', 'i'); -var variableLine = new RegExp('^' + variable.source + '$'); -var numberLine = new RegExp('^' + number.source + '$'); -var boolLine = new RegExp('^' + bool.source + '$', 'i'); -var quotedLine = new RegExp('^' + quoted.source + '$'); -var rangeLine = new RegExp('^' + rangeCapture.source + '$'); -var integerLine = new RegExp('^' + integer.source + '$'); - -// filter related -var valueDeclaration = new RegExp('(?:' + identifier.source + '\\s*:\\s*)?' + value.source); -var valueList = new RegExp(valueDeclaration.source + '(\\s*,\\s*' + valueDeclaration.source + ')*'); -var filter = new RegExp(identifier.source + '(?:\\s*:\\s*' + valueList.source + ')?', 'g'); -var filterCapture = new RegExp('(' + identifier.source + ')(?:\\s*:\\s*(' + valueList.source + '))?'); -var filterLine = new RegExp('^' + filterCapture.source + '$'); - -var operators = [/\s+or\s+/, /\s+and\s+/, /==|!=|<=|>=|<|>|\s+contains\s+/]; - -function isInteger(str) { - return integerLine.test(str); -} - -function isLiteral(str) { - return literalLine.test(str); -} - -function isVariable(str) { - return variableLine.test(str); -} - -function matchValue(str) { - return value.exec(str); -} - -function parseLiteral(str) { - var res = str.match(numberLine); - if (res) { - return Number(str); - } - res = str.match(boolLine); - if (res) { - return str.toLowerCase() === 'true'; - } - res = str.match(quotedLine); - if (res) { - return str.slice(1, -1); - } - throw new TypeError('cannot parse \'' + str + '\' as literal'); -} - -function initError() { - this.name = this.constructor.name; - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } -} - -function initLiquidError(err, token) { - initError.call(this); - - this.input = token.input; - this.line = token.line; - this.file = token.file; - - var context = mkContext(token.input, token.line); - this.message = mkMessage(err.message, token); - this.stack = context + '\n' + (this.stack || this.message) + (err.stack ? '\nFrom ' + err.stack : ''); -} - -function TokenizationError(message, token) { - initLiquidError.call(this, { message: message }, token); -} -TokenizationError.prototype = create(Error.prototype); -TokenizationError.prototype.constructor = TokenizationError; - -function ParseError(e, token) { - assign(this, e); - this.originalError = e; - - initLiquidError.call(this, e, token); -} -ParseError.prototype = create(Error.prototype); -ParseError.prototype.constructor = ParseError; - -function RenderError(e, tpl) { - // return the original render error - if (e instanceof RenderError) { - return e; - } - assign(this, e); - this.originalError = e; - - initLiquidError.call(this, e, tpl.token); -} -RenderError.prototype = create(Error.prototype); -RenderError.prototype.constructor = RenderError; - -function RenderBreakError(message) { - initError.call(this); - this.message = message + ''; -} -RenderBreakError.prototype = create(Error.prototype); -RenderBreakError.prototype.constructor = RenderBreakError; - -function AssertionError(message) { - initError.call(this); - this.message = message + ''; -} -AssertionError.prototype = create(Error.prototype); -AssertionError.prototype.constructor = AssertionError; - -function mkContext(input, line) { - var lines = input.split('\n'); - var begin = Math.max(line - 2, 1); - var end = Math.min(line + 3, lines.length); - - var context = range(begin, end + 1).map(function (l) { - return [l === line ? '>> ' : ' ', align(l, end), '| ', lines[l - 1]].join(''); - }).join('\n'); - - return context; -} - -function align(n, max) { - var length = (max + '').length; - var str = n + ''; - var blank = Array(length - str.length).join(' '); - return blank + str; -} - -function mkMessage(msg, token) { - msg = msg || ''; - if (token.file) { - msg += ', file:' + token.file; - } - if (token.line) { - msg += ', line:' + token.line; - } - return msg; -} - -function assert (predicate, message) { - if (!predicate) { - message = message || 'expect ' + predicate + ' to be true'; - throw new AssertionError(message); - } -} - -var Scope = { - getAll: function getAll() { - return this.contexts.reduce(function (ctx, val) { - return assign(ctx, val); - }, create(null)); - }, - get: function get(path$$1) { - var _this = this; - - var paths = this.propertyAccessSeq(path$$1); - var scope = this.findContextFor(paths[0]) || last(this.contexts); - return paths.reduce(function (value$$1, key) { - return _this.readProperty(value$$1, key); - }, scope); - }, - set: function set(path$$1, v) { - var paths = this.propertyAccessSeq(path$$1); - var scope = this.findContextFor(paths[0]) || last(this.contexts); - paths.some(function (key, i) { - if (!isObject(scope)) { - return true; - } - if (i === paths.length - 1) { - scope[key] = v; - return true; - } - if (undefined === scope[key]) { - scope[key] = {}; - } - scope = scope[key]; - }); - }, - unshift: function unshift(ctx) { - return this.contexts.unshift(ctx); - }, - push: function push(ctx) { - return this.contexts.push(ctx); - }, - pop: function pop(ctx) { - if (!arguments.length) { - return this.contexts.pop(); - } - var i = this.contexts.findIndex(function (scope) { - return scope === ctx; - }); - if (i === -1) { - throw new TypeError('scope not found, cannot pop'); - } - return this.contexts.splice(i, 1)[0]; - }, - findContextFor: function findContextFor(key, filter$$1) { - filter$$1 = filter$$1 || function () { - return true; - }; - for (var i = this.contexts.length - 1; i >= 0; i--) { - var candidate = this.contexts[i]; - if (!filter$$1(candidate)) continue; - if (key in candidate) { - return candidate; - } - } - return null; - }, - readProperty: function readProperty(obj, key) { - var val = void 0; - if (isNil(obj)) { - val = undefined; - } else { - obj = toLiquid(obj); - val = key === 'size' ? readSize(obj) : obj[key]; - if (isFunction(obj.liquid_method_missing)) { - val = obj.liquid_method_missing(key); - } - } - if (isNil(val) && this.opts.strict_variables) { - throw new TypeError('undefined variable: ' + key); - } - return val; - }, - - /* - * Parse property access sequence from access string - * @example - * accessSeq("foo.bar") // ['foo', 'bar'] - * accessSeq("foo['bar']") // ['foo', 'bar'] - * accessSeq("foo['b]r']") // ['foo', 'b]r'] - * accessSeq("foo[bar.coo]") // ['foo', 'bar'], for bar.coo == 'bar' - */ - propertyAccessSeq: function propertyAccessSeq(str) { - str = String(str); - var seq = []; - var name = ''; - var j = void 0; - var i = 0; - while (i < str.length) { - switch (str[i]) { - case '[': - push(); - - var delemiter = str[i + 1]; - if (/['"]/.test(delemiter)) { - // foo["bar"] - j = str.indexOf(delemiter, i + 2); - assert(j !== -1, 'unbalanced ' + delemiter + ': ' + str); - name = str.slice(i + 2, j); - push(); - i = j + 2; - } else { - // foo[bar.coo] - j = matchRightBracket(str, i + 1); - assert(j !== -1, 'unbalanced []: ' + str); - name = str.slice(i + 1, j); - if (!isInteger(name)) { - // foo[bar] vs. foo[1] - name = String(this.get(name)); - } - push(); - i = j + 1; - } - break; - case '.': - // foo.bar, foo[0].bar - push(); - i++; - break; - default: - // foo.bar - name += str[i]; - i++; - } - } - push(); - - if (!seq.length) { - throw new TypeError('invalid path:"' + str + '"'); - } - return seq; - - function push() { - if (name.length) seq.push(name); - name = ''; - } - } -}; - -function toLiquid(obj) { - if (isFunction(obj.to_liquid)) { - return obj.to_liquid(); - } - if (isFunction(obj.toLiquid)) { - return obj.toLiquid(); - } - return obj; -} - -function readSize(obj) { - if (!isNil(obj.size)) return obj.size; - if (isArray(obj) || isString(obj)) return obj.length; - return obj.size; -} - -function matchRightBracket(str, begin) { - var stack = 1; // count of '[' - count of ']' - for (var i = begin; i < str.length; i++) { - if (str[i] === '[') { - stack++; - } - if (str[i] === ']') { - stack--; - if (stack === 0) { - return i; - } - } - } - return -1; -} - -function factory(ctx, opts) { - var defaultOptions = { - dynamicPartials: true, - strict_variables: false, - strict_filters: false, - blocks: {}, - root: [] - }; - var scope = create(Scope); - scope.opts = assign(defaultOptions, opts); - scope.contexts = [ctx || {}]; - return scope; -} - -/* - * Call functions in serial until someone resolved. - * @param {Array} iterable the array to iterate with. - * @param {Array} iteratee returns a new promise. - * The iteratee is invoked with three arguments: (value, index, iterable). - */ -function anySeries(iterable, iteratee) { - var ret = Promise.reject(new Error('init')); - iterable.forEach(function (item, idx) { - ret = ret.catch(function (e) { - return iteratee(item, idx, iterable); - }); - }); - return ret; -} - -/* - * Call functions in serial until someone rejected. - * @param {Array} iterable the array to iterate with. - * @param {Array} iteratee returns a new promise. - * The iteratee is invoked with three arguments: (value, index, iterable). - */ -function mapSeries(iterable, iteratee) { - var ret = Promise.resolve('init'); - var result = []; - iterable.forEach(function (item, idx) { - ret = ret.then(function () { - return iteratee(item, idx, iterable); - }).then(function (x) { - return result.push(x); - }); - }); - return ret.then(function () { - return result; - }); -} - -var statFileAsync = promisify(fs.stat); -var readFileAsync = promisify(fs.readFile); - -var resolve = function () { - var _ref = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(filepath, root, options) { - var _this = this; - - var paths; - return regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - if (!path.extname(filepath)) { - filepath += options.extname; - } - root = options.root.concat(root || []); - root = uniq(root); - paths = root.map(function (root) { - return path.resolve(root, filepath); - }); - return _context2.abrupt('return', anySeries(paths, function () { - var _ref2 = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(path$$1) { - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.prev = 0; - _context.next = 3; - return statFileAsync(path$$1); - - case 3: - return _context.abrupt('return', path$$1); - - case 6: - _context.prev = 6; - _context.t0 = _context['catch'](0); - - _context.t0.message = _context.t0.code + ': Failed to lookup ' + filepath + ' in: ' + root; - throw _context.t0; - - case 10: - case 'end': - return _context.stop(); - } - } - }, _callee, _this, [[0, 6]]); - })); - - return function (_x4) { - return _ref2.apply(this, arguments); - }; - }())); - - case 5: - case 'end': - return _context2.stop(); - } - } - }, _callee2, this); - })); - - return function resolve(_x, _x2, _x3) { - return _ref.apply(this, arguments); - }; -}(); - -var read = function () { - var _ref3 = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(filepath) { - return regeneratorRuntime.wrap(function _callee3$(_context3) { - while (1) { - switch (_context3.prev = _context3.next) { - case 0: - return _context3.abrupt('return', readFileAsync(filepath, 'utf8')); - - case 1: - case 'end': - return _context3.stop(); - } - } - }, _callee3, this); - })); - - return function read(_x5) { - return _ref3.apply(this, arguments); - }; -}(); - -function whiteSpaceCtrl(tokens, options) { - options = assign({ greedy: true }, options); - var inRaw = false; - - tokens.forEach(function (token, i) { - if (shouldTrimLeft(token, inRaw, options)) { - trimLeft(tokens[i - 1], options.greedy); - } - - if (token.type === 'tag' && token.name === 'raw') inRaw = true; - if (token.type === 'tag' && token.name === 'endraw') inRaw = false; - - if (shouldTrimRight(token, inRaw, options)) { - trimRight(tokens[i + 1], options.greedy); - } - }); -} - -function shouldTrimLeft(token, inRaw, options) { - if (inRaw) return false; - if (token.type === 'tag') return token.trim_left || options.trim_tag_left; - if (token.type === 'value') return token.trim_left || options.trim_value_left; -} - -function shouldTrimRight(token, inRaw, options) { - if (inRaw) return false; - if (token.type === 'tag') return token.trim_right || options.trim_tag_right; - if (token.type === 'value') return token.trim_right || options.trim_value_right; -} - -function trimLeft(token, greedy) { - if (!token || token.type !== 'html') return; - - var rLeft = greedy ? /\s+$/g : /[\t\r ]*$/g; - token.value = token.value.replace(rLeft, ''); -} - -function trimRight(token, greedy) { - if (!token || token.type !== 'html') return; - - var rRight = greedy ? /^\s+/g : /^[\t\r ]*\n?/g; - token.value = token.value.replace(rRight, ''); -} - -function parse(input, file, options) { - assert(isString(input), 'illegal input'); - - var rLiquid = /({%-?([\s\S]*?)-?%})|({{-?([\s\S]*?)-?}})/g; - var currIndent = 0; - var lineNumber = LineNumber(input); - var lastMatchEnd = 0; - var tokens = []; - - for (var match; match = rLiquid.exec(input); lastMatchEnd = rLiquid.lastIndex) { - if (match.index > lastMatchEnd) { - tokens.push(parseHTMLToken(lastMatchEnd, match.index)); - } - tokens.push(match[1] ? parseTagToken(match[1], match[2].trim(), match.index) : parseValueToken(match[3], match[4].trim(), match.index)); - } - if (input.length > lastMatchEnd) { - tokens.push(parseHTMLToken(lastMatchEnd, input.length)); - } - whiteSpaceCtrl(tokens, options); - return tokens; - - function parseTagToken(raw, value$$1, pos) { - var match = value$$1.match(tagLine); - var token = { - type: 'tag', - indent: currIndent, - line: lineNumber.get(pos), - trim_left: raw.slice(0, 3) === '{%-', - trim_right: raw.slice(-3) === '-%}', - raw: raw, - value: value$$1, - input: input, - file: file - }; - if (!match) { - throw new TokenizationError('illegal tag syntax', token); - } - token.name = match[1]; - token.args = match[2]; - return token; - } - - function parseValueToken(raw, value$$1, pos) { - return { - type: 'value', - line: lineNumber.get(pos), - trim_left: raw.slice(0, 3) === '{{-', - trim_right: raw.slice(-3) === '-}}', - raw: raw, - value: value$$1, - input: input, - file: file - }; - } - - function parseHTMLToken(begin, end) { - var htmlFragment = input.slice(begin, end); - currIndent = last(htmlFragment.split('\n')).length; - - return { - type: 'html', - raw: htmlFragment, - value: htmlFragment - }; - } -} - -function LineNumber(html) { - var parsedLinesCount = 0; - var lastMatchBegin = -1; - - return { - get: function get(pos) { - var lines = html.slice(lastMatchBegin + 1, pos).split('\n'); - parsedLinesCount += lines.length - 1; - lastMatchBegin = pos; - return parsedLinesCount + 1; - } - }; -} - -function Operators (isTruthy) { - return { - '==': function _(l, r) { - return l === r; - }, - '!=': function _(l, r) { - return l !== r; - }, - '>': function _(l, r) { - return l !== null && r !== null && l > r; - }, - '<': function _(l, r) { - return l !== null && r !== null && l < r; - }, - '>=': function _(l, r) { - return l !== null && r !== null && l >= r; - }, - '<=': function _(l, r) { - return l !== null && r !== null && l <= r; - }, - 'contains': function contains(l, r) { - if (!l) return false; - if (typeof l.indexOf !== 'function') return false; - return l.indexOf(r) > -1; - }, - 'and': function and(l, r) { - return isTruthy(l) && isTruthy(r); - }, - 'or': function or(l, r) { - return isTruthy(l) || isTruthy(r); - } - }; -} - -var operators$1 = Operators(isTruthy); - -function evalExp(exp, scope) { - assert(scope, 'unable to evalExp: scope undefined'); - var operatorREs = operators; - var match = void 0; - for (var i = 0; i < operatorREs.length; i++) { - var operatorRE = operatorREs[i]; - var expRE = new RegExp('^(' + quoteBalanced.source + ')(' + operatorRE.source + ')(' + quoteBalanced.source + ')$'); - if (match = exp.match(expRE)) { - var l = evalExp(match[1], scope); - var op = operators$1[match[2].trim()]; - var r = evalExp(match[3], scope); - return op(l, r); - } - } - - if (match = exp.match(rangeLine)) { - var low = evalValue(match[1], scope); - var high = evalValue(match[2], scope); - var range = []; - for (var j = low; j <= high; j++) { - range.push(j); - } - return range; - } - - return evalValue(exp, scope); -} - -function evalValue(str, scope) { - str = str && str.trim(); - if (!str) return undefined; - - if (isLiteral(str)) { - return parseLiteral(str); - } - if (isVariable(str)) { - return scope.get(str); - } - throw new TypeError('cannot eval \'' + str + '\' as value'); -} - -function isTruthy(val) { - return !isFalsy(val); -} - -function isFalsy(val) { - return val === false || undefined === val || val === null; -} - -var render = { - renderTemplates: function () { - var _ref = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(templates, scope) { - var renderTemplate = function () { - var _ref2 = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(template) { - var partial; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - if (!(template.type === 'tag')) { - _context.next = 5; - break; - } - - _context.next = 3; - return this.renderTag(template, scope); - - case 3: - partial = _context.sent; - return _context.abrupt('return', partial === undefined ? '' : partial); - - case 5: - if (!(template.type === 'value')) { - _context.next = 7; - break; - } - - return _context.abrupt('return', this.renderValue(template, scope)); - - case 7: - return _context.abrupt('return', template.value); - - case 8: - case 'end': - return _context.stop(); - } - } - }, _callee, this); - })); - - return function renderTemplate(_x3) { - return _ref2.apply(this, arguments); - }; - }(); - - var html, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, tpl; - - return regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - assert(scope, 'unable to evalTemplates: scope undefined'); - - html = ''; - _iteratorNormalCompletion = true; - _didIteratorError = false; - _iteratorError = undefined; - _context2.prev = 5; - _iterator = templates[Symbol.iterator](); - - case 7: - if (_iteratorNormalCompletion = (_step = _iterator.next()).done) { - _context2.next = 24; - break; - } - - tpl = _step.value; - _context2.prev = 9; - _context2.next = 12; - return renderTemplate.call(this, tpl); - - case 12: - html += _context2.sent; - _context2.next = 21; - break; - - case 15: - _context2.prev = 15; - _context2.t0 = _context2['catch'](9); - - if (!(_context2.t0 instanceof RenderBreakError)) { - _context2.next = 20; - break; - } - - _context2.t0.resolvedHTML = html; - throw _context2.t0; - - case 20: - throw new RenderError(_context2.t0, tpl); - - case 21: - _iteratorNormalCompletion = true; - _context2.next = 7; - break; - - case 24: - _context2.next = 30; - break; - - case 26: - _context2.prev = 26; - _context2.t1 = _context2['catch'](5); - _didIteratorError = true; - _iteratorError = _context2.t1; - - case 30: - _context2.prev = 30; - _context2.prev = 31; - - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - - case 33: - _context2.prev = 33; - - if (!_didIteratorError) { - _context2.next = 36; - break; - } - - throw _iteratorError; - - case 36: - return _context2.finish(33); - - case 37: - return _context2.finish(30); - - case 38: - return _context2.abrupt('return', html); - - case 39: - case 'end': - return _context2.stop(); - } - } - }, _callee2, this, [[5, 26, 30, 38], [9, 15], [31,, 33, 37]]); - })); - - function renderTemplates(_x, _x2) { - return _ref.apply(this, arguments); - } - - return renderTemplates; - }(), - - renderTag: function () { - var _ref3 = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(template, scope) { - return regeneratorRuntime.wrap(function _callee3$(_context3) { - while (1) { - switch (_context3.prev = _context3.next) { - case 0: - if (!(template.name === 'continue')) { - _context3.next = 2; - break; - } - - throw new RenderBreakError('continue'); - - case 2: - if (!(template.name === 'break')) { - _context3.next = 4; - break; - } - - throw new RenderBreakError('break'); - - case 4: - return _context3.abrupt('return', template.render(scope)); - - case 5: - case 'end': - return _context3.stop(); - } - } - }, _callee3, this); - })); - - function renderTag(_x4, _x5) { - return _ref3.apply(this, arguments); - } - - return renderTag; - }(), - - renderValue: function () { - var _ref4 = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4(template, scope) { - var partial; - return regeneratorRuntime.wrap(function _callee4$(_context4) { - while (1) { - switch (_context4.prev = _context4.next) { - case 0: - partial = this.evalValue(template, scope); - return _context4.abrupt('return', partial === undefined ? '' : stringify(partial)); - - case 2: - case 'end': - return _context4.stop(); - } - } - }, _callee4, this); - })); - - function renderValue(_x6, _x7) { - return _ref4.apply(this, arguments); - } - - return renderValue; - }(), - - evalValue: function evalValue$$1(template, scope) { - assert(scope, 'unable to evalValue: scope undefined'); - return template.filters.reduce(function (prev, filter) { - return filter.render(prev, scope); - }, evalExp(template.initial, scope)); - } -}; - -function Render () { - var instance = create(render); - return instance; -} - -function hash$1(markup, scope) { - var obj = {}; - var match = void 0; - hashCapture.lastIndex = 0; - while (match = hashCapture.exec(markup)) { - var k = match[1]; - var v = match[2]; - obj[k] = evalValue(v, scope); - } - return obj; -} - -function Tag () { - var tagImpls = {}; - - var _tagInstance = { - render: function () { - var _ref = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(scope) { - var obj, impl; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - obj = hash$1(this.token.args, scope); - impl = this.tagImpl; - - if (!(typeof impl.render !== 'function')) { - _context.next = 4; - break; - } - - return _context.abrupt('return', ''); - - case 4: - return _context.abrupt('return', impl.render(scope, obj)); - - case 5: - case 'end': - return _context.stop(); - } - } - }, _callee, this); - })); - - function render(_x) { - return _ref.apply(this, arguments); - } - - return render; - }(), - parse: function parse(token, tokens) { - this.type = 'tag'; - this.token = token; - this.name = token.name; - - var tagImpl = tagImpls[this.name]; - assert(tagImpl, 'tag ' + this.name + ' not found'); - this.tagImpl = create(tagImpl); - if (this.tagImpl.parse) { - this.tagImpl.parse(token, tokens); - } - } - }; - - function register(name, tag) { - tagImpls[name] = tag; - } - - function construct(token, tokens) { - var instance = create(_tagInstance); - instance.parse(token, tokens); - return instance; - } - - function clear() { - tagImpls = {}; - } - - return { - construct: construct, - register: register, - clear: clear - }; -} - -var valueRE = new RegExp('' + value.source, 'g'); - -function Filter (options) { - options = assign({}, options); - var filters = {}; - - var _filterInstance = { - render: function render(output, scope) { - var args = this.args.map(function (arg) { - return evalValue(arg, scope); - }); - args.unshift(output); - return this.filter.apply(null, args); - }, - parse: function parse(str) { - var match = filterLine.exec(str); - assert(match, 'illegal filter: ' + str); - - var name = match[1]; - var argList = match[2] || ''; - var filter$$1 = filters[name]; - if (typeof filter$$1 !== 'function') { - if (options.strict_filters) { - throw new TypeError('undefined filter: ' + name); - } - this.name = name; - this.filter = function (x) { - return x; - }; - this.args = []; - return this; - } - - var args = []; - while (match = valueRE.exec(argList.trim())) { - var v = match[0]; - var re = new RegExp(v + '\\s*:', 'g'); - var keyMatch = re.exec(match.input); - var currentMatchIsKey = keyMatch && keyMatch.index === match.index; - currentMatchIsKey ? args.push('\'' + v + '\'') : args.push(v); - } - - this.name = name; - this.filter = filter$$1; - this.args = args; - - return this; - } - }; - - function construct(str) { - var instance = create(_filterInstance); - return instance.parse(str); - } - - function register(name, filter$$1) { - filters[name] = filter$$1; - } - - function clear() { - filters = {}; - } - - return { - construct: construct, register: register, clear: clear - }; -} - -function Parser (Tag, Filter) { - var stream = { - init: function init(tokens) { - this.tokens = tokens; - this.handlers = {}; - return this; - }, - on: function on(name, cb) { - this.handlers[name] = cb; - return this; - }, - trigger: function trigger(event, arg) { - var h = this.handlers[event]; - if (typeof h === 'function') { - h(arg); - return true; - } - }, - start: function start() { - this.trigger('start'); - var token = void 0; - while (!this.stopRequested && (token = this.tokens.shift())) { - if (this.trigger('token', token)) continue; - if (token.type === 'tag' && this.trigger('tag:' + token.name, token)) { - continue; - } - var template = parseToken(token, this.tokens); - this.trigger('template', template); - } - if (!this.stopRequested) this.trigger('end'); - return this; - }, - stop: function stop() { - this.stopRequested = true; - return this; - } - }; - - function parse(tokens) { - var token = void 0; - var templates = []; - while (token = tokens.shift()) { - templates.push(parseToken(token, tokens)); - } - return templates; - } - - function parseToken(token, tokens) { - try { - var tpl = null; - if (token.type === 'tag') { - tpl = parseTag(token, tokens); - } else if (token.type === 'value') { - tpl = parseValue(token.value); - } else { - // token.type === 'html' - tpl = token; - } - tpl.token = token; - return tpl; - } catch (e) { - throw new ParseError(e, token); - } - } - - function parseTag(token, tokens) { - if (token.name === 'continue' || token.name === 'break') return token; - return Tag.construct(token, tokens); - } - - function parseValue(str) { - var match = matchValue(str); - assert(match, 'illegal value string: ' + str); - - var initial = match[0]; - str = str.substr(match.index + match[0].length); - - var filters = []; - while (match = filter.exec(str)) { - filters.push([match[0].trim()]); - } - - return { - type: 'value', - initial: initial, - filters: filters.map(function (str) { - return Filter.construct(str); - }) - }; - } - - function parseStream(tokens) { - var s = create(stream); - return s.init(tokens); - } - - return { - parse: parse, - parseTag: parseTag, - parseStream: parseStream, - parseValue: parseValue - }; -} - -function For (liquid, Liquid) { - var render = function () { - var _ref = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(scope, hash$$1) { - var _this2 = this; - - var collection, offset, limit, contexts, html, finished; - return regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - collection = Liquid.evalExp(this.collection, scope); - - - if (!isArray(collection)) { - if (isString(collection) && collection.length > 0) { - collection = [collection]; - } else if (isObject(collection)) { - collection = Object.keys(collection).map(function (key) { - return [key, collection[key]]; - }); - } - } - - if (!(!isArray(collection) || !collection.length)) { - _context2.next = 4; - break; - } - - return _context2.abrupt('return', liquid.renderer.renderTemplates(this.elseTemplates, scope)); - - case 4: - offset = hash$$1.offset || 0; - limit = hash$$1.limit === undefined ? collection.length : hash$$1.limit; - - - collection = collection.slice(offset, offset + limit); - if (this.reversed) collection.reverse(); - - contexts = collection.map(function (item, i) { - var ctx = {}; - ctx[_this2.variable] = item; - ctx.forloop = { - first: i === 0, - index: i + 1, - index0: i, - last: i === collection.length - 1, - length: collection.length, - rindex: collection.length - i, - rindex0: collection.length - i - 1 - }; - return ctx; - }); - html = ''; - finished = false; - _context2.next = 13; - return mapSeries(contexts, function () { - var _ref2 = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(context) { - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - if (!finished) { - _context.next = 2; - break; - } - - return _context.abrupt('return'); - - case 2: - - scope.push(context); - _context.prev = 3; - _context.next = 6; - return liquid.renderer.renderTemplates(_this2.templates, scope); - - case 6: - html += _context.sent; - _context.next = 17; - break; - - case 9: - _context.prev = 9; - _context.t0 = _context['catch'](3); - - if (!(_context.t0 instanceof RenderBreakError)) { - _context.next = 16; - break; - } - - html += _context.t0.resolvedHTML; - if (_context.t0.message === 'break') { - finished = true; - } - _context.next = 17; - break; - - case 16: - throw _context.t0; - - case 17: - scope.pop(context); - - case 18: - case 'end': - return _context.stop(); - } - } - }, _callee, _this2, [[3, 9]]); - })); - - return function (_x3) { - return _ref2.apply(this, arguments); - }; - }()); - - case 13: - return _context2.abrupt('return', html); - - case 14: - case 'end': - return _context2.stop(); - } - } - }, _callee2, this); - })); - - return function render(_x, _x2) { - return _ref.apply(this, arguments); - }; - }(); - - var RenderBreakError = Liquid.Types.RenderBreakError; - var re = new RegExp('^(' + identifier.source + ')\\s+in\\s+' + ('(' + value.source + ')') + ('(?:\\s+' + hash.source + ')*') + '(?:\\s+(reversed))?' + ('(?:\\s+' + hash.source + ')*$')); - - liquid.registerTag('for', { parse: parse, render: render }); - - function parse(tagToken, remainTokens) { - var _this = this; - - var match = re.exec(tagToken.args); - assert(match, 'illegal tag: ' + tagToken.raw); - this.variable = match[1]; - this.collection = match[2]; - this.reversed = !!match[3]; - - this.templates = []; - this.elseTemplates = []; - - var p = void 0; - var stream = liquid.parser.parseStream(remainTokens).on('start', function () { - return p = _this.templates; - }).on('tag:else', function () { - return p = _this.elseTemplates; - }).on('tag:endfor', function () { - return stream.stop(); - }).on('template', function (tpl) { - return p.push(tpl); - }).on('end', function () { - throw new Error('tag ' + tagToken.raw + ' not closed'); - }); - - stream.start(); - } -} - -function Assign (liquid, Liquid) { - var re = new RegExp('(' + identifier.source + ')\\s*=([^]*)'); - var AssignScope = Liquid.Types.AssignScope; - - - liquid.registerTag('assign', { - parse: function parse(token) { - var match = token.args.match(re); - assert(match, 'illegal token ' + token.raw); - this.key = match[1]; - this.value = match[2]; - }, - render: function render(scope) { - var ctx = create(AssignScope); - ctx[this.key] = liquid.evalValue(this.value, scope); - scope.push(ctx); - return Promise.resolve(''); - } - }); -} - -function Capture (liquid, Liquid) { - var re = new RegExp('(' + identifier.source + ')'); - var CaptureScope = Liquid.Types.CaptureScope; - - - liquid.registerTag('capture', { - parse: function parse(tagToken, remainTokens) { - var _this = this; - - var match = tagToken.args.match(re); - assert(match, tagToken.args + ' not valid identifier'); - - this.variable = match[1]; - this.templates = []; - - var stream = liquid.parser.parseStream(remainTokens); - stream.on('tag:endcapture', function (token) { - return stream.stop(); - }).on('template', function (tpl) { - return _this.templates.push(tpl); - }).on('end', function (x) { - throw new Error('tag ' + tagToken.raw + ' not closed'); - }); - stream.start(); - }, - render: function () { - var _ref = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(scope, hash$$1) { - var html, ctx; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.next = 2; - return liquid.renderer.renderTemplates(this.templates, scope); - - case 2: - html = _context.sent; - ctx = create(CaptureScope); - - ctx[this.variable] = html; - scope.push(ctx); - - case 6: - case 'end': - return _context.stop(); - } - } - }, _callee, this); - })); - - function render(_x, _x2) { - return _ref.apply(this, arguments); - } - - return render; - }() - }); -} - -function Case (liquid, Liquid) { - liquid.registerTag('case', { - - parse: function parse(tagToken, remainTokens) { - var _this = this; - - this.cond = tagToken.args; - this.cases = []; - this.elseTemplates = []; - - var p = []; - var stream = liquid.parser.parseStream(remainTokens).on('tag:when', function (token) { - _this.cases.push({ - val: token.args, - templates: p = [] - }); - }).on('tag:else', function () { - return p = _this.elseTemplates; - }).on('tag:endcase', function (token) { - return stream.stop(); - }).on('template', function (tpl) { - return p.push(tpl); - }).on('end', function (x) { - throw new Error('tag ' + tagToken.raw + ' not closed'); - }); - - stream.start(); - }, - - render: function render(scope, hash) { - for (var i = 0; i < this.cases.length; i++) { - var branch = this.cases[i]; - var val = Liquid.evalExp(branch.val, scope); - var cond = Liquid.evalExp(this.cond, scope); - if (val === cond) { - return liquid.renderer.renderTemplates(branch.templates, scope); - } - } - return liquid.renderer.renderTemplates(this.elseTemplates, scope); - } - }); -} - -function Comment (liquid) { - liquid.registerTag('comment', { - parse: function parse(tagToken, remainTokens) { - var stream = liquid.parser.parseStream(remainTokens); - stream.on('token', function (token) { - if (token.name === 'endcomment') stream.stop(); - }).on('end', function (x) { - throw new Error('tag ' + tagToken.raw + ' not closed'); - }); - stream.start(); - } - }); -} - -var staticFileRE = /[^\s,]+/; - -function Include (liquid, Liquid) { - var withRE = new RegExp('with\\s+(' + value.source + ')'); - - liquid.registerTag('include', { - parse: function parse(token) { - var match = staticFileRE.exec(token.args); - if (match) { - this.staticValue = match[0]; - } - - match = value.exec(token.args); - if (match) { - this.value = match[0]; - } - - match = withRE.exec(token.args); - if (match) { - this.with = match[1]; - } - }, - render: function () { - var _ref = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(scope, hash$$1) { - var filepath, template, originBlocks, originBlockMode, templates, html; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - filepath = void 0; - - if (!scope.opts.dynamicPartials) { - _context.next = 12; - break; - } - - if (!quotedLine.exec(this.value)) { - _context.next = 9; - break; - } - - template = this.value.slice(1, -1); - _context.next = 6; - return liquid.parseAndRender(template, scope.getAll(), scope.opts); - - case 6: - filepath = _context.sent; - _context.next = 10; - break; - - case 9: - filepath = Liquid.evalValue(this.value, scope); - - case 10: - _context.next = 13; - break; - - case 12: - filepath = this.staticValue; - - case 13: - assert(filepath, 'cannot include with empty filename'); - - originBlocks = scope.opts.blocks; - originBlockMode = scope.opts.blockMode; - - - scope.opts.blocks = {}; - scope.opts.blockMode = 'output'; - if (this.with) { - hash$$1[filepath] = Liquid.evalValue(this.with, scope); - } - _context.next = 21; - return liquid.getTemplate(filepath, scope.opts.root); - - case 21: - templates = _context.sent; - - scope.push(hash$$1); - _context.next = 25; - return liquid.renderer.renderTemplates(templates, scope); - - case 25: - html = _context.sent; - - scope.pop(hash$$1); - scope.opts.blocks = originBlocks; - scope.opts.blockMode = originBlockMode; - return _context.abrupt('return', html); - - case 30: - case 'end': - return _context.stop(); - } - } - }, _callee, this); - })); - - function render(_x, _x2) { - return _ref.apply(this, arguments); - } - - return render; - }() - }); -} - -function Decrement (liquid, Liquid) { - var _Liquid$Types = Liquid.Types, - CaptureScope = _Liquid$Types.CaptureScope, - AssignScope = _Liquid$Types.AssignScope, - DecrementScope = _Liquid$Types.DecrementScope; - - - liquid.registerTag('decrement', { - parse: function parse(token) { - var match = token.args.match(identifier); - assert(match, 'illegal identifier ' + token.args); - this.variable = match[0]; - }, - render: function render(scope, hash$$1) { - var context = scope.findContextFor(this.variable, function (ctx) { - var proto = Object.getPrototypeOf(ctx); - return proto !== CaptureScope && proto !== AssignScope; - }); - if (!context) { - context = create(DecrementScope); - scope.unshift(context); - } - if (typeof context[this.variable] !== 'number') { - context[this.variable] = 0; - } - return --context[this.variable]; - } - }); -} - -function Cycle (liquid, Liquid) { - var groupRE = new RegExp('^(?:(' + value.source + ')\\s*:\\s*)?(.*)$'); - var candidatesRE = new RegExp(value.source, 'g'); - - liquid.registerTag('cycle', { - - parse: function parse(tagToken, remainTokens) { - var match = groupRE.exec(tagToken.args); - assert(match, 'illegal tag: ' + tagToken.raw); - - this.group = match[1] || ''; - var candidates = match[2]; - - this.candidates = []; - - while (match = candidatesRE.exec(candidates)) { - this.candidates.push(match[0]); - } - assert(this.candidates.length, 'empty candidates: ' + tagToken.raw); - }, - - render: function render(scope, hash$$1) { - var group = Liquid.evalValue(this.group, scope); - var fingerprint = 'cycle:' + group + ':' + this.candidates.join(','); - - var groups = scope.opts.groups = scope.opts.groups || {}; - var idx = groups[fingerprint]; - - if (idx === undefined) { - idx = groups[fingerprint] = 0; - } - - var candidate = this.candidates[idx]; - idx = (idx + 1) % this.candidates.length; - groups[fingerprint] = idx; - - return Liquid.evalValue(candidate, scope); - } - }); -} - -function If (liquid, Liquid) { - liquid.registerTag('if', { - - parse: function parse(tagToken, remainTokens) { - var _this = this; - - this.branches = []; - this.elseTemplates = []; - - var p = void 0; - var stream = liquid.parser.parseStream(remainTokens).on('start', function () { - return _this.branches.push({ - cond: tagToken.args, - templates: p = [] - }); - }).on('tag:elsif', function (token) { - _this.branches.push({ - cond: token.args, - templates: p = [] - }); - }).on('tag:else', function () { - return p = _this.elseTemplates; - }).on('tag:endif', function (token) { - return stream.stop(); - }).on('template', function (tpl) { - return p.push(tpl); - }).on('end', function (x) { - throw new Error('tag ' + tagToken.raw + ' not closed'); - }); - - stream.start(); - }, - - render: function render(scope, hash) { - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = this.branches[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var branch = _step.value; - - var cond = Liquid.evalExp(branch.cond, scope); - if (Liquid.isTruthy(cond)) { - return liquid.renderer.renderTemplates(branch.templates, scope); - } - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - return liquid.renderer.renderTemplates(this.elseTemplates, scope); - } - }); -} - -function Increment (liquid, Liquid) { - var _Liquid$Types = Liquid.Types, - CaptureScope = _Liquid$Types.CaptureScope, - AssignScope = _Liquid$Types.AssignScope, - IncrementScope = _Liquid$Types.IncrementScope; - - - liquid.registerTag('increment', { - parse: function parse(token) { - var match = token.args.match(identifier); - assert(match, 'illegal identifier ' + token.args); - this.variable = match[0]; - }, - render: function render(scope, hash$$1) { - var context = scope.findContextFor(this.variable, function (ctx) { - var proto = Object.getPrototypeOf(ctx); - return proto !== CaptureScope && proto !== AssignScope; - }); - if (!context) { - context = create(IncrementScope); - scope.unshift(context); - } - if (typeof context[this.variable] !== 'number') { - context[this.variable] = 0; - } - var val = context[this.variable]; - context[this.variable]++; - return val; - } - }); -} - -/* - * blockMode: - * * "store": store rendered html into blocks - * * "output": output rendered html - */ - -function Layout (liquid, Liquid) { - var staticFileRE = /\S+/; - - liquid.registerTag('layout', { - parse: function parse(token, remainTokens) { - var match = staticFileRE.exec(token.args); - if (match) { - this.staticLayout = match[0]; - } - - match = value.exec(token.args); - if (match) { - this.layout = match[0]; - } - - this.tpls = liquid.parser.parse(remainTokens); - }, - render: function () { - var _ref = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(scope, hash$$1) { - var layout, html, templates, partial; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - layout = scope.opts.dynamicPartials ? Liquid.evalValue(this.layout, scope) : this.staticLayout; - - assert(layout, 'cannot apply layout with empty filename'); - - // render the remaining tokens immediately - scope.opts.blockMode = 'store'; - _context.next = 5; - return liquid.renderer.renderTemplates(this.tpls, scope); - - case 5: - html = _context.sent; - - if (scope.opts.blocks[''] === undefined) { - scope.opts.blocks[''] = html; - } - _context.next = 9; - return liquid.getTemplate(layout, scope.opts.root); - - case 9: - templates = _context.sent; - - scope.push(hash$$1); - scope.opts.blockMode = 'output'; - _context.next = 14; - return liquid.renderer.renderTemplates(templates, scope); - - case 14: - partial = _context.sent; - - scope.pop(hash$$1); - return _context.abrupt('return', partial); - - case 17: - case 'end': - return _context.stop(); - } - } - }, _callee, this); - })); - - function render(_x, _x2) { - return _ref.apply(this, arguments); - } - - return render; - }() - }); - - liquid.registerTag('block', { - parse: function parse(token, remainTokens) { - var _this = this; - - var match = /\w+/.exec(token.args); - this.block = match ? match[0] : ''; - - this.tpls = []; - var stream = liquid.parser.parseStream(remainTokens).on('tag:endblock', function () { - return stream.stop(); - }).on('template', function (tpl) { - return _this.tpls.push(tpl); - }).on('end', function () { - throw new Error('tag ' + token.raw + ' not closed'); - }); - stream.start(); - }, - render: function () { - var _ref2 = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(scope) { - var childDefined, html; - return regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - childDefined = scope.opts.blocks[this.block]; - - if (!(childDefined !== undefined)) { - _context2.next = 5; - break; - } - - _context2.t0 = childDefined; - _context2.next = 8; - break; - - case 5: - _context2.next = 7; - return liquid.renderer.renderTemplates(this.tpls, scope); - - case 7: - _context2.t0 = _context2.sent; - - case 8: - html = _context2.t0; - - if (!(scope.opts.blockMode === 'store')) { - _context2.next = 12; - break; - } - - scope.opts.blocks[this.block] = html; - return _context2.abrupt('return', ''); - - case 12: - return _context2.abrupt('return', html); - - case 13: - case 'end': - return _context2.stop(); - } - } - }, _callee2, this); - })); - - function render(_x3) { - return _ref2.apply(this, arguments); - } - - return render; - }() - }); -} - -function Raw (liquid) { - liquid.registerTag('raw', { - parse: function parse(tagToken, remainTokens) { - var _this = this; - - this.tokens = []; - - var stream = liquid.parser.parseStream(remainTokens); - stream.on('token', function (token) { - if (token.name === 'endraw') stream.stop();else _this.tokens.push(token); - }).on('end', function () { - throw new Error('tag ' + tagToken.raw + ' not closed'); - }); - stream.start(); - }, - render: function render(scope, hash) { - return this.tokens.map(function (token) { - return token.raw; - }).join(''); - } - }); -} - -function Tablerow (liquid, Liquid) { - var re = new RegExp('^(' + identifier.source + ')\\s+in\\s+' + ('(' + value.source + ')') + ('(?:\\s+' + hash.source + ')*$')); - - liquid.registerTag('tablerow', { - - parse: function parse(tagToken, remainTokens) { - var _this = this; - - var match = re.exec(tagToken.args); - assert(match, 'illegal tag: ' + tagToken.raw); - - this.variable = match[1]; - this.collection = match[2]; - this.templates = []; - - var p = void 0; - var stream = liquid.parser.parseStream(remainTokens).on('start', function () { - return p = _this.templates; - }).on('tag:endtablerow', function (token) { - return stream.stop(); - }).on('template', function (tpl) { - return p.push(tpl); - }).on('end', function () { - throw new Error('tag ' + tagToken.raw + ' not closed'); - }); - - stream.start(); - }, - - render: function () { - var _ref = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(scope, hash$$1) { - var _this2 = this; - - var collection, offset, limit, cols, contexts, row, html; - return regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - collection = Liquid.evalExp(this.collection, scope) || []; - offset = hash$$1.offset || 0; - limit = hash$$1.limit === undefined ? collection.length : hash$$1.limit; - - - collection = collection.slice(offset, offset + limit); - cols = hash$$1.cols || collection.length; - contexts = collection.map(function (item, i) { - var ctx = {}; - ctx[_this2.variable] = item; - return ctx; - }); - row = void 0; - html = ''; - _context2.next = 10; - return mapSeries(contexts, function () { - var _ref2 = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(context, idx) { - var col; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - row = Math.floor(idx / cols) + 1; - col = idx % cols + 1; - - if (col === 1) { - if (row !== 1) { - html += ''; - } - html += ''; - } - - html += ''; - scope.push(context); - _context.next = 7; - return liquid.renderer.renderTemplates(_this2.templates, scope); - - case 7: - html += _context.sent; - - html += ''; - scope.pop(context); - return _context.abrupt('return', html); - - case 11: - case 'end': - return _context.stop(); - } - } - }, _callee, _this2); - })); - - return function (_x3, _x4) { - return _ref2.apply(this, arguments); - }; - }()); - - case 10: - if (row > 0) { - html += ''; - } - return _context2.abrupt('return', html); - - case 12: - case 'end': - return _context2.stop(); - } - } - }, _callee2, this); - })); - - function render(_x, _x2) { - return _ref.apply(this, arguments); - } - - return render; - }() - }); -} - -function Unless (liquid, Liquid) { - liquid.registerTag('unless', { - parse: function parse(tagToken, remainTokens) { - var _this = this; - - this.templates = []; - this.elseTemplates = []; - var p = void 0; - var stream = liquid.parser.parseStream(remainTokens).on('start', function (x) { - p = _this.templates; - _this.cond = tagToken.args; - }).on('tag:else', function () { - return p = _this.elseTemplates; - }).on('tag:endunless', function (token) { - return stream.stop(); - }).on('template', function (tpl) { - return p.push(tpl); - }).on('end', function (x) { - throw new Error('tag ' + tagToken.raw + ' not closed'); - }); - - stream.start(); - }, - - render: function render(scope, hash) { - var cond = Liquid.evalExp(this.cond, scope); - return Liquid.isFalsy(cond) ? liquid.renderer.renderTemplates(this.templates, scope) : liquid.renderer.renderTemplates(this.elseTemplates, scope); - } - }); -} - -function tags (engine, Liquid) { - Assign(engine, Liquid); - Capture(engine, Liquid); - Case(engine, Liquid); - Comment(engine, Liquid); - Cycle(engine, Liquid); - Decrement(engine, Liquid); - For(engine, Liquid); - If(engine, Liquid); - Include(engine, Liquid); - Increment(engine, Liquid); - Layout(engine, Liquid); - Raw(engine, Liquid); - Tablerow(engine, Liquid); - Unless(engine, Liquid); -} - -var monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; -var dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; -var monthNamesShort = monthNames.map(abbr); -var dayNamesShort = dayNames.map(abbr); -var suffixes = { - 1: 'st', - 2: 'nd', - 3: 'rd', - 'default': 'th' -}; - -function abbr(str) { - return str.slice(0, 3); -} - -// prototype extensions -var _date = { - daysInMonth: function daysInMonth(d) { - var feb = _date.isLeapYear(d) ? 29 : 28; - return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - }, - - getDayOfYear: function getDayOfYear(d) { - var num = 0; - for (var i = 0; i < d.getMonth(); ++i) { - num += _date.daysInMonth(d)[i]; - } - return num + d.getDate(); - }, - - // Startday is an integer of which day to start the week measuring from - // TODO: that comment was retarted. fix it. - getWeekOfYear: function getWeekOfYear(d, startDay) { - // Skip to startDay of this week - var now = this.getDayOfYear(d) + (startDay - d.getDay()); - // Find the first startDay of the year - var jan1 = new Date(d.getFullYear(), 0, 1); - var then = 7 - jan1.getDay() + startDay; - return _number.pad(Math.floor((now - then) / 7) + 1, 2); - }, - - isLeapYear: function isLeapYear(d) { - var year = d.getFullYear(); - return !!((year & 3) === 0 && (year % 100 || year % 400 === 0 && year)); - }, - - getSuffix: function getSuffix(d) { - var str = d.getDate().toString(); - var index = parseInt(str.slice(-1)); - return suffixes[index] || suffixes['default']; - }, - - century: function century(d) { - return parseInt(d.getFullYear().toString().substring(0, 2), 10); - } -}; - -var _number = { - pad: function pad(value, size, ch) { - if (!ch) ch = '0'; - var result = value.toString(); - var pad = size - result.length; - - while (pad-- > 0) { - result = ch + result; - } - - return result; - } -}; - -var formatCodes = { - a: function a(d) { - return dayNamesShort[d.getDay()]; - }, - A: function A(d) { - return dayNames[d.getDay()]; - }, - b: function b(d) { - return monthNamesShort[d.getMonth()]; - }, - B: function B(d) { - return monthNames[d.getMonth()]; - }, - c: function c(d) { - return d.toLocaleString(); - }, - C: function C(d) { - return _date.century(d); - }, - d: function d(_d) { - return _number.pad(_d.getDate(), 2); - }, - e: function e(d) { - return _number.pad(d.getDate(), 2, ' '); - }, - H: function H(d) { - return _number.pad(d.getHours(), 2); - }, - I: function I(d) { - return _number.pad(d.getHours() % 12 || 12, 2); - }, - j: function j(d) { - return _number.pad(_date.getDayOfYear(d), 3); - }, - k: function k(d) { - return _number.pad(d.getHours(), 2, ' '); - }, - l: function l(d) { - return _number.pad(d.getHours() % 12 || 12, 2, ' '); - }, - L: function L(d) { - return _number.pad(d.getMilliseconds(), 3); - }, - m: function m(d) { - return _number.pad(d.getMonth() + 1, 2); - }, - M: function M(d) { - return _number.pad(d.getMinutes(), 2); - }, - p: function p(d) { - return d.getHours() < 12 ? 'AM' : 'PM'; - }, - P: function P(d) { - return d.getHours() < 12 ? 'am' : 'pm'; - }, - q: function q(d) { - return _date.getSuffix(d); - }, - s: function s(d) { - return Math.round(d.valueOf() / 1000); - }, - S: function S(d) { - return _number.pad(d.getSeconds(), 2); - }, - u: function u(d) { - return d.getDay() || 7; - }, - U: function U(d) { - return _date.getWeekOfYear(d, 0); - }, - w: function w(d) { - return d.getDay(); - }, - W: function W(d) { - return _date.getWeekOfYear(d, 1); - }, - x: function x(d) { - return d.toLocaleDateString(); - }, - X: function X(d) { - return d.toLocaleTimeString(); - }, - y: function y(d) { - return d.getFullYear().toString().substring(2, 4); - }, - Y: function Y(d) { - return d.getFullYear(); - }, - z: function z(d) { - var tz = d.getTimezoneOffset() / 60 * 100; - return (tz > 0 ? '-' : '+') + _number.pad(Math.abs(tz), 4); - }, - '%': function _() { - return '%'; - } -}; -formatCodes.h = formatCodes.b; -formatCodes.N = formatCodes.L; - -function strftime (d, format) { - var output = ''; - var remaining = format; - - while (true) { - var r = /%./g; - var results = r.exec(remaining); - - // No more format codes. Add the remaining text and return - if (!results) { - return output + remaining; - } - - // Add the preceding text - output += remaining.slice(0, r.lastIndex - 2); - remaining = remaining.slice(r.lastIndex); - - // Add the format code - var ch = results[0].charAt(1); - var func = formatCodes[ch]; - output += func ? func.call(this, d) : '%' + ch; - } -} - -var escapeMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' -}; -var unescapeMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': "'" -}; - -var filters = { - 'abs': function abs(v) { - return Math.abs(v); - }, - 'append': function append(v, arg) { - return v + arg; - }, - 'capitalize': function capitalize(str) { - return stringify$1(str).charAt(0).toUpperCase() + str.slice(1); - }, - 'ceil': function ceil(v) { - return Math.ceil(v); - }, - 'concat': function concat(v, arg) { - return Array.prototype.concat.call(v, arg); - }, - 'date': function date(v, arg) { - var date = v; - if (v === 'now') { - date = new Date(); - } else if (isString(v)) { - date = new Date(v); - } - return isValidDate(date) ? strftime(date, arg) : v; - }, - 'default': function _default(v, arg) { - return isTruthy(v) ? v : arg; - }, - 'divided_by': function divided_by(v, arg) { - return v / arg; - }, - 'downcase': function downcase(v) { - return v.toLowerCase(); - }, - 'escape': escape, - - 'escape_once': function escape_once(str) { - return escape(unescape(str)); - }, - 'first': function first(v) { - return v[0]; - }, - 'floor': function floor(v) { - return Math.floor(v); - }, - 'join': function join(v, arg) { - return v.join(arg === undefined ? ' ' : arg); - }, - 'last': function last$$1(v) { - return last(v); - }, - 'lstrip': function lstrip(v) { - return stringify$1(v).replace(/^\s+/, ''); - }, - 'map': function map(arr, arg) { - return arr.map(function (v) { - return v[arg]; - }); - }, - 'minus': bindFixed(function (v, arg) { - return v - arg; - }), - 'modulo': bindFixed(function (v, arg) { - return v % arg; - }), - 'newline_to_br': function newline_to_br(v) { - return v.replace(/\n/g, '
'); - }, - 'plus': bindFixed(function (v, arg) { - return Number(v) + Number(arg); - }), - 'prepend': function prepend(v, arg) { - return arg + v; - }, - 'remove': function remove(v, arg) { - return v.split(arg).join(''); - }, - 'remove_first': function remove_first(v, l) { - return v.replace(l, ''); - }, - 'replace': function replace(v, pattern, replacement) { - return stringify$1(v).split(pattern).join(replacement); - }, - 'replace_first': function replace_first(v, arg1, arg2) { - return stringify$1(v).replace(arg1, arg2); - }, - 'reverse': function reverse(v) { - return v.reverse(); - }, - 'round': function round(v, arg) { - var amp = Math.pow(10, arg || 0); - return Math.round(v * amp, arg) / amp; - }, - 'rstrip': function rstrip(str) { - return stringify$1(str).replace(/\s+$/, ''); - }, - 'size': function size(v) { - return v.length; - }, - 'slice': function slice(v, begin, length) { - if (length === undefined) length = 1; - return v.slice(begin, begin + length); - }, - 'sort': function sort(v, arg) { - return v.sort(arg); - }, - 'split': function split(v, arg) { - return stringify$1(v).split(arg); - }, - 'strip': function strip(v) { - return stringify$1(v).trim(); - }, - 'strip_html': function strip_html(v) { - return stringify$1(v).replace(/|||<.*?>/g, ''); - }, - 'strip_newlines': function strip_newlines(v) { - return stringify$1(v).replace(/\n/g, ''); - }, - 'times': function times(v, arg) { - return v * arg; - }, - 'truncate': function truncate(v, l, o) { - v = stringify$1(v); - o = o === undefined ? '...' : o; - l = l || 16; - if (v.length <= l) return v; - return v.substr(0, l - o.length) + o; - }, - 'truncatewords': function truncatewords(v, l, o) { - if (o === undefined) o = '...'; - var arr = v.split(' '); - var ret = arr.slice(0, l).join(' '); - if (arr.length > l) ret += o; - return ret; - }, - 'uniq': function uniq$$1(arr) { - var u = {}; - return (arr || []).filter(function (val) { - if (u.hasOwnProperty(val)) { - return false; - } - u[val] = true; - return true; - }); - }, - 'upcase': function upcase(str) { - return stringify$1(str).toUpperCase(); - }, - 'url_decode': function url_decode(x) { - return x.split('+').map(decodeURIComponent).join(' '); - }, - 'url_encode': function url_encode(x) { - return x.split(' ').map(encodeURIComponent).join('+'); - } -}; - -function escape(str) { - return stringify$1(str).replace(/&|<|>|"|'/g, function (m) { - return escapeMap[m]; - }); -} - -function unescape(str) { - return stringify$1(str).replace(/&(amp|lt|gt|#34|#39);/g, function (m) { - return unescapeMap[m]; - }); -} - -function getFixed(v) { - var p = (v + '').split('.'); - return p.length > 1 ? p[1].length : 0; -} - -function getMaxFixed(l, r) { - return Math.max(getFixed(l), getFixed(r)); -} - -function stringify$1(obj) { - return obj + ''; -} - -function bindFixed(cb) { - return function (l, r) { - var f = getMaxFixed(l, r); - return cb(l, r).toFixed(f); - }; -} - -function isValidDate(date) { - return date instanceof Date && !isNaN(date.getTime()); -} - -function registerAll(liquid) { - return forOwn(filters, function (func, name) { - return liquid.registerFilter(name, func); - }); -} - +var path = require('path'); +var fs = require('fs'); + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +function __awaiter(thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +} + +var toStr = Object.prototype.toString; +var arrToStr = Array.prototype.toString; +/* + * Checks if value is classified as a String primitive or object. + * @param {any} value The value to check. + * @return {Boolean} Returns true if value is a string, else false. + */ +function isString(value) { + return toStr.call(value) === '[object String]'; +} +function isFunction(value) { + return typeof value === 'function'; +} +function promisify(fn) { + return function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return new Promise(function (resolve, reject) { + fn.apply(void 0, args.concat([function (err, result) { + err ? reject(err) : resolve(result); + }])); + }); + }; +} +function stringify(value) { + if (isNil(value)) + return String(value); + if (isFunction(value.to_liquid)) + return stringify(value.to_liquid()); + if (isFunction(value.toLiquid)) + return stringify(value.toLiquid()); + if (isFunction(value.to_s)) + return value.to_s(); + if ([toStr, arrToStr].indexOf(value.toString) > -1) + return defaultToString(value); + if (isFunction(value.toString)) + return value.toString(); + return toStr.call(value); +} +function defaultToString(value) { + var cache = []; + return JSON.stringify(value, function (key, value) { + if (isObject(value)) { + if (cache.indexOf(value) !== -1) { + return; + } + cache.push(value); + } + return value; + }); +} +function create(proto) { + return Object.create(proto); +} +function isNil(value) { + return value === null || value === undefined; +} +function isArray(value) { + // be compatible with IE 8 + return toStr.call(value) === '[object Array]'; +} +/* + * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property. + * The iteratee is invoked with three arguments: (value, key, object). + * Iteratee functions may exit iteration early by explicitly returning false. + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @return {Object} Returns object. + */ +function forOwn(object, iteratee) { + object = object || {}; + for (var k in object) { + if (object.hasOwnProperty(k)) { + if (iteratee(object[k], k, object) === false) + break; + } + } + return object; +} +/* + * Assigns own enumerable string keyed properties of source objects to the destination object. + * Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * Note: This method mutates object and is loosely based on Object.assign. + * + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @return {Object} Returns object. + */ +function assign(obj) { + var srcs = []; + for (var _i = 1; _i < arguments.length; _i++) { + srcs[_i - 1] = arguments[_i]; + } + obj = isObject(obj) ? obj : {}; + srcs.forEach(function (src) { return binaryAssign(obj, src); }); + return obj; +} +function binaryAssign(target, src) { + for (var key in src) + if (src.hasOwnProperty(key)) + target[key] = src[key]; +} +function last(arr) { + return arr[arr.length - 1]; +} +function uniq(arr) { + var u = {}; + var a = []; + for (var i = 0, l = arr.length; i < l; ++i) { + if (u.hasOwnProperty(arr[i])) { + continue; + } + a.push(arr[i]); + u[arr[i]] = 1; + } + return a; +} +/* + * Checks if value is the language type of Object. + * (e.g. arrays, functions, objects, regexes, new Number(0), and new String('')) + * @param {any} value The value to check. + * @return {Boolean} Returns true if value is an object, else false. + */ +function isObject(value) { + var type = typeof value; + return value !== null && (type === 'object' || type === 'function'); +} +/* + * A function to create flexibly-numbered lists of integers, + * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1. + * Returns a list of integers from start (inclusive) to stop (exclusive), + * incremented (or decremented) by step, exclusive. + * Note that ranges that stop before they start are considered to be zero-length instead of + * negative — if you'd like a negative range, use a negative step. + */ +function range(start, stop, step) { + if (arguments.length === 1) { + stop = start; + start = 0; + } + step = step || 1; + var arr = []; + for (var i = start; i < stop; i += step) { + arr.push(i); + } + return arr; +} + +// quote related +var singleQuoted = /'[^']*'/; +var doubleQuoted = /"[^"]*"/; +var quoted = new RegExp(singleQuoted.source + "|" + doubleQuoted.source); +var quoteBalanced = new RegExp("(?:" + quoted.source + "|[^'\"])*"); +// basic types +var integer = /-?\d+/; +var number = /-?\d+\.?\d*|\.?\d+/; +var bool = /true|false/; +// property access +var identifier = /[\w-]+[?]?/; +var subscript = new RegExp("\\[(?:" + quoted.source + "|[\\w-\\.]+)\\]"); +var literal = new RegExp("(?:" + quoted.source + "|" + bool.source + "|" + number.source + ")"); +var variable = new RegExp(identifier.source + "(?:\\." + identifier.source + "|" + subscript.source + ")*"); +// range related +var rangeLimit = new RegExp("(?:" + variable.source + "|" + number.source + ")"); +var range$1 = new RegExp("\\(" + rangeLimit.source + "\\.\\." + rangeLimit.source + "\\)"); +var rangeCapture = new RegExp("\\((" + rangeLimit.source + ")\\.\\.(" + rangeLimit.source + ")\\)"); +var value = new RegExp("(?:" + variable.source + "|" + literal.source + "|" + range$1.source + ")"); +// hash related +var hash = new RegExp("(?:" + identifier.source + ")\\s*:\\s*(?:" + value.source + ")"); +var hashCapture = new RegExp("(" + identifier.source + ")\\s*:\\s*(" + value.source + ")", 'g'); +// full match +var tagLine = new RegExp("^\\s*(" + identifier.source + ")\\s*([\\s\\S]*)\\s*$"); +var literalLine = new RegExp("^" + literal.source + "$", 'i'); +var variableLine = new RegExp("^" + variable.source + "$"); +var numberLine = new RegExp("^" + number.source + "$"); +var boolLine = new RegExp("^" + bool.source + "$", 'i'); +var quotedLine = new RegExp("^" + quoted.source + "$"); +var rangeLine = new RegExp("^" + rangeCapture.source + "$"); +var integerLine = new RegExp("^" + integer.source + "$"); +// filter related +var valueDeclaration = new RegExp("(?:" + identifier.source + "\\s*:\\s*)?" + value.source); +var valueList = new RegExp(valueDeclaration.source + "(\\s*,\\s*" + valueDeclaration.source + ")*"); +var filter = new RegExp(identifier.source + "(?:\\s*:\\s*" + valueList.source + ")?", 'g'); +var filterCapture = new RegExp("(" + identifier.source + ")(?:\\s*:\\s*(" + valueList.source + "))?"); +var filterLine = new RegExp("^" + filterCapture.source + "$"); +var operators = [ + /\s+or\s+/, + /\s+and\s+/, + /==|!=|<=|>=|<|>|\s+contains\s+/ +]; +function isInteger(str) { + return integerLine.test(str); +} +function isLiteral(str) { + return literalLine.test(str); +} +function isVariable(str) { + return variableLine.test(str); +} +function matchValue(str) { + return value.exec(str); +} +function parseLiteral(str) { + var res = str.match(numberLine); + if (res) { + return Number(str); + } + res = str.match(boolLine); + if (res) { + return str.toLowerCase() === 'true'; + } + res = str.match(quotedLine); + if (res) { + return str.slice(1, -1); + } + throw new TypeError("cannot parse '" + str + "' as literal"); +} + +function captureStack() { + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } +} +var LiquidError = /** @class */ (function () { + function LiquidError(err, token) { + this.input = token.input; + this.line = token.line; + this.file = token.file; + this.originalError = err; + this.token = token; + } + LiquidError.prototype.captureStackTrace = function (obj) { + this.name = obj.constructor.name; + captureStack.call(obj); + var err = this.originalError; + var context = mkContext(this.input, this.line); + this.message = mkMessage(err.message, this.token); + this.stack = context + + '\n' + (this.stack || this.message) + + (err.stack ? '\nFrom ' + err.stack : ''); + }; + return LiquidError; +}()); +var TokenizationError = /** @class */ (function (_super) { + __extends(TokenizationError, _super); + function TokenizationError(message, token) { + var _this = _super.call(this, { message: message }, token) || this; + _super.prototype.captureStackTrace.call(_this, _this); + return _this; + } + return TokenizationError; +}(LiquidError)); +TokenizationError.prototype = create(Error.prototype); +TokenizationError.prototype.constructor = TokenizationError; +var ParseError = /** @class */ (function (_super) { + __extends(ParseError, _super); + function ParseError(err, token) { + var _this = _super.call(this, err, token) || this; + assign(_this, err); + _super.prototype.captureStackTrace.call(_this, _this); + return _this; + } + return ParseError; +}(LiquidError)); +ParseError.prototype = create(Error.prototype); +ParseError.prototype.constructor = ParseError; +var RenderError = /** @class */ (function (_super) { + __extends(RenderError, _super); + function RenderError(err, tpl) { + var _this = _super.call(this, err, tpl.token) || this; + assign(_this, err); + _super.prototype.captureStackTrace.call(_this, _this); + return _this; + } + return RenderError; +}(LiquidError)); +RenderError.prototype = create(Error.prototype); +RenderError.prototype.constructor = RenderError; +var RenderBreakError = /** @class */ (function () { + function RenderBreakError(message) { + captureStack.call(this); + this.message = message + ''; + } + return RenderBreakError; +}()); +RenderBreakError.prototype = create(Error.prototype); +RenderBreakError.prototype.constructor = RenderBreakError; +var AssertionError = /** @class */ (function () { + function AssertionError(message) { + captureStack.call(this); + this.message = message + ''; + } + return AssertionError; +}()); +AssertionError.prototype = create(Error.prototype); +AssertionError.prototype.constructor = AssertionError; +function mkContext(input, targetLine) { + var lines = input.split('\n'); + var begin = Math.max(targetLine - 2, 1); + var end = Math.min(targetLine + 3, lines.length); + var context = range(begin, end + 1) + .map(function (lineNumber) { + var indicator = (lineNumber === targetLine) ? '>> ' : ' '; + var num = padStart(String(end).length, lineNumber); + var text = lines[lineNumber - 1]; + return "" + indicator + num + "| " + text; + }) + .join('\n'); + return context; +} +function mkMessage(msg, token) { + msg = msg || ''; + if (token.file) { + msg += ', file:' + token.file; + } + if (token.line) { + msg += ', line:' + token.line; + } + return msg; +} +function padStart(length, str) { + str = String(str); + var blank = Array(length - str.length).join(' '); + return blank + str; +} + +function assert (predicate, message) { + if (!predicate) { + message = message || "expect " + predicate + " to be true"; + throw new AssertionError(message); + } +} + +var Scope = /** @class */ (function () { + function Scope(ctx, opts) { + if (ctx === void 0) { ctx = {}; } + var defaultOptions = { + dynamicPartials: true, + strict_variables: false, + strict_filters: false, + blocks: {}, + root: [] + }; + this.opts = assign(defaultOptions, opts); + this.contexts = [ctx || {}]; + } + Scope.prototype.getAll = function () { + return this.contexts.reduce(function (ctx, val) { return assign(ctx, val); }, create(null)); + }; + Scope.prototype.get = function (path$$1) { + var _this = this; + var paths = this.propertyAccessSeq(path$$1); + var scope = this.findContextFor(paths[0]) || last(this.contexts); + return paths.reduce(function (value$$1, key) { return _this.readProperty(value$$1, key); }, scope); + }; + Scope.prototype.set = function (path$$1, v) { + var paths = this.propertyAccessSeq(path$$1); + var scope = this.findContextFor(paths[0]) || last(this.contexts); + paths.some(function (key, i) { + if (!isObject(scope)) { + return true; + } + if (i === paths.length - 1) { + scope[key] = v; + return true; + } + if (undefined === scope[key]) { + scope[key] = {}; + } + scope = scope[key]; + }); + }; + Scope.prototype.unshift = function (ctx) { + return this.contexts.unshift(ctx); + }; + Scope.prototype.push = function (ctx) { + return this.contexts.push(ctx); + }; + Scope.prototype.pop = function (ctx) { + if (!arguments.length) { + return this.contexts.pop(); + } + var i = this.contexts.findIndex(function (scope) { return scope === ctx; }); + if (i === -1) { + throw new TypeError('scope not found, cannot pop'); + } + return this.contexts.splice(i, 1)[0]; + }; + Scope.prototype.findContextFor = function (key, filter$$1) { + if (filter$$1 === void 0) { filter$$1 = (function (arg) { return true; }); } + for (var i = this.contexts.length - 1; i >= 0; i--) { + var candidate = this.contexts[i]; + if (!filter$$1(candidate)) + continue; + if (key in candidate) { + return candidate; + } + } + return null; + }; + Scope.prototype.readProperty = function (obj, key) { + var val; + if (isNil(obj)) { + val = undefined; + } + else { + obj = toLiquid(obj); + val = key === 'size' ? readSize(obj) : obj[key]; + if (isFunction(obj.liquid_method_missing)) { + val = obj.liquid_method_missing(key); + } + } + if (isNil(val) && this.opts.strict_variables) { + throw new TypeError("undefined variable: " + key); + } + return val; + }; + /* + * Parse property access sequence from access string + * @example + * accessSeq("foo.bar") // ['foo', 'bar'] + * accessSeq("foo['bar']") // ['foo', 'bar'] + * accessSeq("foo['b]r']") // ['foo', 'b]r'] + * accessSeq("foo[bar.coo]") // ['foo', 'bar'], for bar.coo == 'bar' + */ + Scope.prototype.propertyAccessSeq = function (str) { + str = String(str); + var seq = []; + var name = ''; + var j; + var i = 0; + while (i < str.length) { + switch (str[i]) { + case '[': + push(); + var delemiter = str[i + 1]; + if (/['"]/.test(delemiter)) { // foo["bar"] + j = str.indexOf(delemiter, i + 2); + assert(j !== -1, "unbalanced " + delemiter + ": " + str); + name = str.slice(i + 2, j); + push(); + i = j + 2; + } + else { // foo[bar.coo] + j = matchRightBracket(str, i + 1); + assert(j !== -1, "unbalanced []: " + str); + name = str.slice(i + 1, j); + if (!isInteger(name)) { // foo[bar] vs. foo[1] + name = String(this.get(name)); + } + push(); + i = j + 1; + } + break; + case '.': // foo.bar, foo[0].bar + push(); + i++; + break; + default: // foo.bar + name += str[i]; + i++; + } + } + push(); + if (!seq.length) { + throw new TypeError("invalid path:\"" + str + "\""); + } + return seq; + function push() { + if (name.length) + seq.push(name); + name = ''; + } + }; + return Scope; +}()); +function toLiquid(obj) { + if (isFunction(obj.to_liquid)) { + return obj.to_liquid(); + } + if (isFunction(obj.toLiquid)) { + return obj.toLiquid(); + } + return obj; +} +function readSize(obj) { + if (!isNil(obj.size)) + return obj.size; + if (isArray(obj) || isString(obj)) + return obj.length; + return obj.size; +} +function matchRightBracket(str, begin) { + var stack = 1; // count of '[' - count of ']' + for (var i = begin; i < str.length; i++) { + if (str[i] === '[') { + stack++; + } + if (str[i] === ']') { + stack--; + if (stack === 0) { + return i; + } + } + } + return -1; +} + +/* + * Call functions in serial until someone resolved. + * @param {Array} iterable the array to iterate with. + * @param {Array} iteratee returns a new promise. + * The iteratee is invoked with three arguments: (value, index, iterable). + */ +function anySeries(iterable, iteratee) { + var ret = Promise.reject(new Error('init')); + iterable.forEach(function (item, idx) { + ret = ret.catch(function (e) { return iteratee(item, idx, iterable); }); + }); + return ret; +} +/* + * Call functions in serial until someone rejected. + * @param {Array} iterable the array to iterate with. + * @param {Array} iteratee returns a new promise. + * The iteratee is invoked with three arguments: (value, index, iterable). + */ +function mapSeries(iterable, iteratee) { + var ret = Promise.resolve('init'); + var result = []; + iterable.forEach(function (item, idx) { + ret = ret + .then(function () { return iteratee(item, idx, iterable); }) + .then(function (x) { return result.push(x); }); + }); + return ret.then(function () { return result; }); +} + +var statFileAsync = promisify(fs.stat); +var readFileAsync = promisify(fs.readFile); +function resolve(filepath, root, options) { + return __awaiter(this, void 0, void 0, function () { + var paths; + var _this = this; + return __generator(this, function (_a) { + if (!path.extname(filepath)) { + filepath += options.extname; + } + root = options.root.concat(root || []); + root = uniq(root); + paths = root.map(function (root) { return path.resolve(root, filepath); }); + return [2 /*return*/, anySeries(paths, function (path$$1) { return __awaiter(_this, void 0, void 0, function () { + var e_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + return [4 /*yield*/, statFileAsync(path$$1)]; + case 1: + _a.sent(); + return [2 /*return*/, path$$1]; + case 2: + e_1 = _a.sent(); + e_1.message = e_1.code + ": Failed to lookup " + filepath + " in: " + root; + throw e_1; + case 3: return [2 /*return*/]; + } + }); + }); })]; + }); + }); +} +function read(filepath) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, readFileAsync(filepath, 'utf8')]; + }); + }); +} + +function whiteSpaceCtrl(tokens, options) { + options = assign({ greedy: true }, options); + var inRaw = false; + tokens.forEach(function (token, i) { + if (shouldTrimLeft(token, inRaw, options)) { + trimLeft(tokens[i - 1], options.greedy); + } + if (token.type === 'tag' && token.name === 'raw') + inRaw = true; + if (token.type === 'tag' && token.name === 'endraw') + inRaw = false; + if (shouldTrimRight(token, inRaw, options)) { + trimRight(tokens[i + 1], options.greedy); + } + }); +} +function shouldTrimLeft(token, inRaw, options) { + if (inRaw) + return false; + if (token.type === 'tag') + return token.trim_left || options.trim_tag_left; + if (token.type === 'value') + return token.trim_left || options.trim_value_left; +} +function shouldTrimRight(token, inRaw, options) { + if (inRaw) + return false; + if (token.type === 'tag') + return token.trim_right || options.trim_tag_right; + if (token.type === 'value') + return token.trim_right || options.trim_value_right; +} +function trimLeft(token, greedy) { + if (!token || token.type !== 'html') + return; + var rLeft = greedy ? /\s+$/g : /[\t\r ]*$/g; + token.value = token.value.replace(rLeft, ''); +} +function trimRight(token, greedy) { + if (!token || token.type !== 'html') + return; + var rRight = greedy ? /^\s+/g : /^[\t\r ]*\n?/g; + token.value = token.value.replace(rRight, ''); +} + +function parse(input, file, options) { + assert(isString(input), 'illegal input'); + var rLiquid = /({%-?([\s\S]*?)-?%})|({{-?([\s\S]*?)-?}})/g; + var currIndent = 0; + var lineNumber = LineNumber(input); + var lastMatchEnd = 0; + var tokens = []; + for (var match = void 0; (match = rLiquid.exec(input)); lastMatchEnd = rLiquid.lastIndex) { + if (match.index > lastMatchEnd) { + tokens.push(parseHTMLToken(lastMatchEnd, match.index)); + } + tokens.push(match[1] + ? parseTagToken(match[1], match[2].trim(), match.index) + : parseValueToken(match[3], match[4].trim(), match.index)); + } + if (input.length > lastMatchEnd) { + tokens.push(parseHTMLToken(lastMatchEnd, input.length)); + } + whiteSpaceCtrl(tokens, options); + return tokens; + function parseTagToken(raw, value$$1, pos) { + var match = value$$1.match(tagLine); + var token = { + type: 'tag', + indent: currIndent, + line: lineNumber.get(pos), + trim_left: raw.slice(0, 3) === '{%-', + trim_right: raw.slice(-3) === '-%}', + raw: raw, + value: value$$1, + input: input, + file: file + }; + if (!match) { + throw new TokenizationError("illegal tag syntax", token); + } + token.name = match[1]; + token.args = match[2]; + return token; + } + function parseValueToken(raw, value$$1, pos) { + return { + type: 'value', + line: lineNumber.get(pos), + trim_left: raw.slice(0, 3) === '{{-', + trim_right: raw.slice(-3) === '-}}', + raw: raw, + value: value$$1, + input: input, + file: file + }; + } + function parseHTMLToken(begin, end) { + var htmlFragment = input.slice(begin, end); + currIndent = last((htmlFragment).split('\n')).length; + return { + type: 'html', + raw: htmlFragment, + value: htmlFragment + }; + } +} +function LineNumber(html) { + var parsedLinesCount = 0; + var lastMatchBegin = -1; + return { + get: function (pos) { + var lines = html.slice(lastMatchBegin + 1, pos).split('\n'); + parsedLinesCount += lines.length - 1; + lastMatchBegin = pos; + return parsedLinesCount + 1; + } + }; +} + +function Operators (isTruthy) { + return { + '==': function (l, r) { return l === r; }, + '!=': function (l, r) { return l !== r; }, + '>': function (l, r) { return l !== null && r !== null && l > r; }, + '<': function (l, r) { return l !== null && r !== null && l < r; }, + '>=': function (l, r) { return l !== null && r !== null && l >= r; }, + '<=': function (l, r) { return l !== null && r !== null && l <= r; }, + 'contains': function (l, r) { + if (!l) + return false; + if (typeof l.indexOf !== 'function') + return false; + return l.indexOf(r) > -1; + }, + 'and': function (l, r) { return isTruthy(l) && isTruthy(r); }, + 'or': function (l, r) { return isTruthy(l) || isTruthy(r); } + }; +} + +var operators$1 = Operators(isTruthy); +function evalExp(exp, scope) { + assert(scope, 'unable to evalExp: scope undefined'); + var operatorREs = operators; + var match; + for (var i = 0; i < operatorREs.length; i++) { + var operatorRE = operatorREs[i]; + var expRE = new RegExp("^(" + quoteBalanced.source + ")(" + operatorRE.source + ")(" + quoteBalanced.source + ")$"); + if ((match = exp.match(expRE))) { + var l = evalExp(match[1], scope); + var op = operators$1[match[2].trim()]; + var r = evalExp(match[3], scope); + return op(l, r); + } + } + if ((match = exp.match(rangeLine))) { + var low = evalValue(match[1], scope); + var high = evalValue(match[2], scope); + var range = []; + for (var j = low; j <= high; j++) { + range.push(j); + } + return range; + } + return evalValue(exp, scope); +} +function evalValue(str, scope) { + str = str && str.trim(); + if (!str) + return undefined; + if (isLiteral(str)) { + return parseLiteral(str); + } + if (isVariable(str)) { + return scope.get(str); + } + throw new TypeError("cannot eval '" + str + "' as value"); +} +function isTruthy(val) { + return !isFalsy(val); +} +function isFalsy(val) { + return val === false || undefined === val || val === null; +} + +var render = { + renderTemplates: function (templates, scope) { + return __awaiter(this, void 0, void 0, function () { + function renderTemplate(template) { + return __awaiter(this, void 0, void 0, function () { + var partial; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!(template.type === 'tag')) return [3 /*break*/, 2]; + return [4 /*yield*/, this.renderTag(template, scope)]; + case 1: + partial = _a.sent(); + return [2 /*return*/, partial === undefined ? '' : partial]; + case 2: + if (template.type === 'value') { + return [2 /*return*/, this.renderValue(template, scope)]; + } + return [2 /*return*/, template.value]; + } + }); + }); + } + var html, _i, templates_1, tpl, _a, e_1; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + assert(scope, 'unable to evalTemplates: scope undefined'); + html = ''; + _i = 0, templates_1 = templates; + _b.label = 1; + case 1: + if (!(_i < templates_1.length)) return [3 /*break*/, 6]; + tpl = templates_1[_i]; + _b.label = 2; + case 2: + _b.trys.push([2, 4, , 5]); + _a = html; + return [4 /*yield*/, renderTemplate.call(this, tpl)]; + case 3: + html = _a + _b.sent(); + return [3 /*break*/, 5]; + case 4: + e_1 = _b.sent(); + if (e_1 instanceof RenderBreakError) { + e_1.resolvedHTML = html; + throw e_1; + } + throw e_1 instanceof RenderError ? e_1 : new RenderError(e_1, tpl); + case 5: + _i++; + return [3 /*break*/, 1]; + case 6: return [2 /*return*/, html]; + } + }); + }); + }, + renderTag: function (template, scope) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + if (template.name === 'continue') { + throw new RenderBreakError('continue'); + } + if (template.name === 'break') { + throw new RenderBreakError('break'); + } + return [2 /*return*/, template.render(scope)]; + }); + }); + }, + renderValue: function (template, scope) { + return __awaiter(this, void 0, void 0, function () { + var partial; + return __generator(this, function (_a) { + partial = this.evalValue(template, scope); + return [2 /*return*/, partial === undefined ? '' : stringify(partial)]; + }); + }); + }, + evalValue: function (template, scope) { + assert(scope, 'unable to evalValue: scope undefined'); + return template.filters.reduce(function (prev, filter) { return filter.render(prev, scope); }, evalExp(template.initial, scope)); + } +}; +function Render () { + var instance = create(render); + return instance; +} + +function hash$1(markup, scope) { + var obj = {}; + var match; + hashCapture.lastIndex = 0; + while ((match = hashCapture.exec(markup))) { + var k = match[1]; + var v = match[2]; + obj[k] = evalValue(v, scope); + } + return obj; +} +function Tag () { + var tagImpls = {}; + var _tagInstance = { + render: function (scope) { + return __awaiter(this, void 0, void 0, function () { + var obj, impl; + return __generator(this, function (_a) { + obj = hash$1(this.token.args, scope); + impl = this.tagImpl; + if (typeof impl.render !== 'function') { + return [2 /*return*/, '']; + } + return [2 /*return*/, impl.render(scope, obj)]; + }); + }); + }, + parse: function (token, tokens) { + this.type = 'tag'; + this.token = token; + this.name = token.name; + var tagImpl = tagImpls[this.name]; + assert(tagImpl, "tag " + this.name + " not found"); + this.tagImpl = create(tagImpl); + if (this.tagImpl.parse) { + this.tagImpl.parse(token, tokens); + } + } + }; + function register(name, tag) { + tagImpls[name] = tag; + } + function construct(token, tokens) { + var instance = create(_tagInstance); + instance.parse(token, tokens); + return instance; + } + function clear() { + tagImpls = {}; + } + return { + construct: construct, + register: register, + clear: clear + }; +} + +var valueRE = new RegExp("" + value.source, 'g'); +function Filter (options) { + options = assign({}, options); + var filters = {}; + var _filterInstance = { + render: function (output, scope) { + var args = this.args.map(function (arg) { return evalValue(arg, scope); }); + args.unshift(output); + return this.filter.apply(null, args); + }, + parse: function (str) { + var match = filterLine.exec(str); + assert(match, 'illegal filter: ' + str); + var name = match[1]; + var argList = match[2] || ''; + var filter$$1 = filters[name]; + if (typeof filter$$1 !== 'function') { + if (options.strict_filters) { + throw new TypeError("undefined filter: " + name); + } + this.name = name; + this.filter = function (x) { return x; }; + this.args = []; + return this; + } + var args = []; + while ((match = valueRE.exec(argList.trim()))) { + var v = match[0]; + var re = new RegExp(v + "\\s*:", 'g'); + var keyMatch = re.exec(match.input); + var currentMatchIsKey = keyMatch && keyMatch.index === match.index; + currentMatchIsKey ? args.push("'" + v + "'") : args.push(v); + } + this.name = name; + this.filter = filter$$1; + this.args = args; + return this; + } + }; + function construct(str) { + var instance = create(_filterInstance); + return instance.parse(str); + } + function register(name, filter$$1) { + filters[name] = filter$$1; + } + function clear() { + filters = {}; + } + return { + construct: construct, register: register, clear: clear + }; +} + +function Parser (Tag, Filter) { + var ParseStream = /** @class */ (function () { + function ParseStream(tokens) { + this.tokens = tokens; + this.handlers = {}; + } + ParseStream.prototype.on = function (name, cb) { + this.handlers[name] = cb; + return this; + }; + ParseStream.prototype.trigger = function (event, arg) { + var h = this.handlers[event]; + if (typeof h === 'function') { + h(arg); + return true; + } + }; + ParseStream.prototype.start = function () { + this.trigger('start'); + var token; + while (!this.stopRequested && (token = this.tokens.shift())) { + if (this.trigger('token', token)) + continue; + if (token.type === 'tag' && + this.trigger("tag:" + token.name, token)) { + continue; + } + var template = parseToken(token, this.tokens); + this.trigger('template', template); + } + if (!this.stopRequested) + this.trigger('end'); + return this; + }; + ParseStream.prototype.stop = function () { + this.stopRequested = true; + return this; + }; + return ParseStream; + }()); + function parse(tokens) { + var token; + var templates = []; + while ((token = tokens.shift())) { + templates.push(parseToken(token, tokens)); + } + return templates; + } + function parseToken(token, tokens) { + try { + var tpl = null; + if (token.type === 'tag') { + tpl = parseTag(token, tokens); + } + else if (token.type === 'value') { + tpl = parseValue(token.value); + } + else { // token.type === 'html' + tpl = token; + } + tpl.token = token; + return tpl; + } + catch (e) { + throw new ParseError(e, token); + } + } + function parseTag(token, tokens) { + if (token.name === 'continue' || token.name === 'break') + return token; + return Tag.construct(token, tokens); + } + function parseValue(str) { + var match = matchValue(str); + assert(match, "illegal value string: " + str); + var initial = match[0]; + str = str.substr(match.index + match[0].length); + var filters = []; + while ((match = filter.exec(str))) { + filters.push([match[0].trim()]); + } + return { + type: 'value', + initial: initial, + filters: filters.map(function (str) { return Filter.construct(str); }) + }; + } + function parseStream(tokens) { + return new ParseStream(tokens); + } + return { + parse: parse, + parseTag: parseTag, + parseStream: parseStream, + parseValue: parseValue + }; +} + +function For (liquid, Liquid) { + var RenderBreakError = Liquid.Types.RenderBreakError; + var re = new RegExp("^(" + identifier.source + ")\\s+in\\s+" + + ("(" + value.source + ")") + + ("(?:\\s+" + hash.source + ")*") + + "(?:\\s+(reversed))?" + + ("(?:\\s+" + hash.source + ")*$")); + liquid.registerTag('for', { parse: parse, render: render }); + function parse(tagToken, remainTokens) { + var _this = this; + var match = re.exec(tagToken.args); + assert(match, "illegal tag: " + tagToken.raw); + this.variable = match[1]; + this.collection = match[2]; + this.reversed = !!match[3]; + this.templates = []; + this.elseTemplates = []; + var p; + var stream = liquid.parser.parseStream(remainTokens) + .on('start', function () { return (p = _this.templates); }) + .on('tag:else', function () { return (p = _this.elseTemplates); }) + .on('tag:endfor', function () { return stream.stop(); }) + .on('template', function (tpl) { return p.push(tpl); }) + .on('end', function () { + throw new Error("tag " + tagToken.raw + " not closed"); + }); + stream.start(); + } + function render(scope, hash$$1) { + return __awaiter(this, void 0, void 0, function () { + var collection, offset, limit, contexts, html, finished; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + collection = Liquid.evalExp(this.collection, scope); + if (!isArray(collection)) { + if (isString(collection) && collection.length > 0) { + collection = [collection]; + } + else if (isObject(collection)) { + collection = Object.keys(collection).map(function (key) { return [key, collection[key]]; }); + } + } + if (!isArray(collection) || !collection.length) { + return [2 /*return*/, liquid.renderer.renderTemplates(this.elseTemplates, scope)]; + } + offset = hash$$1.offset || 0; + limit = (hash$$1.limit === undefined) ? collection.length : hash$$1.limit; + collection = collection.slice(offset, offset + limit); + if (this.reversed) + collection.reverse(); + contexts = collection.map(function (item, i) { + var ctx = {}; + ctx[_this.variable] = item; + ctx.forloop = { + first: i === 0, + index: i + 1, + index0: i, + last: i === collection.length - 1, + length: collection.length, + rindex: collection.length - i, + rindex0: collection.length - i - 1 + }; + return ctx; + }); + html = ''; + finished = false; + return [4 /*yield*/, mapSeries(contexts, function (context) { return __awaiter(_this, void 0, void 0, function () { + var _a, e_1; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if (finished) + return [2 /*return*/]; + scope.push(context); + _b.label = 1; + case 1: + _b.trys.push([1, 3, , 4]); + _a = html; + return [4 /*yield*/, liquid.renderer.renderTemplates(this.templates, scope)]; + case 2: + html = _a + _b.sent(); + return [3 /*break*/, 4]; + case 3: + e_1 = _b.sent(); + if (e_1 instanceof RenderBreakError) { + html += e_1.resolvedHTML; + if (e_1.message === 'break') { + finished = true; + } + } + else + throw e_1; + return [3 /*break*/, 4]; + case 4: + scope.pop(context); + return [2 /*return*/]; + } + }); + }); })]; + case 1: + _a.sent(); + return [2 /*return*/, html]; + } + }); + }); + } +} + +function Assign (liquid, Liquid) { + var re = new RegExp("(" + identifier.source + ")\\s*=([^]*)"); + var AssignScope = Liquid.Types.AssignScope; + liquid.registerTag('assign', { + parse: function (token) { + var match = token.args.match(re); + assert(match, "illegal token " + token.raw); + this.key = match[1]; + this.value = match[2]; + }, + render: function (scope) { + var ctx = create(AssignScope); + ctx[this.key] = liquid.evalValue(this.value, scope); + scope.push(ctx); + return Promise.resolve(''); + } + }); +} + +function Capture (liquid, Liquid) { + var re = new RegExp("(" + identifier.source + ")"); + var CaptureScope = Liquid.Types.CaptureScope; + liquid.registerTag('capture', { + parse: function (tagToken, remainTokens) { + var _this = this; + var match = tagToken.args.match(re); + assert(match, tagToken.args + " not valid identifier"); + this.variable = match[1]; + this.templates = []; + var stream = liquid.parser.parseStream(remainTokens); + stream.on('tag:endcapture', function (token) { return stream.stop(); }) + .on('template', function (tpl) { return _this.templates.push(tpl); }) + .on('end', function (x) { + throw new Error("tag " + tagToken.raw + " not closed"); + }); + stream.start(); + }, + render: function (scope, hash$$1) { + return __awaiter(this, void 0, void 0, function () { + var html, ctx; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, liquid.renderer.renderTemplates(this.templates, scope)]; + case 1: + html = _a.sent(); + ctx = create(CaptureScope); + ctx[this.variable] = html; + scope.push(ctx); + return [2 /*return*/]; + } + }); + }); + } + }); +} + +function Case (liquid, Liquid) { + liquid.registerTag('case', { + parse: function (tagToken, remainTokens) { + var _this = this; + this.cond = tagToken.args; + this.cases = []; + this.elseTemplates = []; + var p = []; + var stream = liquid.parser.parseStream(remainTokens) + .on('tag:when', function (token) { + _this.cases.push({ + val: token.args, + templates: p = [] + }); + }) + .on('tag:else', function () { return (p = _this.elseTemplates); }) + .on('tag:endcase', function (token) { return stream.stop(); }) + .on('template', function (tpl) { return p.push(tpl); }) + .on('end', function (x) { + throw new Error("tag " + tagToken.raw + " not closed"); + }); + stream.start(); + }, + render: function (scope, hash) { + for (var i = 0; i < this.cases.length; i++) { + var branch = this.cases[i]; + var val = Liquid.evalExp(branch.val, scope); + var cond = Liquid.evalExp(this.cond, scope); + if (val === cond) { + return liquid.renderer.renderTemplates(branch.templates, scope); + } + } + return liquid.renderer.renderTemplates(this.elseTemplates, scope); + } + }); +} + +function Comment (liquid) { + liquid.registerTag('comment', { + parse: function (tagToken, remainTokens) { + var stream = liquid.parser.parseStream(remainTokens); + stream + .on('token', function (token) { + if (token.name === 'endcomment') + stream.stop(); + }) + .on('end', function (x) { + throw new Error("tag " + tagToken.raw + " not closed"); + }); + stream.start(); + } + }); +} + +var staticFileRE = /[^\s,]+/; +function Include (liquid, Liquid) { + var withRE = new RegExp("with\\s+(" + value.source + ")"); + liquid.registerTag('include', { + parse: function (token) { + var match = staticFileRE.exec(token.args); + if (match) { + this.staticValue = match[0]; + } + match = value.exec(token.args); + if (match) { + this.value = match[0]; + } + match = withRE.exec(token.args); + if (match) { + this.with = match[1]; + } + }, + render: function (scope, hash$$1) { + return __awaiter(this, void 0, void 0, function () { + var filepath, template, originBlocks, originBlockMode, templates, html; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!scope.opts.dynamicPartials) return [3 /*break*/, 4]; + if (!quotedLine.exec(this.value)) return [3 /*break*/, 2]; + template = this.value.slice(1, -1); + return [4 /*yield*/, liquid.parseAndRender(template, scope.getAll(), scope.opts)]; + case 1: + filepath = _a.sent(); + return [3 /*break*/, 3]; + case 2: + filepath = Liquid.evalValue(this.value, scope); + _a.label = 3; + case 3: return [3 /*break*/, 5]; + case 4: + filepath = this.staticValue; + _a.label = 5; + case 5: + assert(filepath, "cannot include with empty filename"); + originBlocks = scope.opts.blocks; + originBlockMode = scope.opts.blockMode; + scope.opts.blocks = {}; + scope.opts.blockMode = 'output'; + if (this.with) { + hash$$1[filepath] = Liquid.evalValue(this.with, scope); + } + return [4 /*yield*/, liquid.getTemplate(filepath, scope.opts.root)]; + case 6: + templates = _a.sent(); + scope.push(hash$$1); + return [4 /*yield*/, liquid.renderer.renderTemplates(templates, scope)]; + case 7: + html = _a.sent(); + scope.pop(hash$$1); + scope.opts.blocks = originBlocks; + scope.opts.blockMode = originBlockMode; + return [2 /*return*/, html]; + } + }); + }); + } + }); +} + +function Decrement (liquid, Liquid) { + var _a = Liquid.Types, CaptureScope = _a.CaptureScope, AssignScope = _a.AssignScope, DecrementScope = _a.DecrementScope; + liquid.registerTag('decrement', { + parse: function (token) { + var match = token.args.match(identifier); + assert(match, "illegal identifier " + token.args); + this.variable = match[0]; + }, + render: function (scope, hash$$1) { + var context = scope.findContextFor(this.variable, function (ctx) { + var proto = Object.getPrototypeOf(ctx); + return proto !== CaptureScope && proto !== AssignScope; + }); + if (!context) { + context = create(DecrementScope); + scope.unshift(context); + } + if (typeof context[this.variable] !== 'number') { + context[this.variable] = 0; + } + return --context[this.variable]; + } + }); +} + +function Cycle (liquid, Liquid) { + var groupRE = new RegExp("^(?:(" + value.source + ")\\s*:\\s*)?(.*)$"); + var candidatesRE = new RegExp(value.source, 'g'); + liquid.registerTag('cycle', { + parse: function (tagToken, remainTokens) { + var match = groupRE.exec(tagToken.args); + assert(match, "illegal tag: " + tagToken.raw); + this.group = match[1] || ''; + var candidates = match[2]; + this.candidates = []; + while ((match = candidatesRE.exec(candidates))) { + this.candidates.push(match[0]); + } + assert(this.candidates.length, "empty candidates: " + tagToken.raw); + }, + render: function (scope, hash$$1) { + var group = Liquid.evalValue(this.group, scope); + var fingerprint = "cycle:" + group + ":" + this.candidates.join(','); + var groups = scope.opts.groups = scope.opts.groups || {}; + var idx = groups[fingerprint]; + if (idx === undefined) { + idx = groups[fingerprint] = 0; + } + var candidate = this.candidates[idx]; + idx = (idx + 1) % this.candidates.length; + groups[fingerprint] = idx; + return Liquid.evalValue(candidate, scope); + } + }); +} + +function If (liquid, Liquid) { + liquid.registerTag('if', { + parse: function (tagToken, remainTokens) { + var _this = this; + this.branches = []; + this.elseTemplates = []; + var p; + var stream = liquid.parser.parseStream(remainTokens) + .on('start', function () { return _this.branches.push({ + cond: tagToken.args, + templates: (p = []) + }); }) + .on('tag:elsif', function (token) { + _this.branches.push({ + cond: token.args, + templates: p = [] + }); + }) + .on('tag:else', function () { return (p = _this.elseTemplates); }) + .on('tag:endif', function (token) { return stream.stop(); }) + .on('template', function (tpl) { return p.push(tpl); }) + .on('end', function (x) { + throw new Error("tag " + tagToken.raw + " not closed"); + }); + stream.start(); + }, + render: function (scope, hash) { + for (var _i = 0, _a = this.branches; _i < _a.length; _i++) { + var branch = _a[_i]; + var cond = Liquid.evalExp(branch.cond, scope); + if (Liquid.isTruthy(cond)) { + return liquid.renderer.renderTemplates(branch.templates, scope); + } + } + return liquid.renderer.renderTemplates(this.elseTemplates, scope); + } + }); +} + +function Increment (liquid, Liquid) { + var _a = Liquid.Types, CaptureScope = _a.CaptureScope, AssignScope = _a.AssignScope, IncrementScope = _a.IncrementScope; + liquid.registerTag('increment', { + parse: function (token) { + var match = token.args.match(identifier); + assert(match, "illegal identifier " + token.args); + this.variable = match[0]; + }, + render: function (scope, hash$$1) { + var context = scope.findContextFor(this.variable, function (ctx) { + var proto = Object.getPrototypeOf(ctx); + return proto !== CaptureScope && proto !== AssignScope; + }); + if (!context) { + context = create(IncrementScope); + scope.unshift(context); + } + if (typeof context[this.variable] !== 'number') { + context[this.variable] = 0; + } + var val = context[this.variable]; + context[this.variable]++; + return val; + } + }); +} + +/* + * blockMode: + * * "store": store rendered html into blocks + * * "output": output rendered html + */ +function Layout (liquid, Liquid) { + var staticFileRE = /\S+/; + liquid.registerTag('layout', { + parse: function (token, remainTokens) { + var match = staticFileRE.exec(token.args); + if (match) { + this.staticLayout = match[0]; + } + match = value.exec(token.args); + if (match) { + this.layout = match[0]; + } + this.tpls = liquid.parser.parse(remainTokens); + }, + render: function (scope, hash$$1) { + return __awaiter(this, void 0, void 0, function () { + var layout, html, templates, partial; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + layout = scope.opts.dynamicPartials + ? Liquid.evalValue(this.layout, scope) + : this.staticLayout; + assert(layout, "cannot apply layout with empty filename"); + // render the remaining tokens immediately + scope.opts.blockMode = 'store'; + return [4 /*yield*/, liquid.renderer.renderTemplates(this.tpls, scope)]; + case 1: + html = _a.sent(); + if (scope.opts.blocks[''] === undefined) { + scope.opts.blocks[''] = html; + } + return [4 /*yield*/, liquid.getTemplate(layout, scope.opts.root)]; + case 2: + templates = _a.sent(); + scope.push(hash$$1); + scope.opts.blockMode = 'output'; + return [4 /*yield*/, liquid.renderer.renderTemplates(templates, scope)]; + case 3: + partial = _a.sent(); + scope.pop(hash$$1); + return [2 /*return*/, partial]; + } + }); + }); + } + }); + liquid.registerTag('block', { + parse: function (token, remainTokens) { + var _this = this; + var match = /\w+/.exec(token.args); + this.block = match ? match[0] : ''; + this.tpls = []; + var stream = liquid.parser.parseStream(remainTokens) + .on('tag:endblock', function () { return stream.stop(); }) + .on('template', function (tpl) { return _this.tpls.push(tpl); }) + .on('end', function () { + throw new Error("tag " + token.raw + " not closed"); + }); + stream.start(); + }, + render: function (scope) { + return __awaiter(this, void 0, void 0, function () { + var childDefined, html, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + childDefined = scope.opts.blocks[this.block]; + if (!(childDefined !== undefined)) return [3 /*break*/, 1]; + _a = childDefined; + return [3 /*break*/, 3]; + case 1: return [4 /*yield*/, liquid.renderer.renderTemplates(this.tpls, scope)]; + case 2: + _a = _b.sent(); + _b.label = 3; + case 3: + html = _a; + if (scope.opts.blockMode === 'store') { + scope.opts.blocks[this.block] = html; + return [2 /*return*/, '']; + } + return [2 /*return*/, html]; + } + }); + }); + } + }); +} + +function Raw (liquid) { + liquid.registerTag('raw', { + parse: function (tagToken, remainTokens) { + var _this = this; + this.tokens = []; + var stream = liquid.parser.parseStream(remainTokens); + stream + .on('token', function (token) { + if (token.name === 'endraw') + stream.stop(); + else + _this.tokens.push(token); + }) + .on('end', function () { + throw new Error("tag " + tagToken.raw + " not closed"); + }); + stream.start(); + }, + render: function (scope, hash) { + return this.tokens.map(function (token) { return token.raw; }).join(''); + } + }); +} + +function Tablerow (liquid, Liquid) { + var re = new RegExp("^(" + identifier.source + ")\\s+in\\s+" + + ("(" + value.source + ")") + + ("(?:\\s+" + hash.source + ")*$")); + liquid.registerTag('tablerow', { + parse: function (tagToken, remainTokens) { + var _this = this; + var match = re.exec(tagToken.args); + assert(match, "illegal tag: " + tagToken.raw); + this.variable = match[1]; + this.collection = match[2]; + this.templates = []; + var p; + var stream = liquid.parser.parseStream(remainTokens) + .on('start', function () { return (p = _this.templates); }) + .on('tag:endtablerow', function (token) { return stream.stop(); }) + .on('template', function (tpl) { return p.push(tpl); }) + .on('end', function () { + throw new Error("tag " + tagToken.raw + " not closed"); + }); + stream.start(); + }, + render: function (scope, hash$$1) { + return __awaiter(this, void 0, void 0, function () { + var collection, offset, limit, cols, contexts, row, html; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + collection = Liquid.evalExp(this.collection, scope) || []; + offset = hash$$1.offset || 0; + limit = (hash$$1.limit === undefined) ? collection.length : hash$$1.limit; + collection = collection.slice(offset, offset + limit); + cols = hash$$1.cols || collection.length; + contexts = collection.map(function (item, i) { + var ctx = {}; + ctx[_this.variable] = item; + return ctx; + }); + html = ''; + return [4 /*yield*/, mapSeries(contexts, function (context, idx) { return __awaiter(_this, void 0, void 0, function () { + var col, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + row = Math.floor(idx / cols) + 1; + col = (idx % cols) + 1; + if (col === 1) { + if (row !== 1) { + html += ''; + } + html += ""; + } + html += ""; + scope.push(context); + _a = html; + return [4 /*yield*/, liquid.renderer.renderTemplates(this.templates, scope)]; + case 1: + html = _a + _b.sent(); + html += ''; + scope.pop(context); + return [2 /*return*/, html]; + } + }); + }); })]; + case 1: + _a.sent(); + if (row > 0) { + html += ''; + } + return [2 /*return*/, html]; + } + }); + }); + } + }); +} + +function Unless (liquid, Liquid) { + liquid.registerTag('unless', { + parse: function (tagToken, remainTokens) { + var _this = this; + this.templates = []; + this.elseTemplates = []; + var p; + var stream = liquid.parser.parseStream(remainTokens) + .on('start', function (x) { + p = _this.templates; + _this.cond = tagToken.args; + }) + .on('tag:else', function () { return (p = _this.elseTemplates); }) + .on('tag:endunless', function (token) { return stream.stop(); }) + .on('template', function (tpl) { return p.push(tpl); }) + .on('end', function (x) { + throw new Error("tag " + tagToken.raw + " not closed"); + }); + stream.start(); + }, + render: function (scope, hash) { + var cond = Liquid.evalExp(this.cond, scope); + return Liquid.isFalsy(cond) + ? liquid.renderer.renderTemplates(this.templates, scope) + : liquid.renderer.renderTemplates(this.elseTemplates, scope); + } + }); +} + +function tags (engine, Liquid) { + Assign(engine, Liquid); + Capture(engine, Liquid); + Case(engine, Liquid); + Comment(engine, Liquid); + Cycle(engine, Liquid); + Decrement(engine, Liquid); + For(engine, Liquid); + If(engine, Liquid); + Include(engine, Liquid); + Increment(engine, Liquid); + Layout(engine, Liquid); + Raw(engine, Liquid); + Tablerow(engine, Liquid); + Unless(engine, Liquid); +} + +var monthNames = [ + 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', + 'September', 'October', 'November', 'December' +]; +var dayNames = [ + 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' +]; +var monthNamesShort = monthNames.map(abbr); +var dayNamesShort = dayNames.map(abbr); +var suffixes = { + 1: 'st', + 2: 'nd', + 3: 'rd', + 'default': 'th' +}; +function abbr(str) { + return str.slice(0, 3); +} +// prototype extensions +var _date = { + daysInMonth: function (d) { + var feb = _date.isLeapYear(d) ? 29 : 28; + return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + }, + getDayOfYear: function (d) { + var num = 0; + for (var i = 0; i < d.getMonth(); ++i) { + num += _date.daysInMonth(d)[i]; + } + return num + d.getDate(); + }, + // Startday is an integer of which day to start the week measuring from + // TODO: that comment was retarted. fix it. + getWeekOfYear: function (d, startDay) { + // Skip to startDay of this week + var now = this.getDayOfYear(d) + (startDay - d.getDay()); + // Find the first startDay of the year + var jan1 = new Date(d.getFullYear(), 0, 1); + var then = (7 - jan1.getDay() + startDay); + return _number.pad(Math.floor((now - then) / 7) + 1, 2); + }, + isLeapYear: function (d) { + var year = d.getFullYear(); + return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year))); + }, + getSuffix: function (d) { + var str = d.getDate().toString(); + var index = parseInt(str.slice(-1)); + return suffixes[index] || suffixes['default']; + }, + century: function (d) { + return parseInt(d.getFullYear().toString().substring(0, 2), 10); + } +}; +var _number = { + pad: function (value, size, ch) { + if (!ch) + ch = '0'; + var result = value.toString(); + var pad = size - result.length; + while (pad-- > 0) { + result = ch + result; + } + return result; + } +}; +var formatCodes = { + a: function (d) { + return dayNamesShort[d.getDay()]; + }, + A: function (d) { + return dayNames[d.getDay()]; + }, + b: function (d) { + return monthNamesShort[d.getMonth()]; + }, + B: function (d) { + return monthNames[d.getMonth()]; + }, + c: function (d) { + return d.toLocaleString(); + }, + C: function (d) { + return _date.century(d); + }, + d: function (d) { + return _number.pad(d.getDate(), 2); + }, + e: function (d) { + return _number.pad(d.getDate(), 2, ' '); + }, + H: function (d) { + return _number.pad(d.getHours(), 2); + }, + I: function (d) { + return _number.pad(d.getHours() % 12 || 12, 2); + }, + j: function (d) { + return _number.pad(_date.getDayOfYear(d), 3); + }, + k: function (d) { + return _number.pad(d.getHours(), 2, ' '); + }, + l: function (d) { + return _number.pad(d.getHours() % 12 || 12, 2, ' '); + }, + L: function (d) { + return _number.pad(d.getMilliseconds(), 3); + }, + m: function (d) { + return _number.pad(d.getMonth() + 1, 2); + }, + M: function (d) { + return _number.pad(d.getMinutes(), 2); + }, + p: function (d) { + return (d.getHours() < 12 ? 'AM' : 'PM'); + }, + P: function (d) { + return (d.getHours() < 12 ? 'am' : 'pm'); + }, + q: function (d) { + return _date.getSuffix(d); + }, + s: function (d) { + return Math.round(d.valueOf() / 1000); + }, + S: function (d) { + return _number.pad(d.getSeconds(), 2); + }, + u: function (d) { + return d.getDay() || 7; + }, + U: function (d) { + return _date.getWeekOfYear(d, 0); + }, + w: function (d) { + return d.getDay(); + }, + W: function (d) { + return _date.getWeekOfYear(d, 1); + }, + x: function (d) { + return d.toLocaleDateString(); + }, + X: function (d) { + return d.toLocaleTimeString(); + }, + y: function (d) { + return d.getFullYear().toString().substring(2, 4); + }, + Y: function (d) { + return d.getFullYear(); + }, + z: function (d) { + var tz = d.getTimezoneOffset() / 60 * 100; + return (tz > 0 ? '-' : '+') + _number.pad(Math.abs(tz), 4); + }, + '%': function () { + return '%'; + } +}; +formatCodes.h = formatCodes.b; +formatCodes.N = formatCodes.L; +function strftime (d, format) { + var output = ''; + var remaining = format; + while (true) { + var r = /%./g; + var results = r.exec(remaining); + // No more format codes. Add the remaining text and return + if (!results) { + return output + remaining; + } + // Add the preceding text + output += remaining.slice(0, r.lastIndex - 2); + remaining = remaining.slice(r.lastIndex); + // Add the format code + var ch = results[0].charAt(1); + var func = formatCodes[ch]; + output += func ? func.call(this, d) : '%' + ch; + } +} + +var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' +}; +var unescapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" +}; +var filters = { + 'abs': function (v) { return Math.abs(v); }, + 'append': function (v, arg) { return v + arg; }, + 'capitalize': function (str) { return stringify$1(str).charAt(0).toUpperCase() + str.slice(1); }, + 'ceil': function (v) { return Math.ceil(v); }, + 'concat': function (v, arg) { return Array.prototype.concat.call(v, arg); }, + 'date': function (v, arg) { + var date = v; + if (v === 'now') { + date = new Date(); + } + else if (isString(v)) { + date = new Date(v); + } + return isValidDate(date) ? strftime(date, arg) : v; + }, + 'default': function (v, arg) { return isTruthy(v) ? v : arg; }, + 'divided_by': function (v, arg) { return v / arg; }, + 'downcase': function (v) { return v.toLowerCase(); }, + 'escape': escape, + 'escape_once': function (str) { return escape(unescape(str)); }, + 'first': function (v) { return v[0]; }, + 'floor': function (v) { return Math.floor(v); }, + 'join': function (v, arg) { return v.join(arg === undefined ? ' ' : arg); }, + 'last': function (v) { return last(v); }, + 'lstrip': function (v) { return stringify$1(v).replace(/^\s+/, ''); }, + 'map': function (arr, arg) { return arr.map(function (v) { return v[arg]; }); }, + 'minus': bindFixed(function (v, arg) { return v - arg; }), + 'modulo': bindFixed(function (v, arg) { return v % arg; }), + 'newline_to_br': function (v) { return v.replace(/\n/g, '
'); }, + 'plus': bindFixed(function (v, arg) { return Number(v) + Number(arg); }), + 'prepend': function (v, arg) { return arg + v; }, + 'remove': function (v, arg) { return v.split(arg).join(''); }, + 'remove_first': function (v, l) { return v.replace(l, ''); }, + 'replace': function (v, pattern, replacement) { + return stringify$1(v).split(pattern).join(replacement); + }, + 'replace_first': function (v, arg1, arg2) { return stringify$1(v).replace(arg1, arg2); }, + 'reverse': function (v) { return v.reverse(); }, + 'round': function (v, arg) { + var amp = Math.pow(10, arg || 0); + return Math.round(v * amp, arg) / amp; + }, + 'rstrip': function (str) { return stringify$1(str).replace(/\s+$/, ''); }, + 'size': function (v) { return v.length; }, + 'slice': function (v, begin, length) { + if (length === undefined) + length = 1; + return v.slice(begin, begin + length); + }, + 'sort': function (v, arg) { return v.sort(arg); }, + 'split': function (v, arg) { return stringify$1(v).split(arg); }, + 'strip': function (v) { return stringify$1(v).trim(); }, + 'strip_html': function (v) { return stringify$1(v).replace(/|||<.*?>/g, ''); }, + 'strip_newlines': function (v) { return stringify$1(v).replace(/\n/g, ''); }, + 'times': function (v, arg) { return v * arg; }, + 'truncate': function (v, l, o) { + v = stringify$1(v); + o = (o === undefined) ? '...' : o; + l = l || 16; + if (v.length <= l) + return v; + return v.substr(0, l - o.length) + o; + }, + 'truncatewords': function (v, l, o) { + if (o === undefined) + o = '...'; + var arr = v.split(' '); + var ret = arr.slice(0, l).join(' '); + if (arr.length > l) + ret += o; + return ret; + }, + 'uniq': function (arr) { + var u = {}; + return (arr || []).filter(function (val) { + if (u.hasOwnProperty(val)) { + return false; + } + u[val] = true; + return true; + }); + }, + 'upcase': function (str) { return stringify$1(str).toUpperCase(); }, + 'url_decode': function (x) { return x.split('+').map(decodeURIComponent).join(' '); }, + 'url_encode': function (x) { return x.split(' ').map(encodeURIComponent).join('+'); } +}; +function escape(str) { + return stringify$1(str).replace(/&|<|>|"|'/g, function (m) { return escapeMap[m]; }); +} +function unescape(str) { + return stringify$1(str).replace(/&(amp|lt|gt|#34|#39);/g, function (m) { return unescapeMap[m]; }); +} +function getFixed(v) { + var p = (v + '').split('.'); + return (p.length > 1) ? p[1].length : 0; +} +function getMaxFixed(l, r) { + return Math.max(getFixed(l), getFixed(r)); +} +function stringify$1(obj) { + return obj + ''; +} +function bindFixed(cb) { + return function (l, r) { + var f = getMaxFixed(l, r); + return cb(l, r).toFixed(f); + }; +} +function isValidDate(date) { + return date instanceof Date && !isNaN(date.getTime()); +} +function registerAll(liquid, Liquid) { + return forOwn(filters, function (func, name) { return liquid.registerFilter(name, func); }); +} registerAll.filters = filters; -var _engine = { - init: function init(tag, filter, options) { - if (options.cache) { - this.cache = {}; - } - this.options = options; - this.tag = tag; - this.filter = filter; - this.parser = Parser(tag, filter); - this.renderer = Render(); - - tags(this, Liquid); - registerAll(this, Liquid); - - return this; - }, - parse: function parse$$1(html, filepath) { - var tokens = parse(html, filepath, this.options); - return this.parser.parse(tokens); - }, - render: function render(tpl, ctx, opts) { - opts = assign({}, this.options, opts); - var scope = factory(ctx, opts); - return this.renderer.renderTemplates(tpl, scope); - }, - parseAndRender: function () { - var _ref = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(html, ctx, opts) { - var tpl; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.next = 2; - return this.parse(html); - - case 2: - tpl = _context.sent; - return _context.abrupt('return', this.render(tpl, ctx, opts)); - - case 4: - case 'end': - return _context.stop(); - } - } - }, _callee, this); - })); - - function parseAndRender(_x, _x2, _x3) { - return _ref.apply(this, arguments); - } - - return parseAndRender; - }(), - getTemplate: function () { - var _ref2 = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(file, root) { - var _this = this; - - var filepath; - return regeneratorRuntime.wrap(function _callee3$(_context3) { - while (1) { - switch (_context3.prev = _context3.next) { - case 0: - _context3.next = 2; - return resolve(file, root, this.options); - - case 2: - filepath = _context3.sent; - return _context3.abrupt('return', this.respectCache(filepath, asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() { - var str; - return regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - _context2.next = 2; - return read(filepath); - - case 2: - str = _context2.sent; - return _context2.abrupt('return', _this.parse(str, filepath)); - - case 4: - case 'end': - return _context2.stop(); - } - } - }, _callee2, _this); - })))); - - case 4: - case 'end': - return _context3.stop(); - } - } - }, _callee3, this); - })); - - function getTemplate(_x4, _x5) { - return _ref2.apply(this, arguments); - } - - return getTemplate; - }(), - renderFile: function () { - var _ref4 = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4(file, ctx, opts) { - var templates; - return regeneratorRuntime.wrap(function _callee4$(_context4) { - while (1) { - switch (_context4.prev = _context4.next) { - case 0: - opts = assign({}, opts); - _context4.next = 3; - return this.getTemplate(file, opts.root); - - case 3: - templates = _context4.sent; - return _context4.abrupt('return', this.render(templates, ctx, opts)); - - case 5: - case 'end': - return _context4.stop(); - } - } - }, _callee4, this); - })); - - function renderFile(_x6, _x7, _x8) { - return _ref4.apply(this, arguments); - } - - return renderFile; - }(), - respectCache: function () { - var _ref5 = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee5(key, getter) { - var cacheEnabled, value; - return regeneratorRuntime.wrap(function _callee5$(_context5) { - while (1) { - switch (_context5.prev = _context5.next) { - case 0: - cacheEnabled = this.options.cache; - - if (!(cacheEnabled && this.cache[key])) { - _context5.next = 3; - break; - } - - return _context5.abrupt('return', this.cache[key]); - - case 3: - _context5.next = 5; - return getter(); - - case 5: - value = _context5.sent; - - if (cacheEnabled) { - this.cache[key] = value; - } - return _context5.abrupt('return', value); - - case 8: - case 'end': - return _context5.stop(); - } - } - }, _callee5, this); - })); - - function respectCache(_x9, _x10) { - return _ref5.apply(this, arguments); - } - - return respectCache; - }(), - evalValue: function evalValue$$1(str, scope) { - var tpl = this.parser.parseValue(str.trim()); - return this.renderer.evalValue(tpl, scope); - }, - registerFilter: function registerFilter(name, filter) { - return this.filter.register(name, filter); - }, - registerTag: function registerTag(name, tag) { - return this.tag.register(name, tag); - }, - plugin: function plugin(_plugin) { - return _plugin.call(this, Liquid); - }, - express: function express(opts) { - opts = opts || {}; - var self = this; - return function (filePath, ctx, cb) { - assert(isArray(this.root) || isString(this.root), 'illegal views root, are you using express.js?'); - opts.root = this.root; - self.renderFile(filePath, ctx, opts).then(function (html) { - return cb(null, html); - }, cb); - }; - } -}; - -function normalizeStringArray(value) { - if (isArray(value)) return value; - if (isString(value)) return [value]; - throw new TypeError('illegal root: ' + value); +var Liquid = /** @class */ (function () { + function Liquid(options) { + options = assign({ + root: ['.'], + cache: false, + extname: '', + dynamicPartials: true, + trim_tag_right: false, + trim_tag_left: false, + trim_value_right: false, + trim_value_left: false, + greedy: true, + strict_filters: false, + strict_variables: false + }, options); + options.root = normalizeStringArray(options.root); + if (options.cache) { + this.cache = {}; + } + this.options = options; + this.tags = Tag(); + this.filters = Filter(options); + this.parser = Parser(this.tags, this.filters); + this.renderer = Render(); + tags(this, Liquid); + registerAll(this, Liquid); + } + Liquid.prototype.parse = function (html, filepath) { + var tokens = parse(html, filepath, this.options); + return this.parser.parse(tokens); + }; + Liquid.prototype.render = function (tpl, ctx, opts) { + opts = assign({}, this.options, opts); + var scope = new Scope(ctx, opts); + return this.renderer.renderTemplates(tpl, scope); + }; + Liquid.prototype.parseAndRender = function (html, ctx, opts) { + return __awaiter(this, void 0, void 0, function () { + var tpl; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.parse(html)]; + case 1: + tpl = _a.sent(); + return [2 /*return*/, this.render(tpl, ctx, opts)]; + } + }); + }); + }; + Liquid.prototype.getTemplate = function (file, root) { + return __awaiter(this, void 0, void 0, function () { + var filepath; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, resolve(file, root, this.options)]; + case 1: + filepath = _a.sent(); + return [2 /*return*/, this.respectCache(filepath, function () { return __awaiter(_this, void 0, void 0, function () { + var str; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, read(filepath)]; + case 1: + str = _a.sent(); + return [2 /*return*/, this.parse(str, filepath)]; + } + }); + }); })]; + } + }); + }); + }; + Liquid.prototype.renderFile = function (file, ctx, opts) { + return __awaiter(this, void 0, void 0, function () { + var templates; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + opts = assign({}, opts); + return [4 /*yield*/, this.getTemplate(file, opts.root)]; + case 1: + templates = _a.sent(); + return [2 /*return*/, this.render(templates, ctx, opts)]; + } + }); + }); + }; + Liquid.prototype.respectCache = function (key, getter) { + return __awaiter(this, void 0, void 0, function () { + var cacheEnabled, value; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + cacheEnabled = this.options.cache; + if (cacheEnabled && this.cache[key]) { + return [2 /*return*/, this.cache[key]]; + } + return [4 /*yield*/, getter()]; + case 1: + value = _a.sent(); + if (cacheEnabled) { + this.cache[key] = value; + } + return [2 /*return*/, value]; + } + }); + }); + }; + Liquid.prototype.evalValue = function (str, scope) { + var tpl = this.parser.parseValue(str.trim()); + return this.renderer.evalValue(tpl, scope); + }; + Liquid.prototype.registerFilter = function (name, filter) { + return this.filters.register(name, filter); + }; + Liquid.prototype.registerTag = function (name, tag) { + return this.tags.register(name, tag); + }; + Liquid.prototype.plugin = function (plugin) { + return plugin.call(this, Liquid); + }; + Liquid.prototype.express = function (opts) { + opts = opts || {}; + var self = this; + return function (filePath, ctx, cb) { + assert(isArray(this.root) || isString(this.root), 'illegal views root, are you using express.js?'); + opts.root = this.root; + self.renderFile(filePath, ctx, opts).then(function (html) { return cb(null, html); }, cb); + }; + }; + Liquid.default = Liquid; + Liquid.isTruthy = isTruthy; + Liquid.isFalsy = isFalsy; + Liquid.evalExp = evalExp; + Liquid.evalValue = evalValue; + Liquid.Types = { + ParseError: ParseError, + TokenizationError: TokenizationError, + RenderBreakError: RenderBreakError, + AssertionError: AssertionError, + AssignScope: {}, + CaptureScope: {}, + IncrementScope: {}, + DecrementScope: {} + }; + return Liquid; +}()); +function normalizeStringArray(value) { + if (isArray(value)) + return value; + if (isString(value)) + return [value]; + throw new TypeError('illegal root: ' + value); } -function Liquid(options) { - options = assign({ - root: ['.'], - cache: false, - extname: '', - dynamicPartials: true, - trim_tag_right: false, - trim_tag_left: false, - trim_value_right: false, - trim_value_left: false, - greedy: true, - strict_filters: false, - strict_variables: false - }, options); - options.root = normalizeStringArray(options.root); - - var engine = create(_engine); - engine.init(Tag(), Filter(options), options); - return engine; -} - -Liquid.default = Liquid; -Liquid.isTruthy = isTruthy; -Liquid.isFalsy = isFalsy; -Liquid.evalExp = evalExp; -Liquid.evalValue = evalValue; -Liquid.Types = { - ParseError: ParseError, - TokenizationError: TokenizationError, - RenderBreakError: RenderBreakError, - AssertionError: AssertionError, - AssignScope: {}, - CaptureScope: {}, - IncrementScope: {}, - DecrementScope: {} -}; - module.exports = Liquid; //# sourceMappingURL=liquid.common.js.map diff --git a/dist/liquid.common.js.map b/dist/liquid.common.js.map index ade1b514a..eebf3c9aa 100644 --- a/dist/liquid.common.js.map +++ b/dist/liquid.common.js.map @@ -1 +1 @@ -{"version":3,"file":"liquid.common.js","sources":["../node_modules/regenerator-runtime/runtime.js","../src/util/underscore.js","../src/lexical.js","../src/util/error.js","../src/util/assert.js","../src/scope.js","../src/util/promise.js","../src/template.js","../src/whitespace-ctrl.js","../src/tokenizer.js","../src/operators.js","../src/syntax.js","../src/render.js","../src/tag.js","../src/filter.js","../src/parser.js","../src/tags/for.js","../src/tags/assign.js","../src/tags/capture.js","../src/tags/case.js","../src/tags/comment.js","../src/tags/include.js","../src/tags/decrement.js","../src/tags/cycle.js","../src/tags/if.js","../src/tags/increment.js","../src/tags/layout.js","../src/tags/raw.js","../src/tags/tablerow.js","../src/tags/unless.js","../src/tags/index.js","../src/util/strftime.js","../src/filters.js","../src/index.js"],"sourcesContent":["/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // In sloppy mode, unbound `this` refers to the global object, fallback to\n // Function constructor if we're in global strict mode. That is sadly a form\n // of indirect eval which violates Content Security Policy.\n (function() {\n return this || (typeof self === \"object\" && self);\n })() || Function(\"return this\")()\n);\n","const toStr = Object.prototype.toString\nconst arrToStr = Array.prototype.toString\n\n/*\n * Checks if value is classified as a String primitive or object.\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is a string, else false.\n */\nexport function isString (value) {\n return toStr.call(value) === '[object String]'\n}\n\nexport function isFunction (value) {\n return typeof value === 'function'\n}\n\nexport function promisify (fn) {\n return function () {\n return new Promise((resolve, reject) => {\n fn(...arguments, (err, result) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value) {\n if (isNil(value)) return String(value)\n if (isFunction(value.to_liquid)) return stringify(value.to_liquid())\n if (isFunction(value.toLiquid)) return stringify(value.toLiquid())\n if (isFunction(value.to_s)) return value.to_s()\n if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value)\n if (isFunction(value.toString)) return value.toString()\n return toStr.call(value)\n}\n\nfunction defaultToString (value) {\n const cache = []\n return JSON.stringify(value, (key, value) => {\n if (isObject(value)) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n}\n\nexport function create (proto) {\n return Object.create(proto)\n}\n\nexport function isNil (value) {\n return value === null || value === undefined\n}\n\nexport function isArray (value) {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value) {\n const signature = toStr.call(value)\n // [object XXXError]\n return signature.substr(-6, 5) === 'Error' ||\n (typeof value.message === 'string' && typeof value.name === 'string')\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (object, iteratee) {\n object = object || {}\n for (const k in object) {\n if (object.hasOwnProperty(k)) {\n if (iteratee(object[k], k, object) === false) break\n }\n }\n return object\n}\n\n/*\n * Assigns own enumerable string keyed properties of source objects to the destination object.\n * Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * Note: This method mutates object and is loosely based on Object.assign.\n *\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @return {Object} Returns object.\n */\nexport function assign (object) {\n object = isObject(object) ? object : {}\n const srcs = Array.prototype.slice.call(arguments, 1)\n srcs.forEach((src) => Object.assign(object, src))\n return object\n}\n\nexport function last (arr) {\n return arr[arr.length - 1]\n}\n\nexport function uniq (arr) {\n const u = {}\n const a = []\n for (let i = 0, l = arr.length; i < l; ++i) {\n if (u.hasOwnProperty(arr[i])) {\n continue\n }\n a.push(arr[i])\n u[arr[i]] = 1\n }\n return a\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value) {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\n/*\n * A function to create flexibly-numbered lists of integers,\n * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.\n * Returns a list of integers from start (inclusive) to stop (exclusive),\n * incremented (or decremented) by step, exclusive.\n * Note that ranges that stop before they start are considered to be zero-length instead of\n * negative — if you'd like a negative range, use a negative step.\n */\nexport function range (start, stop, step) {\n if (arguments.length === 1) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n","// quote related\nconst singleQuoted = /'[^']*'/\nconst doubleQuoted = /\"[^\"]*\"/\nexport const quoted = new RegExp(`${singleQuoted.source}|${doubleQuoted.source}`)\nexport const quoteBalanced = new RegExp(`(?:${quoted.source}|[^'\"])*`)\n\n// basic types\nexport const integer = /-?\\d+/\nexport const number = /-?\\d+\\.?\\d*|\\.?\\d+/\nexport const bool = /true|false/\n\n// property access\nexport const identifier = /[\\w-]+[?]?/\nexport const subscript = new RegExp(`\\\\[(?:${quoted.source}|[\\\\w-\\\\.]+)\\\\]`)\nexport const literal = new RegExp(`(?:${quoted.source}|${bool.source}|${number.source})`)\nexport const variable = new RegExp(`${identifier.source}(?:\\\\.${identifier.source}|${subscript.source})*`)\n\n// range related\nexport const rangeLimit = new RegExp(`(?:${variable.source}|${number.source})`)\nexport const range = new RegExp(`\\\\(${rangeLimit.source}\\\\.\\\\.${rangeLimit.source}\\\\)`)\nexport const rangeCapture = new RegExp(`\\\\((${rangeLimit.source})\\\\.\\\\.(${rangeLimit.source})\\\\)`)\n\nexport const value = new RegExp(`(?:${variable.source}|${literal.source}|${range.source})`)\n\n// hash related\nexport const hash = new RegExp(`(?:${identifier.source})\\\\s*:\\\\s*(?:${value.source})`)\nexport const hashCapture = new RegExp(`(${identifier.source})\\\\s*:\\\\s*(${value.source})`, 'g')\n\n// full match\nexport const tagLine = new RegExp(`^\\\\s*(${identifier.source})\\\\s*([\\\\s\\\\S]*)\\\\s*$`)\nexport const literalLine = new RegExp(`^${literal.source}$`, 'i')\nexport const variableLine = new RegExp(`^${variable.source}$`)\nexport const numberLine = new RegExp(`^${number.source}$`)\nexport const boolLine = new RegExp(`^${bool.source}$`, 'i')\nexport const quotedLine = new RegExp(`^${quoted.source}$`)\nexport const rangeLine = new RegExp(`^${rangeCapture.source}$`)\nexport const integerLine = new RegExp(`^${integer.source}$`)\n\n// filter related\nexport const valueDeclaration = new RegExp(`(?:${identifier.source}\\\\s*:\\\\s*)?${value.source}`)\nexport const valueList = new RegExp(`${valueDeclaration.source}(\\\\s*,\\\\s*${valueDeclaration.source})*`)\nexport const filter = new RegExp(`${identifier.source}(?:\\\\s*:\\\\s*${valueList.source})?`, 'g')\nexport const filterCapture = new RegExp(`(${identifier.source})(?:\\\\s*:\\\\s*(${valueList.source}))?`)\nexport const filterLine = new RegExp(`^${filterCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isInteger (str) {\n return integerLine.test(str)\n}\n\nexport function isLiteral (str) {\n return literalLine.test(str)\n}\n\nexport function isRange (str) {\n return rangeLine.test(str)\n}\n\nexport function isVariable (str) {\n return variableLine.test(str)\n}\n\nexport function matchValue (str) {\n return value.exec(str)\n}\n\nexport function parseLiteral (str) {\n let res = str.match(numberLine)\n if (res) {\n return Number(str)\n }\n res = str.match(boolLine)\n if (res) {\n return str.toLowerCase() === 'true'\n }\n res = str.match(quotedLine)\n if (res) {\n return str.slice(1, -1)\n }\n throw new TypeError(`cannot parse '${str}' as literal`)\n}\n","import * as _ from './underscore.js'\n\nfunction initError () {\n this.name = this.constructor.name\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n}\n\nfunction initLiquidError (err, token) {\n initError.call(this)\n\n this.input = token.input\n this.line = token.line\n this.file = token.file\n\n const context = mkContext(token.input, token.line)\n this.message = mkMessage(err.message, token)\n this.stack = context +\n '\\n' + (this.stack || this.message) +\n (err.stack ? '\\nFrom ' + err.stack : '')\n}\n\nexport function TokenizationError (message, token) {\n initLiquidError.call(this, { message: message }, token)\n}\nTokenizationError.prototype = _.create(Error.prototype)\nTokenizationError.prototype.constructor = TokenizationError\n\nexport function ParseError (e, token) {\n _.assign(this, e)\n this.originalError = e\n\n initLiquidError.call(this, e, token)\n}\nParseError.prototype = _.create(Error.prototype)\nParseError.prototype.constructor = ParseError\n\nexport function RenderError (e, tpl) {\n // return the original render error\n if (e instanceof RenderError) {\n return e\n }\n _.assign(this, e)\n this.originalError = e\n\n initLiquidError.call(this, e, tpl.token)\n}\nRenderError.prototype = _.create(Error.prototype)\nRenderError.prototype.constructor = RenderError\n\nexport function RenderBreakError (message) {\n initError.call(this)\n this.message = message + ''\n}\nRenderBreakError.prototype = _.create(Error.prototype)\nRenderBreakError.prototype.constructor = RenderBreakError\n\nexport function AssertionError (message) {\n initError.call(this)\n this.message = message + ''\n}\nAssertionError.prototype = _.create(Error.prototype)\nAssertionError.prototype.constructor = AssertionError\n\nfunction mkContext (input, line) {\n const lines = input.split('\\n')\n const begin = Math.max(line - 2, 1)\n const end = Math.min(line + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(l => [\n (l === line) ? '>> ' : ' ',\n align(l, end),\n '| ',\n lines[l - 1]\n ].join(''))\n .join('\\n')\n\n return context\n}\n\nfunction align (n, max) {\n const length = (max + '').length\n const str = n + ''\n const blank = Array(length - str.length).join(' ')\n return blank + str\n}\n\nfunction mkMessage (msg, token) {\n msg = msg || ''\n if (token.file) {\n msg += ', file:' + token.file\n }\n if (token.line) {\n msg += ', line:' + token.line\n }\n return msg\n}\n","import { AssertionError } from './error.js'\n\nexport default function (predicate, message) {\n if (!predicate) {\n message = message || `expect ${predicate} to be true`\n throw new AssertionError(message)\n }\n}\n","import * as _ from './util/underscore.js'\nimport * as lexical from './lexical.js'\nimport assert from './util/assert.js'\n\nconst Scope = {\n getAll: function () {\n return this.contexts.reduce((ctx, val) => _.assign(ctx, val), _.create(null))\n },\n get: function (path) {\n const paths = this.propertyAccessSeq(path)\n const scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n return paths.reduce((value, key) => this.readProperty(value, key), scope)\n },\n set: function (path, v) {\n const paths = this.propertyAccessSeq(path)\n let scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n paths.some((key, i) => {\n if (!_.isObject(scope)) {\n return true\n }\n if (i === paths.length - 1) {\n scope[key] = v\n return true\n }\n if (undefined === scope[key]) {\n scope[key] = {}\n }\n scope = scope[key]\n })\n },\n unshift: function (ctx) {\n return this.contexts.unshift(ctx)\n },\n push: function (ctx) {\n return this.contexts.push(ctx)\n },\n pop: function (ctx) {\n if (!arguments.length) {\n return this.contexts.pop()\n }\n const i = this.contexts.findIndex(scope => scope === ctx)\n if (i === -1) {\n throw new TypeError('scope not found, cannot pop')\n }\n return this.contexts.splice(i, 1)[0]\n },\n findContextFor: function (key, filter) {\n filter = filter || (() => true)\n for (let i = this.contexts.length - 1; i >= 0; i--) {\n const candidate = this.contexts[i]\n if (!filter(candidate)) continue\n if (key in candidate) {\n return candidate\n }\n }\n return null\n },\n readProperty: function (obj, key) {\n let val\n if (_.isNil(obj)) {\n val = undefined\n } else {\n obj = toLiquid(obj)\n val = key === 'size' ? readSize(obj) : obj[key]\n if (_.isFunction(obj.liquid_method_missing)) {\n val = obj.liquid_method_missing(key)\n }\n }\n if (_.isNil(val) && this.opts.strict_variables) {\n throw new TypeError(`undefined variable: ${key}`)\n }\n return val\n },\n\n /*\n * Parse property access sequence from access string\n * @example\n * accessSeq(\"foo.bar\") // ['foo', 'bar']\n * accessSeq(\"foo['bar']\") // ['foo', 'bar']\n * accessSeq(\"foo['b]r']\") // ['foo', 'b]r']\n * accessSeq(\"foo[bar.coo]\") // ['foo', 'bar'], for bar.coo == 'bar'\n */\n propertyAccessSeq: function (str) {\n str = String(str)\n const seq = []\n let name = ''\n let j\n let i = 0\n while (i < str.length) {\n switch (str[i]) {\n case '[':\n push()\n\n const delemiter = str[i + 1]\n if (/['\"]/.test(delemiter)) { // foo[\"bar\"]\n j = str.indexOf(delemiter, i + 2)\n assert(j !== -1, `unbalanced ${delemiter}: ${str}`)\n name = str.slice(i + 2, j)\n push()\n i = j + 2\n } else { // foo[bar.coo]\n j = matchRightBracket(str, i + 1)\n assert(j !== -1, `unbalanced []: ${str}`)\n name = str.slice(i + 1, j)\n if (!lexical.isInteger(name)) { // foo[bar] vs. foo[1]\n name = String(this.get(name))\n }\n push()\n i = j + 1\n }\n break\n case '.':// foo.bar, foo[0].bar\n push()\n i++\n break\n default:// foo.bar\n name += str[i]\n i++\n }\n }\n push()\n\n if (!seq.length) {\n throw new TypeError(`invalid path:\"${str}\"`)\n }\n return seq\n\n function push () {\n if (name.length) seq.push(name)\n name = ''\n }\n }\n}\n\nfunction toLiquid (obj) {\n if (_.isFunction(obj.to_liquid)) {\n return obj.to_liquid()\n }\n if (_.isFunction(obj.toLiquid)) {\n return obj.toLiquid()\n }\n return obj\n}\n\nfunction readSize (obj) {\n if (!_.isNil(obj.size)) return obj.size\n if (_.isArray(obj) || _.isString(obj)) return obj.length\n return obj.size\n}\n\nfunction matchRightBracket (str, begin) {\n let stack = 1 // count of '[' - count of ']'\n for (let i = begin; i < str.length; i++) {\n if (str[i] === '[') {\n stack++\n }\n if (str[i] === ']') {\n stack--\n if (stack === 0) {\n return i\n }\n }\n }\n return -1\n}\n\nexport function factory (ctx, opts) {\n const defaultOptions = {\n dynamicPartials: true,\n strict_variables: false,\n strict_filters: false,\n blocks: {},\n root: []\n }\n const scope = _.create(Scope)\n scope.opts = _.assign(defaultOptions, opts)\n scope.contexts = [ctx || {}]\n return scope\n}\n","/*\n * Call functions in serial until someone resolved.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function anySeries (iterable, iteratee) {\n let ret = Promise.reject(new Error('init'))\n iterable.forEach(function (item, idx) {\n ret = ret.catch(e => iteratee(item, idx, iterable))\n })\n return ret\n}\n\n/*\n * Call functions in serial until someone rejected.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function mapSeries (iterable, iteratee) {\n let ret = Promise.resolve('init')\n const result = []\n iterable.forEach(function (item, idx) {\n ret = ret\n .then(() => iteratee(item, idx, iterable))\n .then(x => result.push(x))\n })\n return ret.then(() => result)\n}\n","import * as _ from './util/underscore.js'\nimport path from 'path'\nimport { anySeries } from './util/promise.js'\nimport fs from 'fs'\n\nconst statFileAsync = _.promisify(fs.stat)\nconst readFileAsync = _.promisify(fs.readFile)\n\nexport async function resolve (filepath, root, options) {\n if (!path.extname(filepath)) {\n filepath += options.extname\n }\n root = options.root.concat(root || [])\n root = _.uniq(root)\n const paths = root.map(root => path.resolve(root, filepath))\n return anySeries(paths, async path => {\n try {\n await statFileAsync(path)\n return path\n } catch (e) {\n e.message = `${e.code}: Failed to lookup ${filepath} in: ${root}`\n throw e\n }\n })\n}\n\nexport async function read (filepath) {\n return readFileAsync(filepath, 'utf8')\n}\n","import { assign } from './util/underscore.js'\n\nexport default function whiteSpaceCtrl (tokens, options) {\n options = assign({ greedy: true }, options)\n let inRaw = false\n\n tokens.forEach((token, i) => {\n if (shouldTrimLeft(token, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && token.name === 'raw') inRaw = true\n if (token.type === 'tag' && token.name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token, inRaw, options) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trim_left || options.trim_tag_left\n if (token.type === 'value') return token.trim_left || options.trim_value_left\n}\n\nfunction shouldTrimRight (token, inRaw, options) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trim_right || options.trim_tag_right\n if (token.type === 'value') return token.trim_right || options.trim_value_right\n}\n\nfunction trimLeft (token, greedy) {\n if (!token || token.type !== 'html') return\n\n const rLeft = greedy ? /\\s+$/g : /[\\t\\r ]*$/g\n token.value = token.value.replace(rLeft, '')\n}\n\nfunction trimRight (token, greedy) {\n if (!token || token.type !== 'html') return\n\n const rRight = greedy ? /^\\s+/g : /^[\\t\\r ]*\\n?/g\n token.value = token.value.replace(rRight, '')\n}\n","import * as lexical from './lexical.js'\nimport { TokenizationError } from './util/error.js'\nimport * as _ from './util/underscore.js'\nimport assert from './util/assert.js'\nimport whiteSpaceCtrl from './whitespace-ctrl.js'\n\nexport { default as whiteSpaceCtrl } from './whitespace-ctrl.js'\n\nexport function parse (input, file, options) {\n assert(_.isString(input), 'illegal input')\n\n const rLiquid = /({%-?([\\s\\S]*?)-?%})|({{-?([\\s\\S]*?)-?}})/g\n let currIndent = 0\n const lineNumber = LineNumber(input)\n let lastMatchEnd = 0\n const tokens = []\n\n for (let match; (match = rLiquid.exec(input)); lastMatchEnd = rLiquid.lastIndex) {\n if (match.index > lastMatchEnd) {\n tokens.push(parseHTMLToken(lastMatchEnd, match.index))\n }\n tokens.push(match[1]\n ? parseTagToken(match[1], match[2].trim(), match.index)\n : parseValueToken(match[3], match[4].trim(), match.index))\n }\n if (input.length > lastMatchEnd) {\n tokens.push(parseHTMLToken(lastMatchEnd, input.length))\n }\n whiteSpaceCtrl(tokens, options)\n return tokens\n\n function parseTagToken (raw, value, pos) {\n const match = value.match(lexical.tagLine)\n const token = {\n type: 'tag',\n indent: currIndent,\n line: lineNumber.get(pos),\n trim_left: raw.slice(0, 3) === '{%-',\n trim_right: raw.slice(-3) === '-%}',\n raw,\n value,\n input,\n file\n }\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, token)\n }\n token.name = match[1]\n token.args = match[2]\n return token\n }\n\n function parseValueToken (raw, value, pos) {\n return {\n type: 'value',\n line: lineNumber.get(pos),\n trim_left: raw.slice(0, 3) === '{{-',\n trim_right: raw.slice(-3) === '-}}',\n raw,\n value,\n input,\n file\n }\n }\n\n function parseHTMLToken (begin, end) {\n const htmlFragment = input.slice(begin, end)\n currIndent = _.last((htmlFragment).split('\\n')).length\n\n return {\n type: 'html',\n raw: htmlFragment,\n value: htmlFragment\n }\n }\n}\n\nfunction LineNumber (html) {\n let parsedLinesCount = 0\n let lastMatchBegin = -1\n\n return {\n get: function (pos) {\n const lines = html.slice(lastMatchBegin + 1, pos).split('\\n')\n parsedLinesCount += lines.length - 1\n lastMatchBegin = pos\n return parsedLinesCount + 1\n }\n }\n}\n","export default function (isTruthy) {\n return {\n '==': (l, r) => l === r,\n '!=': (l, r) => l !== r,\n '>': (l, r) => l !== null && r !== null && l > r,\n '<': (l, r) => l !== null && r !== null && l < r,\n '>=': (l, r) => l !== null && r !== null && l >= r,\n '<=': (l, r) => l !== null && r !== null && l <= r,\n 'contains': (l, r) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l, r) => isTruthy(l) && isTruthy(r),\n 'or': (l, r) => isTruthy(l) || isTruthy(r)\n }\n}\n","import Operators from './operators.js'\nimport * as lexical from './lexical.js'\nimport assert from './util/assert.js'\n\nconst operators = Operators(isTruthy)\n\nexport function evalExp (exp, scope) {\n assert(scope, 'unable to evalExp: scope undefined')\n const operatorREs = lexical.operators\n let match\n for (let i = 0; i < operatorREs.length; i++) {\n const operatorRE = operatorREs[i]\n const expRE = new RegExp(`^(${lexical.quoteBalanced.source})(${operatorRE.source})(${lexical.quoteBalanced.source})$`)\n if ((match = exp.match(expRE))) {\n const l = evalExp(match[1], scope)\n const op = operators[match[2].trim()]\n const r = evalExp(match[3], scope)\n return op(l, r)\n }\n }\n\n if ((match = exp.match(lexical.rangeLine))) {\n const low = evalValue(match[1], scope)\n const high = evalValue(match[2], scope)\n const range = []\n for (let j = low; j <= high; j++) {\n range.push(j)\n }\n return range\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str, scope) {\n str = str && str.trim()\n if (!str) return undefined\n\n if (lexical.isLiteral(str)) {\n return lexical.parseLiteral(str)\n }\n if (lexical.isVariable(str)) {\n return scope.get(str)\n }\n throw new TypeError(`cannot eval '${str}' as value`)\n}\n\nexport function isTruthy (val) {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val) {\n return val === false || undefined === val || val === null\n}\n","import { evalExp } from './syntax.js'\nimport { RenderBreakError, RenderError } from './util/error.js'\nimport { stringify, create } from './util/underscore.js'\nimport assert from './util/assert.js'\n\nconst render = {\n renderTemplates: async function (templates, scope) {\n assert(scope, 'unable to evalTemplates: scope undefined')\n\n let html = ''\n for (const tpl of templates) {\n try {\n html += await renderTemplate.call(this, tpl)\n } catch (e) {\n if (e instanceof RenderBreakError) {\n e.resolvedHTML = html\n throw e\n }\n throw new RenderError(e, tpl)\n }\n }\n return html\n\n async function renderTemplate (template) {\n if (template.type === 'tag') {\n const partial = await this.renderTag(template, scope)\n return partial === undefined ? '' : partial\n }\n if (template.type === 'value') {\n return this.renderValue(template, scope)\n }\n return template.value\n }\n },\n\n renderTag: async function (template, scope) {\n if (template.name === 'continue') {\n throw new RenderBreakError('continue')\n }\n if (template.name === 'break') {\n throw new RenderBreakError('break')\n }\n return template.render(scope)\n },\n\n renderValue: async function (template, scope) {\n const partial = this.evalValue(template, scope)\n return partial === undefined ? '' : stringify(partial)\n },\n\n evalValue: function (template, scope) {\n assert(scope, 'unable to evalValue: scope undefined')\n return template.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(template.initial, scope))\n }\n}\n\nexport default function () {\n const instance = create(render)\n return instance\n}\n","import { hashCapture } from './lexical.js'\nimport { create } from './util/underscore.js'\nimport { evalValue } from './syntax.js'\nimport assert from './util/assert.js'\n\nfunction hash (markup, scope) {\n const obj = {}\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n obj[k] = evalValue(v, scope)\n }\n return obj\n}\n\nexport default function () {\n let tagImpls = {}\n\n const _tagInstance = {\n render: async function (scope) {\n const obj = hash(this.token.args, scope)\n const impl = this.tagImpl\n if (typeof impl.render !== 'function') {\n return ''\n }\n return impl.render(scope, obj)\n },\n parse: function (token, tokens) {\n this.type = 'tag'\n this.token = token\n this.name = token.name\n\n const tagImpl = tagImpls[this.name]\n assert(tagImpl, `tag ${this.name} not found`)\n this.tagImpl = create(tagImpl)\n if (this.tagImpl.parse) {\n this.tagImpl.parse(token, tokens)\n }\n }\n }\n\n function register (name, tag) {\n tagImpls[name] = tag\n }\n\n function construct (token, tokens) {\n const instance = create(_tagInstance)\n instance.parse(token, tokens)\n return instance\n }\n\n function clear () {\n tagImpls = {}\n }\n\n return {\n construct,\n register,\n clear\n }\n}\n","import * as lexical from './lexical.js'\nimport { evalValue } from './syntax.js'\nimport assert from './util/assert.js'\nimport { assign, create } from './util/underscore.js'\n\nconst valueRE = new RegExp(`${lexical.value.source}`, 'g')\n\nexport default function (options) {\n options = assign({}, options)\n let filters = {}\n\n const _filterInstance = {\n render: function (output, scope) {\n const args = this.args.map(arg => evalValue(arg, scope))\n args.unshift(output)\n return this.filter.apply(null, args)\n },\n parse: function (str) {\n let match = lexical.filterLine.exec(str)\n assert(match, 'illegal filter: ' + str)\n\n const name = match[1]\n const argList = match[2] || ''\n const filter = filters[name]\n if (typeof filter !== 'function') {\n if (options.strict_filters) {\n throw new TypeError(`undefined filter: ${name}`)\n }\n this.name = name\n this.filter = x => x\n this.args = []\n return this\n }\n\n const args = []\n while ((match = valueRE.exec(argList.trim()))) {\n const v = match[0]\n const re = new RegExp(`${v}\\\\s*:`, 'g')\n const keyMatch = re.exec(match.input)\n const currentMatchIsKey = keyMatch && keyMatch.index === match.index\n currentMatchIsKey ? args.push(`'${v}'`) : args.push(v)\n }\n\n this.name = name\n this.filter = filter\n this.args = args\n\n return this\n }\n }\n\n function construct (str) {\n const instance = create(_filterInstance)\n return instance.parse(str)\n }\n\n function register (name, filter) {\n filters[name] = filter\n }\n\n function clear () {\n filters = {}\n }\n\n return {\n construct, register, clear\n }\n}\n","import * as lexical from './lexical.js'\nimport { create } from './util/underscore.js'\nimport { ParseError } from './util/error.js'\nimport assert from './util/assert.js'\n\nexport default function (Tag, Filter) {\n const stream = {\n init: function (tokens) {\n this.tokens = tokens\n this.handlers = {}\n return this\n },\n on: function (name, cb) {\n this.handlers[name] = cb\n return this\n },\n trigger: function (event, arg) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n },\n start: function () {\n this.trigger('start')\n let token\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' &&\n this.trigger(`tag:${token.name}`, token)) {\n continue\n }\n const template = parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n },\n stop: function () {\n this.stopRequested = true\n return this\n }\n }\n\n function parse (tokens) {\n let token\n const templates = []\n while ((token = tokens.shift())) {\n templates.push(parseToken(token, tokens))\n }\n return templates\n }\n\n function parseToken (token, tokens) {\n try {\n let tpl = null\n if (token.type === 'tag') {\n tpl = parseTag(token, tokens)\n } else if (token.type === 'value') {\n tpl = parseValue(token.value)\n } else { // token.type === 'html'\n tpl = token\n }\n tpl.token = token\n return tpl\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n\n function parseTag (token, tokens) {\n if (token.name === 'continue' || token.name === 'break') return token\n return Tag.construct(token, tokens)\n }\n\n function parseValue (str) {\n let match = lexical.matchValue(str)\n assert(match, `illegal value string: ${str}`)\n\n const initial = match[0]\n str = str.substr(match.index + match[0].length)\n\n const filters = []\n while ((match = lexical.filter.exec(str))) {\n filters.push([match[0].trim()])\n }\n\n return {\n type: 'value',\n initial: initial,\n filters: filters.map(str => Filter.construct(str))\n }\n }\n\n function parseStream (tokens) {\n const s = create(stream)\n return s.init(tokens)\n }\n\n return {\n parse,\n parseTag,\n parseStream,\n parseValue\n }\n}\n","import { mapSeries } from '../util/promise.js'\nimport { isString, isObject, isArray } from '../util/underscore.js'\nimport assert from '../util/assert.js'\nimport { identifier, value, hash } from '../lexical.js'\n\nexport default function (liquid, Liquid) {\n const RenderBreakError = Liquid.Types.RenderBreakError\n const re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\n liquid.registerTag('for', { parse, render })\n\n function parse (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n this.variable = match[1]\n this.collection = match[2]\n this.reversed = !!match[3]\n\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endfor', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n }\n async function render (scope, hash) {\n let collection = Liquid.evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]])\n }\n }\n if (!isArray(collection) || !collection.length) {\n return liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n if (this.reversed) collection.reverse()\n\n const contexts = collection.map((item, i) => {\n const ctx = {}\n ctx[this.variable] = item\n ctx.forloop = {\n first: i === 0,\n index: i + 1,\n index0: i,\n last: i === collection.length - 1,\n length: collection.length,\n rindex: collection.length - i,\n rindex0: collection.length - i - 1\n }\n return ctx\n })\n\n let html = ''\n let finished = false\n await mapSeries(contexts, async context => {\n if (finished) return\n\n scope.push(context)\n try {\n html += await liquid.renderer.renderTemplates(this.templates, scope)\n } catch (e) {\n if (e instanceof RenderBreakError) {\n html += e.resolvedHTML\n if (e.message === 'break') {\n finished = true\n }\n } else throw e\n }\n scope.pop(context)\n })\n return html\n }\n}\n","import assert from '../util/assert.js'\nimport { identifier } from '../lexical.js'\nimport { create } from '../util/underscore.js'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n const { AssignScope } = Liquid.Types\n\n liquid.registerTag('assign', {\n parse: function (token) {\n const match = token.args.match(re)\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (scope) {\n const ctx = create(AssignScope)\n ctx[this.key] = liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n })\n}\n","import assert from '../util/assert.js'\nimport { create } from '../util/underscore.js'\nimport { identifier } from '../lexical.js'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`(${identifier.source})`)\n const { CaptureScope } = Liquid.Types\n\n liquid.registerTag('capture', {\n parse: function (tagToken, remainTokens) {\n const match = tagToken.args.match(re)\n assert(match, `${tagToken.args} not valid identifier`)\n\n this.variable = match[1]\n this.templates = []\n\n const stream = liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', token => stream.stop())\n .on('template', tpl => this.templates.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope, hash) {\n const html = await liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = create(CaptureScope)\n ctx[this.variable] = html\n scope.push(ctx)\n }\n })\n}\n","export default function (liquid, Liquid) {\n liquid.registerTag('case', {\n\n parse: function (tagToken, remainTokens) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p = []\n const stream = liquid.parser.parseStream(remainTokens)\n .on('tag:when', token => {\n this.cases.push({\n val: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endcase', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = Liquid.evalExp(branch.val, scope)\n const cond = Liquid.evalExp(this.cond, scope)\n if (val === cond) {\n return liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","export default function (liquid) {\n liquid.registerTag('comment', {\n parse: function (tagToken, remainTokens) {\n const stream = liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n })\n}\n","import assert from '../util/assert.js'\nimport { value, quotedLine } from '../lexical.js'\n\nconst staticFileRE = /[^\\s,]+/\n\nexport default function (liquid, Liquid) {\n const withRE = new RegExp(`with\\\\s+(${value.source})`)\n\n liquid.registerTag('include', {\n parse: function (token) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticValue = match[0]\n }\n\n match = value.exec(token.args)\n if (match) {\n this.value = match[0]\n }\n\n match = withRE.exec(token.args)\n if (match) {\n this.with = match[1]\n }\n },\n render: async function (scope, hash) {\n let filepath\n if (scope.opts.dynamicPartials) {\n if (quotedLine.exec(this.value)) {\n const template = this.value.slice(1, -1)\n filepath = await liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = Liquid.evalValue(this.value, scope)\n }\n } else {\n filepath = this.staticValue\n }\n assert(filepath, `cannot include with empty filename`)\n\n const originBlocks = scope.opts.blocks\n const originBlockMode = scope.opts.blockMode\n\n scope.opts.blocks = {}\n scope.opts.blockMode = 'output'\n if (this.with) {\n hash[filepath] = Liquid.evalValue(this.with, scope)\n }\n const templates = await liquid.getTemplate(filepath, scope.opts.root)\n scope.push(hash)\n const html = await liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.opts.blocks = originBlocks\n scope.opts.blockMode = originBlockMode\n return html\n }\n })\n}\n","import { create } from '../util/underscore.js'\nimport assert from '../util/assert.js'\nimport { identifier } from '../lexical.js'\n\nexport default function (liquid, Liquid) {\n const { CaptureScope, AssignScope, DecrementScope } = Liquid.Types\n\n liquid.registerTag('decrement', {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope, hash) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n const proto = Object.getPrototypeOf(ctx)\n return proto !== CaptureScope && proto !== AssignScope\n }\n )\n if (!context) {\n context = create(DecrementScope)\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n return --context[this.variable]\n }\n })\n}\n","import assert from '../util/assert.js'\nimport { value as rValue } from '../lexical.js'\n\nexport default function (liquid, Liquid) {\n const groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\n const candidatesRE = new RegExp(rValue.source, 'g')\n\n liquid.registerTag('cycle', {\n\n parse: function (tagToken, remainTokens) {\n let match = groupRE.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.group = match[1] || ''\n const candidates = match[2]\n\n this.candidates = []\n\n while ((match = candidatesRE.exec(candidates))) {\n this.candidates.push(match[0])\n }\n assert(this.candidates.length, `empty candidates: ${tagToken.raw}`)\n },\n\n render: function (scope, hash) {\n const group = Liquid.evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n\n const groups = scope.opts.groups = scope.opts.groups || {}\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n\n return Liquid.evalValue(candidate, scope)\n }\n })\n}\n","export default function (liquid, Liquid) {\n liquid.registerTag('if', {\n\n parse: function (tagToken, remainTokens) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', token => {\n this.branches.push({\n cond: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endif', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n for (const branch of this.branches) {\n const cond = Liquid.evalExp(branch.cond, scope)\n if (Liquid.isTruthy(cond)) {\n return liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","import assert from '../util/assert.js'\nimport { create } from '../util/underscore.js'\nimport { identifier } from '../lexical.js'\n\nexport default function (liquid, Liquid) {\n const { CaptureScope, AssignScope, IncrementScope } = Liquid.Types\n\n liquid.registerTag('increment', {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope, hash) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n const proto = Object.getPrototypeOf(ctx)\n return proto !== CaptureScope && proto !== AssignScope\n }\n )\n if (!context) {\n context = create(IncrementScope)\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n const val = context[this.variable]\n context[this.variable]++\n return val\n }\n })\n}\n","import assert from '../util/assert.js'\nimport { value as rValue } from '../lexical.js'\n\n/*\n * blockMode:\n * * \"store\": store rendered html into blocks\n * * \"output\": output rendered html\n */\n\nexport default function (liquid, Liquid) {\n const staticFileRE = /\\S+/\n\n liquid.registerTag('layout', {\n parse: function (token, remainTokens) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticLayout = match[0]\n }\n\n match = rValue.exec(token.args)\n if (match) {\n this.layout = match[0]\n }\n\n this.tpls = liquid.parser.parse(remainTokens)\n },\n render: async function (scope, hash) {\n const layout = scope.opts.dynamicPartials\n ? Liquid.evalValue(this.layout, scope)\n : this.staticLayout\n assert(layout, `cannot apply layout with empty filename`)\n\n // render the remaining tokens immediately\n scope.opts.blockMode = 'store'\n const html = await liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.opts.blocks[''] === undefined) {\n scope.opts.blocks[''] = html\n }\n const templates = await liquid.getTemplate(layout, scope.opts.root)\n scope.push(hash)\n scope.opts.blockMode = 'output'\n const partial = await liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n })\n\n liquid.registerTag('block', {\n parse: function (token, remainTokens) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n\n this.tpls = []\n const stream = liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', tpl => this.tpls.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${token.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope) {\n const childDefined = scope.opts.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.opts.blockMode === 'store') {\n scope.opts.blocks[this.block] = html\n return ''\n }\n return html\n }\n })\n}\n","export default function (liquid) {\n liquid.registerTag('raw', {\n parse: function (tagToken, remainTokens) {\n this.tokens = []\n\n const stream = liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\n if (token.name === 'endraw') stream.stop()\n else this.tokens.push(token)\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: function (scope, hash) {\n return this.tokens.map(token => token.raw).join('')\n }\n })\n}\n","import { mapSeries } from '../util/promise.js'\nimport assert from '../util/assert.js'\nimport { identifier, value, hash } from '../lexical.js'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\n liquid.registerTag('tablerow', {\n\n parse: function (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.variable = match[1]\n this.collection = match[2]\n this.templates = []\n\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: async function (scope, hash) {\n let collection = Liquid.evalExp(this.collection, scope) || []\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = hash.cols || collection.length\n const contexts = collection.map((item, i) => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row\n let html = ''\n await mapSeries(contexts, async (context, idx) => {\n row = Math.floor(idx / cols) + 1\n const col = (idx % cols) + 1\n if (col === 1) {\n if (row !== 1) {\n html += ''\n }\n html += ``\n }\n\n html += ``\n scope.push(context)\n html += await liquid.renderer.renderTemplates(this.templates, scope)\n html += ''\n scope.pop(context)\n return html\n })\n if (row > 0) {\n html += ''\n }\n return html\n }\n })\n}\n","export default function (liquid, Liquid) {\n liquid.registerTag('unless', {\n parse: function (tagToken, remainTokens) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', x => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n const cond = Liquid.evalExp(this.cond, scope)\n return Liquid.isFalsy(cond)\n ? liquid.renderer.renderTemplates(this.templates, scope)\n : liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","import For from './for.js'\nimport Assign from './assign.js'\nimport Capture from './capture.js'\nimport Case from './case.js'\nimport Comment from './comment.js'\nimport Include from './include.js'\nimport Decrement from './decrement.js'\nimport Cycle from './cycle.js'\nimport If from './if.js'\nimport Increment from './increment.js'\nimport Layout from './layout.js'\nimport Raw from './raw.js'\nimport Tablerow from './tablerow.js'\nimport Unless from './unless.js'\n\nexport default function (engine, Liquid) {\n Assign(engine, Liquid)\n Capture(engine, Liquid)\n Case(engine, Liquid)\n Comment(engine, Liquid)\n Cycle(engine, Liquid)\n Decrement(engine, Liquid)\n For(engine, Liquid)\n If(engine, Liquid)\n Include(engine, Liquid)\n Increment(engine, Liquid)\n Layout(engine, Liquid)\n Raw(engine, Liquid)\n Tablerow(engine, Liquid)\n Unless(engine, Liquid)\n}\n","const monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst monthNamesShort = monthNames.map(abbr)\nconst dayNamesShort = dayNames.map(abbr)\nconst suffixes = {\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n 'default': 'th'\n}\n\nfunction abbr (str) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d) {\n const feb = _date.isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n },\n\n getDayOfYear: function (d) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += _date.daysInMonth(d)[i]\n }\n return num + d.getDate()\n },\n\n // Startday is an integer of which day to start the week measuring from\n // TODO: that comment was retarted. fix it.\n getWeekOfYear: function (d, startDay) {\n // Skip to startDay of this week\n const now = this.getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return _number.pad(Math.floor((now - then) / 7) + 1, 2)\n },\n\n isLeapYear: function (d) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d) {\n const str = d.getDate().toString()\n const index = parseInt(str.slice(-1))\n return suffixes[index] || suffixes['default']\n },\n\n century: function (d) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst _number = {\n pad: function (value, size, ch) {\n if (!ch) ch = '0'\n let result = value.toString()\n let pad = size - result.length\n\n while (pad-- > 0) {\n result = ch + result\n }\n\n return result\n }\n}\n\nconst formatCodes = {\n a: function (d) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d) {\n return dayNames[d.getDay()]\n },\n b: function (d) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d) {\n return monthNames[d.getMonth()]\n },\n c: function (d) {\n return d.toLocaleString()\n },\n C: function (d) {\n return _date.century(d)\n },\n d: function (d) {\n return _number.pad(d.getDate(), 2)\n },\n e: function (d) {\n return _number.pad(d.getDate(), 2, ' ')\n },\n H: function (d) {\n return _number.pad(d.getHours(), 2)\n },\n I: function (d) {\n return _number.pad(d.getHours() % 12 || 12, 2)\n },\n j: function (d) {\n return _number.pad(_date.getDayOfYear(d), 3)\n },\n k: function (d) {\n return _number.pad(d.getHours(), 2, ' ')\n },\n l: function (d) {\n return _number.pad(d.getHours() % 12 || 12, 2, ' ')\n },\n L: function (d) {\n return _number.pad(d.getMilliseconds(), 3)\n },\n m: function (d) {\n return _number.pad(d.getMonth() + 1, 2)\n },\n M: function (d) {\n return _number.pad(d.getMinutes(), 2)\n },\n p: function (d) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d) {\n return _date.getSuffix(d)\n },\n s: function (d) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d) {\n return _number.pad(d.getSeconds(), 2)\n },\n u: function (d) {\n return d.getDay() || 7\n },\n U: function (d) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d) {\n return d.getDay()\n },\n W: function (d) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d) {\n return d.toLocaleDateString()\n },\n X: function (d) {\n return d.toLocaleTimeString()\n },\n y: function (d) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d) {\n return d.getFullYear()\n },\n z: function (d) {\n const tz = d.getTimezoneOffset() / 60 * 100\n return (tz > 0 ? '-' : '+') + _number.pad(Math.abs(tz), 4)\n },\n '%': function () {\n return '%'\n }\n}\nformatCodes.h = formatCodes.b\nformatCodes.N = formatCodes.L\n\nexport default function (d, format) {\n let output = ''\n let remaining = format\n\n while (true) {\n const r = /%./g\n const results = r.exec(remaining)\n\n // No more format codes. Add the remaining text and return\n if (!results) {\n return output + remaining\n }\n\n // Add the preceding text\n output += remaining.slice(0, r.lastIndex - 2)\n remaining = remaining.slice(r.lastIndex)\n\n // Add the format code\n const ch = results[0].charAt(1)\n const func = formatCodes[ch]\n output += func ? func.call(this, d) : '%' + ch\n }\n}\n","import strftime from './util/strftime.js'\nimport * as _ from './util/underscore.js'\nimport { isTruthy } from './syntax.js'\n\nconst escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nconst filters = {\n 'abs': v => Math.abs(v),\n 'append': (v, arg) => v + arg,\n 'capitalize': str => stringify(str).charAt(0).toUpperCase() + str.slice(1),\n 'ceil': v => Math.ceil(v),\n 'concat': (v, arg) => Array.prototype.concat.call(v, arg),\n 'date': (v, arg) => {\n let date = v\n if (v === 'now') {\n date = new Date()\n } else if (_.isString(v)) {\n date = new Date(v)\n }\n return isValidDate(date) ? strftime(date, arg) : v\n },\n 'default': (v, arg) => isTruthy(v) ? v : arg,\n 'divided_by': (v, arg) => v / arg,\n 'downcase': v => v.toLowerCase(),\n 'escape': escape,\n\n 'escape_once': str => escape(unescape(str)),\n 'first': v => v[0],\n 'floor': v => Math.floor(v),\n 'join': (v, arg) => v.join(arg === undefined ? ' ' : arg),\n 'last': v => _.last(v),\n 'lstrip': v => stringify(v).replace(/^\\s+/, ''),\n 'map': (arr, arg) => arr.map(v => v[arg]),\n 'minus': bindFixed((v, arg) => v - arg),\n 'modulo': bindFixed((v, arg) => v % arg),\n 'newline_to_br': v => v.replace(/\\n/g, '
'),\n 'plus': bindFixed((v, arg) => Number(v) + Number(arg)),\n 'prepend': (v, arg) => arg + v,\n 'remove': (v, arg) => v.split(arg).join(''),\n 'remove_first': (v, l) => v.replace(l, ''),\n 'replace': (v, pattern, replacement) =>\n stringify(v).split(pattern).join(replacement),\n 'replace_first': (v, arg1, arg2) => stringify(v).replace(arg1, arg2),\n 'reverse': v => v.reverse(),\n 'round': (v, arg) => {\n const amp = Math.pow(10, arg || 0)\n return Math.round(v * amp, arg) / amp\n },\n 'rstrip': str => stringify(str).replace(/\\s+$/, ''),\n 'size': v => v.length,\n 'slice': (v, begin, length) => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'sort': (v, arg) => v.sort(arg),\n 'split': (v, arg) => stringify(v).split(arg),\n 'strip': (v) => stringify(v).trim(),\n 'strip_html': v => stringify(v).replace(/|||<.*?>/g, ''),\n 'strip_newlines': v => stringify(v).replace(/\\n/g, ''),\n 'times': (v, arg) => v * arg,\n 'truncate': (v, l, o) => {\n v = stringify(v)\n o = (o === undefined) ? '...' : o\n l = l || 16\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v, l, o) => {\n if (o === undefined) o = '...'\n const arr = v.split(' ')\n let ret = arr.slice(0, l).join(' ')\n if (arr.length > l) ret += o\n return ret\n },\n 'uniq': function (arr) {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(val)) {\n return false\n }\n u[val] = true\n return true\n })\n },\n 'upcase': str => stringify(str).toUpperCase(),\n 'url_decode': x => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': x => x.split(' ').map(encodeURIComponent).join('+')\n}\n\nfunction escape (str) {\n return stringify(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str) {\n return stringify(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nfunction getFixed (v) {\n const p = (v + '').split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction getMaxFixed (l, r) {\n return Math.max(getFixed(l), getFixed(r))\n}\n\nfunction stringify (obj) {\n return obj + ''\n}\n\nfunction bindFixed (cb) {\n return (l, r) => {\n const f = getMaxFixed(l, r)\n return cb(l, r).toFixed(f)\n }\n}\n\nfunction isValidDate (date) {\n return date instanceof Date && !isNaN(date.getTime())\n}\n\nexport default function registerAll (liquid) {\n return _.forOwn(filters, (func, name) => liquid.registerFilter(name, func))\n}\n\nregisterAll.filters = filters\n","import 'regenerator-runtime/runtime'\nimport * as Scope from './scope'\nimport * as template from './template'\nimport * as _ from './util/underscore.js'\nimport assert from './util/assert.js'\nimport * as tokenizer from './tokenizer.js'\nimport Render from './render.js'\nimport Tag from './tag.js'\nimport Filter from './filter.js'\nimport Parser from './parser'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './syntax.js'\nimport { ParseError, TokenizationError, RenderBreakError, AssertionError } from './util/error.js'\nimport tags from './tags/index.js'\nimport filters from './filters.js'\n\nconst _engine = {\n init: function (tag, filter, options) {\n if (options.cache) {\n this.cache = {}\n }\n this.options = options\n this.tag = tag\n this.filter = filter\n this.parser = Parser(tag, filter)\n this.renderer = Render()\n\n tags(this, Liquid)\n filters(this, Liquid)\n\n return this\n },\n parse: function (html, filepath) {\n const tokens = tokenizer.parse(html, filepath, this.options)\n return this.parser.parse(tokens)\n },\n render: function (tpl, ctx, opts) {\n opts = _.assign({}, this.options, opts)\n const scope = Scope.factory(ctx, opts)\n return this.renderer.renderTemplates(tpl, scope)\n },\n parseAndRender: async function (html, ctx, opts) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n },\n getTemplate: async function (file, root) {\n const filepath = await template.resolve(file, root, this.options)\n return this.respectCache(filepath, async () => {\n const str = await template.read(filepath)\n return this.parse(str, filepath)\n })\n },\n renderFile: async function (file, ctx, opts) {\n opts = _.assign({}, opts)\n const templates = await this.getTemplate(file, opts.root)\n return this.render(templates, ctx, opts)\n },\n respectCache: async function (key, getter) {\n const cacheEnabled = this.options.cache\n if (cacheEnabled && this.cache[key]) {\n return this.cache[key]\n }\n const value = await getter()\n if (cacheEnabled) {\n this.cache[key] = value\n }\n return value\n },\n evalValue: function (str, scope) {\n const tpl = this.parser.parseValue(str.trim())\n return this.renderer.evalValue(tpl, scope)\n },\n registerFilter: function (name, filter) {\n return this.filter.register(name, filter)\n },\n registerTag: function (name, tag) {\n return this.tag.register(name, tag)\n },\n plugin: function (plugin) {\n return plugin.call(this, Liquid)\n },\n express: function (opts) {\n opts = opts || {}\n const self = this\n return function (filePath, ctx, cb) {\n assert(_.isArray(this.root) || _.isString(this.root),\n 'illegal views root, are you using express.js?')\n opts.root = this.root\n self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb)\n }\n }\n}\n\nfunction normalizeStringArray (value) {\n if (_.isArray(value)) return value\n if (_.isString(value)) return [value]\n throw new TypeError('illegal root: ' + value)\n}\n\nexport default function Liquid (options) {\n options = _.assign({\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_value_right: false,\n trim_value_left: false,\n greedy: true,\n strict_filters: false,\n strict_variables: false\n }, options)\n options.root = normalizeStringArray(options.root)\n\n const engine = _.create(_engine)\n engine.init(Tag(), Filter(options), options)\n return engine\n}\n\nLiquid.default = Liquid\nLiquid.isTruthy = isTruthy\nLiquid.isFalsy = isFalsy\nLiquid.evalExp = evalExp\nLiquid.evalValue = evalValue\nLiquid.Types = {\n ParseError,\n TokenizationError,\n RenderBreakError,\n AssertionError,\n AssignScope: {},\n CaptureScope: {},\n IncrementScope: {},\n DecrementScope: {}\n}\n"],"names":["global","Op","Object","prototype","hasOwn","hasOwnProperty","undefined","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","inModule","module","runtime","regeneratorRuntime","exports","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","_invoke","makeInvokeMethod","tryCatch","fn","obj","arg","type","call","err","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","constructor","displayName","defineIteratorMethods","forEach","method","isGeneratorFunction","genFun","ctor","name","mark","setPrototypeOf","__proto__","awrap","__await","AsyncIterator","invoke","resolve","reject","record","result","value","Promise","then","unwrapped","error","previousPromise","enqueue","callInvokeWithMethodAndArg","async","iter","next","done","state","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","TypeError","info","resultName","nextLoc","toString","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","keys","object","key","reverse","length","pop","iterable","iteratorMethod","isNaN","i","skipTempReset","prev","charAt","slice","rootEntry","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","thrown","Function","toStr","arrToStr","Array","isString","isFunction","promisify","arguments","stringify","isNil","String","to_liquid","toLiquid","to_s","indexOf","defaultToString","cache","JSON","isObject","proto","isArray","forOwn","iteratee","k","assign","srcs","src","last","arr","uniq","u","a","l","range","start","stop","step","singleQuoted","doubleQuoted","quoted","RegExp","source","quoteBalanced","integer","number","bool","identifier","subscript","literal","variable","rangeLimit","rangeCapture","hash","hashCapture","tagLine","literalLine","variableLine","numberLine","boolLine","quotedLine","rangeLine","integerLine","valueDeclaration","valueList","filter","filterCapture","filterLine","operators","isInteger","str","test","isLiteral","isVariable","matchValue","exec","parseLiteral","res","match","Number","toLowerCase","initError","captureStackTrace","initLiquidError","token","input","line","file","mkContext","message","mkMessage","stack","TokenizationError","_","ParseError","e","originalError","RenderError","tpl","RenderBreakError","AssertionError","lines","split","begin","Math","max","end","min","map","align","join","n","blank","msg","predicate","Scope","contexts","reduce","ctx","val","path","paths","propertyAccessSeq","scope","findContextFor","readProperty","v","some","unshift","findIndex","splice","candidate","readSize","liquid_method_missing","opts","strict_variables","seq","j","delemiter","matchRightBracket","lexical","get","size","factory","defaultOptions","anySeries","ret","item","idx","catch","mapSeries","x","statFileAsync","fs","stat","readFileAsync","readFile","filepath","root","options","extname","concat","code","read","whiteSpaceCtrl","tokens","greedy","inRaw","shouldTrimLeft","shouldTrimRight","trim_left","trim_tag_left","trim_value_left","trim_right","trim_tag_right","trim_value_right","trimLeft","rLeft","replace","trimRight","rRight","parse","rLiquid","currIndent","lineNumber","LineNumber","lastMatchEnd","lastIndex","index","parseHTMLToken","parseTagToken","trim","parseValueToken","raw","pos","args","htmlFragment","html","parsedLinesCount","lastMatchBegin","isTruthy","r","Operators","evalExp","exp","operatorREs","operatorRE","expRE","op","low","evalValue","high","isFalsy","render","templates","template","renderTag","partial","renderValue","renderTemplate","resolvedHTML","filters","initial","instance","markup","tagImpls","_tagInstance","tagImpl","impl","register","tag","construct","clear","valueRE","_filterInstance","output","apply","argList","strict_filters","re","keyMatch","currentMatchIsKey","Tag","Filter","stream","handlers","cb","event","h","trigger","stopRequested","shift","parseToken","parseTag","parseValue","substr","parseStream","s","init","liquid","Liquid","collection","renderer","renderTemplates","elseTemplates","offset","limit","reversed","forloop","finished","Types","registerTag","tagToken","remainTokens","p","parser","on","AssignScope","CaptureScope","cond","cases","branch","staticFileRE","withRE","staticValue","with","dynamicPartials","parseAndRender","getAll","blocks","blockMode","getTemplate","originBlocks","originBlockMode","DecrementScope","groupRE","rValue","candidatesRE","group","candidates","fingerprint","groups","branches","IncrementScope","staticLayout","layout","tpls","block","childDefined","cols","floor","col","row","engine","monthNames","dayNames","monthNamesShort","abbr","dayNamesShort","suffixes","_date","d","feb","isLeapYear","num","getMonth","daysInMonth","getDate","startDay","now","getDayOfYear","getDay","jan1","Date","getFullYear","_number","pad","year","parseInt","substring","ch","formatCodes","toLocaleString","century","getHours","getMilliseconds","getMinutes","getSuffix","round","valueOf","getSeconds","getWeekOfYear","toLocaleDateString","toLocaleTimeString","tz","getTimezoneOffset","abs","b","N","L","format","remaining","results","func","escapeMap","unescapeMap","toUpperCase","ceil","date","isValidDate","strftime","escape","unescape","bindFixed","pattern","replacement","arg1","arg2","amp","pow","sort","o","decodeURIComponent","encodeURIComponent","m","getFixed","getMaxFixed","f","toFixed","getTime","registerAll","registerFilter","_engine","Parser","Render","tokenizer","respectCache","getter","cacheEnabled","plugin","filePath","renderFile","normalizeStringArray","default"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"liquid.common.js","sources":["../src/util/underscore.ts","../src/lexical.js","../src/util/error.ts","../src/util/assert.ts","../src/scope.ts","../src/util/promise.js","../src/template.ts","../src/whitespace-ctrl.js","../src/tokenizer.js","../src/operators.js","../src/syntax.js","../src/render.js","../src/tag.js","../src/filter.js","../src/parser.ts","../src/tags/for.js","../src/tags/assign.js","../src/tags/capture.js","../src/tags/case.js","../src/tags/comment.js","../src/tags/include.js","../src/tags/decrement.js","../src/tags/cycle.js","../src/tags/if.js","../src/tags/increment.js","../src/tags/layout.js","../src/tags/raw.js","../src/tags/tablerow.js","../src/tags/unless.js","../src/tags/index.js","../src/util/strftime.js","../src/filters.js","../src/index.ts"],"sourcesContent":["const toStr = Object.prototype.toString\nconst arrToStr = Array.prototype.toString\n\n/*\n * Checks if value is classified as a String primitive or object.\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is a string, else false.\n */\nexport function isString (value) {\n return toStr.call(value) === '[object String]'\n}\n\nexport function isFunction (value) {\n return typeof value === 'function'\n}\n\nexport function promisify (fn) {\n return function (...args) {\n return new Promise((resolve, reject) => {\n fn(...args, (err, result) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value) {\n if (isNil(value)) return String(value)\n if (isFunction(value.to_liquid)) return stringify(value.to_liquid())\n if (isFunction(value.toLiquid)) return stringify(value.toLiquid())\n if (isFunction(value.to_s)) return value.to_s()\n if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value)\n if (isFunction(value.toString)) return value.toString()\n return toStr.call(value)\n}\n\nfunction defaultToString (value) {\n const cache = []\n return JSON.stringify(value, (key, value) => {\n if (isObject(value)) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n}\n\nexport function create (proto) {\n return Object.create(proto)\n}\n\nexport function isNil (value) {\n return value === null || value === undefined\n}\n\nexport function isArray (value) {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value) {\n const signature = toStr.call(value)\n // [object XXXError]\n return signature.substr(-6, 5) === 'Error' ||\n (typeof value.message === 'string' && typeof value.name === 'string')\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (object, iteratee) {\n object = object || {}\n for (const k in object) {\n if (object.hasOwnProperty(k)) {\n if (iteratee(object[k], k, object) === false) break\n }\n }\n return object\n}\n\n/*\n * Assigns own enumerable string keyed properties of source objects to the destination object.\n * Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * Note: This method mutates object and is loosely based on Object.assign.\n *\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @return {Object} Returns object.\n */\nexport function assign (obj, ...srcs) {\n obj = isObject(obj) ? obj : {}\n srcs.forEach(src => binaryAssign(obj, src))\n return obj\n}\n\nfunction binaryAssign(target, src) {\n for(let key in src) if (src.hasOwnProperty(key)) target[key] = src[key]\n}\n\nexport function last (arr) {\n return arr[arr.length - 1]\n}\n\nexport function uniq (arr) {\n const u = {}\n const a = []\n for (let i = 0, l = arr.length; i < l; ++i) {\n if (u.hasOwnProperty(arr[i])) {\n continue\n }\n a.push(arr[i])\n u[arr[i]] = 1\n }\n return a\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value) {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\n/*\n * A function to create flexibly-numbered lists of integers,\n * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.\n * Returns a list of integers from start (inclusive) to stop (exclusive),\n * incremented (or decremented) by step, exclusive.\n * Note that ranges that stop before they start are considered to be zero-length instead of\n * negative — if you'd like a negative range, use a negative step.\n */\nexport function range (start: number, stop: number, step?: number) {\n if (arguments.length === 1) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n","// quote related\nconst singleQuoted = /'[^']*'/\nconst doubleQuoted = /\"[^\"]*\"/\nexport const quoted = new RegExp(`${singleQuoted.source}|${doubleQuoted.source}`)\nexport const quoteBalanced = new RegExp(`(?:${quoted.source}|[^'\"])*`)\n\n// basic types\nexport const integer = /-?\\d+/\nexport const number = /-?\\d+\\.?\\d*|\\.?\\d+/\nexport const bool = /true|false/\n\n// property access\nexport const identifier = /[\\w-]+[?]?/\nexport const subscript = new RegExp(`\\\\[(?:${quoted.source}|[\\\\w-\\\\.]+)\\\\]`)\nexport const literal = new RegExp(`(?:${quoted.source}|${bool.source}|${number.source})`)\nexport const variable = new RegExp(`${identifier.source}(?:\\\\.${identifier.source}|${subscript.source})*`)\n\n// range related\nexport const rangeLimit = new RegExp(`(?:${variable.source}|${number.source})`)\nexport const range = new RegExp(`\\\\(${rangeLimit.source}\\\\.\\\\.${rangeLimit.source}\\\\)`)\nexport const rangeCapture = new RegExp(`\\\\((${rangeLimit.source})\\\\.\\\\.(${rangeLimit.source})\\\\)`)\n\nexport const value = new RegExp(`(?:${variable.source}|${literal.source}|${range.source})`)\n\n// hash related\nexport const hash = new RegExp(`(?:${identifier.source})\\\\s*:\\\\s*(?:${value.source})`)\nexport const hashCapture = new RegExp(`(${identifier.source})\\\\s*:\\\\s*(${value.source})`, 'g')\n\n// full match\nexport const tagLine = new RegExp(`^\\\\s*(${identifier.source})\\\\s*([\\\\s\\\\S]*)\\\\s*$`)\nexport const literalLine = new RegExp(`^${literal.source}$`, 'i')\nexport const variableLine = new RegExp(`^${variable.source}$`)\nexport const numberLine = new RegExp(`^${number.source}$`)\nexport const boolLine = new RegExp(`^${bool.source}$`, 'i')\nexport const quotedLine = new RegExp(`^${quoted.source}$`)\nexport const rangeLine = new RegExp(`^${rangeCapture.source}$`)\nexport const integerLine = new RegExp(`^${integer.source}$`)\n\n// filter related\nexport const valueDeclaration = new RegExp(`(?:${identifier.source}\\\\s*:\\\\s*)?${value.source}`)\nexport const valueList = new RegExp(`${valueDeclaration.source}(\\\\s*,\\\\s*${valueDeclaration.source})*`)\nexport const filter = new RegExp(`${identifier.source}(?:\\\\s*:\\\\s*${valueList.source})?`, 'g')\nexport const filterCapture = new RegExp(`(${identifier.source})(?:\\\\s*:\\\\s*(${valueList.source}))?`)\nexport const filterLine = new RegExp(`^${filterCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isInteger (str) {\n return integerLine.test(str)\n}\n\nexport function isLiteral (str) {\n return literalLine.test(str)\n}\n\nexport function isRange (str) {\n return rangeLine.test(str)\n}\n\nexport function isVariable (str) {\n return variableLine.test(str)\n}\n\nexport function matchValue (str) {\n return value.exec(str)\n}\n\nexport function parseLiteral (str) {\n let res = str.match(numberLine)\n if (res) {\n return Number(str)\n }\n res = str.match(boolLine)\n if (res) {\n return str.toLowerCase() === 'true'\n }\n res = str.match(quotedLine)\n if (res) {\n return str.slice(1, -1)\n }\n throw new TypeError(`cannot parse '${str}' as literal`)\n}\n","import * as _ from './underscore'\n\nfunction captureStack () {\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n}\n\nabstract class LiquidError {\n input: string\n line: string\n file: string\n message: string\n name: string\n stack: string\n token: any\n originalError: any\n constructor(err, token) {\n this.input = token.input\n this.line = token.line\n this.file = token.file\n this.originalError = err\n this.token = token\n }\n captureStackTrace(obj) {\n this.name = obj.constructor.name\n\n captureStack.call(obj)\n const err = this.originalError\n const context = mkContext(this.input, this.line)\n this.message = mkMessage(err.message, this.token)\n this.stack = context +\n '\\n' + (this.stack || this.message) +\n (err.stack ? '\\nFrom ' + err.stack : '')\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor(message, token) {\n super({message}, token)\n super.captureStackTrace(this)\n }\n}\nTokenizationError.prototype = _.create(Error.prototype)\nTokenizationError.prototype.constructor = TokenizationError\n\nexport class ParseError extends LiquidError {\n constructor(err, token) {\n super(err, token)\n _.assign(this, err)\n super.captureStackTrace(this)\n }\n}\nParseError.prototype = _.create(Error.prototype)\nParseError.prototype.constructor = ParseError\n\nexport class RenderError extends LiquidError {\n constructor(err, tpl) {\n super(err, tpl.token)\n _.assign(this, err)\n super.captureStackTrace(this)\n }\n}\nRenderError.prototype = _.create(Error.prototype)\nRenderError.prototype.constructor = RenderError\n\nexport class RenderBreakError {\n message: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nRenderBreakError.prototype = _.create(Error.prototype)\nRenderBreakError.prototype.constructor = RenderBreakError\n\nexport class AssertionError {\n message: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nAssertionError.prototype = _.create(Error.prototype)\nAssertionError.prototype.constructor = AssertionError\n\nfunction mkContext (input, targetLine) {\n const lines = input.split('\\n')\n const begin = Math.max(targetLine - 2, 1)\n const end = Math.min(targetLine + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === targetLine) ? '>> ' : ' '\n const num = padStart(String(end).length, lineNumber)\n const text = lines[lineNumber - 1]\n return `${indicator}${num}| ${text}`\n })\n .join('\\n')\n\n return context\n}\n\nfunction mkMessage (msg, token) {\n msg = msg || ''\n if (token.file) {\n msg += ', file:' + token.file\n }\n if (token.line) {\n msg += ', line:' + token.line\n }\n return msg\n}\n\nfunction padStart (length, str) {\n str = String(str)\n const blank = Array(length - str.length).join(' ')\n return blank + str\n}\n","import { AssertionError } from './error'\n\nexport default function (predicate: any, message: string) {\n if (!predicate) {\n message = message || `expect ${predicate} to be true`\n throw new AssertionError(message)\n }\n}\n","import * as _ from './util/underscore'\nimport * as lexical from './lexical'\nimport assert from './util/assert'\n\ninterface ScopeOptions {\n dynamicPartials: boolean\n strict_variables: boolean\n strict_filters: boolean\n blocks: object\n root: Array\n}\n\nexport default class Scope {\n opts: ScopeOptions\n contexts: Array\n constructor (ctx = {}, opts?: any) {\n const defaultOptions: ScopeOptions = {\n dynamicPartials: true,\n strict_variables: false,\n strict_filters: false,\n blocks: {},\n root: []\n }\n this.opts = _.assign(defaultOptions, opts)\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => _.assign(ctx, val), _.create(null))\n }\n get (path) {\n const paths = this.propertyAccessSeq(path)\n const scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n return paths.reduce((value, key) => this.readProperty(value, key), scope)\n }\n set (path, v) {\n const paths = this.propertyAccessSeq(path)\n let scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n paths.some((key, i) => {\n if (!_.isObject(scope)) {\n return true\n }\n if (i === paths.length - 1) {\n scope[key] = v\n return true\n }\n if (undefined === scope[key]) {\n scope[key] = {}\n }\n scope = scope[key]\n })\n }\n unshift (ctx) {\n return this.contexts.unshift(ctx)\n }\n push (ctx) {\n return this.contexts.push(ctx)\n }\n pop (ctx) {\n if (!arguments.length) {\n return this.contexts.pop()\n }\n const i = this.contexts.findIndex(scope => scope === ctx)\n if (i === -1) {\n throw new TypeError('scope not found, cannot pop')\n }\n return this.contexts.splice(i, 1)[0]\n }\n findContextFor (key, filter = (arg => true)) {\n for (let i = this.contexts.length - 1; i >= 0; i--) {\n const candidate = this.contexts[i]\n if (!filter(candidate)) continue\n if (key in candidate) {\n return candidate\n }\n }\n return null\n }\n readProperty (obj, key) {\n let val\n if (_.isNil(obj)) {\n val = undefined\n } else {\n obj = toLiquid(obj)\n val = key === 'size' ? readSize(obj) : obj[key]\n if (_.isFunction(obj.liquid_method_missing)) {\n val = obj.liquid_method_missing(key)\n }\n }\n if (_.isNil(val) && this.opts.strict_variables) {\n throw new TypeError(`undefined variable: ${key}`)\n }\n return val\n }\n\n /*\n * Parse property access sequence from access string\n * @example\n * accessSeq(\"foo.bar\") // ['foo', 'bar']\n * accessSeq(\"foo['bar']\") // ['foo', 'bar']\n * accessSeq(\"foo['b]r']\") // ['foo', 'b]r']\n * accessSeq(\"foo[bar.coo]\") // ['foo', 'bar'], for bar.coo == 'bar'\n */\n propertyAccessSeq (str) {\n str = String(str)\n const seq = []\n let name = ''\n let j\n let i = 0\n while (i < str.length) {\n switch (str[i]) {\n case '[':\n push()\n\n const delemiter = str[i + 1]\n if (/['\"]/.test(delemiter)) { // foo[\"bar\"]\n j = str.indexOf(delemiter, i + 2)\n assert(j !== -1, `unbalanced ${delemiter}: ${str}`)\n name = str.slice(i + 2, j)\n push()\n i = j + 2\n } else { // foo[bar.coo]\n j = matchRightBracket(str, i + 1)\n assert(j !== -1, `unbalanced []: ${str}`)\n name = str.slice(i + 1, j)\n if (!lexical.isInteger(name)) { // foo[bar] vs. foo[1]\n name = String(this.get(name))\n }\n push()\n i = j + 1\n }\n break\n case '.':// foo.bar, foo[0].bar\n push()\n i++\n break\n default:// foo.bar\n name += str[i]\n i++\n }\n }\n push()\n\n if (!seq.length) {\n throw new TypeError(`invalid path:\"${str}\"`)\n }\n return seq\n\n function push () {\n if (name.length) seq.push(name)\n name = ''\n }\n }\n}\n\nfunction toLiquid (obj) {\n if (_.isFunction(obj.to_liquid)) {\n return obj.to_liquid()\n }\n if (_.isFunction(obj.toLiquid)) {\n return obj.toLiquid()\n }\n return obj\n}\n\nfunction readSize (obj) {\n if (!_.isNil(obj.size)) return obj.size\n if (_.isArray(obj) || _.isString(obj)) return obj.length\n return obj.size\n}\n\nfunction matchRightBracket (str, begin) {\n let stack = 1 // count of '[' - count of ']'\n for (let i = begin; i < str.length; i++) {\n if (str[i] === '[') {\n stack++\n }\n if (str[i] === ']') {\n stack--\n if (stack === 0) {\n return i\n }\n }\n }\n return -1\n}\n","/*\n * Call functions in serial until someone resolved.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function anySeries (iterable, iteratee) {\n let ret = Promise.reject(new Error('init'))\n iterable.forEach(function (item, idx) {\n ret = ret.catch(e => iteratee(item, idx, iterable))\n })\n return ret\n}\n\n/*\n * Call functions in serial until someone rejected.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function mapSeries (iterable, iteratee) {\n let ret = Promise.resolve('init')\n const result = []\n iterable.forEach(function (item, idx) {\n ret = ret\n .then(() => iteratee(item, idx, iterable))\n .then(x => result.push(x))\n })\n return ret.then(() => result)\n}\n","import * as _ from './util/underscore'\nimport * as path from 'path'\nimport { anySeries } from './util/promise'\nimport * as fs from 'fs'\n\nconst statFileAsync = <(filepath: string) => Promise>_.promisify(fs.stat)\nconst readFileAsync = <(filepath: string, encoding: string) => Promise>_.promisify(fs.readFile)\n\nexport async function resolve (filepath, root, options) {\n if (!path.extname(filepath)) {\n filepath += options.extname\n }\n root = options.root.concat(root || [])\n root = _.uniq(root)\n const paths = root.map(root => path.resolve(root, filepath))\n return anySeries(paths, async path => {\n try {\n await statFileAsync(path)\n return path\n } catch (e) {\n e.message = `${e.code}: Failed to lookup ${filepath} in: ${root}`\n throw e\n }\n })\n}\n\nexport async function read (filepath): Promise {\n return readFileAsync(filepath, 'utf8')\n}\n","import { assign } from './util/underscore'\n\nexport default function whiteSpaceCtrl (tokens, options) {\n options = assign({ greedy: true }, options)\n let inRaw = false\n\n tokens.forEach((token, i) => {\n if (shouldTrimLeft(token, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && token.name === 'raw') inRaw = true\n if (token.type === 'tag' && token.name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token, inRaw, options) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trim_left || options.trim_tag_left\n if (token.type === 'value') return token.trim_left || options.trim_value_left\n}\n\nfunction shouldTrimRight (token, inRaw, options) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trim_right || options.trim_tag_right\n if (token.type === 'value') return token.trim_right || options.trim_value_right\n}\n\nfunction trimLeft (token, greedy) {\n if (!token || token.type !== 'html') return\n\n const rLeft = greedy ? /\\s+$/g : /[\\t\\r ]*$/g\n token.value = token.value.replace(rLeft, '')\n}\n\nfunction trimRight (token, greedy) {\n if (!token || token.type !== 'html') return\n\n const rRight = greedy ? /^\\s+/g : /^[\\t\\r ]*\\n?/g\n token.value = token.value.replace(rRight, '')\n}\n","import * as lexical from './lexical'\nimport { TokenizationError } from './util/error'\nimport * as _ from './util/underscore'\nimport assert from './util/assert'\nimport whiteSpaceCtrl from './whitespace-ctrl'\n\nexport { default as whiteSpaceCtrl } from './whitespace-ctrl'\n\nexport function parse (input, file, options) {\n assert(_.isString(input), 'illegal input')\n\n const rLiquid = /({%-?([\\s\\S]*?)-?%})|({{-?([\\s\\S]*?)-?}})/g\n let currIndent = 0\n const lineNumber = LineNumber(input)\n let lastMatchEnd = 0\n const tokens = []\n\n for (let match; (match = rLiquid.exec(input)); lastMatchEnd = rLiquid.lastIndex) {\n if (match.index > lastMatchEnd) {\n tokens.push(parseHTMLToken(lastMatchEnd, match.index))\n }\n tokens.push(match[1]\n ? parseTagToken(match[1], match[2].trim(), match.index)\n : parseValueToken(match[3], match[4].trim(), match.index))\n }\n if (input.length > lastMatchEnd) {\n tokens.push(parseHTMLToken(lastMatchEnd, input.length))\n }\n whiteSpaceCtrl(tokens, options)\n return tokens\n\n function parseTagToken (raw, value, pos) {\n const match = value.match(lexical.tagLine)\n const token = {\n type: 'tag',\n indent: currIndent,\n line: lineNumber.get(pos),\n trim_left: raw.slice(0, 3) === '{%-',\n trim_right: raw.slice(-3) === '-%}',\n raw,\n value,\n input,\n file\n }\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, token)\n }\n token.name = match[1]\n token.args = match[2]\n return token\n }\n\n function parseValueToken (raw, value, pos) {\n return {\n type: 'value',\n line: lineNumber.get(pos),\n trim_left: raw.slice(0, 3) === '{{-',\n trim_right: raw.slice(-3) === '-}}',\n raw,\n value,\n input,\n file\n }\n }\n\n function parseHTMLToken (begin, end) {\n const htmlFragment = input.slice(begin, end)\n currIndent = _.last((htmlFragment).split('\\n')).length\n\n return {\n type: 'html',\n raw: htmlFragment,\n value: htmlFragment\n }\n }\n}\n\nfunction LineNumber (html) {\n let parsedLinesCount = 0\n let lastMatchBegin = -1\n\n return {\n get: function (pos) {\n const lines = html.slice(lastMatchBegin + 1, pos).split('\\n')\n parsedLinesCount += lines.length - 1\n lastMatchBegin = pos\n return parsedLinesCount + 1\n }\n }\n}\n","export default function (isTruthy) {\n return {\n '==': (l, r) => l === r,\n '!=': (l, r) => l !== r,\n '>': (l, r) => l !== null && r !== null && l > r,\n '<': (l, r) => l !== null && r !== null && l < r,\n '>=': (l, r) => l !== null && r !== null && l >= r,\n '<=': (l, r) => l !== null && r !== null && l <= r,\n 'contains': (l, r) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l, r) => isTruthy(l) && isTruthy(r),\n 'or': (l, r) => isTruthy(l) || isTruthy(r)\n }\n}\n","import Operators from './operators'\nimport * as lexical from './lexical'\nimport assert from './util/assert'\n\nconst operators = Operators(isTruthy)\n\nexport function evalExp (exp, scope) {\n assert(scope, 'unable to evalExp: scope undefined')\n const operatorREs = lexical.operators\n let match\n for (let i = 0; i < operatorREs.length; i++) {\n const operatorRE = operatorREs[i]\n const expRE = new RegExp(`^(${lexical.quoteBalanced.source})(${operatorRE.source})(${lexical.quoteBalanced.source})$`)\n if ((match = exp.match(expRE))) {\n const l = evalExp(match[1], scope)\n const op = operators[match[2].trim()]\n const r = evalExp(match[3], scope)\n return op(l, r)\n }\n }\n\n if ((match = exp.match(lexical.rangeLine))) {\n const low = evalValue(match[1], scope)\n const high = evalValue(match[2], scope)\n const range = []\n for (let j = low; j <= high; j++) {\n range.push(j)\n }\n return range\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str, scope) {\n str = str && str.trim()\n if (!str) return undefined\n\n if (lexical.isLiteral(str)) {\n return lexical.parseLiteral(str)\n }\n if (lexical.isVariable(str)) {\n return scope.get(str)\n }\n throw new TypeError(`cannot eval '${str}' as value`)\n}\n\nexport function isTruthy (val) {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val) {\n return val === false || undefined === val || val === null\n}\n","import { evalExp } from './syntax'\nimport { RenderBreakError, RenderError } from './util/error'\nimport { stringify, create } from './util/underscore'\nimport assert from './util/assert'\n\nconst render = {\n renderTemplates: async function (templates, scope) {\n assert(scope, 'unable to evalTemplates: scope undefined')\n\n let html = ''\n for (const tpl of templates) {\n try {\n html += await renderTemplate.call(this, tpl)\n } catch (e) {\n if (e instanceof RenderBreakError) {\n e.resolvedHTML = html\n throw e\n }\n throw e instanceof RenderError ? e : new RenderError(e, tpl)\n }\n }\n return html\n\n async function renderTemplate (template) {\n if (template.type === 'tag') {\n const partial = await this.renderTag(template, scope)\n return partial === undefined ? '' : partial\n }\n if (template.type === 'value') {\n return this.renderValue(template, scope)\n }\n return template.value\n }\n },\n\n renderTag: async function (template, scope) {\n if (template.name === 'continue') {\n throw new RenderBreakError('continue')\n }\n if (template.name === 'break') {\n throw new RenderBreakError('break')\n }\n return template.render(scope)\n },\n\n renderValue: async function (template, scope) {\n const partial = this.evalValue(template, scope)\n return partial === undefined ? '' : stringify(partial)\n },\n\n evalValue: function (template, scope) {\n assert(scope, 'unable to evalValue: scope undefined')\n return template.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(template.initial, scope))\n }\n}\n\nexport default function () {\n const instance = create(render)\n return instance\n}\n","import { hashCapture } from './lexical'\nimport { create } from './util/underscore'\nimport { evalValue } from './syntax'\nimport assert from './util/assert'\n\nfunction hash (markup, scope) {\n const obj = {}\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n obj[k] = evalValue(v, scope)\n }\n return obj\n}\n\nexport default function () {\n let tagImpls = {}\n\n const _tagInstance = {\n render: async function (scope) {\n const obj = hash(this.token.args, scope)\n const impl = this.tagImpl\n if (typeof impl.render !== 'function') {\n return ''\n }\n return impl.render(scope, obj)\n },\n parse: function (token, tokens) {\n this.type = 'tag'\n this.token = token\n this.name = token.name\n\n const tagImpl = tagImpls[this.name]\n assert(tagImpl, `tag ${this.name} not found`)\n this.tagImpl = create(tagImpl)\n if (this.tagImpl.parse) {\n this.tagImpl.parse(token, tokens)\n }\n }\n }\n\n function register (name, tag) {\n tagImpls[name] = tag\n }\n\n function construct (token, tokens) {\n const instance = create(_tagInstance)\n instance.parse(token, tokens)\n return instance\n }\n\n function clear () {\n tagImpls = {}\n }\n\n return {\n construct,\n register,\n clear\n }\n}\n","import * as lexical from './lexical'\nimport { evalValue } from './syntax'\nimport assert from './util/assert'\nimport { assign, create } from './util/underscore'\n\nconst valueRE = new RegExp(`${lexical.value.source}`, 'g')\n\nexport default function (options) {\n options = assign({}, options)\n let filters = {}\n\n const _filterInstance = {\n render: function (output, scope) {\n const args = this.args.map(arg => evalValue(arg, scope))\n args.unshift(output)\n return this.filter.apply(null, args)\n },\n parse: function (str) {\n let match = lexical.filterLine.exec(str)\n assert(match, 'illegal filter: ' + str)\n\n const name = match[1]\n const argList = match[2] || ''\n const filter = filters[name]\n if (typeof filter !== 'function') {\n if (options.strict_filters) {\n throw new TypeError(`undefined filter: ${name}`)\n }\n this.name = name\n this.filter = x => x\n this.args = []\n return this\n }\n\n const args = []\n while ((match = valueRE.exec(argList.trim()))) {\n const v = match[0]\n const re = new RegExp(`${v}\\\\s*:`, 'g')\n const keyMatch = re.exec(match.input)\n const currentMatchIsKey = keyMatch && keyMatch.index === match.index\n currentMatchIsKey ? args.push(`'${v}'`) : args.push(v)\n }\n\n this.name = name\n this.filter = filter\n this.args = args\n\n return this\n }\n }\n\n function construct (str) {\n const instance = create(_filterInstance)\n return instance.parse(str)\n }\n\n function register (name, filter) {\n filters[name] = filter\n }\n\n function clear () {\n filters = {}\n }\n\n return {\n construct, register, clear\n }\n}\n","import * as lexical from './lexical'\nimport { ParseError } from './util/error'\nimport assert from './util/assert'\n\nexport default function (Tag, Filter) {\n class ParseStream {\n tokens: Array\n handlers: object\n stopRequested: boolean\n constructor (tokens) {\n this.tokens = tokens\n this.handlers = {}\n }\n on (name, cb) {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: any) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n }\n start () {\n this.trigger('start')\n let token\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' &&\n this.trigger(`tag:${token.name}`, token)) {\n continue\n }\n const template = parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n }\n stop () {\n this.stopRequested = true\n return this\n }\n }\n\n function parse (tokens) {\n let token\n const templates = []\n while ((token = tokens.shift())) {\n templates.push(parseToken(token, tokens))\n }\n return templates\n }\n\n function parseToken (token, tokens) {\n try {\n let tpl = null\n if (token.type === 'tag') {\n tpl = parseTag(token, tokens)\n } else if (token.type === 'value') {\n tpl = parseValue(token.value)\n } else { // token.type === 'html'\n tpl = token\n }\n tpl.token = token\n return tpl\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n\n function parseTag (token, tokens) {\n if (token.name === 'continue' || token.name === 'break') return token\n return Tag.construct(token, tokens)\n }\n\n function parseValue (str) {\n let match = lexical.matchValue(str)\n assert(match, `illegal value string: ${str}`)\n\n const initial = match[0]\n str = str.substr(match.index + match[0].length)\n\n const filters = []\n while ((match = lexical.filter.exec(str))) {\n filters.push([match[0].trim()])\n }\n\n return {\n type: 'value',\n initial: initial,\n filters: filters.map(str => Filter.construct(str))\n }\n }\n\n function parseStream (tokens) {\n return new ParseStream(tokens)\n }\n\n return {\n parse,\n parseTag,\n parseStream,\n parseValue\n }\n}\n","import { mapSeries } from '../util/promise'\nimport { isString, isObject, isArray } from '../util/underscore'\nimport assert from '../util/assert'\nimport { identifier, value, hash } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const RenderBreakError = Liquid.Types.RenderBreakError\n const re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\n liquid.registerTag('for', { parse, render })\n\n function parse (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n this.variable = match[1]\n this.collection = match[2]\n this.reversed = !!match[3]\n\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endfor', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n }\n async function render (scope, hash) {\n let collection = Liquid.evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]])\n }\n }\n if (!isArray(collection) || !collection.length) {\n return liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n if (this.reversed) collection.reverse()\n\n const contexts = collection.map((item, i) => {\n const ctx = {}\n ctx[this.variable] = item\n ctx.forloop = {\n first: i === 0,\n index: i + 1,\n index0: i,\n last: i === collection.length - 1,\n length: collection.length,\n rindex: collection.length - i,\n rindex0: collection.length - i - 1\n }\n return ctx\n })\n\n let html = ''\n let finished = false\n await mapSeries(contexts, async context => {\n if (finished) return\n\n scope.push(context)\n try {\n html += await liquid.renderer.renderTemplates(this.templates, scope)\n } catch (e) {\n if (e instanceof RenderBreakError) {\n html += e.resolvedHTML\n if (e.message === 'break') {\n finished = true\n }\n } else throw e\n }\n scope.pop(context)\n })\n return html\n }\n}\n","import assert from '../util/assert'\nimport { identifier } from '../lexical'\nimport { create } from '../util/underscore'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n const { AssignScope } = Liquid.Types\n\n liquid.registerTag('assign', {\n parse: function (token) {\n const match = token.args.match(re)\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (scope) {\n const ctx = create(AssignScope)\n ctx[this.key] = liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n })\n}\n","import assert from '../util/assert'\nimport { create } from '../util/underscore'\nimport { identifier } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`(${identifier.source})`)\n const { CaptureScope } = Liquid.Types\n\n liquid.registerTag('capture', {\n parse: function (tagToken, remainTokens) {\n const match = tagToken.args.match(re)\n assert(match, `${tagToken.args} not valid identifier`)\n\n this.variable = match[1]\n this.templates = []\n\n const stream = liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', token => stream.stop())\n .on('template', tpl => this.templates.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope, hash) {\n const html = await liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = create(CaptureScope)\n ctx[this.variable] = html\n scope.push(ctx)\n }\n })\n}\n","export default function (liquid, Liquid) {\n liquid.registerTag('case', {\n\n parse: function (tagToken, remainTokens) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p = []\n const stream = liquid.parser.parseStream(remainTokens)\n .on('tag:when', token => {\n this.cases.push({\n val: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endcase', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = Liquid.evalExp(branch.val, scope)\n const cond = Liquid.evalExp(this.cond, scope)\n if (val === cond) {\n return liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","export default function (liquid) {\n liquid.registerTag('comment', {\n parse: function (tagToken, remainTokens) {\n const stream = liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n })\n}\n","import assert from '../util/assert'\nimport { value, quotedLine } from '../lexical'\n\nconst staticFileRE = /[^\\s,]+/\n\nexport default function (liquid, Liquid) {\n const withRE = new RegExp(`with\\\\s+(${value.source})`)\n\n liquid.registerTag('include', {\n parse: function (token) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticValue = match[0]\n }\n\n match = value.exec(token.args)\n if (match) {\n this.value = match[0]\n }\n\n match = withRE.exec(token.args)\n if (match) {\n this.with = match[1]\n }\n },\n render: async function (scope, hash) {\n let filepath\n if (scope.opts.dynamicPartials) {\n if (quotedLine.exec(this.value)) {\n const template = this.value.slice(1, -1)\n filepath = await liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = Liquid.evalValue(this.value, scope)\n }\n } else {\n filepath = this.staticValue\n }\n assert(filepath, `cannot include with empty filename`)\n\n const originBlocks = scope.opts.blocks\n const originBlockMode = scope.opts.blockMode\n\n scope.opts.blocks = {}\n scope.opts.blockMode = 'output'\n if (this.with) {\n hash[filepath] = Liquid.evalValue(this.with, scope)\n }\n const templates = await liquid.getTemplate(filepath, scope.opts.root)\n scope.push(hash)\n const html = await liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.opts.blocks = originBlocks\n scope.opts.blockMode = originBlockMode\n return html\n }\n })\n}\n","import { create } from '../util/underscore'\nimport assert from '../util/assert'\nimport { identifier } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const { CaptureScope, AssignScope, DecrementScope } = Liquid.Types\n\n liquid.registerTag('decrement', {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope, hash) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n const proto = Object.getPrototypeOf(ctx)\n return proto !== CaptureScope && proto !== AssignScope\n }\n )\n if (!context) {\n context = create(DecrementScope)\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n return --context[this.variable]\n }\n })\n}\n","import assert from '../util/assert'\nimport { value as rValue } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\n const candidatesRE = new RegExp(rValue.source, 'g')\n\n liquid.registerTag('cycle', {\n\n parse: function (tagToken, remainTokens) {\n let match = groupRE.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.group = match[1] || ''\n const candidates = match[2]\n\n this.candidates = []\n\n while ((match = candidatesRE.exec(candidates))) {\n this.candidates.push(match[0])\n }\n assert(this.candidates.length, `empty candidates: ${tagToken.raw}`)\n },\n\n render: function (scope, hash) {\n const group = Liquid.evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n\n const groups = scope.opts.groups = scope.opts.groups || {}\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n\n return Liquid.evalValue(candidate, scope)\n }\n })\n}\n","export default function (liquid, Liquid) {\n liquid.registerTag('if', {\n\n parse: function (tagToken, remainTokens) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', token => {\n this.branches.push({\n cond: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endif', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n for (const branch of this.branches) {\n const cond = Liquid.evalExp(branch.cond, scope)\n if (Liquid.isTruthy(cond)) {\n return liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","import assert from '../util/assert'\nimport { create } from '../util/underscore'\nimport { identifier } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const { CaptureScope, AssignScope, IncrementScope } = Liquid.Types\n\n liquid.registerTag('increment', {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope, hash) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n const proto = Object.getPrototypeOf(ctx)\n return proto !== CaptureScope && proto !== AssignScope\n }\n )\n if (!context) {\n context = create(IncrementScope)\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n const val = context[this.variable]\n context[this.variable]++\n return val\n }\n })\n}\n","import assert from '../util/assert'\nimport { value as rValue } from '../lexical'\n\n/*\n * blockMode:\n * * \"store\": store rendered html into blocks\n * * \"output\": output rendered html\n */\n\nexport default function (liquid, Liquid) {\n const staticFileRE = /\\S+/\n\n liquid.registerTag('layout', {\n parse: function (token, remainTokens) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticLayout = match[0]\n }\n\n match = rValue.exec(token.args)\n if (match) {\n this.layout = match[0]\n }\n\n this.tpls = liquid.parser.parse(remainTokens)\n },\n render: async function (scope, hash) {\n const layout = scope.opts.dynamicPartials\n ? Liquid.evalValue(this.layout, scope)\n : this.staticLayout\n assert(layout, `cannot apply layout with empty filename`)\n\n // render the remaining tokens immediately\n scope.opts.blockMode = 'store'\n const html = await liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.opts.blocks[''] === undefined) {\n scope.opts.blocks[''] = html\n }\n const templates = await liquid.getTemplate(layout, scope.opts.root)\n scope.push(hash)\n scope.opts.blockMode = 'output'\n const partial = await liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n })\n\n liquid.registerTag('block', {\n parse: function (token, remainTokens) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n\n this.tpls = []\n const stream = liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', tpl => this.tpls.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${token.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope) {\n const childDefined = scope.opts.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.opts.blockMode === 'store') {\n scope.opts.blocks[this.block] = html\n return ''\n }\n return html\n }\n })\n}\n","export default function (liquid) {\n liquid.registerTag('raw', {\n parse: function (tagToken, remainTokens) {\n this.tokens = []\n\n const stream = liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\n if (token.name === 'endraw') stream.stop()\n else this.tokens.push(token)\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: function (scope, hash) {\n return this.tokens.map(token => token.raw).join('')\n }\n })\n}\n","import { mapSeries } from '../util/promise'\nimport assert from '../util/assert'\nimport { identifier, value, hash } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\n liquid.registerTag('tablerow', {\n\n parse: function (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.variable = match[1]\n this.collection = match[2]\n this.templates = []\n\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: async function (scope, hash) {\n let collection = Liquid.evalExp(this.collection, scope) || []\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = hash.cols || collection.length\n const contexts = collection.map((item, i) => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row\n let html = ''\n await mapSeries(contexts, async (context, idx) => {\n row = Math.floor(idx / cols) + 1\n const col = (idx % cols) + 1\n if (col === 1) {\n if (row !== 1) {\n html += ''\n }\n html += ``\n }\n\n html += ``\n scope.push(context)\n html += await liquid.renderer.renderTemplates(this.templates, scope)\n html += ''\n scope.pop(context)\n return html\n })\n if (row > 0) {\n html += ''\n }\n return html\n }\n })\n}\n","export default function (liquid, Liquid) {\n liquid.registerTag('unless', {\n parse: function (tagToken, remainTokens) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', x => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n const cond = Liquid.evalExp(this.cond, scope)\n return Liquid.isFalsy(cond)\n ? liquid.renderer.renderTemplates(this.templates, scope)\n : liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","import For from './for'\nimport Assign from './assign'\nimport Capture from './capture'\nimport Case from './case'\nimport Comment from './comment'\nimport Include from './include'\nimport Decrement from './decrement'\nimport Cycle from './cycle'\nimport If from './if'\nimport Increment from './increment'\nimport Layout from './layout'\nimport Raw from './raw'\nimport Tablerow from './tablerow'\nimport Unless from './unless'\n\nexport default function (engine, Liquid) {\n Assign(engine, Liquid)\n Capture(engine, Liquid)\n Case(engine, Liquid)\n Comment(engine, Liquid)\n Cycle(engine, Liquid)\n Decrement(engine, Liquid)\n For(engine, Liquid)\n If(engine, Liquid)\n Include(engine, Liquid)\n Increment(engine, Liquid)\n Layout(engine, Liquid)\n Raw(engine, Liquid)\n Tablerow(engine, Liquid)\n Unless(engine, Liquid)\n}\n","const monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst monthNamesShort = monthNames.map(abbr)\nconst dayNamesShort = dayNames.map(abbr)\nconst suffixes = {\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n 'default': 'th'\n}\n\nfunction abbr (str) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d) {\n const feb = _date.isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n },\n\n getDayOfYear: function (d) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += _date.daysInMonth(d)[i]\n }\n return num + d.getDate()\n },\n\n // Startday is an integer of which day to start the week measuring from\n // TODO: that comment was retarted. fix it.\n getWeekOfYear: function (d, startDay) {\n // Skip to startDay of this week\n const now = this.getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return _number.pad(Math.floor((now - then) / 7) + 1, 2)\n },\n\n isLeapYear: function (d) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d) {\n const str = d.getDate().toString()\n const index = parseInt(str.slice(-1))\n return suffixes[index] || suffixes['default']\n },\n\n century: function (d) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst _number = {\n pad: function (value, size, ch) {\n if (!ch) ch = '0'\n let result = value.toString()\n let pad = size - result.length\n\n while (pad-- > 0) {\n result = ch + result\n }\n\n return result\n }\n}\n\nconst formatCodes = {\n a: function (d) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d) {\n return dayNames[d.getDay()]\n },\n b: function (d) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d) {\n return monthNames[d.getMonth()]\n },\n c: function (d) {\n return d.toLocaleString()\n },\n C: function (d) {\n return _date.century(d)\n },\n d: function (d) {\n return _number.pad(d.getDate(), 2)\n },\n e: function (d) {\n return _number.pad(d.getDate(), 2, ' ')\n },\n H: function (d) {\n return _number.pad(d.getHours(), 2)\n },\n I: function (d) {\n return _number.pad(d.getHours() % 12 || 12, 2)\n },\n j: function (d) {\n return _number.pad(_date.getDayOfYear(d), 3)\n },\n k: function (d) {\n return _number.pad(d.getHours(), 2, ' ')\n },\n l: function (d) {\n return _number.pad(d.getHours() % 12 || 12, 2, ' ')\n },\n L: function (d) {\n return _number.pad(d.getMilliseconds(), 3)\n },\n m: function (d) {\n return _number.pad(d.getMonth() + 1, 2)\n },\n M: function (d) {\n return _number.pad(d.getMinutes(), 2)\n },\n p: function (d) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d) {\n return _date.getSuffix(d)\n },\n s: function (d) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d) {\n return _number.pad(d.getSeconds(), 2)\n },\n u: function (d) {\n return d.getDay() || 7\n },\n U: function (d) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d) {\n return d.getDay()\n },\n W: function (d) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d) {\n return d.toLocaleDateString()\n },\n X: function (d) {\n return d.toLocaleTimeString()\n },\n y: function (d) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d) {\n return d.getFullYear()\n },\n z: function (d) {\n const tz = d.getTimezoneOffset() / 60 * 100\n return (tz > 0 ? '-' : '+') + _number.pad(Math.abs(tz), 4)\n },\n '%': function () {\n return '%'\n }\n}\nformatCodes.h = formatCodes.b\nformatCodes.N = formatCodes.L\n\nexport default function (d, format) {\n let output = ''\n let remaining = format\n\n while (true) {\n const r = /%./g\n const results = r.exec(remaining)\n\n // No more format codes. Add the remaining text and return\n if (!results) {\n return output + remaining\n }\n\n // Add the preceding text\n output += remaining.slice(0, r.lastIndex - 2)\n remaining = remaining.slice(r.lastIndex)\n\n // Add the format code\n const ch = results[0].charAt(1)\n const func = formatCodes[ch]\n output += func ? func.call(this, d) : '%' + ch\n }\n}\n","import strftime from './util/strftime'\nimport * as _ from './util/underscore'\nimport { isTruthy } from './syntax'\n\nconst escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nconst filters = {\n 'abs': v => Math.abs(v),\n 'append': (v, arg) => v + arg,\n 'capitalize': str => stringify(str).charAt(0).toUpperCase() + str.slice(1),\n 'ceil': v => Math.ceil(v),\n 'concat': (v, arg) => Array.prototype.concat.call(v, arg),\n 'date': (v, arg) => {\n let date = v\n if (v === 'now') {\n date = new Date()\n } else if (_.isString(v)) {\n date = new Date(v)\n }\n return isValidDate(date) ? strftime(date, arg) : v\n },\n 'default': (v, arg) => isTruthy(v) ? v : arg,\n 'divided_by': (v, arg) => v / arg,\n 'downcase': v => v.toLowerCase(),\n 'escape': escape,\n\n 'escape_once': str => escape(unescape(str)),\n 'first': v => v[0],\n 'floor': v => Math.floor(v),\n 'join': (v, arg) => v.join(arg === undefined ? ' ' : arg),\n 'last': v => _.last(v),\n 'lstrip': v => stringify(v).replace(/^\\s+/, ''),\n 'map': (arr, arg) => arr.map(v => v[arg]),\n 'minus': bindFixed((v, arg) => v - arg),\n 'modulo': bindFixed((v, arg) => v % arg),\n 'newline_to_br': v => v.replace(/\\n/g, '
'),\n 'plus': bindFixed((v, arg) => Number(v) + Number(arg)),\n 'prepend': (v, arg) => arg + v,\n 'remove': (v, arg) => v.split(arg).join(''),\n 'remove_first': (v, l) => v.replace(l, ''),\n 'replace': (v, pattern, replacement) =>\n stringify(v).split(pattern).join(replacement),\n 'replace_first': (v, arg1, arg2) => stringify(v).replace(arg1, arg2),\n 'reverse': v => v.reverse(),\n 'round': (v, arg) => {\n const amp = Math.pow(10, arg || 0)\n return Math.round(v * amp, arg) / amp\n },\n 'rstrip': str => stringify(str).replace(/\\s+$/, ''),\n 'size': v => v.length,\n 'slice': (v, begin, length) => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'sort': (v, arg) => v.sort(arg),\n 'split': (v, arg) => stringify(v).split(arg),\n 'strip': (v) => stringify(v).trim(),\n 'strip_html': v => stringify(v).replace(/|||<.*?>/g, ''),\n 'strip_newlines': v => stringify(v).replace(/\\n/g, ''),\n 'times': (v, arg) => v * arg,\n 'truncate': (v, l, o) => {\n v = stringify(v)\n o = (o === undefined) ? '...' : o\n l = l || 16\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v, l, o) => {\n if (o === undefined) o = '...'\n const arr = v.split(' ')\n let ret = arr.slice(0, l).join(' ')\n if (arr.length > l) ret += o\n return ret\n },\n 'uniq': function (arr) {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(val)) {\n return false\n }\n u[val] = true\n return true\n })\n },\n 'upcase': str => stringify(str).toUpperCase(),\n 'url_decode': x => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': x => x.split(' ').map(encodeURIComponent).join('+')\n}\n\nfunction escape (str) {\n return stringify(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str) {\n return stringify(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nfunction getFixed (v) {\n const p = (v + '').split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction getMaxFixed (l, r) {\n return Math.max(getFixed(l), getFixed(r))\n}\n\nfunction stringify (obj) {\n return obj + ''\n}\n\nfunction bindFixed (cb) {\n return (l, r) => {\n const f = getMaxFixed(l, r)\n return cb(l, r).toFixed(f)\n }\n}\n\nfunction isValidDate (date) {\n return date instanceof Date && !isNaN(date.getTime())\n}\n\nexport default function registerAll (liquid, Liquid) {\n return _.forOwn(filters, (func, name) => liquid.registerFilter(name, func))\n}\n\nregisterAll.filters = filters\n","import Scope from './scope'\nimport * as template from './template'\nimport * as _ from './util/underscore'\nimport assert from './util/assert'\nimport * as tokenizer from './tokenizer'\nimport Render from './render'\nimport Tag from './tag'\nimport Filter from './filter'\nimport Parser from './parser'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './syntax'\nimport { ParseError, TokenizationError, RenderBreakError, AssertionError } from './util/error'\nimport tags from './tags/index'\nimport filters from './filters'\n\nexport default class Liquid {\n private cache: object\n private options: any\n private tags: any\n private filters: any\n private parser: any\n private renderer: any\n\n constructor (options) {\n options = _.assign({\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_value_right: false,\n trim_value_left: false,\n greedy: true,\n strict_filters: false,\n strict_variables: false\n }, options)\n options.root = normalizeStringArray(options.root)\n\n if (options.cache) {\n this.cache = {}\n }\n this.options = options\n this.tags = Tag()\n this.filters = Filter(options)\n this.parser = Parser(this.tags, this.filters)\n this.renderer = Render()\n\n tags(this, Liquid)\n filters(this, Liquid)\n }\n parse(html: string, filepath?: string) {\n const tokens = tokenizer.parse(html, filepath, this.options)\n return this.parser.parse(tokens)\n }\n render(tpl: string, ctx: any, opts: any) {\n opts = _.assign({}, this.options, opts)\n const scope = new Scope(ctx, opts)\n return this.renderer.renderTemplates(tpl, scope)\n }\n async parseAndRender(html, ctx, opts) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n }\n async getTemplate(file, root) {\n const filepath = await template.resolve(file, root, this.options)\n return this.respectCache(filepath, async () => {\n const str = await template.read(filepath)\n return this.parse(str, filepath)\n })\n }\n async renderFile(file, ctx, opts) {\n opts = _.assign({}, opts)\n const templates = await this.getTemplate(file, opts.root)\n return this.render(templates, ctx, opts)\n }\n async respectCache (key, getter) {\n const cacheEnabled = this.options.cache\n if (cacheEnabled && this.cache[key]) {\n return this.cache[key]\n }\n const value = await getter()\n if (cacheEnabled) {\n this.cache[key] = value\n }\n return value\n }\n evalValue (str, scope) {\n const tpl = this.parser.parseValue(str.trim())\n return this.renderer.evalValue(tpl, scope)\n }\n registerFilter (name, filter) {\n return this.filters.register(name, filter)\n }\n registerTag (name, tag) {\n return this.tags.register(name, tag)\n }\n plugin (plugin) {\n return plugin.call(this, Liquid)\n }\n express (opts) {\n opts = opts || {}\n const self = this\n return function (filePath, ctx, cb) {\n assert(_.isArray(this.root) || _.isString(this.root),\n 'illegal views root, are you using express.js?')\n opts.root = this.root\n self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb)\n }\n }\n static default = Liquid\n static isTruthy = isTruthy\n static isFalsy = isFalsy\n static evalExp = evalExp\n static evalValue = evalValue\n static Types = {\n ParseError,\n TokenizationError,\n RenderBreakError,\n AssertionError,\n AssignScope: {},\n CaptureScope: {},\n IncrementScope: {},\n DecrementScope: {}\n }\n}\n\nfunction normalizeStringArray (value) {\n if (_.isArray(value)) return value\n if (_.isString(value)) return [value]\n throw new TypeError('illegal root: ' + value)\n}\n"],"names":["range","tslib_1.__extends","_.create","_.assign","_\r\n .range","path","_.last","value","_.isObject","filter","_.isNil","_.isFunction","lexical.isInteger","_.isArray","_.isString","_.promisify","fs.stat","fs.readFile","path.extname","_.uniq","path.resolve","lexical.tagLine","operators","lexical.operators","lexical.quoteBalanced","lexical.rangeLine","lexical.isLiteral","lexical.parseLiteral","lexical.isVariable","hash","lexical.value","lexical.filterLine","lexical.matchValue","lexical.filter","rValue","stringify","_.forOwn","filters","tokenizer.parse","template.resolve","template.read"],"mappings":"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"} \ No newline at end of file diff --git a/dist/liquid.js b/dist/liquid.js index 9c7d304fd..2b1575177 100644 --- a/dist/liquid.js +++ b/dist/liquid.js @@ -1,3593 +1,2245 @@ /* - * liquidjs@6.4.3, https://github.com/harttle/liquidjs + * liquidjs@7.0.0, https://github.com/harttle/liquidjs * (c) 2016-2019 harttle * Released under the MIT License. */ (function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global = global || self, global.Liquid = factory()); + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.Liquid = factory()); }(this, function () { 'use strict'; - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { - return typeof obj; - } : function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - - var asyncToGenerator = function (fn) { - return function () { - var gen = fn.apply(this, arguments); - return new Promise(function (resolve, reject) { - function step(key, arg) { - try { - var info = gen[key](arg); - var value = info.value; - } catch (error) { - reject(error); - return; - } - - if (info.done) { - resolve(value); - } else { - return Promise.resolve(value).then(function (value) { - step("next", value); - }, function (err) { - step("throw", err); - }); - } - } - - return step("next"); - }); - }; - }; - - /** - * Copyright (c) 2014-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - - !function (global) { - - var Op = Object.prototype; - var hasOwn = Op.hasOwnProperty; - var undefined; // More compressible than void 0. - var $Symbol = typeof Symbol === "function" ? Symbol : {}; - var iteratorSymbol = $Symbol.iterator || "@@iterator"; - var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; - var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; - - var inModule = (typeof module === "undefined" ? "undefined" : _typeof(module)) === "object"; - var runtime = global.regeneratorRuntime; - if (runtime) { - if (inModule) { - // If regeneratorRuntime is defined globally and we're in a module, - // make the exports object identical to regeneratorRuntime. - module.exports = runtime; - } - // Don't bother evaluating the rest of this file if the runtime was - // already defined globally. - return; + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. All rights reserved. + Licensed under the Apache License, Version 2.0 (the "License"); you may not use + this file except in compliance with the License. You may obtain a copy of the + License at http://www.apache.org/licenses/LICENSE-2.0 + + THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED + WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, + MERCHANTABLITY OR NON-INFRINGEMENT. + + See the Apache Version 2.0 License for specific language governing permissions + and limitations under the License. + ***************************************************************************** */ + /* global Reflect, Promise */ + + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + + function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + + function __awaiter(thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + } + + function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } } - // Define the runtime globally (as expected by generated code) as either - // module.exports (if we're in a module) or a new, empty object. - runtime = global.regeneratorRuntime = inModule ? module.exports : {}; - - function wrap(innerFn, outerFn, self, tryLocsList) { - // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. - var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; - var generator = Object.create(protoGenerator.prototype); - var context = new Context(tryLocsList || []); - - // The ._invoke method unifies the implementations of the .next, - // .throw, and .return methods. - generator._invoke = makeInvokeMethod(innerFn, self, context); - - return generator; - } - runtime.wrap = wrap; - - // Try/catch helper to minimize deoptimizations. Returns a completion - // record like context.tryEntries[i].completion. This interface could - // have been (and was previously) designed to take a closure to be - // invoked without arguments, but in all the cases we care about we - // already have an existing method we want to call, so there's no need - // to create a new function object. We can even get away with assuming - // the method takes exactly one argument, since that happens to be true - // in every case, so we don't have to touch the arguments object. The - // only additional allocation required is the completion record, which - // has a stable shape and so hopefully should be cheap to allocate. - function tryCatch(fn, obj, arg) { - try { - return { type: "normal", arg: fn.call(obj, arg) }; - } catch (err) { - return { type: "throw", arg: err }; - } + var toStr = Object.prototype.toString; + var arrToStr = Array.prototype.toString; + /* + * Checks if value is classified as a String primitive or object. + * @param {any} value The value to check. + * @return {Boolean} Returns true if value is a string, else false. + */ + function isString(value) { + return toStr.call(value) === '[object String]'; + } + function isFunction(value) { + return typeof value === 'function'; + } + function stringify(value) { + if (isNil(value)) + return String(value); + if (isFunction(value.to_liquid)) + return stringify(value.to_liquid()); + if (isFunction(value.toLiquid)) + return stringify(value.toLiquid()); + if (isFunction(value.to_s)) + return value.to_s(); + if ([toStr, arrToStr].indexOf(value.toString) > -1) + return defaultToString(value); + if (isFunction(value.toString)) + return value.toString(); + return toStr.call(value); + } + function defaultToString(value) { + var cache = []; + return JSON.stringify(value, function (key, value) { + if (isObject(value)) { + if (cache.indexOf(value) !== -1) { + return; + } + cache.push(value); + } + return value; + }); + } + function create(proto) { + return Object.create(proto); + } + function isNil(value) { + return value === null || value === undefined; + } + function isArray(value) { + // be compatible with IE 8 + return toStr.call(value) === '[object Array]'; + } + /* + * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property. + * The iteratee is invoked with three arguments: (value, key, object). + * Iteratee functions may exit iteration early by explicitly returning false. + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @return {Object} Returns object. + */ + function forOwn(object, iteratee) { + object = object || {}; + for (var k in object) { + if (object.hasOwnProperty(k)) { + if (iteratee(object[k], k, object) === false) + break; + } + } + return object; + } + /* + * Assigns own enumerable string keyed properties of source objects to the destination object. + * Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * Note: This method mutates object and is loosely based on Object.assign. + * + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @return {Object} Returns object. + */ + function assign(obj) { + var srcs = []; + for (var _i = 1; _i < arguments.length; _i++) { + srcs[_i - 1] = arguments[_i]; + } + obj = isObject(obj) ? obj : {}; + srcs.forEach(function (src) { return binaryAssign(obj, src); }); + return obj; + } + function binaryAssign(target, src) { + for (var key in src) + if (src.hasOwnProperty(key)) + target[key] = src[key]; + } + function last(arr) { + return arr[arr.length - 1]; + } + /* + * Checks if value is the language type of Object. + * (e.g. arrays, functions, objects, regexes, new Number(0), and new String('')) + * @param {any} value The value to check. + * @return {Boolean} Returns true if value is an object, else false. + */ + function isObject(value) { + var type = typeof value; + return value !== null && (type === 'object' || type === 'function'); + } + /* + * A function to create flexibly-numbered lists of integers, + * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1. + * Returns a list of integers from start (inclusive) to stop (exclusive), + * incremented (or decremented) by step, exclusive. + * Note that ranges that stop before they start are considered to be zero-length instead of + * negative — if you'd like a negative range, use a negative step. + */ + function range(start, stop, step) { + if (arguments.length === 1) { + stop = start; + start = 0; + } + step = step || 1; + var arr = []; + for (var i = start; i < stop; i += step) { + arr.push(i); + } + return arr; } - var GenStateSuspendedStart = "suspendedStart"; - var GenStateSuspendedYield = "suspendedYield"; - var GenStateExecuting = "executing"; - var GenStateCompleted = "completed"; - - // Returning this object from the innerFn has the same effect as - // breaking out of the dispatch switch statement. - var ContinueSentinel = {}; - - // Dummy constructor functions that we use as the .constructor and - // .constructor.prototype properties for functions that return Generator - // objects. For full spec compliance, you may wish to configure your - // minifier not to mangle the names of these two functions. - function Generator() {} - function GeneratorFunction() {} - function GeneratorFunctionPrototype() {} - - // This is a polyfill for %IteratorPrototype% for environments that - // don't natively support it. - var IteratorPrototype = {}; - IteratorPrototype[iteratorSymbol] = function () { - return this; - }; - - var getProto = Object.getPrototypeOf; - var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); - if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { - // This environment has a native %IteratorPrototype%; use it instead - // of the polyfill. - IteratorPrototype = NativeIteratorPrototype; + // quote related + var singleQuoted = /'[^']*'/; + var doubleQuoted = /"[^"]*"/; + var quoted = new RegExp(singleQuoted.source + "|" + doubleQuoted.source); + var quoteBalanced = new RegExp("(?:" + quoted.source + "|[^'\"])*"); + // basic types + var integer = /-?\d+/; + var number = /-?\d+\.?\d*|\.?\d+/; + var bool = /true|false/; + // property access + var identifier = /[\w-]+[?]?/; + var subscript = new RegExp("\\[(?:" + quoted.source + "|[\\w-\\.]+)\\]"); + var literal = new RegExp("(?:" + quoted.source + "|" + bool.source + "|" + number.source + ")"); + var variable = new RegExp(identifier.source + "(?:\\." + identifier.source + "|" + subscript.source + ")*"); + // range related + var rangeLimit = new RegExp("(?:" + variable.source + "|" + number.source + ")"); + var range$1 = new RegExp("\\(" + rangeLimit.source + "\\.\\." + rangeLimit.source + "\\)"); + var rangeCapture = new RegExp("\\((" + rangeLimit.source + ")\\.\\.(" + rangeLimit.source + ")\\)"); + var value = new RegExp("(?:" + variable.source + "|" + literal.source + "|" + range$1.source + ")"); + // hash related + var hash = new RegExp("(?:" + identifier.source + ")\\s*:\\s*(?:" + value.source + ")"); + var hashCapture = new RegExp("(" + identifier.source + ")\\s*:\\s*(" + value.source + ")", 'g'); + // full match + var tagLine = new RegExp("^\\s*(" + identifier.source + ")\\s*([\\s\\S]*)\\s*$"); + var literalLine = new RegExp("^" + literal.source + "$", 'i'); + var variableLine = new RegExp("^" + variable.source + "$"); + var numberLine = new RegExp("^" + number.source + "$"); + var boolLine = new RegExp("^" + bool.source + "$", 'i'); + var quotedLine = new RegExp("^" + quoted.source + "$"); + var rangeLine = new RegExp("^" + rangeCapture.source + "$"); + var integerLine = new RegExp("^" + integer.source + "$"); + // filter related + var valueDeclaration = new RegExp("(?:" + identifier.source + "\\s*:\\s*)?" + value.source); + var valueList = new RegExp(valueDeclaration.source + "(\\s*,\\s*" + valueDeclaration.source + ")*"); + var filter = new RegExp(identifier.source + "(?:\\s*:\\s*" + valueList.source + ")?", 'g'); + var filterCapture = new RegExp("(" + identifier.source + ")(?:\\s*:\\s*(" + valueList.source + "))?"); + var filterLine = new RegExp("^" + filterCapture.source + "$"); + var operators = [ + /\s+or\s+/, + /\s+and\s+/, + /==|!=|<=|>=|<|>|\s+contains\s+/ + ]; + function isInteger(str) { + return integerLine.test(str); + } + function isLiteral(str) { + return literalLine.test(str); + } + function isVariable(str) { + return variableLine.test(str); + } + function matchValue(str) { + return value.exec(str); + } + function parseLiteral(str) { + var res = str.match(numberLine); + if (res) { + return Number(str); + } + res = str.match(boolLine); + if (res) { + return str.toLowerCase() === 'true'; + } + res = str.match(quotedLine); + if (res) { + return str.slice(1, -1); + } + throw new TypeError("cannot parse '" + str + "' as literal"); } - var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); - GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; - GeneratorFunctionPrototype.constructor = GeneratorFunction; - GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = "GeneratorFunction"; - - // Helper for defining the .next, .throw, and .return methods of the - // Iterator interface in terms of a single ._invoke method. - function defineIteratorMethods(prototype) { - ["next", "throw", "return"].forEach(function (method) { - prototype[method] = function (arg) { - return this._invoke(method, arg); - }; - }); + function captureStack() { + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + } + var LiquidError = /** @class */ (function () { + function LiquidError(err, token) { + this.input = token.input; + this.line = token.line; + this.file = token.file; + this.originalError = err; + this.token = token; + } + LiquidError.prototype.captureStackTrace = function (obj) { + this.name = obj.constructor.name; + captureStack.call(obj); + var err = this.originalError; + var context = mkContext(this.input, this.line); + this.message = mkMessage(err.message, this.token); + this.stack = context + + '\n' + (this.stack || this.message) + + (err.stack ? '\nFrom ' + err.stack : ''); + }; + return LiquidError; + }()); + var TokenizationError = /** @class */ (function (_super) { + __extends(TokenizationError, _super); + function TokenizationError(message, token) { + var _this = _super.call(this, { message: message }, token) || this; + _super.prototype.captureStackTrace.call(_this, _this); + return _this; + } + return TokenizationError; + }(LiquidError)); + TokenizationError.prototype = create(Error.prototype); + TokenizationError.prototype.constructor = TokenizationError; + var ParseError = /** @class */ (function (_super) { + __extends(ParseError, _super); + function ParseError(err, token) { + var _this = _super.call(this, err, token) || this; + assign(_this, err); + _super.prototype.captureStackTrace.call(_this, _this); + return _this; + } + return ParseError; + }(LiquidError)); + ParseError.prototype = create(Error.prototype); + ParseError.prototype.constructor = ParseError; + var RenderError = /** @class */ (function (_super) { + __extends(RenderError, _super); + function RenderError(err, tpl) { + var _this = _super.call(this, err, tpl.token) || this; + assign(_this, err); + _super.prototype.captureStackTrace.call(_this, _this); + return _this; + } + return RenderError; + }(LiquidError)); + RenderError.prototype = create(Error.prototype); + RenderError.prototype.constructor = RenderError; + var RenderBreakError = /** @class */ (function () { + function RenderBreakError(message) { + captureStack.call(this); + this.message = message + ''; + } + return RenderBreakError; + }()); + RenderBreakError.prototype = create(Error.prototype); + RenderBreakError.prototype.constructor = RenderBreakError; + var AssertionError = /** @class */ (function () { + function AssertionError(message) { + captureStack.call(this); + this.message = message + ''; + } + return AssertionError; + }()); + AssertionError.prototype = create(Error.prototype); + AssertionError.prototype.constructor = AssertionError; + function mkContext(input, targetLine) { + var lines = input.split('\n'); + var begin = Math.max(targetLine - 2, 1); + var end = Math.min(targetLine + 3, lines.length); + var context = range(begin, end + 1) + .map(function (lineNumber) { + var indicator = (lineNumber === targetLine) ? '>> ' : ' '; + var num = padStart(String(end).length, lineNumber); + var text = lines[lineNumber - 1]; + return "" + indicator + num + "| " + text; + }) + .join('\n'); + return context; + } + function mkMessage(msg, token) { + msg = msg || ''; + if (token.file) { + msg += ', file:' + token.file; + } + if (token.line) { + msg += ', line:' + token.line; + } + return msg; + } + function padStart(length, str) { + str = String(str); + var blank = Array(length - str.length).join(' '); + return blank + str; } - runtime.isGeneratorFunction = function (genFun) { - var ctor = typeof genFun === "function" && genFun.constructor; - return ctor ? ctor === GeneratorFunction || - // For the native GeneratorFunction constructor, the best we can - // do is to check its .name property. - (ctor.displayName || ctor.name) === "GeneratorFunction" : false; - }; - - runtime.mark = function (genFun) { - if (Object.setPrototypeOf) { - Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); - } else { - genFun.__proto__ = GeneratorFunctionPrototype; - if (!(toStringTagSymbol in genFun)) { - genFun[toStringTagSymbol] = "GeneratorFunction"; - } - } - genFun.prototype = Object.create(Gp); - return genFun; - }; - - // Within the body of any async function, `await x` is transformed to - // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test - // `hasOwn.call(value, "__await")` to determine if the yielded value is - // meant to be awaited. - runtime.awrap = function (arg) { - return { __await: arg }; - }; - - function AsyncIterator(generator) { - function invoke(method, arg, resolve, reject) { - var record = tryCatch(generator[method], generator, arg); - if (record.type === "throw") { - reject(record.arg); - } else { - var result = record.arg; - var value = result.value; - if (value && (typeof value === "undefined" ? "undefined" : _typeof(value)) === "object" && hasOwn.call(value, "__await")) { - return Promise.resolve(value.__await).then(function (value) { - invoke("next", value, resolve, reject); - }, function (err) { - invoke("throw", err, resolve, reject); - }); - } - - return Promise.resolve(value).then(function (unwrapped) { - // When a yielded Promise is resolved, its final value becomes - // the .value of the Promise<{value,done}> result for the - // current iteration. - result.value = unwrapped; - resolve(result); - }, function (error) { - // If a rejected Promise was yielded, throw the rejection back - // into the async generator function so it can be handled there. - return invoke("throw", error, resolve, reject); - }); - } - } - - var previousPromise; - - function enqueue(method, arg) { - function callInvokeWithMethodAndArg() { - return new Promise(function (resolve, reject) { - invoke(method, arg, resolve, reject); - }); - } - - return previousPromise = - // If enqueue has been called before, then we want to wait until - // all previous Promises have been resolved before calling invoke, - // so that results are always delivered in the correct order. If - // enqueue has not been called before, then it is important to - // call invoke immediately, without waiting on a callback to fire, - // so that the async generator function has the opportunity to do - // any necessary setup in a predictable way. This predictability - // is why the Promise constructor synchronously invokes its - // executor callback, and why async functions synchronously - // execute code before the first await. Since we implement simple - // async functions in terms of async generators, it is especially - // important to get this right, even though it requires care. - previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, - // Avoid propagating failures to Promises returned by later - // invocations of the iterator. - callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); - } - - // Define the unified helper method that is used to implement .next, - // .throw, and .return (see defineIteratorMethods). - this._invoke = enqueue; + function assert (predicate, message) { + if (!predicate) { + message = message || "expect " + predicate + " to be true"; + throw new AssertionError(message); + } } - defineIteratorMethods(AsyncIterator.prototype); - AsyncIterator.prototype[asyncIteratorSymbol] = function () { - return this; - }; - runtime.AsyncIterator = AsyncIterator; - - // Note that simple async functions are implemented on top of - // AsyncIterator objects; they just return a Promise for the value of - // the final result produced by the iterator. - runtime.async = function (innerFn, outerFn, self, tryLocsList) { - var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList)); - - return runtime.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator. - : iter.next().then(function (result) { - return result.done ? result.value : iter.next(); - }); - }; - - function makeInvokeMethod(innerFn, self, context) { - var state = GenStateSuspendedStart; - - return function invoke(method, arg) { - if (state === GenStateExecuting) { - throw new Error("Generator is already running"); - } - - if (state === GenStateCompleted) { - if (method === "throw") { - throw arg; - } - - // Be forgiving, per 25.3.3.3.3 of the spec: - // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume - return doneResult(); - } - - context.method = method; - context.arg = arg; - - while (true) { - var delegate = context.delegate; - if (delegate) { - var delegateResult = maybeInvokeDelegate(delegate, context); - if (delegateResult) { - if (delegateResult === ContinueSentinel) continue; - return delegateResult; - } - } - - if (context.method === "next") { - // Setting context._sent for legacy support of Babel's - // function.sent implementation. - context.sent = context._sent = context.arg; - } else if (context.method === "throw") { - if (state === GenStateSuspendedStart) { - state = GenStateCompleted; - throw context.arg; - } - - context.dispatchException(context.arg); - } else if (context.method === "return") { - context.abrupt("return", context.arg); - } - - state = GenStateExecuting; - - var record = tryCatch(innerFn, self, context); - if (record.type === "normal") { - // If an exception is thrown from innerFn, we leave state === - // GenStateExecuting and loop back for another invocation. - state = context.done ? GenStateCompleted : GenStateSuspendedYield; - - if (record.arg === ContinueSentinel) { - continue; - } - - return { - value: record.arg, - done: context.done - }; - } else if (record.type === "throw") { - state = GenStateCompleted; - // Dispatch the exception by looping back around to the - // context.dispatchException(context.arg) call above. - context.method = "throw"; - context.arg = record.arg; - } - } - }; + var Scope = /** @class */ (function () { + function Scope(ctx, opts) { + if (ctx === void 0) { ctx = {}; } + var defaultOptions = { + dynamicPartials: true, + strict_variables: false, + strict_filters: false, + blocks: {}, + root: [] + }; + this.opts = assign(defaultOptions, opts); + this.contexts = [ctx || {}]; + } + Scope.prototype.getAll = function () { + return this.contexts.reduce(function (ctx, val) { return assign(ctx, val); }, create(null)); + }; + Scope.prototype.get = function (path) { + var _this = this; + var paths = this.propertyAccessSeq(path); + var scope = this.findContextFor(paths[0]) || last(this.contexts); + return paths.reduce(function (value$$1, key) { return _this.readProperty(value$$1, key); }, scope); + }; + Scope.prototype.set = function (path, v) { + var paths = this.propertyAccessSeq(path); + var scope = this.findContextFor(paths[0]) || last(this.contexts); + paths.some(function (key, i) { + if (!isObject(scope)) { + return true; + } + if (i === paths.length - 1) { + scope[key] = v; + return true; + } + if (undefined === scope[key]) { + scope[key] = {}; + } + scope = scope[key]; + }); + }; + Scope.prototype.unshift = function (ctx) { + return this.contexts.unshift(ctx); + }; + Scope.prototype.push = function (ctx) { + return this.contexts.push(ctx); + }; + Scope.prototype.pop = function (ctx) { + if (!arguments.length) { + return this.contexts.pop(); + } + var i = this.contexts.findIndex(function (scope) { return scope === ctx; }); + if (i === -1) { + throw new TypeError('scope not found, cannot pop'); + } + return this.contexts.splice(i, 1)[0]; + }; + Scope.prototype.findContextFor = function (key, filter$$1) { + if (filter$$1 === void 0) { filter$$1 = (function (arg) { return true; }); } + for (var i = this.contexts.length - 1; i >= 0; i--) { + var candidate = this.contexts[i]; + if (!filter$$1(candidate)) + continue; + if (key in candidate) { + return candidate; + } + } + return null; + }; + Scope.prototype.readProperty = function (obj, key) { + var val; + if (isNil(obj)) { + val = undefined; + } + else { + obj = toLiquid(obj); + val = key === 'size' ? readSize(obj) : obj[key]; + if (isFunction(obj.liquid_method_missing)) { + val = obj.liquid_method_missing(key); + } + } + if (isNil(val) && this.opts.strict_variables) { + throw new TypeError("undefined variable: " + key); + } + return val; + }; + /* + * Parse property access sequence from access string + * @example + * accessSeq("foo.bar") // ['foo', 'bar'] + * accessSeq("foo['bar']") // ['foo', 'bar'] + * accessSeq("foo['b]r']") // ['foo', 'b]r'] + * accessSeq("foo[bar.coo]") // ['foo', 'bar'], for bar.coo == 'bar' + */ + Scope.prototype.propertyAccessSeq = function (str) { + str = String(str); + var seq = []; + var name = ''; + var j; + var i = 0; + while (i < str.length) { + switch (str[i]) { + case '[': + push(); + var delemiter = str[i + 1]; + if (/['"]/.test(delemiter)) { // foo["bar"] + j = str.indexOf(delemiter, i + 2); + assert(j !== -1, "unbalanced " + delemiter + ": " + str); + name = str.slice(i + 2, j); + push(); + i = j + 2; + } + else { // foo[bar.coo] + j = matchRightBracket(str, i + 1); + assert(j !== -1, "unbalanced []: " + str); + name = str.slice(i + 1, j); + if (!isInteger(name)) { // foo[bar] vs. foo[1] + name = String(this.get(name)); + } + push(); + i = j + 1; + } + break; + case '.': // foo.bar, foo[0].bar + push(); + i++; + break; + default: // foo.bar + name += str[i]; + i++; + } + } + push(); + if (!seq.length) { + throw new TypeError("invalid path:\"" + str + "\""); + } + return seq; + function push() { + if (name.length) + seq.push(name); + name = ''; + } + }; + return Scope; + }()); + function toLiquid(obj) { + if (isFunction(obj.to_liquid)) { + return obj.to_liquid(); + } + if (isFunction(obj.toLiquid)) { + return obj.toLiquid(); + } + return obj; + } + function readSize(obj) { + if (!isNil(obj.size)) + return obj.size; + if (isArray(obj) || isString(obj)) + return obj.length; + return obj.size; + } + function matchRightBracket(str, begin) { + var stack = 1; // count of '[' - count of ']' + for (var i = begin; i < str.length; i++) { + if (str[i] === '[') { + stack++; + } + if (str[i] === ']') { + stack--; + if (stack === 0) { + return i; + } + } + } + return -1; } - // Call delegate.iterator[context.method](context.arg) and handle the - // result, either by returning a { value, done } result from the - // delegate iterator, or by modifying context.method and context.arg, - // setting context.delegate to null, and returning the ContinueSentinel. - function maybeInvokeDelegate(delegate, context) { - var method = delegate.iterator[context.method]; - if (method === undefined) { - // A .throw or .return when the delegate iterator has no .throw - // method always terminates the yield* loop. - context.delegate = null; - - if (context.method === "throw") { - if (delegate.iterator.return) { - // If the delegate iterator has a return method, give it a - // chance to clean up. - context.method = "return"; - context.arg = undefined; - maybeInvokeDelegate(delegate, context); - - if (context.method === "throw") { - // If maybeInvokeDelegate(context) changed context.method from - // "return" to "throw", let that override the TypeError below. - return ContinueSentinel; - } - } - - context.method = "throw"; - context.arg = new TypeError("The iterator does not provide a 'throw' method"); - } - - return ContinueSentinel; - } - - var record = tryCatch(method, delegate.iterator, context.arg); - - if (record.type === "throw") { - context.method = "throw"; - context.arg = record.arg; - context.delegate = null; - return ContinueSentinel; - } - - var info = record.arg; - - if (!info) { - context.method = "throw"; - context.arg = new TypeError("iterator result is not an object"); - context.delegate = null; - return ContinueSentinel; - } - - if (info.done) { - // Assign the result of the finished delegate to the temporary - // variable specified by delegate.resultName (see delegateYield). - context[delegate.resultName] = info.value; - - // Resume execution at the desired location (see delegateYield). - context.next = delegate.nextLoc; - - // If context.method was "throw" but the delegate handled the - // exception, let the outer generator proceed normally. If - // context.method was "next", forget context.arg since it has been - // "consumed" by the delegate iterator. If context.method was - // "return", allow the original .return call to continue in the - // outer generator. - if (context.method !== "return") { - context.method = "next"; - context.arg = undefined; - } - } else { - // Re-yield the result returned by the delegate method. - return info; - } - - // The delegate iterator is finished, so forget it and continue with - // the outer generator. - context.delegate = null; - return ContinueSentinel; + function domResolve(root, path) { + var base = document.createElement('base'); + base.href = root; + var head = document.getElementsByTagName('head')[0]; + head.insertBefore(base, head.firstChild); + var a = document.createElement('a'); + a.href = path; + var resolved = a.href; + head.removeChild(base); + return resolved; + } + function resolve(filepath, root, options) { + root = root || options.root; + if (isArray(root)) { + root = root[0]; + } + if (root.length && last(root) !== '/') { + root += '/'; + } + var url = domResolve(root, filepath); + return url.replace(/^(\w+:\/\/[^/]+)(\/[^?]+)/, function (str, origin, path) { + var last$$1 = path.split('/').pop(); + if (/\.\w+$/.test(last$$1)) { + return str; + } + return origin + path + options.extname; + }); + } + function read(url) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, new Promise(function (resolve, reject) { + var xhr = new XMLHttpRequest(); + xhr.onload = function () { + if (xhr.status >= 200 && xhr.status < 300) { + resolve(xhr.responseText); + } + else { + reject(new Error(xhr.statusText)); + } + }; + xhr.onerror = function () { + reject(new Error('An error occurred whilst receiving the response.')); + }; + xhr.open('GET', url); + xhr.send(); + })]; + }); + }); } - // Define Generator.prototype.{next,throw,return} in terms of the - // unified ._invoke helper method. - defineIteratorMethods(Gp); - - Gp[toStringTagSymbol] = "Generator"; - - // A Generator should always return itself as the iterator object when the - // @@iterator function is called on it. Some browsers' implementations of the - // iterator prototype chain incorrectly implement this, causing the Generator - // object to not be returned from this call. This ensures that doesn't happen. - // See https://github.com/facebook/regenerator/issues/274 for more details. - Gp[iteratorSymbol] = function () { - return this; - }; - - Gp.toString = function () { - return "[object Generator]"; - }; - - function pushTryEntry(locs) { - var entry = { tryLoc: locs[0] }; - - if (1 in locs) { - entry.catchLoc = locs[1]; - } - - if (2 in locs) { - entry.finallyLoc = locs[2]; - entry.afterLoc = locs[3]; - } - - this.tryEntries.push(entry); + function whiteSpaceCtrl(tokens, options) { + options = assign({ greedy: true }, options); + var inRaw = false; + tokens.forEach(function (token, i) { + if (shouldTrimLeft(token, inRaw, options)) { + trimLeft(tokens[i - 1], options.greedy); + } + if (token.type === 'tag' && token.name === 'raw') + inRaw = true; + if (token.type === 'tag' && token.name === 'endraw') + inRaw = false; + if (shouldTrimRight(token, inRaw, options)) { + trimRight(tokens[i + 1], options.greedy); + } + }); + } + function shouldTrimLeft(token, inRaw, options) { + if (inRaw) + return false; + if (token.type === 'tag') + return token.trim_left || options.trim_tag_left; + if (token.type === 'value') + return token.trim_left || options.trim_value_left; + } + function shouldTrimRight(token, inRaw, options) { + if (inRaw) + return false; + if (token.type === 'tag') + return token.trim_right || options.trim_tag_right; + if (token.type === 'value') + return token.trim_right || options.trim_value_right; + } + function trimLeft(token, greedy) { + if (!token || token.type !== 'html') + return; + var rLeft = greedy ? /\s+$/g : /[\t\r ]*$/g; + token.value = token.value.replace(rLeft, ''); + } + function trimRight(token, greedy) { + if (!token || token.type !== 'html') + return; + var rRight = greedy ? /^\s+/g : /^[\t\r ]*\n?/g; + token.value = token.value.replace(rRight, ''); } - function resetTryEntry(entry) { - var record = entry.completion || {}; - record.type = "normal"; - delete record.arg; - entry.completion = record; + function parse(input, file, options) { + assert(isString(input), 'illegal input'); + var rLiquid = /({%-?([\s\S]*?)-?%})|({{-?([\s\S]*?)-?}})/g; + var currIndent = 0; + var lineNumber = LineNumber(input); + var lastMatchEnd = 0; + var tokens = []; + for (var match = void 0; (match = rLiquid.exec(input)); lastMatchEnd = rLiquid.lastIndex) { + if (match.index > lastMatchEnd) { + tokens.push(parseHTMLToken(lastMatchEnd, match.index)); + } + tokens.push(match[1] + ? parseTagToken(match[1], match[2].trim(), match.index) + : parseValueToken(match[3], match[4].trim(), match.index)); + } + if (input.length > lastMatchEnd) { + tokens.push(parseHTMLToken(lastMatchEnd, input.length)); + } + whiteSpaceCtrl(tokens, options); + return tokens; + function parseTagToken(raw, value$$1, pos) { + var match = value$$1.match(tagLine); + var token = { + type: 'tag', + indent: currIndent, + line: lineNumber.get(pos), + trim_left: raw.slice(0, 3) === '{%-', + trim_right: raw.slice(-3) === '-%}', + raw: raw, + value: value$$1, + input: input, + file: file + }; + if (!match) { + throw new TokenizationError("illegal tag syntax", token); + } + token.name = match[1]; + token.args = match[2]; + return token; + } + function parseValueToken(raw, value$$1, pos) { + return { + type: 'value', + line: lineNumber.get(pos), + trim_left: raw.slice(0, 3) === '{{-', + trim_right: raw.slice(-3) === '-}}', + raw: raw, + value: value$$1, + input: input, + file: file + }; + } + function parseHTMLToken(begin, end) { + var htmlFragment = input.slice(begin, end); + currIndent = last((htmlFragment).split('\n')).length; + return { + type: 'html', + raw: htmlFragment, + value: htmlFragment + }; + } + } + function LineNumber(html) { + var parsedLinesCount = 0; + var lastMatchBegin = -1; + return { + get: function (pos) { + var lines = html.slice(lastMatchBegin + 1, pos).split('\n'); + parsedLinesCount += lines.length - 1; + lastMatchBegin = pos; + return parsedLinesCount + 1; + } + }; } - function Context(tryLocsList) { - // The root entry object (effectively a try statement without a catch - // or a finally block) gives us a place to store values thrown from - // locations where there is no enclosing try statement. - this.tryEntries = [{ tryLoc: "root" }]; - tryLocsList.forEach(pushTryEntry, this); - this.reset(true); + function Operators (isTruthy) { + return { + '==': function (l, r) { return l === r; }, + '!=': function (l, r) { return l !== r; }, + '>': function (l, r) { return l !== null && r !== null && l > r; }, + '<': function (l, r) { return l !== null && r !== null && l < r; }, + '>=': function (l, r) { return l !== null && r !== null && l >= r; }, + '<=': function (l, r) { return l !== null && r !== null && l <= r; }, + 'contains': function (l, r) { + if (!l) + return false; + if (typeof l.indexOf !== 'function') + return false; + return l.indexOf(r) > -1; + }, + 'and': function (l, r) { return isTruthy(l) && isTruthy(r); }, + 'or': function (l, r) { return isTruthy(l) || isTruthy(r); } + }; } - runtime.keys = function (object) { - var keys = []; - for (var key in object) { - keys.push(key); - } - keys.reverse(); - - // Rather than returning an object with a next method, we keep - // things simple and return the next function itself. - return function next() { - while (keys.length) { - var key = keys.pop(); - if (key in object) { - next.value = key; - next.done = false; - return next; - } - } - - // To avoid creating an additional object, we just hang the .value - // and .done properties off the next function object itself. This - // also ensures that the minifier will not anonymize the function. - next.done = true; - return next; - }; - }; - - function values(iterable) { - if (iterable) { - var iteratorMethod = iterable[iteratorSymbol]; - if (iteratorMethod) { - return iteratorMethod.call(iterable); - } - - if (typeof iterable.next === "function") { - return iterable; - } - - if (!isNaN(iterable.length)) { - var i = -1, - next = function next() { - while (++i < iterable.length) { - if (hasOwn.call(iterable, i)) { - next.value = iterable[i]; - next.done = false; - return next; - } - } - - next.value = undefined; - next.done = true; - - return next; - }; - - return next.next = next; - } - } - - // Return an iterator with no values. - return { next: doneResult }; - } - runtime.values = values; - - function doneResult() { - return { value: undefined, done: true }; + var operators$1 = Operators(isTruthy); + function evalExp(exp, scope) { + assert(scope, 'unable to evalExp: scope undefined'); + var operatorREs = operators; + var match; + for (var i = 0; i < operatorREs.length; i++) { + var operatorRE = operatorREs[i]; + var expRE = new RegExp("^(" + quoteBalanced.source + ")(" + operatorRE.source + ")(" + quoteBalanced.source + ")$"); + if ((match = exp.match(expRE))) { + var l = evalExp(match[1], scope); + var op = operators$1[match[2].trim()]; + var r = evalExp(match[3], scope); + return op(l, r); + } + } + if ((match = exp.match(rangeLine))) { + var low = evalValue(match[1], scope); + var high = evalValue(match[2], scope); + var range = []; + for (var j = low; j <= high; j++) { + range.push(j); + } + return range; + } + return evalValue(exp, scope); + } + function evalValue(str, scope) { + str = str && str.trim(); + if (!str) + return undefined; + if (isLiteral(str)) { + return parseLiteral(str); + } + if (isVariable(str)) { + return scope.get(str); + } + throw new TypeError("cannot eval '" + str + "' as value"); + } + function isTruthy(val) { + return !isFalsy(val); + } + function isFalsy(val) { + return val === false || undefined === val || val === null; } - Context.prototype = { - constructor: Context, - - reset: function reset(skipTempReset) { - this.prev = 0; - this.next = 0; - // Resetting context._sent for legacy support of Babel's - // function.sent implementation. - this.sent = this._sent = undefined; - this.done = false; - this.delegate = null; - - this.method = "next"; - this.arg = undefined; - - this.tryEntries.forEach(resetTryEntry); - - if (!skipTempReset) { - for (var name in this) { - // Not sure about the optimal order of these conditions: - if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) { - this[name] = undefined; - } - } - } - }, - - stop: function stop() { - this.done = true; - - var rootEntry = this.tryEntries[0]; - var rootRecord = rootEntry.completion; - if (rootRecord.type === "throw") { - throw rootRecord.arg; - } - - return this.rval; - }, - - dispatchException: function dispatchException(exception) { - if (this.done) { - throw exception; - } - - var context = this; - function handle(loc, caught) { - record.type = "throw"; - record.arg = exception; - context.next = loc; - - if (caught) { - // If the dispatched exception was caught by a catch block, - // then let that catch block handle the exception normally. - context.method = "next"; - context.arg = undefined; - } - - return !!caught; - } - - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - var record = entry.completion; - - if (entry.tryLoc === "root") { - // Exception thrown outside of any try block that could handle - // it, so set the completion value of the entire function to - // throw the exception. - return handle("end"); - } - - if (entry.tryLoc <= this.prev) { - var hasCatch = hasOwn.call(entry, "catchLoc"); - var hasFinally = hasOwn.call(entry, "finallyLoc"); - - if (hasCatch && hasFinally) { - if (this.prev < entry.catchLoc) { - return handle(entry.catchLoc, true); - } else if (this.prev < entry.finallyLoc) { - return handle(entry.finallyLoc); - } - } else if (hasCatch) { - if (this.prev < entry.catchLoc) { - return handle(entry.catchLoc, true); - } - } else if (hasFinally) { - if (this.prev < entry.finallyLoc) { - return handle(entry.finallyLoc); - } - } else { - throw new Error("try statement without catch or finally"); - } - } - } - }, - - abrupt: function abrupt(type, arg) { - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { - var finallyEntry = entry; - break; - } - } - - if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) { - // Ignore the finally entry if control is not jumping to a - // location outside the try/catch block. - finallyEntry = null; - } - - var record = finallyEntry ? finallyEntry.completion : {}; - record.type = type; - record.arg = arg; - - if (finallyEntry) { - this.method = "next"; - this.next = finallyEntry.finallyLoc; - return ContinueSentinel; - } - - return this.complete(record); - }, - - complete: function complete(record, afterLoc) { - if (record.type === "throw") { - throw record.arg; - } - - if (record.type === "break" || record.type === "continue") { - this.next = record.arg; - } else if (record.type === "return") { - this.rval = this.arg = record.arg; - this.method = "return"; - this.next = "end"; - } else if (record.type === "normal" && afterLoc) { - this.next = afterLoc; - } - - return ContinueSentinel; - }, - - finish: function finish(finallyLoc) { - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - if (entry.finallyLoc === finallyLoc) { - this.complete(entry.completion, entry.afterLoc); - resetTryEntry(entry); - return ContinueSentinel; - } - } - }, - - "catch": function _catch(tryLoc) { - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - if (entry.tryLoc === tryLoc) { - var record = entry.completion; - if (record.type === "throw") { - var thrown = record.arg; - resetTryEntry(entry); - } - return thrown; - } - } - - // The context.catch method must only be called with a location - // argument that corresponds to a known catch block. - throw new Error("illegal catch attempt"); - }, - - delegateYield: function delegateYield(iterable, resultName, nextLoc) { - this.delegate = { - iterator: values(iterable), - resultName: resultName, - nextLoc: nextLoc - }; - - if (this.method === "next") { - // Deliberately forget the last sent value so that we don't - // accidentally pass it on to the delegate. - this.arg = undefined; - } - - return ContinueSentinel; - } - }; - }( - // In sloppy mode, unbound `this` refers to the global object, fallback to - // Function constructor if we're in global strict mode. That is sadly a form - // of indirect eval which violates Content Security Policy. - function () { - return this || (typeof self === "undefined" ? "undefined" : _typeof(self)) === "object" && self; - }() || Function("return this")()); - - var toStr = Object.prototype.toString; - var arrToStr = Array.prototype.toString; - - /* - * Checks if value is classified as a String primitive or object. - * @param {any} value The value to check. - * @return {Boolean} Returns true if value is a string, else false. - */ - function isString(value) { - return toStr.call(value) === '[object String]'; - } - - function isFunction(value) { - return typeof value === 'function'; - } - - function stringify(value) { - if (isNil(value)) return String(value); - if (isFunction(value.to_liquid)) return stringify(value.to_liquid()); - if (isFunction(value.toLiquid)) return stringify(value.toLiquid()); - if (isFunction(value.to_s)) return value.to_s(); - if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value); - if (isFunction(value.toString)) return value.toString(); - return toStr.call(value); - } - - function defaultToString(value) { - var cache = []; - return JSON.stringify(value, function (key, value) { - if (isObject(value)) { - if (cache.indexOf(value) !== -1) { - return; - } - cache.push(value); - } - return value; - }); - } - - function create(proto) { - return Object.create(proto); - } - - function isNil(value) { - return value === null || value === undefined; - } - - function isArray(value) { - // be compatible with IE 8 - return toStr.call(value) === '[object Array]'; - } - - /* - * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property. - * The iteratee is invoked with three arguments: (value, key, object). - * Iteratee functions may exit iteration early by explicitly returning false. - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @return {Object} Returns object. - */ - function forOwn(object, iteratee) { - object = object || {}; - for (var k in object) { - if (object.hasOwnProperty(k)) { - if (iteratee(object[k], k, object) === false) break; - } - } - return object; - } - - /* - * Assigns own enumerable string keyed properties of source objects to the destination object. - * Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * Note: This method mutates object and is loosely based on Object.assign. - * - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @return {Object} Returns object. - */ - function assign(object) { - object = isObject(object) ? object : {}; - var srcs = Array.prototype.slice.call(arguments, 1); - srcs.forEach(function (src) { - return Object.assign(object, src); - }); - return object; - } - - function last(arr) { - return arr[arr.length - 1]; - } - - /* - * Checks if value is the language type of Object. - * (e.g. arrays, functions, objects, regexes, new Number(0), and new String('')) - * @param {any} value The value to check. - * @return {Boolean} Returns true if value is an object, else false. - */ - function isObject(value) { - var type = typeof value === 'undefined' ? 'undefined' : _typeof(value); - return value !== null && (type === 'object' || type === 'function'); - } - - /* - * A function to create flexibly-numbered lists of integers, - * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1. - * Returns a list of integers from start (inclusive) to stop (exclusive), - * incremented (or decremented) by step, exclusive. - * Note that ranges that stop before they start are considered to be zero-length instead of - * negative — if you'd like a negative range, use a negative step. - */ - function range(start, stop, step) { - if (arguments.length === 1) { - stop = start; - start = 0; - } - step = step || 1; - - var arr = []; - for (var i = start; i < stop; i += step) { - arr.push(i); - } - return arr; - } - - // quote related - var singleQuoted = /'[^']*'/; - var doubleQuoted = /"[^"]*"/; - var quoted = new RegExp(singleQuoted.source + '|' + doubleQuoted.source); - var quoteBalanced = new RegExp('(?:' + quoted.source + '|[^\'"])*'); - - // basic types - var integer = /-?\d+/; - var number = /-?\d+\.?\d*|\.?\d+/; - var bool = /true|false/; - - // property access - var identifier = /[\w-]+[?]?/; - var subscript = new RegExp('\\[(?:' + quoted.source + '|[\\w-\\.]+)\\]'); - var literal = new RegExp('(?:' + quoted.source + '|' + bool.source + '|' + number.source + ')'); - var variable = new RegExp(identifier.source + '(?:\\.' + identifier.source + '|' + subscript.source + ')*'); - - // range related - var rangeLimit = new RegExp('(?:' + variable.source + '|' + number.source + ')'); - var range$1 = new RegExp('\\(' + rangeLimit.source + '\\.\\.' + rangeLimit.source + '\\)'); - var rangeCapture = new RegExp('\\((' + rangeLimit.source + ')\\.\\.(' + rangeLimit.source + ')\\)'); - - var value = new RegExp('(?:' + variable.source + '|' + literal.source + '|' + range$1.source + ')'); - - // hash related - var hash = new RegExp('(?:' + identifier.source + ')\\s*:\\s*(?:' + value.source + ')'); - var hashCapture = new RegExp('(' + identifier.source + ')\\s*:\\s*(' + value.source + ')', 'g'); - - // full match - var tagLine = new RegExp('^\\s*(' + identifier.source + ')\\s*([\\s\\S]*)\\s*$'); - var literalLine = new RegExp('^' + literal.source + '$', 'i'); - var variableLine = new RegExp('^' + variable.source + '$'); - var numberLine = new RegExp('^' + number.source + '$'); - var boolLine = new RegExp('^' + bool.source + '$', 'i'); - var quotedLine = new RegExp('^' + quoted.source + '$'); - var rangeLine = new RegExp('^' + rangeCapture.source + '$'); - var integerLine = new RegExp('^' + integer.source + '$'); - - // filter related - var valueDeclaration = new RegExp('(?:' + identifier.source + '\\s*:\\s*)?' + value.source); - var valueList = new RegExp(valueDeclaration.source + '(\\s*,\\s*' + valueDeclaration.source + ')*'); - var filter = new RegExp(identifier.source + '(?:\\s*:\\s*' + valueList.source + ')?', 'g'); - var filterCapture = new RegExp('(' + identifier.source + ')(?:\\s*:\\s*(' + valueList.source + '))?'); - var filterLine = new RegExp('^' + filterCapture.source + '$'); - - var operators = [/\s+or\s+/, /\s+and\s+/, /==|!=|<=|>=|<|>|\s+contains\s+/]; - - function isInteger(str) { - return integerLine.test(str); - } - - function isLiteral(str) { - return literalLine.test(str); - } - - function isVariable(str) { - return variableLine.test(str); - } - - function matchValue(str) { - return value.exec(str); - } - - function parseLiteral(str) { - var res = str.match(numberLine); - if (res) { - return Number(str); - } - res = str.match(boolLine); - if (res) { - return str.toLowerCase() === 'true'; - } - res = str.match(quotedLine); - if (res) { - return str.slice(1, -1); - } - throw new TypeError('cannot parse \'' + str + '\' as literal'); - } - - function initError() { - this.name = this.constructor.name; - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } - } - - function initLiquidError(err, token) { - initError.call(this); - - this.input = token.input; - this.line = token.line; - this.file = token.file; - - var context = mkContext(token.input, token.line); - this.message = mkMessage(err.message, token); - this.stack = context + '\n' + (this.stack || this.message) + (err.stack ? '\nFrom ' + err.stack : ''); - } - - function TokenizationError(message, token) { - initLiquidError.call(this, { message: message }, token); - } - TokenizationError.prototype = create(Error.prototype); - TokenizationError.prototype.constructor = TokenizationError; - - function ParseError(e, token) { - assign(this, e); - this.originalError = e; - - initLiquidError.call(this, e, token); - } - ParseError.prototype = create(Error.prototype); - ParseError.prototype.constructor = ParseError; - - function RenderError(e, tpl) { - // return the original render error - if (e instanceof RenderError) { - return e; - } - assign(this, e); - this.originalError = e; - - initLiquidError.call(this, e, tpl.token); - } - RenderError.prototype = create(Error.prototype); - RenderError.prototype.constructor = RenderError; - - function RenderBreakError(message) { - initError.call(this); - this.message = message + ''; - } - RenderBreakError.prototype = create(Error.prototype); - RenderBreakError.prototype.constructor = RenderBreakError; - - function AssertionError(message) { - initError.call(this); - this.message = message + ''; - } - AssertionError.prototype = create(Error.prototype); - AssertionError.prototype.constructor = AssertionError; - - function mkContext(input, line) { - var lines = input.split('\n'); - var begin = Math.max(line - 2, 1); - var end = Math.min(line + 3, lines.length); - - var context = range(begin, end + 1).map(function (l) { - return [l === line ? '>> ' : ' ', align(l, end), '| ', lines[l - 1]].join(''); - }).join('\n'); - - return context; - } - - function align(n, max) { - var length = (max + '').length; - var str = n + ''; - var blank = Array(length - str.length).join(' '); - return blank + str; - } - - function mkMessage(msg, token) { - msg = msg || ''; - if (token.file) { - msg += ', file:' + token.file; - } - if (token.line) { - msg += ', line:' + token.line; - } - return msg; - } - - function assert (predicate, message) { - if (!predicate) { - message = message || 'expect ' + predicate + ' to be true'; - throw new AssertionError(message); - } - } - - var Scope = { - getAll: function getAll() { - return this.contexts.reduce(function (ctx, val) { - return assign(ctx, val); - }, create(null)); - }, - get: function get(path) { - var _this = this; - - var paths = this.propertyAccessSeq(path); - var scope = this.findContextFor(paths[0]) || last(this.contexts); - return paths.reduce(function (value$$1, key) { - return _this.readProperty(value$$1, key); - }, scope); - }, - set: function set(path, v) { - var paths = this.propertyAccessSeq(path); - var scope = this.findContextFor(paths[0]) || last(this.contexts); - paths.some(function (key, i) { - if (!isObject(scope)) { - return true; - } - if (i === paths.length - 1) { - scope[key] = v; - return true; - } - if (undefined === scope[key]) { - scope[key] = {}; - } - scope = scope[key]; - }); - }, - unshift: function unshift(ctx) { - return this.contexts.unshift(ctx); - }, - push: function push(ctx) { - return this.contexts.push(ctx); - }, - pop: function pop(ctx) { - if (!arguments.length) { - return this.contexts.pop(); - } - var i = this.contexts.findIndex(function (scope) { - return scope === ctx; - }); - if (i === -1) { - throw new TypeError('scope not found, cannot pop'); - } - return this.contexts.splice(i, 1)[0]; - }, - findContextFor: function findContextFor(key, filter$$1) { - filter$$1 = filter$$1 || function () { - return true; - }; - for (var i = this.contexts.length - 1; i >= 0; i--) { - var candidate = this.contexts[i]; - if (!filter$$1(candidate)) continue; - if (key in candidate) { - return candidate; - } - } - return null; - }, - readProperty: function readProperty(obj, key) { - var val = void 0; - if (isNil(obj)) { - val = undefined; - } else { - obj = toLiquid(obj); - val = key === 'size' ? readSize(obj) : obj[key]; - if (isFunction(obj.liquid_method_missing)) { - val = obj.liquid_method_missing(key); - } - } - if (isNil(val) && this.opts.strict_variables) { - throw new TypeError('undefined variable: ' + key); - } - return val; - }, - - /* - * Parse property access sequence from access string - * @example - * accessSeq("foo.bar") // ['foo', 'bar'] - * accessSeq("foo['bar']") // ['foo', 'bar'] - * accessSeq("foo['b]r']") // ['foo', 'b]r'] - * accessSeq("foo[bar.coo]") // ['foo', 'bar'], for bar.coo == 'bar' - */ - propertyAccessSeq: function propertyAccessSeq(str) { - str = String(str); - var seq = []; - var name = ''; - var j = void 0; - var i = 0; - while (i < str.length) { - switch (str[i]) { - case '[': - push(); - - var delemiter = str[i + 1]; - if (/['"]/.test(delemiter)) { - // foo["bar"] - j = str.indexOf(delemiter, i + 2); - assert(j !== -1, 'unbalanced ' + delemiter + ': ' + str); - name = str.slice(i + 2, j); - push(); - i = j + 2; - } else { - // foo[bar.coo] - j = matchRightBracket(str, i + 1); - assert(j !== -1, 'unbalanced []: ' + str); - name = str.slice(i + 1, j); - if (!isInteger(name)) { - // foo[bar] vs. foo[1] - name = String(this.get(name)); - } - push(); - i = j + 1; - } - break; - case '.': - // foo.bar, foo[0].bar - push(); - i++; - break; - default: - // foo.bar - name += str[i]; - i++; - } - } - push(); - - if (!seq.length) { - throw new TypeError('invalid path:"' + str + '"'); - } - return seq; - - function push() { - if (name.length) seq.push(name); - name = ''; - } - } - }; - - function toLiquid(obj) { - if (isFunction(obj.to_liquid)) { - return obj.to_liquid(); - } - if (isFunction(obj.toLiquid)) { - return obj.toLiquid(); - } - return obj; - } - - function readSize(obj) { - if (!isNil(obj.size)) return obj.size; - if (isArray(obj) || isString(obj)) return obj.length; - return obj.size; - } - - function matchRightBracket(str, begin) { - var stack = 1; // count of '[' - count of ']' - for (var i = begin; i < str.length; i++) { - if (str[i] === '[') { - stack++; - } - if (str[i] === ']') { - stack--; - if (stack === 0) { - return i; - } - } - } - return -1; - } - - function factory(ctx, opts) { - var defaultOptions = { - dynamicPartials: true, - strict_variables: false, - strict_filters: false, - blocks: {}, - root: [] - }; - var scope = create(Scope); - scope.opts = assign(defaultOptions, opts); - scope.contexts = [ctx || {}]; - return scope; - } - - function domResolve(root, path) { - var base = document.createElement('base'); - base.href = root; - - var head = document.getElementsByTagName('head')[0]; - head.insertBefore(base, head.firstChild); - - var a = document.createElement('a'); - a.href = path; - var resolved = a.href; - head.removeChild(base); - - return resolved; - } - - function resolve(filepath, root, options) { - root = root || options.root; - if (isArray(root)) { - root = root[0]; - } - if (root.length && last(root) !== '/') { - root += '/'; - } - var url = domResolve(root, filepath); - return url.replace(/^(\w+:\/\/[^/]+)(\/[^?]+)/, function (str, origin, path) { - var last$$1 = path.split('/').pop(); - if (/\.\w+$/.test(last$$1)) { - return str; - } - return origin + path + options.extname; - }); - } - - var read = function () { - var _ref = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(url) { - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - return _context.abrupt('return', new Promise(function (resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.onload = function () { - if (xhr.status >= 200 && xhr.status < 300) { - resolve(xhr.responseText); - } else { - reject(new Error(xhr.statusText)); - } - }; - xhr.onerror = function () { - reject(new Error('An error occurred whilst receiving the response.')); - }; - xhr.open('GET', url); - xhr.send(); - })); - - case 1: - case 'end': - return _context.stop(); - } - } - }, _callee, this); - })); - - return function read(_x) { - return _ref.apply(this, arguments); - }; - }(); - - function whiteSpaceCtrl(tokens, options) { - options = assign({ greedy: true }, options); - var inRaw = false; - - tokens.forEach(function (token, i) { - if (shouldTrimLeft(token, inRaw, options)) { - trimLeft(tokens[i - 1], options.greedy); - } - - if (token.type === 'tag' && token.name === 'raw') inRaw = true; - if (token.type === 'tag' && token.name === 'endraw') inRaw = false; - - if (shouldTrimRight(token, inRaw, options)) { - trimRight(tokens[i + 1], options.greedy); - } - }); - } - - function shouldTrimLeft(token, inRaw, options) { - if (inRaw) return false; - if (token.type === 'tag') return token.trim_left || options.trim_tag_left; - if (token.type === 'value') return token.trim_left || options.trim_value_left; - } - - function shouldTrimRight(token, inRaw, options) { - if (inRaw) return false; - if (token.type === 'tag') return token.trim_right || options.trim_tag_right; - if (token.type === 'value') return token.trim_right || options.trim_value_right; - } - - function trimLeft(token, greedy) { - if (!token || token.type !== 'html') return; - - var rLeft = greedy ? /\s+$/g : /[\t\r ]*$/g; - token.value = token.value.replace(rLeft, ''); - } - - function trimRight(token, greedy) { - if (!token || token.type !== 'html') return; - - var rRight = greedy ? /^\s+/g : /^[\t\r ]*\n?/g; - token.value = token.value.replace(rRight, ''); - } - - function parse(input, file, options) { - assert(isString(input), 'illegal input'); - - var rLiquid = /({%-?([\s\S]*?)-?%})|({{-?([\s\S]*?)-?}})/g; - var currIndent = 0; - var lineNumber = LineNumber(input); - var lastMatchEnd = 0; - var tokens = []; - - for (var match; match = rLiquid.exec(input); lastMatchEnd = rLiquid.lastIndex) { - if (match.index > lastMatchEnd) { - tokens.push(parseHTMLToken(lastMatchEnd, match.index)); - } - tokens.push(match[1] ? parseTagToken(match[1], match[2].trim(), match.index) : parseValueToken(match[3], match[4].trim(), match.index)); - } - if (input.length > lastMatchEnd) { - tokens.push(parseHTMLToken(lastMatchEnd, input.length)); - } - whiteSpaceCtrl(tokens, options); - return tokens; - - function parseTagToken(raw, value$$1, pos) { - var match = value$$1.match(tagLine); - var token = { - type: 'tag', - indent: currIndent, - line: lineNumber.get(pos), - trim_left: raw.slice(0, 3) === '{%-', - trim_right: raw.slice(-3) === '-%}', - raw: raw, - value: value$$1, - input: input, - file: file - }; - if (!match) { - throw new TokenizationError('illegal tag syntax', token); - } - token.name = match[1]; - token.args = match[2]; - return token; + var render = { + renderTemplates: function (templates, scope) { + return __awaiter(this, void 0, void 0, function () { + function renderTemplate(template) { + return __awaiter(this, void 0, void 0, function () { + var partial; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!(template.type === 'tag')) return [3 /*break*/, 2]; + return [4 /*yield*/, this.renderTag(template, scope)]; + case 1: + partial = _a.sent(); + return [2 /*return*/, partial === undefined ? '' : partial]; + case 2: + if (template.type === 'value') { + return [2 /*return*/, this.renderValue(template, scope)]; + } + return [2 /*return*/, template.value]; + } + }); + }); + } + var html, _i, templates_1, tpl, _a, e_1; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + assert(scope, 'unable to evalTemplates: scope undefined'); + html = ''; + _i = 0, templates_1 = templates; + _b.label = 1; + case 1: + if (!(_i < templates_1.length)) return [3 /*break*/, 6]; + tpl = templates_1[_i]; + _b.label = 2; + case 2: + _b.trys.push([2, 4, , 5]); + _a = html; + return [4 /*yield*/, renderTemplate.call(this, tpl)]; + case 3: + html = _a + _b.sent(); + return [3 /*break*/, 5]; + case 4: + e_1 = _b.sent(); + if (e_1 instanceof RenderBreakError) { + e_1.resolvedHTML = html; + throw e_1; + } + throw e_1 instanceof RenderError ? e_1 : new RenderError(e_1, tpl); + case 5: + _i++; + return [3 /*break*/, 1]; + case 6: return [2 /*return*/, html]; + } + }); + }); + }, + renderTag: function (template, scope) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + if (template.name === 'continue') { + throw new RenderBreakError('continue'); + } + if (template.name === 'break') { + throw new RenderBreakError('break'); + } + return [2 /*return*/, template.render(scope)]; + }); + }); + }, + renderValue: function (template, scope) { + return __awaiter(this, void 0, void 0, function () { + var partial; + return __generator(this, function (_a) { + partial = this.evalValue(template, scope); + return [2 /*return*/, partial === undefined ? '' : stringify(partial)]; + }); + }); + }, + evalValue: function (template, scope) { + assert(scope, 'unable to evalValue: scope undefined'); + return template.filters.reduce(function (prev, filter) { return filter.render(prev, scope); }, evalExp(template.initial, scope)); + } + }; + function Render () { + var instance = create(render); + return instance; } - function parseValueToken(raw, value$$1, pos) { - return { - type: 'value', - line: lineNumber.get(pos), - trim_left: raw.slice(0, 3) === '{{-', - trim_right: raw.slice(-3) === '-}}', - raw: raw, - value: value$$1, - input: input, - file: file - }; + function hash$1(markup, scope) { + var obj = {}; + var match; + hashCapture.lastIndex = 0; + while ((match = hashCapture.exec(markup))) { + var k = match[1]; + var v = match[2]; + obj[k] = evalValue(v, scope); + } + return obj; + } + function Tag () { + var tagImpls = {}; + var _tagInstance = { + render: function (scope) { + return __awaiter(this, void 0, void 0, function () { + var obj, impl; + return __generator(this, function (_a) { + obj = hash$1(this.token.args, scope); + impl = this.tagImpl; + if (typeof impl.render !== 'function') { + return [2 /*return*/, '']; + } + return [2 /*return*/, impl.render(scope, obj)]; + }); + }); + }, + parse: function (token, tokens) { + this.type = 'tag'; + this.token = token; + this.name = token.name; + var tagImpl = tagImpls[this.name]; + assert(tagImpl, "tag " + this.name + " not found"); + this.tagImpl = create(tagImpl); + if (this.tagImpl.parse) { + this.tagImpl.parse(token, tokens); + } + } + }; + function register(name, tag) { + tagImpls[name] = tag; + } + function construct(token, tokens) { + var instance = create(_tagInstance); + instance.parse(token, tokens); + return instance; + } + function clear() { + tagImpls = {}; + } + return { + construct: construct, + register: register, + clear: clear + }; } - function parseHTMLToken(begin, end) { - var htmlFragment = input.slice(begin, end); - currIndent = last(htmlFragment.split('\n')).length; - - return { - type: 'html', - raw: htmlFragment, - value: htmlFragment - }; - } - } - - function LineNumber(html) { - var parsedLinesCount = 0; - var lastMatchBegin = -1; - - return { - get: function get(pos) { - var lines = html.slice(lastMatchBegin + 1, pos).split('\n'); - parsedLinesCount += lines.length - 1; - lastMatchBegin = pos; - return parsedLinesCount + 1; - } - }; - } - - function Operators (isTruthy) { - return { - '==': function _(l, r) { - return l === r; - }, - '!=': function _(l, r) { - return l !== r; - }, - '>': function _(l, r) { - return l !== null && r !== null && l > r; - }, - '<': function _(l, r) { - return l !== null && r !== null && l < r; - }, - '>=': function _(l, r) { - return l !== null && r !== null && l >= r; - }, - '<=': function _(l, r) { - return l !== null && r !== null && l <= r; - }, - 'contains': function contains(l, r) { - if (!l) return false; - if (typeof l.indexOf !== 'function') return false; - return l.indexOf(r) > -1; - }, - 'and': function and(l, r) { - return isTruthy(l) && isTruthy(r); - }, - 'or': function or(l, r) { - return isTruthy(l) || isTruthy(r); - } - }; - } - - var operators$1 = Operators(isTruthy); - - function evalExp(exp, scope) { - assert(scope, 'unable to evalExp: scope undefined'); - var operatorREs = operators; - var match = void 0; - for (var i = 0; i < operatorREs.length; i++) { - var operatorRE = operatorREs[i]; - var expRE = new RegExp('^(' + quoteBalanced.source + ')(' + operatorRE.source + ')(' + quoteBalanced.source + ')$'); - if (match = exp.match(expRE)) { - var l = evalExp(match[1], scope); - var op = operators$1[match[2].trim()]; - var r = evalExp(match[3], scope); - return op(l, r); - } + var valueRE = new RegExp("" + value.source, 'g'); + function Filter (options) { + options = assign({}, options); + var filters = {}; + var _filterInstance = { + render: function (output, scope) { + var args = this.args.map(function (arg) { return evalValue(arg, scope); }); + args.unshift(output); + return this.filter.apply(null, args); + }, + parse: function (str) { + var match = filterLine.exec(str); + assert(match, 'illegal filter: ' + str); + var name = match[1]; + var argList = match[2] || ''; + var filter$$1 = filters[name]; + if (typeof filter$$1 !== 'function') { + if (options.strict_filters) { + throw new TypeError("undefined filter: " + name); + } + this.name = name; + this.filter = function (x) { return x; }; + this.args = []; + return this; + } + var args = []; + while ((match = valueRE.exec(argList.trim()))) { + var v = match[0]; + var re = new RegExp(v + "\\s*:", 'g'); + var keyMatch = re.exec(match.input); + var currentMatchIsKey = keyMatch && keyMatch.index === match.index; + currentMatchIsKey ? args.push("'" + v + "'") : args.push(v); + } + this.name = name; + this.filter = filter$$1; + this.args = args; + return this; + } + }; + function construct(str) { + var instance = create(_filterInstance); + return instance.parse(str); + } + function register(name, filter$$1) { + filters[name] = filter$$1; + } + function clear() { + filters = {}; + } + return { + construct: construct, register: register, clear: clear + }; } - if (match = exp.match(rangeLine)) { - var low = evalValue(match[1], scope); - var high = evalValue(match[2], scope); - var range = []; - for (var j = low; j <= high; j++) { - range.push(j); - } - return range; + function Parser (Tag, Filter) { + var ParseStream = /** @class */ (function () { + function ParseStream(tokens) { + this.tokens = tokens; + this.handlers = {}; + } + ParseStream.prototype.on = function (name, cb) { + this.handlers[name] = cb; + return this; + }; + ParseStream.prototype.trigger = function (event, arg) { + var h = this.handlers[event]; + if (typeof h === 'function') { + h(arg); + return true; + } + }; + ParseStream.prototype.start = function () { + this.trigger('start'); + var token; + while (!this.stopRequested && (token = this.tokens.shift())) { + if (this.trigger('token', token)) + continue; + if (token.type === 'tag' && + this.trigger("tag:" + token.name, token)) { + continue; + } + var template = parseToken(token, this.tokens); + this.trigger('template', template); + } + if (!this.stopRequested) + this.trigger('end'); + return this; + }; + ParseStream.prototype.stop = function () { + this.stopRequested = true; + return this; + }; + return ParseStream; + }()); + function parse(tokens) { + var token; + var templates = []; + while ((token = tokens.shift())) { + templates.push(parseToken(token, tokens)); + } + return templates; + } + function parseToken(token, tokens) { + try { + var tpl = null; + if (token.type === 'tag') { + tpl = parseTag(token, tokens); + } + else if (token.type === 'value') { + tpl = parseValue(token.value); + } + else { // token.type === 'html' + tpl = token; + } + tpl.token = token; + return tpl; + } + catch (e) { + throw new ParseError(e, token); + } + } + function parseTag(token, tokens) { + if (token.name === 'continue' || token.name === 'break') + return token; + return Tag.construct(token, tokens); + } + function parseValue(str) { + var match = matchValue(str); + assert(match, "illegal value string: " + str); + var initial = match[0]; + str = str.substr(match.index + match[0].length); + var filters = []; + while ((match = filter.exec(str))) { + filters.push([match[0].trim()]); + } + return { + type: 'value', + initial: initial, + filters: filters.map(function (str) { return Filter.construct(str); }) + }; + } + function parseStream(tokens) { + return new ParseStream(tokens); + } + return { + parse: parse, + parseTag: parseTag, + parseStream: parseStream, + parseValue: parseValue + }; } - return evalValue(exp, scope); - } - - function evalValue(str, scope) { - str = str && str.trim(); - if (!str) return undefined; - - if (isLiteral(str)) { - return parseLiteral(str); - } - if (isVariable(str)) { - return scope.get(str); - } - throw new TypeError('cannot eval \'' + str + '\' as value'); - } - - function isTruthy(val) { - return !isFalsy(val); - } - - function isFalsy(val) { - return val === false || undefined === val || val === null; - } - - var render = { - renderTemplates: function () { - var _ref = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(templates, scope) { - var renderTemplate = function () { - var _ref2 = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(template) { - var partial; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - if (!(template.type === 'tag')) { - _context.next = 5; - break; - } - - _context.next = 3; - return this.renderTag(template, scope); - - case 3: - partial = _context.sent; - return _context.abrupt('return', partial === undefined ? '' : partial); - - case 5: - if (!(template.type === 'value')) { - _context.next = 7; - break; - } - - return _context.abrupt('return', this.renderValue(template, scope)); - - case 7: - return _context.abrupt('return', template.value); - - case 8: - case 'end': - return _context.stop(); - } - } - }, _callee, this); - })); - - return function renderTemplate(_x3) { - return _ref2.apply(this, arguments); - }; - }(); - - var html, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, tpl; - - return regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - assert(scope, 'unable to evalTemplates: scope undefined'); - - html = ''; - _iteratorNormalCompletion = true; - _didIteratorError = false; - _iteratorError = undefined; - _context2.prev = 5; - _iterator = templates[Symbol.iterator](); - - case 7: - if (_iteratorNormalCompletion = (_step = _iterator.next()).done) { - _context2.next = 24; - break; - } - - tpl = _step.value; - _context2.prev = 9; - _context2.next = 12; - return renderTemplate.call(this, tpl); - - case 12: - html += _context2.sent; - _context2.next = 21; - break; - - case 15: - _context2.prev = 15; - _context2.t0 = _context2['catch'](9); - - if (!(_context2.t0 instanceof RenderBreakError)) { - _context2.next = 20; - break; - } - - _context2.t0.resolvedHTML = html; - throw _context2.t0; - - case 20: - throw new RenderError(_context2.t0, tpl); - - case 21: - _iteratorNormalCompletion = true; - _context2.next = 7; - break; - - case 24: - _context2.next = 30; - break; - - case 26: - _context2.prev = 26; - _context2.t1 = _context2['catch'](5); - _didIteratorError = true; - _iteratorError = _context2.t1; - - case 30: - _context2.prev = 30; - _context2.prev = 31; - - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - - case 33: - _context2.prev = 33; - - if (!_didIteratorError) { - _context2.next = 36; - break; - } - - throw _iteratorError; - - case 36: - return _context2.finish(33); - - case 37: - return _context2.finish(30); - - case 38: - return _context2.abrupt('return', html); - - case 39: - case 'end': - return _context2.stop(); - } - } - }, _callee2, this, [[5, 26, 30, 38], [9, 15], [31,, 33, 37]]); - })); - - function renderTemplates(_x, _x2) { - return _ref.apply(this, arguments); - } - - return renderTemplates; - }(), - - renderTag: function () { - var _ref3 = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(template, scope) { - return regeneratorRuntime.wrap(function _callee3$(_context3) { - while (1) { - switch (_context3.prev = _context3.next) { - case 0: - if (!(template.name === 'continue')) { - _context3.next = 2; - break; - } - - throw new RenderBreakError('continue'); - - case 2: - if (!(template.name === 'break')) { - _context3.next = 4; - break; - } - - throw new RenderBreakError('break'); - - case 4: - return _context3.abrupt('return', template.render(scope)); - - case 5: - case 'end': - return _context3.stop(); - } - } - }, _callee3, this); - })); - - function renderTag(_x4, _x5) { - return _ref3.apply(this, arguments); - } - - return renderTag; - }(), - - renderValue: function () { - var _ref4 = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4(template, scope) { - var partial; - return regeneratorRuntime.wrap(function _callee4$(_context4) { - while (1) { - switch (_context4.prev = _context4.next) { - case 0: - partial = this.evalValue(template, scope); - return _context4.abrupt('return', partial === undefined ? '' : stringify(partial)); - - case 2: - case 'end': - return _context4.stop(); - } - } - }, _callee4, this); - })); - - function renderValue(_x6, _x7) { - return _ref4.apply(this, arguments); - } - - return renderValue; - }(), - - evalValue: function evalValue$$1(template, scope) { - assert(scope, 'unable to evalValue: scope undefined'); - return template.filters.reduce(function (prev, filter) { - return filter.render(prev, scope); - }, evalExp(template.initial, scope)); - } - }; - - function Render () { - var instance = create(render); - return instance; - } - - function hash$1(markup, scope) { - var obj = {}; - var match = void 0; - hashCapture.lastIndex = 0; - while (match = hashCapture.exec(markup)) { - var k = match[1]; - var v = match[2]; - obj[k] = evalValue(v, scope); - } - return obj; - } - - function Tag () { - var tagImpls = {}; - - var _tagInstance = { - render: function () { - var _ref = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(scope) { - var obj, impl; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - obj = hash$1(this.token.args, scope); - impl = this.tagImpl; - - if (!(typeof impl.render !== 'function')) { - _context.next = 4; - break; - } - - return _context.abrupt('return', ''); - - case 4: - return _context.abrupt('return', impl.render(scope, obj)); - - case 5: - case 'end': - return _context.stop(); - } - } - }, _callee, this); - })); - - function render(_x) { - return _ref.apply(this, arguments); - } - - return render; - }(), - parse: function parse(token, tokens) { - this.type = 'tag'; - this.token = token; - this.name = token.name; - - var tagImpl = tagImpls[this.name]; - assert(tagImpl, 'tag ' + this.name + ' not found'); - this.tagImpl = create(tagImpl); - if (this.tagImpl.parse) { - this.tagImpl.parse(token, tokens); - } - } - }; - - function register(name, tag) { - tagImpls[name] = tag; + /* + * Call functions in serial until someone resolved. + * @param {Array} iterable the array to iterate with. + * @param {Array} iteratee returns a new promise. + * The iteratee is invoked with three arguments: (value, index, iterable). + */ + /* + * Call functions in serial until someone rejected. + * @param {Array} iterable the array to iterate with. + * @param {Array} iteratee returns a new promise. + * The iteratee is invoked with three arguments: (value, index, iterable). + */ + function mapSeries(iterable, iteratee) { + var ret = Promise.resolve('init'); + var result = []; + iterable.forEach(function (item, idx) { + ret = ret + .then(function () { return iteratee(item, idx, iterable); }) + .then(function (x) { return result.push(x); }); + }); + return ret.then(function () { return result; }); } - function construct(token, tokens) { - var instance = create(_tagInstance); - instance.parse(token, tokens); - return instance; + function For (liquid, Liquid) { + var RenderBreakError = Liquid.Types.RenderBreakError; + var re = new RegExp("^(" + identifier.source + ")\\s+in\\s+" + + ("(" + value.source + ")") + + ("(?:\\s+" + hash.source + ")*") + + "(?:\\s+(reversed))?" + + ("(?:\\s+" + hash.source + ")*$")); + liquid.registerTag('for', { parse: parse, render: render }); + function parse(tagToken, remainTokens) { + var _this = this; + var match = re.exec(tagToken.args); + assert(match, "illegal tag: " + tagToken.raw); + this.variable = match[1]; + this.collection = match[2]; + this.reversed = !!match[3]; + this.templates = []; + this.elseTemplates = []; + var p; + var stream = liquid.parser.parseStream(remainTokens) + .on('start', function () { return (p = _this.templates); }) + .on('tag:else', function () { return (p = _this.elseTemplates); }) + .on('tag:endfor', function () { return stream.stop(); }) + .on('template', function (tpl) { return p.push(tpl); }) + .on('end', function () { + throw new Error("tag " + tagToken.raw + " not closed"); + }); + stream.start(); + } + function render(scope, hash$$1) { + return __awaiter(this, void 0, void 0, function () { + var collection, offset, limit, contexts, html, finished; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + collection = Liquid.evalExp(this.collection, scope); + if (!isArray(collection)) { + if (isString(collection) && collection.length > 0) { + collection = [collection]; + } + else if (isObject(collection)) { + collection = Object.keys(collection).map(function (key) { return [key, collection[key]]; }); + } + } + if (!isArray(collection) || !collection.length) { + return [2 /*return*/, liquid.renderer.renderTemplates(this.elseTemplates, scope)]; + } + offset = hash$$1.offset || 0; + limit = (hash$$1.limit === undefined) ? collection.length : hash$$1.limit; + collection = collection.slice(offset, offset + limit); + if (this.reversed) + collection.reverse(); + contexts = collection.map(function (item, i) { + var ctx = {}; + ctx[_this.variable] = item; + ctx.forloop = { + first: i === 0, + index: i + 1, + index0: i, + last: i === collection.length - 1, + length: collection.length, + rindex: collection.length - i, + rindex0: collection.length - i - 1 + }; + return ctx; + }); + html = ''; + finished = false; + return [4 /*yield*/, mapSeries(contexts, function (context) { return __awaiter(_this, void 0, void 0, function () { + var _a, e_1; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if (finished) + return [2 /*return*/]; + scope.push(context); + _b.label = 1; + case 1: + _b.trys.push([1, 3, , 4]); + _a = html; + return [4 /*yield*/, liquid.renderer.renderTemplates(this.templates, scope)]; + case 2: + html = _a + _b.sent(); + return [3 /*break*/, 4]; + case 3: + e_1 = _b.sent(); + if (e_1 instanceof RenderBreakError) { + html += e_1.resolvedHTML; + if (e_1.message === 'break') { + finished = true; + } + } + else + throw e_1; + return [3 /*break*/, 4]; + case 4: + scope.pop(context); + return [2 /*return*/]; + } + }); + }); })]; + case 1: + _a.sent(); + return [2 /*return*/, html]; + } + }); + }); + } } - function clear() { - tagImpls = {}; + function Assign (liquid, Liquid) { + var re = new RegExp("(" + identifier.source + ")\\s*=([^]*)"); + var AssignScope = Liquid.Types.AssignScope; + liquid.registerTag('assign', { + parse: function (token) { + var match = token.args.match(re); + assert(match, "illegal token " + token.raw); + this.key = match[1]; + this.value = match[2]; + }, + render: function (scope) { + var ctx = create(AssignScope); + ctx[this.key] = liquid.evalValue(this.value, scope); + scope.push(ctx); + return Promise.resolve(''); + } + }); } - return { - construct: construct, - register: register, - clear: clear - }; - } - - var valueRE = new RegExp('' + value.source, 'g'); - - function Filter (options) { - options = assign({}, options); - var filters = {}; - - var _filterInstance = { - render: function render(output, scope) { - var args = this.args.map(function (arg) { - return evalValue(arg, scope); - }); - args.unshift(output); - return this.filter.apply(null, args); - }, - parse: function parse(str) { - var match = filterLine.exec(str); - assert(match, 'illegal filter: ' + str); - - var name = match[1]; - var argList = match[2] || ''; - var filter$$1 = filters[name]; - if (typeof filter$$1 !== 'function') { - if (options.strict_filters) { - throw new TypeError('undefined filter: ' + name); - } - this.name = name; - this.filter = function (x) { - return x; - }; - this.args = []; - return this; - } - - var args = []; - while (match = valueRE.exec(argList.trim())) { - var v = match[0]; - var re = new RegExp(v + '\\s*:', 'g'); - var keyMatch = re.exec(match.input); - var currentMatchIsKey = keyMatch && keyMatch.index === match.index; - currentMatchIsKey ? args.push('\'' + v + '\'') : args.push(v); - } - - this.name = name; - this.filter = filter$$1; - this.args = args; - - return this; - } - }; - - function construct(str) { - var instance = create(_filterInstance); - return instance.parse(str); + function Capture (liquid, Liquid) { + var re = new RegExp("(" + identifier.source + ")"); + var CaptureScope = Liquid.Types.CaptureScope; + liquid.registerTag('capture', { + parse: function (tagToken, remainTokens) { + var _this = this; + var match = tagToken.args.match(re); + assert(match, tagToken.args + " not valid identifier"); + this.variable = match[1]; + this.templates = []; + var stream = liquid.parser.parseStream(remainTokens); + stream.on('tag:endcapture', function (token) { return stream.stop(); }) + .on('template', function (tpl) { return _this.templates.push(tpl); }) + .on('end', function (x) { + throw new Error("tag " + tagToken.raw + " not closed"); + }); + stream.start(); + }, + render: function (scope, hash$$1) { + return __awaiter(this, void 0, void 0, function () { + var html, ctx; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, liquid.renderer.renderTemplates(this.templates, scope)]; + case 1: + html = _a.sent(); + ctx = create(CaptureScope); + ctx[this.variable] = html; + scope.push(ctx); + return [2 /*return*/]; + } + }); + }); + } + }); } - function register(name, filter$$1) { - filters[name] = filter$$1; + function Case (liquid, Liquid) { + liquid.registerTag('case', { + parse: function (tagToken, remainTokens) { + var _this = this; + this.cond = tagToken.args; + this.cases = []; + this.elseTemplates = []; + var p = []; + var stream = liquid.parser.parseStream(remainTokens) + .on('tag:when', function (token) { + _this.cases.push({ + val: token.args, + templates: p = [] + }); + }) + .on('tag:else', function () { return (p = _this.elseTemplates); }) + .on('tag:endcase', function (token) { return stream.stop(); }) + .on('template', function (tpl) { return p.push(tpl); }) + .on('end', function (x) { + throw new Error("tag " + tagToken.raw + " not closed"); + }); + stream.start(); + }, + render: function (scope, hash) { + for (var i = 0; i < this.cases.length; i++) { + var branch = this.cases[i]; + var val = Liquid.evalExp(branch.val, scope); + var cond = Liquid.evalExp(this.cond, scope); + if (val === cond) { + return liquid.renderer.renderTemplates(branch.templates, scope); + } + } + return liquid.renderer.renderTemplates(this.elseTemplates, scope); + } + }); } - function clear() { - filters = {}; + function Comment (liquid) { + liquid.registerTag('comment', { + parse: function (tagToken, remainTokens) { + var stream = liquid.parser.parseStream(remainTokens); + stream + .on('token', function (token) { + if (token.name === 'endcomment') + stream.stop(); + }) + .on('end', function (x) { + throw new Error("tag " + tagToken.raw + " not closed"); + }); + stream.start(); + } + }); } - return { - construct: construct, register: register, clear: clear - }; - } - - function Parser (Tag, Filter) { - var stream = { - init: function init(tokens) { - this.tokens = tokens; - this.handlers = {}; - return this; - }, - on: function on(name, cb) { - this.handlers[name] = cb; - return this; - }, - trigger: function trigger(event, arg) { - var h = this.handlers[event]; - if (typeof h === 'function') { - h(arg); - return true; - } - }, - start: function start() { - this.trigger('start'); - var token = void 0; - while (!this.stopRequested && (token = this.tokens.shift())) { - if (this.trigger('token', token)) continue; - if (token.type === 'tag' && this.trigger('tag:' + token.name, token)) { - continue; - } - var template = parseToken(token, this.tokens); - this.trigger('template', template); - } - if (!this.stopRequested) this.trigger('end'); - return this; - }, - stop: function stop() { - this.stopRequested = true; - return this; - } - }; - - function parse(tokens) { - var token = void 0; - var templates = []; - while (token = tokens.shift()) { - templates.push(parseToken(token, tokens)); - } - return templates; + var staticFileRE = /[^\s,]+/; + function Include (liquid, Liquid) { + var withRE = new RegExp("with\\s+(" + value.source + ")"); + liquid.registerTag('include', { + parse: function (token) { + var match = staticFileRE.exec(token.args); + if (match) { + this.staticValue = match[0]; + } + match = value.exec(token.args); + if (match) { + this.value = match[0]; + } + match = withRE.exec(token.args); + if (match) { + this.with = match[1]; + } + }, + render: function (scope, hash$$1) { + return __awaiter(this, void 0, void 0, function () { + var filepath, template, originBlocks, originBlockMode, templates, html; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!scope.opts.dynamicPartials) return [3 /*break*/, 4]; + if (!quotedLine.exec(this.value)) return [3 /*break*/, 2]; + template = this.value.slice(1, -1); + return [4 /*yield*/, liquid.parseAndRender(template, scope.getAll(), scope.opts)]; + case 1: + filepath = _a.sent(); + return [3 /*break*/, 3]; + case 2: + filepath = Liquid.evalValue(this.value, scope); + _a.label = 3; + case 3: return [3 /*break*/, 5]; + case 4: + filepath = this.staticValue; + _a.label = 5; + case 5: + assert(filepath, "cannot include with empty filename"); + originBlocks = scope.opts.blocks; + originBlockMode = scope.opts.blockMode; + scope.opts.blocks = {}; + scope.opts.blockMode = 'output'; + if (this.with) { + hash$$1[filepath] = Liquid.evalValue(this.with, scope); + } + return [4 /*yield*/, liquid.getTemplate(filepath, scope.opts.root)]; + case 6: + templates = _a.sent(); + scope.push(hash$$1); + return [4 /*yield*/, liquid.renderer.renderTemplates(templates, scope)]; + case 7: + html = _a.sent(); + scope.pop(hash$$1); + scope.opts.blocks = originBlocks; + scope.opts.blockMode = originBlockMode; + return [2 /*return*/, html]; + } + }); + }); + } + }); } - function parseToken(token, tokens) { - try { - var tpl = null; - if (token.type === 'tag') { - tpl = parseTag(token, tokens); - } else if (token.type === 'value') { - tpl = parseValue(token.value); - } else { - // token.type === 'html' - tpl = token; - } - tpl.token = token; - return tpl; - } catch (e) { - throw new ParseError(e, token); - } + function Decrement (liquid, Liquid) { + var _a = Liquid.Types, CaptureScope = _a.CaptureScope, AssignScope = _a.AssignScope, DecrementScope = _a.DecrementScope; + liquid.registerTag('decrement', { + parse: function (token) { + var match = token.args.match(identifier); + assert(match, "illegal identifier " + token.args); + this.variable = match[0]; + }, + render: function (scope, hash$$1) { + var context = scope.findContextFor(this.variable, function (ctx) { + var proto = Object.getPrototypeOf(ctx); + return proto !== CaptureScope && proto !== AssignScope; + }); + if (!context) { + context = create(DecrementScope); + scope.unshift(context); + } + if (typeof context[this.variable] !== 'number') { + context[this.variable] = 0; + } + return --context[this.variable]; + } + }); } - function parseTag(token, tokens) { - if (token.name === 'continue' || token.name === 'break') return token; - return Tag.construct(token, tokens); + function Cycle (liquid, Liquid) { + var groupRE = new RegExp("^(?:(" + value.source + ")\\s*:\\s*)?(.*)$"); + var candidatesRE = new RegExp(value.source, 'g'); + liquid.registerTag('cycle', { + parse: function (tagToken, remainTokens) { + var match = groupRE.exec(tagToken.args); + assert(match, "illegal tag: " + tagToken.raw); + this.group = match[1] || ''; + var candidates = match[2]; + this.candidates = []; + while ((match = candidatesRE.exec(candidates))) { + this.candidates.push(match[0]); + } + assert(this.candidates.length, "empty candidates: " + tagToken.raw); + }, + render: function (scope, hash$$1) { + var group = Liquid.evalValue(this.group, scope); + var fingerprint = "cycle:" + group + ":" + this.candidates.join(','); + var groups = scope.opts.groups = scope.opts.groups || {}; + var idx = groups[fingerprint]; + if (idx === undefined) { + idx = groups[fingerprint] = 0; + } + var candidate = this.candidates[idx]; + idx = (idx + 1) % this.candidates.length; + groups[fingerprint] = idx; + return Liquid.evalValue(candidate, scope); + } + }); } - function parseValue(str) { - var match = matchValue(str); - assert(match, 'illegal value string: ' + str); - - var initial = match[0]; - str = str.substr(match.index + match[0].length); - - var filters = []; - while (match = filter.exec(str)) { - filters.push([match[0].trim()]); - } - - return { - type: 'value', - initial: initial, - filters: filters.map(function (str) { - return Filter.construct(str); - }) - }; + function If (liquid, Liquid) { + liquid.registerTag('if', { + parse: function (tagToken, remainTokens) { + var _this = this; + this.branches = []; + this.elseTemplates = []; + var p; + var stream = liquid.parser.parseStream(remainTokens) + .on('start', function () { return _this.branches.push({ + cond: tagToken.args, + templates: (p = []) + }); }) + .on('tag:elsif', function (token) { + _this.branches.push({ + cond: token.args, + templates: p = [] + }); + }) + .on('tag:else', function () { return (p = _this.elseTemplates); }) + .on('tag:endif', function (token) { return stream.stop(); }) + .on('template', function (tpl) { return p.push(tpl); }) + .on('end', function (x) { + throw new Error("tag " + tagToken.raw + " not closed"); + }); + stream.start(); + }, + render: function (scope, hash) { + for (var _i = 0, _a = this.branches; _i < _a.length; _i++) { + var branch = _a[_i]; + var cond = Liquid.evalExp(branch.cond, scope); + if (Liquid.isTruthy(cond)) { + return liquid.renderer.renderTemplates(branch.templates, scope); + } + } + return liquid.renderer.renderTemplates(this.elseTemplates, scope); + } + }); } - function parseStream(tokens) { - var s = create(stream); - return s.init(tokens); + function Increment (liquid, Liquid) { + var _a = Liquid.Types, CaptureScope = _a.CaptureScope, AssignScope = _a.AssignScope, IncrementScope = _a.IncrementScope; + liquid.registerTag('increment', { + parse: function (token) { + var match = token.args.match(identifier); + assert(match, "illegal identifier " + token.args); + this.variable = match[0]; + }, + render: function (scope, hash$$1) { + var context = scope.findContextFor(this.variable, function (ctx) { + var proto = Object.getPrototypeOf(ctx); + return proto !== CaptureScope && proto !== AssignScope; + }); + if (!context) { + context = create(IncrementScope); + scope.unshift(context); + } + if (typeof context[this.variable] !== 'number') { + context[this.variable] = 0; + } + var val = context[this.variable]; + context[this.variable]++; + return val; + } + }); } - return { - parse: parse, - parseTag: parseTag, - parseStream: parseStream, - parseValue: parseValue - }; - } - - /* - * Call functions in serial until someone resolved. - * @param {Array} iterable the array to iterate with. - * @param {Array} iteratee returns a new promise. - * The iteratee is invoked with three arguments: (value, index, iterable). - */ - - /* - * Call functions in serial until someone rejected. - * @param {Array} iterable the array to iterate with. - * @param {Array} iteratee returns a new promise. - * The iteratee is invoked with three arguments: (value, index, iterable). - */ - function mapSeries(iterable, iteratee) { - var ret = Promise.resolve('init'); - var result = []; - iterable.forEach(function (item, idx) { - ret = ret.then(function () { - return iteratee(item, idx, iterable); - }).then(function (x) { - return result.push(x); - }); - }); - return ret.then(function () { - return result; - }); - } - - function For (liquid, Liquid) { - var render = function () { - var _ref = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(scope, hash$$1) { - var _this2 = this; - - var collection, offset, limit, contexts, html, finished; - return regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - collection = Liquid.evalExp(this.collection, scope); - - - if (!isArray(collection)) { - if (isString(collection) && collection.length > 0) { - collection = [collection]; - } else if (isObject(collection)) { - collection = Object.keys(collection).map(function (key) { - return [key, collection[key]]; - }); - } - } - - if (!(!isArray(collection) || !collection.length)) { - _context2.next = 4; - break; - } - - return _context2.abrupt('return', liquid.renderer.renderTemplates(this.elseTemplates, scope)); - - case 4: - offset = hash$$1.offset || 0; - limit = hash$$1.limit === undefined ? collection.length : hash$$1.limit; - - - collection = collection.slice(offset, offset + limit); - if (this.reversed) collection.reverse(); - - contexts = collection.map(function (item, i) { - var ctx = {}; - ctx[_this2.variable] = item; - ctx.forloop = { - first: i === 0, - index: i + 1, - index0: i, - last: i === collection.length - 1, - length: collection.length, - rindex: collection.length - i, - rindex0: collection.length - i - 1 - }; - return ctx; - }); - html = ''; - finished = false; - _context2.next = 13; - return mapSeries(contexts, function () { - var _ref2 = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(context) { - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - if (!finished) { - _context.next = 2; - break; - } - - return _context.abrupt('return'); - - case 2: - - scope.push(context); - _context.prev = 3; - _context.next = 6; - return liquid.renderer.renderTemplates(_this2.templates, scope); - - case 6: - html += _context.sent; - _context.next = 17; - break; - - case 9: - _context.prev = 9; - _context.t0 = _context['catch'](3); - - if (!(_context.t0 instanceof RenderBreakError)) { - _context.next = 16; - break; - } - - html += _context.t0.resolvedHTML; - if (_context.t0.message === 'break') { - finished = true; - } - _context.next = 17; - break; - - case 16: - throw _context.t0; - - case 17: - scope.pop(context); - - case 18: - case 'end': - return _context.stop(); - } - } - }, _callee, _this2, [[3, 9]]); - })); - - return function (_x3) { - return _ref2.apply(this, arguments); - }; - }()); - - case 13: - return _context2.abrupt('return', html); - - case 14: - case 'end': - return _context2.stop(); - } - } - }, _callee2, this); - })); - - return function render(_x, _x2) { - return _ref.apply(this, arguments); - }; - }(); - - var RenderBreakError = Liquid.Types.RenderBreakError; - var re = new RegExp('^(' + identifier.source + ')\\s+in\\s+' + ('(' + value.source + ')') + ('(?:\\s+' + hash.source + ')*') + '(?:\\s+(reversed))?' + ('(?:\\s+' + hash.source + ')*$')); - - liquid.registerTag('for', { parse: parse, render: render }); - - function parse(tagToken, remainTokens) { - var _this = this; - - var match = re.exec(tagToken.args); - assert(match, 'illegal tag: ' + tagToken.raw); - this.variable = match[1]; - this.collection = match[2]; - this.reversed = !!match[3]; - - this.templates = []; - this.elseTemplates = []; - - var p = void 0; - var stream = liquid.parser.parseStream(remainTokens).on('start', function () { - return p = _this.templates; - }).on('tag:else', function () { - return p = _this.elseTemplates; - }).on('tag:endfor', function () { - return stream.stop(); - }).on('template', function (tpl) { - return p.push(tpl); - }).on('end', function () { - throw new Error('tag ' + tagToken.raw + ' not closed'); - }); - - stream.start(); + /* + * blockMode: + * * "store": store rendered html into blocks + * * "output": output rendered html + */ + function Layout (liquid, Liquid) { + var staticFileRE = /\S+/; + liquid.registerTag('layout', { + parse: function (token, remainTokens) { + var match = staticFileRE.exec(token.args); + if (match) { + this.staticLayout = match[0]; + } + match = value.exec(token.args); + if (match) { + this.layout = match[0]; + } + this.tpls = liquid.parser.parse(remainTokens); + }, + render: function (scope, hash$$1) { + return __awaiter(this, void 0, void 0, function () { + var layout, html, templates, partial; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + layout = scope.opts.dynamicPartials + ? Liquid.evalValue(this.layout, scope) + : this.staticLayout; + assert(layout, "cannot apply layout with empty filename"); + // render the remaining tokens immediately + scope.opts.blockMode = 'store'; + return [4 /*yield*/, liquid.renderer.renderTemplates(this.tpls, scope)]; + case 1: + html = _a.sent(); + if (scope.opts.blocks[''] === undefined) { + scope.opts.blocks[''] = html; + } + return [4 /*yield*/, liquid.getTemplate(layout, scope.opts.root)]; + case 2: + templates = _a.sent(); + scope.push(hash$$1); + scope.opts.blockMode = 'output'; + return [4 /*yield*/, liquid.renderer.renderTemplates(templates, scope)]; + case 3: + partial = _a.sent(); + scope.pop(hash$$1); + return [2 /*return*/, partial]; + } + }); + }); + } + }); + liquid.registerTag('block', { + parse: function (token, remainTokens) { + var _this = this; + var match = /\w+/.exec(token.args); + this.block = match ? match[0] : ''; + this.tpls = []; + var stream = liquid.parser.parseStream(remainTokens) + .on('tag:endblock', function () { return stream.stop(); }) + .on('template', function (tpl) { return _this.tpls.push(tpl); }) + .on('end', function () { + throw new Error("tag " + token.raw + " not closed"); + }); + stream.start(); + }, + render: function (scope) { + return __awaiter(this, void 0, void 0, function () { + var childDefined, html, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + childDefined = scope.opts.blocks[this.block]; + if (!(childDefined !== undefined)) return [3 /*break*/, 1]; + _a = childDefined; + return [3 /*break*/, 3]; + case 1: return [4 /*yield*/, liquid.renderer.renderTemplates(this.tpls, scope)]; + case 2: + _a = _b.sent(); + _b.label = 3; + case 3: + html = _a; + if (scope.opts.blockMode === 'store') { + scope.opts.blocks[this.block] = html; + return [2 /*return*/, '']; + } + return [2 /*return*/, html]; + } + }); + }); + } + }); } - } - function Assign (liquid, Liquid) { - var re = new RegExp('(' + identifier.source + ')\\s*=([^]*)'); - var AssignScope = Liquid.Types.AssignScope; - - - liquid.registerTag('assign', { - parse: function parse(token) { - var match = token.args.match(re); - assert(match, 'illegal token ' + token.raw); - this.key = match[1]; - this.value = match[2]; - }, - render: function render(scope) { - var ctx = create(AssignScope); - ctx[this.key] = liquid.evalValue(this.value, scope); - scope.push(ctx); - return Promise.resolve(''); - } - }); - } - - function Capture (liquid, Liquid) { - var re = new RegExp('(' + identifier.source + ')'); - var CaptureScope = Liquid.Types.CaptureScope; - - - liquid.registerTag('capture', { - parse: function parse(tagToken, remainTokens) { - var _this = this; - - var match = tagToken.args.match(re); - assert(match, tagToken.args + ' not valid identifier'); - - this.variable = match[1]; - this.templates = []; - - var stream = liquid.parser.parseStream(remainTokens); - stream.on('tag:endcapture', function (token) { - return stream.stop(); - }).on('template', function (tpl) { - return _this.templates.push(tpl); - }).on('end', function (x) { - throw new Error('tag ' + tagToken.raw + ' not closed'); - }); - stream.start(); - }, - render: function () { - var _ref = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(scope, hash$$1) { - var html, ctx; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.next = 2; - return liquid.renderer.renderTemplates(this.templates, scope); - - case 2: - html = _context.sent; - ctx = create(CaptureScope); - - ctx[this.variable] = html; - scope.push(ctx); - - case 6: - case 'end': - return _context.stop(); - } - } - }, _callee, this); - })); - - function render(_x, _x2) { - return _ref.apply(this, arguments); - } - - return render; - }() - }); - } - - function Case (liquid, Liquid) { - liquid.registerTag('case', { - - parse: function parse(tagToken, remainTokens) { - var _this = this; - - this.cond = tagToken.args; - this.cases = []; - this.elseTemplates = []; - - var p = []; - var stream = liquid.parser.parseStream(remainTokens).on('tag:when', function (token) { - _this.cases.push({ - val: token.args, - templates: p = [] - }); - }).on('tag:else', function () { - return p = _this.elseTemplates; - }).on('tag:endcase', function (token) { - return stream.stop(); - }).on('template', function (tpl) { - return p.push(tpl); - }).on('end', function (x) { - throw new Error('tag ' + tagToken.raw + ' not closed'); - }); - - stream.start(); - }, - - render: function render(scope, hash) { - for (var i = 0; i < this.cases.length; i++) { - var branch = this.cases[i]; - var val = Liquid.evalExp(branch.val, scope); - var cond = Liquid.evalExp(this.cond, scope); - if (val === cond) { - return liquid.renderer.renderTemplates(branch.templates, scope); - } - } - return liquid.renderer.renderTemplates(this.elseTemplates, scope); - } - }); - } - - function Comment (liquid) { - liquid.registerTag('comment', { - parse: function parse(tagToken, remainTokens) { - var stream = liquid.parser.parseStream(remainTokens); - stream.on('token', function (token) { - if (token.name === 'endcomment') stream.stop(); - }).on('end', function (x) { - throw new Error('tag ' + tagToken.raw + ' not closed'); - }); - stream.start(); - } - }); - } - - var staticFileRE = /[^\s,]+/; - - function Include (liquid, Liquid) { - var withRE = new RegExp('with\\s+(' + value.source + ')'); - - liquid.registerTag('include', { - parse: function parse(token) { - var match = staticFileRE.exec(token.args); - if (match) { - this.staticValue = match[0]; - } - - match = value.exec(token.args); - if (match) { - this.value = match[0]; - } - - match = withRE.exec(token.args); - if (match) { - this.with = match[1]; - } - }, - render: function () { - var _ref = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(scope, hash$$1) { - var filepath, template, originBlocks, originBlockMode, templates, html; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - filepath = void 0; - - if (!scope.opts.dynamicPartials) { - _context.next = 12; - break; - } - - if (!quotedLine.exec(this.value)) { - _context.next = 9; - break; - } - - template = this.value.slice(1, -1); - _context.next = 6; - return liquid.parseAndRender(template, scope.getAll(), scope.opts); - - case 6: - filepath = _context.sent; - _context.next = 10; - break; - - case 9: - filepath = Liquid.evalValue(this.value, scope); - - case 10: - _context.next = 13; - break; - - case 12: - filepath = this.staticValue; - - case 13: - assert(filepath, 'cannot include with empty filename'); - - originBlocks = scope.opts.blocks; - originBlockMode = scope.opts.blockMode; - - - scope.opts.blocks = {}; - scope.opts.blockMode = 'output'; - if (this.with) { - hash$$1[filepath] = Liquid.evalValue(this.with, scope); - } - _context.next = 21; - return liquid.getTemplate(filepath, scope.opts.root); - - case 21: - templates = _context.sent; - - scope.push(hash$$1); - _context.next = 25; - return liquid.renderer.renderTemplates(templates, scope); - - case 25: - html = _context.sent; - - scope.pop(hash$$1); - scope.opts.blocks = originBlocks; - scope.opts.blockMode = originBlockMode; - return _context.abrupt('return', html); - - case 30: - case 'end': - return _context.stop(); - } - } - }, _callee, this); - })); - - function render(_x, _x2) { - return _ref.apply(this, arguments); - } - - return render; - }() - }); - } - - function Decrement (liquid, Liquid) { - var _Liquid$Types = Liquid.Types, - CaptureScope = _Liquid$Types.CaptureScope, - AssignScope = _Liquid$Types.AssignScope, - DecrementScope = _Liquid$Types.DecrementScope; - - - liquid.registerTag('decrement', { - parse: function parse(token) { - var match = token.args.match(identifier); - assert(match, 'illegal identifier ' + token.args); - this.variable = match[0]; - }, - render: function render(scope, hash$$1) { - var context = scope.findContextFor(this.variable, function (ctx) { - var proto = Object.getPrototypeOf(ctx); - return proto !== CaptureScope && proto !== AssignScope; - }); - if (!context) { - context = create(DecrementScope); - scope.unshift(context); - } - if (typeof context[this.variable] !== 'number') { - context[this.variable] = 0; - } - return --context[this.variable]; - } - }); - } - - function Cycle (liquid, Liquid) { - var groupRE = new RegExp('^(?:(' + value.source + ')\\s*:\\s*)?(.*)$'); - var candidatesRE = new RegExp(value.source, 'g'); - - liquid.registerTag('cycle', { - - parse: function parse(tagToken, remainTokens) { - var match = groupRE.exec(tagToken.args); - assert(match, 'illegal tag: ' + tagToken.raw); - - this.group = match[1] || ''; - var candidates = match[2]; - - this.candidates = []; - - while (match = candidatesRE.exec(candidates)) { - this.candidates.push(match[0]); - } - assert(this.candidates.length, 'empty candidates: ' + tagToken.raw); - }, - - render: function render(scope, hash$$1) { - var group = Liquid.evalValue(this.group, scope); - var fingerprint = 'cycle:' + group + ':' + this.candidates.join(','); - - var groups = scope.opts.groups = scope.opts.groups || {}; - var idx = groups[fingerprint]; - - if (idx === undefined) { - idx = groups[fingerprint] = 0; - } - - var candidate = this.candidates[idx]; - idx = (idx + 1) % this.candidates.length; - groups[fingerprint] = idx; - - return Liquid.evalValue(candidate, scope); - } - }); - } - - function If (liquid, Liquid) { - liquid.registerTag('if', { - - parse: function parse(tagToken, remainTokens) { - var _this = this; - - this.branches = []; - this.elseTemplates = []; - - var p = void 0; - var stream = liquid.parser.parseStream(remainTokens).on('start', function () { - return _this.branches.push({ - cond: tagToken.args, - templates: p = [] - }); - }).on('tag:elsif', function (token) { - _this.branches.push({ - cond: token.args, - templates: p = [] - }); - }).on('tag:else', function () { - return p = _this.elseTemplates; - }).on('tag:endif', function (token) { - return stream.stop(); - }).on('template', function (tpl) { - return p.push(tpl); - }).on('end', function (x) { - throw new Error('tag ' + tagToken.raw + ' not closed'); - }); - - stream.start(); - }, - - render: function render(scope, hash) { - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = this.branches[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var branch = _step.value; - - var cond = Liquid.evalExp(branch.cond, scope); - if (Liquid.isTruthy(cond)) { - return liquid.renderer.renderTemplates(branch.templates, scope); - } - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - return liquid.renderer.renderTemplates(this.elseTemplates, scope); - } - }); - } - - function Increment (liquid, Liquid) { - var _Liquid$Types = Liquid.Types, - CaptureScope = _Liquid$Types.CaptureScope, - AssignScope = _Liquid$Types.AssignScope, - IncrementScope = _Liquid$Types.IncrementScope; - - - liquid.registerTag('increment', { - parse: function parse(token) { - var match = token.args.match(identifier); - assert(match, 'illegal identifier ' + token.args); - this.variable = match[0]; - }, - render: function render(scope, hash$$1) { - var context = scope.findContextFor(this.variable, function (ctx) { - var proto = Object.getPrototypeOf(ctx); - return proto !== CaptureScope && proto !== AssignScope; - }); - if (!context) { - context = create(IncrementScope); - scope.unshift(context); - } - if (typeof context[this.variable] !== 'number') { - context[this.variable] = 0; - } - var val = context[this.variable]; - context[this.variable]++; - return val; - } - }); - } - - /* - * blockMode: - * * "store": store rendered html into blocks - * * "output": output rendered html - */ - - function Layout (liquid, Liquid) { - var staticFileRE = /\S+/; - - liquid.registerTag('layout', { - parse: function parse(token, remainTokens) { - var match = staticFileRE.exec(token.args); - if (match) { - this.staticLayout = match[0]; - } - - match = value.exec(token.args); - if (match) { - this.layout = match[0]; - } - - this.tpls = liquid.parser.parse(remainTokens); - }, - render: function () { - var _ref = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(scope, hash$$1) { - var layout, html, templates, partial; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - layout = scope.opts.dynamicPartials ? Liquid.evalValue(this.layout, scope) : this.staticLayout; - - assert(layout, 'cannot apply layout with empty filename'); - - // render the remaining tokens immediately - scope.opts.blockMode = 'store'; - _context.next = 5; - return liquid.renderer.renderTemplates(this.tpls, scope); - - case 5: - html = _context.sent; - - if (scope.opts.blocks[''] === undefined) { - scope.opts.blocks[''] = html; - } - _context.next = 9; - return liquid.getTemplate(layout, scope.opts.root); - - case 9: - templates = _context.sent; - - scope.push(hash$$1); - scope.opts.blockMode = 'output'; - _context.next = 14; - return liquid.renderer.renderTemplates(templates, scope); - - case 14: - partial = _context.sent; - - scope.pop(hash$$1); - return _context.abrupt('return', partial); - - case 17: - case 'end': - return _context.stop(); - } - } - }, _callee, this); - })); - - function render(_x, _x2) { - return _ref.apply(this, arguments); - } - - return render; - }() - }); - - liquid.registerTag('block', { - parse: function parse(token, remainTokens) { - var _this = this; - - var match = /\w+/.exec(token.args); - this.block = match ? match[0] : ''; - - this.tpls = []; - var stream = liquid.parser.parseStream(remainTokens).on('tag:endblock', function () { - return stream.stop(); - }).on('template', function (tpl) { - return _this.tpls.push(tpl); - }).on('end', function () { - throw new Error('tag ' + token.raw + ' not closed'); - }); - stream.start(); - }, - render: function () { - var _ref2 = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(scope) { - var childDefined, html; - return regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - childDefined = scope.opts.blocks[this.block]; - - if (!(childDefined !== undefined)) { - _context2.next = 5; - break; - } - - _context2.t0 = childDefined; - _context2.next = 8; - break; - - case 5: - _context2.next = 7; - return liquid.renderer.renderTemplates(this.tpls, scope); - - case 7: - _context2.t0 = _context2.sent; - - case 8: - html = _context2.t0; - - if (!(scope.opts.blockMode === 'store')) { - _context2.next = 12; - break; - } - - scope.opts.blocks[this.block] = html; - return _context2.abrupt('return', ''); - - case 12: - return _context2.abrupt('return', html); - - case 13: - case 'end': - return _context2.stop(); - } - } - }, _callee2, this); - })); - - function render(_x3) { - return _ref2.apply(this, arguments); - } - - return render; - }() - }); - } - - function Raw (liquid) { - liquid.registerTag('raw', { - parse: function parse(tagToken, remainTokens) { - var _this = this; - - this.tokens = []; - - var stream = liquid.parser.parseStream(remainTokens); - stream.on('token', function (token) { - if (token.name === 'endraw') stream.stop();else _this.tokens.push(token); - }).on('end', function () { - throw new Error('tag ' + tagToken.raw + ' not closed'); - }); - stream.start(); - }, - render: function render(scope, hash) { - return this.tokens.map(function (token) { - return token.raw; - }).join(''); - } - }); - } - - function Tablerow (liquid, Liquid) { - var re = new RegExp('^(' + identifier.source + ')\\s+in\\s+' + ('(' + value.source + ')') + ('(?:\\s+' + hash.source + ')*$')); - - liquid.registerTag('tablerow', { - - parse: function parse(tagToken, remainTokens) { - var _this = this; - - var match = re.exec(tagToken.args); - assert(match, 'illegal tag: ' + tagToken.raw); - - this.variable = match[1]; - this.collection = match[2]; - this.templates = []; - - var p = void 0; - var stream = liquid.parser.parseStream(remainTokens).on('start', function () { - return p = _this.templates; - }).on('tag:endtablerow', function (token) { - return stream.stop(); - }).on('template', function (tpl) { - return p.push(tpl); - }).on('end', function () { - throw new Error('tag ' + tagToken.raw + ' not closed'); - }); - - stream.start(); - }, - - render: function () { - var _ref = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(scope, hash$$1) { - var _this2 = this; - - var collection, offset, limit, cols, contexts, row, html; - return regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - collection = Liquid.evalExp(this.collection, scope) || []; - offset = hash$$1.offset || 0; - limit = hash$$1.limit === undefined ? collection.length : hash$$1.limit; - - - collection = collection.slice(offset, offset + limit); - cols = hash$$1.cols || collection.length; - contexts = collection.map(function (item, i) { - var ctx = {}; - ctx[_this2.variable] = item; - return ctx; - }); - row = void 0; - html = ''; - _context2.next = 10; - return mapSeries(contexts, function () { - var _ref2 = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(context, idx) { - var col; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - row = Math.floor(idx / cols) + 1; - col = idx % cols + 1; - - if (col === 1) { - if (row !== 1) { - html += ''; - } - html += ''; - } - - html += ''; - scope.push(context); - _context.next = 7; - return liquid.renderer.renderTemplates(_this2.templates, scope); - - case 7: - html += _context.sent; - - html += ''; - scope.pop(context); - return _context.abrupt('return', html); - - case 11: - case 'end': - return _context.stop(); - } - } - }, _callee, _this2); - })); - - return function (_x3, _x4) { - return _ref2.apply(this, arguments); - }; - }()); - - case 10: - if (row > 0) { - html += ''; - } - return _context2.abrupt('return', html); - - case 12: - case 'end': - return _context2.stop(); - } - } - }, _callee2, this); - })); - - function render(_x, _x2) { - return _ref.apply(this, arguments); - } - - return render; - }() - }); - } - - function Unless (liquid, Liquid) { - liquid.registerTag('unless', { - parse: function parse(tagToken, remainTokens) { - var _this = this; - - this.templates = []; - this.elseTemplates = []; - var p = void 0; - var stream = liquid.parser.parseStream(remainTokens).on('start', function (x) { - p = _this.templates; - _this.cond = tagToken.args; - }).on('tag:else', function () { - return p = _this.elseTemplates; - }).on('tag:endunless', function (token) { - return stream.stop(); - }).on('template', function (tpl) { - return p.push(tpl); - }).on('end', function (x) { - throw new Error('tag ' + tagToken.raw + ' not closed'); - }); - - stream.start(); - }, - - render: function render(scope, hash) { - var cond = Liquid.evalExp(this.cond, scope); - return Liquid.isFalsy(cond) ? liquid.renderer.renderTemplates(this.templates, scope) : liquid.renderer.renderTemplates(this.elseTemplates, scope); - } - }); - } - - function tags (engine, Liquid) { - Assign(engine, Liquid); - Capture(engine, Liquid); - Case(engine, Liquid); - Comment(engine, Liquid); - Cycle(engine, Liquid); - Decrement(engine, Liquid); - For(engine, Liquid); - If(engine, Liquid); - Include(engine, Liquid); - Increment(engine, Liquid); - Layout(engine, Liquid); - Raw(engine, Liquid); - Tablerow(engine, Liquid); - Unless(engine, Liquid); - } - - var monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; - var dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; - var monthNamesShort = monthNames.map(abbr); - var dayNamesShort = dayNames.map(abbr); - var suffixes = { - 1: 'st', - 2: 'nd', - 3: 'rd', - 'default': 'th' - }; - - function abbr(str) { - return str.slice(0, 3); - } - - // prototype extensions - var _date = { - daysInMonth: function daysInMonth(d) { - var feb = _date.isLeapYear(d) ? 29 : 28; - return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - }, - - getDayOfYear: function getDayOfYear(d) { - var num = 0; - for (var i = 0; i < d.getMonth(); ++i) { - num += _date.daysInMonth(d)[i]; - } - return num + d.getDate(); - }, - - // Startday is an integer of which day to start the week measuring from - // TODO: that comment was retarted. fix it. - getWeekOfYear: function getWeekOfYear(d, startDay) { - // Skip to startDay of this week - var now = this.getDayOfYear(d) + (startDay - d.getDay()); - // Find the first startDay of the year - var jan1 = new Date(d.getFullYear(), 0, 1); - var then = 7 - jan1.getDay() + startDay; - return _number.pad(Math.floor((now - then) / 7) + 1, 2); - }, - - isLeapYear: function isLeapYear(d) { - var year = d.getFullYear(); - return !!((year & 3) === 0 && (year % 100 || year % 400 === 0 && year)); - }, - - getSuffix: function getSuffix(d) { - var str = d.getDate().toString(); - var index = parseInt(str.slice(-1)); - return suffixes[index] || suffixes['default']; - }, - - century: function century(d) { - return parseInt(d.getFullYear().toString().substring(0, 2), 10); + function Raw (liquid) { + liquid.registerTag('raw', { + parse: function (tagToken, remainTokens) { + var _this = this; + this.tokens = []; + var stream = liquid.parser.parseStream(remainTokens); + stream + .on('token', function (token) { + if (token.name === 'endraw') + stream.stop(); + else + _this.tokens.push(token); + }) + .on('end', function () { + throw new Error("tag " + tagToken.raw + " not closed"); + }); + stream.start(); + }, + render: function (scope, hash) { + return this.tokens.map(function (token) { return token.raw; }).join(''); + } + }); } - }; - var _number = { - pad: function pad(value, size, ch) { - if (!ch) ch = '0'; - var result = value.toString(); - var pad = size - result.length; - - while (pad-- > 0) { - result = ch + result; - } - - return result; + function Tablerow (liquid, Liquid) { + var re = new RegExp("^(" + identifier.source + ")\\s+in\\s+" + + ("(" + value.source + ")") + + ("(?:\\s+" + hash.source + ")*$")); + liquid.registerTag('tablerow', { + parse: function (tagToken, remainTokens) { + var _this = this; + var match = re.exec(tagToken.args); + assert(match, "illegal tag: " + tagToken.raw); + this.variable = match[1]; + this.collection = match[2]; + this.templates = []; + var p; + var stream = liquid.parser.parseStream(remainTokens) + .on('start', function () { return (p = _this.templates); }) + .on('tag:endtablerow', function (token) { return stream.stop(); }) + .on('template', function (tpl) { return p.push(tpl); }) + .on('end', function () { + throw new Error("tag " + tagToken.raw + " not closed"); + }); + stream.start(); + }, + render: function (scope, hash$$1) { + return __awaiter(this, void 0, void 0, function () { + var collection, offset, limit, cols, contexts, row, html; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + collection = Liquid.evalExp(this.collection, scope) || []; + offset = hash$$1.offset || 0; + limit = (hash$$1.limit === undefined) ? collection.length : hash$$1.limit; + collection = collection.slice(offset, offset + limit); + cols = hash$$1.cols || collection.length; + contexts = collection.map(function (item, i) { + var ctx = {}; + ctx[_this.variable] = item; + return ctx; + }); + html = ''; + return [4 /*yield*/, mapSeries(contexts, function (context, idx) { return __awaiter(_this, void 0, void 0, function () { + var col, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + row = Math.floor(idx / cols) + 1; + col = (idx % cols) + 1; + if (col === 1) { + if (row !== 1) { + html += ''; + } + html += ""; + } + html += ""; + scope.push(context); + _a = html; + return [4 /*yield*/, liquid.renderer.renderTemplates(this.templates, scope)]; + case 1: + html = _a + _b.sent(); + html += ''; + scope.pop(context); + return [2 /*return*/, html]; + } + }); + }); })]; + case 1: + _a.sent(); + if (row > 0) { + html += ''; + } + return [2 /*return*/, html]; + } + }); + }); + } + }); } - }; - var formatCodes = { - a: function a(d) { - return dayNamesShort[d.getDay()]; - }, - A: function A(d) { - return dayNames[d.getDay()]; - }, - b: function b(d) { - return monthNamesShort[d.getMonth()]; - }, - B: function B(d) { - return monthNames[d.getMonth()]; - }, - c: function c(d) { - return d.toLocaleString(); - }, - C: function C(d) { - return _date.century(d); - }, - d: function d(_d) { - return _number.pad(_d.getDate(), 2); - }, - e: function e(d) { - return _number.pad(d.getDate(), 2, ' '); - }, - H: function H(d) { - return _number.pad(d.getHours(), 2); - }, - I: function I(d) { - return _number.pad(d.getHours() % 12 || 12, 2); - }, - j: function j(d) { - return _number.pad(_date.getDayOfYear(d), 3); - }, - k: function k(d) { - return _number.pad(d.getHours(), 2, ' '); - }, - l: function l(d) { - return _number.pad(d.getHours() % 12 || 12, 2, ' '); - }, - L: function L(d) { - return _number.pad(d.getMilliseconds(), 3); - }, - m: function m(d) { - return _number.pad(d.getMonth() + 1, 2); - }, - M: function M(d) { - return _number.pad(d.getMinutes(), 2); - }, - p: function p(d) { - return d.getHours() < 12 ? 'AM' : 'PM'; - }, - P: function P(d) { - return d.getHours() < 12 ? 'am' : 'pm'; - }, - q: function q(d) { - return _date.getSuffix(d); - }, - s: function s(d) { - return Math.round(d.valueOf() / 1000); - }, - S: function S(d) { - return _number.pad(d.getSeconds(), 2); - }, - u: function u(d) { - return d.getDay() || 7; - }, - U: function U(d) { - return _date.getWeekOfYear(d, 0); - }, - w: function w(d) { - return d.getDay(); - }, - W: function W(d) { - return _date.getWeekOfYear(d, 1); - }, - x: function x(d) { - return d.toLocaleDateString(); - }, - X: function X(d) { - return d.toLocaleTimeString(); - }, - y: function y(d) { - return d.getFullYear().toString().substring(2, 4); - }, - Y: function Y(d) { - return d.getFullYear(); - }, - z: function z(d) { - var tz = d.getTimezoneOffset() / 60 * 100; - return (tz > 0 ? '-' : '+') + _number.pad(Math.abs(tz), 4); - }, - '%': function _() { - return '%'; + function Unless (liquid, Liquid) { + liquid.registerTag('unless', { + parse: function (tagToken, remainTokens) { + var _this = this; + this.templates = []; + this.elseTemplates = []; + var p; + var stream = liquid.parser.parseStream(remainTokens) + .on('start', function (x) { + p = _this.templates; + _this.cond = tagToken.args; + }) + .on('tag:else', function () { return (p = _this.elseTemplates); }) + .on('tag:endunless', function (token) { return stream.stop(); }) + .on('template', function (tpl) { return p.push(tpl); }) + .on('end', function (x) { + throw new Error("tag " + tagToken.raw + " not closed"); + }); + stream.start(); + }, + render: function (scope, hash) { + var cond = Liquid.evalExp(this.cond, scope); + return Liquid.isFalsy(cond) + ? liquid.renderer.renderTemplates(this.templates, scope) + : liquid.renderer.renderTemplates(this.elseTemplates, scope); + } + }); } - }; - formatCodes.h = formatCodes.b; - formatCodes.N = formatCodes.L; - function strftime (d, format) { - var output = ''; - var remaining = format; - - while (true) { - var r = /%./g; - var results = r.exec(remaining); - - // No more format codes. Add the remaining text and return - if (!results) { - return output + remaining; - } - - // Add the preceding text - output += remaining.slice(0, r.lastIndex - 2); - remaining = remaining.slice(r.lastIndex); - - // Add the format code - var ch = results[0].charAt(1); - var func = formatCodes[ch]; - output += func ? func.call(this, d) : '%' + ch; + function tags (engine, Liquid) { + Assign(engine, Liquid); + Capture(engine, Liquid); + Case(engine, Liquid); + Comment(engine, Liquid); + Cycle(engine, Liquid); + Decrement(engine, Liquid); + For(engine, Liquid); + If(engine, Liquid); + Include(engine, Liquid); + Increment(engine, Liquid); + Layout(engine, Liquid); + Raw(engine, Liquid); + Tablerow(engine, Liquid); + Unless(engine, Liquid); } - } - var escapeMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - }; - var unescapeMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': "'" - }; - - var filters = { - 'abs': function abs(v) { - return Math.abs(v); - }, - 'append': function append(v, arg) { - return v + arg; - }, - 'capitalize': function capitalize(str) { - return stringify$1(str).charAt(0).toUpperCase() + str.slice(1); - }, - 'ceil': function ceil(v) { - return Math.ceil(v); - }, - 'concat': function concat(v, arg) { - return Array.prototype.concat.call(v, arg); - }, - 'date': function date(v, arg) { - var date = v; - if (v === 'now') { - date = new Date(); - } else if (isString(v)) { - date = new Date(v); - } - return isValidDate(date) ? strftime(date, arg) : v; - }, - 'default': function _default(v, arg) { - return isTruthy(v) ? v : arg; - }, - 'divided_by': function divided_by(v, arg) { - return v / arg; - }, - 'downcase': function downcase(v) { - return v.toLowerCase(); - }, - 'escape': escape, - - 'escape_once': function escape_once(str) { - return escape(unescape(str)); - }, - 'first': function first(v) { - return v[0]; - }, - 'floor': function floor(v) { - return Math.floor(v); - }, - 'join': function join(v, arg) { - return v.join(arg === undefined ? ' ' : arg); - }, - 'last': function last$$1(v) { - return last(v); - }, - 'lstrip': function lstrip(v) { - return stringify$1(v).replace(/^\s+/, ''); - }, - 'map': function map(arr, arg) { - return arr.map(function (v) { - return v[arg]; - }); - }, - 'minus': bindFixed(function (v, arg) { - return v - arg; - }), - 'modulo': bindFixed(function (v, arg) { - return v % arg; - }), - 'newline_to_br': function newline_to_br(v) { - return v.replace(/\n/g, '
'); - }, - 'plus': bindFixed(function (v, arg) { - return Number(v) + Number(arg); - }), - 'prepend': function prepend(v, arg) { - return arg + v; - }, - 'remove': function remove(v, arg) { - return v.split(arg).join(''); - }, - 'remove_first': function remove_first(v, l) { - return v.replace(l, ''); - }, - 'replace': function replace(v, pattern, replacement) { - return stringify$1(v).split(pattern).join(replacement); - }, - 'replace_first': function replace_first(v, arg1, arg2) { - return stringify$1(v).replace(arg1, arg2); - }, - 'reverse': function reverse(v) { - return v.reverse(); - }, - 'round': function round(v, arg) { - var amp = Math.pow(10, arg || 0); - return Math.round(v * amp, arg) / amp; - }, - 'rstrip': function rstrip(str) { - return stringify$1(str).replace(/\s+$/, ''); - }, - 'size': function size(v) { - return v.length; - }, - 'slice': function slice(v, begin, length) { - if (length === undefined) length = 1; - return v.slice(begin, begin + length); - }, - 'sort': function sort(v, arg) { - return v.sort(arg); - }, - 'split': function split(v, arg) { - return stringify$1(v).split(arg); - }, - 'strip': function strip(v) { - return stringify$1(v).trim(); - }, - 'strip_html': function strip_html(v) { - return stringify$1(v).replace(/|||<.*?>/g, ''); - }, - 'strip_newlines': function strip_newlines(v) { - return stringify$1(v).replace(/\n/g, ''); - }, - 'times': function times(v, arg) { - return v * arg; - }, - 'truncate': function truncate(v, l, o) { - v = stringify$1(v); - o = o === undefined ? '...' : o; - l = l || 16; - if (v.length <= l) return v; - return v.substr(0, l - o.length) + o; - }, - 'truncatewords': function truncatewords(v, l, o) { - if (o === undefined) o = '...'; - var arr = v.split(' '); - var ret = arr.slice(0, l).join(' '); - if (arr.length > l) ret += o; - return ret; - }, - 'uniq': function uniq$$1(arr) { - var u = {}; - return (arr || []).filter(function (val) { - if (u.hasOwnProperty(val)) { - return false; - } - u[val] = true; - return true; - }); - }, - 'upcase': function upcase(str) { - return stringify$1(str).toUpperCase(); - }, - 'url_decode': function url_decode(x) { - return x.split('+').map(decodeURIComponent).join(' '); - }, - 'url_encode': function url_encode(x) { - return x.split(' ').map(encodeURIComponent).join('+'); + var monthNames = [ + 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', + 'September', 'October', 'November', 'December' + ]; + var dayNames = [ + 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' + ]; + var monthNamesShort = monthNames.map(abbr); + var dayNamesShort = dayNames.map(abbr); + var suffixes = { + 1: 'st', + 2: 'nd', + 3: 'rd', + 'default': 'th' + }; + function abbr(str) { + return str.slice(0, 3); + } + // prototype extensions + var _date = { + daysInMonth: function (d) { + var feb = _date.isLeapYear(d) ? 29 : 28; + return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + }, + getDayOfYear: function (d) { + var num = 0; + for (var i = 0; i < d.getMonth(); ++i) { + num += _date.daysInMonth(d)[i]; + } + return num + d.getDate(); + }, + // Startday is an integer of which day to start the week measuring from + // TODO: that comment was retarted. fix it. + getWeekOfYear: function (d, startDay) { + // Skip to startDay of this week + var now = this.getDayOfYear(d) + (startDay - d.getDay()); + // Find the first startDay of the year + var jan1 = new Date(d.getFullYear(), 0, 1); + var then = (7 - jan1.getDay() + startDay); + return _number.pad(Math.floor((now - then) / 7) + 1, 2); + }, + isLeapYear: function (d) { + var year = d.getFullYear(); + return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year))); + }, + getSuffix: function (d) { + var str = d.getDate().toString(); + var index = parseInt(str.slice(-1)); + return suffixes[index] || suffixes['default']; + }, + century: function (d) { + return parseInt(d.getFullYear().toString().substring(0, 2), 10); + } + }; + var _number = { + pad: function (value, size, ch) { + if (!ch) + ch = '0'; + var result = value.toString(); + var pad = size - result.length; + while (pad-- > 0) { + result = ch + result; + } + return result; + } + }; + var formatCodes = { + a: function (d) { + return dayNamesShort[d.getDay()]; + }, + A: function (d) { + return dayNames[d.getDay()]; + }, + b: function (d) { + return monthNamesShort[d.getMonth()]; + }, + B: function (d) { + return monthNames[d.getMonth()]; + }, + c: function (d) { + return d.toLocaleString(); + }, + C: function (d) { + return _date.century(d); + }, + d: function (d) { + return _number.pad(d.getDate(), 2); + }, + e: function (d) { + return _number.pad(d.getDate(), 2, ' '); + }, + H: function (d) { + return _number.pad(d.getHours(), 2); + }, + I: function (d) { + return _number.pad(d.getHours() % 12 || 12, 2); + }, + j: function (d) { + return _number.pad(_date.getDayOfYear(d), 3); + }, + k: function (d) { + return _number.pad(d.getHours(), 2, ' '); + }, + l: function (d) { + return _number.pad(d.getHours() % 12 || 12, 2, ' '); + }, + L: function (d) { + return _number.pad(d.getMilliseconds(), 3); + }, + m: function (d) { + return _number.pad(d.getMonth() + 1, 2); + }, + M: function (d) { + return _number.pad(d.getMinutes(), 2); + }, + p: function (d) { + return (d.getHours() < 12 ? 'AM' : 'PM'); + }, + P: function (d) { + return (d.getHours() < 12 ? 'am' : 'pm'); + }, + q: function (d) { + return _date.getSuffix(d); + }, + s: function (d) { + return Math.round(d.valueOf() / 1000); + }, + S: function (d) { + return _number.pad(d.getSeconds(), 2); + }, + u: function (d) { + return d.getDay() || 7; + }, + U: function (d) { + return _date.getWeekOfYear(d, 0); + }, + w: function (d) { + return d.getDay(); + }, + W: function (d) { + return _date.getWeekOfYear(d, 1); + }, + x: function (d) { + return d.toLocaleDateString(); + }, + X: function (d) { + return d.toLocaleTimeString(); + }, + y: function (d) { + return d.getFullYear().toString().substring(2, 4); + }, + Y: function (d) { + return d.getFullYear(); + }, + z: function (d) { + var tz = d.getTimezoneOffset() / 60 * 100; + return (tz > 0 ? '-' : '+') + _number.pad(Math.abs(tz), 4); + }, + '%': function () { + return '%'; + } + }; + formatCodes.h = formatCodes.b; + formatCodes.N = formatCodes.L; + function strftime (d, format) { + var output = ''; + var remaining = format; + while (true) { + var r = /%./g; + var results = r.exec(remaining); + // No more format codes. Add the remaining text and return + if (!results) { + return output + remaining; + } + // Add the preceding text + output += remaining.slice(0, r.lastIndex - 2); + remaining = remaining.slice(r.lastIndex); + // Add the format code + var ch = results[0].charAt(1); + var func = formatCodes[ch]; + output += func ? func.call(this, d) : '%' + ch; + } } - }; - function escape(str) { - return stringify$1(str).replace(/&|<|>|"|'/g, function (m) { - return escapeMap[m]; - }); - } + var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + var unescapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" + }; + var filters = { + 'abs': function (v) { return Math.abs(v); }, + 'append': function (v, arg) { return v + arg; }, + 'capitalize': function (str) { return stringify$1(str).charAt(0).toUpperCase() + str.slice(1); }, + 'ceil': function (v) { return Math.ceil(v); }, + 'concat': function (v, arg) { return Array.prototype.concat.call(v, arg); }, + 'date': function (v, arg) { + var date = v; + if (v === 'now') { + date = new Date(); + } + else if (isString(v)) { + date = new Date(v); + } + return isValidDate(date) ? strftime(date, arg) : v; + }, + 'default': function (v, arg) { return isTruthy(v) ? v : arg; }, + 'divided_by': function (v, arg) { return v / arg; }, + 'downcase': function (v) { return v.toLowerCase(); }, + 'escape': escape, + 'escape_once': function (str) { return escape(unescape(str)); }, + 'first': function (v) { return v[0]; }, + 'floor': function (v) { return Math.floor(v); }, + 'join': function (v, arg) { return v.join(arg === undefined ? ' ' : arg); }, + 'last': function (v) { return last(v); }, + 'lstrip': function (v) { return stringify$1(v).replace(/^\s+/, ''); }, + 'map': function (arr, arg) { return arr.map(function (v) { return v[arg]; }); }, + 'minus': bindFixed(function (v, arg) { return v - arg; }), + 'modulo': bindFixed(function (v, arg) { return v % arg; }), + 'newline_to_br': function (v) { return v.replace(/\n/g, '
'); }, + 'plus': bindFixed(function (v, arg) { return Number(v) + Number(arg); }), + 'prepend': function (v, arg) { return arg + v; }, + 'remove': function (v, arg) { return v.split(arg).join(''); }, + 'remove_first': function (v, l) { return v.replace(l, ''); }, + 'replace': function (v, pattern, replacement) { + return stringify$1(v).split(pattern).join(replacement); + }, + 'replace_first': function (v, arg1, arg2) { return stringify$1(v).replace(arg1, arg2); }, + 'reverse': function (v) { return v.reverse(); }, + 'round': function (v, arg) { + var amp = Math.pow(10, arg || 0); + return Math.round(v * amp, arg) / amp; + }, + 'rstrip': function (str) { return stringify$1(str).replace(/\s+$/, ''); }, + 'size': function (v) { return v.length; }, + 'slice': function (v, begin, length) { + if (length === undefined) + length = 1; + return v.slice(begin, begin + length); + }, + 'sort': function (v, arg) { return v.sort(arg); }, + 'split': function (v, arg) { return stringify$1(v).split(arg); }, + 'strip': function (v) { return stringify$1(v).trim(); }, + 'strip_html': function (v) { return stringify$1(v).replace(/|||<.*?>/g, ''); }, + 'strip_newlines': function (v) { return stringify$1(v).replace(/\n/g, ''); }, + 'times': function (v, arg) { return v * arg; }, + 'truncate': function (v, l, o) { + v = stringify$1(v); + o = (o === undefined) ? '...' : o; + l = l || 16; + if (v.length <= l) + return v; + return v.substr(0, l - o.length) + o; + }, + 'truncatewords': function (v, l, o) { + if (o === undefined) + o = '...'; + var arr = v.split(' '); + var ret = arr.slice(0, l).join(' '); + if (arr.length > l) + ret += o; + return ret; + }, + 'uniq': function (arr) { + var u = {}; + return (arr || []).filter(function (val) { + if (u.hasOwnProperty(val)) { + return false; + } + u[val] = true; + return true; + }); + }, + 'upcase': function (str) { return stringify$1(str).toUpperCase(); }, + 'url_decode': function (x) { return x.split('+').map(decodeURIComponent).join(' '); }, + 'url_encode': function (x) { return x.split(' ').map(encodeURIComponent).join('+'); } + }; + function escape(str) { + return stringify$1(str).replace(/&|<|>|"|'/g, function (m) { return escapeMap[m]; }); + } + function unescape(str) { + return stringify$1(str).replace(/&(amp|lt|gt|#34|#39);/g, function (m) { return unescapeMap[m]; }); + } + function getFixed(v) { + var p = (v + '').split('.'); + return (p.length > 1) ? p[1].length : 0; + } + function getMaxFixed(l, r) { + return Math.max(getFixed(l), getFixed(r)); + } + function stringify$1(obj) { + return obj + ''; + } + function bindFixed(cb) { + return function (l, r) { + var f = getMaxFixed(l, r); + return cb(l, r).toFixed(f); + }; + } + function isValidDate(date) { + return date instanceof Date && !isNaN(date.getTime()); + } + function registerAll(liquid, Liquid) { + return forOwn(filters, function (func, name) { return liquid.registerFilter(name, func); }); + } + registerAll.filters = filters; - function unescape(str) { - return stringify$1(str).replace(/&(amp|lt|gt|#34|#39);/g, function (m) { - return unescapeMap[m]; - }); - } - - function getFixed(v) { - var p = (v + '').split('.'); - return p.length > 1 ? p[1].length : 0; - } - - function getMaxFixed(l, r) { - return Math.max(getFixed(l), getFixed(r)); - } - - function stringify$1(obj) { - return obj + ''; - } - - function bindFixed(cb) { - return function (l, r) { - var f = getMaxFixed(l, r); - return cb(l, r).toFixed(f); - }; - } - - function isValidDate(date) { - return date instanceof Date && !isNaN(date.getTime()); - } - - function registerAll(liquid) { - return forOwn(filters, function (func, name) { - return liquid.registerFilter(name, func); - }); - } - - registerAll.filters = filters; - - var _engine = { - init: function init(tag, filter, options) { - if (options.cache) { - this.cache = {}; - } - this.options = options; - this.tag = tag; - this.filter = filter; - this.parser = Parser(tag, filter); - this.renderer = Render(); - - tags(this, Liquid); - registerAll(this, Liquid); - - return this; - }, - parse: function parse$$1(html, filepath) { - var tokens = parse(html, filepath, this.options); - return this.parser.parse(tokens); - }, - render: function render(tpl, ctx, opts) { - opts = assign({}, this.options, opts); - var scope = factory(ctx, opts); - return this.renderer.renderTemplates(tpl, scope); - }, - parseAndRender: function () { - var _ref = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(html, ctx, opts) { - var tpl; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.next = 2; - return this.parse(html); - - case 2: - tpl = _context.sent; - return _context.abrupt('return', this.render(tpl, ctx, opts)); - - case 4: - case 'end': - return _context.stop(); - } - } - }, _callee, this); - })); - - function parseAndRender(_x, _x2, _x3) { - return _ref.apply(this, arguments); - } - - return parseAndRender; - }(), - getTemplate: function () { - var _ref2 = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(file, root) { - var _this = this; - - var filepath; - return regeneratorRuntime.wrap(function _callee3$(_context3) { - while (1) { - switch (_context3.prev = _context3.next) { - case 0: - _context3.next = 2; - return resolve(file, root, this.options); - - case 2: - filepath = _context3.sent; - return _context3.abrupt('return', this.respectCache(filepath, asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() { - var str; - return regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - _context2.next = 2; - return read(filepath); - - case 2: - str = _context2.sent; - return _context2.abrupt('return', _this.parse(str, filepath)); - - case 4: - case 'end': - return _context2.stop(); - } - } - }, _callee2, _this); - })))); - - case 4: - case 'end': - return _context3.stop(); - } - } - }, _callee3, this); - })); - - function getTemplate(_x4, _x5) { - return _ref2.apply(this, arguments); - } - - return getTemplate; - }(), - renderFile: function () { - var _ref4 = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4(file, ctx, opts) { - var templates; - return regeneratorRuntime.wrap(function _callee4$(_context4) { - while (1) { - switch (_context4.prev = _context4.next) { - case 0: - opts = assign({}, opts); - _context4.next = 3; - return this.getTemplate(file, opts.root); - - case 3: - templates = _context4.sent; - return _context4.abrupt('return', this.render(templates, ctx, opts)); - - case 5: - case 'end': - return _context4.stop(); - } - } - }, _callee4, this); - })); - - function renderFile(_x6, _x7, _x8) { - return _ref4.apply(this, arguments); - } - - return renderFile; - }(), - respectCache: function () { - var _ref5 = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee5(key, getter) { - var cacheEnabled, value; - return regeneratorRuntime.wrap(function _callee5$(_context5) { - while (1) { - switch (_context5.prev = _context5.next) { - case 0: - cacheEnabled = this.options.cache; - - if (!(cacheEnabled && this.cache[key])) { - _context5.next = 3; - break; - } - - return _context5.abrupt('return', this.cache[key]); - - case 3: - _context5.next = 5; - return getter(); - - case 5: - value = _context5.sent; - - if (cacheEnabled) { - this.cache[key] = value; - } - return _context5.abrupt('return', value); - - case 8: - case 'end': - return _context5.stop(); - } - } - }, _callee5, this); - })); - - function respectCache(_x9, _x10) { - return _ref5.apply(this, arguments); - } - - return respectCache; - }(), - evalValue: function evalValue$$1(str, scope) { - var tpl = this.parser.parseValue(str.trim()); - return this.renderer.evalValue(tpl, scope); - }, - registerFilter: function registerFilter(name, filter) { - return this.filter.register(name, filter); - }, - registerTag: function registerTag(name, tag) { - return this.tag.register(name, tag); - }, - plugin: function plugin(_plugin) { - return _plugin.call(this, Liquid); - }, - express: function express(opts) { - opts = opts || {}; - var self = this; - return function (filePath, ctx, cb) { - assert(isArray(this.root) || isString(this.root), 'illegal views root, are you using express.js?'); - opts.root = this.root; - self.renderFile(filePath, ctx, opts).then(function (html) { - return cb(null, html); - }, cb); - }; + var Liquid = /** @class */ (function () { + function Liquid(options) { + options = assign({ + root: ['.'], + cache: false, + extname: '', + dynamicPartials: true, + trim_tag_right: false, + trim_tag_left: false, + trim_value_right: false, + trim_value_left: false, + greedy: true, + strict_filters: false, + strict_variables: false + }, options); + options.root = normalizeStringArray(options.root); + if (options.cache) { + this.cache = {}; + } + this.options = options; + this.tags = Tag(); + this.filters = Filter(options); + this.parser = Parser(this.tags, this.filters); + this.renderer = Render(); + tags(this, Liquid); + registerAll(this, Liquid); + } + Liquid.prototype.parse = function (html, filepath) { + var tokens = parse(html, filepath, this.options); + return this.parser.parse(tokens); + }; + Liquid.prototype.render = function (tpl, ctx, opts) { + opts = assign({}, this.options, opts); + var scope = new Scope(ctx, opts); + return this.renderer.renderTemplates(tpl, scope); + }; + Liquid.prototype.parseAndRender = function (html, ctx, opts) { + return __awaiter(this, void 0, void 0, function () { + var tpl; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.parse(html)]; + case 1: + tpl = _a.sent(); + return [2 /*return*/, this.render(tpl, ctx, opts)]; + } + }); + }); + }; + Liquid.prototype.getTemplate = function (file, root) { + return __awaiter(this, void 0, void 0, function () { + var filepath; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, resolve(file, root, this.options)]; + case 1: + filepath = _a.sent(); + return [2 /*return*/, this.respectCache(filepath, function () { return __awaiter(_this, void 0, void 0, function () { + var str; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, read(filepath)]; + case 1: + str = _a.sent(); + return [2 /*return*/, this.parse(str, filepath)]; + } + }); + }); })]; + } + }); + }); + }; + Liquid.prototype.renderFile = function (file, ctx, opts) { + return __awaiter(this, void 0, void 0, function () { + var templates; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + opts = assign({}, opts); + return [4 /*yield*/, this.getTemplate(file, opts.root)]; + case 1: + templates = _a.sent(); + return [2 /*return*/, this.render(templates, ctx, opts)]; + } + }); + }); + }; + Liquid.prototype.respectCache = function (key, getter) { + return __awaiter(this, void 0, void 0, function () { + var cacheEnabled, value; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + cacheEnabled = this.options.cache; + if (cacheEnabled && this.cache[key]) { + return [2 /*return*/, this.cache[key]]; + } + return [4 /*yield*/, getter()]; + case 1: + value = _a.sent(); + if (cacheEnabled) { + this.cache[key] = value; + } + return [2 /*return*/, value]; + } + }); + }); + }; + Liquid.prototype.evalValue = function (str, scope) { + var tpl = this.parser.parseValue(str.trim()); + return this.renderer.evalValue(tpl, scope); + }; + Liquid.prototype.registerFilter = function (name, filter) { + return this.filters.register(name, filter); + }; + Liquid.prototype.registerTag = function (name, tag) { + return this.tags.register(name, tag); + }; + Liquid.prototype.plugin = function (plugin) { + return plugin.call(this, Liquid); + }; + Liquid.prototype.express = function (opts) { + opts = opts || {}; + var self = this; + return function (filePath, ctx, cb) { + assert(isArray(this.root) || isString(this.root), 'illegal views root, are you using express.js?'); + opts.root = this.root; + self.renderFile(filePath, ctx, opts).then(function (html) { return cb(null, html); }, cb); + }; + }; + Liquid.default = Liquid; + Liquid.isTruthy = isTruthy; + Liquid.isFalsy = isFalsy; + Liquid.evalExp = evalExp; + Liquid.evalValue = evalValue; + Liquid.Types = { + ParseError: ParseError, + TokenizationError: TokenizationError, + RenderBreakError: RenderBreakError, + AssertionError: AssertionError, + AssignScope: {}, + CaptureScope: {}, + IncrementScope: {}, + DecrementScope: {} + }; + return Liquid; + }()); + function normalizeStringArray(value) { + if (isArray(value)) + return value; + if (isString(value)) + return [value]; + throw new TypeError('illegal root: ' + value); } - }; - function normalizeStringArray(value) { - if (isArray(value)) return value; - if (isString(value)) return [value]; - throw new TypeError('illegal root: ' + value); - } - - function Liquid(options) { - options = assign({ - root: ['.'], - cache: false, - extname: '', - dynamicPartials: true, - trim_tag_right: false, - trim_tag_left: false, - trim_value_right: false, - trim_value_left: false, - greedy: true, - strict_filters: false, - strict_variables: false - }, options); - options.root = normalizeStringArray(options.root); - - var engine = create(_engine); - engine.init(Tag(), Filter(options), options); - return engine; - } - - Liquid.default = Liquid; - Liquid.isTruthy = isTruthy; - Liquid.isFalsy = isFalsy; - Liquid.evalExp = evalExp; - Liquid.evalValue = evalValue; - Liquid.Types = { - ParseError: ParseError, - TokenizationError: TokenizationError, - RenderBreakError: RenderBreakError, - AssertionError: AssertionError, - AssignScope: {}, - CaptureScope: {}, - IncrementScope: {}, - DecrementScope: {} - }; - - return Liquid; + return Liquid; })); //# sourceMappingURL=liquid.js.map diff --git a/dist/liquid.js.map b/dist/liquid.js.map index 123844d05..d22da936f 100644 --- a/dist/liquid.js.map +++ b/dist/liquid.js.map @@ -1 +1 @@ -{"version":3,"file":"liquid.js","sources":["../node_modules/regenerator-runtime/runtime.js","../src/util/underscore.js","../src/lexical.js","../src/util/error.js","../src/util/assert.js","../src/scope.js","../src/template-browser.js","../src/whitespace-ctrl.js","../src/tokenizer.js","../src/operators.js","../src/syntax.js","../src/render.js","../src/tag.js","../src/filter.js","../src/parser.js","../src/util/promise.js","../src/tags/for.js","../src/tags/assign.js","../src/tags/capture.js","../src/tags/case.js","../src/tags/comment.js","../src/tags/include.js","../src/tags/decrement.js","../src/tags/cycle.js","../src/tags/if.js","../src/tags/increment.js","../src/tags/layout.js","../src/tags/raw.js","../src/tags/tablerow.js","../src/tags/unless.js","../src/tags/index.js","../src/util/strftime.js","../src/filters.js","../src/index.js"],"sourcesContent":["/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // In sloppy mode, unbound `this` refers to the global object, fallback to\n // Function constructor if we're in global strict mode. That is sadly a form\n // of indirect eval which violates Content Security Policy.\n (function() {\n return this || (typeof self === \"object\" && self);\n })() || Function(\"return this\")()\n);\n","const toStr = Object.prototype.toString\nconst arrToStr = Array.prototype.toString\n\n/*\n * Checks if value is classified as a String primitive or object.\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is a string, else false.\n */\nexport function isString (value) {\n return toStr.call(value) === '[object String]'\n}\n\nexport function isFunction (value) {\n return typeof value === 'function'\n}\n\nexport function promisify (fn) {\n return function () {\n return new Promise((resolve, reject) => {\n fn(...arguments, (err, result) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value) {\n if (isNil(value)) return String(value)\n if (isFunction(value.to_liquid)) return stringify(value.to_liquid())\n if (isFunction(value.toLiquid)) return stringify(value.toLiquid())\n if (isFunction(value.to_s)) return value.to_s()\n if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value)\n if (isFunction(value.toString)) return value.toString()\n return toStr.call(value)\n}\n\nfunction defaultToString (value) {\n const cache = []\n return JSON.stringify(value, (key, value) => {\n if (isObject(value)) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n}\n\nexport function create (proto) {\n return Object.create(proto)\n}\n\nexport function isNil (value) {\n return value === null || value === undefined\n}\n\nexport function isArray (value) {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value) {\n const signature = toStr.call(value)\n // [object XXXError]\n return signature.substr(-6, 5) === 'Error' ||\n (typeof value.message === 'string' && typeof value.name === 'string')\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (object, iteratee) {\n object = object || {}\n for (const k in object) {\n if (object.hasOwnProperty(k)) {\n if (iteratee(object[k], k, object) === false) break\n }\n }\n return object\n}\n\n/*\n * Assigns own enumerable string keyed properties of source objects to the destination object.\n * Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * Note: This method mutates object and is loosely based on Object.assign.\n *\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @return {Object} Returns object.\n */\nexport function assign (object) {\n object = isObject(object) ? object : {}\n const srcs = Array.prototype.slice.call(arguments, 1)\n srcs.forEach((src) => Object.assign(object, src))\n return object\n}\n\nexport function last (arr) {\n return arr[arr.length - 1]\n}\n\nexport function uniq (arr) {\n const u = {}\n const a = []\n for (let i = 0, l = arr.length; i < l; ++i) {\n if (u.hasOwnProperty(arr[i])) {\n continue\n }\n a.push(arr[i])\n u[arr[i]] = 1\n }\n return a\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value) {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\n/*\n * A function to create flexibly-numbered lists of integers,\n * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.\n * Returns a list of integers from start (inclusive) to stop (exclusive),\n * incremented (or decremented) by step, exclusive.\n * Note that ranges that stop before they start are considered to be zero-length instead of\n * negative — if you'd like a negative range, use a negative step.\n */\nexport function range (start, stop, step) {\n if (arguments.length === 1) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n","// quote related\nconst singleQuoted = /'[^']*'/\nconst doubleQuoted = /\"[^\"]*\"/\nexport const quoted = new RegExp(`${singleQuoted.source}|${doubleQuoted.source}`)\nexport const quoteBalanced = new RegExp(`(?:${quoted.source}|[^'\"])*`)\n\n// basic types\nexport const integer = /-?\\d+/\nexport const number = /-?\\d+\\.?\\d*|\\.?\\d+/\nexport const bool = /true|false/\n\n// property access\nexport const identifier = /[\\w-]+[?]?/\nexport const subscript = new RegExp(`\\\\[(?:${quoted.source}|[\\\\w-\\\\.]+)\\\\]`)\nexport const literal = new RegExp(`(?:${quoted.source}|${bool.source}|${number.source})`)\nexport const variable = new RegExp(`${identifier.source}(?:\\\\.${identifier.source}|${subscript.source})*`)\n\n// range related\nexport const rangeLimit = new RegExp(`(?:${variable.source}|${number.source})`)\nexport const range = new RegExp(`\\\\(${rangeLimit.source}\\\\.\\\\.${rangeLimit.source}\\\\)`)\nexport const rangeCapture = new RegExp(`\\\\((${rangeLimit.source})\\\\.\\\\.(${rangeLimit.source})\\\\)`)\n\nexport const value = new RegExp(`(?:${variable.source}|${literal.source}|${range.source})`)\n\n// hash related\nexport const hash = new RegExp(`(?:${identifier.source})\\\\s*:\\\\s*(?:${value.source})`)\nexport const hashCapture = new RegExp(`(${identifier.source})\\\\s*:\\\\s*(${value.source})`, 'g')\n\n// full match\nexport const tagLine = new RegExp(`^\\\\s*(${identifier.source})\\\\s*([\\\\s\\\\S]*)\\\\s*$`)\nexport const literalLine = new RegExp(`^${literal.source}$`, 'i')\nexport const variableLine = new RegExp(`^${variable.source}$`)\nexport const numberLine = new RegExp(`^${number.source}$`)\nexport const boolLine = new RegExp(`^${bool.source}$`, 'i')\nexport const quotedLine = new RegExp(`^${quoted.source}$`)\nexport const rangeLine = new RegExp(`^${rangeCapture.source}$`)\nexport const integerLine = new RegExp(`^${integer.source}$`)\n\n// filter related\nexport const valueDeclaration = new RegExp(`(?:${identifier.source}\\\\s*:\\\\s*)?${value.source}`)\nexport const valueList = new RegExp(`${valueDeclaration.source}(\\\\s*,\\\\s*${valueDeclaration.source})*`)\nexport const filter = new RegExp(`${identifier.source}(?:\\\\s*:\\\\s*${valueList.source})?`, 'g')\nexport const filterCapture = new RegExp(`(${identifier.source})(?:\\\\s*:\\\\s*(${valueList.source}))?`)\nexport const filterLine = new RegExp(`^${filterCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isInteger (str) {\n return integerLine.test(str)\n}\n\nexport function isLiteral (str) {\n return literalLine.test(str)\n}\n\nexport function isRange (str) {\n return rangeLine.test(str)\n}\n\nexport function isVariable (str) {\n return variableLine.test(str)\n}\n\nexport function matchValue (str) {\n return value.exec(str)\n}\n\nexport function parseLiteral (str) {\n let res = str.match(numberLine)\n if (res) {\n return Number(str)\n }\n res = str.match(boolLine)\n if (res) {\n return str.toLowerCase() === 'true'\n }\n res = str.match(quotedLine)\n if (res) {\n return str.slice(1, -1)\n }\n throw new TypeError(`cannot parse '${str}' as literal`)\n}\n","import * as _ from './underscore.js'\n\nfunction initError () {\n this.name = this.constructor.name\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n}\n\nfunction initLiquidError (err, token) {\n initError.call(this)\n\n this.input = token.input\n this.line = token.line\n this.file = token.file\n\n const context = mkContext(token.input, token.line)\n this.message = mkMessage(err.message, token)\n this.stack = context +\n '\\n' + (this.stack || this.message) +\n (err.stack ? '\\nFrom ' + err.stack : '')\n}\n\nexport function TokenizationError (message, token) {\n initLiquidError.call(this, { message: message }, token)\n}\nTokenizationError.prototype = _.create(Error.prototype)\nTokenizationError.prototype.constructor = TokenizationError\n\nexport function ParseError (e, token) {\n _.assign(this, e)\n this.originalError = e\n\n initLiquidError.call(this, e, token)\n}\nParseError.prototype = _.create(Error.prototype)\nParseError.prototype.constructor = ParseError\n\nexport function RenderError (e, tpl) {\n // return the original render error\n if (e instanceof RenderError) {\n return e\n }\n _.assign(this, e)\n this.originalError = e\n\n initLiquidError.call(this, e, tpl.token)\n}\nRenderError.prototype = _.create(Error.prototype)\nRenderError.prototype.constructor = RenderError\n\nexport function RenderBreakError (message) {\n initError.call(this)\n this.message = message + ''\n}\nRenderBreakError.prototype = _.create(Error.prototype)\nRenderBreakError.prototype.constructor = RenderBreakError\n\nexport function AssertionError (message) {\n initError.call(this)\n this.message = message + ''\n}\nAssertionError.prototype = _.create(Error.prototype)\nAssertionError.prototype.constructor = AssertionError\n\nfunction mkContext (input, line) {\n const lines = input.split('\\n')\n const begin = Math.max(line - 2, 1)\n const end = Math.min(line + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(l => [\n (l === line) ? '>> ' : ' ',\n align(l, end),\n '| ',\n lines[l - 1]\n ].join(''))\n .join('\\n')\n\n return context\n}\n\nfunction align (n, max) {\n const length = (max + '').length\n const str = n + ''\n const blank = Array(length - str.length).join(' ')\n return blank + str\n}\n\nfunction mkMessage (msg, token) {\n msg = msg || ''\n if (token.file) {\n msg += ', file:' + token.file\n }\n if (token.line) {\n msg += ', line:' + token.line\n }\n return msg\n}\n","import { AssertionError } from './error.js'\n\nexport default function (predicate, message) {\n if (!predicate) {\n message = message || `expect ${predicate} to be true`\n throw new AssertionError(message)\n }\n}\n","import * as _ from './util/underscore.js'\nimport * as lexical from './lexical.js'\nimport assert from './util/assert.js'\n\nconst Scope = {\n getAll: function () {\n return this.contexts.reduce((ctx, val) => _.assign(ctx, val), _.create(null))\n },\n get: function (path) {\n const paths = this.propertyAccessSeq(path)\n const scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n return paths.reduce((value, key) => this.readProperty(value, key), scope)\n },\n set: function (path, v) {\n const paths = this.propertyAccessSeq(path)\n let scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n paths.some((key, i) => {\n if (!_.isObject(scope)) {\n return true\n }\n if (i === paths.length - 1) {\n scope[key] = v\n return true\n }\n if (undefined === scope[key]) {\n scope[key] = {}\n }\n scope = scope[key]\n })\n },\n unshift: function (ctx) {\n return this.contexts.unshift(ctx)\n },\n push: function (ctx) {\n return this.contexts.push(ctx)\n },\n pop: function (ctx) {\n if (!arguments.length) {\n return this.contexts.pop()\n }\n const i = this.contexts.findIndex(scope => scope === ctx)\n if (i === -1) {\n throw new TypeError('scope not found, cannot pop')\n }\n return this.contexts.splice(i, 1)[0]\n },\n findContextFor: function (key, filter) {\n filter = filter || (() => true)\n for (let i = this.contexts.length - 1; i >= 0; i--) {\n const candidate = this.contexts[i]\n if (!filter(candidate)) continue\n if (key in candidate) {\n return candidate\n }\n }\n return null\n },\n readProperty: function (obj, key) {\n let val\n if (_.isNil(obj)) {\n val = undefined\n } else {\n obj = toLiquid(obj)\n val = key === 'size' ? readSize(obj) : obj[key]\n if (_.isFunction(obj.liquid_method_missing)) {\n val = obj.liquid_method_missing(key)\n }\n }\n if (_.isNil(val) && this.opts.strict_variables) {\n throw new TypeError(`undefined variable: ${key}`)\n }\n return val\n },\n\n /*\n * Parse property access sequence from access string\n * @example\n * accessSeq(\"foo.bar\") // ['foo', 'bar']\n * accessSeq(\"foo['bar']\") // ['foo', 'bar']\n * accessSeq(\"foo['b]r']\") // ['foo', 'b]r']\n * accessSeq(\"foo[bar.coo]\") // ['foo', 'bar'], for bar.coo == 'bar'\n */\n propertyAccessSeq: function (str) {\n str = String(str)\n const seq = []\n let name = ''\n let j\n let i = 0\n while (i < str.length) {\n switch (str[i]) {\n case '[':\n push()\n\n const delemiter = str[i + 1]\n if (/['\"]/.test(delemiter)) { // foo[\"bar\"]\n j = str.indexOf(delemiter, i + 2)\n assert(j !== -1, `unbalanced ${delemiter}: ${str}`)\n name = str.slice(i + 2, j)\n push()\n i = j + 2\n } else { // foo[bar.coo]\n j = matchRightBracket(str, i + 1)\n assert(j !== -1, `unbalanced []: ${str}`)\n name = str.slice(i + 1, j)\n if (!lexical.isInteger(name)) { // foo[bar] vs. foo[1]\n name = String(this.get(name))\n }\n push()\n i = j + 1\n }\n break\n case '.':// foo.bar, foo[0].bar\n push()\n i++\n break\n default:// foo.bar\n name += str[i]\n i++\n }\n }\n push()\n\n if (!seq.length) {\n throw new TypeError(`invalid path:\"${str}\"`)\n }\n return seq\n\n function push () {\n if (name.length) seq.push(name)\n name = ''\n }\n }\n}\n\nfunction toLiquid (obj) {\n if (_.isFunction(obj.to_liquid)) {\n return obj.to_liquid()\n }\n if (_.isFunction(obj.toLiquid)) {\n return obj.toLiquid()\n }\n return obj\n}\n\nfunction readSize (obj) {\n if (!_.isNil(obj.size)) return obj.size\n if (_.isArray(obj) || _.isString(obj)) return obj.length\n return obj.size\n}\n\nfunction matchRightBracket (str, begin) {\n let stack = 1 // count of '[' - count of ']'\n for (let i = begin; i < str.length; i++) {\n if (str[i] === '[') {\n stack++\n }\n if (str[i] === ']') {\n stack--\n if (stack === 0) {\n return i\n }\n }\n }\n return -1\n}\n\nexport function factory (ctx, opts) {\n const defaultOptions = {\n dynamicPartials: true,\n strict_variables: false,\n strict_filters: false,\n blocks: {},\n root: []\n }\n const scope = _.create(Scope)\n scope.opts = _.assign(defaultOptions, opts)\n scope.contexts = [ctx || {}]\n return scope\n}\n","import { last, isArray } from './util/underscore'\n\nfunction domResolve (root, path) {\n const base = document.createElement('base')\n base.href = root\n\n const head = document.getElementsByTagName('head')[0]\n head.insertBefore(base, head.firstChild)\n\n const a = document.createElement('a')\n a.href = path\n const resolved = a.href\n head.removeChild(base)\n\n return resolved\n}\n\nexport function resolve (filepath, root, options) {\n root = root || options.root\n if (isArray(root)) {\n root = root[0]\n }\n if (root.length && last(root) !== '/') {\n root += '/'\n }\n const url = domResolve(root, filepath)\n return url.replace(/^(\\w+:\\/\\/[^/]+)(\\/[^?]+)/, (str, origin, path) => {\n const last = path.split('/').pop()\n if (/\\.\\w+$/.test(last)) {\n return str\n }\n return origin + path + options.extname\n })\n}\n\nexport async function read (url) {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.responseText)\n } else {\n reject(new Error(xhr.statusText))\n }\n }\n xhr.onerror = () => {\n reject(new Error('An error occurred whilst receiving the response.'))\n }\n xhr.open('GET', url)\n xhr.send()\n })\n}\n","import { assign } from './util/underscore.js'\n\nexport default function whiteSpaceCtrl (tokens, options) {\n options = assign({ greedy: true }, options)\n let inRaw = false\n\n tokens.forEach((token, i) => {\n if (shouldTrimLeft(token, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && token.name === 'raw') inRaw = true\n if (token.type === 'tag' && token.name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token, inRaw, options) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trim_left || options.trim_tag_left\n if (token.type === 'value') return token.trim_left || options.trim_value_left\n}\n\nfunction shouldTrimRight (token, inRaw, options) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trim_right || options.trim_tag_right\n if (token.type === 'value') return token.trim_right || options.trim_value_right\n}\n\nfunction trimLeft (token, greedy) {\n if (!token || token.type !== 'html') return\n\n const rLeft = greedy ? /\\s+$/g : /[\\t\\r ]*$/g\n token.value = token.value.replace(rLeft, '')\n}\n\nfunction trimRight (token, greedy) {\n if (!token || token.type !== 'html') return\n\n const rRight = greedy ? /^\\s+/g : /^[\\t\\r ]*\\n?/g\n token.value = token.value.replace(rRight, '')\n}\n","import * as lexical from './lexical.js'\nimport { TokenizationError } from './util/error.js'\nimport * as _ from './util/underscore.js'\nimport assert from './util/assert.js'\nimport whiteSpaceCtrl from './whitespace-ctrl.js'\n\nexport { default as whiteSpaceCtrl } from './whitespace-ctrl.js'\n\nexport function parse (input, file, options) {\n assert(_.isString(input), 'illegal input')\n\n const rLiquid = /({%-?([\\s\\S]*?)-?%})|({{-?([\\s\\S]*?)-?}})/g\n let currIndent = 0\n const lineNumber = LineNumber(input)\n let lastMatchEnd = 0\n const tokens = []\n\n for (let match; (match = rLiquid.exec(input)); lastMatchEnd = rLiquid.lastIndex) {\n if (match.index > lastMatchEnd) {\n tokens.push(parseHTMLToken(lastMatchEnd, match.index))\n }\n tokens.push(match[1]\n ? parseTagToken(match[1], match[2].trim(), match.index)\n : parseValueToken(match[3], match[4].trim(), match.index))\n }\n if (input.length > lastMatchEnd) {\n tokens.push(parseHTMLToken(lastMatchEnd, input.length))\n }\n whiteSpaceCtrl(tokens, options)\n return tokens\n\n function parseTagToken (raw, value, pos) {\n const match = value.match(lexical.tagLine)\n const token = {\n type: 'tag',\n indent: currIndent,\n line: lineNumber.get(pos),\n trim_left: raw.slice(0, 3) === '{%-',\n trim_right: raw.slice(-3) === '-%}',\n raw,\n value,\n input,\n file\n }\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, token)\n }\n token.name = match[1]\n token.args = match[2]\n return token\n }\n\n function parseValueToken (raw, value, pos) {\n return {\n type: 'value',\n line: lineNumber.get(pos),\n trim_left: raw.slice(0, 3) === '{{-',\n trim_right: raw.slice(-3) === '-}}',\n raw,\n value,\n input,\n file\n }\n }\n\n function parseHTMLToken (begin, end) {\n const htmlFragment = input.slice(begin, end)\n currIndent = _.last((htmlFragment).split('\\n')).length\n\n return {\n type: 'html',\n raw: htmlFragment,\n value: htmlFragment\n }\n }\n}\n\nfunction LineNumber (html) {\n let parsedLinesCount = 0\n let lastMatchBegin = -1\n\n return {\n get: function (pos) {\n const lines = html.slice(lastMatchBegin + 1, pos).split('\\n')\n parsedLinesCount += lines.length - 1\n lastMatchBegin = pos\n return parsedLinesCount + 1\n }\n }\n}\n","export default function (isTruthy) {\n return {\n '==': (l, r) => l === r,\n '!=': (l, r) => l !== r,\n '>': (l, r) => l !== null && r !== null && l > r,\n '<': (l, r) => l !== null && r !== null && l < r,\n '>=': (l, r) => l !== null && r !== null && l >= r,\n '<=': (l, r) => l !== null && r !== null && l <= r,\n 'contains': (l, r) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l, r) => isTruthy(l) && isTruthy(r),\n 'or': (l, r) => isTruthy(l) || isTruthy(r)\n }\n}\n","import Operators from './operators.js'\nimport * as lexical from './lexical.js'\nimport assert from './util/assert.js'\n\nconst operators = Operators(isTruthy)\n\nexport function evalExp (exp, scope) {\n assert(scope, 'unable to evalExp: scope undefined')\n const operatorREs = lexical.operators\n let match\n for (let i = 0; i < operatorREs.length; i++) {\n const operatorRE = operatorREs[i]\n const expRE = new RegExp(`^(${lexical.quoteBalanced.source})(${operatorRE.source})(${lexical.quoteBalanced.source})$`)\n if ((match = exp.match(expRE))) {\n const l = evalExp(match[1], scope)\n const op = operators[match[2].trim()]\n const r = evalExp(match[3], scope)\n return op(l, r)\n }\n }\n\n if ((match = exp.match(lexical.rangeLine))) {\n const low = evalValue(match[1], scope)\n const high = evalValue(match[2], scope)\n const range = []\n for (let j = low; j <= high; j++) {\n range.push(j)\n }\n return range\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str, scope) {\n str = str && str.trim()\n if (!str) return undefined\n\n if (lexical.isLiteral(str)) {\n return lexical.parseLiteral(str)\n }\n if (lexical.isVariable(str)) {\n return scope.get(str)\n }\n throw new TypeError(`cannot eval '${str}' as value`)\n}\n\nexport function isTruthy (val) {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val) {\n return val === false || undefined === val || val === null\n}\n","import { evalExp } from './syntax.js'\nimport { RenderBreakError, RenderError } from './util/error.js'\nimport { stringify, create } from './util/underscore.js'\nimport assert from './util/assert.js'\n\nconst render = {\n renderTemplates: async function (templates, scope) {\n assert(scope, 'unable to evalTemplates: scope undefined')\n\n let html = ''\n for (const tpl of templates) {\n try {\n html += await renderTemplate.call(this, tpl)\n } catch (e) {\n if (e instanceof RenderBreakError) {\n e.resolvedHTML = html\n throw e\n }\n throw new RenderError(e, tpl)\n }\n }\n return html\n\n async function renderTemplate (template) {\n if (template.type === 'tag') {\n const partial = await this.renderTag(template, scope)\n return partial === undefined ? '' : partial\n }\n if (template.type === 'value') {\n return this.renderValue(template, scope)\n }\n return template.value\n }\n },\n\n renderTag: async function (template, scope) {\n if (template.name === 'continue') {\n throw new RenderBreakError('continue')\n }\n if (template.name === 'break') {\n throw new RenderBreakError('break')\n }\n return template.render(scope)\n },\n\n renderValue: async function (template, scope) {\n const partial = this.evalValue(template, scope)\n return partial === undefined ? '' : stringify(partial)\n },\n\n evalValue: function (template, scope) {\n assert(scope, 'unable to evalValue: scope undefined')\n return template.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(template.initial, scope))\n }\n}\n\nexport default function () {\n const instance = create(render)\n return instance\n}\n","import { hashCapture } from './lexical.js'\nimport { create } from './util/underscore.js'\nimport { evalValue } from './syntax.js'\nimport assert from './util/assert.js'\n\nfunction hash (markup, scope) {\n const obj = {}\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n obj[k] = evalValue(v, scope)\n }\n return obj\n}\n\nexport default function () {\n let tagImpls = {}\n\n const _tagInstance = {\n render: async function (scope) {\n const obj = hash(this.token.args, scope)\n const impl = this.tagImpl\n if (typeof impl.render !== 'function') {\n return ''\n }\n return impl.render(scope, obj)\n },\n parse: function (token, tokens) {\n this.type = 'tag'\n this.token = token\n this.name = token.name\n\n const tagImpl = tagImpls[this.name]\n assert(tagImpl, `tag ${this.name} not found`)\n this.tagImpl = create(tagImpl)\n if (this.tagImpl.parse) {\n this.tagImpl.parse(token, tokens)\n }\n }\n }\n\n function register (name, tag) {\n tagImpls[name] = tag\n }\n\n function construct (token, tokens) {\n const instance = create(_tagInstance)\n instance.parse(token, tokens)\n return instance\n }\n\n function clear () {\n tagImpls = {}\n }\n\n return {\n construct,\n register,\n clear\n }\n}\n","import * as lexical from './lexical.js'\nimport { evalValue } from './syntax.js'\nimport assert from './util/assert.js'\nimport { assign, create } from './util/underscore.js'\n\nconst valueRE = new RegExp(`${lexical.value.source}`, 'g')\n\nexport default function (options) {\n options = assign({}, options)\n let filters = {}\n\n const _filterInstance = {\n render: function (output, scope) {\n const args = this.args.map(arg => evalValue(arg, scope))\n args.unshift(output)\n return this.filter.apply(null, args)\n },\n parse: function (str) {\n let match = lexical.filterLine.exec(str)\n assert(match, 'illegal filter: ' + str)\n\n const name = match[1]\n const argList = match[2] || ''\n const filter = filters[name]\n if (typeof filter !== 'function') {\n if (options.strict_filters) {\n throw new TypeError(`undefined filter: ${name}`)\n }\n this.name = name\n this.filter = x => x\n this.args = []\n return this\n }\n\n const args = []\n while ((match = valueRE.exec(argList.trim()))) {\n const v = match[0]\n const re = new RegExp(`${v}\\\\s*:`, 'g')\n const keyMatch = re.exec(match.input)\n const currentMatchIsKey = keyMatch && keyMatch.index === match.index\n currentMatchIsKey ? args.push(`'${v}'`) : args.push(v)\n }\n\n this.name = name\n this.filter = filter\n this.args = args\n\n return this\n }\n }\n\n function construct (str) {\n const instance = create(_filterInstance)\n return instance.parse(str)\n }\n\n function register (name, filter) {\n filters[name] = filter\n }\n\n function clear () {\n filters = {}\n }\n\n return {\n construct, register, clear\n }\n}\n","import * as lexical from './lexical.js'\nimport { create } from './util/underscore.js'\nimport { ParseError } from './util/error.js'\nimport assert from './util/assert.js'\n\nexport default function (Tag, Filter) {\n const stream = {\n init: function (tokens) {\n this.tokens = tokens\n this.handlers = {}\n return this\n },\n on: function (name, cb) {\n this.handlers[name] = cb\n return this\n },\n trigger: function (event, arg) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n },\n start: function () {\n this.trigger('start')\n let token\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' &&\n this.trigger(`tag:${token.name}`, token)) {\n continue\n }\n const template = parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n },\n stop: function () {\n this.stopRequested = true\n return this\n }\n }\n\n function parse (tokens) {\n let token\n const templates = []\n while ((token = tokens.shift())) {\n templates.push(parseToken(token, tokens))\n }\n return templates\n }\n\n function parseToken (token, tokens) {\n try {\n let tpl = null\n if (token.type === 'tag') {\n tpl = parseTag(token, tokens)\n } else if (token.type === 'value') {\n tpl = parseValue(token.value)\n } else { // token.type === 'html'\n tpl = token\n }\n tpl.token = token\n return tpl\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n\n function parseTag (token, tokens) {\n if (token.name === 'continue' || token.name === 'break') return token\n return Tag.construct(token, tokens)\n }\n\n function parseValue (str) {\n let match = lexical.matchValue(str)\n assert(match, `illegal value string: ${str}`)\n\n const initial = match[0]\n str = str.substr(match.index + match[0].length)\n\n const filters = []\n while ((match = lexical.filter.exec(str))) {\n filters.push([match[0].trim()])\n }\n\n return {\n type: 'value',\n initial: initial,\n filters: filters.map(str => Filter.construct(str))\n }\n }\n\n function parseStream (tokens) {\n const s = create(stream)\n return s.init(tokens)\n }\n\n return {\n parse,\n parseTag,\n parseStream,\n parseValue\n }\n}\n","/*\n * Call functions in serial until someone resolved.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function anySeries (iterable, iteratee) {\n let ret = Promise.reject(new Error('init'))\n iterable.forEach(function (item, idx) {\n ret = ret.catch(e => iteratee(item, idx, iterable))\n })\n return ret\n}\n\n/*\n * Call functions in serial until someone rejected.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function mapSeries (iterable, iteratee) {\n let ret = Promise.resolve('init')\n const result = []\n iterable.forEach(function (item, idx) {\n ret = ret\n .then(() => iteratee(item, idx, iterable))\n .then(x => result.push(x))\n })\n return ret.then(() => result)\n}\n","import { mapSeries } from '../util/promise.js'\nimport { isString, isObject, isArray } from '../util/underscore.js'\nimport assert from '../util/assert.js'\nimport { identifier, value, hash } from '../lexical.js'\n\nexport default function (liquid, Liquid) {\n const RenderBreakError = Liquid.Types.RenderBreakError\n const re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\n liquid.registerTag('for', { parse, render })\n\n function parse (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n this.variable = match[1]\n this.collection = match[2]\n this.reversed = !!match[3]\n\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endfor', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n }\n async function render (scope, hash) {\n let collection = Liquid.evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]])\n }\n }\n if (!isArray(collection) || !collection.length) {\n return liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n if (this.reversed) collection.reverse()\n\n const contexts = collection.map((item, i) => {\n const ctx = {}\n ctx[this.variable] = item\n ctx.forloop = {\n first: i === 0,\n index: i + 1,\n index0: i,\n last: i === collection.length - 1,\n length: collection.length,\n rindex: collection.length - i,\n rindex0: collection.length - i - 1\n }\n return ctx\n })\n\n let html = ''\n let finished = false\n await mapSeries(contexts, async context => {\n if (finished) return\n\n scope.push(context)\n try {\n html += await liquid.renderer.renderTemplates(this.templates, scope)\n } catch (e) {\n if (e instanceof RenderBreakError) {\n html += e.resolvedHTML\n if (e.message === 'break') {\n finished = true\n }\n } else throw e\n }\n scope.pop(context)\n })\n return html\n }\n}\n","import assert from '../util/assert.js'\nimport { identifier } from '../lexical.js'\nimport { create } from '../util/underscore.js'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n const { AssignScope } = Liquid.Types\n\n liquid.registerTag('assign', {\n parse: function (token) {\n const match = token.args.match(re)\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (scope) {\n const ctx = create(AssignScope)\n ctx[this.key] = liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n })\n}\n","import assert from '../util/assert.js'\nimport { create } from '../util/underscore.js'\nimport { identifier } from '../lexical.js'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`(${identifier.source})`)\n const { CaptureScope } = Liquid.Types\n\n liquid.registerTag('capture', {\n parse: function (tagToken, remainTokens) {\n const match = tagToken.args.match(re)\n assert(match, `${tagToken.args} not valid identifier`)\n\n this.variable = match[1]\n this.templates = []\n\n const stream = liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', token => stream.stop())\n .on('template', tpl => this.templates.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope, hash) {\n const html = await liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = create(CaptureScope)\n ctx[this.variable] = html\n scope.push(ctx)\n }\n })\n}\n","export default function (liquid, Liquid) {\n liquid.registerTag('case', {\n\n parse: function (tagToken, remainTokens) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p = []\n const stream = liquid.parser.parseStream(remainTokens)\n .on('tag:when', token => {\n this.cases.push({\n val: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endcase', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = Liquid.evalExp(branch.val, scope)\n const cond = Liquid.evalExp(this.cond, scope)\n if (val === cond) {\n return liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","export default function (liquid) {\n liquid.registerTag('comment', {\n parse: function (tagToken, remainTokens) {\n const stream = liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n })\n}\n","import assert from '../util/assert.js'\nimport { value, quotedLine } from '../lexical.js'\n\nconst staticFileRE = /[^\\s,]+/\n\nexport default function (liquid, Liquid) {\n const withRE = new RegExp(`with\\\\s+(${value.source})`)\n\n liquid.registerTag('include', {\n parse: function (token) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticValue = match[0]\n }\n\n match = value.exec(token.args)\n if (match) {\n this.value = match[0]\n }\n\n match = withRE.exec(token.args)\n if (match) {\n this.with = match[1]\n }\n },\n render: async function (scope, hash) {\n let filepath\n if (scope.opts.dynamicPartials) {\n if (quotedLine.exec(this.value)) {\n const template = this.value.slice(1, -1)\n filepath = await liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = Liquid.evalValue(this.value, scope)\n }\n } else {\n filepath = this.staticValue\n }\n assert(filepath, `cannot include with empty filename`)\n\n const originBlocks = scope.opts.blocks\n const originBlockMode = scope.opts.blockMode\n\n scope.opts.blocks = {}\n scope.opts.blockMode = 'output'\n if (this.with) {\n hash[filepath] = Liquid.evalValue(this.with, scope)\n }\n const templates = await liquid.getTemplate(filepath, scope.opts.root)\n scope.push(hash)\n const html = await liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.opts.blocks = originBlocks\n scope.opts.blockMode = originBlockMode\n return html\n }\n })\n}\n","import { create } from '../util/underscore.js'\nimport assert from '../util/assert.js'\nimport { identifier } from '../lexical.js'\n\nexport default function (liquid, Liquid) {\n const { CaptureScope, AssignScope, DecrementScope } = Liquid.Types\n\n liquid.registerTag('decrement', {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope, hash) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n const proto = Object.getPrototypeOf(ctx)\n return proto !== CaptureScope && proto !== AssignScope\n }\n )\n if (!context) {\n context = create(DecrementScope)\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n return --context[this.variable]\n }\n })\n}\n","import assert from '../util/assert.js'\nimport { value as rValue } from '../lexical.js'\n\nexport default function (liquid, Liquid) {\n const groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\n const candidatesRE = new RegExp(rValue.source, 'g')\n\n liquid.registerTag('cycle', {\n\n parse: function (tagToken, remainTokens) {\n let match = groupRE.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.group = match[1] || ''\n const candidates = match[2]\n\n this.candidates = []\n\n while ((match = candidatesRE.exec(candidates))) {\n this.candidates.push(match[0])\n }\n assert(this.candidates.length, `empty candidates: ${tagToken.raw}`)\n },\n\n render: function (scope, hash) {\n const group = Liquid.evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n\n const groups = scope.opts.groups = scope.opts.groups || {}\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n\n return Liquid.evalValue(candidate, scope)\n }\n })\n}\n","export default function (liquid, Liquid) {\n liquid.registerTag('if', {\n\n parse: function (tagToken, remainTokens) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', token => {\n this.branches.push({\n cond: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endif', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n for (const branch of this.branches) {\n const cond = Liquid.evalExp(branch.cond, scope)\n if (Liquid.isTruthy(cond)) {\n return liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","import assert from '../util/assert.js'\nimport { create } from '../util/underscore.js'\nimport { identifier } from '../lexical.js'\n\nexport default function (liquid, Liquid) {\n const { CaptureScope, AssignScope, IncrementScope } = Liquid.Types\n\n liquid.registerTag('increment', {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope, hash) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n const proto = Object.getPrototypeOf(ctx)\n return proto !== CaptureScope && proto !== AssignScope\n }\n )\n if (!context) {\n context = create(IncrementScope)\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n const val = context[this.variable]\n context[this.variable]++\n return val\n }\n })\n}\n","import assert from '../util/assert.js'\nimport { value as rValue } from '../lexical.js'\n\n/*\n * blockMode:\n * * \"store\": store rendered html into blocks\n * * \"output\": output rendered html\n */\n\nexport default function (liquid, Liquid) {\n const staticFileRE = /\\S+/\n\n liquid.registerTag('layout', {\n parse: function (token, remainTokens) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticLayout = match[0]\n }\n\n match = rValue.exec(token.args)\n if (match) {\n this.layout = match[0]\n }\n\n this.tpls = liquid.parser.parse(remainTokens)\n },\n render: async function (scope, hash) {\n const layout = scope.opts.dynamicPartials\n ? Liquid.evalValue(this.layout, scope)\n : this.staticLayout\n assert(layout, `cannot apply layout with empty filename`)\n\n // render the remaining tokens immediately\n scope.opts.blockMode = 'store'\n const html = await liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.opts.blocks[''] === undefined) {\n scope.opts.blocks[''] = html\n }\n const templates = await liquid.getTemplate(layout, scope.opts.root)\n scope.push(hash)\n scope.opts.blockMode = 'output'\n const partial = await liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n })\n\n liquid.registerTag('block', {\n parse: function (token, remainTokens) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n\n this.tpls = []\n const stream = liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', tpl => this.tpls.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${token.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope) {\n const childDefined = scope.opts.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.opts.blockMode === 'store') {\n scope.opts.blocks[this.block] = html\n return ''\n }\n return html\n }\n })\n}\n","export default function (liquid) {\n liquid.registerTag('raw', {\n parse: function (tagToken, remainTokens) {\n this.tokens = []\n\n const stream = liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\n if (token.name === 'endraw') stream.stop()\n else this.tokens.push(token)\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: function (scope, hash) {\n return this.tokens.map(token => token.raw).join('')\n }\n })\n}\n","import { mapSeries } from '../util/promise.js'\nimport assert from '../util/assert.js'\nimport { identifier, value, hash } from '../lexical.js'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\n liquid.registerTag('tablerow', {\n\n parse: function (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.variable = match[1]\n this.collection = match[2]\n this.templates = []\n\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: async function (scope, hash) {\n let collection = Liquid.evalExp(this.collection, scope) || []\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = hash.cols || collection.length\n const contexts = collection.map((item, i) => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row\n let html = ''\n await mapSeries(contexts, async (context, idx) => {\n row = Math.floor(idx / cols) + 1\n const col = (idx % cols) + 1\n if (col === 1) {\n if (row !== 1) {\n html += ''\n }\n html += ``\n }\n\n html += ``\n scope.push(context)\n html += await liquid.renderer.renderTemplates(this.templates, scope)\n html += ''\n scope.pop(context)\n return html\n })\n if (row > 0) {\n html += ''\n }\n return html\n }\n })\n}\n","export default function (liquid, Liquid) {\n liquid.registerTag('unless', {\n parse: function (tagToken, remainTokens) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', x => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n const cond = Liquid.evalExp(this.cond, scope)\n return Liquid.isFalsy(cond)\n ? liquid.renderer.renderTemplates(this.templates, scope)\n : liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","import For from './for.js'\nimport Assign from './assign.js'\nimport Capture from './capture.js'\nimport Case from './case.js'\nimport Comment from './comment.js'\nimport Include from './include.js'\nimport Decrement from './decrement.js'\nimport Cycle from './cycle.js'\nimport If from './if.js'\nimport Increment from './increment.js'\nimport Layout from './layout.js'\nimport Raw from './raw.js'\nimport Tablerow from './tablerow.js'\nimport Unless from './unless.js'\n\nexport default function (engine, Liquid) {\n Assign(engine, Liquid)\n Capture(engine, Liquid)\n Case(engine, Liquid)\n Comment(engine, Liquid)\n Cycle(engine, Liquid)\n Decrement(engine, Liquid)\n For(engine, Liquid)\n If(engine, Liquid)\n Include(engine, Liquid)\n Increment(engine, Liquid)\n Layout(engine, Liquid)\n Raw(engine, Liquid)\n Tablerow(engine, Liquid)\n Unless(engine, Liquid)\n}\n","const monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst monthNamesShort = monthNames.map(abbr)\nconst dayNamesShort = dayNames.map(abbr)\nconst suffixes = {\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n 'default': 'th'\n}\n\nfunction abbr (str) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d) {\n const feb = _date.isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n },\n\n getDayOfYear: function (d) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += _date.daysInMonth(d)[i]\n }\n return num + d.getDate()\n },\n\n // Startday is an integer of which day to start the week measuring from\n // TODO: that comment was retarted. fix it.\n getWeekOfYear: function (d, startDay) {\n // Skip to startDay of this week\n const now = this.getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return _number.pad(Math.floor((now - then) / 7) + 1, 2)\n },\n\n isLeapYear: function (d) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d) {\n const str = d.getDate().toString()\n const index = parseInt(str.slice(-1))\n return suffixes[index] || suffixes['default']\n },\n\n century: function (d) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst _number = {\n pad: function (value, size, ch) {\n if (!ch) ch = '0'\n let result = value.toString()\n let pad = size - result.length\n\n while (pad-- > 0) {\n result = ch + result\n }\n\n return result\n }\n}\n\nconst formatCodes = {\n a: function (d) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d) {\n return dayNames[d.getDay()]\n },\n b: function (d) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d) {\n return monthNames[d.getMonth()]\n },\n c: function (d) {\n return d.toLocaleString()\n },\n C: function (d) {\n return _date.century(d)\n },\n d: function (d) {\n return _number.pad(d.getDate(), 2)\n },\n e: function (d) {\n return _number.pad(d.getDate(), 2, ' ')\n },\n H: function (d) {\n return _number.pad(d.getHours(), 2)\n },\n I: function (d) {\n return _number.pad(d.getHours() % 12 || 12, 2)\n },\n j: function (d) {\n return _number.pad(_date.getDayOfYear(d), 3)\n },\n k: function (d) {\n return _number.pad(d.getHours(), 2, ' ')\n },\n l: function (d) {\n return _number.pad(d.getHours() % 12 || 12, 2, ' ')\n },\n L: function (d) {\n return _number.pad(d.getMilliseconds(), 3)\n },\n m: function (d) {\n return _number.pad(d.getMonth() + 1, 2)\n },\n M: function (d) {\n return _number.pad(d.getMinutes(), 2)\n },\n p: function (d) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d) {\n return _date.getSuffix(d)\n },\n s: function (d) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d) {\n return _number.pad(d.getSeconds(), 2)\n },\n u: function (d) {\n return d.getDay() || 7\n },\n U: function (d) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d) {\n return d.getDay()\n },\n W: function (d) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d) {\n return d.toLocaleDateString()\n },\n X: function (d) {\n return d.toLocaleTimeString()\n },\n y: function (d) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d) {\n return d.getFullYear()\n },\n z: function (d) {\n const tz = d.getTimezoneOffset() / 60 * 100\n return (tz > 0 ? '-' : '+') + _number.pad(Math.abs(tz), 4)\n },\n '%': function () {\n return '%'\n }\n}\nformatCodes.h = formatCodes.b\nformatCodes.N = formatCodes.L\n\nexport default function (d, format) {\n let output = ''\n let remaining = format\n\n while (true) {\n const r = /%./g\n const results = r.exec(remaining)\n\n // No more format codes. Add the remaining text and return\n if (!results) {\n return output + remaining\n }\n\n // Add the preceding text\n output += remaining.slice(0, r.lastIndex - 2)\n remaining = remaining.slice(r.lastIndex)\n\n // Add the format code\n const ch = results[0].charAt(1)\n const func = formatCodes[ch]\n output += func ? func.call(this, d) : '%' + ch\n }\n}\n","import strftime from './util/strftime.js'\nimport * as _ from './util/underscore.js'\nimport { isTruthy } from './syntax.js'\n\nconst escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nconst filters = {\n 'abs': v => Math.abs(v),\n 'append': (v, arg) => v + arg,\n 'capitalize': str => stringify(str).charAt(0).toUpperCase() + str.slice(1),\n 'ceil': v => Math.ceil(v),\n 'concat': (v, arg) => Array.prototype.concat.call(v, arg),\n 'date': (v, arg) => {\n let date = v\n if (v === 'now') {\n date = new Date()\n } else if (_.isString(v)) {\n date = new Date(v)\n }\n return isValidDate(date) ? strftime(date, arg) : v\n },\n 'default': (v, arg) => isTruthy(v) ? v : arg,\n 'divided_by': (v, arg) => v / arg,\n 'downcase': v => v.toLowerCase(),\n 'escape': escape,\n\n 'escape_once': str => escape(unescape(str)),\n 'first': v => v[0],\n 'floor': v => Math.floor(v),\n 'join': (v, arg) => v.join(arg === undefined ? ' ' : arg),\n 'last': v => _.last(v),\n 'lstrip': v => stringify(v).replace(/^\\s+/, ''),\n 'map': (arr, arg) => arr.map(v => v[arg]),\n 'minus': bindFixed((v, arg) => v - arg),\n 'modulo': bindFixed((v, arg) => v % arg),\n 'newline_to_br': v => v.replace(/\\n/g, '
'),\n 'plus': bindFixed((v, arg) => Number(v) + Number(arg)),\n 'prepend': (v, arg) => arg + v,\n 'remove': (v, arg) => v.split(arg).join(''),\n 'remove_first': (v, l) => v.replace(l, ''),\n 'replace': (v, pattern, replacement) =>\n stringify(v).split(pattern).join(replacement),\n 'replace_first': (v, arg1, arg2) => stringify(v).replace(arg1, arg2),\n 'reverse': v => v.reverse(),\n 'round': (v, arg) => {\n const amp = Math.pow(10, arg || 0)\n return Math.round(v * amp, arg) / amp\n },\n 'rstrip': str => stringify(str).replace(/\\s+$/, ''),\n 'size': v => v.length,\n 'slice': (v, begin, length) => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'sort': (v, arg) => v.sort(arg),\n 'split': (v, arg) => stringify(v).split(arg),\n 'strip': (v) => stringify(v).trim(),\n 'strip_html': v => stringify(v).replace(/|||<.*?>/g, ''),\n 'strip_newlines': v => stringify(v).replace(/\\n/g, ''),\n 'times': (v, arg) => v * arg,\n 'truncate': (v, l, o) => {\n v = stringify(v)\n o = (o === undefined) ? '...' : o\n l = l || 16\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v, l, o) => {\n if (o === undefined) o = '...'\n const arr = v.split(' ')\n let ret = arr.slice(0, l).join(' ')\n if (arr.length > l) ret += o\n return ret\n },\n 'uniq': function (arr) {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(val)) {\n return false\n }\n u[val] = true\n return true\n })\n },\n 'upcase': str => stringify(str).toUpperCase(),\n 'url_decode': x => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': x => x.split(' ').map(encodeURIComponent).join('+')\n}\n\nfunction escape (str) {\n return stringify(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str) {\n return stringify(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nfunction getFixed (v) {\n const p = (v + '').split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction getMaxFixed (l, r) {\n return Math.max(getFixed(l), getFixed(r))\n}\n\nfunction stringify (obj) {\n return obj + ''\n}\n\nfunction bindFixed (cb) {\n return (l, r) => {\n const f = getMaxFixed(l, r)\n return cb(l, r).toFixed(f)\n }\n}\n\nfunction isValidDate (date) {\n return date instanceof Date && !isNaN(date.getTime())\n}\n\nexport default function registerAll (liquid) {\n return _.forOwn(filters, (func, name) => liquid.registerFilter(name, func))\n}\n\nregisterAll.filters = filters\n","import 'regenerator-runtime/runtime'\nimport * as Scope from './scope'\nimport * as template from './template'\nimport * as _ from './util/underscore.js'\nimport assert from './util/assert.js'\nimport * as tokenizer from './tokenizer.js'\nimport Render from './render.js'\nimport Tag from './tag.js'\nimport Filter from './filter.js'\nimport Parser from './parser'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './syntax.js'\nimport { ParseError, TokenizationError, RenderBreakError, AssertionError } from './util/error.js'\nimport tags from './tags/index.js'\nimport filters from './filters.js'\n\nconst _engine = {\n init: function (tag, filter, options) {\n if (options.cache) {\n this.cache = {}\n }\n this.options = options\n this.tag = tag\n this.filter = filter\n this.parser = Parser(tag, filter)\n this.renderer = Render()\n\n tags(this, Liquid)\n filters(this, Liquid)\n\n return this\n },\n parse: function (html, filepath) {\n const tokens = tokenizer.parse(html, filepath, this.options)\n return this.parser.parse(tokens)\n },\n render: function (tpl, ctx, opts) {\n opts = _.assign({}, this.options, opts)\n const scope = Scope.factory(ctx, opts)\n return this.renderer.renderTemplates(tpl, scope)\n },\n parseAndRender: async function (html, ctx, opts) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n },\n getTemplate: async function (file, root) {\n const filepath = await template.resolve(file, root, this.options)\n return this.respectCache(filepath, async () => {\n const str = await template.read(filepath)\n return this.parse(str, filepath)\n })\n },\n renderFile: async function (file, ctx, opts) {\n opts = _.assign({}, opts)\n const templates = await this.getTemplate(file, opts.root)\n return this.render(templates, ctx, opts)\n },\n respectCache: async function (key, getter) {\n const cacheEnabled = this.options.cache\n if (cacheEnabled && this.cache[key]) {\n return this.cache[key]\n }\n const value = await getter()\n if (cacheEnabled) {\n this.cache[key] = value\n }\n return value\n },\n evalValue: function (str, scope) {\n const tpl = this.parser.parseValue(str.trim())\n return this.renderer.evalValue(tpl, scope)\n },\n registerFilter: function (name, filter) {\n return this.filter.register(name, filter)\n },\n registerTag: function (name, tag) {\n return this.tag.register(name, tag)\n },\n plugin: function (plugin) {\n return plugin.call(this, Liquid)\n },\n express: function (opts) {\n opts = opts || {}\n const self = this\n return function (filePath, ctx, cb) {\n assert(_.isArray(this.root) || _.isString(this.root),\n 'illegal views root, are you using express.js?')\n opts.root = this.root\n self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb)\n }\n }\n}\n\nfunction normalizeStringArray (value) {\n if (_.isArray(value)) return value\n if (_.isString(value)) return [value]\n throw new TypeError('illegal root: ' + value)\n}\n\nexport default function Liquid (options) {\n options = _.assign({\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_value_right: false,\n trim_value_left: false,\n greedy: true,\n strict_filters: false,\n strict_variables: false\n }, options)\n options.root = normalizeStringArray(options.root)\n\n const engine = _.create(_engine)\n engine.init(Tag(), Filter(options), options)\n return engine\n}\n\nLiquid.default = Liquid\nLiquid.isTruthy = isTruthy\nLiquid.isFalsy = isFalsy\nLiquid.evalExp = evalExp\nLiquid.evalValue = evalValue\nLiquid.Types = {\n ParseError,\n TokenizationError,\n RenderBreakError,\n AssertionError,\n AssignScope: {},\n CaptureScope: {},\n IncrementScope: {},\n DecrementScope: {}\n}\n"],"names":["global","Op","Object","prototype","hasOwn","hasOwnProperty","undefined","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","inModule","module","runtime","regeneratorRuntime","exports","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","_invoke","makeInvokeMethod","tryCatch","fn","obj","arg","type","call","err","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","constructor","displayName","defineIteratorMethods","forEach","method","isGeneratorFunction","genFun","ctor","name","mark","setPrototypeOf","__proto__","awrap","__await","AsyncIterator","invoke","resolve","reject","record","result","value","Promise","then","unwrapped","error","previousPromise","enqueue","callInvokeWithMethodAndArg","async","iter","next","done","state","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","TypeError","info","resultName","nextLoc","toString","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","keys","object","key","reverse","length","pop","iterable","iteratorMethod","isNaN","i","skipTempReset","prev","charAt","slice","stop","rootEntry","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","Function","toStr","arrToStr","Array","isString","isFunction","stringify","isNil","String","to_liquid","toLiquid","to_s","indexOf","defaultToString","cache","JSON","isObject","proto","isArray","forOwn","iteratee","k","assign","srcs","arguments","src","last","arr","range","start","step","singleQuoted","doubleQuoted","quoted","RegExp","source","quoteBalanced","integer","number","bool","identifier","subscript","literal","variable","rangeLimit","rangeCapture","hash","hashCapture","tagLine","literalLine","variableLine","numberLine","boolLine","quotedLine","rangeLine","integerLine","valueDeclaration","valueList","filter","filterCapture","filterLine","operators","isInteger","str","test","isLiteral","isVariable","matchValue","exec","parseLiteral","res","match","Number","toLowerCase","initError","captureStackTrace","initLiquidError","token","input","line","file","mkContext","message","mkMessage","stack","TokenizationError","_","ParseError","e","originalError","RenderError","tpl","RenderBreakError","AssertionError","lines","split","begin","Math","max","end","min","map","l","align","join","n","blank","msg","predicate","Scope","getAll","contexts","reduce","ctx","val","get","path","paths","propertyAccessSeq","scope","findContextFor","readProperty","set","v","some","unshift","findIndex","splice","candidate","readSize","liquid_method_missing","opts","strict_variables","seq","j","delemiter","assert","matchRightBracket","lexical","size","factory","defaultOptions","dynamicPartials","strict_filters","blocks","root","domResolve","base","document","createElement","href","head","getElementsByTagName","insertBefore","firstChild","a","resolved","removeChild","filepath","options","url","replace","origin","extname","xhr","XMLHttpRequest","onload","status","responseText","statusText","onerror","open","send","read","whiteSpaceCtrl","tokens","greedy","inRaw","shouldTrimLeft","trimLeft","shouldTrimRight","trimRight","trim_left","trim_tag_left","trim_value_left","trim_right","trim_tag_right","trim_value_right","rLeft","rRight","parse","rLiquid","currIndent","lineNumber","LineNumber","lastMatchEnd","lastIndex","index","parseHTMLToken","parseTagToken","trim","parseValueToken","raw","pos","indent","args","htmlFragment","html","parsedLinesCount","lastMatchBegin","isTruthy","r","Operators","evalExp","exp","operatorREs","operatorRE","expRE","op","low","evalValue","high","isFalsy","render","renderTemplates","templates","template","renderTag","partial","renderValue","renderTemplate","resolvedHTML","filters","initial","instance","markup","tagImpls","_tagInstance","impl","tagImpl","register","tag","construct","clear","valueRE","_filterInstance","output","apply","argList","x","re","keyMatch","currentMatchIsKey","Tag","Filter","stream","init","handlers","on","cb","trigger","event","h","stopRequested","shift","parseToken","parseTag","parseValue","substr","parseStream","s","mapSeries","ret","item","idx","liquid","Liquid","collection","renderer","elseTemplates","offset","limit","reversed","forloop","first","index0","rindex","rindex0","finished","Types","registerTag","tagToken","remainTokens","p","parser","AssignScope","CaptureScope","cond","cases","branch","staticFileRE","withRE","staticValue","with","parseAndRender","originBlocks","originBlockMode","blockMode","getTemplate","DecrementScope","groupRE","rValue","candidatesRE","group","candidates","fingerprint","groups","branches","IncrementScope","staticLayout","layout","tpls","block","childDefined","cols","row","floor","col","engine","Assign","Capture","Case","Comment","Cycle","Decrement","For","If","Include","Increment","Layout","Raw","Tablerow","Unless","monthNames","dayNames","monthNamesShort","abbr","dayNamesShort","suffixes","_date","daysInMonth","d","feb","isLeapYear","getDayOfYear","num","getMonth","getDate","getWeekOfYear","startDay","now","getDay","jan1","Date","getFullYear","_number","pad","year","getSuffix","parseInt","century","substring","ch","formatCodes","A","b","B","c","toLocaleString","C","H","getHours","I","L","getMilliseconds","m","M","getMinutes","P","q","round","valueOf","S","getSeconds","u","U","w","W","toLocaleDateString","X","toLocaleTimeString","y","Y","z","tz","getTimezoneOffset","abs","N","format","remaining","results","func","escapeMap","unescapeMap","toUpperCase","ceil","concat","date","isValidDate","strftime","escape","unescape","bindFixed","pattern","replacement","arg1","arg2","amp","pow","sort","o","decodeURIComponent","encodeURIComponent","getFixed","getMaxFixed","f","toFixed","getTime","registerAll","registerFilter","_engine","Parser","Render","tags","tokenizer","respectCache","renderFile","getter","cacheEnabled","plugin","express","filePath","normalizeStringArray","default"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"liquid.js","sources":["../src/util/underscore.ts","../src/lexical.js","../src/util/error.ts","../src/util/assert.ts","../src/scope.ts","../src/template-browser.js","../src/whitespace-ctrl.js","../src/tokenizer.js","../src/operators.js","../src/syntax.js","../src/render.js","../src/tag.js","../src/filter.js","../src/parser.ts","../src/util/promise.js","../src/tags/for.js","../src/tags/assign.js","../src/tags/capture.js","../src/tags/case.js","../src/tags/comment.js","../src/tags/include.js","../src/tags/decrement.js","../src/tags/cycle.js","../src/tags/if.js","../src/tags/increment.js","../src/tags/layout.js","../src/tags/raw.js","../src/tags/tablerow.js","../src/tags/unless.js","../src/tags/index.js","../src/util/strftime.js","../src/filters.js","../src/index.ts"],"sourcesContent":["const toStr = Object.prototype.toString\nconst arrToStr = Array.prototype.toString\n\n/*\n * Checks if value is classified as a String primitive or object.\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is a string, else false.\n */\nexport function isString (value) {\n return toStr.call(value) === '[object String]'\n}\n\nexport function isFunction (value) {\n return typeof value === 'function'\n}\n\nexport function promisify (fn) {\n return function (...args) {\n return new Promise((resolve, reject) => {\n fn(...args, (err, result) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value) {\n if (isNil(value)) return String(value)\n if (isFunction(value.to_liquid)) return stringify(value.to_liquid())\n if (isFunction(value.toLiquid)) return stringify(value.toLiquid())\n if (isFunction(value.to_s)) return value.to_s()\n if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value)\n if (isFunction(value.toString)) return value.toString()\n return toStr.call(value)\n}\n\nfunction defaultToString (value) {\n const cache = []\n return JSON.stringify(value, (key, value) => {\n if (isObject(value)) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n}\n\nexport function create (proto) {\n return Object.create(proto)\n}\n\nexport function isNil (value) {\n return value === null || value === undefined\n}\n\nexport function isArray (value) {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value) {\n const signature = toStr.call(value)\n // [object XXXError]\n return signature.substr(-6, 5) === 'Error' ||\n (typeof value.message === 'string' && typeof value.name === 'string')\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (object, iteratee) {\n object = object || {}\n for (const k in object) {\n if (object.hasOwnProperty(k)) {\n if (iteratee(object[k], k, object) === false) break\n }\n }\n return object\n}\n\n/*\n * Assigns own enumerable string keyed properties of source objects to the destination object.\n * Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * Note: This method mutates object and is loosely based on Object.assign.\n *\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @return {Object} Returns object.\n */\nexport function assign (obj, ...srcs) {\n obj = isObject(obj) ? obj : {}\n srcs.forEach(src => binaryAssign(obj, src))\n return obj\n}\n\nfunction binaryAssign(target, src) {\n for(let key in src) if (src.hasOwnProperty(key)) target[key] = src[key]\n}\n\nexport function last (arr) {\n return arr[arr.length - 1]\n}\n\nexport function uniq (arr) {\n const u = {}\n const a = []\n for (let i = 0, l = arr.length; i < l; ++i) {\n if (u.hasOwnProperty(arr[i])) {\n continue\n }\n a.push(arr[i])\n u[arr[i]] = 1\n }\n return a\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value) {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\n/*\n * A function to create flexibly-numbered lists of integers,\n * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.\n * Returns a list of integers from start (inclusive) to stop (exclusive),\n * incremented (or decremented) by step, exclusive.\n * Note that ranges that stop before they start are considered to be zero-length instead of\n * negative — if you'd like a negative range, use a negative step.\n */\nexport function range (start: number, stop: number, step?: number) {\n if (arguments.length === 1) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n","// quote related\nconst singleQuoted = /'[^']*'/\nconst doubleQuoted = /\"[^\"]*\"/\nexport const quoted = new RegExp(`${singleQuoted.source}|${doubleQuoted.source}`)\nexport const quoteBalanced = new RegExp(`(?:${quoted.source}|[^'\"])*`)\n\n// basic types\nexport const integer = /-?\\d+/\nexport const number = /-?\\d+\\.?\\d*|\\.?\\d+/\nexport const bool = /true|false/\n\n// property access\nexport const identifier = /[\\w-]+[?]?/\nexport const subscript = new RegExp(`\\\\[(?:${quoted.source}|[\\\\w-\\\\.]+)\\\\]`)\nexport const literal = new RegExp(`(?:${quoted.source}|${bool.source}|${number.source})`)\nexport const variable = new RegExp(`${identifier.source}(?:\\\\.${identifier.source}|${subscript.source})*`)\n\n// range related\nexport const rangeLimit = new RegExp(`(?:${variable.source}|${number.source})`)\nexport const range = new RegExp(`\\\\(${rangeLimit.source}\\\\.\\\\.${rangeLimit.source}\\\\)`)\nexport const rangeCapture = new RegExp(`\\\\((${rangeLimit.source})\\\\.\\\\.(${rangeLimit.source})\\\\)`)\n\nexport const value = new RegExp(`(?:${variable.source}|${literal.source}|${range.source})`)\n\n// hash related\nexport const hash = new RegExp(`(?:${identifier.source})\\\\s*:\\\\s*(?:${value.source})`)\nexport const hashCapture = new RegExp(`(${identifier.source})\\\\s*:\\\\s*(${value.source})`, 'g')\n\n// full match\nexport const tagLine = new RegExp(`^\\\\s*(${identifier.source})\\\\s*([\\\\s\\\\S]*)\\\\s*$`)\nexport const literalLine = new RegExp(`^${literal.source}$`, 'i')\nexport const variableLine = new RegExp(`^${variable.source}$`)\nexport const numberLine = new RegExp(`^${number.source}$`)\nexport const boolLine = new RegExp(`^${bool.source}$`, 'i')\nexport const quotedLine = new RegExp(`^${quoted.source}$`)\nexport const rangeLine = new RegExp(`^${rangeCapture.source}$`)\nexport const integerLine = new RegExp(`^${integer.source}$`)\n\n// filter related\nexport const valueDeclaration = new RegExp(`(?:${identifier.source}\\\\s*:\\\\s*)?${value.source}`)\nexport const valueList = new RegExp(`${valueDeclaration.source}(\\\\s*,\\\\s*${valueDeclaration.source})*`)\nexport const filter = new RegExp(`${identifier.source}(?:\\\\s*:\\\\s*${valueList.source})?`, 'g')\nexport const filterCapture = new RegExp(`(${identifier.source})(?:\\\\s*:\\\\s*(${valueList.source}))?`)\nexport const filterLine = new RegExp(`^${filterCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isInteger (str) {\n return integerLine.test(str)\n}\n\nexport function isLiteral (str) {\n return literalLine.test(str)\n}\n\nexport function isRange (str) {\n return rangeLine.test(str)\n}\n\nexport function isVariable (str) {\n return variableLine.test(str)\n}\n\nexport function matchValue (str) {\n return value.exec(str)\n}\n\nexport function parseLiteral (str) {\n let res = str.match(numberLine)\n if (res) {\n return Number(str)\n }\n res = str.match(boolLine)\n if (res) {\n return str.toLowerCase() === 'true'\n }\n res = str.match(quotedLine)\n if (res) {\n return str.slice(1, -1)\n }\n throw new TypeError(`cannot parse '${str}' as literal`)\n}\n","import * as _ from './underscore'\n\nfunction captureStack () {\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n}\n\nabstract class LiquidError {\n input: string\n line: string\n file: string\n message: string\n name: string\n stack: string\n token: any\n originalError: any\n constructor(err, token) {\n this.input = token.input\n this.line = token.line\n this.file = token.file\n this.originalError = err\n this.token = token\n }\n captureStackTrace(obj) {\n this.name = obj.constructor.name\n\n captureStack.call(obj)\n const err = this.originalError\n const context = mkContext(this.input, this.line)\n this.message = mkMessage(err.message, this.token)\n this.stack = context +\n '\\n' + (this.stack || this.message) +\n (err.stack ? '\\nFrom ' + err.stack : '')\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor(message, token) {\n super({message}, token)\n super.captureStackTrace(this)\n }\n}\nTokenizationError.prototype = _.create(Error.prototype)\nTokenizationError.prototype.constructor = TokenizationError\n\nexport class ParseError extends LiquidError {\n constructor(err, token) {\n super(err, token)\n _.assign(this, err)\n super.captureStackTrace(this)\n }\n}\nParseError.prototype = _.create(Error.prototype)\nParseError.prototype.constructor = ParseError\n\nexport class RenderError extends LiquidError {\n constructor(err, tpl) {\n super(err, tpl.token)\n _.assign(this, err)\n super.captureStackTrace(this)\n }\n}\nRenderError.prototype = _.create(Error.prototype)\nRenderError.prototype.constructor = RenderError\n\nexport class RenderBreakError {\n message: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nRenderBreakError.prototype = _.create(Error.prototype)\nRenderBreakError.prototype.constructor = RenderBreakError\n\nexport class AssertionError {\n message: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nAssertionError.prototype = _.create(Error.prototype)\nAssertionError.prototype.constructor = AssertionError\n\nfunction mkContext (input, targetLine) {\n const lines = input.split('\\n')\n const begin = Math.max(targetLine - 2, 1)\n const end = Math.min(targetLine + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === targetLine) ? '>> ' : ' '\n const num = padStart(String(end).length, lineNumber)\n const text = lines[lineNumber - 1]\n return `${indicator}${num}| ${text}`\n })\n .join('\\n')\n\n return context\n}\n\nfunction mkMessage (msg, token) {\n msg = msg || ''\n if (token.file) {\n msg += ', file:' + token.file\n }\n if (token.line) {\n msg += ', line:' + token.line\n }\n return msg\n}\n\nfunction padStart (length, str) {\n str = String(str)\n const blank = Array(length - str.length).join(' ')\n return blank + str\n}\n","import { AssertionError } from './error'\n\nexport default function (predicate: any, message: string) {\n if (!predicate) {\n message = message || `expect ${predicate} to be true`\n throw new AssertionError(message)\n }\n}\n","import * as _ from './util/underscore'\nimport * as lexical from './lexical'\nimport assert from './util/assert'\n\ninterface ScopeOptions {\n dynamicPartials: boolean\n strict_variables: boolean\n strict_filters: boolean\n blocks: object\n root: Array\n}\n\nexport default class Scope {\n opts: ScopeOptions\n contexts: Array\n constructor (ctx = {}, opts?: any) {\n const defaultOptions: ScopeOptions = {\n dynamicPartials: true,\n strict_variables: false,\n strict_filters: false,\n blocks: {},\n root: []\n }\n this.opts = _.assign(defaultOptions, opts)\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => _.assign(ctx, val), _.create(null))\n }\n get (path) {\n const paths = this.propertyAccessSeq(path)\n const scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n return paths.reduce((value, key) => this.readProperty(value, key), scope)\n }\n set (path, v) {\n const paths = this.propertyAccessSeq(path)\n let scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n paths.some((key, i) => {\n if (!_.isObject(scope)) {\n return true\n }\n if (i === paths.length - 1) {\n scope[key] = v\n return true\n }\n if (undefined === scope[key]) {\n scope[key] = {}\n }\n scope = scope[key]\n })\n }\n unshift (ctx) {\n return this.contexts.unshift(ctx)\n }\n push (ctx) {\n return this.contexts.push(ctx)\n }\n pop (ctx) {\n if (!arguments.length) {\n return this.contexts.pop()\n }\n const i = this.contexts.findIndex(scope => scope === ctx)\n if (i === -1) {\n throw new TypeError('scope not found, cannot pop')\n }\n return this.contexts.splice(i, 1)[0]\n }\n findContextFor (key, filter = (arg => true)) {\n for (let i = this.contexts.length - 1; i >= 0; i--) {\n const candidate = this.contexts[i]\n if (!filter(candidate)) continue\n if (key in candidate) {\n return candidate\n }\n }\n return null\n }\n readProperty (obj, key) {\n let val\n if (_.isNil(obj)) {\n val = undefined\n } else {\n obj = toLiquid(obj)\n val = key === 'size' ? readSize(obj) : obj[key]\n if (_.isFunction(obj.liquid_method_missing)) {\n val = obj.liquid_method_missing(key)\n }\n }\n if (_.isNil(val) && this.opts.strict_variables) {\n throw new TypeError(`undefined variable: ${key}`)\n }\n return val\n }\n\n /*\n * Parse property access sequence from access string\n * @example\n * accessSeq(\"foo.bar\") // ['foo', 'bar']\n * accessSeq(\"foo['bar']\") // ['foo', 'bar']\n * accessSeq(\"foo['b]r']\") // ['foo', 'b]r']\n * accessSeq(\"foo[bar.coo]\") // ['foo', 'bar'], for bar.coo == 'bar'\n */\n propertyAccessSeq (str) {\n str = String(str)\n const seq = []\n let name = ''\n let j\n let i = 0\n while (i < str.length) {\n switch (str[i]) {\n case '[':\n push()\n\n const delemiter = str[i + 1]\n if (/['\"]/.test(delemiter)) { // foo[\"bar\"]\n j = str.indexOf(delemiter, i + 2)\n assert(j !== -1, `unbalanced ${delemiter}: ${str}`)\n name = str.slice(i + 2, j)\n push()\n i = j + 2\n } else { // foo[bar.coo]\n j = matchRightBracket(str, i + 1)\n assert(j !== -1, `unbalanced []: ${str}`)\n name = str.slice(i + 1, j)\n if (!lexical.isInteger(name)) { // foo[bar] vs. foo[1]\n name = String(this.get(name))\n }\n push()\n i = j + 1\n }\n break\n case '.':// foo.bar, foo[0].bar\n push()\n i++\n break\n default:// foo.bar\n name += str[i]\n i++\n }\n }\n push()\n\n if (!seq.length) {\n throw new TypeError(`invalid path:\"${str}\"`)\n }\n return seq\n\n function push () {\n if (name.length) seq.push(name)\n name = ''\n }\n }\n}\n\nfunction toLiquid (obj) {\n if (_.isFunction(obj.to_liquid)) {\n return obj.to_liquid()\n }\n if (_.isFunction(obj.toLiquid)) {\n return obj.toLiquid()\n }\n return obj\n}\n\nfunction readSize (obj) {\n if (!_.isNil(obj.size)) return obj.size\n if (_.isArray(obj) || _.isString(obj)) return obj.length\n return obj.size\n}\n\nfunction matchRightBracket (str, begin) {\n let stack = 1 // count of '[' - count of ']'\n for (let i = begin; i < str.length; i++) {\n if (str[i] === '[') {\n stack++\n }\n if (str[i] === ']') {\n stack--\n if (stack === 0) {\n return i\n }\n }\n }\n return -1\n}\n","import { last, isArray } from './util/underscore'\n\nfunction domResolve (root, path) {\n const base = document.createElement('base')\n base.href = root\n\n const head = document.getElementsByTagName('head')[0]\n head.insertBefore(base, head.firstChild)\n\n const a = document.createElement('a')\n a.href = path\n const resolved = a.href\n head.removeChild(base)\n\n return resolved\n}\n\nexport function resolve (filepath, root, options) {\n root = root || options.root\n if (isArray(root)) {\n root = root[0]\n }\n if (root.length && last(root) !== '/') {\n root += '/'\n }\n const url = domResolve(root, filepath)\n return url.replace(/^(\\w+:\\/\\/[^/]+)(\\/[^?]+)/, (str, origin, path) => {\n const last = path.split('/').pop()\n if (/\\.\\w+$/.test(last)) {\n return str\n }\n return origin + path + options.extname\n })\n}\n\nexport async function read (url) {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.responseText)\n } else {\n reject(new Error(xhr.statusText))\n }\n }\n xhr.onerror = () => {\n reject(new Error('An error occurred whilst receiving the response.'))\n }\n xhr.open('GET', url)\n xhr.send()\n })\n}\n","import { assign } from './util/underscore'\n\nexport default function whiteSpaceCtrl (tokens, options) {\n options = assign({ greedy: true }, options)\n let inRaw = false\n\n tokens.forEach((token, i) => {\n if (shouldTrimLeft(token, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && token.name === 'raw') inRaw = true\n if (token.type === 'tag' && token.name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token, inRaw, options) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trim_left || options.trim_tag_left\n if (token.type === 'value') return token.trim_left || options.trim_value_left\n}\n\nfunction shouldTrimRight (token, inRaw, options) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trim_right || options.trim_tag_right\n if (token.type === 'value') return token.trim_right || options.trim_value_right\n}\n\nfunction trimLeft (token, greedy) {\n if (!token || token.type !== 'html') return\n\n const rLeft = greedy ? /\\s+$/g : /[\\t\\r ]*$/g\n token.value = token.value.replace(rLeft, '')\n}\n\nfunction trimRight (token, greedy) {\n if (!token || token.type !== 'html') return\n\n const rRight = greedy ? /^\\s+/g : /^[\\t\\r ]*\\n?/g\n token.value = token.value.replace(rRight, '')\n}\n","import * as lexical from './lexical'\nimport { TokenizationError } from './util/error'\nimport * as _ from './util/underscore'\nimport assert from './util/assert'\nimport whiteSpaceCtrl from './whitespace-ctrl'\n\nexport { default as whiteSpaceCtrl } from './whitespace-ctrl'\n\nexport function parse (input, file, options) {\n assert(_.isString(input), 'illegal input')\n\n const rLiquid = /({%-?([\\s\\S]*?)-?%})|({{-?([\\s\\S]*?)-?}})/g\n let currIndent = 0\n const lineNumber = LineNumber(input)\n let lastMatchEnd = 0\n const tokens = []\n\n for (let match; (match = rLiquid.exec(input)); lastMatchEnd = rLiquid.lastIndex) {\n if (match.index > lastMatchEnd) {\n tokens.push(parseHTMLToken(lastMatchEnd, match.index))\n }\n tokens.push(match[1]\n ? parseTagToken(match[1], match[2].trim(), match.index)\n : parseValueToken(match[3], match[4].trim(), match.index))\n }\n if (input.length > lastMatchEnd) {\n tokens.push(parseHTMLToken(lastMatchEnd, input.length))\n }\n whiteSpaceCtrl(tokens, options)\n return tokens\n\n function parseTagToken (raw, value, pos) {\n const match = value.match(lexical.tagLine)\n const token = {\n type: 'tag',\n indent: currIndent,\n line: lineNumber.get(pos),\n trim_left: raw.slice(0, 3) === '{%-',\n trim_right: raw.slice(-3) === '-%}',\n raw,\n value,\n input,\n file\n }\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, token)\n }\n token.name = match[1]\n token.args = match[2]\n return token\n }\n\n function parseValueToken (raw, value, pos) {\n return {\n type: 'value',\n line: lineNumber.get(pos),\n trim_left: raw.slice(0, 3) === '{{-',\n trim_right: raw.slice(-3) === '-}}',\n raw,\n value,\n input,\n file\n }\n }\n\n function parseHTMLToken (begin, end) {\n const htmlFragment = input.slice(begin, end)\n currIndent = _.last((htmlFragment).split('\\n')).length\n\n return {\n type: 'html',\n raw: htmlFragment,\n value: htmlFragment\n }\n }\n}\n\nfunction LineNumber (html) {\n let parsedLinesCount = 0\n let lastMatchBegin = -1\n\n return {\n get: function (pos) {\n const lines = html.slice(lastMatchBegin + 1, pos).split('\\n')\n parsedLinesCount += lines.length - 1\n lastMatchBegin = pos\n return parsedLinesCount + 1\n }\n }\n}\n","export default function (isTruthy) {\n return {\n '==': (l, r) => l === r,\n '!=': (l, r) => l !== r,\n '>': (l, r) => l !== null && r !== null && l > r,\n '<': (l, r) => l !== null && r !== null && l < r,\n '>=': (l, r) => l !== null && r !== null && l >= r,\n '<=': (l, r) => l !== null && r !== null && l <= r,\n 'contains': (l, r) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l, r) => isTruthy(l) && isTruthy(r),\n 'or': (l, r) => isTruthy(l) || isTruthy(r)\n }\n}\n","import Operators from './operators'\nimport * as lexical from './lexical'\nimport assert from './util/assert'\n\nconst operators = Operators(isTruthy)\n\nexport function evalExp (exp, scope) {\n assert(scope, 'unable to evalExp: scope undefined')\n const operatorREs = lexical.operators\n let match\n for (let i = 0; i < operatorREs.length; i++) {\n const operatorRE = operatorREs[i]\n const expRE = new RegExp(`^(${lexical.quoteBalanced.source})(${operatorRE.source})(${lexical.quoteBalanced.source})$`)\n if ((match = exp.match(expRE))) {\n const l = evalExp(match[1], scope)\n const op = operators[match[2].trim()]\n const r = evalExp(match[3], scope)\n return op(l, r)\n }\n }\n\n if ((match = exp.match(lexical.rangeLine))) {\n const low = evalValue(match[1], scope)\n const high = evalValue(match[2], scope)\n const range = []\n for (let j = low; j <= high; j++) {\n range.push(j)\n }\n return range\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str, scope) {\n str = str && str.trim()\n if (!str) return undefined\n\n if (lexical.isLiteral(str)) {\n return lexical.parseLiteral(str)\n }\n if (lexical.isVariable(str)) {\n return scope.get(str)\n }\n throw new TypeError(`cannot eval '${str}' as value`)\n}\n\nexport function isTruthy (val) {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val) {\n return val === false || undefined === val || val === null\n}\n","import { evalExp } from './syntax'\nimport { RenderBreakError, RenderError } from './util/error'\nimport { stringify, create } from './util/underscore'\nimport assert from './util/assert'\n\nconst render = {\n renderTemplates: async function (templates, scope) {\n assert(scope, 'unable to evalTemplates: scope undefined')\n\n let html = ''\n for (const tpl of templates) {\n try {\n html += await renderTemplate.call(this, tpl)\n } catch (e) {\n if (e instanceof RenderBreakError) {\n e.resolvedHTML = html\n throw e\n }\n throw e instanceof RenderError ? e : new RenderError(e, tpl)\n }\n }\n return html\n\n async function renderTemplate (template) {\n if (template.type === 'tag') {\n const partial = await this.renderTag(template, scope)\n return partial === undefined ? '' : partial\n }\n if (template.type === 'value') {\n return this.renderValue(template, scope)\n }\n return template.value\n }\n },\n\n renderTag: async function (template, scope) {\n if (template.name === 'continue') {\n throw new RenderBreakError('continue')\n }\n if (template.name === 'break') {\n throw new RenderBreakError('break')\n }\n return template.render(scope)\n },\n\n renderValue: async function (template, scope) {\n const partial = this.evalValue(template, scope)\n return partial === undefined ? '' : stringify(partial)\n },\n\n evalValue: function (template, scope) {\n assert(scope, 'unable to evalValue: scope undefined')\n return template.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(template.initial, scope))\n }\n}\n\nexport default function () {\n const instance = create(render)\n return instance\n}\n","import { hashCapture } from './lexical'\nimport { create } from './util/underscore'\nimport { evalValue } from './syntax'\nimport assert from './util/assert'\n\nfunction hash (markup, scope) {\n const obj = {}\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n obj[k] = evalValue(v, scope)\n }\n return obj\n}\n\nexport default function () {\n let tagImpls = {}\n\n const _tagInstance = {\n render: async function (scope) {\n const obj = hash(this.token.args, scope)\n const impl = this.tagImpl\n if (typeof impl.render !== 'function') {\n return ''\n }\n return impl.render(scope, obj)\n },\n parse: function (token, tokens) {\n this.type = 'tag'\n this.token = token\n this.name = token.name\n\n const tagImpl = tagImpls[this.name]\n assert(tagImpl, `tag ${this.name} not found`)\n this.tagImpl = create(tagImpl)\n if (this.tagImpl.parse) {\n this.tagImpl.parse(token, tokens)\n }\n }\n }\n\n function register (name, tag) {\n tagImpls[name] = tag\n }\n\n function construct (token, tokens) {\n const instance = create(_tagInstance)\n instance.parse(token, tokens)\n return instance\n }\n\n function clear () {\n tagImpls = {}\n }\n\n return {\n construct,\n register,\n clear\n }\n}\n","import * as lexical from './lexical'\nimport { evalValue } from './syntax'\nimport assert from './util/assert'\nimport { assign, create } from './util/underscore'\n\nconst valueRE = new RegExp(`${lexical.value.source}`, 'g')\n\nexport default function (options) {\n options = assign({}, options)\n let filters = {}\n\n const _filterInstance = {\n render: function (output, scope) {\n const args = this.args.map(arg => evalValue(arg, scope))\n args.unshift(output)\n return this.filter.apply(null, args)\n },\n parse: function (str) {\n let match = lexical.filterLine.exec(str)\n assert(match, 'illegal filter: ' + str)\n\n const name = match[1]\n const argList = match[2] || ''\n const filter = filters[name]\n if (typeof filter !== 'function') {\n if (options.strict_filters) {\n throw new TypeError(`undefined filter: ${name}`)\n }\n this.name = name\n this.filter = x => x\n this.args = []\n return this\n }\n\n const args = []\n while ((match = valueRE.exec(argList.trim()))) {\n const v = match[0]\n const re = new RegExp(`${v}\\\\s*:`, 'g')\n const keyMatch = re.exec(match.input)\n const currentMatchIsKey = keyMatch && keyMatch.index === match.index\n currentMatchIsKey ? args.push(`'${v}'`) : args.push(v)\n }\n\n this.name = name\n this.filter = filter\n this.args = args\n\n return this\n }\n }\n\n function construct (str) {\n const instance = create(_filterInstance)\n return instance.parse(str)\n }\n\n function register (name, filter) {\n filters[name] = filter\n }\n\n function clear () {\n filters = {}\n }\n\n return {\n construct, register, clear\n }\n}\n","import * as lexical from './lexical'\nimport { ParseError } from './util/error'\nimport assert from './util/assert'\n\nexport default function (Tag, Filter) {\n class ParseStream {\n tokens: Array\n handlers: object\n stopRequested: boolean\n constructor (tokens) {\n this.tokens = tokens\n this.handlers = {}\n }\n on (name, cb) {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: any) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n }\n start () {\n this.trigger('start')\n let token\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' &&\n this.trigger(`tag:${token.name}`, token)) {\n continue\n }\n const template = parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n }\n stop () {\n this.stopRequested = true\n return this\n }\n }\n\n function parse (tokens) {\n let token\n const templates = []\n while ((token = tokens.shift())) {\n templates.push(parseToken(token, tokens))\n }\n return templates\n }\n\n function parseToken (token, tokens) {\n try {\n let tpl = null\n if (token.type === 'tag') {\n tpl = parseTag(token, tokens)\n } else if (token.type === 'value') {\n tpl = parseValue(token.value)\n } else { // token.type === 'html'\n tpl = token\n }\n tpl.token = token\n return tpl\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n\n function parseTag (token, tokens) {\n if (token.name === 'continue' || token.name === 'break') return token\n return Tag.construct(token, tokens)\n }\n\n function parseValue (str) {\n let match = lexical.matchValue(str)\n assert(match, `illegal value string: ${str}`)\n\n const initial = match[0]\n str = str.substr(match.index + match[0].length)\n\n const filters = []\n while ((match = lexical.filter.exec(str))) {\n filters.push([match[0].trim()])\n }\n\n return {\n type: 'value',\n initial: initial,\n filters: filters.map(str => Filter.construct(str))\n }\n }\n\n function parseStream (tokens) {\n return new ParseStream(tokens)\n }\n\n return {\n parse,\n parseTag,\n parseStream,\n parseValue\n }\n}\n","/*\n * Call functions in serial until someone resolved.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function anySeries (iterable, iteratee) {\n let ret = Promise.reject(new Error('init'))\n iterable.forEach(function (item, idx) {\n ret = ret.catch(e => iteratee(item, idx, iterable))\n })\n return ret\n}\n\n/*\n * Call functions in serial until someone rejected.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function mapSeries (iterable, iteratee) {\n let ret = Promise.resolve('init')\n const result = []\n iterable.forEach(function (item, idx) {\n ret = ret\n .then(() => iteratee(item, idx, iterable))\n .then(x => result.push(x))\n })\n return ret.then(() => result)\n}\n","import { mapSeries } from '../util/promise'\nimport { isString, isObject, isArray } from '../util/underscore'\nimport assert from '../util/assert'\nimport { identifier, value, hash } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const RenderBreakError = Liquid.Types.RenderBreakError\n const re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\n liquid.registerTag('for', { parse, render })\n\n function parse (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n this.variable = match[1]\n this.collection = match[2]\n this.reversed = !!match[3]\n\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endfor', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n }\n async function render (scope, hash) {\n let collection = Liquid.evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]])\n }\n }\n if (!isArray(collection) || !collection.length) {\n return liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n if (this.reversed) collection.reverse()\n\n const contexts = collection.map((item, i) => {\n const ctx = {}\n ctx[this.variable] = item\n ctx.forloop = {\n first: i === 0,\n index: i + 1,\n index0: i,\n last: i === collection.length - 1,\n length: collection.length,\n rindex: collection.length - i,\n rindex0: collection.length - i - 1\n }\n return ctx\n })\n\n let html = ''\n let finished = false\n await mapSeries(contexts, async context => {\n if (finished) return\n\n scope.push(context)\n try {\n html += await liquid.renderer.renderTemplates(this.templates, scope)\n } catch (e) {\n if (e instanceof RenderBreakError) {\n html += e.resolvedHTML\n if (e.message === 'break') {\n finished = true\n }\n } else throw e\n }\n scope.pop(context)\n })\n return html\n }\n}\n","import assert from '../util/assert'\nimport { identifier } from '../lexical'\nimport { create } from '../util/underscore'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n const { AssignScope } = Liquid.Types\n\n liquid.registerTag('assign', {\n parse: function (token) {\n const match = token.args.match(re)\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (scope) {\n const ctx = create(AssignScope)\n ctx[this.key] = liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n })\n}\n","import assert from '../util/assert'\nimport { create } from '../util/underscore'\nimport { identifier } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`(${identifier.source})`)\n const { CaptureScope } = Liquid.Types\n\n liquid.registerTag('capture', {\n parse: function (tagToken, remainTokens) {\n const match = tagToken.args.match(re)\n assert(match, `${tagToken.args} not valid identifier`)\n\n this.variable = match[1]\n this.templates = []\n\n const stream = liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', token => stream.stop())\n .on('template', tpl => this.templates.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope, hash) {\n const html = await liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = create(CaptureScope)\n ctx[this.variable] = html\n scope.push(ctx)\n }\n })\n}\n","export default function (liquid, Liquid) {\n liquid.registerTag('case', {\n\n parse: function (tagToken, remainTokens) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p = []\n const stream = liquid.parser.parseStream(remainTokens)\n .on('tag:when', token => {\n this.cases.push({\n val: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endcase', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = Liquid.evalExp(branch.val, scope)\n const cond = Liquid.evalExp(this.cond, scope)\n if (val === cond) {\n return liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","export default function (liquid) {\n liquid.registerTag('comment', {\n parse: function (tagToken, remainTokens) {\n const stream = liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n })\n}\n","import assert from '../util/assert'\nimport { value, quotedLine } from '../lexical'\n\nconst staticFileRE = /[^\\s,]+/\n\nexport default function (liquid, Liquid) {\n const withRE = new RegExp(`with\\\\s+(${value.source})`)\n\n liquid.registerTag('include', {\n parse: function (token) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticValue = match[0]\n }\n\n match = value.exec(token.args)\n if (match) {\n this.value = match[0]\n }\n\n match = withRE.exec(token.args)\n if (match) {\n this.with = match[1]\n }\n },\n render: async function (scope, hash) {\n let filepath\n if (scope.opts.dynamicPartials) {\n if (quotedLine.exec(this.value)) {\n const template = this.value.slice(1, -1)\n filepath = await liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = Liquid.evalValue(this.value, scope)\n }\n } else {\n filepath = this.staticValue\n }\n assert(filepath, `cannot include with empty filename`)\n\n const originBlocks = scope.opts.blocks\n const originBlockMode = scope.opts.blockMode\n\n scope.opts.blocks = {}\n scope.opts.blockMode = 'output'\n if (this.with) {\n hash[filepath] = Liquid.evalValue(this.with, scope)\n }\n const templates = await liquid.getTemplate(filepath, scope.opts.root)\n scope.push(hash)\n const html = await liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.opts.blocks = originBlocks\n scope.opts.blockMode = originBlockMode\n return html\n }\n })\n}\n","import { create } from '../util/underscore'\nimport assert from '../util/assert'\nimport { identifier } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const { CaptureScope, AssignScope, DecrementScope } = Liquid.Types\n\n liquid.registerTag('decrement', {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope, hash) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n const proto = Object.getPrototypeOf(ctx)\n return proto !== CaptureScope && proto !== AssignScope\n }\n )\n if (!context) {\n context = create(DecrementScope)\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n return --context[this.variable]\n }\n })\n}\n","import assert from '../util/assert'\nimport { value as rValue } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\n const candidatesRE = new RegExp(rValue.source, 'g')\n\n liquid.registerTag('cycle', {\n\n parse: function (tagToken, remainTokens) {\n let match = groupRE.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.group = match[1] || ''\n const candidates = match[2]\n\n this.candidates = []\n\n while ((match = candidatesRE.exec(candidates))) {\n this.candidates.push(match[0])\n }\n assert(this.candidates.length, `empty candidates: ${tagToken.raw}`)\n },\n\n render: function (scope, hash) {\n const group = Liquid.evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n\n const groups = scope.opts.groups = scope.opts.groups || {}\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n\n return Liquid.evalValue(candidate, scope)\n }\n })\n}\n","export default function (liquid, Liquid) {\n liquid.registerTag('if', {\n\n parse: function (tagToken, remainTokens) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', token => {\n this.branches.push({\n cond: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endif', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n for (const branch of this.branches) {\n const cond = Liquid.evalExp(branch.cond, scope)\n if (Liquid.isTruthy(cond)) {\n return liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","import assert from '../util/assert'\nimport { create } from '../util/underscore'\nimport { identifier } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const { CaptureScope, AssignScope, IncrementScope } = Liquid.Types\n\n liquid.registerTag('increment', {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope, hash) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n const proto = Object.getPrototypeOf(ctx)\n return proto !== CaptureScope && proto !== AssignScope\n }\n )\n if (!context) {\n context = create(IncrementScope)\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n const val = context[this.variable]\n context[this.variable]++\n return val\n }\n })\n}\n","import assert from '../util/assert'\nimport { value as rValue } from '../lexical'\n\n/*\n * blockMode:\n * * \"store\": store rendered html into blocks\n * * \"output\": output rendered html\n */\n\nexport default function (liquid, Liquid) {\n const staticFileRE = /\\S+/\n\n liquid.registerTag('layout', {\n parse: function (token, remainTokens) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticLayout = match[0]\n }\n\n match = rValue.exec(token.args)\n if (match) {\n this.layout = match[0]\n }\n\n this.tpls = liquid.parser.parse(remainTokens)\n },\n render: async function (scope, hash) {\n const layout = scope.opts.dynamicPartials\n ? Liquid.evalValue(this.layout, scope)\n : this.staticLayout\n assert(layout, `cannot apply layout with empty filename`)\n\n // render the remaining tokens immediately\n scope.opts.blockMode = 'store'\n const html = await liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.opts.blocks[''] === undefined) {\n scope.opts.blocks[''] = html\n }\n const templates = await liquid.getTemplate(layout, scope.opts.root)\n scope.push(hash)\n scope.opts.blockMode = 'output'\n const partial = await liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n })\n\n liquid.registerTag('block', {\n parse: function (token, remainTokens) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n\n this.tpls = []\n const stream = liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', tpl => this.tpls.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${token.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope) {\n const childDefined = scope.opts.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.opts.blockMode === 'store') {\n scope.opts.blocks[this.block] = html\n return ''\n }\n return html\n }\n })\n}\n","export default function (liquid) {\n liquid.registerTag('raw', {\n parse: function (tagToken, remainTokens) {\n this.tokens = []\n\n const stream = liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\n if (token.name === 'endraw') stream.stop()\n else this.tokens.push(token)\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: function (scope, hash) {\n return this.tokens.map(token => token.raw).join('')\n }\n })\n}\n","import { mapSeries } from '../util/promise'\nimport assert from '../util/assert'\nimport { identifier, value, hash } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\n liquid.registerTag('tablerow', {\n\n parse: function (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.variable = match[1]\n this.collection = match[2]\n this.templates = []\n\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: async function (scope, hash) {\n let collection = Liquid.evalExp(this.collection, scope) || []\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = hash.cols || collection.length\n const contexts = collection.map((item, i) => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row\n let html = ''\n await mapSeries(contexts, async (context, idx) => {\n row = Math.floor(idx / cols) + 1\n const col = (idx % cols) + 1\n if (col === 1) {\n if (row !== 1) {\n html += ''\n }\n html += ``\n }\n\n html += ``\n scope.push(context)\n html += await liquid.renderer.renderTemplates(this.templates, scope)\n html += ''\n scope.pop(context)\n return html\n })\n if (row > 0) {\n html += ''\n }\n return html\n }\n })\n}\n","export default function (liquid, Liquid) {\n liquid.registerTag('unless', {\n parse: function (tagToken, remainTokens) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', x => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n const cond = Liquid.evalExp(this.cond, scope)\n return Liquid.isFalsy(cond)\n ? liquid.renderer.renderTemplates(this.templates, scope)\n : liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","import For from './for'\nimport Assign from './assign'\nimport Capture from './capture'\nimport Case from './case'\nimport Comment from './comment'\nimport Include from './include'\nimport Decrement from './decrement'\nimport Cycle from './cycle'\nimport If from './if'\nimport Increment from './increment'\nimport Layout from './layout'\nimport Raw from './raw'\nimport Tablerow from './tablerow'\nimport Unless from './unless'\n\nexport default function (engine, Liquid) {\n Assign(engine, Liquid)\n Capture(engine, Liquid)\n Case(engine, Liquid)\n Comment(engine, Liquid)\n Cycle(engine, Liquid)\n Decrement(engine, Liquid)\n For(engine, Liquid)\n If(engine, Liquid)\n Include(engine, Liquid)\n Increment(engine, Liquid)\n Layout(engine, Liquid)\n Raw(engine, Liquid)\n Tablerow(engine, Liquid)\n Unless(engine, Liquid)\n}\n","const monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst monthNamesShort = monthNames.map(abbr)\nconst dayNamesShort = dayNames.map(abbr)\nconst suffixes = {\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n 'default': 'th'\n}\n\nfunction abbr (str) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d) {\n const feb = _date.isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n },\n\n getDayOfYear: function (d) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += _date.daysInMonth(d)[i]\n }\n return num + d.getDate()\n },\n\n // Startday is an integer of which day to start the week measuring from\n // TODO: that comment was retarted. fix it.\n getWeekOfYear: function (d, startDay) {\n // Skip to startDay of this week\n const now = this.getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return _number.pad(Math.floor((now - then) / 7) + 1, 2)\n },\n\n isLeapYear: function (d) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d) {\n const str = d.getDate().toString()\n const index = parseInt(str.slice(-1))\n return suffixes[index] || suffixes['default']\n },\n\n century: function (d) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst _number = {\n pad: function (value, size, ch) {\n if (!ch) ch = '0'\n let result = value.toString()\n let pad = size - result.length\n\n while (pad-- > 0) {\n result = ch + result\n }\n\n return result\n }\n}\n\nconst formatCodes = {\n a: function (d) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d) {\n return dayNames[d.getDay()]\n },\n b: function (d) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d) {\n return monthNames[d.getMonth()]\n },\n c: function (d) {\n return d.toLocaleString()\n },\n C: function (d) {\n return _date.century(d)\n },\n d: function (d) {\n return _number.pad(d.getDate(), 2)\n },\n e: function (d) {\n return _number.pad(d.getDate(), 2, ' ')\n },\n H: function (d) {\n return _number.pad(d.getHours(), 2)\n },\n I: function (d) {\n return _number.pad(d.getHours() % 12 || 12, 2)\n },\n j: function (d) {\n return _number.pad(_date.getDayOfYear(d), 3)\n },\n k: function (d) {\n return _number.pad(d.getHours(), 2, ' ')\n },\n l: function (d) {\n return _number.pad(d.getHours() % 12 || 12, 2, ' ')\n },\n L: function (d) {\n return _number.pad(d.getMilliseconds(), 3)\n },\n m: function (d) {\n return _number.pad(d.getMonth() + 1, 2)\n },\n M: function (d) {\n return _number.pad(d.getMinutes(), 2)\n },\n p: function (d) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d) {\n return _date.getSuffix(d)\n },\n s: function (d) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d) {\n return _number.pad(d.getSeconds(), 2)\n },\n u: function (d) {\n return d.getDay() || 7\n },\n U: function (d) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d) {\n return d.getDay()\n },\n W: function (d) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d) {\n return d.toLocaleDateString()\n },\n X: function (d) {\n return d.toLocaleTimeString()\n },\n y: function (d) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d) {\n return d.getFullYear()\n },\n z: function (d) {\n const tz = d.getTimezoneOffset() / 60 * 100\n return (tz > 0 ? '-' : '+') + _number.pad(Math.abs(tz), 4)\n },\n '%': function () {\n return '%'\n }\n}\nformatCodes.h = formatCodes.b\nformatCodes.N = formatCodes.L\n\nexport default function (d, format) {\n let output = ''\n let remaining = format\n\n while (true) {\n const r = /%./g\n const results = r.exec(remaining)\n\n // No more format codes. Add the remaining text and return\n if (!results) {\n return output + remaining\n }\n\n // Add the preceding text\n output += remaining.slice(0, r.lastIndex - 2)\n remaining = remaining.slice(r.lastIndex)\n\n // Add the format code\n const ch = results[0].charAt(1)\n const func = formatCodes[ch]\n output += func ? func.call(this, d) : '%' + ch\n }\n}\n","import strftime from './util/strftime'\nimport * as _ from './util/underscore'\nimport { isTruthy } from './syntax'\n\nconst escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nconst filters = {\n 'abs': v => Math.abs(v),\n 'append': (v, arg) => v + arg,\n 'capitalize': str => stringify(str).charAt(0).toUpperCase() + str.slice(1),\n 'ceil': v => Math.ceil(v),\n 'concat': (v, arg) => Array.prototype.concat.call(v, arg),\n 'date': (v, arg) => {\n let date = v\n if (v === 'now') {\n date = new Date()\n } else if (_.isString(v)) {\n date = new Date(v)\n }\n return isValidDate(date) ? strftime(date, arg) : v\n },\n 'default': (v, arg) => isTruthy(v) ? v : arg,\n 'divided_by': (v, arg) => v / arg,\n 'downcase': v => v.toLowerCase(),\n 'escape': escape,\n\n 'escape_once': str => escape(unescape(str)),\n 'first': v => v[0],\n 'floor': v => Math.floor(v),\n 'join': (v, arg) => v.join(arg === undefined ? ' ' : arg),\n 'last': v => _.last(v),\n 'lstrip': v => stringify(v).replace(/^\\s+/, ''),\n 'map': (arr, arg) => arr.map(v => v[arg]),\n 'minus': bindFixed((v, arg) => v - arg),\n 'modulo': bindFixed((v, arg) => v % arg),\n 'newline_to_br': v => v.replace(/\\n/g, '
'),\n 'plus': bindFixed((v, arg) => Number(v) + Number(arg)),\n 'prepend': (v, arg) => arg + v,\n 'remove': (v, arg) => v.split(arg).join(''),\n 'remove_first': (v, l) => v.replace(l, ''),\n 'replace': (v, pattern, replacement) =>\n stringify(v).split(pattern).join(replacement),\n 'replace_first': (v, arg1, arg2) => stringify(v).replace(arg1, arg2),\n 'reverse': v => v.reverse(),\n 'round': (v, arg) => {\n const amp = Math.pow(10, arg || 0)\n return Math.round(v * amp, arg) / amp\n },\n 'rstrip': str => stringify(str).replace(/\\s+$/, ''),\n 'size': v => v.length,\n 'slice': (v, begin, length) => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'sort': (v, arg) => v.sort(arg),\n 'split': (v, arg) => stringify(v).split(arg),\n 'strip': (v) => stringify(v).trim(),\n 'strip_html': v => stringify(v).replace(/|||<.*?>/g, ''),\n 'strip_newlines': v => stringify(v).replace(/\\n/g, ''),\n 'times': (v, arg) => v * arg,\n 'truncate': (v, l, o) => {\n v = stringify(v)\n o = (o === undefined) ? '...' : o\n l = l || 16\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v, l, o) => {\n if (o === undefined) o = '...'\n const arr = v.split(' ')\n let ret = arr.slice(0, l).join(' ')\n if (arr.length > l) ret += o\n return ret\n },\n 'uniq': function (arr) {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(val)) {\n return false\n }\n u[val] = true\n return true\n })\n },\n 'upcase': str => stringify(str).toUpperCase(),\n 'url_decode': x => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': x => x.split(' ').map(encodeURIComponent).join('+')\n}\n\nfunction escape (str) {\n return stringify(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str) {\n return stringify(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nfunction getFixed (v) {\n const p = (v + '').split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction getMaxFixed (l, r) {\n return Math.max(getFixed(l), getFixed(r))\n}\n\nfunction stringify (obj) {\n return obj + ''\n}\n\nfunction bindFixed (cb) {\n return (l, r) => {\n const f = getMaxFixed(l, r)\n return cb(l, r).toFixed(f)\n }\n}\n\nfunction isValidDate (date) {\n return date instanceof Date && !isNaN(date.getTime())\n}\n\nexport default function registerAll (liquid, Liquid) {\n return _.forOwn(filters, (func, name) => liquid.registerFilter(name, func))\n}\n\nregisterAll.filters = filters\n","import Scope from './scope'\nimport * as template from './template'\nimport * as _ from './util/underscore'\nimport assert from './util/assert'\nimport * as tokenizer from './tokenizer'\nimport Render from './render'\nimport Tag from './tag'\nimport Filter from './filter'\nimport Parser from './parser'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './syntax'\nimport { ParseError, TokenizationError, RenderBreakError, AssertionError } from './util/error'\nimport tags from './tags/index'\nimport filters from './filters'\n\nexport default class Liquid {\n private cache: object\n private options: any\n private tags: any\n private filters: any\n private parser: any\n private renderer: any\n\n constructor (options) {\n options = _.assign({\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_value_right: false,\n trim_value_left: false,\n greedy: true,\n strict_filters: false,\n strict_variables: false\n }, options)\n options.root = normalizeStringArray(options.root)\n\n if (options.cache) {\n this.cache = {}\n }\n this.options = options\n this.tags = Tag()\n this.filters = Filter(options)\n this.parser = Parser(this.tags, this.filters)\n this.renderer = Render()\n\n tags(this, Liquid)\n filters(this, Liquid)\n }\n parse(html: string, filepath?: string) {\n const tokens = tokenizer.parse(html, filepath, this.options)\n return this.parser.parse(tokens)\n }\n render(tpl: string, ctx: any, opts: any) {\n opts = _.assign({}, this.options, opts)\n const scope = new Scope(ctx, opts)\n return this.renderer.renderTemplates(tpl, scope)\n }\n async parseAndRender(html, ctx, opts) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n }\n async getTemplate(file, root) {\n const filepath = await template.resolve(file, root, this.options)\n return this.respectCache(filepath, async () => {\n const str = await template.read(filepath)\n return this.parse(str, filepath)\n })\n }\n async renderFile(file, ctx, opts) {\n opts = _.assign({}, opts)\n const templates = await this.getTemplate(file, opts.root)\n return this.render(templates, ctx, opts)\n }\n async respectCache (key, getter) {\n const cacheEnabled = this.options.cache\n if (cacheEnabled && this.cache[key]) {\n return this.cache[key]\n }\n const value = await getter()\n if (cacheEnabled) {\n this.cache[key] = value\n }\n return value\n }\n evalValue (str, scope) {\n const tpl = this.parser.parseValue(str.trim())\n return this.renderer.evalValue(tpl, scope)\n }\n registerFilter (name, filter) {\n return this.filters.register(name, filter)\n }\n registerTag (name, tag) {\n return this.tags.register(name, tag)\n }\n plugin (plugin) {\n return plugin.call(this, Liquid)\n }\n express (opts) {\n opts = opts || {}\n const self = this\n return function (filePath, ctx, cb) {\n assert(_.isArray(this.root) || _.isString(this.root),\n 'illegal views root, are you using express.js?')\n opts.root = this.root\n self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb)\n }\n }\n static default = Liquid\n static isTruthy = isTruthy\n static isFalsy = isFalsy\n static evalExp = evalExp\n static evalValue = evalValue\n static Types = {\n ParseError,\n TokenizationError,\n RenderBreakError,\n AssertionError,\n AssignScope: {},\n CaptureScope: {},\n IncrementScope: {},\n DecrementScope: {}\n }\n}\n\nfunction normalizeStringArray (value) {\n if (_.isArray(value)) return value\n if (_.isString(value)) return [value]\n throw new TypeError('illegal root: ' + value)\n}\n"],"names":["range","tslib_1.__extends","_.create","_.assign","_\r\n .range","_.last","value","_.isObject","filter","_.isNil","_.isFunction","lexical.isInteger","_.isArray","_.isString","last","lexical.tagLine","operators","lexical.operators","lexical.quoteBalanced","lexical.rangeLine","lexical.isLiteral","lexical.parseLiteral","lexical.isVariable","hash","lexical.value","lexical.filterLine","lexical.matchValue","lexical.filter","rValue","stringify","_.forOwn","filters","tokenizer.parse","template.resolve","template.read"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAAA,IAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAA;IACvC,IAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAA;IAEzC;;;;;AAKA,aAAgB,QAAQ,CAAE,KAAK;QAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAA;IAChD,CAAC;AAED,aAAgB,UAAU,CAAE,KAAK;QAC/B,OAAO,OAAO,KAAK,KAAK,UAAU,CAAA;IACpC,CAAC;AAED,aAUgB,SAAS,CAAE,KAAK;QAC9B,IAAI,KAAK,CAAC,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;QACtC,IAAI,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAA;QACpE,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;YAAE,OAAO,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;QAClE,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC,IAAI,EAAE,CAAA;QAC/C,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,eAAe,CAAC,KAAK,CAAC,CAAA;QACjF,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;QACvD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,SAAS,eAAe,CAAE,KAAK;QAC7B,IAAM,KAAK,GAAG,EAAE,CAAA;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,UAAC,GAAG,EAAE,KAAK;YACtC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACnB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;oBAC/B,OAAM;iBACP;gBACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;aAClB;YACD,OAAO,KAAK,CAAA;SACb,CAAC,CAAA;IACJ,CAAC;AAED,aAAgB,MAAM,CAAE,KAAK;QAC3B,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC7B,CAAC;AAED,aAAgB,KAAK,CAAE,KAAK;QAC1B,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAA;IAC9C,CAAC;AAED,aAAgB,OAAO,CAAE,KAAK;;QAE5B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,gBAAgB,CAAA;IAC/C,CAAC;AAED,IAOA;;;;;;;;AAQA,aAAgB,MAAM,CAAE,MAAM,EAAE,QAAQ;QACtC,MAAM,GAAG,MAAM,IAAI,EAAE,CAAA;QACrB,KAAK,IAAM,CAAC,IAAI,MAAM,EAAE;YACtB,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;gBAC5B,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,KAAK;oBAAE,MAAK;aACpD;SACF;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;;;;;;;;;AAWA,aAAgB,MAAM,CAAE,GAAG;QAAE,cAAO;aAAP,UAAO,EAAP,qBAAO,EAAP,IAAO;YAAP,6BAAO;;QAClC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,CAAA;QAC9B,IAAI,CAAC,OAAO,CAAC,UAAA,GAAG,IAAI,OAAA,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,GAAA,CAAC,CAAA;QAC3C,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,SAAS,YAAY,CAAC,MAAM,EAAE,GAAG;QAC/B,KAAI,IAAI,GAAG,IAAI,GAAG;YAAE,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;IACzE,CAAC;AAED,aAAgB,IAAI,CAAE,GAAG;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC5B,CAAC;AAED,IAaA;;;;;;AAMA,aAAgB,QAAQ,CAAE,KAAK;QAC7B,IAAM,IAAI,GAAG,OAAO,KAAK,CAAA;QACzB,OAAO,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,UAAU,CAAC,CAAA;IACrE,CAAC;IAED;;;;;;;;AAQA,aAAgB,KAAK,CAAE,KAAa,EAAE,IAAY,EAAE,IAAa;QAC/D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1B,IAAI,GAAG,KAAK,CAAA;YACZ,KAAK,GAAG,CAAC,CAAA;SACV;QACD,IAAI,GAAG,IAAI,IAAI,CAAC,CAAA;QAEhB,IAAM,GAAG,GAAG,EAAE,CAAA;QACd,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE;YACvC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;SACZ;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;;IC5JD;IACA,IAAM,YAAY,GAAG,SAAS,CAAA;IAC9B,IAAM,YAAY,GAAG,SAAS,CAAA;AAC9B,IAAO,IAAM,MAAM,GAAG,IAAI,MAAM,CAAI,YAAY,CAAC,MAAM,SAAI,YAAY,CAAC,MAAQ,CAAC,CAAA;AACjF,IAAO,IAAM,aAAa,GAAG,IAAI,MAAM,CAAC,QAAM,MAAM,CAAC,MAAM,cAAU,CAAC,CAAA;IAEtE;AACA,IAAO,IAAM,OAAO,GAAG,OAAO,CAAA;AAC9B,IAAO,IAAM,MAAM,GAAG,oBAAoB,CAAA;AAC1C,IAAO,IAAM,IAAI,GAAG,YAAY,CAAA;IAEhC;AACA,IAAO,IAAM,UAAU,GAAG,YAAY,CAAA;AACtC,IAAO,IAAM,SAAS,GAAG,IAAI,MAAM,CAAC,WAAS,MAAM,CAAC,MAAM,oBAAiB,CAAC,CAAA;AAC5E,IAAO,IAAM,OAAO,GAAG,IAAI,MAAM,CAAC,QAAM,MAAM,CAAC,MAAM,SAAI,IAAI,CAAC,MAAM,SAAI,MAAM,CAAC,MAAM,MAAG,CAAC,CAAA;AACzF,IAAO,IAAM,QAAQ,GAAG,IAAI,MAAM,CAAI,UAAU,CAAC,MAAM,cAAS,UAAU,CAAC,MAAM,SAAI,SAAS,CAAC,MAAM,OAAI,CAAC,CAAA;IAE1G;AACA,IAAO,IAAM,UAAU,GAAG,IAAI,MAAM,CAAC,QAAM,QAAQ,CAAC,MAAM,SAAI,MAAM,CAAC,MAAM,MAAG,CAAC,CAAA;AAC/E,IAAO,IAAMA,OAAK,GAAG,IAAI,MAAM,CAAC,QAAM,UAAU,CAAC,MAAM,cAAS,UAAU,CAAC,MAAM,QAAK,CAAC,CAAA;AACvF,IAAO,IAAM,YAAY,GAAG,IAAI,MAAM,CAAC,SAAO,UAAU,CAAC,MAAM,gBAAW,UAAU,CAAC,MAAM,SAAM,CAAC,CAAA;AAElG,IAAO,IAAM,KAAK,GAAG,IAAI,MAAM,CAAC,QAAM,QAAQ,CAAC,MAAM,SAAI,OAAO,CAAC,MAAM,SAAIA,OAAK,CAAC,MAAM,MAAG,CAAC,CAAA;IAE3F;AACA,IAAO,IAAM,IAAI,GAAG,IAAI,MAAM,CAAC,QAAM,UAAU,CAAC,MAAM,qBAAgB,KAAK,CAAC,MAAM,MAAG,CAAC,CAAA;AACtF,IAAO,IAAM,WAAW,GAAG,IAAI,MAAM,CAAC,MAAI,UAAU,CAAC,MAAM,mBAAc,KAAK,CAAC,MAAM,MAAG,EAAE,GAAG,CAAC,CAAA;IAE9F;AACA,IAAO,IAAM,OAAO,GAAG,IAAI,MAAM,CAAC,WAAS,UAAU,CAAC,MAAM,0BAAuB,CAAC,CAAA;AACpF,IAAO,IAAM,WAAW,GAAG,IAAI,MAAM,CAAC,MAAI,OAAO,CAAC,MAAM,MAAG,EAAE,GAAG,CAAC,CAAA;AACjE,IAAO,IAAM,YAAY,GAAG,IAAI,MAAM,CAAC,MAAI,QAAQ,CAAC,MAAM,MAAG,CAAC,CAAA;AAC9D,IAAO,IAAM,UAAU,GAAG,IAAI,MAAM,CAAC,MAAI,MAAM,CAAC,MAAM,MAAG,CAAC,CAAA;AAC1D,IAAO,IAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,MAAI,IAAI,CAAC,MAAM,MAAG,EAAE,GAAG,CAAC,CAAA;AAC3D,IAAO,IAAM,UAAU,GAAG,IAAI,MAAM,CAAC,MAAI,MAAM,CAAC,MAAM,MAAG,CAAC,CAAA;AAC1D,IAAO,IAAM,SAAS,GAAG,IAAI,MAAM,CAAC,MAAI,YAAY,CAAC,MAAM,MAAG,CAAC,CAAA;AAC/D,IAAO,IAAM,WAAW,GAAG,IAAI,MAAM,CAAC,MAAI,OAAO,CAAC,MAAM,MAAG,CAAC,CAAA;IAE5D;AACA,IAAO,IAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,QAAM,UAAU,CAAC,MAAM,mBAAc,KAAK,CAAC,MAAQ,CAAC,CAAA;AAC/F,IAAO,IAAM,SAAS,GAAG,IAAI,MAAM,CAAI,gBAAgB,CAAC,MAAM,kBAAa,gBAAgB,CAAC,MAAM,OAAI,CAAC,CAAA;AACvG,IAAO,IAAM,MAAM,GAAG,IAAI,MAAM,CAAI,UAAU,CAAC,MAAM,oBAAe,SAAS,CAAC,MAAM,OAAI,EAAE,GAAG,CAAC,CAAA;AAC9F,IAAO,IAAM,aAAa,GAAG,IAAI,MAAM,CAAC,MAAI,UAAU,CAAC,MAAM,sBAAiB,SAAS,CAAC,MAAM,QAAK,CAAC,CAAA;AACpG,IAAO,IAAM,UAAU,GAAG,IAAI,MAAM,CAAC,MAAI,aAAa,CAAC,MAAM,MAAG,CAAC,CAAA;AAEjE,IAAO,IAAM,SAAS,GAAG;QACvB,UAAU;QACV,WAAW;QACX,gCAAgC;KACjC,CAAA;AAED,aAAgB,SAAS,CAAE,GAAG;QAC5B,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC9B,CAAC;AAED,aAAgB,SAAS,CAAE,GAAG;QAC5B,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC9B,CAAC;AAED,aAIgB,UAAU,CAAE,GAAG;QAC7B,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC;AAED,aAAgB,UAAU,CAAE,GAAG;QAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;AAED,aAAgB,YAAY,CAAE,GAAG;QAC/B,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QAC/B,IAAI,GAAG,EAAE;YACP,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;SACnB;QACD,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QACzB,IAAI,GAAG,EAAE;YACP,OAAO,GAAG,CAAC,WAAW,EAAE,KAAK,MAAM,CAAA;SACpC;QACD,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QAC3B,IAAI,GAAG,EAAE;YACP,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;SACxB;QACD,MAAM,IAAI,SAAS,CAAC,mBAAiB,GAAG,iBAAc,CAAC,CAAA;IACzD,CAAC;;ICnFD,SAAS,YAAY;QACnB,IAAI,KAAK,CAAC,iBAAiB,EAAE;YAC3B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;SAChD;IACH,CAAC;IAED;QASE,qBAAY,GAAG,EAAE,KAAK;YACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;YACxB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;YACtB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;YACtB,IAAI,CAAC,aAAa,GAAG,GAAG,CAAA;YACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;SACnB;QACD,uCAAiB,GAAjB,UAAkB,GAAG;YACnB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAA;YAEhC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACtB,IAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAA;YAC9B,IAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;YAChD,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;YACjD,IAAI,CAAC,KAAK,GAAG,OAAO;gBAClB,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC;iBAChC,GAAG,CAAC,KAAK,GAAG,SAAS,GAAG,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAA;SAC7C;QACH,kBAAC;IAAD,CAAC,IAAA;IAED;QAAuCC,qCAAW;QAChD,2BAAY,OAAO,EAAE,KAAK;YAA1B,YACE,kBAAM,EAAC,OAAO,SAAA,EAAC,EAAE,KAAK,CAAC,SAExB;YADC,iBAAM,iBAAiB,aAAC,KAAI,CAAC,CAAA;;SAC9B;QACH,wBAAC;IAAD,CALA,CAAuC,WAAW,GAKjD;IACD,iBAAiB,CAAC,SAAS,GAAGC,MAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACvD,iBAAiB,CAAC,SAAS,CAAC,WAAW,GAAG,iBAAiB,CAAA;IAE3D;QAAgCD,8BAAW;QACzC,oBAAY,GAAG,EAAE,KAAK;YAAtB,YACE,kBAAM,GAAG,EAAE,KAAK,CAAC,SAGlB;YAFCE,MAAQ,CAAC,KAAI,EAAE,GAAG,CAAC,CAAA;YACnB,iBAAM,iBAAiB,aAAC,KAAI,CAAC,CAAA;;SAC9B;QACH,iBAAC;IAAD,CANA,CAAgC,WAAW,GAM1C;IACD,UAAU,CAAC,SAAS,GAAGD,MAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IAChD,UAAU,CAAC,SAAS,CAAC,WAAW,GAAG,UAAU,CAAA;IAE7C;QAAiCD,+BAAW;QAC1C,qBAAY,GAAG,EAAE,GAAG;YAApB,YACE,kBAAM,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,SAGtB;YAFCE,MAAQ,CAAC,KAAI,EAAE,GAAG,CAAC,CAAA;YACnB,iBAAM,iBAAiB,aAAC,KAAI,CAAC,CAAA;;SAC9B;QACH,kBAAC;IAAD,CANA,CAAiC,WAAW,GAM3C;IACD,WAAW,CAAC,SAAS,GAAGD,MAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACjD,WAAW,CAAC,SAAS,CAAC,WAAW,GAAG,WAAW,CAAA;IAE/C;QAEE,0BAAa,OAAO;YAClB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACvB,IAAI,CAAC,OAAO,GAAG,OAAO,GAAG,EAAE,CAAA;SAC5B;QACH,uBAAC;IAAD,CAAC,IAAA;IACD,gBAAgB,CAAC,SAAS,GAAGA,MAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACtD,gBAAgB,CAAC,SAAS,CAAC,WAAW,GAAG,gBAAgB,CAAA;IAEzD;QAEE,wBAAa,OAAO;YAClB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACvB,IAAI,CAAC,OAAO,GAAG,OAAO,GAAG,EAAE,CAAA;SAC5B;QACH,qBAAC;IAAD,CAAC,IAAA;IACD,cAAc,CAAC,SAAS,GAAGA,MAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACpD,cAAc,CAAC,SAAS,CAAC,WAAW,GAAG,cAAc,CAAA;IAErD,SAAS,SAAS,CAAE,KAAK,EAAE,UAAU;QACnC,IAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC/B,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;QACzC,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;QAElD,IAAM,OAAO,GAAGE,KACR,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC;aACrB,GAAG,CAAC,UAAA,UAAU;YACb,IAAM,SAAS,GAAG,CAAC,UAAU,KAAK,UAAU,IAAI,KAAK,GAAG,KAAK,CAAA;YAC7D,IAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;YACpD,IAAM,IAAI,GAAG,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAA;YAClC,OAAO,KAAG,SAAS,GAAG,GAAG,UAAK,IAAM,CAAA;SACrC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAA;QAEb,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,SAAS,SAAS,CAAE,GAAG,EAAE,KAAK;QAC5B,GAAG,GAAG,GAAG,IAAI,EAAE,CAAA;QACf,IAAI,KAAK,CAAC,IAAI,EAAE;YACd,GAAG,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI,CAAA;SAC9B;QACD,IAAI,KAAK,CAAC,IAAI,EAAE;YACd,GAAG,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI,CAAA;SAC9B;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,SAAS,QAAQ,CAAE,MAAM,EAAE,GAAG;QAC5B,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QACjB,IAAM,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAClD,OAAO,KAAK,GAAG,GAAG,CAAA;IACpB,CAAC;;qBCrHwB,SAAc,EAAE,OAAe;QACtD,IAAI,CAAC,SAAS,EAAE;YACd,OAAO,GAAG,OAAO,IAAI,YAAU,SAAS,gBAAa,CAAA;YACrD,MAAM,IAAI,cAAc,CAAC,OAAO,CAAC,CAAA;SAClC;IACH,CAAC;;ICKD;QAGE,eAAa,GAAQ,EAAE,IAAU;YAApB,oBAAA,EAAA,QAAQ;YACnB,IAAM,cAAc,GAAiB;gBACnC,eAAe,EAAE,IAAI;gBACrB,gBAAgB,EAAE,KAAK;gBACvB,cAAc,EAAE,KAAK;gBACrB,MAAM,EAAE,EAAE;gBACV,IAAI,EAAE,EAAE;aACT,CAAA;YACD,IAAI,CAAC,IAAI,GAAGD,MAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;YAC1C,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAA;SAC5B;QACD,sBAAM,GAAN;YACE,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,GAAG,IAAK,OAAAA,MAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,GAAA,EAAED,MAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;SAC9E;QACD,mBAAG,GAAH,UAAK,IAAI;YAAT,iBAIC;YAHC,IAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;YAC1C,IAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAIG,IAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACpE,OAAO,KAAK,CAAC,MAAM,CAAC,UAACC,QAAK,EAAE,GAAG,IAAK,OAAA,KAAI,CAAC,YAAY,CAACA,QAAK,EAAE,GAAG,CAAC,GAAA,EAAE,KAAK,CAAC,CAAA;SAC1E;QACD,mBAAG,GAAH,UAAK,IAAI,EAAE,CAAC;YACV,IAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;YAC1C,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAID,IAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAClE,KAAK,CAAC,IAAI,CAAC,UAAC,GAAG,EAAE,CAAC;gBAChB,IAAI,CAACE,QAAU,CAAC,KAAK,CAAC,EAAE;oBACtB,OAAO,IAAI,CAAA;iBACZ;gBACD,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC1B,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;oBACd,OAAO,IAAI,CAAA;iBACZ;gBACD,IAAI,SAAS,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE;oBAC5B,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;iBAChB;gBACD,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;aACnB,CAAC,CAAA;SACH;QACD,uBAAO,GAAP,UAAS,GAAG;YACV,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;SAClC;QACD,oBAAI,GAAJ,UAAM,GAAG;YACP,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;SAC/B;QACD,mBAAG,GAAH,UAAK,GAAG;YACN,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;gBACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAA;aAC3B;YACD,IAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,KAAK,GAAG,GAAA,CAAC,CAAA;YACzD,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;gBACZ,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC,CAAA;aACnD;YACD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;SACrC;QACD,8BAAc,GAAd,UAAgB,GAAG,EAAEC,SAAsB;YAAtB,0BAAA,EAAAA,aAAU,UAAA,GAAG,IAAI,OAAA,IAAI,GAAA,CAAC;YACzC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;gBAClD,IAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;gBAClC,IAAI,CAACA,SAAM,CAAC,SAAS,CAAC;oBAAE,SAAQ;gBAChC,IAAI,GAAG,IAAI,SAAS,EAAE;oBACpB,OAAO,SAAS,CAAA;iBACjB;aACF;YACD,OAAO,IAAI,CAAA;SACZ;QACD,4BAAY,GAAZ,UAAc,GAAG,EAAE,GAAG;YACpB,IAAI,GAAG,CAAA;YACP,IAAIC,KAAO,CAAC,GAAG,CAAC,EAAE;gBAChB,GAAG,GAAG,SAAS,CAAA;aAChB;iBAAM;gBACL,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;gBACnB,GAAG,GAAG,GAAG,KAAK,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;gBAC/C,IAAIC,UAAY,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE;oBAC3C,GAAG,GAAG,GAAG,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAA;iBACrC;aACF;YACD,IAAID,KAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC9C,MAAM,IAAI,SAAS,CAAC,yBAAuB,GAAK,CAAC,CAAA;aAClD;YACD,OAAO,GAAG,CAAA;SACX;;;;;;;;;QAUD,iCAAiB,GAAjB,UAAmB,GAAG;YACpB,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;YACjB,IAAM,GAAG,GAAG,EAAE,CAAA;YACd,IAAI,IAAI,GAAG,EAAE,CAAA;YACb,IAAI,CAAC,CAAA;YACL,IAAI,CAAC,GAAG,CAAC,CAAA;YACT,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE;gBACrB,QAAQ,GAAG,CAAC,CAAC,CAAC;oBACZ,KAAK,GAAG;wBACN,IAAI,EAAE,CAAA;wBAEN,IAAM,SAAS,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;wBAC5B,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;4BAC1B,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;4BACjC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAc,SAAS,UAAK,GAAK,CAAC,CAAA;4BACnD,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;4BAC1B,IAAI,EAAE,CAAA;4BACN,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;yBACV;6BAAM;4BACL,CAAC,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;4BACjC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,oBAAkB,GAAK,CAAC,CAAA;4BACzC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;4BAC1B,IAAI,CAACE,SAAiB,CAAC,IAAI,CAAC,EAAE;gCAC5B,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;6BAC9B;4BACD,IAAI,EAAE,CAAA;4BACN,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;yBACV;wBACD,MAAK;oBACP,KAAK,GAAG;wBACN,IAAI,EAAE,CAAA;wBACN,CAAC,EAAE,CAAA;wBACH,MAAK;oBACP;wBACE,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAA;wBACd,CAAC,EAAE,CAAA;iBACN;aACF;YACD,IAAI,EAAE,CAAA;YAEN,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;gBACf,MAAM,IAAI,SAAS,CAAC,oBAAiB,GAAG,OAAG,CAAC,CAAA;aAC7C;YACD,OAAO,GAAG,CAAA;YAEV,SAAS,IAAI;gBACX,IAAI,IAAI,CAAC,MAAM;oBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC/B,IAAI,GAAG,EAAE,CAAA;aACV;SACF;QACH,YAAC;IAAD,CAAC,IAAA;IAED,SAAS,QAAQ,CAAE,GAAG;QACpB,IAAID,UAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YAC/B,OAAO,GAAG,CAAC,SAAS,EAAE,CAAA;SACvB;QACD,IAAIA,UAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC9B,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAA;SACtB;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,SAAS,QAAQ,CAAE,GAAG;QACpB,IAAI,CAACD,KAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,GAAG,CAAC,IAAI,CAAA;QACvC,IAAIG,OAAS,CAAC,GAAG,CAAC,IAAIC,QAAU,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC,MAAM,CAAA;QACxD,OAAO,GAAG,CAAC,IAAI,CAAA;IACjB,CAAC;IAED,SAAS,iBAAiB,CAAE,GAAG,EAAE,KAAK;QACpC,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;gBAClB,KAAK,EAAE,CAAA;aACR;YACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;gBAClB,KAAK,EAAE,CAAA;gBACP,IAAI,KAAK,KAAK,CAAC,EAAE;oBACf,OAAO,CAAC,CAAA;iBACT;aACF;SACF;QACD,OAAO,CAAC,CAAC,CAAA;IACX,CAAC;;ICtLD,SAAS,UAAU,CAAE,IAAI,EAAE,IAAI;QAC7B,IAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAC3C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAEhB,IAAM,IAAI,GAAG,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QACrD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QAExC,IAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;QACrC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAA;QACb,IAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAA;QACvB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QAEtB,OAAO,QAAQ,CAAA;IACjB,CAAC;AAED,aAAgB,OAAO,CAAE,QAAQ,EAAE,IAAI,EAAE,OAAO;QAC9C,IAAI,GAAG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAA;QAC3B,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;YACjB,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;SACf;QACD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE;YACrC,IAAI,IAAI,GAAG,CAAA;SACZ;QACD,IAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QACtC,OAAO,GAAG,CAAC,OAAO,CAAC,2BAA2B,EAAE,UAAC,GAAG,EAAE,MAAM,EAAE,IAAI;YAChE,IAAMC,OAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;YAClC,IAAI,QAAQ,CAAC,IAAI,CAACA,OAAI,CAAC,EAAE;gBACvB,OAAO,GAAG,CAAA;aACX;YACD,OAAO,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAA;SACvC,CAAC,CAAA;IACJ,CAAC;AAED,aAAsB,IAAI,CAAE,GAAG;;;gBAC7B,sBAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;wBACjC,IAAM,GAAG,GAAG,IAAI,cAAc,EAAE,CAAA;wBAChC,GAAG,CAAC,MAAM,GAAG;4BACX,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;gCACzC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;6BAC1B;iCAAM;gCACL,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAA;6BAClC;yBACF,CAAA;wBACD,GAAG,CAAC,OAAO,GAAG;4BACZ,MAAM,CAAC,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC,CAAA;yBACtE,CAAA;wBACD,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;wBACpB,GAAG,CAAC,IAAI,EAAE,CAAA;qBACX,CAAC,EAAA;;;KACH;;aCjDuB,cAAc,CAAE,MAAM,EAAE,OAAO;QACrD,OAAO,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAA;QAC3C,IAAI,KAAK,GAAG,KAAK,CAAA;QAEjB,MAAM,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,CAAC;YACtB,IAAI,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE;gBACzC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;aACxC;YAED,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;gBAAE,KAAK,GAAG,IAAI,CAAA;YAC9D,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,KAAK,GAAG,KAAK,CAAA;YAElE,IAAI,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE;gBAC1C,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;aACzC;SACF,CAAC,CAAA;IACJ,CAAC;IAED,SAAS,cAAc,CAAE,KAAK,EAAE,KAAK,EAAE,OAAO;QAC5C,IAAI,KAAK;YAAE,OAAO,KAAK,CAAA;QACvB,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,aAAa,CAAA;QACzE,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,eAAe,CAAA;IAC/E,CAAC;IAED,SAAS,eAAe,CAAE,KAAK,EAAE,KAAK,EAAE,OAAO;QAC7C,IAAI,KAAK;YAAE,OAAO,KAAK,CAAA;QACvB,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC,UAAU,IAAI,OAAO,CAAC,cAAc,CAAA;QAC3E,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAA;IACjF,CAAC;IAED,SAAS,QAAQ,CAAE,KAAK,EAAE,MAAM;QAC9B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,OAAM;QAE3C,IAAM,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,YAAY,CAAA;QAC7C,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAC9C,CAAC;IAED,SAAS,SAAS,CAAE,KAAK,EAAE,MAAM;QAC/B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,OAAM;QAE3C,IAAM,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,eAAe,CAAA;QACjD,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAC/C,CAAC;;aCpCe,KAAK,CAAE,KAAK,EAAE,IAAI,EAAE,OAAO;QACzC,MAAM,CAACD,QAAU,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC,CAAA;QAE1C,IAAM,OAAO,GAAG,4CAA4C,CAAA;QAC5D,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,IAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;QACpC,IAAI,YAAY,GAAG,CAAC,CAAA;QACpB,IAAM,MAAM,GAAG,EAAE,CAAA;QAEjB,KAAK,IAAI,KAAK,SAAA,GAAG,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE;YAC/E,IAAI,KAAK,CAAC,KAAK,GAAG,YAAY,EAAE;gBAC9B,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;aACvD;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;kBAChB,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC;kBACrD,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;SAC7D;QACD,IAAI,KAAK,CAAC,MAAM,GAAG,YAAY,EAAE;YAC/B,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;SACxD;QACD,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC/B,OAAO,MAAM,CAAA;QAEb,SAAS,aAAa,CAAE,GAAG,EAAEP,QAAK,EAAE,GAAG;YACrC,IAAM,KAAK,GAAGA,QAAK,CAAC,KAAK,CAACS,OAAe,CAAC,CAAA;YAC1C,IAAM,KAAK,GAAG;gBACZ,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;gBACzB,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK;gBACpC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK;gBACnC,GAAG,KAAA;gBACH,KAAK,UAAA;gBACL,KAAK,OAAA;gBACL,IAAI,MAAA;aACL,CAAA;YACD,IAAI,CAAC,KAAK,EAAE;gBACV,MAAM,IAAI,iBAAiB,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAA;aACzD;YACD,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YACrB,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YACrB,OAAO,KAAK,CAAA;SACb;QAED,SAAS,eAAe,CAAE,GAAG,EAAET,QAAK,EAAE,GAAG;YACvC,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;gBACzB,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK;gBACpC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK;gBACnC,GAAG,KAAA;gBACH,KAAK,UAAA;gBACL,KAAK,OAAA;gBACL,IAAI,MAAA;aACL,CAAA;SACF;QAED,SAAS,cAAc,CAAE,KAAK,EAAE,GAAG;YACjC,IAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YAC5C,UAAU,GAAGD,IAAM,CAAC,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAA;YAEtD,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,GAAG,EAAE,YAAY;gBACjB,KAAK,EAAE,YAAY;aACpB,CAAA;SACF;IACH,CAAC;IAED,SAAS,UAAU,CAAE,IAAI;QACvB,IAAI,gBAAgB,GAAG,CAAC,CAAA;QACxB,IAAI,cAAc,GAAG,CAAC,CAAC,CAAA;QAEvB,OAAO;YACL,GAAG,EAAE,UAAU,GAAG;gBAChB,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAC7D,gBAAgB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;gBACpC,cAAc,GAAG,GAAG,CAAA;gBACpB,OAAO,gBAAgB,GAAG,CAAC,CAAA;aAC5B;SACF,CAAA;IACH,CAAC;;wBCzFwB,QAAQ;QAC/B,OAAO;YACL,IAAI,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,CAAC,GAAA;YACvB,IAAI,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,CAAC,GAAA;YACvB,GAAG,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAA;YAChD,GAAG,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAA;YAChD,IAAI,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,GAAA;YAClD,IAAI,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,GAAA;YAClD,UAAU,EAAE,UAAC,CAAC,EAAE,CAAC;gBACf,IAAI,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAA;gBACpB,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU;oBAAE,OAAO,KAAK,CAAA;gBACjD,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;aACzB;YACD,KAAK,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAA;YAC3C,IAAI,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAA;SAC3C,CAAA;IACH,CAAC;;ICZD,IAAMW,WAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAA;AAErC,aAAgB,OAAO,CAAE,GAAG,EAAE,KAAK;QACjC,MAAM,CAAC,KAAK,EAAE,oCAAoC,CAAC,CAAA;QACnD,IAAM,WAAW,GAAGC,SAAiB,CAAA;QACrC,IAAI,KAAK,CAAA;QACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC3C,IAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;YACjC,IAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAKC,aAAqB,CAAC,MAAM,UAAK,UAAU,CAAC,MAAM,UAAKA,aAAqB,CAAC,MAAM,OAAI,CAAC,CAAA;YACtH,KAAK,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG;gBAC9B,IAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;gBAClC,IAAM,EAAE,GAAGF,WAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;gBACrC,IAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;gBAClC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;aAChB;SACF;QAED,KAAK,KAAK,GAAG,GAAG,CAAC,KAAK,CAACG,SAAiB,CAAC,GAAG;YAC1C,IAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YACtC,IAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YACvC,IAAM,KAAK,GAAG,EAAE,CAAA;YAChB,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE;gBAChC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;aACd;YACD,OAAO,KAAK,CAAA;SACb;QAED,OAAO,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC9B,CAAC;AAED,aAAgB,SAAS,CAAE,GAAG,EAAE,KAAK;QACnC,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAA;QACvB,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAA;QAE1B,IAAIC,SAAiB,CAAC,GAAG,CAAC,EAAE;YAC1B,OAAOC,YAAoB,CAAC,GAAG,CAAC,CAAA;SACjC;QACD,IAAIC,UAAkB,CAAC,GAAG,CAAC,EAAE;YAC3B,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;SACtB;QACD,MAAM,IAAI,SAAS,CAAC,kBAAgB,GAAG,eAAY,CAAC,CAAA;IACtD,CAAC;AAED,aAAgB,QAAQ,CAAE,GAAG;QAC3B,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACtB,CAAC;AAED,aAAgB,OAAO,CAAE,GAAG;QAC1B,OAAO,GAAG,KAAK,KAAK,IAAI,SAAS,KAAK,GAAG,IAAI,GAAG,KAAK,IAAI,CAAA;IAC3D,CAAC;;IChDD,IAAM,MAAM,GAAG;QACb,eAAe,EAAE,UAAgB,SAAS,EAAE,KAAK;;gBAiB/C,SAAe,cAAc,CAAE,QAAQ;;;;;;0CACjC,QAAQ,CAAC,IAAI,KAAK,KAAK,CAAA,EAAvB,wBAAuB;oCACT,qBAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAA;;oCAA/C,OAAO,GAAG,SAAqC;oCACrD,sBAAO,OAAO,KAAK,SAAS,GAAG,EAAE,GAAG,OAAO,EAAA;;oCAE7C,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE;wCAC7B,sBAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAA;qCACzC;oCACD,sBAAO,QAAQ,CAAC,KAAK,EAAA;;;;iBACtB;;;;;4BAzBD,MAAM,CAAC,KAAK,EAAE,0CAA0C,CAAC,CAAA;4BAErD,IAAI,GAAG,EAAE,CAAA;kCACc,EAAT,uBAAS;;;kCAAT,uBAAS,CAAA;4BAAhB,GAAG;;;;4BAEV,KAAA,IAAI,CAAA;4BAAI,qBAAM,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAA;;4BAA5C,IAAI,GAAJ,KAAQ,SAAoC,CAAA;;;;4BAE5C,IAAI,GAAC,YAAY,gBAAgB,EAAE;gCACjC,GAAC,CAAC,YAAY,GAAG,IAAI,CAAA;gCACrB,MAAM,GAAC,CAAA;6BACR;4BACD,MAAM,GAAC,YAAY,WAAW,GAAG,GAAC,GAAG,IAAI,WAAW,CAAC,GAAC,EAAE,GAAG,CAAC,CAAA;;4BAR9C,IAAS,CAAA;;gCAW3B,sBAAO,IAAI,EAAA;;;;SAYZ;QAED,SAAS,EAAE,UAAgB,QAAQ,EAAE,KAAK;;;oBACxC,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;wBAChC,MAAM,IAAI,gBAAgB,CAAC,UAAU,CAAC,CAAA;qBACvC;oBACD,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE;wBAC7B,MAAM,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAA;qBACpC;oBACD,sBAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAA;;;SAC9B;QAED,WAAW,EAAE,UAAgB,QAAQ,EAAE,KAAK;;;;oBACpC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;oBAC/C,sBAAO,OAAO,KAAK,SAAS,GAAG,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,EAAA;;;SACvD;QAED,SAAS,EAAE,UAAU,QAAQ,EAAE,KAAK;YAClC,MAAM,CAAC,KAAK,EAAE,sCAAsC,CAAC,CAAA;YACrD,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,CAC5B,UAAC,IAAI,EAAE,MAAM,IAAK,OAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAA,EAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;SACpC;KACF,CAAA;AAED;QACE,IAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;QAC/B,OAAO,QAAQ,CAAA;IACjB,CAAC;;ICxDD,SAASC,MAAI,CAAE,MAAM,EAAE,KAAK;QAC1B,IAAM,GAAG,GAAG,EAAE,CAAA;QACd,IAAI,KAAK,CAAA;QACT,WAAW,CAAC,SAAS,GAAG,CAAC,CAAA;QACzB,QAAQ,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG;YACzC,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YAClB,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YAClB,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;SAC7B;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;AAED;QACE,IAAI,QAAQ,GAAG,EAAE,CAAA;QAEjB,IAAM,YAAY,GAAG;YACnB,MAAM,EAAE,UAAgB,KAAK;;;;wBACrB,GAAG,GAAGA,MAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;wBAClC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAA;wBACzB,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE;4BACrC,sBAAO,EAAE,EAAA;yBACV;wBACD,sBAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,EAAA;;;aAC/B;YACD,KAAK,EAAE,UAAU,KAAK,EAAE,MAAM;gBAC5B,IAAI,CAAC,IAAI,GAAG,KAAK,CAAA;gBACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;gBAClB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;gBAEtB,IAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACnC,MAAM,CAAC,OAAO,EAAE,SAAO,IAAI,CAAC,IAAI,eAAY,CAAC,CAAA;gBAC7C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;gBAC9B,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;oBACtB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;iBAClC;aACF;SACF,CAAA;QAED,SAAS,QAAQ,CAAE,IAAI,EAAE,GAAG;YAC1B,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,CAAA;SACrB;QAED,SAAS,SAAS,CAAE,KAAK,EAAE,MAAM;YAC/B,IAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;YACrC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;YAC7B,OAAO,QAAQ,CAAA;SAChB;QAED,SAAS,KAAK;YACZ,QAAQ,GAAG,EAAE,CAAA;SACd;QAED,OAAO;YACL,SAAS,WAAA;YACT,QAAQ,UAAA;YACR,KAAK,OAAA;SACN,CAAA;IACH,CAAC;;ICzDD,IAAM,OAAO,GAAG,IAAI,MAAM,CAAC,KAAGC,KAAa,CAAC,MAAQ,EAAE,GAAG,CAAC,CAAA;AAE1D,qBAAyB,OAAO;QAC9B,OAAO,GAAG,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;QAC7B,IAAI,OAAO,GAAG,EAAE,CAAA;QAEhB,IAAM,eAAe,GAAG;YACtB,MAAM,EAAE,UAAU,MAAM,EAAE,KAAK;gBAC7B,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,GAAA,CAAC,CAAA;gBACxD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;gBACpB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;aACrC;YACD,KAAK,EAAE,UAAU,GAAG;gBAClB,IAAI,KAAK,GAAGC,UAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACxC,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,GAAG,CAAC,CAAA;gBAEvC,IAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;gBACrB,IAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;gBAC9B,IAAMjB,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;gBAC5B,IAAI,OAAOA,SAAM,KAAK,UAAU,EAAE;oBAChC,IAAI,OAAO,CAAC,cAAc,EAAE;wBAC1B,MAAM,IAAI,SAAS,CAAC,uBAAqB,IAAM,CAAC,CAAA;qBACjD;oBACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;oBAChB,IAAI,CAAC,MAAM,GAAG,UAAA,CAAC,IAAI,OAAA,CAAC,GAAA,CAAA;oBACpB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAA;oBACd,OAAO,IAAI,CAAA;iBACZ;gBAED,IAAM,IAAI,GAAG,EAAE,CAAA;gBACf,QAAQ,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG;oBAC7C,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;oBAClB,IAAM,EAAE,GAAG,IAAI,MAAM,CAAI,CAAC,UAAO,EAAE,GAAG,CAAC,CAAA;oBACvC,IAAM,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;oBACrC,IAAM,iBAAiB,GAAG,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAA;oBACpE,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAI,CAAC,MAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;iBACvD;gBAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;gBAChB,IAAI,CAAC,MAAM,GAAGA,SAAM,CAAA;gBACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;gBAEhB,OAAO,IAAI,CAAA;aACZ;SACF,CAAA;QAED,SAAS,SAAS,CAAE,GAAG;YACrB,IAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC,CAAA;YACxC,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;SAC3B;QAED,SAAS,QAAQ,CAAE,IAAI,EAAEA,SAAM;YAC7B,OAAO,CAAC,IAAI,CAAC,GAAGA,SAAM,CAAA;SACvB;QAED,SAAS,KAAK;YACZ,OAAO,GAAG,EAAE,CAAA;SACb;QAED,OAAO;YACL,SAAS,WAAA,EAAE,QAAQ,UAAA,EAAE,KAAK,OAAA;SAC3B,CAAA;IACH,CAAC;;qBC/DwB,GAAG,EAAE,MAAM;QAClC;YAIE,qBAAa,MAAM;gBACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;gBACpB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAA;aACnB;YACD,wBAAE,GAAF,UAAI,IAAI,EAAE,EAAE;gBACV,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;gBACxB,OAAO,IAAI,CAAA;aACZ;YACD,6BAAO,GAAP,UAAS,KAAa,EAAE,GAAS;gBAC/B,IAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;gBAC9B,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE;oBAC3B,CAAC,CAAC,GAAG,CAAC,CAAA;oBACN,OAAO,IAAI,CAAA;iBACZ;aACF;YACD,2BAAK,GAAL;gBACE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;gBACrB,IAAI,KAAK,CAAA;gBACT,OAAO,CAAC,IAAI,CAAC,aAAa,KAAK,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE;oBAC3D,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;wBAAE,SAAQ;oBAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;wBACpB,IAAI,CAAC,OAAO,CAAC,SAAO,KAAK,CAAC,IAAM,EAAE,KAAK,CAAC,EAAE;wBAC5C,SAAQ;qBACT;oBACD,IAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;oBAC/C,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;iBACnC;gBACD,IAAI,CAAC,IAAI,CAAC,aAAa;oBAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;gBAC5C,OAAO,IAAI,CAAA;aACZ;YACD,0BAAI,GAAJ;gBACE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;gBACzB,OAAO,IAAI,CAAA;aACZ;YACH,kBAAC;SAAA,IAAA;QAED,SAAS,KAAK,CAAE,MAAM;YACpB,IAAI,KAAK,CAAA;YACT,IAAM,SAAS,GAAG,EAAE,CAAA;YACpB,QAAQ,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG;gBAC/B,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;aAC1C;YACD,OAAO,SAAS,CAAA;SACjB;QAED,SAAS,UAAU,CAAE,KAAK,EAAE,MAAM;YAChC,IAAI;gBACF,IAAI,GAAG,GAAG,IAAI,CAAA;gBACd,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE;oBACxB,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;iBAC9B;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;oBACjC,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;iBAC9B;qBAAM;oBACL,GAAG,GAAG,KAAK,CAAA;iBACZ;gBACD,GAAG,CAAC,KAAK,GAAG,KAAK,CAAA;gBACjB,OAAO,GAAG,CAAA;aACX;YAAC,OAAO,CAAC,EAAE;gBACV,MAAM,IAAI,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;aAC/B;SACF;QAED,SAAS,QAAQ,CAAE,KAAK,EAAE,MAAM;YAC9B,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;gBAAE,OAAO,KAAK,CAAA;YACrE,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;SACpC;QAED,SAAS,UAAU,CAAE,GAAG;YACtB,IAAI,KAAK,GAAGkB,UAAkB,CAAC,GAAG,CAAC,CAAA;YACnC,MAAM,CAAC,KAAK,EAAE,2BAAyB,GAAK,CAAC,CAAA;YAE7C,IAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YACxB,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;YAE/C,IAAM,OAAO,GAAG,EAAE,CAAA;YAClB,QAAQ,KAAK,GAAGC,MAAc,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;gBACzC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;aAChC;YAED,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,OAAO;gBAChB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,GAAA,CAAC;aACnD,CAAA;SACF;QAED,SAAS,WAAW,CAAE,MAAM;YAC1B,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,CAAA;SAC/B;QAED,OAAO;YACL,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,WAAW,aAAA;YACX,UAAU,YAAA;SACX,CAAA;IACH,CAAC;;ICzGD;;;;;;AAMA,IAQA;;;;;;AAMA,aAAgB,SAAS,CAAE,QAAQ,EAAE,QAAQ;QAC3C,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACjC,IAAM,MAAM,GAAG,EAAE,CAAA;QACjB,QAAQ,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,GAAG;YAClC,GAAG,GAAG,GAAG;iBACN,IAAI,CAAC,cAAM,OAAA,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAA,CAAC;iBACzC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAA,CAAC,CAAA;SAC7B,CAAC,CAAA;QACF,OAAO,GAAG,CAAC,IAAI,CAAC,cAAM,OAAA,MAAM,GAAA,CAAC,CAAA;IAC/B,CAAC;;kBCxBwB,MAAM,EAAE,MAAM;QACrC,IAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAA;QACtD,IAAM,EAAE,GAAG,IAAI,MAAM,CAAC,OAAK,UAAU,CAAC,MAAM,gBAAa;aACrD,MAAI,KAAK,CAAC,MAAM,MAAG,CAAA;aACnB,YAAU,IAAI,CAAC,MAAM,OAAI,CAAA;YACzB,qBAAqB;aACrB,YAAU,IAAI,CAAC,MAAM,QAAK,CAAA,CAAC,CAAA;QAE/B,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,CAAC,CAAA;QAE5C,SAAS,KAAK,CAAE,QAAQ,EAAE,YAAY;YAAtC,iBAqBC;YApBC,IAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YACpC,MAAM,CAAC,KAAK,EAAE,kBAAgB,QAAQ,CAAC,GAAK,CAAC,CAAA;YAC7C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YACxB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YAC1B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAE1B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;YACnB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;YAEvB,IAAI,CAAC,CAAA;YACL,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;iBACnD,EAAE,CAAC,OAAO,EAAE,cAAM,QAAC,CAAC,GAAG,KAAI,CAAC,SAAS,IAAC,CAAC;iBACvC,EAAE,CAAC,UAAU,EAAE,cAAM,QAAC,CAAC,GAAG,KAAI,CAAC,aAAa,IAAC,CAAC;iBAC9C,EAAE,CAAC,YAAY,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;iBACrC,EAAE,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;iBAClC,EAAE,CAAC,KAAK,EAAE;gBACT,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;aAClD,CAAC,CAAA;YAEJ,MAAM,CAAC,KAAK,EAAE,CAAA;SACf;QACD,SAAe,MAAM,CAAE,KAAK,EAAEJ,OAAI;;;;;;;4BAC5B,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;4BAEvD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;gCACxB,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;oCACjD,UAAU,GAAG,CAAC,UAAU,CAAC,CAAA;iCAC1B;qCAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,EAAE;oCAC/B,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,UAAC,GAAG,IAAK,OAAA,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,GAAA,CAAC,CAAA;iCAC1E;6BACF;4BACD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;gCAC9C,sBAAO,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,EAAA;6BAClE;4BAEK,MAAM,GAAGA,OAAI,CAAC,MAAM,IAAI,CAAC,CAAA;4BACzB,KAAK,GAAG,CAACA,OAAI,CAAC,KAAK,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,GAAGA,OAAI,CAAC,KAAK,CAAA;4BAEzE,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAA;4BACrD,IAAI,IAAI,CAAC,QAAQ;gCAAE,UAAU,CAAC,OAAO,EAAE,CAAA;4BAEjC,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,UAAC,IAAI,EAAE,CAAC;gCACtC,IAAM,GAAG,GAAG,EAAE,CAAA;gCACd,GAAG,CAAC,KAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;gCACzB,GAAG,CAAC,OAAO,GAAG;oCACZ,KAAK,EAAE,CAAC,KAAK,CAAC;oCACd,KAAK,EAAE,CAAC,GAAG,CAAC;oCACZ,MAAM,EAAE,CAAC;oCACT,IAAI,EAAE,CAAC,KAAK,UAAU,CAAC,MAAM,GAAG,CAAC;oCACjC,MAAM,EAAE,UAAU,CAAC,MAAM;oCACzB,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC;oCAC7B,OAAO,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC;iCACnC,CAAA;gCACD,OAAO,GAAG,CAAA;6BACX,CAAC,CAAA;4BAEE,IAAI,GAAG,EAAE,CAAA;4BACT,QAAQ,GAAG,KAAK,CAAA;4BACpB,qBAAM,SAAS,CAAC,QAAQ,EAAE,UAAM,OAAO;;;;;gDACrC,IAAI,QAAQ;oDAAE,sBAAM;gDAEpB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;;;;gDAEjB,KAAA,IAAI,CAAA;gDAAI,qBAAM,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAA;;gDAApE,IAAI,GAAJ,KAAQ,SAA4D,CAAA;;;;gDAEpE,IAAI,GAAC,YAAY,gBAAgB,EAAE;oDACjC,IAAI,IAAI,GAAC,CAAC,YAAY,CAAA;oDACtB,IAAI,GAAC,CAAC,OAAO,KAAK,OAAO,EAAE;wDACzB,QAAQ,GAAG,IAAI,CAAA;qDAChB;iDACF;;oDAAM,MAAM,GAAC,CAAA;;;gDAEhB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;;;;qCACnB,CAAC,EAAA;;4BAfF,SAeE,CAAA;4BACF,sBAAO,IAAI,EAAA;;;;SACZ;IACH,CAAC;;qBCxFwB,MAAM,EAAE,MAAM;QACrC,IAAM,EAAE,GAAG,IAAI,MAAM,CAAC,MAAI,UAAU,CAAC,MAAM,iBAAc,CAAC,CAAA;QAClD,IAAA,sCAAW,CAAiB;QAEpC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE;YAC3B,KAAK,EAAE,UAAU,KAAK;gBACpB,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;gBAClC,MAAM,CAAC,KAAK,EAAE,mBAAiB,KAAK,CAAC,GAAK,CAAC,CAAA;gBAC3C,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;gBACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;aACtB;YACD,MAAM,EAAE,UAAU,KAAK;gBACrB,IAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;gBAC/B,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;gBACnD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACf,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;aAC3B;SACF,CAAC,CAAA;IACJ,CAAC;;sBClBwB,MAAM,EAAE,MAAM;QACrC,IAAM,EAAE,GAAG,IAAI,MAAM,CAAC,MAAI,UAAU,CAAC,MAAM,MAAG,CAAC,CAAA;QACvC,IAAA,wCAAY,CAAiB;QAErC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE;YAC5B,KAAK,EAAE,UAAU,QAAQ,EAAE,YAAY;gBAAhC,iBAcN;gBAbC,IAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;gBACrC,MAAM,CAAC,KAAK,EAAK,QAAQ,CAAC,IAAI,0BAAuB,CAAC,CAAA;gBAEtD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;gBACxB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;gBAEnB,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;gBACtD,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,UAAA,KAAK,IAAI,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;qBAChD,EAAE,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,KAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;qBAC/C,EAAE,CAAC,KAAK,EAAE,UAAA,CAAC;oBACV,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;iBAClD,CAAC,CAAA;gBACJ,MAAM,CAAC,KAAK,EAAE,CAAA;aACf;YACD,MAAM,EAAE,UAAgB,KAAK,EAAEA,OAAI;;;;;oCACpB,qBAAM,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAA;;gCAAnE,IAAI,GAAG,SAA4D;gCACnE,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;gCAChC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;gCACzB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;;;;;aAChB;SACF,CAAC,CAAA;IACJ,CAAC;;mBC/BwB,MAAM,EAAE,MAAM;QACrC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE;YAEzB,KAAK,EAAE,UAAU,QAAQ,EAAE,YAAY;gBAAhC,iBAqBN;gBApBC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;gBACzB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;gBACf,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;gBAEvB,IAAI,CAAC,GAAG,EAAE,CAAA;gBACV,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;qBACnD,EAAE,CAAC,UAAU,EAAE,UAAA,KAAK;oBACnB,KAAI,CAAC,KAAK,CAAC,IAAI,CAAC;wBACd,GAAG,EAAE,KAAK,CAAC,IAAI;wBACf,SAAS,EAAE,CAAC,GAAG,EAAE;qBAClB,CAAC,CAAA;iBACH,CAAC;qBACD,EAAE,CAAC,UAAU,EAAE,cAAM,QAAC,CAAC,GAAG,KAAI,CAAC,aAAa,IAAC,CAAC;qBAC9C,EAAE,CAAC,aAAa,EAAE,UAAA,KAAK,IAAI,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;qBACzC,EAAE,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;qBAClC,EAAE,CAAC,KAAK,EAAE,UAAA,CAAC;oBACV,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;iBAClD,CAAC,CAAA;gBAEJ,MAAM,CAAC,KAAK,EAAE,CAAA;aACf;YAED,MAAM,EAAE,UAAU,KAAK,EAAE,IAAI;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC1C,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;oBAC5B,IAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;oBAC7C,IAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;oBAC7C,IAAI,GAAG,KAAK,IAAI,EAAE;wBAChB,OAAO,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;qBAChE;iBACF;gBACD,OAAO,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;aAClE;SACF,CAAC,CAAA;IACJ,CAAC;;sBCtCwB,MAAM;QAC7B,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE;YAC5B,KAAK,EAAE,UAAU,QAAQ,EAAE,YAAY;gBACrC,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;gBACtD,MAAM;qBACH,EAAE,CAAC,OAAO,EAAE,UAAA,KAAK;oBAChB,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;wBAAE,MAAM,CAAC,IAAI,EAAE,CAAA;iBAC/C,CAAC;qBACD,EAAE,CAAC,KAAK,EAAE,UAAA,CAAC;oBACV,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;iBAClD,CAAC,CAAA;gBACJ,MAAM,CAAC,KAAK,EAAE,CAAA;aACf;SACF,CAAC,CAAA;IACJ,CAAC;;ICXD,IAAM,YAAY,GAAG,SAAS,CAAA;AAE9B,sBAAyB,MAAM,EAAE,MAAM;QACrC,IAAM,MAAM,GAAG,IAAI,MAAM,CAAC,cAAY,KAAK,CAAC,MAAM,MAAG,CAAC,CAAA;QAEtD,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE;YAC5B,KAAK,EAAE,UAAU,KAAK;gBACpB,IAAI,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACzC,IAAI,KAAK,EAAE;oBACT,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;iBAC5B;gBAED,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAC9B,IAAI,KAAK,EAAE;oBACT,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;iBACtB;gBAED,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAC/B,IAAI,KAAK,EAAE;oBACT,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;iBACrB;aACF;YACD,MAAM,EAAE,UAAgB,KAAK,EAAEA,OAAI;;;;;;qCAE7B,KAAK,CAAC,IAAI,CAAC,eAAe,EAA1B,wBAA0B;qCACxB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAA3B,wBAA2B;gCACvB,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;gCAC7B,qBAAM,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,EAAA;;gCAA5E,QAAQ,GAAG,SAAiE,CAAA;;;gCAE5E,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;;;;gCAGhD,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAA;;;gCAE7B,MAAM,CAAC,QAAQ,EAAE,oCAAoC,CAAC,CAAA;gCAEhD,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAA;gCAChC,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAA;gCAE5C,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;gCACtB,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;gCAC/B,IAAI,IAAI,CAAC,IAAI,EAAE;oCACbA,OAAI,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;iCACpD;gCACiB,qBAAM,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAA;;gCAA/D,SAAS,GAAG,SAAmD;gCACrE,KAAK,CAAC,IAAI,CAACA,OAAI,CAAC,CAAA;gCACH,qBAAM,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,EAAA;;gCAA9D,IAAI,GAAG,SAAuD;gCACpE,KAAK,CAAC,GAAG,CAACA,OAAI,CAAC,CAAA;gCACf,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY,CAAA;gCAChC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,eAAe,CAAA;gCACtC,sBAAO,IAAI,EAAA;;;;aACZ;SACF,CAAC,CAAA;IACJ,CAAC;;wBCpDwB,MAAM,EAAE,MAAM;QAC/B,IAAA,iBAA4D,EAA1D,8BAAY,EAAE,4BAAW,EAAE,kCAA+B,CAAA;QAElE,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE;YAC9B,KAAK,EAAE,UAAU,KAAK;gBACpB,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;gBAC1C,MAAM,CAAC,KAAK,EAAE,wBAAsB,KAAK,CAAC,IAAM,CAAC,CAAA;gBACjD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;aACzB;YACD,MAAM,EAAE,UAAU,KAAK,EAAEA,OAAI;gBAC3B,IAAI,OAAO,GAAG,KAAK,CAAC,cAAc,CAChC,IAAI,CAAC,QAAQ,EACb,UAAA,GAAG;oBACD,IAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;oBACxC,OAAO,KAAK,KAAK,YAAY,IAAI,KAAK,KAAK,WAAW,CAAA;iBACvD,CACF,CAAA;gBACD,IAAI,CAAC,OAAO,EAAE;oBACZ,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,CAAA;oBAChC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;iBACvB;gBACD,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;oBAC9C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;iBAC3B;gBACD,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;aAChC;SACF,CAAC,CAAA;IACJ,CAAC;;oBC5BwB,MAAM,EAAE,MAAM;QACrC,IAAM,OAAO,GAAG,IAAI,MAAM,CAAC,UAAQK,KAAM,CAAC,MAAM,sBAAmB,CAAC,CAAA;QACpE,IAAM,YAAY,GAAG,IAAI,MAAM,CAACA,KAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAEnD,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE;YAE1B,KAAK,EAAE,UAAU,QAAQ,EAAE,YAAY;gBACrC,IAAI,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;gBACvC,MAAM,CAAC,KAAK,EAAE,kBAAgB,QAAQ,CAAC,GAAK,CAAC,CAAA;gBAE7C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;gBAC3B,IAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;gBAE3B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;gBAEpB,QAAQ,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG;oBAC9C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;iBAC/B;gBACD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,uBAAqB,QAAQ,CAAC,GAAK,CAAC,CAAA;aACpE;YAED,MAAM,EAAE,UAAU,KAAK,EAAEL,OAAI;gBAC3B,IAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;gBACjD,IAAM,WAAW,GAAG,WAAS,KAAK,MAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBAEjE,IAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAA;gBAC1D,IAAI,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;gBAE7B,IAAI,GAAG,KAAK,SAAS,EAAE;oBACrB,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;iBAC9B;gBAED,IAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;gBACtC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAA;gBACxC,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAA;gBAEzB,OAAO,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;aAC1C;SACF,CAAC,CAAA;IACJ,CAAC;;iBC1CwB,MAAM,EAAE,MAAM;QACrC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE;YAEvB,KAAK,EAAE,UAAU,QAAQ,EAAE,YAAY;gBAAhC,iBAwBN;gBAvBC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAA;gBAClB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;gBAEvB,IAAI,CAAC,CAAA;gBACL,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;qBACnD,EAAE,CAAC,OAAO,EAAE,cAAM,OAAA,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACpC,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,SAAS,GAAG,CAAC,GAAG,EAAE,CAAC;iBACpB,CAAC,GAAA,CAAC;qBACF,EAAE,CAAC,WAAW,EAAE,UAAA,KAAK;oBACpB,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;wBACjB,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,SAAS,EAAE,CAAC,GAAG,EAAE;qBAClB,CAAC,CAAA;iBACH,CAAC;qBACD,EAAE,CAAC,UAAU,EAAE,cAAM,QAAC,CAAC,GAAG,KAAI,CAAC,aAAa,IAAC,CAAC;qBAC9C,EAAE,CAAC,WAAW,EAAE,UAAA,KAAK,IAAI,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;qBACvC,EAAE,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;qBAClC,EAAE,CAAC,KAAK,EAAE,UAAA,CAAC;oBACV,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;iBAClD,CAAC,CAAA;gBAEJ,MAAM,CAAC,KAAK,EAAE,CAAA;aACf;YAED,MAAM,EAAE,UAAU,KAAK,EAAE,IAAI;gBAC3B,KAAqB,UAAa,EAAb,KAAA,IAAI,CAAC,QAAQ,EAAb,cAAa,EAAb,IAAa,EAAE;oBAA/B,IAAM,MAAM,SAAA;oBACf,IAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;oBAC/C,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;wBACzB,OAAO,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;qBAChE;iBACF;gBACD,OAAO,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;aAClE;SACF,CAAC,CAAA;IACJ,CAAC;;wBCnCwB,MAAM,EAAE,MAAM;QAC/B,IAAA,iBAA4D,EAA1D,8BAAY,EAAE,4BAAW,EAAE,kCAA+B,CAAA;QAElE,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE;YAC9B,KAAK,EAAE,UAAU,KAAK;gBACpB,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;gBAC1C,MAAM,CAAC,KAAK,EAAE,wBAAsB,KAAK,CAAC,IAAM,CAAC,CAAA;gBACjD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;aACzB;YACD,MAAM,EAAE,UAAU,KAAK,EAAEA,OAAI;gBAC3B,IAAI,OAAO,GAAG,KAAK,CAAC,cAAc,CAChC,IAAI,CAAC,QAAQ,EACb,UAAA,GAAG;oBACD,IAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;oBACxC,OAAO,KAAK,KAAK,YAAY,IAAI,KAAK,KAAK,WAAW,CAAA;iBACvD,CACF,CAAA;gBACD,IAAI,CAAC,OAAO,EAAE;oBACZ,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,CAAA;oBAChC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;iBACvB;gBACD,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;oBAC9C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;iBAC3B;gBACD,IAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;gBAClC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;gBACxB,OAAO,GAAG,CAAA;aACX;SACF,CAAC,CAAA;IACJ,CAAC;;IC9BD;;;;;AAMA,qBAAyB,MAAM,EAAE,MAAM;QACrC,IAAM,YAAY,GAAG,KAAK,CAAA;QAE1B,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE;YAC3B,KAAK,EAAE,UAAU,KAAK,EAAE,YAAY;gBAClC,IAAI,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACzC,IAAI,KAAK,EAAE;oBACT,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;iBAC7B;gBAED,KAAK,GAAGK,KAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAC/B,IAAI,KAAK,EAAE;oBACT,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;iBACvB;gBAED,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;aAC9C;YACD,MAAM,EAAE,UAAgB,KAAK,EAAEL,OAAI;;;;;;gCAC3B,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe;sCACrC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;sCACpC,IAAI,CAAC,YAAY,CAAA;gCACrB,MAAM,CAAC,MAAM,EAAE,yCAAyC,CAAC,CAAA;;gCAGzD,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAA;gCACjB,qBAAM,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAA;;gCAA9D,IAAI,GAAG,SAAuD;gCACpE,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE;oCACvC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAA;iCAC7B;gCACiB,qBAAM,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAA;;gCAA7D,SAAS,GAAG,SAAiD;gCACnE,KAAK,CAAC,IAAI,CAACA,OAAI,CAAC,CAAA;gCAChB,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;gCACf,qBAAM,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,EAAA;;gCAAjE,OAAO,GAAG,SAAuD;gCACvE,KAAK,CAAC,GAAG,CAACA,OAAI,CAAC,CAAA;gCACf,sBAAO,OAAO,EAAA;;;;aACf;SACF,CAAC,CAAA;QAEF,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE;YAC1B,KAAK,EAAE,UAAU,KAAK,EAAE,YAAY;gBAA7B,iBAYN;gBAXC,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACpC,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;gBAElC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAA;gBACd,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;qBACnD,EAAE,CAAC,cAAc,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;qBACvC,EAAE,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,KAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;qBAC1C,EAAE,CAAC,KAAK,EAAE;oBACT,MAAM,IAAI,KAAK,CAAC,SAAO,KAAK,CAAC,GAAG,gBAAa,CAAC,CAAA;iBAC/C,CAAC,CAAA;gBACJ,MAAM,CAAC,KAAK,EAAE,CAAA;aACf;YACD,MAAM,EAAE,UAAgB,KAAK;;;;;;gCACrB,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;sCACrC,YAAY,KAAK,SAAS,CAAA,EAA1B,wBAA0B;gCACnC,KAAA,YAAY,CAAA;;oCACZ,qBAAM,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAA;;gCAAvD,KAAA,SAAuD,CAAA;;;gCAFrD,IAAI,KAEiD;gCAE3D,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE;oCACpC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;oCACpC,sBAAO,EAAE,EAAA;iCACV;gCACD,sBAAO,IAAI,EAAA;;;;aACZ;SACF,CAAC,CAAA;IACJ,CAAC;;kBC1EwB,MAAM;QAC7B,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE;YACxB,KAAK,EAAE,UAAU,QAAQ,EAAE,YAAY;gBAAhC,iBAaN;gBAZC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;gBAEhB,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;gBACtD,MAAM;qBACH,EAAE,CAAC,OAAO,EAAE,UAAA,KAAK;oBAChB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;wBAAE,MAAM,CAAC,IAAI,EAAE,CAAA;;wBACrC,KAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;iBAC7B,CAAC;qBACD,EAAE,CAAC,KAAK,EAAE;oBACT,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;iBAClD,CAAC,CAAA;gBACJ,MAAM,CAAC,KAAK,EAAE,CAAA;aACf;YACD,MAAM,EAAE,UAAU,KAAK,EAAE,IAAI;gBAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,GAAG,GAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;aACpD;SACF,CAAC,CAAA;IACJ,CAAC;;uBChBwB,MAAM,EAAE,MAAM;QACrC,IAAM,EAAE,GAAG,IAAI,MAAM,CAAC,OAAK,UAAU,CAAC,MAAM,gBAAa;aACvD,MAAI,KAAK,CAAC,MAAM,MAAG,CAAA;aACnB,YAAU,IAAI,CAAC,MAAM,QAAK,CAAA,CAAC,CAAA;QAE7B,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE;YAE7B,KAAK,EAAE,UAAU,QAAQ,EAAE,YAAY;gBAAhC,iBAkBN;gBAjBC,IAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;gBACpC,MAAM,CAAC,KAAK,EAAE,kBAAgB,QAAQ,CAAC,GAAK,CAAC,CAAA;gBAE7C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;gBACxB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;gBAC1B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;gBAEnB,IAAI,CAAC,CAAA;gBACL,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;qBACnD,EAAE,CAAC,OAAO,EAAE,cAAM,QAAC,CAAC,GAAG,KAAI,CAAC,SAAS,IAAC,CAAC;qBACvC,EAAE,CAAC,iBAAiB,EAAE,UAAA,KAAK,IAAI,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;qBAC7C,EAAE,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;qBAClC,EAAE,CAAC,KAAK,EAAE;oBACT,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;iBAClD,CAAC,CAAA;gBAEJ,MAAM,CAAC,KAAK,EAAE,CAAA;aACf;YAED,MAAM,EAAE,UAAgB,KAAK,EAAEA,OAAI;;;;;;;gCAC7B,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,CAAA;gCACvD,MAAM,GAAGA,OAAI,CAAC,MAAM,IAAI,CAAC,CAAA;gCACzB,KAAK,GAAG,CAACA,OAAI,CAAC,KAAK,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,GAAGA,OAAI,CAAC,KAAK,CAAA;gCAEzE,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAA;gCAC/C,IAAI,GAAGA,OAAI,CAAC,IAAI,IAAI,UAAU,CAAC,MAAM,CAAA;gCACrC,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,UAAC,IAAI,EAAE,CAAC;oCACtC,IAAM,GAAG,GAAG,EAAE,CAAA;oCACd,GAAG,CAAC,KAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;oCACzB,OAAO,GAAG,CAAA;iCACX,CAAC,CAAA;gCAGE,IAAI,GAAG,EAAE,CAAA;gCACb,qBAAM,SAAS,CAAC,QAAQ,EAAE,UAAO,OAAO,EAAE,GAAG;;;;;oDAC3C,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;oDAC1B,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAA;oDAC5B,IAAI,GAAG,KAAK,CAAC,EAAE;wDACb,IAAI,GAAG,KAAK,CAAC,EAAE;4DACb,IAAI,IAAI,OAAO,CAAA;yDAChB;wDACD,IAAI,IAAI,oBAAiB,GAAG,QAAI,CAAA;qDACjC;oDAED,IAAI,IAAI,oBAAiB,GAAG,QAAI,CAAA;oDAChC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;oDACnB,KAAA,IAAI,CAAA;oDAAI,qBAAM,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAA;;oDAApE,IAAI,GAAJ,KAAQ,SAA4D,CAAA;oDACpE,IAAI,IAAI,OAAO,CAAA;oDACf,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;oDAClB,sBAAO,IAAI,EAAA;;;yCACZ,CAAC,EAAA;;gCAhBF,SAgBE,CAAA;gCACF,IAAI,GAAG,GAAG,CAAC,EAAE;oCACX,IAAI,IAAI,OAAO,CAAA;iCAChB;gCACD,sBAAO,IAAI,EAAA;;;;aACZ;SACF,CAAC,CAAA;IACJ,CAAC;;qBCrEwB,MAAM,EAAE,MAAM;QACrC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE;YAC3B,KAAK,EAAE,UAAU,QAAQ,EAAE,YAAY;gBAAhC,iBAiBN;gBAhBC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;gBACnB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;gBACvB,IAAI,CAAC,CAAA;gBACL,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;qBACnD,EAAE,CAAC,OAAO,EAAE,UAAA,CAAC;oBACZ,CAAC,GAAG,KAAI,CAAC,SAAS,CAAA;oBAClB,KAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;iBAC1B,CAAC;qBACD,EAAE,CAAC,UAAU,EAAE,cAAM,QAAC,CAAC,GAAG,KAAI,CAAC,aAAa,IAAC,CAAC;qBAC9C,EAAE,CAAC,eAAe,EAAE,UAAA,KAAK,IAAI,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;qBAC3C,EAAE,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;qBAClC,EAAE,CAAC,KAAK,EAAE,UAAA,CAAC;oBACV,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;iBAClD,CAAC,CAAA;gBAEJ,MAAM,CAAC,KAAK,EAAE,CAAA;aACf;YAED,MAAM,EAAE,UAAU,KAAK,EAAE,IAAI;gBAC3B,IAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;gBAC7C,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;sBACvB,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;sBACtD,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;aAC/D;SACF,CAAC,CAAA;IACJ,CAAC;;mBCbwB,MAAM,EAAE,MAAM;QACrC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACtB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACvB,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACpB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACvB,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACrB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACzB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACnB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAClB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACvB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACzB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACtB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACxB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxB,CAAC;;IC9BD,IAAM,UAAU,GAAG;QACjB,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ;QACxE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU;KAC/C,CAAA;IACD,IAAM,QAAQ,GAAG;QACf,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU;KAC7E,CAAA;IACD,IAAM,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC5C,IAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACxC,IAAM,QAAQ,GAAG;QACf,CAAC,EAAE,IAAI;QACP,CAAC,EAAE,IAAI;QACP,CAAC,EAAE,IAAI;QACP,SAAS,EAAE,IAAI;KAChB,CAAA;IAED,SAAS,IAAI,CAAE,GAAG;QAChB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACxB,CAAC;IAED;IACA,IAAM,KAAK,GAAG;QACZ,WAAW,EAAE,UAAU,CAAC;YACtB,IAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAA;YACzC,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;SACzD;QAED,YAAY,EAAE,UAAU,CAAC;YACvB,IAAI,GAAG,GAAG,CAAC,CAAA;YACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE;gBACrC,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;aAC/B;YACD,OAAO,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAA;SACzB;;;QAID,aAAa,EAAE,UAAU,CAAC,EAAE,QAAQ;;YAElC,IAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;;YAE1D,IAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;YAC5C,IAAM,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAA;YAC3C,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;SACxD;QAED,UAAU,EAAE,UAAU,CAAC;YACrB,IAAM,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;YAC5B,OAAO,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,GAAG,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;SAC1E;QAED,SAAS,EAAE,UAAU,CAAC;YACpB,IAAM,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAA;YAClC,IAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACrC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAA;SAC9C;QAED,OAAO,EAAE,UAAU,CAAC;YAClB,OAAO,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;SAChE;KACF,CAAA;IAED,IAAM,OAAO,GAAG;QACd,GAAG,EAAE,UAAU,KAAK,EAAE,IAAI,EAAE,EAAE;YAC5B,IAAI,CAAC,EAAE;gBAAE,EAAE,GAAG,GAAG,CAAA;YACjB,IAAI,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;YAC7B,IAAI,GAAG,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,CAAA;YAE9B,OAAO,GAAG,EAAE,GAAG,CAAC,EAAE;gBAChB,MAAM,GAAG,EAAE,GAAG,MAAM,CAAA;aACrB;YAED,OAAO,MAAM,CAAA;SACd;KACF,CAAA;IAED,IAAM,WAAW,GAAG;QAClB,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,aAAa,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;SACjC;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;SAC5B;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,eAAe,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;SACrC;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;SAChC;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,CAAC,CAAC,cAAc,EAAE,CAAA;SAC1B;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;SACxB;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;SACnC;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;SACxC;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAA;SACpC;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;SAC/C;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;SAC7C;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;SACzC;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;SACpD;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAA;SAC3C;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;SACxC;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAA;SACtC;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,QAAQ,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,EAAC;SACzC;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,QAAQ,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,EAAC;SACzC;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;SAC1B;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAA;SACtC;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAA;SACtC;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;SACvB;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;SACjC;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,CAAC,CAAC,MAAM,EAAE,CAAA;SAClB;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;SACjC;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,CAAC,CAAC,kBAAkB,EAAE,CAAA;SAC9B;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,CAAC,CAAC,kBAAkB,EAAE,CAAA;SAC9B;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;SAClD;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;SACvB;QACD,CAAC,EAAE,UAAU,CAAC;YACZ,IAAM,EAAE,GAAG,CAAC,CAAC,iBAAiB,EAAE,GAAG,EAAE,GAAG,GAAG,CAAA;YAC3C,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;SAC3D;QACD,GAAG,EAAE;YACH,OAAO,GAAG,CAAA;SACX;KACF,CAAA;IACD,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAA;IAC7B,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAA;AAE7B,uBAAyB,CAAC,EAAE,MAAM;QAChC,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,IAAI,SAAS,GAAG,MAAM,CAAA;QAEtB,OAAO,IAAI,EAAE;YACX,IAAM,CAAC,GAAG,KAAK,CAAA;YACf,IAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;;YAGjC,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAO,MAAM,GAAG,SAAS,CAAA;aAC1B;;YAGD,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;YAC7C,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;;YAGxC,IAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YAC/B,IAAM,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,CAAA;YAC5B,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,CAAA;SAC/C;IACH,CAAC;;ICjMD,IAAM,SAAS,GAAG;QAChB,GAAG,EAAE,OAAO;QACZ,GAAG,EAAE,MAAM;QACX,GAAG,EAAE,MAAM;QACX,GAAG,EAAE,OAAO;QACZ,GAAG,EAAE,OAAO;KACb,CAAA;IACD,IAAM,WAAW,GAAG;QAClB,OAAO,EAAE,GAAG;QACZ,MAAM,EAAE,GAAG;QACX,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,GAAG;QACZ,OAAO,EAAE,GAAG;KACb,CAAA;IAED,IAAM,OAAO,GAAG;QACd,KAAK,EAAE,UAAA,CAAC,IAAI,OAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAA;QACvB,QAAQ,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,GAAG,GAAG,GAAA;QAC7B,YAAY,EAAE,UAAA,GAAG,IAAI,OAAAM,WAAS,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAA;QAC1E,MAAM,EAAE,UAAA,CAAC,IAAI,OAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAA;QACzB,QAAQ,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,GAAA;QACzD,MAAM,EAAE,UAAC,CAAC,EAAE,GAAG;YACb,IAAI,IAAI,GAAG,CAAC,CAAA;YACZ,IAAI,CAAC,KAAK,KAAK,EAAE;gBACf,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;aAClB;iBAAM,IAAIhB,QAAU,CAAC,CAAC,CAAC,EAAE;gBACxB,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;aACnB;YACD,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;SACnD;QACD,SAAS,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAA;QAC5C,YAAY,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,GAAG,GAAG,GAAA;QACjC,UAAU,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,WAAW,EAAE,GAAA;QAChC,QAAQ,EAAE,MAAM;QAEhB,aAAa,EAAE,UAAA,GAAG,IAAI,OAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAA;QAC3C,OAAO,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,GAAA;QAClB,OAAO,EAAE,UAAA,CAAC,IAAI,OAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAA;QAC3B,MAAM,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,GAAG,GAAG,GAAG,GAAG,CAAC,GAAA;QACzD,MAAM,EAAE,UAAA,CAAC,IAAI,OAAAR,IAAM,CAAC,CAAC,CAAC,GAAA;QACtB,QAAQ,EAAE,UAAA,CAAC,IAAI,OAAAwB,WAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAA;QAC/C,KAAK,EAAE,UAAC,GAAG,EAAE,GAAG,IAAK,OAAA,GAAG,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,GAAG,CAAC,GAAA,CAAC,GAAA;QACzC,OAAO,EAAE,SAAS,CAAC,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,GAAG,GAAG,GAAA,CAAC;QACvC,QAAQ,EAAE,SAAS,CAAC,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,GAAG,GAAG,GAAA,CAAC;QACxC,eAAe,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAA;QAChD,MAAM,EAAE,SAAS,CAAC,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAA,CAAC;QACtD,SAAS,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,GAAG,GAAG,CAAC,GAAA;QAC9B,QAAQ,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAA;QAC3C,cAAc,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,GAAA;QAC1C,SAAS,EAAE,UAAC,CAAC,EAAE,OAAO,EAAE,WAAW;YACjC,OAAAA,WAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;SAAA;QAC/C,eAAe,EAAE,UAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAK,OAAAA,WAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAA;QACpE,SAAS,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,EAAE,GAAA;QAC3B,OAAO,EAAE,UAAC,CAAC,EAAE,GAAG;YACd,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;YAClC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAA;SACtC;QACD,QAAQ,EAAE,UAAA,GAAG,IAAI,OAAAA,WAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAA;QACnD,MAAM,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,GAAA;QACrB,OAAO,EAAE,UAAC,CAAC,EAAE,KAAK,EAAE,MAAM;YACxB,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM,GAAG,CAAC,CAAA;YACpC,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,CAAA;SACtC;QACD,MAAM,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA;QAC/B,OAAO,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAAA,WAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAA;QAC5C,OAAO,EAAE,UAAC,CAAC,IAAK,OAAAA,WAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAA;QACnC,YAAY,EAAE,UAAA,CAAC,IAAI,OAAAA,WAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,2DAA2D,EAAE,EAAE,CAAC,GAAA;QACxG,gBAAgB,EAAE,UAAA,CAAC,IAAI,OAAAA,WAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAA;QACtD,OAAO,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,GAAG,GAAG,GAAA;QAC5B,UAAU,EAAE,UAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAClB,CAAC,GAAGA,WAAS,CAAC,CAAC,CAAC,CAAA;YAChB,CAAC,GAAG,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,CAAA;YACjC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;YACX,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC;gBAAE,OAAO,CAAC,CAAA;YAC3B,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;SACrC;QACD,eAAe,EAAE,UAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,SAAS;gBAAE,CAAC,GAAG,KAAK,CAAA;YAC9B,IAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACxB,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACnC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;gBAAE,GAAG,IAAI,CAAC,CAAA;YAC5B,OAAO,GAAG,CAAA;SACX;QACD,MAAM,EAAE,UAAU,GAAG;YACnB,IAAM,CAAC,GAAG,EAAE,CAAA;YACZ,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,MAAM,CAAC,UAAA,GAAG;gBAC3B,IAAI,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oBACzB,OAAO,KAAK,CAAA;iBACb;gBACD,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;gBACb,OAAO,IAAI,CAAA;aACZ,CAAC,CAAA;SACH;QACD,QAAQ,EAAE,UAAA,GAAG,IAAI,OAAAA,WAAS,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,GAAA;QAC7C,YAAY,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA;QACjE,YAAY,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA;KAClE,CAAA;IAED,SAAS,MAAM,CAAE,GAAG;QAClB,OAAOA,WAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,UAAA,CAAC,IAAI,OAAA,SAAS,CAAC,CAAC,CAAC,GAAA,CAAC,CAAA;IAChE,CAAC;IAED,SAAS,QAAQ,CAAE,GAAG;QACpB,OAAOA,WAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,wBAAwB,EAAE,UAAA,CAAC,IAAI,OAAA,WAAW,CAAC,CAAC,CAAC,GAAA,CAAC,CAAA;IAC9E,CAAC;IAED,SAAS,QAAQ,CAAE,CAAC;QAClB,IAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;QAC7B,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IACzC,CAAC;IAED,SAAS,WAAW,CAAE,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3C,CAAC;IAED,SAASA,WAAS,CAAE,GAAG;QACrB,OAAO,GAAG,GAAG,EAAE,CAAA;IACjB,CAAC;IAED,SAAS,SAAS,CAAE,EAAE;QACpB,OAAO,UAAC,CAAC,EAAE,CAAC;YACV,IAAM,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAC3B,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;SAC3B,CAAA;IACH,CAAC;IAED,SAAS,WAAW,CAAE,IAAI;QACxB,OAAO,IAAI,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IACvD,CAAC;AAED,aAAwB,WAAW,CAAE,MAAM,EAAE,MAAM;QACjD,OAAOC,MAAQ,CAAC,OAAO,EAAE,UAAC,IAAI,EAAE,IAAI,IAAK,OAAA,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,GAAA,CAAC,CAAA;IAC7E,CAAC;IAED,WAAW,CAAC,OAAO,GAAG,OAAO,CAAA;;IC5H7B;QAQE,gBAAa,OAAO;YAClB,OAAO,GAAG3B,MAAQ,CAAC;gBACjB,IAAI,EAAE,CAAC,GAAG,CAAC;gBACX,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,EAAE;gBACX,eAAe,EAAE,IAAI;gBACrB,cAAc,EAAE,KAAK;gBACrB,aAAa,EAAE,KAAK;gBACpB,gBAAgB,EAAE,KAAK;gBACvB,eAAe,EAAE,KAAK;gBACtB,MAAM,EAAE,IAAI;gBACZ,cAAc,EAAE,KAAK;gBACrB,gBAAgB,EAAE,KAAK;aACxB,EAAE,OAAO,CAAC,CAAA;YACX,OAAO,CAAC,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YAEjD,IAAI,OAAO,CAAC,KAAK,EAAE;gBACjB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;aAChB;YACD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;YACtB,IAAI,CAAC,IAAI,GAAG,GAAG,EAAE,CAAA;YACjB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;YAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;YAC7C,IAAI,CAAC,QAAQ,GAAG,MAAM,EAAE,CAAA;YAExB,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YAClB4B,WAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;SACtB;QACD,sBAAK,GAAL,UAAM,IAAY,EAAE,QAAiB;YACnC,IAAM,MAAM,GAAGC,KAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;YAC5D,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;SACjC;QACD,uBAAM,GAAN,UAAO,GAAW,EAAE,GAAQ,EAAE,IAAS;YACrC,IAAI,GAAG7B,MAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;YACvC,IAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YAClC,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;SACjD;QACK,+BAAc,GAApB,UAAqB,IAAI,EAAE,GAAG,EAAE,IAAI;;;;;gCACtB,qBAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAA;;4BAA5B,GAAG,GAAG,SAAsB;4BAClC,sBAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,EAAA;;;;SACnC;QACK,4BAAW,GAAjB,UAAkB,IAAI,EAAE,IAAI;;;;;;gCACT,qBAAM8B,OAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,EAAA;;4BAA3D,QAAQ,GAAG,SAAgD;4BACjE,sBAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;;;;oDACrB,qBAAMC,IAAa,CAAC,QAAQ,CAAC,EAAA;;gDAAnC,GAAG,GAAG,SAA6B;gDACzC,sBAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAA;;;qCACjC,CAAC,EAAA;;;;SACH;QACK,2BAAU,GAAhB,UAAiB,IAAI,EAAE,GAAG,EAAE,IAAI;;;;;;4BAC9B,IAAI,GAAG/B,MAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;4BACP,qBAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAA;;4BAAnD,SAAS,GAAG,SAAuC;4BACzD,sBAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,EAAA;;;;SACzC;QACK,6BAAY,GAAlB,UAAoB,GAAG,EAAE,MAAM;;;;;;4BACvB,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAA;4BACvC,IAAI,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gCACnC,sBAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAA;6BACvB;4BACa,qBAAM,MAAM,EAAE,EAAA;;4BAAtB,KAAK,GAAG,SAAc;4BAC5B,IAAI,YAAY,EAAE;gCAChB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;6BACxB;4BACD,sBAAO,KAAK,EAAA;;;;SACb;QACD,0BAAS,GAAT,UAAW,GAAG,EAAE,KAAK;YACnB,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;YAC9C,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;SAC3C;QACD,+BAAc,GAAd,UAAgB,IAAI,EAAE,MAAM;YAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;SAC3C;QACD,4BAAW,GAAX,UAAa,IAAI,EAAE,GAAG;YACpB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;SACrC;QACD,uBAAM,GAAN,UAAQ,MAAM;YACZ,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;SACjC;QACD,wBAAO,GAAP,UAAS,IAAI;YACX,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;YACjB,IAAM,IAAI,GAAG,IAAI,CAAA;YACjB,OAAO,UAAU,QAAQ,EAAE,GAAG,EAAE,EAAE;gBAChC,MAAM,CAACS,OAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAIC,QAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAClD,+CAA+C,CAAC,CAAA;gBAClD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;gBACrB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAA,IAAI,IAAI,OAAA,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,GAAA,EAAE,EAAE,CAAC,CAAA;aACtE,CAAA;SACF;QACM,cAAO,GAAG,MAAM,CAAA;QAChB,eAAQ,GAAG,QAAQ,CAAA;QACnB,cAAO,GAAG,OAAO,CAAA;QACjB,cAAO,GAAG,OAAO,CAAA;QACjB,gBAAS,GAAG,SAAS,CAAA;QACrB,YAAK,GAAG;YACb,UAAU,YAAA;YACV,iBAAiB,mBAAA;YACjB,gBAAgB,kBAAA;YAChB,cAAc,gBAAA;YACd,WAAW,EAAE,EAAE;YACf,YAAY,EAAE,EAAE;YAChB,cAAc,EAAE,EAAE;YAClB,cAAc,EAAE,EAAE;SACnB,CAAA;QACH,aAAC;KA9GD,IA8GC;IAED,SAAS,oBAAoB,CAAE,KAAK;QAClC,IAAID,OAAS,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAA;QAClC,IAAIC,QAAU,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,KAAK,CAAC,CAAA;QACrC,MAAM,IAAI,SAAS,CAAC,gBAAgB,GAAG,KAAK,CAAC,CAAA;IAC/C,CAAC;;;;;;;;"} \ No newline at end of file diff --git a/dist/liquid.min.js b/dist/liquid.min.js index bab23da89..5a19dd582 100644 --- a/dist/liquid.min.js +++ b/dist/liquid.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Liquid=t()}(this,function(){"use strict";var F="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Q=function(e){return function(){var u=e.apply(this,arguments);return new Promise(function(o,a){return function t(e,r){try{var n=u[e](r),i=n.value}catch(e){return void a(e)}if(!n.done)return Promise.resolve(i).then(function(e){t("next",e)},function(e){t("throw",e)});o(i)}("next")})}};!function(e){var s,t=Object.prototype,c=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},i=r.iterator||"@@iterator",n=r.asyncIterator||"@@asyncIterator",o=r.toStringTag||"@@toStringTag",a="object"===("undefined"==typeof module?"undefined":F(module)),u=e.regeneratorRuntime;if(u)a&&(module.exports=u);else{(u=e.regeneratorRuntime=a?module.exports:{}).wrap=w;var p="suspendedStart",f="suspendedYield",h="executing",g="completed",d={},l={};l[i]=function(){return this};var v=Object.getPrototypeOf,m=v&&v(v(O([])));m&&m!==t&&c.call(m,i)&&(l=m);var y=E.prototype=b.prototype=Object.create(l);k.prototype=y.constructor=E,E.constructor=k,E[o]=k.displayName="GeneratorFunction",u.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===k||"GeneratorFunction"===(t.displayName||t.name))},u.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,E):(e.__proto__=E,o in e||(e[o]="GeneratorFunction")),e.prototype=Object.create(y),e},u.awrap=function(e){return{__await:e}},R(T.prototype),T.prototype[n]=function(){return this},u.AsyncIterator=T,u.async=function(e,t,r,n){var i=new T(w(e,t,r,n));return u.isGeneratorFunction(t)?i:i.next().then(function(e){return e.done?e.value:i.next()})},R(y),y[o]="Generator",y[i]=function(){return this},y.toString=function(){return"[object Generator]"},u.keys=function(r){var n=[];for(var e in r)n.push(e);return n.reverse(),function e(){for(;n.length;){var t=n.pop();if(t in r)return e.value=t,e.done=!1,e}return e.done=!0,e}},u.values=O,j.prototype={constructor:j,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=s,this.done=!1,this.delegate=null,this.method="next",this.arg=s,this.tryEntries.forEach(L),!e)for(var t in this)"t"===t.charAt(0)&&c.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=s)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(r){if(this.done)throw r;var n=this;function e(e,t){return o.type="throw",o.arg=r,n.next=e,t&&(n.method="next",n.arg=s),!!t}for(var t=this.tryEntries.length-1;0<=t;--t){var i=this.tryEntries[t],o=i.completion;if("root"===i.tryLoc)return e("end");if(i.tryLoc<=this.prev){var a=c.call(i,"catchLoc"),u=c.call(i,"finallyLoc");if(a&&u){if(this.prev=|<|>|\s+contains\s+/];function A(){this.name=this.constructor.name,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}function D(e,t){A.call(this),this.input=t.input,this.line=t.line,this.file=t.file;var r,i,o,n,a,u=(r=t.input,i=t.line,o=r.split("\n"),n=Math.max(i-2,1),a=Math.min(i+3,o.length),function(e,t,r){1===arguments.length&&(t=e,e=0),r=r||1;for(var n=[],i=e;i> ":" ",(t=e,r=a,n=t+"",Array((r+"").length-n.length).join(" ")+n),"| ",o[e-1]].join("");var t,r,n}).join("\n"));this.message=function(e,t){e=e||"",t.file&&(e+=", file:"+t.file);t.line&&(e+=", line:"+t.line);return e}(e.message,t),this.stack=u+"\n"+(this.stack||this.message)+(e.stack?"\nFrom "+e.stack:"")}function I(e,t){D.call(this,{message:e},t)}function q(e,t){m(this,e),this.originalError=e,D.call(this,e,t)}function C(e,t){if(e instanceof C)return e;m(this,e),this.originalError=e,D.call(this,e,t.token)}function V(e){A.call(this),this.message=e+""}function N(e){A.call(this),this.message=e+""}function ue(e,t){if(!e)throw new N(t=t||"expect "+e+" to be true")}(I.prototype=ee(Error.prototype)).constructor=I,(q.prototype=ee(Error.prototype)).constructor=q,(C.prototype=ee(Error.prototype)).constructor=C,(V.prototype=ee(Error.prototype)).constructor=V,(N.prototype=ee(Error.prototype)).constructor=N;var Y={getAll:function(){return this.contexts.reduce(function(e,t){return m(e,t)},ee(null))},get:function(e){var r=this,t=this.propertyAccessSeq(e),n=this.findContextFor(t[0])||y(this.contexts);return t.reduce(function(e,t){return r.readProperty(e,t)},n)},set:function(e,r){var n=this.propertyAccessSeq(e),i=this.findContextFor(n[0])||y(this.contexts);n.some(function(e,t){return!re(i)||(t===n.length-1?(i[e]=r,!0):(void 0===i[e]&&(i[e]={}),void(i=i[e])))})},unshift:function(e){return this.contexts.unshift(e)},push:function(e){return this.contexts.push(e)},pop:function(t){if(!arguments.length)return this.contexts.pop();var e=this.contexts.findIndex(function(e){return e===t});if(-1===e)throw new TypeError("scope not found, cannot pop");return this.contexts.splice(e,1)[0]},findContextFor:function(e,t){t=t||function(){return!0};for(var r=this.contexts.length-1;0<=r;r--){var n=this.contexts[r];if(t(n)&&e in n)return n}return null},readProperty:function(e,t){var r,n=void 0;if(u(e)?n=void 0:(e=function(e){if(o(e.to_liquid))return e.to_liquid();if(o(e.toLiquid))return e.toLiquid();return e}(e),n="size"===t?u((r=e).size)&&(te(r)||Z(r))?r.length:r.size:e[t],o(e.liquid_method_missing)&&(n=e.liquid_method_missing(t))),u(n)&&this.opts.strict_variables)throw new TypeError("undefined variable: "+t);return n},propertyAccessSeq:function(e){e=String(e);for(var t,r=[],n="",i=void 0,o=0;oh&&g.push(v(h,t.index)),g.push(t[1]?d(t[1],t[2].trim(),t.index):(u=t[3],s=t[4].trim(),c=t.index,{type:"value",line:f.get(c),trim_left:"{{-"===u.slice(0,3),trim_right:"-}}"===u.slice(-3),raw:u,value:s,input:o,file:a}));return o.length>h&&g.push(v(h,o.length)),function(a,u){u=m({greedy:!0},u);var s=!1;a.forEach(function(e,t){var r,n,i,o;i=e,o=u,!s&&("tag"===i.type?i.trim_left||o.trim_tag_left:"value"===i.type?i.trim_left||o.trim_value_left:void 0)&&function(e,t){if(e&&"html"===e.type){var r=t?/\s+$/g:/[\t\r ]*$/g;e.value=e.value.replace(r,"")}}(a[t-1],u.greedy),"tag"===e.type&&"raw"===e.name&&(s=!0),"tag"===e.type&&"endraw"===e.name&&(s=!1),r=e,n=u,!s&&("tag"===r.type?r.trim_right||n.trim_tag_right:"value"===r.type?r.trim_right||n.trim_value_right:void 0)&&function(e,t){if(e&&"html"===e.type){var r=t?/^\s+/g:/^[\t\r ]*\n?/g;e.value=e.value.replace(r,"")}}(a[t+1],u.greedy)})}(g,e),g;function d(e,t,r){var n=t.match(x),i={type:"tag",indent:p,line:f.get(r),trim_left:"{%-"===e.slice(0,3),trim_right:"-%}"===e.slice(-3),raw:e,value:t,input:o,file:a};if(!n)throw new I("illegal tag syntax",i);return i.name=n[1],i.args=n[2],i}function v(e,t){var r=o.slice(e,t);return p=y(r.split("\n")).length,{type:"html",raw:r,value:r}}}var le,pe=(le=ge,{"==":function(e,t){return e===t},"!=":function(e,t){return e!==t},">":function(e,t){return null!==e&&null!==t&&t=":function(e,t){return null!==e&&null!==t&&t<=e},"<=":function(e,t){return null!==e&&null!==t&&e<=t},contains:function(e,t){return!!e&&"function"==typeof e.indexOf&&-1"),c+=''),c+='',i.push(t),e.next=7,U.renderer.renderTemplates(l.templates,i);case 7:return c+=e.sent,c+="",i.pop(t),e.abrupt("return",c);case 11:case"end":return e.stop()}},e,l)}));return function(e,t){return r.apply(this,arguments)}}());case 10:return 0"),e.abrupt("return",c);case 12:case"end":return e.stop()}},e,this)})),function(e,t){return J.apply(this,arguments)})}),K=t,(X=e).registerTag("unless",{parse:function(t,e){var r=this;this.templates=[],this.elseTemplates=[];var n=void 0,i=X.parser.parseStream(e).on("start",function(e){n=r.templates,r.cond=t.args}).on("tag:else",function(){return n=r.elseTemplates}).on("tag:endunless",function(e){return i.stop()}).on("template",function(e){return n.push(e)}).on("end",function(e){throw new Error("tag "+t.raw+" not closed")});i.start()},render:function(e,t){var r=K.evalExp(this.cond,e);return K.isFalsy(r)?X.renderer.renderTemplates(this.templates,e):X.renderer.renderTemplates(this.elseTemplates,e)}})}var Te=["January","February","March","April","May","June","July","August","September","October","November","December"],Se=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],_e=Te.map(Oe),Le=Se.map(Oe),je={1:"st",2:"nd",3:"rd",default:"th"};function Oe(e){return e.slice(0,3)}var Me={daysInMonth:function(e){return[31,Me.isLeapYear(e)?29:28,31,30,31,30,31,31,30,31,30,31]},getDayOfYear:function(e){for(var t=0,r=0;r":">",'"':""","'":"'"},De={"&":"&","<":"<",">":">",""":'"',"'":"'"},Ie={abs:function(e){return Math.abs(e)},append:function(e,t){return e+t},capitalize:function(e){return Ve(e).charAt(0).toUpperCase()+e.slice(1)},ceil:function(e){return Math.ceil(e)},concat:function(e,t){return Array.prototype.concat.call(e,t)},date:function(e,t){var r,n=e;return"now"===e?n=new Date:Z(e)&&(n=new Date(e)),(r=n)instanceof Date&&!isNaN(r.getTime())?function(e,t){for(var r="",n=t;;){var i=/%./g,o=i.exec(n);if(!o)return r+n;r+=n.slice(0,i.lastIndex-2),n=n.slice(i.lastIndex);var a=o[0].charAt(1),u=Pe[a];r+=u?u.call(this,e):"%"+a}}(n,t):e},default:function(e,t){return ge(e)?e:t},divided_by:function(e,t){return e/t},downcase:function(e){return e.toLowerCase()},escape:qe,escape_once:function(e){return qe(Ve(e).replace(/&(amp|lt|gt|#34|#39);/g,function(e){return De[e]}))},first:function(e){return e[0]},floor:function(e){return Math.floor(e)},join:function(e,t){return e.join(void 0===t?" ":t)},last:function(e){return y(e)},lstrip:function(e){return Ve(e).replace(/^\s+/,"")},map:function(e,t){return e.map(function(e){return e[t]})},minus:Ne(function(e,t){return e-t}),modulo:Ne(function(e,t){return e%t}),newline_to_br:function(e){return e.replace(/\n/g,"
")},plus:Ne(function(e,t){return Number(e)+Number(t)}),prepend:function(e,t){return t+e},remove:function(e,t){return e.split(t).join("")},remove_first:function(e,t){return e.replace(t,"")},replace:function(e,t,r){return Ve(e).split(t).join(r)},replace_first:function(e,t,r){return Ve(e).replace(t,r)},reverse:function(e){return e.reverse()},round:function(e,t){var r=Math.pow(10,t||0);return Math.round(e*r,t)/r},rstrip:function(e){return Ve(e).replace(/\s+$/,"")},size:function(e){return e.length},slice:function(e,t,r){return void 0===r&&(r=1),e.slice(t,t+r)},sort:function(e,t){return e.sort(t)},split:function(e,t){return Ve(e).split(t)},strip:function(e){return Ve(e).trim()},strip_html:function(e){return Ve(e).replace(/|||<.*?>/g,"")},strip_newlines:function(e){return Ve(e).replace(/\n/g,"")},times:function(e,t){return e*t},truncate:function(e,t,r){return r=void 0===r?"...":r,t=t||16,(e=Ve(e)).length<=t?e:e.substr(0,t-r.length)+r},truncatewords:function(e,t,r){void 0===r&&(r="...");var n=e.split(" "),i=n.slice(0,t).join(" ");return n.length>t&&(i+=r),i},uniq:function(e){var t={};return(e||[]).filter(function(e){return!t.hasOwnProperty(e)&&(t[e]=!0)})},upcase:function(e){return Ve(e).toUpperCase()},url_decode:function(e){return e.split("+").map(decodeURIComponent).join(" ")},url_encode:function(e){return e.split(" ").map(encodeURIComponent).join("+")}};function qe(e){return Ve(e).replace(/&|<|>|"|'/g,function(e){return Ae[e]})}function Ce(e){var t=(e+"").split(".");return 1s[0]&&e[1]=|<|>|\s+contains\s+/];function q(){Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}var C=function(){function t(t,e){this.input=e.input,this.line=e.line,this.file=e.file,this.originalError=t,this.token=e}return t.prototype.captureStackTrace=function(t){this.name=t.constructor.name,q.call(t);var e,s,u,r,a,n=this.originalError,i=(e=this.input,s=this.line,u=e.split("\n"),r=Math.max(s-2,1),a=Math.min(s+3,u.length),function(t,e,r){1===arguments.length&&(e=t,t=0),r=r||1;for(var n=[],i=t;i> ":" ",i=(e=String(a).length,r=t,r=String(r),Array(e-r.length).join(" ")+r),o=u[t-1];return""+n+i+"| "+o}).join("\n"));this.message=function(t,e){t=t||"",e.file&&(t+=", file:"+e.file);e.line&&(t+=", line:"+e.line);return t}(n.message,this.token),this.stack=i+"\n"+(this.stack||this.message)+(n.stack?"\nFrom "+n.stack:"")},t}(),F=function(n){function t(t,e){var r=n.call(this,{message:t},e)||this;return n.prototype.captureStackTrace.call(r,r),r}return e(t,n),t}(C);F.prototype=J(Error.prototype),F.prototype.constructor=F;var P=function(n){function t(t,e){var r=n.call(this,t,e)||this;return m(r,t),n.prototype.captureStackTrace.call(r,r),r}return e(t,n),t}(C);P.prototype=J(Error.prototype),P.prototype.constructor=P;var L=function(n){function t(t,e){var r=n.call(this,t,e.token)||this;return m(r,t),n.prototype.captureStackTrace.call(r,r),r}return e(t,n),t}(C);L.prototype=J(Error.prototype),L.prototype.constructor=L;var I=function(t){q.call(this),this.message=t+""};I.prototype=J(Error.prototype),I.prototype.constructor=I;var V=function(t){q.call(this),this.message=t+""};function et(t,e){if(!t)throw new V(e=e||"expect "+t+" to be true")}V.prototype=J(Error.prototype),V.prototype.constructor=V;var $=function(){function t(t,e){void 0===t&&(t={});this.opts=m({dynamicPartials:!0,strict_variables:!1,strict_filters:!1,blocks:{},root:[]},e),this.contexts=[t||{}]}return t.prototype.getAll=function(){return this.contexts.reduce(function(t,e){return m(t,e)},J(null))},t.prototype.get=function(t){var r=this,e=this.propertyAccessSeq(t),n=this.findContextFor(e[0])||y(this.contexts);return e.reduce(function(t,e){return r.readProperty(t,e)},n)},t.prototype.set=function(t,r){var n=this.propertyAccessSeq(t),i=this.findContextFor(n[0])||y(this.contexts);n.some(function(t,e){return!X(i)||(e===n.length-1?(i[t]=r,!0):(void 0===i[t]&&(i[t]={}),void(i=i[t])))})},t.prototype.unshift=function(t){return this.contexts.unshift(t)},t.prototype.push=function(t){return this.contexts.push(t)},t.prototype.pop=function(e){if(!arguments.length)return this.contexts.pop();var t=this.contexts.findIndex(function(t){return t===e});if(-1===t)throw new TypeError("scope not found, cannot pop");return this.contexts.splice(t,1)[0]},t.prototype.findContextFor=function(t,e){void 0===e&&(e=function(t){return!0});for(var r=this.contexts.length-1;0<=r;r--){var n=this.contexts[r];if(e(n)&&t in n)return n}return null},t.prototype.readProperty=function(t,e){var r,n;if(a(t)?r=void 0:(t=function(t){if(s(t.to_liquid))return t.to_liquid();if(s(t.toLiquid))return t.toLiquid();return t}(t),r="size"===e?a((n=t).size)&&(G(n)||W(n))?n.length:n.size:t[e],s(t.liquid_method_missing)&&(r=t.liquid_method_missing(e))),a(r)&&this.opts.strict_variables)throw new TypeError("undefined variable: "+e);return r},t.prototype.propertyAccessSeq=function(t){t=String(t);for(var e,r,n=[],i="",o=0;of&&h.push(v(f,d.index)),h.push(d[1]?g(d[1],d[2].trim(),d.index):(e=d[3],u=d[4].trim(),a=d.index,{type:"value",line:p.get(a),trim_left:"{{-"===e.slice(0,3),trim_right:"-}}"===e.slice(-3),raw:e,value:u,input:o,file:s}));return o.length>f&&h.push(v(f,o.length)),function(s,u){u=m({greedy:!0},u);var a=!1;s.forEach(function(t,e){var r,n,i,o;i=t,o=u,!a&&("tag"===i.type?i.trim_left||o.trim_tag_left:"value"===i.type?i.trim_left||o.trim_value_left:void 0)&&function(t,e){if(t&&"html"===t.type){var r=e?/\s+$/g:/[\t\r ]*$/g;t.value=t.value.replace(r,"")}}(s[e-1],u.greedy),"tag"===t.type&&"raw"===t.name&&(a=!0),"tag"===t.type&&"endraw"===t.name&&(a=!1),r=t,n=u,!a&&("tag"===r.type?r.trim_right||n.trim_tag_right:"value"===r.type?r.trim_right||n.trim_value_right:void 0)&&function(t,e){if(t&&"html"===t.type){var r=e?/^\s+/g:/^[\t\r ]*\n?/g;t.value=t.value.replace(r,"")}}(s[e+1],u.greedy)})}(h,t),h;function g(t,e,r){var n=e.match(b),i={type:"tag",indent:l,line:p.get(r),trim_left:"{%-"===t.slice(0,3),trim_right:"-%}"===t.slice(-3),raw:t,value:e,input:o,file:s};if(!n)throw new F("illegal tag syntax",i);return i.name=n[1],i.args=n[2],i}function v(t,e){var r=o.slice(t,e);return l=y(r.split("\n")).length,{type:"html",raw:r,value:r}}}var z,rt=(z=ot,{"==":function(t,e){return t===e},"!=":function(t,e){return t!==e},">":function(t,e){return null!==t&&null!==e&&e=":function(t,e){return null!==t&&null!==e&&e<=t},"<=":function(t,e){return null!==t&&null!==e&&t<=e},contains:function(t,e){return!!t&&"function"==typeof t.indexOf&&-1"),u+=''),u+='',c.push(n),r=u,[4,$.renderer.renderTemplates(this.templates,c)];case 1:return u=r+t.sent(),u+="",c.pop(n),[2,u]}})})})];case 1:return t.sent(),0"),[2,u]}})})}}),z=e,(N=t).registerTag("unless",{parse:function(e,t){var r,n=this;this.templates=[],this.elseTemplates=[];var i=N.parser.parseStream(t).on("start",function(t){r=n.templates,n.cond=e.args}).on("tag:else",function(){return r=n.elseTemplates}).on("tag:endunless",function(t){return i.stop()}).on("template",function(t){return r.push(t)}).on("end",function(t){throw new Error("tag "+e.raw+" not closed")});i.start()},render:function(t,e){var r=z.evalExp(this.cond,t);return z.isFalsy(r)?N.renderer.renderTemplates(this.templates,t):N.renderer.renderTemplates(this.elseTemplates,t)}})}var dt=["January","February","March","April","May","June","July","August","September","October","November","December"],gt=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],vt=dt.map(wt),mt=gt.map(wt),yt={1:"st",2:"nd",3:"rd",default:"th"};function wt(t){return t.slice(0,3)}var bt={daysInMonth:function(t){return[31,bt.isLeapYear(t)?29:28,31,30,31,30,31,31,30,31,30,31]},getDayOfYear:function(t){for(var e=0,r=0;r":">",'"':""","'":"'"},kt={"&":"&","<":"<",">":">",""":'"',"'":"'"},St={abs:function(t){return Math.abs(t)},append:function(t,e){return t+e},capitalize:function(t){return Mt(t).charAt(0).toUpperCase()+t.slice(1)},ceil:function(t){return Math.ceil(t)},concat:function(t,e){return Array.prototype.concat.call(t,e)},date:function(t,e){var r,n=t;return"now"===t?n=new Date:W(t)&&(n=new Date(t)),(r=n)instanceof Date&&!isNaN(r.getTime())?function(t,e){for(var r="",n=e;;){var i=/%./g,o=i.exec(n);if(!o)return r+n;r+=n.slice(0,i.lastIndex-2),n=n.slice(i.lastIndex);var s=o[0].charAt(1),u=Tt[s];r+=u?u.call(this,t):"%"+s}}(n,e):t},default:function(t,e){return ot(t)?t:e},divided_by:function(t,e){return t/e},downcase:function(t){return t.toLowerCase()},escape:_t,escape_once:function(t){return _t(Mt(t).replace(/&(amp|lt|gt|#34|#39);/g,function(t){return kt[t]}))},first:function(t){return t[0]},floor:function(t){return Math.floor(t)},join:function(t,e){return t.join(void 0===e?" ":e)},last:function(t){return y(t)},lstrip:function(t){return Mt(t).replace(/^\s+/,"")},map:function(t,e){return t.map(function(t){return t[e]})},minus:Ot(function(t,e){return t-e}),modulo:Ot(function(t,e){return t%e}),newline_to_br:function(t){return t.replace(/\n/g,"
")},plus:Ot(function(t,e){return Number(t)+Number(e)}),prepend:function(t,e){return e+t},remove:function(t,e){return t.split(e).join("")},remove_first:function(t,e){return t.replace(e,"")},replace:function(t,e,r){return Mt(t).split(e).join(r)},replace_first:function(t,e,r){return Mt(t).replace(e,r)},reverse:function(t){return t.reverse()},round:function(t,e){var r=Math.pow(10,e||0);return Math.round(t*r,e)/r},rstrip:function(t){return Mt(t).replace(/\s+$/,"")},size:function(t){return t.length},slice:function(t,e,r){return void 0===r&&(r=1),t.slice(e,e+r)},sort:function(t,e){return t.sort(e)},split:function(t,e){return Mt(t).split(e)},strip:function(t){return Mt(t).trim()},strip_html:function(t){return Mt(t).replace(/|||<.*?>/g,"")},strip_newlines:function(t){return Mt(t).replace(/\n/g,"")},times:function(t,e){return t*e},truncate:function(t,e,r){return r=void 0===r?"...":r,e=e||16,(t=Mt(t)).length<=e?t:t.substr(0,e-r.length)+r},truncatewords:function(t,e,r){void 0===r&&(r="...");var n=t.split(" "),i=n.slice(0,e).join(" ");return n.length>e&&(i+=r),i},uniq:function(t){var e={};return(t||[]).filter(function(t){return!e.hasOwnProperty(t)&&(e[t]=!0)})},upcase:function(t){return Mt(t).toUpperCase()},url_decode:function(t){return t.split("+").map(decodeURIComponent).join(" ")},url_encode:function(t){return t.split(" ").map(encodeURIComponent).join("+")}};function _t(t){return Mt(t).replace(/&|<|>|"|'/g,function(t){return Et[t]})}function Rt(t){var e=(t+"").split(".");return 1 result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // In sloppy mode, unbound `this` refers to the global object, fallback to\n // Function constructor if we're in global strict mode. That is sadly a form\n // of indirect eval which violates Content Security Policy.\n (function() {\n return this || (typeof self === \"object\" && self);\n })() || Function(\"return this\")()\n);\n","const toStr = Object.prototype.toString\nconst arrToStr = Array.prototype.toString\n\n/*\n * Checks if value is classified as a String primitive or object.\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is a string, else false.\n */\nexport function isString (value) {\n return toStr.call(value) === '[object String]'\n}\n\nexport function isFunction (value) {\n return typeof value === 'function'\n}\n\nexport function promisify (fn) {\n return function () {\n return new Promise((resolve, reject) => {\n fn(...arguments, (err, result) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value) {\n if (isNil(value)) return String(value)\n if (isFunction(value.to_liquid)) return stringify(value.to_liquid())\n if (isFunction(value.toLiquid)) return stringify(value.toLiquid())\n if (isFunction(value.to_s)) return value.to_s()\n if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value)\n if (isFunction(value.toString)) return value.toString()\n return toStr.call(value)\n}\n\nfunction defaultToString (value) {\n const cache = []\n return JSON.stringify(value, (key, value) => {\n if (isObject(value)) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n}\n\nexport function create (proto) {\n return Object.create(proto)\n}\n\nexport function isNil (value) {\n return value === null || value === undefined\n}\n\nexport function isArray (value) {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value) {\n const signature = toStr.call(value)\n // [object XXXError]\n return signature.substr(-6, 5) === 'Error' ||\n (typeof value.message === 'string' && typeof value.name === 'string')\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (object, iteratee) {\n object = object || {}\n for (const k in object) {\n if (object.hasOwnProperty(k)) {\n if (iteratee(object[k], k, object) === false) break\n }\n }\n return object\n}\n\n/*\n * Assigns own enumerable string keyed properties of source objects to the destination object.\n * Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * Note: This method mutates object and is loosely based on Object.assign.\n *\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @return {Object} Returns object.\n */\nexport function assign (object) {\n object = isObject(object) ? object : {}\n const srcs = Array.prototype.slice.call(arguments, 1)\n srcs.forEach((src) => Object.assign(object, src))\n return object\n}\n\nexport function last (arr) {\n return arr[arr.length - 1]\n}\n\nexport function uniq (arr) {\n const u = {}\n const a = []\n for (let i = 0, l = arr.length; i < l; ++i) {\n if (u.hasOwnProperty(arr[i])) {\n continue\n }\n a.push(arr[i])\n u[arr[i]] = 1\n }\n return a\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value) {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\n/*\n * A function to create flexibly-numbered lists of integers,\n * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.\n * Returns a list of integers from start (inclusive) to stop (exclusive),\n * incremented (or decremented) by step, exclusive.\n * Note that ranges that stop before they start are considered to be zero-length instead of\n * negative — if you'd like a negative range, use a negative step.\n */\nexport function range (start, stop, step) {\n if (arguments.length === 1) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n","// quote related\nconst singleQuoted = /'[^']*'/\nconst doubleQuoted = /\"[^\"]*\"/\nexport const quoted = new RegExp(`${singleQuoted.source}|${doubleQuoted.source}`)\nexport const quoteBalanced = new RegExp(`(?:${quoted.source}|[^'\"])*`)\n\n// basic types\nexport const integer = /-?\\d+/\nexport const number = /-?\\d+\\.?\\d*|\\.?\\d+/\nexport const bool = /true|false/\n\n// property access\nexport const identifier = /[\\w-]+[?]?/\nexport const subscript = new RegExp(`\\\\[(?:${quoted.source}|[\\\\w-\\\\.]+)\\\\]`)\nexport const literal = new RegExp(`(?:${quoted.source}|${bool.source}|${number.source})`)\nexport const variable = new RegExp(`${identifier.source}(?:\\\\.${identifier.source}|${subscript.source})*`)\n\n// range related\nexport const rangeLimit = new RegExp(`(?:${variable.source}|${number.source})`)\nexport const range = new RegExp(`\\\\(${rangeLimit.source}\\\\.\\\\.${rangeLimit.source}\\\\)`)\nexport const rangeCapture = new RegExp(`\\\\((${rangeLimit.source})\\\\.\\\\.(${rangeLimit.source})\\\\)`)\n\nexport const value = new RegExp(`(?:${variable.source}|${literal.source}|${range.source})`)\n\n// hash related\nexport const hash = new RegExp(`(?:${identifier.source})\\\\s*:\\\\s*(?:${value.source})`)\nexport const hashCapture = new RegExp(`(${identifier.source})\\\\s*:\\\\s*(${value.source})`, 'g')\n\n// full match\nexport const tagLine = new RegExp(`^\\\\s*(${identifier.source})\\\\s*([\\\\s\\\\S]*)\\\\s*$`)\nexport const literalLine = new RegExp(`^${literal.source}$`, 'i')\nexport const variableLine = new RegExp(`^${variable.source}$`)\nexport const numberLine = new RegExp(`^${number.source}$`)\nexport const boolLine = new RegExp(`^${bool.source}$`, 'i')\nexport const quotedLine = new RegExp(`^${quoted.source}$`)\nexport const rangeLine = new RegExp(`^${rangeCapture.source}$`)\nexport const integerLine = new RegExp(`^${integer.source}$`)\n\n// filter related\nexport const valueDeclaration = new RegExp(`(?:${identifier.source}\\\\s*:\\\\s*)?${value.source}`)\nexport const valueList = new RegExp(`${valueDeclaration.source}(\\\\s*,\\\\s*${valueDeclaration.source})*`)\nexport const filter = new RegExp(`${identifier.source}(?:\\\\s*:\\\\s*${valueList.source})?`, 'g')\nexport const filterCapture = new RegExp(`(${identifier.source})(?:\\\\s*:\\\\s*(${valueList.source}))?`)\nexport const filterLine = new RegExp(`^${filterCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isInteger (str) {\n return integerLine.test(str)\n}\n\nexport function isLiteral (str) {\n return literalLine.test(str)\n}\n\nexport function isRange (str) {\n return rangeLine.test(str)\n}\n\nexport function isVariable (str) {\n return variableLine.test(str)\n}\n\nexport function matchValue (str) {\n return value.exec(str)\n}\n\nexport function parseLiteral (str) {\n let res = str.match(numberLine)\n if (res) {\n return Number(str)\n }\n res = str.match(boolLine)\n if (res) {\n return str.toLowerCase() === 'true'\n }\n res = str.match(quotedLine)\n if (res) {\n return str.slice(1, -1)\n }\n throw new TypeError(`cannot parse '${str}' as literal`)\n}\n","import * as _ from './underscore.js'\n\nfunction initError () {\n this.name = this.constructor.name\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n}\n\nfunction initLiquidError (err, token) {\n initError.call(this)\n\n this.input = token.input\n this.line = token.line\n this.file = token.file\n\n const context = mkContext(token.input, token.line)\n this.message = mkMessage(err.message, token)\n this.stack = context +\n '\\n' + (this.stack || this.message) +\n (err.stack ? '\\nFrom ' + err.stack : '')\n}\n\nexport function TokenizationError (message, token) {\n initLiquidError.call(this, { message: message }, token)\n}\nTokenizationError.prototype = _.create(Error.prototype)\nTokenizationError.prototype.constructor = TokenizationError\n\nexport function ParseError (e, token) {\n _.assign(this, e)\n this.originalError = e\n\n initLiquidError.call(this, e, token)\n}\nParseError.prototype = _.create(Error.prototype)\nParseError.prototype.constructor = ParseError\n\nexport function RenderError (e, tpl) {\n // return the original render error\n if (e instanceof RenderError) {\n return e\n }\n _.assign(this, e)\n this.originalError = e\n\n initLiquidError.call(this, e, tpl.token)\n}\nRenderError.prototype = _.create(Error.prototype)\nRenderError.prototype.constructor = RenderError\n\nexport function RenderBreakError (message) {\n initError.call(this)\n this.message = message + ''\n}\nRenderBreakError.prototype = _.create(Error.prototype)\nRenderBreakError.prototype.constructor = RenderBreakError\n\nexport function AssertionError (message) {\n initError.call(this)\n this.message = message + ''\n}\nAssertionError.prototype = _.create(Error.prototype)\nAssertionError.prototype.constructor = AssertionError\n\nfunction mkContext (input, line) {\n const lines = input.split('\\n')\n const begin = Math.max(line - 2, 1)\n const end = Math.min(line + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(l => [\n (l === line) ? '>> ' : ' ',\n align(l, end),\n '| ',\n lines[l - 1]\n ].join(''))\n .join('\\n')\n\n return context\n}\n\nfunction align (n, max) {\n const length = (max + '').length\n const str = n + ''\n const blank = Array(length - str.length).join(' ')\n return blank + str\n}\n\nfunction mkMessage (msg, token) {\n msg = msg || ''\n if (token.file) {\n msg += ', file:' + token.file\n }\n if (token.line) {\n msg += ', line:' + token.line\n }\n return msg\n}\n","import { AssertionError } from './error.js'\n\nexport default function (predicate, message) {\n if (!predicate) {\n message = message || `expect ${predicate} to be true`\n throw new AssertionError(message)\n }\n}\n","import * as _ from './util/underscore.js'\nimport * as lexical from './lexical.js'\nimport assert from './util/assert.js'\n\nconst Scope = {\n getAll: function () {\n return this.contexts.reduce((ctx, val) => _.assign(ctx, val), _.create(null))\n },\n get: function (path) {\n const paths = this.propertyAccessSeq(path)\n const scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n return paths.reduce((value, key) => this.readProperty(value, key), scope)\n },\n set: function (path, v) {\n const paths = this.propertyAccessSeq(path)\n let scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n paths.some((key, i) => {\n if (!_.isObject(scope)) {\n return true\n }\n if (i === paths.length - 1) {\n scope[key] = v\n return true\n }\n if (undefined === scope[key]) {\n scope[key] = {}\n }\n scope = scope[key]\n })\n },\n unshift: function (ctx) {\n return this.contexts.unshift(ctx)\n },\n push: function (ctx) {\n return this.contexts.push(ctx)\n },\n pop: function (ctx) {\n if (!arguments.length) {\n return this.contexts.pop()\n }\n const i = this.contexts.findIndex(scope => scope === ctx)\n if (i === -1) {\n throw new TypeError('scope not found, cannot pop')\n }\n return this.contexts.splice(i, 1)[0]\n },\n findContextFor: function (key, filter) {\n filter = filter || (() => true)\n for (let i = this.contexts.length - 1; i >= 0; i--) {\n const candidate = this.contexts[i]\n if (!filter(candidate)) continue\n if (key in candidate) {\n return candidate\n }\n }\n return null\n },\n readProperty: function (obj, key) {\n let val\n if (_.isNil(obj)) {\n val = undefined\n } else {\n obj = toLiquid(obj)\n val = key === 'size' ? readSize(obj) : obj[key]\n if (_.isFunction(obj.liquid_method_missing)) {\n val = obj.liquid_method_missing(key)\n }\n }\n if (_.isNil(val) && this.opts.strict_variables) {\n throw new TypeError(`undefined variable: ${key}`)\n }\n return val\n },\n\n /*\n * Parse property access sequence from access string\n * @example\n * accessSeq(\"foo.bar\") // ['foo', 'bar']\n * accessSeq(\"foo['bar']\") // ['foo', 'bar']\n * accessSeq(\"foo['b]r']\") // ['foo', 'b]r']\n * accessSeq(\"foo[bar.coo]\") // ['foo', 'bar'], for bar.coo == 'bar'\n */\n propertyAccessSeq: function (str) {\n str = String(str)\n const seq = []\n let name = ''\n let j\n let i = 0\n while (i < str.length) {\n switch (str[i]) {\n case '[':\n push()\n\n const delemiter = str[i + 1]\n if (/['\"]/.test(delemiter)) { // foo[\"bar\"]\n j = str.indexOf(delemiter, i + 2)\n assert(j !== -1, `unbalanced ${delemiter}: ${str}`)\n name = str.slice(i + 2, j)\n push()\n i = j + 2\n } else { // foo[bar.coo]\n j = matchRightBracket(str, i + 1)\n assert(j !== -1, `unbalanced []: ${str}`)\n name = str.slice(i + 1, j)\n if (!lexical.isInteger(name)) { // foo[bar] vs. foo[1]\n name = String(this.get(name))\n }\n push()\n i = j + 1\n }\n break\n case '.':// foo.bar, foo[0].bar\n push()\n i++\n break\n default:// foo.bar\n name += str[i]\n i++\n }\n }\n push()\n\n if (!seq.length) {\n throw new TypeError(`invalid path:\"${str}\"`)\n }\n return seq\n\n function push () {\n if (name.length) seq.push(name)\n name = ''\n }\n }\n}\n\nfunction toLiquid (obj) {\n if (_.isFunction(obj.to_liquid)) {\n return obj.to_liquid()\n }\n if (_.isFunction(obj.toLiquid)) {\n return obj.toLiquid()\n }\n return obj\n}\n\nfunction readSize (obj) {\n if (!_.isNil(obj.size)) return obj.size\n if (_.isArray(obj) || _.isString(obj)) return obj.length\n return obj.size\n}\n\nfunction matchRightBracket (str, begin) {\n let stack = 1 // count of '[' - count of ']'\n for (let i = begin; i < str.length; i++) {\n if (str[i] === '[') {\n stack++\n }\n if (str[i] === ']') {\n stack--\n if (stack === 0) {\n return i\n }\n }\n }\n return -1\n}\n\nexport function factory (ctx, opts) {\n const defaultOptions = {\n dynamicPartials: true,\n strict_variables: false,\n strict_filters: false,\n blocks: {},\n root: []\n }\n const scope = _.create(Scope)\n scope.opts = _.assign(defaultOptions, opts)\n scope.contexts = [ctx || {}]\n return scope\n}\n","/*\n * Call functions in serial until someone resolved.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function anySeries (iterable, iteratee) {\n let ret = Promise.reject(new Error('init'))\n iterable.forEach(function (item, idx) {\n ret = ret.catch(e => iteratee(item, idx, iterable))\n })\n return ret\n}\n\n/*\n * Call functions in serial until someone rejected.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function mapSeries (iterable, iteratee) {\n let ret = Promise.resolve('init')\n const result = []\n iterable.forEach(function (item, idx) {\n ret = ret\n .then(() => iteratee(item, idx, iterable))\n .then(x => result.push(x))\n })\n return ret.then(() => result)\n}\n","import * as _ from './util/underscore.js'\nimport path from 'path'\nimport { anySeries } from './util/promise.js'\nimport fs from 'fs'\n\nconst statFileAsync = _.promisify(fs.stat)\nconst readFileAsync = _.promisify(fs.readFile)\n\nexport async function resolve (filepath, root, options) {\n if (!path.extname(filepath)) {\n filepath += options.extname\n }\n root = options.root.concat(root || [])\n root = _.uniq(root)\n const paths = root.map(root => path.resolve(root, filepath))\n return anySeries(paths, async path => {\n try {\n await statFileAsync(path)\n return path\n } catch (e) {\n e.message = `${e.code}: Failed to lookup ${filepath} in: ${root}`\n throw e\n }\n })\n}\n\nexport async function read (filepath) {\n return readFileAsync(filepath, 'utf8')\n}\n","import * as lexical from './lexical.js'\nimport { TokenizationError } from './util/error.js'\nimport * as _ from './util/underscore.js'\nimport assert from './util/assert.js'\nimport whiteSpaceCtrl from './whitespace-ctrl.js'\n\nexport { default as whiteSpaceCtrl } from './whitespace-ctrl.js'\n\nexport function parse (input, file, options) {\n assert(_.isString(input), 'illegal input')\n\n const rLiquid = /({%-?([\\s\\S]*?)-?%})|({{-?([\\s\\S]*?)-?}})/g\n let currIndent = 0\n const lineNumber = LineNumber(input)\n let lastMatchEnd = 0\n const tokens = []\n\n for (let match; (match = rLiquid.exec(input)); lastMatchEnd = rLiquid.lastIndex) {\n if (match.index > lastMatchEnd) {\n tokens.push(parseHTMLToken(lastMatchEnd, match.index))\n }\n tokens.push(match[1]\n ? parseTagToken(match[1], match[2].trim(), match.index)\n : parseValueToken(match[3], match[4].trim(), match.index))\n }\n if (input.length > lastMatchEnd) {\n tokens.push(parseHTMLToken(lastMatchEnd, input.length))\n }\n whiteSpaceCtrl(tokens, options)\n return tokens\n\n function parseTagToken (raw, value, pos) {\n const match = value.match(lexical.tagLine)\n const token = {\n type: 'tag',\n indent: currIndent,\n line: lineNumber.get(pos),\n trim_left: raw.slice(0, 3) === '{%-',\n trim_right: raw.slice(-3) === '-%}',\n raw,\n value,\n input,\n file\n }\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, token)\n }\n token.name = match[1]\n token.args = match[2]\n return token\n }\n\n function parseValueToken (raw, value, pos) {\n return {\n type: 'value',\n line: lineNumber.get(pos),\n trim_left: raw.slice(0, 3) === '{{-',\n trim_right: raw.slice(-3) === '-}}',\n raw,\n value,\n input,\n file\n }\n }\n\n function parseHTMLToken (begin, end) {\n const htmlFragment = input.slice(begin, end)\n currIndent = _.last((htmlFragment).split('\\n')).length\n\n return {\n type: 'html',\n raw: htmlFragment,\n value: htmlFragment\n }\n }\n}\n\nfunction LineNumber (html) {\n let parsedLinesCount = 0\n let lastMatchBegin = -1\n\n return {\n get: function (pos) {\n const lines = html.slice(lastMatchBegin + 1, pos).split('\\n')\n parsedLinesCount += lines.length - 1\n lastMatchBegin = pos\n return parsedLinesCount + 1\n }\n }\n}\n","import { assign } from './util/underscore.js'\n\nexport default function whiteSpaceCtrl (tokens, options) {\n options = assign({ greedy: true }, options)\n let inRaw = false\n\n tokens.forEach((token, i) => {\n if (shouldTrimLeft(token, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && token.name === 'raw') inRaw = true\n if (token.type === 'tag' && token.name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token, inRaw, options) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trim_left || options.trim_tag_left\n if (token.type === 'value') return token.trim_left || options.trim_value_left\n}\n\nfunction shouldTrimRight (token, inRaw, options) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trim_right || options.trim_tag_right\n if (token.type === 'value') return token.trim_right || options.trim_value_right\n}\n\nfunction trimLeft (token, greedy) {\n if (!token || token.type !== 'html') return\n\n const rLeft = greedy ? /\\s+$/g : /[\\t\\r ]*$/g\n token.value = token.value.replace(rLeft, '')\n}\n\nfunction trimRight (token, greedy) {\n if (!token || token.type !== 'html') return\n\n const rRight = greedy ? /^\\s+/g : /^[\\t\\r ]*\\n?/g\n token.value = token.value.replace(rRight, '')\n}\n","import Operators from './operators.js'\nimport * as lexical from './lexical.js'\nimport assert from './util/assert.js'\n\nconst operators = Operators(isTruthy)\n\nexport function evalExp (exp, scope) {\n assert(scope, 'unable to evalExp: scope undefined')\n const operatorREs = lexical.operators\n let match\n for (let i = 0; i < operatorREs.length; i++) {\n const operatorRE = operatorREs[i]\n const expRE = new RegExp(`^(${lexical.quoteBalanced.source})(${operatorRE.source})(${lexical.quoteBalanced.source})$`)\n if ((match = exp.match(expRE))) {\n const l = evalExp(match[1], scope)\n const op = operators[match[2].trim()]\n const r = evalExp(match[3], scope)\n return op(l, r)\n }\n }\n\n if ((match = exp.match(lexical.rangeLine))) {\n const low = evalValue(match[1], scope)\n const high = evalValue(match[2], scope)\n const range = []\n for (let j = low; j <= high; j++) {\n range.push(j)\n }\n return range\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str, scope) {\n str = str && str.trim()\n if (!str) return undefined\n\n if (lexical.isLiteral(str)) {\n return lexical.parseLiteral(str)\n }\n if (lexical.isVariable(str)) {\n return scope.get(str)\n }\n throw new TypeError(`cannot eval '${str}' as value`)\n}\n\nexport function isTruthy (val) {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val) {\n return val === false || undefined === val || val === null\n}\n","export default function (isTruthy) {\n return {\n '==': (l, r) => l === r,\n '!=': (l, r) => l !== r,\n '>': (l, r) => l !== null && r !== null && l > r,\n '<': (l, r) => l !== null && r !== null && l < r,\n '>=': (l, r) => l !== null && r !== null && l >= r,\n '<=': (l, r) => l !== null && r !== null && l <= r,\n 'contains': (l, r) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l, r) => isTruthy(l) && isTruthy(r),\n 'or': (l, r) => isTruthy(l) || isTruthy(r)\n }\n}\n","import { evalExp } from './syntax.js'\nimport { RenderBreakError, RenderError } from './util/error.js'\nimport { stringify, create } from './util/underscore.js'\nimport assert from './util/assert.js'\n\nconst render = {\n renderTemplates: async function (templates, scope) {\n assert(scope, 'unable to evalTemplates: scope undefined')\n\n let html = ''\n for (const tpl of templates) {\n try {\n html += await renderTemplate.call(this, tpl)\n } catch (e) {\n if (e instanceof RenderBreakError) {\n e.resolvedHTML = html\n throw e\n }\n throw new RenderError(e, tpl)\n }\n }\n return html\n\n async function renderTemplate (template) {\n if (template.type === 'tag') {\n const partial = await this.renderTag(template, scope)\n return partial === undefined ? '' : partial\n }\n if (template.type === 'value') {\n return this.renderValue(template, scope)\n }\n return template.value\n }\n },\n\n renderTag: async function (template, scope) {\n if (template.name === 'continue') {\n throw new RenderBreakError('continue')\n }\n if (template.name === 'break') {\n throw new RenderBreakError('break')\n }\n return template.render(scope)\n },\n\n renderValue: async function (template, scope) {\n const partial = this.evalValue(template, scope)\n return partial === undefined ? '' : stringify(partial)\n },\n\n evalValue: function (template, scope) {\n assert(scope, 'unable to evalValue: scope undefined')\n return template.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(template.initial, scope))\n }\n}\n\nexport default function () {\n const instance = create(render)\n return instance\n}\n","import { hashCapture } from './lexical.js'\nimport { create } from './util/underscore.js'\nimport { evalValue } from './syntax.js'\nimport assert from './util/assert.js'\n\nfunction hash (markup, scope) {\n const obj = {}\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n obj[k] = evalValue(v, scope)\n }\n return obj\n}\n\nexport default function () {\n let tagImpls = {}\n\n const _tagInstance = {\n render: async function (scope) {\n const obj = hash(this.token.args, scope)\n const impl = this.tagImpl\n if (typeof impl.render !== 'function') {\n return ''\n }\n return impl.render(scope, obj)\n },\n parse: function (token, tokens) {\n this.type = 'tag'\n this.token = token\n this.name = token.name\n\n const tagImpl = tagImpls[this.name]\n assert(tagImpl, `tag ${this.name} not found`)\n this.tagImpl = create(tagImpl)\n if (this.tagImpl.parse) {\n this.tagImpl.parse(token, tokens)\n }\n }\n }\n\n function register (name, tag) {\n tagImpls[name] = tag\n }\n\n function construct (token, tokens) {\n const instance = create(_tagInstance)\n instance.parse(token, tokens)\n return instance\n }\n\n function clear () {\n tagImpls = {}\n }\n\n return {\n construct,\n register,\n clear\n }\n}\n","import * as lexical from './lexical.js'\nimport { evalValue } from './syntax.js'\nimport assert from './util/assert.js'\nimport { assign, create } from './util/underscore.js'\n\nconst valueRE = new RegExp(`${lexical.value.source}`, 'g')\n\nexport default function (options) {\n options = assign({}, options)\n let filters = {}\n\n const _filterInstance = {\n render: function (output, scope) {\n const args = this.args.map(arg => evalValue(arg, scope))\n args.unshift(output)\n return this.filter.apply(null, args)\n },\n parse: function (str) {\n let match = lexical.filterLine.exec(str)\n assert(match, 'illegal filter: ' + str)\n\n const name = match[1]\n const argList = match[2] || ''\n const filter = filters[name]\n if (typeof filter !== 'function') {\n if (options.strict_filters) {\n throw new TypeError(`undefined filter: ${name}`)\n }\n this.name = name\n this.filter = x => x\n this.args = []\n return this\n }\n\n const args = []\n while ((match = valueRE.exec(argList.trim()))) {\n const v = match[0]\n const re = new RegExp(`${v}\\\\s*:`, 'g')\n const keyMatch = re.exec(match.input)\n const currentMatchIsKey = keyMatch && keyMatch.index === match.index\n currentMatchIsKey ? args.push(`'${v}'`) : args.push(v)\n }\n\n this.name = name\n this.filter = filter\n this.args = args\n\n return this\n }\n }\n\n function construct (str) {\n const instance = create(_filterInstance)\n return instance.parse(str)\n }\n\n function register (name, filter) {\n filters[name] = filter\n }\n\n function clear () {\n filters = {}\n }\n\n return {\n construct, register, clear\n }\n}\n","import * as lexical from './lexical.js'\nimport { create } from './util/underscore.js'\nimport { ParseError } from './util/error.js'\nimport assert from './util/assert.js'\n\nexport default function (Tag, Filter) {\n const stream = {\n init: function (tokens) {\n this.tokens = tokens\n this.handlers = {}\n return this\n },\n on: function (name, cb) {\n this.handlers[name] = cb\n return this\n },\n trigger: function (event, arg) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n },\n start: function () {\n this.trigger('start')\n let token\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' &&\n this.trigger(`tag:${token.name}`, token)) {\n continue\n }\n const template = parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n },\n stop: function () {\n this.stopRequested = true\n return this\n }\n }\n\n function parse (tokens) {\n let token\n const templates = []\n while ((token = tokens.shift())) {\n templates.push(parseToken(token, tokens))\n }\n return templates\n }\n\n function parseToken (token, tokens) {\n try {\n let tpl = null\n if (token.type === 'tag') {\n tpl = parseTag(token, tokens)\n } else if (token.type === 'value') {\n tpl = parseValue(token.value)\n } else { // token.type === 'html'\n tpl = token\n }\n tpl.token = token\n return tpl\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n\n function parseTag (token, tokens) {\n if (token.name === 'continue' || token.name === 'break') return token\n return Tag.construct(token, tokens)\n }\n\n function parseValue (str) {\n let match = lexical.matchValue(str)\n assert(match, `illegal value string: ${str}`)\n\n const initial = match[0]\n str = str.substr(match.index + match[0].length)\n\n const filters = []\n while ((match = lexical.filter.exec(str))) {\n filters.push([match[0].trim()])\n }\n\n return {\n type: 'value',\n initial: initial,\n filters: filters.map(str => Filter.construct(str))\n }\n }\n\n function parseStream (tokens) {\n const s = create(stream)\n return s.init(tokens)\n }\n\n return {\n parse,\n parseTag,\n parseStream,\n parseValue\n }\n}\n","import assert from '../util/assert.js'\nimport { value, quotedLine } from '../lexical.js'\n\nconst staticFileRE = /[^\\s,]+/\n\nexport default function (liquid, Liquid) {\n const withRE = new RegExp(`with\\\\s+(${value.source})`)\n\n liquid.registerTag('include', {\n parse: function (token) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticValue = match[0]\n }\n\n match = value.exec(token.args)\n if (match) {\n this.value = match[0]\n }\n\n match = withRE.exec(token.args)\n if (match) {\n this.with = match[1]\n }\n },\n render: async function (scope, hash) {\n let filepath\n if (scope.opts.dynamicPartials) {\n if (quotedLine.exec(this.value)) {\n const template = this.value.slice(1, -1)\n filepath = await liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = Liquid.evalValue(this.value, scope)\n }\n } else {\n filepath = this.staticValue\n }\n assert(filepath, `cannot include with empty filename`)\n\n const originBlocks = scope.opts.blocks\n const originBlockMode = scope.opts.blockMode\n\n scope.opts.blocks = {}\n scope.opts.blockMode = 'output'\n if (this.with) {\n hash[filepath] = Liquid.evalValue(this.with, scope)\n }\n const templates = await liquid.getTemplate(filepath, scope.opts.root)\n scope.push(hash)\n const html = await liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.opts.blocks = originBlocks\n scope.opts.blockMode = originBlockMode\n return html\n }\n })\n}\n","import For from './for.js'\nimport Assign from './assign.js'\nimport Capture from './capture.js'\nimport Case from './case.js'\nimport Comment from './comment.js'\nimport Include from './include.js'\nimport Decrement from './decrement.js'\nimport Cycle from './cycle.js'\nimport If from './if.js'\nimport Increment from './increment.js'\nimport Layout from './layout.js'\nimport Raw from './raw.js'\nimport Tablerow from './tablerow.js'\nimport Unless from './unless.js'\n\nexport default function (engine, Liquid) {\n Assign(engine, Liquid)\n Capture(engine, Liquid)\n Case(engine, Liquid)\n Comment(engine, Liquid)\n Cycle(engine, Liquid)\n Decrement(engine, Liquid)\n For(engine, Liquid)\n If(engine, Liquid)\n Include(engine, Liquid)\n Increment(engine, Liquid)\n Layout(engine, Liquid)\n Raw(engine, Liquid)\n Tablerow(engine, Liquid)\n Unless(engine, Liquid)\n}\n","import assert from '../util/assert.js'\nimport { identifier } from '../lexical.js'\nimport { create } from '../util/underscore.js'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n const { AssignScope } = Liquid.Types\n\n liquid.registerTag('assign', {\n parse: function (token) {\n const match = token.args.match(re)\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (scope) {\n const ctx = create(AssignScope)\n ctx[this.key] = liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n })\n}\n","import assert from '../util/assert.js'\nimport { create } from '../util/underscore.js'\nimport { identifier } from '../lexical.js'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`(${identifier.source})`)\n const { CaptureScope } = Liquid.Types\n\n liquid.registerTag('capture', {\n parse: function (tagToken, remainTokens) {\n const match = tagToken.args.match(re)\n assert(match, `${tagToken.args} not valid identifier`)\n\n this.variable = match[1]\n this.templates = []\n\n const stream = liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', token => stream.stop())\n .on('template', tpl => this.templates.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope, hash) {\n const html = await liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = create(CaptureScope)\n ctx[this.variable] = html\n scope.push(ctx)\n }\n })\n}\n","export default function (liquid, Liquid) {\n liquid.registerTag('case', {\n\n parse: function (tagToken, remainTokens) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p = []\n const stream = liquid.parser.parseStream(remainTokens)\n .on('tag:when', token => {\n this.cases.push({\n val: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endcase', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = Liquid.evalExp(branch.val, scope)\n const cond = Liquid.evalExp(this.cond, scope)\n if (val === cond) {\n return liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","export default function (liquid) {\n liquid.registerTag('comment', {\n parse: function (tagToken, remainTokens) {\n const stream = liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n })\n}\n","import assert from '../util/assert.js'\nimport { value as rValue } from '../lexical.js'\n\nexport default function (liquid, Liquid) {\n const groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\n const candidatesRE = new RegExp(rValue.source, 'g')\n\n liquid.registerTag('cycle', {\n\n parse: function (tagToken, remainTokens) {\n let match = groupRE.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.group = match[1] || ''\n const candidates = match[2]\n\n this.candidates = []\n\n while ((match = candidatesRE.exec(candidates))) {\n this.candidates.push(match[0])\n }\n assert(this.candidates.length, `empty candidates: ${tagToken.raw}`)\n },\n\n render: function (scope, hash) {\n const group = Liquid.evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n\n const groups = scope.opts.groups = scope.opts.groups || {}\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n\n return Liquid.evalValue(candidate, scope)\n }\n })\n}\n","import { create } from '../util/underscore.js'\nimport assert from '../util/assert.js'\nimport { identifier } from '../lexical.js'\n\nexport default function (liquid, Liquid) {\n const { CaptureScope, AssignScope, DecrementScope } = Liquid.Types\n\n liquid.registerTag('decrement', {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope, hash) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n const proto = Object.getPrototypeOf(ctx)\n return proto !== CaptureScope && proto !== AssignScope\n }\n )\n if (!context) {\n context = create(DecrementScope)\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n return --context[this.variable]\n }\n })\n}\n","import { mapSeries } from '../util/promise.js'\nimport { isString, isObject, isArray } from '../util/underscore.js'\nimport assert from '../util/assert.js'\nimport { identifier, value, hash } from '../lexical.js'\n\nexport default function (liquid, Liquid) {\n const RenderBreakError = Liquid.Types.RenderBreakError\n const re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\n liquid.registerTag('for', { parse, render })\n\n function parse (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n this.variable = match[1]\n this.collection = match[2]\n this.reversed = !!match[3]\n\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endfor', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n }\n async function render (scope, hash) {\n let collection = Liquid.evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]])\n }\n }\n if (!isArray(collection) || !collection.length) {\n return liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n if (this.reversed) collection.reverse()\n\n const contexts = collection.map((item, i) => {\n const ctx = {}\n ctx[this.variable] = item\n ctx.forloop = {\n first: i === 0,\n index: i + 1,\n index0: i,\n last: i === collection.length - 1,\n length: collection.length,\n rindex: collection.length - i,\n rindex0: collection.length - i - 1\n }\n return ctx\n })\n\n let html = ''\n let finished = false\n await mapSeries(contexts, async context => {\n if (finished) return\n\n scope.push(context)\n try {\n html += await liquid.renderer.renderTemplates(this.templates, scope)\n } catch (e) {\n if (e instanceof RenderBreakError) {\n html += e.resolvedHTML\n if (e.message === 'break') {\n finished = true\n }\n } else throw e\n }\n scope.pop(context)\n })\n return html\n }\n}\n","export default function (liquid, Liquid) {\n liquid.registerTag('if', {\n\n parse: function (tagToken, remainTokens) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', token => {\n this.branches.push({\n cond: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endif', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n for (const branch of this.branches) {\n const cond = Liquid.evalExp(branch.cond, scope)\n if (Liquid.isTruthy(cond)) {\n return liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","import assert from '../util/assert.js'\nimport { create } from '../util/underscore.js'\nimport { identifier } from '../lexical.js'\n\nexport default function (liquid, Liquid) {\n const { CaptureScope, AssignScope, IncrementScope } = Liquid.Types\n\n liquid.registerTag('increment', {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope, hash) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n const proto = Object.getPrototypeOf(ctx)\n return proto !== CaptureScope && proto !== AssignScope\n }\n )\n if (!context) {\n context = create(IncrementScope)\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n const val = context[this.variable]\n context[this.variable]++\n return val\n }\n })\n}\n","import assert from '../util/assert.js'\nimport { value as rValue } from '../lexical.js'\n\n/*\n * blockMode:\n * * \"store\": store rendered html into blocks\n * * \"output\": output rendered html\n */\n\nexport default function (liquid, Liquid) {\n const staticFileRE = /\\S+/\n\n liquid.registerTag('layout', {\n parse: function (token, remainTokens) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticLayout = match[0]\n }\n\n match = rValue.exec(token.args)\n if (match) {\n this.layout = match[0]\n }\n\n this.tpls = liquid.parser.parse(remainTokens)\n },\n render: async function (scope, hash) {\n const layout = scope.opts.dynamicPartials\n ? Liquid.evalValue(this.layout, scope)\n : this.staticLayout\n assert(layout, `cannot apply layout with empty filename`)\n\n // render the remaining tokens immediately\n scope.opts.blockMode = 'store'\n const html = await liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.opts.blocks[''] === undefined) {\n scope.opts.blocks[''] = html\n }\n const templates = await liquid.getTemplate(layout, scope.opts.root)\n scope.push(hash)\n scope.opts.blockMode = 'output'\n const partial = await liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n })\n\n liquid.registerTag('block', {\n parse: function (token, remainTokens) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n\n this.tpls = []\n const stream = liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', tpl => this.tpls.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${token.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope) {\n const childDefined = scope.opts.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.opts.blockMode === 'store') {\n scope.opts.blocks[this.block] = html\n return ''\n }\n return html\n }\n })\n}\n","export default function (liquid) {\n liquid.registerTag('raw', {\n parse: function (tagToken, remainTokens) {\n this.tokens = []\n\n const stream = liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\n if (token.name === 'endraw') stream.stop()\n else this.tokens.push(token)\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: function (scope, hash) {\n return this.tokens.map(token => token.raw).join('')\n }\n })\n}\n","import { mapSeries } from '../util/promise.js'\nimport assert from '../util/assert.js'\nimport { identifier, value, hash } from '../lexical.js'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\n liquid.registerTag('tablerow', {\n\n parse: function (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.variable = match[1]\n this.collection = match[2]\n this.templates = []\n\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: async function (scope, hash) {\n let collection = Liquid.evalExp(this.collection, scope) || []\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = hash.cols || collection.length\n const contexts = collection.map((item, i) => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row\n let html = ''\n await mapSeries(contexts, async (context, idx) => {\n row = Math.floor(idx / cols) + 1\n const col = (idx % cols) + 1\n if (col === 1) {\n if (row !== 1) {\n html += ''\n }\n html += ``\n }\n\n html += ``\n scope.push(context)\n html += await liquid.renderer.renderTemplates(this.templates, scope)\n html += ''\n scope.pop(context)\n return html\n })\n if (row > 0) {\n html += ''\n }\n return html\n }\n })\n}\n","export default function (liquid, Liquid) {\n liquid.registerTag('unless', {\n parse: function (tagToken, remainTokens) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', x => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n const cond = Liquid.evalExp(this.cond, scope)\n return Liquid.isFalsy(cond)\n ? liquid.renderer.renderTemplates(this.templates, scope)\n : liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","const monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst monthNamesShort = monthNames.map(abbr)\nconst dayNamesShort = dayNames.map(abbr)\nconst suffixes = {\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n 'default': 'th'\n}\n\nfunction abbr (str) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d) {\n const feb = _date.isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n },\n\n getDayOfYear: function (d) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += _date.daysInMonth(d)[i]\n }\n return num + d.getDate()\n },\n\n // Startday is an integer of which day to start the week measuring from\n // TODO: that comment was retarted. fix it.\n getWeekOfYear: function (d, startDay) {\n // Skip to startDay of this week\n const now = this.getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return _number.pad(Math.floor((now - then) / 7) + 1, 2)\n },\n\n isLeapYear: function (d) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d) {\n const str = d.getDate().toString()\n const index = parseInt(str.slice(-1))\n return suffixes[index] || suffixes['default']\n },\n\n century: function (d) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst _number = {\n pad: function (value, size, ch) {\n if (!ch) ch = '0'\n let result = value.toString()\n let pad = size - result.length\n\n while (pad-- > 0) {\n result = ch + result\n }\n\n return result\n }\n}\n\nconst formatCodes = {\n a: function (d) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d) {\n return dayNames[d.getDay()]\n },\n b: function (d) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d) {\n return monthNames[d.getMonth()]\n },\n c: function (d) {\n return d.toLocaleString()\n },\n C: function (d) {\n return _date.century(d)\n },\n d: function (d) {\n return _number.pad(d.getDate(), 2)\n },\n e: function (d) {\n return _number.pad(d.getDate(), 2, ' ')\n },\n H: function (d) {\n return _number.pad(d.getHours(), 2)\n },\n I: function (d) {\n return _number.pad(d.getHours() % 12 || 12, 2)\n },\n j: function (d) {\n return _number.pad(_date.getDayOfYear(d), 3)\n },\n k: function (d) {\n return _number.pad(d.getHours(), 2, ' ')\n },\n l: function (d) {\n return _number.pad(d.getHours() % 12 || 12, 2, ' ')\n },\n L: function (d) {\n return _number.pad(d.getMilliseconds(), 3)\n },\n m: function (d) {\n return _number.pad(d.getMonth() + 1, 2)\n },\n M: function (d) {\n return _number.pad(d.getMinutes(), 2)\n },\n p: function (d) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d) {\n return _date.getSuffix(d)\n },\n s: function (d) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d) {\n return _number.pad(d.getSeconds(), 2)\n },\n u: function (d) {\n return d.getDay() || 7\n },\n U: function (d) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d) {\n return d.getDay()\n },\n W: function (d) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d) {\n return d.toLocaleDateString()\n },\n X: function (d) {\n return d.toLocaleTimeString()\n },\n y: function (d) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d) {\n return d.getFullYear()\n },\n z: function (d) {\n const tz = d.getTimezoneOffset() / 60 * 100\n return (tz > 0 ? '-' : '+') + _number.pad(Math.abs(tz), 4)\n },\n '%': function () {\n return '%'\n }\n}\nformatCodes.h = formatCodes.b\nformatCodes.N = formatCodes.L\n\nexport default function (d, format) {\n let output = ''\n let remaining = format\n\n while (true) {\n const r = /%./g\n const results = r.exec(remaining)\n\n // No more format codes. Add the remaining text and return\n if (!results) {\n return output + remaining\n }\n\n // Add the preceding text\n output += remaining.slice(0, r.lastIndex - 2)\n remaining = remaining.slice(r.lastIndex)\n\n // Add the format code\n const ch = results[0].charAt(1)\n const func = formatCodes[ch]\n output += func ? func.call(this, d) : '%' + ch\n }\n}\n","import strftime from './util/strftime.js'\nimport * as _ from './util/underscore.js'\nimport { isTruthy } from './syntax.js'\n\nconst escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nconst filters = {\n 'abs': v => Math.abs(v),\n 'append': (v, arg) => v + arg,\n 'capitalize': str => stringify(str).charAt(0).toUpperCase() + str.slice(1),\n 'ceil': v => Math.ceil(v),\n 'concat': (v, arg) => Array.prototype.concat.call(v, arg),\n 'date': (v, arg) => {\n let date = v\n if (v === 'now') {\n date = new Date()\n } else if (_.isString(v)) {\n date = new Date(v)\n }\n return isValidDate(date) ? strftime(date, arg) : v\n },\n 'default': (v, arg) => isTruthy(v) ? v : arg,\n 'divided_by': (v, arg) => v / arg,\n 'downcase': v => v.toLowerCase(),\n 'escape': escape,\n\n 'escape_once': str => escape(unescape(str)),\n 'first': v => v[0],\n 'floor': v => Math.floor(v),\n 'join': (v, arg) => v.join(arg === undefined ? ' ' : arg),\n 'last': v => _.last(v),\n 'lstrip': v => stringify(v).replace(/^\\s+/, ''),\n 'map': (arr, arg) => arr.map(v => v[arg]),\n 'minus': bindFixed((v, arg) => v - arg),\n 'modulo': bindFixed((v, arg) => v % arg),\n 'newline_to_br': v => v.replace(/\\n/g, '
'),\n 'plus': bindFixed((v, arg) => Number(v) + Number(arg)),\n 'prepend': (v, arg) => arg + v,\n 'remove': (v, arg) => v.split(arg).join(''),\n 'remove_first': (v, l) => v.replace(l, ''),\n 'replace': (v, pattern, replacement) =>\n stringify(v).split(pattern).join(replacement),\n 'replace_first': (v, arg1, arg2) => stringify(v).replace(arg1, arg2),\n 'reverse': v => v.reverse(),\n 'round': (v, arg) => {\n const amp = Math.pow(10, arg || 0)\n return Math.round(v * amp, arg) / amp\n },\n 'rstrip': str => stringify(str).replace(/\\s+$/, ''),\n 'size': v => v.length,\n 'slice': (v, begin, length) => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'sort': (v, arg) => v.sort(arg),\n 'split': (v, arg) => stringify(v).split(arg),\n 'strip': (v) => stringify(v).trim(),\n 'strip_html': v => stringify(v).replace(/|||<.*?>/g, ''),\n 'strip_newlines': v => stringify(v).replace(/\\n/g, ''),\n 'times': (v, arg) => v * arg,\n 'truncate': (v, l, o) => {\n v = stringify(v)\n o = (o === undefined) ? '...' : o\n l = l || 16\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v, l, o) => {\n if (o === undefined) o = '...'\n const arr = v.split(' ')\n let ret = arr.slice(0, l).join(' ')\n if (arr.length > l) ret += o\n return ret\n },\n 'uniq': function (arr) {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(val)) {\n return false\n }\n u[val] = true\n return true\n })\n },\n 'upcase': str => stringify(str).toUpperCase(),\n 'url_decode': x => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': x => x.split(' ').map(encodeURIComponent).join('+')\n}\n\nfunction escape (str) {\n return stringify(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str) {\n return stringify(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nfunction getFixed (v) {\n const p = (v + '').split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction getMaxFixed (l, r) {\n return Math.max(getFixed(l), getFixed(r))\n}\n\nfunction stringify (obj) {\n return obj + ''\n}\n\nfunction bindFixed (cb) {\n return (l, r) => {\n const f = getMaxFixed(l, r)\n return cb(l, r).toFixed(f)\n }\n}\n\nfunction isValidDate (date) {\n return date instanceof Date && !isNaN(date.getTime())\n}\n\nexport default function registerAll (liquid) {\n return _.forOwn(filters, (func, name) => liquid.registerFilter(name, func))\n}\n\nregisterAll.filters = filters\n","import 'regenerator-runtime/runtime'\nimport * as Scope from './scope'\nimport * as template from './template'\nimport * as _ from './util/underscore.js'\nimport assert from './util/assert.js'\nimport * as tokenizer from './tokenizer.js'\nimport Render from './render.js'\nimport Tag from './tag.js'\nimport Filter from './filter.js'\nimport Parser from './parser'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './syntax.js'\nimport { ParseError, TokenizationError, RenderBreakError, AssertionError } from './util/error.js'\nimport tags from './tags/index.js'\nimport filters from './filters.js'\n\nconst _engine = {\n init: function (tag, filter, options) {\n if (options.cache) {\n this.cache = {}\n }\n this.options = options\n this.tag = tag\n this.filter = filter\n this.parser = Parser(tag, filter)\n this.renderer = Render()\n\n tags(this, Liquid)\n filters(this, Liquid)\n\n return this\n },\n parse: function (html, filepath) {\n const tokens = tokenizer.parse(html, filepath, this.options)\n return this.parser.parse(tokens)\n },\n render: function (tpl, ctx, opts) {\n opts = _.assign({}, this.options, opts)\n const scope = Scope.factory(ctx, opts)\n return this.renderer.renderTemplates(tpl, scope)\n },\n parseAndRender: async function (html, ctx, opts) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n },\n getTemplate: async function (file, root) {\n const filepath = await template.resolve(file, root, this.options)\n return this.respectCache(filepath, async () => {\n const str = await template.read(filepath)\n return this.parse(str, filepath)\n })\n },\n renderFile: async function (file, ctx, opts) {\n opts = _.assign({}, opts)\n const templates = await this.getTemplate(file, opts.root)\n return this.render(templates, ctx, opts)\n },\n respectCache: async function (key, getter) {\n const cacheEnabled = this.options.cache\n if (cacheEnabled && this.cache[key]) {\n return this.cache[key]\n }\n const value = await getter()\n if (cacheEnabled) {\n this.cache[key] = value\n }\n return value\n },\n evalValue: function (str, scope) {\n const tpl = this.parser.parseValue(str.trim())\n return this.renderer.evalValue(tpl, scope)\n },\n registerFilter: function (name, filter) {\n return this.filter.register(name, filter)\n },\n registerTag: function (name, tag) {\n return this.tag.register(name, tag)\n },\n plugin: function (plugin) {\n return plugin.call(this, Liquid)\n },\n express: function (opts) {\n opts = opts || {}\n const self = this\n return function (filePath, ctx, cb) {\n assert(_.isArray(this.root) || _.isString(this.root),\n 'illegal views root, are you using express.js?')\n opts.root = this.root\n self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb)\n }\n }\n}\n\nfunction normalizeStringArray (value) {\n if (_.isArray(value)) return value\n if (_.isString(value)) return [value]\n throw new TypeError('illegal root: ' + value)\n}\n\nexport default function Liquid (options) {\n options = _.assign({\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_value_right: false,\n trim_value_left: false,\n greedy: true,\n strict_filters: false,\n strict_variables: false\n }, options)\n options.root = normalizeStringArray(options.root)\n\n const engine = _.create(_engine)\n engine.init(Tag(), Filter(options), options)\n return engine\n}\n\nLiquid.default = Liquid\nLiquid.isTruthy = isTruthy\nLiquid.isFalsy = isFalsy\nLiquid.evalExp = evalExp\nLiquid.evalValue = evalValue\nLiquid.Types = {\n ParseError,\n TokenizationError,\n RenderBreakError,\n AssertionError,\n AssignScope: {},\n CaptureScope: {},\n IncrementScope: {},\n DecrementScope: {}\n}\n"],"names":["global","undefined","Op","Object","prototype","hasOwn","hasOwnProperty","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","inModule","module","runtime","regeneratorRuntime","exports","wrap","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","IteratorPrototype","this","getProto","getPrototypeOf","NativeIteratorPrototype","values","call","Gp","GeneratorFunctionPrototype","Generator","create","constructor","GeneratorFunction","displayName","isGeneratorFunction","genFun","ctor","name","mark","setPrototypeOf","__proto__","awrap","arg","__await","AsyncIterator","async","innerFn","outerFn","self","tryLocsList","iter","next","then","result","done","value","toString","keys","object","key","push","reverse","length","pop","Context","skipTempReset","prev","sent","_sent","delegate","method","tryEntries","forEach","resetTryEntry","charAt","isNaN","slice","rootRecord","completion","type","rval","exception","context","handle","loc","caught","i","entry","record","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","Error","finallyEntry","complete","afterLoc","thrown","iterable","resultName","nextLoc","state","protoGenerator","generator","_invoke","doneResult","delegateResult","maybeInvokeDelegate","dispatchException","abrupt","tryCatch","fn","obj","err","defineIteratorMethods","previousPromise","callInvokeWithMethodAndArg","Promise","resolve","reject","invoke","unwrapped","error","return","TypeError","info","pushTryEntry","locs","reset","iteratorMethod","Function","toStr","arrToStr","Array","isString","isFunction","promisify","arguments","stringify","isNil","String","to_liquid","toLiquid","to_s","indexOf","cache","JSON","isObject","proto","isArray","assign","src","last","arr","uniq","u","a","l","quoted","RegExp","source","quoteBalanced","number","bool","identifier","subscript","literal","variable","rangeLimit","range","rangeCapture","hash","hashCapture","tagLine","literalLine","variableLine","numberLine","boolLine","quotedLine","rangeLine","integerLine","valueDeclaration","valueList","filter","filterCapture","filterLine","operators","initError","captureStackTrace","initLiquidError","token","input","line","file","lines","begin","end","split","Math","max","min","start","stop","step","_","map","n","str","join","message","msg","mkMessage","stack","TokenizationError","ParseError","e","originalError","RenderError","tpl","RenderBreakError","AssertionError","predicate","Scope","contexts","reduce","ctx","val","path","paths","propertyAccessSeq","scope","findContextFor","_this","readProperty","v","some","unshift","findIndex","splice","candidate","size","liquid_method_missing","opts","strict_variables","seq","j","delemiter","test","matchRightBracket","get","anySeries","iteratee","ret","item","idx","catch","mapSeries","x","statFileAsync","fs","stat","readFileAsync","readFile","filepath","root","options","extname","concat","_context","code","parse","html","parsedLinesCount","lastMatchBegin","match","raw","pos","rLiquid","currIndent","lineNumber","lastMatchEnd","tokens","exec","lastIndex","index","parseHTMLToken","parseTagToken","trim","greedy","inRaw","trim_left","trim_tag_left","trim_value_left","rLeft","replace","trim_right","trim_tag_right","trim_value_right","rRight","lexical","args","htmlFragment","isTruthy","r","evalExp","exp","operatorREs","operatorRE","expRE","op","low","evalValue","high","res","Number","toLowerCase","isFalsy","render","templates","template","renderTag","partial","renderValue","renderTemplate","_context2","resolvedHTML","filters","initial","markup","k","valueRE","Tag","Filter","stream","handlers","cb","event","h","trigger","stopRequested","shift","parseToken","parseTag","parseValue","construct","substr","init","staticFileRE","engine","Liquid","liquid","re","AssignScope","CaptureScope","groupRE","candidatesRE","DecrementScope","withRE","IncrementScope","Types","registerTag","tagToken","remainTokens","parser","parseStream","on","renderer","renderTemplates","cond","cases","elseTemplates","p","branch","rValue","group","candidates","fingerprint","groups","collection","offset","limit","reversed","_this2","forloop","finished","branches","staticValue","with","dynamicPartials","parseAndRender","getAll","blocks","blockMode","getTemplate","originBlocks","originBlockMode","staticLayout","layout","tpls","block","childDefined","cols","floor","row","col","monthNames","dayNames","monthNamesShort","abbr","dayNamesShort","suffixes","_date","d","isLeapYear","num","getMonth","daysInMonth","getDate","startDay","now","getDayOfYear","getDay","Date","getFullYear","_number","pad","year","parseInt","substring","ch","formatCodes","toLocaleString","century","getHours","getMilliseconds","getMinutes","getSuffix","round","valueOf","getSeconds","getWeekOfYear","toLocaleDateString","toLocaleTimeString","tz","getTimezoneOffset","abs","b","N","L","escapeMap","unescapeMap","toUpperCase","ceil","date","getTime","format","output","remaining","results","func","strftime","escape","m","bindFixed","pattern","replacement","arg1","arg2","amp","pow","sort","o","decodeURIComponent","encodeURIComponent","getFixed","f","toFixed","registerAll","registerFilter","_engine","tag","Parser","tokenizer","respectCache","getter","cacheEnabled","register","plugin","filePath","renderFile","normalizeStringArray","tagImpls","_tagInstance","tagImpl","impl","instance","_filterInstance","apply","argList","strict_filters","keyMatch","clear","default"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"liquid.min.js","sources":["../src/util/underscore.ts","../src/lexical.js","../src/util/error.ts","../src/util/assert.ts","../src/scope.ts","../src/template-browser.js","../src/tokenizer.js","../src/whitespace-ctrl.js","../src/syntax.js","../src/operators.js","../src/render.js","../src/tag.js","../src/filter.js","../src/parser.ts","../src/util/promise.js","../src/tags/include.js","../src/tags/index.js","../src/tags/assign.js","../src/tags/capture.js","../src/tags/case.js","../src/tags/comment.js","../src/tags/cycle.js","../src/tags/decrement.js","../src/tags/for.js","../src/tags/if.js","../src/tags/increment.js","../src/tags/layout.js","../src/tags/raw.js","../src/tags/tablerow.js","../src/tags/unless.js","../src/util/strftime.js","../src/filters.js","../src/index.ts"],"sourcesContent":["const toStr = Object.prototype.toString\nconst arrToStr = Array.prototype.toString\n\n/*\n * Checks if value is classified as a String primitive or object.\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is a string, else false.\n */\nexport function isString (value) {\n return toStr.call(value) === '[object String]'\n}\n\nexport function isFunction (value) {\n return typeof value === 'function'\n}\n\nexport function promisify (fn) {\n return function (...args) {\n return new Promise((resolve, reject) => {\n fn(...args, (err, result) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value) {\n if (isNil(value)) return String(value)\n if (isFunction(value.to_liquid)) return stringify(value.to_liquid())\n if (isFunction(value.toLiquid)) return stringify(value.toLiquid())\n if (isFunction(value.to_s)) return value.to_s()\n if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value)\n if (isFunction(value.toString)) return value.toString()\n return toStr.call(value)\n}\n\nfunction defaultToString (value) {\n const cache = []\n return JSON.stringify(value, (key, value) => {\n if (isObject(value)) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n}\n\nexport function create (proto) {\n return Object.create(proto)\n}\n\nexport function isNil (value) {\n return value === null || value === undefined\n}\n\nexport function isArray (value) {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value) {\n const signature = toStr.call(value)\n // [object XXXError]\n return signature.substr(-6, 5) === 'Error' ||\n (typeof value.message === 'string' && typeof value.name === 'string')\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (object, iteratee) {\n object = object || {}\n for (const k in object) {\n if (object.hasOwnProperty(k)) {\n if (iteratee(object[k], k, object) === false) break\n }\n }\n return object\n}\n\n/*\n * Assigns own enumerable string keyed properties of source objects to the destination object.\n * Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * Note: This method mutates object and is loosely based on Object.assign.\n *\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @return {Object} Returns object.\n */\nexport function assign (obj, ...srcs) {\n obj = isObject(obj) ? obj : {}\n srcs.forEach(src => binaryAssign(obj, src))\n return obj\n}\n\nfunction binaryAssign(target, src) {\n for(let key in src) if (src.hasOwnProperty(key)) target[key] = src[key]\n}\n\nexport function last (arr) {\n return arr[arr.length - 1]\n}\n\nexport function uniq (arr) {\n const u = {}\n const a = []\n for (let i = 0, l = arr.length; i < l; ++i) {\n if (u.hasOwnProperty(arr[i])) {\n continue\n }\n a.push(arr[i])\n u[arr[i]] = 1\n }\n return a\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value) {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\n/*\n * A function to create flexibly-numbered lists of integers,\n * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.\n * Returns a list of integers from start (inclusive) to stop (exclusive),\n * incremented (or decremented) by step, exclusive.\n * Note that ranges that stop before they start are considered to be zero-length instead of\n * negative — if you'd like a negative range, use a negative step.\n */\nexport function range (start: number, stop: number, step?: number) {\n if (arguments.length === 1) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n","// quote related\nconst singleQuoted = /'[^']*'/\nconst doubleQuoted = /\"[^\"]*\"/\nexport const quoted = new RegExp(`${singleQuoted.source}|${doubleQuoted.source}`)\nexport const quoteBalanced = new RegExp(`(?:${quoted.source}|[^'\"])*`)\n\n// basic types\nexport const integer = /-?\\d+/\nexport const number = /-?\\d+\\.?\\d*|\\.?\\d+/\nexport const bool = /true|false/\n\n// property access\nexport const identifier = /[\\w-]+[?]?/\nexport const subscript = new RegExp(`\\\\[(?:${quoted.source}|[\\\\w-\\\\.]+)\\\\]`)\nexport const literal = new RegExp(`(?:${quoted.source}|${bool.source}|${number.source})`)\nexport const variable = new RegExp(`${identifier.source}(?:\\\\.${identifier.source}|${subscript.source})*`)\n\n// range related\nexport const rangeLimit = new RegExp(`(?:${variable.source}|${number.source})`)\nexport const range = new RegExp(`\\\\(${rangeLimit.source}\\\\.\\\\.${rangeLimit.source}\\\\)`)\nexport const rangeCapture = new RegExp(`\\\\((${rangeLimit.source})\\\\.\\\\.(${rangeLimit.source})\\\\)`)\n\nexport const value = new RegExp(`(?:${variable.source}|${literal.source}|${range.source})`)\n\n// hash related\nexport const hash = new RegExp(`(?:${identifier.source})\\\\s*:\\\\s*(?:${value.source})`)\nexport const hashCapture = new RegExp(`(${identifier.source})\\\\s*:\\\\s*(${value.source})`, 'g')\n\n// full match\nexport const tagLine = new RegExp(`^\\\\s*(${identifier.source})\\\\s*([\\\\s\\\\S]*)\\\\s*$`)\nexport const literalLine = new RegExp(`^${literal.source}$`, 'i')\nexport const variableLine = new RegExp(`^${variable.source}$`)\nexport const numberLine = new RegExp(`^${number.source}$`)\nexport const boolLine = new RegExp(`^${bool.source}$`, 'i')\nexport const quotedLine = new RegExp(`^${quoted.source}$`)\nexport const rangeLine = new RegExp(`^${rangeCapture.source}$`)\nexport const integerLine = new RegExp(`^${integer.source}$`)\n\n// filter related\nexport const valueDeclaration = new RegExp(`(?:${identifier.source}\\\\s*:\\\\s*)?${value.source}`)\nexport const valueList = new RegExp(`${valueDeclaration.source}(\\\\s*,\\\\s*${valueDeclaration.source})*`)\nexport const filter = new RegExp(`${identifier.source}(?:\\\\s*:\\\\s*${valueList.source})?`, 'g')\nexport const filterCapture = new RegExp(`(${identifier.source})(?:\\\\s*:\\\\s*(${valueList.source}))?`)\nexport const filterLine = new RegExp(`^${filterCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isInteger (str) {\n return integerLine.test(str)\n}\n\nexport function isLiteral (str) {\n return literalLine.test(str)\n}\n\nexport function isRange (str) {\n return rangeLine.test(str)\n}\n\nexport function isVariable (str) {\n return variableLine.test(str)\n}\n\nexport function matchValue (str) {\n return value.exec(str)\n}\n\nexport function parseLiteral (str) {\n let res = str.match(numberLine)\n if (res) {\n return Number(str)\n }\n res = str.match(boolLine)\n if (res) {\n return str.toLowerCase() === 'true'\n }\n res = str.match(quotedLine)\n if (res) {\n return str.slice(1, -1)\n }\n throw new TypeError(`cannot parse '${str}' as literal`)\n}\n","import * as _ from './underscore'\n\nfunction captureStack () {\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n}\n\nabstract class LiquidError {\n input: string\n line: string\n file: string\n message: string\n name: string\n stack: string\n token: any\n originalError: any\n constructor(err, token) {\n this.input = token.input\n this.line = token.line\n this.file = token.file\n this.originalError = err\n this.token = token\n }\n captureStackTrace(obj) {\n this.name = obj.constructor.name\n\n captureStack.call(obj)\n const err = this.originalError\n const context = mkContext(this.input, this.line)\n this.message = mkMessage(err.message, this.token)\n this.stack = context +\n '\\n' + (this.stack || this.message) +\n (err.stack ? '\\nFrom ' + err.stack : '')\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor(message, token) {\n super({message}, token)\n super.captureStackTrace(this)\n }\n}\nTokenizationError.prototype = _.create(Error.prototype)\nTokenizationError.prototype.constructor = TokenizationError\n\nexport class ParseError extends LiquidError {\n constructor(err, token) {\n super(err, token)\n _.assign(this, err)\n super.captureStackTrace(this)\n }\n}\nParseError.prototype = _.create(Error.prototype)\nParseError.prototype.constructor = ParseError\n\nexport class RenderError extends LiquidError {\n constructor(err, tpl) {\n super(err, tpl.token)\n _.assign(this, err)\n super.captureStackTrace(this)\n }\n}\nRenderError.prototype = _.create(Error.prototype)\nRenderError.prototype.constructor = RenderError\n\nexport class RenderBreakError {\n message: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nRenderBreakError.prototype = _.create(Error.prototype)\nRenderBreakError.prototype.constructor = RenderBreakError\n\nexport class AssertionError {\n message: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nAssertionError.prototype = _.create(Error.prototype)\nAssertionError.prototype.constructor = AssertionError\n\nfunction mkContext (input, targetLine) {\n const lines = input.split('\\n')\n const begin = Math.max(targetLine - 2, 1)\n const end = Math.min(targetLine + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === targetLine) ? '>> ' : ' '\n const num = padStart(String(end).length, lineNumber)\n const text = lines[lineNumber - 1]\n return `${indicator}${num}| ${text}`\n })\n .join('\\n')\n\n return context\n}\n\nfunction mkMessage (msg, token) {\n msg = msg || ''\n if (token.file) {\n msg += ', file:' + token.file\n }\n if (token.line) {\n msg += ', line:' + token.line\n }\n return msg\n}\n\nfunction padStart (length, str) {\n str = String(str)\n const blank = Array(length - str.length).join(' ')\n return blank + str\n}\n","import { AssertionError } from './error'\n\nexport default function (predicate: any, message: string) {\n if (!predicate) {\n message = message || `expect ${predicate} to be true`\n throw new AssertionError(message)\n }\n}\n","import * as _ from './util/underscore'\nimport * as lexical from './lexical'\nimport assert from './util/assert'\n\ninterface ScopeOptions {\n dynamicPartials: boolean\n strict_variables: boolean\n strict_filters: boolean\n blocks: object\n root: Array\n}\n\nexport default class Scope {\n opts: ScopeOptions\n contexts: Array\n constructor (ctx = {}, opts?: any) {\n const defaultOptions: ScopeOptions = {\n dynamicPartials: true,\n strict_variables: false,\n strict_filters: false,\n blocks: {},\n root: []\n }\n this.opts = _.assign(defaultOptions, opts)\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => _.assign(ctx, val), _.create(null))\n }\n get (path) {\n const paths = this.propertyAccessSeq(path)\n const scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n return paths.reduce((value, key) => this.readProperty(value, key), scope)\n }\n set (path, v) {\n const paths = this.propertyAccessSeq(path)\n let scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n paths.some((key, i) => {\n if (!_.isObject(scope)) {\n return true\n }\n if (i === paths.length - 1) {\n scope[key] = v\n return true\n }\n if (undefined === scope[key]) {\n scope[key] = {}\n }\n scope = scope[key]\n })\n }\n unshift (ctx) {\n return this.contexts.unshift(ctx)\n }\n push (ctx) {\n return this.contexts.push(ctx)\n }\n pop (ctx) {\n if (!arguments.length) {\n return this.contexts.pop()\n }\n const i = this.contexts.findIndex(scope => scope === ctx)\n if (i === -1) {\n throw new TypeError('scope not found, cannot pop')\n }\n return this.contexts.splice(i, 1)[0]\n }\n findContextFor (key, filter = (arg => true)) {\n for (let i = this.contexts.length - 1; i >= 0; i--) {\n const candidate = this.contexts[i]\n if (!filter(candidate)) continue\n if (key in candidate) {\n return candidate\n }\n }\n return null\n }\n readProperty (obj, key) {\n let val\n if (_.isNil(obj)) {\n val = undefined\n } else {\n obj = toLiquid(obj)\n val = key === 'size' ? readSize(obj) : obj[key]\n if (_.isFunction(obj.liquid_method_missing)) {\n val = obj.liquid_method_missing(key)\n }\n }\n if (_.isNil(val) && this.opts.strict_variables) {\n throw new TypeError(`undefined variable: ${key}`)\n }\n return val\n }\n\n /*\n * Parse property access sequence from access string\n * @example\n * accessSeq(\"foo.bar\") // ['foo', 'bar']\n * accessSeq(\"foo['bar']\") // ['foo', 'bar']\n * accessSeq(\"foo['b]r']\") // ['foo', 'b]r']\n * accessSeq(\"foo[bar.coo]\") // ['foo', 'bar'], for bar.coo == 'bar'\n */\n propertyAccessSeq (str) {\n str = String(str)\n const seq = []\n let name = ''\n let j\n let i = 0\n while (i < str.length) {\n switch (str[i]) {\n case '[':\n push()\n\n const delemiter = str[i + 1]\n if (/['\"]/.test(delemiter)) { // foo[\"bar\"]\n j = str.indexOf(delemiter, i + 2)\n assert(j !== -1, `unbalanced ${delemiter}: ${str}`)\n name = str.slice(i + 2, j)\n push()\n i = j + 2\n } else { // foo[bar.coo]\n j = matchRightBracket(str, i + 1)\n assert(j !== -1, `unbalanced []: ${str}`)\n name = str.slice(i + 1, j)\n if (!lexical.isInteger(name)) { // foo[bar] vs. foo[1]\n name = String(this.get(name))\n }\n push()\n i = j + 1\n }\n break\n case '.':// foo.bar, foo[0].bar\n push()\n i++\n break\n default:// foo.bar\n name += str[i]\n i++\n }\n }\n push()\n\n if (!seq.length) {\n throw new TypeError(`invalid path:\"${str}\"`)\n }\n return seq\n\n function push () {\n if (name.length) seq.push(name)\n name = ''\n }\n }\n}\n\nfunction toLiquid (obj) {\n if (_.isFunction(obj.to_liquid)) {\n return obj.to_liquid()\n }\n if (_.isFunction(obj.toLiquid)) {\n return obj.toLiquid()\n }\n return obj\n}\n\nfunction readSize (obj) {\n if (!_.isNil(obj.size)) return obj.size\n if (_.isArray(obj) || _.isString(obj)) return obj.length\n return obj.size\n}\n\nfunction matchRightBracket (str, begin) {\n let stack = 1 // count of '[' - count of ']'\n for (let i = begin; i < str.length; i++) {\n if (str[i] === '[') {\n stack++\n }\n if (str[i] === ']') {\n stack--\n if (stack === 0) {\n return i\n }\n }\n }\n return -1\n}\n","import { last, isArray } from './util/underscore'\n\nfunction domResolve (root, path) {\n const base = document.createElement('base')\n base.href = root\n\n const head = document.getElementsByTagName('head')[0]\n head.insertBefore(base, head.firstChild)\n\n const a = document.createElement('a')\n a.href = path\n const resolved = a.href\n head.removeChild(base)\n\n return resolved\n}\n\nexport function resolve (filepath, root, options) {\n root = root || options.root\n if (isArray(root)) {\n root = root[0]\n }\n if (root.length && last(root) !== '/') {\n root += '/'\n }\n const url = domResolve(root, filepath)\n return url.replace(/^(\\w+:\\/\\/[^/]+)(\\/[^?]+)/, (str, origin, path) => {\n const last = path.split('/').pop()\n if (/\\.\\w+$/.test(last)) {\n return str\n }\n return origin + path + options.extname\n })\n}\n\nexport async function read (url) {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.responseText)\n } else {\n reject(new Error(xhr.statusText))\n }\n }\n xhr.onerror = () => {\n reject(new Error('An error occurred whilst receiving the response.'))\n }\n xhr.open('GET', url)\n xhr.send()\n })\n}\n","import * as lexical from './lexical'\nimport { TokenizationError } from './util/error'\nimport * as _ from './util/underscore'\nimport assert from './util/assert'\nimport whiteSpaceCtrl from './whitespace-ctrl'\n\nexport { default as whiteSpaceCtrl } from './whitespace-ctrl'\n\nexport function parse (input, file, options) {\n assert(_.isString(input), 'illegal input')\n\n const rLiquid = /({%-?([\\s\\S]*?)-?%})|({{-?([\\s\\S]*?)-?}})/g\n let currIndent = 0\n const lineNumber = LineNumber(input)\n let lastMatchEnd = 0\n const tokens = []\n\n for (let match; (match = rLiquid.exec(input)); lastMatchEnd = rLiquid.lastIndex) {\n if (match.index > lastMatchEnd) {\n tokens.push(parseHTMLToken(lastMatchEnd, match.index))\n }\n tokens.push(match[1]\n ? parseTagToken(match[1], match[2].trim(), match.index)\n : parseValueToken(match[3], match[4].trim(), match.index))\n }\n if (input.length > lastMatchEnd) {\n tokens.push(parseHTMLToken(lastMatchEnd, input.length))\n }\n whiteSpaceCtrl(tokens, options)\n return tokens\n\n function parseTagToken (raw, value, pos) {\n const match = value.match(lexical.tagLine)\n const token = {\n type: 'tag',\n indent: currIndent,\n line: lineNumber.get(pos),\n trim_left: raw.slice(0, 3) === '{%-',\n trim_right: raw.slice(-3) === '-%}',\n raw,\n value,\n input,\n file\n }\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, token)\n }\n token.name = match[1]\n token.args = match[2]\n return token\n }\n\n function parseValueToken (raw, value, pos) {\n return {\n type: 'value',\n line: lineNumber.get(pos),\n trim_left: raw.slice(0, 3) === '{{-',\n trim_right: raw.slice(-3) === '-}}',\n raw,\n value,\n input,\n file\n }\n }\n\n function parseHTMLToken (begin, end) {\n const htmlFragment = input.slice(begin, end)\n currIndent = _.last((htmlFragment).split('\\n')).length\n\n return {\n type: 'html',\n raw: htmlFragment,\n value: htmlFragment\n }\n }\n}\n\nfunction LineNumber (html) {\n let parsedLinesCount = 0\n let lastMatchBegin = -1\n\n return {\n get: function (pos) {\n const lines = html.slice(lastMatchBegin + 1, pos).split('\\n')\n parsedLinesCount += lines.length - 1\n lastMatchBegin = pos\n return parsedLinesCount + 1\n }\n }\n}\n","import { assign } from './util/underscore'\n\nexport default function whiteSpaceCtrl (tokens, options) {\n options = assign({ greedy: true }, options)\n let inRaw = false\n\n tokens.forEach((token, i) => {\n if (shouldTrimLeft(token, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && token.name === 'raw') inRaw = true\n if (token.type === 'tag' && token.name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token, inRaw, options) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trim_left || options.trim_tag_left\n if (token.type === 'value') return token.trim_left || options.trim_value_left\n}\n\nfunction shouldTrimRight (token, inRaw, options) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trim_right || options.trim_tag_right\n if (token.type === 'value') return token.trim_right || options.trim_value_right\n}\n\nfunction trimLeft (token, greedy) {\n if (!token || token.type !== 'html') return\n\n const rLeft = greedy ? /\\s+$/g : /[\\t\\r ]*$/g\n token.value = token.value.replace(rLeft, '')\n}\n\nfunction trimRight (token, greedy) {\n if (!token || token.type !== 'html') return\n\n const rRight = greedy ? /^\\s+/g : /^[\\t\\r ]*\\n?/g\n token.value = token.value.replace(rRight, '')\n}\n","import Operators from './operators'\nimport * as lexical from './lexical'\nimport assert from './util/assert'\n\nconst operators = Operators(isTruthy)\n\nexport function evalExp (exp, scope) {\n assert(scope, 'unable to evalExp: scope undefined')\n const operatorREs = lexical.operators\n let match\n for (let i = 0; i < operatorREs.length; i++) {\n const operatorRE = operatorREs[i]\n const expRE = new RegExp(`^(${lexical.quoteBalanced.source})(${operatorRE.source})(${lexical.quoteBalanced.source})$`)\n if ((match = exp.match(expRE))) {\n const l = evalExp(match[1], scope)\n const op = operators[match[2].trim()]\n const r = evalExp(match[3], scope)\n return op(l, r)\n }\n }\n\n if ((match = exp.match(lexical.rangeLine))) {\n const low = evalValue(match[1], scope)\n const high = evalValue(match[2], scope)\n const range = []\n for (let j = low; j <= high; j++) {\n range.push(j)\n }\n return range\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str, scope) {\n str = str && str.trim()\n if (!str) return undefined\n\n if (lexical.isLiteral(str)) {\n return lexical.parseLiteral(str)\n }\n if (lexical.isVariable(str)) {\n return scope.get(str)\n }\n throw new TypeError(`cannot eval '${str}' as value`)\n}\n\nexport function isTruthy (val) {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val) {\n return val === false || undefined === val || val === null\n}\n","export default function (isTruthy) {\n return {\n '==': (l, r) => l === r,\n '!=': (l, r) => l !== r,\n '>': (l, r) => l !== null && r !== null && l > r,\n '<': (l, r) => l !== null && r !== null && l < r,\n '>=': (l, r) => l !== null && r !== null && l >= r,\n '<=': (l, r) => l !== null && r !== null && l <= r,\n 'contains': (l, r) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l, r) => isTruthy(l) && isTruthy(r),\n 'or': (l, r) => isTruthy(l) || isTruthy(r)\n }\n}\n","import { evalExp } from './syntax'\nimport { RenderBreakError, RenderError } from './util/error'\nimport { stringify, create } from './util/underscore'\nimport assert from './util/assert'\n\nconst render = {\n renderTemplates: async function (templates, scope) {\n assert(scope, 'unable to evalTemplates: scope undefined')\n\n let html = ''\n for (const tpl of templates) {\n try {\n html += await renderTemplate.call(this, tpl)\n } catch (e) {\n if (e instanceof RenderBreakError) {\n e.resolvedHTML = html\n throw e\n }\n throw e instanceof RenderError ? e : new RenderError(e, tpl)\n }\n }\n return html\n\n async function renderTemplate (template) {\n if (template.type === 'tag') {\n const partial = await this.renderTag(template, scope)\n return partial === undefined ? '' : partial\n }\n if (template.type === 'value') {\n return this.renderValue(template, scope)\n }\n return template.value\n }\n },\n\n renderTag: async function (template, scope) {\n if (template.name === 'continue') {\n throw new RenderBreakError('continue')\n }\n if (template.name === 'break') {\n throw new RenderBreakError('break')\n }\n return template.render(scope)\n },\n\n renderValue: async function (template, scope) {\n const partial = this.evalValue(template, scope)\n return partial === undefined ? '' : stringify(partial)\n },\n\n evalValue: function (template, scope) {\n assert(scope, 'unable to evalValue: scope undefined')\n return template.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(template.initial, scope))\n }\n}\n\nexport default function () {\n const instance = create(render)\n return instance\n}\n","import { hashCapture } from './lexical'\nimport { create } from './util/underscore'\nimport { evalValue } from './syntax'\nimport assert from './util/assert'\n\nfunction hash (markup, scope) {\n const obj = {}\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n obj[k] = evalValue(v, scope)\n }\n return obj\n}\n\nexport default function () {\n let tagImpls = {}\n\n const _tagInstance = {\n render: async function (scope) {\n const obj = hash(this.token.args, scope)\n const impl = this.tagImpl\n if (typeof impl.render !== 'function') {\n return ''\n }\n return impl.render(scope, obj)\n },\n parse: function (token, tokens) {\n this.type = 'tag'\n this.token = token\n this.name = token.name\n\n const tagImpl = tagImpls[this.name]\n assert(tagImpl, `tag ${this.name} not found`)\n this.tagImpl = create(tagImpl)\n if (this.tagImpl.parse) {\n this.tagImpl.parse(token, tokens)\n }\n }\n }\n\n function register (name, tag) {\n tagImpls[name] = tag\n }\n\n function construct (token, tokens) {\n const instance = create(_tagInstance)\n instance.parse(token, tokens)\n return instance\n }\n\n function clear () {\n tagImpls = {}\n }\n\n return {\n construct,\n register,\n clear\n }\n}\n","import * as lexical from './lexical'\nimport { evalValue } from './syntax'\nimport assert from './util/assert'\nimport { assign, create } from './util/underscore'\n\nconst valueRE = new RegExp(`${lexical.value.source}`, 'g')\n\nexport default function (options) {\n options = assign({}, options)\n let filters = {}\n\n const _filterInstance = {\n render: function (output, scope) {\n const args = this.args.map(arg => evalValue(arg, scope))\n args.unshift(output)\n return this.filter.apply(null, args)\n },\n parse: function (str) {\n let match = lexical.filterLine.exec(str)\n assert(match, 'illegal filter: ' + str)\n\n const name = match[1]\n const argList = match[2] || ''\n const filter = filters[name]\n if (typeof filter !== 'function') {\n if (options.strict_filters) {\n throw new TypeError(`undefined filter: ${name}`)\n }\n this.name = name\n this.filter = x => x\n this.args = []\n return this\n }\n\n const args = []\n while ((match = valueRE.exec(argList.trim()))) {\n const v = match[0]\n const re = new RegExp(`${v}\\\\s*:`, 'g')\n const keyMatch = re.exec(match.input)\n const currentMatchIsKey = keyMatch && keyMatch.index === match.index\n currentMatchIsKey ? args.push(`'${v}'`) : args.push(v)\n }\n\n this.name = name\n this.filter = filter\n this.args = args\n\n return this\n }\n }\n\n function construct (str) {\n const instance = create(_filterInstance)\n return instance.parse(str)\n }\n\n function register (name, filter) {\n filters[name] = filter\n }\n\n function clear () {\n filters = {}\n }\n\n return {\n construct, register, clear\n }\n}\n","import * as lexical from './lexical'\nimport { ParseError } from './util/error'\nimport assert from './util/assert'\n\nexport default function (Tag, Filter) {\n class ParseStream {\n tokens: Array\n handlers: object\n stopRequested: boolean\n constructor (tokens) {\n this.tokens = tokens\n this.handlers = {}\n }\n on (name, cb) {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: any) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n }\n start () {\n this.trigger('start')\n let token\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' &&\n this.trigger(`tag:${token.name}`, token)) {\n continue\n }\n const template = parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n }\n stop () {\n this.stopRequested = true\n return this\n }\n }\n\n function parse (tokens) {\n let token\n const templates = []\n while ((token = tokens.shift())) {\n templates.push(parseToken(token, tokens))\n }\n return templates\n }\n\n function parseToken (token, tokens) {\n try {\n let tpl = null\n if (token.type === 'tag') {\n tpl = parseTag(token, tokens)\n } else if (token.type === 'value') {\n tpl = parseValue(token.value)\n } else { // token.type === 'html'\n tpl = token\n }\n tpl.token = token\n return tpl\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n\n function parseTag (token, tokens) {\n if (token.name === 'continue' || token.name === 'break') return token\n return Tag.construct(token, tokens)\n }\n\n function parseValue (str) {\n let match = lexical.matchValue(str)\n assert(match, `illegal value string: ${str}`)\n\n const initial = match[0]\n str = str.substr(match.index + match[0].length)\n\n const filters = []\n while ((match = lexical.filter.exec(str))) {\n filters.push([match[0].trim()])\n }\n\n return {\n type: 'value',\n initial: initial,\n filters: filters.map(str => Filter.construct(str))\n }\n }\n\n function parseStream (tokens) {\n return new ParseStream(tokens)\n }\n\n return {\n parse,\n parseTag,\n parseStream,\n parseValue\n }\n}\n","/*\n * Call functions in serial until someone resolved.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function anySeries (iterable, iteratee) {\n let ret = Promise.reject(new Error('init'))\n iterable.forEach(function (item, idx) {\n ret = ret.catch(e => iteratee(item, idx, iterable))\n })\n return ret\n}\n\n/*\n * Call functions in serial until someone rejected.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function mapSeries (iterable, iteratee) {\n let ret = Promise.resolve('init')\n const result = []\n iterable.forEach(function (item, idx) {\n ret = ret\n .then(() => iteratee(item, idx, iterable))\n .then(x => result.push(x))\n })\n return ret.then(() => result)\n}\n","import assert from '../util/assert'\nimport { value, quotedLine } from '../lexical'\n\nconst staticFileRE = /[^\\s,]+/\n\nexport default function (liquid, Liquid) {\n const withRE = new RegExp(`with\\\\s+(${value.source})`)\n\n liquid.registerTag('include', {\n parse: function (token) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticValue = match[0]\n }\n\n match = value.exec(token.args)\n if (match) {\n this.value = match[0]\n }\n\n match = withRE.exec(token.args)\n if (match) {\n this.with = match[1]\n }\n },\n render: async function (scope, hash) {\n let filepath\n if (scope.opts.dynamicPartials) {\n if (quotedLine.exec(this.value)) {\n const template = this.value.slice(1, -1)\n filepath = await liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = Liquid.evalValue(this.value, scope)\n }\n } else {\n filepath = this.staticValue\n }\n assert(filepath, `cannot include with empty filename`)\n\n const originBlocks = scope.opts.blocks\n const originBlockMode = scope.opts.blockMode\n\n scope.opts.blocks = {}\n scope.opts.blockMode = 'output'\n if (this.with) {\n hash[filepath] = Liquid.evalValue(this.with, scope)\n }\n const templates = await liquid.getTemplate(filepath, scope.opts.root)\n scope.push(hash)\n const html = await liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.opts.blocks = originBlocks\n scope.opts.blockMode = originBlockMode\n return html\n }\n })\n}\n","import For from './for'\nimport Assign from './assign'\nimport Capture from './capture'\nimport Case from './case'\nimport Comment from './comment'\nimport Include from './include'\nimport Decrement from './decrement'\nimport Cycle from './cycle'\nimport If from './if'\nimport Increment from './increment'\nimport Layout from './layout'\nimport Raw from './raw'\nimport Tablerow from './tablerow'\nimport Unless from './unless'\n\nexport default function (engine, Liquid) {\n Assign(engine, Liquid)\n Capture(engine, Liquid)\n Case(engine, Liquid)\n Comment(engine, Liquid)\n Cycle(engine, Liquid)\n Decrement(engine, Liquid)\n For(engine, Liquid)\n If(engine, Liquid)\n Include(engine, Liquid)\n Increment(engine, Liquid)\n Layout(engine, Liquid)\n Raw(engine, Liquid)\n Tablerow(engine, Liquid)\n Unless(engine, Liquid)\n}\n","import assert from '../util/assert'\nimport { identifier } from '../lexical'\nimport { create } from '../util/underscore'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n const { AssignScope } = Liquid.Types\n\n liquid.registerTag('assign', {\n parse: function (token) {\n const match = token.args.match(re)\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (scope) {\n const ctx = create(AssignScope)\n ctx[this.key] = liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n })\n}\n","import assert from '../util/assert'\nimport { create } from '../util/underscore'\nimport { identifier } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`(${identifier.source})`)\n const { CaptureScope } = Liquid.Types\n\n liquid.registerTag('capture', {\n parse: function (tagToken, remainTokens) {\n const match = tagToken.args.match(re)\n assert(match, `${tagToken.args} not valid identifier`)\n\n this.variable = match[1]\n this.templates = []\n\n const stream = liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', token => stream.stop())\n .on('template', tpl => this.templates.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope, hash) {\n const html = await liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = create(CaptureScope)\n ctx[this.variable] = html\n scope.push(ctx)\n }\n })\n}\n","export default function (liquid, Liquid) {\n liquid.registerTag('case', {\n\n parse: function (tagToken, remainTokens) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p = []\n const stream = liquid.parser.parseStream(remainTokens)\n .on('tag:when', token => {\n this.cases.push({\n val: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endcase', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = Liquid.evalExp(branch.val, scope)\n const cond = Liquid.evalExp(this.cond, scope)\n if (val === cond) {\n return liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","export default function (liquid) {\n liquid.registerTag('comment', {\n parse: function (tagToken, remainTokens) {\n const stream = liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n })\n}\n","import assert from '../util/assert'\nimport { value as rValue } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\n const candidatesRE = new RegExp(rValue.source, 'g')\n\n liquid.registerTag('cycle', {\n\n parse: function (tagToken, remainTokens) {\n let match = groupRE.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.group = match[1] || ''\n const candidates = match[2]\n\n this.candidates = []\n\n while ((match = candidatesRE.exec(candidates))) {\n this.candidates.push(match[0])\n }\n assert(this.candidates.length, `empty candidates: ${tagToken.raw}`)\n },\n\n render: function (scope, hash) {\n const group = Liquid.evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n\n const groups = scope.opts.groups = scope.opts.groups || {}\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n\n return Liquid.evalValue(candidate, scope)\n }\n })\n}\n","import { create } from '../util/underscore'\nimport assert from '../util/assert'\nimport { identifier } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const { CaptureScope, AssignScope, DecrementScope } = Liquid.Types\n\n liquid.registerTag('decrement', {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope, hash) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n const proto = Object.getPrototypeOf(ctx)\n return proto !== CaptureScope && proto !== AssignScope\n }\n )\n if (!context) {\n context = create(DecrementScope)\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n return --context[this.variable]\n }\n })\n}\n","import { mapSeries } from '../util/promise'\nimport { isString, isObject, isArray } from '../util/underscore'\nimport assert from '../util/assert'\nimport { identifier, value, hash } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const RenderBreakError = Liquid.Types.RenderBreakError\n const re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\n liquid.registerTag('for', { parse, render })\n\n function parse (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n this.variable = match[1]\n this.collection = match[2]\n this.reversed = !!match[3]\n\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endfor', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n }\n async function render (scope, hash) {\n let collection = Liquid.evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]])\n }\n }\n if (!isArray(collection) || !collection.length) {\n return liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n if (this.reversed) collection.reverse()\n\n const contexts = collection.map((item, i) => {\n const ctx = {}\n ctx[this.variable] = item\n ctx.forloop = {\n first: i === 0,\n index: i + 1,\n index0: i,\n last: i === collection.length - 1,\n length: collection.length,\n rindex: collection.length - i,\n rindex0: collection.length - i - 1\n }\n return ctx\n })\n\n let html = ''\n let finished = false\n await mapSeries(contexts, async context => {\n if (finished) return\n\n scope.push(context)\n try {\n html += await liquid.renderer.renderTemplates(this.templates, scope)\n } catch (e) {\n if (e instanceof RenderBreakError) {\n html += e.resolvedHTML\n if (e.message === 'break') {\n finished = true\n }\n } else throw e\n }\n scope.pop(context)\n })\n return html\n }\n}\n","export default function (liquid, Liquid) {\n liquid.registerTag('if', {\n\n parse: function (tagToken, remainTokens) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', token => {\n this.branches.push({\n cond: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endif', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n for (const branch of this.branches) {\n const cond = Liquid.evalExp(branch.cond, scope)\n if (Liquid.isTruthy(cond)) {\n return liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","import assert from '../util/assert'\nimport { create } from '../util/underscore'\nimport { identifier } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const { CaptureScope, AssignScope, IncrementScope } = Liquid.Types\n\n liquid.registerTag('increment', {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope, hash) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n const proto = Object.getPrototypeOf(ctx)\n return proto !== CaptureScope && proto !== AssignScope\n }\n )\n if (!context) {\n context = create(IncrementScope)\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n const val = context[this.variable]\n context[this.variable]++\n return val\n }\n })\n}\n","import assert from '../util/assert'\nimport { value as rValue } from '../lexical'\n\n/*\n * blockMode:\n * * \"store\": store rendered html into blocks\n * * \"output\": output rendered html\n */\n\nexport default function (liquid, Liquid) {\n const staticFileRE = /\\S+/\n\n liquid.registerTag('layout', {\n parse: function (token, remainTokens) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticLayout = match[0]\n }\n\n match = rValue.exec(token.args)\n if (match) {\n this.layout = match[0]\n }\n\n this.tpls = liquid.parser.parse(remainTokens)\n },\n render: async function (scope, hash) {\n const layout = scope.opts.dynamicPartials\n ? Liquid.evalValue(this.layout, scope)\n : this.staticLayout\n assert(layout, `cannot apply layout with empty filename`)\n\n // render the remaining tokens immediately\n scope.opts.blockMode = 'store'\n const html = await liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.opts.blocks[''] === undefined) {\n scope.opts.blocks[''] = html\n }\n const templates = await liquid.getTemplate(layout, scope.opts.root)\n scope.push(hash)\n scope.opts.blockMode = 'output'\n const partial = await liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n })\n\n liquid.registerTag('block', {\n parse: function (token, remainTokens) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n\n this.tpls = []\n const stream = liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', tpl => this.tpls.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${token.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope) {\n const childDefined = scope.opts.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.opts.blockMode === 'store') {\n scope.opts.blocks[this.block] = html\n return ''\n }\n return html\n }\n })\n}\n","export default function (liquid) {\n liquid.registerTag('raw', {\n parse: function (tagToken, remainTokens) {\n this.tokens = []\n\n const stream = liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\n if (token.name === 'endraw') stream.stop()\n else this.tokens.push(token)\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: function (scope, hash) {\n return this.tokens.map(token => token.raw).join('')\n }\n })\n}\n","import { mapSeries } from '../util/promise'\nimport assert from '../util/assert'\nimport { identifier, value, hash } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\n liquid.registerTag('tablerow', {\n\n parse: function (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.variable = match[1]\n this.collection = match[2]\n this.templates = []\n\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: async function (scope, hash) {\n let collection = Liquid.evalExp(this.collection, scope) || []\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = hash.cols || collection.length\n const contexts = collection.map((item, i) => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row\n let html = ''\n await mapSeries(contexts, async (context, idx) => {\n row = Math.floor(idx / cols) + 1\n const col = (idx % cols) + 1\n if (col === 1) {\n if (row !== 1) {\n html += ''\n }\n html += ``\n }\n\n html += ``\n scope.push(context)\n html += await liquid.renderer.renderTemplates(this.templates, scope)\n html += ''\n scope.pop(context)\n return html\n })\n if (row > 0) {\n html += ''\n }\n return html\n }\n })\n}\n","export default function (liquid, Liquid) {\n liquid.registerTag('unless', {\n parse: function (tagToken, remainTokens) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', x => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n const cond = Liquid.evalExp(this.cond, scope)\n return Liquid.isFalsy(cond)\n ? liquid.renderer.renderTemplates(this.templates, scope)\n : liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","const monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst monthNamesShort = monthNames.map(abbr)\nconst dayNamesShort = dayNames.map(abbr)\nconst suffixes = {\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n 'default': 'th'\n}\n\nfunction abbr (str) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d) {\n const feb = _date.isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n },\n\n getDayOfYear: function (d) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += _date.daysInMonth(d)[i]\n }\n return num + d.getDate()\n },\n\n // Startday is an integer of which day to start the week measuring from\n // TODO: that comment was retarted. fix it.\n getWeekOfYear: function (d, startDay) {\n // Skip to startDay of this week\n const now = this.getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return _number.pad(Math.floor((now - then) / 7) + 1, 2)\n },\n\n isLeapYear: function (d) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d) {\n const str = d.getDate().toString()\n const index = parseInt(str.slice(-1))\n return suffixes[index] || suffixes['default']\n },\n\n century: function (d) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst _number = {\n pad: function (value, size, ch) {\n if (!ch) ch = '0'\n let result = value.toString()\n let pad = size - result.length\n\n while (pad-- > 0) {\n result = ch + result\n }\n\n return result\n }\n}\n\nconst formatCodes = {\n a: function (d) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d) {\n return dayNames[d.getDay()]\n },\n b: function (d) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d) {\n return monthNames[d.getMonth()]\n },\n c: function (d) {\n return d.toLocaleString()\n },\n C: function (d) {\n return _date.century(d)\n },\n d: function (d) {\n return _number.pad(d.getDate(), 2)\n },\n e: function (d) {\n return _number.pad(d.getDate(), 2, ' ')\n },\n H: function (d) {\n return _number.pad(d.getHours(), 2)\n },\n I: function (d) {\n return _number.pad(d.getHours() % 12 || 12, 2)\n },\n j: function (d) {\n return _number.pad(_date.getDayOfYear(d), 3)\n },\n k: function (d) {\n return _number.pad(d.getHours(), 2, ' ')\n },\n l: function (d) {\n return _number.pad(d.getHours() % 12 || 12, 2, ' ')\n },\n L: function (d) {\n return _number.pad(d.getMilliseconds(), 3)\n },\n m: function (d) {\n return _number.pad(d.getMonth() + 1, 2)\n },\n M: function (d) {\n return _number.pad(d.getMinutes(), 2)\n },\n p: function (d) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d) {\n return _date.getSuffix(d)\n },\n s: function (d) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d) {\n return _number.pad(d.getSeconds(), 2)\n },\n u: function (d) {\n return d.getDay() || 7\n },\n U: function (d) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d) {\n return d.getDay()\n },\n W: function (d) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d) {\n return d.toLocaleDateString()\n },\n X: function (d) {\n return d.toLocaleTimeString()\n },\n y: function (d) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d) {\n return d.getFullYear()\n },\n z: function (d) {\n const tz = d.getTimezoneOffset() / 60 * 100\n return (tz > 0 ? '-' : '+') + _number.pad(Math.abs(tz), 4)\n },\n '%': function () {\n return '%'\n }\n}\nformatCodes.h = formatCodes.b\nformatCodes.N = formatCodes.L\n\nexport default function (d, format) {\n let output = ''\n let remaining = format\n\n while (true) {\n const r = /%./g\n const results = r.exec(remaining)\n\n // No more format codes. Add the remaining text and return\n if (!results) {\n return output + remaining\n }\n\n // Add the preceding text\n output += remaining.slice(0, r.lastIndex - 2)\n remaining = remaining.slice(r.lastIndex)\n\n // Add the format code\n const ch = results[0].charAt(1)\n const func = formatCodes[ch]\n output += func ? func.call(this, d) : '%' + ch\n }\n}\n","import strftime from './util/strftime'\nimport * as _ from './util/underscore'\nimport { isTruthy } from './syntax'\n\nconst escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nconst filters = {\n 'abs': v => Math.abs(v),\n 'append': (v, arg) => v + arg,\n 'capitalize': str => stringify(str).charAt(0).toUpperCase() + str.slice(1),\n 'ceil': v => Math.ceil(v),\n 'concat': (v, arg) => Array.prototype.concat.call(v, arg),\n 'date': (v, arg) => {\n let date = v\n if (v === 'now') {\n date = new Date()\n } else if (_.isString(v)) {\n date = new Date(v)\n }\n return isValidDate(date) ? strftime(date, arg) : v\n },\n 'default': (v, arg) => isTruthy(v) ? v : arg,\n 'divided_by': (v, arg) => v / arg,\n 'downcase': v => v.toLowerCase(),\n 'escape': escape,\n\n 'escape_once': str => escape(unescape(str)),\n 'first': v => v[0],\n 'floor': v => Math.floor(v),\n 'join': (v, arg) => v.join(arg === undefined ? ' ' : arg),\n 'last': v => _.last(v),\n 'lstrip': v => stringify(v).replace(/^\\s+/, ''),\n 'map': (arr, arg) => arr.map(v => v[arg]),\n 'minus': bindFixed((v, arg) => v - arg),\n 'modulo': bindFixed((v, arg) => v % arg),\n 'newline_to_br': v => v.replace(/\\n/g, '
'),\n 'plus': bindFixed((v, arg) => Number(v) + Number(arg)),\n 'prepend': (v, arg) => arg + v,\n 'remove': (v, arg) => v.split(arg).join(''),\n 'remove_first': (v, l) => v.replace(l, ''),\n 'replace': (v, pattern, replacement) =>\n stringify(v).split(pattern).join(replacement),\n 'replace_first': (v, arg1, arg2) => stringify(v).replace(arg1, arg2),\n 'reverse': v => v.reverse(),\n 'round': (v, arg) => {\n const amp = Math.pow(10, arg || 0)\n return Math.round(v * amp, arg) / amp\n },\n 'rstrip': str => stringify(str).replace(/\\s+$/, ''),\n 'size': v => v.length,\n 'slice': (v, begin, length) => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'sort': (v, arg) => v.sort(arg),\n 'split': (v, arg) => stringify(v).split(arg),\n 'strip': (v) => stringify(v).trim(),\n 'strip_html': v => stringify(v).replace(/|||<.*?>/g, ''),\n 'strip_newlines': v => stringify(v).replace(/\\n/g, ''),\n 'times': (v, arg) => v * arg,\n 'truncate': (v, l, o) => {\n v = stringify(v)\n o = (o === undefined) ? '...' : o\n l = l || 16\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v, l, o) => {\n if (o === undefined) o = '...'\n const arr = v.split(' ')\n let ret = arr.slice(0, l).join(' ')\n if (arr.length > l) ret += o\n return ret\n },\n 'uniq': function (arr) {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(val)) {\n return false\n }\n u[val] = true\n return true\n })\n },\n 'upcase': str => stringify(str).toUpperCase(),\n 'url_decode': x => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': x => x.split(' ').map(encodeURIComponent).join('+')\n}\n\nfunction escape (str) {\n return stringify(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str) {\n return stringify(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nfunction getFixed (v) {\n const p = (v + '').split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction getMaxFixed (l, r) {\n return Math.max(getFixed(l), getFixed(r))\n}\n\nfunction stringify (obj) {\n return obj + ''\n}\n\nfunction bindFixed (cb) {\n return (l, r) => {\n const f = getMaxFixed(l, r)\n return cb(l, r).toFixed(f)\n }\n}\n\nfunction isValidDate (date) {\n return date instanceof Date && !isNaN(date.getTime())\n}\n\nexport default function registerAll (liquid, Liquid) {\n return _.forOwn(filters, (func, name) => liquid.registerFilter(name, func))\n}\n\nregisterAll.filters = filters\n","import Scope from './scope'\nimport * as template from './template'\nimport * as _ from './util/underscore'\nimport assert from './util/assert'\nimport * as tokenizer from './tokenizer'\nimport Render from './render'\nimport Tag from './tag'\nimport Filter from './filter'\nimport Parser from './parser'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './syntax'\nimport { ParseError, TokenizationError, RenderBreakError, AssertionError } from './util/error'\nimport tags from './tags/index'\nimport filters from './filters'\n\nexport default class Liquid {\n private cache: object\n private options: any\n private tags: any\n private filters: any\n private parser: any\n private renderer: any\n\n constructor (options) {\n options = _.assign({\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_value_right: false,\n trim_value_left: false,\n greedy: true,\n strict_filters: false,\n strict_variables: false\n }, options)\n options.root = normalizeStringArray(options.root)\n\n if (options.cache) {\n this.cache = {}\n }\n this.options = options\n this.tags = Tag()\n this.filters = Filter(options)\n this.parser = Parser(this.tags, this.filters)\n this.renderer = Render()\n\n tags(this, Liquid)\n filters(this, Liquid)\n }\n parse(html: string, filepath?: string) {\n const tokens = tokenizer.parse(html, filepath, this.options)\n return this.parser.parse(tokens)\n }\n render(tpl: string, ctx: any, opts: any) {\n opts = _.assign({}, this.options, opts)\n const scope = new Scope(ctx, opts)\n return this.renderer.renderTemplates(tpl, scope)\n }\n async parseAndRender(html, ctx, opts) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n }\n async getTemplate(file, root) {\n const filepath = await template.resolve(file, root, this.options)\n return this.respectCache(filepath, async () => {\n const str = await template.read(filepath)\n return this.parse(str, filepath)\n })\n }\n async renderFile(file, ctx, opts) {\n opts = _.assign({}, opts)\n const templates = await this.getTemplate(file, opts.root)\n return this.render(templates, ctx, opts)\n }\n async respectCache (key, getter) {\n const cacheEnabled = this.options.cache\n if (cacheEnabled && this.cache[key]) {\n return this.cache[key]\n }\n const value = await getter()\n if (cacheEnabled) {\n this.cache[key] = value\n }\n return value\n }\n evalValue (str, scope) {\n const tpl = this.parser.parseValue(str.trim())\n return this.renderer.evalValue(tpl, scope)\n }\n registerFilter (name, filter) {\n return this.filters.register(name, filter)\n }\n registerTag (name, tag) {\n return this.tags.register(name, tag)\n }\n plugin (plugin) {\n return plugin.call(this, Liquid)\n }\n express (opts) {\n opts = opts || {}\n const self = this\n return function (filePath, ctx, cb) {\n assert(_.isArray(this.root) || _.isString(this.root),\n 'illegal views root, are you using express.js?')\n opts.root = this.root\n self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb)\n }\n }\n static default = Liquid\n static isTruthy = isTruthy\n static isFalsy = isFalsy\n static evalExp = evalExp\n static evalValue = evalValue\n static Types = {\n ParseError,\n TokenizationError,\n RenderBreakError,\n AssertionError,\n AssignScope: {},\n CaptureScope: {},\n IncrementScope: {},\n DecrementScope: {}\n }\n}\n\nfunction normalizeStringArray (value) {\n if (_.isArray(value)) return value\n if (_.isString(value)) return [value]\n throw new TypeError('illegal root: ' + value)\n}\n"],"names":["toStr","Object","prototype","toString","arrToStr","Array","isString","value","call","isFunction","stringify","isNil","String","to_liquid","toLiquid","to_s","indexOf","cache","JSON","key","isObject","push","create","proto","isArray","assign","obj","_i","srcs","forEach","src","target","hasOwnProperty","binaryAssign","last","arr","length","type","quoted","RegExp","source","quoteBalanced","number","bool","identifier","subscript","literal","variable","rangeLimit","range","rangeCapture","hash","hashCapture","tagLine","literalLine","variableLine","numberLine","boolLine","quotedLine","rangeLine","integerLine","valueDeclaration","valueList","filter","filterCapture","filterLine","operators","captureStack","Error","captureStackTrace","this","constructor","err","token","input","line","file","originalError","LiquidError","name","targetLine","lines","begin","end","context","split","Math","max","min","start","stop","step","arguments","i","_\r\n .range","map","lineNumber","str","indicator","num","join","text","message","msg","mkMessage","stack","_super","_this","tslib_1.__extends","TokenizationError","_.create","_.assign","ParseError","tpl","RenderError","RenderBreakError","predicate","AssertionError","ctx","opts","dynamicPartials","strict_variables","strict_filters","blocks","root","contexts","Scope","reduce","val","path","paths","propertyAccessSeq","scope","findContextFor","_.last","readProperty","v","some","_.isObject","undefined","unshift","pop","findIndex","TypeError","splice","arg","candidate","_.isNil","_.isFunction","size","_.isArray","_.isString","liquid_method_missing","j","seq","delemiter","test","assert","slice","matchRightBracket","get","resolve","filepath","options","base","document","createElement","href","head","getElementsByTagName","insertBefore","firstChild","a","resolved","removeChild","domResolve","replace","origin","extname","parse","html","parsedLinesCount","lastMatchBegin","raw","pos","rLiquid","currIndent","lastMatchEnd","tokens","match","exec","lastIndex","index","parseHTMLToken","parseTagToken","trim","trim_left","trim_right","greedy","inRaw","trim_tag_left","trim_value_left","rLeft","trimLeft","trim_tag_right","trim_value_right","rRight","trimRight","whiteSpaceCtrl","lexical.tagLine","indent","args","htmlFragment","isTruthy","==","l","r","!=",">","<",">=","<=","contains","and","or","evalExp","exp","operatorREs","lexical.operators","operatorRE","expRE","lexical.quoteBalanced","op","lexical.rangeLine","low","evalValue","high","res","Number","toLowerCase","lexical.parseLiteral","isFalsy","render","renderTemplates","templates","templates_1","_a","template","renderTag","partial","renderValue","_b","e_1","resolvedHTML","filters","prev","initial","tagImpls","_tagInstance","markup","k","impl","tagImpl","construct","instance","register","tag","clear","valueRE","lexical.value","Tag","Filter","handlers","ParseStream","cb","event","h","trigger","stopRequested","shift","parseToken","parseTag","parseValue","e","substr","lexical.filter","parseStream","mapSeries","iterable","iteratee","ret","Promise","result","item","idx","then","x","staticFileRE","engine","Liquid","liquid","re","AssignScope","CaptureScope","groupRE","candidatesRE","DecrementScope","withRE","IncrementScope","registerTag","tagToken","remainTokens","stream","parser","on","renderer","cond","cases","elseTemplates","p","branch","rValue","group","candidates","fingerprint","groups","getPrototypeOf","Types","collection","reversed","keys","offset","limit","reverse","forloop","first","index0","rindex","rindex0","finished","branches","staticValue","with","parseAndRender","getAll","originBlocks","originBlockMode","blockMode","getTemplate","staticLayout","layout","tpls","block","childDefined","cols","row","floor","col","monthNames","dayNames","monthNamesShort","abbr","dayNamesShort","suffixes","1","2","3","default","_date","daysInMonth","d","isLeapYear","getDayOfYear","getMonth","getDate","getWeekOfYear","startDay","now","getDay","Date","getFullYear","_number","pad","year","getSuffix","parseInt","century","substring","ch","formatCodes","A","b","B","c","toLocaleString","C","H","getHours","I","L","getMilliseconds","m","M","getMinutes","P","q","s","round","valueOf","S","getSeconds","u","U","w","W","toLocaleDateString","X","toLocaleTimeString","y","Y","z","tz","getTimezoneOffset","abs","%","N","escapeMap","&","\"","'","unescapeMap","&","<",">",""","'","append","capitalize","charAt","toUpperCase","ceil","concat","date","isNaN","getTime","format","output","remaining","results","func","strftime","divided_by","downcase","escape","escape_once","lstrip","minus","bindFixed","modulo","newline_to_br","plus","prepend","remove","remove_first","pattern","replacement","replace_first","arg1","arg2","amp","pow","rstrip","sort","strip","strip_html","strip_newlines","times","truncate","o","truncatewords","uniq","upcase","url_decode","decodeURIComponent","url_encode","encodeURIComponent","getFixed","f","toFixed","registerAll","object","_.forOwn","registerFilter","normalizeStringArray","tags","_filterInstance","apply","lexical.filterLine","argList","keyMatch","Parser","tokenizer.parse","template.resolve","respectCache","url","reject","xhr","XMLHttpRequest","onload","status","responseText","statusText","onerror","open","send","template.read","getter","cacheEnabled","plugin","self","filePath","renderFile"],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 9a439cae5..fb0570408 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "liquidjs", - "version": "6.4.3", + "version": "7.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index baabf6a21..b57e90d3e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "liquidjs", - "version": "6.4.3", + "version": "7.0.0", "description": "Liquid template engine by pure JavaScript: compatible to shopify, easy to extend.", "main": "dist/liquid.common.js", "module": "src/index.js",