diff options
| author | Shipwreckt <me@shipwreckt.co.uk> | 2025-10-31 20:02:14 +0000 |
|---|---|---|
| committer | Shipwreckt <me@shipwreckt.co.uk> | 2025-10-31 20:02:14 +0000 |
| commit | 7a52ddeba2a68388b544f529d2d92104420f77b0 (patch) | |
| tree | 15ddd47457a2cb4a96060747437d36474e4f6b4e /node_modules/nunjucks | |
| parent | 53d6ae2b5568437afa5e4995580a3fb679b7b91b (diff) | |
Changed from static to 11ty!
Diffstat (limited to 'node_modules/nunjucks')
41 files changed, 20373 insertions, 0 deletions
diff --git a/node_modules/nunjucks/LICENSE b/node_modules/nunjucks/LICENSE new file mode 100644 index 0000000..af6b438 --- /dev/null +++ b/node_modules/nunjucks/LICENSE @@ -0,0 +1,26 @@ +Copyright (c) 2012-2015, James Long +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file diff --git a/node_modules/nunjucks/README.md b/node_modules/nunjucks/README.md new file mode 100644 index 0000000..2d60169 --- /dev/null +++ b/node_modules/nunjucks/README.md @@ -0,0 +1,58 @@ +# Nunjucks + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Linux Build][github-actions-image]][github-actions-url] +[![Windows Build][appveyor-image]][appveyor-url] +[![Test Codecov][codecov-image]][codecov-url] + +[Nunjucks](https://mozilla.github.io/nunjucks/) is a full featured +templating engine for javascript. It is heavily inspired by +[jinja2](http://jinja.pocoo.org/). View the docs +[here](https://mozilla.github.io/nunjucks/). + +## Installation + +`npm install nunjucks` + +To use the file watcher built-in to Nunjucks, Chokidar must be installed separately. + +`npm install nunjucks chokidar` + +(View the [CHANGELOG](https://github.com/mozilla/nunjucks/releases)) + +## Documentation + +See [here](https://mozilla.github.io/nunjucks/). + +## Browser Support + +Supported in all modern browsers. For IE8 support, use [es5-shim](https://github.com/es-shims/es5-shim). + +## Tests + +Run the tests with `npm test`. + +Watch `master` branch's [tests running in the browser](https://mozilla.github.io/nunjucks/files/tests/browser/). + +## Mailing List + +Join our mailing list and get help with and issues you have: +https://groups.google.com/forum/?fromgroups#!forum/nunjucks + +## Want to help? + +Contributions are always welcome! Before you submit an issue or pull request, please read our [contribution guidelines](CONTRIBUTING.md). + +[Contributors](https://github.com/mozilla/nunjucks/graphs/contributors) + +[npm-image]: https://img.shields.io/npm/v/nunjucks.svg +[npm-url]: https://npmjs.org/package/nunjucks +[downloads-image]: https://img.shields.io/npm/dm/nunjucks.svg +[downloads-url]: https://npmjs.org/package/nunjucks +[github-actions-image]: https://img.shields.io/github/workflow/status/mozilla/nunjucks/Tests/master.svg?label=linux +[github-actions-url]: https://github.com/mozilla/nunjucks/actions +[appveyor-image]: https://img.shields.io/appveyor/ci/fdintino/nunjucks/master.svg?label=windows +[appveyor-url]: https://ci.appveyor.com/project/fdintino/nunjucks +[codecov-image]: https://img.shields.io/codecov/c/gh/mozilla/nunjucks.svg +[codecov-url]: https://codecov.io/gh/mozilla/nunjucks/branch/master diff --git a/node_modules/nunjucks/bin/precompile b/node_modules/nunjucks/bin/precompile new file mode 100755 index 0000000..1708235 --- /dev/null +++ b/node_modules/nunjucks/bin/precompile @@ -0,0 +1,58 @@ +#!/usr/bin/env node +var {program} = require('commander'); +var precompile = require('../src/precompile').precompile; +var Environment = require('../src/environment').Environment; +var lib = require('../src/lib'); + +var cmdpath = null; + +program + .storeOptionsAsProperties(false) + .passCommandToAction(false); + +program + .name('precompile') + .usage('[-f|--force] [-a|--filters <filters>] [-n|--name <name>] [-i|--include <regex>] [-x|--exclude <regex>] [-w|--wrapper <wrapper>] <path>') + .arguments('<path>') + .helpOption('-?, -h, --help', 'Display this help message') + .option('-f, --force', 'Force compilation to continue on error') + .option('-a, --filters <filters>', 'Give the compiler a comma-delimited list of asynchronous filters, required for correctly generating code') + .option('-n, --name <name>', 'Specify the template name when compiling a single file') + .option('-i, --include <regex>', 'Include a file or folder which match the regex but would otherwise be excluded. You can use this flag multiple times', concat, ['\\.html$', '\\.jinja$']) + .option('-x, --exclude <regex>', 'Exclude a file or folder which match the regex but would otherwise be included. You can use this flag multiple times', concat, []) + .option('-w, --wrapper <wrapper>', 'Load a external plugin to change the output format of the precompiled templates (for example, "-w custom" will load a module named "nunjucks-custom")') + .action(function (path) { + cmdpath = path; + }) + .parse(process.argv); + +function concat(value, previous) { + return previous.concat(value); +} + +if (cmdpath == null) { + program.outputHelp(); + console.error('\nerror: no path given'); + process.exit(1); +} + +var env = new Environment([]); + +const opts = program.opts(); + +lib.each([].concat(opts.filters).join(',').split(','), function (name) { + env.addFilter(name.trim(), function () {}, true); +}); + +if (opts.wrapper) { + opts.wrapper = require('nunjucks-' + opts.wrapper).wrapper; +} + +console.log(precompile(cmdpath, { + env : env, + force : opts.force, + name : opts.name, + wrapper: opts.wrapper, + include : [].concat(opts.include), + exclude : [].concat(opts.exclude) +})); diff --git a/node_modules/nunjucks/bin/precompile.cmd b/node_modules/nunjucks/bin/precompile.cmd new file mode 100644 index 0000000..0e49bce --- /dev/null +++ b/node_modules/nunjucks/bin/precompile.cmd @@ -0,0 +1,5 @@ +@IF EXIST "%~dp0\node.exe" ( + "%~dp0\node.exe" "%~dp0\precompile" %* +) ELSE ( + node "%~dp0\precompile" %* +)
\ No newline at end of file diff --git a/node_modules/nunjucks/browser/nunjucks-slim.js b/node_modules/nunjucks/browser/nunjucks-slim.js new file mode 100644 index 0000000..2825de9 --- /dev/null +++ b/node_modules/nunjucks/browser/nunjucks-slim.js @@ -0,0 +1,3709 @@ +/*! Browser bundle of nunjucks 3.2.4 (slim, only works with precompiled templates) */ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["nunjucks"] = factory(); + else + root["nunjucks"] = factory(); +})(typeof self !== 'undefined' ? self : this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 6); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports) { + + + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var ArrayProto = Array.prototype; +var ObjProto = Object.prototype; +var escapeMap = { + '&': '&', + '"': '"', + '\'': ''', + '<': '<', + '>': '>', + '\\': '\' +}; +var escapeRegex = /[&"'<>\\]/g; +var exports = module.exports = {}; +function hasOwnProp(obj, k) { + return ObjProto.hasOwnProperty.call(obj, k); +} +exports.hasOwnProp = hasOwnProp; +function lookupEscape(ch) { + return escapeMap[ch]; +} +function _prettifyError(path, withInternals, err) { + if (!err.Update) { + // not one of ours, cast it + err = new exports.TemplateError(err); + } + err.Update(path); + + // Unless they marked the dev flag, show them a trace from here + if (!withInternals) { + var old = err; + err = new Error(old.message); + err.name = old.name; + } + return err; +} +exports._prettifyError = _prettifyError; +function TemplateError(message, lineno, colno) { + var err; + var cause; + if (message instanceof Error) { + cause = message; + message = cause.name + ": " + cause.message; + } + if (Object.setPrototypeOf) { + err = new Error(message); + Object.setPrototypeOf(err, TemplateError.prototype); + } else { + err = this; + Object.defineProperty(err, 'message', { + enumerable: false, + writable: true, + value: message + }); + } + Object.defineProperty(err, 'name', { + value: 'Template render error' + }); + if (Error.captureStackTrace) { + Error.captureStackTrace(err, this.constructor); + } + var getStack; + if (cause) { + var stackDescriptor = Object.getOwnPropertyDescriptor(cause, 'stack'); + getStack = stackDescriptor && (stackDescriptor.get || function () { + return stackDescriptor.value; + }); + if (!getStack) { + getStack = function getStack() { + return cause.stack; + }; + } + } else { + var stack = new Error(message).stack; + getStack = function getStack() { + return stack; + }; + } + Object.defineProperty(err, 'stack', { + get: function get() { + return getStack.call(err); + } + }); + Object.defineProperty(err, 'cause', { + value: cause + }); + err.lineno = lineno; + err.colno = colno; + err.firstUpdate = true; + err.Update = function Update(path) { + var msg = '(' + (path || 'unknown path') + ')'; + + // only show lineno + colno next to path of template + // where error occurred + if (this.firstUpdate) { + if (this.lineno && this.colno) { + msg += " [Line " + this.lineno + ", Column " + this.colno + "]"; + } else if (this.lineno) { + msg += " [Line " + this.lineno + "]"; + } + } + msg += '\n '; + if (this.firstUpdate) { + msg += ' '; + } + this.message = msg + (this.message || ''); + this.firstUpdate = false; + return this; + }; + return err; +} +if (Object.setPrototypeOf) { + Object.setPrototypeOf(TemplateError.prototype, Error.prototype); +} else { + TemplateError.prototype = Object.create(Error.prototype, { + constructor: { + value: TemplateError + } + }); +} +exports.TemplateError = TemplateError; +function escape(val) { + return val.replace(escapeRegex, lookupEscape); +} +exports.escape = escape; +function isFunction(obj) { + return ObjProto.toString.call(obj) === '[object Function]'; +} +exports.isFunction = isFunction; +function isArray(obj) { + return ObjProto.toString.call(obj) === '[object Array]'; +} +exports.isArray = isArray; +function isString(obj) { + return ObjProto.toString.call(obj) === '[object String]'; +} +exports.isString = isString; +function isObject(obj) { + return ObjProto.toString.call(obj) === '[object Object]'; +} +exports.isObject = isObject; + +/** + * @param {string|number} attr + * @returns {(string|number)[]} + * @private + */ +function _prepareAttributeParts(attr) { + if (!attr) { + return []; + } + if (typeof attr === 'string') { + return attr.split('.'); + } + return [attr]; +} + +/** + * @param {string} attribute Attribute value. Dots allowed. + * @returns {function(Object): *} + */ +function getAttrGetter(attribute) { + var parts = _prepareAttributeParts(attribute); + return function attrGetter(item) { + var _item = item; + for (var i = 0; i < parts.length; i++) { + var part = parts[i]; + + // If item is not an object, and we still got parts to handle, it means + // that something goes wrong. Just roll out to undefined in that case. + if (hasOwnProp(_item, part)) { + _item = _item[part]; + } else { + return undefined; + } + } + return _item; + }; +} +exports.getAttrGetter = getAttrGetter; +function groupBy(obj, val, throwOnUndefined) { + var result = {}; + var iterator = isFunction(val) ? val : getAttrGetter(val); + for (var i = 0; i < obj.length; i++) { + var value = obj[i]; + var key = iterator(value, i); + if (key === undefined && throwOnUndefined === true) { + throw new TypeError("groupby: attribute \"" + val + "\" resolved to undefined"); + } + (result[key] || (result[key] = [])).push(value); + } + return result; +} +exports.groupBy = groupBy; +function toArray(obj) { + return Array.prototype.slice.call(obj); +} +exports.toArray = toArray; +function without(array) { + var result = []; + if (!array) { + return result; + } + var length = array.length; + var contains = toArray(arguments).slice(1); + var index = -1; + while (++index < length) { + if (indexOf(contains, array[index]) === -1) { + result.push(array[index]); + } + } + return result; +} +exports.without = without; +function repeat(char_, n) { + var str = ''; + for (var i = 0; i < n; i++) { + str += char_; + } + return str; +} +exports.repeat = repeat; +function each(obj, func, context) { + if (obj == null) { + return; + } + if (ArrayProto.forEach && obj.forEach === ArrayProto.forEach) { + obj.forEach(func, context); + } else if (obj.length === +obj.length) { + for (var i = 0, l = obj.length; i < l; i++) { + func.call(context, obj[i], i, obj); + } + } +} +exports.each = each; +function map(obj, func) { + var results = []; + if (obj == null) { + return results; + } + if (ArrayProto.map && obj.map === ArrayProto.map) { + return obj.map(func); + } + for (var i = 0; i < obj.length; i++) { + results[results.length] = func(obj[i], i); + } + if (obj.length === +obj.length) { + results.length = obj.length; + } + return results; +} +exports.map = map; +function asyncIter(arr, iter, cb) { + var i = -1; + function next() { + i++; + if (i < arr.length) { + iter(arr[i], i, next, cb); + } else { + cb(); + } + } + next(); +} +exports.asyncIter = asyncIter; +function asyncFor(obj, iter, cb) { + var keys = keys_(obj || {}); + var len = keys.length; + var i = -1; + function next() { + i++; + var k = keys[i]; + if (i < len) { + iter(k, obj[k], i, len, next); + } else { + cb(); + } + } + next(); +} +exports.asyncFor = asyncFor; +function indexOf(arr, searchElement, fromIndex) { + return Array.prototype.indexOf.call(arr || [], searchElement, fromIndex); +} +exports.indexOf = indexOf; +function keys_(obj) { + /* eslint-disable no-restricted-syntax */ + var arr = []; + for (var k in obj) { + if (hasOwnProp(obj, k)) { + arr.push(k); + } + } + return arr; +} +exports.keys = keys_; +function _entries(obj) { + return keys_(obj).map(function (k) { + return [k, obj[k]]; + }); +} +exports._entries = _entries; +function _values(obj) { + return keys_(obj).map(function (k) { + return obj[k]; + }); +} +exports._values = _values; +function extend(obj1, obj2) { + obj1 = obj1 || {}; + keys_(obj2).forEach(function (k) { + obj1[k] = obj2[k]; + }); + return obj1; +} +exports._assign = exports.extend = extend; +function inOperator(key, val) { + if (isArray(val) || isString(val)) { + return val.indexOf(key) !== -1; + } else if (isObject(val)) { + return key in val; + } + throw new Error('Cannot use "in" operator to search for "' + key + '" in unexpected types.'); +} +exports.inOperator = inOperator; + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var lib = __webpack_require__(1); +var arrayFrom = Array.from; +var supportsIterators = typeof Symbol === 'function' && Symbol.iterator && typeof arrayFrom === 'function'; + +// Frames keep track of scoping both at compile-time and run-time so +// we know how to access variables. Block tags can introduce special +// variables, for example. +var Frame = /*#__PURE__*/function () { + function Frame(parent, isolateWrites) { + this.variables = Object.create(null); + this.parent = parent; + this.topLevel = false; + // if this is true, writes (set) should never propagate upwards past + // this frame to its parent (though reads may). + this.isolateWrites = isolateWrites; + } + var _proto = Frame.prototype; + _proto.set = function set(name, val, resolveUp) { + // Allow variables with dots by automatically creating the + // nested structure + var parts = name.split('.'); + var obj = this.variables; + var frame = this; + if (resolveUp) { + if (frame = this.resolve(parts[0], true)) { + frame.set(name, val); + return; + } + } + for (var i = 0; i < parts.length - 1; i++) { + var id = parts[i]; + if (!obj[id]) { + obj[id] = {}; + } + obj = obj[id]; + } + obj[parts[parts.length - 1]] = val; + }; + _proto.get = function get(name) { + var val = this.variables[name]; + if (val !== undefined) { + return val; + } + return null; + }; + _proto.lookup = function lookup(name) { + var p = this.parent; + var val = this.variables[name]; + if (val !== undefined) { + return val; + } + return p && p.lookup(name); + }; + _proto.resolve = function resolve(name, forWrite) { + var p = forWrite && this.isolateWrites ? undefined : this.parent; + var val = this.variables[name]; + if (val !== undefined) { + return this; + } + return p && p.resolve(name); + }; + _proto.push = function push(isolateWrites) { + return new Frame(this, isolateWrites); + }; + _proto.pop = function pop() { + return this.parent; + }; + return Frame; +}(); +function makeMacro(argNames, kwargNames, func) { + return function macro() { + for (var _len = arguments.length, macroArgs = new Array(_len), _key = 0; _key < _len; _key++) { + macroArgs[_key] = arguments[_key]; + } + var argCount = numArgs(macroArgs); + var args; + var kwargs = getKeywordArgs(macroArgs); + if (argCount > argNames.length) { + args = macroArgs.slice(0, argNames.length); + + // Positional arguments that should be passed in as + // keyword arguments (essentially default values) + macroArgs.slice(args.length, argCount).forEach(function (val, i) { + if (i < kwargNames.length) { + kwargs[kwargNames[i]] = val; + } + }); + args.push(kwargs); + } else if (argCount < argNames.length) { + args = macroArgs.slice(0, argCount); + for (var i = argCount; i < argNames.length; i++) { + var arg = argNames[i]; + + // Keyword arguments that should be passed as + // positional arguments, i.e. the caller explicitly + // used the name of a positional arg + args.push(kwargs[arg]); + delete kwargs[arg]; + } + args.push(kwargs); + } else { + args = macroArgs; + } + return func.apply(this, args); + }; +} +function makeKeywordArgs(obj) { + obj.__keywords = true; + return obj; +} +function isKeywordArgs(obj) { + return obj && Object.prototype.hasOwnProperty.call(obj, '__keywords'); +} +function getKeywordArgs(args) { + var len = args.length; + if (len) { + var lastArg = args[len - 1]; + if (isKeywordArgs(lastArg)) { + return lastArg; + } + } + return {}; +} +function numArgs(args) { + var len = args.length; + if (len === 0) { + return 0; + } + var lastArg = args[len - 1]; + if (isKeywordArgs(lastArg)) { + return len - 1; + } else { + return len; + } +} + +// A SafeString object indicates that the string should not be +// autoescaped. This happens magically because autoescaping only +// occurs on primitive string objects. +function SafeString(val) { + if (typeof val !== 'string') { + return val; + } + this.val = val; + this.length = val.length; +} +SafeString.prototype = Object.create(String.prototype, { + length: { + writable: true, + configurable: true, + value: 0 + } +}); +SafeString.prototype.valueOf = function valueOf() { + return this.val; +}; +SafeString.prototype.toString = function toString() { + return this.val; +}; +function copySafeness(dest, target) { + if (dest instanceof SafeString) { + return new SafeString(target); + } + return target.toString(); +} +function markSafe(val) { + var type = typeof val; + if (type === 'string') { + return new SafeString(val); + } else if (type !== 'function') { + return val; + } else { + return function wrapSafe(args) { + var ret = val.apply(this, arguments); + if (typeof ret === 'string') { + return new SafeString(ret); + } + return ret; + }; + } +} +function suppressValue(val, autoescape) { + val = val !== undefined && val !== null ? val : ''; + if (autoescape && !(val instanceof SafeString)) { + val = lib.escape(val.toString()); + } + return val; +} +function ensureDefined(val, lineno, colno) { + if (val === null || val === undefined) { + throw new lib.TemplateError('attempted to output null or undefined value', lineno + 1, colno + 1); + } + return val; +} +function memberLookup(obj, val) { + if (obj === undefined || obj === null) { + return undefined; + } + if (typeof obj[val] === 'function') { + return function () { + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + return obj[val].apply(obj, args); + }; + } + return obj[val]; +} +function callWrap(obj, name, context, args) { + if (!obj) { + throw new Error('Unable to call `' + name + '`, which is undefined or falsey'); + } else if (typeof obj !== 'function') { + throw new Error('Unable to call `' + name + '`, which is not a function'); + } + return obj.apply(context, args); +} +function contextOrFrameLookup(context, frame, name) { + var val = frame.lookup(name); + return val !== undefined ? val : context.lookup(name); +} +function handleError(error, lineno, colno) { + if (error.lineno) { + return error; + } else { + return new lib.TemplateError(error, lineno, colno); + } +} +function asyncEach(arr, dimen, iter, cb) { + if (lib.isArray(arr)) { + var len = arr.length; + lib.asyncIter(arr, function iterCallback(item, i, next) { + switch (dimen) { + case 1: + iter(item, i, len, next); + break; + case 2: + iter(item[0], item[1], i, len, next); + break; + case 3: + iter(item[0], item[1], item[2], i, len, next); + break; + default: + item.push(i, len, next); + iter.apply(this, item); + } + }, cb); + } else { + lib.asyncFor(arr, function iterCallback(key, val, i, len, next) { + iter(key, val, i, len, next); + }, cb); + } +} +function asyncAll(arr, dimen, func, cb) { + var finished = 0; + var len; + var outputArr; + function done(i, output) { + finished++; + outputArr[i] = output; + if (finished === len) { + cb(null, outputArr.join('')); + } + } + if (lib.isArray(arr)) { + len = arr.length; + outputArr = new Array(len); + if (len === 0) { + cb(null, ''); + } else { + for (var i = 0; i < arr.length; i++) { + var item = arr[i]; + switch (dimen) { + case 1: + func(item, i, len, done); + break; + case 2: + func(item[0], item[1], i, len, done); + break; + case 3: + func(item[0], item[1], item[2], i, len, done); + break; + default: + item.push(i, len, done); + func.apply(this, item); + } + } + } + } else { + var keys = lib.keys(arr || {}); + len = keys.length; + outputArr = new Array(len); + if (len === 0) { + cb(null, ''); + } else { + for (var _i = 0; _i < keys.length; _i++) { + var k = keys[_i]; + func(k, arr[k], _i, len, done); + } + } + } +} +function fromIterator(arr) { + if (typeof arr !== 'object' || arr === null || lib.isArray(arr)) { + return arr; + } else if (supportsIterators && Symbol.iterator in arr) { + return arrayFrom(arr); + } else { + return arr; + } +} +module.exports = { + Frame: Frame, + makeMacro: makeMacro, + makeKeywordArgs: makeKeywordArgs, + numArgs: numArgs, + suppressValue: suppressValue, + ensureDefined: ensureDefined, + memberLookup: memberLookup, + contextOrFrameLookup: contextOrFrameLookup, + callWrap: callWrap, + handleError: handleError, + isArray: lib.isArray, + keys: lib.keys, + SafeString: SafeString, + copySafeness: copySafeness, + markSafe: markSafe, + asyncEach: asyncEach, + asyncAll: asyncAll, + inOperator: lib.inOperator, + fromIterator: fromIterator +}; + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +var Loader = __webpack_require__(4); +var PrecompiledLoader = /*#__PURE__*/function (_Loader) { + _inheritsLoose(PrecompiledLoader, _Loader); + function PrecompiledLoader(compiledTemplates) { + var _this; + _this = _Loader.call(this) || this; + _this.precompiled = compiledTemplates || {}; + return _this; + } + var _proto = PrecompiledLoader.prototype; + _proto.getSource = function getSource(name) { + if (this.precompiled[name]) { + return { + src: { + type: 'code', + obj: this.precompiled[name] + }, + path: name + }; + } + return null; + }; + return PrecompiledLoader; +}(Loader); +module.exports = { + PrecompiledLoader: PrecompiledLoader +}; + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +var path = __webpack_require__(0); +var _require = __webpack_require__(5), + EmitterObj = _require.EmitterObj; +module.exports = /*#__PURE__*/function (_EmitterObj) { + _inheritsLoose(Loader, _EmitterObj); + function Loader() { + return _EmitterObj.apply(this, arguments) || this; + } + var _proto = Loader.prototype; + _proto.resolve = function resolve(from, to) { + return path.resolve(path.dirname(from), to); + }; + _proto.isRelative = function isRelative(filename) { + return filename.indexOf('./') === 0 || filename.indexOf('../') === 0; + }; + return Loader; +}(EmitterObj); + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// A simple class system, more documentation to come +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } +function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } +function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +var EventEmitter = __webpack_require__(13); +var lib = __webpack_require__(1); +function parentWrap(parent, prop) { + if (typeof parent !== 'function' || typeof prop !== 'function') { + return prop; + } + return function wrap() { + // Save the current parent method + var tmp = this.parent; + + // Set parent to the previous method, call, and restore + this.parent = parent; + var res = prop.apply(this, arguments); + this.parent = tmp; + return res; + }; +} +function extendClass(cls, name, props) { + props = props || {}; + lib.keys(props).forEach(function (k) { + props[k] = parentWrap(cls.prototype[k], props[k]); + }); + var subclass = /*#__PURE__*/function (_cls) { + _inheritsLoose(subclass, _cls); + function subclass() { + return _cls.apply(this, arguments) || this; + } + _createClass(subclass, [{ + key: "typename", + get: function get() { + return name; + } + }]); + return subclass; + }(cls); + lib._assign(subclass.prototype, props); + return subclass; +} +var Obj = /*#__PURE__*/function () { + function Obj() { + // Unfortunately necessary for backwards compatibility + this.init.apply(this, arguments); + } + var _proto = Obj.prototype; + _proto.init = function init() {}; + Obj.extend = function extend(name, props) { + if (typeof name === 'object') { + props = name; + name = 'anonymous'; + } + return extendClass(this, name, props); + }; + _createClass(Obj, [{ + key: "typename", + get: function get() { + return this.constructor.name; + } + }]); + return Obj; +}(); +var EmitterObj = /*#__PURE__*/function (_EventEmitter) { + _inheritsLoose(EmitterObj, _EventEmitter); + function EmitterObj() { + var _this2; + var _this; + _this = _EventEmitter.call(this) || this; + // Unfortunately necessary for backwards compatibility + (_this2 = _this).init.apply(_this2, arguments); + return _this; + } + var _proto2 = EmitterObj.prototype; + _proto2.init = function init() {}; + EmitterObj.extend = function extend(name, props) { + if (typeof name === 'object') { + props = name; + name = 'anonymous'; + } + return extendClass(this, name, props); + }; + _createClass(EmitterObj, [{ + key: "typename", + get: function get() { + return this.constructor.name; + } + }]); + return EmitterObj; +}(EventEmitter); +module.exports = { + Obj: Obj, + EmitterObj: EmitterObj +}; + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var lib = __webpack_require__(1); +var _require = __webpack_require__(7), + Environment = _require.Environment, + Template = _require.Template; +var Loader = __webpack_require__(4); +var loaders = __webpack_require__(3); +var precompile = __webpack_require__(0); +var compiler = __webpack_require__(0); +var parser = __webpack_require__(0); +var lexer = __webpack_require__(0); +var runtime = __webpack_require__(2); +var nodes = __webpack_require__(0); +var installJinjaCompat = __webpack_require__(17); + +// A single instance of an environment, since this is so commonly used +var e; +function configure(templatesPath, opts) { + opts = opts || {}; + if (lib.isObject(templatesPath)) { + opts = templatesPath; + templatesPath = null; + } + var TemplateLoader; + if (loaders.FileSystemLoader) { + TemplateLoader = new loaders.FileSystemLoader(templatesPath, { + watch: opts.watch, + noCache: opts.noCache + }); + } else if (loaders.WebLoader) { + TemplateLoader = new loaders.WebLoader(templatesPath, { + useCache: opts.web && opts.web.useCache, + async: opts.web && opts.web.async + }); + } + e = new Environment(TemplateLoader, opts); + if (opts && opts.express) { + e.express(opts.express); + } + return e; +} +module.exports = { + Environment: Environment, + Template: Template, + Loader: Loader, + FileSystemLoader: loaders.FileSystemLoader, + NodeResolveLoader: loaders.NodeResolveLoader, + PrecompiledLoader: loaders.PrecompiledLoader, + WebLoader: loaders.WebLoader, + compiler: compiler, + parser: parser, + lexer: lexer, + runtime: runtime, + lib: lib, + nodes: nodes, + installJinjaCompat: installJinjaCompat, + configure: configure, + reset: function reset() { + e = undefined; + }, + compile: function compile(src, env, path, eagerCompile) { + if (!e) { + configure(); + } + return new Template(src, env, path, eagerCompile); + }, + render: function render(name, ctx, cb) { + if (!e) { + configure(); + } + return e.render(name, ctx, cb); + }, + renderString: function renderString(src, ctx, cb) { + if (!e) { + configure(); + } + return e.renderString(src, ctx, cb); + }, + precompile: precompile ? precompile.precompile : undefined, + precompileString: precompile ? precompile.precompileString : undefined +}; + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +var asap = __webpack_require__(8); +var _waterfall = __webpack_require__(11); +var lib = __webpack_require__(1); +var compiler = __webpack_require__(0); +var filters = __webpack_require__(12); +var _require = __webpack_require__(3), + FileSystemLoader = _require.FileSystemLoader, + WebLoader = _require.WebLoader, + PrecompiledLoader = _require.PrecompiledLoader; +var tests = __webpack_require__(14); +var globals = __webpack_require__(15); +var _require2 = __webpack_require__(5), + Obj = _require2.Obj, + EmitterObj = _require2.EmitterObj; +var globalRuntime = __webpack_require__(2); +var handleError = globalRuntime.handleError, + Frame = globalRuntime.Frame; +var expressApp = __webpack_require__(16); + +// If the user is using the async API, *always* call it +// asynchronously even if the template was synchronous. +function callbackAsap(cb, err, res) { + asap(function () { + cb(err, res); + }); +} + +/** + * A no-op template, for use with {% include ignore missing %} + */ +var noopTmplSrc = { + type: 'code', + obj: { + root: function root(env, context, frame, runtime, cb) { + try { + cb(null, ''); + } catch (e) { + cb(handleError(e, null, null)); + } + } + } +}; +var Environment = /*#__PURE__*/function (_EmitterObj) { + _inheritsLoose(Environment, _EmitterObj); + function Environment() { + return _EmitterObj.apply(this, arguments) || this; + } + var _proto = Environment.prototype; + _proto.init = function init(loaders, opts) { + var _this = this; + // The dev flag determines the trace that'll be shown on errors. + // If set to true, returns the full trace from the error point, + // otherwise will return trace starting from Template.render + // (the full trace from within nunjucks may confuse developers using + // the library) + // defaults to false + opts = this.opts = opts || {}; + this.opts.dev = !!opts.dev; + + // The autoescape flag sets global autoescaping. If true, + // every string variable will be escaped by default. + // If false, strings can be manually escaped using the `escape` filter. + // defaults to true + this.opts.autoescape = opts.autoescape != null ? opts.autoescape : true; + + // If true, this will make the system throw errors if trying + // to output a null or undefined value + this.opts.throwOnUndefined = !!opts.throwOnUndefined; + this.opts.trimBlocks = !!opts.trimBlocks; + this.opts.lstripBlocks = !!opts.lstripBlocks; + this.loaders = []; + if (!loaders) { + // The filesystem loader is only available server-side + if (FileSystemLoader) { + this.loaders = [new FileSystemLoader('views')]; + } else if (WebLoader) { + this.loaders = [new WebLoader('/views')]; + } + } else { + this.loaders = lib.isArray(loaders) ? loaders : [loaders]; + } + + // It's easy to use precompiled templates: just include them + // before you configure nunjucks and this will automatically + // pick it up and use it + if (typeof window !== 'undefined' && window.nunjucksPrecompiled) { + this.loaders.unshift(new PrecompiledLoader(window.nunjucksPrecompiled)); + } + this._initLoaders(); + this.globals = globals(); + this.filters = {}; + this.tests = {}; + this.asyncFilters = []; + this.extensions = {}; + this.extensionsList = []; + lib._entries(filters).forEach(function (_ref) { + var name = _ref[0], + filter = _ref[1]; + return _this.addFilter(name, filter); + }); + lib._entries(tests).forEach(function (_ref2) { + var name = _ref2[0], + test = _ref2[1]; + return _this.addTest(name, test); + }); + }; + _proto._initLoaders = function _initLoaders() { + var _this2 = this; + this.loaders.forEach(function (loader) { + // Caching and cache busting + loader.cache = {}; + if (typeof loader.on === 'function') { + loader.on('update', function (name, fullname) { + loader.cache[name] = null; + _this2.emit('update', name, fullname, loader); + }); + loader.on('load', function (name, source) { + _this2.emit('load', name, source, loader); + }); + } + }); + }; + _proto.invalidateCache = function invalidateCache() { + this.loaders.forEach(function (loader) { + loader.cache = {}; + }); + }; + _proto.addExtension = function addExtension(name, extension) { + extension.__name = name; + this.extensions[name] = extension; + this.extensionsList.push(extension); + return this; + }; + _proto.removeExtension = function removeExtension(name) { + var extension = this.getExtension(name); + if (!extension) { + return; + } + this.extensionsList = lib.without(this.extensionsList, extension); + delete this.extensions[name]; + }; + _proto.getExtension = function getExtension(name) { + return this.extensions[name]; + }; + _proto.hasExtension = function hasExtension(name) { + return !!this.extensions[name]; + }; + _proto.addGlobal = function addGlobal(name, value) { + this.globals[name] = value; + return this; + }; + _proto.getGlobal = function getGlobal(name) { + if (typeof this.globals[name] === 'undefined') { + throw new Error('global not found: ' + name); + } + return this.globals[name]; + }; + _proto.addFilter = function addFilter(name, func, async) { + var wrapped = func; + if (async) { + this.asyncFilters.push(name); + } + this.filters[name] = wrapped; + return this; + }; + _proto.getFilter = function getFilter(name) { + if (!this.filters[name]) { + throw new Error('filter not found: ' + name); + } + return this.filters[name]; + }; + _proto.addTest = function addTest(name, func) { + this.tests[name] = func; + return this; + }; + _proto.getTest = function getTest(name) { + if (!this.tests[name]) { + throw new Error('test not found: ' + name); + } + return this.tests[name]; + }; + _proto.resolveTemplate = function resolveTemplate(loader, parentName, filename) { + var isRelative = loader.isRelative && parentName ? loader.isRelative(filename) : false; + return isRelative && loader.resolve ? loader.resolve(parentName, filename) : filename; + }; + _proto.getTemplate = function getTemplate(name, eagerCompile, parentName, ignoreMissing, cb) { + var _this3 = this; + var that = this; + var tmpl = null; + if (name && name.raw) { + // this fixes autoescape for templates referenced in symbols + name = name.raw; + } + if (lib.isFunction(parentName)) { + cb = parentName; + parentName = null; + eagerCompile = eagerCompile || false; + } + if (lib.isFunction(eagerCompile)) { + cb = eagerCompile; + eagerCompile = false; + } + if (name instanceof Template) { + tmpl = name; + } else if (typeof name !== 'string') { + throw new Error('template names must be a string: ' + name); + } else { + for (var i = 0; i < this.loaders.length; i++) { + var loader = this.loaders[i]; + tmpl = loader.cache[this.resolveTemplate(loader, parentName, name)]; + if (tmpl) { + break; + } + } + } + if (tmpl) { + if (eagerCompile) { + tmpl.compile(); + } + if (cb) { + cb(null, tmpl); + return undefined; + } else { + return tmpl; + } + } + var syncResult; + var createTemplate = function createTemplate(err, info) { + if (!info && !err && !ignoreMissing) { + err = new Error('template not found: ' + name); + } + if (err) { + if (cb) { + cb(err); + return; + } else { + throw err; + } + } + var newTmpl; + if (!info) { + newTmpl = new Template(noopTmplSrc, _this3, '', eagerCompile); + } else { + newTmpl = new Template(info.src, _this3, info.path, eagerCompile); + if (!info.noCache) { + info.loader.cache[name] = newTmpl; + } + } + if (cb) { + cb(null, newTmpl); + } else { + syncResult = newTmpl; + } + }; + lib.asyncIter(this.loaders, function (loader, i, next, done) { + function handle(err, src) { + if (err) { + done(err); + } else if (src) { + src.loader = loader; + done(null, src); + } else { + next(); + } + } + + // Resolve name relative to parentName + name = that.resolveTemplate(loader, parentName, name); + if (loader.async) { + loader.getSource(name, handle); + } else { + handle(null, loader.getSource(name)); + } + }, createTemplate); + return syncResult; + }; + _proto.express = function express(app) { + return expressApp(this, app); + }; + _proto.render = function render(name, ctx, cb) { + if (lib.isFunction(ctx)) { + cb = ctx; + ctx = null; + } + + // We support a synchronous API to make it easier to migrate + // existing code to async. This works because if you don't do + // anything async work, the whole thing is actually run + // synchronously. + var syncResult = null; + this.getTemplate(name, function (err, tmpl) { + if (err && cb) { + callbackAsap(cb, err); + } else if (err) { + throw err; + } else { + syncResult = tmpl.render(ctx, cb); + } + }); + return syncResult; + }; + _proto.renderString = function renderString(src, ctx, opts, cb) { + if (lib.isFunction(opts)) { + cb = opts; + opts = {}; + } + opts = opts || {}; + var tmpl = new Template(src, this, opts.path); + return tmpl.render(ctx, cb); + }; + _proto.waterfall = function waterfall(tasks, callback, forceAsync) { + return _waterfall(tasks, callback, forceAsync); + }; + return Environment; +}(EmitterObj); +var Context = /*#__PURE__*/function (_Obj) { + _inheritsLoose(Context, _Obj); + function Context() { + return _Obj.apply(this, arguments) || this; + } + var _proto2 = Context.prototype; + _proto2.init = function init(ctx, blocks, env) { + var _this4 = this; + // Has to be tied to an environment so we can tap into its globals. + this.env = env || new Environment(); + + // Make a duplicate of ctx + this.ctx = lib.extend({}, ctx); + this.blocks = {}; + this.exported = []; + lib.keys(blocks).forEach(function (name) { + _this4.addBlock(name, blocks[name]); + }); + }; + _proto2.lookup = function lookup(name) { + // This is one of the most called functions, so optimize for + // the typical case where the name isn't in the globals + if (name in this.env.globals && !(name in this.ctx)) { + return this.env.globals[name]; + } else { + return this.ctx[name]; + } + }; + _proto2.setVariable = function setVariable(name, val) { + this.ctx[name] = val; + }; + _proto2.getVariables = function getVariables() { + return this.ctx; + }; + _proto2.addBlock = function addBlock(name, block) { + this.blocks[name] = this.blocks[name] || []; + this.blocks[name].push(block); + return this; + }; + _proto2.getBlock = function getBlock(name) { + if (!this.blocks[name]) { + throw new Error('unknown block "' + name + '"'); + } + return this.blocks[name][0]; + }; + _proto2.getSuper = function getSuper(env, name, block, frame, runtime, cb) { + var idx = lib.indexOf(this.blocks[name] || [], block); + var blk = this.blocks[name][idx + 1]; + var context = this; + if (idx === -1 || !blk) { + throw new Error('no super block available for "' + name + '"'); + } + blk(env, context, frame, runtime, cb); + }; + _proto2.addExport = function addExport(name) { + this.exported.push(name); + }; + _proto2.getExported = function getExported() { + var _this5 = this; + var exported = {}; + this.exported.forEach(function (name) { + exported[name] = _this5.ctx[name]; + }); + return exported; + }; + return Context; +}(Obj); +var Template = /*#__PURE__*/function (_Obj2) { + _inheritsLoose(Template, _Obj2); + function Template() { + return _Obj2.apply(this, arguments) || this; + } + var _proto3 = Template.prototype; + _proto3.init = function init(src, env, path, eagerCompile) { + this.env = env || new Environment(); + if (lib.isObject(src)) { + switch (src.type) { + case 'code': + this.tmplProps = src.obj; + break; + case 'string': + this.tmplStr = src.obj; + break; + default: + throw new Error("Unexpected template object type " + src.type + "; expected 'code', or 'string'"); + } + } else if (lib.isString(src)) { + this.tmplStr = src; + } else { + throw new Error('src must be a string or an object describing the source'); + } + this.path = path; + if (eagerCompile) { + try { + this._compile(); + } catch (err) { + throw lib._prettifyError(this.path, this.env.opts.dev, err); + } + } else { + this.compiled = false; + } + }; + _proto3.render = function render(ctx, parentFrame, cb) { + var _this6 = this; + if (typeof ctx === 'function') { + cb = ctx; + ctx = {}; + } else if (typeof parentFrame === 'function') { + cb = parentFrame; + parentFrame = null; + } + + // If there is a parent frame, we are being called from internal + // code of another template, and the internal system + // depends on the sync/async nature of the parent template + // to be inherited, so force an async callback + var forceAsync = !parentFrame; + + // Catch compile errors for async rendering + try { + this.compile(); + } catch (e) { + var err = lib._prettifyError(this.path, this.env.opts.dev, e); + if (cb) { + return callbackAsap(cb, err); + } else { + throw err; + } + } + var context = new Context(ctx || {}, this.blocks, this.env); + var frame = parentFrame ? parentFrame.push(true) : new Frame(); + frame.topLevel = true; + var syncResult = null; + var didError = false; + this.rootRenderFunc(this.env, context, frame, globalRuntime, function (err, res) { + // TODO: this is actually a bug in the compiled template (because waterfall + // tasks are both not passing errors up the chain of callbacks AND are not + // causing a return from the top-most render function). But fixing that + // will require a more substantial change to the compiler. + if (didError && cb && typeof res !== 'undefined') { + // prevent multiple calls to cb + return; + } + if (err) { + err = lib._prettifyError(_this6.path, _this6.env.opts.dev, err); + didError = true; + } + if (cb) { + if (forceAsync) { + callbackAsap(cb, err, res); + } else { + cb(err, res); + } + } else { + if (err) { + throw err; + } + syncResult = res; + } + }); + return syncResult; + }; + _proto3.getExported = function getExported(ctx, parentFrame, cb) { + // eslint-disable-line consistent-return + if (typeof ctx === 'function') { + cb = ctx; + ctx = {}; + } + if (typeof parentFrame === 'function') { + cb = parentFrame; + parentFrame = null; + } + + // Catch compile errors for async rendering + try { + this.compile(); + } catch (e) { + if (cb) { + return cb(e); + } else { + throw e; + } + } + var frame = parentFrame ? parentFrame.push() : new Frame(); + frame.topLevel = true; + + // Run the rootRenderFunc to populate the context with exported vars + var context = new Context(ctx || {}, this.blocks, this.env); + this.rootRenderFunc(this.env, context, frame, globalRuntime, function (err) { + if (err) { + cb(err, null); + } else { + cb(null, context.getExported()); + } + }); + }; + _proto3.compile = function compile() { + if (!this.compiled) { + this._compile(); + } + }; + _proto3._compile = function _compile() { + var props; + if (this.tmplProps) { + props = this.tmplProps; + } else { + var source = compiler.compile(this.tmplStr, this.env.asyncFilters, this.env.extensionsList, this.path, this.env.opts); + var func = new Function(source); // eslint-disable-line no-new-func + props = func(); + } + this.blocks = this._getBlocks(props); + this.rootRenderFunc = props.root; + this.compiled = true; + }; + _proto3._getBlocks = function _getBlocks(props) { + var blocks = {}; + lib.keys(props).forEach(function (k) { + if (k.slice(0, 2) === 'b_') { + blocks[k.slice(2)] = props[k]; + } + }); + return blocks; + }; + return Template; +}(Obj); +module.exports = { + Environment: Environment, + Template: Template +}; + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// rawAsap provides everything we need except exception management. +var rawAsap = __webpack_require__(9); +// RawTasks are recycled to reduce GC churn. +var freeTasks = []; +// We queue errors to ensure they are thrown in right order (FIFO). +// Array-as-queue is good enough here, since we are just dealing with exceptions. +var pendingErrors = []; +var requestErrorThrow = rawAsap.makeRequestCallFromTimer(throwFirstError); + +function throwFirstError() { + if (pendingErrors.length) { + throw pendingErrors.shift(); + } +} + +/** + * Calls a task as soon as possible after returning, in its own event, with priority + * over other events like animation, reflow, and repaint. An error thrown from an + * event will not interrupt, nor even substantially slow down the processing of + * other events, but will be rather postponed to a lower priority event. + * @param {{call}} task A callable object, typically a function that takes no + * arguments. + */ +module.exports = asap; +function asap(task) { + var rawTask; + if (freeTasks.length) { + rawTask = freeTasks.pop(); + } else { + rawTask = new RawTask(); + } + rawTask.task = task; + rawAsap(rawTask); +} + +// We wrap tasks with recyclable task objects. A task object implements +// `call`, just like a function. +function RawTask() { + this.task = null; +} + +// The sole purpose of wrapping the task is to catch the exception and recycle +// the task object after its single use. +RawTask.prototype.call = function () { + try { + this.task.call(); + } catch (error) { + if (asap.onerror) { + // This hook exists purely for testing purposes. + // Its name will be periodically randomized to break any code that + // depends on its existence. + asap.onerror(error); + } else { + // In a web browser, exceptions are not fatal. However, to avoid + // slowing down the queue of pending tasks, we rethrow the error in a + // lower priority turn. + pendingErrors.push(error); + requestErrorThrow(); + } + } finally { + this.task = null; + freeTasks[freeTasks.length] = this; + } +}; + + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(global) { + +// Use the fastest means possible to execute a task in its own turn, with +// priority over other events including IO, animation, reflow, and redraw +// events in browsers. +// +// An exception thrown by a task will permanently interrupt the processing of +// subsequent tasks. The higher level `asap` function ensures that if an +// exception is thrown by a task, that the task queue will continue flushing as +// soon as possible, but if you use `rawAsap` directly, you are responsible to +// either ensure that no exceptions are thrown from your task, or to manually +// call `rawAsap.requestFlush` if an exception is thrown. +module.exports = rawAsap; +function rawAsap(task) { + if (!queue.length) { + requestFlush(); + flushing = true; + } + // Equivalent to push, but avoids a function call. + queue[queue.length] = task; +} + +var queue = []; +// Once a flush has been requested, no further calls to `requestFlush` are +// necessary until the next `flush` completes. +var flushing = false; +// `requestFlush` is an implementation-specific method that attempts to kick +// off a `flush` event as quickly as possible. `flush` will attempt to exhaust +// the event queue before yielding to the browser's own event loop. +var requestFlush; +// The position of the next task to execute in the task queue. This is +// preserved between calls to `flush` so that it can be resumed if +// a task throws an exception. +var index = 0; +// If a task schedules additional tasks recursively, the task queue can grow +// unbounded. To prevent memory exhaustion, the task queue will periodically +// truncate already-completed tasks. +var capacity = 1024; + +// The flush function processes all tasks that have been scheduled with +// `rawAsap` unless and until one of those tasks throws an exception. +// If a task throws an exception, `flush` ensures that its state will remain +// consistent and will resume where it left off when called again. +// However, `flush` does not make any arrangements to be called again if an +// exception is thrown. +function flush() { + while (index < queue.length) { + var currentIndex = index; + // Advance the index before calling the task. This ensures that we will + // begin flushing on the next task the task throws an error. + index = index + 1; + queue[currentIndex].call(); + // Prevent leaking memory for long chains of recursive calls to `asap`. + // If we call `asap` within tasks scheduled by `asap`, the queue will + // grow, but to avoid an O(n) walk for every task we execute, we don't + // shift tasks off the queue after they have been executed. + // Instead, we periodically shift 1024 tasks off the queue. + if (index > capacity) { + // Manually shift all values starting at the index back to the + // beginning of the queue. + for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) { + queue[scan] = queue[scan + index]; + } + queue.length -= index; + index = 0; + } + } + queue.length = 0; + index = 0; + flushing = false; +} + +// `requestFlush` is implemented using a strategy based on data collected from +// every available SauceLabs Selenium web driver worker at time of writing. +// https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593 + +// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that +// have WebKitMutationObserver but not un-prefixed MutationObserver. +// Must use `global` or `self` instead of `window` to work in both frames and web +// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop. + +/* globals self */ +var scope = typeof global !== "undefined" ? global : self; +var BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver; + +// MutationObservers are desirable because they have high priority and work +// reliably everywhere they are implemented. +// They are implemented in all modern browsers. +// +// - Android 4-4.3 +// - Chrome 26-34 +// - Firefox 14-29 +// - Internet Explorer 11 +// - iPad Safari 6-7.1 +// - iPhone Safari 7-7.1 +// - Safari 6-7 +if (typeof BrowserMutationObserver === "function") { + requestFlush = makeRequestCallFromMutationObserver(flush); + +// MessageChannels are desirable because they give direct access to the HTML +// task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera +// 11-12, and in web workers in many engines. +// Although message channels yield to any queued rendering and IO tasks, they +// would be better than imposing the 4ms delay of timers. +// However, they do not work reliably in Internet Explorer or Safari. + +// Internet Explorer 10 is the only browser that has setImmediate but does +// not have MutationObservers. +// Although setImmediate yields to the browser's renderer, it would be +// preferrable to falling back to setTimeout since it does not have +// the minimum 4ms penalty. +// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and +// Desktop to a lesser extent) that renders both setImmediate and +// MessageChannel useless for the purposes of ASAP. +// https://github.com/kriskowal/q/issues/396 + +// Timers are implemented universally. +// We fall back to timers in workers in most engines, and in foreground +// contexts in the following browsers. +// However, note that even this simple case requires nuances to operate in a +// broad spectrum of browsers. +// +// - Firefox 3-13 +// - Internet Explorer 6-9 +// - iPad Safari 4.3 +// - Lynx 2.8.7 +} else { + requestFlush = makeRequestCallFromTimer(flush); +} + +// `requestFlush` requests that the high priority event queue be flushed as +// soon as possible. +// This is useful to prevent an error thrown in a task from stalling the event +// queue if the exception handled by Node.js’s +// `process.on("uncaughtException")` or by a domain. +rawAsap.requestFlush = requestFlush; + +// To request a high priority event, we induce a mutation observer by toggling +// the text of a text node between "1" and "-1". +function makeRequestCallFromMutationObserver(callback) { + var toggle = 1; + var observer = new BrowserMutationObserver(callback); + var node = document.createTextNode(""); + observer.observe(node, {characterData: true}); + return function requestCall() { + toggle = -toggle; + node.data = toggle; + }; +} + +// The message channel technique was discovered by Malte Ubl and was the +// original foundation for this library. +// http://www.nonblocking.io/2011/06/windownexttick.html + +// Safari 6.0.5 (at least) intermittently fails to create message ports on a +// page's first load. Thankfully, this version of Safari supports +// MutationObservers, so we don't need to fall back in that case. + +// function makeRequestCallFromMessageChannel(callback) { +// var channel = new MessageChannel(); +// channel.port1.onmessage = callback; +// return function requestCall() { +// channel.port2.postMessage(0); +// }; +// } + +// For reasons explained above, we are also unable to use `setImmediate` +// under any circumstances. +// Even if we were, there is another bug in Internet Explorer 10. +// It is not sufficient to assign `setImmediate` to `requestFlush` because +// `setImmediate` must be called *by name* and therefore must be wrapped in a +// closure. +// Never forget. + +// function makeRequestCallFromSetImmediate(callback) { +// return function requestCall() { +// setImmediate(callback); +// }; +// } + +// Safari 6.0 has a problem where timers will get lost while the user is +// scrolling. This problem does not impact ASAP because Safari 6.0 supports +// mutation observers, so that implementation is used instead. +// However, if we ever elect to use timers in Safari, the prevalent work-around +// is to add a scroll event listener that calls for a flush. + +// `setTimeout` does not call the passed callback if the delay is less than +// approximately 7 in web workers in Firefox 8 through 18, and sometimes not +// even then. + +function makeRequestCallFromTimer(callback) { + return function requestCall() { + // We dispatch a timeout with a specified delay of 0 for engines that + // can reliably accommodate that request. This will usually be snapped + // to a 4 milisecond delay, but once we're flushing, there's no delay + // between events. + var timeoutHandle = setTimeout(handleTimer, 0); + // However, since this timer gets frequently dropped in Firefox + // workers, we enlist an interval handle that will try to fire + // an event 20 times per second until it succeeds. + var intervalHandle = setInterval(handleTimer, 50); + + function handleTimer() { + // Whichever timer succeeds will cancel both timers and + // execute the callback. + clearTimeout(timeoutHandle); + clearInterval(intervalHandle); + callback(); + } + }; +} + +// This is for `asap.js` only. +// Its name will be periodically randomized to break any code that depends on +// its existence. +rawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer; + +// ASAP was originally a nextTick shim included in Q. This was factored out +// into this ASAP package. It was later adapted to RSVP which made further +// amendments. These decisions, particularly to marginalize MessageChannel and +// to capture the MutationObserver implementation in a closure, were integrated +// back into ASAP proper. +// https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(10))) + +/***/ }), +/* 10 */ +/***/ (function(module, exports) { + +var g;
+
+// This works in non-strict mode
+g = (function() {
+ return this;
+})();
+
+try {
+ // This works if eval is allowed (see CSP)
+ g = g || Function("return this")() || (1,eval)("this");
+} catch(e) {
+ // This works if the window reference is available
+ if(typeof window === "object")
+ g = window;
+}
+
+// g can still be undefined, but nothing to do about it...
+// We return undefined, instead of nothing here, so it's
+// easier to handle this case. if(!global) { ...}
+
+module.exports = g;
+ + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + +var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// MIT license (by Elan Shanker). +(function(globals) { + 'use strict'; + + var executeSync = function(){ + var args = Array.prototype.slice.call(arguments); + if (typeof args[0] === 'function'){ + args[0].apply(null, args.splice(1)); + } + }; + + var executeAsync = function(fn){ + if (typeof setImmediate === 'function') { + setImmediate(fn); + } else if (typeof process !== 'undefined' && process.nextTick) { + process.nextTick(fn); + } else { + setTimeout(fn, 0); + } + }; + + var makeIterator = function (tasks) { + var makeCallback = function (index) { + var fn = function () { + if (tasks.length) { + tasks[index].apply(null, arguments); + } + return fn.next(); + }; + fn.next = function () { + return (index < tasks.length - 1) ? makeCallback(index + 1): null; + }; + return fn; + }; + return makeCallback(0); + }; + + var _isArray = Array.isArray || function(maybeArray){ + return Object.prototype.toString.call(maybeArray) === '[object Array]'; + }; + + var waterfall = function (tasks, callback, forceAsync) { + var nextTick = forceAsync ? executeAsync : executeSync; + callback = callback || function () {}; + if (!_isArray(tasks)) { + var err = new Error('First argument to waterfall must be an array of functions'); + return callback(err); + } + if (!tasks.length) { + return callback(); + } + var wrapIterator = function (iterator) { + return function (err) { + if (err) { + callback.apply(null, arguments); + callback = function () {}; + } else { + var args = Array.prototype.slice.call(arguments, 1); + var next = iterator.next(); + if (next) { + args.push(wrapIterator(next)); + } else { + args.push(callback); + } + nextTick(function () { + iterator.apply(null, args); + }); + } + }; + }; + wrapIterator(makeIterator(tasks))(); + }; + + if (true) { + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () { + return waterfall; + }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); // RequireJS + } else if (typeof module !== 'undefined' && module.exports) { + module.exports = waterfall; // CommonJS + } else { + globals.waterfall = waterfall; // <script> + } +})(this); + + +/***/ }), +/* 12 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var lib = __webpack_require__(1); +var r = __webpack_require__(2); +var exports = module.exports = {}; +function normalize(value, defaultValue) { + if (value === null || value === undefined || value === false) { + return defaultValue; + } + return value; +} +exports.abs = Math.abs; +function isNaN(num) { + return num !== num; // eslint-disable-line no-self-compare +} + +function batch(arr, linecount, fillWith) { + var i; + var res = []; + var tmp = []; + for (i = 0; i < arr.length; i++) { + if (i % linecount === 0 && tmp.length) { + res.push(tmp); + tmp = []; + } + tmp.push(arr[i]); + } + if (tmp.length) { + if (fillWith) { + for (i = tmp.length; i < linecount; i++) { + tmp.push(fillWith); + } + } + res.push(tmp); + } + return res; +} +exports.batch = batch; +function capitalize(str) { + str = normalize(str, ''); + var ret = str.toLowerCase(); + return r.copySafeness(str, ret.charAt(0).toUpperCase() + ret.slice(1)); +} +exports.capitalize = capitalize; +function center(str, width) { + str = normalize(str, ''); + width = width || 80; + if (str.length >= width) { + return str; + } + var spaces = width - str.length; + var pre = lib.repeat(' ', spaces / 2 - spaces % 2); + var post = lib.repeat(' ', spaces / 2); + return r.copySafeness(str, pre + str + post); +} +exports.center = center; +function default_(val, def, bool) { + if (bool) { + return val || def; + } else { + return val !== undefined ? val : def; + } +} + +// TODO: it is confusing to export something called 'default' +exports['default'] = default_; // eslint-disable-line dot-notation + +function dictsort(val, caseSensitive, by) { + if (!lib.isObject(val)) { + throw new lib.TemplateError('dictsort filter: val must be an object'); + } + var array = []; + // deliberately include properties from the object's prototype + for (var k in val) { + // eslint-disable-line guard-for-in, no-restricted-syntax + array.push([k, val[k]]); + } + var si; + if (by === undefined || by === 'key') { + si = 0; + } else if (by === 'value') { + si = 1; + } else { + throw new lib.TemplateError('dictsort filter: You can only sort by either key or value'); + } + array.sort(function (t1, t2) { + var a = t1[si]; + var b = t2[si]; + if (!caseSensitive) { + if (lib.isString(a)) { + a = a.toUpperCase(); + } + if (lib.isString(b)) { + b = b.toUpperCase(); + } + } + return a > b ? 1 : a === b ? 0 : -1; // eslint-disable-line no-nested-ternary + }); + + return array; +} +exports.dictsort = dictsort; +function dump(obj, spaces) { + return JSON.stringify(obj, null, spaces); +} +exports.dump = dump; +function escape(str) { + if (str instanceof r.SafeString) { + return str; + } + str = str === null || str === undefined ? '' : str; + return r.markSafe(lib.escape(str.toString())); +} +exports.escape = escape; +function safe(str) { + if (str instanceof r.SafeString) { + return str; + } + str = str === null || str === undefined ? '' : str; + return r.markSafe(str.toString()); +} +exports.safe = safe; +function first(arr) { + return arr[0]; +} +exports.first = first; +function forceescape(str) { + str = str === null || str === undefined ? '' : str; + return r.markSafe(lib.escape(str.toString())); +} +exports.forceescape = forceescape; +function groupby(arr, attr) { + return lib.groupBy(arr, attr, this.env.opts.throwOnUndefined); +} +exports.groupby = groupby; +function indent(str, width, indentfirst) { + str = normalize(str, ''); + if (str === '') { + return ''; + } + width = width || 4; + // let res = ''; + var lines = str.split('\n'); + var sp = lib.repeat(' ', width); + var res = lines.map(function (l, i) { + return i === 0 && !indentfirst ? l : "" + sp + l; + }).join('\n'); + return r.copySafeness(str, res); +} +exports.indent = indent; +function join(arr, del, attr) { + del = del || ''; + if (attr) { + arr = lib.map(arr, function (v) { + return v[attr]; + }); + } + return arr.join(del); +} +exports.join = join; +function last(arr) { + return arr[arr.length - 1]; +} +exports.last = last; +function lengthFilter(val) { + var value = normalize(val, ''); + if (value !== undefined) { + if (typeof Map === 'function' && value instanceof Map || typeof Set === 'function' && value instanceof Set) { + // ECMAScript 2015 Maps and Sets + return value.size; + } + if (lib.isObject(value) && !(value instanceof r.SafeString)) { + // Objects (besides SafeStrings), non-primative Arrays + return lib.keys(value).length; + } + return value.length; + } + return 0; +} +exports.length = lengthFilter; +function list(val) { + if (lib.isString(val)) { + return val.split(''); + } else if (lib.isObject(val)) { + return lib._entries(val || {}).map(function (_ref) { + var key = _ref[0], + value = _ref[1]; + return { + key: key, + value: value + }; + }); + } else if (lib.isArray(val)) { + return val; + } else { + throw new lib.TemplateError('list filter: type not iterable'); + } +} +exports.list = list; +function lower(str) { + str = normalize(str, ''); + return str.toLowerCase(); +} +exports.lower = lower; +function nl2br(str) { + if (str === null || str === undefined) { + return ''; + } + return r.copySafeness(str, str.replace(/\r\n|\n/g, '<br />\n')); +} +exports.nl2br = nl2br; +function random(arr) { + return arr[Math.floor(Math.random() * arr.length)]; +} +exports.random = random; + +/** + * Construct select or reject filter + * + * @param {boolean} expectedTestResult + * @returns {function(array, string, *): array} + */ +function getSelectOrReject(expectedTestResult) { + function filter(arr, testName, secondArg) { + if (testName === void 0) { + testName = 'truthy'; + } + var context = this; + var test = context.env.getTest(testName); + return lib.toArray(arr).filter(function examineTestResult(item) { + return test.call(context, item, secondArg) === expectedTestResult; + }); + } + return filter; +} +exports.reject = getSelectOrReject(false); +function rejectattr(arr, attr) { + return arr.filter(function (item) { + return !item[attr]; + }); +} +exports.rejectattr = rejectattr; +exports.select = getSelectOrReject(true); +function selectattr(arr, attr) { + return arr.filter(function (item) { + return !!item[attr]; + }); +} +exports.selectattr = selectattr; +function replace(str, old, new_, maxCount) { + var originalStr = str; + if (old instanceof RegExp) { + return str.replace(old, new_); + } + if (typeof maxCount === 'undefined') { + maxCount = -1; + } + var res = ''; // Output + + // Cast Numbers in the search term to string + if (typeof old === 'number') { + old = '' + old; + } else if (typeof old !== 'string') { + // If it is something other than number or string, + // return the original string + return str; + } + + // Cast numbers in the replacement to string + if (typeof str === 'number') { + str = '' + str; + } + + // If by now, we don't have a string, throw it back + if (typeof str !== 'string' && !(str instanceof r.SafeString)) { + return str; + } + + // ShortCircuits + if (old === '') { + // Mimic the python behaviour: empty string is replaced + // by replacement e.g. "abc"|replace("", ".") -> .a.b.c. + res = new_ + str.split('').join(new_) + new_; + return r.copySafeness(str, res); + } + var nextIndex = str.indexOf(old); + // if # of replacements to perform is 0, or the string to does + // not contain the old value, return the string + if (maxCount === 0 || nextIndex === -1) { + return str; + } + var pos = 0; + var count = 0; // # of replacements made + + while (nextIndex > -1 && (maxCount === -1 || count < maxCount)) { + // Grab the next chunk of src string and add it with the + // replacement, to the result + res += str.substring(pos, nextIndex) + new_; + // Increment our pointer in the src string + pos = nextIndex + old.length; + count++; + // See if there are any more replacements to be made + nextIndex = str.indexOf(old, pos); + } + + // We've either reached the end, or done the max # of + // replacements, tack on any remaining string + if (pos < str.length) { + res += str.substring(pos); + } + return r.copySafeness(originalStr, res); +} +exports.replace = replace; +function reverse(val) { + var arr; + if (lib.isString(val)) { + arr = list(val); + } else { + // Copy it + arr = lib.map(val, function (v) { + return v; + }); + } + arr.reverse(); + if (lib.isString(val)) { + return r.copySafeness(val, arr.join('')); + } + return arr; +} +exports.reverse = reverse; +function round(val, precision, method) { + precision = precision || 0; + var factor = Math.pow(10, precision); + var rounder; + if (method === 'ceil') { + rounder = Math.ceil; + } else if (method === 'floor') { + rounder = Math.floor; + } else { + rounder = Math.round; + } + return rounder(val * factor) / factor; +} +exports.round = round; +function slice(arr, slices, fillWith) { + var sliceLength = Math.floor(arr.length / slices); + var extra = arr.length % slices; + var res = []; + var offset = 0; + for (var i = 0; i < slices; i++) { + var start = offset + i * sliceLength; + if (i < extra) { + offset++; + } + var end = offset + (i + 1) * sliceLength; + var currSlice = arr.slice(start, end); + if (fillWith && i >= extra) { + currSlice.push(fillWith); + } + res.push(currSlice); + } + return res; +} +exports.slice = slice; +function sum(arr, attr, start) { + if (start === void 0) { + start = 0; + } + if (attr) { + arr = lib.map(arr, function (v) { + return v[attr]; + }); + } + return start + arr.reduce(function (a, b) { + return a + b; + }, 0); +} +exports.sum = sum; +exports.sort = r.makeMacro(['value', 'reverse', 'case_sensitive', 'attribute'], [], function sortFilter(arr, reversed, caseSens, attr) { + var _this = this; + // Copy it + var array = lib.map(arr, function (v) { + return v; + }); + var getAttribute = lib.getAttrGetter(attr); + array.sort(function (a, b) { + var x = attr ? getAttribute(a) : a; + var y = attr ? getAttribute(b) : b; + if (_this.env.opts.throwOnUndefined && attr && (x === undefined || y === undefined)) { + throw new TypeError("sort: attribute \"" + attr + "\" resolved to undefined"); + } + if (!caseSens && lib.isString(x) && lib.isString(y)) { + x = x.toLowerCase(); + y = y.toLowerCase(); + } + if (x < y) { + return reversed ? 1 : -1; + } else if (x > y) { + return reversed ? -1 : 1; + } else { + return 0; + } + }); + return array; +}); +function string(obj) { + return r.copySafeness(obj, obj); +} +exports.string = string; +function striptags(input, preserveLinebreaks) { + input = normalize(input, ''); + var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>|<!--[\s\S]*?-->/gi; + var trimmedInput = trim(input.replace(tags, '')); + var res = ''; + if (preserveLinebreaks) { + res = trimmedInput.replace(/^ +| +$/gm, '') // remove leading and trailing spaces + .replace(/ +/g, ' ') // squash adjacent spaces + .replace(/(\r\n)/g, '\n') // normalize linebreaks (CRLF -> LF) + .replace(/\n\n\n+/g, '\n\n'); // squash abnormal adjacent linebreaks + } else { + res = trimmedInput.replace(/\s+/gi, ' '); + } + return r.copySafeness(input, res); +} +exports.striptags = striptags; +function title(str) { + str = normalize(str, ''); + var words = str.split(' ').map(function (word) { + return capitalize(word); + }); + return r.copySafeness(str, words.join(' ')); +} +exports.title = title; +function trim(str) { + return r.copySafeness(str, str.replace(/^\s*|\s*$/g, '')); +} +exports.trim = trim; +function truncate(input, length, killwords, end) { + var orig = input; + input = normalize(input, ''); + length = length || 255; + if (input.length <= length) { + return input; + } + if (killwords) { + input = input.substring(0, length); + } else { + var idx = input.lastIndexOf(' ', length); + if (idx === -1) { + idx = length; + } + input = input.substring(0, idx); + } + input += end !== undefined && end !== null ? end : '...'; + return r.copySafeness(orig, input); +} +exports.truncate = truncate; +function upper(str) { + str = normalize(str, ''); + return str.toUpperCase(); +} +exports.upper = upper; +function urlencode(obj) { + var enc = encodeURIComponent; + if (lib.isString(obj)) { + return enc(obj); + } else { + var keyvals = lib.isArray(obj) ? obj : lib._entries(obj); + return keyvals.map(function (_ref2) { + var k = _ref2[0], + v = _ref2[1]; + return enc(k) + "=" + enc(v); + }).join('&'); + } +} +exports.urlencode = urlencode; + +// For the jinja regexp, see +// https://github.com/mitsuhiko/jinja2/blob/f15b814dcba6aa12bc74d1f7d0c881d55f7126be/jinja2/utils.py#L20-L23 +var puncRe = /^(?:\(|<|<)?(.*?)(?:\.|,|\)|\n|>)?$/; +// from http://blog.gerv.net/2011/05/html5_email_address_regexp/ +var emailRe = /^[\w.!#$%&'*+\-\/=?\^`{|}~]+@[a-z\d\-]+(\.[a-z\d\-]+)+$/i; +var httpHttpsRe = /^https?:\/\/.*$/; +var wwwRe = /^www\./; +var tldRe = /\.(?:org|net|com)(?:\:|\/|$)/; +function urlize(str, length, nofollow) { + if (isNaN(length)) { + length = Infinity; + } + var noFollowAttr = nofollow === true ? ' rel="nofollow"' : ''; + var words = str.split(/(\s+)/).filter(function (word) { + // If the word has no length, bail. This can happen for str with + // trailing whitespace. + return word && word.length; + }).map(function (word) { + var matches = word.match(puncRe); + var possibleUrl = matches ? matches[1] : word; + var shortUrl = possibleUrl.substr(0, length); + + // url that starts with http or https + if (httpHttpsRe.test(possibleUrl)) { + return "<a href=\"" + possibleUrl + "\"" + noFollowAttr + ">" + shortUrl + "</a>"; + } + + // url that starts with www. + if (wwwRe.test(possibleUrl)) { + return "<a href=\"http://" + possibleUrl + "\"" + noFollowAttr + ">" + shortUrl + "</a>"; + } + + // an email address of the form username@domain.tld + if (emailRe.test(possibleUrl)) { + return "<a href=\"mailto:" + possibleUrl + "\">" + possibleUrl + "</a>"; + } + + // url that ends in .com, .org or .net that is not an email address + if (tldRe.test(possibleUrl)) { + return "<a href=\"http://" + possibleUrl + "\"" + noFollowAttr + ">" + shortUrl + "</a>"; + } + return word; + }); + return words.join(''); +} +exports.urlize = urlize; +function wordcount(str) { + str = normalize(str, ''); + var words = str ? str.match(/\w+/g) : null; + return words ? words.length : null; +} +exports.wordcount = wordcount; +function float(val, def) { + var res = parseFloat(val); + return isNaN(res) ? def : res; +} +exports.float = float; +var intFilter = r.makeMacro(['value', 'default', 'base'], [], function doInt(value, defaultValue, base) { + if (base === void 0) { + base = 10; + } + var res = parseInt(value, base); + return isNaN(res) ? defaultValue : res; +}); +exports.int = intFilter; + +// Aliases +exports.d = exports.default; +exports.e = exports.escape; + +/***/ }), +/* 13 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +var R = typeof Reflect === 'object' ? Reflect : null +var ReflectApply = R && typeof R.apply === 'function' + ? R.apply + : function ReflectApply(target, receiver, args) { + return Function.prototype.apply.call(target, receiver, args); + } + +var ReflectOwnKeys +if (R && typeof R.ownKeys === 'function') { + ReflectOwnKeys = R.ownKeys +} else if (Object.getOwnPropertySymbols) { + ReflectOwnKeys = function ReflectOwnKeys(target) { + return Object.getOwnPropertyNames(target) + .concat(Object.getOwnPropertySymbols(target)); + }; +} else { + ReflectOwnKeys = function ReflectOwnKeys(target) { + return Object.getOwnPropertyNames(target); + }; +} + +function ProcessEmitWarning(warning) { + if (console && console.warn) console.warn(warning); +} + +var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) { + return value !== value; +} + +function EventEmitter() { + EventEmitter.init.call(this); +} +module.exports = EventEmitter; +module.exports.once = once; + +// Backwards-compat with node 0.10.x +EventEmitter.EventEmitter = EventEmitter; + +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._eventsCount = 0; +EventEmitter.prototype._maxListeners = undefined; + +// By default EventEmitters will print a warning if more than 10 listeners are +// added to it. This is a useful default which helps finding memory leaks. +var defaultMaxListeners = 10; + +function checkListener(listener) { + if (typeof listener !== 'function') { + throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); + } +} + +Object.defineProperty(EventEmitter, 'defaultMaxListeners', { + enumerable: true, + get: function() { + return defaultMaxListeners; + }, + set: function(arg) { + if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) { + throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.'); + } + defaultMaxListeners = arg; + } +}); + +EventEmitter.init = function() { + + if (this._events === undefined || + this._events === Object.getPrototypeOf(this)._events) { + this._events = Object.create(null); + this._eventsCount = 0; + } + + this._maxListeners = this._maxListeners || undefined; +}; + +// Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. +EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { + if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) { + throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.'); + } + this._maxListeners = n; + return this; +}; + +function _getMaxListeners(that) { + if (that._maxListeners === undefined) + return EventEmitter.defaultMaxListeners; + return that._maxListeners; +} + +EventEmitter.prototype.getMaxListeners = function getMaxListeners() { + return _getMaxListeners(this); +}; + +EventEmitter.prototype.emit = function emit(type) { + var args = []; + for (var i = 1; i < arguments.length; i++) args.push(arguments[i]); + var doError = (type === 'error'); + + var events = this._events; + if (events !== undefined) + doError = (doError && events.error === undefined); + else if (!doError) + return false; + + // If there is no 'error' event listener then throw. + if (doError) { + var er; + if (args.length > 0) + er = args[0]; + if (er instanceof Error) { + // Note: The comments on the `throw` lines are intentional, they show + // up in Node's output if this results in an unhandled exception. + throw er; // Unhandled 'error' event + } + // At least give some kind of context to the user + var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : '')); + err.context = er; + throw err; // Unhandled 'error' event + } + + var handler = events[type]; + + if (handler === undefined) + return false; + + if (typeof handler === 'function') { + ReflectApply(handler, this, args); + } else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) + ReflectApply(listeners[i], this, args); + } + + return true; +}; + +function _addListener(target, type, listener, prepend) { + var m; + var events; + var existing; + + checkListener(listener); + + events = target._events; + if (events === undefined) { + events = target._events = Object.create(null); + target._eventsCount = 0; + } else { + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (events.newListener !== undefined) { + target.emit('newListener', type, + listener.listener ? listener.listener : listener); + + // Re-assign `events` because a newListener handler could have caused the + // this._events to be assigned to a new object + events = target._events; + } + existing = events[type]; + } + + if (existing === undefined) { + // Optimize the case of one listener. Don't need the extra array object. + existing = events[type] = listener; + ++target._eventsCount; + } else { + if (typeof existing === 'function') { + // Adding the second element, need to change to array. + existing = events[type] = + prepend ? [listener, existing] : [existing, listener]; + // If we've already got an array, just append. + } else if (prepend) { + existing.unshift(listener); + } else { + existing.push(listener); + } + + // Check for listener leak + m = _getMaxListeners(target); + if (m > 0 && existing.length > m && !existing.warned) { + existing.warned = true; + // No error code for this since it is a Warning + // eslint-disable-next-line no-restricted-syntax + var w = new Error('Possible EventEmitter memory leak detected. ' + + existing.length + ' ' + String(type) + ' listeners ' + + 'added. Use emitter.setMaxListeners() to ' + + 'increase limit'); + w.name = 'MaxListenersExceededWarning'; + w.emitter = target; + w.type = type; + w.count = existing.length; + ProcessEmitWarning(w); + } + } + + return target; +} + +EventEmitter.prototype.addListener = function addListener(type, listener) { + return _addListener(this, type, listener, false); +}; + +EventEmitter.prototype.on = EventEmitter.prototype.addListener; + +EventEmitter.prototype.prependListener = + function prependListener(type, listener) { + return _addListener(this, type, listener, true); + }; + +function onceWrapper() { + if (!this.fired) { + this.target.removeListener(this.type, this.wrapFn); + this.fired = true; + if (arguments.length === 0) + return this.listener.call(this.target); + return this.listener.apply(this.target, arguments); + } +} + +function _onceWrap(target, type, listener) { + var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener }; + var wrapped = onceWrapper.bind(state); + wrapped.listener = listener; + state.wrapFn = wrapped; + return wrapped; +} + +EventEmitter.prototype.once = function once(type, listener) { + checkListener(listener); + this.on(type, _onceWrap(this, type, listener)); + return this; +}; + +EventEmitter.prototype.prependOnceListener = + function prependOnceListener(type, listener) { + checkListener(listener); + this.prependListener(type, _onceWrap(this, type, listener)); + return this; + }; + +// Emits a 'removeListener' event if and only if the listener was removed. +EventEmitter.prototype.removeListener = + function removeListener(type, listener) { + var list, events, position, i, originalListener; + + checkListener(listener); + + events = this._events; + if (events === undefined) + return this; + + list = events[type]; + if (list === undefined) + return this; + + if (list === listener || list.listener === listener) { + if (--this._eventsCount === 0) + this._events = Object.create(null); + else { + delete events[type]; + if (events.removeListener) + this.emit('removeListener', type, list.listener || listener); + } + } else if (typeof list !== 'function') { + position = -1; + + for (i = list.length - 1; i >= 0; i--) { + if (list[i] === listener || list[i].listener === listener) { + originalListener = list[i].listener; + position = i; + break; + } + } + + if (position < 0) + return this; + + if (position === 0) + list.shift(); + else { + spliceOne(list, position); + } + + if (list.length === 1) + events[type] = list[0]; + + if (events.removeListener !== undefined) + this.emit('removeListener', type, originalListener || listener); + } + + return this; + }; + +EventEmitter.prototype.off = EventEmitter.prototype.removeListener; + +EventEmitter.prototype.removeAllListeners = + function removeAllListeners(type) { + var listeners, events, i; + + events = this._events; + if (events === undefined) + return this; + + // not listening for removeListener, no need to emit + if (events.removeListener === undefined) { + if (arguments.length === 0) { + this._events = Object.create(null); + this._eventsCount = 0; + } else if (events[type] !== undefined) { + if (--this._eventsCount === 0) + this._events = Object.create(null); + else + delete events[type]; + } + return this; + } + + // emit removeListener for all listeners on all events + if (arguments.length === 0) { + var keys = Object.keys(events); + var key; + for (i = 0; i < keys.length; ++i) { + key = keys[i]; + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + this.removeAllListeners('removeListener'); + this._events = Object.create(null); + this._eventsCount = 0; + return this; + } + + listeners = events[type]; + + if (typeof listeners === 'function') { + this.removeListener(type, listeners); + } else if (listeners !== undefined) { + // LIFO order + for (i = listeners.length - 1; i >= 0; i--) { + this.removeListener(type, listeners[i]); + } + } + + return this; + }; + +function _listeners(target, type, unwrap) { + var events = target._events; + + if (events === undefined) + return []; + + var evlistener = events[type]; + if (evlistener === undefined) + return []; + + if (typeof evlistener === 'function') + return unwrap ? [evlistener.listener || evlistener] : [evlistener]; + + return unwrap ? + unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); +} + +EventEmitter.prototype.listeners = function listeners(type) { + return _listeners(this, type, true); +}; + +EventEmitter.prototype.rawListeners = function rawListeners(type) { + return _listeners(this, type, false); +}; + +EventEmitter.listenerCount = function(emitter, type) { + if (typeof emitter.listenerCount === 'function') { + return emitter.listenerCount(type); + } else { + return listenerCount.call(emitter, type); + } +}; + +EventEmitter.prototype.listenerCount = listenerCount; +function listenerCount(type) { + var events = this._events; + + if (events !== undefined) { + var evlistener = events[type]; + + if (typeof evlistener === 'function') { + return 1; + } else if (evlistener !== undefined) { + return evlistener.length; + } + } + + return 0; +} + +EventEmitter.prototype.eventNames = function eventNames() { + return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; +}; + +function arrayClone(arr, n) { + var copy = new Array(n); + for (var i = 0; i < n; ++i) + copy[i] = arr[i]; + return copy; +} + +function spliceOne(list, index) { + for (; index + 1 < list.length; index++) + list[index] = list[index + 1]; + list.pop(); +} + +function unwrapListeners(arr) { + var ret = new Array(arr.length); + for (var i = 0; i < ret.length; ++i) { + ret[i] = arr[i].listener || arr[i]; + } + return ret; +} + +function once(emitter, name) { + return new Promise(function (resolve, reject) { + function errorListener(err) { + emitter.removeListener(name, resolver); + reject(err); + } + + function resolver() { + if (typeof emitter.removeListener === 'function') { + emitter.removeListener('error', errorListener); + } + resolve([].slice.call(arguments)); + }; + + eventTargetAgnosticAddListener(emitter, name, resolver, { once: true }); + if (name !== 'error') { + addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true }); + } + }); +} + +function addErrorHandlerIfEventEmitter(emitter, handler, flags) { + if (typeof emitter.on === 'function') { + eventTargetAgnosticAddListener(emitter, 'error', handler, flags); + } +} + +function eventTargetAgnosticAddListener(emitter, name, listener, flags) { + if (typeof emitter.on === 'function') { + if (flags.once) { + emitter.once(name, listener); + } else { + emitter.on(name, listener); + } + } else if (typeof emitter.addEventListener === 'function') { + // EventTarget does not have `error` event semantics like Node + // EventEmitters, we do not listen for `error` events here. + emitter.addEventListener(name, function wrapListener(arg) { + // IE does not have builtin `{ once: true }` support so we + // have to do it manually. + if (flags.once) { + emitter.removeEventListener(name, wrapListener); + } + listener(arg); + }); + } else { + throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter); + } +} + + +/***/ }), +/* 14 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var SafeString = __webpack_require__(2).SafeString; + +/** + * Returns `true` if the object is a function, otherwise `false`. + * @param { any } value + * @returns { boolean } + */ +function callable(value) { + return typeof value === 'function'; +} +exports.callable = callable; + +/** + * Returns `true` if the object is strictly not `undefined`. + * @param { any } value + * @returns { boolean } + */ +function defined(value) { + return value !== undefined; +} +exports.defined = defined; + +/** + * Returns `true` if the operand (one) is divisble by the test's argument + * (two). + * @param { number } one + * @param { number } two + * @returns { boolean } + */ +function divisibleby(one, two) { + return one % two === 0; +} +exports.divisibleby = divisibleby; + +/** + * Returns true if the string has been escaped (i.e., is a SafeString). + * @param { any } value + * @returns { boolean } + */ +function escaped(value) { + return value instanceof SafeString; +} +exports.escaped = escaped; + +/** + * Returns `true` if the arguments are strictly equal. + * @param { any } one + * @param { any } two + */ +function equalto(one, two) { + return one === two; +} +exports.equalto = equalto; + +// Aliases +exports.eq = exports.equalto; +exports.sameas = exports.equalto; + +/** + * Returns `true` if the value is evenly divisible by 2. + * @param { number } value + * @returns { boolean } + */ +function even(value) { + return value % 2 === 0; +} +exports.even = even; + +/** + * Returns `true` if the value is falsy - if I recall correctly, '', 0, false, + * undefined, NaN or null. I don't know if we should stick to the default JS + * behavior or attempt to replicate what Python believes should be falsy (i.e., + * empty arrays, empty dicts, not 0...). + * @param { any } value + * @returns { boolean } + */ +function falsy(value) { + return !value; +} +exports.falsy = falsy; + +/** + * Returns `true` if the operand (one) is greater or equal to the test's + * argument (two). + * @param { number } one + * @param { number } two + * @returns { boolean } + */ +function ge(one, two) { + return one >= two; +} +exports.ge = ge; + +/** + * Returns `true` if the operand (one) is greater than the test's argument + * (two). + * @param { number } one + * @param { number } two + * @returns { boolean } + */ +function greaterthan(one, two) { + return one > two; +} +exports.greaterthan = greaterthan; + +// alias +exports.gt = exports.greaterthan; + +/** + * Returns `true` if the operand (one) is less than or equal to the test's + * argument (two). + * @param { number } one + * @param { number } two + * @returns { boolean } + */ +function le(one, two) { + return one <= two; +} +exports.le = le; + +/** + * Returns `true` if the operand (one) is less than the test's passed argument + * (two). + * @param { number } one + * @param { number } two + * @returns { boolean } + */ +function lessthan(one, two) { + return one < two; +} +exports.lessthan = lessthan; + +// alias +exports.lt = exports.lessthan; + +/** + * Returns `true` if the string is lowercased. + * @param { string } value + * @returns { boolean } + */ +function lower(value) { + return value.toLowerCase() === value; +} +exports.lower = lower; + +/** + * Returns `true` if the operand (one) is less than or equal to the test's + * argument (two). + * @param { number } one + * @param { number } two + * @returns { boolean } + */ +function ne(one, two) { + return one !== two; +} +exports.ne = ne; + +/** + * Returns true if the value is strictly equal to `null`. + * @param { any } + * @returns { boolean } + */ +function nullTest(value) { + return value === null; +} +exports.null = nullTest; + +/** + * Returns true if value is a number. + * @param { any } + * @returns { boolean } + */ +function number(value) { + return typeof value === 'number'; +} +exports.number = number; + +/** + * Returns `true` if the value is *not* evenly divisible by 2. + * @param { number } value + * @returns { boolean } + */ +function odd(value) { + return value % 2 === 1; +} +exports.odd = odd; + +/** + * Returns `true` if the value is a string, `false` if not. + * @param { any } value + * @returns { boolean } + */ +function string(value) { + return typeof value === 'string'; +} +exports.string = string; + +/** + * Returns `true` if the value is not in the list of things considered falsy: + * '', null, undefined, 0, NaN and false. + * @param { any } value + * @returns { boolean } + */ +function truthy(value) { + return !!value; +} +exports.truthy = truthy; + +/** + * Returns `true` if the value is undefined. + * @param { any } value + * @returns { boolean } + */ +function undefinedTest(value) { + return value === undefined; +} +exports.undefined = undefinedTest; + +/** + * Returns `true` if the string is uppercased. + * @param { string } value + * @returns { boolean } + */ +function upper(value) { + return value.toUpperCase() === value; +} +exports.upper = upper; + +/** + * If ES6 features are available, returns `true` if the value implements the + * `Symbol.iterator` method. If not, it's a string or Array. + * + * Could potentially cause issues if a browser exists that has Set and Map but + * not Symbol. + * + * @param { any } value + * @returns { boolean } + */ +function iterable(value) { + if (typeof Symbol !== 'undefined') { + return !!value[Symbol.iterator]; + } else { + return Array.isArray(value) || typeof value === 'string'; + } +} +exports.iterable = iterable; + +/** + * If ES6 features are available, returns `true` if the value is an object hash + * or an ES6 Map. Otherwise just return if it's an object hash. + * @param { any } value + * @returns { boolean } + */ +function mapping(value) { + // only maps and object hashes + var bool = value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value); + if (Set) { + return bool && !(value instanceof Set); + } else { + return bool; + } +} +exports.mapping = mapping; + +/***/ }), +/* 15 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _cycler(items) { + var index = -1; + return { + current: null, + reset: function reset() { + index = -1; + this.current = null; + }, + next: function next() { + index++; + if (index >= items.length) { + index = 0; + } + this.current = items[index]; + return this.current; + } + }; +} +function _joiner(sep) { + sep = sep || ','; + var first = true; + return function () { + var val = first ? '' : sep; + first = false; + return val; + }; +} + +// Making this a function instead so it returns a new object +// each time it's called. That way, if something like an environment +// uses it, they will each have their own copy. +function globals() { + return { + range: function range(start, stop, step) { + if (typeof stop === 'undefined') { + stop = start; + start = 0; + step = 1; + } else if (!step) { + step = 1; + } + var arr = []; + if (step > 0) { + for (var i = start; i < stop; i += step) { + arr.push(i); + } + } else { + for (var _i = start; _i > stop; _i += step) { + // eslint-disable-line for-direction + arr.push(_i); + } + } + return arr; + }, + cycler: function cycler() { + return _cycler(Array.prototype.slice.call(arguments)); + }, + joiner: function joiner(sep) { + return _joiner(sep); + } + }; +} +module.exports = globals; + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + +var path = __webpack_require__(0); +module.exports = function express(env, app) { + function NunjucksView(name, opts) { + this.name = name; + this.path = name; + this.defaultEngine = opts.defaultEngine; + this.ext = path.extname(name); + if (!this.ext && !this.defaultEngine) { + throw new Error('No default engine was specified and no extension was provided.'); + } + if (!this.ext) { + this.name += this.ext = (this.defaultEngine[0] !== '.' ? '.' : '') + this.defaultEngine; + } + } + NunjucksView.prototype.render = function render(opts, cb) { + env.render(this.name, opts, cb); + }; + app.set('view', NunjucksView); + app.set('nunjucksEnv', env); + return env; +}; + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __webpack_require__) { + +function installCompat() { + 'use strict'; + + /* eslint-disable camelcase */ + + // This must be called like `nunjucks.installCompat` so that `this` + // references the nunjucks instance + var runtime = this.runtime; + var lib = this.lib; + // Handle slim case where these 'modules' are excluded from the built source + var Compiler = this.compiler.Compiler; + var Parser = this.parser.Parser; + var nodes = this.nodes; + var lexer = this.lexer; + var orig_contextOrFrameLookup = runtime.contextOrFrameLookup; + var orig_memberLookup = runtime.memberLookup; + var orig_Compiler_assertType; + var orig_Parser_parseAggregate; + if (Compiler) { + orig_Compiler_assertType = Compiler.prototype.assertType; + } + if (Parser) { + orig_Parser_parseAggregate = Parser.prototype.parseAggregate; + } + function uninstall() { + runtime.contextOrFrameLookup = orig_contextOrFrameLookup; + runtime.memberLookup = orig_memberLookup; + if (Compiler) { + Compiler.prototype.assertType = orig_Compiler_assertType; + } + if (Parser) { + Parser.prototype.parseAggregate = orig_Parser_parseAggregate; + } + } + runtime.contextOrFrameLookup = function contextOrFrameLookup(context, frame, key) { + var val = orig_contextOrFrameLookup.apply(this, arguments); + if (val !== undefined) { + return val; + } + switch (key) { + case 'True': + return true; + case 'False': + return false; + case 'None': + return null; + default: + return undefined; + } + }; + function getTokensState(tokens) { + return { + index: tokens.index, + lineno: tokens.lineno, + colno: tokens.colno + }; + } + if (false) { + // i.e., not slim mode + var Slice = nodes.Node.extend('Slice', { + fields: ['start', 'stop', 'step'], + init: function init(lineno, colno, start, stop, step) { + start = start || new nodes.Literal(lineno, colno, null); + stop = stop || new nodes.Literal(lineno, colno, null); + step = step || new nodes.Literal(lineno, colno, 1); + this.parent(lineno, colno, start, stop, step); + } + }); + Compiler.prototype.assertType = function assertType(node) { + if (node instanceof Slice) { + return; + } + orig_Compiler_assertType.apply(this, arguments); + }; + Compiler.prototype.compileSlice = function compileSlice(node, frame) { + this._emit('('); + this._compileExpression(node.start, frame); + this._emit('),('); + this._compileExpression(node.stop, frame); + this._emit('),('); + this._compileExpression(node.step, frame); + this._emit(')'); + }; + Parser.prototype.parseAggregate = function parseAggregate() { + var _this = this; + var origState = getTokensState(this.tokens); + // Set back one accounting for opening bracket/parens + origState.colno--; + origState.index--; + try { + return orig_Parser_parseAggregate.apply(this); + } catch (e) { + var errState = getTokensState(this.tokens); + var rethrow = function rethrow() { + lib._assign(_this.tokens, errState); + return e; + }; + + // Reset to state before original parseAggregate called + lib._assign(this.tokens, origState); + this.peeked = false; + var tok = this.peekToken(); + if (tok.type !== lexer.TOKEN_LEFT_BRACKET) { + throw rethrow(); + } else { + this.nextToken(); + } + var node = new Slice(tok.lineno, tok.colno); + + // If we don't encounter a colon while parsing, this is not a slice, + // so re-raise the original exception. + var isSlice = false; + for (var i = 0; i <= node.fields.length; i++) { + if (this.skip(lexer.TOKEN_RIGHT_BRACKET)) { + break; + } + if (i === node.fields.length) { + if (isSlice) { + this.fail('parseSlice: too many slice components', tok.lineno, tok.colno); + } else { + break; + } + } + if (this.skip(lexer.TOKEN_COLON)) { + isSlice = true; + } else { + var field = node.fields[i]; + node[field] = this.parseExpression(); + isSlice = this.skip(lexer.TOKEN_COLON) || isSlice; + } + } + if (!isSlice) { + throw rethrow(); + } + return new nodes.Array(tok.lineno, tok.colno, [node]); + } + }; + } + function sliceLookup(obj, start, stop, step) { + obj = obj || []; + if (start === null) { + start = step < 0 ? obj.length - 1 : 0; + } + if (stop === null) { + stop = step < 0 ? -1 : obj.length; + } else if (stop < 0) { + stop += obj.length; + } + if (start < 0) { + start += obj.length; + } + var results = []; + for (var i = start;; i += step) { + if (i < 0 || i > obj.length) { + break; + } + if (step > 0 && i >= stop) { + break; + } + if (step < 0 && i <= stop) { + break; + } + results.push(runtime.memberLookup(obj, i)); + } + return results; + } + function hasOwnProp(obj, key) { + return Object.prototype.hasOwnProperty.call(obj, key); + } + var ARRAY_MEMBERS = { + pop: function pop(index) { + if (index === undefined) { + return this.pop(); + } + if (index >= this.length || index < 0) { + throw new Error('KeyError'); + } + return this.splice(index, 1); + }, + append: function append(element) { + return this.push(element); + }, + remove: function remove(element) { + for (var i = 0; i < this.length; i++) { + if (this[i] === element) { + return this.splice(i, 1); + } + } + throw new Error('ValueError'); + }, + count: function count(element) { + var count = 0; + for (var i = 0; i < this.length; i++) { + if (this[i] === element) { + count++; + } + } + return count; + }, + index: function index(element) { + var i; + if ((i = this.indexOf(element)) === -1) { + throw new Error('ValueError'); + } + return i; + }, + find: function find(element) { + return this.indexOf(element); + }, + insert: function insert(index, elem) { + return this.splice(index, 0, elem); + } + }; + var OBJECT_MEMBERS = { + items: function items() { + return lib._entries(this); + }, + values: function values() { + return lib._values(this); + }, + keys: function keys() { + return lib.keys(this); + }, + get: function get(key, def) { + var output = this[key]; + if (output === undefined) { + output = def; + } + return output; + }, + has_key: function has_key(key) { + return hasOwnProp(this, key); + }, + pop: function pop(key, def) { + var output = this[key]; + if (output === undefined && def !== undefined) { + output = def; + } else if (output === undefined) { + throw new Error('KeyError'); + } else { + delete this[key]; + } + return output; + }, + popitem: function popitem() { + var keys = lib.keys(this); + if (!keys.length) { + throw new Error('KeyError'); + } + var k = keys[0]; + var val = this[k]; + delete this[k]; + return [k, val]; + }, + setdefault: function setdefault(key, def) { + if (def === void 0) { + def = null; + } + if (!(key in this)) { + this[key] = def; + } + return this[key]; + }, + update: function update(kwargs) { + lib._assign(this, kwargs); + return null; // Always returns None + } + }; + + OBJECT_MEMBERS.iteritems = OBJECT_MEMBERS.items; + OBJECT_MEMBERS.itervalues = OBJECT_MEMBERS.values; + OBJECT_MEMBERS.iterkeys = OBJECT_MEMBERS.keys; + runtime.memberLookup = function memberLookup(obj, val, autoescape) { + if (arguments.length === 4) { + return sliceLookup.apply(this, arguments); + } + obj = obj || {}; + + // If the object is an object, return any of the methods that Python would + // otherwise provide. + if (lib.isArray(obj) && hasOwnProp(ARRAY_MEMBERS, val)) { + return ARRAY_MEMBERS[val].bind(obj); + } + if (lib.isObject(obj) && hasOwnProp(OBJECT_MEMBERS, val)) { + return OBJECT_MEMBERS[val].bind(obj); + } + return orig_memberLookup.apply(this, arguments); + }; + return uninstall; +} +module.exports = installCompat; + +/***/ }) +/******/ ]); +}); +//# sourceMappingURL=nunjucks-slim.js.map
\ No newline at end of file diff --git a/node_modules/nunjucks/browser/nunjucks-slim.js.map b/node_modules/nunjucks/browser/nunjucks-slim.js.map new file mode 100644 index 0000000..a252c58 --- /dev/null +++ b/node_modules/nunjucks/browser/nunjucks-slim.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../webpack/universalModuleDefinition","../webpack/bootstrap d513c02a2b56a314bc21","../nunjucks/src/lib.js","../nunjucks/src/runtime.js","../nunjucks/src/precompiled-loader.js","../nunjucks/src/loader.js","../nunjucks/src/object.js","../nunjucks/index.js","../nunjucks/src/environment.js","../node_modules/asap/browser-asap.js","../node_modules/asap/browser-raw.js","../node_modules/webpack/buildin/global.js","../node_modules/a-sync-waterfall/index.js","../nunjucks/src/filters.js","../node_modules/webpack/node_modules/events/events.js","../nunjucks/src/tests.js","../nunjucks/src/globals.js","../nunjucks/src/express-app.js","../nunjucks/src/jinja-compat.js"],"names":["ArrayProto","Array","prototype","ObjProto","Object","escapeMap","escapeRegex","exports","module","hasOwnProp","obj","k","hasOwnProperty","call","lookupEscape","ch","_prettifyError","path","withInternals","err","Update","TemplateError","old","Error","message","name","lineno","colno","cause","setPrototypeOf","defineProperty","enumerable","writable","value","captureStackTrace","constructor","getStack","stackDescriptor","getOwnPropertyDescriptor","get","stack","firstUpdate","msg","create","escape","val","replace","isFunction","toString","isArray","isString","isObject","_prepareAttributeParts","attr","split","getAttrGetter","attribute","parts","attrGetter","item","_item","i","length","part","undefined","groupBy","throwOnUndefined","result","iterator","key","TypeError","push","toArray","slice","without","array","contains","arguments","index","indexOf","repeat","char_","n","str","each","func","context","forEach","l","map","results","asyncIter","arr","iter","cb","next","asyncFor","keys","keys_","len","searchElement","fromIndex","_entries","_values","extend","obj1","obj2","_assign","inOperator","lib","require","arrayFrom","from","supportsIterators","Symbol","Frame","parent","isolateWrites","variables","topLevel","_proto","set","resolveUp","frame","resolve","id","lookup","p","forWrite","pop","makeMacro","argNames","kwargNames","macro","_len","macroArgs","_key","argCount","numArgs","args","kwargs","getKeywordArgs","arg","apply","makeKeywordArgs","__keywords","isKeywordArgs","lastArg","SafeString","String","configurable","valueOf","copySafeness","dest","target","markSafe","type","wrapSafe","ret","suppressValue","autoescape","ensureDefined","memberLookup","_len2","_key2","callWrap","contextOrFrameLookup","handleError","error","asyncEach","dimen","iterCallback","asyncAll","finished","outputArr","done","output","join","fromIterator","_inheritsLoose","subClass","superClass","_setPrototypeOf","o","bind","__proto__","Loader","PrecompiledLoader","_Loader","compiledTemplates","_this","precompiled","getSource","src","_require","EmitterObj","_EmitterObj","to","dirname","isRelative","filename","_defineProperties","props","descriptor","_toPropertyKey","_createClass","Constructor","protoProps","staticProps","_toPrimitive","input","hint","prim","toPrimitive","res","Number","EventEmitter","parentWrap","prop","wrap","tmp","extendClass","cls","subclass","_cls","Obj","init","_EventEmitter","_this2","_proto2","Environment","Template","loaders","precompile","compiler","parser","lexer","runtime","nodes","installJinjaCompat","e","configure","templatesPath","opts","TemplateLoader","FileSystemLoader","watch","noCache","WebLoader","useCache","web","async","express","NodeResolveLoader","reset","compile","env","eagerCompile","render","ctx","renderString","precompileString","asap","waterfall","filters","tests","globals","_require2","globalRuntime","expressApp","callbackAsap","noopTmplSrc","root","dev","trimBlocks","lstripBlocks","window","nunjucksPrecompiled","unshift","_initLoaders","asyncFilters","extensions","extensionsList","_ref","filter","addFilter","_ref2","test","addTest","loader","cache","on","fullname","emit","source","invalidateCache","addExtension","extension","__name","removeExtension","getExtension","hasExtension","addGlobal","getGlobal","wrapped","getFilter","getTest","resolveTemplate","parentName","getTemplate","ignoreMissing","_this3","that","tmpl","raw","syncResult","createTemplate","info","newTmpl","handle","app","tasks","callback","forceAsync","Context","_Obj","blocks","_this4","exported","addBlock","setVariable","getVariables","block","getBlock","getSuper","idx","blk","addExport","getExported","_this5","_Obj2","_proto3","tmplProps","tmplStr","_compile","compiled","parentFrame","_this6","didError","rootRenderFunc","Function","_getBlocks","r","normalize","defaultValue","abs","Math","isNaN","num","batch","linecount","fillWith","capitalize","toLowerCase","charAt","toUpperCase","center","width","spaces","pre","post","default_","def","bool","dictsort","caseSensitive","by","si","sort","t1","t2","a","b","dump","JSON","stringify","safe","first","forceescape","groupby","indent","indentfirst","lines","sp","del","v","last","lengthFilter","Map","Set","size","list","lower","nl2br","random","floor","getSelectOrReject","expectedTestResult","testName","secondArg","examineTestResult","reject","rejectattr","select","selectattr","new_","maxCount","originalStr","RegExp","nextIndex","pos","count","substring","reverse","round","precision","method","factor","pow","rounder","ceil","slices","sliceLength","extra","offset","start","end","currSlice","sum","reduce","sortFilter","reversed","caseSens","getAttribute","x","y","string","striptags","preserveLinebreaks","tags","trimmedInput","trim","title","words","word","truncate","killwords","orig","lastIndexOf","upper","urlencode","enc","encodeURIComponent","keyvals","puncRe","emailRe","httpHttpsRe","wwwRe","tldRe","urlize","nofollow","Infinity","noFollowAttr","matches","match","possibleUrl","shortUrl","substr","wordcount","float","parseFloat","intFilter","doInt","base","parseInt","int","d","default","callable","defined","divisibleby","one","two","escaped","equalto","eq","sameas","even","falsy","ge","greaterthan","gt","le","lessthan","lt","ne","nullTest","null","number","odd","truthy","undefinedTest","iterable","mapping","cycler","items","current","joiner","sep","range","stop","step","NunjucksView","defaultEngine","ext","extname","installCompat","Compiler","Parser","orig_contextOrFrameLookup","orig_memberLookup","orig_Compiler_assertType","orig_Parser_parseAggregate","assertType","parseAggregate","uninstall","getTokensState","tokens","process","Slice","Node","fields","Literal","node","compileSlice","_emit","_compileExpression","origState","errState","rethrow","peeked","tok","peekToken","TOKEN_LEFT_BRACKET","nextToken","isSlice","skip","TOKEN_RIGHT_BRACKET","fail","TOKEN_COLON","field","parseExpression","sliceLookup","ARRAY_MEMBERS","splice","append","element","remove","find","insert","elem","OBJECT_MEMBERS","values","has_key","popitem","setdefault","update","iteritems","itervalues","iterkeys"],"mappings":"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AEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,kBAAkB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC9NA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;ACpBA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA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A;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,cAAc;AACd;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA,iCAAiC,QAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,OAAO;AACP;AACA,sCAAsC,QAAQ;AAC9C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;;AAEA;AACA,QAAQ,yBAAyB;AACjC;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,6DAA6D,aAAa;AAC1E;AACA,6DAA6D,aAAa;AAC1E;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,oCAAoC,aAAa;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;;;;;;;;AChfa;;AAEb,IAAIwG,UAAU,GAAGtC,mBAAO,CAAC,CAAW,CAAC,CAACsC,UAAU;;AAEhD;AACA;AACA;AACA;AACA;AACA,SAASoV,QAAQA,CAACvc,KAAK,EAAE;EACvB,OAAO,OAAOA,KAAK,KAAK,UAAU;AACpC;AAEA1B,OAAO,CAACie,QAAQ,GAAGA,QAAQ;;AAE3B;AACA;AACA;AACA;AACA;AACA,SAASC,OAAOA,CAACxc,KAAK,EAAE;EACtB,OAAOA,KAAK,KAAK+B,SAAS;AAC5B;AAEAzD,OAAO,CAACke,OAAO,GAAGA,OAAO;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,WAAWA,CAACC,GAAG,EAAEC,GAAG,EAAE;EAC7B,OAAQD,GAAG,GAAGC,GAAG,KAAM,CAAC;AAC1B;AAEAre,OAAO,CAACme,WAAW,GAAGA,WAAW;;AAEjC;AACA;AACA;AACA;AACA;AACA,SAASG,OAAOA,CAAC5c,KAAK,EAAE;EACtB,OAAOA,KAAK,YAAYmH,UAAU;AACpC;AAEA7I,OAAO,CAACse,OAAO,GAAGA,OAAO;;AAEzB;AACA;AACA;AACA;AACA;AACA,SAASC,OAAOA,CAACH,GAAG,EAAEC,GAAG,EAAE;EACzB,OAAOD,GAAG,KAAKC,GAAG;AACpB;AAEAre,OAAO,CAACue,OAAO,GAAGA,OAAO;;AAEzB;AACAve,OAAO,CAACwe,EAAE,GAAGxe,OAAO,CAACue,OAAO;AAC5Bve,OAAO,CAACye,MAAM,GAAGze,OAAO,CAACue,OAAO;;AAEhC;AACA;AACA;AACA;AACA;AACA,SAASG,IAAIA,CAAChd,KAAK,EAAE;EACnB,OAAOA,KAAK,GAAG,CAAC,KAAK,CAAC;AACxB;AAEA1B,OAAO,CAAC0e,IAAI,GAAGA,IAAI;;AAEnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,KAAKA,CAACjd,KAAK,EAAE;EACpB,OAAO,CAACA,KAAK;AACf;AAEA1B,OAAO,CAAC2e,KAAK,GAAGA,KAAK;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,EAAEA,CAACR,GAAG,EAAEC,GAAG,EAAE;EACpB,OAAOD,GAAG,IAAIC,GAAG;AACnB;AAEAre,OAAO,CAAC4e,EAAE,GAAGA,EAAE;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,WAAWA,CAACT,GAAG,EAAEC,GAAG,EAAE;EAC7B,OAAOD,GAAG,GAAGC,GAAG;AAClB;AAEAre,OAAO,CAAC6e,WAAW,GAAGA,WAAW;;AAEjC;AACA7e,OAAO,CAAC8e,EAAE,GAAG9e,OAAO,CAAC6e,WAAW;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASE,EAAEA,CAACX,GAAG,EAAEC,GAAG,EAAE;EACpB,OAAOD,GAAG,IAAIC,GAAG;AACnB;AAEAre,OAAO,CAAC+e,EAAE,GAAGA,EAAE;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,QAAQA,CAACZ,GAAG,EAAEC,GAAG,EAAE;EAC1B,OAAOD,GAAG,GAAGC,GAAG;AAClB;AAEAre,OAAO,CAACgf,QAAQ,GAAGA,QAAQ;;AAE3B;AACAhf,OAAO,CAACif,EAAE,GAAGjf,OAAO,CAACgf,QAAQ;;AAE7B;AACA;AACA;AACA;AACA;AACA,SAASrG,KAAKA,CAACjX,KAAK,EAAE;EACpB,OAAOA,KAAK,CAAC0U,WAAW,EAAE,KAAK1U,KAAK;AACtC;AAEA1B,OAAO,CAAC2Y,KAAK,GAAGA,KAAK;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASuG,EAAEA,CAACd,GAAG,EAAEC,GAAG,EAAE;EACpB,OAAOD,GAAG,KAAKC,GAAG;AACpB;AAEAre,OAAO,CAACkf,EAAE,GAAGA,EAAE;;AAEf;AACA;AACA;AACA;AACA;AACA,SAASC,QAAQA,CAACzd,KAAK,EAAE;EACvB,OAAOA,KAAK,KAAK,IAAI;AACvB;AAEA1B,OAAO,CAACof,IAAI,GAAGD,QAAQ;;AAEvB;AACA;AACA;AACA;AACA;AACA,SAASE,MAAMA,CAAC3d,KAAK,EAAE;EACrB,OAAO,OAAOA,KAAK,KAAK,QAAQ;AAClC;AAEA1B,OAAO,CAACqf,MAAM,GAAGA,MAAM;;AAEvB;AACA;AACA;AACA;AACA;AACA,SAASC,GAAGA,CAAC5d,KAAK,EAAE;EAClB,OAAOA,KAAK,GAAG,CAAC,KAAK,CAAC;AACxB;AAEA1B,OAAO,CAACsf,GAAG,GAAGA,GAAG;;AAEjB;AACA;AACA;AACA;AACA;AACA,SAAS/D,MAAMA,CAAC7Z,KAAK,EAAE;EACrB,OAAO,OAAOA,KAAK,KAAK,QAAQ;AAClC;AAEA1B,OAAO,CAACub,MAAM,GAAGA,MAAM;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA,SAASgE,MAAMA,CAAC7d,KAAK,EAAE;EACrB,OAAO,CAAC,CAACA,KAAK;AAChB;AAEA1B,OAAO,CAACuf,MAAM,GAAGA,MAAM;;AAEvB;AACA;AACA;AACA;AACA;AACA,SAASC,aAAaA,CAAC9d,KAAK,EAAE;EAC5B,OAAOA,KAAK,KAAK+B,SAAS;AAC5B;AAEAzD,OAAO,CAACyD,SAAS,GAAG+b,aAAa;;AAEjC;AACA;AACA;AACA;AACA;AACA,SAASpD,KAAKA,CAAC1a,KAAK,EAAE;EACpB,OAAOA,KAAK,CAAC4U,WAAW,EAAE,KAAK5U,KAAK;AACtC;AAEA1B,OAAO,CAACoc,KAAK,GAAGA,KAAK;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASqD,QAAQA,CAAC/d,KAAK,EAAE;EACvB,IAAI,OAAOiF,MAAM,KAAK,WAAW,EAAE;IACjC,OAAO,CAAC,CAACjF,KAAK,CAACiF,MAAM,CAAC9C,QAAQ,CAAC;EACjC,CAAC,MAAM;IACL,OAAOnE,KAAK,CAACgD,OAAO,CAAChB,KAAK,CAAC,IAAI,OAAOA,KAAK,KAAK,QAAQ;EAC1D;AACF;AAEA1B,OAAO,CAACyf,QAAQ,GAAGA,QAAQ;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,OAAOA,CAAChe,KAAK,EAAE;EACtB;EACA,IAAIoV,IAAI,GAAGpV,KAAK,KAAK,IAAI,IACpBA,KAAK,KAAK+B,SAAS,IACnB,OAAO/B,KAAK,KAAK,QAAQ,IACzB,CAAChC,KAAK,CAACgD,OAAO,CAAChB,KAAK,CAAC;EAC1B,IAAI8W,GAAG,EAAE;IACP,OAAO1B,IAAI,IAAI,EAAEpV,KAAK,YAAY8W,GAAG,CAAC;EACxC,CAAC,MAAM;IACL,OAAO1B,IAAI;EACb;AACF;AAEA9W,OAAO,CAAC0f,OAAO,GAAGA,OAAO,C;;;;;;;ACjSZ;;AAEb,SAASC,OAAMA,CAACC,KAAK,EAAE;EACrB,IAAIrb,KAAK,GAAG,CAAC,CAAC;EAEd,OAAO;IACLsb,OAAO,EAAE,IAAI;IACbtQ,KAAK,WAAAA,MAAA,EAAG;MACNhL,KAAK,GAAG,CAAC,CAAC;MACV,IAAI,CAACsb,OAAO,GAAG,IAAI;IACrB,CAAC;IAEDra,IAAI,WAAAA,KAAA,EAAG;MACLjB,KAAK,EAAE;MACP,IAAIA,KAAK,IAAIqb,KAAK,CAACrc,MAAM,EAAE;QACzBgB,KAAK,GAAG,CAAC;MACX;MAEA,IAAI,CAACsb,OAAO,GAAGD,KAAK,CAACrb,KAAK,CAAC;MAC3B,OAAO,IAAI,CAACsb,OAAO;IACrB;EACF,CAAC;AACH;AAEA,SAASC,OAAMA,CAACC,GAAG,EAAE;EACnBA,GAAG,GAAGA,GAAG,IAAI,GAAG;EAChB,IAAInI,KAAK,GAAG,IAAI;EAEhB,OAAO,YAAM;IACX,IAAMtV,GAAG,GAAGsV,KAAK,GAAG,EAAE,GAAGmI,GAAG;IAC5BnI,KAAK,GAAG,KAAK;IACb,OAAOtV,GAAG;EACZ,CAAC;AACH;;AAEA;AACA;AACA;AACA,SAAS6N,OAAOA,CAAA,EAAG;EACjB,OAAO;IACL6P,KAAK,WAAAA,MAACpF,KAAK,EAAEqF,IAAI,EAAEC,IAAI,EAAE;MACvB,IAAI,OAAOD,IAAI,KAAK,WAAW,EAAE;QAC/BA,IAAI,GAAGrF,KAAK;QACZA,KAAK,GAAG,CAAC;QACTsF,IAAI,GAAG,CAAC;MACV,CAAC,MAAM,IAAI,CAACA,IAAI,EAAE;QAChBA,IAAI,GAAG,CAAC;MACV;MAEA,IAAM7a,GAAG,GAAG,EAAE;MACd,IAAI6a,IAAI,GAAG,CAAC,EAAE;QACZ,KAAK,IAAI5c,CAAC,GAAGsX,KAAK,EAAEtX,CAAC,GAAG2c,IAAI,EAAE3c,CAAC,IAAI4c,IAAI,EAAE;UACvC7a,GAAG,CAACrB,IAAI,CAACV,CAAC,CAAC;QACb;MACF,CAAC,MAAM;QACL,KAAK,IAAIA,EAAC,GAAGsX,KAAK,EAAEtX,EAAC,GAAG2c,IAAI,EAAE3c,EAAC,IAAI4c,IAAI,EAAE;UAAE;UACzC7a,GAAG,CAACrB,IAAI,CAACV,EAAC,CAAC;QACb;MACF;MACA,OAAO+B,GAAG;IACZ,CAAC;IAEDsa,MAAM,WAAAA,OAAA,EAAG;MACP,OAAOA,OAAM,CAACjgB,KAAK,CAACC,SAAS,CAACuE,KAAK,CAAC5D,IAAI,CAACgE,SAAS,CAAC,CAAC;IACtD,CAAC;IAEDwb,MAAM,WAAAA,OAACC,GAAG,EAAE;MACV,OAAOD,OAAM,CAACC,GAAG,CAAC;IACpB;EACF,CAAC;AACH;AAEA9f,MAAM,CAACD,OAAO,GAAGmQ,OAAO,C;;;;;;ACxExB,IAAMzP,IAAI,GAAG6F,mBAAO,CAAC,EAAO;AAE5BtG,MAAM,CAACD,OAAO,GAAG,SAASqP,OAAOA,CAACI,GAAG,EAAEgE,GAAG,EAAE;EAC1C,SAAS0M,YAAYA,CAACjf,IAAI,EAAE0N,IAAI,EAAE;IAChC,IAAI,CAAC1N,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACR,IAAI,GAAGQ,IAAI;IAChB,IAAI,CAACkf,aAAa,GAAGxR,IAAI,CAACwR,aAAa;IACvC,IAAI,CAACC,GAAG,GAAG3f,IAAI,CAAC4f,OAAO,CAACpf,IAAI,CAAC;IAC7B,IAAI,CAAC,IAAI,CAACmf,GAAG,IAAI,CAAC,IAAI,CAACD,aAAa,EAAE;MACpC,MAAM,IAAIpf,KAAK,CAAC,gEAAgE,CAAC;IACnF;IACA,IAAI,CAAC,IAAI,CAACqf,GAAG,EAAE;MACb,IAAI,CAACnf,IAAI,IAAK,IAAI,CAACmf,GAAG,GAAG,CAAC,IAAI,CAACD,aAAa,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,EAAE,IAAI,IAAI,CAACA,aAAc;IAC3F;EACF;EAEAD,YAAY,CAACxgB,SAAS,CAACgQ,MAAM,GAAG,SAASA,MAAMA,CAACf,IAAI,EAAErJ,EAAE,EAAE;IACxDkK,GAAG,CAACE,MAAM,CAAC,IAAI,CAACzO,IAAI,EAAE0N,IAAI,EAAErJ,EAAE,CAAC;EACjC,CAAC;EAEDkO,GAAG,CAACvM,GAAG,CAAC,MAAM,EAAEiZ,YAAY,CAAC;EAC7B1M,GAAG,CAACvM,GAAG,CAAC,aAAa,EAAEuI,GAAG,CAAC;EAC3B,OAAOA,GAAG;AACZ,CAAC,C;;;;;;ACvBD,SAAS8Q,aAAaA,CAAA,EAAG;EACvB,YAAY;;EAEZ;;EAEA;EACA;EACA,IAAIjS,OAAO,GAAG,IAAI,CAACA,OAAO;EAC1B,IAAIhI,GAAG,GAAG,IAAI,CAACA,GAAG;EAClB;EACA,IAAIka,QAAQ,GAAG,IAAI,CAACrS,QAAQ,CAACqS,QAAQ;EACrC,IAAIC,MAAM,GAAG,IAAI,CAACrS,MAAM,CAACqS,MAAM;EAC/B,IAAIlS,KAAK,GAAG,IAAI,CAACA,KAAK;EACtB,IAAIF,KAAK,GAAG,IAAI,CAACA,KAAK;EAEtB,IAAIqS,yBAAyB,GAAGpS,OAAO,CAACvE,oBAAoB;EAC5D,IAAI4W,iBAAiB,GAAGrS,OAAO,CAAC3E,YAAY;EAC5C,IAAIiX,wBAAwB;EAC5B,IAAIC,0BAA0B;EAC9B,IAAIL,QAAQ,EAAE;IACZI,wBAAwB,GAAGJ,QAAQ,CAAC7gB,SAAS,CAACmhB,UAAU;EAC1D;EACA,IAAIL,MAAM,EAAE;IACVI,0BAA0B,GAAGJ,MAAM,CAAC9gB,SAAS,CAACohB,cAAc;EAC9D;EAEA,SAASC,SAASA,CAAA,EAAG;IACnB1S,OAAO,CAACvE,oBAAoB,GAAG2W,yBAAyB;IACxDpS,OAAO,CAAC3E,YAAY,GAAGgX,iBAAiB;IACxC,IAAIH,QAAQ,EAAE;MACZA,QAAQ,CAAC7gB,SAAS,CAACmhB,UAAU,GAAGF,wBAAwB;IAC1D;IACA,IAAIH,MAAM,EAAE;MACVA,MAAM,CAAC9gB,SAAS,CAACohB,cAAc,GAAGF,0BAA0B;IAC9D;EACF;EAEAvS,OAAO,CAACvE,oBAAoB,GAAG,SAASA,oBAAoBA,CAAChF,OAAO,EAAEqC,KAAK,EAAEtD,GAAG,EAAE;IAChF,IAAIxB,GAAG,GAAGoe,yBAAyB,CAAClY,KAAK,CAAC,IAAI,EAAElE,SAAS,CAAC;IAC1D,IAAIhC,GAAG,KAAKmB,SAAS,EAAE;MACrB,OAAOnB,GAAG;IACZ;IACA,QAAQwB,GAAG;MACT,KAAK,MAAM;QACT,OAAO,IAAI;MACb,KAAK,OAAO;QACV,OAAO,KAAK;MACd,KAAK,MAAM;QACT,OAAO,IAAI;MACb;QACE,OAAOL,SAAS;IAAC;EAEvB,CAAC;EAED,SAASwd,cAAcA,CAACC,MAAM,EAAE;IAC9B,OAAO;MACL3c,KAAK,EAAE2c,MAAM,CAAC3c,KAAK;MACnBpD,MAAM,EAAE+f,MAAM,CAAC/f,MAAM;MACrBC,KAAK,EAAE8f,MAAM,CAAC9f;IAChB,CAAC;EACH;EAEA,IAAI+f,KAAgE,EAAE;IAAE;IACtE,IAAMC,KAAK,GAAG7S,KAAK,CAAC8S,IAAI,CAACpb,MAAM,CAAC,OAAO,EAAE;MACvCqb,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;MACjC3T,IAAI,WAAAA,KAACxM,MAAM,EAAEC,KAAK,EAAEwZ,KAAK,EAAEqF,IAAI,EAAEC,IAAI,EAAE;QACrCtF,KAAK,GAAGA,KAAK,IAAI,IAAIrM,KAAK,CAACgT,OAAO,CAACpgB,MAAM,EAAEC,KAAK,EAAE,IAAI,CAAC;QACvD6e,IAAI,GAAGA,IAAI,IAAI,IAAI1R,KAAK,CAACgT,OAAO,CAACpgB,MAAM,EAAEC,KAAK,EAAE,IAAI,CAAC;QACrD8e,IAAI,GAAGA,IAAI,IAAI,IAAI3R,KAAK,CAACgT,OAAO,CAACpgB,MAAM,EAAEC,KAAK,EAAE,CAAC,CAAC;QAClD,IAAI,CAACyF,MAAM,CAAC1F,MAAM,EAAEC,KAAK,EAAEwZ,KAAK,EAAEqF,IAAI,EAAEC,IAAI,CAAC;MAC/C;IACF,CAAC,CAAC;IAEFM,QAAQ,CAAC7gB,SAAS,CAACmhB,UAAU,GAAG,SAASA,UAAUA,CAACU,IAAI,EAAE;MACxD,IAAIA,IAAI,YAAYJ,KAAK,EAAE;QACzB;MACF;MACAR,wBAAwB,CAACpY,KAAK,CAAC,IAAI,EAAElE,SAAS,CAAC;IACjD,CAAC;IACDkc,QAAQ,CAAC7gB,SAAS,CAAC8hB,YAAY,GAAG,SAASA,YAAYA,CAACD,IAAI,EAAEpa,KAAK,EAAE;MACnE,IAAI,CAACsa,KAAK,CAAC,GAAG,CAAC;MACf,IAAI,CAACC,kBAAkB,CAACH,IAAI,CAAC5G,KAAK,EAAExT,KAAK,CAAC;MAC1C,IAAI,CAACsa,KAAK,CAAC,KAAK,CAAC;MACjB,IAAI,CAACC,kBAAkB,CAACH,IAAI,CAACvB,IAAI,EAAE7Y,KAAK,CAAC;MACzC,IAAI,CAACsa,KAAK,CAAC,KAAK,CAAC;MACjB,IAAI,CAACC,kBAAkB,CAACH,IAAI,CAACtB,IAAI,EAAE9Y,KAAK,CAAC;MACzC,IAAI,CAACsa,KAAK,CAAC,GAAG,CAAC;IACjB,CAAC;IAEDjB,MAAM,CAAC9gB,SAAS,CAACohB,cAAc,GAAG,SAASA,cAAcA,CAAA,EAAG;MAAA,IAAAxV,KAAA;MAC1D,IAAIqW,SAAS,GAAGX,cAAc,CAAC,IAAI,CAACC,MAAM,CAAC;MAC3C;MACAU,SAAS,CAACxgB,KAAK,EAAE;MACjBwgB,SAAS,CAACrd,KAAK,EAAE;MACjB,IAAI;QACF,OAAOsc,0BAA0B,CAACrY,KAAK,CAAC,IAAI,CAAC;MAC/C,CAAC,CAAC,OAAOiG,CAAC,EAAE;QACV,IAAMoT,QAAQ,GAAGZ,cAAc,CAAC,IAAI,CAACC,MAAM,CAAC;QAC5C,IAAMY,OAAO,GAAG,SAAVA,OAAOA,CAAA,EAAS;UACpBxb,GAAG,CAACF,OAAO,CAACmF,KAAI,CAAC2V,MAAM,EAAEW,QAAQ,CAAC;UAClC,OAAOpT,CAAC;QACV,CAAC;;QAED;QACAnI,GAAG,CAACF,OAAO,CAAC,IAAI,CAAC8a,MAAM,EAAEU,SAAS,CAAC;QACnC,IAAI,CAACG,MAAM,GAAG,KAAK;QAEnB,IAAMC,GAAG,GAAG,IAAI,CAACC,SAAS,EAAE;QAC5B,IAAID,GAAG,CAAC3Y,IAAI,KAAKgF,KAAK,CAAC6T,kBAAkB,EAAE;UACzC,MAAMJ,OAAO,EAAE;QACjB,CAAC,MAAM;UACL,IAAI,CAACK,SAAS,EAAE;QAClB;QAEA,IAAMX,IAAI,GAAG,IAAIJ,KAAK,CAACY,GAAG,CAAC7gB,MAAM,EAAE6gB,GAAG,CAAC5gB,KAAK,CAAC;;QAE7C;QACA;QACA,IAAIghB,OAAO,GAAG,KAAK;QAEnB,KAAK,IAAI9e,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIke,IAAI,CAACF,MAAM,CAAC/d,MAAM,EAAED,CAAC,EAAE,EAAE;UAC5C,IAAI,IAAI,CAAC+e,IAAI,CAAChU,KAAK,CAACiU,mBAAmB,CAAC,EAAE;YACxC;UACF;UACA,IAAIhf,CAAC,KAAKke,IAAI,CAACF,MAAM,CAAC/d,MAAM,EAAE;YAC5B,IAAI6e,OAAO,EAAE;cACX,IAAI,CAACG,IAAI,CAAC,uCAAuC,EAAEP,GAAG,CAAC7gB,MAAM,EAAE6gB,GAAG,CAAC5gB,KAAK,CAAC;YAC3E,CAAC,MAAM;cACL;YACF;UACF;UACA,IAAI,IAAI,CAACihB,IAAI,CAAChU,KAAK,CAACmU,WAAW,CAAC,EAAE;YAChCJ,OAAO,GAAG,IAAI;UAChB,CAAC,MAAM;YACL,IAAMK,KAAK,GAAGjB,IAAI,CAACF,MAAM,CAAChe,CAAC,CAAC;YAC5Bke,IAAI,CAACiB,KAAK,CAAC,GAAG,IAAI,CAACC,eAAe,EAAE;YACpCN,OAAO,GAAG,IAAI,CAACC,IAAI,CAAChU,KAAK,CAACmU,WAAW,CAAC,IAAIJ,OAAO;UACnD;QACF;QACA,IAAI,CAACA,OAAO,EAAE;UACZ,MAAMN,OAAO,EAAE;QACjB;QACA,OAAO,IAAIvT,KAAK,CAAC7O,KAAK,CAACsiB,GAAG,CAAC7gB,MAAM,EAAE6gB,GAAG,CAAC5gB,KAAK,EAAE,CAACogB,IAAI,CAAC,CAAC;MACvD;IACF,CAAC;EACH;EAEA,SAASmB,WAAWA,CAACxiB,GAAG,EAAEya,KAAK,EAAEqF,IAAI,EAAEC,IAAI,EAAE;IAC3C/f,GAAG,GAAGA,GAAG,IAAI,EAAE;IACf,IAAIya,KAAK,KAAK,IAAI,EAAE;MAClBA,KAAK,GAAIsF,IAAI,GAAG,CAAC,GAAK/f,GAAG,CAACoD,MAAM,GAAG,CAAC,GAAI,CAAC;IAC3C;IACA,IAAI0c,IAAI,KAAK,IAAI,EAAE;MACjBA,IAAI,GAAIC,IAAI,GAAG,CAAC,GAAI,CAAC,CAAC,GAAG/f,GAAG,CAACoD,MAAM;IACrC,CAAC,MAAM,IAAI0c,IAAI,GAAG,CAAC,EAAE;MACnBA,IAAI,IAAI9f,GAAG,CAACoD,MAAM;IACpB;IAEA,IAAIqX,KAAK,GAAG,CAAC,EAAE;MACbA,KAAK,IAAIza,GAAG,CAACoD,MAAM;IACrB;IAEA,IAAM4B,OAAO,GAAG,EAAE;IAElB,KAAK,IAAI7B,CAAC,GAAGsX,KAAK,GAAItX,CAAC,IAAI4c,IAAI,EAAE;MAC/B,IAAI5c,CAAC,GAAG,CAAC,IAAIA,CAAC,GAAGnD,GAAG,CAACoD,MAAM,EAAE;QAC3B;MACF;MACA,IAAI2c,IAAI,GAAG,CAAC,IAAI5c,CAAC,IAAI2c,IAAI,EAAE;QACzB;MACF;MACA,IAAIC,IAAI,GAAG,CAAC,IAAI5c,CAAC,IAAI2c,IAAI,EAAE;QACzB;MACF;MACA9a,OAAO,CAACnB,IAAI,CAACsK,OAAO,CAAC3E,YAAY,CAACxJ,GAAG,EAAEmD,CAAC,CAAC,CAAC;IAC5C;IACA,OAAO6B,OAAO;EAChB;EAEA,SAASjF,UAAUA,CAACC,GAAG,EAAE2D,GAAG,EAAE;IAC5B,OAAOjE,MAAM,CAACF,SAAS,CAACU,cAAc,CAACC,IAAI,CAACH,GAAG,EAAE2D,GAAG,CAAC;EACvD;EAEA,IAAM8e,aAAa,GAAG;IACpBlb,GAAG,WAAAA,IAACnD,KAAK,EAAE;MACT,IAAIA,KAAK,KAAKd,SAAS,EAAE;QACvB,OAAO,IAAI,CAACiE,GAAG,EAAE;MACnB;MACA,IAAInD,KAAK,IAAI,IAAI,CAAChB,MAAM,IAAIgB,KAAK,GAAG,CAAC,EAAE;QACrC,MAAM,IAAIvD,KAAK,CAAC,UAAU,CAAC;MAC7B;MACA,OAAO,IAAI,CAAC6hB,MAAM,CAACte,KAAK,EAAE,CAAC,CAAC;IAC9B,CAAC;IACDue,MAAM,WAAAA,OAACC,OAAO,EAAE;MACd,OAAO,IAAI,CAAC/e,IAAI,CAAC+e,OAAO,CAAC;IAC3B,CAAC;IACDC,MAAM,WAAAA,OAACD,OAAO,EAAE;MACd,KAAK,IAAIzf,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACC,MAAM,EAAED,CAAC,EAAE,EAAE;QACpC,IAAI,IAAI,CAACA,CAAC,CAAC,KAAKyf,OAAO,EAAE;UACvB,OAAO,IAAI,CAACF,MAAM,CAACvf,CAAC,EAAE,CAAC,CAAC;QAC1B;MACF;MACA,MAAM,IAAItC,KAAK,CAAC,YAAY,CAAC;IAC/B,CAAC;IACD8Y,KAAK,WAAAA,MAACiJ,OAAO,EAAE;MACb,IAAIjJ,KAAK,GAAG,CAAC;MACb,KAAK,IAAIxW,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACC,MAAM,EAAED,CAAC,EAAE,EAAE;QACpC,IAAI,IAAI,CAACA,CAAC,CAAC,KAAKyf,OAAO,EAAE;UACvBjJ,KAAK,EAAE;QACT;MACF;MACA,OAAOA,KAAK;IACd,CAAC;IACDvV,KAAK,WAAAA,MAACwe,OAAO,EAAE;MACb,IAAIzf,CAAC;MACL,IAAI,CAACA,CAAC,GAAG,IAAI,CAACkB,OAAO,CAACue,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE;QACtC,MAAM,IAAI/hB,KAAK,CAAC,YAAY,CAAC;MAC/B;MACA,OAAOsC,CAAC;IACV,CAAC;IACD2f,IAAI,WAAAA,KAACF,OAAO,EAAE;MACZ,OAAO,IAAI,CAACve,OAAO,CAACue,OAAO,CAAC;IAC9B,CAAC;IACDG,MAAM,WAAAA,OAAC3e,KAAK,EAAE4e,IAAI,EAAE;MAClB,OAAO,IAAI,CAACN,MAAM,CAACte,KAAK,EAAE,CAAC,EAAE4e,IAAI,CAAC;IACpC;EACF,CAAC;EACD,IAAMC,cAAc,GAAG;IACrBxD,KAAK,WAAAA,MAAA,EAAG;MACN,OAAOtZ,GAAG,CAACP,QAAQ,CAAC,IAAI,CAAC;IAC3B,CAAC;IACDsd,MAAM,WAAAA,OAAA,EAAG;MACP,OAAO/c,GAAG,CAACN,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC;IACDN,IAAI,WAAAA,KAAA,EAAG;MACL,OAAOY,GAAG,CAACZ,IAAI,CAAC,IAAI,CAAC;IACvB,CAAC;IACD1D,GAAG,WAAAA,IAAC8B,GAAG,EAAE+S,GAAG,EAAE;MACZ,IAAIpM,MAAM,GAAG,IAAI,CAAC3G,GAAG,CAAC;MACtB,IAAI2G,MAAM,KAAKhH,SAAS,EAAE;QACxBgH,MAAM,GAAGoM,GAAG;MACd;MACA,OAAOpM,MAAM;IACf,CAAC;IACD6Y,OAAO,WAAAA,QAACxf,GAAG,EAAE;MACX,OAAO5D,UAAU,CAAC,IAAI,EAAE4D,GAAG,CAAC;IAC9B,CAAC;IACD4D,GAAG,WAAAA,IAAC5D,GAAG,EAAE+S,GAAG,EAAE;MACZ,IAAIpM,MAAM,GAAG,IAAI,CAAC3G,GAAG,CAAC;MACtB,IAAI2G,MAAM,KAAKhH,SAAS,IAAIoT,GAAG,KAAKpT,SAAS,EAAE;QAC7CgH,MAAM,GAAGoM,GAAG;MACd,CAAC,MAAM,IAAIpM,MAAM,KAAKhH,SAAS,EAAE;QAC/B,MAAM,IAAIzC,KAAK,CAAC,UAAU,CAAC;MAC7B,CAAC,MAAM;QACL,OAAO,IAAI,CAAC8C,GAAG,CAAC;MAClB;MACA,OAAO2G,MAAM;IACf,CAAC;IACD8Y,OAAO,WAAAA,QAAA,EAAG;MACR,IAAM7d,IAAI,GAAGY,GAAG,CAACZ,IAAI,CAAC,IAAI,CAAC;MAC3B,IAAI,CAACA,IAAI,CAACnC,MAAM,EAAE;QAChB,MAAM,IAAIvC,KAAK,CAAC,UAAU,CAAC;MAC7B;MACA,IAAMZ,CAAC,GAAGsF,IAAI,CAAC,CAAC,CAAC;MACjB,IAAMpD,GAAG,GAAG,IAAI,CAAClC,CAAC,CAAC;MACnB,OAAO,IAAI,CAACA,CAAC,CAAC;MACd,OAAO,CAACA,CAAC,EAAEkC,GAAG,CAAC;IACjB,CAAC;IACDkhB,UAAU,WAAAA,WAAC1f,GAAG,EAAE+S,GAAG,EAAS;MAAA,IAAZA,GAAG;QAAHA,GAAG,GAAG,IAAI;MAAA;MACxB,IAAI,EAAE/S,GAAG,IAAI,IAAI,CAAC,EAAE;QAClB,IAAI,CAACA,GAAG,CAAC,GAAG+S,GAAG;MACjB;MACA,OAAO,IAAI,CAAC/S,GAAG,CAAC;IAClB,CAAC;IACD2f,MAAM,WAAAA,OAACpb,MAAM,EAAE;MACb/B,GAAG,CAACF,OAAO,CAAC,IAAI,EAAEiC,MAAM,CAAC;MACzB,OAAO,IAAI,CAAC,CAAC;IACf;EACF,CAAC;;EACD+a,cAAc,CAACM,SAAS,GAAGN,cAAc,CAACxD,KAAK;EAC/CwD,cAAc,CAACO,UAAU,GAAGP,cAAc,CAACC,MAAM;EACjDD,cAAc,CAACQ,QAAQ,GAAGR,cAAc,CAAC1d,IAAI;EAE7C4I,OAAO,CAAC3E,YAAY,GAAG,SAASA,YAAYA,CAACxJ,GAAG,EAAEmC,GAAG,EAAEmH,UAAU,EAAE;IACjE,IAAInF,SAAS,CAACf,MAAM,KAAK,CAAC,EAAE;MAC1B,OAAOof,WAAW,CAACna,KAAK,CAAC,IAAI,EAAElE,SAAS,CAAC;IAC3C;IACAnE,GAAG,GAAGA,GAAG,IAAI,CAAC,CAAC;;IAEf;IACA;IACA,IAAImG,GAAG,CAAC5D,OAAO,CAACvC,GAAG,CAAC,IAAID,UAAU,CAAC0iB,aAAa,EAAEtgB,GAAG,CAAC,EAAE;MACtD,OAAOsgB,aAAa,CAACtgB,GAAG,CAAC,CAAC2I,IAAI,CAAC9K,GAAG,CAAC;IACrC;IACA,IAAImG,GAAG,CAAC1D,QAAQ,CAACzC,GAAG,CAAC,IAAID,UAAU,CAACkjB,cAAc,EAAE9gB,GAAG,CAAC,EAAE;MACxD,OAAO8gB,cAAc,CAAC9gB,GAAG,CAAC,CAAC2I,IAAI,CAAC9K,GAAG,CAAC;IACtC;IAEA,OAAOwgB,iBAAiB,CAACnY,KAAK,CAAC,IAAI,EAAElE,SAAS,CAAC;EACjD,CAAC;EAED,OAAO0c,SAAS;AAClB;AAEA/gB,MAAM,CAACD,OAAO,GAAGugB,aAAa,C","file":"nunjucks-slim.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"nunjucks\"] = factory();\n\telse\n\t\troot[\"nunjucks\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 6);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap d513c02a2b56a314bc21","'use strict';\n\nvar ArrayProto = Array.prototype;\nvar ObjProto = Object.prototype;\n\nvar escapeMap = {\n '&': '&',\n '\"': '"',\n '\\'': ''',\n '<': '<',\n '>': '>',\n '\\\\': '\',\n};\n\nvar escapeRegex = /[&\"'<>\\\\]/g;\n\nvar exports = module.exports = {};\n\nfunction hasOwnProp(obj, k) {\n return ObjProto.hasOwnProperty.call(obj, k);\n}\n\nexports.hasOwnProp = hasOwnProp;\n\nfunction lookupEscape(ch) {\n return escapeMap[ch];\n}\n\nfunction _prettifyError(path, withInternals, err) {\n if (!err.Update) {\n // not one of ours, cast it\n err = new exports.TemplateError(err);\n }\n err.Update(path);\n\n // Unless they marked the dev flag, show them a trace from here\n if (!withInternals) {\n const old = err;\n err = new Error(old.message);\n err.name = old.name;\n }\n\n return err;\n}\n\nexports._prettifyError = _prettifyError;\n\nfunction TemplateError(message, lineno, colno) {\n var err;\n var cause;\n\n if (message instanceof Error) {\n cause = message;\n message = `${cause.name}: ${cause.message}`;\n }\n\n if (Object.setPrototypeOf) {\n err = new Error(message);\n Object.setPrototypeOf(err, TemplateError.prototype);\n } else {\n err = this;\n Object.defineProperty(err, 'message', {\n enumerable: false,\n writable: true,\n value: message,\n });\n }\n\n Object.defineProperty(err, 'name', {\n value: 'Template render error',\n });\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(err, this.constructor);\n }\n\n let getStack;\n\n if (cause) {\n const stackDescriptor = Object.getOwnPropertyDescriptor(cause, 'stack');\n getStack = stackDescriptor && (stackDescriptor.get || (() => stackDescriptor.value));\n if (!getStack) {\n getStack = () => cause.stack;\n }\n } else {\n const stack = (new Error(message)).stack;\n getStack = (() => stack);\n }\n\n Object.defineProperty(err, 'stack', {\n get: () => getStack.call(err),\n });\n\n Object.defineProperty(err, 'cause', {\n value: cause\n });\n\n err.lineno = lineno;\n err.colno = colno;\n err.firstUpdate = true;\n\n err.Update = function Update(path) {\n let msg = '(' + (path || 'unknown path') + ')';\n\n // only show lineno + colno next to path of template\n // where error occurred\n if (this.firstUpdate) {\n if (this.lineno && this.colno) {\n msg += ` [Line ${this.lineno}, Column ${this.colno}]`;\n } else if (this.lineno) {\n msg += ` [Line ${this.lineno}]`;\n }\n }\n\n msg += '\\n ';\n if (this.firstUpdate) {\n msg += ' ';\n }\n\n this.message = msg + (this.message || '');\n this.firstUpdate = false;\n return this;\n };\n\n return err;\n}\n\n\nif (Object.setPrototypeOf) {\n Object.setPrototypeOf(TemplateError.prototype, Error.prototype);\n} else {\n TemplateError.prototype = Object.create(Error.prototype, {\n constructor: {\n value: TemplateError,\n },\n });\n}\n\nexports.TemplateError = TemplateError;\n\nfunction escape(val) {\n return val.replace(escapeRegex, lookupEscape);\n}\n\nexports.escape = escape;\n\nfunction isFunction(obj) {\n return ObjProto.toString.call(obj) === '[object Function]';\n}\n\nexports.isFunction = isFunction;\n\nfunction isArray(obj) {\n return ObjProto.toString.call(obj) === '[object Array]';\n}\n\nexports.isArray = isArray;\n\nfunction isString(obj) {\n return ObjProto.toString.call(obj) === '[object String]';\n}\n\nexports.isString = isString;\n\nfunction isObject(obj) {\n return ObjProto.toString.call(obj) === '[object Object]';\n}\n\nexports.isObject = isObject;\n\n/**\n * @param {string|number} attr\n * @returns {(string|number)[]}\n * @private\n */\nfunction _prepareAttributeParts(attr) {\n if (!attr) {\n return [];\n }\n\n if (typeof attr === 'string') {\n return attr.split('.');\n }\n\n return [attr];\n}\n\n/**\n * @param {string} attribute Attribute value. Dots allowed.\n * @returns {function(Object): *}\n */\nfunction getAttrGetter(attribute) {\n const parts = _prepareAttributeParts(attribute);\n\n return function attrGetter(item) {\n let _item = item;\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n\n // If item is not an object, and we still got parts to handle, it means\n // that something goes wrong. Just roll out to undefined in that case.\n if (hasOwnProp(_item, part)) {\n _item = _item[part];\n } else {\n return undefined;\n }\n }\n\n return _item;\n };\n}\n\nexports.getAttrGetter = getAttrGetter;\n\nfunction groupBy(obj, val, throwOnUndefined) {\n const result = {};\n const iterator = isFunction(val) ? val : getAttrGetter(val);\n for (let i = 0; i < obj.length; i++) {\n const value = obj[i];\n const key = iterator(value, i);\n if (key === undefined && throwOnUndefined === true) {\n throw new TypeError(`groupby: attribute \"${val}\" resolved to undefined`);\n }\n (result[key] || (result[key] = [])).push(value);\n }\n return result;\n}\n\nexports.groupBy = groupBy;\n\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj);\n}\n\nexports.toArray = toArray;\n\nfunction without(array) {\n const result = [];\n if (!array) {\n return result;\n }\n const length = array.length;\n const contains = toArray(arguments).slice(1);\n let index = -1;\n\n while (++index < length) {\n if (indexOf(contains, array[index]) === -1) {\n result.push(array[index]);\n }\n }\n return result;\n}\n\nexports.without = without;\n\nfunction repeat(char_, n) {\n var str = '';\n for (let i = 0; i < n; i++) {\n str += char_;\n }\n return str;\n}\n\nexports.repeat = repeat;\n\nfunction each(obj, func, context) {\n if (obj == null) {\n return;\n }\n\n if (ArrayProto.forEach && obj.forEach === ArrayProto.forEach) {\n obj.forEach(func, context);\n } else if (obj.length === +obj.length) {\n for (let i = 0, l = obj.length; i < l; i++) {\n func.call(context, obj[i], i, obj);\n }\n }\n}\n\nexports.each = each;\n\nfunction map(obj, func) {\n var results = [];\n if (obj == null) {\n return results;\n }\n\n if (ArrayProto.map && obj.map === ArrayProto.map) {\n return obj.map(func);\n }\n\n for (let i = 0; i < obj.length; i++) {\n results[results.length] = func(obj[i], i);\n }\n\n if (obj.length === +obj.length) {\n results.length = obj.length;\n }\n\n return results;\n}\n\nexports.map = map;\n\nfunction asyncIter(arr, iter, cb) {\n let i = -1;\n\n function next() {\n i++;\n\n if (i < arr.length) {\n iter(arr[i], i, next, cb);\n } else {\n cb();\n }\n }\n\n next();\n}\n\nexports.asyncIter = asyncIter;\n\nfunction asyncFor(obj, iter, cb) {\n const keys = keys_(obj || {});\n const len = keys.length;\n let i = -1;\n\n function next() {\n i++;\n const k = keys[i];\n\n if (i < len) {\n iter(k, obj[k], i, len, next);\n } else {\n cb();\n }\n }\n\n next();\n}\n\nexports.asyncFor = asyncFor;\n\nfunction indexOf(arr, searchElement, fromIndex) {\n return Array.prototype.indexOf.call(arr || [], searchElement, fromIndex);\n}\n\nexports.indexOf = indexOf;\n\nfunction keys_(obj) {\n /* eslint-disable no-restricted-syntax */\n const arr = [];\n for (let k in obj) {\n if (hasOwnProp(obj, k)) {\n arr.push(k);\n }\n }\n return arr;\n}\n\nexports.keys = keys_;\n\nfunction _entries(obj) {\n return keys_(obj).map((k) => [k, obj[k]]);\n}\n\nexports._entries = _entries;\n\nfunction _values(obj) {\n return keys_(obj).map((k) => obj[k]);\n}\n\nexports._values = _values;\n\nfunction extend(obj1, obj2) {\n obj1 = obj1 || {};\n keys_(obj2).forEach(k => {\n obj1[k] = obj2[k];\n });\n return obj1;\n}\n\nexports._assign = exports.extend = extend;\n\nfunction inOperator(key, val) {\n if (isArray(val) || isString(val)) {\n return val.indexOf(key) !== -1;\n } else if (isObject(val)) {\n return key in val;\n }\n throw new Error('Cannot use \"in\" operator to search for \"'\n + key + '\" in unexpected types.');\n}\n\nexports.inOperator = inOperator;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/lib.js","'use strict';\n\nvar lib = require('./lib');\nvar arrayFrom = Array.from;\nvar supportsIterators = (\n typeof Symbol === 'function' && Symbol.iterator && typeof arrayFrom === 'function'\n);\n\n\n// Frames keep track of scoping both at compile-time and run-time so\n// we know how to access variables. Block tags can introduce special\n// variables, for example.\nclass Frame {\n constructor(parent, isolateWrites) {\n this.variables = Object.create(null);\n this.parent = parent;\n this.topLevel = false;\n // if this is true, writes (set) should never propagate upwards past\n // this frame to its parent (though reads may).\n this.isolateWrites = isolateWrites;\n }\n\n set(name, val, resolveUp) {\n // Allow variables with dots by automatically creating the\n // nested structure\n var parts = name.split('.');\n var obj = this.variables;\n var frame = this;\n\n if (resolveUp) {\n if ((frame = this.resolve(parts[0], true))) {\n frame.set(name, val);\n return;\n }\n }\n\n for (let i = 0; i < parts.length - 1; i++) {\n const id = parts[i];\n\n if (!obj[id]) {\n obj[id] = {};\n }\n obj = obj[id];\n }\n\n obj[parts[parts.length - 1]] = val;\n }\n\n get(name) {\n var val = this.variables[name];\n if (val !== undefined) {\n return val;\n }\n return null;\n }\n\n lookup(name) {\n var p = this.parent;\n var val = this.variables[name];\n if (val !== undefined) {\n return val;\n }\n return p && p.lookup(name);\n }\n\n resolve(name, forWrite) {\n var p = (forWrite && this.isolateWrites) ? undefined : this.parent;\n var val = this.variables[name];\n if (val !== undefined) {\n return this;\n }\n return p && p.resolve(name);\n }\n\n push(isolateWrites) {\n return new Frame(this, isolateWrites);\n }\n\n pop() {\n return this.parent;\n }\n}\n\nfunction makeMacro(argNames, kwargNames, func) {\n return function macro(...macroArgs) {\n var argCount = numArgs(macroArgs);\n var args;\n var kwargs = getKeywordArgs(macroArgs);\n\n if (argCount > argNames.length) {\n args = macroArgs.slice(0, argNames.length);\n\n // Positional arguments that should be passed in as\n // keyword arguments (essentially default values)\n macroArgs.slice(args.length, argCount).forEach((val, i) => {\n if (i < kwargNames.length) {\n kwargs[kwargNames[i]] = val;\n }\n });\n args.push(kwargs);\n } else if (argCount < argNames.length) {\n args = macroArgs.slice(0, argCount);\n\n for (let i = argCount; i < argNames.length; i++) {\n const arg = argNames[i];\n\n // Keyword arguments that should be passed as\n // positional arguments, i.e. the caller explicitly\n // used the name of a positional arg\n args.push(kwargs[arg]);\n delete kwargs[arg];\n }\n args.push(kwargs);\n } else {\n args = macroArgs;\n }\n\n return func.apply(this, args);\n };\n}\n\nfunction makeKeywordArgs(obj) {\n obj.__keywords = true;\n return obj;\n}\n\nfunction isKeywordArgs(obj) {\n return obj && Object.prototype.hasOwnProperty.call(obj, '__keywords');\n}\n\nfunction getKeywordArgs(args) {\n var len = args.length;\n if (len) {\n const lastArg = args[len - 1];\n if (isKeywordArgs(lastArg)) {\n return lastArg;\n }\n }\n return {};\n}\n\nfunction numArgs(args) {\n var len = args.length;\n if (len === 0) {\n return 0;\n }\n\n const lastArg = args[len - 1];\n if (isKeywordArgs(lastArg)) {\n return len - 1;\n } else {\n return len;\n }\n}\n\n// A SafeString object indicates that the string should not be\n// autoescaped. This happens magically because autoescaping only\n// occurs on primitive string objects.\nfunction SafeString(val) {\n if (typeof val !== 'string') {\n return val;\n }\n\n this.val = val;\n this.length = val.length;\n}\n\nSafeString.prototype = Object.create(String.prototype, {\n length: {\n writable: true,\n configurable: true,\n value: 0\n }\n});\nSafeString.prototype.valueOf = function valueOf() {\n return this.val;\n};\nSafeString.prototype.toString = function toString() {\n return this.val;\n};\n\nfunction copySafeness(dest, target) {\n if (dest instanceof SafeString) {\n return new SafeString(target);\n }\n return target.toString();\n}\n\nfunction markSafe(val) {\n var type = typeof val;\n\n if (type === 'string') {\n return new SafeString(val);\n } else if (type !== 'function') {\n return val;\n } else {\n return function wrapSafe(args) {\n var ret = val.apply(this, arguments);\n\n if (typeof ret === 'string') {\n return new SafeString(ret);\n }\n\n return ret;\n };\n }\n}\n\nfunction suppressValue(val, autoescape) {\n val = (val !== undefined && val !== null) ? val : '';\n\n if (autoescape && !(val instanceof SafeString)) {\n val = lib.escape(val.toString());\n }\n\n return val;\n}\n\nfunction ensureDefined(val, lineno, colno) {\n if (val === null || val === undefined) {\n throw new lib.TemplateError(\n 'attempted to output null or undefined value',\n lineno + 1,\n colno + 1\n );\n }\n return val;\n}\n\nfunction memberLookup(obj, val) {\n if (obj === undefined || obj === null) {\n return undefined;\n }\n\n if (typeof obj[val] === 'function') {\n return (...args) => obj[val].apply(obj, args);\n }\n\n return obj[val];\n}\n\nfunction callWrap(obj, name, context, args) {\n if (!obj) {\n throw new Error('Unable to call `' + name + '`, which is undefined or falsey');\n } else if (typeof obj !== 'function') {\n throw new Error('Unable to call `' + name + '`, which is not a function');\n }\n\n return obj.apply(context, args);\n}\n\nfunction contextOrFrameLookup(context, frame, name) {\n var val = frame.lookup(name);\n return (val !== undefined) ?\n val :\n context.lookup(name);\n}\n\nfunction handleError(error, lineno, colno) {\n if (error.lineno) {\n return error;\n } else {\n return new lib.TemplateError(error, lineno, colno);\n }\n}\n\nfunction asyncEach(arr, dimen, iter, cb) {\n if (lib.isArray(arr)) {\n const len = arr.length;\n\n lib.asyncIter(arr, function iterCallback(item, i, next) {\n switch (dimen) {\n case 1:\n iter(item, i, len, next);\n break;\n case 2:\n iter(item[0], item[1], i, len, next);\n break;\n case 3:\n iter(item[0], item[1], item[2], i, len, next);\n break;\n default:\n item.push(i, len, next);\n iter.apply(this, item);\n }\n }, cb);\n } else {\n lib.asyncFor(arr, function iterCallback(key, val, i, len, next) {\n iter(key, val, i, len, next);\n }, cb);\n }\n}\n\nfunction asyncAll(arr, dimen, func, cb) {\n var finished = 0;\n var len;\n var outputArr;\n\n function done(i, output) {\n finished++;\n outputArr[i] = output;\n\n if (finished === len) {\n cb(null, outputArr.join(''));\n }\n }\n\n if (lib.isArray(arr)) {\n len = arr.length;\n outputArr = new Array(len);\n\n if (len === 0) {\n cb(null, '');\n } else {\n for (let i = 0; i < arr.length; i++) {\n const item = arr[i];\n\n switch (dimen) {\n case 1:\n func(item, i, len, done);\n break;\n case 2:\n func(item[0], item[1], i, len, done);\n break;\n case 3:\n func(item[0], item[1], item[2], i, len, done);\n break;\n default:\n item.push(i, len, done);\n func.apply(this, item);\n }\n }\n }\n } else {\n const keys = lib.keys(arr || {});\n len = keys.length;\n outputArr = new Array(len);\n\n if (len === 0) {\n cb(null, '');\n } else {\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n func(k, arr[k], i, len, done);\n }\n }\n }\n}\n\nfunction fromIterator(arr) {\n if (typeof arr !== 'object' || arr === null || lib.isArray(arr)) {\n return arr;\n } else if (supportsIterators && Symbol.iterator in arr) {\n return arrayFrom(arr);\n } else {\n return arr;\n }\n}\n\nmodule.exports = {\n Frame: Frame,\n makeMacro: makeMacro,\n makeKeywordArgs: makeKeywordArgs,\n numArgs: numArgs,\n suppressValue: suppressValue,\n ensureDefined: ensureDefined,\n memberLookup: memberLookup,\n contextOrFrameLookup: contextOrFrameLookup,\n callWrap: callWrap,\n handleError: handleError,\n isArray: lib.isArray,\n keys: lib.keys,\n SafeString: SafeString,\n copySafeness: copySafeness,\n markSafe: markSafe,\n asyncEach: asyncEach,\n asyncAll: asyncAll,\n inOperator: lib.inOperator,\n fromIterator: fromIterator\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/runtime.js","'use strict';\n\nconst Loader = require('./loader');\n\nclass PrecompiledLoader extends Loader {\n constructor(compiledTemplates) {\n super();\n this.precompiled = compiledTemplates || {};\n }\n\n getSource(name) {\n if (this.precompiled[name]) {\n return {\n src: {\n type: 'code',\n obj: this.precompiled[name]\n },\n path: name\n };\n }\n return null;\n }\n}\n\nmodule.exports = {\n PrecompiledLoader: PrecompiledLoader,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/precompiled-loader.js","'use strict';\n\nconst path = require('path');\nconst {EmitterObj} = require('./object');\n\nmodule.exports = class Loader extends EmitterObj {\n resolve(from, to) {\n return path.resolve(path.dirname(from), to);\n }\n\n isRelative(filename) {\n return (filename.indexOf('./') === 0 || filename.indexOf('../') === 0);\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/loader.js","'use strict';\n\n// A simple class system, more documentation to come\nconst EventEmitter = require('events');\nconst lib = require('./lib');\n\nfunction parentWrap(parent, prop) {\n if (typeof parent !== 'function' || typeof prop !== 'function') {\n return prop;\n }\n return function wrap() {\n // Save the current parent method\n const tmp = this.parent;\n\n // Set parent to the previous method, call, and restore\n this.parent = parent;\n const res = prop.apply(this, arguments);\n this.parent = tmp;\n\n return res;\n };\n}\n\nfunction extendClass(cls, name, props) {\n props = props || {};\n\n lib.keys(props).forEach(k => {\n props[k] = parentWrap(cls.prototype[k], props[k]);\n });\n\n class subclass extends cls {\n get typename() {\n return name;\n }\n }\n\n lib._assign(subclass.prototype, props);\n\n return subclass;\n}\n\nclass Obj {\n constructor(...args) {\n // Unfortunately necessary for backwards compatibility\n this.init(...args);\n }\n\n init() {}\n\n get typename() {\n return this.constructor.name;\n }\n\n static extend(name, props) {\n if (typeof name === 'object') {\n props = name;\n name = 'anonymous';\n }\n return extendClass(this, name, props);\n }\n}\n\nclass EmitterObj extends EventEmitter {\n constructor(...args) {\n super();\n // Unfortunately necessary for backwards compatibility\n this.init(...args);\n }\n\n init() {}\n\n get typename() {\n return this.constructor.name;\n }\n\n static extend(name, props) {\n if (typeof name === 'object') {\n props = name;\n name = 'anonymous';\n }\n return extendClass(this, name, props);\n }\n}\n\nmodule.exports = { Obj, EmitterObj };\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/object.js","'use strict';\n\nconst lib = require('./src/lib');\nconst {Environment, Template} = require('./src/environment');\nconst Loader = require('./src/loader');\nconst loaders = require('./src/loaders');\nconst precompile = require('./src/precompile');\nconst compiler = require('./src/compiler');\nconst parser = require('./src/parser');\nconst lexer = require('./src/lexer');\nconst runtime = require('./src/runtime');\nconst nodes = require('./src/nodes');\nconst installJinjaCompat = require('./src/jinja-compat');\n\n// A single instance of an environment, since this is so commonly used\nlet e;\n\nfunction configure(templatesPath, opts) {\n opts = opts || {};\n if (lib.isObject(templatesPath)) {\n opts = templatesPath;\n templatesPath = null;\n }\n\n let TemplateLoader;\n if (loaders.FileSystemLoader) {\n TemplateLoader = new loaders.FileSystemLoader(templatesPath, {\n watch: opts.watch,\n noCache: opts.noCache\n });\n } else if (loaders.WebLoader) {\n TemplateLoader = new loaders.WebLoader(templatesPath, {\n useCache: opts.web && opts.web.useCache,\n async: opts.web && opts.web.async\n });\n }\n\n e = new Environment(TemplateLoader, opts);\n\n if (opts && opts.express) {\n e.express(opts.express);\n }\n\n return e;\n}\n\nmodule.exports = {\n Environment: Environment,\n Template: Template,\n Loader: Loader,\n FileSystemLoader: loaders.FileSystemLoader,\n NodeResolveLoader: loaders.NodeResolveLoader,\n PrecompiledLoader: loaders.PrecompiledLoader,\n WebLoader: loaders.WebLoader,\n compiler: compiler,\n parser: parser,\n lexer: lexer,\n runtime: runtime,\n lib: lib,\n nodes: nodes,\n installJinjaCompat: installJinjaCompat,\n configure: configure,\n reset() {\n e = undefined;\n },\n compile(src, env, path, eagerCompile) {\n if (!e) {\n configure();\n }\n return new Template(src, env, path, eagerCompile);\n },\n render(name, ctx, cb) {\n if (!e) {\n configure();\n }\n\n return e.render(name, ctx, cb);\n },\n renderString(src, ctx, cb) {\n if (!e) {\n configure();\n }\n\n return e.renderString(src, ctx, cb);\n },\n precompile: (precompile) ? precompile.precompile : undefined,\n precompileString: (precompile) ? precompile.precompileString : undefined,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/index.js","'use strict';\n\nconst asap = require('asap');\nconst waterfall = require('a-sync-waterfall');\nconst lib = require('./lib');\nconst compiler = require('./compiler');\nconst filters = require('./filters');\nconst {FileSystemLoader, WebLoader, PrecompiledLoader} = require('./loaders');\nconst tests = require('./tests');\nconst globals = require('./globals');\nconst {Obj, EmitterObj} = require('./object');\nconst globalRuntime = require('./runtime');\nconst {handleError, Frame} = globalRuntime;\nconst expressApp = require('./express-app');\n\n// If the user is using the async API, *always* call it\n// asynchronously even if the template was synchronous.\nfunction callbackAsap(cb, err, res) {\n asap(() => {\n cb(err, res);\n });\n}\n\n/**\n * A no-op template, for use with {% include ignore missing %}\n */\nconst noopTmplSrc = {\n type: 'code',\n obj: {\n root(env, context, frame, runtime, cb) {\n try {\n cb(null, '');\n } catch (e) {\n cb(handleError(e, null, null));\n }\n }\n }\n};\n\nclass Environment extends EmitterObj {\n init(loaders, opts) {\n // The dev flag determines the trace that'll be shown on errors.\n // If set to true, returns the full trace from the error point,\n // otherwise will return trace starting from Template.render\n // (the full trace from within nunjucks may confuse developers using\n // the library)\n // defaults to false\n opts = this.opts = opts || {};\n this.opts.dev = !!opts.dev;\n\n // The autoescape flag sets global autoescaping. If true,\n // every string variable will be escaped by default.\n // If false, strings can be manually escaped using the `escape` filter.\n // defaults to true\n this.opts.autoescape = opts.autoescape != null ? opts.autoescape : true;\n\n // If true, this will make the system throw errors if trying\n // to output a null or undefined value\n this.opts.throwOnUndefined = !!opts.throwOnUndefined;\n this.opts.trimBlocks = !!opts.trimBlocks;\n this.opts.lstripBlocks = !!opts.lstripBlocks;\n\n this.loaders = [];\n\n if (!loaders) {\n // The filesystem loader is only available server-side\n if (FileSystemLoader) {\n this.loaders = [new FileSystemLoader('views')];\n } else if (WebLoader) {\n this.loaders = [new WebLoader('/views')];\n }\n } else {\n this.loaders = lib.isArray(loaders) ? loaders : [loaders];\n }\n\n // It's easy to use precompiled templates: just include them\n // before you configure nunjucks and this will automatically\n // pick it up and use it\n if (typeof window !== 'undefined' && window.nunjucksPrecompiled) {\n this.loaders.unshift(\n new PrecompiledLoader(window.nunjucksPrecompiled)\n );\n }\n\n this._initLoaders();\n\n this.globals = globals();\n this.filters = {};\n this.tests = {};\n this.asyncFilters = [];\n this.extensions = {};\n this.extensionsList = [];\n\n lib._entries(filters).forEach(([name, filter]) => this.addFilter(name, filter));\n lib._entries(tests).forEach(([name, test]) => this.addTest(name, test));\n }\n\n _initLoaders() {\n this.loaders.forEach((loader) => {\n // Caching and cache busting\n loader.cache = {};\n if (typeof loader.on === 'function') {\n loader.on('update', (name, fullname) => {\n loader.cache[name] = null;\n this.emit('update', name, fullname, loader);\n });\n loader.on('load', (name, source) => {\n this.emit('load', name, source, loader);\n });\n }\n });\n }\n\n invalidateCache() {\n this.loaders.forEach((loader) => {\n loader.cache = {};\n });\n }\n\n addExtension(name, extension) {\n extension.__name = name;\n this.extensions[name] = extension;\n this.extensionsList.push(extension);\n return this;\n }\n\n removeExtension(name) {\n var extension = this.getExtension(name);\n if (!extension) {\n return;\n }\n\n this.extensionsList = lib.without(this.extensionsList, extension);\n delete this.extensions[name];\n }\n\n getExtension(name) {\n return this.extensions[name];\n }\n\n hasExtension(name) {\n return !!this.extensions[name];\n }\n\n addGlobal(name, value) {\n this.globals[name] = value;\n return this;\n }\n\n getGlobal(name) {\n if (typeof this.globals[name] === 'undefined') {\n throw new Error('global not found: ' + name);\n }\n return this.globals[name];\n }\n\n addFilter(name, func, async) {\n var wrapped = func;\n\n if (async) {\n this.asyncFilters.push(name);\n }\n this.filters[name] = wrapped;\n return this;\n }\n\n getFilter(name) {\n if (!this.filters[name]) {\n throw new Error('filter not found: ' + name);\n }\n return this.filters[name];\n }\n\n addTest(name, func) {\n this.tests[name] = func;\n return this;\n }\n\n getTest(name) {\n if (!this.tests[name]) {\n throw new Error('test not found: ' + name);\n }\n return this.tests[name];\n }\n\n resolveTemplate(loader, parentName, filename) {\n var isRelative = (loader.isRelative && parentName) ? loader.isRelative(filename) : false;\n return (isRelative && loader.resolve) ? loader.resolve(parentName, filename) : filename;\n }\n\n getTemplate(name, eagerCompile, parentName, ignoreMissing, cb) {\n var that = this;\n var tmpl = null;\n if (name && name.raw) {\n // this fixes autoescape for templates referenced in symbols\n name = name.raw;\n }\n\n if (lib.isFunction(parentName)) {\n cb = parentName;\n parentName = null;\n eagerCompile = eagerCompile || false;\n }\n\n if (lib.isFunction(eagerCompile)) {\n cb = eagerCompile;\n eagerCompile = false;\n }\n\n if (name instanceof Template) {\n tmpl = name;\n } else if (typeof name !== 'string') {\n throw new Error('template names must be a string: ' + name);\n } else {\n for (let i = 0; i < this.loaders.length; i++) {\n const loader = this.loaders[i];\n tmpl = loader.cache[this.resolveTemplate(loader, parentName, name)];\n if (tmpl) {\n break;\n }\n }\n }\n\n if (tmpl) {\n if (eagerCompile) {\n tmpl.compile();\n }\n\n if (cb) {\n cb(null, tmpl);\n return undefined;\n } else {\n return tmpl;\n }\n }\n let syncResult;\n\n const createTemplate = (err, info) => {\n if (!info && !err && !ignoreMissing) {\n err = new Error('template not found: ' + name);\n }\n\n if (err) {\n if (cb) {\n cb(err);\n return;\n } else {\n throw err;\n }\n }\n let newTmpl;\n if (!info) {\n newTmpl = new Template(noopTmplSrc, this, '', eagerCompile);\n } else {\n newTmpl = new Template(info.src, this, info.path, eagerCompile);\n if (!info.noCache) {\n info.loader.cache[name] = newTmpl;\n }\n }\n if (cb) {\n cb(null, newTmpl);\n } else {\n syncResult = newTmpl;\n }\n };\n\n lib.asyncIter(this.loaders, (loader, i, next, done) => {\n function handle(err, src) {\n if (err) {\n done(err);\n } else if (src) {\n src.loader = loader;\n done(null, src);\n } else {\n next();\n }\n }\n\n // Resolve name relative to parentName\n name = that.resolveTemplate(loader, parentName, name);\n\n if (loader.async) {\n loader.getSource(name, handle);\n } else {\n handle(null, loader.getSource(name));\n }\n }, createTemplate);\n\n return syncResult;\n }\n\n express(app) {\n return expressApp(this, app);\n }\n\n render(name, ctx, cb) {\n if (lib.isFunction(ctx)) {\n cb = ctx;\n ctx = null;\n }\n\n // We support a synchronous API to make it easier to migrate\n // existing code to async. This works because if you don't do\n // anything async work, the whole thing is actually run\n // synchronously.\n let syncResult = null;\n\n this.getTemplate(name, (err, tmpl) => {\n if (err && cb) {\n callbackAsap(cb, err);\n } else if (err) {\n throw err;\n } else {\n syncResult = tmpl.render(ctx, cb);\n }\n });\n\n return syncResult;\n }\n\n renderString(src, ctx, opts, cb) {\n if (lib.isFunction(opts)) {\n cb = opts;\n opts = {};\n }\n opts = opts || {};\n\n const tmpl = new Template(src, this, opts.path);\n return tmpl.render(ctx, cb);\n }\n\n waterfall(tasks, callback, forceAsync) {\n return waterfall(tasks, callback, forceAsync);\n }\n}\n\nclass Context extends Obj {\n init(ctx, blocks, env) {\n // Has to be tied to an environment so we can tap into its globals.\n this.env = env || new Environment();\n\n // Make a duplicate of ctx\n this.ctx = lib.extend({}, ctx);\n\n this.blocks = {};\n this.exported = [];\n\n lib.keys(blocks).forEach(name => {\n this.addBlock(name, blocks[name]);\n });\n }\n\n lookup(name) {\n // This is one of the most called functions, so optimize for\n // the typical case where the name isn't in the globals\n if (name in this.env.globals && !(name in this.ctx)) {\n return this.env.globals[name];\n } else {\n return this.ctx[name];\n }\n }\n\n setVariable(name, val) {\n this.ctx[name] = val;\n }\n\n getVariables() {\n return this.ctx;\n }\n\n addBlock(name, block) {\n this.blocks[name] = this.blocks[name] || [];\n this.blocks[name].push(block);\n return this;\n }\n\n getBlock(name) {\n if (!this.blocks[name]) {\n throw new Error('unknown block \"' + name + '\"');\n }\n\n return this.blocks[name][0];\n }\n\n getSuper(env, name, block, frame, runtime, cb) {\n var idx = lib.indexOf(this.blocks[name] || [], block);\n var blk = this.blocks[name][idx + 1];\n var context = this;\n\n if (idx === -1 || !blk) {\n throw new Error('no super block available for \"' + name + '\"');\n }\n\n blk(env, context, frame, runtime, cb);\n }\n\n addExport(name) {\n this.exported.push(name);\n }\n\n getExported() {\n var exported = {};\n this.exported.forEach((name) => {\n exported[name] = this.ctx[name];\n });\n return exported;\n }\n}\n\nclass Template extends Obj {\n init(src, env, path, eagerCompile) {\n this.env = env || new Environment();\n\n if (lib.isObject(src)) {\n switch (src.type) {\n case 'code':\n this.tmplProps = src.obj;\n break;\n case 'string':\n this.tmplStr = src.obj;\n break;\n default:\n throw new Error(\n `Unexpected template object type ${src.type}; expected 'code', or 'string'`);\n }\n } else if (lib.isString(src)) {\n this.tmplStr = src;\n } else {\n throw new Error('src must be a string or an object describing the source');\n }\n\n this.path = path;\n\n if (eagerCompile) {\n try {\n this._compile();\n } catch (err) {\n throw lib._prettifyError(this.path, this.env.opts.dev, err);\n }\n } else {\n this.compiled = false;\n }\n }\n\n render(ctx, parentFrame, cb) {\n if (typeof ctx === 'function') {\n cb = ctx;\n ctx = {};\n } else if (typeof parentFrame === 'function') {\n cb = parentFrame;\n parentFrame = null;\n }\n\n // If there is a parent frame, we are being called from internal\n // code of another template, and the internal system\n // depends on the sync/async nature of the parent template\n // to be inherited, so force an async callback\n const forceAsync = !parentFrame;\n\n // Catch compile errors for async rendering\n try {\n this.compile();\n } catch (e) {\n const err = lib._prettifyError(this.path, this.env.opts.dev, e);\n if (cb) {\n return callbackAsap(cb, err);\n } else {\n throw err;\n }\n }\n\n const context = new Context(ctx || {}, this.blocks, this.env);\n const frame = parentFrame ? parentFrame.push(true) : new Frame();\n frame.topLevel = true;\n let syncResult = null;\n let didError = false;\n\n this.rootRenderFunc(this.env, context, frame, globalRuntime, (err, res) => {\n // TODO: this is actually a bug in the compiled template (because waterfall\n // tasks are both not passing errors up the chain of callbacks AND are not\n // causing a return from the top-most render function). But fixing that\n // will require a more substantial change to the compiler.\n if (didError && cb && typeof res !== 'undefined') {\n // prevent multiple calls to cb\n return;\n }\n\n if (err) {\n err = lib._prettifyError(this.path, this.env.opts.dev, err);\n didError = true;\n }\n\n if (cb) {\n if (forceAsync) {\n callbackAsap(cb, err, res);\n } else {\n cb(err, res);\n }\n } else {\n if (err) {\n throw err;\n }\n syncResult = res;\n }\n });\n\n return syncResult;\n }\n\n\n getExported(ctx, parentFrame, cb) { // eslint-disable-line consistent-return\n if (typeof ctx === 'function') {\n cb = ctx;\n ctx = {};\n }\n\n if (typeof parentFrame === 'function') {\n cb = parentFrame;\n parentFrame = null;\n }\n\n // Catch compile errors for async rendering\n try {\n this.compile();\n } catch (e) {\n if (cb) {\n return cb(e);\n } else {\n throw e;\n }\n }\n\n const frame = parentFrame ? parentFrame.push() : new Frame();\n frame.topLevel = true;\n\n // Run the rootRenderFunc to populate the context with exported vars\n const context = new Context(ctx || {}, this.blocks, this.env);\n this.rootRenderFunc(this.env, context, frame, globalRuntime, (err) => {\n if (err) {\n cb(err, null);\n } else {\n cb(null, context.getExported());\n }\n });\n }\n\n compile() {\n if (!this.compiled) {\n this._compile();\n }\n }\n\n _compile() {\n var props;\n\n if (this.tmplProps) {\n props = this.tmplProps;\n } else {\n const source = compiler.compile(this.tmplStr,\n this.env.asyncFilters,\n this.env.extensionsList,\n this.path,\n this.env.opts);\n\n const func = new Function(source); // eslint-disable-line no-new-func\n props = func();\n }\n\n this.blocks = this._getBlocks(props);\n this.rootRenderFunc = props.root;\n this.compiled = true;\n }\n\n _getBlocks(props) {\n var blocks = {};\n\n lib.keys(props).forEach((k) => {\n if (k.slice(0, 2) === 'b_') {\n blocks[k.slice(2)] = props[k];\n }\n });\n\n return blocks;\n }\n}\n\nmodule.exports = {\n Environment: Environment,\n Template: Template\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/environment.js","\"use strict\";\n\n// rawAsap provides everything we need except exception management.\nvar rawAsap = require(\"./raw\");\n// RawTasks are recycled to reduce GC churn.\nvar freeTasks = [];\n// We queue errors to ensure they are thrown in right order (FIFO).\n// Array-as-queue is good enough here, since we are just dealing with exceptions.\nvar pendingErrors = [];\nvar requestErrorThrow = rawAsap.makeRequestCallFromTimer(throwFirstError);\n\nfunction throwFirstError() {\n if (pendingErrors.length) {\n throw pendingErrors.shift();\n }\n}\n\n/**\n * Calls a task as soon as possible after returning, in its own event, with priority\n * over other events like animation, reflow, and repaint. An error thrown from an\n * event will not interrupt, nor even substantially slow down the processing of\n * other events, but will be rather postponed to a lower priority event.\n * @param {{call}} task A callable object, typically a function that takes no\n * arguments.\n */\nmodule.exports = asap;\nfunction asap(task) {\n var rawTask;\n if (freeTasks.length) {\n rawTask = freeTasks.pop();\n } else {\n rawTask = new RawTask();\n }\n rawTask.task = task;\n rawAsap(rawTask);\n}\n\n// We wrap tasks with recyclable task objects. A task object implements\n// `call`, just like a function.\nfunction RawTask() {\n this.task = null;\n}\n\n// The sole purpose of wrapping the task is to catch the exception and recycle\n// the task object after its single use.\nRawTask.prototype.call = function () {\n try {\n this.task.call();\n } catch (error) {\n if (asap.onerror) {\n // This hook exists purely for testing purposes.\n // Its name will be periodically randomized to break any code that\n // depends on its existence.\n asap.onerror(error);\n } else {\n // In a web browser, exceptions are not fatal. However, to avoid\n // slowing down the queue of pending tasks, we rethrow the error in a\n // lower priority turn.\n pendingErrors.push(error);\n requestErrorThrow();\n }\n } finally {\n this.task = null;\n freeTasks[freeTasks.length] = this;\n }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/asap/browser-asap.js\n// module id = 8\n// module chunks = 0","\"use strict\";\n\n// Use the fastest means possible to execute a task in its own turn, with\n// priority over other events including IO, animation, reflow, and redraw\n// events in browsers.\n//\n// An exception thrown by a task will permanently interrupt the processing of\n// subsequent tasks. The higher level `asap` function ensures that if an\n// exception is thrown by a task, that the task queue will continue flushing as\n// soon as possible, but if you use `rawAsap` directly, you are responsible to\n// either ensure that no exceptions are thrown from your task, or to manually\n// call `rawAsap.requestFlush` if an exception is thrown.\nmodule.exports = rawAsap;\nfunction rawAsap(task) {\n if (!queue.length) {\n requestFlush();\n flushing = true;\n }\n // Equivalent to push, but avoids a function call.\n queue[queue.length] = task;\n}\n\nvar queue = [];\n// Once a flush has been requested, no further calls to `requestFlush` are\n// necessary until the next `flush` completes.\nvar flushing = false;\n// `requestFlush` is an implementation-specific method that attempts to kick\n// off a `flush` event as quickly as possible. `flush` will attempt to exhaust\n// the event queue before yielding to the browser's own event loop.\nvar requestFlush;\n// The position of the next task to execute in the task queue. This is\n// preserved between calls to `flush` so that it can be resumed if\n// a task throws an exception.\nvar index = 0;\n// If a task schedules additional tasks recursively, the task queue can grow\n// unbounded. To prevent memory exhaustion, the task queue will periodically\n// truncate already-completed tasks.\nvar capacity = 1024;\n\n// The flush function processes all tasks that have been scheduled with\n// `rawAsap` unless and until one of those tasks throws an exception.\n// If a task throws an exception, `flush` ensures that its state will remain\n// consistent and will resume where it left off when called again.\n// However, `flush` does not make any arrangements to be called again if an\n// exception is thrown.\nfunction flush() {\n while (index < queue.length) {\n var currentIndex = index;\n // Advance the index before calling the task. This ensures that we will\n // begin flushing on the next task the task throws an error.\n index = index + 1;\n queue[currentIndex].call();\n // Prevent leaking memory for long chains of recursive calls to `asap`.\n // If we call `asap` within tasks scheduled by `asap`, the queue will\n // grow, but to avoid an O(n) walk for every task we execute, we don't\n // shift tasks off the queue after they have been executed.\n // Instead, we periodically shift 1024 tasks off the queue.\n if (index > capacity) {\n // Manually shift all values starting at the index back to the\n // beginning of the queue.\n for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {\n queue[scan] = queue[scan + index];\n }\n queue.length -= index;\n index = 0;\n }\n }\n queue.length = 0;\n index = 0;\n flushing = false;\n}\n\n// `requestFlush` is implemented using a strategy based on data collected from\n// every available SauceLabs Selenium web driver worker at time of writing.\n// https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593\n\n// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that\n// have WebKitMutationObserver but not un-prefixed MutationObserver.\n// Must use `global` or `self` instead of `window` to work in both frames and web\n// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop.\n\n/* globals self */\nvar scope = typeof global !== \"undefined\" ? global : self;\nvar BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver;\n\n// MutationObservers are desirable because they have high priority and work\n// reliably everywhere they are implemented.\n// They are implemented in all modern browsers.\n//\n// - Android 4-4.3\n// - Chrome 26-34\n// - Firefox 14-29\n// - Internet Explorer 11\n// - iPad Safari 6-7.1\n// - iPhone Safari 7-7.1\n// - Safari 6-7\nif (typeof BrowserMutationObserver === \"function\") {\n requestFlush = makeRequestCallFromMutationObserver(flush);\n\n// MessageChannels are desirable because they give direct access to the HTML\n// task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera\n// 11-12, and in web workers in many engines.\n// Although message channels yield to any queued rendering and IO tasks, they\n// would be better than imposing the 4ms delay of timers.\n// However, they do not work reliably in Internet Explorer or Safari.\n\n// Internet Explorer 10 is the only browser that has setImmediate but does\n// not have MutationObservers.\n// Although setImmediate yields to the browser's renderer, it would be\n// preferrable to falling back to setTimeout since it does not have\n// the minimum 4ms penalty.\n// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and\n// Desktop to a lesser extent) that renders both setImmediate and\n// MessageChannel useless for the purposes of ASAP.\n// https://github.com/kriskowal/q/issues/396\n\n// Timers are implemented universally.\n// We fall back to timers in workers in most engines, and in foreground\n// contexts in the following browsers.\n// However, note that even this simple case requires nuances to operate in a\n// broad spectrum of browsers.\n//\n// - Firefox 3-13\n// - Internet Explorer 6-9\n// - iPad Safari 4.3\n// - Lynx 2.8.7\n} else {\n requestFlush = makeRequestCallFromTimer(flush);\n}\n\n// `requestFlush` requests that the high priority event queue be flushed as\n// soon as possible.\n// This is useful to prevent an error thrown in a task from stalling the event\n// queue if the exception handled by Node.js’s\n// `process.on(\"uncaughtException\")` or by a domain.\nrawAsap.requestFlush = requestFlush;\n\n// To request a high priority event, we induce a mutation observer by toggling\n// the text of a text node between \"1\" and \"-1\".\nfunction makeRequestCallFromMutationObserver(callback) {\n var toggle = 1;\n var observer = new BrowserMutationObserver(callback);\n var node = document.createTextNode(\"\");\n observer.observe(node, {characterData: true});\n return function requestCall() {\n toggle = -toggle;\n node.data = toggle;\n };\n}\n\n// The message channel technique was discovered by Malte Ubl and was the\n// original foundation for this library.\n// http://www.nonblocking.io/2011/06/windownexttick.html\n\n// Safari 6.0.5 (at least) intermittently fails to create message ports on a\n// page's first load. Thankfully, this version of Safari supports\n// MutationObservers, so we don't need to fall back in that case.\n\n// function makeRequestCallFromMessageChannel(callback) {\n// var channel = new MessageChannel();\n// channel.port1.onmessage = callback;\n// return function requestCall() {\n// channel.port2.postMessage(0);\n// };\n// }\n\n// For reasons explained above, we are also unable to use `setImmediate`\n// under any circumstances.\n// Even if we were, there is another bug in Internet Explorer 10.\n// It is not sufficient to assign `setImmediate` to `requestFlush` because\n// `setImmediate` must be called *by name* and therefore must be wrapped in a\n// closure.\n// Never forget.\n\n// function makeRequestCallFromSetImmediate(callback) {\n// return function requestCall() {\n// setImmediate(callback);\n// };\n// }\n\n// Safari 6.0 has a problem where timers will get lost while the user is\n// scrolling. This problem does not impact ASAP because Safari 6.0 supports\n// mutation observers, so that implementation is used instead.\n// However, if we ever elect to use timers in Safari, the prevalent work-around\n// is to add a scroll event listener that calls for a flush.\n\n// `setTimeout` does not call the passed callback if the delay is less than\n// approximately 7 in web workers in Firefox 8 through 18, and sometimes not\n// even then.\n\nfunction makeRequestCallFromTimer(callback) {\n return function requestCall() {\n // We dispatch a timeout with a specified delay of 0 for engines that\n // can reliably accommodate that request. This will usually be snapped\n // to a 4 milisecond delay, but once we're flushing, there's no delay\n // between events.\n var timeoutHandle = setTimeout(handleTimer, 0);\n // However, since this timer gets frequently dropped in Firefox\n // workers, we enlist an interval handle that will try to fire\n // an event 20 times per second until it succeeds.\n var intervalHandle = setInterval(handleTimer, 50);\n\n function handleTimer() {\n // Whichever timer succeeds will cancel both timers and\n // execute the callback.\n clearTimeout(timeoutHandle);\n clearInterval(intervalHandle);\n callback();\n }\n };\n}\n\n// This is for `asap.js` only.\n// Its name will be periodically randomized to break any code that depends on\n// its existence.\nrawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer;\n\n// ASAP was originally a nextTick shim included in Q. This was factored out\n// into this ASAP package. It was later adapted to RSVP which made further\n// amendments. These decisions, particularly to marginalize MessageChannel and\n// to capture the MutationObserver implementation in a closure, were integrated\n// back into ASAP proper.\n// https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/asap/browser-raw.js\n// module id = 9\n// module chunks = 0","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 10\n// module chunks = 0","// MIT license (by Elan Shanker).\n(function(globals) {\n 'use strict';\n\n var executeSync = function(){\n var args = Array.prototype.slice.call(arguments);\n if (typeof args[0] === 'function'){\n args[0].apply(null, args.splice(1));\n }\n };\n\n var executeAsync = function(fn){\n if (typeof setImmediate === 'function') {\n setImmediate(fn);\n } else if (typeof process !== 'undefined' && process.nextTick) {\n process.nextTick(fn);\n } else {\n setTimeout(fn, 0);\n }\n };\n\n var makeIterator = function (tasks) {\n var makeCallback = function (index) {\n var fn = function () {\n if (tasks.length) {\n tasks[index].apply(null, arguments);\n }\n return fn.next();\n };\n fn.next = function () {\n return (index < tasks.length - 1) ? makeCallback(index + 1): null;\n };\n return fn;\n };\n return makeCallback(0);\n };\n \n var _isArray = Array.isArray || function(maybeArray){\n return Object.prototype.toString.call(maybeArray) === '[object Array]';\n };\n\n var waterfall = function (tasks, callback, forceAsync) {\n var nextTick = forceAsync ? executeAsync : executeSync;\n callback = callback || function () {};\n if (!_isArray(tasks)) {\n var err = new Error('First argument to waterfall must be an array of functions');\n return callback(err);\n }\n if (!tasks.length) {\n return callback();\n }\n var wrapIterator = function (iterator) {\n return function (err) {\n if (err) {\n callback.apply(null, arguments);\n callback = function () {};\n } else {\n var args = Array.prototype.slice.call(arguments, 1);\n var next = iterator.next();\n if (next) {\n args.push(wrapIterator(next));\n } else {\n args.push(callback);\n }\n nextTick(function () {\n iterator.apply(null, args);\n });\n }\n };\n };\n wrapIterator(makeIterator(tasks))();\n };\n\n if (typeof define !== 'undefined' && define.amd) {\n define([], function () {\n return waterfall;\n }); // RequireJS\n } else if (typeof module !== 'undefined' && module.exports) {\n module.exports = waterfall; // CommonJS\n } else {\n globals.waterfall = waterfall; // <script>\n }\n})(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/a-sync-waterfall/index.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar lib = require('./lib');\nvar r = require('./runtime');\n\nvar exports = module.exports = {};\n\nfunction normalize(value, defaultValue) {\n if (value === null || value === undefined || value === false) {\n return defaultValue;\n }\n return value;\n}\n\nexports.abs = Math.abs;\n\nfunction isNaN(num) {\n return num !== num; // eslint-disable-line no-self-compare\n}\n\nfunction batch(arr, linecount, fillWith) {\n var i;\n var res = [];\n var tmp = [];\n\n for (i = 0; i < arr.length; i++) {\n if (i % linecount === 0 && tmp.length) {\n res.push(tmp);\n tmp = [];\n }\n\n tmp.push(arr[i]);\n }\n\n if (tmp.length) {\n if (fillWith) {\n for (i = tmp.length; i < linecount; i++) {\n tmp.push(fillWith);\n }\n }\n\n res.push(tmp);\n }\n\n return res;\n}\n\nexports.batch = batch;\n\nfunction capitalize(str) {\n str = normalize(str, '');\n const ret = str.toLowerCase();\n return r.copySafeness(str, ret.charAt(0).toUpperCase() + ret.slice(1));\n}\n\nexports.capitalize = capitalize;\n\nfunction center(str, width) {\n str = normalize(str, '');\n width = width || 80;\n\n if (str.length >= width) {\n return str;\n }\n\n const spaces = width - str.length;\n const pre = lib.repeat(' ', (spaces / 2) - (spaces % 2));\n const post = lib.repeat(' ', spaces / 2);\n return r.copySafeness(str, pre + str + post);\n}\n\nexports.center = center;\n\nfunction default_(val, def, bool) {\n if (bool) {\n return val || def;\n } else {\n return (val !== undefined) ? val : def;\n }\n}\n\n// TODO: it is confusing to export something called 'default'\nexports['default'] = default_; // eslint-disable-line dot-notation\n\nfunction dictsort(val, caseSensitive, by) {\n if (!lib.isObject(val)) {\n throw new lib.TemplateError('dictsort filter: val must be an object');\n }\n\n let array = [];\n // deliberately include properties from the object's prototype\n for (let k in val) { // eslint-disable-line guard-for-in, no-restricted-syntax\n array.push([k, val[k]]);\n }\n\n let si;\n if (by === undefined || by === 'key') {\n si = 0;\n } else if (by === 'value') {\n si = 1;\n } else {\n throw new lib.TemplateError(\n 'dictsort filter: You can only sort by either key or value');\n }\n\n array.sort((t1, t2) => {\n var a = t1[si];\n var b = t2[si];\n\n if (!caseSensitive) {\n if (lib.isString(a)) {\n a = a.toUpperCase();\n }\n if (lib.isString(b)) {\n b = b.toUpperCase();\n }\n }\n\n return a > b ? 1 : (a === b ? 0 : -1); // eslint-disable-line no-nested-ternary\n });\n\n return array;\n}\n\nexports.dictsort = dictsort;\n\nfunction dump(obj, spaces) {\n return JSON.stringify(obj, null, spaces);\n}\n\nexports.dump = dump;\n\nfunction escape(str) {\n if (str instanceof r.SafeString) {\n return str;\n }\n str = (str === null || str === undefined) ? '' : str;\n return r.markSafe(lib.escape(str.toString()));\n}\n\nexports.escape = escape;\n\nfunction safe(str) {\n if (str instanceof r.SafeString) {\n return str;\n }\n str = (str === null || str === undefined) ? '' : str;\n return r.markSafe(str.toString());\n}\n\nexports.safe = safe;\n\nfunction first(arr) {\n return arr[0];\n}\n\nexports.first = first;\n\nfunction forceescape(str) {\n str = (str === null || str === undefined) ? '' : str;\n return r.markSafe(lib.escape(str.toString()));\n}\n\nexports.forceescape = forceescape;\n\nfunction groupby(arr, attr) {\n return lib.groupBy(arr, attr, this.env.opts.throwOnUndefined);\n}\n\nexports.groupby = groupby;\n\nfunction indent(str, width, indentfirst) {\n str = normalize(str, '');\n\n if (str === '') {\n return '';\n }\n\n width = width || 4;\n // let res = '';\n const lines = str.split('\\n');\n const sp = lib.repeat(' ', width);\n\n const res = lines.map((l, i) => {\n return (i === 0 && !indentfirst) ? l : `${sp}${l}`;\n }).join('\\n');\n\n return r.copySafeness(str, res);\n}\n\nexports.indent = indent;\n\nfunction join(arr, del, attr) {\n del = del || '';\n\n if (attr) {\n arr = lib.map(arr, (v) => v[attr]);\n }\n\n return arr.join(del);\n}\n\nexports.join = join;\n\nfunction last(arr) {\n return arr[arr.length - 1];\n}\n\nexports.last = last;\n\nfunction lengthFilter(val) {\n var value = normalize(val, '');\n\n if (value !== undefined) {\n if (\n (typeof Map === 'function' && value instanceof Map) ||\n (typeof Set === 'function' && value instanceof Set)\n ) {\n // ECMAScript 2015 Maps and Sets\n return value.size;\n }\n if (lib.isObject(value) && !(value instanceof r.SafeString)) {\n // Objects (besides SafeStrings), non-primative Arrays\n return lib.keys(value).length;\n }\n return value.length;\n }\n return 0;\n}\n\nexports.length = lengthFilter;\n\nfunction list(val) {\n if (lib.isString(val)) {\n return val.split('');\n } else if (lib.isObject(val)) {\n return lib._entries(val || {}).map(([key, value]) => ({key, value}));\n } else if (lib.isArray(val)) {\n return val;\n } else {\n throw new lib.TemplateError('list filter: type not iterable');\n }\n}\n\nexports.list = list;\n\nfunction lower(str) {\n str = normalize(str, '');\n return str.toLowerCase();\n}\n\nexports.lower = lower;\n\nfunction nl2br(str) {\n if (str === null || str === undefined) {\n return '';\n }\n return r.copySafeness(str, str.replace(/\\r\\n|\\n/g, '<br />\\n'));\n}\n\nexports.nl2br = nl2br;\n\nfunction random(arr) {\n return arr[Math.floor(Math.random() * arr.length)];\n}\n\nexports.random = random;\n\n/**\n * Construct select or reject filter\n *\n * @param {boolean} expectedTestResult\n * @returns {function(array, string, *): array}\n */\nfunction getSelectOrReject(expectedTestResult) {\n function filter(arr, testName = 'truthy', secondArg) {\n const context = this;\n const test = context.env.getTest(testName);\n\n return lib.toArray(arr).filter(function examineTestResult(item) {\n return test.call(context, item, secondArg) === expectedTestResult;\n });\n }\n\n return filter;\n}\n\nexports.reject = getSelectOrReject(false);\n\nfunction rejectattr(arr, attr) {\n return arr.filter((item) => !item[attr]);\n}\n\nexports.rejectattr = rejectattr;\n\nexports.select = getSelectOrReject(true);\n\nfunction selectattr(arr, attr) {\n return arr.filter((item) => !!item[attr]);\n}\n\nexports.selectattr = selectattr;\n\nfunction replace(str, old, new_, maxCount) {\n var originalStr = str;\n\n if (old instanceof RegExp) {\n return str.replace(old, new_);\n }\n\n if (typeof maxCount === 'undefined') {\n maxCount = -1;\n }\n\n let res = ''; // Output\n\n // Cast Numbers in the search term to string\n if (typeof old === 'number') {\n old = '' + old;\n } else if (typeof old !== 'string') {\n // If it is something other than number or string,\n // return the original string\n return str;\n }\n\n // Cast numbers in the replacement to string\n if (typeof str === 'number') {\n str = '' + str;\n }\n\n // If by now, we don't have a string, throw it back\n if (typeof str !== 'string' && !(str instanceof r.SafeString)) {\n return str;\n }\n\n // ShortCircuits\n if (old === '') {\n // Mimic the python behaviour: empty string is replaced\n // by replacement e.g. \"abc\"|replace(\"\", \".\") -> .a.b.c.\n res = new_ + str.split('').join(new_) + new_;\n return r.copySafeness(str, res);\n }\n\n let nextIndex = str.indexOf(old);\n // if # of replacements to perform is 0, or the string to does\n // not contain the old value, return the string\n if (maxCount === 0 || nextIndex === -1) {\n return str;\n }\n\n let pos = 0;\n let count = 0; // # of replacements made\n\n while (nextIndex > -1 && (maxCount === -1 || count < maxCount)) {\n // Grab the next chunk of src string and add it with the\n // replacement, to the result\n res += str.substring(pos, nextIndex) + new_;\n // Increment our pointer in the src string\n pos = nextIndex + old.length;\n count++;\n // See if there are any more replacements to be made\n nextIndex = str.indexOf(old, pos);\n }\n\n // We've either reached the end, or done the max # of\n // replacements, tack on any remaining string\n if (pos < str.length) {\n res += str.substring(pos);\n }\n\n return r.copySafeness(originalStr, res);\n}\n\nexports.replace = replace;\n\nfunction reverse(val) {\n var arr;\n if (lib.isString(val)) {\n arr = list(val);\n } else {\n // Copy it\n arr = lib.map(val, v => v);\n }\n\n arr.reverse();\n\n if (lib.isString(val)) {\n return r.copySafeness(val, arr.join(''));\n }\n return arr;\n}\n\nexports.reverse = reverse;\n\nfunction round(val, precision, method) {\n precision = precision || 0;\n const factor = Math.pow(10, precision);\n let rounder;\n\n if (method === 'ceil') {\n rounder = Math.ceil;\n } else if (method === 'floor') {\n rounder = Math.floor;\n } else {\n rounder = Math.round;\n }\n\n return rounder(val * factor) / factor;\n}\n\nexports.round = round;\n\nfunction slice(arr, slices, fillWith) {\n const sliceLength = Math.floor(arr.length / slices);\n const extra = arr.length % slices;\n const res = [];\n let offset = 0;\n\n for (let i = 0; i < slices; i++) {\n const start = offset + (i * sliceLength);\n if (i < extra) {\n offset++;\n }\n const end = offset + ((i + 1) * sliceLength);\n\n const currSlice = arr.slice(start, end);\n if (fillWith && i >= extra) {\n currSlice.push(fillWith);\n }\n res.push(currSlice);\n }\n\n return res;\n}\n\nexports.slice = slice;\n\nfunction sum(arr, attr, start = 0) {\n if (attr) {\n arr = lib.map(arr, (v) => v[attr]);\n }\n\n return start + arr.reduce((a, b) => a + b, 0);\n}\n\nexports.sum = sum;\n\nexports.sort = r.makeMacro(\n ['value', 'reverse', 'case_sensitive', 'attribute'], [],\n function sortFilter(arr, reversed, caseSens, attr) {\n // Copy it\n let array = lib.map(arr, v => v);\n let getAttribute = lib.getAttrGetter(attr);\n\n array.sort((a, b) => {\n let x = (attr) ? getAttribute(a) : a;\n let y = (attr) ? getAttribute(b) : b;\n\n if (\n this.env.opts.throwOnUndefined &&\n attr && (x === undefined || y === undefined)\n ) {\n throw new TypeError(`sort: attribute \"${attr}\" resolved to undefined`);\n }\n\n if (!caseSens && lib.isString(x) && lib.isString(y)) {\n x = x.toLowerCase();\n y = y.toLowerCase();\n }\n\n if (x < y) {\n return reversed ? 1 : -1;\n } else if (x > y) {\n return reversed ? -1 : 1;\n } else {\n return 0;\n }\n });\n\n return array;\n });\n\nfunction string(obj) {\n return r.copySafeness(obj, obj);\n}\n\nexports.string = string;\n\nfunction striptags(input, preserveLinebreaks) {\n input = normalize(input, '');\n let tags = /<\\/?([a-z][a-z0-9]*)\\b[^>]*>|<!--[\\s\\S]*?-->/gi;\n let trimmedInput = trim(input.replace(tags, ''));\n let res = '';\n if (preserveLinebreaks) {\n res = trimmedInput\n .replace(/^ +| +$/gm, '') // remove leading and trailing spaces\n .replace(/ +/g, ' ') // squash adjacent spaces\n .replace(/(\\r\\n)/g, '\\n') // normalize linebreaks (CRLF -> LF)\n .replace(/\\n\\n\\n+/g, '\\n\\n'); // squash abnormal adjacent linebreaks\n } else {\n res = trimmedInput.replace(/\\s+/gi, ' ');\n }\n return r.copySafeness(input, res);\n}\n\nexports.striptags = striptags;\n\nfunction title(str) {\n str = normalize(str, '');\n let words = str.split(' ').map(word => capitalize(word));\n return r.copySafeness(str, words.join(' '));\n}\n\nexports.title = title;\n\nfunction trim(str) {\n return r.copySafeness(str, str.replace(/^\\s*|\\s*$/g, ''));\n}\n\nexports.trim = trim;\n\nfunction truncate(input, length, killwords, end) {\n var orig = input;\n input = normalize(input, '');\n length = length || 255;\n\n if (input.length <= length) {\n return input;\n }\n\n if (killwords) {\n input = input.substring(0, length);\n } else {\n let idx = input.lastIndexOf(' ', length);\n if (idx === -1) {\n idx = length;\n }\n\n input = input.substring(0, idx);\n }\n\n input += (end !== undefined && end !== null) ? end : '...';\n return r.copySafeness(orig, input);\n}\n\nexports.truncate = truncate;\n\nfunction upper(str) {\n str = normalize(str, '');\n return str.toUpperCase();\n}\n\nexports.upper = upper;\n\nfunction urlencode(obj) {\n var enc = encodeURIComponent;\n if (lib.isString(obj)) {\n return enc(obj);\n } else {\n let keyvals = (lib.isArray(obj)) ? obj : lib._entries(obj);\n return keyvals.map(([k, v]) => `${enc(k)}=${enc(v)}`).join('&');\n }\n}\n\nexports.urlencode = urlencode;\n\n// For the jinja regexp, see\n// https://github.com/mitsuhiko/jinja2/blob/f15b814dcba6aa12bc74d1f7d0c881d55f7126be/jinja2/utils.py#L20-L23\nconst puncRe = /^(?:\\(|<|<)?(.*?)(?:\\.|,|\\)|\\n|>)?$/;\n// from http://blog.gerv.net/2011/05/html5_email_address_regexp/\nconst emailRe = /^[\\w.!#$%&'*+\\-\\/=?\\^`{|}~]+@[a-z\\d\\-]+(\\.[a-z\\d\\-]+)+$/i;\nconst httpHttpsRe = /^https?:\\/\\/.*$/;\nconst wwwRe = /^www\\./;\nconst tldRe = /\\.(?:org|net|com)(?:\\:|\\/|$)/;\n\nfunction urlize(str, length, nofollow) {\n if (isNaN(length)) {\n length = Infinity;\n }\n\n const noFollowAttr = (nofollow === true ? ' rel=\"nofollow\"' : '');\n\n const words = str.split(/(\\s+)/).filter((word) => {\n // If the word has no length, bail. This can happen for str with\n // trailing whitespace.\n return word && word.length;\n }).map((word) => {\n var matches = word.match(puncRe);\n var possibleUrl = (matches) ? matches[1] : word;\n var shortUrl = possibleUrl.substr(0, length);\n\n // url that starts with http or https\n if (httpHttpsRe.test(possibleUrl)) {\n return `<a href=\"${possibleUrl}\"${noFollowAttr}>${shortUrl}</a>`;\n }\n\n // url that starts with www.\n if (wwwRe.test(possibleUrl)) {\n return `<a href=\"http://${possibleUrl}\"${noFollowAttr}>${shortUrl}</a>`;\n }\n\n // an email address of the form username@domain.tld\n if (emailRe.test(possibleUrl)) {\n return `<a href=\"mailto:${possibleUrl}\">${possibleUrl}</a>`;\n }\n\n // url that ends in .com, .org or .net that is not an email address\n if (tldRe.test(possibleUrl)) {\n return `<a href=\"http://${possibleUrl}\"${noFollowAttr}>${shortUrl}</a>`;\n }\n\n return word;\n });\n\n return words.join('');\n}\n\nexports.urlize = urlize;\n\nfunction wordcount(str) {\n str = normalize(str, '');\n const words = (str) ? str.match(/\\w+/g) : null;\n return (words) ? words.length : null;\n}\n\nexports.wordcount = wordcount;\n\nfunction float(val, def) {\n var res = parseFloat(val);\n return (isNaN(res)) ? def : res;\n}\n\nexports.float = float;\n\nconst intFilter = r.makeMacro(\n ['value', 'default', 'base'],\n [],\n function doInt(value, defaultValue, base = 10) {\n var res = parseInt(value, base);\n return (isNaN(res)) ? defaultValue : res;\n }\n);\n\nexports.int = intFilter;\n\n// Aliases\nexports.d = exports.default;\nexports.e = exports.escape;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/filters.js","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/node_modules/events/events.js\n// module id = 13\n// module chunks = 0","'use strict';\n\nvar SafeString = require('./runtime').SafeString;\n\n/**\n * Returns `true` if the object is a function, otherwise `false`.\n * @param { any } value\n * @returns { boolean }\n */\nfunction callable(value) {\n return typeof value === 'function';\n}\n\nexports.callable = callable;\n\n/**\n * Returns `true` if the object is strictly not `undefined`.\n * @param { any } value\n * @returns { boolean }\n */\nfunction defined(value) {\n return value !== undefined;\n}\n\nexports.defined = defined;\n\n/**\n * Returns `true` if the operand (one) is divisble by the test's argument\n * (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction divisibleby(one, two) {\n return (one % two) === 0;\n}\n\nexports.divisibleby = divisibleby;\n\n/**\n * Returns true if the string has been escaped (i.e., is a SafeString).\n * @param { any } value\n * @returns { boolean }\n */\nfunction escaped(value) {\n return value instanceof SafeString;\n}\n\nexports.escaped = escaped;\n\n/**\n * Returns `true` if the arguments are strictly equal.\n * @param { any } one\n * @param { any } two\n */\nfunction equalto(one, two) {\n return one === two;\n}\n\nexports.equalto = equalto;\n\n// Aliases\nexports.eq = exports.equalto;\nexports.sameas = exports.equalto;\n\n/**\n * Returns `true` if the value is evenly divisible by 2.\n * @param { number } value\n * @returns { boolean }\n */\nfunction even(value) {\n return value % 2 === 0;\n}\n\nexports.even = even;\n\n/**\n * Returns `true` if the value is falsy - if I recall correctly, '', 0, false,\n * undefined, NaN or null. I don't know if we should stick to the default JS\n * behavior or attempt to replicate what Python believes should be falsy (i.e.,\n * empty arrays, empty dicts, not 0...).\n * @param { any } value\n * @returns { boolean }\n */\nfunction falsy(value) {\n return !value;\n}\n\nexports.falsy = falsy;\n\n/**\n * Returns `true` if the operand (one) is greater or equal to the test's\n * argument (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction ge(one, two) {\n return one >= two;\n}\n\nexports.ge = ge;\n\n/**\n * Returns `true` if the operand (one) is greater than the test's argument\n * (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction greaterthan(one, two) {\n return one > two;\n}\n\nexports.greaterthan = greaterthan;\n\n// alias\nexports.gt = exports.greaterthan;\n\n/**\n * Returns `true` if the operand (one) is less than or equal to the test's\n * argument (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction le(one, two) {\n return one <= two;\n}\n\nexports.le = le;\n\n/**\n * Returns `true` if the operand (one) is less than the test's passed argument\n * (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction lessthan(one, two) {\n return one < two;\n}\n\nexports.lessthan = lessthan;\n\n// alias\nexports.lt = exports.lessthan;\n\n/**\n * Returns `true` if the string is lowercased.\n * @param { string } value\n * @returns { boolean }\n */\nfunction lower(value) {\n return value.toLowerCase() === value;\n}\n\nexports.lower = lower;\n\n/**\n * Returns `true` if the operand (one) is less than or equal to the test's\n * argument (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction ne(one, two) {\n return one !== two;\n}\n\nexports.ne = ne;\n\n/**\n * Returns true if the value is strictly equal to `null`.\n * @param { any }\n * @returns { boolean }\n */\nfunction nullTest(value) {\n return value === null;\n}\n\nexports.null = nullTest;\n\n/**\n * Returns true if value is a number.\n * @param { any }\n * @returns { boolean }\n */\nfunction number(value) {\n return typeof value === 'number';\n}\n\nexports.number = number;\n\n/**\n * Returns `true` if the value is *not* evenly divisible by 2.\n * @param { number } value\n * @returns { boolean }\n */\nfunction odd(value) {\n return value % 2 === 1;\n}\n\nexports.odd = odd;\n\n/**\n * Returns `true` if the value is a string, `false` if not.\n * @param { any } value\n * @returns { boolean }\n */\nfunction string(value) {\n return typeof value === 'string';\n}\n\nexports.string = string;\n\n/**\n * Returns `true` if the value is not in the list of things considered falsy:\n * '', null, undefined, 0, NaN and false.\n * @param { any } value\n * @returns { boolean }\n */\nfunction truthy(value) {\n return !!value;\n}\n\nexports.truthy = truthy;\n\n/**\n * Returns `true` if the value is undefined.\n * @param { any } value\n * @returns { boolean }\n */\nfunction undefinedTest(value) {\n return value === undefined;\n}\n\nexports.undefined = undefinedTest;\n\n/**\n * Returns `true` if the string is uppercased.\n * @param { string } value\n * @returns { boolean }\n */\nfunction upper(value) {\n return value.toUpperCase() === value;\n}\n\nexports.upper = upper;\n\n/**\n * If ES6 features are available, returns `true` if the value implements the\n * `Symbol.iterator` method. If not, it's a string or Array.\n *\n * Could potentially cause issues if a browser exists that has Set and Map but\n * not Symbol.\n *\n * @param { any } value\n * @returns { boolean }\n */\nfunction iterable(value) {\n if (typeof Symbol !== 'undefined') {\n return !!value[Symbol.iterator];\n } else {\n return Array.isArray(value) || typeof value === 'string';\n }\n}\n\nexports.iterable = iterable;\n\n/**\n * If ES6 features are available, returns `true` if the value is an object hash\n * or an ES6 Map. Otherwise just return if it's an object hash.\n * @param { any } value\n * @returns { boolean }\n */\nfunction mapping(value) {\n // only maps and object hashes\n var bool = value !== null\n && value !== undefined\n && typeof value === 'object'\n && !Array.isArray(value);\n if (Set) {\n return bool && !(value instanceof Set);\n } else {\n return bool;\n }\n}\n\nexports.mapping = mapping;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/tests.js","'use strict';\n\nfunction cycler(items) {\n var index = -1;\n\n return {\n current: null,\n reset() {\n index = -1;\n this.current = null;\n },\n\n next() {\n index++;\n if (index >= items.length) {\n index = 0;\n }\n\n this.current = items[index];\n return this.current;\n },\n };\n}\n\nfunction joiner(sep) {\n sep = sep || ',';\n let first = true;\n\n return () => {\n const val = first ? '' : sep;\n first = false;\n return val;\n };\n}\n\n// Making this a function instead so it returns a new object\n// each time it's called. That way, if something like an environment\n// uses it, they will each have their own copy.\nfunction globals() {\n return {\n range(start, stop, step) {\n if (typeof stop === 'undefined') {\n stop = start;\n start = 0;\n step = 1;\n } else if (!step) {\n step = 1;\n }\n\n const arr = [];\n if (step > 0) {\n for (let i = start; i < stop; i += step) {\n arr.push(i);\n }\n } else {\n for (let i = start; i > stop; i += step) { // eslint-disable-line for-direction\n arr.push(i);\n }\n }\n return arr;\n },\n\n cycler() {\n return cycler(Array.prototype.slice.call(arguments));\n },\n\n joiner(sep) {\n return joiner(sep);\n }\n };\n}\n\nmodule.exports = globals;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/globals.js","const path = require('path');\n\nmodule.exports = function express(env, app) {\n function NunjucksView(name, opts) {\n this.name = name;\n this.path = name;\n this.defaultEngine = opts.defaultEngine;\n this.ext = path.extname(name);\n if (!this.ext && !this.defaultEngine) {\n throw new Error('No default engine was specified and no extension was provided.');\n }\n if (!this.ext) {\n this.name += (this.ext = (this.defaultEngine[0] !== '.' ? '.' : '') + this.defaultEngine);\n }\n }\n\n NunjucksView.prototype.render = function render(opts, cb) {\n env.render(this.name, opts, cb);\n };\n\n app.set('view', NunjucksView);\n app.set('nunjucksEnv', env);\n return env;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/express-app.js","function installCompat() {\n 'use strict';\n\n /* eslint-disable camelcase */\n\n // This must be called like `nunjucks.installCompat` so that `this`\n // references the nunjucks instance\n var runtime = this.runtime;\n var lib = this.lib;\n // Handle slim case where these 'modules' are excluded from the built source\n var Compiler = this.compiler.Compiler;\n var Parser = this.parser.Parser;\n var nodes = this.nodes;\n var lexer = this.lexer;\n\n var orig_contextOrFrameLookup = runtime.contextOrFrameLookup;\n var orig_memberLookup = runtime.memberLookup;\n var orig_Compiler_assertType;\n var orig_Parser_parseAggregate;\n if (Compiler) {\n orig_Compiler_assertType = Compiler.prototype.assertType;\n }\n if (Parser) {\n orig_Parser_parseAggregate = Parser.prototype.parseAggregate;\n }\n\n function uninstall() {\n runtime.contextOrFrameLookup = orig_contextOrFrameLookup;\n runtime.memberLookup = orig_memberLookup;\n if (Compiler) {\n Compiler.prototype.assertType = orig_Compiler_assertType;\n }\n if (Parser) {\n Parser.prototype.parseAggregate = orig_Parser_parseAggregate;\n }\n }\n\n runtime.contextOrFrameLookup = function contextOrFrameLookup(context, frame, key) {\n var val = orig_contextOrFrameLookup.apply(this, arguments);\n if (val !== undefined) {\n return val;\n }\n switch (key) {\n case 'True':\n return true;\n case 'False':\n return false;\n case 'None':\n return null;\n default:\n return undefined;\n }\n };\n\n function getTokensState(tokens) {\n return {\n index: tokens.index,\n lineno: tokens.lineno,\n colno: tokens.colno\n };\n }\n\n if (process.env.BUILD_TYPE !== 'SLIM' && nodes && Compiler && Parser) { // i.e., not slim mode\n const Slice = nodes.Node.extend('Slice', {\n fields: ['start', 'stop', 'step'],\n init(lineno, colno, start, stop, step) {\n start = start || new nodes.Literal(lineno, colno, null);\n stop = stop || new nodes.Literal(lineno, colno, null);\n step = step || new nodes.Literal(lineno, colno, 1);\n this.parent(lineno, colno, start, stop, step);\n }\n });\n\n Compiler.prototype.assertType = function assertType(node) {\n if (node instanceof Slice) {\n return;\n }\n orig_Compiler_assertType.apply(this, arguments);\n };\n Compiler.prototype.compileSlice = function compileSlice(node, frame) {\n this._emit('(');\n this._compileExpression(node.start, frame);\n this._emit('),(');\n this._compileExpression(node.stop, frame);\n this._emit('),(');\n this._compileExpression(node.step, frame);\n this._emit(')');\n };\n\n Parser.prototype.parseAggregate = function parseAggregate() {\n var origState = getTokensState(this.tokens);\n // Set back one accounting for opening bracket/parens\n origState.colno--;\n origState.index--;\n try {\n return orig_Parser_parseAggregate.apply(this);\n } catch (e) {\n const errState = getTokensState(this.tokens);\n const rethrow = () => {\n lib._assign(this.tokens, errState);\n return e;\n };\n\n // Reset to state before original parseAggregate called\n lib._assign(this.tokens, origState);\n this.peeked = false;\n\n const tok = this.peekToken();\n if (tok.type !== lexer.TOKEN_LEFT_BRACKET) {\n throw rethrow();\n } else {\n this.nextToken();\n }\n\n const node = new Slice(tok.lineno, tok.colno);\n\n // If we don't encounter a colon while parsing, this is not a slice,\n // so re-raise the original exception.\n let isSlice = false;\n\n for (let i = 0; i <= node.fields.length; i++) {\n if (this.skip(lexer.TOKEN_RIGHT_BRACKET)) {\n break;\n }\n if (i === node.fields.length) {\n if (isSlice) {\n this.fail('parseSlice: too many slice components', tok.lineno, tok.colno);\n } else {\n break;\n }\n }\n if (this.skip(lexer.TOKEN_COLON)) {\n isSlice = true;\n } else {\n const field = node.fields[i];\n node[field] = this.parseExpression();\n isSlice = this.skip(lexer.TOKEN_COLON) || isSlice;\n }\n }\n if (!isSlice) {\n throw rethrow();\n }\n return new nodes.Array(tok.lineno, tok.colno, [node]);\n }\n };\n }\n\n function sliceLookup(obj, start, stop, step) {\n obj = obj || [];\n if (start === null) {\n start = (step < 0) ? (obj.length - 1) : 0;\n }\n if (stop === null) {\n stop = (step < 0) ? -1 : obj.length;\n } else if (stop < 0) {\n stop += obj.length;\n }\n\n if (start < 0) {\n start += obj.length;\n }\n\n const results = [];\n\n for (let i = start; ; i += step) {\n if (i < 0 || i > obj.length) {\n break;\n }\n if (step > 0 && i >= stop) {\n break;\n }\n if (step < 0 && i <= stop) {\n break;\n }\n results.push(runtime.memberLookup(obj, i));\n }\n return results;\n }\n\n function hasOwnProp(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n }\n\n const ARRAY_MEMBERS = {\n pop(index) {\n if (index === undefined) {\n return this.pop();\n }\n if (index >= this.length || index < 0) {\n throw new Error('KeyError');\n }\n return this.splice(index, 1);\n },\n append(element) {\n return this.push(element);\n },\n remove(element) {\n for (let i = 0; i < this.length; i++) {\n if (this[i] === element) {\n return this.splice(i, 1);\n }\n }\n throw new Error('ValueError');\n },\n count(element) {\n var count = 0;\n for (let i = 0; i < this.length; i++) {\n if (this[i] === element) {\n count++;\n }\n }\n return count;\n },\n index(element) {\n var i;\n if ((i = this.indexOf(element)) === -1) {\n throw new Error('ValueError');\n }\n return i;\n },\n find(element) {\n return this.indexOf(element);\n },\n insert(index, elem) {\n return this.splice(index, 0, elem);\n }\n };\n const OBJECT_MEMBERS = {\n items() {\n return lib._entries(this);\n },\n values() {\n return lib._values(this);\n },\n keys() {\n return lib.keys(this);\n },\n get(key, def) {\n var output = this[key];\n if (output === undefined) {\n output = def;\n }\n return output;\n },\n has_key(key) {\n return hasOwnProp(this, key);\n },\n pop(key, def) {\n var output = this[key];\n if (output === undefined && def !== undefined) {\n output = def;\n } else if (output === undefined) {\n throw new Error('KeyError');\n } else {\n delete this[key];\n }\n return output;\n },\n popitem() {\n const keys = lib.keys(this);\n if (!keys.length) {\n throw new Error('KeyError');\n }\n const k = keys[0];\n const val = this[k];\n delete this[k];\n return [k, val];\n },\n setdefault(key, def = null) {\n if (!(key in this)) {\n this[key] = def;\n }\n return this[key];\n },\n update(kwargs) {\n lib._assign(this, kwargs);\n return null; // Always returns None\n }\n };\n OBJECT_MEMBERS.iteritems = OBJECT_MEMBERS.items;\n OBJECT_MEMBERS.itervalues = OBJECT_MEMBERS.values;\n OBJECT_MEMBERS.iterkeys = OBJECT_MEMBERS.keys;\n\n runtime.memberLookup = function memberLookup(obj, val, autoescape) {\n if (arguments.length === 4) {\n return sliceLookup.apply(this, arguments);\n }\n obj = obj || {};\n\n // If the object is an object, return any of the methods that Python would\n // otherwise provide.\n if (lib.isArray(obj) && hasOwnProp(ARRAY_MEMBERS, val)) {\n return ARRAY_MEMBERS[val].bind(obj);\n }\n if (lib.isObject(obj) && hasOwnProp(OBJECT_MEMBERS, val)) {\n return OBJECT_MEMBERS[val].bind(obj);\n }\n\n return orig_memberLookup.apply(this, arguments);\n };\n\n return uninstall;\n}\n\nmodule.exports = installCompat;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/jinja-compat.js"],"sourceRoot":""}
\ No newline at end of file diff --git a/node_modules/nunjucks/browser/nunjucks-slim.min.js b/node_modules/nunjucks/browser/nunjucks-slim.min.js new file mode 100644 index 0000000..389c698 --- /dev/null +++ b/node_modules/nunjucks/browser/nunjucks-slim.min.js @@ -0,0 +1,3 @@ +/*! Browser bundle of nunjucks 3.2.4 (slim, only works with precompiled templates) */ +!function(t,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.nunjucks=n():t.nunjucks=n()}("undefined"!=typeof self?self:this,function(){return function(t){var n={};function r(i){if(n[i])return n[i].exports;var e=n[i]={i:i,l:!1,exports:{}};return t[i].call(e.exports,e,e.exports,r),e.l=!0,e.exports}return r.m=t,r.c=n,r.d=function(t,n,i){r.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},r.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(n,"a",n),n},r.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},r.p="",r(r.s=6)}([function(t,n){},function(t,n,r){"use strict";var i=Array.prototype,e=Object.prototype,u={"&":"&",'"':""","'":"'","<":"<",">":">","\\":"\"},o=/[&"'<>\\]/g;function f(t,n){return e.hasOwnProperty.call(t,n)}function c(t){return u[t]}function s(t,n,r){var i,e,u;if(t instanceof Error&&(t=(e=t).name+": "+e.message),Object.setPrototypeOf?Object.setPrototypeOf(i=Error(t),s.prototype):Object.defineProperty(i=this,"message",{enumerable:!1,writable:!0,value:t}),Object.defineProperty(i,"name",{value:"Template render error"}),Error.captureStackTrace&&Error.captureStackTrace(i,this.constructor),e){var o=Object.getOwnPropertyDescriptor(e,"stack");(u=o&&(o.get||function(){return o.value}))||(u=function(){return e.stack})}else{var f=Error(t).stack;u=function(){return f}}return Object.defineProperty(i,"stack",{get:function(){return u.call(i)}}),Object.defineProperty(i,"cause",{value:e}),i.lineno=n,i.colno=r,i.firstUpdate=!0,i.Update=function(t){var n="("+(t||"unknown path")+")";return this.firstUpdate&&(this.lineno&&this.colno?n+=" [Line "+this.lineno+", Column "+this.colno+"]":this.lineno&&(n+=" [Line "+this.lineno+"]")),n+="\n ",this.firstUpdate&&(n+=" "),this.message=n+(this.message||""),this.firstUpdate=!1,this},i}function a(t){return"[object Function]"===e.toString.call(t)}function h(t){return"[object Array]"===e.toString.call(t)}function v(t){return"[object String]"===e.toString.call(t)}function l(t){return"[object Object]"===e.toString.call(t)}function d(t){var n,r=(n=t)?"string"==typeof n?n.split("."):[n]:[];return function(t){for(var n=t,i=0;i<r.length;i++){var e=r[i];if(!f(n,e))return;n=n[e]}return n}}function p(t){return Array.prototype.slice.call(t)}function y(t,n,r){return Array.prototype.indexOf.call(t||[],n,r)}function b(t){var n=[];for(var r in t)f(t,r)&&n.push(r);return n}(n=t.exports={}).hasOwnProp=f,n.t=function(t,r,i){if(i.Update||(i=new n.TemplateError(i)),i.Update(t),!r){var e=i;(i=Error(e.message)).name=e.name}return i},Object.setPrototypeOf?Object.setPrototypeOf(s.prototype,Error.prototype):s.prototype=Object.create(Error.prototype,{constructor:{value:s}}),n.TemplateError=s,n.escape=function(t){return t.replace(o,c)},n.isFunction=a,n.isArray=h,n.isString=v,n.isObject=l,n.getAttrGetter=d,n.groupBy=function(t,n,r){for(var i={},e=a(n)?n:d(n),u=0;u<t.length;u++){var o=t[u],f=e(o,u);if(void 0===f&&!0===r)throw new TypeError('groupby: attribute "'+n+'" resolved to undefined');(i[f]||(i[f]=[])).push(o)}return i},n.toArray=p,n.without=function(t){var n=[];if(!t)return n;for(var r=t.length,i=p(arguments).slice(1),e=-1;++e<r;)-1===y(i,t[e])&&n.push(t[e]);return n},n.repeat=function(t,n){for(var r="",i=0;i<n;i++)r+=t;return r},n.each=function(t,n,r){if(null!=t)if(i.forEach&&t.forEach===i.forEach)t.forEach(n,r);else if(t.length===+t.length)for(var e=0,u=t.length;e<u;e++)n.call(r,t[e],e,t)},n.map=function(t,n){var r=[];if(null==t)return r;if(i.map&&t.map===i.map)return t.map(n);for(var e=0;e<t.length;e++)r[r.length]=n(t[e],e);return t.length===+t.length&&(r.length=t.length),r},n.asyncIter=function(t,n,r){var i=-1;!function e(){++i<t.length?n(t[i],i,e,r):r()}()},n.asyncFor=function(t,n,r){var i=b(t||{}),e=i.length,u=-1;!function o(){var f=i[++u];u<e?n(f,t[f],u,e,o):r()}()},n.indexOf=y,n.keys=b,n.r=function(t){return b(t).map(function(n){return[n,t[n]]})},n.u=function(t){return b(t).map(function(n){return t[n]})},n.f=n.extend=function(t,n){return t=t||{},b(n).forEach(function(r){t[r]=n[r]}),t},n.inOperator=function(t,n){if(h(n)||v(n))return-1!==n.indexOf(t);if(l(n))return t in n;throw Error('Cannot use "in" operator to search for "'+t+'" in unexpected types.')}},function(t,n,r){"use strict";var i=r(1),e=Array.from,u="function"==typeof Symbol&&Symbol.iterator&&"function"==typeof e,o=function(){function t(t,n){this.variables=Object.create(null),this.parent=t,this.topLevel=!1,this.isolateWrites=n}var n=t.prototype;return n.set=function(t,n,r){var i=t.split("."),e=this.variables,u=this;if(r&&(u=this.resolve(i[0],!0)))u.set(t,n);else{for(var o=0;o<i.length-1;o++){var f=i[o];e[f]||(e[f]={}),e=e[f]}e[i[i.length-1]]=n}},n.get=function(t){var n=this.variables[t];return void 0!==n?n:null},n.lookup=function(t){var n=this.parent,r=this.variables[t];return void 0!==r?r:n&&n.lookup(t)},n.resolve=function(t,n){var r=n&&this.isolateWrites?void 0:this.parent;return void 0!==this.variables[t]?this:r&&r.resolve(t)},n.push=function(n){return new t(this,n)},n.pop=function(){return this.parent},t}();function f(t){return t&&Object.prototype.hasOwnProperty.call(t,"__keywords")}function c(t){var n=t.length;return 0===n?0:f(t[n-1])?n-1:n}function s(t){if("string"!=typeof t)return t;this.val=t,this.length=t.length}s.prototype=Object.create(String.prototype,{length:{writable:!0,configurable:!0,value:0}}),s.prototype.valueOf=function(){return this.val},s.prototype.toString=function(){return this.val},t.exports={Frame:o,makeMacro:function(t,n,r){return function(){for(var i=arguments.length,e=Array(i),u=0;u<i;u++)e[u]=arguments[u];var o,s=c(e),a=function(t){var n=t.length;if(n){var r=t[n-1];if(f(r))return r}return{}}(e);if(s>t.length)o=e.slice(0,t.length),e.slice(o.length,s).forEach(function(t,r){r<n.length&&(a[n[r]]=t)}),o.push(a);else if(s<t.length){o=e.slice(0,s);for(var h=s;h<t.length;h++){var v=t[h];o.push(a[v]),delete a[v]}o.push(a)}else o=e;return r.apply(this,o)}},makeKeywordArgs:function(t){return t.__keywords=!0,t},numArgs:c,suppressValue:function(t,n){return t=void 0!==t&&null!==t?t:"",!n||t instanceof s||(t=i.escape(t.toString())),t},ensureDefined:function(t,n,r){if(null===t||void 0===t)throw new i.TemplateError("attempted to output null or undefined value",n+1,r+1);return t},memberLookup:function(t,n){if(void 0!==t&&null!==t)return"function"==typeof t[n]?function(){for(var r=arguments.length,i=Array(r),e=0;e<r;e++)i[e]=arguments[e];return t[n].apply(t,i)}:t[n]},contextOrFrameLookup:function(t,n,r){var i=n.lookup(r);return void 0!==i?i:t.lookup(r)},callWrap:function(t,n,r,i){if(!t)throw Error("Unable to call `"+n+"`, which is undefined or falsey");if("function"!=typeof t)throw Error("Unable to call `"+n+"`, which is not a function");return t.apply(r,i)},handleError:function(t,n,r){return t.lineno?t:new i.TemplateError(t,n,r)},isArray:i.isArray,keys:i.keys,SafeString:s,copySafeness:function(t,n){return t instanceof s?new s(n):n.toString()},markSafe:function(t){var n=typeof t;return"string"===n?new s(t):"function"!==n?t:function(n){var r=t.apply(this,arguments);return"string"==typeof r?new s(r):r}},asyncEach:function(t,n,r,e){if(i.isArray(t)){var u=t.length;i.asyncIter(t,function(t,i,e){switch(n){case 1:r(t,i,u,e);break;case 2:r(t[0],t[1],i,u,e);break;case 3:r(t[0],t[1],t[2],i,u,e);break;default:t.push(i,u,e),r.apply(this,t)}},e)}else i.asyncFor(t,function(t,n,i,e,u){r(t,n,i,e,u)},e)},asyncAll:function(t,n,r,e){var u,o,f=0;function c(t,n){f++,o[t]=n,f===u&&e(null,o.join(""))}if(i.isArray(t))if(u=t.length,o=Array(u),0===u)e(null,"");else for(var s=0;s<t.length;s++){var a=t[s];switch(n){case 1:r(a,s,u,c);break;case 2:r(a[0],a[1],s,u,c);break;case 3:r(a[0],a[1],a[2],s,u,c);break;default:a.push(s,u,c),r.apply(this,a)}}else{var h=i.keys(t||{});if(u=h.length,o=Array(u),0===u)e(null,"");else for(var v=0;v<h.length;v++){var l=h[v];r(l,t[l],v,u,c)}}},inOperator:i.inOperator,fromIterator:function(t){return"object"!=typeof t||null===t||i.isArray(t)?t:u&&Symbol.iterator in t?e(t):t}}},function(t,n,r){"use strict";function i(t,n){return(i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,n){return t.__proto__=n,t})(t,n)}var e=function(t){var n,r;function e(n){var r;return(r=t.call(this)||this).precompiled=n||{},r}return r=t,(n=e).prototype=Object.create(r.prototype),n.prototype.constructor=n,i(n,r),e.prototype.getSource=function(t){return this.precompiled[t]?{src:{type:"code",obj:this.precompiled[t]},path:t}:null},e}(r(4));t.exports={PrecompiledLoader:e}},function(t,n,r){"use strict";function i(t,n){return(i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,n){return t.__proto__=n,t})(t,n)}var e=r(0),u=r(5).EmitterObj;t.exports=function(t){var n,r;function u(){return t.apply(this,arguments)||this}r=t,(n=u).prototype=Object.create(r.prototype),n.prototype.constructor=n,i(n,r);var o=u.prototype;return o.resolve=function(t,n){return e.resolve(e.dirname(t),n)},o.isRelative=function(t){return 0===t.indexOf("./")||0===t.indexOf("../")},u}(u)},function(t,n,r){"use strict";function i(t,n){for(var r=0;r<n.length;r++){var i=n[r];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,(e=i.key,void 0,"symbol"==typeof(u=function(t,n){if("object"!=typeof t||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var i=r.call(t,n||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===n?String:Number)(t)}(e,"string"))?u:u+""),i)}var e,u}function e(t,n,r){return n&&i(t.prototype,n),r&&i(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t}function u(t,n){t.prototype=Object.create(n.prototype),t.prototype.constructor=t,o(t,n)}function o(t,n){return(o=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,n){return t.__proto__=n,t})(t,n)}var f=r(13),c=r(1);function s(t,n,r){r=r||{},c.keys(r).forEach(function(n){var i,e;r[n]=(i=t.prototype[n],e=r[n],"function"!=typeof i||"function"!=typeof e?e:function(){var t=this.parent;this.parent=i;var n=e.apply(this,arguments);return this.parent=t,n})});var i=function(t){function r(){return t.apply(this,arguments)||this}return u(r,t),e(r,[{key:"typename",get:function(){return n}}]),r}(t);return c.f(i.prototype,r),i}var a=function(){function t(){this.init.apply(this,arguments)}return t.prototype.init=function(){},t.extend=function(t,n){return"object"==typeof t&&(n=t,t="anonymous"),s(this,t,n)},e(t,[{key:"typename",get:function(){return this.constructor.name}}]),t}(),h=function(t){function n(){var n,r;return(n=r=t.call(this)||this).init.apply(n,arguments),r}return u(n,t),n.prototype.init=function(){},n.extend=function(t,n){return"object"==typeof t&&(n=t,t="anonymous"),s(this,t,n)},e(n,[{key:"typename",get:function(){return this.constructor.name}}]),n}(f);t.exports={Obj:a,EmitterObj:h}},function(t,n,r){"use strict";var i,e=r(1),u=r(7),o=u.Environment,f=u.Template,c=r(4),s=r(3),a=r(0),h=r(0),v=r(0),l=r(0),d=r(2),p=r(0),y=r(17);function b(t,n){var r;return n=n||{},e.isObject(t)&&(n=t,t=null),s.FileSystemLoader?r=new s.FileSystemLoader(t,{watch:n.watch,noCache:n.noCache}):s.WebLoader&&(r=new s.WebLoader(t,{useCache:n.web&&n.web.useCache,async:n.web&&n.web.async})),i=new o(r,n),n&&n.express&&i.express(n.express),i}t.exports={Environment:o,Template:f,Loader:c,FileSystemLoader:s.FileSystemLoader,NodeResolveLoader:s.NodeResolveLoader,PrecompiledLoader:s.PrecompiledLoader,WebLoader:s.WebLoader,compiler:h,parser:v,lexer:l,runtime:d,lib:e,nodes:p,installJinjaCompat:y,configure:b,reset:function(){i=void 0},compile:function(t,n,r,e){return i||b(),new f(t,n,r,e)},render:function(t,n,r){return i||b(),i.render(t,n,r)},renderString:function(t,n,r){return i||b(),i.renderString(t,n,r)},precompile:a?a.precompile:void 0,precompileString:a?a.precompileString:void 0}},function(t,n,r){"use strict";function i(t,n){t.prototype=Object.create(n.prototype),t.prototype.constructor=t,e(t,n)}function e(t,n){return(e=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,n){return t.__proto__=n,t})(t,n)}var u=r(8),o=r(11),f=r(1),c=r(0),s=r(12),a=r(3),h=a.FileSystemLoader,v=a.WebLoader,l=a.PrecompiledLoader,d=r(14),p=r(15),y=r(5),b=y.Obj,w=y.EmitterObj,m=r(2),j=m.handleError,g=m.Frame,E=r(16);function O(t,n,r){u(function(){t(n,r)})}var k={type:"code",obj:{root:function(t,n,r,i,e){try{e(null,"")}catch(t){e(j(t,null,null))}}}},A=function(t){function n(){return t.apply(this,arguments)||this}i(n,t);var r=n.prototype;return r.init=function(t,n){var r=this;n=this.opts=n||{},this.opts.dev=!!n.dev,this.opts.autoescape=null==n.autoescape||n.autoescape,this.opts.throwOnUndefined=!!n.throwOnUndefined,this.opts.trimBlocks=!!n.trimBlocks,this.opts.lstripBlocks=!!n.lstripBlocks,this.loaders=[],t?this.loaders=f.isArray(t)?t:[t]:h?this.loaders=[new h("views")]:v&&(this.loaders=[new v("/views")]),"undefined"!=typeof window&&window.nunjucksPrecompiled&&this.loaders.unshift(new l(window.nunjucksPrecompiled)),this.a(),this.globals=p(),this.filters={},this.tests={},this.asyncFilters=[],this.extensions={},this.extensionsList=[],f.r(s).forEach(function(t){var n=t[0],i=t[1];return r.addFilter(n,i)}),f.r(d).forEach(function(t){var n=t[0],i=t[1];return r.addTest(n,i)})},r.a=function(){var t=this;this.loaders.forEach(function(n){n.cache={},"function"==typeof n.on&&(n.on("update",function(r,i){n.cache[r]=null,t.emit("update",r,i,n)}),n.on("load",function(r,i){t.emit("load",r,i,n)}))})},r.invalidateCache=function(){this.loaders.forEach(function(t){t.cache={}})},r.addExtension=function(t,n){return n.__name=t,this.extensions[t]=n,this.extensionsList.push(n),this},r.removeExtension=function(t){var n=this.getExtension(t);n&&(this.extensionsList=f.without(this.extensionsList,n),delete this.extensions[t])},r.getExtension=function(t){return this.extensions[t]},r.hasExtension=function(t){return!!this.extensions[t]},r.addGlobal=function(t,n){return this.globals[t]=n,this},r.getGlobal=function(t){if(void 0===this.globals[t])throw Error("global not found: "+t);return this.globals[t]},r.addFilter=function(t,n,r){var i=n;return r&&this.asyncFilters.push(t),this.filters[t]=i,this},r.getFilter=function(t){if(!this.filters[t])throw Error("filter not found: "+t);return this.filters[t]},r.addTest=function(t,n){return this.tests[t]=n,this},r.getTest=function(t){if(!this.tests[t])throw Error("test not found: "+t);return this.tests[t]},r.resolveTemplate=function(t,n,r){return!(!t.isRelative||!n)&&t.isRelative(r)&&t.resolve?t.resolve(n,r):r},r.getTemplate=function(t,n,r,i,e){var u,o=this,c=this,s=null;if(t&&t.raw&&(t=t.raw),f.isFunction(r)&&(e=r,r=null,n=n||!1),f.isFunction(n)&&(e=n,n=!1),t instanceof L)s=t;else{if("string"!=typeof t)throw Error("template names must be a string: "+t);for(var a=0;a<this.loaders.length;a++){var h=this.loaders[a];if(s=h.cache[this.resolveTemplate(h,r,t)])break}}if(s)return n&&s.compile(),e?void e(null,s):s;return f.asyncIter(this.loaders,function(n,i,e,u){function o(t,r){t?u(t):r?(r.loader=n,u(null,r)):e()}t=c.resolveTemplate(n,r,t),n.async?n.getSource(t,o):o(null,n.getSource(t))},function(r,f){if(f||r||i||(r=Error("template not found: "+t)),r){if(e)return void e(r);throw r}var c;f?(c=new L(f.src,o,f.path,n),f.noCache||(f.loader.cache[t]=c)):c=new L(k,o,"",n),e?e(null,c):u=c}),u},r.express=function(t){return E(this,t)},r.render=function(t,n,r){f.isFunction(n)&&(r=n,n=null);var i=null;return this.getTemplate(t,function(t,e){if(t&&r)O(r,t);else{if(t)throw t;i=e.render(n,r)}}),i},r.renderString=function(t,n,r,i){return f.isFunction(r)&&(i=r,r={}),new L(t,this,(r=r||{}).path).render(n,i)},r.waterfall=function(t,n,r){return o(t,n,r)},n}(w),S=function(t){function n(){return t.apply(this,arguments)||this}i(n,t);var r=n.prototype;return r.init=function(t,n,r){var i=this;this.env=r||new A,this.ctx=f.extend({},t),this.blocks={},this.exported=[],f.keys(n).forEach(function(t){i.addBlock(t,n[t])})},r.lookup=function(t){return t in this.env.globals&&!(t in this.ctx)?this.env.globals[t]:this.ctx[t]},r.setVariable=function(t,n){this.ctx[t]=n},r.getVariables=function(){return this.ctx},r.addBlock=function(t,n){return this.blocks[t]=this.blocks[t]||[],this.blocks[t].push(n),this},r.getBlock=function(t){if(!this.blocks[t])throw Error('unknown block "'+t+'"');return this.blocks[t][0]},r.getSuper=function(t,n,r,i,e,u){var o=f.indexOf(this.blocks[n]||[],r),c=this.blocks[n][o+1];if(-1===o||!c)throw Error('no super block available for "'+n+'"');c(t,this,i,e,u)},r.addExport=function(t){this.exported.push(t)},r.getExported=function(){var t=this,n={};return this.exported.forEach(function(r){n[r]=t.ctx[r]}),n},n}(b),L=function(t){function n(){return t.apply(this,arguments)||this}i(n,t);var r=n.prototype;return r.init=function(t,n,r,i){if(this.env=n||new A,f.isObject(t))switch(t.type){case"code":this.tmplProps=t.obj;break;case"string":this.tmplStr=t.obj;break;default:throw Error("Unexpected template object type "+t.type+"; expected 'code', or 'string'")}else{if(!f.isString(t))throw Error("src must be a string or an object describing the source");this.tmplStr=t}if(this.path=r,i)try{this.h()}catch(t){throw f.t(this.path,this.env.opts.dev,t)}else this.compiled=!1},r.render=function(t,n,r){var i=this;"function"==typeof t?(r=t,t={}):"function"==typeof n&&(r=n,n=null);var e=!n;try{this.compile()}catch(t){var u=f.t(this.path,this.env.opts.dev,t);if(r)return O(r,u);throw u}var o=new S(t||{},this.blocks,this.env),c=n?n.push(!0):new g;c.topLevel=!0;var s=null,a=!1;return this.rootRenderFunc(this.env,o,c,m,function(t,n){if(!a||!r||void 0===n)if(t&&(t=f.t(i.path,i.env.opts.dev,t),a=!0),r)e?O(r,t,n):r(t,n);else{if(t)throw t;s=n}}),s},r.getExported=function(t,n,r){"function"==typeof t&&(r=t,t={}),"function"==typeof n&&(r=n,n=null);try{this.compile()}catch(t){if(r)return r(t);throw t}var i=n?n.push():new g;i.topLevel=!0;var e=new S(t||{},this.blocks,this.env);this.rootRenderFunc(this.env,e,i,m,function(t){t?r(t,null):r(null,e.getExported())})},r.compile=function(){this.compiled||this.h()},r.h=function(){var t;if(this.tmplProps)t=this.tmplProps;else{var n=c.compile(this.tmplStr,this.env.asyncFilters,this.env.extensionsList,this.path,this.env.opts);t=Function(n)()}this.blocks=this.v(t),this.rootRenderFunc=t.root,this.compiled=!0},r.v=function(t){var n={};return f.keys(t).forEach(function(r){"b_"===r.slice(0,2)&&(n[r.slice(2)]=t[r])}),n},n}(b);t.exports={Environment:A,Template:L}},function(t,n,r){"use strict";var i=r(9),e=[],u=[],o=i.makeRequestCallFromTimer(function(){if(u.length)throw u.shift()});function f(t){var n;(n=e.length?e.pop():new c).task=t,i(n)}function c(){this.task=null}t.exports=f,c.prototype.call=function(){try{this.task.call()}catch(t){f.onerror?f.onerror(t):(u.push(t),o())}finally{this.task=null,e[e.length]=this}}},function(t,n,r){"use strict";!function(n){function r(t){e.length||(i(),!0),e[e.length]=t}t.exports=r;var i,e=[],u=0,o=1024;function f(){for(;u<e.length;){var t=u;if(u+=1,e[t].call(),u>o){for(var n=0,r=e.length-u;n<r;n++)e[n]=e[n+u];e.length-=u,u=0}}e.length=0,u=0,!1}var c,s,a,h=void 0!==n?n:self,v=h.MutationObserver||h.WebKitMutationObserver;function l(t){return function(){var n=setTimeout(i,0),r=setInterval(i,50);function i(){clearTimeout(n),clearInterval(r),t()}}}"function"==typeof v?(c=1,s=new v(f),a=document.createTextNode(""),s.observe(a,{characterData:!0}),i=function(){c=-c,a.data=c}):i=l(f),r.requestFlush=i,r.makeRequestCallFromTimer=l}(r(10))},function(t,n){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(r=window)}t.exports=r},function(t,n,r){var i;!function(r){"use strict";var e=function(){var t=Array.prototype.slice.call(arguments);"function"==typeof t[0]&&t[0].apply(null,t.splice(1))},u=function(t){"function"==typeof setImmediate?setImmediate(t):"undefined"!=typeof process&&process.nextTick?process.nextTick(t):setTimeout(t,0)},o=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)},f=function(t,n,r){var i=r?u:e;if(n=n||function(){},!o(t))return n(Error("First argument to waterfall must be an array of functions"));if(!t.length)return n();var f=function(t){return function(r){if(r)n.apply(null,arguments),n=function(){};else{var e=Array.prototype.slice.call(arguments,1),u=t.next();u?e.push(f(u)):e.push(n),i(function(){t.apply(null,e)})}}};f(function(t){var n=function(r){var i=function(){return t.length&&t[r].apply(null,arguments),i.next()};return i.next=function(){return r<t.length-1?n(r+1):null},i};return n(0)}(t))()};void 0===(i=function(){return f}.apply(n,[]))||(t.exports=i)}()},function(t,n,r){"use strict";var i=r(1),e=r(2);function u(t,n){return null===t||void 0===t||!1===t?n:t}function o(t){return t!=t}function f(t){var n=(t=u(t,"")).toLowerCase();return e.copySafeness(t,n.charAt(0).toUpperCase()+n.slice(1))}function c(t){if(i.isString(t))return t.split("");if(i.isObject(t))return i.r(t||{}).map(function(t){return{key:t[0],value:t[1]}});if(i.isArray(t))return t;throw new i.TemplateError("list filter: type not iterable")}function s(t){return function(n,r,e){void 0===r&&(r="truthy");var u=this,o=u.env.getTest(r);return i.toArray(n).filter(function(n){return o.call(u,n,e)===t})}}function a(t){return e.copySafeness(t,t.replace(/^\s*|\s*$/g,""))}(n=t.exports={}).abs=Math.abs,n.batch=function(t,n,r){var i,e=[],u=[];for(i=0;i<t.length;i++)i%n==0&&u.length&&(e.push(u),u=[]),u.push(t[i]);if(u.length){if(r)for(i=u.length;i<n;i++)u.push(r);e.push(u)}return e},n.capitalize=f,n.center=function(t,n){if(t=u(t,""),n=n||80,t.length>=n)return t;var r=n-t.length,o=i.repeat(" ",r/2-r%2),f=i.repeat(" ",r/2);return e.copySafeness(t,o+t+f)},n.default=function(t,n,r){return r?t||n:void 0!==t?t:n},n.dictsort=function(t,n,r){if(!i.isObject(t))throw new i.TemplateError("dictsort filter: val must be an object");var e,u=[];for(var o in t)u.push([o,t[o]]);if(void 0===r||"key"===r)e=0;else{if("value"!==r)throw new i.TemplateError("dictsort filter: You can only sort by either key or value");e=1}return u.sort(function(t,r){var u=t[e],o=r[e];return n||(i.isString(u)&&(u=u.toUpperCase()),i.isString(o)&&(o=o.toUpperCase())),u>o?1:u===o?0:-1}),u},n.dump=function(t,n){return JSON.stringify(t,null,n)},n.escape=function(t){return t instanceof e.SafeString?t:(t=null===t||void 0===t?"":t,e.markSafe(i.escape(t.toString())))},n.safe=function(t){return t instanceof e.SafeString?t:(t=null===t||void 0===t?"":t,e.markSafe(t.toString()))},n.first=function(t){return t[0]},n.forceescape=function(t){return t=null===t||void 0===t?"":t,e.markSafe(i.escape(t.toString()))},n.groupby=function(t,n){return i.groupBy(t,n,this.env.opts.throwOnUndefined)},n.indent=function(t,n,r){if(""===(t=u(t,"")))return"";n=n||4;var o=t.split("\n"),f=i.repeat(" ",n),c=o.map(function(t,n){return 0!==n||r?""+f+t:t}).join("\n");return e.copySafeness(t,c)},n.join=function(t,n,r){return n=n||"",r&&(t=i.map(t,function(t){return t[r]})),t.join(n)},n.last=function(t){return t[t.length-1]},n.length=function(t){var n=u(t,"");return void 0!==n?"function"==typeof Map&&n instanceof Map||"function"==typeof Set&&n instanceof Set?n.size:!i.isObject(n)||n instanceof e.SafeString?n.length:i.keys(n).length:0},n.list=c,n.lower=function(t){return(t=u(t,"")).toLowerCase()},n.nl2br=function(t){return null===t||void 0===t?"":e.copySafeness(t,t.replace(/\r\n|\n/g,"<br />\n"))},n.random=function(t){return t[Math.floor(Math.random()*t.length)]},n.reject=s(!1),n.rejectattr=function(t,n){return t.filter(function(t){return!t[n]})},n.select=s(!0),n.selectattr=function(t,n){return t.filter(function(t){return!!t[n]})},n.replace=function(t,n,r,i){var u=t;if(n instanceof RegExp)return t.replace(n,r);void 0===i&&(i=-1);var o="";if("number"==typeof n)n=""+n;else if("string"!=typeof n)return t;if("number"==typeof t&&(t=""+t),"string"!=typeof t&&!(t instanceof e.SafeString))return t;if(""===n)return o=r+t.split("").join(r)+r,e.copySafeness(t,o);var f=t.indexOf(n);if(0===i||-1===f)return t;for(var c=0,s=0;f>-1&&(-1===i||s<i);)o+=t.substring(c,f)+r,c=f+n.length,s++,f=t.indexOf(n,c);return c<t.length&&(o+=t.substring(c)),e.copySafeness(u,o)},n.reverse=function(t){var n;return(n=i.isString(t)?c(t):i.map(t,function(t){return t})).reverse(),i.isString(t)?e.copySafeness(t,n.join("")):n},n.round=function(t,n,r){var i=Math.pow(10,n=n||0);return("ceil"===r?Math.ceil:"floor"===r?Math.floor:Math.round)(t*i)/i},n.slice=function(t,n,r){for(var i=Math.floor(t.length/n),e=t.length%n,u=[],o=0,f=0;f<n;f++){var c=o+f*i;f<e&&o++;var s=o+(f+1)*i,a=t.slice(c,s);r&&f>=e&&a.push(r),u.push(a)}return u},n.sum=function(t,n,r){return void 0===r&&(r=0),n&&(t=i.map(t,function(t){return t[n]})),r+t.reduce(function(t,n){return t+n},0)},n.sort=e.makeMacro(["value","reverse","case_sensitive","attribute"],[],function(t,n,r,e){var u=this,o=i.map(t,function(t){return t}),f=i.getAttrGetter(e);return o.sort(function(t,o){var c=e?f(t):t,s=e?f(o):o;if(u.env.opts.throwOnUndefined&&e&&(void 0===c||void 0===s))throw new TypeError('sort: attribute "'+e+'" resolved to undefined');return!r&&i.isString(c)&&i.isString(s)&&(c=c.toLowerCase(),s=s.toLowerCase()),c<s?n?1:-1:c>s?n?-1:1:0}),o}),n.string=function(t){return e.copySafeness(t,t)},n.striptags=function(t,n){var r=a((t=u(t,"")).replace(/<\/?([a-z][a-z0-9]*)\b[^>]*>|<!--[\s\S]*?-->/gi,"")),i="";return i=n?r.replace(/^ +| +$/gm,"").replace(/ +/g," ").replace(/(\r\n)/g,"\n").replace(/\n\n\n+/g,"\n\n"):r.replace(/\s+/gi," "),e.copySafeness(t,i)},n.title=function(t){var n=(t=u(t,"")).split(" ").map(function(t){return f(t)});return e.copySafeness(t,n.join(" "))},n.trim=a,n.truncate=function(t,n,r,i){var o=t;if(t=u(t,""),n=n||255,t.length<=n)return t;if(r)t=t.substring(0,n);else{var f=t.lastIndexOf(" ",n);-1===f&&(f=n),t=t.substring(0,f)}return t+=void 0!==i&&null!==i?i:"...",e.copySafeness(o,t)},n.upper=function(t){return(t=u(t,"")).toUpperCase()},n.urlencode=function(t){var n=encodeURIComponent;return i.isString(t)?n(t):(i.isArray(t)?t:i.r(t)).map(function(t){var r=t[0],i=t[1];return n(r)+"="+n(i)}).join("&")};var h=/^(?:\(|<|<)?(.*?)(?:\.|,|\)|\n|>)?$/,v=/^[\w.!#$%&'*+\-\/=?\^`{|}~]+@[a-z\d\-]+(\.[a-z\d\-]+)+$/i,l=/^https?:\/\/.*$/,d=/^www\./,p=/\.(?:org|net|com)(?:\:|\/|$)/;n.urlize=function(t,n,r){o(n)&&(n=1/0);var i=!0===r?' rel="nofollow"':"";return t.split(/(\s+)/).filter(function(t){return t&&t.length}).map(function(t){var r=t.match(h),e=r?r[1]:t,u=e.substr(0,n);return l.test(e)?'<a href="'+e+'"'+i+">"+u+"</a>":d.test(e)?'<a href="http://'+e+'"'+i+">"+u+"</a>":v.test(e)?'<a href="mailto:'+e+'">'+e+"</a>":p.test(e)?'<a href="http://'+e+'"'+i+">"+u+"</a>":t}).join("")},n.wordcount=function(t){var n=(t=u(t,""))?t.match(/\w+/g):null;return n?n.length:null},n.float=function(t,n){var r=parseFloat(t);return o(r)?n:r};var y=e.makeMacro(["value","default","base"],[],function(t,n,r){void 0===r&&(r=10);var i=parseInt(t,r);return o(i)?n:i});n.int=y,n.d=n.default,n.e=n.escape},function(t,n,r){"use strict";var i,e="object"==typeof Reflect?Reflect:null,u=e&&"function"==typeof e.apply?e.apply:function(t,n,r){return Function.prototype.apply.call(t,n,r)};i=e&&"function"==typeof e.ownKeys?e.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:function(t){return Object.getOwnPropertyNames(t)};var o=Number.isNaN||function(t){return t!=t};function f(){f.init.call(this)}t.exports=f,t.exports.once=function(t,n){return new Promise(function(r,i){function e(r){t.removeListener(n,u),i(r)}function u(){"function"==typeof t.removeListener&&t.removeListener("error",e),r([].slice.call(arguments))}y(t,n,u,{once:!0}),"error"!==n&&function(t,n,r){"function"==typeof t.on&&y(t,"error",n,r)}(t,e,{once:!0})})},f.EventEmitter=f,f.prototype.y=void 0,f.prototype.b=0,f.prototype.w=void 0;var c=10;function s(t){if("function"!=typeof t)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}function a(t){return void 0===t.w?f.defaultMaxListeners:t.w}function h(t,n,r,i){var e,u,o;if(s(r),void 0===(u=t.y)?(u=t.y=Object.create(null),t.b=0):(void 0!==u.newListener&&(t.emit("newListener",n,r.listener?r.listener:r),u=t.y),o=u[n]),void 0===o)o=u[n]=r,++t.b;else if("function"==typeof o?o=u[n]=i?[r,o]:[o,r]:i?o.unshift(r):o.push(r),(e=a(t))>0&&o.length>e&&!o.warned){o.warned=!0;var f=Error("Possible EventEmitter memory leak detected. "+o.length+" "+n+" listeners added. Use emitter.setMaxListeners() to increase limit");f.name="MaxListenersExceededWarning",f.emitter=t,f.type=n,f.count=o.length,console&&console.warn&&console.warn(f)}return t}function v(t,n,r){var i={fired:!1,wrapFn:void 0,target:t,type:n,listener:r},e=function(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}.bind(i);return e.listener=r,i.wrapFn=e,e}function l(t,n,r){var i=t.y;if(void 0===i)return[];var e=i[n];return void 0===e?[]:"function"==typeof e?r?[e.listener||e]:[e]:r?function(t){for(var n=Array(t.length),r=0;r<n.length;++r)n[r]=t[r].listener||t[r];return n}(e):p(e,e.length)}function d(t){var n=this.y;if(void 0!==n){var r=n[t];if("function"==typeof r)return 1;if(void 0!==r)return r.length}return 0}function p(t,n){for(var r=Array(n),i=0;i<n;++i)r[i]=t[i];return r}function y(t,n,r,i){if("function"==typeof t.on)i.once?t.once(n,r):t.on(n,r);else{if("function"!=typeof t.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof t);t.addEventListener(n,function e(u){i.once&&t.removeEventListener(n,e),r(u)})}}Object.defineProperty(f,"defaultMaxListeners",{enumerable:!0,get:function(){return c},set:function(t){if("number"!=typeof t||t<0||o(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");c=t}}),f.init=function(){void 0!==this.y&&this.y!==Object.getPrototypeOf(this).y||(this.y=Object.create(null),this.b=0),this.w=this.w||void 0},f.prototype.setMaxListeners=function(t){if("number"!=typeof t||t<0||o(t))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+t+".");return this.w=t,this},f.prototype.getMaxListeners=function(){return a(this)},f.prototype.emit=function(t){for(var n=[],r=1;r<arguments.length;r++)n.push(arguments[r]);var i="error"===t,e=this.y;if(void 0!==e)i=i&&void 0===e.error;else if(!i)return!1;if(i){var o;if(n.length>0&&(o=n[0]),o instanceof Error)throw o;var f=Error("Unhandled error."+(o?" ("+o.message+")":""));throw f.context=o,f}var c=e[t];if(void 0===c)return!1;if("function"==typeof c)u(c,this,n);else{var s=c.length,a=p(c,s);for(r=0;r<s;++r)u(a[r],this,n)}return!0},f.prototype.addListener=function(t,n){return h(this,t,n,!1)},f.prototype.on=f.prototype.addListener,f.prototype.prependListener=function(t,n){return h(this,t,n,!0)},f.prototype.once=function(t,n){return s(n),this.on(t,v(this,t,n)),this},f.prototype.prependOnceListener=function(t,n){return s(n),this.prependListener(t,v(this,t,n)),this},f.prototype.removeListener=function(t,n){var r,i,e,u,o;if(s(n),void 0===(i=this.y))return this;if(void 0===(r=i[t]))return this;if(r===n||r.listener===n)0==--this.b?this.y=Object.create(null):(delete i[t],i.removeListener&&this.emit("removeListener",t,r.listener||n));else if("function"!=typeof r){for(e=-1,u=r.length-1;u>=0;u--)if(r[u]===n||r[u].listener===n){o=r[u].listener,e=u;break}if(e<0)return this;0===e?r.shift():function(t,n){for(;n+1<t.length;n++)t[n]=t[n+1];t.pop()}(r,e),1===r.length&&(i[t]=r[0]),void 0!==i.removeListener&&this.emit("removeListener",t,o||n)}return this},f.prototype.off=f.prototype.removeListener,f.prototype.removeAllListeners=function(t){var n,r,i;if(void 0===(r=this.y))return this;if(void 0===r.removeListener)return 0===arguments.length?(this.y=Object.create(null),this.b=0):void 0!==r[t]&&(0==--this.b?this.y=Object.create(null):delete r[t]),this;if(0===arguments.length){var e,u=Object.keys(r);for(i=0;i<u.length;++i)"removeListener"!==(e=u[i])&&this.removeAllListeners(e);return this.removeAllListeners("removeListener"),this.y=Object.create(null),this.b=0,this}if("function"==typeof(n=r[t]))this.removeListener(t,n);else if(void 0!==n)for(i=n.length-1;i>=0;i--)this.removeListener(t,n[i]);return this},f.prototype.listeners=function(t){return l(this,t,!0)},f.prototype.rawListeners=function(t){return l(this,t,!1)},f.listenerCount=function(t,n){return"function"==typeof t.listenerCount?t.listenerCount(n):d.call(t,n)},f.prototype.listenerCount=d,f.prototype.eventNames=function(){return this.b>0?i(this.y):[]}},function(t,n,r){"use strict";var i=r(2).SafeString;n.callable=function(t){return"function"==typeof t},n.defined=function(t){return void 0!==t},n.divisibleby=function(t,n){return t%n==0},n.escaped=function(t){return t instanceof i},n.equalto=function(t,n){return t===n},n.eq=n.equalto,n.sameas=n.equalto,n.even=function(t){return t%2==0},n.falsy=function(t){return!t},n.ge=function(t,n){return t>=n},n.greaterthan=function(t,n){return t>n},n.gt=n.greaterthan,n.le=function(t,n){return t<=n},n.lessthan=function(t,n){return t<n},n.lt=n.lessthan,n.lower=function(t){return t.toLowerCase()===t},n.ne=function(t,n){return t!==n},n.null=function(t){return null===t},n.number=function(t){return"number"==typeof t},n.odd=function(t){return t%2==1},n.string=function(t){return"string"==typeof t},n.truthy=function(t){return!!t},n.undefined=function(t){return void 0===t},n.upper=function(t){return t.toUpperCase()===t},n.iterable=function(t){return"undefined"!=typeof Symbol?!!t[Symbol.iterator]:Array.isArray(t)||"string"==typeof t},n.mapping=function(t){var n=null!==t&&void 0!==t&&"object"==typeof t&&!Array.isArray(t);return Set?n&&!(t instanceof Set):n}},function(t,n,r){"use strict";t.exports=function(){return{range:function(t,n,r){void 0===n?(n=t,t=0,r=1):r||(r=1);var i=[];if(r>0)for(var e=t;e<n;e+=r)i.push(e);else for(var u=t;u>n;u+=r)i.push(u);return i},cycler:function(){return t=Array.prototype.slice.call(arguments),n=-1,{current:null,reset:function(){n=-1,this.current=null},next:function(){return++n>=t.length&&(n=0),this.current=t[n],this.current}};var t,n},joiner:function(t){return function(t){t=t||",";var n=!0;return function(){var r=n?"":t;return n=!1,r}}(t)}}}},function(t,n,r){var i=r(0);t.exports=function(t,n){function r(t,n){if(this.name=t,this.path=t,this.defaultEngine=n.defaultEngine,this.ext=i.extname(t),!this.ext&&!this.defaultEngine)throw Error("No default engine was specified and no extension was provided.");this.ext||(this.name+=this.ext=("."!==this.defaultEngine[0]?".":"")+this.defaultEngine)}return r.prototype.render=function(n,r){t.render(this.name,n,r)},n.set("view",r),n.set("nunjucksEnv",t),t}},function(t,n,r){t.exports=function(){"use strict";var t,n,r=this.runtime,i=this.lib,e=this.compiler.Compiler,u=this.parser.Parser,o=(this.nodes,this.lexer,r.contextOrFrameLookup),f=r.memberLookup;function c(t,n){return Object.prototype.hasOwnProperty.call(t,n)}e&&(t=e.prototype.assertType),u&&(n=u.prototype.parseAggregate),r.contextOrFrameLookup=function(t,n,r){var i=o.apply(this,arguments);if(void 0!==i)return i;switch(r){case"True":return!0;case"False":return!1;case"None":return null;default:return}};var s={pop:function(t){if(void 0===t)return this.pop();if(t>=this.length||t<0)throw Error("KeyError");return this.splice(t,1)},append:function(t){return this.push(t)},remove:function(t){for(var n=0;n<this.length;n++)if(this[n]===t)return this.splice(n,1);throw Error("ValueError")},count:function(t){for(var n=0,r=0;r<this.length;r++)this[r]===t&&n++;return n},index:function(t){var n;if(-1===(n=this.indexOf(t)))throw Error("ValueError");return n},find:function(t){return this.indexOf(t)},insert:function(t,n){return this.splice(t,0,n)}},a={items:function(){return i.r(this)},values:function(){return i.u(this)},keys:function(){return i.keys(this)},get:function(t,n){var r=this[t];return void 0===r&&(r=n),r},has_key:function(t){return c(this,t)},pop:function(t,n){var r=this[t];if(void 0===r&&void 0!==n)r=n;else{if(void 0===r)throw Error("KeyError");delete this[t]}return r},popitem:function(){var t=i.keys(this);if(!t.length)throw Error("KeyError");var n=t[0],r=this[n];return delete this[n],[n,r]},setdefault:function(t,n){return void 0===n&&(n=null),t in this||(this[t]=n),this[t]},update:function(t){return i.f(this,t),null}};return a.iteritems=a.items,a.itervalues=a.values,a.iterkeys=a.keys,r.memberLookup=function(t,n,e){return 4===arguments.length?function(t,n,i,e){t=t||[],null===n&&(n=e<0?t.length-1:0),null===i?i=e<0?-1:t.length:i<0&&(i+=t.length),n<0&&(n+=t.length);for(var u=[],o=n;!(o<0||o>t.length||e>0&&o>=i||e<0&&o<=i);o+=e)u.push(r.memberLookup(t,o));return u}.apply(this,arguments):(t=t||{},i.isArray(t)&&c(s,n)?s[n].bind(t):i.isObject(t)&&c(a,n)?a[n].bind(t):f.apply(this,arguments))},function(){r.contextOrFrameLookup=o,r.memberLookup=f,e&&(e.prototype.assertType=t),u&&(u.prototype.parseAggregate=n)}}}])}); +//# sourceMappingURL=nunjucks-slim.min.js.map
\ No newline at end of file diff --git a/node_modules/nunjucks/browser/nunjucks-slim.min.js.map b/node_modules/nunjucks/browser/nunjucks-slim.min.js.map new file mode 100644 index 0000000..f0f2088 --- /dev/null +++ b/node_modules/nunjucks/browser/nunjucks-slim.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../webpack/universalModuleDefinition","../webpack/bootstrap 7e3332fc383fae809379","../nunjucks/src/lib.js","../nunjucks/src/runtime.js","../nunjucks/src/precompiled-loader.js","../nunjucks/src/loader.js","../nunjucks/src/object.js","../nunjucks/index.js","../nunjucks/src/environment.js","../node_modules/asap/browser-asap.js","../node_modules/asap/browser-raw.js","../node_modules/webpack/buildin/global.js","../node_modules/a-sync-waterfall/index.js","../nunjucks/src/filters.js","../node_modules/webpack/node_modules/events/events.js","../nunjucks/src/tests.js","../nunjucks/src/globals.js","../nunjucks/src/express-app.js","../nunjucks/src/jinja-compat.js"],"names":["root","factory","exports","module","define","amd","self","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","ArrayProto","Array","ObjProto","escapeMap","&","\"","'","<",">","\\","escapeRegex","hasOwnProp","obj","k","lookupEscape","ch","TemplateError","message","lineno","colno","err","cause","getStack","Error","setPrototypeOf","writable","value","captureStackTrace","constructor","stackDescriptor","getOwnPropertyDescriptor","stack","firstUpdate","Update","path","msg","isFunction","toString","isArray","isString","isObject","getAttrGetter","attribute","attr","parts","split","item","_item","length","part","toArray","slice","indexOf","arr","searchElement","fromIndex","keys_","push","_prettifyError","withInternals","old","create","escape","val","replace","groupBy","throwOnUndefined","result","iterator","key","undefined","TypeError","without","array","contains","arguments","index","repeat","char_","str","each","func","context","forEach","map","results","asyncIter","iter","cb","next","asyncFor","keys","len","_entries","_values","_assign","extend","obj1","obj2","inOperator","lib","require","arrayFrom","from","supportsIterators","Symbol","Frame","parent","isolateWrites","variables","topLevel","_proto","set","resolveUp","frame","resolve","id","lookup","forWrite","pop","isKeywordArgs","numArgs","args","SafeString","String","valueOf","makeMacro","argNames","kwargNames","_len","macroArgs","_key","argCount","kwargs","lastArg","getKeywordArgs","arg","apply","makeKeywordArgs","__keywords","suppressValue","autoescape","ensureDefined","memberLookup","_len2","_key2","contextOrFrameLookup","callWrap","handleError","error","copySafeness","dest","target","markSafe","type","ret","asyncEach","dimen","asyncAll","outputArr","finished","done","output","join","fromIterator","_setPrototypeOf","bind","__proto__","PrecompiledLoader","_Loader","subClass","superClass","compiledTemplates","_this","precompiled","getSource","src","EmitterObj","_EmitterObj","Loader","to","dirname","isRelative","filename","_defineProperties","props","descriptor","input","hint","prim","toPrimitive","res","Number","_toPrimitive","_createClass","Constructor","protoProps","staticProps","_inheritsLoose","EventEmitter","extendClass","cls","prop","tmp","subclass","_cls","Obj","init","_EventEmitter","_this2","e","_require","Environment","Template","loaders","precompile","compiler","parser","lexer","runtime","nodes","installJinjaCompat","configure","templatesPath","opts","TemplateLoader","FileSystemLoader","watch","noCache","WebLoader","useCache","web","async","express","NodeResolveLoader","reset","compile","env","eagerCompile","render","ctx","renderString","precompileString","asap","waterfall","filters","tests","globals","_require2","globalRuntime","expressApp","callbackAsap","noopTmplSrc","dev","trimBlocks","lstripBlocks","window","nunjucksPrecompiled","unshift","_initLoaders","asyncFilters","extensions","extensionsList","_ref","filter","addFilter","_ref2","test","addTest","loader","cache","on","fullname","emit","source","invalidateCache","addExtension","extension","__name","removeExtension","getExtension","hasExtension","addGlobal","getGlobal","wrapped","getFilter","getTest","resolveTemplate","parentName","getTemplate","ignoreMissing","syncResult","_this3","that","tmpl","raw","handle","info","newTmpl","app","tasks","callback","forceAsync","Context","_Obj","_proto2","blocks","_this4","exported","addBlock","setVariable","getVariables","block","getBlock","getSuper","idx","blk","addExport","getExported","_this5","_Obj2","_proto3","tmplProps","tmplStr","_compile","compiled","parentFrame","_this6","didError","rootRenderFunc","Function","_getBlocks","rawAsap","freeTasks","pendingErrors","requestErrorThrow","makeRequestCallFromTimer","shift","task","rawTask","RawTask","onerror","global","queue","requestFlush","capacity","flush","currentIndex","scan","newLength","toggle","observer","node","scope","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","timeoutHandle","setTimeout","handleTimer","intervalHandle","setInterval","clearTimeout","clearInterval","document","createTextNode","observe","characterData","data","g","eval","__WEBPACK_AMD_DEFINE_RESULT__","executeSync","splice","executeAsync","fn","setImmediate","process","nextTick","_isArray","maybeArray","wrapIterator","makeCallback","makeIterator","r","normalize","defaultValue","isNaN","num","capitalize","toLowerCase","charAt","toUpperCase","list","getSelectOrReject","expectedTestResult","testName","secondArg","trim","abs","Math","batch","linecount","fillWith","center","width","spaces","pre","post","def","bool","dictsort","caseSensitive","by","si","sort","t1","t2","a","b","dump","JSON","stringify","safe","first","forceescape","groupby","indent","indentfirst","lines","sp","del","v","last","Map","Set","size","lower","nl2br","random","floor","reject","rejectattr","select","selectattr","new_","maxCount","originalStr","RegExp","nextIndex","pos","count","substring","reverse","round","precision","method","factor","pow","ceil","slices","sliceLength","extra","offset","start","end","currSlice","sum","reduce","reversed","caseSens","getAttribute","x","y","string","striptags","preserveLinebreaks","trimmedInput","title","words","word","truncate","killwords","orig","lastIndexOf","upper","urlencode","enc","encodeURIComponent","puncRe","emailRe","httpHttpsRe","wwwRe","tldRe","urlize","nofollow","Infinity","noFollowAttr","matches","match","possibleUrl","shortUrl","substr","wordcount","float","parseFloat","intFilter","base","parseInt","int","default","ReflectOwnKeys","R","Reflect","ReflectApply","receiver","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","concat","NumberIsNaN","once","emitter","Promise","errorListener","removeListener","resolver","eventTargetAgnosticAddListener","handler","flags","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","_getMaxListeners","_addListener","prepend","events","existing","newListener","warned","w","console","warn","_onceWrap","state","fired","wrapFn","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","listenerCount","copy","addEventListener","wrapListener","removeEventListener","RangeError","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","listeners","addListener","prependListener","prependOnceListener","position","originalListener","spliceOne","off","removeAllListeners","rawListeners","eventNames","callable","defined","divisibleby","one","two","escaped","equalto","eq","sameas","even","falsy","ge","greaterthan","gt","le","lessthan","lt","ne","null","number","odd","truthy","iterable","mapping","range","stop","step","cycler","items","current","joiner","sep","NunjucksView","defaultEngine","ext","extname","orig_Compiler_assertType","orig_Parser_parseAggregate","Compiler","Parser","orig_contextOrFrameLookup","orig_memberLookup","assertType","parseAggregate","ARRAY_MEMBERS","append","element","remove","find","insert","elem","OBJECT_MEMBERS","values","has_key","popitem","setdefault","update","iteritems","itervalues","iterkeys"],"mappings":"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","file":"nunjucks-slim.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"nunjucks\"] = factory();\n\telse\n\t\troot[\"nunjucks\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 6);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 7e3332fc383fae809379","'use strict';\n\nvar ArrayProto = Array.prototype;\nvar ObjProto = Object.prototype;\n\nvar escapeMap = {\n '&': '&',\n '\"': '"',\n '\\'': ''',\n '<': '<',\n '>': '>',\n '\\\\': '\',\n};\n\nvar escapeRegex = /[&\"'<>\\\\]/g;\n\nvar exports = module.exports = {};\n\nfunction hasOwnProp(obj, k) {\n return ObjProto.hasOwnProperty.call(obj, k);\n}\n\nexports.hasOwnProp = hasOwnProp;\n\nfunction lookupEscape(ch) {\n return escapeMap[ch];\n}\n\nfunction _prettifyError(path, withInternals, err) {\n if (!err.Update) {\n // not one of ours, cast it\n err = new exports.TemplateError(err);\n }\n err.Update(path);\n\n // Unless they marked the dev flag, show them a trace from here\n if (!withInternals) {\n const old = err;\n err = new Error(old.message);\n err.name = old.name;\n }\n\n return err;\n}\n\nexports._prettifyError = _prettifyError;\n\nfunction TemplateError(message, lineno, colno) {\n var err;\n var cause;\n\n if (message instanceof Error) {\n cause = message;\n message = `${cause.name}: ${cause.message}`;\n }\n\n if (Object.setPrototypeOf) {\n err = new Error(message);\n Object.setPrototypeOf(err, TemplateError.prototype);\n } else {\n err = this;\n Object.defineProperty(err, 'message', {\n enumerable: false,\n writable: true,\n value: message,\n });\n }\n\n Object.defineProperty(err, 'name', {\n value: 'Template render error',\n });\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(err, this.constructor);\n }\n\n let getStack;\n\n if (cause) {\n const stackDescriptor = Object.getOwnPropertyDescriptor(cause, 'stack');\n getStack = stackDescriptor && (stackDescriptor.get || (() => stackDescriptor.value));\n if (!getStack) {\n getStack = () => cause.stack;\n }\n } else {\n const stack = (new Error(message)).stack;\n getStack = (() => stack);\n }\n\n Object.defineProperty(err, 'stack', {\n get: () => getStack.call(err),\n });\n\n Object.defineProperty(err, 'cause', {\n value: cause\n });\n\n err.lineno = lineno;\n err.colno = colno;\n err.firstUpdate = true;\n\n err.Update = function Update(path) {\n let msg = '(' + (path || 'unknown path') + ')';\n\n // only show lineno + colno next to path of template\n // where error occurred\n if (this.firstUpdate) {\n if (this.lineno && this.colno) {\n msg += ` [Line ${this.lineno}, Column ${this.colno}]`;\n } else if (this.lineno) {\n msg += ` [Line ${this.lineno}]`;\n }\n }\n\n msg += '\\n ';\n if (this.firstUpdate) {\n msg += ' ';\n }\n\n this.message = msg + (this.message || '');\n this.firstUpdate = false;\n return this;\n };\n\n return err;\n}\n\n\nif (Object.setPrototypeOf) {\n Object.setPrototypeOf(TemplateError.prototype, Error.prototype);\n} else {\n TemplateError.prototype = Object.create(Error.prototype, {\n constructor: {\n value: TemplateError,\n },\n });\n}\n\nexports.TemplateError = TemplateError;\n\nfunction escape(val) {\n return val.replace(escapeRegex, lookupEscape);\n}\n\nexports.escape = escape;\n\nfunction isFunction(obj) {\n return ObjProto.toString.call(obj) === '[object Function]';\n}\n\nexports.isFunction = isFunction;\n\nfunction isArray(obj) {\n return ObjProto.toString.call(obj) === '[object Array]';\n}\n\nexports.isArray = isArray;\n\nfunction isString(obj) {\n return ObjProto.toString.call(obj) === '[object String]';\n}\n\nexports.isString = isString;\n\nfunction isObject(obj) {\n return ObjProto.toString.call(obj) === '[object Object]';\n}\n\nexports.isObject = isObject;\n\n/**\n * @param {string|number} attr\n * @returns {(string|number)[]}\n * @private\n */\nfunction _prepareAttributeParts(attr) {\n if (!attr) {\n return [];\n }\n\n if (typeof attr === 'string') {\n return attr.split('.');\n }\n\n return [attr];\n}\n\n/**\n * @param {string} attribute Attribute value. Dots allowed.\n * @returns {function(Object): *}\n */\nfunction getAttrGetter(attribute) {\n const parts = _prepareAttributeParts(attribute);\n\n return function attrGetter(item) {\n let _item = item;\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n\n // If item is not an object, and we still got parts to handle, it means\n // that something goes wrong. Just roll out to undefined in that case.\n if (hasOwnProp(_item, part)) {\n _item = _item[part];\n } else {\n return undefined;\n }\n }\n\n return _item;\n };\n}\n\nexports.getAttrGetter = getAttrGetter;\n\nfunction groupBy(obj, val, throwOnUndefined) {\n const result = {};\n const iterator = isFunction(val) ? val : getAttrGetter(val);\n for (let i = 0; i < obj.length; i++) {\n const value = obj[i];\n const key = iterator(value, i);\n if (key === undefined && throwOnUndefined === true) {\n throw new TypeError(`groupby: attribute \"${val}\" resolved to undefined`);\n }\n (result[key] || (result[key] = [])).push(value);\n }\n return result;\n}\n\nexports.groupBy = groupBy;\n\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj);\n}\n\nexports.toArray = toArray;\n\nfunction without(array) {\n const result = [];\n if (!array) {\n return result;\n }\n const length = array.length;\n const contains = toArray(arguments).slice(1);\n let index = -1;\n\n while (++index < length) {\n if (indexOf(contains, array[index]) === -1) {\n result.push(array[index]);\n }\n }\n return result;\n}\n\nexports.without = without;\n\nfunction repeat(char_, n) {\n var str = '';\n for (let i = 0; i < n; i++) {\n str += char_;\n }\n return str;\n}\n\nexports.repeat = repeat;\n\nfunction each(obj, func, context) {\n if (obj == null) {\n return;\n }\n\n if (ArrayProto.forEach && obj.forEach === ArrayProto.forEach) {\n obj.forEach(func, context);\n } else if (obj.length === +obj.length) {\n for (let i = 0, l = obj.length; i < l; i++) {\n func.call(context, obj[i], i, obj);\n }\n }\n}\n\nexports.each = each;\n\nfunction map(obj, func) {\n var results = [];\n if (obj == null) {\n return results;\n }\n\n if (ArrayProto.map && obj.map === ArrayProto.map) {\n return obj.map(func);\n }\n\n for (let i = 0; i < obj.length; i++) {\n results[results.length] = func(obj[i], i);\n }\n\n if (obj.length === +obj.length) {\n results.length = obj.length;\n }\n\n return results;\n}\n\nexports.map = map;\n\nfunction asyncIter(arr, iter, cb) {\n let i = -1;\n\n function next() {\n i++;\n\n if (i < arr.length) {\n iter(arr[i], i, next, cb);\n } else {\n cb();\n }\n }\n\n next();\n}\n\nexports.asyncIter = asyncIter;\n\nfunction asyncFor(obj, iter, cb) {\n const keys = keys_(obj || {});\n const len = keys.length;\n let i = -1;\n\n function next() {\n i++;\n const k = keys[i];\n\n if (i < len) {\n iter(k, obj[k], i, len, next);\n } else {\n cb();\n }\n }\n\n next();\n}\n\nexports.asyncFor = asyncFor;\n\nfunction indexOf(arr, searchElement, fromIndex) {\n return Array.prototype.indexOf.call(arr || [], searchElement, fromIndex);\n}\n\nexports.indexOf = indexOf;\n\nfunction keys_(obj) {\n /* eslint-disable no-restricted-syntax */\n const arr = [];\n for (let k in obj) {\n if (hasOwnProp(obj, k)) {\n arr.push(k);\n }\n }\n return arr;\n}\n\nexports.keys = keys_;\n\nfunction _entries(obj) {\n return keys_(obj).map((k) => [k, obj[k]]);\n}\n\nexports._entries = _entries;\n\nfunction _values(obj) {\n return keys_(obj).map((k) => obj[k]);\n}\n\nexports._values = _values;\n\nfunction extend(obj1, obj2) {\n obj1 = obj1 || {};\n keys_(obj2).forEach(k => {\n obj1[k] = obj2[k];\n });\n return obj1;\n}\n\nexports._assign = exports.extend = extend;\n\nfunction inOperator(key, val) {\n if (isArray(val) || isString(val)) {\n return val.indexOf(key) !== -1;\n } else if (isObject(val)) {\n return key in val;\n }\n throw new Error('Cannot use \"in\" operator to search for \"'\n + key + '\" in unexpected types.');\n}\n\nexports.inOperator = inOperator;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/lib.js","'use strict';\n\nvar lib = require('./lib');\nvar arrayFrom = Array.from;\nvar supportsIterators = (\n typeof Symbol === 'function' && Symbol.iterator && typeof arrayFrom === 'function'\n);\n\n\n// Frames keep track of scoping both at compile-time and run-time so\n// we know how to access variables. Block tags can introduce special\n// variables, for example.\nclass Frame {\n constructor(parent, isolateWrites) {\n this.variables = Object.create(null);\n this.parent = parent;\n this.topLevel = false;\n // if this is true, writes (set) should never propagate upwards past\n // this frame to its parent (though reads may).\n this.isolateWrites = isolateWrites;\n }\n\n set(name, val, resolveUp) {\n // Allow variables with dots by automatically creating the\n // nested structure\n var parts = name.split('.');\n var obj = this.variables;\n var frame = this;\n\n if (resolveUp) {\n if ((frame = this.resolve(parts[0], true))) {\n frame.set(name, val);\n return;\n }\n }\n\n for (let i = 0; i < parts.length - 1; i++) {\n const id = parts[i];\n\n if (!obj[id]) {\n obj[id] = {};\n }\n obj = obj[id];\n }\n\n obj[parts[parts.length - 1]] = val;\n }\n\n get(name) {\n var val = this.variables[name];\n if (val !== undefined) {\n return val;\n }\n return null;\n }\n\n lookup(name) {\n var p = this.parent;\n var val = this.variables[name];\n if (val !== undefined) {\n return val;\n }\n return p && p.lookup(name);\n }\n\n resolve(name, forWrite) {\n var p = (forWrite && this.isolateWrites) ? undefined : this.parent;\n var val = this.variables[name];\n if (val !== undefined) {\n return this;\n }\n return p && p.resolve(name);\n }\n\n push(isolateWrites) {\n return new Frame(this, isolateWrites);\n }\n\n pop() {\n return this.parent;\n }\n}\n\nfunction makeMacro(argNames, kwargNames, func) {\n return function macro(...macroArgs) {\n var argCount = numArgs(macroArgs);\n var args;\n var kwargs = getKeywordArgs(macroArgs);\n\n if (argCount > argNames.length) {\n args = macroArgs.slice(0, argNames.length);\n\n // Positional arguments that should be passed in as\n // keyword arguments (essentially default values)\n macroArgs.slice(args.length, argCount).forEach((val, i) => {\n if (i < kwargNames.length) {\n kwargs[kwargNames[i]] = val;\n }\n });\n args.push(kwargs);\n } else if (argCount < argNames.length) {\n args = macroArgs.slice(0, argCount);\n\n for (let i = argCount; i < argNames.length; i++) {\n const arg = argNames[i];\n\n // Keyword arguments that should be passed as\n // positional arguments, i.e. the caller explicitly\n // used the name of a positional arg\n args.push(kwargs[arg]);\n delete kwargs[arg];\n }\n args.push(kwargs);\n } else {\n args = macroArgs;\n }\n\n return func.apply(this, args);\n };\n}\n\nfunction makeKeywordArgs(obj) {\n obj.__keywords = true;\n return obj;\n}\n\nfunction isKeywordArgs(obj) {\n return obj && Object.prototype.hasOwnProperty.call(obj, '__keywords');\n}\n\nfunction getKeywordArgs(args) {\n var len = args.length;\n if (len) {\n const lastArg = args[len - 1];\n if (isKeywordArgs(lastArg)) {\n return lastArg;\n }\n }\n return {};\n}\n\nfunction numArgs(args) {\n var len = args.length;\n if (len === 0) {\n return 0;\n }\n\n const lastArg = args[len - 1];\n if (isKeywordArgs(lastArg)) {\n return len - 1;\n } else {\n return len;\n }\n}\n\n// A SafeString object indicates that the string should not be\n// autoescaped. This happens magically because autoescaping only\n// occurs on primitive string objects.\nfunction SafeString(val) {\n if (typeof val !== 'string') {\n return val;\n }\n\n this.val = val;\n this.length = val.length;\n}\n\nSafeString.prototype = Object.create(String.prototype, {\n length: {\n writable: true,\n configurable: true,\n value: 0\n }\n});\nSafeString.prototype.valueOf = function valueOf() {\n return this.val;\n};\nSafeString.prototype.toString = function toString() {\n return this.val;\n};\n\nfunction copySafeness(dest, target) {\n if (dest instanceof SafeString) {\n return new SafeString(target);\n }\n return target.toString();\n}\n\nfunction markSafe(val) {\n var type = typeof val;\n\n if (type === 'string') {\n return new SafeString(val);\n } else if (type !== 'function') {\n return val;\n } else {\n return function wrapSafe(args) {\n var ret = val.apply(this, arguments);\n\n if (typeof ret === 'string') {\n return new SafeString(ret);\n }\n\n return ret;\n };\n }\n}\n\nfunction suppressValue(val, autoescape) {\n val = (val !== undefined && val !== null) ? val : '';\n\n if (autoescape && !(val instanceof SafeString)) {\n val = lib.escape(val.toString());\n }\n\n return val;\n}\n\nfunction ensureDefined(val, lineno, colno) {\n if (val === null || val === undefined) {\n throw new lib.TemplateError(\n 'attempted to output null or undefined value',\n lineno + 1,\n colno + 1\n );\n }\n return val;\n}\n\nfunction memberLookup(obj, val) {\n if (obj === undefined || obj === null) {\n return undefined;\n }\n\n if (typeof obj[val] === 'function') {\n return (...args) => obj[val].apply(obj, args);\n }\n\n return obj[val];\n}\n\nfunction callWrap(obj, name, context, args) {\n if (!obj) {\n throw new Error('Unable to call `' + name + '`, which is undefined or falsey');\n } else if (typeof obj !== 'function') {\n throw new Error('Unable to call `' + name + '`, which is not a function');\n }\n\n return obj.apply(context, args);\n}\n\nfunction contextOrFrameLookup(context, frame, name) {\n var val = frame.lookup(name);\n return (val !== undefined) ?\n val :\n context.lookup(name);\n}\n\nfunction handleError(error, lineno, colno) {\n if (error.lineno) {\n return error;\n } else {\n return new lib.TemplateError(error, lineno, colno);\n }\n}\n\nfunction asyncEach(arr, dimen, iter, cb) {\n if (lib.isArray(arr)) {\n const len = arr.length;\n\n lib.asyncIter(arr, function iterCallback(item, i, next) {\n switch (dimen) {\n case 1:\n iter(item, i, len, next);\n break;\n case 2:\n iter(item[0], item[1], i, len, next);\n break;\n case 3:\n iter(item[0], item[1], item[2], i, len, next);\n break;\n default:\n item.push(i, len, next);\n iter.apply(this, item);\n }\n }, cb);\n } else {\n lib.asyncFor(arr, function iterCallback(key, val, i, len, next) {\n iter(key, val, i, len, next);\n }, cb);\n }\n}\n\nfunction asyncAll(arr, dimen, func, cb) {\n var finished = 0;\n var len;\n var outputArr;\n\n function done(i, output) {\n finished++;\n outputArr[i] = output;\n\n if (finished === len) {\n cb(null, outputArr.join(''));\n }\n }\n\n if (lib.isArray(arr)) {\n len = arr.length;\n outputArr = new Array(len);\n\n if (len === 0) {\n cb(null, '');\n } else {\n for (let i = 0; i < arr.length; i++) {\n const item = arr[i];\n\n switch (dimen) {\n case 1:\n func(item, i, len, done);\n break;\n case 2:\n func(item[0], item[1], i, len, done);\n break;\n case 3:\n func(item[0], item[1], item[2], i, len, done);\n break;\n default:\n item.push(i, len, done);\n func.apply(this, item);\n }\n }\n }\n } else {\n const keys = lib.keys(arr || {});\n len = keys.length;\n outputArr = new Array(len);\n\n if (len === 0) {\n cb(null, '');\n } else {\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n func(k, arr[k], i, len, done);\n }\n }\n }\n}\n\nfunction fromIterator(arr) {\n if (typeof arr !== 'object' || arr === null || lib.isArray(arr)) {\n return arr;\n } else if (supportsIterators && Symbol.iterator in arr) {\n return arrayFrom(arr);\n } else {\n return arr;\n }\n}\n\nmodule.exports = {\n Frame: Frame,\n makeMacro: makeMacro,\n makeKeywordArgs: makeKeywordArgs,\n numArgs: numArgs,\n suppressValue: suppressValue,\n ensureDefined: ensureDefined,\n memberLookup: memberLookup,\n contextOrFrameLookup: contextOrFrameLookup,\n callWrap: callWrap,\n handleError: handleError,\n isArray: lib.isArray,\n keys: lib.keys,\n SafeString: SafeString,\n copySafeness: copySafeness,\n markSafe: markSafe,\n asyncEach: asyncEach,\n asyncAll: asyncAll,\n inOperator: lib.inOperator,\n fromIterator: fromIterator\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/runtime.js","'use strict';\n\nconst Loader = require('./loader');\n\nclass PrecompiledLoader extends Loader {\n constructor(compiledTemplates) {\n super();\n this.precompiled = compiledTemplates || {};\n }\n\n getSource(name) {\n if (this.precompiled[name]) {\n return {\n src: {\n type: 'code',\n obj: this.precompiled[name]\n },\n path: name\n };\n }\n return null;\n }\n}\n\nmodule.exports = {\n PrecompiledLoader: PrecompiledLoader,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/precompiled-loader.js","'use strict';\n\nconst path = require('path');\nconst {EmitterObj} = require('./object');\n\nmodule.exports = class Loader extends EmitterObj {\n resolve(from, to) {\n return path.resolve(path.dirname(from), to);\n }\n\n isRelative(filename) {\n return (filename.indexOf('./') === 0 || filename.indexOf('../') === 0);\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/loader.js","'use strict';\n\n// A simple class system, more documentation to come\nconst EventEmitter = require('events');\nconst lib = require('./lib');\n\nfunction parentWrap(parent, prop) {\n if (typeof parent !== 'function' || typeof prop !== 'function') {\n return prop;\n }\n return function wrap() {\n // Save the current parent method\n const tmp = this.parent;\n\n // Set parent to the previous method, call, and restore\n this.parent = parent;\n const res = prop.apply(this, arguments);\n this.parent = tmp;\n\n return res;\n };\n}\n\nfunction extendClass(cls, name, props) {\n props = props || {};\n\n lib.keys(props).forEach(k => {\n props[k] = parentWrap(cls.prototype[k], props[k]);\n });\n\n class subclass extends cls {\n get typename() {\n return name;\n }\n }\n\n lib._assign(subclass.prototype, props);\n\n return subclass;\n}\n\nclass Obj {\n constructor(...args) {\n // Unfortunately necessary for backwards compatibility\n this.init(...args);\n }\n\n init() {}\n\n get typename() {\n return this.constructor.name;\n }\n\n static extend(name, props) {\n if (typeof name === 'object') {\n props = name;\n name = 'anonymous';\n }\n return extendClass(this, name, props);\n }\n}\n\nclass EmitterObj extends EventEmitter {\n constructor(...args) {\n super();\n // Unfortunately necessary for backwards compatibility\n this.init(...args);\n }\n\n init() {}\n\n get typename() {\n return this.constructor.name;\n }\n\n static extend(name, props) {\n if (typeof name === 'object') {\n props = name;\n name = 'anonymous';\n }\n return extendClass(this, name, props);\n }\n}\n\nmodule.exports = { Obj, EmitterObj };\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/object.js","'use strict';\n\nconst lib = require('./src/lib');\nconst {Environment, Template} = require('./src/environment');\nconst Loader = require('./src/loader');\nconst loaders = require('./src/loaders');\nconst precompile = require('./src/precompile');\nconst compiler = require('./src/compiler');\nconst parser = require('./src/parser');\nconst lexer = require('./src/lexer');\nconst runtime = require('./src/runtime');\nconst nodes = require('./src/nodes');\nconst installJinjaCompat = require('./src/jinja-compat');\n\n// A single instance of an environment, since this is so commonly used\nlet e;\n\nfunction configure(templatesPath, opts) {\n opts = opts || {};\n if (lib.isObject(templatesPath)) {\n opts = templatesPath;\n templatesPath = null;\n }\n\n let TemplateLoader;\n if (loaders.FileSystemLoader) {\n TemplateLoader = new loaders.FileSystemLoader(templatesPath, {\n watch: opts.watch,\n noCache: opts.noCache\n });\n } else if (loaders.WebLoader) {\n TemplateLoader = new loaders.WebLoader(templatesPath, {\n useCache: opts.web && opts.web.useCache,\n async: opts.web && opts.web.async\n });\n }\n\n e = new Environment(TemplateLoader, opts);\n\n if (opts && opts.express) {\n e.express(opts.express);\n }\n\n return e;\n}\n\nmodule.exports = {\n Environment: Environment,\n Template: Template,\n Loader: Loader,\n FileSystemLoader: loaders.FileSystemLoader,\n NodeResolveLoader: loaders.NodeResolveLoader,\n PrecompiledLoader: loaders.PrecompiledLoader,\n WebLoader: loaders.WebLoader,\n compiler: compiler,\n parser: parser,\n lexer: lexer,\n runtime: runtime,\n lib: lib,\n nodes: nodes,\n installJinjaCompat: installJinjaCompat,\n configure: configure,\n reset() {\n e = undefined;\n },\n compile(src, env, path, eagerCompile) {\n if (!e) {\n configure();\n }\n return new Template(src, env, path, eagerCompile);\n },\n render(name, ctx, cb) {\n if (!e) {\n configure();\n }\n\n return e.render(name, ctx, cb);\n },\n renderString(src, ctx, cb) {\n if (!e) {\n configure();\n }\n\n return e.renderString(src, ctx, cb);\n },\n precompile: (precompile) ? precompile.precompile : undefined,\n precompileString: (precompile) ? precompile.precompileString : undefined,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/index.js","'use strict';\n\nconst asap = require('asap');\nconst waterfall = require('a-sync-waterfall');\nconst lib = require('./lib');\nconst compiler = require('./compiler');\nconst filters = require('./filters');\nconst {FileSystemLoader, WebLoader, PrecompiledLoader} = require('./loaders');\nconst tests = require('./tests');\nconst globals = require('./globals');\nconst {Obj, EmitterObj} = require('./object');\nconst globalRuntime = require('./runtime');\nconst {handleError, Frame} = globalRuntime;\nconst expressApp = require('./express-app');\n\n// If the user is using the async API, *always* call it\n// asynchronously even if the template was synchronous.\nfunction callbackAsap(cb, err, res) {\n asap(() => {\n cb(err, res);\n });\n}\n\n/**\n * A no-op template, for use with {% include ignore missing %}\n */\nconst noopTmplSrc = {\n type: 'code',\n obj: {\n root(env, context, frame, runtime, cb) {\n try {\n cb(null, '');\n } catch (e) {\n cb(handleError(e, null, null));\n }\n }\n }\n};\n\nclass Environment extends EmitterObj {\n init(loaders, opts) {\n // The dev flag determines the trace that'll be shown on errors.\n // If set to true, returns the full trace from the error point,\n // otherwise will return trace starting from Template.render\n // (the full trace from within nunjucks may confuse developers using\n // the library)\n // defaults to false\n opts = this.opts = opts || {};\n this.opts.dev = !!opts.dev;\n\n // The autoescape flag sets global autoescaping. If true,\n // every string variable will be escaped by default.\n // If false, strings can be manually escaped using the `escape` filter.\n // defaults to true\n this.opts.autoescape = opts.autoescape != null ? opts.autoescape : true;\n\n // If true, this will make the system throw errors if trying\n // to output a null or undefined value\n this.opts.throwOnUndefined = !!opts.throwOnUndefined;\n this.opts.trimBlocks = !!opts.trimBlocks;\n this.opts.lstripBlocks = !!opts.lstripBlocks;\n\n this.loaders = [];\n\n if (!loaders) {\n // The filesystem loader is only available server-side\n if (FileSystemLoader) {\n this.loaders = [new FileSystemLoader('views')];\n } else if (WebLoader) {\n this.loaders = [new WebLoader('/views')];\n }\n } else {\n this.loaders = lib.isArray(loaders) ? loaders : [loaders];\n }\n\n // It's easy to use precompiled templates: just include them\n // before you configure nunjucks and this will automatically\n // pick it up and use it\n if (typeof window !== 'undefined' && window.nunjucksPrecompiled) {\n this.loaders.unshift(\n new PrecompiledLoader(window.nunjucksPrecompiled)\n );\n }\n\n this._initLoaders();\n\n this.globals = globals();\n this.filters = {};\n this.tests = {};\n this.asyncFilters = [];\n this.extensions = {};\n this.extensionsList = [];\n\n lib._entries(filters).forEach(([name, filter]) => this.addFilter(name, filter));\n lib._entries(tests).forEach(([name, test]) => this.addTest(name, test));\n }\n\n _initLoaders() {\n this.loaders.forEach((loader) => {\n // Caching and cache busting\n loader.cache = {};\n if (typeof loader.on === 'function') {\n loader.on('update', (name, fullname) => {\n loader.cache[name] = null;\n this.emit('update', name, fullname, loader);\n });\n loader.on('load', (name, source) => {\n this.emit('load', name, source, loader);\n });\n }\n });\n }\n\n invalidateCache() {\n this.loaders.forEach((loader) => {\n loader.cache = {};\n });\n }\n\n addExtension(name, extension) {\n extension.__name = name;\n this.extensions[name] = extension;\n this.extensionsList.push(extension);\n return this;\n }\n\n removeExtension(name) {\n var extension = this.getExtension(name);\n if (!extension) {\n return;\n }\n\n this.extensionsList = lib.without(this.extensionsList, extension);\n delete this.extensions[name];\n }\n\n getExtension(name) {\n return this.extensions[name];\n }\n\n hasExtension(name) {\n return !!this.extensions[name];\n }\n\n addGlobal(name, value) {\n this.globals[name] = value;\n return this;\n }\n\n getGlobal(name) {\n if (typeof this.globals[name] === 'undefined') {\n throw new Error('global not found: ' + name);\n }\n return this.globals[name];\n }\n\n addFilter(name, func, async) {\n var wrapped = func;\n\n if (async) {\n this.asyncFilters.push(name);\n }\n this.filters[name] = wrapped;\n return this;\n }\n\n getFilter(name) {\n if (!this.filters[name]) {\n throw new Error('filter not found: ' + name);\n }\n return this.filters[name];\n }\n\n addTest(name, func) {\n this.tests[name] = func;\n return this;\n }\n\n getTest(name) {\n if (!this.tests[name]) {\n throw new Error('test not found: ' + name);\n }\n return this.tests[name];\n }\n\n resolveTemplate(loader, parentName, filename) {\n var isRelative = (loader.isRelative && parentName) ? loader.isRelative(filename) : false;\n return (isRelative && loader.resolve) ? loader.resolve(parentName, filename) : filename;\n }\n\n getTemplate(name, eagerCompile, parentName, ignoreMissing, cb) {\n var that = this;\n var tmpl = null;\n if (name && name.raw) {\n // this fixes autoescape for templates referenced in symbols\n name = name.raw;\n }\n\n if (lib.isFunction(parentName)) {\n cb = parentName;\n parentName = null;\n eagerCompile = eagerCompile || false;\n }\n\n if (lib.isFunction(eagerCompile)) {\n cb = eagerCompile;\n eagerCompile = false;\n }\n\n if (name instanceof Template) {\n tmpl = name;\n } else if (typeof name !== 'string') {\n throw new Error('template names must be a string: ' + name);\n } else {\n for (let i = 0; i < this.loaders.length; i++) {\n const loader = this.loaders[i];\n tmpl = loader.cache[this.resolveTemplate(loader, parentName, name)];\n if (tmpl) {\n break;\n }\n }\n }\n\n if (tmpl) {\n if (eagerCompile) {\n tmpl.compile();\n }\n\n if (cb) {\n cb(null, tmpl);\n return undefined;\n } else {\n return tmpl;\n }\n }\n let syncResult;\n\n const createTemplate = (err, info) => {\n if (!info && !err && !ignoreMissing) {\n err = new Error('template not found: ' + name);\n }\n\n if (err) {\n if (cb) {\n cb(err);\n return;\n } else {\n throw err;\n }\n }\n let newTmpl;\n if (!info) {\n newTmpl = new Template(noopTmplSrc, this, '', eagerCompile);\n } else {\n newTmpl = new Template(info.src, this, info.path, eagerCompile);\n if (!info.noCache) {\n info.loader.cache[name] = newTmpl;\n }\n }\n if (cb) {\n cb(null, newTmpl);\n } else {\n syncResult = newTmpl;\n }\n };\n\n lib.asyncIter(this.loaders, (loader, i, next, done) => {\n function handle(err, src) {\n if (err) {\n done(err);\n } else if (src) {\n src.loader = loader;\n done(null, src);\n } else {\n next();\n }\n }\n\n // Resolve name relative to parentName\n name = that.resolveTemplate(loader, parentName, name);\n\n if (loader.async) {\n loader.getSource(name, handle);\n } else {\n handle(null, loader.getSource(name));\n }\n }, createTemplate);\n\n return syncResult;\n }\n\n express(app) {\n return expressApp(this, app);\n }\n\n render(name, ctx, cb) {\n if (lib.isFunction(ctx)) {\n cb = ctx;\n ctx = null;\n }\n\n // We support a synchronous API to make it easier to migrate\n // existing code to async. This works because if you don't do\n // anything async work, the whole thing is actually run\n // synchronously.\n let syncResult = null;\n\n this.getTemplate(name, (err, tmpl) => {\n if (err && cb) {\n callbackAsap(cb, err);\n } else if (err) {\n throw err;\n } else {\n syncResult = tmpl.render(ctx, cb);\n }\n });\n\n return syncResult;\n }\n\n renderString(src, ctx, opts, cb) {\n if (lib.isFunction(opts)) {\n cb = opts;\n opts = {};\n }\n opts = opts || {};\n\n const tmpl = new Template(src, this, opts.path);\n return tmpl.render(ctx, cb);\n }\n\n waterfall(tasks, callback, forceAsync) {\n return waterfall(tasks, callback, forceAsync);\n }\n}\n\nclass Context extends Obj {\n init(ctx, blocks, env) {\n // Has to be tied to an environment so we can tap into its globals.\n this.env = env || new Environment();\n\n // Make a duplicate of ctx\n this.ctx = lib.extend({}, ctx);\n\n this.blocks = {};\n this.exported = [];\n\n lib.keys(blocks).forEach(name => {\n this.addBlock(name, blocks[name]);\n });\n }\n\n lookup(name) {\n // This is one of the most called functions, so optimize for\n // the typical case where the name isn't in the globals\n if (name in this.env.globals && !(name in this.ctx)) {\n return this.env.globals[name];\n } else {\n return this.ctx[name];\n }\n }\n\n setVariable(name, val) {\n this.ctx[name] = val;\n }\n\n getVariables() {\n return this.ctx;\n }\n\n addBlock(name, block) {\n this.blocks[name] = this.blocks[name] || [];\n this.blocks[name].push(block);\n return this;\n }\n\n getBlock(name) {\n if (!this.blocks[name]) {\n throw new Error('unknown block \"' + name + '\"');\n }\n\n return this.blocks[name][0];\n }\n\n getSuper(env, name, block, frame, runtime, cb) {\n var idx = lib.indexOf(this.blocks[name] || [], block);\n var blk = this.blocks[name][idx + 1];\n var context = this;\n\n if (idx === -1 || !blk) {\n throw new Error('no super block available for \"' + name + '\"');\n }\n\n blk(env, context, frame, runtime, cb);\n }\n\n addExport(name) {\n this.exported.push(name);\n }\n\n getExported() {\n var exported = {};\n this.exported.forEach((name) => {\n exported[name] = this.ctx[name];\n });\n return exported;\n }\n}\n\nclass Template extends Obj {\n init(src, env, path, eagerCompile) {\n this.env = env || new Environment();\n\n if (lib.isObject(src)) {\n switch (src.type) {\n case 'code':\n this.tmplProps = src.obj;\n break;\n case 'string':\n this.tmplStr = src.obj;\n break;\n default:\n throw new Error(\n `Unexpected template object type ${src.type}; expected 'code', or 'string'`);\n }\n } else if (lib.isString(src)) {\n this.tmplStr = src;\n } else {\n throw new Error('src must be a string or an object describing the source');\n }\n\n this.path = path;\n\n if (eagerCompile) {\n try {\n this._compile();\n } catch (err) {\n throw lib._prettifyError(this.path, this.env.opts.dev, err);\n }\n } else {\n this.compiled = false;\n }\n }\n\n render(ctx, parentFrame, cb) {\n if (typeof ctx === 'function') {\n cb = ctx;\n ctx = {};\n } else if (typeof parentFrame === 'function') {\n cb = parentFrame;\n parentFrame = null;\n }\n\n // If there is a parent frame, we are being called from internal\n // code of another template, and the internal system\n // depends on the sync/async nature of the parent template\n // to be inherited, so force an async callback\n const forceAsync = !parentFrame;\n\n // Catch compile errors for async rendering\n try {\n this.compile();\n } catch (e) {\n const err = lib._prettifyError(this.path, this.env.opts.dev, e);\n if (cb) {\n return callbackAsap(cb, err);\n } else {\n throw err;\n }\n }\n\n const context = new Context(ctx || {}, this.blocks, this.env);\n const frame = parentFrame ? parentFrame.push(true) : new Frame();\n frame.topLevel = true;\n let syncResult = null;\n let didError = false;\n\n this.rootRenderFunc(this.env, context, frame, globalRuntime, (err, res) => {\n // TODO: this is actually a bug in the compiled template (because waterfall\n // tasks are both not passing errors up the chain of callbacks AND are not\n // causing a return from the top-most render function). But fixing that\n // will require a more substantial change to the compiler.\n if (didError && cb && typeof res !== 'undefined') {\n // prevent multiple calls to cb\n return;\n }\n\n if (err) {\n err = lib._prettifyError(this.path, this.env.opts.dev, err);\n didError = true;\n }\n\n if (cb) {\n if (forceAsync) {\n callbackAsap(cb, err, res);\n } else {\n cb(err, res);\n }\n } else {\n if (err) {\n throw err;\n }\n syncResult = res;\n }\n });\n\n return syncResult;\n }\n\n\n getExported(ctx, parentFrame, cb) { // eslint-disable-line consistent-return\n if (typeof ctx === 'function') {\n cb = ctx;\n ctx = {};\n }\n\n if (typeof parentFrame === 'function') {\n cb = parentFrame;\n parentFrame = null;\n }\n\n // Catch compile errors for async rendering\n try {\n this.compile();\n } catch (e) {\n if (cb) {\n return cb(e);\n } else {\n throw e;\n }\n }\n\n const frame = parentFrame ? parentFrame.push() : new Frame();\n frame.topLevel = true;\n\n // Run the rootRenderFunc to populate the context with exported vars\n const context = new Context(ctx || {}, this.blocks, this.env);\n this.rootRenderFunc(this.env, context, frame, globalRuntime, (err) => {\n if (err) {\n cb(err, null);\n } else {\n cb(null, context.getExported());\n }\n });\n }\n\n compile() {\n if (!this.compiled) {\n this._compile();\n }\n }\n\n _compile() {\n var props;\n\n if (this.tmplProps) {\n props = this.tmplProps;\n } else {\n const source = compiler.compile(this.tmplStr,\n this.env.asyncFilters,\n this.env.extensionsList,\n this.path,\n this.env.opts);\n\n const func = new Function(source); // eslint-disable-line no-new-func\n props = func();\n }\n\n this.blocks = this._getBlocks(props);\n this.rootRenderFunc = props.root;\n this.compiled = true;\n }\n\n _getBlocks(props) {\n var blocks = {};\n\n lib.keys(props).forEach((k) => {\n if (k.slice(0, 2) === 'b_') {\n blocks[k.slice(2)] = props[k];\n }\n });\n\n return blocks;\n }\n}\n\nmodule.exports = {\n Environment: Environment,\n Template: Template\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/environment.js","\"use strict\";\n\n// rawAsap provides everything we need except exception management.\nvar rawAsap = require(\"./raw\");\n// RawTasks are recycled to reduce GC churn.\nvar freeTasks = [];\n// We queue errors to ensure they are thrown in right order (FIFO).\n// Array-as-queue is good enough here, since we are just dealing with exceptions.\nvar pendingErrors = [];\nvar requestErrorThrow = rawAsap.makeRequestCallFromTimer(throwFirstError);\n\nfunction throwFirstError() {\n if (pendingErrors.length) {\n throw pendingErrors.shift();\n }\n}\n\n/**\n * Calls a task as soon as possible after returning, in its own event, with priority\n * over other events like animation, reflow, and repaint. An error thrown from an\n * event will not interrupt, nor even substantially slow down the processing of\n * other events, but will be rather postponed to a lower priority event.\n * @param {{call}} task A callable object, typically a function that takes no\n * arguments.\n */\nmodule.exports = asap;\nfunction asap(task) {\n var rawTask;\n if (freeTasks.length) {\n rawTask = freeTasks.pop();\n } else {\n rawTask = new RawTask();\n }\n rawTask.task = task;\n rawAsap(rawTask);\n}\n\n// We wrap tasks with recyclable task objects. A task object implements\n// `call`, just like a function.\nfunction RawTask() {\n this.task = null;\n}\n\n// The sole purpose of wrapping the task is to catch the exception and recycle\n// the task object after its single use.\nRawTask.prototype.call = function () {\n try {\n this.task.call();\n } catch (error) {\n if (asap.onerror) {\n // This hook exists purely for testing purposes.\n // Its name will be periodically randomized to break any code that\n // depends on its existence.\n asap.onerror(error);\n } else {\n // In a web browser, exceptions are not fatal. However, to avoid\n // slowing down the queue of pending tasks, we rethrow the error in a\n // lower priority turn.\n pendingErrors.push(error);\n requestErrorThrow();\n }\n } finally {\n this.task = null;\n freeTasks[freeTasks.length] = this;\n }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/asap/browser-asap.js\n// module id = 8\n// module chunks = 0","\"use strict\";\n\n// Use the fastest means possible to execute a task in its own turn, with\n// priority over other events including IO, animation, reflow, and redraw\n// events in browsers.\n//\n// An exception thrown by a task will permanently interrupt the processing of\n// subsequent tasks. The higher level `asap` function ensures that if an\n// exception is thrown by a task, that the task queue will continue flushing as\n// soon as possible, but if you use `rawAsap` directly, you are responsible to\n// either ensure that no exceptions are thrown from your task, or to manually\n// call `rawAsap.requestFlush` if an exception is thrown.\nmodule.exports = rawAsap;\nfunction rawAsap(task) {\n if (!queue.length) {\n requestFlush();\n flushing = true;\n }\n // Equivalent to push, but avoids a function call.\n queue[queue.length] = task;\n}\n\nvar queue = [];\n// Once a flush has been requested, no further calls to `requestFlush` are\n// necessary until the next `flush` completes.\nvar flushing = false;\n// `requestFlush` is an implementation-specific method that attempts to kick\n// off a `flush` event as quickly as possible. `flush` will attempt to exhaust\n// the event queue before yielding to the browser's own event loop.\nvar requestFlush;\n// The position of the next task to execute in the task queue. This is\n// preserved between calls to `flush` so that it can be resumed if\n// a task throws an exception.\nvar index = 0;\n// If a task schedules additional tasks recursively, the task queue can grow\n// unbounded. To prevent memory exhaustion, the task queue will periodically\n// truncate already-completed tasks.\nvar capacity = 1024;\n\n// The flush function processes all tasks that have been scheduled with\n// `rawAsap` unless and until one of those tasks throws an exception.\n// If a task throws an exception, `flush` ensures that its state will remain\n// consistent and will resume where it left off when called again.\n// However, `flush` does not make any arrangements to be called again if an\n// exception is thrown.\nfunction flush() {\n while (index < queue.length) {\n var currentIndex = index;\n // Advance the index before calling the task. This ensures that we will\n // begin flushing on the next task the task throws an error.\n index = index + 1;\n queue[currentIndex].call();\n // Prevent leaking memory for long chains of recursive calls to `asap`.\n // If we call `asap` within tasks scheduled by `asap`, the queue will\n // grow, but to avoid an O(n) walk for every task we execute, we don't\n // shift tasks off the queue after they have been executed.\n // Instead, we periodically shift 1024 tasks off the queue.\n if (index > capacity) {\n // Manually shift all values starting at the index back to the\n // beginning of the queue.\n for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {\n queue[scan] = queue[scan + index];\n }\n queue.length -= index;\n index = 0;\n }\n }\n queue.length = 0;\n index = 0;\n flushing = false;\n}\n\n// `requestFlush` is implemented using a strategy based on data collected from\n// every available SauceLabs Selenium web driver worker at time of writing.\n// https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593\n\n// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that\n// have WebKitMutationObserver but not un-prefixed MutationObserver.\n// Must use `global` or `self` instead of `window` to work in both frames and web\n// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop.\n\n/* globals self */\nvar scope = typeof global !== \"undefined\" ? global : self;\nvar BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver;\n\n// MutationObservers are desirable because they have high priority and work\n// reliably everywhere they are implemented.\n// They are implemented in all modern browsers.\n//\n// - Android 4-4.3\n// - Chrome 26-34\n// - Firefox 14-29\n// - Internet Explorer 11\n// - iPad Safari 6-7.1\n// - iPhone Safari 7-7.1\n// - Safari 6-7\nif (typeof BrowserMutationObserver === \"function\") {\n requestFlush = makeRequestCallFromMutationObserver(flush);\n\n// MessageChannels are desirable because they give direct access to the HTML\n// task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera\n// 11-12, and in web workers in many engines.\n// Although message channels yield to any queued rendering and IO tasks, they\n// would be better than imposing the 4ms delay of timers.\n// However, they do not work reliably in Internet Explorer or Safari.\n\n// Internet Explorer 10 is the only browser that has setImmediate but does\n// not have MutationObservers.\n// Although setImmediate yields to the browser's renderer, it would be\n// preferrable to falling back to setTimeout since it does not have\n// the minimum 4ms penalty.\n// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and\n// Desktop to a lesser extent) that renders both setImmediate and\n// MessageChannel useless for the purposes of ASAP.\n// https://github.com/kriskowal/q/issues/396\n\n// Timers are implemented universally.\n// We fall back to timers in workers in most engines, and in foreground\n// contexts in the following browsers.\n// However, note that even this simple case requires nuances to operate in a\n// broad spectrum of browsers.\n//\n// - Firefox 3-13\n// - Internet Explorer 6-9\n// - iPad Safari 4.3\n// - Lynx 2.8.7\n} else {\n requestFlush = makeRequestCallFromTimer(flush);\n}\n\n// `requestFlush` requests that the high priority event queue be flushed as\n// soon as possible.\n// This is useful to prevent an error thrown in a task from stalling the event\n// queue if the exception handled by Node.js’s\n// `process.on(\"uncaughtException\")` or by a domain.\nrawAsap.requestFlush = requestFlush;\n\n// To request a high priority event, we induce a mutation observer by toggling\n// the text of a text node between \"1\" and \"-1\".\nfunction makeRequestCallFromMutationObserver(callback) {\n var toggle = 1;\n var observer = new BrowserMutationObserver(callback);\n var node = document.createTextNode(\"\");\n observer.observe(node, {characterData: true});\n return function requestCall() {\n toggle = -toggle;\n node.data = toggle;\n };\n}\n\n// The message channel technique was discovered by Malte Ubl and was the\n// original foundation for this library.\n// http://www.nonblocking.io/2011/06/windownexttick.html\n\n// Safari 6.0.5 (at least) intermittently fails to create message ports on a\n// page's first load. Thankfully, this version of Safari supports\n// MutationObservers, so we don't need to fall back in that case.\n\n// function makeRequestCallFromMessageChannel(callback) {\n// var channel = new MessageChannel();\n// channel.port1.onmessage = callback;\n// return function requestCall() {\n// channel.port2.postMessage(0);\n// };\n// }\n\n// For reasons explained above, we are also unable to use `setImmediate`\n// under any circumstances.\n// Even if we were, there is another bug in Internet Explorer 10.\n// It is not sufficient to assign `setImmediate` to `requestFlush` because\n// `setImmediate` must be called *by name* and therefore must be wrapped in a\n// closure.\n// Never forget.\n\n// function makeRequestCallFromSetImmediate(callback) {\n// return function requestCall() {\n// setImmediate(callback);\n// };\n// }\n\n// Safari 6.0 has a problem where timers will get lost while the user is\n// scrolling. This problem does not impact ASAP because Safari 6.0 supports\n// mutation observers, so that implementation is used instead.\n// However, if we ever elect to use timers in Safari, the prevalent work-around\n// is to add a scroll event listener that calls for a flush.\n\n// `setTimeout` does not call the passed callback if the delay is less than\n// approximately 7 in web workers in Firefox 8 through 18, and sometimes not\n// even then.\n\nfunction makeRequestCallFromTimer(callback) {\n return function requestCall() {\n // We dispatch a timeout with a specified delay of 0 for engines that\n // can reliably accommodate that request. This will usually be snapped\n // to a 4 milisecond delay, but once we're flushing, there's no delay\n // between events.\n var timeoutHandle = setTimeout(handleTimer, 0);\n // However, since this timer gets frequently dropped in Firefox\n // workers, we enlist an interval handle that will try to fire\n // an event 20 times per second until it succeeds.\n var intervalHandle = setInterval(handleTimer, 50);\n\n function handleTimer() {\n // Whichever timer succeeds will cancel both timers and\n // execute the callback.\n clearTimeout(timeoutHandle);\n clearInterval(intervalHandle);\n callback();\n }\n };\n}\n\n// This is for `asap.js` only.\n// Its name will be periodically randomized to break any code that depends on\n// its existence.\nrawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer;\n\n// ASAP was originally a nextTick shim included in Q. This was factored out\n// into this ASAP package. It was later adapted to RSVP which made further\n// amendments. These decisions, particularly to marginalize MessageChannel and\n// to capture the MutationObserver implementation in a closure, were integrated\n// back into ASAP proper.\n// https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/asap/browser-raw.js\n// module id = 9\n// module chunks = 0","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 10\n// module chunks = 0","// MIT license (by Elan Shanker).\n(function(globals) {\n 'use strict';\n\n var executeSync = function(){\n var args = Array.prototype.slice.call(arguments);\n if (typeof args[0] === 'function'){\n args[0].apply(null, args.splice(1));\n }\n };\n\n var executeAsync = function(fn){\n if (typeof setImmediate === 'function') {\n setImmediate(fn);\n } else if (typeof process !== 'undefined' && process.nextTick) {\n process.nextTick(fn);\n } else {\n setTimeout(fn, 0);\n }\n };\n\n var makeIterator = function (tasks) {\n var makeCallback = function (index) {\n var fn = function () {\n if (tasks.length) {\n tasks[index].apply(null, arguments);\n }\n return fn.next();\n };\n fn.next = function () {\n return (index < tasks.length - 1) ? makeCallback(index + 1): null;\n };\n return fn;\n };\n return makeCallback(0);\n };\n \n var _isArray = Array.isArray || function(maybeArray){\n return Object.prototype.toString.call(maybeArray) === '[object Array]';\n };\n\n var waterfall = function (tasks, callback, forceAsync) {\n var nextTick = forceAsync ? executeAsync : executeSync;\n callback = callback || function () {};\n if (!_isArray(tasks)) {\n var err = new Error('First argument to waterfall must be an array of functions');\n return callback(err);\n }\n if (!tasks.length) {\n return callback();\n }\n var wrapIterator = function (iterator) {\n return function (err) {\n if (err) {\n callback.apply(null, arguments);\n callback = function () {};\n } else {\n var args = Array.prototype.slice.call(arguments, 1);\n var next = iterator.next();\n if (next) {\n args.push(wrapIterator(next));\n } else {\n args.push(callback);\n }\n nextTick(function () {\n iterator.apply(null, args);\n });\n }\n };\n };\n wrapIterator(makeIterator(tasks))();\n };\n\n if (typeof define !== 'undefined' && define.amd) {\n define([], function () {\n return waterfall;\n }); // RequireJS\n } else if (typeof module !== 'undefined' && module.exports) {\n module.exports = waterfall; // CommonJS\n } else {\n globals.waterfall = waterfall; // <script>\n }\n})(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/a-sync-waterfall/index.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar lib = require('./lib');\nvar r = require('./runtime');\n\nvar exports = module.exports = {};\n\nfunction normalize(value, defaultValue) {\n if (value === null || value === undefined || value === false) {\n return defaultValue;\n }\n return value;\n}\n\nexports.abs = Math.abs;\n\nfunction isNaN(num) {\n return num !== num; // eslint-disable-line no-self-compare\n}\n\nfunction batch(arr, linecount, fillWith) {\n var i;\n var res = [];\n var tmp = [];\n\n for (i = 0; i < arr.length; i++) {\n if (i % linecount === 0 && tmp.length) {\n res.push(tmp);\n tmp = [];\n }\n\n tmp.push(arr[i]);\n }\n\n if (tmp.length) {\n if (fillWith) {\n for (i = tmp.length; i < linecount; i++) {\n tmp.push(fillWith);\n }\n }\n\n res.push(tmp);\n }\n\n return res;\n}\n\nexports.batch = batch;\n\nfunction capitalize(str) {\n str = normalize(str, '');\n const ret = str.toLowerCase();\n return r.copySafeness(str, ret.charAt(0).toUpperCase() + ret.slice(1));\n}\n\nexports.capitalize = capitalize;\n\nfunction center(str, width) {\n str = normalize(str, '');\n width = width || 80;\n\n if (str.length >= width) {\n return str;\n }\n\n const spaces = width - str.length;\n const pre = lib.repeat(' ', (spaces / 2) - (spaces % 2));\n const post = lib.repeat(' ', spaces / 2);\n return r.copySafeness(str, pre + str + post);\n}\n\nexports.center = center;\n\nfunction default_(val, def, bool) {\n if (bool) {\n return val || def;\n } else {\n return (val !== undefined) ? val : def;\n }\n}\n\n// TODO: it is confusing to export something called 'default'\nexports['default'] = default_; // eslint-disable-line dot-notation\n\nfunction dictsort(val, caseSensitive, by) {\n if (!lib.isObject(val)) {\n throw new lib.TemplateError('dictsort filter: val must be an object');\n }\n\n let array = [];\n // deliberately include properties from the object's prototype\n for (let k in val) { // eslint-disable-line guard-for-in, no-restricted-syntax\n array.push([k, val[k]]);\n }\n\n let si;\n if (by === undefined || by === 'key') {\n si = 0;\n } else if (by === 'value') {\n si = 1;\n } else {\n throw new lib.TemplateError(\n 'dictsort filter: You can only sort by either key or value');\n }\n\n array.sort((t1, t2) => {\n var a = t1[si];\n var b = t2[si];\n\n if (!caseSensitive) {\n if (lib.isString(a)) {\n a = a.toUpperCase();\n }\n if (lib.isString(b)) {\n b = b.toUpperCase();\n }\n }\n\n return a > b ? 1 : (a === b ? 0 : -1); // eslint-disable-line no-nested-ternary\n });\n\n return array;\n}\n\nexports.dictsort = dictsort;\n\nfunction dump(obj, spaces) {\n return JSON.stringify(obj, null, spaces);\n}\n\nexports.dump = dump;\n\nfunction escape(str) {\n if (str instanceof r.SafeString) {\n return str;\n }\n str = (str === null || str === undefined) ? '' : str;\n return r.markSafe(lib.escape(str.toString()));\n}\n\nexports.escape = escape;\n\nfunction safe(str) {\n if (str instanceof r.SafeString) {\n return str;\n }\n str = (str === null || str === undefined) ? '' : str;\n return r.markSafe(str.toString());\n}\n\nexports.safe = safe;\n\nfunction first(arr) {\n return arr[0];\n}\n\nexports.first = first;\n\nfunction forceescape(str) {\n str = (str === null || str === undefined) ? '' : str;\n return r.markSafe(lib.escape(str.toString()));\n}\n\nexports.forceescape = forceescape;\n\nfunction groupby(arr, attr) {\n return lib.groupBy(arr, attr, this.env.opts.throwOnUndefined);\n}\n\nexports.groupby = groupby;\n\nfunction indent(str, width, indentfirst) {\n str = normalize(str, '');\n\n if (str === '') {\n return '';\n }\n\n width = width || 4;\n // let res = '';\n const lines = str.split('\\n');\n const sp = lib.repeat(' ', width);\n\n const res = lines.map((l, i) => {\n return (i === 0 && !indentfirst) ? l : `${sp}${l}`;\n }).join('\\n');\n\n return r.copySafeness(str, res);\n}\n\nexports.indent = indent;\n\nfunction join(arr, del, attr) {\n del = del || '';\n\n if (attr) {\n arr = lib.map(arr, (v) => v[attr]);\n }\n\n return arr.join(del);\n}\n\nexports.join = join;\n\nfunction last(arr) {\n return arr[arr.length - 1];\n}\n\nexports.last = last;\n\nfunction lengthFilter(val) {\n var value = normalize(val, '');\n\n if (value !== undefined) {\n if (\n (typeof Map === 'function' && value instanceof Map) ||\n (typeof Set === 'function' && value instanceof Set)\n ) {\n // ECMAScript 2015 Maps and Sets\n return value.size;\n }\n if (lib.isObject(value) && !(value instanceof r.SafeString)) {\n // Objects (besides SafeStrings), non-primative Arrays\n return lib.keys(value).length;\n }\n return value.length;\n }\n return 0;\n}\n\nexports.length = lengthFilter;\n\nfunction list(val) {\n if (lib.isString(val)) {\n return val.split('');\n } else if (lib.isObject(val)) {\n return lib._entries(val || {}).map(([key, value]) => ({key, value}));\n } else if (lib.isArray(val)) {\n return val;\n } else {\n throw new lib.TemplateError('list filter: type not iterable');\n }\n}\n\nexports.list = list;\n\nfunction lower(str) {\n str = normalize(str, '');\n return str.toLowerCase();\n}\n\nexports.lower = lower;\n\nfunction nl2br(str) {\n if (str === null || str === undefined) {\n return '';\n }\n return r.copySafeness(str, str.replace(/\\r\\n|\\n/g, '<br />\\n'));\n}\n\nexports.nl2br = nl2br;\n\nfunction random(arr) {\n return arr[Math.floor(Math.random() * arr.length)];\n}\n\nexports.random = random;\n\n/**\n * Construct select or reject filter\n *\n * @param {boolean} expectedTestResult\n * @returns {function(array, string, *): array}\n */\nfunction getSelectOrReject(expectedTestResult) {\n function filter(arr, testName = 'truthy', secondArg) {\n const context = this;\n const test = context.env.getTest(testName);\n\n return lib.toArray(arr).filter(function examineTestResult(item) {\n return test.call(context, item, secondArg) === expectedTestResult;\n });\n }\n\n return filter;\n}\n\nexports.reject = getSelectOrReject(false);\n\nfunction rejectattr(arr, attr) {\n return arr.filter((item) => !item[attr]);\n}\n\nexports.rejectattr = rejectattr;\n\nexports.select = getSelectOrReject(true);\n\nfunction selectattr(arr, attr) {\n return arr.filter((item) => !!item[attr]);\n}\n\nexports.selectattr = selectattr;\n\nfunction replace(str, old, new_, maxCount) {\n var originalStr = str;\n\n if (old instanceof RegExp) {\n return str.replace(old, new_);\n }\n\n if (typeof maxCount === 'undefined') {\n maxCount = -1;\n }\n\n let res = ''; // Output\n\n // Cast Numbers in the search term to string\n if (typeof old === 'number') {\n old = '' + old;\n } else if (typeof old !== 'string') {\n // If it is something other than number or string,\n // return the original string\n return str;\n }\n\n // Cast numbers in the replacement to string\n if (typeof str === 'number') {\n str = '' + str;\n }\n\n // If by now, we don't have a string, throw it back\n if (typeof str !== 'string' && !(str instanceof r.SafeString)) {\n return str;\n }\n\n // ShortCircuits\n if (old === '') {\n // Mimic the python behaviour: empty string is replaced\n // by replacement e.g. \"abc\"|replace(\"\", \".\") -> .a.b.c.\n res = new_ + str.split('').join(new_) + new_;\n return r.copySafeness(str, res);\n }\n\n let nextIndex = str.indexOf(old);\n // if # of replacements to perform is 0, or the string to does\n // not contain the old value, return the string\n if (maxCount === 0 || nextIndex === -1) {\n return str;\n }\n\n let pos = 0;\n let count = 0; // # of replacements made\n\n while (nextIndex > -1 && (maxCount === -1 || count < maxCount)) {\n // Grab the next chunk of src string and add it with the\n // replacement, to the result\n res += str.substring(pos, nextIndex) + new_;\n // Increment our pointer in the src string\n pos = nextIndex + old.length;\n count++;\n // See if there are any more replacements to be made\n nextIndex = str.indexOf(old, pos);\n }\n\n // We've either reached the end, or done the max # of\n // replacements, tack on any remaining string\n if (pos < str.length) {\n res += str.substring(pos);\n }\n\n return r.copySafeness(originalStr, res);\n}\n\nexports.replace = replace;\n\nfunction reverse(val) {\n var arr;\n if (lib.isString(val)) {\n arr = list(val);\n } else {\n // Copy it\n arr = lib.map(val, v => v);\n }\n\n arr.reverse();\n\n if (lib.isString(val)) {\n return r.copySafeness(val, arr.join(''));\n }\n return arr;\n}\n\nexports.reverse = reverse;\n\nfunction round(val, precision, method) {\n precision = precision || 0;\n const factor = Math.pow(10, precision);\n let rounder;\n\n if (method === 'ceil') {\n rounder = Math.ceil;\n } else if (method === 'floor') {\n rounder = Math.floor;\n } else {\n rounder = Math.round;\n }\n\n return rounder(val * factor) / factor;\n}\n\nexports.round = round;\n\nfunction slice(arr, slices, fillWith) {\n const sliceLength = Math.floor(arr.length / slices);\n const extra = arr.length % slices;\n const res = [];\n let offset = 0;\n\n for (let i = 0; i < slices; i++) {\n const start = offset + (i * sliceLength);\n if (i < extra) {\n offset++;\n }\n const end = offset + ((i + 1) * sliceLength);\n\n const currSlice = arr.slice(start, end);\n if (fillWith && i >= extra) {\n currSlice.push(fillWith);\n }\n res.push(currSlice);\n }\n\n return res;\n}\n\nexports.slice = slice;\n\nfunction sum(arr, attr, start = 0) {\n if (attr) {\n arr = lib.map(arr, (v) => v[attr]);\n }\n\n return start + arr.reduce((a, b) => a + b, 0);\n}\n\nexports.sum = sum;\n\nexports.sort = r.makeMacro(\n ['value', 'reverse', 'case_sensitive', 'attribute'], [],\n function sortFilter(arr, reversed, caseSens, attr) {\n // Copy it\n let array = lib.map(arr, v => v);\n let getAttribute = lib.getAttrGetter(attr);\n\n array.sort((a, b) => {\n let x = (attr) ? getAttribute(a) : a;\n let y = (attr) ? getAttribute(b) : b;\n\n if (\n this.env.opts.throwOnUndefined &&\n attr && (x === undefined || y === undefined)\n ) {\n throw new TypeError(`sort: attribute \"${attr}\" resolved to undefined`);\n }\n\n if (!caseSens && lib.isString(x) && lib.isString(y)) {\n x = x.toLowerCase();\n y = y.toLowerCase();\n }\n\n if (x < y) {\n return reversed ? 1 : -1;\n } else if (x > y) {\n return reversed ? -1 : 1;\n } else {\n return 0;\n }\n });\n\n return array;\n });\n\nfunction string(obj) {\n return r.copySafeness(obj, obj);\n}\n\nexports.string = string;\n\nfunction striptags(input, preserveLinebreaks) {\n input = normalize(input, '');\n let tags = /<\\/?([a-z][a-z0-9]*)\\b[^>]*>|<!--[\\s\\S]*?-->/gi;\n let trimmedInput = trim(input.replace(tags, ''));\n let res = '';\n if (preserveLinebreaks) {\n res = trimmedInput\n .replace(/^ +| +$/gm, '') // remove leading and trailing spaces\n .replace(/ +/g, ' ') // squash adjacent spaces\n .replace(/(\\r\\n)/g, '\\n') // normalize linebreaks (CRLF -> LF)\n .replace(/\\n\\n\\n+/g, '\\n\\n'); // squash abnormal adjacent linebreaks\n } else {\n res = trimmedInput.replace(/\\s+/gi, ' ');\n }\n return r.copySafeness(input, res);\n}\n\nexports.striptags = striptags;\n\nfunction title(str) {\n str = normalize(str, '');\n let words = str.split(' ').map(word => capitalize(word));\n return r.copySafeness(str, words.join(' '));\n}\n\nexports.title = title;\n\nfunction trim(str) {\n return r.copySafeness(str, str.replace(/^\\s*|\\s*$/g, ''));\n}\n\nexports.trim = trim;\n\nfunction truncate(input, length, killwords, end) {\n var orig = input;\n input = normalize(input, '');\n length = length || 255;\n\n if (input.length <= length) {\n return input;\n }\n\n if (killwords) {\n input = input.substring(0, length);\n } else {\n let idx = input.lastIndexOf(' ', length);\n if (idx === -1) {\n idx = length;\n }\n\n input = input.substring(0, idx);\n }\n\n input += (end !== undefined && end !== null) ? end : '...';\n return r.copySafeness(orig, input);\n}\n\nexports.truncate = truncate;\n\nfunction upper(str) {\n str = normalize(str, '');\n return str.toUpperCase();\n}\n\nexports.upper = upper;\n\nfunction urlencode(obj) {\n var enc = encodeURIComponent;\n if (lib.isString(obj)) {\n return enc(obj);\n } else {\n let keyvals = (lib.isArray(obj)) ? obj : lib._entries(obj);\n return keyvals.map(([k, v]) => `${enc(k)}=${enc(v)}`).join('&');\n }\n}\n\nexports.urlencode = urlencode;\n\n// For the jinja regexp, see\n// https://github.com/mitsuhiko/jinja2/blob/f15b814dcba6aa12bc74d1f7d0c881d55f7126be/jinja2/utils.py#L20-L23\nconst puncRe = /^(?:\\(|<|<)?(.*?)(?:\\.|,|\\)|\\n|>)?$/;\n// from http://blog.gerv.net/2011/05/html5_email_address_regexp/\nconst emailRe = /^[\\w.!#$%&'*+\\-\\/=?\\^`{|}~]+@[a-z\\d\\-]+(\\.[a-z\\d\\-]+)+$/i;\nconst httpHttpsRe = /^https?:\\/\\/.*$/;\nconst wwwRe = /^www\\./;\nconst tldRe = /\\.(?:org|net|com)(?:\\:|\\/|$)/;\n\nfunction urlize(str, length, nofollow) {\n if (isNaN(length)) {\n length = Infinity;\n }\n\n const noFollowAttr = (nofollow === true ? ' rel=\"nofollow\"' : '');\n\n const words = str.split(/(\\s+)/).filter((word) => {\n // If the word has no length, bail. This can happen for str with\n // trailing whitespace.\n return word && word.length;\n }).map((word) => {\n var matches = word.match(puncRe);\n var possibleUrl = (matches) ? matches[1] : word;\n var shortUrl = possibleUrl.substr(0, length);\n\n // url that starts with http or https\n if (httpHttpsRe.test(possibleUrl)) {\n return `<a href=\"${possibleUrl}\"${noFollowAttr}>${shortUrl}</a>`;\n }\n\n // url that starts with www.\n if (wwwRe.test(possibleUrl)) {\n return `<a href=\"http://${possibleUrl}\"${noFollowAttr}>${shortUrl}</a>`;\n }\n\n // an email address of the form username@domain.tld\n if (emailRe.test(possibleUrl)) {\n return `<a href=\"mailto:${possibleUrl}\">${possibleUrl}</a>`;\n }\n\n // url that ends in .com, .org or .net that is not an email address\n if (tldRe.test(possibleUrl)) {\n return `<a href=\"http://${possibleUrl}\"${noFollowAttr}>${shortUrl}</a>`;\n }\n\n return word;\n });\n\n return words.join('');\n}\n\nexports.urlize = urlize;\n\nfunction wordcount(str) {\n str = normalize(str, '');\n const words = (str) ? str.match(/\\w+/g) : null;\n return (words) ? words.length : null;\n}\n\nexports.wordcount = wordcount;\n\nfunction float(val, def) {\n var res = parseFloat(val);\n return (isNaN(res)) ? def : res;\n}\n\nexports.float = float;\n\nconst intFilter = r.makeMacro(\n ['value', 'default', 'base'],\n [],\n function doInt(value, defaultValue, base = 10) {\n var res = parseInt(value, base);\n return (isNaN(res)) ? defaultValue : res;\n }\n);\n\nexports.int = intFilter;\n\n// Aliases\nexports.d = exports.default;\nexports.e = exports.escape;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/filters.js","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/node_modules/events/events.js\n// module id = 13\n// module chunks = 0","'use strict';\n\nvar SafeString = require('./runtime').SafeString;\n\n/**\n * Returns `true` if the object is a function, otherwise `false`.\n * @param { any } value\n * @returns { boolean }\n */\nfunction callable(value) {\n return typeof value === 'function';\n}\n\nexports.callable = callable;\n\n/**\n * Returns `true` if the object is strictly not `undefined`.\n * @param { any } value\n * @returns { boolean }\n */\nfunction defined(value) {\n return value !== undefined;\n}\n\nexports.defined = defined;\n\n/**\n * Returns `true` if the operand (one) is divisble by the test's argument\n * (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction divisibleby(one, two) {\n return (one % two) === 0;\n}\n\nexports.divisibleby = divisibleby;\n\n/**\n * Returns true if the string has been escaped (i.e., is a SafeString).\n * @param { any } value\n * @returns { boolean }\n */\nfunction escaped(value) {\n return value instanceof SafeString;\n}\n\nexports.escaped = escaped;\n\n/**\n * Returns `true` if the arguments are strictly equal.\n * @param { any } one\n * @param { any } two\n */\nfunction equalto(one, two) {\n return one === two;\n}\n\nexports.equalto = equalto;\n\n// Aliases\nexports.eq = exports.equalto;\nexports.sameas = exports.equalto;\n\n/**\n * Returns `true` if the value is evenly divisible by 2.\n * @param { number } value\n * @returns { boolean }\n */\nfunction even(value) {\n return value % 2 === 0;\n}\n\nexports.even = even;\n\n/**\n * Returns `true` if the value is falsy - if I recall correctly, '', 0, false,\n * undefined, NaN or null. I don't know if we should stick to the default JS\n * behavior or attempt to replicate what Python believes should be falsy (i.e.,\n * empty arrays, empty dicts, not 0...).\n * @param { any } value\n * @returns { boolean }\n */\nfunction falsy(value) {\n return !value;\n}\n\nexports.falsy = falsy;\n\n/**\n * Returns `true` if the operand (one) is greater or equal to the test's\n * argument (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction ge(one, two) {\n return one >= two;\n}\n\nexports.ge = ge;\n\n/**\n * Returns `true` if the operand (one) is greater than the test's argument\n * (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction greaterthan(one, two) {\n return one > two;\n}\n\nexports.greaterthan = greaterthan;\n\n// alias\nexports.gt = exports.greaterthan;\n\n/**\n * Returns `true` if the operand (one) is less than or equal to the test's\n * argument (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction le(one, two) {\n return one <= two;\n}\n\nexports.le = le;\n\n/**\n * Returns `true` if the operand (one) is less than the test's passed argument\n * (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction lessthan(one, two) {\n return one < two;\n}\n\nexports.lessthan = lessthan;\n\n// alias\nexports.lt = exports.lessthan;\n\n/**\n * Returns `true` if the string is lowercased.\n * @param { string } value\n * @returns { boolean }\n */\nfunction lower(value) {\n return value.toLowerCase() === value;\n}\n\nexports.lower = lower;\n\n/**\n * Returns `true` if the operand (one) is less than or equal to the test's\n * argument (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction ne(one, two) {\n return one !== two;\n}\n\nexports.ne = ne;\n\n/**\n * Returns true if the value is strictly equal to `null`.\n * @param { any }\n * @returns { boolean }\n */\nfunction nullTest(value) {\n return value === null;\n}\n\nexports.null = nullTest;\n\n/**\n * Returns true if value is a number.\n * @param { any }\n * @returns { boolean }\n */\nfunction number(value) {\n return typeof value === 'number';\n}\n\nexports.number = number;\n\n/**\n * Returns `true` if the value is *not* evenly divisible by 2.\n * @param { number } value\n * @returns { boolean }\n */\nfunction odd(value) {\n return value % 2 === 1;\n}\n\nexports.odd = odd;\n\n/**\n * Returns `true` if the value is a string, `false` if not.\n * @param { any } value\n * @returns { boolean }\n */\nfunction string(value) {\n return typeof value === 'string';\n}\n\nexports.string = string;\n\n/**\n * Returns `true` if the value is not in the list of things considered falsy:\n * '', null, undefined, 0, NaN and false.\n * @param { any } value\n * @returns { boolean }\n */\nfunction truthy(value) {\n return !!value;\n}\n\nexports.truthy = truthy;\n\n/**\n * Returns `true` if the value is undefined.\n * @param { any } value\n * @returns { boolean }\n */\nfunction undefinedTest(value) {\n return value === undefined;\n}\n\nexports.undefined = undefinedTest;\n\n/**\n * Returns `true` if the string is uppercased.\n * @param { string } value\n * @returns { boolean }\n */\nfunction upper(value) {\n return value.toUpperCase() === value;\n}\n\nexports.upper = upper;\n\n/**\n * If ES6 features are available, returns `true` if the value implements the\n * `Symbol.iterator` method. If not, it's a string or Array.\n *\n * Could potentially cause issues if a browser exists that has Set and Map but\n * not Symbol.\n *\n * @param { any } value\n * @returns { boolean }\n */\nfunction iterable(value) {\n if (typeof Symbol !== 'undefined') {\n return !!value[Symbol.iterator];\n } else {\n return Array.isArray(value) || typeof value === 'string';\n }\n}\n\nexports.iterable = iterable;\n\n/**\n * If ES6 features are available, returns `true` if the value is an object hash\n * or an ES6 Map. Otherwise just return if it's an object hash.\n * @param { any } value\n * @returns { boolean }\n */\nfunction mapping(value) {\n // only maps and object hashes\n var bool = value !== null\n && value !== undefined\n && typeof value === 'object'\n && !Array.isArray(value);\n if (Set) {\n return bool && !(value instanceof Set);\n } else {\n return bool;\n }\n}\n\nexports.mapping = mapping;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/tests.js","'use strict';\n\nfunction cycler(items) {\n var index = -1;\n\n return {\n current: null,\n reset() {\n index = -1;\n this.current = null;\n },\n\n next() {\n index++;\n if (index >= items.length) {\n index = 0;\n }\n\n this.current = items[index];\n return this.current;\n },\n };\n}\n\nfunction joiner(sep) {\n sep = sep || ',';\n let first = true;\n\n return () => {\n const val = first ? '' : sep;\n first = false;\n return val;\n };\n}\n\n// Making this a function instead so it returns a new object\n// each time it's called. That way, if something like an environment\n// uses it, they will each have their own copy.\nfunction globals() {\n return {\n range(start, stop, step) {\n if (typeof stop === 'undefined') {\n stop = start;\n start = 0;\n step = 1;\n } else if (!step) {\n step = 1;\n }\n\n const arr = [];\n if (step > 0) {\n for (let i = start; i < stop; i += step) {\n arr.push(i);\n }\n } else {\n for (let i = start; i > stop; i += step) { // eslint-disable-line for-direction\n arr.push(i);\n }\n }\n return arr;\n },\n\n cycler() {\n return cycler(Array.prototype.slice.call(arguments));\n },\n\n joiner(sep) {\n return joiner(sep);\n }\n };\n}\n\nmodule.exports = globals;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/globals.js","const path = require('path');\n\nmodule.exports = function express(env, app) {\n function NunjucksView(name, opts) {\n this.name = name;\n this.path = name;\n this.defaultEngine = opts.defaultEngine;\n this.ext = path.extname(name);\n if (!this.ext && !this.defaultEngine) {\n throw new Error('No default engine was specified and no extension was provided.');\n }\n if (!this.ext) {\n this.name += (this.ext = (this.defaultEngine[0] !== '.' ? '.' : '') + this.defaultEngine);\n }\n }\n\n NunjucksView.prototype.render = function render(opts, cb) {\n env.render(this.name, opts, cb);\n };\n\n app.set('view', NunjucksView);\n app.set('nunjucksEnv', env);\n return env;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/express-app.js","function installCompat() {\n 'use strict';\n\n /* eslint-disable camelcase */\n\n // This must be called like `nunjucks.installCompat` so that `this`\n // references the nunjucks instance\n var runtime = this.runtime;\n var lib = this.lib;\n // Handle slim case where these 'modules' are excluded from the built source\n var Compiler = this.compiler.Compiler;\n var Parser = this.parser.Parser;\n var nodes = this.nodes;\n var lexer = this.lexer;\n\n var orig_contextOrFrameLookup = runtime.contextOrFrameLookup;\n var orig_memberLookup = runtime.memberLookup;\n var orig_Compiler_assertType;\n var orig_Parser_parseAggregate;\n if (Compiler) {\n orig_Compiler_assertType = Compiler.prototype.assertType;\n }\n if (Parser) {\n orig_Parser_parseAggregate = Parser.prototype.parseAggregate;\n }\n\n function uninstall() {\n runtime.contextOrFrameLookup = orig_contextOrFrameLookup;\n runtime.memberLookup = orig_memberLookup;\n if (Compiler) {\n Compiler.prototype.assertType = orig_Compiler_assertType;\n }\n if (Parser) {\n Parser.prototype.parseAggregate = orig_Parser_parseAggregate;\n }\n }\n\n runtime.contextOrFrameLookup = function contextOrFrameLookup(context, frame, key) {\n var val = orig_contextOrFrameLookup.apply(this, arguments);\n if (val !== undefined) {\n return val;\n }\n switch (key) {\n case 'True':\n return true;\n case 'False':\n return false;\n case 'None':\n return null;\n default:\n return undefined;\n }\n };\n\n function getTokensState(tokens) {\n return {\n index: tokens.index,\n lineno: tokens.lineno,\n colno: tokens.colno\n };\n }\n\n if (process.env.BUILD_TYPE !== 'SLIM' && nodes && Compiler && Parser) { // i.e., not slim mode\n const Slice = nodes.Node.extend('Slice', {\n fields: ['start', 'stop', 'step'],\n init(lineno, colno, start, stop, step) {\n start = start || new nodes.Literal(lineno, colno, null);\n stop = stop || new nodes.Literal(lineno, colno, null);\n step = step || new nodes.Literal(lineno, colno, 1);\n this.parent(lineno, colno, start, stop, step);\n }\n });\n\n Compiler.prototype.assertType = function assertType(node) {\n if (node instanceof Slice) {\n return;\n }\n orig_Compiler_assertType.apply(this, arguments);\n };\n Compiler.prototype.compileSlice = function compileSlice(node, frame) {\n this._emit('(');\n this._compileExpression(node.start, frame);\n this._emit('),(');\n this._compileExpression(node.stop, frame);\n this._emit('),(');\n this._compileExpression(node.step, frame);\n this._emit(')');\n };\n\n Parser.prototype.parseAggregate = function parseAggregate() {\n var origState = getTokensState(this.tokens);\n // Set back one accounting for opening bracket/parens\n origState.colno--;\n origState.index--;\n try {\n return orig_Parser_parseAggregate.apply(this);\n } catch (e) {\n const errState = getTokensState(this.tokens);\n const rethrow = () => {\n lib._assign(this.tokens, errState);\n return e;\n };\n\n // Reset to state before original parseAggregate called\n lib._assign(this.tokens, origState);\n this.peeked = false;\n\n const tok = this.peekToken();\n if (tok.type !== lexer.TOKEN_LEFT_BRACKET) {\n throw rethrow();\n } else {\n this.nextToken();\n }\n\n const node = new Slice(tok.lineno, tok.colno);\n\n // If we don't encounter a colon while parsing, this is not a slice,\n // so re-raise the original exception.\n let isSlice = false;\n\n for (let i = 0; i <= node.fields.length; i++) {\n if (this.skip(lexer.TOKEN_RIGHT_BRACKET)) {\n break;\n }\n if (i === node.fields.length) {\n if (isSlice) {\n this.fail('parseSlice: too many slice components', tok.lineno, tok.colno);\n } else {\n break;\n }\n }\n if (this.skip(lexer.TOKEN_COLON)) {\n isSlice = true;\n } else {\n const field = node.fields[i];\n node[field] = this.parseExpression();\n isSlice = this.skip(lexer.TOKEN_COLON) || isSlice;\n }\n }\n if (!isSlice) {\n throw rethrow();\n }\n return new nodes.Array(tok.lineno, tok.colno, [node]);\n }\n };\n }\n\n function sliceLookup(obj, start, stop, step) {\n obj = obj || [];\n if (start === null) {\n start = (step < 0) ? (obj.length - 1) : 0;\n }\n if (stop === null) {\n stop = (step < 0) ? -1 : obj.length;\n } else if (stop < 0) {\n stop += obj.length;\n }\n\n if (start < 0) {\n start += obj.length;\n }\n\n const results = [];\n\n for (let i = start; ; i += step) {\n if (i < 0 || i > obj.length) {\n break;\n }\n if (step > 0 && i >= stop) {\n break;\n }\n if (step < 0 && i <= stop) {\n break;\n }\n results.push(runtime.memberLookup(obj, i));\n }\n return results;\n }\n\n function hasOwnProp(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n }\n\n const ARRAY_MEMBERS = {\n pop(index) {\n if (index === undefined) {\n return this.pop();\n }\n if (index >= this.length || index < 0) {\n throw new Error('KeyError');\n }\n return this.splice(index, 1);\n },\n append(element) {\n return this.push(element);\n },\n remove(element) {\n for (let i = 0; i < this.length; i++) {\n if (this[i] === element) {\n return this.splice(i, 1);\n }\n }\n throw new Error('ValueError');\n },\n count(element) {\n var count = 0;\n for (let i = 0; i < this.length; i++) {\n if (this[i] === element) {\n count++;\n }\n }\n return count;\n },\n index(element) {\n var i;\n if ((i = this.indexOf(element)) === -1) {\n throw new Error('ValueError');\n }\n return i;\n },\n find(element) {\n return this.indexOf(element);\n },\n insert(index, elem) {\n return this.splice(index, 0, elem);\n }\n };\n const OBJECT_MEMBERS = {\n items() {\n return lib._entries(this);\n },\n values() {\n return lib._values(this);\n },\n keys() {\n return lib.keys(this);\n },\n get(key, def) {\n var output = this[key];\n if (output === undefined) {\n output = def;\n }\n return output;\n },\n has_key(key) {\n return hasOwnProp(this, key);\n },\n pop(key, def) {\n var output = this[key];\n if (output === undefined && def !== undefined) {\n output = def;\n } else if (output === undefined) {\n throw new Error('KeyError');\n } else {\n delete this[key];\n }\n return output;\n },\n popitem() {\n const keys = lib.keys(this);\n if (!keys.length) {\n throw new Error('KeyError');\n }\n const k = keys[0];\n const val = this[k];\n delete this[k];\n return [k, val];\n },\n setdefault(key, def = null) {\n if (!(key in this)) {\n this[key] = def;\n }\n return this[key];\n },\n update(kwargs) {\n lib._assign(this, kwargs);\n return null; // Always returns None\n }\n };\n OBJECT_MEMBERS.iteritems = OBJECT_MEMBERS.items;\n OBJECT_MEMBERS.itervalues = OBJECT_MEMBERS.values;\n OBJECT_MEMBERS.iterkeys = OBJECT_MEMBERS.keys;\n\n runtime.memberLookup = function memberLookup(obj, val, autoescape) {\n if (arguments.length === 4) {\n return sliceLookup.apply(this, arguments);\n }\n obj = obj || {};\n\n // If the object is an object, return any of the methods that Python would\n // otherwise provide.\n if (lib.isArray(obj) && hasOwnProp(ARRAY_MEMBERS, val)) {\n return ARRAY_MEMBERS[val].bind(obj);\n }\n if (lib.isObject(obj) && hasOwnProp(OBJECT_MEMBERS, val)) {\n return OBJECT_MEMBERS[val].bind(obj);\n }\n\n return orig_memberLookup.apply(this, arguments);\n };\n\n return uninstall;\n}\n\nmodule.exports = installCompat;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/jinja-compat.js"],"sourceRoot":""}
\ No newline at end of file diff --git a/node_modules/nunjucks/browser/nunjucks.js b/node_modules/nunjucks/browser/nunjucks.js new file mode 100644 index 0000000..573ba8d --- /dev/null +++ b/node_modules/nunjucks/browser/nunjucks.js @@ -0,0 +1,7021 @@ +/*! Browser bundle of nunjucks 3.2.4 */ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["nunjucks"] = factory(); + else + root["nunjucks"] = factory(); +})(typeof self !== 'undefined' ? self : this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 11); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var ArrayProto = Array.prototype; +var ObjProto = Object.prototype; +var escapeMap = { + '&': '&', + '"': '"', + '\'': ''', + '<': '<', + '>': '>', + '\\': '\' +}; +var escapeRegex = /[&"'<>\\]/g; +var exports = module.exports = {}; +function hasOwnProp(obj, k) { + return ObjProto.hasOwnProperty.call(obj, k); +} +exports.hasOwnProp = hasOwnProp; +function lookupEscape(ch) { + return escapeMap[ch]; +} +function _prettifyError(path, withInternals, err) { + if (!err.Update) { + // not one of ours, cast it + err = new exports.TemplateError(err); + } + err.Update(path); + + // Unless they marked the dev flag, show them a trace from here + if (!withInternals) { + var old = err; + err = new Error(old.message); + err.name = old.name; + } + return err; +} +exports._prettifyError = _prettifyError; +function TemplateError(message, lineno, colno) { + var err; + var cause; + if (message instanceof Error) { + cause = message; + message = cause.name + ": " + cause.message; + } + if (Object.setPrototypeOf) { + err = new Error(message); + Object.setPrototypeOf(err, TemplateError.prototype); + } else { + err = this; + Object.defineProperty(err, 'message', { + enumerable: false, + writable: true, + value: message + }); + } + Object.defineProperty(err, 'name', { + value: 'Template render error' + }); + if (Error.captureStackTrace) { + Error.captureStackTrace(err, this.constructor); + } + var getStack; + if (cause) { + var stackDescriptor = Object.getOwnPropertyDescriptor(cause, 'stack'); + getStack = stackDescriptor && (stackDescriptor.get || function () { + return stackDescriptor.value; + }); + if (!getStack) { + getStack = function getStack() { + return cause.stack; + }; + } + } else { + var stack = new Error(message).stack; + getStack = function getStack() { + return stack; + }; + } + Object.defineProperty(err, 'stack', { + get: function get() { + return getStack.call(err); + } + }); + Object.defineProperty(err, 'cause', { + value: cause + }); + err.lineno = lineno; + err.colno = colno; + err.firstUpdate = true; + err.Update = function Update(path) { + var msg = '(' + (path || 'unknown path') + ')'; + + // only show lineno + colno next to path of template + // where error occurred + if (this.firstUpdate) { + if (this.lineno && this.colno) { + msg += " [Line " + this.lineno + ", Column " + this.colno + "]"; + } else if (this.lineno) { + msg += " [Line " + this.lineno + "]"; + } + } + msg += '\n '; + if (this.firstUpdate) { + msg += ' '; + } + this.message = msg + (this.message || ''); + this.firstUpdate = false; + return this; + }; + return err; +} +if (Object.setPrototypeOf) { + Object.setPrototypeOf(TemplateError.prototype, Error.prototype); +} else { + TemplateError.prototype = Object.create(Error.prototype, { + constructor: { + value: TemplateError + } + }); +} +exports.TemplateError = TemplateError; +function escape(val) { + return val.replace(escapeRegex, lookupEscape); +} +exports.escape = escape; +function isFunction(obj) { + return ObjProto.toString.call(obj) === '[object Function]'; +} +exports.isFunction = isFunction; +function isArray(obj) { + return ObjProto.toString.call(obj) === '[object Array]'; +} +exports.isArray = isArray; +function isString(obj) { + return ObjProto.toString.call(obj) === '[object String]'; +} +exports.isString = isString; +function isObject(obj) { + return ObjProto.toString.call(obj) === '[object Object]'; +} +exports.isObject = isObject; + +/** + * @param {string|number} attr + * @returns {(string|number)[]} + * @private + */ +function _prepareAttributeParts(attr) { + if (!attr) { + return []; + } + if (typeof attr === 'string') { + return attr.split('.'); + } + return [attr]; +} + +/** + * @param {string} attribute Attribute value. Dots allowed. + * @returns {function(Object): *} + */ +function getAttrGetter(attribute) { + var parts = _prepareAttributeParts(attribute); + return function attrGetter(item) { + var _item = item; + for (var i = 0; i < parts.length; i++) { + var part = parts[i]; + + // If item is not an object, and we still got parts to handle, it means + // that something goes wrong. Just roll out to undefined in that case. + if (hasOwnProp(_item, part)) { + _item = _item[part]; + } else { + return undefined; + } + } + return _item; + }; +} +exports.getAttrGetter = getAttrGetter; +function groupBy(obj, val, throwOnUndefined) { + var result = {}; + var iterator = isFunction(val) ? val : getAttrGetter(val); + for (var i = 0; i < obj.length; i++) { + var value = obj[i]; + var key = iterator(value, i); + if (key === undefined && throwOnUndefined === true) { + throw new TypeError("groupby: attribute \"" + val + "\" resolved to undefined"); + } + (result[key] || (result[key] = [])).push(value); + } + return result; +} +exports.groupBy = groupBy; +function toArray(obj) { + return Array.prototype.slice.call(obj); +} +exports.toArray = toArray; +function without(array) { + var result = []; + if (!array) { + return result; + } + var length = array.length; + var contains = toArray(arguments).slice(1); + var index = -1; + while (++index < length) { + if (indexOf(contains, array[index]) === -1) { + result.push(array[index]); + } + } + return result; +} +exports.without = without; +function repeat(char_, n) { + var str = ''; + for (var i = 0; i < n; i++) { + str += char_; + } + return str; +} +exports.repeat = repeat; +function each(obj, func, context) { + if (obj == null) { + return; + } + if (ArrayProto.forEach && obj.forEach === ArrayProto.forEach) { + obj.forEach(func, context); + } else if (obj.length === +obj.length) { + for (var i = 0, l = obj.length; i < l; i++) { + func.call(context, obj[i], i, obj); + } + } +} +exports.each = each; +function map(obj, func) { + var results = []; + if (obj == null) { + return results; + } + if (ArrayProto.map && obj.map === ArrayProto.map) { + return obj.map(func); + } + for (var i = 0; i < obj.length; i++) { + results[results.length] = func(obj[i], i); + } + if (obj.length === +obj.length) { + results.length = obj.length; + } + return results; +} +exports.map = map; +function asyncIter(arr, iter, cb) { + var i = -1; + function next() { + i++; + if (i < arr.length) { + iter(arr[i], i, next, cb); + } else { + cb(); + } + } + next(); +} +exports.asyncIter = asyncIter; +function asyncFor(obj, iter, cb) { + var keys = keys_(obj || {}); + var len = keys.length; + var i = -1; + function next() { + i++; + var k = keys[i]; + if (i < len) { + iter(k, obj[k], i, len, next); + } else { + cb(); + } + } + next(); +} +exports.asyncFor = asyncFor; +function indexOf(arr, searchElement, fromIndex) { + return Array.prototype.indexOf.call(arr || [], searchElement, fromIndex); +} +exports.indexOf = indexOf; +function keys_(obj) { + /* eslint-disable no-restricted-syntax */ + var arr = []; + for (var k in obj) { + if (hasOwnProp(obj, k)) { + arr.push(k); + } + } + return arr; +} +exports.keys = keys_; +function _entries(obj) { + return keys_(obj).map(function (k) { + return [k, obj[k]]; + }); +} +exports._entries = _entries; +function _values(obj) { + return keys_(obj).map(function (k) { + return obj[k]; + }); +} +exports._values = _values; +function extend(obj1, obj2) { + obj1 = obj1 || {}; + keys_(obj2).forEach(function (k) { + obj1[k] = obj2[k]; + }); + return obj1; +} +exports._assign = exports.extend = extend; +function inOperator(key, val) { + if (isArray(val) || isString(val)) { + return val.indexOf(key) !== -1; + } else if (isObject(val)) { + return key in val; + } + throw new Error('Cannot use "in" operator to search for "' + key + '" in unexpected types.'); +} +exports.inOperator = inOperator; + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// A simple class system, more documentation to come +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } +function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } +function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +var EventEmitter = __webpack_require__(16); +var lib = __webpack_require__(0); +function parentWrap(parent, prop) { + if (typeof parent !== 'function' || typeof prop !== 'function') { + return prop; + } + return function wrap() { + // Save the current parent method + var tmp = this.parent; + + // Set parent to the previous method, call, and restore + this.parent = parent; + var res = prop.apply(this, arguments); + this.parent = tmp; + return res; + }; +} +function extendClass(cls, name, props) { + props = props || {}; + lib.keys(props).forEach(function (k) { + props[k] = parentWrap(cls.prototype[k], props[k]); + }); + var subclass = /*#__PURE__*/function (_cls) { + _inheritsLoose(subclass, _cls); + function subclass() { + return _cls.apply(this, arguments) || this; + } + _createClass(subclass, [{ + key: "typename", + get: function get() { + return name; + } + }]); + return subclass; + }(cls); + lib._assign(subclass.prototype, props); + return subclass; +} +var Obj = /*#__PURE__*/function () { + function Obj() { + // Unfortunately necessary for backwards compatibility + this.init.apply(this, arguments); + } + var _proto = Obj.prototype; + _proto.init = function init() {}; + Obj.extend = function extend(name, props) { + if (typeof name === 'object') { + props = name; + name = 'anonymous'; + } + return extendClass(this, name, props); + }; + _createClass(Obj, [{ + key: "typename", + get: function get() { + return this.constructor.name; + } + }]); + return Obj; +}(); +var EmitterObj = /*#__PURE__*/function (_EventEmitter) { + _inheritsLoose(EmitterObj, _EventEmitter); + function EmitterObj() { + var _this2; + var _this; + _this = _EventEmitter.call(this) || this; + // Unfortunately necessary for backwards compatibility + (_this2 = _this).init.apply(_this2, arguments); + return _this; + } + var _proto2 = EmitterObj.prototype; + _proto2.init = function init() {}; + EmitterObj.extend = function extend(name, props) { + if (typeof name === 'object') { + props = name; + name = 'anonymous'; + } + return extendClass(this, name, props); + }; + _createClass(EmitterObj, [{ + key: "typename", + get: function get() { + return this.constructor.name; + } + }]); + return EmitterObj; +}(EventEmitter); +module.exports = { + Obj: Obj, + EmitterObj: EmitterObj +}; + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var lib = __webpack_require__(0); +var arrayFrom = Array.from; +var supportsIterators = typeof Symbol === 'function' && Symbol.iterator && typeof arrayFrom === 'function'; + +// Frames keep track of scoping both at compile-time and run-time so +// we know how to access variables. Block tags can introduce special +// variables, for example. +var Frame = /*#__PURE__*/function () { + function Frame(parent, isolateWrites) { + this.variables = Object.create(null); + this.parent = parent; + this.topLevel = false; + // if this is true, writes (set) should never propagate upwards past + // this frame to its parent (though reads may). + this.isolateWrites = isolateWrites; + } + var _proto = Frame.prototype; + _proto.set = function set(name, val, resolveUp) { + // Allow variables with dots by automatically creating the + // nested structure + var parts = name.split('.'); + var obj = this.variables; + var frame = this; + if (resolveUp) { + if (frame = this.resolve(parts[0], true)) { + frame.set(name, val); + return; + } + } + for (var i = 0; i < parts.length - 1; i++) { + var id = parts[i]; + if (!obj[id]) { + obj[id] = {}; + } + obj = obj[id]; + } + obj[parts[parts.length - 1]] = val; + }; + _proto.get = function get(name) { + var val = this.variables[name]; + if (val !== undefined) { + return val; + } + return null; + }; + _proto.lookup = function lookup(name) { + var p = this.parent; + var val = this.variables[name]; + if (val !== undefined) { + return val; + } + return p && p.lookup(name); + }; + _proto.resolve = function resolve(name, forWrite) { + var p = forWrite && this.isolateWrites ? undefined : this.parent; + var val = this.variables[name]; + if (val !== undefined) { + return this; + } + return p && p.resolve(name); + }; + _proto.push = function push(isolateWrites) { + return new Frame(this, isolateWrites); + }; + _proto.pop = function pop() { + return this.parent; + }; + return Frame; +}(); +function makeMacro(argNames, kwargNames, func) { + return function macro() { + for (var _len = arguments.length, macroArgs = new Array(_len), _key = 0; _key < _len; _key++) { + macroArgs[_key] = arguments[_key]; + } + var argCount = numArgs(macroArgs); + var args; + var kwargs = getKeywordArgs(macroArgs); + if (argCount > argNames.length) { + args = macroArgs.slice(0, argNames.length); + + // Positional arguments that should be passed in as + // keyword arguments (essentially default values) + macroArgs.slice(args.length, argCount).forEach(function (val, i) { + if (i < kwargNames.length) { + kwargs[kwargNames[i]] = val; + } + }); + args.push(kwargs); + } else if (argCount < argNames.length) { + args = macroArgs.slice(0, argCount); + for (var i = argCount; i < argNames.length; i++) { + var arg = argNames[i]; + + // Keyword arguments that should be passed as + // positional arguments, i.e. the caller explicitly + // used the name of a positional arg + args.push(kwargs[arg]); + delete kwargs[arg]; + } + args.push(kwargs); + } else { + args = macroArgs; + } + return func.apply(this, args); + }; +} +function makeKeywordArgs(obj) { + obj.__keywords = true; + return obj; +} +function isKeywordArgs(obj) { + return obj && Object.prototype.hasOwnProperty.call(obj, '__keywords'); +} +function getKeywordArgs(args) { + var len = args.length; + if (len) { + var lastArg = args[len - 1]; + if (isKeywordArgs(lastArg)) { + return lastArg; + } + } + return {}; +} +function numArgs(args) { + var len = args.length; + if (len === 0) { + return 0; + } + var lastArg = args[len - 1]; + if (isKeywordArgs(lastArg)) { + return len - 1; + } else { + return len; + } +} + +// A SafeString object indicates that the string should not be +// autoescaped. This happens magically because autoescaping only +// occurs on primitive string objects. +function SafeString(val) { + if (typeof val !== 'string') { + return val; + } + this.val = val; + this.length = val.length; +} +SafeString.prototype = Object.create(String.prototype, { + length: { + writable: true, + configurable: true, + value: 0 + } +}); +SafeString.prototype.valueOf = function valueOf() { + return this.val; +}; +SafeString.prototype.toString = function toString() { + return this.val; +}; +function copySafeness(dest, target) { + if (dest instanceof SafeString) { + return new SafeString(target); + } + return target.toString(); +} +function markSafe(val) { + var type = typeof val; + if (type === 'string') { + return new SafeString(val); + } else if (type !== 'function') { + return val; + } else { + return function wrapSafe(args) { + var ret = val.apply(this, arguments); + if (typeof ret === 'string') { + return new SafeString(ret); + } + return ret; + }; + } +} +function suppressValue(val, autoescape) { + val = val !== undefined && val !== null ? val : ''; + if (autoescape && !(val instanceof SafeString)) { + val = lib.escape(val.toString()); + } + return val; +} +function ensureDefined(val, lineno, colno) { + if (val === null || val === undefined) { + throw new lib.TemplateError('attempted to output null or undefined value', lineno + 1, colno + 1); + } + return val; +} +function memberLookup(obj, val) { + if (obj === undefined || obj === null) { + return undefined; + } + if (typeof obj[val] === 'function') { + return function () { + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + return obj[val].apply(obj, args); + }; + } + return obj[val]; +} +function callWrap(obj, name, context, args) { + if (!obj) { + throw new Error('Unable to call `' + name + '`, which is undefined or falsey'); + } else if (typeof obj !== 'function') { + throw new Error('Unable to call `' + name + '`, which is not a function'); + } + return obj.apply(context, args); +} +function contextOrFrameLookup(context, frame, name) { + var val = frame.lookup(name); + return val !== undefined ? val : context.lookup(name); +} +function handleError(error, lineno, colno) { + if (error.lineno) { + return error; + } else { + return new lib.TemplateError(error, lineno, colno); + } +} +function asyncEach(arr, dimen, iter, cb) { + if (lib.isArray(arr)) { + var len = arr.length; + lib.asyncIter(arr, function iterCallback(item, i, next) { + switch (dimen) { + case 1: + iter(item, i, len, next); + break; + case 2: + iter(item[0], item[1], i, len, next); + break; + case 3: + iter(item[0], item[1], item[2], i, len, next); + break; + default: + item.push(i, len, next); + iter.apply(this, item); + } + }, cb); + } else { + lib.asyncFor(arr, function iterCallback(key, val, i, len, next) { + iter(key, val, i, len, next); + }, cb); + } +} +function asyncAll(arr, dimen, func, cb) { + var finished = 0; + var len; + var outputArr; + function done(i, output) { + finished++; + outputArr[i] = output; + if (finished === len) { + cb(null, outputArr.join('')); + } + } + if (lib.isArray(arr)) { + len = arr.length; + outputArr = new Array(len); + if (len === 0) { + cb(null, ''); + } else { + for (var i = 0; i < arr.length; i++) { + var item = arr[i]; + switch (dimen) { + case 1: + func(item, i, len, done); + break; + case 2: + func(item[0], item[1], i, len, done); + break; + case 3: + func(item[0], item[1], item[2], i, len, done); + break; + default: + item.push(i, len, done); + func.apply(this, item); + } + } + } + } else { + var keys = lib.keys(arr || {}); + len = keys.length; + outputArr = new Array(len); + if (len === 0) { + cb(null, ''); + } else { + for (var _i = 0; _i < keys.length; _i++) { + var k = keys[_i]; + func(k, arr[k], _i, len, done); + } + } + } +} +function fromIterator(arr) { + if (typeof arr !== 'object' || arr === null || lib.isArray(arr)) { + return arr; + } else if (supportsIterators && Symbol.iterator in arr) { + return arrayFrom(arr); + } else { + return arr; + } +} +module.exports = { + Frame: Frame, + makeMacro: makeMacro, + makeKeywordArgs: makeKeywordArgs, + numArgs: numArgs, + suppressValue: suppressValue, + ensureDefined: ensureDefined, + memberLookup: memberLookup, + contextOrFrameLookup: contextOrFrameLookup, + callWrap: callWrap, + handleError: handleError, + isArray: lib.isArray, + keys: lib.keys, + SafeString: SafeString, + copySafeness: copySafeness, + markSafe: markSafe, + asyncEach: asyncEach, + asyncAll: asyncAll, + inOperator: lib.inOperator, + fromIterator: fromIterator +}; + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } +function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } +function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +var _require = __webpack_require__(1), + Obj = _require.Obj; +function traverseAndCheck(obj, type, results) { + if (obj instanceof type) { + results.push(obj); + } + if (obj instanceof Node) { + obj.findAll(type, results); + } +} +var Node = /*#__PURE__*/function (_Obj) { + _inheritsLoose(Node, _Obj); + function Node() { + return _Obj.apply(this, arguments) || this; + } + var _proto = Node.prototype; + _proto.init = function init(lineno, colno) { + var _arguments = arguments, + _this = this; + for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { + args[_key - 2] = arguments[_key]; + } + this.lineno = lineno; + this.colno = colno; + this.fields.forEach(function (field, i) { + // The first two args are line/col numbers, so offset by 2 + var val = _arguments[i + 2]; + + // Fields should never be undefined, but null. It makes + // testing easier to normalize values. + if (val === undefined) { + val = null; + } + _this[field] = val; + }); + }; + _proto.findAll = function findAll(type, results) { + var _this2 = this; + results = results || []; + if (this instanceof NodeList) { + this.children.forEach(function (child) { + return traverseAndCheck(child, type, results); + }); + } else { + this.fields.forEach(function (field) { + return traverseAndCheck(_this2[field], type, results); + }); + } + return results; + }; + _proto.iterFields = function iterFields(func) { + var _this3 = this; + this.fields.forEach(function (field) { + func(_this3[field], field); + }); + }; + return Node; +}(Obj); // Abstract nodes +var Value = /*#__PURE__*/function (_Node) { + _inheritsLoose(Value, _Node); + function Value() { + return _Node.apply(this, arguments) || this; + } + _createClass(Value, [{ + key: "typename", + get: function get() { + return 'Value'; + } + }, { + key: "fields", + get: function get() { + return ['value']; + } + }]); + return Value; +}(Node); // Concrete nodes +var NodeList = /*#__PURE__*/function (_Node2) { + _inheritsLoose(NodeList, _Node2); + function NodeList() { + return _Node2.apply(this, arguments) || this; + } + var _proto2 = NodeList.prototype; + _proto2.init = function init(lineno, colno, nodes) { + _Node2.prototype.init.call(this, lineno, colno, nodes || []); + }; + _proto2.addChild = function addChild(node) { + this.children.push(node); + }; + _createClass(NodeList, [{ + key: "typename", + get: function get() { + return 'NodeList'; + } + }, { + key: "fields", + get: function get() { + return ['children']; + } + }]); + return NodeList; +}(Node); +var Root = NodeList.extend('Root'); +var Literal = Value.extend('Literal'); +var _Symbol = Value.extend('Symbol'); +var Group = NodeList.extend('Group'); +var ArrayNode = NodeList.extend('Array'); +var Pair = Node.extend('Pair', { + fields: ['key', 'value'] +}); +var Dict = NodeList.extend('Dict'); +var LookupVal = Node.extend('LookupVal', { + fields: ['target', 'val'] +}); +var If = Node.extend('If', { + fields: ['cond', 'body', 'else_'] +}); +var IfAsync = If.extend('IfAsync'); +var InlineIf = Node.extend('InlineIf', { + fields: ['cond', 'body', 'else_'] +}); +var For = Node.extend('For', { + fields: ['arr', 'name', 'body', 'else_'] +}); +var AsyncEach = For.extend('AsyncEach'); +var AsyncAll = For.extend('AsyncAll'); +var Macro = Node.extend('Macro', { + fields: ['name', 'args', 'body'] +}); +var Caller = Macro.extend('Caller'); +var Import = Node.extend('Import', { + fields: ['template', 'target', 'withContext'] +}); +var FromImport = /*#__PURE__*/function (_Node3) { + _inheritsLoose(FromImport, _Node3); + function FromImport() { + return _Node3.apply(this, arguments) || this; + } + var _proto3 = FromImport.prototype; + _proto3.init = function init(lineno, colno, template, names, withContext) { + _Node3.prototype.init.call(this, lineno, colno, template, names || new NodeList(), withContext); + }; + _createClass(FromImport, [{ + key: "typename", + get: function get() { + return 'FromImport'; + } + }, { + key: "fields", + get: function get() { + return ['template', 'names', 'withContext']; + } + }]); + return FromImport; +}(Node); +var FunCall = Node.extend('FunCall', { + fields: ['name', 'args'] +}); +var Filter = FunCall.extend('Filter'); +var FilterAsync = Filter.extend('FilterAsync', { + fields: ['name', 'args', 'symbol'] +}); +var KeywordArgs = Dict.extend('KeywordArgs'); +var Block = Node.extend('Block', { + fields: ['name', 'body'] +}); +var Super = Node.extend('Super', { + fields: ['blockName', 'symbol'] +}); +var TemplateRef = Node.extend('TemplateRef', { + fields: ['template'] +}); +var Extends = TemplateRef.extend('Extends'); +var Include = Node.extend('Include', { + fields: ['template', 'ignoreMissing'] +}); +var Set = Node.extend('Set', { + fields: ['targets', 'value'] +}); +var Switch = Node.extend('Switch', { + fields: ['expr', 'cases', 'default'] +}); +var Case = Node.extend('Case', { + fields: ['cond', 'body'] +}); +var Output = NodeList.extend('Output'); +var Capture = Node.extend('Capture', { + fields: ['body'] +}); +var TemplateData = Literal.extend('TemplateData'); +var UnaryOp = Node.extend('UnaryOp', { + fields: ['target'] +}); +var BinOp = Node.extend('BinOp', { + fields: ['left', 'right'] +}); +var In = BinOp.extend('In'); +var Is = BinOp.extend('Is'); +var Or = BinOp.extend('Or'); +var And = BinOp.extend('And'); +var Not = UnaryOp.extend('Not'); +var Add = BinOp.extend('Add'); +var Concat = BinOp.extend('Concat'); +var Sub = BinOp.extend('Sub'); +var Mul = BinOp.extend('Mul'); +var Div = BinOp.extend('Div'); +var FloorDiv = BinOp.extend('FloorDiv'); +var Mod = BinOp.extend('Mod'); +var Pow = BinOp.extend('Pow'); +var Neg = UnaryOp.extend('Neg'); +var Pos = UnaryOp.extend('Pos'); +var Compare = Node.extend('Compare', { + fields: ['expr', 'ops'] +}); +var CompareOperand = Node.extend('CompareOperand', { + fields: ['expr', 'type'] +}); +var CallExtension = Node.extend('CallExtension', { + init: function init(ext, prop, args, contentArgs) { + this.parent(); + this.extName = ext.__name || ext; + this.prop = prop; + this.args = args || new NodeList(); + this.contentArgs = contentArgs || []; + this.autoescape = ext.autoescape; + }, + fields: ['extName', 'prop', 'args', 'contentArgs'] +}); +var CallExtensionAsync = CallExtension.extend('CallExtensionAsync'); + +// This is hacky, but this is just a debugging function anyway +function print(str, indent, inline) { + var lines = str.split('\n'); + lines.forEach(function (line, i) { + if (line && (inline && i > 0 || !inline)) { + process.stdout.write(' '.repeat(indent)); + } + var nl = i === lines.length - 1 ? '' : '\n'; + process.stdout.write("" + line + nl); + }); +} + +// Print the AST in a nicely formatted tree format for debuggin +function printNodes(node, indent) { + indent = indent || 0; + print(node.typename + ': ', indent); + if (node instanceof NodeList) { + print('\n'); + node.children.forEach(function (n) { + printNodes(n, indent + 2); + }); + } else if (node instanceof CallExtension) { + print(node.extName + "." + node.prop + "\n"); + if (node.args) { + printNodes(node.args, indent + 2); + } + if (node.contentArgs) { + node.contentArgs.forEach(function (n) { + printNodes(n, indent + 2); + }); + } + } else { + var nodes = []; + var props = null; + node.iterFields(function (val, fieldName) { + if (val instanceof Node) { + nodes.push([fieldName, val]); + } else { + props = props || {}; + props[fieldName] = val; + } + }); + if (props) { + print(JSON.stringify(props, null, 2) + '\n', null, true); + } else { + print('\n'); + } + nodes.forEach(function (_ref) { + var fieldName = _ref[0], + n = _ref[1]; + print("[" + fieldName + "] =>", indent + 2); + printNodes(n, indent + 4); + }); + } +} +module.exports = { + Node: Node, + Root: Root, + NodeList: NodeList, + Value: Value, + Literal: Literal, + Symbol: _Symbol, + Group: Group, + Array: ArrayNode, + Pair: Pair, + Dict: Dict, + Output: Output, + Capture: Capture, + TemplateData: TemplateData, + If: If, + IfAsync: IfAsync, + InlineIf: InlineIf, + For: For, + AsyncEach: AsyncEach, + AsyncAll: AsyncAll, + Macro: Macro, + Caller: Caller, + Import: Import, + FromImport: FromImport, + FunCall: FunCall, + Filter: Filter, + FilterAsync: FilterAsync, + KeywordArgs: KeywordArgs, + Block: Block, + Super: Super, + Extends: Extends, + Include: Include, + Set: Set, + Switch: Switch, + Case: Case, + LookupVal: LookupVal, + BinOp: BinOp, + In: In, + Is: Is, + Or: Or, + And: And, + Not: Not, + Add: Add, + Concat: Concat, + Sub: Sub, + Mul: Mul, + Div: Div, + FloorDiv: FloorDiv, + Mod: Mod, + Pow: Pow, + Neg: Neg, + Pos: Pos, + Compare: Compare, + CompareOperand: CompareOperand, + CallExtension: CallExtension, + CallExtensionAsync: CallExtensionAsync, + printNodes: printNodes +}; + +/***/ }), +/* 4 */ +/***/ (function(module, exports) { + + + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +var parser = __webpack_require__(8); +var transformer = __webpack_require__(17); +var nodes = __webpack_require__(3); +var _require = __webpack_require__(0), + TemplateError = _require.TemplateError; +var _require2 = __webpack_require__(2), + Frame = _require2.Frame; +var _require3 = __webpack_require__(1), + Obj = _require3.Obj; + +// These are all the same for now, but shouldn't be passed straight +// through +var compareOps = { + '==': '==', + '===': '===', + '!=': '!=', + '!==': '!==', + '<': '<', + '>': '>', + '<=': '<=', + '>=': '>=' +}; +var Compiler = /*#__PURE__*/function (_Obj) { + _inheritsLoose(Compiler, _Obj); + function Compiler() { + return _Obj.apply(this, arguments) || this; + } + var _proto = Compiler.prototype; + _proto.init = function init(templateName, throwOnUndefined) { + this.templateName = templateName; + this.codebuf = []; + this.lastId = 0; + this.buffer = null; + this.bufferStack = []; + this._scopeClosers = ''; + this.inBlock = false; + this.throwOnUndefined = throwOnUndefined; + }; + _proto.fail = function fail(msg, lineno, colno) { + if (lineno !== undefined) { + lineno += 1; + } + if (colno !== undefined) { + colno += 1; + } + throw new TemplateError(msg, lineno, colno); + }; + _proto._pushBuffer = function _pushBuffer() { + var id = this._tmpid(); + this.bufferStack.push(this.buffer); + this.buffer = id; + this._emit("var " + this.buffer + " = \"\";"); + return id; + }; + _proto._popBuffer = function _popBuffer() { + this.buffer = this.bufferStack.pop(); + }; + _proto._emit = function _emit(code) { + this.codebuf.push(code); + }; + _proto._emitLine = function _emitLine(code) { + this._emit(code + '\n'); + }; + _proto._emitLines = function _emitLines() { + var _this = this; + for (var _len = arguments.length, lines = new Array(_len), _key = 0; _key < _len; _key++) { + lines[_key] = arguments[_key]; + } + lines.forEach(function (line) { + return _this._emitLine(line); + }); + }; + _proto._emitFuncBegin = function _emitFuncBegin(node, name) { + this.buffer = 'output'; + this._scopeClosers = ''; + this._emitLine("function " + name + "(env, context, frame, runtime, cb) {"); + this._emitLine("var lineno = " + node.lineno + ";"); + this._emitLine("var colno = " + node.colno + ";"); + this._emitLine("var " + this.buffer + " = \"\";"); + this._emitLine('try {'); + }; + _proto._emitFuncEnd = function _emitFuncEnd(noReturn) { + if (!noReturn) { + this._emitLine('cb(null, ' + this.buffer + ');'); + } + this._closeScopeLevels(); + this._emitLine('} catch (e) {'); + this._emitLine(' cb(runtime.handleError(e, lineno, colno));'); + this._emitLine('}'); + this._emitLine('}'); + this.buffer = null; + }; + _proto._addScopeLevel = function _addScopeLevel() { + this._scopeClosers += '})'; + }; + _proto._closeScopeLevels = function _closeScopeLevels() { + this._emitLine(this._scopeClosers + ';'); + this._scopeClosers = ''; + }; + _proto._withScopedSyntax = function _withScopedSyntax(func) { + var _scopeClosers = this._scopeClosers; + this._scopeClosers = ''; + func.call(this); + this._closeScopeLevels(); + this._scopeClosers = _scopeClosers; + }; + _proto._makeCallback = function _makeCallback(res) { + var err = this._tmpid(); + return 'function(' + err + (res ? ',' + res : '') + ') {\n' + 'if(' + err + ') { cb(' + err + '); return; }'; + }; + _proto._tmpid = function _tmpid() { + this.lastId++; + return 't_' + this.lastId; + }; + _proto._templateName = function _templateName() { + return this.templateName == null ? 'undefined' : JSON.stringify(this.templateName); + }; + _proto._compileChildren = function _compileChildren(node, frame) { + var _this2 = this; + node.children.forEach(function (child) { + _this2.compile(child, frame); + }); + }; + _proto._compileAggregate = function _compileAggregate(node, frame, startChar, endChar) { + var _this3 = this; + if (startChar) { + this._emit(startChar); + } + node.children.forEach(function (child, i) { + if (i > 0) { + _this3._emit(','); + } + _this3.compile(child, frame); + }); + if (endChar) { + this._emit(endChar); + } + }; + _proto._compileExpression = function _compileExpression(node, frame) { + // TODO: I'm not really sure if this type check is worth it or + // not. + this.assertType(node, nodes.Literal, nodes.Symbol, nodes.Group, nodes.Array, nodes.Dict, nodes.FunCall, nodes.Caller, nodes.Filter, nodes.LookupVal, nodes.Compare, nodes.InlineIf, nodes.In, nodes.Is, nodes.And, nodes.Or, nodes.Not, nodes.Add, nodes.Concat, nodes.Sub, nodes.Mul, nodes.Div, nodes.FloorDiv, nodes.Mod, nodes.Pow, nodes.Neg, nodes.Pos, nodes.Compare, nodes.NodeList); + this.compile(node, frame); + }; + _proto.assertType = function assertType(node) { + for (var _len2 = arguments.length, types = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + types[_key2 - 1] = arguments[_key2]; + } + if (!types.some(function (t) { + return node instanceof t; + })) { + this.fail("assertType: invalid type: " + node.typename, node.lineno, node.colno); + } + }; + _proto.compileCallExtension = function compileCallExtension(node, frame, async) { + var _this4 = this; + var args = node.args; + var contentArgs = node.contentArgs; + var autoescape = typeof node.autoescape === 'boolean' ? node.autoescape : true; + if (!async) { + this._emit(this.buffer + " += runtime.suppressValue("); + } + this._emit("env.getExtension(\"" + node.extName + "\")[\"" + node.prop + "\"]("); + this._emit('context'); + if (args || contentArgs) { + this._emit(','); + } + if (args) { + if (!(args instanceof nodes.NodeList)) { + this.fail('compileCallExtension: arguments must be a NodeList, ' + 'use `parser.parseSignature`'); + } + args.children.forEach(function (arg, i) { + // Tag arguments are passed normally to the call. Note + // that keyword arguments are turned into a single js + // object as the last argument, if they exist. + _this4._compileExpression(arg, frame); + if (i !== args.children.length - 1 || contentArgs.length) { + _this4._emit(','); + } + }); + } + if (contentArgs.length) { + contentArgs.forEach(function (arg, i) { + if (i > 0) { + _this4._emit(','); + } + if (arg) { + _this4._emitLine('function(cb) {'); + _this4._emitLine('if(!cb) { cb = function(err) { if(err) { throw err; }}}'); + var id = _this4._pushBuffer(); + _this4._withScopedSyntax(function () { + _this4.compile(arg, frame); + _this4._emitLine("cb(null, " + id + ");"); + }); + _this4._popBuffer(); + _this4._emitLine("return " + id + ";"); + _this4._emitLine('}'); + } else { + _this4._emit('null'); + } + }); + } + if (async) { + var res = this._tmpid(); + this._emitLine(', ' + this._makeCallback(res)); + this._emitLine(this.buffer + " += runtime.suppressValue(" + res + ", " + autoescape + " && env.opts.autoescape);"); + this._addScopeLevel(); + } else { + this._emit(')'); + this._emit(", " + autoescape + " && env.opts.autoescape);\n"); + } + }; + _proto.compileCallExtensionAsync = function compileCallExtensionAsync(node, frame) { + this.compileCallExtension(node, frame, true); + }; + _proto.compileNodeList = function compileNodeList(node, frame) { + this._compileChildren(node, frame); + }; + _proto.compileLiteral = function compileLiteral(node) { + if (typeof node.value === 'string') { + var val = node.value.replace(/\\/g, '\\\\'); + val = val.replace(/"/g, '\\"'); + val = val.replace(/\n/g, '\\n'); + val = val.replace(/\r/g, '\\r'); + val = val.replace(/\t/g, '\\t'); + val = val.replace(/\u2028/g, "\\u2028"); + this._emit("\"" + val + "\""); + } else if (node.value === null) { + this._emit('null'); + } else { + this._emit(node.value.toString()); + } + }; + _proto.compileSymbol = function compileSymbol(node, frame) { + var name = node.value; + var v = frame.lookup(name); + if (v) { + this._emit(v); + } else { + this._emit('runtime.contextOrFrameLookup(' + 'context, frame, "' + name + '")'); + } + }; + _proto.compileGroup = function compileGroup(node, frame) { + this._compileAggregate(node, frame, '(', ')'); + }; + _proto.compileArray = function compileArray(node, frame) { + this._compileAggregate(node, frame, '[', ']'); + }; + _proto.compileDict = function compileDict(node, frame) { + this._compileAggregate(node, frame, '{', '}'); + }; + _proto.compilePair = function compilePair(node, frame) { + var key = node.key; + var val = node.value; + if (key instanceof nodes.Symbol) { + key = new nodes.Literal(key.lineno, key.colno, key.value); + } else if (!(key instanceof nodes.Literal && typeof key.value === 'string')) { + this.fail('compilePair: Dict keys must be strings or names', key.lineno, key.colno); + } + this.compile(key, frame); + this._emit(': '); + this._compileExpression(val, frame); + }; + _proto.compileInlineIf = function compileInlineIf(node, frame) { + this._emit('('); + this.compile(node.cond, frame); + this._emit('?'); + this.compile(node.body, frame); + this._emit(':'); + if (node.else_ !== null) { + this.compile(node.else_, frame); + } else { + this._emit('""'); + } + this._emit(')'); + }; + _proto.compileIn = function compileIn(node, frame) { + this._emit('runtime.inOperator('); + this.compile(node.left, frame); + this._emit(','); + this.compile(node.right, frame); + this._emit(')'); + }; + _proto.compileIs = function compileIs(node, frame) { + // first, we need to try to get the name of the test function, if it's a + // callable (i.e., has args) and not a symbol. + var right = node.right.name ? node.right.name.value + // otherwise go with the symbol value + : node.right.value; + this._emit('env.getTest("' + right + '").call(context, '); + this.compile(node.left, frame); + // compile the arguments for the callable if they exist + if (node.right.args) { + this._emit(','); + this.compile(node.right.args, frame); + } + this._emit(') === true'); + }; + _proto._binOpEmitter = function _binOpEmitter(node, frame, str) { + this.compile(node.left, frame); + this._emit(str); + this.compile(node.right, frame); + } + + // ensure concatenation instead of addition + // by adding empty string in between + ; + _proto.compileOr = function compileOr(node, frame) { + return this._binOpEmitter(node, frame, ' || '); + }; + _proto.compileAnd = function compileAnd(node, frame) { + return this._binOpEmitter(node, frame, ' && '); + }; + _proto.compileAdd = function compileAdd(node, frame) { + return this._binOpEmitter(node, frame, ' + '); + }; + _proto.compileConcat = function compileConcat(node, frame) { + return this._binOpEmitter(node, frame, ' + "" + '); + }; + _proto.compileSub = function compileSub(node, frame) { + return this._binOpEmitter(node, frame, ' - '); + }; + _proto.compileMul = function compileMul(node, frame) { + return this._binOpEmitter(node, frame, ' * '); + }; + _proto.compileDiv = function compileDiv(node, frame) { + return this._binOpEmitter(node, frame, ' / '); + }; + _proto.compileMod = function compileMod(node, frame) { + return this._binOpEmitter(node, frame, ' % '); + }; + _proto.compileNot = function compileNot(node, frame) { + this._emit('!'); + this.compile(node.target, frame); + }; + _proto.compileFloorDiv = function compileFloorDiv(node, frame) { + this._emit('Math.floor('); + this.compile(node.left, frame); + this._emit(' / '); + this.compile(node.right, frame); + this._emit(')'); + }; + _proto.compilePow = function compilePow(node, frame) { + this._emit('Math.pow('); + this.compile(node.left, frame); + this._emit(', '); + this.compile(node.right, frame); + this._emit(')'); + }; + _proto.compileNeg = function compileNeg(node, frame) { + this._emit('-'); + this.compile(node.target, frame); + }; + _proto.compilePos = function compilePos(node, frame) { + this._emit('+'); + this.compile(node.target, frame); + }; + _proto.compileCompare = function compileCompare(node, frame) { + var _this5 = this; + this.compile(node.expr, frame); + node.ops.forEach(function (op) { + _this5._emit(" " + compareOps[op.type] + " "); + _this5.compile(op.expr, frame); + }); + }; + _proto.compileLookupVal = function compileLookupVal(node, frame) { + this._emit('runtime.memberLookup(('); + this._compileExpression(node.target, frame); + this._emit('),'); + this._compileExpression(node.val, frame); + this._emit(')'); + }; + _proto._getNodeName = function _getNodeName(node) { + switch (node.typename) { + case 'Symbol': + return node.value; + case 'FunCall': + return 'the return value of (' + this._getNodeName(node.name) + ')'; + case 'LookupVal': + return this._getNodeName(node.target) + '["' + this._getNodeName(node.val) + '"]'; + case 'Literal': + return node.value.toString(); + default: + return '--expression--'; + } + }; + _proto.compileFunCall = function compileFunCall(node, frame) { + // Keep track of line/col info at runtime by settings + // variables within an expression. An expression in javascript + // like (x, y, z) returns the last value, and x and y can be + // anything + this._emit('(lineno = ' + node.lineno + ', colno = ' + node.colno + ', '); + this._emit('runtime.callWrap('); + // Compile it as normal. + this._compileExpression(node.name, frame); + + // Output the name of what we're calling so we can get friendly errors + // if the lookup fails. + this._emit(', "' + this._getNodeName(node.name).replace(/"/g, '\\"') + '", context, '); + this._compileAggregate(node.args, frame, '[', '])'); + this._emit(')'); + }; + _proto.compileFilter = function compileFilter(node, frame) { + var name = node.name; + this.assertType(name, nodes.Symbol); + this._emit('env.getFilter("' + name.value + '").call(context, '); + this._compileAggregate(node.args, frame); + this._emit(')'); + }; + _proto.compileFilterAsync = function compileFilterAsync(node, frame) { + var name = node.name; + var symbol = node.symbol.value; + this.assertType(name, nodes.Symbol); + frame.set(symbol, symbol); + this._emit('env.getFilter("' + name.value + '").call(context, '); + this._compileAggregate(node.args, frame); + this._emitLine(', ' + this._makeCallback(symbol)); + this._addScopeLevel(); + }; + _proto.compileKeywordArgs = function compileKeywordArgs(node, frame) { + this._emit('runtime.makeKeywordArgs('); + this.compileDict(node, frame); + this._emit(')'); + }; + _proto.compileSet = function compileSet(node, frame) { + var _this6 = this; + var ids = []; + + // Lookup the variable names for each identifier and create + // new ones if necessary + node.targets.forEach(function (target) { + var name = target.value; + var id = frame.lookup(name); + if (id === null || id === undefined) { + id = _this6._tmpid(); + + // Note: This relies on js allowing scope across + // blocks, in case this is created inside an `if` + _this6._emitLine('var ' + id + ';'); + } + ids.push(id); + }); + if (node.value) { + this._emit(ids.join(' = ') + ' = '); + this._compileExpression(node.value, frame); + this._emitLine(';'); + } else { + this._emit(ids.join(' = ') + ' = '); + this.compile(node.body, frame); + this._emitLine(';'); + } + node.targets.forEach(function (target, i) { + var id = ids[i]; + var name = target.value; + + // We are running this for every var, but it's very + // uncommon to assign to multiple vars anyway + _this6._emitLine("frame.set(\"" + name + "\", " + id + ", true);"); + _this6._emitLine('if(frame.topLevel) {'); + _this6._emitLine("context.setVariable(\"" + name + "\", " + id + ");"); + _this6._emitLine('}'); + if (name.charAt(0) !== '_') { + _this6._emitLine('if(frame.topLevel) {'); + _this6._emitLine("context.addExport(\"" + name + "\", " + id + ");"); + _this6._emitLine('}'); + } + }); + }; + _proto.compileSwitch = function compileSwitch(node, frame) { + var _this7 = this; + this._emit('switch ('); + this.compile(node.expr, frame); + this._emit(') {'); + node.cases.forEach(function (c, i) { + _this7._emit('case '); + _this7.compile(c.cond, frame); + _this7._emit(': '); + _this7.compile(c.body, frame); + // preserve fall-throughs + if (c.body.children.length) { + _this7._emitLine('break;'); + } + }); + if (node.default) { + this._emit('default:'); + this.compile(node.default, frame); + } + this._emit('}'); + }; + _proto.compileIf = function compileIf(node, frame, async) { + var _this8 = this; + this._emit('if('); + this._compileExpression(node.cond, frame); + this._emitLine(') {'); + this._withScopedSyntax(function () { + _this8.compile(node.body, frame); + if (async) { + _this8._emit('cb()'); + } + }); + if (node.else_) { + this._emitLine('}\nelse {'); + this._withScopedSyntax(function () { + _this8.compile(node.else_, frame); + if (async) { + _this8._emit('cb()'); + } + }); + } else if (async) { + this._emitLine('}\nelse {'); + this._emit('cb()'); + } + this._emitLine('}'); + }; + _proto.compileIfAsync = function compileIfAsync(node, frame) { + this._emit('(function(cb) {'); + this.compileIf(node, frame, true); + this._emit('})(' + this._makeCallback()); + this._addScopeLevel(); + }; + _proto._emitLoopBindings = function _emitLoopBindings(node, arr, i, len) { + var _this9 = this; + var bindings = [{ + name: 'index', + val: i + " + 1" + }, { + name: 'index0', + val: i + }, { + name: 'revindex', + val: len + " - " + i + }, { + name: 'revindex0', + val: len + " - " + i + " - 1" + }, { + name: 'first', + val: i + " === 0" + }, { + name: 'last', + val: i + " === " + len + " - 1" + }, { + name: 'length', + val: len + }]; + bindings.forEach(function (b) { + _this9._emitLine("frame.set(\"loop." + b.name + "\", " + b.val + ");"); + }); + }; + _proto.compileFor = function compileFor(node, frame) { + var _this10 = this; + // Some of this code is ugly, but it keeps the generated code + // as fast as possible. ForAsync also shares some of this, but + // not much. + + var i = this._tmpid(); + var len = this._tmpid(); + var arr = this._tmpid(); + frame = frame.push(); + this._emitLine('frame = frame.push();'); + this._emit("var " + arr + " = "); + this._compileExpression(node.arr, frame); + this._emitLine(';'); + this._emit("if(" + arr + ") {"); + this._emitLine(arr + ' = runtime.fromIterator(' + arr + ');'); + + // If multiple names are passed, we need to bind them + // appropriately + if (node.name instanceof nodes.Array) { + this._emitLine("var " + i + ";"); + + // The object could be an arroy or object. Note that the + // body of the loop is duplicated for each condition, but + // we are optimizing for speed over size. + this._emitLine("if(runtime.isArray(" + arr + ")) {"); + this._emitLine("var " + len + " = " + arr + ".length;"); + this._emitLine("for(" + i + "=0; " + i + " < " + arr + ".length; " + i + "++) {"); + + // Bind each declared var + node.name.children.forEach(function (child, u) { + var tid = _this10._tmpid(); + _this10._emitLine("var " + tid + " = " + arr + "[" + i + "][" + u + "];"); + _this10._emitLine("frame.set(\"" + child + "\", " + arr + "[" + i + "][" + u + "]);"); + frame.set(node.name.children[u].value, tid); + }); + this._emitLoopBindings(node, arr, i, len); + this._withScopedSyntax(function () { + _this10.compile(node.body, frame); + }); + this._emitLine('}'); + this._emitLine('} else {'); + // Iterate over the key/values of an object + var _node$name$children = node.name.children, + key = _node$name$children[0], + val = _node$name$children[1]; + var k = this._tmpid(); + var v = this._tmpid(); + frame.set(key.value, k); + frame.set(val.value, v); + this._emitLine(i + " = -1;"); + this._emitLine("var " + len + " = runtime.keys(" + arr + ").length;"); + this._emitLine("for(var " + k + " in " + arr + ") {"); + this._emitLine(i + "++;"); + this._emitLine("var " + v + " = " + arr + "[" + k + "];"); + this._emitLine("frame.set(\"" + key.value + "\", " + k + ");"); + this._emitLine("frame.set(\"" + val.value + "\", " + v + ");"); + this._emitLoopBindings(node, arr, i, len); + this._withScopedSyntax(function () { + _this10.compile(node.body, frame); + }); + this._emitLine('}'); + this._emitLine('}'); + } else { + // Generate a typical array iteration + var _v = this._tmpid(); + frame.set(node.name.value, _v); + this._emitLine("var " + len + " = " + arr + ".length;"); + this._emitLine("for(var " + i + "=0; " + i + " < " + arr + ".length; " + i + "++) {"); + this._emitLine("var " + _v + " = " + arr + "[" + i + "];"); + this._emitLine("frame.set(\"" + node.name.value + "\", " + _v + ");"); + this._emitLoopBindings(node, arr, i, len); + this._withScopedSyntax(function () { + _this10.compile(node.body, frame); + }); + this._emitLine('}'); + } + this._emitLine('}'); + if (node.else_) { + this._emitLine('if (!' + len + ') {'); + this.compile(node.else_, frame); + this._emitLine('}'); + } + this._emitLine('frame = frame.pop();'); + }; + _proto._compileAsyncLoop = function _compileAsyncLoop(node, frame, parallel) { + var _this11 = this; + // This shares some code with the For tag, but not enough to + // worry about. This iterates across an object asynchronously, + // but not in parallel. + + var i = this._tmpid(); + var len = this._tmpid(); + var arr = this._tmpid(); + var asyncMethod = parallel ? 'asyncAll' : 'asyncEach'; + frame = frame.push(); + this._emitLine('frame = frame.push();'); + this._emit('var ' + arr + ' = runtime.fromIterator('); + this._compileExpression(node.arr, frame); + this._emitLine(');'); + if (node.name instanceof nodes.Array) { + var arrayLen = node.name.children.length; + this._emit("runtime." + asyncMethod + "(" + arr + ", " + arrayLen + ", function("); + node.name.children.forEach(function (name) { + _this11._emit(name.value + ","); + }); + this._emit(i + ',' + len + ',next) {'); + node.name.children.forEach(function (name) { + var id = name.value; + frame.set(id, id); + _this11._emitLine("frame.set(\"" + id + "\", " + id + ");"); + }); + } else { + var id = node.name.value; + this._emitLine("runtime." + asyncMethod + "(" + arr + ", 1, function(" + id + ", " + i + ", " + len + ",next) {"); + this._emitLine('frame.set("' + id + '", ' + id + ');'); + frame.set(id, id); + } + this._emitLoopBindings(node, arr, i, len); + this._withScopedSyntax(function () { + var buf; + if (parallel) { + buf = _this11._pushBuffer(); + } + _this11.compile(node.body, frame); + _this11._emitLine('next(' + i + (buf ? ',' + buf : '') + ');'); + if (parallel) { + _this11._popBuffer(); + } + }); + var output = this._tmpid(); + this._emitLine('}, ' + this._makeCallback(output)); + this._addScopeLevel(); + if (parallel) { + this._emitLine(this.buffer + ' += ' + output + ';'); + } + if (node.else_) { + this._emitLine('if (!' + arr + '.length) {'); + this.compile(node.else_, frame); + this._emitLine('}'); + } + this._emitLine('frame = frame.pop();'); + }; + _proto.compileAsyncEach = function compileAsyncEach(node, frame) { + this._compileAsyncLoop(node, frame); + }; + _proto.compileAsyncAll = function compileAsyncAll(node, frame) { + this._compileAsyncLoop(node, frame, true); + }; + _proto._compileMacro = function _compileMacro(node, frame) { + var _this12 = this; + var args = []; + var kwargs = null; + var funcId = 'macro_' + this._tmpid(); + var keepFrame = frame !== undefined; + + // Type check the definition of the args + node.args.children.forEach(function (arg, i) { + if (i === node.args.children.length - 1 && arg instanceof nodes.Dict) { + kwargs = arg; + } else { + _this12.assertType(arg, nodes.Symbol); + args.push(arg); + } + }); + var realNames = [].concat(args.map(function (n) { + return "l_" + n.value; + }), ['kwargs']); + + // Quoted argument names + var argNames = args.map(function (n) { + return "\"" + n.value + "\""; + }); + var kwargNames = (kwargs && kwargs.children || []).map(function (n) { + return "\"" + n.key.value + "\""; + }); + + // We pass a function to makeMacro which destructures the + // arguments so support setting positional args with keywords + // args and passing keyword args as positional args + // (essentially default values). See runtime.js. + var currFrame; + if (keepFrame) { + currFrame = frame.push(true); + } else { + currFrame = new Frame(); + } + this._emitLines("var " + funcId + " = runtime.makeMacro(", "[" + argNames.join(', ') + "], ", "[" + kwargNames.join(', ') + "], ", "function (" + realNames.join(', ') + ") {", 'var callerFrame = frame;', 'frame = ' + (keepFrame ? 'frame.push(true);' : 'new runtime.Frame();'), 'kwargs = kwargs || {};', 'if (Object.prototype.hasOwnProperty.call(kwargs, "caller")) {', 'frame.set("caller", kwargs.caller); }'); + + // Expose the arguments to the template. Don't need to use + // random names because the function + // will create a new run-time scope for us + args.forEach(function (arg) { + _this12._emitLine("frame.set(\"" + arg.value + "\", l_" + arg.value + ");"); + currFrame.set(arg.value, "l_" + arg.value); + }); + + // Expose the keyword arguments + if (kwargs) { + kwargs.children.forEach(function (pair) { + var name = pair.key.value; + _this12._emit("frame.set(\"" + name + "\", "); + _this12._emit("Object.prototype.hasOwnProperty.call(kwargs, \"" + name + "\")"); + _this12._emit(" ? kwargs[\"" + name + "\"] : "); + _this12._compileExpression(pair.value, currFrame); + _this12._emit(');'); + }); + } + var bufferId = this._pushBuffer(); + this._withScopedSyntax(function () { + _this12.compile(node.body, currFrame); + }); + this._emitLine('frame = ' + (keepFrame ? 'frame.pop();' : 'callerFrame;')); + this._emitLine("return new runtime.SafeString(" + bufferId + ");"); + this._emitLine('});'); + this._popBuffer(); + return funcId; + }; + _proto.compileMacro = function compileMacro(node, frame) { + var funcId = this._compileMacro(node); + + // Expose the macro to the templates + var name = node.name.value; + frame.set(name, funcId); + if (frame.parent) { + this._emitLine("frame.set(\"" + name + "\", " + funcId + ");"); + } else { + if (node.name.value.charAt(0) !== '_') { + this._emitLine("context.addExport(\"" + name + "\");"); + } + this._emitLine("context.setVariable(\"" + name + "\", " + funcId + ");"); + } + }; + _proto.compileCaller = function compileCaller(node, frame) { + // basically an anonymous "macro expression" + this._emit('(function (){'); + var funcId = this._compileMacro(node, frame); + this._emit("return " + funcId + ";})()"); + }; + _proto._compileGetTemplate = function _compileGetTemplate(node, frame, eagerCompile, ignoreMissing) { + var parentTemplateId = this._tmpid(); + var parentName = this._templateName(); + var cb = this._makeCallback(parentTemplateId); + var eagerCompileArg = eagerCompile ? 'true' : 'false'; + var ignoreMissingArg = ignoreMissing ? 'true' : 'false'; + this._emit('env.getTemplate('); + this._compileExpression(node.template, frame); + this._emitLine(", " + eagerCompileArg + ", " + parentName + ", " + ignoreMissingArg + ", " + cb); + return parentTemplateId; + }; + _proto.compileImport = function compileImport(node, frame) { + var target = node.target.value; + var id = this._compileGetTemplate(node, frame, false, false); + this._addScopeLevel(); + this._emitLine(id + '.getExported(' + (node.withContext ? 'context.getVariables(), frame, ' : '') + this._makeCallback(id)); + this._addScopeLevel(); + frame.set(target, id); + if (frame.parent) { + this._emitLine("frame.set(\"" + target + "\", " + id + ");"); + } else { + this._emitLine("context.setVariable(\"" + target + "\", " + id + ");"); + } + }; + _proto.compileFromImport = function compileFromImport(node, frame) { + var _this13 = this; + var importedId = this._compileGetTemplate(node, frame, false, false); + this._addScopeLevel(); + this._emitLine(importedId + '.getExported(' + (node.withContext ? 'context.getVariables(), frame, ' : '') + this._makeCallback(importedId)); + this._addScopeLevel(); + node.names.children.forEach(function (nameNode) { + var name; + var alias; + var id = _this13._tmpid(); + if (nameNode instanceof nodes.Pair) { + name = nameNode.key.value; + alias = nameNode.value.value; + } else { + name = nameNode.value; + alias = name; + } + _this13._emitLine("if(Object.prototype.hasOwnProperty.call(" + importedId + ", \"" + name + "\")) {"); + _this13._emitLine("var " + id + " = " + importedId + "." + name + ";"); + _this13._emitLine('} else {'); + _this13._emitLine("cb(new Error(\"cannot import '" + name + "'\")); return;"); + _this13._emitLine('}'); + frame.set(alias, id); + if (frame.parent) { + _this13._emitLine("frame.set(\"" + alias + "\", " + id + ");"); + } else { + _this13._emitLine("context.setVariable(\"" + alias + "\", " + id + ");"); + } + }); + }; + _proto.compileBlock = function compileBlock(node) { + var id = this._tmpid(); + + // If we are executing outside a block (creating a top-level + // block), we really don't want to execute its code because it + // will execute twice: once when the child template runs and + // again when the parent template runs. Note that blocks + // within blocks will *always* execute immediately *and* + // wherever else they are invoked (like used in a parent + // template). This may have behavioral differences from jinja + // because blocks can have side effects, but it seems like a + // waste of performance to always execute huge top-level + // blocks twice + if (!this.inBlock) { + this._emit('(parentTemplate ? function(e, c, f, r, cb) { cb(""); } : '); + } + this._emit("context.getBlock(\"" + node.name.value + "\")"); + if (!this.inBlock) { + this._emit(')'); + } + this._emitLine('(env, context, frame, runtime, ' + this._makeCallback(id)); + this._emitLine(this.buffer + " += " + id + ";"); + this._addScopeLevel(); + }; + _proto.compileSuper = function compileSuper(node, frame) { + var name = node.blockName.value; + var id = node.symbol.value; + var cb = this._makeCallback(id); + this._emitLine("context.getSuper(env, \"" + name + "\", b_" + name + ", frame, runtime, " + cb); + this._emitLine(id + " = runtime.markSafe(" + id + ");"); + this._addScopeLevel(); + frame.set(id, id); + }; + _proto.compileExtends = function compileExtends(node, frame) { + var k = this._tmpid(); + var parentTemplateId = this._compileGetTemplate(node, frame, true, false); + + // extends is a dynamic tag and can occur within a block like + // `if`, so if this happens we need to capture the parent + // template in the top-level scope + this._emitLine("parentTemplate = " + parentTemplateId); + this._emitLine("for(var " + k + " in parentTemplate.blocks) {"); + this._emitLine("context.addBlock(" + k + ", parentTemplate.blocks[" + k + "]);"); + this._emitLine('}'); + this._addScopeLevel(); + }; + _proto.compileInclude = function compileInclude(node, frame) { + this._emitLine('var tasks = [];'); + this._emitLine('tasks.push('); + this._emitLine('function(callback) {'); + var id = this._compileGetTemplate(node, frame, false, node.ignoreMissing); + this._emitLine("callback(null," + id + ");});"); + this._emitLine('});'); + var id2 = this._tmpid(); + this._emitLine('tasks.push('); + this._emitLine('function(template, callback){'); + this._emitLine('template.render(context.getVariables(), frame, ' + this._makeCallback(id2)); + this._emitLine('callback(null,' + id2 + ');});'); + this._emitLine('});'); + this._emitLine('tasks.push('); + this._emitLine('function(result, callback){'); + this._emitLine(this.buffer + " += result;"); + this._emitLine('callback(null);'); + this._emitLine('});'); + this._emitLine('env.waterfall(tasks, function(){'); + this._addScopeLevel(); + }; + _proto.compileTemplateData = function compileTemplateData(node, frame) { + this.compileLiteral(node, frame); + }; + _proto.compileCapture = function compileCapture(node, frame) { + var _this14 = this; + // we need to temporarily override the current buffer id as 'output' + // so the set block writes to the capture output instead of the buffer + var buffer = this.buffer; + this.buffer = 'output'; + this._emitLine('(function() {'); + this._emitLine('var output = "";'); + this._withScopedSyntax(function () { + _this14.compile(node.body, frame); + }); + this._emitLine('return output;'); + this._emitLine('})()'); + // and of course, revert back to the old buffer id + this.buffer = buffer; + }; + _proto.compileOutput = function compileOutput(node, frame) { + var _this15 = this; + var children = node.children; + children.forEach(function (child) { + // TemplateData is a special case because it is never + // autoescaped, so simply output it for optimization + if (child instanceof nodes.TemplateData) { + if (child.value) { + _this15._emit(_this15.buffer + " += "); + _this15.compileLiteral(child, frame); + _this15._emitLine(';'); + } + } else { + _this15._emit(_this15.buffer + " += runtime.suppressValue("); + if (_this15.throwOnUndefined) { + _this15._emit('runtime.ensureDefined('); + } + _this15.compile(child, frame); + if (_this15.throwOnUndefined) { + _this15._emit("," + node.lineno + "," + node.colno + ")"); + } + _this15._emit(', env.opts.autoescape);\n'); + } + }); + }; + _proto.compileRoot = function compileRoot(node, frame) { + var _this16 = this; + if (frame) { + this.fail('compileRoot: root node can\'t have frame'); + } + frame = new Frame(); + this._emitFuncBegin(node, 'root'); + this._emitLine('var parentTemplate = null;'); + this._compileChildren(node, frame); + this._emitLine('if(parentTemplate) {'); + this._emitLine('parentTemplate.rootRenderFunc(env, context, frame, runtime, cb);'); + this._emitLine('} else {'); + this._emitLine("cb(null, " + this.buffer + ");"); + this._emitLine('}'); + this._emitFuncEnd(true); + this.inBlock = true; + var blockNames = []; + var blocks = node.findAll(nodes.Block); + blocks.forEach(function (block, i) { + var name = block.name.value; + if (blockNames.indexOf(name) !== -1) { + throw new Error("Block \"" + name + "\" defined more than once."); + } + blockNames.push(name); + _this16._emitFuncBegin(block, "b_" + name); + var tmpFrame = new Frame(); + _this16._emitLine('var frame = frame.push(true);'); + _this16.compile(block.body, tmpFrame); + _this16._emitFuncEnd(); + }); + this._emitLine('return {'); + blocks.forEach(function (block, i) { + var blockName = "b_" + block.name.value; + _this16._emitLine(blockName + ": " + blockName + ","); + }); + this._emitLine('root: root\n};'); + }; + _proto.compile = function compile(node, frame) { + var _compile = this['compile' + node.typename]; + if (_compile) { + _compile.call(this, node, frame); + } else { + this.fail("compile: Cannot compile node: " + node.typename, node.lineno, node.colno); + } + }; + _proto.getCode = function getCode() { + return this.codebuf.join(''); + }; + return Compiler; +}(Obj); +module.exports = { + compile: function compile(src, asyncFilters, extensions, name, opts) { + if (opts === void 0) { + opts = {}; + } + var c = new Compiler(name, opts.throwOnUndefined); + + // Run the extension preprocessors against the source. + var preprocessors = (extensions || []).map(function (ext) { + return ext.preprocess; + }).filter(function (f) { + return !!f; + }); + var processedSrc = preprocessors.reduce(function (s, processor) { + return processor(s); + }, src); + c.compile(transformer.transform(parser.parse(processedSrc, extensions, opts), asyncFilters, name)); + return c.getCode(); + }, + Compiler: Compiler +}; + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +var path = __webpack_require__(4); +var _require = __webpack_require__(1), + EmitterObj = _require.EmitterObj; +module.exports = /*#__PURE__*/function (_EmitterObj) { + _inheritsLoose(Loader, _EmitterObj); + function Loader() { + return _EmitterObj.apply(this, arguments) || this; + } + var _proto = Loader.prototype; + _proto.resolve = function resolve(from, to) { + return path.resolve(path.dirname(from), to); + }; + _proto.isRelative = function isRelative(filename) { + return filename.indexOf('./') === 0 || filename.indexOf('../') === 0; + }; + return Loader; +}(EmitterObj); + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +var asap = __webpack_require__(12); +var _waterfall = __webpack_require__(15); +var lib = __webpack_require__(0); +var compiler = __webpack_require__(5); +var filters = __webpack_require__(18); +var _require = __webpack_require__(10), + FileSystemLoader = _require.FileSystemLoader, + WebLoader = _require.WebLoader, + PrecompiledLoader = _require.PrecompiledLoader; +var tests = __webpack_require__(20); +var globals = __webpack_require__(21); +var _require2 = __webpack_require__(1), + Obj = _require2.Obj, + EmitterObj = _require2.EmitterObj; +var globalRuntime = __webpack_require__(2); +var handleError = globalRuntime.handleError, + Frame = globalRuntime.Frame; +var expressApp = __webpack_require__(22); + +// If the user is using the async API, *always* call it +// asynchronously even if the template was synchronous. +function callbackAsap(cb, err, res) { + asap(function () { + cb(err, res); + }); +} + +/** + * A no-op template, for use with {% include ignore missing %} + */ +var noopTmplSrc = { + type: 'code', + obj: { + root: function root(env, context, frame, runtime, cb) { + try { + cb(null, ''); + } catch (e) { + cb(handleError(e, null, null)); + } + } + } +}; +var Environment = /*#__PURE__*/function (_EmitterObj) { + _inheritsLoose(Environment, _EmitterObj); + function Environment() { + return _EmitterObj.apply(this, arguments) || this; + } + var _proto = Environment.prototype; + _proto.init = function init(loaders, opts) { + var _this = this; + // The dev flag determines the trace that'll be shown on errors. + // If set to true, returns the full trace from the error point, + // otherwise will return trace starting from Template.render + // (the full trace from within nunjucks may confuse developers using + // the library) + // defaults to false + opts = this.opts = opts || {}; + this.opts.dev = !!opts.dev; + + // The autoescape flag sets global autoescaping. If true, + // every string variable will be escaped by default. + // If false, strings can be manually escaped using the `escape` filter. + // defaults to true + this.opts.autoescape = opts.autoescape != null ? opts.autoescape : true; + + // If true, this will make the system throw errors if trying + // to output a null or undefined value + this.opts.throwOnUndefined = !!opts.throwOnUndefined; + this.opts.trimBlocks = !!opts.trimBlocks; + this.opts.lstripBlocks = !!opts.lstripBlocks; + this.loaders = []; + if (!loaders) { + // The filesystem loader is only available server-side + if (FileSystemLoader) { + this.loaders = [new FileSystemLoader('views')]; + } else if (WebLoader) { + this.loaders = [new WebLoader('/views')]; + } + } else { + this.loaders = lib.isArray(loaders) ? loaders : [loaders]; + } + + // It's easy to use precompiled templates: just include them + // before you configure nunjucks and this will automatically + // pick it up and use it + if (typeof window !== 'undefined' && window.nunjucksPrecompiled) { + this.loaders.unshift(new PrecompiledLoader(window.nunjucksPrecompiled)); + } + this._initLoaders(); + this.globals = globals(); + this.filters = {}; + this.tests = {}; + this.asyncFilters = []; + this.extensions = {}; + this.extensionsList = []; + lib._entries(filters).forEach(function (_ref) { + var name = _ref[0], + filter = _ref[1]; + return _this.addFilter(name, filter); + }); + lib._entries(tests).forEach(function (_ref2) { + var name = _ref2[0], + test = _ref2[1]; + return _this.addTest(name, test); + }); + }; + _proto._initLoaders = function _initLoaders() { + var _this2 = this; + this.loaders.forEach(function (loader) { + // Caching and cache busting + loader.cache = {}; + if (typeof loader.on === 'function') { + loader.on('update', function (name, fullname) { + loader.cache[name] = null; + _this2.emit('update', name, fullname, loader); + }); + loader.on('load', function (name, source) { + _this2.emit('load', name, source, loader); + }); + } + }); + }; + _proto.invalidateCache = function invalidateCache() { + this.loaders.forEach(function (loader) { + loader.cache = {}; + }); + }; + _proto.addExtension = function addExtension(name, extension) { + extension.__name = name; + this.extensions[name] = extension; + this.extensionsList.push(extension); + return this; + }; + _proto.removeExtension = function removeExtension(name) { + var extension = this.getExtension(name); + if (!extension) { + return; + } + this.extensionsList = lib.without(this.extensionsList, extension); + delete this.extensions[name]; + }; + _proto.getExtension = function getExtension(name) { + return this.extensions[name]; + }; + _proto.hasExtension = function hasExtension(name) { + return !!this.extensions[name]; + }; + _proto.addGlobal = function addGlobal(name, value) { + this.globals[name] = value; + return this; + }; + _proto.getGlobal = function getGlobal(name) { + if (typeof this.globals[name] === 'undefined') { + throw new Error('global not found: ' + name); + } + return this.globals[name]; + }; + _proto.addFilter = function addFilter(name, func, async) { + var wrapped = func; + if (async) { + this.asyncFilters.push(name); + } + this.filters[name] = wrapped; + return this; + }; + _proto.getFilter = function getFilter(name) { + if (!this.filters[name]) { + throw new Error('filter not found: ' + name); + } + return this.filters[name]; + }; + _proto.addTest = function addTest(name, func) { + this.tests[name] = func; + return this; + }; + _proto.getTest = function getTest(name) { + if (!this.tests[name]) { + throw new Error('test not found: ' + name); + } + return this.tests[name]; + }; + _proto.resolveTemplate = function resolveTemplate(loader, parentName, filename) { + var isRelative = loader.isRelative && parentName ? loader.isRelative(filename) : false; + return isRelative && loader.resolve ? loader.resolve(parentName, filename) : filename; + }; + _proto.getTemplate = function getTemplate(name, eagerCompile, parentName, ignoreMissing, cb) { + var _this3 = this; + var that = this; + var tmpl = null; + if (name && name.raw) { + // this fixes autoescape for templates referenced in symbols + name = name.raw; + } + if (lib.isFunction(parentName)) { + cb = parentName; + parentName = null; + eagerCompile = eagerCompile || false; + } + if (lib.isFunction(eagerCompile)) { + cb = eagerCompile; + eagerCompile = false; + } + if (name instanceof Template) { + tmpl = name; + } else if (typeof name !== 'string') { + throw new Error('template names must be a string: ' + name); + } else { + for (var i = 0; i < this.loaders.length; i++) { + var loader = this.loaders[i]; + tmpl = loader.cache[this.resolveTemplate(loader, parentName, name)]; + if (tmpl) { + break; + } + } + } + if (tmpl) { + if (eagerCompile) { + tmpl.compile(); + } + if (cb) { + cb(null, tmpl); + return undefined; + } else { + return tmpl; + } + } + var syncResult; + var createTemplate = function createTemplate(err, info) { + if (!info && !err && !ignoreMissing) { + err = new Error('template not found: ' + name); + } + if (err) { + if (cb) { + cb(err); + return; + } else { + throw err; + } + } + var newTmpl; + if (!info) { + newTmpl = new Template(noopTmplSrc, _this3, '', eagerCompile); + } else { + newTmpl = new Template(info.src, _this3, info.path, eagerCompile); + if (!info.noCache) { + info.loader.cache[name] = newTmpl; + } + } + if (cb) { + cb(null, newTmpl); + } else { + syncResult = newTmpl; + } + }; + lib.asyncIter(this.loaders, function (loader, i, next, done) { + function handle(err, src) { + if (err) { + done(err); + } else if (src) { + src.loader = loader; + done(null, src); + } else { + next(); + } + } + + // Resolve name relative to parentName + name = that.resolveTemplate(loader, parentName, name); + if (loader.async) { + loader.getSource(name, handle); + } else { + handle(null, loader.getSource(name)); + } + }, createTemplate); + return syncResult; + }; + _proto.express = function express(app) { + return expressApp(this, app); + }; + _proto.render = function render(name, ctx, cb) { + if (lib.isFunction(ctx)) { + cb = ctx; + ctx = null; + } + + // We support a synchronous API to make it easier to migrate + // existing code to async. This works because if you don't do + // anything async work, the whole thing is actually run + // synchronously. + var syncResult = null; + this.getTemplate(name, function (err, tmpl) { + if (err && cb) { + callbackAsap(cb, err); + } else if (err) { + throw err; + } else { + syncResult = tmpl.render(ctx, cb); + } + }); + return syncResult; + }; + _proto.renderString = function renderString(src, ctx, opts, cb) { + if (lib.isFunction(opts)) { + cb = opts; + opts = {}; + } + opts = opts || {}; + var tmpl = new Template(src, this, opts.path); + return tmpl.render(ctx, cb); + }; + _proto.waterfall = function waterfall(tasks, callback, forceAsync) { + return _waterfall(tasks, callback, forceAsync); + }; + return Environment; +}(EmitterObj); +var Context = /*#__PURE__*/function (_Obj) { + _inheritsLoose(Context, _Obj); + function Context() { + return _Obj.apply(this, arguments) || this; + } + var _proto2 = Context.prototype; + _proto2.init = function init(ctx, blocks, env) { + var _this4 = this; + // Has to be tied to an environment so we can tap into its globals. + this.env = env || new Environment(); + + // Make a duplicate of ctx + this.ctx = lib.extend({}, ctx); + this.blocks = {}; + this.exported = []; + lib.keys(blocks).forEach(function (name) { + _this4.addBlock(name, blocks[name]); + }); + }; + _proto2.lookup = function lookup(name) { + // This is one of the most called functions, so optimize for + // the typical case where the name isn't in the globals + if (name in this.env.globals && !(name in this.ctx)) { + return this.env.globals[name]; + } else { + return this.ctx[name]; + } + }; + _proto2.setVariable = function setVariable(name, val) { + this.ctx[name] = val; + }; + _proto2.getVariables = function getVariables() { + return this.ctx; + }; + _proto2.addBlock = function addBlock(name, block) { + this.blocks[name] = this.blocks[name] || []; + this.blocks[name].push(block); + return this; + }; + _proto2.getBlock = function getBlock(name) { + if (!this.blocks[name]) { + throw new Error('unknown block "' + name + '"'); + } + return this.blocks[name][0]; + }; + _proto2.getSuper = function getSuper(env, name, block, frame, runtime, cb) { + var idx = lib.indexOf(this.blocks[name] || [], block); + var blk = this.blocks[name][idx + 1]; + var context = this; + if (idx === -1 || !blk) { + throw new Error('no super block available for "' + name + '"'); + } + blk(env, context, frame, runtime, cb); + }; + _proto2.addExport = function addExport(name) { + this.exported.push(name); + }; + _proto2.getExported = function getExported() { + var _this5 = this; + var exported = {}; + this.exported.forEach(function (name) { + exported[name] = _this5.ctx[name]; + }); + return exported; + }; + return Context; +}(Obj); +var Template = /*#__PURE__*/function (_Obj2) { + _inheritsLoose(Template, _Obj2); + function Template() { + return _Obj2.apply(this, arguments) || this; + } + var _proto3 = Template.prototype; + _proto3.init = function init(src, env, path, eagerCompile) { + this.env = env || new Environment(); + if (lib.isObject(src)) { + switch (src.type) { + case 'code': + this.tmplProps = src.obj; + break; + case 'string': + this.tmplStr = src.obj; + break; + default: + throw new Error("Unexpected template object type " + src.type + "; expected 'code', or 'string'"); + } + } else if (lib.isString(src)) { + this.tmplStr = src; + } else { + throw new Error('src must be a string or an object describing the source'); + } + this.path = path; + if (eagerCompile) { + try { + this._compile(); + } catch (err) { + throw lib._prettifyError(this.path, this.env.opts.dev, err); + } + } else { + this.compiled = false; + } + }; + _proto3.render = function render(ctx, parentFrame, cb) { + var _this6 = this; + if (typeof ctx === 'function') { + cb = ctx; + ctx = {}; + } else if (typeof parentFrame === 'function') { + cb = parentFrame; + parentFrame = null; + } + + // If there is a parent frame, we are being called from internal + // code of another template, and the internal system + // depends on the sync/async nature of the parent template + // to be inherited, so force an async callback + var forceAsync = !parentFrame; + + // Catch compile errors for async rendering + try { + this.compile(); + } catch (e) { + var err = lib._prettifyError(this.path, this.env.opts.dev, e); + if (cb) { + return callbackAsap(cb, err); + } else { + throw err; + } + } + var context = new Context(ctx || {}, this.blocks, this.env); + var frame = parentFrame ? parentFrame.push(true) : new Frame(); + frame.topLevel = true; + var syncResult = null; + var didError = false; + this.rootRenderFunc(this.env, context, frame, globalRuntime, function (err, res) { + // TODO: this is actually a bug in the compiled template (because waterfall + // tasks are both not passing errors up the chain of callbacks AND are not + // causing a return from the top-most render function). But fixing that + // will require a more substantial change to the compiler. + if (didError && cb && typeof res !== 'undefined') { + // prevent multiple calls to cb + return; + } + if (err) { + err = lib._prettifyError(_this6.path, _this6.env.opts.dev, err); + didError = true; + } + if (cb) { + if (forceAsync) { + callbackAsap(cb, err, res); + } else { + cb(err, res); + } + } else { + if (err) { + throw err; + } + syncResult = res; + } + }); + return syncResult; + }; + _proto3.getExported = function getExported(ctx, parentFrame, cb) { + // eslint-disable-line consistent-return + if (typeof ctx === 'function') { + cb = ctx; + ctx = {}; + } + if (typeof parentFrame === 'function') { + cb = parentFrame; + parentFrame = null; + } + + // Catch compile errors for async rendering + try { + this.compile(); + } catch (e) { + if (cb) { + return cb(e); + } else { + throw e; + } + } + var frame = parentFrame ? parentFrame.push() : new Frame(); + frame.topLevel = true; + + // Run the rootRenderFunc to populate the context with exported vars + var context = new Context(ctx || {}, this.blocks, this.env); + this.rootRenderFunc(this.env, context, frame, globalRuntime, function (err) { + if (err) { + cb(err, null); + } else { + cb(null, context.getExported()); + } + }); + }; + _proto3.compile = function compile() { + if (!this.compiled) { + this._compile(); + } + }; + _proto3._compile = function _compile() { + var props; + if (this.tmplProps) { + props = this.tmplProps; + } else { + var source = compiler.compile(this.tmplStr, this.env.asyncFilters, this.env.extensionsList, this.path, this.env.opts); + var func = new Function(source); // eslint-disable-line no-new-func + props = func(); + } + this.blocks = this._getBlocks(props); + this.rootRenderFunc = props.root; + this.compiled = true; + }; + _proto3._getBlocks = function _getBlocks(props) { + var blocks = {}; + lib.keys(props).forEach(function (k) { + if (k.slice(0, 2) === 'b_') { + blocks[k.slice(2)] = props[k]; + } + }); + return blocks; + }; + return Template; +}(Obj); +module.exports = { + Environment: Environment, + Template: Template +}; + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +var lexer = __webpack_require__(9); +var nodes = __webpack_require__(3); +var Obj = __webpack_require__(1).Obj; +var lib = __webpack_require__(0); +var Parser = /*#__PURE__*/function (_Obj) { + _inheritsLoose(Parser, _Obj); + function Parser() { + return _Obj.apply(this, arguments) || this; + } + var _proto = Parser.prototype; + _proto.init = function init(tokens) { + this.tokens = tokens; + this.peeked = null; + this.breakOnBlocks = null; + this.dropLeadingWhitespace = false; + this.extensions = []; + }; + _proto.nextToken = function nextToken(withWhitespace) { + var tok; + if (this.peeked) { + if (!withWhitespace && this.peeked.type === lexer.TOKEN_WHITESPACE) { + this.peeked = null; + } else { + tok = this.peeked; + this.peeked = null; + return tok; + } + } + tok = this.tokens.nextToken(); + if (!withWhitespace) { + while (tok && tok.type === lexer.TOKEN_WHITESPACE) { + tok = this.tokens.nextToken(); + } + } + return tok; + }; + _proto.peekToken = function peekToken() { + this.peeked = this.peeked || this.nextToken(); + return this.peeked; + }; + _proto.pushToken = function pushToken(tok) { + if (this.peeked) { + throw new Error('pushToken: can only push one token on between reads'); + } + this.peeked = tok; + }; + _proto.error = function error(msg, lineno, colno) { + if (lineno === undefined || colno === undefined) { + var tok = this.peekToken() || {}; + lineno = tok.lineno; + colno = tok.colno; + } + if (lineno !== undefined) { + lineno += 1; + } + if (colno !== undefined) { + colno += 1; + } + return new lib.TemplateError(msg, lineno, colno); + }; + _proto.fail = function fail(msg, lineno, colno) { + throw this.error(msg, lineno, colno); + }; + _proto.skip = function skip(type) { + var tok = this.nextToken(); + if (!tok || tok.type !== type) { + this.pushToken(tok); + return false; + } + return true; + }; + _proto.expect = function expect(type) { + var tok = this.nextToken(); + if (tok.type !== type) { + this.fail('expected ' + type + ', got ' + tok.type, tok.lineno, tok.colno); + } + return tok; + }; + _proto.skipValue = function skipValue(type, val) { + var tok = this.nextToken(); + if (!tok || tok.type !== type || tok.value !== val) { + this.pushToken(tok); + return false; + } + return true; + }; + _proto.skipSymbol = function skipSymbol(val) { + return this.skipValue(lexer.TOKEN_SYMBOL, val); + }; + _proto.advanceAfterBlockEnd = function advanceAfterBlockEnd(name) { + var tok; + if (!name) { + tok = this.peekToken(); + if (!tok) { + this.fail('unexpected end of file'); + } + if (tok.type !== lexer.TOKEN_SYMBOL) { + this.fail('advanceAfterBlockEnd: expected symbol token or ' + 'explicit name to be passed'); + } + name = this.nextToken().value; + } + tok = this.nextToken(); + if (tok && tok.type === lexer.TOKEN_BLOCK_END) { + if (tok.value.charAt(0) === '-') { + this.dropLeadingWhitespace = true; + } + } else { + this.fail('expected block end in ' + name + ' statement'); + } + return tok; + }; + _proto.advanceAfterVariableEnd = function advanceAfterVariableEnd() { + var tok = this.nextToken(); + if (tok && tok.type === lexer.TOKEN_VARIABLE_END) { + this.dropLeadingWhitespace = tok.value.charAt(tok.value.length - this.tokens.tags.VARIABLE_END.length - 1) === '-'; + } else { + this.pushToken(tok); + this.fail('expected variable end'); + } + }; + _proto.parseFor = function parseFor() { + var forTok = this.peekToken(); + var node; + var endBlock; + if (this.skipSymbol('for')) { + node = new nodes.For(forTok.lineno, forTok.colno); + endBlock = 'endfor'; + } else if (this.skipSymbol('asyncEach')) { + node = new nodes.AsyncEach(forTok.lineno, forTok.colno); + endBlock = 'endeach'; + } else if (this.skipSymbol('asyncAll')) { + node = new nodes.AsyncAll(forTok.lineno, forTok.colno); + endBlock = 'endall'; + } else { + this.fail('parseFor: expected for{Async}', forTok.lineno, forTok.colno); + } + node.name = this.parsePrimary(); + if (!(node.name instanceof nodes.Symbol)) { + this.fail('parseFor: variable name expected for loop'); + } + var type = this.peekToken().type; + if (type === lexer.TOKEN_COMMA) { + // key/value iteration + var key = node.name; + node.name = new nodes.Array(key.lineno, key.colno); + node.name.addChild(key); + while (this.skip(lexer.TOKEN_COMMA)) { + var prim = this.parsePrimary(); + node.name.addChild(prim); + } + } + if (!this.skipSymbol('in')) { + this.fail('parseFor: expected "in" keyword for loop', forTok.lineno, forTok.colno); + } + node.arr = this.parseExpression(); + this.advanceAfterBlockEnd(forTok.value); + node.body = this.parseUntilBlocks(endBlock, 'else'); + if (this.skipSymbol('else')) { + this.advanceAfterBlockEnd('else'); + node.else_ = this.parseUntilBlocks(endBlock); + } + this.advanceAfterBlockEnd(); + return node; + }; + _proto.parseMacro = function parseMacro() { + var macroTok = this.peekToken(); + if (!this.skipSymbol('macro')) { + this.fail('expected macro'); + } + var name = this.parsePrimary(true); + var args = this.parseSignature(); + var node = new nodes.Macro(macroTok.lineno, macroTok.colno, name, args); + this.advanceAfterBlockEnd(macroTok.value); + node.body = this.parseUntilBlocks('endmacro'); + this.advanceAfterBlockEnd(); + return node; + }; + _proto.parseCall = function parseCall() { + // a call block is parsed as a normal FunCall, but with an added + // 'caller' kwarg which is a Caller node. + var callTok = this.peekToken(); + if (!this.skipSymbol('call')) { + this.fail('expected call'); + } + var callerArgs = this.parseSignature(true) || new nodes.NodeList(); + var macroCall = this.parsePrimary(); + this.advanceAfterBlockEnd(callTok.value); + var body = this.parseUntilBlocks('endcall'); + this.advanceAfterBlockEnd(); + var callerName = new nodes.Symbol(callTok.lineno, callTok.colno, 'caller'); + var callerNode = new nodes.Caller(callTok.lineno, callTok.colno, callerName, callerArgs, body); + + // add the additional caller kwarg, adding kwargs if necessary + var args = macroCall.args.children; + if (!(args[args.length - 1] instanceof nodes.KeywordArgs)) { + args.push(new nodes.KeywordArgs()); + } + var kwargs = args[args.length - 1]; + kwargs.addChild(new nodes.Pair(callTok.lineno, callTok.colno, callerName, callerNode)); + return new nodes.Output(callTok.lineno, callTok.colno, [macroCall]); + }; + _proto.parseWithContext = function parseWithContext() { + var tok = this.peekToken(); + var withContext = null; + if (this.skipSymbol('with')) { + withContext = true; + } else if (this.skipSymbol('without')) { + withContext = false; + } + if (withContext !== null) { + if (!this.skipSymbol('context')) { + this.fail('parseFrom: expected context after with/without', tok.lineno, tok.colno); + } + } + return withContext; + }; + _proto.parseImport = function parseImport() { + var importTok = this.peekToken(); + if (!this.skipSymbol('import')) { + this.fail('parseImport: expected import', importTok.lineno, importTok.colno); + } + var template = this.parseExpression(); + if (!this.skipSymbol('as')) { + this.fail('parseImport: expected "as" keyword', importTok.lineno, importTok.colno); + } + var target = this.parseExpression(); + var withContext = this.parseWithContext(); + var node = new nodes.Import(importTok.lineno, importTok.colno, template, target, withContext); + this.advanceAfterBlockEnd(importTok.value); + return node; + }; + _proto.parseFrom = function parseFrom() { + var fromTok = this.peekToken(); + if (!this.skipSymbol('from')) { + this.fail('parseFrom: expected from'); + } + var template = this.parseExpression(); + if (!this.skipSymbol('import')) { + this.fail('parseFrom: expected import', fromTok.lineno, fromTok.colno); + } + var names = new nodes.NodeList(); + var withContext; + while (1) { + // eslint-disable-line no-constant-condition + var nextTok = this.peekToken(); + if (nextTok.type === lexer.TOKEN_BLOCK_END) { + if (!names.children.length) { + this.fail('parseFrom: Expected at least one import name', fromTok.lineno, fromTok.colno); + } + + // Since we are manually advancing past the block end, + // need to keep track of whitespace control (normally + // this is done in `advanceAfterBlockEnd` + if (nextTok.value.charAt(0) === '-') { + this.dropLeadingWhitespace = true; + } + this.nextToken(); + break; + } + if (names.children.length > 0 && !this.skip(lexer.TOKEN_COMMA)) { + this.fail('parseFrom: expected comma', fromTok.lineno, fromTok.colno); + } + var name = this.parsePrimary(); + if (name.value.charAt(0) === '_') { + this.fail('parseFrom: names starting with an underscore cannot be imported', name.lineno, name.colno); + } + if (this.skipSymbol('as')) { + var alias = this.parsePrimary(); + names.addChild(new nodes.Pair(name.lineno, name.colno, name, alias)); + } else { + names.addChild(name); + } + withContext = this.parseWithContext(); + } + return new nodes.FromImport(fromTok.lineno, fromTok.colno, template, names, withContext); + }; + _proto.parseBlock = function parseBlock() { + var tag = this.peekToken(); + if (!this.skipSymbol('block')) { + this.fail('parseBlock: expected block', tag.lineno, tag.colno); + } + var node = new nodes.Block(tag.lineno, tag.colno); + node.name = this.parsePrimary(); + if (!(node.name instanceof nodes.Symbol)) { + this.fail('parseBlock: variable name expected', tag.lineno, tag.colno); + } + this.advanceAfterBlockEnd(tag.value); + node.body = this.parseUntilBlocks('endblock'); + this.skipSymbol('endblock'); + this.skipSymbol(node.name.value); + var tok = this.peekToken(); + if (!tok) { + this.fail('parseBlock: expected endblock, got end of file'); + } + this.advanceAfterBlockEnd(tok.value); + return node; + }; + _proto.parseExtends = function parseExtends() { + var tagName = 'extends'; + var tag = this.peekToken(); + if (!this.skipSymbol(tagName)) { + this.fail('parseTemplateRef: expected ' + tagName); + } + var node = new nodes.Extends(tag.lineno, tag.colno); + node.template = this.parseExpression(); + this.advanceAfterBlockEnd(tag.value); + return node; + }; + _proto.parseInclude = function parseInclude() { + var tagName = 'include'; + var tag = this.peekToken(); + if (!this.skipSymbol(tagName)) { + this.fail('parseInclude: expected ' + tagName); + } + var node = new nodes.Include(tag.lineno, tag.colno); + node.template = this.parseExpression(); + if (this.skipSymbol('ignore') && this.skipSymbol('missing')) { + node.ignoreMissing = true; + } + this.advanceAfterBlockEnd(tag.value); + return node; + }; + _proto.parseIf = function parseIf() { + var tag = this.peekToken(); + var node; + if (this.skipSymbol('if') || this.skipSymbol('elif') || this.skipSymbol('elseif')) { + node = new nodes.If(tag.lineno, tag.colno); + } else if (this.skipSymbol('ifAsync')) { + node = new nodes.IfAsync(tag.lineno, tag.colno); + } else { + this.fail('parseIf: expected if, elif, or elseif', tag.lineno, tag.colno); + } + node.cond = this.parseExpression(); + this.advanceAfterBlockEnd(tag.value); + node.body = this.parseUntilBlocks('elif', 'elseif', 'else', 'endif'); + var tok = this.peekToken(); + switch (tok && tok.value) { + case 'elseif': + case 'elif': + node.else_ = this.parseIf(); + break; + case 'else': + this.advanceAfterBlockEnd(); + node.else_ = this.parseUntilBlocks('endif'); + this.advanceAfterBlockEnd(); + break; + case 'endif': + node.else_ = null; + this.advanceAfterBlockEnd(); + break; + default: + this.fail('parseIf: expected elif, else, or endif, got end of file'); + } + return node; + }; + _proto.parseSet = function parseSet() { + var tag = this.peekToken(); + if (!this.skipSymbol('set')) { + this.fail('parseSet: expected set', tag.lineno, tag.colno); + } + var node = new nodes.Set(tag.lineno, tag.colno, []); + var target; + while (target = this.parsePrimary()) { + node.targets.push(target); + if (!this.skip(lexer.TOKEN_COMMA)) { + break; + } + } + if (!this.skipValue(lexer.TOKEN_OPERATOR, '=')) { + if (!this.skip(lexer.TOKEN_BLOCK_END)) { + this.fail('parseSet: expected = or block end in set tag', tag.lineno, tag.colno); + } else { + node.body = new nodes.Capture(tag.lineno, tag.colno, this.parseUntilBlocks('endset')); + node.value = null; + this.advanceAfterBlockEnd(); + } + } else { + node.value = this.parseExpression(); + this.advanceAfterBlockEnd(tag.value); + } + return node; + }; + _proto.parseSwitch = function parseSwitch() { + /* + * Store the tag names in variables in case someone ever wants to + * customize this. + */ + var switchStart = 'switch'; + var switchEnd = 'endswitch'; + var caseStart = 'case'; + var caseDefault = 'default'; + + // Get the switch tag. + var tag = this.peekToken(); + + // fail early if we get some unexpected tag. + if (!this.skipSymbol(switchStart) && !this.skipSymbol(caseStart) && !this.skipSymbol(caseDefault)) { + this.fail('parseSwitch: expected "switch," "case" or "default"', tag.lineno, tag.colno); + } + + // parse the switch expression + var expr = this.parseExpression(); + + // advance until a start of a case, a default case or an endswitch. + this.advanceAfterBlockEnd(switchStart); + this.parseUntilBlocks(caseStart, caseDefault, switchEnd); + + // this is the first case. it could also be an endswitch, we'll check. + var tok = this.peekToken(); + + // create new variables for our cases and default case. + var cases = []; + var defaultCase; + + // while we're dealing with new cases nodes... + do { + // skip the start symbol and get the case expression + this.skipSymbol(caseStart); + var cond = this.parseExpression(); + this.advanceAfterBlockEnd(switchStart); + // get the body of the case node and add it to the array of cases. + var body = this.parseUntilBlocks(caseStart, caseDefault, switchEnd); + cases.push(new nodes.Case(tok.line, tok.col, cond, body)); + // get our next case + tok = this.peekToken(); + } while (tok && tok.value === caseStart); + + // we either have a default case or a switch end. + switch (tok.value) { + case caseDefault: + this.advanceAfterBlockEnd(); + defaultCase = this.parseUntilBlocks(switchEnd); + this.advanceAfterBlockEnd(); + break; + case switchEnd: + this.advanceAfterBlockEnd(); + break; + default: + // otherwise bail because EOF + this.fail('parseSwitch: expected "case," "default" or "endswitch," got EOF.'); + } + + // and return the switch node. + return new nodes.Switch(tag.lineno, tag.colno, expr, cases, defaultCase); + }; + _proto.parseStatement = function parseStatement() { + var tok = this.peekToken(); + var node; + if (tok.type !== lexer.TOKEN_SYMBOL) { + this.fail('tag name expected', tok.lineno, tok.colno); + } + if (this.breakOnBlocks && lib.indexOf(this.breakOnBlocks, tok.value) !== -1) { + return null; + } + switch (tok.value) { + case 'raw': + return this.parseRaw(); + case 'verbatim': + return this.parseRaw('verbatim'); + case 'if': + case 'ifAsync': + return this.parseIf(); + case 'for': + case 'asyncEach': + case 'asyncAll': + return this.parseFor(); + case 'block': + return this.parseBlock(); + case 'extends': + return this.parseExtends(); + case 'include': + return this.parseInclude(); + case 'set': + return this.parseSet(); + case 'macro': + return this.parseMacro(); + case 'call': + return this.parseCall(); + case 'import': + return this.parseImport(); + case 'from': + return this.parseFrom(); + case 'filter': + return this.parseFilterStatement(); + case 'switch': + return this.parseSwitch(); + default: + if (this.extensions.length) { + for (var i = 0; i < this.extensions.length; i++) { + var ext = this.extensions[i]; + if (lib.indexOf(ext.tags || [], tok.value) !== -1) { + return ext.parse(this, nodes, lexer); + } + } + } + this.fail('unknown block tag: ' + tok.value, tok.lineno, tok.colno); + } + return node; + }; + _proto.parseRaw = function parseRaw(tagName) { + tagName = tagName || 'raw'; + var endTagName = 'end' + tagName; + // Look for upcoming raw blocks (ignore all other kinds of blocks) + var rawBlockRegex = new RegExp('([\\s\\S]*?){%\\s*(' + tagName + '|' + endTagName + ')\\s*(?=%})%}'); + var rawLevel = 1; + var str = ''; + var matches = null; + + // Skip opening raw token + // Keep this token to track line and column numbers + var begun = this.advanceAfterBlockEnd(); + + // Exit when there's nothing to match + // or when we've found the matching "endraw" block + while ((matches = this.tokens._extractRegex(rawBlockRegex)) && rawLevel > 0) { + var all = matches[0]; + var pre = matches[1]; + var blockName = matches[2]; + + // Adjust rawlevel + if (blockName === tagName) { + rawLevel += 1; + } else if (blockName === endTagName) { + rawLevel -= 1; + } + + // Add to str + if (rawLevel === 0) { + // We want to exclude the last "endraw" + str += pre; + // Move tokenizer to beginning of endraw block + this.tokens.backN(all.length - pre.length); + } else { + str += all; + } + } + return new nodes.Output(begun.lineno, begun.colno, [new nodes.TemplateData(begun.lineno, begun.colno, str)]); + }; + _proto.parsePostfix = function parsePostfix(node) { + var lookup; + var tok = this.peekToken(); + while (tok) { + if (tok.type === lexer.TOKEN_LEFT_PAREN) { + // Function call + node = new nodes.FunCall(tok.lineno, tok.colno, node, this.parseSignature()); + } else if (tok.type === lexer.TOKEN_LEFT_BRACKET) { + // Reference + lookup = this.parseAggregate(); + if (lookup.children.length > 1) { + this.fail('invalid index'); + } + node = new nodes.LookupVal(tok.lineno, tok.colno, node, lookup.children[0]); + } else if (tok.type === lexer.TOKEN_OPERATOR && tok.value === '.') { + // Reference + this.nextToken(); + var val = this.nextToken(); + if (val.type !== lexer.TOKEN_SYMBOL) { + this.fail('expected name as lookup value, got ' + val.value, val.lineno, val.colno); + } + + // Make a literal string because it's not a variable + // reference + lookup = new nodes.Literal(val.lineno, val.colno, val.value); + node = new nodes.LookupVal(tok.lineno, tok.colno, node, lookup); + } else { + break; + } + tok = this.peekToken(); + } + return node; + }; + _proto.parseExpression = function parseExpression() { + var node = this.parseInlineIf(); + return node; + }; + _proto.parseInlineIf = function parseInlineIf() { + var node = this.parseOr(); + if (this.skipSymbol('if')) { + var condNode = this.parseOr(); + var bodyNode = node; + node = new nodes.InlineIf(node.lineno, node.colno); + node.body = bodyNode; + node.cond = condNode; + if (this.skipSymbol('else')) { + node.else_ = this.parseOr(); + } else { + node.else_ = null; + } + } + return node; + }; + _proto.parseOr = function parseOr() { + var node = this.parseAnd(); + while (this.skipSymbol('or')) { + var node2 = this.parseAnd(); + node = new nodes.Or(node.lineno, node.colno, node, node2); + } + return node; + }; + _proto.parseAnd = function parseAnd() { + var node = this.parseNot(); + while (this.skipSymbol('and')) { + var node2 = this.parseNot(); + node = new nodes.And(node.lineno, node.colno, node, node2); + } + return node; + }; + _proto.parseNot = function parseNot() { + var tok = this.peekToken(); + if (this.skipSymbol('not')) { + return new nodes.Not(tok.lineno, tok.colno, this.parseNot()); + } + return this.parseIn(); + }; + _proto.parseIn = function parseIn() { + var node = this.parseIs(); + while (1) { + // eslint-disable-line no-constant-condition + // check if the next token is 'not' + var tok = this.nextToken(); + if (!tok) { + break; + } + var invert = tok.type === lexer.TOKEN_SYMBOL && tok.value === 'not'; + // if it wasn't 'not', put it back + if (!invert) { + this.pushToken(tok); + } + if (this.skipSymbol('in')) { + var node2 = this.parseIs(); + node = new nodes.In(node.lineno, node.colno, node, node2); + if (invert) { + node = new nodes.Not(node.lineno, node.colno, node); + } + } else { + // if we'd found a 'not' but this wasn't an 'in', put back the 'not' + if (invert) { + this.pushToken(tok); + } + break; + } + } + return node; + } + + // I put this right after "in" in the operator precedence stack. That can + // obviously be changed to be closer to Jinja. + ; + _proto.parseIs = function parseIs() { + var node = this.parseCompare(); + // look for an is + if (this.skipSymbol('is')) { + // look for a not + var not = this.skipSymbol('not'); + // get the next node + var node2 = this.parseCompare(); + // create an Is node using the next node and the info from our Is node. + node = new nodes.Is(node.lineno, node.colno, node, node2); + // if we have a Not, create a Not node from our Is node. + if (not) { + node = new nodes.Not(node.lineno, node.colno, node); + } + } + // return the node. + return node; + }; + _proto.parseCompare = function parseCompare() { + var compareOps = ['==', '===', '!=', '!==', '<', '>', '<=', '>=']; + var expr = this.parseConcat(); + var ops = []; + while (1) { + // eslint-disable-line no-constant-condition + var tok = this.nextToken(); + if (!tok) { + break; + } else if (compareOps.indexOf(tok.value) !== -1) { + ops.push(new nodes.CompareOperand(tok.lineno, tok.colno, this.parseConcat(), tok.value)); + } else { + this.pushToken(tok); + break; + } + } + if (ops.length) { + return new nodes.Compare(ops[0].lineno, ops[0].colno, expr, ops); + } else { + return expr; + } + } + + // finds the '~' for string concatenation + ; + _proto.parseConcat = function parseConcat() { + var node = this.parseAdd(); + while (this.skipValue(lexer.TOKEN_TILDE, '~')) { + var node2 = this.parseAdd(); + node = new nodes.Concat(node.lineno, node.colno, node, node2); + } + return node; + }; + _proto.parseAdd = function parseAdd() { + var node = this.parseSub(); + while (this.skipValue(lexer.TOKEN_OPERATOR, '+')) { + var node2 = this.parseSub(); + node = new nodes.Add(node.lineno, node.colno, node, node2); + } + return node; + }; + _proto.parseSub = function parseSub() { + var node = this.parseMul(); + while (this.skipValue(lexer.TOKEN_OPERATOR, '-')) { + var node2 = this.parseMul(); + node = new nodes.Sub(node.lineno, node.colno, node, node2); + } + return node; + }; + _proto.parseMul = function parseMul() { + var node = this.parseDiv(); + while (this.skipValue(lexer.TOKEN_OPERATOR, '*')) { + var node2 = this.parseDiv(); + node = new nodes.Mul(node.lineno, node.colno, node, node2); + } + return node; + }; + _proto.parseDiv = function parseDiv() { + var node = this.parseFloorDiv(); + while (this.skipValue(lexer.TOKEN_OPERATOR, '/')) { + var node2 = this.parseFloorDiv(); + node = new nodes.Div(node.lineno, node.colno, node, node2); + } + return node; + }; + _proto.parseFloorDiv = function parseFloorDiv() { + var node = this.parseMod(); + while (this.skipValue(lexer.TOKEN_OPERATOR, '//')) { + var node2 = this.parseMod(); + node = new nodes.FloorDiv(node.lineno, node.colno, node, node2); + } + return node; + }; + _proto.parseMod = function parseMod() { + var node = this.parsePow(); + while (this.skipValue(lexer.TOKEN_OPERATOR, '%')) { + var node2 = this.parsePow(); + node = new nodes.Mod(node.lineno, node.colno, node, node2); + } + return node; + }; + _proto.parsePow = function parsePow() { + var node = this.parseUnary(); + while (this.skipValue(lexer.TOKEN_OPERATOR, '**')) { + var node2 = this.parseUnary(); + node = new nodes.Pow(node.lineno, node.colno, node, node2); + } + return node; + }; + _proto.parseUnary = function parseUnary(noFilters) { + var tok = this.peekToken(); + var node; + if (this.skipValue(lexer.TOKEN_OPERATOR, '-')) { + node = new nodes.Neg(tok.lineno, tok.colno, this.parseUnary(true)); + } else if (this.skipValue(lexer.TOKEN_OPERATOR, '+')) { + node = new nodes.Pos(tok.lineno, tok.colno, this.parseUnary(true)); + } else { + node = this.parsePrimary(); + } + if (!noFilters) { + node = this.parseFilter(node); + } + return node; + }; + _proto.parsePrimary = function parsePrimary(noPostfix) { + var tok = this.nextToken(); + var val; + var node = null; + if (!tok) { + this.fail('expected expression, got end of file'); + } else if (tok.type === lexer.TOKEN_STRING) { + val = tok.value; + } else if (tok.type === lexer.TOKEN_INT) { + val = parseInt(tok.value, 10); + } else if (tok.type === lexer.TOKEN_FLOAT) { + val = parseFloat(tok.value); + } else if (tok.type === lexer.TOKEN_BOOLEAN) { + if (tok.value === 'true') { + val = true; + } else if (tok.value === 'false') { + val = false; + } else { + this.fail('invalid boolean: ' + tok.value, tok.lineno, tok.colno); + } + } else if (tok.type === lexer.TOKEN_NONE) { + val = null; + } else if (tok.type === lexer.TOKEN_REGEX) { + val = new RegExp(tok.value.body, tok.value.flags); + } + if (val !== undefined) { + node = new nodes.Literal(tok.lineno, tok.colno, val); + } else if (tok.type === lexer.TOKEN_SYMBOL) { + node = new nodes.Symbol(tok.lineno, tok.colno, tok.value); + } else { + // See if it's an aggregate type, we need to push the + // current delimiter token back on + this.pushToken(tok); + node = this.parseAggregate(); + } + if (!noPostfix) { + node = this.parsePostfix(node); + } + if (node) { + return node; + } else { + throw this.error("unexpected token: " + tok.value, tok.lineno, tok.colno); + } + }; + _proto.parseFilterName = function parseFilterName() { + var tok = this.expect(lexer.TOKEN_SYMBOL); + var name = tok.value; + while (this.skipValue(lexer.TOKEN_OPERATOR, '.')) { + name += '.' + this.expect(lexer.TOKEN_SYMBOL).value; + } + return new nodes.Symbol(tok.lineno, tok.colno, name); + }; + _proto.parseFilterArgs = function parseFilterArgs(node) { + if (this.peekToken().type === lexer.TOKEN_LEFT_PAREN) { + // Get a FunCall node and add the parameters to the + // filter + var call = this.parsePostfix(node); + return call.args.children; + } + return []; + }; + _proto.parseFilter = function parseFilter(node) { + while (this.skip(lexer.TOKEN_PIPE)) { + var name = this.parseFilterName(); + node = new nodes.Filter(name.lineno, name.colno, name, new nodes.NodeList(name.lineno, name.colno, [node].concat(this.parseFilterArgs(node)))); + } + return node; + }; + _proto.parseFilterStatement = function parseFilterStatement() { + var filterTok = this.peekToken(); + if (!this.skipSymbol('filter')) { + this.fail('parseFilterStatement: expected filter'); + } + var name = this.parseFilterName(); + var args = this.parseFilterArgs(name); + this.advanceAfterBlockEnd(filterTok.value); + var body = new nodes.Capture(name.lineno, name.colno, this.parseUntilBlocks('endfilter')); + this.advanceAfterBlockEnd(); + var node = new nodes.Filter(name.lineno, name.colno, name, new nodes.NodeList(name.lineno, name.colno, [body].concat(args))); + return new nodes.Output(name.lineno, name.colno, [node]); + }; + _proto.parseAggregate = function parseAggregate() { + var tok = this.nextToken(); + var node; + switch (tok.type) { + case lexer.TOKEN_LEFT_PAREN: + node = new nodes.Group(tok.lineno, tok.colno); + break; + case lexer.TOKEN_LEFT_BRACKET: + node = new nodes.Array(tok.lineno, tok.colno); + break; + case lexer.TOKEN_LEFT_CURLY: + node = new nodes.Dict(tok.lineno, tok.colno); + break; + default: + return null; + } + while (1) { + // eslint-disable-line no-constant-condition + var type = this.peekToken().type; + if (type === lexer.TOKEN_RIGHT_PAREN || type === lexer.TOKEN_RIGHT_BRACKET || type === lexer.TOKEN_RIGHT_CURLY) { + this.nextToken(); + break; + } + if (node.children.length > 0) { + if (!this.skip(lexer.TOKEN_COMMA)) { + this.fail('parseAggregate: expected comma after expression', tok.lineno, tok.colno); + } + } + if (node instanceof nodes.Dict) { + // TODO: check for errors + var key = this.parsePrimary(); + + // We expect a key/value pair for dicts, separated by a + // colon + if (!this.skip(lexer.TOKEN_COLON)) { + this.fail('parseAggregate: expected colon after dict key', tok.lineno, tok.colno); + } + + // TODO: check for errors + var value = this.parseExpression(); + node.addChild(new nodes.Pair(key.lineno, key.colno, key, value)); + } else { + // TODO: check for errors + var expr = this.parseExpression(); + node.addChild(expr); + } + } + return node; + }; + _proto.parseSignature = function parseSignature(tolerant, noParens) { + var tok = this.peekToken(); + if (!noParens && tok.type !== lexer.TOKEN_LEFT_PAREN) { + if (tolerant) { + return null; + } else { + this.fail('expected arguments', tok.lineno, tok.colno); + } + } + if (tok.type === lexer.TOKEN_LEFT_PAREN) { + tok = this.nextToken(); + } + var args = new nodes.NodeList(tok.lineno, tok.colno); + var kwargs = new nodes.KeywordArgs(tok.lineno, tok.colno); + var checkComma = false; + while (1) { + // eslint-disable-line no-constant-condition + tok = this.peekToken(); + if (!noParens && tok.type === lexer.TOKEN_RIGHT_PAREN) { + this.nextToken(); + break; + } else if (noParens && tok.type === lexer.TOKEN_BLOCK_END) { + break; + } + if (checkComma && !this.skip(lexer.TOKEN_COMMA)) { + this.fail('parseSignature: expected comma after expression', tok.lineno, tok.colno); + } else { + var arg = this.parseExpression(); + if (this.skipValue(lexer.TOKEN_OPERATOR, '=')) { + kwargs.addChild(new nodes.Pair(arg.lineno, arg.colno, arg, this.parseExpression())); + } else { + args.addChild(arg); + } + } + checkComma = true; + } + if (kwargs.children.length) { + args.addChild(kwargs); + } + return args; + }; + _proto.parseUntilBlocks = function parseUntilBlocks() { + var prev = this.breakOnBlocks; + for (var _len = arguments.length, blockNames = new Array(_len), _key = 0; _key < _len; _key++) { + blockNames[_key] = arguments[_key]; + } + this.breakOnBlocks = blockNames; + var ret = this.parse(); + this.breakOnBlocks = prev; + return ret; + }; + _proto.parseNodes = function parseNodes() { + var tok; + var buf = []; + while (tok = this.nextToken()) { + if (tok.type === lexer.TOKEN_DATA) { + var data = tok.value; + var nextToken = this.peekToken(); + var nextVal = nextToken && nextToken.value; + + // If the last token has "-" we need to trim the + // leading whitespace of the data. This is marked with + // the `dropLeadingWhitespace` variable. + if (this.dropLeadingWhitespace) { + // TODO: this could be optimized (don't use regex) + data = data.replace(/^\s*/, ''); + this.dropLeadingWhitespace = false; + } + + // Same for the succeeding block start token + if (nextToken && (nextToken.type === lexer.TOKEN_BLOCK_START && nextVal.charAt(nextVal.length - 1) === '-' || nextToken.type === lexer.TOKEN_VARIABLE_START && nextVal.charAt(this.tokens.tags.VARIABLE_START.length) === '-' || nextToken.type === lexer.TOKEN_COMMENT && nextVal.charAt(this.tokens.tags.COMMENT_START.length) === '-')) { + // TODO: this could be optimized (don't use regex) + data = data.replace(/\s*$/, ''); + } + buf.push(new nodes.Output(tok.lineno, tok.colno, [new nodes.TemplateData(tok.lineno, tok.colno, data)])); + } else if (tok.type === lexer.TOKEN_BLOCK_START) { + this.dropLeadingWhitespace = false; + var n = this.parseStatement(); + if (!n) { + break; + } + buf.push(n); + } else if (tok.type === lexer.TOKEN_VARIABLE_START) { + var e = this.parseExpression(); + this.dropLeadingWhitespace = false; + this.advanceAfterVariableEnd(); + buf.push(new nodes.Output(tok.lineno, tok.colno, [e])); + } else if (tok.type === lexer.TOKEN_COMMENT) { + this.dropLeadingWhitespace = tok.value.charAt(tok.value.length - this.tokens.tags.COMMENT_END.length - 1) === '-'; + } else { + // Ignore comments, otherwise this should be an error + this.fail('Unexpected token at top-level: ' + tok.type, tok.lineno, tok.colno); + } + } + return buf; + }; + _proto.parse = function parse() { + return new nodes.NodeList(0, 0, this.parseNodes()); + }; + _proto.parseAsRoot = function parseAsRoot() { + return new nodes.Root(0, 0, this.parseNodes()); + }; + return Parser; +}(Obj); // var util = require('util'); +// var l = lexer.lex('{%- if x -%}\n hello {% endif %}'); +// var t; +// while((t = l.nextToken())) { +// console.log(util.inspect(t)); +// } +// var p = new Parser(lexer.lex('hello {% filter title %}' + +// 'Hello madam how are you' + +// '{% endfilter %}')); +// var n = p.parseAsRoot(); +// nodes.printNodes(n); +module.exports = { + parse: function parse(src, extensions, opts) { + var p = new Parser(lexer.lex(src, opts)); + if (extensions !== undefined) { + p.extensions = extensions; + } + return p.parseAsRoot(); + }, + Parser: Parser +}; + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var lib = __webpack_require__(0); +var whitespaceChars = " \n\t\r\xA0"; +var delimChars = '()[]{}%*-+~/#,:|.<>=!'; +var intChars = '0123456789'; +var BLOCK_START = '{%'; +var BLOCK_END = '%}'; +var VARIABLE_START = '{{'; +var VARIABLE_END = '}}'; +var COMMENT_START = '{#'; +var COMMENT_END = '#}'; +var TOKEN_STRING = 'string'; +var TOKEN_WHITESPACE = 'whitespace'; +var TOKEN_DATA = 'data'; +var TOKEN_BLOCK_START = 'block-start'; +var TOKEN_BLOCK_END = 'block-end'; +var TOKEN_VARIABLE_START = 'variable-start'; +var TOKEN_VARIABLE_END = 'variable-end'; +var TOKEN_COMMENT = 'comment'; +var TOKEN_LEFT_PAREN = 'left-paren'; +var TOKEN_RIGHT_PAREN = 'right-paren'; +var TOKEN_LEFT_BRACKET = 'left-bracket'; +var TOKEN_RIGHT_BRACKET = 'right-bracket'; +var TOKEN_LEFT_CURLY = 'left-curly'; +var TOKEN_RIGHT_CURLY = 'right-curly'; +var TOKEN_OPERATOR = 'operator'; +var TOKEN_COMMA = 'comma'; +var TOKEN_COLON = 'colon'; +var TOKEN_TILDE = 'tilde'; +var TOKEN_PIPE = 'pipe'; +var TOKEN_INT = 'int'; +var TOKEN_FLOAT = 'float'; +var TOKEN_BOOLEAN = 'boolean'; +var TOKEN_NONE = 'none'; +var TOKEN_SYMBOL = 'symbol'; +var TOKEN_SPECIAL = 'special'; +var TOKEN_REGEX = 'regex'; +function token(type, value, lineno, colno) { + return { + type: type, + value: value, + lineno: lineno, + colno: colno + }; +} +var Tokenizer = /*#__PURE__*/function () { + function Tokenizer(str, opts) { + this.str = str; + this.index = 0; + this.len = str.length; + this.lineno = 0; + this.colno = 0; + this.in_code = false; + opts = opts || {}; + var tags = opts.tags || {}; + this.tags = { + BLOCK_START: tags.blockStart || BLOCK_START, + BLOCK_END: tags.blockEnd || BLOCK_END, + VARIABLE_START: tags.variableStart || VARIABLE_START, + VARIABLE_END: tags.variableEnd || VARIABLE_END, + COMMENT_START: tags.commentStart || COMMENT_START, + COMMENT_END: tags.commentEnd || COMMENT_END + }; + this.trimBlocks = !!opts.trimBlocks; + this.lstripBlocks = !!opts.lstripBlocks; + } + var _proto = Tokenizer.prototype; + _proto.nextToken = function nextToken() { + var lineno = this.lineno; + var colno = this.colno; + var tok; + if (this.in_code) { + // Otherwise, if we are in a block parse it as code + var cur = this.current(); + if (this.isFinished()) { + // We have nothing else to parse + return null; + } else if (cur === '"' || cur === '\'') { + // We've hit a string + return token(TOKEN_STRING, this._parseString(cur), lineno, colno); + } else if (tok = this._extract(whitespaceChars)) { + // We hit some whitespace + return token(TOKEN_WHITESPACE, tok, lineno, colno); + } else if ((tok = this._extractString(this.tags.BLOCK_END)) || (tok = this._extractString('-' + this.tags.BLOCK_END))) { + // Special check for the block end tag + // + // It is a requirement that start and end tags are composed of + // delimiter characters (%{}[] etc), and our code always + // breaks on delimiters so we can assume the token parsing + // doesn't consume these elsewhere + this.in_code = false; + if (this.trimBlocks) { + cur = this.current(); + if (cur === '\n') { + // Skip newline + this.forward(); + } else if (cur === '\r') { + // Skip CRLF newline + this.forward(); + cur = this.current(); + if (cur === '\n') { + this.forward(); + } else { + // Was not a CRLF, so go back + this.back(); + } + } + } + return token(TOKEN_BLOCK_END, tok, lineno, colno); + } else if ((tok = this._extractString(this.tags.VARIABLE_END)) || (tok = this._extractString('-' + this.tags.VARIABLE_END))) { + // Special check for variable end tag (see above) + this.in_code = false; + return token(TOKEN_VARIABLE_END, tok, lineno, colno); + } else if (cur === 'r' && this.str.charAt(this.index + 1) === '/') { + // Skip past 'r/'. + this.forwardN(2); + + // Extract until the end of the regex -- / ends it, \/ does not. + var regexBody = ''; + while (!this.isFinished()) { + if (this.current() === '/' && this.previous() !== '\\') { + this.forward(); + break; + } else { + regexBody += this.current(); + this.forward(); + } + } + + // Check for flags. + // The possible flags are according to https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp) + var POSSIBLE_FLAGS = ['g', 'i', 'm', 'y']; + var regexFlags = ''; + while (!this.isFinished()) { + var isCurrentAFlag = POSSIBLE_FLAGS.indexOf(this.current()) !== -1; + if (isCurrentAFlag) { + regexFlags += this.current(); + this.forward(); + } else { + break; + } + } + return token(TOKEN_REGEX, { + body: regexBody, + flags: regexFlags + }, lineno, colno); + } else if (delimChars.indexOf(cur) !== -1) { + // We've hit a delimiter (a special char like a bracket) + this.forward(); + var complexOps = ['==', '===', '!=', '!==', '<=', '>=', '//', '**']; + var curComplex = cur + this.current(); + var type; + if (lib.indexOf(complexOps, curComplex) !== -1) { + this.forward(); + cur = curComplex; + + // See if this is a strict equality/inequality comparator + if (lib.indexOf(complexOps, curComplex + this.current()) !== -1) { + cur = curComplex + this.current(); + this.forward(); + } + } + switch (cur) { + case '(': + type = TOKEN_LEFT_PAREN; + break; + case ')': + type = TOKEN_RIGHT_PAREN; + break; + case '[': + type = TOKEN_LEFT_BRACKET; + break; + case ']': + type = TOKEN_RIGHT_BRACKET; + break; + case '{': + type = TOKEN_LEFT_CURLY; + break; + case '}': + type = TOKEN_RIGHT_CURLY; + break; + case ',': + type = TOKEN_COMMA; + break; + case ':': + type = TOKEN_COLON; + break; + case '~': + type = TOKEN_TILDE; + break; + case '|': + type = TOKEN_PIPE; + break; + default: + type = TOKEN_OPERATOR; + } + return token(type, cur, lineno, colno); + } else { + // We are not at whitespace or a delimiter, so extract the + // text and parse it + tok = this._extractUntil(whitespaceChars + delimChars); + if (tok.match(/^[-+]?[0-9]+$/)) { + if (this.current() === '.') { + this.forward(); + var dec = this._extract(intChars); + return token(TOKEN_FLOAT, tok + '.' + dec, lineno, colno); + } else { + return token(TOKEN_INT, tok, lineno, colno); + } + } else if (tok.match(/^(true|false)$/)) { + return token(TOKEN_BOOLEAN, tok, lineno, colno); + } else if (tok === 'none') { + return token(TOKEN_NONE, tok, lineno, colno); + /* + * Added to make the test `null is null` evaluate truthily. + * Otherwise, Nunjucks will look up null in the context and + * return `undefined`, which is not what we want. This *may* have + * consequences is someone is using null in their templates as a + * variable. + */ + } else if (tok === 'null') { + return token(TOKEN_NONE, tok, lineno, colno); + } else if (tok) { + return token(TOKEN_SYMBOL, tok, lineno, colno); + } else { + throw new Error('Unexpected value while parsing: ' + tok); + } + } + } else { + // Parse out the template text, breaking on tag + // delimiters because we need to look for block/variable start + // tags (don't use the full delimChars for optimization) + var beginChars = this.tags.BLOCK_START.charAt(0) + this.tags.VARIABLE_START.charAt(0) + this.tags.COMMENT_START.charAt(0) + this.tags.COMMENT_END.charAt(0); + if (this.isFinished()) { + return null; + } else if ((tok = this._extractString(this.tags.BLOCK_START + '-')) || (tok = this._extractString(this.tags.BLOCK_START))) { + this.in_code = true; + return token(TOKEN_BLOCK_START, tok, lineno, colno); + } else if ((tok = this._extractString(this.tags.VARIABLE_START + '-')) || (tok = this._extractString(this.tags.VARIABLE_START))) { + this.in_code = true; + return token(TOKEN_VARIABLE_START, tok, lineno, colno); + } else { + tok = ''; + var data; + var inComment = false; + if (this._matches(this.tags.COMMENT_START)) { + inComment = true; + tok = this._extractString(this.tags.COMMENT_START); + } + + // Continually consume text, breaking on the tag delimiter + // characters and checking to see if it's a start tag. + // + // We could hit the end of the template in the middle of + // our looping, so check for the null return value from + // _extractUntil + while ((data = this._extractUntil(beginChars)) !== null) { + tok += data; + if ((this._matches(this.tags.BLOCK_START) || this._matches(this.tags.VARIABLE_START) || this._matches(this.tags.COMMENT_START)) && !inComment) { + if (this.lstripBlocks && this._matches(this.tags.BLOCK_START) && this.colno > 0 && this.colno <= tok.length) { + var lastLine = tok.slice(-this.colno); + if (/^\s+$/.test(lastLine)) { + // Remove block leading whitespace from beginning of the string + tok = tok.slice(0, -this.colno); + if (!tok.length) { + // All data removed, collapse to avoid unnecessary nodes + // by returning next token (block start) + return this.nextToken(); + } + } + } + // If it is a start tag, stop looping + break; + } else if (this._matches(this.tags.COMMENT_END)) { + if (!inComment) { + throw new Error('unexpected end of comment'); + } + tok += this._extractString(this.tags.COMMENT_END); + break; + } else { + // It does not match any tag, so add the character and + // carry on + tok += this.current(); + this.forward(); + } + } + if (data === null && inComment) { + throw new Error('expected end of comment, got end of file'); + } + return token(inComment ? TOKEN_COMMENT : TOKEN_DATA, tok, lineno, colno); + } + } + }; + _proto._parseString = function _parseString(delimiter) { + this.forward(); + var str = ''; + while (!this.isFinished() && this.current() !== delimiter) { + var cur = this.current(); + if (cur === '\\') { + this.forward(); + switch (this.current()) { + case 'n': + str += '\n'; + break; + case 't': + str += '\t'; + break; + case 'r': + str += '\r'; + break; + default: + str += this.current(); + } + this.forward(); + } else { + str += cur; + this.forward(); + } + } + this.forward(); + return str; + }; + _proto._matches = function _matches(str) { + if (this.index + str.length > this.len) { + return null; + } + var m = this.str.slice(this.index, this.index + str.length); + return m === str; + }; + _proto._extractString = function _extractString(str) { + if (this._matches(str)) { + this.forwardN(str.length); + return str; + } + return null; + }; + _proto._extractUntil = function _extractUntil(charString) { + // Extract all non-matching chars, with the default matching set + // to everything + return this._extractMatching(true, charString || ''); + }; + _proto._extract = function _extract(charString) { + // Extract all matching chars (no default, so charString must be + // explicit) + return this._extractMatching(false, charString); + }; + _proto._extractMatching = function _extractMatching(breakOnMatch, charString) { + // Pull out characters until a breaking char is hit. + // If breakOnMatch is false, a non-matching char stops it. + // If breakOnMatch is true, a matching char stops it. + + if (this.isFinished()) { + return null; + } + var first = charString.indexOf(this.current()); + + // Only proceed if the first character doesn't meet our condition + if (breakOnMatch && first === -1 || !breakOnMatch && first !== -1) { + var t = this.current(); + this.forward(); + + // And pull out all the chars one at a time until we hit a + // breaking char + var idx = charString.indexOf(this.current()); + while ((breakOnMatch && idx === -1 || !breakOnMatch && idx !== -1) && !this.isFinished()) { + t += this.current(); + this.forward(); + idx = charString.indexOf(this.current()); + } + return t; + } + return ''; + }; + _proto._extractRegex = function _extractRegex(regex) { + var matches = this.currentStr().match(regex); + if (!matches) { + return null; + } + + // Move forward whatever was matched + this.forwardN(matches[0].length); + return matches; + }; + _proto.isFinished = function isFinished() { + return this.index >= this.len; + }; + _proto.forwardN = function forwardN(n) { + for (var i = 0; i < n; i++) { + this.forward(); + } + }; + _proto.forward = function forward() { + this.index++; + if (this.previous() === '\n') { + this.lineno++; + this.colno = 0; + } else { + this.colno++; + } + }; + _proto.backN = function backN(n) { + for (var i = 0; i < n; i++) { + this.back(); + } + }; + _proto.back = function back() { + this.index--; + if (this.current() === '\n') { + this.lineno--; + var idx = this.src.lastIndexOf('\n', this.index - 1); + if (idx === -1) { + this.colno = this.index; + } else { + this.colno = this.index - idx; + } + } else { + this.colno--; + } + } + + // current returns current character + ; + _proto.current = function current() { + if (!this.isFinished()) { + return this.str.charAt(this.index); + } + return ''; + } + + // currentStr returns what's left of the unparsed string + ; + _proto.currentStr = function currentStr() { + if (!this.isFinished()) { + return this.str.substr(this.index); + } + return ''; + }; + _proto.previous = function previous() { + return this.str.charAt(this.index - 1); + }; + return Tokenizer; +}(); +module.exports = { + lex: function lex(src, opts) { + return new Tokenizer(src, opts); + }, + TOKEN_STRING: TOKEN_STRING, + TOKEN_WHITESPACE: TOKEN_WHITESPACE, + TOKEN_DATA: TOKEN_DATA, + TOKEN_BLOCK_START: TOKEN_BLOCK_START, + TOKEN_BLOCK_END: TOKEN_BLOCK_END, + TOKEN_VARIABLE_START: TOKEN_VARIABLE_START, + TOKEN_VARIABLE_END: TOKEN_VARIABLE_END, + TOKEN_COMMENT: TOKEN_COMMENT, + TOKEN_LEFT_PAREN: TOKEN_LEFT_PAREN, + TOKEN_RIGHT_PAREN: TOKEN_RIGHT_PAREN, + TOKEN_LEFT_BRACKET: TOKEN_LEFT_BRACKET, + TOKEN_RIGHT_BRACKET: TOKEN_RIGHT_BRACKET, + TOKEN_LEFT_CURLY: TOKEN_LEFT_CURLY, + TOKEN_RIGHT_CURLY: TOKEN_RIGHT_CURLY, + TOKEN_OPERATOR: TOKEN_OPERATOR, + TOKEN_COMMA: TOKEN_COMMA, + TOKEN_COLON: TOKEN_COLON, + TOKEN_TILDE: TOKEN_TILDE, + TOKEN_PIPE: TOKEN_PIPE, + TOKEN_INT: TOKEN_INT, + TOKEN_FLOAT: TOKEN_FLOAT, + TOKEN_BOOLEAN: TOKEN_BOOLEAN, + TOKEN_NONE: TOKEN_NONE, + TOKEN_SYMBOL: TOKEN_SYMBOL, + TOKEN_SPECIAL: TOKEN_SPECIAL, + TOKEN_REGEX: TOKEN_REGEX +}; + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +var Loader = __webpack_require__(6); +var _require = __webpack_require__(19), + PrecompiledLoader = _require.PrecompiledLoader; +var WebLoader = /*#__PURE__*/function (_Loader) { + _inheritsLoose(WebLoader, _Loader); + function WebLoader(baseURL, opts) { + var _this; + _this = _Loader.call(this) || this; + _this.baseURL = baseURL || '.'; + opts = opts || {}; + + // By default, the cache is turned off because there's no way + // to "watch" templates over HTTP, so they are re-downloaded + // and compiled each time. (Remember, PRECOMPILE YOUR + // TEMPLATES in production!) + _this.useCache = !!opts.useCache; + + // We default `async` to false so that the simple synchronous + // API can be used when you aren't doing anything async in + // your templates (which is most of the time). This performs a + // sync ajax request, but that's ok because it should *only* + // happen in development. PRECOMPILE YOUR TEMPLATES. + _this.async = !!opts.async; + return _this; + } + var _proto = WebLoader.prototype; + _proto.resolve = function resolve(from, to) { + throw new Error('relative templates not support in the browser yet'); + }; + _proto.getSource = function getSource(name, cb) { + var _this2 = this; + var useCache = this.useCache; + var result; + this.fetch(this.baseURL + '/' + name, function (err, src) { + if (err) { + if (cb) { + cb(err.content); + } else if (err.status === 404) { + result = null; + } else { + throw err.content; + } + } else { + result = { + src: src, + path: name, + noCache: !useCache + }; + _this2.emit('load', name, result); + if (cb) { + cb(null, result); + } + } + }); + + // if this WebLoader isn't running asynchronously, the + // fetch above would actually run sync and we'll have a + // result here + return result; + }; + _proto.fetch = function fetch(url, cb) { + // Only in the browser please + if (typeof window === 'undefined') { + throw new Error('WebLoader can only by used in a browser'); + } + var ajax = new XMLHttpRequest(); + var loading = true; + ajax.onreadystatechange = function () { + if (ajax.readyState === 4 && loading) { + loading = false; + if (ajax.status === 0 || ajax.status === 200) { + cb(null, ajax.responseText); + } else { + cb({ + status: ajax.status, + content: ajax.responseText + }); + } + } + }; + url += (url.indexOf('?') === -1 ? '?' : '&') + 's=' + new Date().getTime(); + ajax.open('GET', url, this.async); + ajax.send(); + }; + return WebLoader; +}(Loader); +module.exports = { + WebLoader: WebLoader, + PrecompiledLoader: PrecompiledLoader +}; + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var lib = __webpack_require__(0); +var _require = __webpack_require__(7), + Environment = _require.Environment, + Template = _require.Template; +var Loader = __webpack_require__(6); +var loaders = __webpack_require__(10); +var precompile = __webpack_require__(23); +var compiler = __webpack_require__(5); +var parser = __webpack_require__(8); +var lexer = __webpack_require__(9); +var runtime = __webpack_require__(2); +var nodes = __webpack_require__(3); +var installJinjaCompat = __webpack_require__(25); + +// A single instance of an environment, since this is so commonly used +var e; +function configure(templatesPath, opts) { + opts = opts || {}; + if (lib.isObject(templatesPath)) { + opts = templatesPath; + templatesPath = null; + } + var TemplateLoader; + if (loaders.FileSystemLoader) { + TemplateLoader = new loaders.FileSystemLoader(templatesPath, { + watch: opts.watch, + noCache: opts.noCache + }); + } else if (loaders.WebLoader) { + TemplateLoader = new loaders.WebLoader(templatesPath, { + useCache: opts.web && opts.web.useCache, + async: opts.web && opts.web.async + }); + } + e = new Environment(TemplateLoader, opts); + if (opts && opts.express) { + e.express(opts.express); + } + return e; +} +module.exports = { + Environment: Environment, + Template: Template, + Loader: Loader, + FileSystemLoader: loaders.FileSystemLoader, + NodeResolveLoader: loaders.NodeResolveLoader, + PrecompiledLoader: loaders.PrecompiledLoader, + WebLoader: loaders.WebLoader, + compiler: compiler, + parser: parser, + lexer: lexer, + runtime: runtime, + lib: lib, + nodes: nodes, + installJinjaCompat: installJinjaCompat, + configure: configure, + reset: function reset() { + e = undefined; + }, + compile: function compile(src, env, path, eagerCompile) { + if (!e) { + configure(); + } + return new Template(src, env, path, eagerCompile); + }, + render: function render(name, ctx, cb) { + if (!e) { + configure(); + } + return e.render(name, ctx, cb); + }, + renderString: function renderString(src, ctx, cb) { + if (!e) { + configure(); + } + return e.renderString(src, ctx, cb); + }, + precompile: precompile ? precompile.precompile : undefined, + precompileString: precompile ? precompile.precompileString : undefined +}; + +/***/ }), +/* 12 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// rawAsap provides everything we need except exception management. +var rawAsap = __webpack_require__(13); +// RawTasks are recycled to reduce GC churn. +var freeTasks = []; +// We queue errors to ensure they are thrown in right order (FIFO). +// Array-as-queue is good enough here, since we are just dealing with exceptions. +var pendingErrors = []; +var requestErrorThrow = rawAsap.makeRequestCallFromTimer(throwFirstError); + +function throwFirstError() { + if (pendingErrors.length) { + throw pendingErrors.shift(); + } +} + +/** + * Calls a task as soon as possible after returning, in its own event, with priority + * over other events like animation, reflow, and repaint. An error thrown from an + * event will not interrupt, nor even substantially slow down the processing of + * other events, but will be rather postponed to a lower priority event. + * @param {{call}} task A callable object, typically a function that takes no + * arguments. + */ +module.exports = asap; +function asap(task) { + var rawTask; + if (freeTasks.length) { + rawTask = freeTasks.pop(); + } else { + rawTask = new RawTask(); + } + rawTask.task = task; + rawAsap(rawTask); +} + +// We wrap tasks with recyclable task objects. A task object implements +// `call`, just like a function. +function RawTask() { + this.task = null; +} + +// The sole purpose of wrapping the task is to catch the exception and recycle +// the task object after its single use. +RawTask.prototype.call = function () { + try { + this.task.call(); + } catch (error) { + if (asap.onerror) { + // This hook exists purely for testing purposes. + // Its name will be periodically randomized to break any code that + // depends on its existence. + asap.onerror(error); + } else { + // In a web browser, exceptions are not fatal. However, to avoid + // slowing down the queue of pending tasks, we rethrow the error in a + // lower priority turn. + pendingErrors.push(error); + requestErrorThrow(); + } + } finally { + this.task = null; + freeTasks[freeTasks.length] = this; + } +}; + + +/***/ }), +/* 13 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(global) { + +// Use the fastest means possible to execute a task in its own turn, with +// priority over other events including IO, animation, reflow, and redraw +// events in browsers. +// +// An exception thrown by a task will permanently interrupt the processing of +// subsequent tasks. The higher level `asap` function ensures that if an +// exception is thrown by a task, that the task queue will continue flushing as +// soon as possible, but if you use `rawAsap` directly, you are responsible to +// either ensure that no exceptions are thrown from your task, or to manually +// call `rawAsap.requestFlush` if an exception is thrown. +module.exports = rawAsap; +function rawAsap(task) { + if (!queue.length) { + requestFlush(); + flushing = true; + } + // Equivalent to push, but avoids a function call. + queue[queue.length] = task; +} + +var queue = []; +// Once a flush has been requested, no further calls to `requestFlush` are +// necessary until the next `flush` completes. +var flushing = false; +// `requestFlush` is an implementation-specific method that attempts to kick +// off a `flush` event as quickly as possible. `flush` will attempt to exhaust +// the event queue before yielding to the browser's own event loop. +var requestFlush; +// The position of the next task to execute in the task queue. This is +// preserved between calls to `flush` so that it can be resumed if +// a task throws an exception. +var index = 0; +// If a task schedules additional tasks recursively, the task queue can grow +// unbounded. To prevent memory exhaustion, the task queue will periodically +// truncate already-completed tasks. +var capacity = 1024; + +// The flush function processes all tasks that have been scheduled with +// `rawAsap` unless and until one of those tasks throws an exception. +// If a task throws an exception, `flush` ensures that its state will remain +// consistent and will resume where it left off when called again. +// However, `flush` does not make any arrangements to be called again if an +// exception is thrown. +function flush() { + while (index < queue.length) { + var currentIndex = index; + // Advance the index before calling the task. This ensures that we will + // begin flushing on the next task the task throws an error. + index = index + 1; + queue[currentIndex].call(); + // Prevent leaking memory for long chains of recursive calls to `asap`. + // If we call `asap` within tasks scheduled by `asap`, the queue will + // grow, but to avoid an O(n) walk for every task we execute, we don't + // shift tasks off the queue after they have been executed. + // Instead, we periodically shift 1024 tasks off the queue. + if (index > capacity) { + // Manually shift all values starting at the index back to the + // beginning of the queue. + for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) { + queue[scan] = queue[scan + index]; + } + queue.length -= index; + index = 0; + } + } + queue.length = 0; + index = 0; + flushing = false; +} + +// `requestFlush` is implemented using a strategy based on data collected from +// every available SauceLabs Selenium web driver worker at time of writing. +// https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593 + +// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that +// have WebKitMutationObserver but not un-prefixed MutationObserver. +// Must use `global` or `self` instead of `window` to work in both frames and web +// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop. + +/* globals self */ +var scope = typeof global !== "undefined" ? global : self; +var BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver; + +// MutationObservers are desirable because they have high priority and work +// reliably everywhere they are implemented. +// They are implemented in all modern browsers. +// +// - Android 4-4.3 +// - Chrome 26-34 +// - Firefox 14-29 +// - Internet Explorer 11 +// - iPad Safari 6-7.1 +// - iPhone Safari 7-7.1 +// - Safari 6-7 +if (typeof BrowserMutationObserver === "function") { + requestFlush = makeRequestCallFromMutationObserver(flush); + +// MessageChannels are desirable because they give direct access to the HTML +// task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera +// 11-12, and in web workers in many engines. +// Although message channels yield to any queued rendering and IO tasks, they +// would be better than imposing the 4ms delay of timers. +// However, they do not work reliably in Internet Explorer or Safari. + +// Internet Explorer 10 is the only browser that has setImmediate but does +// not have MutationObservers. +// Although setImmediate yields to the browser's renderer, it would be +// preferrable to falling back to setTimeout since it does not have +// the minimum 4ms penalty. +// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and +// Desktop to a lesser extent) that renders both setImmediate and +// MessageChannel useless for the purposes of ASAP. +// https://github.com/kriskowal/q/issues/396 + +// Timers are implemented universally. +// We fall back to timers in workers in most engines, and in foreground +// contexts in the following browsers. +// However, note that even this simple case requires nuances to operate in a +// broad spectrum of browsers. +// +// - Firefox 3-13 +// - Internet Explorer 6-9 +// - iPad Safari 4.3 +// - Lynx 2.8.7 +} else { + requestFlush = makeRequestCallFromTimer(flush); +} + +// `requestFlush` requests that the high priority event queue be flushed as +// soon as possible. +// This is useful to prevent an error thrown in a task from stalling the event +// queue if the exception handled by Node.js’s +// `process.on("uncaughtException")` or by a domain. +rawAsap.requestFlush = requestFlush; + +// To request a high priority event, we induce a mutation observer by toggling +// the text of a text node between "1" and "-1". +function makeRequestCallFromMutationObserver(callback) { + var toggle = 1; + var observer = new BrowserMutationObserver(callback); + var node = document.createTextNode(""); + observer.observe(node, {characterData: true}); + return function requestCall() { + toggle = -toggle; + node.data = toggle; + }; +} + +// The message channel technique was discovered by Malte Ubl and was the +// original foundation for this library. +// http://www.nonblocking.io/2011/06/windownexttick.html + +// Safari 6.0.5 (at least) intermittently fails to create message ports on a +// page's first load. Thankfully, this version of Safari supports +// MutationObservers, so we don't need to fall back in that case. + +// function makeRequestCallFromMessageChannel(callback) { +// var channel = new MessageChannel(); +// channel.port1.onmessage = callback; +// return function requestCall() { +// channel.port2.postMessage(0); +// }; +// } + +// For reasons explained above, we are also unable to use `setImmediate` +// under any circumstances. +// Even if we were, there is another bug in Internet Explorer 10. +// It is not sufficient to assign `setImmediate` to `requestFlush` because +// `setImmediate` must be called *by name* and therefore must be wrapped in a +// closure. +// Never forget. + +// function makeRequestCallFromSetImmediate(callback) { +// return function requestCall() { +// setImmediate(callback); +// }; +// } + +// Safari 6.0 has a problem where timers will get lost while the user is +// scrolling. This problem does not impact ASAP because Safari 6.0 supports +// mutation observers, so that implementation is used instead. +// However, if we ever elect to use timers in Safari, the prevalent work-around +// is to add a scroll event listener that calls for a flush. + +// `setTimeout` does not call the passed callback if the delay is less than +// approximately 7 in web workers in Firefox 8 through 18, and sometimes not +// even then. + +function makeRequestCallFromTimer(callback) { + return function requestCall() { + // We dispatch a timeout with a specified delay of 0 for engines that + // can reliably accommodate that request. This will usually be snapped + // to a 4 milisecond delay, but once we're flushing, there's no delay + // between events. + var timeoutHandle = setTimeout(handleTimer, 0); + // However, since this timer gets frequently dropped in Firefox + // workers, we enlist an interval handle that will try to fire + // an event 20 times per second until it succeeds. + var intervalHandle = setInterval(handleTimer, 50); + + function handleTimer() { + // Whichever timer succeeds will cancel both timers and + // execute the callback. + clearTimeout(timeoutHandle); + clearInterval(intervalHandle); + callback(); + } + }; +} + +// This is for `asap.js` only. +// Its name will be periodically randomized to break any code that depends on +// its existence. +rawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer; + +// ASAP was originally a nextTick shim included in Q. This was factored out +// into this ASAP package. It was later adapted to RSVP which made further +// amendments. These decisions, particularly to marginalize MessageChannel and +// to capture the MutationObserver implementation in a closure, were integrated +// back into ASAP proper. +// https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(14))) + +/***/ }), +/* 14 */ +/***/ (function(module, exports) { + +var g;
+
+// This works in non-strict mode
+g = (function() {
+ return this;
+})();
+
+try {
+ // This works if eval is allowed (see CSP)
+ g = g || Function("return this")() || (1,eval)("this");
+} catch(e) {
+ // This works if the window reference is available
+ if(typeof window === "object")
+ g = window;
+}
+
+// g can still be undefined, but nothing to do about it...
+// We return undefined, instead of nothing here, so it's
+// easier to handle this case. if(!global) { ...}
+
+module.exports = g;
+ + +/***/ }), +/* 15 */ +/***/ (function(module, exports, __webpack_require__) { + +var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// MIT license (by Elan Shanker). +(function(globals) { + 'use strict'; + + var executeSync = function(){ + var args = Array.prototype.slice.call(arguments); + if (typeof args[0] === 'function'){ + args[0].apply(null, args.splice(1)); + } + }; + + var executeAsync = function(fn){ + if (typeof setImmediate === 'function') { + setImmediate(fn); + } else if (typeof process !== 'undefined' && process.nextTick) { + process.nextTick(fn); + } else { + setTimeout(fn, 0); + } + }; + + var makeIterator = function (tasks) { + var makeCallback = function (index) { + var fn = function () { + if (tasks.length) { + tasks[index].apply(null, arguments); + } + return fn.next(); + }; + fn.next = function () { + return (index < tasks.length - 1) ? makeCallback(index + 1): null; + }; + return fn; + }; + return makeCallback(0); + }; + + var _isArray = Array.isArray || function(maybeArray){ + return Object.prototype.toString.call(maybeArray) === '[object Array]'; + }; + + var waterfall = function (tasks, callback, forceAsync) { + var nextTick = forceAsync ? executeAsync : executeSync; + callback = callback || function () {}; + if (!_isArray(tasks)) { + var err = new Error('First argument to waterfall must be an array of functions'); + return callback(err); + } + if (!tasks.length) { + return callback(); + } + var wrapIterator = function (iterator) { + return function (err) { + if (err) { + callback.apply(null, arguments); + callback = function () {}; + } else { + var args = Array.prototype.slice.call(arguments, 1); + var next = iterator.next(); + if (next) { + args.push(wrapIterator(next)); + } else { + args.push(callback); + } + nextTick(function () { + iterator.apply(null, args); + }); + } + }; + }; + wrapIterator(makeIterator(tasks))(); + }; + + if (true) { + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () { + return waterfall; + }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); // RequireJS + } else if (typeof module !== 'undefined' && module.exports) { + module.exports = waterfall; // CommonJS + } else { + globals.waterfall = waterfall; // <script> + } +})(this); + + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +var R = typeof Reflect === 'object' ? Reflect : null +var ReflectApply = R && typeof R.apply === 'function' + ? R.apply + : function ReflectApply(target, receiver, args) { + return Function.prototype.apply.call(target, receiver, args); + } + +var ReflectOwnKeys +if (R && typeof R.ownKeys === 'function') { + ReflectOwnKeys = R.ownKeys +} else if (Object.getOwnPropertySymbols) { + ReflectOwnKeys = function ReflectOwnKeys(target) { + return Object.getOwnPropertyNames(target) + .concat(Object.getOwnPropertySymbols(target)); + }; +} else { + ReflectOwnKeys = function ReflectOwnKeys(target) { + return Object.getOwnPropertyNames(target); + }; +} + +function ProcessEmitWarning(warning) { + if (console && console.warn) console.warn(warning); +} + +var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) { + return value !== value; +} + +function EventEmitter() { + EventEmitter.init.call(this); +} +module.exports = EventEmitter; +module.exports.once = once; + +// Backwards-compat with node 0.10.x +EventEmitter.EventEmitter = EventEmitter; + +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._eventsCount = 0; +EventEmitter.prototype._maxListeners = undefined; + +// By default EventEmitters will print a warning if more than 10 listeners are +// added to it. This is a useful default which helps finding memory leaks. +var defaultMaxListeners = 10; + +function checkListener(listener) { + if (typeof listener !== 'function') { + throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); + } +} + +Object.defineProperty(EventEmitter, 'defaultMaxListeners', { + enumerable: true, + get: function() { + return defaultMaxListeners; + }, + set: function(arg) { + if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) { + throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.'); + } + defaultMaxListeners = arg; + } +}); + +EventEmitter.init = function() { + + if (this._events === undefined || + this._events === Object.getPrototypeOf(this)._events) { + this._events = Object.create(null); + this._eventsCount = 0; + } + + this._maxListeners = this._maxListeners || undefined; +}; + +// Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. +EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { + if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) { + throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.'); + } + this._maxListeners = n; + return this; +}; + +function _getMaxListeners(that) { + if (that._maxListeners === undefined) + return EventEmitter.defaultMaxListeners; + return that._maxListeners; +} + +EventEmitter.prototype.getMaxListeners = function getMaxListeners() { + return _getMaxListeners(this); +}; + +EventEmitter.prototype.emit = function emit(type) { + var args = []; + for (var i = 1; i < arguments.length; i++) args.push(arguments[i]); + var doError = (type === 'error'); + + var events = this._events; + if (events !== undefined) + doError = (doError && events.error === undefined); + else if (!doError) + return false; + + // If there is no 'error' event listener then throw. + if (doError) { + var er; + if (args.length > 0) + er = args[0]; + if (er instanceof Error) { + // Note: The comments on the `throw` lines are intentional, they show + // up in Node's output if this results in an unhandled exception. + throw er; // Unhandled 'error' event + } + // At least give some kind of context to the user + var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : '')); + err.context = er; + throw err; // Unhandled 'error' event + } + + var handler = events[type]; + + if (handler === undefined) + return false; + + if (typeof handler === 'function') { + ReflectApply(handler, this, args); + } else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) + ReflectApply(listeners[i], this, args); + } + + return true; +}; + +function _addListener(target, type, listener, prepend) { + var m; + var events; + var existing; + + checkListener(listener); + + events = target._events; + if (events === undefined) { + events = target._events = Object.create(null); + target._eventsCount = 0; + } else { + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (events.newListener !== undefined) { + target.emit('newListener', type, + listener.listener ? listener.listener : listener); + + // Re-assign `events` because a newListener handler could have caused the + // this._events to be assigned to a new object + events = target._events; + } + existing = events[type]; + } + + if (existing === undefined) { + // Optimize the case of one listener. Don't need the extra array object. + existing = events[type] = listener; + ++target._eventsCount; + } else { + if (typeof existing === 'function') { + // Adding the second element, need to change to array. + existing = events[type] = + prepend ? [listener, existing] : [existing, listener]; + // If we've already got an array, just append. + } else if (prepend) { + existing.unshift(listener); + } else { + existing.push(listener); + } + + // Check for listener leak + m = _getMaxListeners(target); + if (m > 0 && existing.length > m && !existing.warned) { + existing.warned = true; + // No error code for this since it is a Warning + // eslint-disable-next-line no-restricted-syntax + var w = new Error('Possible EventEmitter memory leak detected. ' + + existing.length + ' ' + String(type) + ' listeners ' + + 'added. Use emitter.setMaxListeners() to ' + + 'increase limit'); + w.name = 'MaxListenersExceededWarning'; + w.emitter = target; + w.type = type; + w.count = existing.length; + ProcessEmitWarning(w); + } + } + + return target; +} + +EventEmitter.prototype.addListener = function addListener(type, listener) { + return _addListener(this, type, listener, false); +}; + +EventEmitter.prototype.on = EventEmitter.prototype.addListener; + +EventEmitter.prototype.prependListener = + function prependListener(type, listener) { + return _addListener(this, type, listener, true); + }; + +function onceWrapper() { + if (!this.fired) { + this.target.removeListener(this.type, this.wrapFn); + this.fired = true; + if (arguments.length === 0) + return this.listener.call(this.target); + return this.listener.apply(this.target, arguments); + } +} + +function _onceWrap(target, type, listener) { + var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener }; + var wrapped = onceWrapper.bind(state); + wrapped.listener = listener; + state.wrapFn = wrapped; + return wrapped; +} + +EventEmitter.prototype.once = function once(type, listener) { + checkListener(listener); + this.on(type, _onceWrap(this, type, listener)); + return this; +}; + +EventEmitter.prototype.prependOnceListener = + function prependOnceListener(type, listener) { + checkListener(listener); + this.prependListener(type, _onceWrap(this, type, listener)); + return this; + }; + +// Emits a 'removeListener' event if and only if the listener was removed. +EventEmitter.prototype.removeListener = + function removeListener(type, listener) { + var list, events, position, i, originalListener; + + checkListener(listener); + + events = this._events; + if (events === undefined) + return this; + + list = events[type]; + if (list === undefined) + return this; + + if (list === listener || list.listener === listener) { + if (--this._eventsCount === 0) + this._events = Object.create(null); + else { + delete events[type]; + if (events.removeListener) + this.emit('removeListener', type, list.listener || listener); + } + } else if (typeof list !== 'function') { + position = -1; + + for (i = list.length - 1; i >= 0; i--) { + if (list[i] === listener || list[i].listener === listener) { + originalListener = list[i].listener; + position = i; + break; + } + } + + if (position < 0) + return this; + + if (position === 0) + list.shift(); + else { + spliceOne(list, position); + } + + if (list.length === 1) + events[type] = list[0]; + + if (events.removeListener !== undefined) + this.emit('removeListener', type, originalListener || listener); + } + + return this; + }; + +EventEmitter.prototype.off = EventEmitter.prototype.removeListener; + +EventEmitter.prototype.removeAllListeners = + function removeAllListeners(type) { + var listeners, events, i; + + events = this._events; + if (events === undefined) + return this; + + // not listening for removeListener, no need to emit + if (events.removeListener === undefined) { + if (arguments.length === 0) { + this._events = Object.create(null); + this._eventsCount = 0; + } else if (events[type] !== undefined) { + if (--this._eventsCount === 0) + this._events = Object.create(null); + else + delete events[type]; + } + return this; + } + + // emit removeListener for all listeners on all events + if (arguments.length === 0) { + var keys = Object.keys(events); + var key; + for (i = 0; i < keys.length; ++i) { + key = keys[i]; + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + this.removeAllListeners('removeListener'); + this._events = Object.create(null); + this._eventsCount = 0; + return this; + } + + listeners = events[type]; + + if (typeof listeners === 'function') { + this.removeListener(type, listeners); + } else if (listeners !== undefined) { + // LIFO order + for (i = listeners.length - 1; i >= 0; i--) { + this.removeListener(type, listeners[i]); + } + } + + return this; + }; + +function _listeners(target, type, unwrap) { + var events = target._events; + + if (events === undefined) + return []; + + var evlistener = events[type]; + if (evlistener === undefined) + return []; + + if (typeof evlistener === 'function') + return unwrap ? [evlistener.listener || evlistener] : [evlistener]; + + return unwrap ? + unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); +} + +EventEmitter.prototype.listeners = function listeners(type) { + return _listeners(this, type, true); +}; + +EventEmitter.prototype.rawListeners = function rawListeners(type) { + return _listeners(this, type, false); +}; + +EventEmitter.listenerCount = function(emitter, type) { + if (typeof emitter.listenerCount === 'function') { + return emitter.listenerCount(type); + } else { + return listenerCount.call(emitter, type); + } +}; + +EventEmitter.prototype.listenerCount = listenerCount; +function listenerCount(type) { + var events = this._events; + + if (events !== undefined) { + var evlistener = events[type]; + + if (typeof evlistener === 'function') { + return 1; + } else if (evlistener !== undefined) { + return evlistener.length; + } + } + + return 0; +} + +EventEmitter.prototype.eventNames = function eventNames() { + return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; +}; + +function arrayClone(arr, n) { + var copy = new Array(n); + for (var i = 0; i < n; ++i) + copy[i] = arr[i]; + return copy; +} + +function spliceOne(list, index) { + for (; index + 1 < list.length; index++) + list[index] = list[index + 1]; + list.pop(); +} + +function unwrapListeners(arr) { + var ret = new Array(arr.length); + for (var i = 0; i < ret.length; ++i) { + ret[i] = arr[i].listener || arr[i]; + } + return ret; +} + +function once(emitter, name) { + return new Promise(function (resolve, reject) { + function errorListener(err) { + emitter.removeListener(name, resolver); + reject(err); + } + + function resolver() { + if (typeof emitter.removeListener === 'function') { + emitter.removeListener('error', errorListener); + } + resolve([].slice.call(arguments)); + }; + + eventTargetAgnosticAddListener(emitter, name, resolver, { once: true }); + if (name !== 'error') { + addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true }); + } + }); +} + +function addErrorHandlerIfEventEmitter(emitter, handler, flags) { + if (typeof emitter.on === 'function') { + eventTargetAgnosticAddListener(emitter, 'error', handler, flags); + } +} + +function eventTargetAgnosticAddListener(emitter, name, listener, flags) { + if (typeof emitter.on === 'function') { + if (flags.once) { + emitter.once(name, listener); + } else { + emitter.on(name, listener); + } + } else if (typeof emitter.addEventListener === 'function') { + // EventTarget does not have `error` event semantics like Node + // EventEmitters, we do not listen for `error` events here. + emitter.addEventListener(name, function wrapListener(arg) { + // IE does not have builtin `{ once: true }` support so we + // have to do it manually. + if (flags.once) { + emitter.removeEventListener(name, wrapListener); + } + listener(arg); + }); + } else { + throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter); + } +} + + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var nodes = __webpack_require__(3); +var lib = __webpack_require__(0); +var sym = 0; +function gensym() { + return 'hole_' + sym++; +} + +// copy-on-write version of map +function mapCOW(arr, func) { + var res = null; + for (var i = 0; i < arr.length; i++) { + var item = func(arr[i]); + if (item !== arr[i]) { + if (!res) { + res = arr.slice(); + } + res[i] = item; + } + } + return res || arr; +} +function walk(ast, func, depthFirst) { + if (!(ast instanceof nodes.Node)) { + return ast; + } + if (!depthFirst) { + var astT = func(ast); + if (astT && astT !== ast) { + return astT; + } + } + if (ast instanceof nodes.NodeList) { + var children = mapCOW(ast.children, function (node) { + return walk(node, func, depthFirst); + }); + if (children !== ast.children) { + ast = new nodes[ast.typename](ast.lineno, ast.colno, children); + } + } else if (ast instanceof nodes.CallExtension) { + var args = walk(ast.args, func, depthFirst); + var contentArgs = mapCOW(ast.contentArgs, function (node) { + return walk(node, func, depthFirst); + }); + if (args !== ast.args || contentArgs !== ast.contentArgs) { + ast = new nodes[ast.typename](ast.extName, ast.prop, args, contentArgs); + } + } else { + var props = ast.fields.map(function (field) { + return ast[field]; + }); + var propsT = mapCOW(props, function (prop) { + return walk(prop, func, depthFirst); + }); + if (propsT !== props) { + ast = new nodes[ast.typename](ast.lineno, ast.colno); + propsT.forEach(function (prop, i) { + ast[ast.fields[i]] = prop; + }); + } + } + return depthFirst ? func(ast) || ast : ast; +} +function depthWalk(ast, func) { + return walk(ast, func, true); +} +function _liftFilters(node, asyncFilters, prop) { + var children = []; + var walked = depthWalk(prop ? node[prop] : node, function (descNode) { + var symbol; + if (descNode instanceof nodes.Block) { + return descNode; + } else if (descNode instanceof nodes.Filter && lib.indexOf(asyncFilters, descNode.name.value) !== -1 || descNode instanceof nodes.CallExtensionAsync) { + symbol = new nodes.Symbol(descNode.lineno, descNode.colno, gensym()); + children.push(new nodes.FilterAsync(descNode.lineno, descNode.colno, descNode.name, descNode.args, symbol)); + } + return symbol; + }); + if (prop) { + node[prop] = walked; + } else { + node = walked; + } + if (children.length) { + children.push(node); + return new nodes.NodeList(node.lineno, node.colno, children); + } else { + return node; + } +} +function liftFilters(ast, asyncFilters) { + return depthWalk(ast, function (node) { + if (node instanceof nodes.Output) { + return _liftFilters(node, asyncFilters); + } else if (node instanceof nodes.Set) { + return _liftFilters(node, asyncFilters, 'value'); + } else if (node instanceof nodes.For) { + return _liftFilters(node, asyncFilters, 'arr'); + } else if (node instanceof nodes.If) { + return _liftFilters(node, asyncFilters, 'cond'); + } else if (node instanceof nodes.CallExtension) { + return _liftFilters(node, asyncFilters, 'args'); + } else { + return undefined; + } + }); +} +function liftSuper(ast) { + return walk(ast, function (blockNode) { + if (!(blockNode instanceof nodes.Block)) { + return; + } + var hasSuper = false; + var symbol = gensym(); + blockNode.body = walk(blockNode.body, function (node) { + // eslint-disable-line consistent-return + if (node instanceof nodes.FunCall && node.name.value === 'super') { + hasSuper = true; + return new nodes.Symbol(node.lineno, node.colno, symbol); + } + }); + if (hasSuper) { + blockNode.body.children.unshift(new nodes.Super(0, 0, blockNode.name, new nodes.Symbol(0, 0, symbol))); + } + }); +} +function convertStatements(ast) { + return depthWalk(ast, function (node) { + if (!(node instanceof nodes.If) && !(node instanceof nodes.For)) { + return undefined; + } + var async = false; + walk(node, function (child) { + if (child instanceof nodes.FilterAsync || child instanceof nodes.IfAsync || child instanceof nodes.AsyncEach || child instanceof nodes.AsyncAll || child instanceof nodes.CallExtensionAsync) { + async = true; + // Stop iterating by returning the node + return child; + } + return undefined; + }); + if (async) { + if (node instanceof nodes.If) { + return new nodes.IfAsync(node.lineno, node.colno, node.cond, node.body, node.else_); + } else if (node instanceof nodes.For && !(node instanceof nodes.AsyncAll)) { + return new nodes.AsyncEach(node.lineno, node.colno, node.arr, node.name, node.body, node.else_); + } + } + return undefined; + }); +} +function cps(ast, asyncFilters) { + return convertStatements(liftSuper(liftFilters(ast, asyncFilters))); +} +function transform(ast, asyncFilters) { + return cps(ast, asyncFilters || []); +} + +// var parser = require('./parser'); +// var src = 'hello {% foo %}{% endfoo %} end'; +// var ast = transform(parser.parse(src, [new FooExtension()]), ['bar']); +// nodes.printNodes(ast); + +module.exports = { + transform: transform +}; + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var lib = __webpack_require__(0); +var r = __webpack_require__(2); +var exports = module.exports = {}; +function normalize(value, defaultValue) { + if (value === null || value === undefined || value === false) { + return defaultValue; + } + return value; +} +exports.abs = Math.abs; +function isNaN(num) { + return num !== num; // eslint-disable-line no-self-compare +} + +function batch(arr, linecount, fillWith) { + var i; + var res = []; + var tmp = []; + for (i = 0; i < arr.length; i++) { + if (i % linecount === 0 && tmp.length) { + res.push(tmp); + tmp = []; + } + tmp.push(arr[i]); + } + if (tmp.length) { + if (fillWith) { + for (i = tmp.length; i < linecount; i++) { + tmp.push(fillWith); + } + } + res.push(tmp); + } + return res; +} +exports.batch = batch; +function capitalize(str) { + str = normalize(str, ''); + var ret = str.toLowerCase(); + return r.copySafeness(str, ret.charAt(0).toUpperCase() + ret.slice(1)); +} +exports.capitalize = capitalize; +function center(str, width) { + str = normalize(str, ''); + width = width || 80; + if (str.length >= width) { + return str; + } + var spaces = width - str.length; + var pre = lib.repeat(' ', spaces / 2 - spaces % 2); + var post = lib.repeat(' ', spaces / 2); + return r.copySafeness(str, pre + str + post); +} +exports.center = center; +function default_(val, def, bool) { + if (bool) { + return val || def; + } else { + return val !== undefined ? val : def; + } +} + +// TODO: it is confusing to export something called 'default' +exports['default'] = default_; // eslint-disable-line dot-notation + +function dictsort(val, caseSensitive, by) { + if (!lib.isObject(val)) { + throw new lib.TemplateError('dictsort filter: val must be an object'); + } + var array = []; + // deliberately include properties from the object's prototype + for (var k in val) { + // eslint-disable-line guard-for-in, no-restricted-syntax + array.push([k, val[k]]); + } + var si; + if (by === undefined || by === 'key') { + si = 0; + } else if (by === 'value') { + si = 1; + } else { + throw new lib.TemplateError('dictsort filter: You can only sort by either key or value'); + } + array.sort(function (t1, t2) { + var a = t1[si]; + var b = t2[si]; + if (!caseSensitive) { + if (lib.isString(a)) { + a = a.toUpperCase(); + } + if (lib.isString(b)) { + b = b.toUpperCase(); + } + } + return a > b ? 1 : a === b ? 0 : -1; // eslint-disable-line no-nested-ternary + }); + + return array; +} +exports.dictsort = dictsort; +function dump(obj, spaces) { + return JSON.stringify(obj, null, spaces); +} +exports.dump = dump; +function escape(str) { + if (str instanceof r.SafeString) { + return str; + } + str = str === null || str === undefined ? '' : str; + return r.markSafe(lib.escape(str.toString())); +} +exports.escape = escape; +function safe(str) { + if (str instanceof r.SafeString) { + return str; + } + str = str === null || str === undefined ? '' : str; + return r.markSafe(str.toString()); +} +exports.safe = safe; +function first(arr) { + return arr[0]; +} +exports.first = first; +function forceescape(str) { + str = str === null || str === undefined ? '' : str; + return r.markSafe(lib.escape(str.toString())); +} +exports.forceescape = forceescape; +function groupby(arr, attr) { + return lib.groupBy(arr, attr, this.env.opts.throwOnUndefined); +} +exports.groupby = groupby; +function indent(str, width, indentfirst) { + str = normalize(str, ''); + if (str === '') { + return ''; + } + width = width || 4; + // let res = ''; + var lines = str.split('\n'); + var sp = lib.repeat(' ', width); + var res = lines.map(function (l, i) { + return i === 0 && !indentfirst ? l : "" + sp + l; + }).join('\n'); + return r.copySafeness(str, res); +} +exports.indent = indent; +function join(arr, del, attr) { + del = del || ''; + if (attr) { + arr = lib.map(arr, function (v) { + return v[attr]; + }); + } + return arr.join(del); +} +exports.join = join; +function last(arr) { + return arr[arr.length - 1]; +} +exports.last = last; +function lengthFilter(val) { + var value = normalize(val, ''); + if (value !== undefined) { + if (typeof Map === 'function' && value instanceof Map || typeof Set === 'function' && value instanceof Set) { + // ECMAScript 2015 Maps and Sets + return value.size; + } + if (lib.isObject(value) && !(value instanceof r.SafeString)) { + // Objects (besides SafeStrings), non-primative Arrays + return lib.keys(value).length; + } + return value.length; + } + return 0; +} +exports.length = lengthFilter; +function list(val) { + if (lib.isString(val)) { + return val.split(''); + } else if (lib.isObject(val)) { + return lib._entries(val || {}).map(function (_ref) { + var key = _ref[0], + value = _ref[1]; + return { + key: key, + value: value + }; + }); + } else if (lib.isArray(val)) { + return val; + } else { + throw new lib.TemplateError('list filter: type not iterable'); + } +} +exports.list = list; +function lower(str) { + str = normalize(str, ''); + return str.toLowerCase(); +} +exports.lower = lower; +function nl2br(str) { + if (str === null || str === undefined) { + return ''; + } + return r.copySafeness(str, str.replace(/\r\n|\n/g, '<br />\n')); +} +exports.nl2br = nl2br; +function random(arr) { + return arr[Math.floor(Math.random() * arr.length)]; +} +exports.random = random; + +/** + * Construct select or reject filter + * + * @param {boolean} expectedTestResult + * @returns {function(array, string, *): array} + */ +function getSelectOrReject(expectedTestResult) { + function filter(arr, testName, secondArg) { + if (testName === void 0) { + testName = 'truthy'; + } + var context = this; + var test = context.env.getTest(testName); + return lib.toArray(arr).filter(function examineTestResult(item) { + return test.call(context, item, secondArg) === expectedTestResult; + }); + } + return filter; +} +exports.reject = getSelectOrReject(false); +function rejectattr(arr, attr) { + return arr.filter(function (item) { + return !item[attr]; + }); +} +exports.rejectattr = rejectattr; +exports.select = getSelectOrReject(true); +function selectattr(arr, attr) { + return arr.filter(function (item) { + return !!item[attr]; + }); +} +exports.selectattr = selectattr; +function replace(str, old, new_, maxCount) { + var originalStr = str; + if (old instanceof RegExp) { + return str.replace(old, new_); + } + if (typeof maxCount === 'undefined') { + maxCount = -1; + } + var res = ''; // Output + + // Cast Numbers in the search term to string + if (typeof old === 'number') { + old = '' + old; + } else if (typeof old !== 'string') { + // If it is something other than number or string, + // return the original string + return str; + } + + // Cast numbers in the replacement to string + if (typeof str === 'number') { + str = '' + str; + } + + // If by now, we don't have a string, throw it back + if (typeof str !== 'string' && !(str instanceof r.SafeString)) { + return str; + } + + // ShortCircuits + if (old === '') { + // Mimic the python behaviour: empty string is replaced + // by replacement e.g. "abc"|replace("", ".") -> .a.b.c. + res = new_ + str.split('').join(new_) + new_; + return r.copySafeness(str, res); + } + var nextIndex = str.indexOf(old); + // if # of replacements to perform is 0, or the string to does + // not contain the old value, return the string + if (maxCount === 0 || nextIndex === -1) { + return str; + } + var pos = 0; + var count = 0; // # of replacements made + + while (nextIndex > -1 && (maxCount === -1 || count < maxCount)) { + // Grab the next chunk of src string and add it with the + // replacement, to the result + res += str.substring(pos, nextIndex) + new_; + // Increment our pointer in the src string + pos = nextIndex + old.length; + count++; + // See if there are any more replacements to be made + nextIndex = str.indexOf(old, pos); + } + + // We've either reached the end, or done the max # of + // replacements, tack on any remaining string + if (pos < str.length) { + res += str.substring(pos); + } + return r.copySafeness(originalStr, res); +} +exports.replace = replace; +function reverse(val) { + var arr; + if (lib.isString(val)) { + arr = list(val); + } else { + // Copy it + arr = lib.map(val, function (v) { + return v; + }); + } + arr.reverse(); + if (lib.isString(val)) { + return r.copySafeness(val, arr.join('')); + } + return arr; +} +exports.reverse = reverse; +function round(val, precision, method) { + precision = precision || 0; + var factor = Math.pow(10, precision); + var rounder; + if (method === 'ceil') { + rounder = Math.ceil; + } else if (method === 'floor') { + rounder = Math.floor; + } else { + rounder = Math.round; + } + return rounder(val * factor) / factor; +} +exports.round = round; +function slice(arr, slices, fillWith) { + var sliceLength = Math.floor(arr.length / slices); + var extra = arr.length % slices; + var res = []; + var offset = 0; + for (var i = 0; i < slices; i++) { + var start = offset + i * sliceLength; + if (i < extra) { + offset++; + } + var end = offset + (i + 1) * sliceLength; + var currSlice = arr.slice(start, end); + if (fillWith && i >= extra) { + currSlice.push(fillWith); + } + res.push(currSlice); + } + return res; +} +exports.slice = slice; +function sum(arr, attr, start) { + if (start === void 0) { + start = 0; + } + if (attr) { + arr = lib.map(arr, function (v) { + return v[attr]; + }); + } + return start + arr.reduce(function (a, b) { + return a + b; + }, 0); +} +exports.sum = sum; +exports.sort = r.makeMacro(['value', 'reverse', 'case_sensitive', 'attribute'], [], function sortFilter(arr, reversed, caseSens, attr) { + var _this = this; + // Copy it + var array = lib.map(arr, function (v) { + return v; + }); + var getAttribute = lib.getAttrGetter(attr); + array.sort(function (a, b) { + var x = attr ? getAttribute(a) : a; + var y = attr ? getAttribute(b) : b; + if (_this.env.opts.throwOnUndefined && attr && (x === undefined || y === undefined)) { + throw new TypeError("sort: attribute \"" + attr + "\" resolved to undefined"); + } + if (!caseSens && lib.isString(x) && lib.isString(y)) { + x = x.toLowerCase(); + y = y.toLowerCase(); + } + if (x < y) { + return reversed ? 1 : -1; + } else if (x > y) { + return reversed ? -1 : 1; + } else { + return 0; + } + }); + return array; +}); +function string(obj) { + return r.copySafeness(obj, obj); +} +exports.string = string; +function striptags(input, preserveLinebreaks) { + input = normalize(input, ''); + var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>|<!--[\s\S]*?-->/gi; + var trimmedInput = trim(input.replace(tags, '')); + var res = ''; + if (preserveLinebreaks) { + res = trimmedInput.replace(/^ +| +$/gm, '') // remove leading and trailing spaces + .replace(/ +/g, ' ') // squash adjacent spaces + .replace(/(\r\n)/g, '\n') // normalize linebreaks (CRLF -> LF) + .replace(/\n\n\n+/g, '\n\n'); // squash abnormal adjacent linebreaks + } else { + res = trimmedInput.replace(/\s+/gi, ' '); + } + return r.copySafeness(input, res); +} +exports.striptags = striptags; +function title(str) { + str = normalize(str, ''); + var words = str.split(' ').map(function (word) { + return capitalize(word); + }); + return r.copySafeness(str, words.join(' ')); +} +exports.title = title; +function trim(str) { + return r.copySafeness(str, str.replace(/^\s*|\s*$/g, '')); +} +exports.trim = trim; +function truncate(input, length, killwords, end) { + var orig = input; + input = normalize(input, ''); + length = length || 255; + if (input.length <= length) { + return input; + } + if (killwords) { + input = input.substring(0, length); + } else { + var idx = input.lastIndexOf(' ', length); + if (idx === -1) { + idx = length; + } + input = input.substring(0, idx); + } + input += end !== undefined && end !== null ? end : '...'; + return r.copySafeness(orig, input); +} +exports.truncate = truncate; +function upper(str) { + str = normalize(str, ''); + return str.toUpperCase(); +} +exports.upper = upper; +function urlencode(obj) { + var enc = encodeURIComponent; + if (lib.isString(obj)) { + return enc(obj); + } else { + var keyvals = lib.isArray(obj) ? obj : lib._entries(obj); + return keyvals.map(function (_ref2) { + var k = _ref2[0], + v = _ref2[1]; + return enc(k) + "=" + enc(v); + }).join('&'); + } +} +exports.urlencode = urlencode; + +// For the jinja regexp, see +// https://github.com/mitsuhiko/jinja2/blob/f15b814dcba6aa12bc74d1f7d0c881d55f7126be/jinja2/utils.py#L20-L23 +var puncRe = /^(?:\(|<|<)?(.*?)(?:\.|,|\)|\n|>)?$/; +// from http://blog.gerv.net/2011/05/html5_email_address_regexp/ +var emailRe = /^[\w.!#$%&'*+\-\/=?\^`{|}~]+@[a-z\d\-]+(\.[a-z\d\-]+)+$/i; +var httpHttpsRe = /^https?:\/\/.*$/; +var wwwRe = /^www\./; +var tldRe = /\.(?:org|net|com)(?:\:|\/|$)/; +function urlize(str, length, nofollow) { + if (isNaN(length)) { + length = Infinity; + } + var noFollowAttr = nofollow === true ? ' rel="nofollow"' : ''; + var words = str.split(/(\s+)/).filter(function (word) { + // If the word has no length, bail. This can happen for str with + // trailing whitespace. + return word && word.length; + }).map(function (word) { + var matches = word.match(puncRe); + var possibleUrl = matches ? matches[1] : word; + var shortUrl = possibleUrl.substr(0, length); + + // url that starts with http or https + if (httpHttpsRe.test(possibleUrl)) { + return "<a href=\"" + possibleUrl + "\"" + noFollowAttr + ">" + shortUrl + "</a>"; + } + + // url that starts with www. + if (wwwRe.test(possibleUrl)) { + return "<a href=\"http://" + possibleUrl + "\"" + noFollowAttr + ">" + shortUrl + "</a>"; + } + + // an email address of the form username@domain.tld + if (emailRe.test(possibleUrl)) { + return "<a href=\"mailto:" + possibleUrl + "\">" + possibleUrl + "</a>"; + } + + // url that ends in .com, .org or .net that is not an email address + if (tldRe.test(possibleUrl)) { + return "<a href=\"http://" + possibleUrl + "\"" + noFollowAttr + ">" + shortUrl + "</a>"; + } + return word; + }); + return words.join(''); +} +exports.urlize = urlize; +function wordcount(str) { + str = normalize(str, ''); + var words = str ? str.match(/\w+/g) : null; + return words ? words.length : null; +} +exports.wordcount = wordcount; +function float(val, def) { + var res = parseFloat(val); + return isNaN(res) ? def : res; +} +exports.float = float; +var intFilter = r.makeMacro(['value', 'default', 'base'], [], function doInt(value, defaultValue, base) { + if (base === void 0) { + base = 10; + } + var res = parseInt(value, base); + return isNaN(res) ? defaultValue : res; +}); +exports.int = intFilter; + +// Aliases +exports.d = exports.default; +exports.e = exports.escape; + +/***/ }), +/* 19 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +var Loader = __webpack_require__(6); +var PrecompiledLoader = /*#__PURE__*/function (_Loader) { + _inheritsLoose(PrecompiledLoader, _Loader); + function PrecompiledLoader(compiledTemplates) { + var _this; + _this = _Loader.call(this) || this; + _this.precompiled = compiledTemplates || {}; + return _this; + } + var _proto = PrecompiledLoader.prototype; + _proto.getSource = function getSource(name) { + if (this.precompiled[name]) { + return { + src: { + type: 'code', + obj: this.precompiled[name] + }, + path: name + }; + } + return null; + }; + return PrecompiledLoader; +}(Loader); +module.exports = { + PrecompiledLoader: PrecompiledLoader +}; + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var SafeString = __webpack_require__(2).SafeString; + +/** + * Returns `true` if the object is a function, otherwise `false`. + * @param { any } value + * @returns { boolean } + */ +function callable(value) { + return typeof value === 'function'; +} +exports.callable = callable; + +/** + * Returns `true` if the object is strictly not `undefined`. + * @param { any } value + * @returns { boolean } + */ +function defined(value) { + return value !== undefined; +} +exports.defined = defined; + +/** + * Returns `true` if the operand (one) is divisble by the test's argument + * (two). + * @param { number } one + * @param { number } two + * @returns { boolean } + */ +function divisibleby(one, two) { + return one % two === 0; +} +exports.divisibleby = divisibleby; + +/** + * Returns true if the string has been escaped (i.e., is a SafeString). + * @param { any } value + * @returns { boolean } + */ +function escaped(value) { + return value instanceof SafeString; +} +exports.escaped = escaped; + +/** + * Returns `true` if the arguments are strictly equal. + * @param { any } one + * @param { any } two + */ +function equalto(one, two) { + return one === two; +} +exports.equalto = equalto; + +// Aliases +exports.eq = exports.equalto; +exports.sameas = exports.equalto; + +/** + * Returns `true` if the value is evenly divisible by 2. + * @param { number } value + * @returns { boolean } + */ +function even(value) { + return value % 2 === 0; +} +exports.even = even; + +/** + * Returns `true` if the value is falsy - if I recall correctly, '', 0, false, + * undefined, NaN or null. I don't know if we should stick to the default JS + * behavior or attempt to replicate what Python believes should be falsy (i.e., + * empty arrays, empty dicts, not 0...). + * @param { any } value + * @returns { boolean } + */ +function falsy(value) { + return !value; +} +exports.falsy = falsy; + +/** + * Returns `true` if the operand (one) is greater or equal to the test's + * argument (two). + * @param { number } one + * @param { number } two + * @returns { boolean } + */ +function ge(one, two) { + return one >= two; +} +exports.ge = ge; + +/** + * Returns `true` if the operand (one) is greater than the test's argument + * (two). + * @param { number } one + * @param { number } two + * @returns { boolean } + */ +function greaterthan(one, two) { + return one > two; +} +exports.greaterthan = greaterthan; + +// alias +exports.gt = exports.greaterthan; + +/** + * Returns `true` if the operand (one) is less than or equal to the test's + * argument (two). + * @param { number } one + * @param { number } two + * @returns { boolean } + */ +function le(one, two) { + return one <= two; +} +exports.le = le; + +/** + * Returns `true` if the operand (one) is less than the test's passed argument + * (two). + * @param { number } one + * @param { number } two + * @returns { boolean } + */ +function lessthan(one, two) { + return one < two; +} +exports.lessthan = lessthan; + +// alias +exports.lt = exports.lessthan; + +/** + * Returns `true` if the string is lowercased. + * @param { string } value + * @returns { boolean } + */ +function lower(value) { + return value.toLowerCase() === value; +} +exports.lower = lower; + +/** + * Returns `true` if the operand (one) is less than or equal to the test's + * argument (two). + * @param { number } one + * @param { number } two + * @returns { boolean } + */ +function ne(one, two) { + return one !== two; +} +exports.ne = ne; + +/** + * Returns true if the value is strictly equal to `null`. + * @param { any } + * @returns { boolean } + */ +function nullTest(value) { + return value === null; +} +exports.null = nullTest; + +/** + * Returns true if value is a number. + * @param { any } + * @returns { boolean } + */ +function number(value) { + return typeof value === 'number'; +} +exports.number = number; + +/** + * Returns `true` if the value is *not* evenly divisible by 2. + * @param { number } value + * @returns { boolean } + */ +function odd(value) { + return value % 2 === 1; +} +exports.odd = odd; + +/** + * Returns `true` if the value is a string, `false` if not. + * @param { any } value + * @returns { boolean } + */ +function string(value) { + return typeof value === 'string'; +} +exports.string = string; + +/** + * Returns `true` if the value is not in the list of things considered falsy: + * '', null, undefined, 0, NaN and false. + * @param { any } value + * @returns { boolean } + */ +function truthy(value) { + return !!value; +} +exports.truthy = truthy; + +/** + * Returns `true` if the value is undefined. + * @param { any } value + * @returns { boolean } + */ +function undefinedTest(value) { + return value === undefined; +} +exports.undefined = undefinedTest; + +/** + * Returns `true` if the string is uppercased. + * @param { string } value + * @returns { boolean } + */ +function upper(value) { + return value.toUpperCase() === value; +} +exports.upper = upper; + +/** + * If ES6 features are available, returns `true` if the value implements the + * `Symbol.iterator` method. If not, it's a string or Array. + * + * Could potentially cause issues if a browser exists that has Set and Map but + * not Symbol. + * + * @param { any } value + * @returns { boolean } + */ +function iterable(value) { + if (typeof Symbol !== 'undefined') { + return !!value[Symbol.iterator]; + } else { + return Array.isArray(value) || typeof value === 'string'; + } +} +exports.iterable = iterable; + +/** + * If ES6 features are available, returns `true` if the value is an object hash + * or an ES6 Map. Otherwise just return if it's an object hash. + * @param { any } value + * @returns { boolean } + */ +function mapping(value) { + // only maps and object hashes + var bool = value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value); + if (Set) { + return bool && !(value instanceof Set); + } else { + return bool; + } +} +exports.mapping = mapping; + +/***/ }), +/* 21 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _cycler(items) { + var index = -1; + return { + current: null, + reset: function reset() { + index = -1; + this.current = null; + }, + next: function next() { + index++; + if (index >= items.length) { + index = 0; + } + this.current = items[index]; + return this.current; + } + }; +} +function _joiner(sep) { + sep = sep || ','; + var first = true; + return function () { + var val = first ? '' : sep; + first = false; + return val; + }; +} + +// Making this a function instead so it returns a new object +// each time it's called. That way, if something like an environment +// uses it, they will each have their own copy. +function globals() { + return { + range: function range(start, stop, step) { + if (typeof stop === 'undefined') { + stop = start; + start = 0; + step = 1; + } else if (!step) { + step = 1; + } + var arr = []; + if (step > 0) { + for (var i = start; i < stop; i += step) { + arr.push(i); + } + } else { + for (var _i = start; _i > stop; _i += step) { + // eslint-disable-line for-direction + arr.push(_i); + } + } + return arr; + }, + cycler: function cycler() { + return _cycler(Array.prototype.slice.call(arguments)); + }, + joiner: function joiner(sep) { + return _joiner(sep); + } + }; +} +module.exports = globals; + +/***/ }), +/* 22 */ +/***/ (function(module, exports, __webpack_require__) { + +var path = __webpack_require__(4); +module.exports = function express(env, app) { + function NunjucksView(name, opts) { + this.name = name; + this.path = name; + this.defaultEngine = opts.defaultEngine; + this.ext = path.extname(name); + if (!this.ext && !this.defaultEngine) { + throw new Error('No default engine was specified and no extension was provided.'); + } + if (!this.ext) { + this.name += this.ext = (this.defaultEngine[0] !== '.' ? '.' : '') + this.defaultEngine; + } + } + NunjucksView.prototype.render = function render(opts, cb) { + env.render(this.name, opts, cb); + }; + app.set('view', NunjucksView); + app.set('nunjucksEnv', env); + return env; +}; + +/***/ }), +/* 23 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var fs = __webpack_require__(4); +var path = __webpack_require__(4); +var _require = __webpack_require__(0), + _prettifyError = _require._prettifyError; +var compiler = __webpack_require__(5); +var _require2 = __webpack_require__(7), + Environment = _require2.Environment; +var precompileGlobal = __webpack_require__(24); +function match(filename, patterns) { + if (!Array.isArray(patterns)) { + return false; + } + return patterns.some(function (pattern) { + return filename.match(pattern); + }); +} +function precompileString(str, opts) { + opts = opts || {}; + opts.isString = true; + var env = opts.env || new Environment([]); + var wrapper = opts.wrapper || precompileGlobal; + if (!opts.name) { + throw new Error('the "name" option is required when compiling a string'); + } + return wrapper([_precompile(str, opts.name, env)], opts); +} +function precompile(input, opts) { + // The following options are available: + // + // * name: name of the template (auto-generated when compiling a directory) + // * isString: input is a string, not a file path + // * asFunction: generate a callable function + // * force: keep compiling on error + // * env: the Environment to use (gets extensions and async filters from it) + // * include: which file/folders to include (folders are auto-included, files are auto-excluded) + // * exclude: which file/folders to exclude (folders are auto-included, files are auto-excluded) + // * wrapper: function(templates, opts) {...} + // Customize the output format to store the compiled template. + // By default, templates are stored in a global variable used by the runtime. + // A custom loader will be necessary to load your custom wrapper. + + opts = opts || {}; + var env = opts.env || new Environment([]); + var wrapper = opts.wrapper || precompileGlobal; + if (opts.isString) { + return precompileString(input, opts); + } + var pathStats = fs.existsSync(input) && fs.statSync(input); + var precompiled = []; + var templates = []; + function addTemplates(dir) { + fs.readdirSync(dir).forEach(function (file) { + var filepath = path.join(dir, file); + var subpath = filepath.substr(path.join(input, '/').length); + var stat = fs.statSync(filepath); + if (stat && stat.isDirectory()) { + subpath += '/'; + if (!match(subpath, opts.exclude)) { + addTemplates(filepath); + } + } else if (match(subpath, opts.include)) { + templates.push(filepath); + } + }); + } + if (pathStats.isFile()) { + precompiled.push(_precompile(fs.readFileSync(input, 'utf-8'), opts.name || input, env)); + } else if (pathStats.isDirectory()) { + addTemplates(input); + for (var i = 0; i < templates.length; i++) { + var name = templates[i].replace(path.join(input, '/'), ''); + try { + precompiled.push(_precompile(fs.readFileSync(templates[i], 'utf-8'), name, env)); + } catch (e) { + if (opts.force) { + // Don't stop generating the output if we're + // forcing compilation. + console.error(e); // eslint-disable-line no-console + } else { + throw e; + } + } + } + } + return wrapper(precompiled, opts); +} +function _precompile(str, name, env) { + env = env || new Environment([]); + var asyncFilters = env.asyncFilters; + var extensions = env.extensionsList; + var template; + name = name.replace(/\\/g, '/'); + try { + template = compiler.compile(str, asyncFilters, extensions, name, env.opts); + } catch (err) { + throw _prettifyError(name, false, err); + } + return { + name: name, + template: template + }; +} +module.exports = { + precompile: precompile, + precompileString: precompileString +}; + +/***/ }), +/* 24 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function precompileGlobal(templates, opts) { + var out = ''; + opts = opts || {}; + for (var i = 0; i < templates.length; i++) { + var name = JSON.stringify(templates[i].name); + var template = templates[i].template; + out += '(function() {' + '(window.nunjucksPrecompiled = window.nunjucksPrecompiled || {})' + '[' + name + '] = (function() {\n' + template + '\n})();\n'; + if (opts.asFunction) { + out += 'return function(ctx, cb) { return nunjucks.render(' + name + ', ctx, cb); }\n'; + } + out += '})();\n'; + } + return out; +} +module.exports = precompileGlobal; + +/***/ }), +/* 25 */ +/***/ (function(module, exports, __webpack_require__) { + +function installCompat() { + 'use strict'; + + /* eslint-disable camelcase */ + + // This must be called like `nunjucks.installCompat` so that `this` + // references the nunjucks instance + var runtime = this.runtime; + var lib = this.lib; + // Handle slim case where these 'modules' are excluded from the built source + var Compiler = this.compiler.Compiler; + var Parser = this.parser.Parser; + var nodes = this.nodes; + var lexer = this.lexer; + var orig_contextOrFrameLookup = runtime.contextOrFrameLookup; + var orig_memberLookup = runtime.memberLookup; + var orig_Compiler_assertType; + var orig_Parser_parseAggregate; + if (Compiler) { + orig_Compiler_assertType = Compiler.prototype.assertType; + } + if (Parser) { + orig_Parser_parseAggregate = Parser.prototype.parseAggregate; + } + function uninstall() { + runtime.contextOrFrameLookup = orig_contextOrFrameLookup; + runtime.memberLookup = orig_memberLookup; + if (Compiler) { + Compiler.prototype.assertType = orig_Compiler_assertType; + } + if (Parser) { + Parser.prototype.parseAggregate = orig_Parser_parseAggregate; + } + } + runtime.contextOrFrameLookup = function contextOrFrameLookup(context, frame, key) { + var val = orig_contextOrFrameLookup.apply(this, arguments); + if (val !== undefined) { + return val; + } + switch (key) { + case 'True': + return true; + case 'False': + return false; + case 'None': + return null; + default: + return undefined; + } + }; + function getTokensState(tokens) { + return { + index: tokens.index, + lineno: tokens.lineno, + colno: tokens.colno + }; + } + if ("STD" !== 'SLIM' && nodes && Compiler && Parser) { + // i.e., not slim mode + var Slice = nodes.Node.extend('Slice', { + fields: ['start', 'stop', 'step'], + init: function init(lineno, colno, start, stop, step) { + start = start || new nodes.Literal(lineno, colno, null); + stop = stop || new nodes.Literal(lineno, colno, null); + step = step || new nodes.Literal(lineno, colno, 1); + this.parent(lineno, colno, start, stop, step); + } + }); + Compiler.prototype.assertType = function assertType(node) { + if (node instanceof Slice) { + return; + } + orig_Compiler_assertType.apply(this, arguments); + }; + Compiler.prototype.compileSlice = function compileSlice(node, frame) { + this._emit('('); + this._compileExpression(node.start, frame); + this._emit('),('); + this._compileExpression(node.stop, frame); + this._emit('),('); + this._compileExpression(node.step, frame); + this._emit(')'); + }; + Parser.prototype.parseAggregate = function parseAggregate() { + var _this = this; + var origState = getTokensState(this.tokens); + // Set back one accounting for opening bracket/parens + origState.colno--; + origState.index--; + try { + return orig_Parser_parseAggregate.apply(this); + } catch (e) { + var errState = getTokensState(this.tokens); + var rethrow = function rethrow() { + lib._assign(_this.tokens, errState); + return e; + }; + + // Reset to state before original parseAggregate called + lib._assign(this.tokens, origState); + this.peeked = false; + var tok = this.peekToken(); + if (tok.type !== lexer.TOKEN_LEFT_BRACKET) { + throw rethrow(); + } else { + this.nextToken(); + } + var node = new Slice(tok.lineno, tok.colno); + + // If we don't encounter a colon while parsing, this is not a slice, + // so re-raise the original exception. + var isSlice = false; + for (var i = 0; i <= node.fields.length; i++) { + if (this.skip(lexer.TOKEN_RIGHT_BRACKET)) { + break; + } + if (i === node.fields.length) { + if (isSlice) { + this.fail('parseSlice: too many slice components', tok.lineno, tok.colno); + } else { + break; + } + } + if (this.skip(lexer.TOKEN_COLON)) { + isSlice = true; + } else { + var field = node.fields[i]; + node[field] = this.parseExpression(); + isSlice = this.skip(lexer.TOKEN_COLON) || isSlice; + } + } + if (!isSlice) { + throw rethrow(); + } + return new nodes.Array(tok.lineno, tok.colno, [node]); + } + }; + } + function sliceLookup(obj, start, stop, step) { + obj = obj || []; + if (start === null) { + start = step < 0 ? obj.length - 1 : 0; + } + if (stop === null) { + stop = step < 0 ? -1 : obj.length; + } else if (stop < 0) { + stop += obj.length; + } + if (start < 0) { + start += obj.length; + } + var results = []; + for (var i = start;; i += step) { + if (i < 0 || i > obj.length) { + break; + } + if (step > 0 && i >= stop) { + break; + } + if (step < 0 && i <= stop) { + break; + } + results.push(runtime.memberLookup(obj, i)); + } + return results; + } + function hasOwnProp(obj, key) { + return Object.prototype.hasOwnProperty.call(obj, key); + } + var ARRAY_MEMBERS = { + pop: function pop(index) { + if (index === undefined) { + return this.pop(); + } + if (index >= this.length || index < 0) { + throw new Error('KeyError'); + } + return this.splice(index, 1); + }, + append: function append(element) { + return this.push(element); + }, + remove: function remove(element) { + for (var i = 0; i < this.length; i++) { + if (this[i] === element) { + return this.splice(i, 1); + } + } + throw new Error('ValueError'); + }, + count: function count(element) { + var count = 0; + for (var i = 0; i < this.length; i++) { + if (this[i] === element) { + count++; + } + } + return count; + }, + index: function index(element) { + var i; + if ((i = this.indexOf(element)) === -1) { + throw new Error('ValueError'); + } + return i; + }, + find: function find(element) { + return this.indexOf(element); + }, + insert: function insert(index, elem) { + return this.splice(index, 0, elem); + } + }; + var OBJECT_MEMBERS = { + items: function items() { + return lib._entries(this); + }, + values: function values() { + return lib._values(this); + }, + keys: function keys() { + return lib.keys(this); + }, + get: function get(key, def) { + var output = this[key]; + if (output === undefined) { + output = def; + } + return output; + }, + has_key: function has_key(key) { + return hasOwnProp(this, key); + }, + pop: function pop(key, def) { + var output = this[key]; + if (output === undefined && def !== undefined) { + output = def; + } else if (output === undefined) { + throw new Error('KeyError'); + } else { + delete this[key]; + } + return output; + }, + popitem: function popitem() { + var keys = lib.keys(this); + if (!keys.length) { + throw new Error('KeyError'); + } + var k = keys[0]; + var val = this[k]; + delete this[k]; + return [k, val]; + }, + setdefault: function setdefault(key, def) { + if (def === void 0) { + def = null; + } + if (!(key in this)) { + this[key] = def; + } + return this[key]; + }, + update: function update(kwargs) { + lib._assign(this, kwargs); + return null; // Always returns None + } + }; + + OBJECT_MEMBERS.iteritems = OBJECT_MEMBERS.items; + OBJECT_MEMBERS.itervalues = OBJECT_MEMBERS.values; + OBJECT_MEMBERS.iterkeys = OBJECT_MEMBERS.keys; + runtime.memberLookup = function memberLookup(obj, val, autoescape) { + if (arguments.length === 4) { + return sliceLookup.apply(this, arguments); + } + obj = obj || {}; + + // If the object is an object, return any of the methods that Python would + // otherwise provide. + if (lib.isArray(obj) && hasOwnProp(ARRAY_MEMBERS, val)) { + return ARRAY_MEMBERS[val].bind(obj); + } + if (lib.isObject(obj) && hasOwnProp(OBJECT_MEMBERS, val)) { + return OBJECT_MEMBERS[val].bind(obj); + } + return orig_memberLookup.apply(this, arguments); + }; + return uninstall; +} +module.exports = installCompat; + +/***/ }) +/******/ ]); +}); +//# sourceMappingURL=nunjucks.js.map
\ No newline at end of file diff --git a/node_modules/nunjucks/browser/nunjucks.js.map b/node_modules/nunjucks/browser/nunjucks.js.map new file mode 100644 index 0000000..2986b3d --- /dev/null +++ b/node_modules/nunjucks/browser/nunjucks.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../webpack/universalModuleDefinition","../webpack/bootstrap ae4bf11627133d1652a1","../nunjucks/src/lib.js","../nunjucks/src/object.js","../nunjucks/src/runtime.js","../nunjucks/src/nodes.js","../nunjucks/src/compiler.js","../nunjucks/src/loader.js","../nunjucks/src/environment.js","../nunjucks/src/parser.js","../nunjucks/src/lexer.js","../nunjucks/src/web-loaders.js","../nunjucks/index.js","../node_modules/asap/browser-asap.js","../node_modules/asap/browser-raw.js","../node_modules/webpack/buildin/global.js","../node_modules/a-sync-waterfall/index.js","../node_modules/webpack/node_modules/events/events.js","../nunjucks/src/transformer.js","../nunjucks/src/filters.js","../nunjucks/src/precompiled-loader.js","../nunjucks/src/tests.js","../nunjucks/src/globals.js","../nunjucks/src/express-app.js","../nunjucks/src/precompile.js","../nunjucks/src/precompile-global.js","../nunjucks/src/jinja-compat.js"],"names":["ArrayProto","Array","prototype","ObjProto","Object","escapeMap","escapeRegex","exports","module","hasOwnProp","obj","k","hasOwnProperty","call","lookupEscape","ch","_prettifyError","path","withInternals","err","Update","TemplateError","old","Error","message","name","lineno","colno","cause","setPrototypeOf","defineProperty","enumerable","writable","value","captureStackTrace","constructor","getStack","stackDescriptor","getOwnPropertyDescriptor","get","stack","firstUpdate","msg","create","escape","val","replace","isFunction","toString","isArray","isString","isObject","_prepareAttributeParts","attr","split","getAttrGetter","attribute","parts","attrGetter","item","_item","i","length","part","undefined","groupBy","throwOnUndefined","result","iterator","key","TypeError","push","toArray","slice","without","array","contains","arguments","index","indexOf","repeat","char_","n","str","each","func","context","forEach","l","map","results","asyncIter","arr","iter","cb","next","asyncFor","keys","keys_","len","searchElement","fromIndex","_entries","_values","extend","obj1","obj2","_assign","inOperator","_defineProperties","target","props","descriptor","configurable","_toPropertyKey","_createClass","Constructor","protoProps","staticProps","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","res","Number","_inheritsLoose","subClass","superClass","_setPrototypeOf","o","p","bind","__proto__","EventEmitter","require","lib","parentWrap","parent","prop","wrap","tmp","apply","extendClass","cls","subclass","_cls","Obj","init","_proto","EmitterObj","_EventEmitter","_this2","_this","_proto2","arrayFrom","from","supportsIterators","Frame","isolateWrites","variables","topLevel","set","resolveUp","frame","resolve","id","lookup","forWrite","pop","makeMacro","argNames","kwargNames","macro","_len","macroArgs","_key","argCount","numArgs","args","kwargs","getKeywordArgs","makeKeywordArgs","__keywords","isKeywordArgs","lastArg","SafeString","valueOf","copySafeness","dest","markSafe","type","wrapSafe","ret","suppressValue","autoescape","ensureDefined","memberLookup","_len2","_key2","callWrap","contextOrFrameLookup","handleError","error","asyncEach","dimen","iterCallback","asyncAll","finished","outputArr","done","output","join","fromIterator","_require","traverseAndCheck","Node","findAll","_Obj","_arguments","fields","field","NodeList","children","child","iterFields","_this3","Value","_Node","_Node2","nodes","addChild","node","Root","Literal","Group","ArrayNode","Pair","Dict","LookupVal","If","IfAsync","InlineIf","For","AsyncEach","AsyncAll","Macro","Caller","Import","FromImport","_Node3","_proto3","template","names","withContext","FunCall","Filter","FilterAsync","KeywordArgs","Block","Super","TemplateRef","Extends","Include","Set","Switch","Case","Output","Capture","TemplateData","UnaryOp","BinOp","In","Is","Or","And","Not","Add","Concat","Sub","Mul","Div","FloorDiv","Mod","Pow","Neg","Pos","Compare","CompareOperand","CallExtension","ext","contentArgs","extName","__name","CallExtensionAsync","print","indent","inline","lines","line","process","stdout","write","nl","printNodes","typename","fieldName","JSON","stringify","_ref","parser","transformer","_require2","_require3","compareOps","Compiler","templateName","codebuf","lastId","buffer","bufferStack","_scopeClosers","inBlock","fail","_pushBuffer","_tmpid","_emit","_popBuffer","code","_emitLine","_emitLines","_emitFuncBegin","_emitFuncEnd","noReturn","_closeScopeLevels","_addScopeLevel","_withScopedSyntax","_makeCallback","_templateName","_compileChildren","compile","_compileAggregate","startChar","endChar","_compileExpression","assertType","types","some","t","compileCallExtension","async","_this4","compileCallExtensionAsync","compileNodeList","compileLiteral","compileSymbol","v","compileGroup","compileArray","compileDict","compilePair","compileInlineIf","cond","body","else_","compileIn","left","right","compileIs","_binOpEmitter","compileOr","compileAnd","compileAdd","compileConcat","compileSub","compileMul","compileDiv","compileMod","compileNot","compileFloorDiv","compilePow","compileNeg","compilePos","compileCompare","_this5","expr","ops","op","compileLookupVal","_getNodeName","compileFunCall","compileFilter","compileFilterAsync","symbol","compileKeywordArgs","compileSet","_this6","ids","targets","charAt","compileSwitch","_this7","cases","c","default","compileIf","_this8","compileIfAsync","_emitLoopBindings","_this9","bindings","b","compileFor","_this10","u","tid","_node$name$children","_compileAsyncLoop","parallel","_this11","asyncMethod","arrayLen","buf","compileAsyncEach","compileAsyncAll","_compileMacro","_this12","funcId","keepFrame","realNames","concat","currFrame","pair","bufferId","compileMacro","compileCaller","_compileGetTemplate","eagerCompile","ignoreMissing","parentTemplateId","parentName","eagerCompileArg","ignoreMissingArg","compileImport","compileFromImport","_this13","importedId","nameNode","alias","compileBlock","compileSuper","blockName","compileExtends","compileInclude","id2","compileTemplateData","compileCapture","_this14","compileOutput","_this15","compileRoot","_this16","blockNames","blocks","block","tmpFrame","_compile","getCode","src","asyncFilters","extensions","opts","preprocessors","preprocess","filter","f","processedSrc","reduce","s","processor","transform","parse","_EmitterObj","Loader","to","dirname","isRelative","filename","asap","waterfall","compiler","filters","FileSystemLoader","WebLoader","PrecompiledLoader","tests","globals","globalRuntime","expressApp","callbackAsap","noopTmplSrc","root","env","runtime","e","Environment","loaders","dev","trimBlocks","lstripBlocks","window","nunjucksPrecompiled","unshift","_initLoaders","extensionsList","addFilter","_ref2","test","addTest","loader","cache","on","fullname","emit","source","invalidateCache","addExtension","extension","removeExtension","getExtension","hasExtension","addGlobal","getGlobal","wrapped","getFilter","getTest","resolveTemplate","getTemplate","that","tmpl","raw","Template","syncResult","createTemplate","info","newTmpl","noCache","handle","getSource","express","app","render","ctx","renderString","tasks","callback","forceAsync","Context","exported","addBlock","setVariable","getVariables","getBlock","getSuper","idx","blk","addExport","getExported","_Obj2","tmplProps","tmplStr","compiled","parentFrame","didError","rootRenderFunc","Function","_getBlocks","lexer","Parser","tokens","peeked","breakOnBlocks","dropLeadingWhitespace","nextToken","withWhitespace","tok","TOKEN_WHITESPACE","peekToken","pushToken","skip","expect","skipValue","skipSymbol","TOKEN_SYMBOL","advanceAfterBlockEnd","TOKEN_BLOCK_END","advanceAfterVariableEnd","TOKEN_VARIABLE_END","tags","VARIABLE_END","parseFor","forTok","endBlock","parsePrimary","TOKEN_COMMA","parseExpression","parseUntilBlocks","parseMacro","macroTok","parseSignature","parseCall","callTok","callerArgs","macroCall","callerName","callerNode","parseWithContext","parseImport","importTok","parseFrom","fromTok","nextTok","parseBlock","tag","parseExtends","tagName","parseInclude","parseIf","parseSet","TOKEN_OPERATOR","parseSwitch","switchStart","switchEnd","caseStart","caseDefault","defaultCase","col","parseStatement","parseRaw","parseFilterStatement","endTagName","rawBlockRegex","RegExp","rawLevel","matches","begun","_extractRegex","all","pre","backN","parsePostfix","TOKEN_LEFT_PAREN","TOKEN_LEFT_BRACKET","parseAggregate","parseInlineIf","parseOr","condNode","bodyNode","parseAnd","node2","parseNot","parseIn","parseIs","invert","parseCompare","not","parseConcat","parseAdd","TOKEN_TILDE","parseSub","parseMul","parseDiv","parseFloorDiv","parseMod","parsePow","parseUnary","noFilters","parseFilter","noPostfix","TOKEN_STRING","TOKEN_INT","parseInt","TOKEN_FLOAT","parseFloat","TOKEN_BOOLEAN","TOKEN_NONE","TOKEN_REGEX","flags","parseFilterName","parseFilterArgs","TOKEN_PIPE","filterTok","TOKEN_LEFT_CURLY","TOKEN_RIGHT_PAREN","TOKEN_RIGHT_BRACKET","TOKEN_RIGHT_CURLY","TOKEN_COLON","tolerant","noParens","checkComma","prev","parseNodes","TOKEN_DATA","data","nextVal","TOKEN_BLOCK_START","TOKEN_VARIABLE_START","VARIABLE_START","TOKEN_COMMENT","COMMENT_START","COMMENT_END","parseAsRoot","lex","whitespaceChars","delimChars","intChars","BLOCK_START","BLOCK_END","TOKEN_SPECIAL","token","Tokenizer","in_code","blockStart","blockEnd","variableStart","variableEnd","commentStart","commentEnd","cur","current","isFinished","_parseString","_extract","_extractString","forward","back","forwardN","regexBody","previous","POSSIBLE_FLAGS","regexFlags","isCurrentAFlag","complexOps","curComplex","_extractUntil","match","dec","beginChars","inComment","_matches","lastLine","delimiter","m","charString","_extractMatching","breakOnMatch","first","regex","currentStr","lastIndexOf","substr","_Loader","baseURL","useCache","fetch","content","status","url","ajax","XMLHttpRequest","loading","onreadystatechange","readyState","responseText","Date","getTime","open","send","precompile","installJinjaCompat","configure","templatesPath","TemplateLoader","watch","web","NodeResolveLoader","reset","precompileString","sym","gensym","mapCOW","walk","ast","depthFirst","astT","propsT","depthWalk","_liftFilters","walked","descNode","liftFilters","liftSuper","blockNode","hasSuper","convertStatements","cps","r","normalize","defaultValue","abs","Math","isNaN","num","batch","linecount","fillWith","capitalize","toLowerCase","toUpperCase","center","width","spaces","post","default_","def","bool","dictsort","caseSensitive","by","si","sort","t1","t2","a","dump","safe","forceescape","groupby","indentfirst","sp","del","last","lengthFilter","Map","size","list","lower","nl2br","random","floor","getSelectOrReject","expectedTestResult","testName","secondArg","examineTestResult","reject","rejectattr","select","selectattr","new_","maxCount","originalStr","nextIndex","pos","count","substring","reverse","round","precision","method","factor","pow","rounder","ceil","slices","sliceLength","extra","offset","start","end","currSlice","sum","sortFilter","reversed","caseSens","getAttribute","x","y","string","striptags","preserveLinebreaks","trimmedInput","trim","title","words","word","truncate","killwords","orig","upper","urlencode","enc","encodeURIComponent","keyvals","puncRe","emailRe","httpHttpsRe","wwwRe","tldRe","urlize","nofollow","Infinity","noFollowAttr","possibleUrl","shortUrl","wordcount","float","intFilter","doInt","base","int","d","compiledTemplates","precompiled","callable","defined","divisibleby","one","two","escaped","equalto","eq","sameas","even","falsy","ge","greaterthan","gt","le","lessthan","lt","ne","nullTest","null","number","odd","truthy","undefinedTest","iterable","mapping","cycler","items","joiner","sep","range","stop","step","NunjucksView","defaultEngine","extname","fs","precompileGlobal","patterns","pattern","wrapper","_precompile","pathStats","existsSync","statSync","templates","addTemplates","dir","readdirSync","file","filepath","subpath","stat","isDirectory","exclude","include","isFile","readFileSync","force","console","out","asFunction","installCompat","orig_contextOrFrameLookup","orig_memberLookup","orig_Compiler_assertType","orig_Parser_parseAggregate","uninstall","getTokensState","Slice","compileSlice","origState","errState","rethrow","isSlice","sliceLookup","ARRAY_MEMBERS","splice","append","element","remove","find","insert","elem","OBJECT_MEMBERS","values","has_key","popitem","setdefault","update","iteritems","itervalues","iterkeys"],"mappings":"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A,aAACrF,GAAG,EAAEoF,GAAG,EAAE7c,EAAE,EAAE;IACzB,IAAI,CAAC6Z,CAAC,EAAE;MACNoR,SAAS,EAAE;IACb;IAEA,OAAOpR,CAAC,CAACiD,YAAY,CAACrF,GAAG,EAAEoF,GAAG,EAAE7c,EAAE,CAAC;EACrC,CAAC;EACD+qB,UAAU,EAAGA,UAAU,GAAIA,UAAU,CAACA,UAAU,GAAG7sB,SAAS;EAC5DstB,gBAAgB,EAAGT,UAAU,GAAIA,UAAU,CAACS,gBAAgB,GAAGttB;AACjE,CAAC,C;;;;;;;ACvFY;;AAEb;AACA,cAAc,mBAAO,CAAC,EAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;;;;;;;ACjEA,8CAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,kBAAkB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC9NA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;ACpBA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;;AAEA,MAAM,IAA2C;AACjD,IAAI,iCAAO,EAAE,mCAAE;AACf;AACA,KAAK;AAAA,oGAAC,CAAC;AACP,GAAG;AACH,+BAA+B;AAC/B,GAAG;AACH,kCAAkC;AAClC;AACA,CAAC;;;;;;;;AClFD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,sBAAsB;AACvC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,cAAc;AACd;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA,iCAAiC,QAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,OAAO;AACP;AACA,sCAAsC,QAAQ;AAC9C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;;AAEA;AACA,QAAQ,yBAAyB;AACjC;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,6DAA6D,aAAa;AAC1E;AACA,6DAA6D,aAAa;AAC1E;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,oCAAoC,aAAa;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH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","file":"nunjucks.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"nunjucks\"] = factory();\n\telse\n\t\troot[\"nunjucks\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 11);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap ae4bf11627133d1652a1","'use strict';\n\nvar ArrayProto = Array.prototype;\nvar ObjProto = Object.prototype;\n\nvar escapeMap = {\n '&': '&',\n '\"': '"',\n '\\'': ''',\n '<': '<',\n '>': '>',\n '\\\\': '\',\n};\n\nvar escapeRegex = /[&\"'<>\\\\]/g;\n\nvar exports = module.exports = {};\n\nfunction hasOwnProp(obj, k) {\n return ObjProto.hasOwnProperty.call(obj, k);\n}\n\nexports.hasOwnProp = hasOwnProp;\n\nfunction lookupEscape(ch) {\n return escapeMap[ch];\n}\n\nfunction _prettifyError(path, withInternals, err) {\n if (!err.Update) {\n // not one of ours, cast it\n err = new exports.TemplateError(err);\n }\n err.Update(path);\n\n // Unless they marked the dev flag, show them a trace from here\n if (!withInternals) {\n const old = err;\n err = new Error(old.message);\n err.name = old.name;\n }\n\n return err;\n}\n\nexports._prettifyError = _prettifyError;\n\nfunction TemplateError(message, lineno, colno) {\n var err;\n var cause;\n\n if (message instanceof Error) {\n cause = message;\n message = `${cause.name}: ${cause.message}`;\n }\n\n if (Object.setPrototypeOf) {\n err = new Error(message);\n Object.setPrototypeOf(err, TemplateError.prototype);\n } else {\n err = this;\n Object.defineProperty(err, 'message', {\n enumerable: false,\n writable: true,\n value: message,\n });\n }\n\n Object.defineProperty(err, 'name', {\n value: 'Template render error',\n });\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(err, this.constructor);\n }\n\n let getStack;\n\n if (cause) {\n const stackDescriptor = Object.getOwnPropertyDescriptor(cause, 'stack');\n getStack = stackDescriptor && (stackDescriptor.get || (() => stackDescriptor.value));\n if (!getStack) {\n getStack = () => cause.stack;\n }\n } else {\n const stack = (new Error(message)).stack;\n getStack = (() => stack);\n }\n\n Object.defineProperty(err, 'stack', {\n get: () => getStack.call(err),\n });\n\n Object.defineProperty(err, 'cause', {\n value: cause\n });\n\n err.lineno = lineno;\n err.colno = colno;\n err.firstUpdate = true;\n\n err.Update = function Update(path) {\n let msg = '(' + (path || 'unknown path') + ')';\n\n // only show lineno + colno next to path of template\n // where error occurred\n if (this.firstUpdate) {\n if (this.lineno && this.colno) {\n msg += ` [Line ${this.lineno}, Column ${this.colno}]`;\n } else if (this.lineno) {\n msg += ` [Line ${this.lineno}]`;\n }\n }\n\n msg += '\\n ';\n if (this.firstUpdate) {\n msg += ' ';\n }\n\n this.message = msg + (this.message || '');\n this.firstUpdate = false;\n return this;\n };\n\n return err;\n}\n\n\nif (Object.setPrototypeOf) {\n Object.setPrototypeOf(TemplateError.prototype, Error.prototype);\n} else {\n TemplateError.prototype = Object.create(Error.prototype, {\n constructor: {\n value: TemplateError,\n },\n });\n}\n\nexports.TemplateError = TemplateError;\n\nfunction escape(val) {\n return val.replace(escapeRegex, lookupEscape);\n}\n\nexports.escape = escape;\n\nfunction isFunction(obj) {\n return ObjProto.toString.call(obj) === '[object Function]';\n}\n\nexports.isFunction = isFunction;\n\nfunction isArray(obj) {\n return ObjProto.toString.call(obj) === '[object Array]';\n}\n\nexports.isArray = isArray;\n\nfunction isString(obj) {\n return ObjProto.toString.call(obj) === '[object String]';\n}\n\nexports.isString = isString;\n\nfunction isObject(obj) {\n return ObjProto.toString.call(obj) === '[object Object]';\n}\n\nexports.isObject = isObject;\n\n/**\n * @param {string|number} attr\n * @returns {(string|number)[]}\n * @private\n */\nfunction _prepareAttributeParts(attr) {\n if (!attr) {\n return [];\n }\n\n if (typeof attr === 'string') {\n return attr.split('.');\n }\n\n return [attr];\n}\n\n/**\n * @param {string} attribute Attribute value. Dots allowed.\n * @returns {function(Object): *}\n */\nfunction getAttrGetter(attribute) {\n const parts = _prepareAttributeParts(attribute);\n\n return function attrGetter(item) {\n let _item = item;\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n\n // If item is not an object, and we still got parts to handle, it means\n // that something goes wrong. Just roll out to undefined in that case.\n if (hasOwnProp(_item, part)) {\n _item = _item[part];\n } else {\n return undefined;\n }\n }\n\n return _item;\n };\n}\n\nexports.getAttrGetter = getAttrGetter;\n\nfunction groupBy(obj, val, throwOnUndefined) {\n const result = {};\n const iterator = isFunction(val) ? val : getAttrGetter(val);\n for (let i = 0; i < obj.length; i++) {\n const value = obj[i];\n const key = iterator(value, i);\n if (key === undefined && throwOnUndefined === true) {\n throw new TypeError(`groupby: attribute \"${val}\" resolved to undefined`);\n }\n (result[key] || (result[key] = [])).push(value);\n }\n return result;\n}\n\nexports.groupBy = groupBy;\n\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj);\n}\n\nexports.toArray = toArray;\n\nfunction without(array) {\n const result = [];\n if (!array) {\n return result;\n }\n const length = array.length;\n const contains = toArray(arguments).slice(1);\n let index = -1;\n\n while (++index < length) {\n if (indexOf(contains, array[index]) === -1) {\n result.push(array[index]);\n }\n }\n return result;\n}\n\nexports.without = without;\n\nfunction repeat(char_, n) {\n var str = '';\n for (let i = 0; i < n; i++) {\n str += char_;\n }\n return str;\n}\n\nexports.repeat = repeat;\n\nfunction each(obj, func, context) {\n if (obj == null) {\n return;\n }\n\n if (ArrayProto.forEach && obj.forEach === ArrayProto.forEach) {\n obj.forEach(func, context);\n } else if (obj.length === +obj.length) {\n for (let i = 0, l = obj.length; i < l; i++) {\n func.call(context, obj[i], i, obj);\n }\n }\n}\n\nexports.each = each;\n\nfunction map(obj, func) {\n var results = [];\n if (obj == null) {\n return results;\n }\n\n if (ArrayProto.map && obj.map === ArrayProto.map) {\n return obj.map(func);\n }\n\n for (let i = 0; i < obj.length; i++) {\n results[results.length] = func(obj[i], i);\n }\n\n if (obj.length === +obj.length) {\n results.length = obj.length;\n }\n\n return results;\n}\n\nexports.map = map;\n\nfunction asyncIter(arr, iter, cb) {\n let i = -1;\n\n function next() {\n i++;\n\n if (i < arr.length) {\n iter(arr[i], i, next, cb);\n } else {\n cb();\n }\n }\n\n next();\n}\n\nexports.asyncIter = asyncIter;\n\nfunction asyncFor(obj, iter, cb) {\n const keys = keys_(obj || {});\n const len = keys.length;\n let i = -1;\n\n function next() {\n i++;\n const k = keys[i];\n\n if (i < len) {\n iter(k, obj[k], i, len, next);\n } else {\n cb();\n }\n }\n\n next();\n}\n\nexports.asyncFor = asyncFor;\n\nfunction indexOf(arr, searchElement, fromIndex) {\n return Array.prototype.indexOf.call(arr || [], searchElement, fromIndex);\n}\n\nexports.indexOf = indexOf;\n\nfunction keys_(obj) {\n /* eslint-disable no-restricted-syntax */\n const arr = [];\n for (let k in obj) {\n if (hasOwnProp(obj, k)) {\n arr.push(k);\n }\n }\n return arr;\n}\n\nexports.keys = keys_;\n\nfunction _entries(obj) {\n return keys_(obj).map((k) => [k, obj[k]]);\n}\n\nexports._entries = _entries;\n\nfunction _values(obj) {\n return keys_(obj).map((k) => obj[k]);\n}\n\nexports._values = _values;\n\nfunction extend(obj1, obj2) {\n obj1 = obj1 || {};\n keys_(obj2).forEach(k => {\n obj1[k] = obj2[k];\n });\n return obj1;\n}\n\nexports._assign = exports.extend = extend;\n\nfunction inOperator(key, val) {\n if (isArray(val) || isString(val)) {\n return val.indexOf(key) !== -1;\n } else if (isObject(val)) {\n return key in val;\n }\n throw new Error('Cannot use \"in\" operator to search for \"'\n + key + '\" in unexpected types.');\n}\n\nexports.inOperator = inOperator;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/lib.js","'use strict';\n\n// A simple class system, more documentation to come\nconst EventEmitter = require('events');\nconst lib = require('./lib');\n\nfunction parentWrap(parent, prop) {\n if (typeof parent !== 'function' || typeof prop !== 'function') {\n return prop;\n }\n return function wrap() {\n // Save the current parent method\n const tmp = this.parent;\n\n // Set parent to the previous method, call, and restore\n this.parent = parent;\n const res = prop.apply(this, arguments);\n this.parent = tmp;\n\n return res;\n };\n}\n\nfunction extendClass(cls, name, props) {\n props = props || {};\n\n lib.keys(props).forEach(k => {\n props[k] = parentWrap(cls.prototype[k], props[k]);\n });\n\n class subclass extends cls {\n get typename() {\n return name;\n }\n }\n\n lib._assign(subclass.prototype, props);\n\n return subclass;\n}\n\nclass Obj {\n constructor(...args) {\n // Unfortunately necessary for backwards compatibility\n this.init(...args);\n }\n\n init() {}\n\n get typename() {\n return this.constructor.name;\n }\n\n static extend(name, props) {\n if (typeof name === 'object') {\n props = name;\n name = 'anonymous';\n }\n return extendClass(this, name, props);\n }\n}\n\nclass EmitterObj extends EventEmitter {\n constructor(...args) {\n super();\n // Unfortunately necessary for backwards compatibility\n this.init(...args);\n }\n\n init() {}\n\n get typename() {\n return this.constructor.name;\n }\n\n static extend(name, props) {\n if (typeof name === 'object') {\n props = name;\n name = 'anonymous';\n }\n return extendClass(this, name, props);\n }\n}\n\nmodule.exports = { Obj, EmitterObj };\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/object.js","'use strict';\n\nvar lib = require('./lib');\nvar arrayFrom = Array.from;\nvar supportsIterators = (\n typeof Symbol === 'function' && Symbol.iterator && typeof arrayFrom === 'function'\n);\n\n\n// Frames keep track of scoping both at compile-time and run-time so\n// we know how to access variables. Block tags can introduce special\n// variables, for example.\nclass Frame {\n constructor(parent, isolateWrites) {\n this.variables = Object.create(null);\n this.parent = parent;\n this.topLevel = false;\n // if this is true, writes (set) should never propagate upwards past\n // this frame to its parent (though reads may).\n this.isolateWrites = isolateWrites;\n }\n\n set(name, val, resolveUp) {\n // Allow variables with dots by automatically creating the\n // nested structure\n var parts = name.split('.');\n var obj = this.variables;\n var frame = this;\n\n if (resolveUp) {\n if ((frame = this.resolve(parts[0], true))) {\n frame.set(name, val);\n return;\n }\n }\n\n for (let i = 0; i < parts.length - 1; i++) {\n const id = parts[i];\n\n if (!obj[id]) {\n obj[id] = {};\n }\n obj = obj[id];\n }\n\n obj[parts[parts.length - 1]] = val;\n }\n\n get(name) {\n var val = this.variables[name];\n if (val !== undefined) {\n return val;\n }\n return null;\n }\n\n lookup(name) {\n var p = this.parent;\n var val = this.variables[name];\n if (val !== undefined) {\n return val;\n }\n return p && p.lookup(name);\n }\n\n resolve(name, forWrite) {\n var p = (forWrite && this.isolateWrites) ? undefined : this.parent;\n var val = this.variables[name];\n if (val !== undefined) {\n return this;\n }\n return p && p.resolve(name);\n }\n\n push(isolateWrites) {\n return new Frame(this, isolateWrites);\n }\n\n pop() {\n return this.parent;\n }\n}\n\nfunction makeMacro(argNames, kwargNames, func) {\n return function macro(...macroArgs) {\n var argCount = numArgs(macroArgs);\n var args;\n var kwargs = getKeywordArgs(macroArgs);\n\n if (argCount > argNames.length) {\n args = macroArgs.slice(0, argNames.length);\n\n // Positional arguments that should be passed in as\n // keyword arguments (essentially default values)\n macroArgs.slice(args.length, argCount).forEach((val, i) => {\n if (i < kwargNames.length) {\n kwargs[kwargNames[i]] = val;\n }\n });\n args.push(kwargs);\n } else if (argCount < argNames.length) {\n args = macroArgs.slice(0, argCount);\n\n for (let i = argCount; i < argNames.length; i++) {\n const arg = argNames[i];\n\n // Keyword arguments that should be passed as\n // positional arguments, i.e. the caller explicitly\n // used the name of a positional arg\n args.push(kwargs[arg]);\n delete kwargs[arg];\n }\n args.push(kwargs);\n } else {\n args = macroArgs;\n }\n\n return func.apply(this, args);\n };\n}\n\nfunction makeKeywordArgs(obj) {\n obj.__keywords = true;\n return obj;\n}\n\nfunction isKeywordArgs(obj) {\n return obj && Object.prototype.hasOwnProperty.call(obj, '__keywords');\n}\n\nfunction getKeywordArgs(args) {\n var len = args.length;\n if (len) {\n const lastArg = args[len - 1];\n if (isKeywordArgs(lastArg)) {\n return lastArg;\n }\n }\n return {};\n}\n\nfunction numArgs(args) {\n var len = args.length;\n if (len === 0) {\n return 0;\n }\n\n const lastArg = args[len - 1];\n if (isKeywordArgs(lastArg)) {\n return len - 1;\n } else {\n return len;\n }\n}\n\n// A SafeString object indicates that the string should not be\n// autoescaped. This happens magically because autoescaping only\n// occurs on primitive string objects.\nfunction SafeString(val) {\n if (typeof val !== 'string') {\n return val;\n }\n\n this.val = val;\n this.length = val.length;\n}\n\nSafeString.prototype = Object.create(String.prototype, {\n length: {\n writable: true,\n configurable: true,\n value: 0\n }\n});\nSafeString.prototype.valueOf = function valueOf() {\n return this.val;\n};\nSafeString.prototype.toString = function toString() {\n return this.val;\n};\n\nfunction copySafeness(dest, target) {\n if (dest instanceof SafeString) {\n return new SafeString(target);\n }\n return target.toString();\n}\n\nfunction markSafe(val) {\n var type = typeof val;\n\n if (type === 'string') {\n return new SafeString(val);\n } else if (type !== 'function') {\n return val;\n } else {\n return function wrapSafe(args) {\n var ret = val.apply(this, arguments);\n\n if (typeof ret === 'string') {\n return new SafeString(ret);\n }\n\n return ret;\n };\n }\n}\n\nfunction suppressValue(val, autoescape) {\n val = (val !== undefined && val !== null) ? val : '';\n\n if (autoescape && !(val instanceof SafeString)) {\n val = lib.escape(val.toString());\n }\n\n return val;\n}\n\nfunction ensureDefined(val, lineno, colno) {\n if (val === null || val === undefined) {\n throw new lib.TemplateError(\n 'attempted to output null or undefined value',\n lineno + 1,\n colno + 1\n );\n }\n return val;\n}\n\nfunction memberLookup(obj, val) {\n if (obj === undefined || obj === null) {\n return undefined;\n }\n\n if (typeof obj[val] === 'function') {\n return (...args) => obj[val].apply(obj, args);\n }\n\n return obj[val];\n}\n\nfunction callWrap(obj, name, context, args) {\n if (!obj) {\n throw new Error('Unable to call `' + name + '`, which is undefined or falsey');\n } else if (typeof obj !== 'function') {\n throw new Error('Unable to call `' + name + '`, which is not a function');\n }\n\n return obj.apply(context, args);\n}\n\nfunction contextOrFrameLookup(context, frame, name) {\n var val = frame.lookup(name);\n return (val !== undefined) ?\n val :\n context.lookup(name);\n}\n\nfunction handleError(error, lineno, colno) {\n if (error.lineno) {\n return error;\n } else {\n return new lib.TemplateError(error, lineno, colno);\n }\n}\n\nfunction asyncEach(arr, dimen, iter, cb) {\n if (lib.isArray(arr)) {\n const len = arr.length;\n\n lib.asyncIter(arr, function iterCallback(item, i, next) {\n switch (dimen) {\n case 1:\n iter(item, i, len, next);\n break;\n case 2:\n iter(item[0], item[1], i, len, next);\n break;\n case 3:\n iter(item[0], item[1], item[2], i, len, next);\n break;\n default:\n item.push(i, len, next);\n iter.apply(this, item);\n }\n }, cb);\n } else {\n lib.asyncFor(arr, function iterCallback(key, val, i, len, next) {\n iter(key, val, i, len, next);\n }, cb);\n }\n}\n\nfunction asyncAll(arr, dimen, func, cb) {\n var finished = 0;\n var len;\n var outputArr;\n\n function done(i, output) {\n finished++;\n outputArr[i] = output;\n\n if (finished === len) {\n cb(null, outputArr.join(''));\n }\n }\n\n if (lib.isArray(arr)) {\n len = arr.length;\n outputArr = new Array(len);\n\n if (len === 0) {\n cb(null, '');\n } else {\n for (let i = 0; i < arr.length; i++) {\n const item = arr[i];\n\n switch (dimen) {\n case 1:\n func(item, i, len, done);\n break;\n case 2:\n func(item[0], item[1], i, len, done);\n break;\n case 3:\n func(item[0], item[1], item[2], i, len, done);\n break;\n default:\n item.push(i, len, done);\n func.apply(this, item);\n }\n }\n }\n } else {\n const keys = lib.keys(arr || {});\n len = keys.length;\n outputArr = new Array(len);\n\n if (len === 0) {\n cb(null, '');\n } else {\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n func(k, arr[k], i, len, done);\n }\n }\n }\n}\n\nfunction fromIterator(arr) {\n if (typeof arr !== 'object' || arr === null || lib.isArray(arr)) {\n return arr;\n } else if (supportsIterators && Symbol.iterator in arr) {\n return arrayFrom(arr);\n } else {\n return arr;\n }\n}\n\nmodule.exports = {\n Frame: Frame,\n makeMacro: makeMacro,\n makeKeywordArgs: makeKeywordArgs,\n numArgs: numArgs,\n suppressValue: suppressValue,\n ensureDefined: ensureDefined,\n memberLookup: memberLookup,\n contextOrFrameLookup: contextOrFrameLookup,\n callWrap: callWrap,\n handleError: handleError,\n isArray: lib.isArray,\n keys: lib.keys,\n SafeString: SafeString,\n copySafeness: copySafeness,\n markSafe: markSafe,\n asyncEach: asyncEach,\n asyncAll: asyncAll,\n inOperator: lib.inOperator,\n fromIterator: fromIterator\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/runtime.js","'use strict';\n\nconst {Obj} = require('./object');\n\nfunction traverseAndCheck(obj, type, results) {\n if (obj instanceof type) {\n results.push(obj);\n }\n\n if (obj instanceof Node) {\n obj.findAll(type, results);\n }\n}\n\nclass Node extends Obj {\n init(lineno, colno, ...args) {\n this.lineno = lineno;\n this.colno = colno;\n\n this.fields.forEach((field, i) => {\n // The first two args are line/col numbers, so offset by 2\n var val = arguments[i + 2];\n\n // Fields should never be undefined, but null. It makes\n // testing easier to normalize values.\n if (val === undefined) {\n val = null;\n }\n\n this[field] = val;\n });\n }\n\n findAll(type, results) {\n results = results || [];\n\n if (this instanceof NodeList) {\n this.children.forEach(child => traverseAndCheck(child, type, results));\n } else {\n this.fields.forEach(field => traverseAndCheck(this[field], type, results));\n }\n\n return results;\n }\n\n iterFields(func) {\n this.fields.forEach((field) => {\n func(this[field], field);\n });\n }\n}\n\n// Abstract nodes\nclass Value extends Node {\n get typename() { return 'Value'; }\n get fields() {\n return ['value'];\n }\n}\n\n// Concrete nodes\nclass NodeList extends Node {\n get typename() { return 'NodeList'; }\n get fields() { return ['children']; }\n\n init(lineno, colno, nodes) {\n super.init(lineno, colno, nodes || []);\n }\n\n addChild(node) {\n this.children.push(node);\n }\n}\n\nconst Root = NodeList.extend('Root');\nconst Literal = Value.extend('Literal');\nconst Symbol = Value.extend('Symbol');\nconst Group = NodeList.extend('Group');\nconst ArrayNode = NodeList.extend('Array');\nconst Pair = Node.extend('Pair', { fields: ['key', 'value'] });\nconst Dict = NodeList.extend('Dict');\nconst LookupVal = Node.extend('LookupVal', { fields: ['target', 'val'] });\nconst If = Node.extend('If', { fields: ['cond', 'body', 'else_'] });\nconst IfAsync = If.extend('IfAsync');\nconst InlineIf = Node.extend('InlineIf', { fields: ['cond', 'body', 'else_'] });\nconst For = Node.extend('For', { fields: ['arr', 'name', 'body', 'else_'] });\nconst AsyncEach = For.extend('AsyncEach');\nconst AsyncAll = For.extend('AsyncAll');\nconst Macro = Node.extend('Macro', { fields: ['name', 'args', 'body'] });\nconst Caller = Macro.extend('Caller');\nconst Import = Node.extend('Import', { fields: ['template', 'target', 'withContext'] });\n\nclass FromImport extends Node {\n get typename() { return 'FromImport'; }\n get fields() { return ['template', 'names', 'withContext']; }\n\n init(lineno, colno, template, names, withContext) {\n super.init(lineno, colno, template, names || new NodeList(), withContext);\n }\n}\n\nconst FunCall = Node.extend('FunCall', { fields: ['name', 'args'] });\nconst Filter = FunCall.extend('Filter');\nconst FilterAsync = Filter.extend('FilterAsync', { fields: ['name', 'args', 'symbol'] });\nconst KeywordArgs = Dict.extend('KeywordArgs');\nconst Block = Node.extend('Block', { fields: ['name', 'body'] });\nconst Super = Node.extend('Super', { fields: ['blockName', 'symbol'] });\nconst TemplateRef = Node.extend('TemplateRef', { fields: ['template'] });\nconst Extends = TemplateRef.extend('Extends');\nconst Include = Node.extend('Include', { fields: ['template', 'ignoreMissing'] });\nconst Set = Node.extend('Set', { fields: ['targets', 'value'] });\nconst Switch = Node.extend('Switch', { fields: ['expr', 'cases', 'default'] });\nconst Case = Node.extend('Case', { fields: ['cond', 'body'] });\nconst Output = NodeList.extend('Output');\nconst Capture = Node.extend('Capture', { fields: ['body'] });\nconst TemplateData = Literal.extend('TemplateData');\nconst UnaryOp = Node.extend('UnaryOp', { fields: ['target'] });\nconst BinOp = Node.extend('BinOp', { fields: ['left', 'right'] });\nconst In = BinOp.extend('In');\nconst Is = BinOp.extend('Is');\nconst Or = BinOp.extend('Or');\nconst And = BinOp.extend('And');\nconst Not = UnaryOp.extend('Not');\nconst Add = BinOp.extend('Add');\nconst Concat = BinOp.extend('Concat');\nconst Sub = BinOp.extend('Sub');\nconst Mul = BinOp.extend('Mul');\nconst Div = BinOp.extend('Div');\nconst FloorDiv = BinOp.extend('FloorDiv');\nconst Mod = BinOp.extend('Mod');\nconst Pow = BinOp.extend('Pow');\nconst Neg = UnaryOp.extend('Neg');\nconst Pos = UnaryOp.extend('Pos');\nconst Compare = Node.extend('Compare', { fields: ['expr', 'ops'] });\nconst CompareOperand = Node.extend('CompareOperand', { fields: ['expr', 'type'] });\nconst CallExtension = Node.extend('CallExtension', {\n init(ext, prop, args, contentArgs) {\n this.parent();\n this.extName = ext.__name || ext;\n this.prop = prop;\n this.args = args || new NodeList();\n this.contentArgs = contentArgs || [];\n this.autoescape = ext.autoescape;\n },\n fields: ['extName', 'prop', 'args', 'contentArgs']\n});\nconst CallExtensionAsync = CallExtension.extend('CallExtensionAsync');\n\n// This is hacky, but this is just a debugging function anyway\nfunction print(str, indent, inline) {\n var lines = str.split('\\n');\n\n lines.forEach((line, i) => {\n if (line && ((inline && i > 0) || !inline)) {\n process.stdout.write((' ').repeat(indent));\n }\n const nl = (i === lines.length - 1) ? '' : '\\n';\n process.stdout.write(`${line}${nl}`);\n });\n}\n\n// Print the AST in a nicely formatted tree format for debuggin\nfunction printNodes(node, indent) {\n indent = indent || 0;\n\n print(node.typename + ': ', indent);\n\n if (node instanceof NodeList) {\n print('\\n');\n node.children.forEach((n) => {\n printNodes(n, indent + 2);\n });\n } else if (node instanceof CallExtension) {\n print(`${node.extName}.${node.prop}\\n`);\n\n if (node.args) {\n printNodes(node.args, indent + 2);\n }\n\n if (node.contentArgs) {\n node.contentArgs.forEach((n) => {\n printNodes(n, indent + 2);\n });\n }\n } else {\n let nodes = [];\n let props = null;\n\n node.iterFields((val, fieldName) => {\n if (val instanceof Node) {\n nodes.push([fieldName, val]);\n } else {\n props = props || {};\n props[fieldName] = val;\n }\n });\n\n if (props) {\n print(JSON.stringify(props, null, 2) + '\\n', null, true);\n } else {\n print('\\n');\n }\n\n nodes.forEach(([fieldName, n]) => {\n print(`[${fieldName}] =>`, indent + 2);\n printNodes(n, indent + 4);\n });\n }\n}\n\nmodule.exports = {\n Node: Node,\n Root: Root,\n NodeList: NodeList,\n Value: Value,\n Literal: Literal,\n Symbol: Symbol,\n Group: Group,\n Array: ArrayNode,\n Pair: Pair,\n Dict: Dict,\n Output: Output,\n Capture: Capture,\n TemplateData: TemplateData,\n If: If,\n IfAsync: IfAsync,\n InlineIf: InlineIf,\n For: For,\n AsyncEach: AsyncEach,\n AsyncAll: AsyncAll,\n Macro: Macro,\n Caller: Caller,\n Import: Import,\n FromImport: FromImport,\n FunCall: FunCall,\n Filter: Filter,\n FilterAsync: FilterAsync,\n KeywordArgs: KeywordArgs,\n Block: Block,\n Super: Super,\n Extends: Extends,\n Include: Include,\n Set: Set,\n Switch: Switch,\n Case: Case,\n LookupVal: LookupVal,\n BinOp: BinOp,\n In: In,\n Is: Is,\n Or: Or,\n And: And,\n Not: Not,\n Add: Add,\n Concat: Concat,\n Sub: Sub,\n Mul: Mul,\n Div: Div,\n FloorDiv: FloorDiv,\n Mod: Mod,\n Pow: Pow,\n Neg: Neg,\n Pos: Pos,\n Compare: Compare,\n CompareOperand: CompareOperand,\n\n CallExtension: CallExtension,\n CallExtensionAsync: CallExtensionAsync,\n\n printNodes: printNodes\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/nodes.js","'use strict';\n\nconst parser = require('./parser');\nconst transformer = require('./transformer');\nconst nodes = require('./nodes');\nconst {TemplateError} = require('./lib');\nconst {Frame} = require('./runtime');\nconst {Obj} = require('./object');\n\n// These are all the same for now, but shouldn't be passed straight\n// through\nconst compareOps = {\n '==': '==',\n '===': '===',\n '!=': '!=',\n '!==': '!==',\n '<': '<',\n '>': '>',\n '<=': '<=',\n '>=': '>='\n};\n\nclass Compiler extends Obj {\n init(templateName, throwOnUndefined) {\n this.templateName = templateName;\n this.codebuf = [];\n this.lastId = 0;\n this.buffer = null;\n this.bufferStack = [];\n this._scopeClosers = '';\n this.inBlock = false;\n this.throwOnUndefined = throwOnUndefined;\n }\n\n fail(msg, lineno, colno) {\n if (lineno !== undefined) {\n lineno += 1;\n }\n if (colno !== undefined) {\n colno += 1;\n }\n\n throw new TemplateError(msg, lineno, colno);\n }\n\n _pushBuffer() {\n const id = this._tmpid();\n this.bufferStack.push(this.buffer);\n this.buffer = id;\n this._emit(`var ${this.buffer} = \"\";`);\n return id;\n }\n\n _popBuffer() {\n this.buffer = this.bufferStack.pop();\n }\n\n _emit(code) {\n this.codebuf.push(code);\n }\n\n _emitLine(code) {\n this._emit(code + '\\n');\n }\n\n _emitLines(...lines) {\n lines.forEach((line) => this._emitLine(line));\n }\n\n _emitFuncBegin(node, name) {\n this.buffer = 'output';\n this._scopeClosers = '';\n this._emitLine(`function ${name}(env, context, frame, runtime, cb) {`);\n this._emitLine(`var lineno = ${node.lineno};`);\n this._emitLine(`var colno = ${node.colno};`);\n this._emitLine(`var ${this.buffer} = \"\";`);\n this._emitLine('try {');\n }\n\n _emitFuncEnd(noReturn) {\n if (!noReturn) {\n this._emitLine('cb(null, ' + this.buffer + ');');\n }\n\n this._closeScopeLevels();\n this._emitLine('} catch (e) {');\n this._emitLine(' cb(runtime.handleError(e, lineno, colno));');\n this._emitLine('}');\n this._emitLine('}');\n this.buffer = null;\n }\n\n _addScopeLevel() {\n this._scopeClosers += '})';\n }\n\n _closeScopeLevels() {\n this._emitLine(this._scopeClosers + ';');\n this._scopeClosers = '';\n }\n\n _withScopedSyntax(func) {\n var _scopeClosers = this._scopeClosers;\n this._scopeClosers = '';\n\n func.call(this);\n\n this._closeScopeLevels();\n this._scopeClosers = _scopeClosers;\n }\n\n _makeCallback(res) {\n var err = this._tmpid();\n\n return 'function(' + err + (res ? ',' + res : '') + ') {\\n' +\n 'if(' + err + ') { cb(' + err + '); return; }';\n }\n\n _tmpid() {\n this.lastId++;\n return 't_' + this.lastId;\n }\n\n _templateName() {\n return this.templateName == null ? 'undefined' : JSON.stringify(this.templateName);\n }\n\n _compileChildren(node, frame) {\n node.children.forEach((child) => {\n this.compile(child, frame);\n });\n }\n\n _compileAggregate(node, frame, startChar, endChar) {\n if (startChar) {\n this._emit(startChar);\n }\n\n node.children.forEach((child, i) => {\n if (i > 0) {\n this._emit(',');\n }\n\n this.compile(child, frame);\n });\n\n if (endChar) {\n this._emit(endChar);\n }\n }\n\n _compileExpression(node, frame) {\n // TODO: I'm not really sure if this type check is worth it or\n // not.\n this.assertType(\n node,\n nodes.Literal,\n nodes.Symbol,\n nodes.Group,\n nodes.Array,\n nodes.Dict,\n nodes.FunCall,\n nodes.Caller,\n nodes.Filter,\n nodes.LookupVal,\n nodes.Compare,\n nodes.InlineIf,\n nodes.In,\n nodes.Is,\n nodes.And,\n nodes.Or,\n nodes.Not,\n nodes.Add,\n nodes.Concat,\n nodes.Sub,\n nodes.Mul,\n nodes.Div,\n nodes.FloorDiv,\n nodes.Mod,\n nodes.Pow,\n nodes.Neg,\n nodes.Pos,\n nodes.Compare,\n nodes.NodeList\n );\n this.compile(node, frame);\n }\n\n assertType(node, ...types) {\n if (!types.some(t => node instanceof t)) {\n this.fail(`assertType: invalid type: ${node.typename}`, node.lineno, node.colno);\n }\n }\n\n compileCallExtension(node, frame, async) {\n var args = node.args;\n var contentArgs = node.contentArgs;\n var autoescape = typeof node.autoescape === 'boolean' ? node.autoescape : true;\n\n if (!async) {\n this._emit(`${this.buffer} += runtime.suppressValue(`);\n }\n\n this._emit(`env.getExtension(\"${node.extName}\")[\"${node.prop}\"](`);\n this._emit('context');\n\n if (args || contentArgs) {\n this._emit(',');\n }\n\n if (args) {\n if (!(args instanceof nodes.NodeList)) {\n this.fail('compileCallExtension: arguments must be a NodeList, ' +\n 'use `parser.parseSignature`');\n }\n\n args.children.forEach((arg, i) => {\n // Tag arguments are passed normally to the call. Note\n // that keyword arguments are turned into a single js\n // object as the last argument, if they exist.\n this._compileExpression(arg, frame);\n\n if (i !== args.children.length - 1 || contentArgs.length) {\n this._emit(',');\n }\n });\n }\n\n if (contentArgs.length) {\n contentArgs.forEach((arg, i) => {\n if (i > 0) {\n this._emit(',');\n }\n\n if (arg) {\n this._emitLine('function(cb) {');\n this._emitLine('if(!cb) { cb = function(err) { if(err) { throw err; }}}');\n const id = this._pushBuffer();\n\n this._withScopedSyntax(() => {\n this.compile(arg, frame);\n this._emitLine(`cb(null, ${id});`);\n });\n\n this._popBuffer();\n this._emitLine(`return ${id};`);\n this._emitLine('}');\n } else {\n this._emit('null');\n }\n });\n }\n\n if (async) {\n const res = this._tmpid();\n this._emitLine(', ' + this._makeCallback(res));\n this._emitLine(\n `${this.buffer} += runtime.suppressValue(${res}, ${autoescape} && env.opts.autoescape);`);\n this._addScopeLevel();\n } else {\n this._emit(')');\n this._emit(`, ${autoescape} && env.opts.autoescape);\\n`);\n }\n }\n\n compileCallExtensionAsync(node, frame) {\n this.compileCallExtension(node, frame, true);\n }\n\n compileNodeList(node, frame) {\n this._compileChildren(node, frame);\n }\n\n compileLiteral(node) {\n if (typeof node.value === 'string') {\n let val = node.value.replace(/\\\\/g, '\\\\\\\\');\n val = val.replace(/\"/g, '\\\\\"');\n val = val.replace(/\\n/g, '\\\\n');\n val = val.replace(/\\r/g, '\\\\r');\n val = val.replace(/\\t/g, '\\\\t');\n val = val.replace(/\\u2028/g, '\\\\u2028');\n this._emit(`\"${val}\"`);\n } else if (node.value === null) {\n this._emit('null');\n } else {\n this._emit(node.value.toString());\n }\n }\n\n compileSymbol(node, frame) {\n var name = node.value;\n var v = frame.lookup(name);\n\n if (v) {\n this._emit(v);\n } else {\n this._emit('runtime.contextOrFrameLookup(' +\n 'context, frame, \"' + name + '\")');\n }\n }\n\n compileGroup(node, frame) {\n this._compileAggregate(node, frame, '(', ')');\n }\n\n compileArray(node, frame) {\n this._compileAggregate(node, frame, '[', ']');\n }\n\n compileDict(node, frame) {\n this._compileAggregate(node, frame, '{', '}');\n }\n\n compilePair(node, frame) {\n var key = node.key;\n var val = node.value;\n\n if (key instanceof nodes.Symbol) {\n key = new nodes.Literal(key.lineno, key.colno, key.value);\n } else if (!(key instanceof nodes.Literal &&\n typeof key.value === 'string')) {\n this.fail('compilePair: Dict keys must be strings or names',\n key.lineno,\n key.colno);\n }\n\n this.compile(key, frame);\n this._emit(': ');\n this._compileExpression(val, frame);\n }\n\n compileInlineIf(node, frame) {\n this._emit('(');\n this.compile(node.cond, frame);\n this._emit('?');\n this.compile(node.body, frame);\n this._emit(':');\n if (node.else_ !== null) {\n this.compile(node.else_, frame);\n } else {\n this._emit('\"\"');\n }\n this._emit(')');\n }\n\n compileIn(node, frame) {\n this._emit('runtime.inOperator(');\n this.compile(node.left, frame);\n this._emit(',');\n this.compile(node.right, frame);\n this._emit(')');\n }\n\n compileIs(node, frame) {\n // first, we need to try to get the name of the test function, if it's a\n // callable (i.e., has args) and not a symbol.\n var right = node.right.name\n ? node.right.name.value\n // otherwise go with the symbol value\n : node.right.value;\n this._emit('env.getTest(\"' + right + '\").call(context, ');\n this.compile(node.left, frame);\n // compile the arguments for the callable if they exist\n if (node.right.args) {\n this._emit(',');\n this.compile(node.right.args, frame);\n }\n this._emit(') === true');\n }\n\n _binOpEmitter(node, frame, str) {\n this.compile(node.left, frame);\n this._emit(str);\n this.compile(node.right, frame);\n }\n\n // ensure concatenation instead of addition\n // by adding empty string in between\n compileOr(node, frame) {\n return this._binOpEmitter(node, frame, ' || ');\n }\n\n compileAnd(node, frame) {\n return this._binOpEmitter(node, frame, ' && ');\n }\n\n compileAdd(node, frame) {\n return this._binOpEmitter(node, frame, ' + ');\n }\n\n compileConcat(node, frame) {\n return this._binOpEmitter(node, frame, ' + \"\" + ');\n }\n\n compileSub(node, frame) {\n return this._binOpEmitter(node, frame, ' - ');\n }\n\n compileMul(node, frame) {\n return this._binOpEmitter(node, frame, ' * ');\n }\n\n compileDiv(node, frame) {\n return this._binOpEmitter(node, frame, ' / ');\n }\n\n compileMod(node, frame) {\n return this._binOpEmitter(node, frame, ' % ');\n }\n\n compileNot(node, frame) {\n this._emit('!');\n this.compile(node.target, frame);\n }\n\n compileFloorDiv(node, frame) {\n this._emit('Math.floor(');\n this.compile(node.left, frame);\n this._emit(' / ');\n this.compile(node.right, frame);\n this._emit(')');\n }\n\n compilePow(node, frame) {\n this._emit('Math.pow(');\n this.compile(node.left, frame);\n this._emit(', ');\n this.compile(node.right, frame);\n this._emit(')');\n }\n\n compileNeg(node, frame) {\n this._emit('-');\n this.compile(node.target, frame);\n }\n\n compilePos(node, frame) {\n this._emit('+');\n this.compile(node.target, frame);\n }\n\n compileCompare(node, frame) {\n this.compile(node.expr, frame);\n\n node.ops.forEach((op) => {\n this._emit(` ${compareOps[op.type]} `);\n this.compile(op.expr, frame);\n });\n }\n\n compileLookupVal(node, frame) {\n this._emit('runtime.memberLookup((');\n this._compileExpression(node.target, frame);\n this._emit('),');\n this._compileExpression(node.val, frame);\n this._emit(')');\n }\n\n _getNodeName(node) {\n switch (node.typename) {\n case 'Symbol':\n return node.value;\n case 'FunCall':\n return 'the return value of (' + this._getNodeName(node.name) + ')';\n case 'LookupVal':\n return this._getNodeName(node.target) + '[\"' +\n this._getNodeName(node.val) + '\"]';\n case 'Literal':\n return node.value.toString();\n default:\n return '--expression--';\n }\n }\n\n compileFunCall(node, frame) {\n // Keep track of line/col info at runtime by settings\n // variables within an expression. An expression in javascript\n // like (x, y, z) returns the last value, and x and y can be\n // anything\n this._emit('(lineno = ' + node.lineno +\n ', colno = ' + node.colno + ', ');\n\n this._emit('runtime.callWrap(');\n // Compile it as normal.\n this._compileExpression(node.name, frame);\n\n // Output the name of what we're calling so we can get friendly errors\n // if the lookup fails.\n this._emit(', \"' + this._getNodeName(node.name).replace(/\"/g, '\\\\\"') + '\", context, ');\n\n this._compileAggregate(node.args, frame, '[', '])');\n\n this._emit(')');\n }\n\n compileFilter(node, frame) {\n var name = node.name;\n this.assertType(name, nodes.Symbol);\n this._emit('env.getFilter(\"' + name.value + '\").call(context, ');\n this._compileAggregate(node.args, frame);\n this._emit(')');\n }\n\n compileFilterAsync(node, frame) {\n var name = node.name;\n var symbol = node.symbol.value;\n\n this.assertType(name, nodes.Symbol);\n\n frame.set(symbol, symbol);\n\n this._emit('env.getFilter(\"' + name.value + '\").call(context, ');\n this._compileAggregate(node.args, frame);\n this._emitLine(', ' + this._makeCallback(symbol));\n\n this._addScopeLevel();\n }\n\n compileKeywordArgs(node, frame) {\n this._emit('runtime.makeKeywordArgs(');\n this.compileDict(node, frame);\n this._emit(')');\n }\n\n compileSet(node, frame) {\n var ids = [];\n\n // Lookup the variable names for each identifier and create\n // new ones if necessary\n node.targets.forEach((target) => {\n var name = target.value;\n var id = frame.lookup(name);\n\n if (id === null || id === undefined) {\n id = this._tmpid();\n\n // Note: This relies on js allowing scope across\n // blocks, in case this is created inside an `if`\n this._emitLine('var ' + id + ';');\n }\n\n ids.push(id);\n });\n\n if (node.value) {\n this._emit(ids.join(' = ') + ' = ');\n this._compileExpression(node.value, frame);\n this._emitLine(';');\n } else {\n this._emit(ids.join(' = ') + ' = ');\n this.compile(node.body, frame);\n this._emitLine(';');\n }\n\n node.targets.forEach((target, i) => {\n var id = ids[i];\n var name = target.value;\n\n // We are running this for every var, but it's very\n // uncommon to assign to multiple vars anyway\n this._emitLine(`frame.set(\"${name}\", ${id}, true);`);\n\n this._emitLine('if(frame.topLevel) {');\n this._emitLine(`context.setVariable(\"${name}\", ${id});`);\n this._emitLine('}');\n\n if (name.charAt(0) !== '_') {\n this._emitLine('if(frame.topLevel) {');\n this._emitLine(`context.addExport(\"${name}\", ${id});`);\n this._emitLine('}');\n }\n });\n }\n\n compileSwitch(node, frame) {\n this._emit('switch (');\n this.compile(node.expr, frame);\n this._emit(') {');\n node.cases.forEach((c, i) => {\n this._emit('case ');\n this.compile(c.cond, frame);\n this._emit(': ');\n this.compile(c.body, frame);\n // preserve fall-throughs\n if (c.body.children.length) {\n this._emitLine('break;');\n }\n });\n if (node.default) {\n this._emit('default:');\n this.compile(node.default, frame);\n }\n this._emit('}');\n }\n\n compileIf(node, frame, async) {\n this._emit('if(');\n this._compileExpression(node.cond, frame);\n this._emitLine(') {');\n\n this._withScopedSyntax(() => {\n this.compile(node.body, frame);\n\n if (async) {\n this._emit('cb()');\n }\n });\n\n if (node.else_) {\n this._emitLine('}\\nelse {');\n\n this._withScopedSyntax(() => {\n this.compile(node.else_, frame);\n\n if (async) {\n this._emit('cb()');\n }\n });\n } else if (async) {\n this._emitLine('}\\nelse {');\n this._emit('cb()');\n }\n\n this._emitLine('}');\n }\n\n compileIfAsync(node, frame) {\n this._emit('(function(cb) {');\n this.compileIf(node, frame, true);\n this._emit('})(' + this._makeCallback());\n this._addScopeLevel();\n }\n\n _emitLoopBindings(node, arr, i, len) {\n const bindings = [\n {name: 'index', val: `${i} + 1`},\n {name: 'index0', val: i},\n {name: 'revindex', val: `${len} - ${i}`},\n {name: 'revindex0', val: `${len} - ${i} - 1`},\n {name: 'first', val: `${i} === 0`},\n {name: 'last', val: `${i} === ${len} - 1`},\n {name: 'length', val: len},\n ];\n\n bindings.forEach((b) => {\n this._emitLine(`frame.set(\"loop.${b.name}\", ${b.val});`);\n });\n }\n\n compileFor(node, frame) {\n // Some of this code is ugly, but it keeps the generated code\n // as fast as possible. ForAsync also shares some of this, but\n // not much.\n\n const i = this._tmpid();\n const len = this._tmpid();\n const arr = this._tmpid();\n frame = frame.push();\n\n this._emitLine('frame = frame.push();');\n\n this._emit(`var ${arr} = `);\n this._compileExpression(node.arr, frame);\n this._emitLine(';');\n\n this._emit(`if(${arr}) {`);\n this._emitLine(arr + ' = runtime.fromIterator(' + arr + ');');\n\n // If multiple names are passed, we need to bind them\n // appropriately\n if (node.name instanceof nodes.Array) {\n this._emitLine(`var ${i};`);\n\n // The object could be an arroy or object. Note that the\n // body of the loop is duplicated for each condition, but\n // we are optimizing for speed over size.\n this._emitLine(`if(runtime.isArray(${arr})) {`);\n this._emitLine(`var ${len} = ${arr}.length;`);\n this._emitLine(`for(${i}=0; ${i} < ${arr}.length; ${i}++) {`);\n\n // Bind each declared var\n node.name.children.forEach((child, u) => {\n var tid = this._tmpid();\n this._emitLine(`var ${tid} = ${arr}[${i}][${u}];`);\n this._emitLine(`frame.set(\"${child}\", ${arr}[${i}][${u}]);`);\n frame.set(node.name.children[u].value, tid);\n });\n\n this._emitLoopBindings(node, arr, i, len);\n this._withScopedSyntax(() => {\n this.compile(node.body, frame);\n });\n this._emitLine('}');\n\n this._emitLine('} else {');\n // Iterate over the key/values of an object\n const [key, val] = node.name.children;\n const k = this._tmpid();\n const v = this._tmpid();\n frame.set(key.value, k);\n frame.set(val.value, v);\n\n this._emitLine(`${i} = -1;`);\n this._emitLine(`var ${len} = runtime.keys(${arr}).length;`);\n this._emitLine(`for(var ${k} in ${arr}) {`);\n this._emitLine(`${i}++;`);\n this._emitLine(`var ${v} = ${arr}[${k}];`);\n this._emitLine(`frame.set(\"${key.value}\", ${k});`);\n this._emitLine(`frame.set(\"${val.value}\", ${v});`);\n\n this._emitLoopBindings(node, arr, i, len);\n this._withScopedSyntax(() => {\n this.compile(node.body, frame);\n });\n this._emitLine('}');\n\n this._emitLine('}');\n } else {\n // Generate a typical array iteration\n const v = this._tmpid();\n frame.set(node.name.value, v);\n\n this._emitLine(`var ${len} = ${arr}.length;`);\n this._emitLine(`for(var ${i}=0; ${i} < ${arr}.length; ${i}++) {`);\n this._emitLine(`var ${v} = ${arr}[${i}];`);\n this._emitLine(`frame.set(\"${node.name.value}\", ${v});`);\n\n this._emitLoopBindings(node, arr, i, len);\n\n this._withScopedSyntax(() => {\n this.compile(node.body, frame);\n });\n\n this._emitLine('}');\n }\n\n this._emitLine('}');\n if (node.else_) {\n this._emitLine('if (!' + len + ') {');\n this.compile(node.else_, frame);\n this._emitLine('}');\n }\n\n this._emitLine('frame = frame.pop();');\n }\n\n _compileAsyncLoop(node, frame, parallel) {\n // This shares some code with the For tag, but not enough to\n // worry about. This iterates across an object asynchronously,\n // but not in parallel.\n\n var i = this._tmpid();\n var len = this._tmpid();\n var arr = this._tmpid();\n var asyncMethod = parallel ? 'asyncAll' : 'asyncEach';\n frame = frame.push();\n\n this._emitLine('frame = frame.push();');\n\n this._emit('var ' + arr + ' = runtime.fromIterator(');\n this._compileExpression(node.arr, frame);\n this._emitLine(');');\n\n if (node.name instanceof nodes.Array) {\n const arrayLen = node.name.children.length;\n this._emit(`runtime.${asyncMethod}(${arr}, ${arrayLen}, function(`);\n\n node.name.children.forEach((name) => {\n this._emit(`${name.value},`);\n });\n\n this._emit(i + ',' + len + ',next) {');\n\n node.name.children.forEach((name) => {\n const id = name.value;\n frame.set(id, id);\n this._emitLine(`frame.set(\"${id}\", ${id});`);\n });\n } else {\n const id = node.name.value;\n this._emitLine(`runtime.${asyncMethod}(${arr}, 1, function(${id}, ${i}, ${len},next) {`);\n this._emitLine('frame.set(\"' + id + '\", ' + id + ');');\n frame.set(id, id);\n }\n\n this._emitLoopBindings(node, arr, i, len);\n\n this._withScopedSyntax(() => {\n let buf;\n if (parallel) {\n buf = this._pushBuffer();\n }\n\n this.compile(node.body, frame);\n this._emitLine('next(' + i + (buf ? ',' + buf : '') + ');');\n\n if (parallel) {\n this._popBuffer();\n }\n });\n\n const output = this._tmpid();\n this._emitLine('}, ' + this._makeCallback(output));\n this._addScopeLevel();\n\n if (parallel) {\n this._emitLine(this.buffer + ' += ' + output + ';');\n }\n\n if (node.else_) {\n this._emitLine('if (!' + arr + '.length) {');\n this.compile(node.else_, frame);\n this._emitLine('}');\n }\n\n this._emitLine('frame = frame.pop();');\n }\n\n compileAsyncEach(node, frame) {\n this._compileAsyncLoop(node, frame);\n }\n\n compileAsyncAll(node, frame) {\n this._compileAsyncLoop(node, frame, true);\n }\n\n _compileMacro(node, frame) {\n var args = [];\n var kwargs = null;\n var funcId = 'macro_' + this._tmpid();\n var keepFrame = (frame !== undefined);\n\n // Type check the definition of the args\n node.args.children.forEach((arg, i) => {\n if (i === node.args.children.length - 1 && arg instanceof nodes.Dict) {\n kwargs = arg;\n } else {\n this.assertType(arg, nodes.Symbol);\n args.push(arg);\n }\n });\n\n const realNames = [...args.map((n) => `l_${n.value}`), 'kwargs'];\n\n // Quoted argument names\n const argNames = args.map((n) => `\"${n.value}\"`);\n const kwargNames = ((kwargs && kwargs.children) || []).map((n) => `\"${n.key.value}\"`);\n\n // We pass a function to makeMacro which destructures the\n // arguments so support setting positional args with keywords\n // args and passing keyword args as positional args\n // (essentially default values). See runtime.js.\n let currFrame;\n if (keepFrame) {\n currFrame = frame.push(true);\n } else {\n currFrame = new Frame();\n }\n this._emitLines(\n `var ${funcId} = runtime.makeMacro(`,\n `[${argNames.join(', ')}], `,\n `[${kwargNames.join(', ')}], `,\n `function (${realNames.join(', ')}) {`,\n 'var callerFrame = frame;',\n 'frame = ' + ((keepFrame) ? 'frame.push(true);' : 'new runtime.Frame();'),\n 'kwargs = kwargs || {};',\n 'if (Object.prototype.hasOwnProperty.call(kwargs, \"caller\")) {',\n 'frame.set(\"caller\", kwargs.caller); }');\n\n // Expose the arguments to the template. Don't need to use\n // random names because the function\n // will create a new run-time scope for us\n args.forEach((arg) => {\n this._emitLine(`frame.set(\"${arg.value}\", l_${arg.value});`);\n currFrame.set(arg.value, `l_${arg.value}`);\n });\n\n // Expose the keyword arguments\n if (kwargs) {\n kwargs.children.forEach((pair) => {\n const name = pair.key.value;\n this._emit(`frame.set(\"${name}\", `);\n this._emit(`Object.prototype.hasOwnProperty.call(kwargs, \"${name}\")`);\n this._emit(` ? kwargs[\"${name}\"] : `);\n this._compileExpression(pair.value, currFrame);\n this._emit(');');\n });\n }\n\n const bufferId = this._pushBuffer();\n\n this._withScopedSyntax(() => {\n this.compile(node.body, currFrame);\n });\n\n this._emitLine('frame = ' + ((keepFrame) ? 'frame.pop();' : 'callerFrame;'));\n this._emitLine(`return new runtime.SafeString(${bufferId});`);\n this._emitLine('});');\n this._popBuffer();\n\n return funcId;\n }\n\n compileMacro(node, frame) {\n var funcId = this._compileMacro(node);\n\n // Expose the macro to the templates\n var name = node.name.value;\n frame.set(name, funcId);\n\n if (frame.parent) {\n this._emitLine(`frame.set(\"${name}\", ${funcId});`);\n } else {\n if (node.name.value.charAt(0) !== '_') {\n this._emitLine(`context.addExport(\"${name}\");`);\n }\n this._emitLine(`context.setVariable(\"${name}\", ${funcId});`);\n }\n }\n\n compileCaller(node, frame) {\n // basically an anonymous \"macro expression\"\n this._emit('(function (){');\n const funcId = this._compileMacro(node, frame);\n this._emit(`return ${funcId};})()`);\n }\n\n _compileGetTemplate(node, frame, eagerCompile, ignoreMissing) {\n const parentTemplateId = this._tmpid();\n const parentName = this._templateName();\n const cb = this._makeCallback(parentTemplateId);\n const eagerCompileArg = (eagerCompile) ? 'true' : 'false';\n const ignoreMissingArg = (ignoreMissing) ? 'true' : 'false';\n this._emit('env.getTemplate(');\n this._compileExpression(node.template, frame);\n this._emitLine(`, ${eagerCompileArg}, ${parentName}, ${ignoreMissingArg}, ${cb}`);\n return parentTemplateId;\n }\n\n compileImport(node, frame) {\n const target = node.target.value;\n const id = this._compileGetTemplate(node, frame, false, false);\n this._addScopeLevel();\n\n this._emitLine(id + '.getExported(' +\n (node.withContext ? 'context.getVariables(), frame, ' : '') +\n this._makeCallback(id));\n this._addScopeLevel();\n\n frame.set(target, id);\n\n if (frame.parent) {\n this._emitLine(`frame.set(\"${target}\", ${id});`);\n } else {\n this._emitLine(`context.setVariable(\"${target}\", ${id});`);\n }\n }\n\n compileFromImport(node, frame) {\n const importedId = this._compileGetTemplate(node, frame, false, false);\n this._addScopeLevel();\n\n this._emitLine(importedId + '.getExported(' +\n (node.withContext ? 'context.getVariables(), frame, ' : '') +\n this._makeCallback(importedId));\n this._addScopeLevel();\n\n node.names.children.forEach((nameNode) => {\n var name;\n var alias;\n var id = this._tmpid();\n\n if (nameNode instanceof nodes.Pair) {\n name = nameNode.key.value;\n alias = nameNode.value.value;\n } else {\n name = nameNode.value;\n alias = name;\n }\n\n this._emitLine(`if(Object.prototype.hasOwnProperty.call(${importedId}, \"${name}\")) {`);\n this._emitLine(`var ${id} = ${importedId}.${name};`);\n this._emitLine('} else {');\n this._emitLine(`cb(new Error(\"cannot import '${name}'\")); return;`);\n this._emitLine('}');\n\n frame.set(alias, id);\n\n if (frame.parent) {\n this._emitLine(`frame.set(\"${alias}\", ${id});`);\n } else {\n this._emitLine(`context.setVariable(\"${alias}\", ${id});`);\n }\n });\n }\n\n compileBlock(node) {\n var id = this._tmpid();\n\n // If we are executing outside a block (creating a top-level\n // block), we really don't want to execute its code because it\n // will execute twice: once when the child template runs and\n // again when the parent template runs. Note that blocks\n // within blocks will *always* execute immediately *and*\n // wherever else they are invoked (like used in a parent\n // template). This may have behavioral differences from jinja\n // because blocks can have side effects, but it seems like a\n // waste of performance to always execute huge top-level\n // blocks twice\n if (!this.inBlock) {\n this._emit('(parentTemplate ? function(e, c, f, r, cb) { cb(\"\"); } : ');\n }\n this._emit(`context.getBlock(\"${node.name.value}\")`);\n if (!this.inBlock) {\n this._emit(')');\n }\n this._emitLine('(env, context, frame, runtime, ' + this._makeCallback(id));\n this._emitLine(`${this.buffer} += ${id};`);\n this._addScopeLevel();\n }\n\n compileSuper(node, frame) {\n var name = node.blockName.value;\n var id = node.symbol.value;\n\n const cb = this._makeCallback(id);\n this._emitLine(`context.getSuper(env, \"${name}\", b_${name}, frame, runtime, ${cb}`);\n this._emitLine(`${id} = runtime.markSafe(${id});`);\n this._addScopeLevel();\n frame.set(id, id);\n }\n\n compileExtends(node, frame) {\n var k = this._tmpid();\n\n const parentTemplateId = this._compileGetTemplate(node, frame, true, false);\n\n // extends is a dynamic tag and can occur within a block like\n // `if`, so if this happens we need to capture the parent\n // template in the top-level scope\n this._emitLine(`parentTemplate = ${parentTemplateId}`);\n\n this._emitLine(`for(var ${k} in parentTemplate.blocks) {`);\n this._emitLine(`context.addBlock(${k}, parentTemplate.blocks[${k}]);`);\n this._emitLine('}');\n\n this._addScopeLevel();\n }\n\n compileInclude(node, frame) {\n this._emitLine('var tasks = [];');\n this._emitLine('tasks.push(');\n this._emitLine('function(callback) {');\n const id = this._compileGetTemplate(node, frame, false, node.ignoreMissing);\n this._emitLine(`callback(null,${id});});`);\n this._emitLine('});');\n\n const id2 = this._tmpid();\n this._emitLine('tasks.push(');\n this._emitLine('function(template, callback){');\n this._emitLine('template.render(context.getVariables(), frame, ' + this._makeCallback(id2));\n this._emitLine('callback(null,' + id2 + ');});');\n this._emitLine('});');\n\n this._emitLine('tasks.push(');\n this._emitLine('function(result, callback){');\n this._emitLine(`${this.buffer} += result;`);\n this._emitLine('callback(null);');\n this._emitLine('});');\n this._emitLine('env.waterfall(tasks, function(){');\n this._addScopeLevel();\n }\n\n compileTemplateData(node, frame) {\n this.compileLiteral(node, frame);\n }\n\n compileCapture(node, frame) {\n // we need to temporarily override the current buffer id as 'output'\n // so the set block writes to the capture output instead of the buffer\n var buffer = this.buffer;\n this.buffer = 'output';\n this._emitLine('(function() {');\n this._emitLine('var output = \"\";');\n this._withScopedSyntax(() => {\n this.compile(node.body, frame);\n });\n this._emitLine('return output;');\n this._emitLine('})()');\n // and of course, revert back to the old buffer id\n this.buffer = buffer;\n }\n\n compileOutput(node, frame) {\n const children = node.children;\n children.forEach(child => {\n // TemplateData is a special case because it is never\n // autoescaped, so simply output it for optimization\n if (child instanceof nodes.TemplateData) {\n if (child.value) {\n this._emit(`${this.buffer} += `);\n this.compileLiteral(child, frame);\n this._emitLine(';');\n }\n } else {\n this._emit(`${this.buffer} += runtime.suppressValue(`);\n if (this.throwOnUndefined) {\n this._emit('runtime.ensureDefined(');\n }\n this.compile(child, frame);\n if (this.throwOnUndefined) {\n this._emit(`,${node.lineno},${node.colno})`);\n }\n this._emit(', env.opts.autoescape);\\n');\n }\n });\n }\n\n compileRoot(node, frame) {\n if (frame) {\n this.fail('compileRoot: root node can\\'t have frame');\n }\n\n frame = new Frame();\n\n this._emitFuncBegin(node, 'root');\n this._emitLine('var parentTemplate = null;');\n this._compileChildren(node, frame);\n this._emitLine('if(parentTemplate) {');\n this._emitLine('parentTemplate.rootRenderFunc(env, context, frame, runtime, cb);');\n this._emitLine('} else {');\n this._emitLine(`cb(null, ${this.buffer});`);\n this._emitLine('}');\n this._emitFuncEnd(true);\n\n this.inBlock = true;\n\n const blockNames = [];\n\n const blocks = node.findAll(nodes.Block);\n\n blocks.forEach((block, i) => {\n const name = block.name.value;\n\n if (blockNames.indexOf(name) !== -1) {\n throw new Error(`Block \"${name}\" defined more than once.`);\n }\n blockNames.push(name);\n\n this._emitFuncBegin(block, `b_${name}`);\n\n const tmpFrame = new Frame();\n this._emitLine('var frame = frame.push(true);');\n this.compile(block.body, tmpFrame);\n this._emitFuncEnd();\n });\n\n this._emitLine('return {');\n\n blocks.forEach((block, i) => {\n const blockName = `b_${block.name.value}`;\n this._emitLine(`${blockName}: ${blockName},`);\n });\n\n this._emitLine('root: root\\n};');\n }\n\n compile(node, frame) {\n var _compile = this['compile' + node.typename];\n if (_compile) {\n _compile.call(this, node, frame);\n } else {\n this.fail(`compile: Cannot compile node: ${node.typename}`, node.lineno, node.colno);\n }\n }\n\n getCode() {\n return this.codebuf.join('');\n }\n}\n\nmodule.exports = {\n compile: function compile(src, asyncFilters, extensions, name, opts = {}) {\n const c = new Compiler(name, opts.throwOnUndefined);\n\n // Run the extension preprocessors against the source.\n const preprocessors = (extensions || []).map(ext => ext.preprocess).filter(f => !!f);\n\n const processedSrc = preprocessors.reduce((s, processor) => processor(s), src);\n\n c.compile(transformer.transform(\n parser.parse(processedSrc, extensions, opts),\n asyncFilters,\n name\n ));\n return c.getCode();\n },\n\n Compiler: Compiler\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/compiler.js","'use strict';\n\nconst path = require('path');\nconst {EmitterObj} = require('./object');\n\nmodule.exports = class Loader extends EmitterObj {\n resolve(from, to) {\n return path.resolve(path.dirname(from), to);\n }\n\n isRelative(filename) {\n return (filename.indexOf('./') === 0 || filename.indexOf('../') === 0);\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/loader.js","'use strict';\n\nconst asap = require('asap');\nconst waterfall = require('a-sync-waterfall');\nconst lib = require('./lib');\nconst compiler = require('./compiler');\nconst filters = require('./filters');\nconst {FileSystemLoader, WebLoader, PrecompiledLoader} = require('./loaders');\nconst tests = require('./tests');\nconst globals = require('./globals');\nconst {Obj, EmitterObj} = require('./object');\nconst globalRuntime = require('./runtime');\nconst {handleError, Frame} = globalRuntime;\nconst expressApp = require('./express-app');\n\n// If the user is using the async API, *always* call it\n// asynchronously even if the template was synchronous.\nfunction callbackAsap(cb, err, res) {\n asap(() => {\n cb(err, res);\n });\n}\n\n/**\n * A no-op template, for use with {% include ignore missing %}\n */\nconst noopTmplSrc = {\n type: 'code',\n obj: {\n root(env, context, frame, runtime, cb) {\n try {\n cb(null, '');\n } catch (e) {\n cb(handleError(e, null, null));\n }\n }\n }\n};\n\nclass Environment extends EmitterObj {\n init(loaders, opts) {\n // The dev flag determines the trace that'll be shown on errors.\n // If set to true, returns the full trace from the error point,\n // otherwise will return trace starting from Template.render\n // (the full trace from within nunjucks may confuse developers using\n // the library)\n // defaults to false\n opts = this.opts = opts || {};\n this.opts.dev = !!opts.dev;\n\n // The autoescape flag sets global autoescaping. If true,\n // every string variable will be escaped by default.\n // If false, strings can be manually escaped using the `escape` filter.\n // defaults to true\n this.opts.autoescape = opts.autoescape != null ? opts.autoescape : true;\n\n // If true, this will make the system throw errors if trying\n // to output a null or undefined value\n this.opts.throwOnUndefined = !!opts.throwOnUndefined;\n this.opts.trimBlocks = !!opts.trimBlocks;\n this.opts.lstripBlocks = !!opts.lstripBlocks;\n\n this.loaders = [];\n\n if (!loaders) {\n // The filesystem loader is only available server-side\n if (FileSystemLoader) {\n this.loaders = [new FileSystemLoader('views')];\n } else if (WebLoader) {\n this.loaders = [new WebLoader('/views')];\n }\n } else {\n this.loaders = lib.isArray(loaders) ? loaders : [loaders];\n }\n\n // It's easy to use precompiled templates: just include them\n // before you configure nunjucks and this will automatically\n // pick it up and use it\n if (typeof window !== 'undefined' && window.nunjucksPrecompiled) {\n this.loaders.unshift(\n new PrecompiledLoader(window.nunjucksPrecompiled)\n );\n }\n\n this._initLoaders();\n\n this.globals = globals();\n this.filters = {};\n this.tests = {};\n this.asyncFilters = [];\n this.extensions = {};\n this.extensionsList = [];\n\n lib._entries(filters).forEach(([name, filter]) => this.addFilter(name, filter));\n lib._entries(tests).forEach(([name, test]) => this.addTest(name, test));\n }\n\n _initLoaders() {\n this.loaders.forEach((loader) => {\n // Caching and cache busting\n loader.cache = {};\n if (typeof loader.on === 'function') {\n loader.on('update', (name, fullname) => {\n loader.cache[name] = null;\n this.emit('update', name, fullname, loader);\n });\n loader.on('load', (name, source) => {\n this.emit('load', name, source, loader);\n });\n }\n });\n }\n\n invalidateCache() {\n this.loaders.forEach((loader) => {\n loader.cache = {};\n });\n }\n\n addExtension(name, extension) {\n extension.__name = name;\n this.extensions[name] = extension;\n this.extensionsList.push(extension);\n return this;\n }\n\n removeExtension(name) {\n var extension = this.getExtension(name);\n if (!extension) {\n return;\n }\n\n this.extensionsList = lib.without(this.extensionsList, extension);\n delete this.extensions[name];\n }\n\n getExtension(name) {\n return this.extensions[name];\n }\n\n hasExtension(name) {\n return !!this.extensions[name];\n }\n\n addGlobal(name, value) {\n this.globals[name] = value;\n return this;\n }\n\n getGlobal(name) {\n if (typeof this.globals[name] === 'undefined') {\n throw new Error('global not found: ' + name);\n }\n return this.globals[name];\n }\n\n addFilter(name, func, async) {\n var wrapped = func;\n\n if (async) {\n this.asyncFilters.push(name);\n }\n this.filters[name] = wrapped;\n return this;\n }\n\n getFilter(name) {\n if (!this.filters[name]) {\n throw new Error('filter not found: ' + name);\n }\n return this.filters[name];\n }\n\n addTest(name, func) {\n this.tests[name] = func;\n return this;\n }\n\n getTest(name) {\n if (!this.tests[name]) {\n throw new Error('test not found: ' + name);\n }\n return this.tests[name];\n }\n\n resolveTemplate(loader, parentName, filename) {\n var isRelative = (loader.isRelative && parentName) ? loader.isRelative(filename) : false;\n return (isRelative && loader.resolve) ? loader.resolve(parentName, filename) : filename;\n }\n\n getTemplate(name, eagerCompile, parentName, ignoreMissing, cb) {\n var that = this;\n var tmpl = null;\n if (name && name.raw) {\n // this fixes autoescape for templates referenced in symbols\n name = name.raw;\n }\n\n if (lib.isFunction(parentName)) {\n cb = parentName;\n parentName = null;\n eagerCompile = eagerCompile || false;\n }\n\n if (lib.isFunction(eagerCompile)) {\n cb = eagerCompile;\n eagerCompile = false;\n }\n\n if (name instanceof Template) {\n tmpl = name;\n } else if (typeof name !== 'string') {\n throw new Error('template names must be a string: ' + name);\n } else {\n for (let i = 0; i < this.loaders.length; i++) {\n const loader = this.loaders[i];\n tmpl = loader.cache[this.resolveTemplate(loader, parentName, name)];\n if (tmpl) {\n break;\n }\n }\n }\n\n if (tmpl) {\n if (eagerCompile) {\n tmpl.compile();\n }\n\n if (cb) {\n cb(null, tmpl);\n return undefined;\n } else {\n return tmpl;\n }\n }\n let syncResult;\n\n const createTemplate = (err, info) => {\n if (!info && !err && !ignoreMissing) {\n err = new Error('template not found: ' + name);\n }\n\n if (err) {\n if (cb) {\n cb(err);\n return;\n } else {\n throw err;\n }\n }\n let newTmpl;\n if (!info) {\n newTmpl = new Template(noopTmplSrc, this, '', eagerCompile);\n } else {\n newTmpl = new Template(info.src, this, info.path, eagerCompile);\n if (!info.noCache) {\n info.loader.cache[name] = newTmpl;\n }\n }\n if (cb) {\n cb(null, newTmpl);\n } else {\n syncResult = newTmpl;\n }\n };\n\n lib.asyncIter(this.loaders, (loader, i, next, done) => {\n function handle(err, src) {\n if (err) {\n done(err);\n } else if (src) {\n src.loader = loader;\n done(null, src);\n } else {\n next();\n }\n }\n\n // Resolve name relative to parentName\n name = that.resolveTemplate(loader, parentName, name);\n\n if (loader.async) {\n loader.getSource(name, handle);\n } else {\n handle(null, loader.getSource(name));\n }\n }, createTemplate);\n\n return syncResult;\n }\n\n express(app) {\n return expressApp(this, app);\n }\n\n render(name, ctx, cb) {\n if (lib.isFunction(ctx)) {\n cb = ctx;\n ctx = null;\n }\n\n // We support a synchronous API to make it easier to migrate\n // existing code to async. This works because if you don't do\n // anything async work, the whole thing is actually run\n // synchronously.\n let syncResult = null;\n\n this.getTemplate(name, (err, tmpl) => {\n if (err && cb) {\n callbackAsap(cb, err);\n } else if (err) {\n throw err;\n } else {\n syncResult = tmpl.render(ctx, cb);\n }\n });\n\n return syncResult;\n }\n\n renderString(src, ctx, opts, cb) {\n if (lib.isFunction(opts)) {\n cb = opts;\n opts = {};\n }\n opts = opts || {};\n\n const tmpl = new Template(src, this, opts.path);\n return tmpl.render(ctx, cb);\n }\n\n waterfall(tasks, callback, forceAsync) {\n return waterfall(tasks, callback, forceAsync);\n }\n}\n\nclass Context extends Obj {\n init(ctx, blocks, env) {\n // Has to be tied to an environment so we can tap into its globals.\n this.env = env || new Environment();\n\n // Make a duplicate of ctx\n this.ctx = lib.extend({}, ctx);\n\n this.blocks = {};\n this.exported = [];\n\n lib.keys(blocks).forEach(name => {\n this.addBlock(name, blocks[name]);\n });\n }\n\n lookup(name) {\n // This is one of the most called functions, so optimize for\n // the typical case where the name isn't in the globals\n if (name in this.env.globals && !(name in this.ctx)) {\n return this.env.globals[name];\n } else {\n return this.ctx[name];\n }\n }\n\n setVariable(name, val) {\n this.ctx[name] = val;\n }\n\n getVariables() {\n return this.ctx;\n }\n\n addBlock(name, block) {\n this.blocks[name] = this.blocks[name] || [];\n this.blocks[name].push(block);\n return this;\n }\n\n getBlock(name) {\n if (!this.blocks[name]) {\n throw new Error('unknown block \"' + name + '\"');\n }\n\n return this.blocks[name][0];\n }\n\n getSuper(env, name, block, frame, runtime, cb) {\n var idx = lib.indexOf(this.blocks[name] || [], block);\n var blk = this.blocks[name][idx + 1];\n var context = this;\n\n if (idx === -1 || !blk) {\n throw new Error('no super block available for \"' + name + '\"');\n }\n\n blk(env, context, frame, runtime, cb);\n }\n\n addExport(name) {\n this.exported.push(name);\n }\n\n getExported() {\n var exported = {};\n this.exported.forEach((name) => {\n exported[name] = this.ctx[name];\n });\n return exported;\n }\n}\n\nclass Template extends Obj {\n init(src, env, path, eagerCompile) {\n this.env = env || new Environment();\n\n if (lib.isObject(src)) {\n switch (src.type) {\n case 'code':\n this.tmplProps = src.obj;\n break;\n case 'string':\n this.tmplStr = src.obj;\n break;\n default:\n throw new Error(\n `Unexpected template object type ${src.type}; expected 'code', or 'string'`);\n }\n } else if (lib.isString(src)) {\n this.tmplStr = src;\n } else {\n throw new Error('src must be a string or an object describing the source');\n }\n\n this.path = path;\n\n if (eagerCompile) {\n try {\n this._compile();\n } catch (err) {\n throw lib._prettifyError(this.path, this.env.opts.dev, err);\n }\n } else {\n this.compiled = false;\n }\n }\n\n render(ctx, parentFrame, cb) {\n if (typeof ctx === 'function') {\n cb = ctx;\n ctx = {};\n } else if (typeof parentFrame === 'function') {\n cb = parentFrame;\n parentFrame = null;\n }\n\n // If there is a parent frame, we are being called from internal\n // code of another template, and the internal system\n // depends on the sync/async nature of the parent template\n // to be inherited, so force an async callback\n const forceAsync = !parentFrame;\n\n // Catch compile errors for async rendering\n try {\n this.compile();\n } catch (e) {\n const err = lib._prettifyError(this.path, this.env.opts.dev, e);\n if (cb) {\n return callbackAsap(cb, err);\n } else {\n throw err;\n }\n }\n\n const context = new Context(ctx || {}, this.blocks, this.env);\n const frame = parentFrame ? parentFrame.push(true) : new Frame();\n frame.topLevel = true;\n let syncResult = null;\n let didError = false;\n\n this.rootRenderFunc(this.env, context, frame, globalRuntime, (err, res) => {\n // TODO: this is actually a bug in the compiled template (because waterfall\n // tasks are both not passing errors up the chain of callbacks AND are not\n // causing a return from the top-most render function). But fixing that\n // will require a more substantial change to the compiler.\n if (didError && cb && typeof res !== 'undefined') {\n // prevent multiple calls to cb\n return;\n }\n\n if (err) {\n err = lib._prettifyError(this.path, this.env.opts.dev, err);\n didError = true;\n }\n\n if (cb) {\n if (forceAsync) {\n callbackAsap(cb, err, res);\n } else {\n cb(err, res);\n }\n } else {\n if (err) {\n throw err;\n }\n syncResult = res;\n }\n });\n\n return syncResult;\n }\n\n\n getExported(ctx, parentFrame, cb) { // eslint-disable-line consistent-return\n if (typeof ctx === 'function') {\n cb = ctx;\n ctx = {};\n }\n\n if (typeof parentFrame === 'function') {\n cb = parentFrame;\n parentFrame = null;\n }\n\n // Catch compile errors for async rendering\n try {\n this.compile();\n } catch (e) {\n if (cb) {\n return cb(e);\n } else {\n throw e;\n }\n }\n\n const frame = parentFrame ? parentFrame.push() : new Frame();\n frame.topLevel = true;\n\n // Run the rootRenderFunc to populate the context with exported vars\n const context = new Context(ctx || {}, this.blocks, this.env);\n this.rootRenderFunc(this.env, context, frame, globalRuntime, (err) => {\n if (err) {\n cb(err, null);\n } else {\n cb(null, context.getExported());\n }\n });\n }\n\n compile() {\n if (!this.compiled) {\n this._compile();\n }\n }\n\n _compile() {\n var props;\n\n if (this.tmplProps) {\n props = this.tmplProps;\n } else {\n const source = compiler.compile(this.tmplStr,\n this.env.asyncFilters,\n this.env.extensionsList,\n this.path,\n this.env.opts);\n\n const func = new Function(source); // eslint-disable-line no-new-func\n props = func();\n }\n\n this.blocks = this._getBlocks(props);\n this.rootRenderFunc = props.root;\n this.compiled = true;\n }\n\n _getBlocks(props) {\n var blocks = {};\n\n lib.keys(props).forEach((k) => {\n if (k.slice(0, 2) === 'b_') {\n blocks[k.slice(2)] = props[k];\n }\n });\n\n return blocks;\n }\n}\n\nmodule.exports = {\n Environment: Environment,\n Template: Template\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/environment.js","'use strict';\n\nvar lexer = require('./lexer');\nvar nodes = require('./nodes');\nvar Obj = require('./object').Obj;\nvar lib = require('./lib');\n\nclass Parser extends Obj {\n init(tokens) {\n this.tokens = tokens;\n this.peeked = null;\n this.breakOnBlocks = null;\n this.dropLeadingWhitespace = false;\n\n this.extensions = [];\n }\n\n nextToken(withWhitespace) {\n var tok;\n\n if (this.peeked) {\n if (!withWhitespace && this.peeked.type === lexer.TOKEN_WHITESPACE) {\n this.peeked = null;\n } else {\n tok = this.peeked;\n this.peeked = null;\n return tok;\n }\n }\n\n tok = this.tokens.nextToken();\n\n if (!withWhitespace) {\n while (tok && tok.type === lexer.TOKEN_WHITESPACE) {\n tok = this.tokens.nextToken();\n }\n }\n\n return tok;\n }\n\n peekToken() {\n this.peeked = this.peeked || this.nextToken();\n return this.peeked;\n }\n\n pushToken(tok) {\n if (this.peeked) {\n throw new Error('pushToken: can only push one token on between reads');\n }\n this.peeked = tok;\n }\n\n error(msg, lineno, colno) {\n if (lineno === undefined || colno === undefined) {\n const tok = this.peekToken() || {};\n lineno = tok.lineno;\n colno = tok.colno;\n }\n if (lineno !== undefined) {\n lineno += 1;\n }\n if (colno !== undefined) {\n colno += 1;\n }\n return new lib.TemplateError(msg, lineno, colno);\n }\n\n fail(msg, lineno, colno) {\n throw this.error(msg, lineno, colno);\n }\n\n skip(type) {\n var tok = this.nextToken();\n if (!tok || tok.type !== type) {\n this.pushToken(tok);\n return false;\n }\n return true;\n }\n\n expect(type) {\n var tok = this.nextToken();\n if (tok.type !== type) {\n this.fail('expected ' + type + ', got ' + tok.type,\n tok.lineno,\n tok.colno);\n }\n return tok;\n }\n\n skipValue(type, val) {\n var tok = this.nextToken();\n if (!tok || tok.type !== type || tok.value !== val) {\n this.pushToken(tok);\n return false;\n }\n return true;\n }\n\n skipSymbol(val) {\n return this.skipValue(lexer.TOKEN_SYMBOL, val);\n }\n\n advanceAfterBlockEnd(name) {\n var tok;\n if (!name) {\n tok = this.peekToken();\n\n if (!tok) {\n this.fail('unexpected end of file');\n }\n\n if (tok.type !== lexer.TOKEN_SYMBOL) {\n this.fail('advanceAfterBlockEnd: expected symbol token or ' +\n 'explicit name to be passed');\n }\n\n name = this.nextToken().value;\n }\n\n tok = this.nextToken();\n\n if (tok && tok.type === lexer.TOKEN_BLOCK_END) {\n if (tok.value.charAt(0) === '-') {\n this.dropLeadingWhitespace = true;\n }\n } else {\n this.fail('expected block end in ' + name + ' statement');\n }\n\n return tok;\n }\n\n advanceAfterVariableEnd() {\n var tok = this.nextToken();\n\n if (tok && tok.type === lexer.TOKEN_VARIABLE_END) {\n this.dropLeadingWhitespace = tok.value.charAt(\n tok.value.length - this.tokens.tags.VARIABLE_END.length - 1\n ) === '-';\n } else {\n this.pushToken(tok);\n this.fail('expected variable end');\n }\n }\n\n parseFor() {\n var forTok = this.peekToken();\n var node;\n var endBlock;\n\n if (this.skipSymbol('for')) {\n node = new nodes.For(forTok.lineno, forTok.colno);\n endBlock = 'endfor';\n } else if (this.skipSymbol('asyncEach')) {\n node = new nodes.AsyncEach(forTok.lineno, forTok.colno);\n endBlock = 'endeach';\n } else if (this.skipSymbol('asyncAll')) {\n node = new nodes.AsyncAll(forTok.lineno, forTok.colno);\n endBlock = 'endall';\n } else {\n this.fail('parseFor: expected for{Async}', forTok.lineno, forTok.colno);\n }\n\n node.name = this.parsePrimary();\n\n if (!(node.name instanceof nodes.Symbol)) {\n this.fail('parseFor: variable name expected for loop');\n }\n\n const type = this.peekToken().type;\n if (type === lexer.TOKEN_COMMA) {\n // key/value iteration\n const key = node.name;\n node.name = new nodes.Array(key.lineno, key.colno);\n node.name.addChild(key);\n\n while (this.skip(lexer.TOKEN_COMMA)) {\n const prim = this.parsePrimary();\n node.name.addChild(prim);\n }\n }\n\n if (!this.skipSymbol('in')) {\n this.fail('parseFor: expected \"in\" keyword for loop',\n forTok.lineno,\n forTok.colno);\n }\n\n node.arr = this.parseExpression();\n this.advanceAfterBlockEnd(forTok.value);\n\n node.body = this.parseUntilBlocks(endBlock, 'else');\n\n if (this.skipSymbol('else')) {\n this.advanceAfterBlockEnd('else');\n node.else_ = this.parseUntilBlocks(endBlock);\n }\n\n this.advanceAfterBlockEnd();\n\n return node;\n }\n\n parseMacro() {\n const macroTok = this.peekToken();\n if (!this.skipSymbol('macro')) {\n this.fail('expected macro');\n }\n\n const name = this.parsePrimary(true);\n const args = this.parseSignature();\n const node = new nodes.Macro(macroTok.lineno, macroTok.colno, name, args);\n\n this.advanceAfterBlockEnd(macroTok.value);\n node.body = this.parseUntilBlocks('endmacro');\n this.advanceAfterBlockEnd();\n\n return node;\n }\n\n parseCall() {\n // a call block is parsed as a normal FunCall, but with an added\n // 'caller' kwarg which is a Caller node.\n var callTok = this.peekToken();\n if (!this.skipSymbol('call')) {\n this.fail('expected call');\n }\n\n const callerArgs = this.parseSignature(true) || new nodes.NodeList();\n const macroCall = this.parsePrimary();\n\n this.advanceAfterBlockEnd(callTok.value);\n const body = this.parseUntilBlocks('endcall');\n this.advanceAfterBlockEnd();\n\n const callerName = new nodes.Symbol(callTok.lineno,\n callTok.colno,\n 'caller');\n const callerNode = new nodes.Caller(callTok.lineno,\n callTok.colno,\n callerName,\n callerArgs,\n body);\n\n // add the additional caller kwarg, adding kwargs if necessary\n const args = macroCall.args.children;\n if (!(args[args.length - 1] instanceof nodes.KeywordArgs)) {\n args.push(new nodes.KeywordArgs());\n }\n const kwargs = args[args.length - 1];\n kwargs.addChild(new nodes.Pair(callTok.lineno,\n callTok.colno,\n callerName,\n callerNode));\n\n return new nodes.Output(callTok.lineno,\n callTok.colno,\n [macroCall]);\n }\n\n parseWithContext() {\n var tok = this.peekToken();\n\n var withContext = null;\n\n if (this.skipSymbol('with')) {\n withContext = true;\n } else if (this.skipSymbol('without')) {\n withContext = false;\n }\n\n if (withContext !== null) {\n if (!this.skipSymbol('context')) {\n this.fail('parseFrom: expected context after with/without',\n tok.lineno,\n tok.colno);\n }\n }\n\n return withContext;\n }\n\n parseImport() {\n var importTok = this.peekToken();\n if (!this.skipSymbol('import')) {\n this.fail('parseImport: expected import',\n importTok.lineno,\n importTok.colno);\n }\n\n const template = this.parseExpression();\n\n if (!this.skipSymbol('as')) {\n this.fail('parseImport: expected \"as\" keyword',\n importTok.lineno,\n importTok.colno);\n }\n\n const target = this.parseExpression();\n const withContext = this.parseWithContext();\n const node = new nodes.Import(importTok.lineno,\n importTok.colno,\n template,\n target,\n withContext);\n\n this.advanceAfterBlockEnd(importTok.value);\n\n return node;\n }\n\n parseFrom() {\n const fromTok = this.peekToken();\n if (!this.skipSymbol('from')) {\n this.fail('parseFrom: expected from');\n }\n\n const template = this.parseExpression();\n\n if (!this.skipSymbol('import')) {\n this.fail('parseFrom: expected import',\n fromTok.lineno,\n fromTok.colno);\n }\n\n const names = new nodes.NodeList();\n let withContext;\n\n while (1) { // eslint-disable-line no-constant-condition\n const nextTok = this.peekToken();\n if (nextTok.type === lexer.TOKEN_BLOCK_END) {\n if (!names.children.length) {\n this.fail('parseFrom: Expected at least one import name',\n fromTok.lineno,\n fromTok.colno);\n }\n\n // Since we are manually advancing past the block end,\n // need to keep track of whitespace control (normally\n // this is done in `advanceAfterBlockEnd`\n if (nextTok.value.charAt(0) === '-') {\n this.dropLeadingWhitespace = true;\n }\n\n this.nextToken();\n break;\n }\n\n if (names.children.length > 0 && !this.skip(lexer.TOKEN_COMMA)) {\n this.fail('parseFrom: expected comma',\n fromTok.lineno,\n fromTok.colno);\n }\n\n const name = this.parsePrimary();\n if (name.value.charAt(0) === '_') {\n this.fail('parseFrom: names starting with an underscore cannot be imported',\n name.lineno,\n name.colno);\n }\n\n if (this.skipSymbol('as')) {\n const alias = this.parsePrimary();\n names.addChild(new nodes.Pair(name.lineno,\n name.colno,\n name,\n alias));\n } else {\n names.addChild(name);\n }\n\n withContext = this.parseWithContext();\n }\n\n return new nodes.FromImport(fromTok.lineno,\n fromTok.colno,\n template,\n names,\n withContext);\n }\n\n parseBlock() {\n const tag = this.peekToken();\n if (!this.skipSymbol('block')) {\n this.fail('parseBlock: expected block', tag.lineno, tag.colno);\n }\n\n const node = new nodes.Block(tag.lineno, tag.colno);\n\n node.name = this.parsePrimary();\n if (!(node.name instanceof nodes.Symbol)) {\n this.fail('parseBlock: variable name expected',\n tag.lineno,\n tag.colno);\n }\n\n this.advanceAfterBlockEnd(tag.value);\n\n node.body = this.parseUntilBlocks('endblock');\n this.skipSymbol('endblock');\n this.skipSymbol(node.name.value);\n\n const tok = this.peekToken();\n if (!tok) {\n this.fail('parseBlock: expected endblock, got end of file');\n }\n\n this.advanceAfterBlockEnd(tok.value);\n\n return node;\n }\n\n parseExtends() {\n const tagName = 'extends';\n const tag = this.peekToken();\n if (!this.skipSymbol(tagName)) {\n this.fail('parseTemplateRef: expected ' + tagName);\n }\n\n const node = new nodes.Extends(tag.lineno, tag.colno);\n node.template = this.parseExpression();\n\n this.advanceAfterBlockEnd(tag.value);\n return node;\n }\n\n parseInclude() {\n const tagName = 'include';\n const tag = this.peekToken();\n if (!this.skipSymbol(tagName)) {\n this.fail('parseInclude: expected ' + tagName);\n }\n\n const node = new nodes.Include(tag.lineno, tag.colno);\n node.template = this.parseExpression();\n\n if (this.skipSymbol('ignore') && this.skipSymbol('missing')) {\n node.ignoreMissing = true;\n }\n\n this.advanceAfterBlockEnd(tag.value);\n return node;\n }\n\n parseIf() {\n const tag = this.peekToken();\n let node;\n\n if (this.skipSymbol('if') || this.skipSymbol('elif') || this.skipSymbol('elseif')) {\n node = new nodes.If(tag.lineno, tag.colno);\n } else if (this.skipSymbol('ifAsync')) {\n node = new nodes.IfAsync(tag.lineno, tag.colno);\n } else {\n this.fail('parseIf: expected if, elif, or elseif',\n tag.lineno,\n tag.colno);\n }\n\n node.cond = this.parseExpression();\n this.advanceAfterBlockEnd(tag.value);\n\n node.body = this.parseUntilBlocks('elif', 'elseif', 'else', 'endif');\n const tok = this.peekToken();\n\n switch (tok && tok.value) {\n case 'elseif':\n case 'elif':\n node.else_ = this.parseIf();\n break;\n case 'else':\n this.advanceAfterBlockEnd();\n node.else_ = this.parseUntilBlocks('endif');\n this.advanceAfterBlockEnd();\n break;\n case 'endif':\n node.else_ = null;\n this.advanceAfterBlockEnd();\n break;\n default:\n this.fail('parseIf: expected elif, else, or endif, got end of file');\n }\n\n return node;\n }\n\n parseSet() {\n const tag = this.peekToken();\n if (!this.skipSymbol('set')) {\n this.fail('parseSet: expected set', tag.lineno, tag.colno);\n }\n\n const node = new nodes.Set(tag.lineno, tag.colno, []);\n\n let target;\n while ((target = this.parsePrimary())) {\n node.targets.push(target);\n\n if (!this.skip(lexer.TOKEN_COMMA)) {\n break;\n }\n }\n\n if (!this.skipValue(lexer.TOKEN_OPERATOR, '=')) {\n if (!this.skip(lexer.TOKEN_BLOCK_END)) {\n this.fail('parseSet: expected = or block end in set tag',\n tag.lineno,\n tag.colno);\n } else {\n node.body = new nodes.Capture(\n tag.lineno,\n tag.colno,\n this.parseUntilBlocks('endset')\n );\n node.value = null;\n this.advanceAfterBlockEnd();\n }\n } else {\n node.value = this.parseExpression();\n this.advanceAfterBlockEnd(tag.value);\n }\n\n return node;\n }\n\n parseSwitch() {\n /*\n * Store the tag names in variables in case someone ever wants to\n * customize this.\n */\n const switchStart = 'switch';\n const switchEnd = 'endswitch';\n const caseStart = 'case';\n const caseDefault = 'default';\n\n // Get the switch tag.\n const tag = this.peekToken();\n\n // fail early if we get some unexpected tag.\n if (\n !this.skipSymbol(switchStart)\n && !this.skipSymbol(caseStart)\n && !this.skipSymbol(caseDefault)\n ) {\n this.fail('parseSwitch: expected \"switch,\" \"case\" or \"default\"', tag.lineno, tag.colno);\n }\n\n // parse the switch expression\n const expr = this.parseExpression();\n\n // advance until a start of a case, a default case or an endswitch.\n this.advanceAfterBlockEnd(switchStart);\n this.parseUntilBlocks(caseStart, caseDefault, switchEnd);\n\n // this is the first case. it could also be an endswitch, we'll check.\n let tok = this.peekToken();\n\n // create new variables for our cases and default case.\n const cases = [];\n let defaultCase;\n\n // while we're dealing with new cases nodes...\n do {\n // skip the start symbol and get the case expression\n this.skipSymbol(caseStart);\n const cond = this.parseExpression();\n this.advanceAfterBlockEnd(switchStart);\n // get the body of the case node and add it to the array of cases.\n const body = this.parseUntilBlocks(caseStart, caseDefault, switchEnd);\n cases.push(new nodes.Case(tok.line, tok.col, cond, body));\n // get our next case\n tok = this.peekToken();\n } while (tok && tok.value === caseStart);\n\n // we either have a default case or a switch end.\n switch (tok.value) {\n case caseDefault:\n this.advanceAfterBlockEnd();\n defaultCase = this.parseUntilBlocks(switchEnd);\n this.advanceAfterBlockEnd();\n break;\n case switchEnd:\n this.advanceAfterBlockEnd();\n break;\n default:\n // otherwise bail because EOF\n this.fail('parseSwitch: expected \"case,\" \"default\" or \"endswitch,\" got EOF.');\n }\n\n // and return the switch node.\n return new nodes.Switch(tag.lineno, tag.colno, expr, cases, defaultCase);\n }\n\n parseStatement() {\n var tok = this.peekToken();\n var node;\n\n if (tok.type !== lexer.TOKEN_SYMBOL) {\n this.fail('tag name expected', tok.lineno, tok.colno);\n }\n\n if (this.breakOnBlocks &&\n lib.indexOf(this.breakOnBlocks, tok.value) !== -1) {\n return null;\n }\n\n switch (tok.value) {\n case 'raw':\n return this.parseRaw();\n case 'verbatim':\n return this.parseRaw('verbatim');\n case 'if':\n case 'ifAsync':\n return this.parseIf();\n case 'for':\n case 'asyncEach':\n case 'asyncAll':\n return this.parseFor();\n case 'block':\n return this.parseBlock();\n case 'extends':\n return this.parseExtends();\n case 'include':\n return this.parseInclude();\n case 'set':\n return this.parseSet();\n case 'macro':\n return this.parseMacro();\n case 'call':\n return this.parseCall();\n case 'import':\n return this.parseImport();\n case 'from':\n return this.parseFrom();\n case 'filter':\n return this.parseFilterStatement();\n case 'switch':\n return this.parseSwitch();\n default:\n if (this.extensions.length) {\n for (let i = 0; i < this.extensions.length; i++) {\n const ext = this.extensions[i];\n if (lib.indexOf(ext.tags || [], tok.value) !== -1) {\n return ext.parse(this, nodes, lexer);\n }\n }\n }\n this.fail('unknown block tag: ' + tok.value, tok.lineno, tok.colno);\n }\n\n return node;\n }\n\n parseRaw(tagName) {\n tagName = tagName || 'raw';\n const endTagName = 'end' + tagName;\n // Look for upcoming raw blocks (ignore all other kinds of blocks)\n const rawBlockRegex = new RegExp('([\\\\s\\\\S]*?){%\\\\s*(' + tagName + '|' + endTagName + ')\\\\s*(?=%})%}');\n let rawLevel = 1;\n let str = '';\n let matches = null;\n\n // Skip opening raw token\n // Keep this token to track line and column numbers\n const begun = this.advanceAfterBlockEnd();\n\n // Exit when there's nothing to match\n // or when we've found the matching \"endraw\" block\n while ((matches = this.tokens._extractRegex(rawBlockRegex)) && rawLevel > 0) {\n const all = matches[0];\n const pre = matches[1];\n const blockName = matches[2];\n\n // Adjust rawlevel\n if (blockName === tagName) {\n rawLevel += 1;\n } else if (blockName === endTagName) {\n rawLevel -= 1;\n }\n\n // Add to str\n if (rawLevel === 0) {\n // We want to exclude the last \"endraw\"\n str += pre;\n // Move tokenizer to beginning of endraw block\n this.tokens.backN(all.length - pre.length);\n } else {\n str += all;\n }\n }\n\n return new nodes.Output(\n begun.lineno,\n begun.colno,\n [new nodes.TemplateData(begun.lineno, begun.colno, str)]\n );\n }\n\n parsePostfix(node) {\n let lookup;\n let tok = this.peekToken();\n\n while (tok) {\n if (tok.type === lexer.TOKEN_LEFT_PAREN) {\n // Function call\n node = new nodes.FunCall(tok.lineno,\n tok.colno,\n node,\n this.parseSignature());\n } else if (tok.type === lexer.TOKEN_LEFT_BRACKET) {\n // Reference\n lookup = this.parseAggregate();\n if (lookup.children.length > 1) {\n this.fail('invalid index');\n }\n\n node = new nodes.LookupVal(tok.lineno,\n tok.colno,\n node,\n lookup.children[0]);\n } else if (tok.type === lexer.TOKEN_OPERATOR && tok.value === '.') {\n // Reference\n this.nextToken();\n const val = this.nextToken();\n\n if (val.type !== lexer.TOKEN_SYMBOL) {\n this.fail('expected name as lookup value, got ' + val.value,\n val.lineno,\n val.colno);\n }\n\n // Make a literal string because it's not a variable\n // reference\n lookup = new nodes.Literal(val.lineno,\n val.colno,\n val.value);\n\n node = new nodes.LookupVal(tok.lineno,\n tok.colno,\n node,\n lookup);\n } else {\n break;\n }\n\n tok = this.peekToken();\n }\n\n return node;\n }\n\n parseExpression() {\n var node = this.parseInlineIf();\n return node;\n }\n\n parseInlineIf() {\n let node = this.parseOr();\n if (this.skipSymbol('if')) {\n const condNode = this.parseOr();\n const bodyNode = node;\n node = new nodes.InlineIf(node.lineno, node.colno);\n node.body = bodyNode;\n node.cond = condNode;\n if (this.skipSymbol('else')) {\n node.else_ = this.parseOr();\n } else {\n node.else_ = null;\n }\n }\n\n return node;\n }\n\n parseOr() {\n let node = this.parseAnd();\n while (this.skipSymbol('or')) {\n const node2 = this.parseAnd();\n node = new nodes.Or(node.lineno,\n node.colno,\n node,\n node2);\n }\n return node;\n }\n\n parseAnd() {\n let node = this.parseNot();\n while (this.skipSymbol('and')) {\n const node2 = this.parseNot();\n node = new nodes.And(node.lineno,\n node.colno,\n node,\n node2);\n }\n return node;\n }\n\n parseNot() {\n const tok = this.peekToken();\n if (this.skipSymbol('not')) {\n return new nodes.Not(tok.lineno,\n tok.colno,\n this.parseNot());\n }\n return this.parseIn();\n }\n\n parseIn() {\n let node = this.parseIs();\n while (1) { // eslint-disable-line no-constant-condition\n // check if the next token is 'not'\n const tok = this.nextToken();\n if (!tok) {\n break;\n }\n const invert = tok.type === lexer.TOKEN_SYMBOL && tok.value === 'not';\n // if it wasn't 'not', put it back\n if (!invert) {\n this.pushToken(tok);\n }\n if (this.skipSymbol('in')) {\n const node2 = this.parseIs();\n node = new nodes.In(node.lineno,\n node.colno,\n node,\n node2);\n if (invert) {\n node = new nodes.Not(node.lineno,\n node.colno,\n node);\n }\n } else {\n // if we'd found a 'not' but this wasn't an 'in', put back the 'not'\n if (invert) {\n this.pushToken(tok);\n }\n break;\n }\n }\n return node;\n }\n\n // I put this right after \"in\" in the operator precedence stack. That can\n // obviously be changed to be closer to Jinja.\n parseIs() {\n let node = this.parseCompare();\n // look for an is\n if (this.skipSymbol('is')) {\n // look for a not\n const not = this.skipSymbol('not');\n // get the next node\n const node2 = this.parseCompare();\n // create an Is node using the next node and the info from our Is node.\n node = new nodes.Is(node.lineno, node.colno, node, node2);\n // if we have a Not, create a Not node from our Is node.\n if (not) {\n node = new nodes.Not(node.lineno, node.colno, node);\n }\n }\n // return the node.\n return node;\n }\n\n parseCompare() {\n const compareOps = ['==', '===', '!=', '!==', '<', '>', '<=', '>='];\n const expr = this.parseConcat();\n const ops = [];\n\n while (1) { // eslint-disable-line no-constant-condition\n const tok = this.nextToken();\n\n if (!tok) {\n break;\n } else if (compareOps.indexOf(tok.value) !== -1) {\n ops.push(new nodes.CompareOperand(tok.lineno,\n tok.colno,\n this.parseConcat(),\n tok.value));\n } else {\n this.pushToken(tok);\n break;\n }\n }\n\n if (ops.length) {\n return new nodes.Compare(ops[0].lineno,\n ops[0].colno,\n expr,\n ops);\n } else {\n return expr;\n }\n }\n\n // finds the '~' for string concatenation\n parseConcat() {\n let node = this.parseAdd();\n while (this.skipValue(lexer.TOKEN_TILDE, '~')) {\n const node2 = this.parseAdd();\n node = new nodes.Concat(node.lineno,\n node.colno,\n node,\n node2);\n }\n return node;\n }\n\n parseAdd() {\n let node = this.parseSub();\n while (this.skipValue(lexer.TOKEN_OPERATOR, '+')) {\n const node2 = this.parseSub();\n node = new nodes.Add(node.lineno,\n node.colno,\n node,\n node2);\n }\n return node;\n }\n\n parseSub() {\n let node = this.parseMul();\n while (this.skipValue(lexer.TOKEN_OPERATOR, '-')) {\n const node2 = this.parseMul();\n node = new nodes.Sub(node.lineno,\n node.colno,\n node,\n node2);\n }\n return node;\n }\n\n parseMul() {\n let node = this.parseDiv();\n while (this.skipValue(lexer.TOKEN_OPERATOR, '*')) {\n const node2 = this.parseDiv();\n node = new nodes.Mul(node.lineno,\n node.colno,\n node,\n node2);\n }\n return node;\n }\n\n parseDiv() {\n let node = this.parseFloorDiv();\n while (this.skipValue(lexer.TOKEN_OPERATOR, '/')) {\n const node2 = this.parseFloorDiv();\n node = new nodes.Div(node.lineno,\n node.colno,\n node,\n node2);\n }\n return node;\n }\n\n parseFloorDiv() {\n let node = this.parseMod();\n while (this.skipValue(lexer.TOKEN_OPERATOR, '//')) {\n const node2 = this.parseMod();\n node = new nodes.FloorDiv(node.lineno,\n node.colno,\n node,\n node2);\n }\n return node;\n }\n\n parseMod() {\n let node = this.parsePow();\n while (this.skipValue(lexer.TOKEN_OPERATOR, '%')) {\n const node2 = this.parsePow();\n node = new nodes.Mod(node.lineno,\n node.colno,\n node,\n node2);\n }\n return node;\n }\n\n parsePow() {\n let node = this.parseUnary();\n while (this.skipValue(lexer.TOKEN_OPERATOR, '**')) {\n const node2 = this.parseUnary();\n node = new nodes.Pow(node.lineno,\n node.colno,\n node,\n node2);\n }\n return node;\n }\n\n parseUnary(noFilters) {\n const tok = this.peekToken();\n let node;\n\n if (this.skipValue(lexer.TOKEN_OPERATOR, '-')) {\n node = new nodes.Neg(tok.lineno,\n tok.colno,\n this.parseUnary(true));\n } else if (this.skipValue(lexer.TOKEN_OPERATOR, '+')) {\n node = new nodes.Pos(tok.lineno,\n tok.colno,\n this.parseUnary(true));\n } else {\n node = this.parsePrimary();\n }\n\n if (!noFilters) {\n node = this.parseFilter(node);\n }\n\n return node;\n }\n\n parsePrimary(noPostfix) {\n const tok = this.nextToken();\n let val;\n let node = null;\n\n if (!tok) {\n this.fail('expected expression, got end of file');\n } else if (tok.type === lexer.TOKEN_STRING) {\n val = tok.value;\n } else if (tok.type === lexer.TOKEN_INT) {\n val = parseInt(tok.value, 10);\n } else if (tok.type === lexer.TOKEN_FLOAT) {\n val = parseFloat(tok.value);\n } else if (tok.type === lexer.TOKEN_BOOLEAN) {\n if (tok.value === 'true') {\n val = true;\n } else if (tok.value === 'false') {\n val = false;\n } else {\n this.fail('invalid boolean: ' + tok.value,\n tok.lineno,\n tok.colno);\n }\n } else if (tok.type === lexer.TOKEN_NONE) {\n val = null;\n } else if (tok.type === lexer.TOKEN_REGEX) {\n val = new RegExp(tok.value.body, tok.value.flags);\n }\n\n if (val !== undefined) {\n node = new nodes.Literal(tok.lineno, tok.colno, val);\n } else if (tok.type === lexer.TOKEN_SYMBOL) {\n node = new nodes.Symbol(tok.lineno, tok.colno, tok.value);\n } else {\n // See if it's an aggregate type, we need to push the\n // current delimiter token back on\n this.pushToken(tok);\n node = this.parseAggregate();\n }\n\n if (!noPostfix) {\n node = this.parsePostfix(node);\n }\n\n if (node) {\n return node;\n } else {\n throw this.error(`unexpected token: ${tok.value}`, tok.lineno, tok.colno);\n }\n }\n\n parseFilterName() {\n const tok = this.expect(lexer.TOKEN_SYMBOL);\n let name = tok.value;\n\n while (this.skipValue(lexer.TOKEN_OPERATOR, '.')) {\n name += '.' + this.expect(lexer.TOKEN_SYMBOL).value;\n }\n\n return new nodes.Symbol(tok.lineno, tok.colno, name);\n }\n\n parseFilterArgs(node) {\n if (this.peekToken().type === lexer.TOKEN_LEFT_PAREN) {\n // Get a FunCall node and add the parameters to the\n // filter\n const call = this.parsePostfix(node);\n return call.args.children;\n }\n return [];\n }\n\n parseFilter(node) {\n while (this.skip(lexer.TOKEN_PIPE)) {\n const name = this.parseFilterName();\n\n node = new nodes.Filter(\n name.lineno,\n name.colno,\n name,\n new nodes.NodeList(\n name.lineno,\n name.colno,\n [node].concat(this.parseFilterArgs(node))\n )\n );\n }\n\n return node;\n }\n\n parseFilterStatement() {\n var filterTok = this.peekToken();\n if (!this.skipSymbol('filter')) {\n this.fail('parseFilterStatement: expected filter');\n }\n\n const name = this.parseFilterName();\n const args = this.parseFilterArgs(name);\n\n this.advanceAfterBlockEnd(filterTok.value);\n const body = new nodes.Capture(\n name.lineno,\n name.colno,\n this.parseUntilBlocks('endfilter')\n );\n this.advanceAfterBlockEnd();\n\n const node = new nodes.Filter(\n name.lineno,\n name.colno,\n name,\n new nodes.NodeList(\n name.lineno,\n name.colno,\n [body].concat(args)\n )\n );\n\n return new nodes.Output(\n name.lineno,\n name.colno,\n [node]\n );\n }\n\n parseAggregate() {\n var tok = this.nextToken();\n var node;\n\n switch (tok.type) {\n case lexer.TOKEN_LEFT_PAREN:\n node = new nodes.Group(tok.lineno, tok.colno);\n break;\n case lexer.TOKEN_LEFT_BRACKET:\n node = new nodes.Array(tok.lineno, tok.colno);\n break;\n case lexer.TOKEN_LEFT_CURLY:\n node = new nodes.Dict(tok.lineno, tok.colno);\n break;\n default:\n return null;\n }\n\n while (1) { // eslint-disable-line no-constant-condition\n const type = this.peekToken().type;\n if (type === lexer.TOKEN_RIGHT_PAREN ||\n type === lexer.TOKEN_RIGHT_BRACKET ||\n type === lexer.TOKEN_RIGHT_CURLY) {\n this.nextToken();\n break;\n }\n\n if (node.children.length > 0) {\n if (!this.skip(lexer.TOKEN_COMMA)) {\n this.fail('parseAggregate: expected comma after expression',\n tok.lineno,\n tok.colno);\n }\n }\n\n if (node instanceof nodes.Dict) {\n // TODO: check for errors\n const key = this.parsePrimary();\n\n // We expect a key/value pair for dicts, separated by a\n // colon\n if (!this.skip(lexer.TOKEN_COLON)) {\n this.fail('parseAggregate: expected colon after dict key',\n tok.lineno,\n tok.colno);\n }\n\n // TODO: check for errors\n const value = this.parseExpression();\n node.addChild(new nodes.Pair(key.lineno,\n key.colno,\n key,\n value));\n } else {\n // TODO: check for errors\n const expr = this.parseExpression();\n node.addChild(expr);\n }\n }\n\n return node;\n }\n\n parseSignature(tolerant, noParens) {\n let tok = this.peekToken();\n if (!noParens && tok.type !== lexer.TOKEN_LEFT_PAREN) {\n if (tolerant) {\n return null;\n } else {\n this.fail('expected arguments', tok.lineno, tok.colno);\n }\n }\n\n if (tok.type === lexer.TOKEN_LEFT_PAREN) {\n tok = this.nextToken();\n }\n\n const args = new nodes.NodeList(tok.lineno, tok.colno);\n const kwargs = new nodes.KeywordArgs(tok.lineno, tok.colno);\n let checkComma = false;\n\n while (1) { // eslint-disable-line no-constant-condition\n tok = this.peekToken();\n if (!noParens && tok.type === lexer.TOKEN_RIGHT_PAREN) {\n this.nextToken();\n break;\n } else if (noParens && tok.type === lexer.TOKEN_BLOCK_END) {\n break;\n }\n\n if (checkComma && !this.skip(lexer.TOKEN_COMMA)) {\n this.fail('parseSignature: expected comma after expression',\n tok.lineno,\n tok.colno);\n } else {\n const arg = this.parseExpression();\n\n if (this.skipValue(lexer.TOKEN_OPERATOR, '=')) {\n kwargs.addChild(\n new nodes.Pair(arg.lineno,\n arg.colno,\n arg,\n this.parseExpression())\n );\n } else {\n args.addChild(arg);\n }\n }\n\n checkComma = true;\n }\n\n if (kwargs.children.length) {\n args.addChild(kwargs);\n }\n\n return args;\n }\n\n parseUntilBlocks(...blockNames) {\n const prev = this.breakOnBlocks;\n this.breakOnBlocks = blockNames;\n\n const ret = this.parse();\n\n this.breakOnBlocks = prev;\n return ret;\n }\n\n parseNodes() {\n let tok;\n const buf = [];\n\n while ((tok = this.nextToken())) {\n if (tok.type === lexer.TOKEN_DATA) {\n let data = tok.value;\n const nextToken = this.peekToken();\n const nextVal = nextToken && nextToken.value;\n\n // If the last token has \"-\" we need to trim the\n // leading whitespace of the data. This is marked with\n // the `dropLeadingWhitespace` variable.\n if (this.dropLeadingWhitespace) {\n // TODO: this could be optimized (don't use regex)\n data = data.replace(/^\\s*/, '');\n this.dropLeadingWhitespace = false;\n }\n\n // Same for the succeeding block start token\n if (nextToken &&\n ((nextToken.type === lexer.TOKEN_BLOCK_START &&\n nextVal.charAt(nextVal.length - 1) === '-') ||\n (nextToken.type === lexer.TOKEN_VARIABLE_START &&\n nextVal.charAt(this.tokens.tags.VARIABLE_START.length)\n === '-') ||\n (nextToken.type === lexer.TOKEN_COMMENT &&\n nextVal.charAt(this.tokens.tags.COMMENT_START.length)\n === '-'))) {\n // TODO: this could be optimized (don't use regex)\n data = data.replace(/\\s*$/, '');\n }\n\n buf.push(new nodes.Output(tok.lineno,\n tok.colno,\n [new nodes.TemplateData(tok.lineno,\n tok.colno,\n data)]));\n } else if (tok.type === lexer.TOKEN_BLOCK_START) {\n this.dropLeadingWhitespace = false;\n const n = this.parseStatement();\n if (!n) {\n break;\n }\n buf.push(n);\n } else if (tok.type === lexer.TOKEN_VARIABLE_START) {\n const e = this.parseExpression();\n this.dropLeadingWhitespace = false;\n this.advanceAfterVariableEnd();\n buf.push(new nodes.Output(tok.lineno, tok.colno, [e]));\n } else if (tok.type === lexer.TOKEN_COMMENT) {\n this.dropLeadingWhitespace = tok.value.charAt(\n tok.value.length - this.tokens.tags.COMMENT_END.length - 1\n ) === '-';\n } else {\n // Ignore comments, otherwise this should be an error\n this.fail('Unexpected token at top-level: ' +\n tok.type, tok.lineno, tok.colno);\n }\n }\n\n return buf;\n }\n\n parse() {\n return new nodes.NodeList(0, 0, this.parseNodes());\n }\n\n parseAsRoot() {\n return new nodes.Root(0, 0, this.parseNodes());\n }\n}\n\n// var util = require('util');\n\n// var l = lexer.lex('{%- if x -%}\\n hello {% endif %}');\n// var t;\n// while((t = l.nextToken())) {\n// console.log(util.inspect(t));\n// }\n\n// var p = new Parser(lexer.lex('hello {% filter title %}' +\n// 'Hello madam how are you' +\n// '{% endfilter %}'));\n// var n = p.parseAsRoot();\n// nodes.printNodes(n);\n\nmodule.exports = {\n parse(src, extensions, opts) {\n var p = new Parser(lexer.lex(src, opts));\n if (extensions !== undefined) {\n p.extensions = extensions;\n }\n return p.parseAsRoot();\n },\n Parser: Parser\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/parser.js","'use strict';\n\nconst lib = require('./lib');\n\nlet whitespaceChars = ' \\n\\t\\r\\u00A0';\nlet delimChars = '()[]{}%*-+~/#,:|.<>=!';\nlet intChars = '0123456789';\n\nlet BLOCK_START = '{%';\nlet BLOCK_END = '%}';\nlet VARIABLE_START = '{{';\nlet VARIABLE_END = '}}';\nlet COMMENT_START = '{#';\nlet COMMENT_END = '#}';\n\nlet TOKEN_STRING = 'string';\nlet TOKEN_WHITESPACE = 'whitespace';\nlet TOKEN_DATA = 'data';\nlet TOKEN_BLOCK_START = 'block-start';\nlet TOKEN_BLOCK_END = 'block-end';\nlet TOKEN_VARIABLE_START = 'variable-start';\nlet TOKEN_VARIABLE_END = 'variable-end';\nlet TOKEN_COMMENT = 'comment';\nlet TOKEN_LEFT_PAREN = 'left-paren';\nlet TOKEN_RIGHT_PAREN = 'right-paren';\nlet TOKEN_LEFT_BRACKET = 'left-bracket';\nlet TOKEN_RIGHT_BRACKET = 'right-bracket';\nlet TOKEN_LEFT_CURLY = 'left-curly';\nlet TOKEN_RIGHT_CURLY = 'right-curly';\nlet TOKEN_OPERATOR = 'operator';\nlet TOKEN_COMMA = 'comma';\nlet TOKEN_COLON = 'colon';\nlet TOKEN_TILDE = 'tilde';\nlet TOKEN_PIPE = 'pipe';\nlet TOKEN_INT = 'int';\nlet TOKEN_FLOAT = 'float';\nlet TOKEN_BOOLEAN = 'boolean';\nlet TOKEN_NONE = 'none';\nlet TOKEN_SYMBOL = 'symbol';\nlet TOKEN_SPECIAL = 'special';\nlet TOKEN_REGEX = 'regex';\n\nfunction token(type, value, lineno, colno) {\n return {\n type: type,\n value: value,\n lineno: lineno,\n colno: colno\n };\n}\n\nclass Tokenizer {\n constructor(str, opts) {\n this.str = str;\n this.index = 0;\n this.len = str.length;\n this.lineno = 0;\n this.colno = 0;\n\n this.in_code = false;\n\n opts = opts || {};\n\n let tags = opts.tags || {};\n this.tags = {\n BLOCK_START: tags.blockStart || BLOCK_START,\n BLOCK_END: tags.blockEnd || BLOCK_END,\n VARIABLE_START: tags.variableStart || VARIABLE_START,\n VARIABLE_END: tags.variableEnd || VARIABLE_END,\n COMMENT_START: tags.commentStart || COMMENT_START,\n COMMENT_END: tags.commentEnd || COMMENT_END\n };\n\n this.trimBlocks = !!opts.trimBlocks;\n this.lstripBlocks = !!opts.lstripBlocks;\n }\n\n nextToken() {\n let lineno = this.lineno;\n let colno = this.colno;\n let tok;\n\n if (this.in_code) {\n // Otherwise, if we are in a block parse it as code\n let cur = this.current();\n\n if (this.isFinished()) {\n // We have nothing else to parse\n return null;\n } else if (cur === '\"' || cur === '\\'') {\n // We've hit a string\n return token(TOKEN_STRING, this._parseString(cur), lineno, colno);\n } else if ((tok = this._extract(whitespaceChars))) {\n // We hit some whitespace\n return token(TOKEN_WHITESPACE, tok, lineno, colno);\n } else if ((tok = this._extractString(this.tags.BLOCK_END)) ||\n (tok = this._extractString('-' + this.tags.BLOCK_END))) {\n // Special check for the block end tag\n //\n // It is a requirement that start and end tags are composed of\n // delimiter characters (%{}[] etc), and our code always\n // breaks on delimiters so we can assume the token parsing\n // doesn't consume these elsewhere\n this.in_code = false;\n if (this.trimBlocks) {\n cur = this.current();\n if (cur === '\\n') {\n // Skip newline\n this.forward();\n } else if (cur === '\\r') {\n // Skip CRLF newline\n this.forward();\n cur = this.current();\n if (cur === '\\n') {\n this.forward();\n } else {\n // Was not a CRLF, so go back\n this.back();\n }\n }\n }\n return token(TOKEN_BLOCK_END, tok, lineno, colno);\n } else if ((tok = this._extractString(this.tags.VARIABLE_END)) ||\n (tok = this._extractString('-' + this.tags.VARIABLE_END))) {\n // Special check for variable end tag (see above)\n this.in_code = false;\n return token(TOKEN_VARIABLE_END, tok, lineno, colno);\n } else if (cur === 'r' && this.str.charAt(this.index + 1) === '/') {\n // Skip past 'r/'.\n this.forwardN(2);\n\n // Extract until the end of the regex -- / ends it, \\/ does not.\n let regexBody = '';\n while (!this.isFinished()) {\n if (this.current() === '/' && this.previous() !== '\\\\') {\n this.forward();\n break;\n } else {\n regexBody += this.current();\n this.forward();\n }\n }\n\n // Check for flags.\n // The possible flags are according to https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp)\n let POSSIBLE_FLAGS = ['g', 'i', 'm', 'y'];\n let regexFlags = '';\n while (!this.isFinished()) {\n let isCurrentAFlag = POSSIBLE_FLAGS.indexOf(this.current()) !== -1;\n if (isCurrentAFlag) {\n regexFlags += this.current();\n this.forward();\n } else {\n break;\n }\n }\n\n return token(TOKEN_REGEX, {\n body: regexBody,\n flags: regexFlags\n }, lineno, colno);\n } else if (delimChars.indexOf(cur) !== -1) {\n // We've hit a delimiter (a special char like a bracket)\n this.forward();\n let complexOps = ['==', '===', '!=', '!==', '<=', '>=', '//', '**'];\n let curComplex = cur + this.current();\n let type;\n\n if (lib.indexOf(complexOps, curComplex) !== -1) {\n this.forward();\n cur = curComplex;\n\n // See if this is a strict equality/inequality comparator\n if (lib.indexOf(complexOps, curComplex + this.current()) !== -1) {\n cur = curComplex + this.current();\n this.forward();\n }\n }\n\n switch (cur) {\n case '(':\n type = TOKEN_LEFT_PAREN;\n break;\n case ')':\n type = TOKEN_RIGHT_PAREN;\n break;\n case '[':\n type = TOKEN_LEFT_BRACKET;\n break;\n case ']':\n type = TOKEN_RIGHT_BRACKET;\n break;\n case '{':\n type = TOKEN_LEFT_CURLY;\n break;\n case '}':\n type = TOKEN_RIGHT_CURLY;\n break;\n case ',':\n type = TOKEN_COMMA;\n break;\n case ':':\n type = TOKEN_COLON;\n break;\n case '~':\n type = TOKEN_TILDE;\n break;\n case '|':\n type = TOKEN_PIPE;\n break;\n default:\n type = TOKEN_OPERATOR;\n }\n\n return token(type, cur, lineno, colno);\n } else {\n // We are not at whitespace or a delimiter, so extract the\n // text and parse it\n tok = this._extractUntil(whitespaceChars + delimChars);\n\n if (tok.match(/^[-+]?[0-9]+$/)) {\n if (this.current() === '.') {\n this.forward();\n let dec = this._extract(intChars);\n return token(TOKEN_FLOAT, tok + '.' + dec, lineno, colno);\n } else {\n return token(TOKEN_INT, tok, lineno, colno);\n }\n } else if (tok.match(/^(true|false)$/)) {\n return token(TOKEN_BOOLEAN, tok, lineno, colno);\n } else if (tok === 'none') {\n return token(TOKEN_NONE, tok, lineno, colno);\n /*\n * Added to make the test `null is null` evaluate truthily.\n * Otherwise, Nunjucks will look up null in the context and\n * return `undefined`, which is not what we want. This *may* have\n * consequences is someone is using null in their templates as a\n * variable.\n */\n } else if (tok === 'null') {\n return token(TOKEN_NONE, tok, lineno, colno);\n } else if (tok) {\n return token(TOKEN_SYMBOL, tok, lineno, colno);\n } else {\n throw new Error('Unexpected value while parsing: ' + tok);\n }\n }\n } else {\n // Parse out the template text, breaking on tag\n // delimiters because we need to look for block/variable start\n // tags (don't use the full delimChars for optimization)\n let beginChars = (this.tags.BLOCK_START.charAt(0) +\n this.tags.VARIABLE_START.charAt(0) +\n this.tags.COMMENT_START.charAt(0) +\n this.tags.COMMENT_END.charAt(0));\n\n if (this.isFinished()) {\n return null;\n } else if ((tok = this._extractString(this.tags.BLOCK_START + '-')) ||\n (tok = this._extractString(this.tags.BLOCK_START))) {\n this.in_code = true;\n return token(TOKEN_BLOCK_START, tok, lineno, colno);\n } else if ((tok = this._extractString(this.tags.VARIABLE_START + '-')) ||\n (tok = this._extractString(this.tags.VARIABLE_START))) {\n this.in_code = true;\n return token(TOKEN_VARIABLE_START, tok, lineno, colno);\n } else {\n tok = '';\n let data;\n let inComment = false;\n\n if (this._matches(this.tags.COMMENT_START)) {\n inComment = true;\n tok = this._extractString(this.tags.COMMENT_START);\n }\n\n // Continually consume text, breaking on the tag delimiter\n // characters and checking to see if it's a start tag.\n //\n // We could hit the end of the template in the middle of\n // our looping, so check for the null return value from\n // _extractUntil\n while ((data = this._extractUntil(beginChars)) !== null) {\n tok += data;\n\n if ((this._matches(this.tags.BLOCK_START) ||\n this._matches(this.tags.VARIABLE_START) ||\n this._matches(this.tags.COMMENT_START)) &&\n !inComment) {\n if (this.lstripBlocks &&\n this._matches(this.tags.BLOCK_START) &&\n this.colno > 0 &&\n this.colno <= tok.length) {\n let lastLine = tok.slice(-this.colno);\n if (/^\\s+$/.test(lastLine)) {\n // Remove block leading whitespace from beginning of the string\n tok = tok.slice(0, -this.colno);\n if (!tok.length) {\n // All data removed, collapse to avoid unnecessary nodes\n // by returning next token (block start)\n return this.nextToken();\n }\n }\n }\n // If it is a start tag, stop looping\n break;\n } else if (this._matches(this.tags.COMMENT_END)) {\n if (!inComment) {\n throw new Error('unexpected end of comment');\n }\n tok += this._extractString(this.tags.COMMENT_END);\n break;\n } else {\n // It does not match any tag, so add the character and\n // carry on\n tok += this.current();\n this.forward();\n }\n }\n\n if (data === null && inComment) {\n throw new Error('expected end of comment, got end of file');\n }\n\n return token(inComment ? TOKEN_COMMENT : TOKEN_DATA,\n tok,\n lineno,\n colno);\n }\n }\n }\n\n _parseString(delimiter) {\n this.forward();\n\n let str = '';\n\n while (!this.isFinished() && this.current() !== delimiter) {\n let cur = this.current();\n\n if (cur === '\\\\') {\n this.forward();\n switch (this.current()) {\n case 'n':\n str += '\\n';\n break;\n case 't':\n str += '\\t';\n break;\n case 'r':\n str += '\\r';\n break;\n default:\n str += this.current();\n }\n this.forward();\n } else {\n str += cur;\n this.forward();\n }\n }\n\n this.forward();\n return str;\n }\n\n _matches(str) {\n if (this.index + str.length > this.len) {\n return null;\n }\n\n let m = this.str.slice(this.index, this.index + str.length);\n return m === str;\n }\n\n _extractString(str) {\n if (this._matches(str)) {\n this.forwardN(str.length);\n return str;\n }\n return null;\n }\n\n _extractUntil(charString) {\n // Extract all non-matching chars, with the default matching set\n // to everything\n return this._extractMatching(true, charString || '');\n }\n\n _extract(charString) {\n // Extract all matching chars (no default, so charString must be\n // explicit)\n return this._extractMatching(false, charString);\n }\n\n _extractMatching(breakOnMatch, charString) {\n // Pull out characters until a breaking char is hit.\n // If breakOnMatch is false, a non-matching char stops it.\n // If breakOnMatch is true, a matching char stops it.\n\n if (this.isFinished()) {\n return null;\n }\n\n let first = charString.indexOf(this.current());\n\n // Only proceed if the first character doesn't meet our condition\n if ((breakOnMatch && first === -1) ||\n (!breakOnMatch && first !== -1)) {\n let t = this.current();\n this.forward();\n\n // And pull out all the chars one at a time until we hit a\n // breaking char\n let idx = charString.indexOf(this.current());\n\n while (((breakOnMatch && idx === -1) ||\n (!breakOnMatch && idx !== -1)) && !this.isFinished()) {\n t += this.current();\n this.forward();\n\n idx = charString.indexOf(this.current());\n }\n\n return t;\n }\n\n return '';\n }\n\n _extractRegex(regex) {\n let matches = this.currentStr().match(regex);\n if (!matches) {\n return null;\n }\n\n // Move forward whatever was matched\n this.forwardN(matches[0].length);\n\n return matches;\n }\n\n isFinished() {\n return this.index >= this.len;\n }\n\n forwardN(n) {\n for (let i = 0; i < n; i++) {\n this.forward();\n }\n }\n\n forward() {\n this.index++;\n\n if (this.previous() === '\\n') {\n this.lineno++;\n this.colno = 0;\n } else {\n this.colno++;\n }\n }\n\n backN(n) {\n for (let i = 0; i < n; i++) {\n this.back();\n }\n }\n\n back() {\n this.index--;\n\n if (this.current() === '\\n') {\n this.lineno--;\n\n let idx = this.src.lastIndexOf('\\n', this.index - 1);\n if (idx === -1) {\n this.colno = this.index;\n } else {\n this.colno = this.index - idx;\n }\n } else {\n this.colno--;\n }\n }\n\n // current returns current character\n current() {\n if (!this.isFinished()) {\n return this.str.charAt(this.index);\n }\n return '';\n }\n\n // currentStr returns what's left of the unparsed string\n currentStr() {\n if (!this.isFinished()) {\n return this.str.substr(this.index);\n }\n return '';\n }\n\n previous() {\n return this.str.charAt(this.index - 1);\n }\n}\n\nmodule.exports = {\n lex(src, opts) {\n return new Tokenizer(src, opts);\n },\n\n TOKEN_STRING: TOKEN_STRING,\n TOKEN_WHITESPACE: TOKEN_WHITESPACE,\n TOKEN_DATA: TOKEN_DATA,\n TOKEN_BLOCK_START: TOKEN_BLOCK_START,\n TOKEN_BLOCK_END: TOKEN_BLOCK_END,\n TOKEN_VARIABLE_START: TOKEN_VARIABLE_START,\n TOKEN_VARIABLE_END: TOKEN_VARIABLE_END,\n TOKEN_COMMENT: TOKEN_COMMENT,\n TOKEN_LEFT_PAREN: TOKEN_LEFT_PAREN,\n TOKEN_RIGHT_PAREN: TOKEN_RIGHT_PAREN,\n TOKEN_LEFT_BRACKET: TOKEN_LEFT_BRACKET,\n TOKEN_RIGHT_BRACKET: TOKEN_RIGHT_BRACKET,\n TOKEN_LEFT_CURLY: TOKEN_LEFT_CURLY,\n TOKEN_RIGHT_CURLY: TOKEN_RIGHT_CURLY,\n TOKEN_OPERATOR: TOKEN_OPERATOR,\n TOKEN_COMMA: TOKEN_COMMA,\n TOKEN_COLON: TOKEN_COLON,\n TOKEN_TILDE: TOKEN_TILDE,\n TOKEN_PIPE: TOKEN_PIPE,\n TOKEN_INT: TOKEN_INT,\n TOKEN_FLOAT: TOKEN_FLOAT,\n TOKEN_BOOLEAN: TOKEN_BOOLEAN,\n TOKEN_NONE: TOKEN_NONE,\n TOKEN_SYMBOL: TOKEN_SYMBOL,\n TOKEN_SPECIAL: TOKEN_SPECIAL,\n TOKEN_REGEX: TOKEN_REGEX\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/lexer.js","'use strict';\n\nconst Loader = require('./loader');\nconst {PrecompiledLoader} = require('./precompiled-loader.js');\n\nclass WebLoader extends Loader {\n constructor(baseURL, opts) {\n super();\n this.baseURL = baseURL || '.';\n opts = opts || {};\n\n // By default, the cache is turned off because there's no way\n // to \"watch\" templates over HTTP, so they are re-downloaded\n // and compiled each time. (Remember, PRECOMPILE YOUR\n // TEMPLATES in production!)\n this.useCache = !!opts.useCache;\n\n // We default `async` to false so that the simple synchronous\n // API can be used when you aren't doing anything async in\n // your templates (which is most of the time). This performs a\n // sync ajax request, but that's ok because it should *only*\n // happen in development. PRECOMPILE YOUR TEMPLATES.\n this.async = !!opts.async;\n }\n\n resolve(from, to) {\n throw new Error('relative templates not support in the browser yet');\n }\n\n getSource(name, cb) {\n var useCache = this.useCache;\n var result;\n this.fetch(this.baseURL + '/' + name, (err, src) => {\n if (err) {\n if (cb) {\n cb(err.content);\n } else if (err.status === 404) {\n result = null;\n } else {\n throw err.content;\n }\n } else {\n result = {\n src: src,\n path: name,\n noCache: !useCache\n };\n this.emit('load', name, result);\n if (cb) {\n cb(null, result);\n }\n }\n });\n\n // if this WebLoader isn't running asynchronously, the\n // fetch above would actually run sync and we'll have a\n // result here\n return result;\n }\n\n fetch(url, cb) {\n // Only in the browser please\n if (typeof window === 'undefined') {\n throw new Error('WebLoader can only by used in a browser');\n }\n\n const ajax = new XMLHttpRequest();\n let loading = true;\n\n ajax.onreadystatechange = () => {\n if (ajax.readyState === 4 && loading) {\n loading = false;\n if (ajax.status === 0 || ajax.status === 200) {\n cb(null, ajax.responseText);\n } else {\n cb({\n status: ajax.status,\n content: ajax.responseText\n });\n }\n }\n };\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + 's=' +\n (new Date().getTime());\n\n ajax.open('GET', url, this.async);\n ajax.send();\n }\n}\n\nmodule.exports = {\n WebLoader: WebLoader,\n PrecompiledLoader: PrecompiledLoader\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/web-loaders.js","'use strict';\n\nconst lib = require('./src/lib');\nconst {Environment, Template} = require('./src/environment');\nconst Loader = require('./src/loader');\nconst loaders = require('./src/loaders');\nconst precompile = require('./src/precompile');\nconst compiler = require('./src/compiler');\nconst parser = require('./src/parser');\nconst lexer = require('./src/lexer');\nconst runtime = require('./src/runtime');\nconst nodes = require('./src/nodes');\nconst installJinjaCompat = require('./src/jinja-compat');\n\n// A single instance of an environment, since this is so commonly used\nlet e;\n\nfunction configure(templatesPath, opts) {\n opts = opts || {};\n if (lib.isObject(templatesPath)) {\n opts = templatesPath;\n templatesPath = null;\n }\n\n let TemplateLoader;\n if (loaders.FileSystemLoader) {\n TemplateLoader = new loaders.FileSystemLoader(templatesPath, {\n watch: opts.watch,\n noCache: opts.noCache\n });\n } else if (loaders.WebLoader) {\n TemplateLoader = new loaders.WebLoader(templatesPath, {\n useCache: opts.web && opts.web.useCache,\n async: opts.web && opts.web.async\n });\n }\n\n e = new Environment(TemplateLoader, opts);\n\n if (opts && opts.express) {\n e.express(opts.express);\n }\n\n return e;\n}\n\nmodule.exports = {\n Environment: Environment,\n Template: Template,\n Loader: Loader,\n FileSystemLoader: loaders.FileSystemLoader,\n NodeResolveLoader: loaders.NodeResolveLoader,\n PrecompiledLoader: loaders.PrecompiledLoader,\n WebLoader: loaders.WebLoader,\n compiler: compiler,\n parser: parser,\n lexer: lexer,\n runtime: runtime,\n lib: lib,\n nodes: nodes,\n installJinjaCompat: installJinjaCompat,\n configure: configure,\n reset() {\n e = undefined;\n },\n compile(src, env, path, eagerCompile) {\n if (!e) {\n configure();\n }\n return new Template(src, env, path, eagerCompile);\n },\n render(name, ctx, cb) {\n if (!e) {\n configure();\n }\n\n return e.render(name, ctx, cb);\n },\n renderString(src, ctx, cb) {\n if (!e) {\n configure();\n }\n\n return e.renderString(src, ctx, cb);\n },\n precompile: (precompile) ? precompile.precompile : undefined,\n precompileString: (precompile) ? precompile.precompileString : undefined,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/index.js","\"use strict\";\n\n// rawAsap provides everything we need except exception management.\nvar rawAsap = require(\"./raw\");\n// RawTasks are recycled to reduce GC churn.\nvar freeTasks = [];\n// We queue errors to ensure they are thrown in right order (FIFO).\n// Array-as-queue is good enough here, since we are just dealing with exceptions.\nvar pendingErrors = [];\nvar requestErrorThrow = rawAsap.makeRequestCallFromTimer(throwFirstError);\n\nfunction throwFirstError() {\n if (pendingErrors.length) {\n throw pendingErrors.shift();\n }\n}\n\n/**\n * Calls a task as soon as possible after returning, in its own event, with priority\n * over other events like animation, reflow, and repaint. An error thrown from an\n * event will not interrupt, nor even substantially slow down the processing of\n * other events, but will be rather postponed to a lower priority event.\n * @param {{call}} task A callable object, typically a function that takes no\n * arguments.\n */\nmodule.exports = asap;\nfunction asap(task) {\n var rawTask;\n if (freeTasks.length) {\n rawTask = freeTasks.pop();\n } else {\n rawTask = new RawTask();\n }\n rawTask.task = task;\n rawAsap(rawTask);\n}\n\n// We wrap tasks with recyclable task objects. A task object implements\n// `call`, just like a function.\nfunction RawTask() {\n this.task = null;\n}\n\n// The sole purpose of wrapping the task is to catch the exception and recycle\n// the task object after its single use.\nRawTask.prototype.call = function () {\n try {\n this.task.call();\n } catch (error) {\n if (asap.onerror) {\n // This hook exists purely for testing purposes.\n // Its name will be periodically randomized to break any code that\n // depends on its existence.\n asap.onerror(error);\n } else {\n // In a web browser, exceptions are not fatal. However, to avoid\n // slowing down the queue of pending tasks, we rethrow the error in a\n // lower priority turn.\n pendingErrors.push(error);\n requestErrorThrow();\n }\n } finally {\n this.task = null;\n freeTasks[freeTasks.length] = this;\n }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/asap/browser-asap.js\n// module id = 12\n// module chunks = 0","\"use strict\";\n\n// Use the fastest means possible to execute a task in its own turn, with\n// priority over other events including IO, animation, reflow, and redraw\n// events in browsers.\n//\n// An exception thrown by a task will permanently interrupt the processing of\n// subsequent tasks. The higher level `asap` function ensures that if an\n// exception is thrown by a task, that the task queue will continue flushing as\n// soon as possible, but if you use `rawAsap` directly, you are responsible to\n// either ensure that no exceptions are thrown from your task, or to manually\n// call `rawAsap.requestFlush` if an exception is thrown.\nmodule.exports = rawAsap;\nfunction rawAsap(task) {\n if (!queue.length) {\n requestFlush();\n flushing = true;\n }\n // Equivalent to push, but avoids a function call.\n queue[queue.length] = task;\n}\n\nvar queue = [];\n// Once a flush has been requested, no further calls to `requestFlush` are\n// necessary until the next `flush` completes.\nvar flushing = false;\n// `requestFlush` is an implementation-specific method that attempts to kick\n// off a `flush` event as quickly as possible. `flush` will attempt to exhaust\n// the event queue before yielding to the browser's own event loop.\nvar requestFlush;\n// The position of the next task to execute in the task queue. This is\n// preserved between calls to `flush` so that it can be resumed if\n// a task throws an exception.\nvar index = 0;\n// If a task schedules additional tasks recursively, the task queue can grow\n// unbounded. To prevent memory exhaustion, the task queue will periodically\n// truncate already-completed tasks.\nvar capacity = 1024;\n\n// The flush function processes all tasks that have been scheduled with\n// `rawAsap` unless and until one of those tasks throws an exception.\n// If a task throws an exception, `flush` ensures that its state will remain\n// consistent and will resume where it left off when called again.\n// However, `flush` does not make any arrangements to be called again if an\n// exception is thrown.\nfunction flush() {\n while (index < queue.length) {\n var currentIndex = index;\n // Advance the index before calling the task. This ensures that we will\n // begin flushing on the next task the task throws an error.\n index = index + 1;\n queue[currentIndex].call();\n // Prevent leaking memory for long chains of recursive calls to `asap`.\n // If we call `asap` within tasks scheduled by `asap`, the queue will\n // grow, but to avoid an O(n) walk for every task we execute, we don't\n // shift tasks off the queue after they have been executed.\n // Instead, we periodically shift 1024 tasks off the queue.\n if (index > capacity) {\n // Manually shift all values starting at the index back to the\n // beginning of the queue.\n for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {\n queue[scan] = queue[scan + index];\n }\n queue.length -= index;\n index = 0;\n }\n }\n queue.length = 0;\n index = 0;\n flushing = false;\n}\n\n// `requestFlush` is implemented using a strategy based on data collected from\n// every available SauceLabs Selenium web driver worker at time of writing.\n// https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593\n\n// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that\n// have WebKitMutationObserver but not un-prefixed MutationObserver.\n// Must use `global` or `self` instead of `window` to work in both frames and web\n// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop.\n\n/* globals self */\nvar scope = typeof global !== \"undefined\" ? global : self;\nvar BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver;\n\n// MutationObservers are desirable because they have high priority and work\n// reliably everywhere they are implemented.\n// They are implemented in all modern browsers.\n//\n// - Android 4-4.3\n// - Chrome 26-34\n// - Firefox 14-29\n// - Internet Explorer 11\n// - iPad Safari 6-7.1\n// - iPhone Safari 7-7.1\n// - Safari 6-7\nif (typeof BrowserMutationObserver === \"function\") {\n requestFlush = makeRequestCallFromMutationObserver(flush);\n\n// MessageChannels are desirable because they give direct access to the HTML\n// task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera\n// 11-12, and in web workers in many engines.\n// Although message channels yield to any queued rendering and IO tasks, they\n// would be better than imposing the 4ms delay of timers.\n// However, they do not work reliably in Internet Explorer or Safari.\n\n// Internet Explorer 10 is the only browser that has setImmediate but does\n// not have MutationObservers.\n// Although setImmediate yields to the browser's renderer, it would be\n// preferrable to falling back to setTimeout since it does not have\n// the minimum 4ms penalty.\n// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and\n// Desktop to a lesser extent) that renders both setImmediate and\n// MessageChannel useless for the purposes of ASAP.\n// https://github.com/kriskowal/q/issues/396\n\n// Timers are implemented universally.\n// We fall back to timers in workers in most engines, and in foreground\n// contexts in the following browsers.\n// However, note that even this simple case requires nuances to operate in a\n// broad spectrum of browsers.\n//\n// - Firefox 3-13\n// - Internet Explorer 6-9\n// - iPad Safari 4.3\n// - Lynx 2.8.7\n} else {\n requestFlush = makeRequestCallFromTimer(flush);\n}\n\n// `requestFlush` requests that the high priority event queue be flushed as\n// soon as possible.\n// This is useful to prevent an error thrown in a task from stalling the event\n// queue if the exception handled by Node.js’s\n// `process.on(\"uncaughtException\")` or by a domain.\nrawAsap.requestFlush = requestFlush;\n\n// To request a high priority event, we induce a mutation observer by toggling\n// the text of a text node between \"1\" and \"-1\".\nfunction makeRequestCallFromMutationObserver(callback) {\n var toggle = 1;\n var observer = new BrowserMutationObserver(callback);\n var node = document.createTextNode(\"\");\n observer.observe(node, {characterData: true});\n return function requestCall() {\n toggle = -toggle;\n node.data = toggle;\n };\n}\n\n// The message channel technique was discovered by Malte Ubl and was the\n// original foundation for this library.\n// http://www.nonblocking.io/2011/06/windownexttick.html\n\n// Safari 6.0.5 (at least) intermittently fails to create message ports on a\n// page's first load. Thankfully, this version of Safari supports\n// MutationObservers, so we don't need to fall back in that case.\n\n// function makeRequestCallFromMessageChannel(callback) {\n// var channel = new MessageChannel();\n// channel.port1.onmessage = callback;\n// return function requestCall() {\n// channel.port2.postMessage(0);\n// };\n// }\n\n// For reasons explained above, we are also unable to use `setImmediate`\n// under any circumstances.\n// Even if we were, there is another bug in Internet Explorer 10.\n// It is not sufficient to assign `setImmediate` to `requestFlush` because\n// `setImmediate` must be called *by name* and therefore must be wrapped in a\n// closure.\n// Never forget.\n\n// function makeRequestCallFromSetImmediate(callback) {\n// return function requestCall() {\n// setImmediate(callback);\n// };\n// }\n\n// Safari 6.0 has a problem where timers will get lost while the user is\n// scrolling. This problem does not impact ASAP because Safari 6.0 supports\n// mutation observers, so that implementation is used instead.\n// However, if we ever elect to use timers in Safari, the prevalent work-around\n// is to add a scroll event listener that calls for a flush.\n\n// `setTimeout` does not call the passed callback if the delay is less than\n// approximately 7 in web workers in Firefox 8 through 18, and sometimes not\n// even then.\n\nfunction makeRequestCallFromTimer(callback) {\n return function requestCall() {\n // We dispatch a timeout with a specified delay of 0 for engines that\n // can reliably accommodate that request. This will usually be snapped\n // to a 4 milisecond delay, but once we're flushing, there's no delay\n // between events.\n var timeoutHandle = setTimeout(handleTimer, 0);\n // However, since this timer gets frequently dropped in Firefox\n // workers, we enlist an interval handle that will try to fire\n // an event 20 times per second until it succeeds.\n var intervalHandle = setInterval(handleTimer, 50);\n\n function handleTimer() {\n // Whichever timer succeeds will cancel both timers and\n // execute the callback.\n clearTimeout(timeoutHandle);\n clearInterval(intervalHandle);\n callback();\n }\n };\n}\n\n// This is for `asap.js` only.\n// Its name will be periodically randomized to break any code that depends on\n// its existence.\nrawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer;\n\n// ASAP was originally a nextTick shim included in Q. This was factored out\n// into this ASAP package. It was later adapted to RSVP which made further\n// amendments. These decisions, particularly to marginalize MessageChannel and\n// to capture the MutationObserver implementation in a closure, were integrated\n// back into ASAP proper.\n// https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/asap/browser-raw.js\n// module id = 13\n// module chunks = 0","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 14\n// module chunks = 0","// MIT license (by Elan Shanker).\n(function(globals) {\n 'use strict';\n\n var executeSync = function(){\n var args = Array.prototype.slice.call(arguments);\n if (typeof args[0] === 'function'){\n args[0].apply(null, args.splice(1));\n }\n };\n\n var executeAsync = function(fn){\n if (typeof setImmediate === 'function') {\n setImmediate(fn);\n } else if (typeof process !== 'undefined' && process.nextTick) {\n process.nextTick(fn);\n } else {\n setTimeout(fn, 0);\n }\n };\n\n var makeIterator = function (tasks) {\n var makeCallback = function (index) {\n var fn = function () {\n if (tasks.length) {\n tasks[index].apply(null, arguments);\n }\n return fn.next();\n };\n fn.next = function () {\n return (index < tasks.length - 1) ? makeCallback(index + 1): null;\n };\n return fn;\n };\n return makeCallback(0);\n };\n \n var _isArray = Array.isArray || function(maybeArray){\n return Object.prototype.toString.call(maybeArray) === '[object Array]';\n };\n\n var waterfall = function (tasks, callback, forceAsync) {\n var nextTick = forceAsync ? executeAsync : executeSync;\n callback = callback || function () {};\n if (!_isArray(tasks)) {\n var err = new Error('First argument to waterfall must be an array of functions');\n return callback(err);\n }\n if (!tasks.length) {\n return callback();\n }\n var wrapIterator = function (iterator) {\n return function (err) {\n if (err) {\n callback.apply(null, arguments);\n callback = function () {};\n } else {\n var args = Array.prototype.slice.call(arguments, 1);\n var next = iterator.next();\n if (next) {\n args.push(wrapIterator(next));\n } else {\n args.push(callback);\n }\n nextTick(function () {\n iterator.apply(null, args);\n });\n }\n };\n };\n wrapIterator(makeIterator(tasks))();\n };\n\n if (typeof define !== 'undefined' && define.amd) {\n define([], function () {\n return waterfall;\n }); // RequireJS\n } else if (typeof module !== 'undefined' && module.exports) {\n module.exports = waterfall; // CommonJS\n } else {\n globals.waterfall = waterfall; // <script>\n }\n})(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/a-sync-waterfall/index.js\n// module id = 15\n// module chunks = 0","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/node_modules/events/events.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nvar nodes = require('./nodes');\nvar lib = require('./lib');\n\nvar sym = 0;\nfunction gensym() {\n return 'hole_' + sym++;\n}\n\n// copy-on-write version of map\nfunction mapCOW(arr, func) {\n var res = null;\n for (let i = 0; i < arr.length; i++) {\n const item = func(arr[i]);\n\n if (item !== arr[i]) {\n if (!res) {\n res = arr.slice();\n }\n\n res[i] = item;\n }\n }\n\n return res || arr;\n}\n\nfunction walk(ast, func, depthFirst) {\n if (!(ast instanceof nodes.Node)) {\n return ast;\n }\n\n if (!depthFirst) {\n const astT = func(ast);\n\n if (astT && astT !== ast) {\n return astT;\n }\n }\n\n if (ast instanceof nodes.NodeList) {\n const children = mapCOW(ast.children, (node) => walk(node, func, depthFirst));\n\n if (children !== ast.children) {\n ast = new nodes[ast.typename](ast.lineno, ast.colno, children);\n }\n } else if (ast instanceof nodes.CallExtension) {\n const args = walk(ast.args, func, depthFirst);\n const contentArgs = mapCOW(ast.contentArgs, (node) => walk(node, func, depthFirst));\n\n if (args !== ast.args || contentArgs !== ast.contentArgs) {\n ast = new nodes[ast.typename](ast.extName, ast.prop, args, contentArgs);\n }\n } else {\n const props = ast.fields.map((field) => ast[field]);\n const propsT = mapCOW(props, (prop) => walk(prop, func, depthFirst));\n\n if (propsT !== props) {\n ast = new nodes[ast.typename](ast.lineno, ast.colno);\n propsT.forEach((prop, i) => {\n ast[ast.fields[i]] = prop;\n });\n }\n }\n\n return depthFirst ? (func(ast) || ast) : ast;\n}\n\nfunction depthWalk(ast, func) {\n return walk(ast, func, true);\n}\n\nfunction _liftFilters(node, asyncFilters, prop) {\n var children = [];\n\n var walked = depthWalk(prop ? node[prop] : node, (descNode) => {\n let symbol;\n if (descNode instanceof nodes.Block) {\n return descNode;\n } else if ((descNode instanceof nodes.Filter &&\n lib.indexOf(asyncFilters, descNode.name.value) !== -1) ||\n descNode instanceof nodes.CallExtensionAsync) {\n symbol = new nodes.Symbol(descNode.lineno,\n descNode.colno,\n gensym());\n\n children.push(new nodes.FilterAsync(descNode.lineno,\n descNode.colno,\n descNode.name,\n descNode.args,\n symbol));\n }\n return symbol;\n });\n\n if (prop) {\n node[prop] = walked;\n } else {\n node = walked;\n }\n\n if (children.length) {\n children.push(node);\n\n return new nodes.NodeList(\n node.lineno,\n node.colno,\n children\n );\n } else {\n return node;\n }\n}\n\nfunction liftFilters(ast, asyncFilters) {\n return depthWalk(ast, (node) => {\n if (node instanceof nodes.Output) {\n return _liftFilters(node, asyncFilters);\n } else if (node instanceof nodes.Set) {\n return _liftFilters(node, asyncFilters, 'value');\n } else if (node instanceof nodes.For) {\n return _liftFilters(node, asyncFilters, 'arr');\n } else if (node instanceof nodes.If) {\n return _liftFilters(node, asyncFilters, 'cond');\n } else if (node instanceof nodes.CallExtension) {\n return _liftFilters(node, asyncFilters, 'args');\n } else {\n return undefined;\n }\n });\n}\n\nfunction liftSuper(ast) {\n return walk(ast, (blockNode) => {\n if (!(blockNode instanceof nodes.Block)) {\n return;\n }\n\n let hasSuper = false;\n const symbol = gensym();\n\n blockNode.body = walk(blockNode.body, (node) => { // eslint-disable-line consistent-return\n if (node instanceof nodes.FunCall && node.name.value === 'super') {\n hasSuper = true;\n return new nodes.Symbol(node.lineno, node.colno, symbol);\n }\n });\n\n if (hasSuper) {\n blockNode.body.children.unshift(new nodes.Super(\n 0, 0, blockNode.name, new nodes.Symbol(0, 0, symbol)\n ));\n }\n });\n}\n\nfunction convertStatements(ast) {\n return depthWalk(ast, (node) => {\n if (!(node instanceof nodes.If) && !(node instanceof nodes.For)) {\n return undefined;\n }\n\n let async = false;\n walk(node, (child) => {\n if (child instanceof nodes.FilterAsync ||\n child instanceof nodes.IfAsync ||\n child instanceof nodes.AsyncEach ||\n child instanceof nodes.AsyncAll ||\n child instanceof nodes.CallExtensionAsync) {\n async = true;\n // Stop iterating by returning the node\n return child;\n }\n return undefined;\n });\n\n if (async) {\n if (node instanceof nodes.If) {\n return new nodes.IfAsync(\n node.lineno,\n node.colno,\n node.cond,\n node.body,\n node.else_\n );\n } else if (node instanceof nodes.For && !(node instanceof nodes.AsyncAll)) {\n return new nodes.AsyncEach(\n node.lineno,\n node.colno,\n node.arr,\n node.name,\n node.body,\n node.else_\n );\n }\n }\n return undefined;\n });\n}\n\nfunction cps(ast, asyncFilters) {\n return convertStatements(liftSuper(liftFilters(ast, asyncFilters)));\n}\n\nfunction transform(ast, asyncFilters) {\n return cps(ast, asyncFilters || []);\n}\n\n// var parser = require('./parser');\n// var src = 'hello {% foo %}{% endfoo %} end';\n// var ast = transform(parser.parse(src, [new FooExtension()]), ['bar']);\n// nodes.printNodes(ast);\n\nmodule.exports = {\n transform: transform\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/transformer.js","'use strict';\n\nvar lib = require('./lib');\nvar r = require('./runtime');\n\nvar exports = module.exports = {};\n\nfunction normalize(value, defaultValue) {\n if (value === null || value === undefined || value === false) {\n return defaultValue;\n }\n return value;\n}\n\nexports.abs = Math.abs;\n\nfunction isNaN(num) {\n return num !== num; // eslint-disable-line no-self-compare\n}\n\nfunction batch(arr, linecount, fillWith) {\n var i;\n var res = [];\n var tmp = [];\n\n for (i = 0; i < arr.length; i++) {\n if (i % linecount === 0 && tmp.length) {\n res.push(tmp);\n tmp = [];\n }\n\n tmp.push(arr[i]);\n }\n\n if (tmp.length) {\n if (fillWith) {\n for (i = tmp.length; i < linecount; i++) {\n tmp.push(fillWith);\n }\n }\n\n res.push(tmp);\n }\n\n return res;\n}\n\nexports.batch = batch;\n\nfunction capitalize(str) {\n str = normalize(str, '');\n const ret = str.toLowerCase();\n return r.copySafeness(str, ret.charAt(0).toUpperCase() + ret.slice(1));\n}\n\nexports.capitalize = capitalize;\n\nfunction center(str, width) {\n str = normalize(str, '');\n width = width || 80;\n\n if (str.length >= width) {\n return str;\n }\n\n const spaces = width - str.length;\n const pre = lib.repeat(' ', (spaces / 2) - (spaces % 2));\n const post = lib.repeat(' ', spaces / 2);\n return r.copySafeness(str, pre + str + post);\n}\n\nexports.center = center;\n\nfunction default_(val, def, bool) {\n if (bool) {\n return val || def;\n } else {\n return (val !== undefined) ? val : def;\n }\n}\n\n// TODO: it is confusing to export something called 'default'\nexports['default'] = default_; // eslint-disable-line dot-notation\n\nfunction dictsort(val, caseSensitive, by) {\n if (!lib.isObject(val)) {\n throw new lib.TemplateError('dictsort filter: val must be an object');\n }\n\n let array = [];\n // deliberately include properties from the object's prototype\n for (let k in val) { // eslint-disable-line guard-for-in, no-restricted-syntax\n array.push([k, val[k]]);\n }\n\n let si;\n if (by === undefined || by === 'key') {\n si = 0;\n } else if (by === 'value') {\n si = 1;\n } else {\n throw new lib.TemplateError(\n 'dictsort filter: You can only sort by either key or value');\n }\n\n array.sort((t1, t2) => {\n var a = t1[si];\n var b = t2[si];\n\n if (!caseSensitive) {\n if (lib.isString(a)) {\n a = a.toUpperCase();\n }\n if (lib.isString(b)) {\n b = b.toUpperCase();\n }\n }\n\n return a > b ? 1 : (a === b ? 0 : -1); // eslint-disable-line no-nested-ternary\n });\n\n return array;\n}\n\nexports.dictsort = dictsort;\n\nfunction dump(obj, spaces) {\n return JSON.stringify(obj, null, spaces);\n}\n\nexports.dump = dump;\n\nfunction escape(str) {\n if (str instanceof r.SafeString) {\n return str;\n }\n str = (str === null || str === undefined) ? '' : str;\n return r.markSafe(lib.escape(str.toString()));\n}\n\nexports.escape = escape;\n\nfunction safe(str) {\n if (str instanceof r.SafeString) {\n return str;\n }\n str = (str === null || str === undefined) ? '' : str;\n return r.markSafe(str.toString());\n}\n\nexports.safe = safe;\n\nfunction first(arr) {\n return arr[0];\n}\n\nexports.first = first;\n\nfunction forceescape(str) {\n str = (str === null || str === undefined) ? '' : str;\n return r.markSafe(lib.escape(str.toString()));\n}\n\nexports.forceescape = forceescape;\n\nfunction groupby(arr, attr) {\n return lib.groupBy(arr, attr, this.env.opts.throwOnUndefined);\n}\n\nexports.groupby = groupby;\n\nfunction indent(str, width, indentfirst) {\n str = normalize(str, '');\n\n if (str === '') {\n return '';\n }\n\n width = width || 4;\n // let res = '';\n const lines = str.split('\\n');\n const sp = lib.repeat(' ', width);\n\n const res = lines.map((l, i) => {\n return (i === 0 && !indentfirst) ? l : `${sp}${l}`;\n }).join('\\n');\n\n return r.copySafeness(str, res);\n}\n\nexports.indent = indent;\n\nfunction join(arr, del, attr) {\n del = del || '';\n\n if (attr) {\n arr = lib.map(arr, (v) => v[attr]);\n }\n\n return arr.join(del);\n}\n\nexports.join = join;\n\nfunction last(arr) {\n return arr[arr.length - 1];\n}\n\nexports.last = last;\n\nfunction lengthFilter(val) {\n var value = normalize(val, '');\n\n if (value !== undefined) {\n if (\n (typeof Map === 'function' && value instanceof Map) ||\n (typeof Set === 'function' && value instanceof Set)\n ) {\n // ECMAScript 2015 Maps and Sets\n return value.size;\n }\n if (lib.isObject(value) && !(value instanceof r.SafeString)) {\n // Objects (besides SafeStrings), non-primative Arrays\n return lib.keys(value).length;\n }\n return value.length;\n }\n return 0;\n}\n\nexports.length = lengthFilter;\n\nfunction list(val) {\n if (lib.isString(val)) {\n return val.split('');\n } else if (lib.isObject(val)) {\n return lib._entries(val || {}).map(([key, value]) => ({key, value}));\n } else if (lib.isArray(val)) {\n return val;\n } else {\n throw new lib.TemplateError('list filter: type not iterable');\n }\n}\n\nexports.list = list;\n\nfunction lower(str) {\n str = normalize(str, '');\n return str.toLowerCase();\n}\n\nexports.lower = lower;\n\nfunction nl2br(str) {\n if (str === null || str === undefined) {\n return '';\n }\n return r.copySafeness(str, str.replace(/\\r\\n|\\n/g, '<br />\\n'));\n}\n\nexports.nl2br = nl2br;\n\nfunction random(arr) {\n return arr[Math.floor(Math.random() * arr.length)];\n}\n\nexports.random = random;\n\n/**\n * Construct select or reject filter\n *\n * @param {boolean} expectedTestResult\n * @returns {function(array, string, *): array}\n */\nfunction getSelectOrReject(expectedTestResult) {\n function filter(arr, testName = 'truthy', secondArg) {\n const context = this;\n const test = context.env.getTest(testName);\n\n return lib.toArray(arr).filter(function examineTestResult(item) {\n return test.call(context, item, secondArg) === expectedTestResult;\n });\n }\n\n return filter;\n}\n\nexports.reject = getSelectOrReject(false);\n\nfunction rejectattr(arr, attr) {\n return arr.filter((item) => !item[attr]);\n}\n\nexports.rejectattr = rejectattr;\n\nexports.select = getSelectOrReject(true);\n\nfunction selectattr(arr, attr) {\n return arr.filter((item) => !!item[attr]);\n}\n\nexports.selectattr = selectattr;\n\nfunction replace(str, old, new_, maxCount) {\n var originalStr = str;\n\n if (old instanceof RegExp) {\n return str.replace(old, new_);\n }\n\n if (typeof maxCount === 'undefined') {\n maxCount = -1;\n }\n\n let res = ''; // Output\n\n // Cast Numbers in the search term to string\n if (typeof old === 'number') {\n old = '' + old;\n } else if (typeof old !== 'string') {\n // If it is something other than number or string,\n // return the original string\n return str;\n }\n\n // Cast numbers in the replacement to string\n if (typeof str === 'number') {\n str = '' + str;\n }\n\n // If by now, we don't have a string, throw it back\n if (typeof str !== 'string' && !(str instanceof r.SafeString)) {\n return str;\n }\n\n // ShortCircuits\n if (old === '') {\n // Mimic the python behaviour: empty string is replaced\n // by replacement e.g. \"abc\"|replace(\"\", \".\") -> .a.b.c.\n res = new_ + str.split('').join(new_) + new_;\n return r.copySafeness(str, res);\n }\n\n let nextIndex = str.indexOf(old);\n // if # of replacements to perform is 0, or the string to does\n // not contain the old value, return the string\n if (maxCount === 0 || nextIndex === -1) {\n return str;\n }\n\n let pos = 0;\n let count = 0; // # of replacements made\n\n while (nextIndex > -1 && (maxCount === -1 || count < maxCount)) {\n // Grab the next chunk of src string and add it with the\n // replacement, to the result\n res += str.substring(pos, nextIndex) + new_;\n // Increment our pointer in the src string\n pos = nextIndex + old.length;\n count++;\n // See if there are any more replacements to be made\n nextIndex = str.indexOf(old, pos);\n }\n\n // We've either reached the end, or done the max # of\n // replacements, tack on any remaining string\n if (pos < str.length) {\n res += str.substring(pos);\n }\n\n return r.copySafeness(originalStr, res);\n}\n\nexports.replace = replace;\n\nfunction reverse(val) {\n var arr;\n if (lib.isString(val)) {\n arr = list(val);\n } else {\n // Copy it\n arr = lib.map(val, v => v);\n }\n\n arr.reverse();\n\n if (lib.isString(val)) {\n return r.copySafeness(val, arr.join(''));\n }\n return arr;\n}\n\nexports.reverse = reverse;\n\nfunction round(val, precision, method) {\n precision = precision || 0;\n const factor = Math.pow(10, precision);\n let rounder;\n\n if (method === 'ceil') {\n rounder = Math.ceil;\n } else if (method === 'floor') {\n rounder = Math.floor;\n } else {\n rounder = Math.round;\n }\n\n return rounder(val * factor) / factor;\n}\n\nexports.round = round;\n\nfunction slice(arr, slices, fillWith) {\n const sliceLength = Math.floor(arr.length / slices);\n const extra = arr.length % slices;\n const res = [];\n let offset = 0;\n\n for (let i = 0; i < slices; i++) {\n const start = offset + (i * sliceLength);\n if (i < extra) {\n offset++;\n }\n const end = offset + ((i + 1) * sliceLength);\n\n const currSlice = arr.slice(start, end);\n if (fillWith && i >= extra) {\n currSlice.push(fillWith);\n }\n res.push(currSlice);\n }\n\n return res;\n}\n\nexports.slice = slice;\n\nfunction sum(arr, attr, start = 0) {\n if (attr) {\n arr = lib.map(arr, (v) => v[attr]);\n }\n\n return start + arr.reduce((a, b) => a + b, 0);\n}\n\nexports.sum = sum;\n\nexports.sort = r.makeMacro(\n ['value', 'reverse', 'case_sensitive', 'attribute'], [],\n function sortFilter(arr, reversed, caseSens, attr) {\n // Copy it\n let array = lib.map(arr, v => v);\n let getAttribute = lib.getAttrGetter(attr);\n\n array.sort((a, b) => {\n let x = (attr) ? getAttribute(a) : a;\n let y = (attr) ? getAttribute(b) : b;\n\n if (\n this.env.opts.throwOnUndefined &&\n attr && (x === undefined || y === undefined)\n ) {\n throw new TypeError(`sort: attribute \"${attr}\" resolved to undefined`);\n }\n\n if (!caseSens && lib.isString(x) && lib.isString(y)) {\n x = x.toLowerCase();\n y = y.toLowerCase();\n }\n\n if (x < y) {\n return reversed ? 1 : -1;\n } else if (x > y) {\n return reversed ? -1 : 1;\n } else {\n return 0;\n }\n });\n\n return array;\n });\n\nfunction string(obj) {\n return r.copySafeness(obj, obj);\n}\n\nexports.string = string;\n\nfunction striptags(input, preserveLinebreaks) {\n input = normalize(input, '');\n let tags = /<\\/?([a-z][a-z0-9]*)\\b[^>]*>|<!--[\\s\\S]*?-->/gi;\n let trimmedInput = trim(input.replace(tags, ''));\n let res = '';\n if (preserveLinebreaks) {\n res = trimmedInput\n .replace(/^ +| +$/gm, '') // remove leading and trailing spaces\n .replace(/ +/g, ' ') // squash adjacent spaces\n .replace(/(\\r\\n)/g, '\\n') // normalize linebreaks (CRLF -> LF)\n .replace(/\\n\\n\\n+/g, '\\n\\n'); // squash abnormal adjacent linebreaks\n } else {\n res = trimmedInput.replace(/\\s+/gi, ' ');\n }\n return r.copySafeness(input, res);\n}\n\nexports.striptags = striptags;\n\nfunction title(str) {\n str = normalize(str, '');\n let words = str.split(' ').map(word => capitalize(word));\n return r.copySafeness(str, words.join(' '));\n}\n\nexports.title = title;\n\nfunction trim(str) {\n return r.copySafeness(str, str.replace(/^\\s*|\\s*$/g, ''));\n}\n\nexports.trim = trim;\n\nfunction truncate(input, length, killwords, end) {\n var orig = input;\n input = normalize(input, '');\n length = length || 255;\n\n if (input.length <= length) {\n return input;\n }\n\n if (killwords) {\n input = input.substring(0, length);\n } else {\n let idx = input.lastIndexOf(' ', length);\n if (idx === -1) {\n idx = length;\n }\n\n input = input.substring(0, idx);\n }\n\n input += (end !== undefined && end !== null) ? end : '...';\n return r.copySafeness(orig, input);\n}\n\nexports.truncate = truncate;\n\nfunction upper(str) {\n str = normalize(str, '');\n return str.toUpperCase();\n}\n\nexports.upper = upper;\n\nfunction urlencode(obj) {\n var enc = encodeURIComponent;\n if (lib.isString(obj)) {\n return enc(obj);\n } else {\n let keyvals = (lib.isArray(obj)) ? obj : lib._entries(obj);\n return keyvals.map(([k, v]) => `${enc(k)}=${enc(v)}`).join('&');\n }\n}\n\nexports.urlencode = urlencode;\n\n// For the jinja regexp, see\n// https://github.com/mitsuhiko/jinja2/blob/f15b814dcba6aa12bc74d1f7d0c881d55f7126be/jinja2/utils.py#L20-L23\nconst puncRe = /^(?:\\(|<|<)?(.*?)(?:\\.|,|\\)|\\n|>)?$/;\n// from http://blog.gerv.net/2011/05/html5_email_address_regexp/\nconst emailRe = /^[\\w.!#$%&'*+\\-\\/=?\\^`{|}~]+@[a-z\\d\\-]+(\\.[a-z\\d\\-]+)+$/i;\nconst httpHttpsRe = /^https?:\\/\\/.*$/;\nconst wwwRe = /^www\\./;\nconst tldRe = /\\.(?:org|net|com)(?:\\:|\\/|$)/;\n\nfunction urlize(str, length, nofollow) {\n if (isNaN(length)) {\n length = Infinity;\n }\n\n const noFollowAttr = (nofollow === true ? ' rel=\"nofollow\"' : '');\n\n const words = str.split(/(\\s+)/).filter((word) => {\n // If the word has no length, bail. This can happen for str with\n // trailing whitespace.\n return word && word.length;\n }).map((word) => {\n var matches = word.match(puncRe);\n var possibleUrl = (matches) ? matches[1] : word;\n var shortUrl = possibleUrl.substr(0, length);\n\n // url that starts with http or https\n if (httpHttpsRe.test(possibleUrl)) {\n return `<a href=\"${possibleUrl}\"${noFollowAttr}>${shortUrl}</a>`;\n }\n\n // url that starts with www.\n if (wwwRe.test(possibleUrl)) {\n return `<a href=\"http://${possibleUrl}\"${noFollowAttr}>${shortUrl}</a>`;\n }\n\n // an email address of the form username@domain.tld\n if (emailRe.test(possibleUrl)) {\n return `<a href=\"mailto:${possibleUrl}\">${possibleUrl}</a>`;\n }\n\n // url that ends in .com, .org or .net that is not an email address\n if (tldRe.test(possibleUrl)) {\n return `<a href=\"http://${possibleUrl}\"${noFollowAttr}>${shortUrl}</a>`;\n }\n\n return word;\n });\n\n return words.join('');\n}\n\nexports.urlize = urlize;\n\nfunction wordcount(str) {\n str = normalize(str, '');\n const words = (str) ? str.match(/\\w+/g) : null;\n return (words) ? words.length : null;\n}\n\nexports.wordcount = wordcount;\n\nfunction float(val, def) {\n var res = parseFloat(val);\n return (isNaN(res)) ? def : res;\n}\n\nexports.float = float;\n\nconst intFilter = r.makeMacro(\n ['value', 'default', 'base'],\n [],\n function doInt(value, defaultValue, base = 10) {\n var res = parseInt(value, base);\n return (isNaN(res)) ? defaultValue : res;\n }\n);\n\nexports.int = intFilter;\n\n// Aliases\nexports.d = exports.default;\nexports.e = exports.escape;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/filters.js","'use strict';\n\nconst Loader = require('./loader');\n\nclass PrecompiledLoader extends Loader {\n constructor(compiledTemplates) {\n super();\n this.precompiled = compiledTemplates || {};\n }\n\n getSource(name) {\n if (this.precompiled[name]) {\n return {\n src: {\n type: 'code',\n obj: this.precompiled[name]\n },\n path: name\n };\n }\n return null;\n }\n}\n\nmodule.exports = {\n PrecompiledLoader: PrecompiledLoader,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/precompiled-loader.js","'use strict';\n\nvar SafeString = require('./runtime').SafeString;\n\n/**\n * Returns `true` if the object is a function, otherwise `false`.\n * @param { any } value\n * @returns { boolean }\n */\nfunction callable(value) {\n return typeof value === 'function';\n}\n\nexports.callable = callable;\n\n/**\n * Returns `true` if the object is strictly not `undefined`.\n * @param { any } value\n * @returns { boolean }\n */\nfunction defined(value) {\n return value !== undefined;\n}\n\nexports.defined = defined;\n\n/**\n * Returns `true` if the operand (one) is divisble by the test's argument\n * (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction divisibleby(one, two) {\n return (one % two) === 0;\n}\n\nexports.divisibleby = divisibleby;\n\n/**\n * Returns true if the string has been escaped (i.e., is a SafeString).\n * @param { any } value\n * @returns { boolean }\n */\nfunction escaped(value) {\n return value instanceof SafeString;\n}\n\nexports.escaped = escaped;\n\n/**\n * Returns `true` if the arguments are strictly equal.\n * @param { any } one\n * @param { any } two\n */\nfunction equalto(one, two) {\n return one === two;\n}\n\nexports.equalto = equalto;\n\n// Aliases\nexports.eq = exports.equalto;\nexports.sameas = exports.equalto;\n\n/**\n * Returns `true` if the value is evenly divisible by 2.\n * @param { number } value\n * @returns { boolean }\n */\nfunction even(value) {\n return value % 2 === 0;\n}\n\nexports.even = even;\n\n/**\n * Returns `true` if the value is falsy - if I recall correctly, '', 0, false,\n * undefined, NaN or null. I don't know if we should stick to the default JS\n * behavior or attempt to replicate what Python believes should be falsy (i.e.,\n * empty arrays, empty dicts, not 0...).\n * @param { any } value\n * @returns { boolean }\n */\nfunction falsy(value) {\n return !value;\n}\n\nexports.falsy = falsy;\n\n/**\n * Returns `true` if the operand (one) is greater or equal to the test's\n * argument (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction ge(one, two) {\n return one >= two;\n}\n\nexports.ge = ge;\n\n/**\n * Returns `true` if the operand (one) is greater than the test's argument\n * (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction greaterthan(one, two) {\n return one > two;\n}\n\nexports.greaterthan = greaterthan;\n\n// alias\nexports.gt = exports.greaterthan;\n\n/**\n * Returns `true` if the operand (one) is less than or equal to the test's\n * argument (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction le(one, two) {\n return one <= two;\n}\n\nexports.le = le;\n\n/**\n * Returns `true` if the operand (one) is less than the test's passed argument\n * (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction lessthan(one, two) {\n return one < two;\n}\n\nexports.lessthan = lessthan;\n\n// alias\nexports.lt = exports.lessthan;\n\n/**\n * Returns `true` if the string is lowercased.\n * @param { string } value\n * @returns { boolean }\n */\nfunction lower(value) {\n return value.toLowerCase() === value;\n}\n\nexports.lower = lower;\n\n/**\n * Returns `true` if the operand (one) is less than or equal to the test's\n * argument (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction ne(one, two) {\n return one !== two;\n}\n\nexports.ne = ne;\n\n/**\n * Returns true if the value is strictly equal to `null`.\n * @param { any }\n * @returns { boolean }\n */\nfunction nullTest(value) {\n return value === null;\n}\n\nexports.null = nullTest;\n\n/**\n * Returns true if value is a number.\n * @param { any }\n * @returns { boolean }\n */\nfunction number(value) {\n return typeof value === 'number';\n}\n\nexports.number = number;\n\n/**\n * Returns `true` if the value is *not* evenly divisible by 2.\n * @param { number } value\n * @returns { boolean }\n */\nfunction odd(value) {\n return value % 2 === 1;\n}\n\nexports.odd = odd;\n\n/**\n * Returns `true` if the value is a string, `false` if not.\n * @param { any } value\n * @returns { boolean }\n */\nfunction string(value) {\n return typeof value === 'string';\n}\n\nexports.string = string;\n\n/**\n * Returns `true` if the value is not in the list of things considered falsy:\n * '', null, undefined, 0, NaN and false.\n * @param { any } value\n * @returns { boolean }\n */\nfunction truthy(value) {\n return !!value;\n}\n\nexports.truthy = truthy;\n\n/**\n * Returns `true` if the value is undefined.\n * @param { any } value\n * @returns { boolean }\n */\nfunction undefinedTest(value) {\n return value === undefined;\n}\n\nexports.undefined = undefinedTest;\n\n/**\n * Returns `true` if the string is uppercased.\n * @param { string } value\n * @returns { boolean }\n */\nfunction upper(value) {\n return value.toUpperCase() === value;\n}\n\nexports.upper = upper;\n\n/**\n * If ES6 features are available, returns `true` if the value implements the\n * `Symbol.iterator` method. If not, it's a string or Array.\n *\n * Could potentially cause issues if a browser exists that has Set and Map but\n * not Symbol.\n *\n * @param { any } value\n * @returns { boolean }\n */\nfunction iterable(value) {\n if (typeof Symbol !== 'undefined') {\n return !!value[Symbol.iterator];\n } else {\n return Array.isArray(value) || typeof value === 'string';\n }\n}\n\nexports.iterable = iterable;\n\n/**\n * If ES6 features are available, returns `true` if the value is an object hash\n * or an ES6 Map. Otherwise just return if it's an object hash.\n * @param { any } value\n * @returns { boolean }\n */\nfunction mapping(value) {\n // only maps and object hashes\n var bool = value !== null\n && value !== undefined\n && typeof value === 'object'\n && !Array.isArray(value);\n if (Set) {\n return bool && !(value instanceof Set);\n } else {\n return bool;\n }\n}\n\nexports.mapping = mapping;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/tests.js","'use strict';\n\nfunction cycler(items) {\n var index = -1;\n\n return {\n current: null,\n reset() {\n index = -1;\n this.current = null;\n },\n\n next() {\n index++;\n if (index >= items.length) {\n index = 0;\n }\n\n this.current = items[index];\n return this.current;\n },\n };\n}\n\nfunction joiner(sep) {\n sep = sep || ',';\n let first = true;\n\n return () => {\n const val = first ? '' : sep;\n first = false;\n return val;\n };\n}\n\n// Making this a function instead so it returns a new object\n// each time it's called. That way, if something like an environment\n// uses it, they will each have their own copy.\nfunction globals() {\n return {\n range(start, stop, step) {\n if (typeof stop === 'undefined') {\n stop = start;\n start = 0;\n step = 1;\n } else if (!step) {\n step = 1;\n }\n\n const arr = [];\n if (step > 0) {\n for (let i = start; i < stop; i += step) {\n arr.push(i);\n }\n } else {\n for (let i = start; i > stop; i += step) { // eslint-disable-line for-direction\n arr.push(i);\n }\n }\n return arr;\n },\n\n cycler() {\n return cycler(Array.prototype.slice.call(arguments));\n },\n\n joiner(sep) {\n return joiner(sep);\n }\n };\n}\n\nmodule.exports = globals;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/globals.js","const path = require('path');\n\nmodule.exports = function express(env, app) {\n function NunjucksView(name, opts) {\n this.name = name;\n this.path = name;\n this.defaultEngine = opts.defaultEngine;\n this.ext = path.extname(name);\n if (!this.ext && !this.defaultEngine) {\n throw new Error('No default engine was specified and no extension was provided.');\n }\n if (!this.ext) {\n this.name += (this.ext = (this.defaultEngine[0] !== '.' ? '.' : '') + this.defaultEngine);\n }\n }\n\n NunjucksView.prototype.render = function render(opts, cb) {\n env.render(this.name, opts, cb);\n };\n\n app.set('view', NunjucksView);\n app.set('nunjucksEnv', env);\n return env;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/express-app.js","'use strict';\n\nconst fs = require('fs');\nconst path = require('path');\nconst {_prettifyError} = require('./lib');\nconst compiler = require('./compiler');\nconst {Environment} = require('./environment');\nconst precompileGlobal = require('./precompile-global');\n\nfunction match(filename, patterns) {\n if (!Array.isArray(patterns)) {\n return false;\n }\n return patterns.some((pattern) => filename.match(pattern));\n}\n\nfunction precompileString(str, opts) {\n opts = opts || {};\n opts.isString = true;\n const env = opts.env || new Environment([]);\n const wrapper = opts.wrapper || precompileGlobal;\n\n if (!opts.name) {\n throw new Error('the \"name\" option is required when compiling a string');\n }\n return wrapper([_precompile(str, opts.name, env)], opts);\n}\n\nfunction precompile(input, opts) {\n // The following options are available:\n //\n // * name: name of the template (auto-generated when compiling a directory)\n // * isString: input is a string, not a file path\n // * asFunction: generate a callable function\n // * force: keep compiling on error\n // * env: the Environment to use (gets extensions and async filters from it)\n // * include: which file/folders to include (folders are auto-included, files are auto-excluded)\n // * exclude: which file/folders to exclude (folders are auto-included, files are auto-excluded)\n // * wrapper: function(templates, opts) {...}\n // Customize the output format to store the compiled template.\n // By default, templates are stored in a global variable used by the runtime.\n // A custom loader will be necessary to load your custom wrapper.\n\n opts = opts || {};\n const env = opts.env || new Environment([]);\n const wrapper = opts.wrapper || precompileGlobal;\n\n if (opts.isString) {\n return precompileString(input, opts);\n }\n\n const pathStats = fs.existsSync(input) && fs.statSync(input);\n const precompiled = [];\n const templates = [];\n\n function addTemplates(dir) {\n fs.readdirSync(dir).forEach((file) => {\n const filepath = path.join(dir, file);\n let subpath = filepath.substr(path.join(input, '/').length);\n const stat = fs.statSync(filepath);\n\n if (stat && stat.isDirectory()) {\n subpath += '/';\n if (!match(subpath, opts.exclude)) {\n addTemplates(filepath);\n }\n } else if (match(subpath, opts.include)) {\n templates.push(filepath);\n }\n });\n }\n\n if (pathStats.isFile()) {\n precompiled.push(_precompile(\n fs.readFileSync(input, 'utf-8'),\n opts.name || input,\n env\n ));\n } else if (pathStats.isDirectory()) {\n addTemplates(input);\n\n for (let i = 0; i < templates.length; i++) {\n const name = templates[i].replace(path.join(input, '/'), '');\n\n try {\n precompiled.push(_precompile(\n fs.readFileSync(templates[i], 'utf-8'),\n name,\n env\n ));\n } catch (e) {\n if (opts.force) {\n // Don't stop generating the output if we're\n // forcing compilation.\n console.error(e); // eslint-disable-line no-console\n } else {\n throw e;\n }\n }\n }\n }\n\n return wrapper(precompiled, opts);\n}\n\nfunction _precompile(str, name, env) {\n env = env || new Environment([]);\n\n const asyncFilters = env.asyncFilters;\n const extensions = env.extensionsList;\n let template;\n\n name = name.replace(/\\\\/g, '/');\n\n try {\n template = compiler.compile(str,\n asyncFilters,\n extensions,\n name,\n env.opts);\n } catch (err) {\n throw _prettifyError(name, false, err);\n }\n\n return {\n name: name,\n template: template\n };\n}\n\nmodule.exports = {\n precompile: precompile,\n precompileString: precompileString\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/precompile.js","'use strict';\n\nfunction precompileGlobal(templates, opts) {\n var out = '';\n opts = opts || {};\n\n for (let i = 0; i < templates.length; i++) {\n const name = JSON.stringify(templates[i].name);\n const template = templates[i].template;\n\n out += '(function() {' +\n '(window.nunjucksPrecompiled = window.nunjucksPrecompiled || {})' +\n '[' + name + '] = (function() {\\n' + template + '\\n})();\\n';\n\n if (opts.asFunction) {\n out += 'return function(ctx, cb) { return nunjucks.render(' + name + ', ctx, cb); }\\n';\n }\n\n out += '})();\\n';\n }\n return out;\n}\n\nmodule.exports = precompileGlobal;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/precompile-global.js","function installCompat() {\n 'use strict';\n\n /* eslint-disable camelcase */\n\n // This must be called like `nunjucks.installCompat` so that `this`\n // references the nunjucks instance\n var runtime = this.runtime;\n var lib = this.lib;\n // Handle slim case where these 'modules' are excluded from the built source\n var Compiler = this.compiler.Compiler;\n var Parser = this.parser.Parser;\n var nodes = this.nodes;\n var lexer = this.lexer;\n\n var orig_contextOrFrameLookup = runtime.contextOrFrameLookup;\n var orig_memberLookup = runtime.memberLookup;\n var orig_Compiler_assertType;\n var orig_Parser_parseAggregate;\n if (Compiler) {\n orig_Compiler_assertType = Compiler.prototype.assertType;\n }\n if (Parser) {\n orig_Parser_parseAggregate = Parser.prototype.parseAggregate;\n }\n\n function uninstall() {\n runtime.contextOrFrameLookup = orig_contextOrFrameLookup;\n runtime.memberLookup = orig_memberLookup;\n if (Compiler) {\n Compiler.prototype.assertType = orig_Compiler_assertType;\n }\n if (Parser) {\n Parser.prototype.parseAggregate = orig_Parser_parseAggregate;\n }\n }\n\n runtime.contextOrFrameLookup = function contextOrFrameLookup(context, frame, key) {\n var val = orig_contextOrFrameLookup.apply(this, arguments);\n if (val !== undefined) {\n return val;\n }\n switch (key) {\n case 'True':\n return true;\n case 'False':\n return false;\n case 'None':\n return null;\n default:\n return undefined;\n }\n };\n\n function getTokensState(tokens) {\n return {\n index: tokens.index,\n lineno: tokens.lineno,\n colno: tokens.colno\n };\n }\n\n if (process.env.BUILD_TYPE !== 'SLIM' && nodes && Compiler && Parser) { // i.e., not slim mode\n const Slice = nodes.Node.extend('Slice', {\n fields: ['start', 'stop', 'step'],\n init(lineno, colno, start, stop, step) {\n start = start || new nodes.Literal(lineno, colno, null);\n stop = stop || new nodes.Literal(lineno, colno, null);\n step = step || new nodes.Literal(lineno, colno, 1);\n this.parent(lineno, colno, start, stop, step);\n }\n });\n\n Compiler.prototype.assertType = function assertType(node) {\n if (node instanceof Slice) {\n return;\n }\n orig_Compiler_assertType.apply(this, arguments);\n };\n Compiler.prototype.compileSlice = function compileSlice(node, frame) {\n this._emit('(');\n this._compileExpression(node.start, frame);\n this._emit('),(');\n this._compileExpression(node.stop, frame);\n this._emit('),(');\n this._compileExpression(node.step, frame);\n this._emit(')');\n };\n\n Parser.prototype.parseAggregate = function parseAggregate() {\n var origState = getTokensState(this.tokens);\n // Set back one accounting for opening bracket/parens\n origState.colno--;\n origState.index--;\n try {\n return orig_Parser_parseAggregate.apply(this);\n } catch (e) {\n const errState = getTokensState(this.tokens);\n const rethrow = () => {\n lib._assign(this.tokens, errState);\n return e;\n };\n\n // Reset to state before original parseAggregate called\n lib._assign(this.tokens, origState);\n this.peeked = false;\n\n const tok = this.peekToken();\n if (tok.type !== lexer.TOKEN_LEFT_BRACKET) {\n throw rethrow();\n } else {\n this.nextToken();\n }\n\n const node = new Slice(tok.lineno, tok.colno);\n\n // If we don't encounter a colon while parsing, this is not a slice,\n // so re-raise the original exception.\n let isSlice = false;\n\n for (let i = 0; i <= node.fields.length; i++) {\n if (this.skip(lexer.TOKEN_RIGHT_BRACKET)) {\n break;\n }\n if (i === node.fields.length) {\n if (isSlice) {\n this.fail('parseSlice: too many slice components', tok.lineno, tok.colno);\n } else {\n break;\n }\n }\n if (this.skip(lexer.TOKEN_COLON)) {\n isSlice = true;\n } else {\n const field = node.fields[i];\n node[field] = this.parseExpression();\n isSlice = this.skip(lexer.TOKEN_COLON) || isSlice;\n }\n }\n if (!isSlice) {\n throw rethrow();\n }\n return new nodes.Array(tok.lineno, tok.colno, [node]);\n }\n };\n }\n\n function sliceLookup(obj, start, stop, step) {\n obj = obj || [];\n if (start === null) {\n start = (step < 0) ? (obj.length - 1) : 0;\n }\n if (stop === null) {\n stop = (step < 0) ? -1 : obj.length;\n } else if (stop < 0) {\n stop += obj.length;\n }\n\n if (start < 0) {\n start += obj.length;\n }\n\n const results = [];\n\n for (let i = start; ; i += step) {\n if (i < 0 || i > obj.length) {\n break;\n }\n if (step > 0 && i >= stop) {\n break;\n }\n if (step < 0 && i <= stop) {\n break;\n }\n results.push(runtime.memberLookup(obj, i));\n }\n return results;\n }\n\n function hasOwnProp(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n }\n\n const ARRAY_MEMBERS = {\n pop(index) {\n if (index === undefined) {\n return this.pop();\n }\n if (index >= this.length || index < 0) {\n throw new Error('KeyError');\n }\n return this.splice(index, 1);\n },\n append(element) {\n return this.push(element);\n },\n remove(element) {\n for (let i = 0; i < this.length; i++) {\n if (this[i] === element) {\n return this.splice(i, 1);\n }\n }\n throw new Error('ValueError');\n },\n count(element) {\n var count = 0;\n for (let i = 0; i < this.length; i++) {\n if (this[i] === element) {\n count++;\n }\n }\n return count;\n },\n index(element) {\n var i;\n if ((i = this.indexOf(element)) === -1) {\n throw new Error('ValueError');\n }\n return i;\n },\n find(element) {\n return this.indexOf(element);\n },\n insert(index, elem) {\n return this.splice(index, 0, elem);\n }\n };\n const OBJECT_MEMBERS = {\n items() {\n return lib._entries(this);\n },\n values() {\n return lib._values(this);\n },\n keys() {\n return lib.keys(this);\n },\n get(key, def) {\n var output = this[key];\n if (output === undefined) {\n output = def;\n }\n return output;\n },\n has_key(key) {\n return hasOwnProp(this, key);\n },\n pop(key, def) {\n var output = this[key];\n if (output === undefined && def !== undefined) {\n output = def;\n } else if (output === undefined) {\n throw new Error('KeyError');\n } else {\n delete this[key];\n }\n return output;\n },\n popitem() {\n const keys = lib.keys(this);\n if (!keys.length) {\n throw new Error('KeyError');\n }\n const k = keys[0];\n const val = this[k];\n delete this[k];\n return [k, val];\n },\n setdefault(key, def = null) {\n if (!(key in this)) {\n this[key] = def;\n }\n return this[key];\n },\n update(kwargs) {\n lib._assign(this, kwargs);\n return null; // Always returns None\n }\n };\n OBJECT_MEMBERS.iteritems = OBJECT_MEMBERS.items;\n OBJECT_MEMBERS.itervalues = OBJECT_MEMBERS.values;\n OBJECT_MEMBERS.iterkeys = OBJECT_MEMBERS.keys;\n\n runtime.memberLookup = function memberLookup(obj, val, autoescape) {\n if (arguments.length === 4) {\n return sliceLookup.apply(this, arguments);\n }\n obj = obj || {};\n\n // If the object is an object, return any of the methods that Python would\n // otherwise provide.\n if (lib.isArray(obj) && hasOwnProp(ARRAY_MEMBERS, val)) {\n return ARRAY_MEMBERS[val].bind(obj);\n }\n if (lib.isObject(obj) && hasOwnProp(OBJECT_MEMBERS, val)) {\n return OBJECT_MEMBERS[val].bind(obj);\n }\n\n return orig_memberLookup.apply(this, arguments);\n };\n\n return uninstall;\n}\n\nmodule.exports = installCompat;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/jinja-compat.js"],"sourceRoot":""}
\ No newline at end of file diff --git a/node_modules/nunjucks/browser/nunjucks.min.js b/node_modules/nunjucks/browser/nunjucks.min.js new file mode 100644 index 0000000..c946749 --- /dev/null +++ b/node_modules/nunjucks/browser/nunjucks.min.js @@ -0,0 +1,3 @@ +/*! Browser bundle of nunjucks 3.2.4 */ +!function(t,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.nunjucks=n():t.nunjucks=n()}("undefined"!=typeof self?self:this,function(){return function(t){var n={};function i(r){if(n[r])return n[r].exports;var e=n[r]={i:r,l:!1,exports:{}};return t[r].call(e.exports,e,e.exports,i),e.l=!0,e.exports}return i.m=t,i.c=n,i.d=function(t,n,r){i.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},i.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(n,"a",n),n},i.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},i.p="",i(i.s=11)}([function(t,n,i){"use strict";var r=Array.prototype,e=Object.prototype,s={"&":"&",'"':""","'":"'","<":"<",">":">","\\":"\"},o=/[&"'<>\\]/g;function u(t,n){return e.hasOwnProperty.call(t,n)}function h(t){return s[t]}function f(t,n,i){var r,e,s;if(t instanceof Error&&(t=(e=t).name+": "+e.message),Object.setPrototypeOf?Object.setPrototypeOf(r=Error(t),f.prototype):Object.defineProperty(r=this,"message",{enumerable:!1,writable:!0,value:t}),Object.defineProperty(r,"name",{value:"Template render error"}),Error.captureStackTrace&&Error.captureStackTrace(r,this.constructor),e){var o=Object.getOwnPropertyDescriptor(e,"stack");(s=o&&(o.get||function(){return o.value}))||(s=function(){return e.stack})}else{var u=Error(t).stack;s=function(){return u}}return Object.defineProperty(r,"stack",{get:function(){return s.call(r)}}),Object.defineProperty(r,"cause",{value:e}),r.lineno=n,r.colno=i,r.firstUpdate=!0,r.Update=function(t){var n="("+(t||"unknown path")+")";return this.firstUpdate&&(this.lineno&&this.colno?n+=" [Line "+this.lineno+", Column "+this.colno+"]":this.lineno&&(n+=" [Line "+this.lineno+"]")),n+="\n ",this.firstUpdate&&(n+=" "),this.message=n+(this.message||""),this.firstUpdate=!1,this},r}function c(t){return"[object Function]"===e.toString.call(t)}function a(t){return"[object Array]"===e.toString.call(t)}function l(t){return"[object String]"===e.toString.call(t)}function v(t){return"[object Object]"===e.toString.call(t)}function p(t){var n,i=(n=t)?"string"==typeof n?n.split("."):[n]:[];return function(t){for(var n=t,r=0;r<i.length;r++){var e=i[r];if(!u(n,e))return;n=n[e]}return n}}function d(t){return Array.prototype.slice.call(t)}function m(t,n,i){return Array.prototype.indexOf.call(t||[],n,i)}function w(t){var n=[];for(var i in t)u(t,i)&&n.push(i);return n}(n=t.exports={}).hasOwnProp=u,n.t=function(t,i,r){if(r.Update||(r=new n.TemplateError(r)),r.Update(t),!i){var e=r;(r=Error(e.message)).name=e.name}return r},Object.setPrototypeOf?Object.setPrototypeOf(f.prototype,Error.prototype):f.prototype=Object.create(Error.prototype,{constructor:{value:f}}),n.TemplateError=f,n.escape=function(t){return t.replace(o,h)},n.isFunction=c,n.isArray=a,n.isString=l,n.isObject=v,n.getAttrGetter=p,n.groupBy=function(t,n,i){for(var r={},e=c(n)?n:p(n),s=0;s<t.length;s++){var o=t[s],u=e(o,s);if(void 0===u&&!0===i)throw new TypeError('groupby: attribute "'+n+'" resolved to undefined');(r[u]||(r[u]=[])).push(o)}return r},n.toArray=d,n.without=function(t){var n=[];if(!t)return n;for(var i=t.length,r=d(arguments).slice(1),e=-1;++e<i;)-1===m(r,t[e])&&n.push(t[e]);return n},n.repeat=function(t,n){for(var i="",r=0;r<n;r++)i+=t;return i},n.each=function(t,n,i){if(null!=t)if(r.forEach&&t.forEach===r.forEach)t.forEach(n,i);else if(t.length===+t.length)for(var e=0,s=t.length;e<s;e++)n.call(i,t[e],e,t)},n.map=function(t,n){var i=[];if(null==t)return i;if(r.map&&t.map===r.map)return t.map(n);for(var e=0;e<t.length;e++)i[i.length]=n(t[e],e);return t.length===+t.length&&(i.length=t.length),i},n.asyncIter=function(t,n,i){var r=-1;!function e(){++r<t.length?n(t[r],r,e,i):i()}()},n.asyncFor=function(t,n,i){var r=w(t||{}),e=r.length,s=-1;!function o(){var u=r[++s];s<e?n(u,t[u],s,e,o):i()}()},n.indexOf=m,n.keys=w,n.r=function(t){return w(t).map(function(n){return[n,t[n]]})},n.u=function(t){return w(t).map(function(n){return t[n]})},n.h=n.extend=function(t,n){return t=t||{},w(n).forEach(function(i){t[i]=n[i]}),t},n.inOperator=function(t,n){if(a(n)||l(n))return-1!==n.indexOf(t);if(v(n))return t in n;throw Error('Cannot use "in" operator to search for "'+t+'" in unexpected types.')}},function(t,n,i){"use strict";function r(t,n){for(var i=0;i<n.length;i++){var r=n[i];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,(e=r.key,void 0,"symbol"==typeof(s=function(t,n){if("object"!=typeof t||null===t)return t;var i=t[Symbol.toPrimitive];if(void 0!==i){var r=i.call(t,n||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===n?String:Number)(t)}(e,"string"))?s:s+""),r)}var e,s}function e(t,n,i){return n&&r(t.prototype,n),i&&r(t,i),Object.defineProperty(t,"prototype",{writable:!1}),t}function s(t,n){t.prototype=Object.create(n.prototype),t.prototype.constructor=t,o(t,n)}function o(t,n){return(o=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,n){return t.__proto__=n,t})(t,n)}var u=i(16),h=i(0);function f(t,n,i){i=i||{},h.keys(i).forEach(function(n){var r,e;i[n]=(r=t.prototype[n],e=i[n],"function"!=typeof r||"function"!=typeof e?e:function(){var t=this.parent;this.parent=r;var n=e.apply(this,arguments);return this.parent=t,n})});var r=function(t){function i(){return t.apply(this,arguments)||this}return s(i,t),e(i,[{key:"typename",get:function(){return n}}]),i}(t);return h.h(r.prototype,i),r}var c=function(){function t(){this.init.apply(this,arguments)}return t.prototype.init=function(){},t.extend=function(t,n){return"object"==typeof t&&(n=t,t="anonymous"),f(this,t,n)},e(t,[{key:"typename",get:function(){return this.constructor.name}}]),t}(),a=function(t){function n(){var n,i;return(n=i=t.call(this)||this).init.apply(n,arguments),i}return s(n,t),n.prototype.init=function(){},n.extend=function(t,n){return"object"==typeof t&&(n=t,t="anonymous"),f(this,t,n)},e(n,[{key:"typename",get:function(){return this.constructor.name}}]),n}(u);t.exports={Obj:c,EmitterObj:a}},function(t,n,i){"use strict";var r=i(0),e=Array.from,s="function"==typeof Symbol&&Symbol.iterator&&"function"==typeof e,o=function(){function t(t,n){this.variables=Object.create(null),this.parent=t,this.topLevel=!1,this.isolateWrites=n}var n=t.prototype;return n.set=function(t,n,i){var r=t.split("."),e=this.variables,s=this;if(i&&(s=this.resolve(r[0],!0)))s.set(t,n);else{for(var o=0;o<r.length-1;o++){var u=r[o];e[u]||(e[u]={}),e=e[u]}e[r[r.length-1]]=n}},n.get=function(t){var n=this.variables[t];return void 0!==n?n:null},n.lookup=function(t){var n=this.parent,i=this.variables[t];return void 0!==i?i:n&&n.lookup(t)},n.resolve=function(t,n){var i=n&&this.isolateWrites?void 0:this.parent;return void 0!==this.variables[t]?this:i&&i.resolve(t)},n.push=function(n){return new t(this,n)},n.pop=function(){return this.parent},t}();function u(t){return t&&Object.prototype.hasOwnProperty.call(t,"__keywords")}function h(t){var n=t.length;return 0===n?0:u(t[n-1])?n-1:n}function f(t){if("string"!=typeof t)return t;this.val=t,this.length=t.length}f.prototype=Object.create(String.prototype,{length:{writable:!0,configurable:!0,value:0}}),f.prototype.valueOf=function(){return this.val},f.prototype.toString=function(){return this.val},t.exports={Frame:o,makeMacro:function(t,n,i){return function(){for(var r=arguments.length,e=Array(r),s=0;s<r;s++)e[s]=arguments[s];var o,f=h(e),c=function(t){var n=t.length;if(n){var i=t[n-1];if(u(i))return i}return{}}(e);if(f>t.length)o=e.slice(0,t.length),e.slice(o.length,f).forEach(function(t,i){i<n.length&&(c[n[i]]=t)}),o.push(c);else if(f<t.length){o=e.slice(0,f);for(var a=f;a<t.length;a++){var l=t[a];o.push(c[l]),delete c[l]}o.push(c)}else o=e;return i.apply(this,o)}},makeKeywordArgs:function(t){return t.__keywords=!0,t},numArgs:h,suppressValue:function(t,n){return t=void 0!==t&&null!==t?t:"",!n||t instanceof f||(t=r.escape(t.toString())),t},ensureDefined:function(t,n,i){if(null===t||void 0===t)throw new r.TemplateError("attempted to output null or undefined value",n+1,i+1);return t},memberLookup:function(t,n){if(void 0!==t&&null!==t)return"function"==typeof t[n]?function(){for(var i=arguments.length,r=Array(i),e=0;e<i;e++)r[e]=arguments[e];return t[n].apply(t,r)}:t[n]},contextOrFrameLookup:function(t,n,i){var r=n.lookup(i);return void 0!==r?r:t.lookup(i)},callWrap:function(t,n,i,r){if(!t)throw Error("Unable to call `"+n+"`, which is undefined or falsey");if("function"!=typeof t)throw Error("Unable to call `"+n+"`, which is not a function");return t.apply(i,r)},handleError:function(t,n,i){return t.lineno?t:new r.TemplateError(t,n,i)},isArray:r.isArray,keys:r.keys,SafeString:f,copySafeness:function(t,n){return t instanceof f?new f(n):n.toString()},markSafe:function(t){var n=typeof t;return"string"===n?new f(t):"function"!==n?t:function(n){var i=t.apply(this,arguments);return"string"==typeof i?new f(i):i}},asyncEach:function(t,n,i,e){if(r.isArray(t)){var s=t.length;r.asyncIter(t,function(t,r,e){switch(n){case 1:i(t,r,s,e);break;case 2:i(t[0],t[1],r,s,e);break;case 3:i(t[0],t[1],t[2],r,s,e);break;default:t.push(r,s,e),i.apply(this,t)}},e)}else r.asyncFor(t,function(t,n,r,e,s){i(t,n,r,e,s)},e)},asyncAll:function(t,n,i,e){var s,o,u=0;function h(t,n){u++,o[t]=n,u===s&&e(null,o.join(""))}if(r.isArray(t))if(s=t.length,o=Array(s),0===s)e(null,"");else for(var f=0;f<t.length;f++){var c=t[f];switch(n){case 1:i(c,f,s,h);break;case 2:i(c[0],c[1],f,s,h);break;case 3:i(c[0],c[1],c[2],f,s,h);break;default:c.push(f,s,h),i.apply(this,c)}}else{var a=r.keys(t||{});if(s=a.length,o=Array(s),0===s)e(null,"");else for(var l=0;l<a.length;l++){var v=a[l];i(v,t[v],l,s,h)}}},inOperator:r.inOperator,fromIterator:function(t){return"object"!=typeof t||null===t||r.isArray(t)?t:s&&Symbol.iterator in t?e(t):t}}},function(t,n,i){"use strict";function r(t,n){for(var i=0;i<n.length;i++){var r=n[i];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,(e=r.key,void 0,"symbol"==typeof(s=function(t,n){if("object"!=typeof t||null===t)return t;var i=t[Symbol.toPrimitive];if(void 0!==i){var r=i.call(t,n||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===n?String:Number)(t)}(e,"string"))?s:s+""),r)}var e,s}function e(t,n,i){return n&&r(t.prototype,n),i&&r(t,i),Object.defineProperty(t,"prototype",{writable:!1}),t}function s(t,n){t.prototype=Object.create(n.prototype),t.prototype.constructor=t,o(t,n)}function o(t,n){return(o=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,n){return t.__proto__=n,t})(t,n)}function u(t,n,i){t instanceof n&&i.push(t),t instanceof h&&t.findAll(n,i)}var h=function(t){function n(){return t.apply(this,arguments)||this}s(n,t);var i=n.prototype;return i.init=function(t,n){for(var i=arguments,r=this,e=arguments.length,s=Array(e>2?e-2:0),o=2;o<e;o++)s[o-2]=arguments[o];this.lineno=t,this.colno=n,this.fields.forEach(function(t,n){var e=i[n+2];void 0===e&&(e=null),r[t]=e})},i.findAll=function(t,n){var i=this;return n=n||[],this instanceof c?this.children.forEach(function(i){return u(i,t,n)}):this.fields.forEach(function(r){return u(i[r],t,n)}),n},i.iterFields=function(t){var n=this;this.fields.forEach(function(i){t(n[i],i)})},n}(i(1).Obj),f=function(t){function n(){return t.apply(this,arguments)||this}return s(n,t),e(n,[{key:"typename",get:function(){return"Value"}},{key:"fields",get:function(){return["value"]}}]),n}(h),c=function(t){function n(){return t.apply(this,arguments)||this}s(n,t);var i=n.prototype;return i.init=function(n,i,r){t.prototype.init.call(this,n,i,r||[])},i.addChild=function(t){this.children.push(t)},e(n,[{key:"typename",get:function(){return"NodeList"}},{key:"fields",get:function(){return["children"]}}]),n}(h),a=c.extend("Root"),l=f.extend("Literal"),v=f.extend("Symbol"),p=c.extend("Group"),d=c.extend("Array"),m=h.extend("Pair",{fields:["key","value"]}),w=c.extend("Dict"),b=h.extend("LookupVal",{fields:["target","val"]}),y=h.extend("If",{fields:["cond","body","else_"]}),g=y.extend("IfAsync"),k=h.extend("InlineIf",{fields:["cond","body","else_"]}),E=h.extend("For",{fields:["arr","name","body","else_"]}),O=E.extend("AsyncEach"),x=E.extend("AsyncAll"),j=h.extend("Macro",{fields:["name","args","body"]}),T=j.extend("Caller"),A=h.extend("Import",{fields:["template","target","withContext"]}),N=function(t){function n(){return t.apply(this,arguments)||this}return s(n,t),n.prototype.init=function(n,i,r,e,s){t.prototype.init.call(this,n,i,r,e||new c,s)},e(n,[{key:"typename",get:function(){return"FromImport"}},{key:"fields",get:function(){return["template","names","withContext"]}}]),n}(h),S=h.extend("FunCall",{fields:["name","args"]}),_=S.extend("Filter"),L=_.extend("FilterAsync",{fields:["name","args","symbol"]}),F=w.extend("KeywordArgs"),I=h.extend("Block",{fields:["name","body"]}),C=h.extend("Super",{fields:["blockName","symbol"]}),R=h.extend("TemplateRef",{fields:["template"]}).extend("Extends"),K=h.extend("Include",{fields:["template","ignoreMissing"]}),M=h.extend("Set",{fields:["targets","value"]}),P=h.extend("Switch",{fields:["expr","cases","default"]}),B=h.extend("Case",{fields:["cond","body"]}),V=c.extend("Output"),D=h.extend("Capture",{fields:["body"]}),U=l.extend("TemplateData"),$=h.extend("UnaryOp",{fields:["target"]}),G=h.extend("BinOp",{fields:["left","right"]}),W=G.extend("In"),H=G.extend("Is"),J=G.extend("Or"),z=G.extend("And"),Y=$.extend("Not"),q=G.extend("Add"),X=G.extend("Concat"),Q=G.extend("Sub"),Z=G.extend("Mul"),tt=G.extend("Div"),nt=G.extend("FloorDiv"),it=G.extend("Mod"),rt=G.extend("Pow"),et=$.extend("Neg"),st=$.extend("Pos"),ot=h.extend("Compare",{fields:["expr","ops"]}),ut=h.extend("CompareOperand",{fields:["expr","type"]}),ht=h.extend("CallExtension",{init:function(t,n,i,r){this.parent(),this.extName=t.__name||t,this.prop=n,this.args=i||new c,this.contentArgs=r||[],this.autoescape=t.autoescape},fields:["extName","prop","args","contentArgs"]}),ft=ht.extend("CallExtensionAsync");function ct(t,n,i){var r=t.split("\n");r.forEach(function(t,e){t&&(i&&e>0||!i)&&process.stdout.write(" ".repeat(n));var s=e===r.length-1?"":"\n";process.stdout.write(""+t+s)})}t.exports={Node:h,Root:a,NodeList:c,Value:f,Literal:l,Symbol:v,Group:p,Array:d,Pair:m,Dict:w,Output:V,Capture:D,TemplateData:U,If:y,IfAsync:g,InlineIf:k,For:E,AsyncEach:O,AsyncAll:x,Macro:j,Caller:T,Import:A,FromImport:N,FunCall:S,Filter:_,FilterAsync:L,KeywordArgs:F,Block:I,Super:C,Extends:R,Include:K,Set:M,Switch:P,Case:B,LookupVal:b,BinOp:G,In:W,Is:H,Or:J,And:z,Not:Y,Add:q,Concat:X,Sub:Q,Mul:Z,Div:tt,FloorDiv:nt,Mod:it,Pow:rt,Neg:et,Pos:st,Compare:ot,CompareOperand:ut,CallExtension:ht,CallExtensionAsync:ft,printNodes:function t(n,i){if(i=i||0,ct(n.typename+": ",i),n instanceof c)ct("\n"),n.children.forEach(function(n){t(n,i+2)});else if(n instanceof ht)ct(n.extName+"."+n.prop+"\n"),n.args&&t(n.args,i+2),n.contentArgs&&n.contentArgs.forEach(function(n){t(n,i+2)});else{var r=[],e=null;n.iterFields(function(t,n){t instanceof h?r.push([n,t]):(e=e||{})[n]=t}),e?ct(JSON.stringify(e,null,2)+"\n",null,!0):ct("\n"),r.forEach(function(n){var r=n[0],e=n[1];ct("["+r+"] =>",i+2),t(e,i+4)})}}}},function(t,n){},function(t,n,i){"use strict";function r(t,n){return(r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,n){return t.__proto__=n,t})(t,n)}var e=i(8),s=i(17),o=i(3),u=i(0).TemplateError,h=i(2).Frame,f={"==":"==","===":"===","!=":"!=","!==":"!==","<":"<",">":">","<=":"<=",">=":">="},c=function(t){var n,i;function e(){return t.apply(this,arguments)||this}i=t,(n=e).prototype=Object.create(i.prototype),n.prototype.constructor=n,r(n,i);var s=e.prototype;return s.init=function(t,n){this.templateName=t,this.codebuf=[],this.lastId=0,this.buffer=null,this.bufferStack=[],this.f="",this.inBlock=!1,this.throwOnUndefined=n},s.fail=function(t,n,i){throw void 0!==n&&(n+=1),void 0!==i&&(i+=1),new u(t,n,i)},s.a=function(){var t=this.v();return this.bufferStack.push(this.buffer),this.buffer=t,this.w("var "+this.buffer+' = "";'),t},s.b=function(){this.buffer=this.bufferStack.pop()},s.w=function(t){this.codebuf.push(t)},s.y=function(t){this.w(t+"\n")},s.g=function(){for(var t=this,n=arguments.length,i=Array(n),r=0;r<n;r++)i[r]=arguments[r];i.forEach(function(n){return t.y(n)})},s.k=function(t,n){this.buffer="output",this.f="",this.y("function "+n+"(env, context, frame, runtime, cb) {"),this.y("var lineno = "+t.lineno+";"),this.y("var colno = "+t.colno+";"),this.y("var "+this.buffer+' = "";'),this.y("try {")},s.O=function(t){t||this.y("cb(null, "+this.buffer+");"),this.x(),this.y("} catch (e) {"),this.y(" cb(runtime.handleError(e, lineno, colno));"),this.y("}"),this.y("}"),this.buffer=null},s.j=function(){this.f+="})"},s.x=function(){this.y(this.f+";"),this.f=""},s.T=function(t){var n=this.f;this.f="",t.call(this),this.x(),this.f=n},s.A=function(t){var n=this.v();return"function("+n+(t?","+t:"")+") {\nif("+n+") { cb("+n+"); return; }"},s.v=function(){return this.lastId++,"t_"+this.lastId},s.N=function(){return null==this.templateName?"undefined":JSON.stringify(this.templateName)},s.S=function(t,n){var i=this;t.children.forEach(function(t){i.compile(t,n)})},s._=function(t,n,i,r){var e=this;i&&this.w(i),t.children.forEach(function(t,i){i>0&&e.w(","),e.compile(t,n)}),r&&this.w(r)},s.L=function(t,n){this.assertType(t,o.Literal,o.Symbol,o.Group,o.Array,o.Dict,o.FunCall,o.Caller,o.Filter,o.LookupVal,o.Compare,o.InlineIf,o.In,o.Is,o.And,o.Or,o.Not,o.Add,o.Concat,o.Sub,o.Mul,o.Div,o.FloorDiv,o.Mod,o.Pow,o.Neg,o.Pos,o.Compare,o.NodeList),this.compile(t,n)},s.assertType=function(t){for(var n=arguments.length,i=Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];i.some(function(n){return t instanceof n})||this.fail("assertType: invalid type: "+t.typename,t.lineno,t.colno)},s.compileCallExtension=function(t,n,i){var r=this,e=t.args,s=t.contentArgs,u="boolean"!=typeof t.autoescape||t.autoescape;if(i||this.w(this.buffer+" += runtime.suppressValue("),this.w('env.getExtension("'+t.extName+'")["'+t.prop+'"]('),this.w("context"),(e||s)&&this.w(","),e&&(e instanceof o.NodeList||this.fail("compileCallExtension: arguments must be a NodeList, use `parser.parseSignature`"),e.children.forEach(function(t,i){r.L(t,n),(i!==e.children.length-1||s.length)&&r.w(",")})),s.length&&s.forEach(function(t,i){if(i>0&&r.w(","),t){r.y("function(cb) {"),r.y("if(!cb) { cb = function(err) { if(err) { throw err; }}}");var e=r.a();r.T(function(){r.compile(t,n),r.y("cb(null, "+e+");")}),r.b(),r.y("return "+e+";"),r.y("}")}else r.w("null")}),i){var h=this.v();this.y(", "+this.A(h)),this.y(this.buffer+" += runtime.suppressValue("+h+", "+u+" && env.opts.autoescape);"),this.j()}else this.w(")"),this.w(", "+u+" && env.opts.autoescape);\n")},s.compileCallExtensionAsync=function(t,n){this.compileCallExtension(t,n,!0)},s.compileNodeList=function(t,n){this.S(t,n)},s.compileLiteral=function(t){if("string"==typeof t.value){var n=t.value.replace(/\\/g,"\\\\");n=(n=(n=(n=(n=n.replace(/"/g,'\\"')).replace(/\n/g,"\\n")).replace(/\r/g,"\\r")).replace(/\t/g,"\\t")).replace(/\u2028/g,"\\u2028"),this.w('"'+n+'"')}else null===t.value?this.w("null"):this.w(t.value.toString())},s.compileSymbol=function(t,n){var i=t.value,r=n.lookup(i);r?this.w(r):this.w('runtime.contextOrFrameLookup(context, frame, "'+i+'")')},s.compileGroup=function(t,n){this._(t,n,"(",")")},s.compileArray=function(t,n){this._(t,n,"[","]")},s.compileDict=function(t,n){this._(t,n,"{","}")},s.compilePair=function(t,n){var i=t.key,r=t.value;i instanceof o.Symbol?i=new o.Literal(i.lineno,i.colno,i.value):i instanceof o.Literal&&"string"==typeof i.value||this.fail("compilePair: Dict keys must be strings or names",i.lineno,i.colno),this.compile(i,n),this.w(": "),this.L(r,n)},s.compileInlineIf=function(t,n){this.w("("),this.compile(t.cond,n),this.w("?"),this.compile(t.body,n),this.w(":"),null!==t.else_?this.compile(t.else_,n):this.w('""'),this.w(")")},s.compileIn=function(t,n){this.w("runtime.inOperator("),this.compile(t.left,n),this.w(","),this.compile(t.right,n),this.w(")")},s.compileIs=function(t,n){var i=t.right.name?t.right.name.value:t.right.value;this.w('env.getTest("'+i+'").call(context, '),this.compile(t.left,n),t.right.args&&(this.w(","),this.compile(t.right.args,n)),this.w(") === true")},s.F=function(t,n,i){this.compile(t.left,n),this.w(i),this.compile(t.right,n)},s.compileOr=function(t,n){return this.F(t,n," || ")},s.compileAnd=function(t,n){return this.F(t,n," && ")},s.compileAdd=function(t,n){return this.F(t,n," + ")},s.compileConcat=function(t,n){return this.F(t,n,' + "" + ')},s.compileSub=function(t,n){return this.F(t,n," - ")},s.compileMul=function(t,n){return this.F(t,n," * ")},s.compileDiv=function(t,n){return this.F(t,n," / ")},s.compileMod=function(t,n){return this.F(t,n," % ")},s.compileNot=function(t,n){this.w("!"),this.compile(t.target,n)},s.compileFloorDiv=function(t,n){this.w("Math.floor("),this.compile(t.left,n),this.w(" / "),this.compile(t.right,n),this.w(")")},s.compilePow=function(t,n){this.w("Math.pow("),this.compile(t.left,n),this.w(", "),this.compile(t.right,n),this.w(")")},s.compileNeg=function(t,n){this.w("-"),this.compile(t.target,n)},s.compilePos=function(t,n){this.w("+"),this.compile(t.target,n)},s.compileCompare=function(t,n){var i=this;this.compile(t.expr,n),t.ops.forEach(function(t){i.w(" "+f[t.type]+" "),i.compile(t.expr,n)})},s.compileLookupVal=function(t,n){this.w("runtime.memberLookup(("),this.L(t.target,n),this.w("),"),this.L(t.val,n),this.w(")")},s.I=function(t){switch(t.typename){case"Symbol":return t.value;case"FunCall":return"the return value of ("+this.I(t.name)+")";case"LookupVal":return this.I(t.target)+'["'+this.I(t.val)+'"]';case"Literal":return t.value.toString();default:return"--expression--"}},s.compileFunCall=function(t,n){this.w("(lineno = "+t.lineno+", colno = "+t.colno+", "),this.w("runtime.callWrap("),this.L(t.name,n),this.w(', "'+this.I(t.name).replace(/"/g,'\\"')+'", context, '),this._(t.args,n,"[","])"),this.w(")")},s.compileFilter=function(t,n){var i=t.name;this.assertType(i,o.Symbol),this.w('env.getFilter("'+i.value+'").call(context, '),this._(t.args,n),this.w(")")},s.compileFilterAsync=function(t,n){var i=t.name,r=t.symbol.value;this.assertType(i,o.Symbol),n.set(r,r),this.w('env.getFilter("'+i.value+'").call(context, '),this._(t.args,n),this.y(", "+this.A(r)),this.j()},s.compileKeywordArgs=function(t,n){this.w("runtime.makeKeywordArgs("),this.compileDict(t,n),this.w(")")},s.compileSet=function(t,n){var i=this,r=[];t.targets.forEach(function(t){var e=t.value,s=n.lookup(e);null!==s&&void 0!==s||(s=i.v(),i.y("var "+s+";")),r.push(s)}),t.value?(this.w(r.join(" = ")+" = "),this.L(t.value,n),this.y(";")):(this.w(r.join(" = ")+" = "),this.compile(t.body,n),this.y(";")),t.targets.forEach(function(t,n){var e=r[n],s=t.value;i.y('frame.set("'+s+'", '+e+", true);"),i.y("if(frame.topLevel) {"),i.y('context.setVariable("'+s+'", '+e+");"),i.y("}"),"_"!==s.charAt(0)&&(i.y("if(frame.topLevel) {"),i.y('context.addExport("'+s+'", '+e+");"),i.y("}"))})},s.compileSwitch=function(t,n){var i=this;this.w("switch ("),this.compile(t.expr,n),this.w(") {"),t.cases.forEach(function(t,r){i.w("case "),i.compile(t.cond,n),i.w(": "),i.compile(t.body,n),t.body.children.length&&i.y("break;")}),t.default&&(this.w("default:"),this.compile(t.default,n)),this.w("}")},s.compileIf=function(t,n,i){var r=this;this.w("if("),this.L(t.cond,n),this.y(") {"),this.T(function(){r.compile(t.body,n),i&&r.w("cb()")}),t.else_?(this.y("}\nelse {"),this.T(function(){r.compile(t.else_,n),i&&r.w("cb()")})):i&&(this.y("}\nelse {"),this.w("cb()")),this.y("}")},s.compileIfAsync=function(t,n){this.w("(function(cb) {"),this.compileIf(t,n,!0),this.w("})("+this.A()),this.j()},s.C=function(t,n,i,r){var e=this;[{name:"index",val:i+" + 1"},{name:"index0",val:i},{name:"revindex",val:r+" - "+i},{name:"revindex0",val:r+" - "+i+" - 1"},{name:"first",val:i+" === 0"},{name:"last",val:i+" === "+r+" - 1"},{name:"length",val:r}].forEach(function(t){e.y('frame.set("loop.'+t.name+'", '+t.val+");")})},s.compileFor=function(t,n){var i=this,r=this.v(),e=this.v(),s=this.v();if(n=n.push(),this.y("frame = frame.push();"),this.w("var "+s+" = "),this.L(t.arr,n),this.y(";"),this.w("if("+s+") {"),this.y(s+" = runtime.fromIterator("+s+");"),t.name instanceof o.Array){this.y("var "+r+";"),this.y("if(runtime.isArray("+s+")) {"),this.y("var "+e+" = "+s+".length;"),this.y("for("+r+"=0; "+r+" < "+s+".length; "+r+"++) {"),t.name.children.forEach(function(e,o){var u=i.v();i.y("var "+u+" = "+s+"["+r+"]["+o+"];"),i.y('frame.set("'+e+'", '+s+"["+r+"]["+o+"]);"),n.set(t.name.children[o].value,u)}),this.C(t,s,r,e),this.T(function(){i.compile(t.body,n)}),this.y("}"),this.y("} else {");var u=t.name.children,h=u[0],f=u[1],c=this.v(),a=this.v();n.set(h.value,c),n.set(f.value,a),this.y(r+" = -1;"),this.y("var "+e+" = runtime.keys("+s+").length;"),this.y("for(var "+c+" in "+s+") {"),this.y(r+"++;"),this.y("var "+a+" = "+s+"["+c+"];"),this.y('frame.set("'+h.value+'", '+c+");"),this.y('frame.set("'+f.value+'", '+a+");"),this.C(t,s,r,e),this.T(function(){i.compile(t.body,n)}),this.y("}"),this.y("}")}else{var l=this.v();n.set(t.name.value,l),this.y("var "+e+" = "+s+".length;"),this.y("for(var "+r+"=0; "+r+" < "+s+".length; "+r+"++) {"),this.y("var "+l+" = "+s+"["+r+"];"),this.y('frame.set("'+t.name.value+'", '+l+");"),this.C(t,s,r,e),this.T(function(){i.compile(t.body,n)}),this.y("}")}this.y("}"),t.else_&&(this.y("if (!"+e+") {"),this.compile(t.else_,n),this.y("}")),this.y("frame = frame.pop();")},s.R=function(t,n,i){var r=this,e=this.v(),s=this.v(),u=this.v(),h=i?"asyncAll":"asyncEach";if(n=n.push(),this.y("frame = frame.push();"),this.w("var "+u+" = runtime.fromIterator("),this.L(t.arr,n),this.y(");"),t.name instanceof o.Array){var f=t.name.children.length;this.w("runtime."+h+"("+u+", "+f+", function("),t.name.children.forEach(function(t){r.w(t.value+",")}),this.w(e+","+s+",next) {"),t.name.children.forEach(function(t){var i=t.value;n.set(i,i),r.y('frame.set("'+i+'", '+i+");")})}else{var c=t.name.value;this.y("runtime."+h+"("+u+", 1, function("+c+", "+e+", "+s+",next) {"),this.y('frame.set("'+c+'", '+c+");"),n.set(c,c)}this.C(t,u,e,s),this.T(function(){var s;i&&(s=r.a()),r.compile(t.body,n),r.y("next("+e+(s?","+s:"")+");"),i&&r.b()});var a=this.v();this.y("}, "+this.A(a)),this.j(),i&&this.y(this.buffer+" += "+a+";"),t.else_&&(this.y("if (!"+u+".length) {"),this.compile(t.else_,n),this.y("}")),this.y("frame = frame.pop();")},s.compileAsyncEach=function(t,n){this.R(t,n)},s.compileAsyncAll=function(t,n){this.R(t,n,!0)},s.K=function(t,n){var i=this,r=[],e=null,s="macro_"+this.v(),u=void 0!==n;t.args.children.forEach(function(n,s){s===t.args.children.length-1&&n instanceof o.Dict?e=n:(i.assertType(n,o.Symbol),r.push(n))});var f,c=[].concat(r.map(function(t){return"l_"+t.value}),["kwargs"]),a=r.map(function(t){return'"'+t.value+'"'}),l=(e&&e.children||[]).map(function(t){return'"'+t.key.value+'"'});f=u?n.push(!0):new h,this.g("var "+s+" = runtime.makeMacro(","["+a.join(", ")+"], ","["+l.join(", ")+"], ","function ("+c.join(", ")+") {","var callerFrame = frame;","frame = "+(u?"frame.push(true);":"new runtime.Frame();"),"kwargs = kwargs || {};",'if (Object.prototype.hasOwnProperty.call(kwargs, "caller")) {','frame.set("caller", kwargs.caller); }'),r.forEach(function(t){i.y('frame.set("'+t.value+'", l_'+t.value+");"),f.set(t.value,"l_"+t.value)}),e&&e.children.forEach(function(t){var n=t.key.value;i.w('frame.set("'+n+'", '),i.w('Object.prototype.hasOwnProperty.call(kwargs, "'+n+'")'),i.w(' ? kwargs["'+n+'"] : '),i.L(t.value,f),i.w(");")});var v=this.a();return this.T(function(){i.compile(t.body,f)}),this.y("frame = "+(u?"frame.pop();":"callerFrame;")),this.y("return new runtime.SafeString("+v+");"),this.y("});"),this.b(),s},s.compileMacro=function(t,n){var i=this.K(t),r=t.name.value;n.set(r,i),n.parent?this.y('frame.set("'+r+'", '+i+");"):("_"!==t.name.value.charAt(0)&&this.y('context.addExport("'+r+'");'),this.y('context.setVariable("'+r+'", '+i+");"))},s.compileCaller=function(t,n){this.w("(function (){");var i=this.K(t,n);this.w("return "+i+";})()")},s.M=function(t,n,i,r){var e=this.v(),s=this.N(),o=this.A(e),u=i?"true":"false",h=r?"true":"false";return this.w("env.getTemplate("),this.L(t.template,n),this.y(", "+u+", "+s+", "+h+", "+o),e},s.compileImport=function(t,n){var i=t.target.value,r=this.M(t,n,!1,!1);this.j(),this.y(r+".getExported("+(t.withContext?"context.getVariables(), frame, ":"")+this.A(r)),this.j(),n.set(i,r),n.parent?this.y('frame.set("'+i+'", '+r+");"):this.y('context.setVariable("'+i+'", '+r+");")},s.compileFromImport=function(t,n){var i=this,r=this.M(t,n,!1,!1);this.j(),this.y(r+".getExported("+(t.withContext?"context.getVariables(), frame, ":"")+this.A(r)),this.j(),t.names.children.forEach(function(t){var e,s,u=i.v();t instanceof o.Pair?(e=t.key.value,s=t.value.value):s=e=t.value,i.y("if(Object.prototype.hasOwnProperty.call("+r+', "'+e+'")) {'),i.y("var "+u+" = "+r+"."+e+";"),i.y("} else {"),i.y("cb(new Error(\"cannot import '"+e+"'\")); return;"),i.y("}"),n.set(s,u),n.parent?i.y('frame.set("'+s+'", '+u+");"):i.y('context.setVariable("'+s+'", '+u+");")})},s.compileBlock=function(t){var n=this.v();this.inBlock||this.w('(parentTemplate ? function(e, c, f, r, cb) { cb(""); } : '),this.w('context.getBlock("'+t.name.value+'")'),this.inBlock||this.w(")"),this.y("(env, context, frame, runtime, "+this.A(n)),this.y(this.buffer+" += "+n+";"),this.j()},s.compileSuper=function(t,n){var i=t.blockName.value,r=t.symbol.value,e=this.A(r);this.y('context.getSuper(env, "'+i+'", b_'+i+", frame, runtime, "+e),this.y(r+" = runtime.markSafe("+r+");"),this.j(),n.set(r,r)},s.compileExtends=function(t,n){var i=this.v(),r=this.M(t,n,!0,!1);this.y("parentTemplate = "+r),this.y("for(var "+i+" in parentTemplate.blocks) {"),this.y("context.addBlock("+i+", parentTemplate.blocks["+i+"]);"),this.y("}"),this.j()},s.compileInclude=function(t,n){this.y("var tasks = [];"),this.y("tasks.push("),this.y("function(callback) {");var i=this.M(t,n,!1,t.ignoreMissing);this.y("callback(null,"+i+");});"),this.y("});");var r=this.v();this.y("tasks.push("),this.y("function(template, callback){"),this.y("template.render(context.getVariables(), frame, "+this.A(r)),this.y("callback(null,"+r+");});"),this.y("});"),this.y("tasks.push("),this.y("function(result, callback){"),this.y(this.buffer+" += result;"),this.y("callback(null);"),this.y("});"),this.y("env.waterfall(tasks, function(){"),this.j()},s.compileTemplateData=function(t,n){this.compileLiteral(t,n)},s.compileCapture=function(t,n){var i=this,r=this.buffer;this.buffer="output",this.y("(function() {"),this.y('var output = "";'),this.T(function(){i.compile(t.body,n)}),this.y("return output;"),this.y("})()"),this.buffer=r},s.compileOutput=function(t,n){var i=this;t.children.forEach(function(r){r instanceof o.TemplateData?r.value&&(i.w(i.buffer+" += "),i.compileLiteral(r,n),i.y(";")):(i.w(i.buffer+" += runtime.suppressValue("),i.throwOnUndefined&&i.w("runtime.ensureDefined("),i.compile(r,n),i.throwOnUndefined&&i.w(","+t.lineno+","+t.colno+")"),i.w(", env.opts.autoescape);\n"))})},s.compileRoot=function(t,n){var i=this;n&&this.fail("compileRoot: root node can't have frame"),n=new h,this.k(t,"root"),this.y("var parentTemplate = null;"),this.S(t,n),this.y("if(parentTemplate) {"),this.y("parentTemplate.rootRenderFunc(env, context, frame, runtime, cb);"),this.y("} else {"),this.y("cb(null, "+this.buffer+");"),this.y("}"),this.O(!0),this.inBlock=!0;var r=[],e=t.findAll(o.Block);e.forEach(function(t,n){var e=t.name.value;if(-1!==r.indexOf(e))throw Error('Block "'+e+'" defined more than once.');r.push(e),i.k(t,"b_"+e);var s=new h;i.y("var frame = frame.push(true);"),i.compile(t.body,s),i.O()}),this.y("return {"),e.forEach(function(t,n){var r="b_"+t.name.value;i.y(r+": "+r+",")}),this.y("root: root\n};")},s.compile=function(t,n){var i=this["compile"+t.typename];i?i.call(this,t,n):this.fail("compile: Cannot compile node: "+t.typename,t.lineno,t.colno)},s.getCode=function(){return this.codebuf.join("")},e}(i(1).Obj);t.exports={compile:function(t,n,i,r,o){void 0===o&&(o={});var u=new c(r,o.throwOnUndefined),h=(i||[]).map(function(t){return t.preprocess}).filter(function(t){return!!t}).reduce(function(t,n){return n(t)},t);return u.compile(s.transform(e.parse(h,i,o),n,r)),u.getCode()},Compiler:c}},function(t,n,i){"use strict";function r(t,n){return(r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,n){return t.__proto__=n,t})(t,n)}var e=i(4),s=i(1).EmitterObj;t.exports=function(t){var n,i;function s(){return t.apply(this,arguments)||this}i=t,(n=s).prototype=Object.create(i.prototype),n.prototype.constructor=n,r(n,i);var o=s.prototype;return o.resolve=function(t,n){return e.resolve(e.dirname(t),n)},o.isRelative=function(t){return 0===t.indexOf("./")||0===t.indexOf("../")},s}(s)},function(t,n,i){"use strict";function r(t,n){t.prototype=Object.create(n.prototype),t.prototype.constructor=t,e(t,n)}function e(t,n){return(e=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,n){return t.__proto__=n,t})(t,n)}var s=i(12),o=i(15),u=i(0),h=i(5),f=i(18),c=i(10),a=c.FileSystemLoader,l=c.WebLoader,v=c.PrecompiledLoader,p=i(20),d=i(21),m=i(1),w=m.Obj,b=m.EmitterObj,y=i(2),g=y.handleError,k=y.Frame,E=i(22);function O(t,n,i){s(function(){t(n,i)})}var x={type:"code",obj:{root:function(t,n,i,r,e){try{e(null,"")}catch(t){e(g(t,null,null))}}}},j=function(t){function n(){return t.apply(this,arguments)||this}r(n,t);var i=n.prototype;return i.init=function(t,n){var i=this;n=this.opts=n||{},this.opts.dev=!!n.dev,this.opts.autoescape=null==n.autoescape||n.autoescape,this.opts.throwOnUndefined=!!n.throwOnUndefined,this.opts.trimBlocks=!!n.trimBlocks,this.opts.lstripBlocks=!!n.lstripBlocks,this.loaders=[],t?this.loaders=u.isArray(t)?t:[t]:a?this.loaders=[new a("views")]:l&&(this.loaders=[new l("/views")]),"undefined"!=typeof window&&window.nunjucksPrecompiled&&this.loaders.unshift(new v(window.nunjucksPrecompiled)),this.P(),this.globals=d(),this.filters={},this.tests={},this.asyncFilters=[],this.extensions={},this.extensionsList=[],u.r(f).forEach(function(t){var n=t[0],r=t[1];return i.addFilter(n,r)}),u.r(p).forEach(function(t){var n=t[0],r=t[1];return i.addTest(n,r)})},i.P=function(){var t=this;this.loaders.forEach(function(n){n.cache={},"function"==typeof n.on&&(n.on("update",function(i,r){n.cache[i]=null,t.emit("update",i,r,n)}),n.on("load",function(i,r){t.emit("load",i,r,n)}))})},i.invalidateCache=function(){this.loaders.forEach(function(t){t.cache={}})},i.addExtension=function(t,n){return n.__name=t,this.extensions[t]=n,this.extensionsList.push(n),this},i.removeExtension=function(t){var n=this.getExtension(t);n&&(this.extensionsList=u.without(this.extensionsList,n),delete this.extensions[t])},i.getExtension=function(t){return this.extensions[t]},i.hasExtension=function(t){return!!this.extensions[t]},i.addGlobal=function(t,n){return this.globals[t]=n,this},i.getGlobal=function(t){if(void 0===this.globals[t])throw Error("global not found: "+t);return this.globals[t]},i.addFilter=function(t,n,i){var r=n;return i&&this.asyncFilters.push(t),this.filters[t]=r,this},i.getFilter=function(t){if(!this.filters[t])throw Error("filter not found: "+t);return this.filters[t]},i.addTest=function(t,n){return this.tests[t]=n,this},i.getTest=function(t){if(!this.tests[t])throw Error("test not found: "+t);return this.tests[t]},i.resolveTemplate=function(t,n,i){return!(!t.isRelative||!n)&&t.isRelative(i)&&t.resolve?t.resolve(n,i):i},i.getTemplate=function(t,n,i,r,e){var s,o=this,h=this,f=null;if(t&&t.raw&&(t=t.raw),u.isFunction(i)&&(e=i,i=null,n=n||!1),u.isFunction(n)&&(e=n,n=!1),t instanceof A)f=t;else{if("string"!=typeof t)throw Error("template names must be a string: "+t);for(var c=0;c<this.loaders.length;c++){var a=this.loaders[c];if(f=a.cache[this.resolveTemplate(a,i,t)])break}}if(f)return n&&f.compile(),e?void e(null,f):f;return u.asyncIter(this.loaders,function(n,r,e,s){function o(t,i){t?s(t):i?(i.loader=n,s(null,i)):e()}t=h.resolveTemplate(n,i,t),n.async?n.getSource(t,o):o(null,n.getSource(t))},function(i,u){if(u||i||r||(i=Error("template not found: "+t)),i){if(e)return void e(i);throw i}var h;u?(h=new A(u.src,o,u.path,n),u.noCache||(u.loader.cache[t]=h)):h=new A(x,o,"",n),e?e(null,h):s=h}),s},i.express=function(t){return E(this,t)},i.render=function(t,n,i){u.isFunction(n)&&(i=n,n=null);var r=null;return this.getTemplate(t,function(t,e){if(t&&i)O(i,t);else{if(t)throw t;r=e.render(n,i)}}),r},i.renderString=function(t,n,i,r){return u.isFunction(i)&&(r=i,i={}),new A(t,this,(i=i||{}).path).render(n,r)},i.waterfall=function(t,n,i){return o(t,n,i)},n}(b),T=function(t){function n(){return t.apply(this,arguments)||this}r(n,t);var i=n.prototype;return i.init=function(t,n,i){var r=this;this.env=i||new j,this.ctx=u.extend({},t),this.blocks={},this.exported=[],u.keys(n).forEach(function(t){r.addBlock(t,n[t])})},i.lookup=function(t){return t in this.env.globals&&!(t in this.ctx)?this.env.globals[t]:this.ctx[t]},i.setVariable=function(t,n){this.ctx[t]=n},i.getVariables=function(){return this.ctx},i.addBlock=function(t,n){return this.blocks[t]=this.blocks[t]||[],this.blocks[t].push(n),this},i.getBlock=function(t){if(!this.blocks[t])throw Error('unknown block "'+t+'"');return this.blocks[t][0]},i.getSuper=function(t,n,i,r,e,s){var o=u.indexOf(this.blocks[n]||[],i),h=this.blocks[n][o+1];if(-1===o||!h)throw Error('no super block available for "'+n+'"');h(t,this,r,e,s)},i.addExport=function(t){this.exported.push(t)},i.getExported=function(){var t=this,n={};return this.exported.forEach(function(i){n[i]=t.ctx[i]}),n},n}(w),A=function(t){function n(){return t.apply(this,arguments)||this}r(n,t);var i=n.prototype;return i.init=function(t,n,i,r){if(this.env=n||new j,u.isObject(t))switch(t.type){case"code":this.tmplProps=t.obj;break;case"string":this.tmplStr=t.obj;break;default:throw Error("Unexpected template object type "+t.type+"; expected 'code', or 'string'")}else{if(!u.isString(t))throw Error("src must be a string or an object describing the source");this.tmplStr=t}if(this.path=i,r)try{this.B()}catch(t){throw u.t(this.path,this.env.opts.dev,t)}else this.compiled=!1},i.render=function(t,n,i){var r=this;"function"==typeof t?(i=t,t={}):"function"==typeof n&&(i=n,n=null);var e=!n;try{this.compile()}catch(t){var s=u.t(this.path,this.env.opts.dev,t);if(i)return O(i,s);throw s}var o=new T(t||{},this.blocks,this.env),h=n?n.push(!0):new k;h.topLevel=!0;var f=null,c=!1;return this.rootRenderFunc(this.env,o,h,y,function(t,n){if(!c||!i||void 0===n)if(t&&(t=u.t(r.path,r.env.opts.dev,t),c=!0),i)e?O(i,t,n):i(t,n);else{if(t)throw t;f=n}}),f},i.getExported=function(t,n,i){"function"==typeof t&&(i=t,t={}),"function"==typeof n&&(i=n,n=null);try{this.compile()}catch(t){if(i)return i(t);throw t}var r=n?n.push():new k;r.topLevel=!0;var e=new T(t||{},this.blocks,this.env);this.rootRenderFunc(this.env,e,r,y,function(t){t?i(t,null):i(null,e.getExported())})},i.compile=function(){this.compiled||this.B()},i.B=function(){var t;if(this.tmplProps)t=this.tmplProps;else{var n=h.compile(this.tmplStr,this.env.asyncFilters,this.env.extensionsList,this.path,this.env.opts);t=Function(n)()}this.blocks=this.V(t),this.rootRenderFunc=t.root,this.compiled=!0},i.V=function(t){var n={};return u.keys(t).forEach(function(i){"b_"===i.slice(0,2)&&(n[i.slice(2)]=t[i])}),n},n}(w);t.exports={Environment:j,Template:A}},function(t,n,i){"use strict";function r(t,n){return(r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,n){return t.__proto__=n,t})(t,n)}var e=i(9),s=i(3),o=i(1).Obj,u=i(0),h=function(t){var n,i;function o(){return t.apply(this,arguments)||this}i=t,(n=o).prototype=Object.create(i.prototype),n.prototype.constructor=n,r(n,i);var h=o.prototype;return h.init=function(t){this.tokens=t,this.peeked=null,this.breakOnBlocks=null,this.dropLeadingWhitespace=!1,this.extensions=[]},h.nextToken=function(t){var n;if(this.peeked){if(t||this.peeked.type!==e.TOKEN_WHITESPACE)return n=this.peeked,this.peeked=null,n;this.peeked=null}if(n=this.tokens.nextToken(),!t)for(;n&&n.type===e.TOKEN_WHITESPACE;)n=this.tokens.nextToken();return n},h.peekToken=function(){return this.peeked=this.peeked||this.nextToken(),this.peeked},h.pushToken=function(t){if(this.peeked)throw Error("pushToken: can only push one token on between reads");this.peeked=t},h.error=function(t,n,i){if(void 0===n||void 0===i){var r=this.peekToken()||{};n=r.lineno,i=r.colno}return void 0!==n&&(n+=1),void 0!==i&&(i+=1),new u.TemplateError(t,n,i)},h.fail=function(t,n,i){throw this.error(t,n,i)},h.skip=function(t){var n=this.nextToken();return!(!n||n.type!==t)||(this.pushToken(n),!1)},h.expect=function(t){var n=this.nextToken();return n.type!==t&&this.fail("expected "+t+", got "+n.type,n.lineno,n.colno),n},h.skipValue=function(t,n){var i=this.nextToken();return!(!i||i.type!==t||i.value!==n)||(this.pushToken(i),!1)},h.skipSymbol=function(t){return this.skipValue(e.TOKEN_SYMBOL,t)},h.advanceAfterBlockEnd=function(t){var n;return t||((n=this.peekToken())||this.fail("unexpected end of file"),n.type!==e.TOKEN_SYMBOL&&this.fail("advanceAfterBlockEnd: expected symbol token or explicit name to be passed"),t=this.nextToken().value),(n=this.nextToken())&&n.type===e.TOKEN_BLOCK_END?"-"===n.value.charAt(0)&&(this.dropLeadingWhitespace=!0):this.fail("expected block end in "+t+" statement"),n},h.advanceAfterVariableEnd=function(){var t=this.nextToken();t&&t.type===e.TOKEN_VARIABLE_END?this.dropLeadingWhitespace="-"===t.value.charAt(t.value.length-this.tokens.tags.VARIABLE_END.length-1):(this.pushToken(t),this.fail("expected variable end"))},h.parseFor=function(){var t,n,i=this.peekToken();if(this.skipSymbol("for")?(t=new s.For(i.lineno,i.colno),n="endfor"):this.skipSymbol("asyncEach")?(t=new s.AsyncEach(i.lineno,i.colno),n="endeach"):this.skipSymbol("asyncAll")?(t=new s.AsyncAll(i.lineno,i.colno),n="endall"):this.fail("parseFor: expected for{Async}",i.lineno,i.colno),t.name=this.parsePrimary(),t.name instanceof s.Symbol||this.fail("parseFor: variable name expected for loop"),this.peekToken().type===e.TOKEN_COMMA){var r=t.name;for(t.name=new s.Array(r.lineno,r.colno),t.name.addChild(r);this.skip(e.TOKEN_COMMA);){var o=this.parsePrimary();t.name.addChild(o)}}return this.skipSymbol("in")||this.fail('parseFor: expected "in" keyword for loop',i.lineno,i.colno),t.arr=this.parseExpression(),this.advanceAfterBlockEnd(i.value),t.body=this.parseUntilBlocks(n,"else"),this.skipSymbol("else")&&(this.advanceAfterBlockEnd("else"),t.else_=this.parseUntilBlocks(n)),this.advanceAfterBlockEnd(),t},h.parseMacro=function(){var t=this.peekToken();this.skipSymbol("macro")||this.fail("expected macro");var n=this.parsePrimary(!0),i=this.parseSignature(),r=new s.Macro(t.lineno,t.colno,n,i);return this.advanceAfterBlockEnd(t.value),r.body=this.parseUntilBlocks("endmacro"),this.advanceAfterBlockEnd(),r},h.parseCall=function(){var t=this.peekToken();this.skipSymbol("call")||this.fail("expected call");var n=this.parseSignature(!0)||new s.NodeList,i=this.parsePrimary();this.advanceAfterBlockEnd(t.value);var r=this.parseUntilBlocks("endcall");this.advanceAfterBlockEnd();var e=new s.Symbol(t.lineno,t.colno,"caller"),o=new s.Caller(t.lineno,t.colno,e,n,r),u=i.args.children;return u[u.length-1]instanceof s.KeywordArgs||u.push(new s.KeywordArgs),u[u.length-1].addChild(new s.Pair(t.lineno,t.colno,e,o)),new s.Output(t.lineno,t.colno,[i])},h.parseWithContext=function(){var t=this.peekToken(),n=null;return this.skipSymbol("with")?n=!0:this.skipSymbol("without")&&(n=!1),null!==n&&(this.skipSymbol("context")||this.fail("parseFrom: expected context after with/without",t.lineno,t.colno)),n},h.parseImport=function(){var t=this.peekToken();this.skipSymbol("import")||this.fail("parseImport: expected import",t.lineno,t.colno);var n=this.parseExpression();this.skipSymbol("as")||this.fail('parseImport: expected "as" keyword',t.lineno,t.colno);var i=this.parseExpression(),r=this.parseWithContext(),e=new s.Import(t.lineno,t.colno,n,i,r);return this.advanceAfterBlockEnd(t.value),e},h.parseFrom=function(){var t=this.peekToken();this.skipSymbol("from")||this.fail("parseFrom: expected from");var n=this.parseExpression();this.skipSymbol("import")||this.fail("parseFrom: expected import",t.lineno,t.colno);for(var i,r=new s.NodeList;;){var o=this.peekToken();if(o.type===e.TOKEN_BLOCK_END){r.children.length||this.fail("parseFrom: Expected at least one import name",t.lineno,t.colno),"-"===o.value.charAt(0)&&(this.dropLeadingWhitespace=!0),this.nextToken();break}r.children.length>0&&!this.skip(e.TOKEN_COMMA)&&this.fail("parseFrom: expected comma",t.lineno,t.colno);var u=this.parsePrimary();if("_"===u.value.charAt(0)&&this.fail("parseFrom: names starting with an underscore cannot be imported",u.lineno,u.colno),this.skipSymbol("as")){var h=this.parsePrimary();r.addChild(new s.Pair(u.lineno,u.colno,u,h))}else r.addChild(u);i=this.parseWithContext()}return new s.FromImport(t.lineno,t.colno,n,r,i)},h.parseBlock=function(){var t=this.peekToken();this.skipSymbol("block")||this.fail("parseBlock: expected block",t.lineno,t.colno);var n=new s.Block(t.lineno,t.colno);n.name=this.parsePrimary(),n.name instanceof s.Symbol||this.fail("parseBlock: variable name expected",t.lineno,t.colno),this.advanceAfterBlockEnd(t.value),n.body=this.parseUntilBlocks("endblock"),this.skipSymbol("endblock"),this.skipSymbol(n.name.value);var i=this.peekToken();return i||this.fail("parseBlock: expected endblock, got end of file"),this.advanceAfterBlockEnd(i.value),n},h.parseExtends=function(){var t=this.peekToken();this.skipSymbol("extends")||this.fail("parseTemplateRef: expected extends");var n=new s.Extends(t.lineno,t.colno);return n.template=this.parseExpression(),this.advanceAfterBlockEnd(t.value),n},h.parseInclude=function(){var t=this.peekToken();this.skipSymbol("include")||this.fail("parseInclude: expected include");var n=new s.Include(t.lineno,t.colno);return n.template=this.parseExpression(),this.skipSymbol("ignore")&&this.skipSymbol("missing")&&(n.ignoreMissing=!0),this.advanceAfterBlockEnd(t.value),n},h.parseIf=function(){var t,n=this.peekToken();this.skipSymbol("if")||this.skipSymbol("elif")||this.skipSymbol("elseif")?t=new s.If(n.lineno,n.colno):this.skipSymbol("ifAsync")?t=new s.IfAsync(n.lineno,n.colno):this.fail("parseIf: expected if, elif, or elseif",n.lineno,n.colno),t.cond=this.parseExpression(),this.advanceAfterBlockEnd(n.value),t.body=this.parseUntilBlocks("elif","elseif","else","endif");var i=this.peekToken();switch(i&&i.value){case"elseif":case"elif":t.else_=this.parseIf();break;case"else":this.advanceAfterBlockEnd(),t.else_=this.parseUntilBlocks("endif"),this.advanceAfterBlockEnd();break;case"endif":t.else_=null,this.advanceAfterBlockEnd();break;default:this.fail("parseIf: expected elif, else, or endif, got end of file")}return t},h.parseSet=function(){var t=this.peekToken();this.skipSymbol("set")||this.fail("parseSet: expected set",t.lineno,t.colno);for(var n,i=new s.Set(t.lineno,t.colno,[]);(n=this.parsePrimary())&&(i.targets.push(n),this.skip(e.TOKEN_COMMA)););return this.skipValue(e.TOKEN_OPERATOR,"=")?(i.value=this.parseExpression(),this.advanceAfterBlockEnd(t.value)):this.skip(e.TOKEN_BLOCK_END)?(i.body=new s.Capture(t.lineno,t.colno,this.parseUntilBlocks("endset")),i.value=null,this.advanceAfterBlockEnd()):this.fail("parseSet: expected = or block end in set tag",t.lineno,t.colno),i},h.parseSwitch=function(){var t=this.peekToken();this.skipSymbol("switch")||this.skipSymbol("case")||this.skipSymbol("default")||this.fail('parseSwitch: expected "switch," "case" or "default"',t.lineno,t.colno);var n=this.parseExpression();this.advanceAfterBlockEnd("switch"),this.parseUntilBlocks("case","default","endswitch");var i,r=this.peekToken(),e=[];do{this.skipSymbol("case");var o=this.parseExpression();this.advanceAfterBlockEnd("switch");var u=this.parseUntilBlocks("case","default","endswitch");e.push(new s.Case(r.line,r.col,o,u)),r=this.peekToken()}while(r&&"case"===r.value);switch(r.value){case"default":this.advanceAfterBlockEnd(),i=this.parseUntilBlocks("endswitch"),this.advanceAfterBlockEnd();break;case"endswitch":this.advanceAfterBlockEnd();break;default:this.fail('parseSwitch: expected "case," "default" or "endswitch," got EOF.')}return new s.Switch(t.lineno,t.colno,n,e,i)},h.parseStatement=function(){var t=this.peekToken();if(t.type!==e.TOKEN_SYMBOL&&this.fail("tag name expected",t.lineno,t.colno),this.breakOnBlocks&&-1!==u.indexOf(this.breakOnBlocks,t.value))return null;switch(t.value){case"raw":return this.parseRaw();case"verbatim":return this.parseRaw("verbatim");case"if":case"ifAsync":return this.parseIf();case"for":case"asyncEach":case"asyncAll":return this.parseFor();case"block":return this.parseBlock();case"extends":return this.parseExtends();case"include":return this.parseInclude();case"set":return this.parseSet();case"macro":return this.parseMacro();case"call":return this.parseCall();case"import":return this.parseImport();case"from":return this.parseFrom();case"filter":return this.parseFilterStatement();case"switch":return this.parseSwitch();default:if(this.extensions.length)for(var n=0;n<this.extensions.length;n++){var i=this.extensions[n];if(-1!==u.indexOf(i.tags||[],t.value))return i.parse(this,s,e)}this.fail("unknown block tag: "+t.value,t.lineno,t.colno)}},h.parseRaw=function(t){for(var n="end"+(t=t||"raw"),i=RegExp("([\\s\\S]*?){%\\s*("+t+"|"+n+")\\s*(?=%})%}"),r=1,e="",o=null,u=this.advanceAfterBlockEnd();(o=this.tokens.D(i))&&r>0;){var h=o[0],f=o[1],c=o[2];c===t?r+=1:c===n&&(r-=1),0===r?(e+=f,this.tokens.backN(h.length-f.length)):e+=h}return new s.Output(u.lineno,u.colno,[new s.TemplateData(u.lineno,u.colno,e)])},h.parsePostfix=function(t){for(var n,i=this.peekToken();i;){if(i.type===e.TOKEN_LEFT_PAREN)t=new s.FunCall(i.lineno,i.colno,t,this.parseSignature());else if(i.type===e.TOKEN_LEFT_BRACKET)(n=this.parseAggregate()).children.length>1&&this.fail("invalid index"),t=new s.LookupVal(i.lineno,i.colno,t,n.children[0]);else{if(i.type!==e.TOKEN_OPERATOR||"."!==i.value)break;this.nextToken();var r=this.nextToken();r.type!==e.TOKEN_SYMBOL&&this.fail("expected name as lookup value, got "+r.value,r.lineno,r.colno),n=new s.Literal(r.lineno,r.colno,r.value),t=new s.LookupVal(i.lineno,i.colno,t,n)}i=this.peekToken()}return t},h.parseExpression=function(){return this.parseInlineIf()},h.parseInlineIf=function(){var t=this.parseOr();if(this.skipSymbol("if")){var n=this.parseOr(),i=t;(t=new s.InlineIf(t.lineno,t.colno)).body=i,t.cond=n,this.skipSymbol("else")?t.else_=this.parseOr():t.else_=null}return t},h.parseOr=function(){for(var t=this.parseAnd();this.skipSymbol("or");){var n=this.parseAnd();t=new s.Or(t.lineno,t.colno,t,n)}return t},h.parseAnd=function(){for(var t=this.parseNot();this.skipSymbol("and");){var n=this.parseNot();t=new s.And(t.lineno,t.colno,t,n)}return t},h.parseNot=function(){var t=this.peekToken();return this.skipSymbol("not")?new s.Not(t.lineno,t.colno,this.parseNot()):this.parseIn()},h.parseIn=function(){for(var t=this.parseIs();;){var n=this.nextToken();if(!n)break;var i=n.type===e.TOKEN_SYMBOL&&"not"===n.value;if(i||this.pushToken(n),!this.skipSymbol("in")){i&&this.pushToken(n);break}var r=this.parseIs();t=new s.In(t.lineno,t.colno,t,r),i&&(t=new s.Not(t.lineno,t.colno,t))}return t},h.parseIs=function(){var t=this.parseCompare();if(this.skipSymbol("is")){var n=this.skipSymbol("not"),i=this.parseCompare();t=new s.Is(t.lineno,t.colno,t,i),n&&(t=new s.Not(t.lineno,t.colno,t))}return t},h.parseCompare=function(){for(var t=["==","===","!=","!==","<",">","<=",">="],n=this.parseConcat(),i=[];;){var r=this.nextToken();if(!r)break;if(-1===t.indexOf(r.value)){this.pushToken(r);break}i.push(new s.CompareOperand(r.lineno,r.colno,this.parseConcat(),r.value))}return i.length?new s.Compare(i[0].lineno,i[0].colno,n,i):n},h.parseConcat=function(){for(var t=this.parseAdd();this.skipValue(e.TOKEN_TILDE,"~");){var n=this.parseAdd();t=new s.Concat(t.lineno,t.colno,t,n)}return t},h.parseAdd=function(){for(var t=this.parseSub();this.skipValue(e.TOKEN_OPERATOR,"+");){var n=this.parseSub();t=new s.Add(t.lineno,t.colno,t,n)}return t},h.parseSub=function(){for(var t=this.parseMul();this.skipValue(e.TOKEN_OPERATOR,"-");){var n=this.parseMul();t=new s.Sub(t.lineno,t.colno,t,n)}return t},h.parseMul=function(){for(var t=this.parseDiv();this.skipValue(e.TOKEN_OPERATOR,"*");){var n=this.parseDiv();t=new s.Mul(t.lineno,t.colno,t,n)}return t},h.parseDiv=function(){for(var t=this.parseFloorDiv();this.skipValue(e.TOKEN_OPERATOR,"/");){var n=this.parseFloorDiv();t=new s.Div(t.lineno,t.colno,t,n)}return t},h.parseFloorDiv=function(){for(var t=this.parseMod();this.skipValue(e.TOKEN_OPERATOR,"//");){var n=this.parseMod();t=new s.FloorDiv(t.lineno,t.colno,t,n)}return t},h.parseMod=function(){for(var t=this.parsePow();this.skipValue(e.TOKEN_OPERATOR,"%");){var n=this.parsePow();t=new s.Mod(t.lineno,t.colno,t,n)}return t},h.parsePow=function(){for(var t=this.parseUnary();this.skipValue(e.TOKEN_OPERATOR,"**");){var n=this.parseUnary();t=new s.Pow(t.lineno,t.colno,t,n)}return t},h.parseUnary=function(t){var n,i=this.peekToken();return n=this.skipValue(e.TOKEN_OPERATOR,"-")?new s.Neg(i.lineno,i.colno,this.parseUnary(!0)):this.skipValue(e.TOKEN_OPERATOR,"+")?new s.Pos(i.lineno,i.colno,this.parseUnary(!0)):this.parsePrimary(),t||(n=this.parseFilter(n)),n},h.parsePrimary=function(t){var n,i=this.nextToken(),r=null;if(i?i.type===e.TOKEN_STRING?n=i.value:i.type===e.TOKEN_INT?n=parseInt(i.value,10):i.type===e.TOKEN_FLOAT?n=parseFloat(i.value):i.type===e.TOKEN_BOOLEAN?"true"===i.value?n=!0:"false"===i.value?n=!1:this.fail("invalid boolean: "+i.value,i.lineno,i.colno):i.type===e.TOKEN_NONE?n=null:i.type===e.TOKEN_REGEX&&(n=RegExp(i.value.body,i.value.flags)):this.fail("expected expression, got end of file"),void 0!==n?r=new s.Literal(i.lineno,i.colno,n):i.type===e.TOKEN_SYMBOL?r=new s.Symbol(i.lineno,i.colno,i.value):(this.pushToken(i),r=this.parseAggregate()),t||(r=this.parsePostfix(r)),r)return r;throw this.error("unexpected token: "+i.value,i.lineno,i.colno)},h.parseFilterName=function(){for(var t=this.expect(e.TOKEN_SYMBOL),n=t.value;this.skipValue(e.TOKEN_OPERATOR,".");)n+="."+this.expect(e.TOKEN_SYMBOL).value;return new s.Symbol(t.lineno,t.colno,n)},h.parseFilterArgs=function(t){return this.peekToken().type===e.TOKEN_LEFT_PAREN?this.parsePostfix(t).args.children:[]},h.parseFilter=function(t){for(;this.skip(e.TOKEN_PIPE);){var n=this.parseFilterName();t=new s.Filter(n.lineno,n.colno,n,new s.NodeList(n.lineno,n.colno,[t].concat(this.parseFilterArgs(t))))}return t},h.parseFilterStatement=function(){var t=this.peekToken();this.skipSymbol("filter")||this.fail("parseFilterStatement: expected filter");var n=this.parseFilterName(),i=this.parseFilterArgs(n);this.advanceAfterBlockEnd(t.value);var r=new s.Capture(n.lineno,n.colno,this.parseUntilBlocks("endfilter"));this.advanceAfterBlockEnd();var e=new s.Filter(n.lineno,n.colno,n,new s.NodeList(n.lineno,n.colno,[r].concat(i)));return new s.Output(n.lineno,n.colno,[e])},h.parseAggregate=function(){var t,n=this.nextToken();switch(n.type){case e.TOKEN_LEFT_PAREN:t=new s.Group(n.lineno,n.colno);break;case e.TOKEN_LEFT_BRACKET:t=new s.Array(n.lineno,n.colno);break;case e.TOKEN_LEFT_CURLY:t=new s.Dict(n.lineno,n.colno);break;default:return null}for(;;){var i=this.peekToken().type;if(i===e.TOKEN_RIGHT_PAREN||i===e.TOKEN_RIGHT_BRACKET||i===e.TOKEN_RIGHT_CURLY){this.nextToken();break}if(t.children.length>0&&(this.skip(e.TOKEN_COMMA)||this.fail("parseAggregate: expected comma after expression",n.lineno,n.colno)),t instanceof s.Dict){var r=this.parsePrimary();this.skip(e.TOKEN_COLON)||this.fail("parseAggregate: expected colon after dict key",n.lineno,n.colno);var o=this.parseExpression();t.addChild(new s.Pair(r.lineno,r.colno,r,o))}else{var u=this.parseExpression();t.addChild(u)}}return t},h.parseSignature=function(t,n){var i=this.peekToken();if(!n&&i.type!==e.TOKEN_LEFT_PAREN){if(t)return null;this.fail("expected arguments",i.lineno,i.colno)}i.type===e.TOKEN_LEFT_PAREN&&(i=this.nextToken());for(var r=new s.NodeList(i.lineno,i.colno),o=new s.KeywordArgs(i.lineno,i.colno),u=!1;;){if(i=this.peekToken(),!n&&i.type===e.TOKEN_RIGHT_PAREN){this.nextToken();break}if(n&&i.type===e.TOKEN_BLOCK_END)break;if(u&&!this.skip(e.TOKEN_COMMA))this.fail("parseSignature: expected comma after expression",i.lineno,i.colno);else{var h=this.parseExpression();this.skipValue(e.TOKEN_OPERATOR,"=")?o.addChild(new s.Pair(h.lineno,h.colno,h,this.parseExpression())):r.addChild(h)}u=!0}return o.children.length&&r.addChild(o),r},h.parseUntilBlocks=function(){for(var t=this.breakOnBlocks,n=arguments.length,i=Array(n),r=0;r<n;r++)i[r]=arguments[r];this.breakOnBlocks=i;var e=this.parse();return this.breakOnBlocks=t,e},h.parseNodes=function(){for(var t,n=[];t=this.nextToken();)if(t.type===e.TOKEN_DATA){var i=t.value,r=this.peekToken(),o=r&&r.value;this.dropLeadingWhitespace&&(i=i.replace(/^\s*/,""),this.dropLeadingWhitespace=!1),r&&(r.type===e.TOKEN_BLOCK_START&&"-"===o.charAt(o.length-1)||r.type===e.TOKEN_VARIABLE_START&&"-"===o.charAt(this.tokens.tags.VARIABLE_START.length)||r.type===e.TOKEN_COMMENT&&"-"===o.charAt(this.tokens.tags.COMMENT_START.length))&&(i=i.replace(/\s*$/,"")),n.push(new s.Output(t.lineno,t.colno,[new s.TemplateData(t.lineno,t.colno,i)]))}else if(t.type===e.TOKEN_BLOCK_START){this.dropLeadingWhitespace=!1;var u=this.parseStatement();if(!u)break;n.push(u)}else if(t.type===e.TOKEN_VARIABLE_START){var h=this.parseExpression();this.dropLeadingWhitespace=!1,this.advanceAfterVariableEnd(),n.push(new s.Output(t.lineno,t.colno,[h]))}else t.type===e.TOKEN_COMMENT?this.dropLeadingWhitespace="-"===t.value.charAt(t.value.length-this.tokens.tags.COMMENT_END.length-1):this.fail("Unexpected token at top-level: "+t.type,t.lineno,t.colno);return n},h.parse=function(){return new s.NodeList(0,0,this.parseNodes())},h.parseAsRoot=function(){return new s.Root(0,0,this.parseNodes())},o}(o);t.exports={parse:function(t,n,i){var r=new h(e.lex(t,i));return void 0!==n&&(r.extensions=n),r.parseAsRoot()},Parser:h}},function(t,n,i){"use strict";var r=i(0),e="{%",s="%}",o="{{",u="}}",h="{#",f="#}";function c(t,n,i,r){return{type:t,value:n,lineno:i,colno:r}}var a=function(){function t(t,n){this.str=t,this.index=0,this.len=t.length,this.lineno=0,this.colno=0,this.in_code=!1;var i=(n=n||{}).tags||{};this.tags={BLOCK_START:i.blockStart||e,BLOCK_END:i.blockEnd||s,VARIABLE_START:i.variableStart||o,VARIABLE_END:i.variableEnd||u,COMMENT_START:i.commentStart||h,COMMENT_END:i.commentEnd||f},this.trimBlocks=!!n.trimBlocks,this.lstripBlocks=!!n.lstripBlocks}var n=t.prototype;return n.nextToken=function(){var t,n=this.lineno,i=this.colno;if(this.in_code){var e=this.current();if(this.isFinished())return null;if('"'===e||"'"===e)return c("string",this.U(e),n,i);if(t=this.$(" \n\t\r "))return c("whitespace",t,n,i);if((t=this.G(this.tags.BLOCK_END))||(t=this.G("-"+this.tags.BLOCK_END)))return this.in_code=!1,this.trimBlocks&&("\n"===(e=this.current())?this.forward():"\r"===e&&(this.forward(),"\n"===(e=this.current())?this.forward():this.back())),c("block-end",t,n,i);if((t=this.G(this.tags.VARIABLE_END))||(t=this.G("-"+this.tags.VARIABLE_END)))return this.in_code=!1,c("variable-end",t,n,i);if("r"===e&&"/"===this.str.charAt(this.index+1)){this.forwardN(2);for(var s="";!this.isFinished();){if("/"===this.current()&&"\\"!==this.previous()){this.forward();break}s+=this.current(),this.forward()}for(var o=["g","i","m","y"],u="";!this.isFinished();){if(!(-1!==o.indexOf(this.current())))break;u+=this.current(),this.forward()}return c("regex",{body:s,flags:u},n,i)}if(-1!=="()[]{}%*-+~/#,:|.<>=!".indexOf(e)){this.forward();var h,f=["==","===","!=","!==","<=",">=","//","**"],a=e+this.current();switch(-1!==r.indexOf(f,a)&&(this.forward(),e=a,-1!==r.indexOf(f,a+this.current())&&(e=a+this.current(),this.forward())),e){case"(":h="left-paren";break;case")":h="right-paren";break;case"[":h="left-bracket";break;case"]":h="right-bracket";break;case"{":h="left-curly";break;case"}":h="right-curly";break;case",":h="comma";break;case":":h="colon";break;case"~":h="tilde";break;case"|":h="pipe";break;default:h="operator"}return c(h,e,n,i)}if((t=this.W(" \n\t\r ()[]{}%*-+~/#,:|.<>=!")).match(/^[-+]?[0-9]+$/))return"."===this.current()?(this.forward(),c("float",t+"."+this.$("0123456789"),n,i)):c("int",t,n,i);if(t.match(/^(true|false)$/))return c("boolean",t,n,i);if("none"===t)return c("none",t,n,i);if("null"===t)return c("none",t,n,i);if(t)return c("symbol",t,n,i);throw Error("Unexpected value while parsing: "+t)}var l,v=this.tags.BLOCK_START.charAt(0)+this.tags.VARIABLE_START.charAt(0)+this.tags.COMMENT_START.charAt(0)+this.tags.COMMENT_END.charAt(0);if(this.isFinished())return null;if((t=this.G(this.tags.BLOCK_START+"-"))||(t=this.G(this.tags.BLOCK_START)))return this.in_code=!0,c("block-start",t,n,i);if((t=this.G(this.tags.VARIABLE_START+"-"))||(t=this.G(this.tags.VARIABLE_START)))return this.in_code=!0,c("variable-start",t,n,i);t="";var p=!1;for(this.H(this.tags.COMMENT_START)&&(p=!0,t=this.G(this.tags.COMMENT_START));null!==(l=this.W(v));){if(t+=l,(this.H(this.tags.BLOCK_START)||this.H(this.tags.VARIABLE_START)||this.H(this.tags.COMMENT_START))&&!p){if(this.lstripBlocks&&this.H(this.tags.BLOCK_START)&&this.colno>0&&this.colno<=t.length){var d=t.slice(-this.colno);if(/^\s+$/.test(d)&&!(t=t.slice(0,-this.colno)).length)return this.nextToken()}break}if(this.H(this.tags.COMMENT_END)){if(!p)throw Error("unexpected end of comment");t+=this.G(this.tags.COMMENT_END);break}t+=this.current(),this.forward()}if(null===l&&p)throw Error("expected end of comment, got end of file");return c(p?"comment":"data",t,n,i)},n.U=function(t){this.forward();for(var n="";!this.isFinished()&&this.current()!==t;){var i=this.current();if("\\"===i){switch(this.forward(),this.current()){case"n":n+="\n";break;case"t":n+="\t";break;case"r":n+="\r";break;default:n+=this.current()}this.forward()}else n+=i,this.forward()}return this.forward(),n},n.H=function(t){return this.index+t.length>this.len?null:this.str.slice(this.index,this.index+t.length)===t},n.G=function(t){return this.H(t)?(this.forwardN(t.length),t):null},n.W=function(t){return this.J(!0,t||"")},n.$=function(t){return this.J(!1,t)},n.J=function(t,n){if(this.isFinished())return null;var i=n.indexOf(this.current());if(t&&-1===i||!t&&-1!==i){var r=this.current();this.forward();for(var e=n.indexOf(this.current());(t&&-1===e||!t&&-1!==e)&&!this.isFinished();)r+=this.current(),this.forward(),e=n.indexOf(this.current());return r}return""},n.D=function(t){var n=this.currentStr().match(t);return n?(this.forwardN(n[0].length),n):null},n.isFinished=function(){return this.index>=this.len},n.forwardN=function(t){for(var n=0;n<t;n++)this.forward()},n.forward=function(){this.index++,"\n"===this.previous()?(this.lineno++,this.colno=0):this.colno++},n.backN=function(t){for(var n=0;n<t;n++)this.back()},n.back=function(){if(this.index--,"\n"===this.current()){this.lineno--;var t=this.src.lastIndexOf("\n",this.index-1);this.colno=-1===t?this.index:this.index-t}else this.colno--},n.current=function(){return this.isFinished()?"":this.str.charAt(this.index)},n.currentStr=function(){return this.isFinished()?"":this.str.substr(this.index)},n.previous=function(){return this.str.charAt(this.index-1)},t}();t.exports={lex:function(t,n){return new a(t,n)},TOKEN_STRING:"string",TOKEN_WHITESPACE:"whitespace",TOKEN_DATA:"data",TOKEN_BLOCK_START:"block-start",TOKEN_BLOCK_END:"block-end",TOKEN_VARIABLE_START:"variable-start",TOKEN_VARIABLE_END:"variable-end",TOKEN_COMMENT:"comment",TOKEN_LEFT_PAREN:"left-paren",TOKEN_RIGHT_PAREN:"right-paren",TOKEN_LEFT_BRACKET:"left-bracket",TOKEN_RIGHT_BRACKET:"right-bracket",TOKEN_LEFT_CURLY:"left-curly",TOKEN_RIGHT_CURLY:"right-curly",TOKEN_OPERATOR:"operator",TOKEN_COMMA:"comma",TOKEN_COLON:"colon",TOKEN_TILDE:"tilde",TOKEN_PIPE:"pipe",TOKEN_INT:"int",TOKEN_FLOAT:"float",TOKEN_BOOLEAN:"boolean",TOKEN_NONE:"none",TOKEN_SYMBOL:"symbol",TOKEN_SPECIAL:"special",TOKEN_REGEX:"regex"}},function(t,n,i){"use strict";function r(t,n){return(r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,n){return t.__proto__=n,t})(t,n)}var e=i(6),s=i(19).PrecompiledLoader,o=function(t){var n,i;function e(n,i){var r;return(r=t.call(this)||this).baseURL=n||".",i=i||{},r.useCache=!!i.useCache,r.async=!!i.async,r}i=t,(n=e).prototype=Object.create(i.prototype),n.prototype.constructor=n,r(n,i);var s=e.prototype;return s.resolve=function(t,n){throw Error("relative templates not support in the browser yet")},s.getSource=function(t,n){var i,r=this,e=this.useCache;return this.fetch(this.baseURL+"/"+t,function(s,o){if(s)if(n)n(s.content);else{if(404!==s.status)throw s.content;i=null}else i={src:o,path:t,noCache:!e},r.emit("load",t,i),n&&n(null,i)}),i},s.fetch=function(t,n){if("undefined"==typeof window)throw Error("WebLoader can only by used in a browser");var i=new XMLHttpRequest,r=!0;i.onreadystatechange=function(){4===i.readyState&&r&&(r=!1,0===i.status||200===i.status?n(null,i.responseText):n({status:i.status,content:i.responseText}))},t+=(-1===t.indexOf("?")?"?":"&")+"s="+(new Date).getTime(),i.open("GET",t,this.async),i.send()},e}(e);t.exports={WebLoader:o,PrecompiledLoader:s}},function(t,n,i){"use strict";var r,e=i(0),s=i(7),o=s.Environment,u=s.Template,h=i(6),f=i(10),c=i(23),a=i(5),l=i(8),v=i(9),p=i(2),d=i(3),m=i(25);function w(t,n){var i;return n=n||{},e.isObject(t)&&(n=t,t=null),f.FileSystemLoader?i=new f.FileSystemLoader(t,{watch:n.watch,noCache:n.noCache}):f.WebLoader&&(i=new f.WebLoader(t,{useCache:n.web&&n.web.useCache,async:n.web&&n.web.async})),r=new o(i,n),n&&n.express&&r.express(n.express),r}t.exports={Environment:o,Template:u,Loader:h,FileSystemLoader:f.FileSystemLoader,NodeResolveLoader:f.NodeResolveLoader,PrecompiledLoader:f.PrecompiledLoader,WebLoader:f.WebLoader,compiler:a,parser:l,lexer:v,runtime:p,lib:e,nodes:d,installJinjaCompat:m,configure:w,reset:function(){r=void 0},compile:function(t,n,i,e){return r||w(),new u(t,n,i,e)},render:function(t,n,i){return r||w(),r.render(t,n,i)},renderString:function(t,n,i){return r||w(),r.renderString(t,n,i)},precompile:c?c.precompile:void 0,precompileString:c?c.precompileString:void 0}},function(t,n,i){"use strict";var r=i(13),e=[],s=[],o=r.makeRequestCallFromTimer(function(){if(s.length)throw s.shift()});function u(t){var n;(n=e.length?e.pop():new h).task=t,r(n)}function h(){this.task=null}t.exports=u,h.prototype.call=function(){try{this.task.call()}catch(t){u.onerror?u.onerror(t):(s.push(t),o())}finally{this.task=null,e[e.length]=this}}},function(t,n,i){"use strict";!function(n){function i(t){e.length||(r(),!0),e[e.length]=t}t.exports=i;var r,e=[],s=0,o=1024;function u(){for(;s<e.length;){var t=s;if(s+=1,e[t].call(),s>o){for(var n=0,i=e.length-s;n<i;n++)e[n]=e[n+s];e.length-=s,s=0}}e.length=0,s=0,!1}var h,f,c,a=void 0!==n?n:self,l=a.MutationObserver||a.WebKitMutationObserver;function v(t){return function(){var n=setTimeout(r,0),i=setInterval(r,50);function r(){clearTimeout(n),clearInterval(i),t()}}}"function"==typeof l?(h=1,f=new l(u),c=document.createTextNode(""),f.observe(c,{characterData:!0}),r=function(){h=-h,c.data=h}):r=v(u),i.requestFlush=r,i.makeRequestCallFromTimer=v}(i(14))},function(t,n){var i;i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(i=window)}t.exports=i},function(t,n,i){var r;!function(i){"use strict";var e=function(){var t=Array.prototype.slice.call(arguments);"function"==typeof t[0]&&t[0].apply(null,t.splice(1))},s=function(t){"function"==typeof setImmediate?setImmediate(t):"undefined"!=typeof process&&process.nextTick?process.nextTick(t):setTimeout(t,0)},o=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)},u=function(t,n,i){var r=i?s:e;if(n=n||function(){},!o(t))return n(Error("First argument to waterfall must be an array of functions"));if(!t.length)return n();var u=function(t){return function(i){if(i)n.apply(null,arguments),n=function(){};else{var e=Array.prototype.slice.call(arguments,1),s=t.next();s?e.push(u(s)):e.push(n),r(function(){t.apply(null,e)})}}};u(function(t){var n=function(i){var r=function(){return t.length&&t[i].apply(null,arguments),r.next()};return r.next=function(){return i<t.length-1?n(i+1):null},r};return n(0)}(t))()};void 0===(r=function(){return u}.apply(n,[]))||(t.exports=r)}()},function(t,n,i){"use strict";var r,e="object"==typeof Reflect?Reflect:null,s=e&&"function"==typeof e.apply?e.apply:function(t,n,i){return Function.prototype.apply.call(t,n,i)};r=e&&"function"==typeof e.ownKeys?e.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:function(t){return Object.getOwnPropertyNames(t)};var o=Number.isNaN||function(t){return t!=t};function u(){u.init.call(this)}t.exports=u,t.exports.once=function(t,n){return new Promise(function(i,r){function e(i){t.removeListener(n,s),r(i)}function s(){"function"==typeof t.removeListener&&t.removeListener("error",e),i([].slice.call(arguments))}m(t,n,s,{once:!0}),"error"!==n&&function(t,n,i){"function"==typeof t.on&&m(t,"error",n,i)}(t,e,{once:!0})})},u.EventEmitter=u,u.prototype.z=void 0,u.prototype.Y=0,u.prototype.q=void 0;var h=10;function f(t){if("function"!=typeof t)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}function c(t){return void 0===t.q?u.defaultMaxListeners:t.q}function a(t,n,i,r){var e,s,o;if(f(i),void 0===(s=t.z)?(s=t.z=Object.create(null),t.Y=0):(void 0!==s.newListener&&(t.emit("newListener",n,i.listener?i.listener:i),s=t.z),o=s[n]),void 0===o)o=s[n]=i,++t.Y;else if("function"==typeof o?o=s[n]=r?[i,o]:[o,i]:r?o.unshift(i):o.push(i),(e=c(t))>0&&o.length>e&&!o.warned){o.warned=!0;var u=Error("Possible EventEmitter memory leak detected. "+o.length+" "+n+" listeners added. Use emitter.setMaxListeners() to increase limit");u.name="MaxListenersExceededWarning",u.emitter=t,u.type=n,u.count=o.length,console&&console.warn&&console.warn(u)}return t}function l(t,n,i){var r={fired:!1,wrapFn:void 0,target:t,type:n,listener:i},e=function(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}.bind(r);return e.listener=i,r.wrapFn=e,e}function v(t,n,i){var r=t.z;if(void 0===r)return[];var e=r[n];return void 0===e?[]:"function"==typeof e?i?[e.listener||e]:[e]:i?function(t){for(var n=Array(t.length),i=0;i<n.length;++i)n[i]=t[i].listener||t[i];return n}(e):d(e,e.length)}function p(t){var n=this.z;if(void 0!==n){var i=n[t];if("function"==typeof i)return 1;if(void 0!==i)return i.length}return 0}function d(t,n){for(var i=Array(n),r=0;r<n;++r)i[r]=t[r];return i}function m(t,n,i,r){if("function"==typeof t.on)r.once?t.once(n,i):t.on(n,i);else{if("function"!=typeof t.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof t);t.addEventListener(n,function e(s){r.once&&t.removeEventListener(n,e),i(s)})}}Object.defineProperty(u,"defaultMaxListeners",{enumerable:!0,get:function(){return h},set:function(t){if("number"!=typeof t||t<0||o(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");h=t}}),u.init=function(){void 0!==this.z&&this.z!==Object.getPrototypeOf(this).z||(this.z=Object.create(null),this.Y=0),this.q=this.q||void 0},u.prototype.setMaxListeners=function(t){if("number"!=typeof t||t<0||o(t))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+t+".");return this.q=t,this},u.prototype.getMaxListeners=function(){return c(this)},u.prototype.emit=function(t){for(var n=[],i=1;i<arguments.length;i++)n.push(arguments[i]);var r="error"===t,e=this.z;if(void 0!==e)r=r&&void 0===e.error;else if(!r)return!1;if(r){var o;if(n.length>0&&(o=n[0]),o instanceof Error)throw o;var u=Error("Unhandled error."+(o?" ("+o.message+")":""));throw u.context=o,u}var h=e[t];if(void 0===h)return!1;if("function"==typeof h)s(h,this,n);else{var f=h.length,c=d(h,f);for(i=0;i<f;++i)s(c[i],this,n)}return!0},u.prototype.addListener=function(t,n){return a(this,t,n,!1)},u.prototype.on=u.prototype.addListener,u.prototype.prependListener=function(t,n){return a(this,t,n,!0)},u.prototype.once=function(t,n){return f(n),this.on(t,l(this,t,n)),this},u.prototype.prependOnceListener=function(t,n){return f(n),this.prependListener(t,l(this,t,n)),this},u.prototype.removeListener=function(t,n){var i,r,e,s,o;if(f(n),void 0===(r=this.z))return this;if(void 0===(i=r[t]))return this;if(i===n||i.listener===n)0==--this.Y?this.z=Object.create(null):(delete r[t],r.removeListener&&this.emit("removeListener",t,i.listener||n));else if("function"!=typeof i){for(e=-1,s=i.length-1;s>=0;s--)if(i[s]===n||i[s].listener===n){o=i[s].listener,e=s;break}if(e<0)return this;0===e?i.shift():function(t,n){for(;n+1<t.length;n++)t[n]=t[n+1];t.pop()}(i,e),1===i.length&&(r[t]=i[0]),void 0!==r.removeListener&&this.emit("removeListener",t,o||n)}return this},u.prototype.off=u.prototype.removeListener,u.prototype.removeAllListeners=function(t){var n,i,r;if(void 0===(i=this.z))return this;if(void 0===i.removeListener)return 0===arguments.length?(this.z=Object.create(null),this.Y=0):void 0!==i[t]&&(0==--this.Y?this.z=Object.create(null):delete i[t]),this;if(0===arguments.length){var e,s=Object.keys(i);for(r=0;r<s.length;++r)"removeListener"!==(e=s[r])&&this.removeAllListeners(e);return this.removeAllListeners("removeListener"),this.z=Object.create(null),this.Y=0,this}if("function"==typeof(n=i[t]))this.removeListener(t,n);else if(void 0!==n)for(r=n.length-1;r>=0;r--)this.removeListener(t,n[r]);return this},u.prototype.listeners=function(t){return v(this,t,!0)},u.prototype.rawListeners=function(t){return v(this,t,!1)},u.listenerCount=function(t,n){return"function"==typeof t.listenerCount?t.listenerCount(n):p.call(t,n)},u.prototype.listenerCount=p,u.prototype.eventNames=function(){return this.Y>0?r(this.z):[]}},function(t,n,i){"use strict";var r=i(3),e=i(0),s=0;function o(){return"hole_"+s++}function u(t,n){for(var i=null,r=0;r<t.length;r++){var e=n(t[r]);e!==t[r]&&(i||(i=t.slice()),i[r]=e)}return i||t}function h(t,n,i){if(!(t instanceof r.Node))return t;if(!i){var e=n(t);if(e&&e!==t)return e}if(t instanceof r.NodeList){var s=u(t.children,function(t){return h(t,n,i)});s!==t.children&&(t=new r[t.typename](t.lineno,t.colno,s))}else if(t instanceof r.CallExtension){var o=h(t.args,n,i),f=u(t.contentArgs,function(t){return h(t,n,i)});o===t.args&&f===t.contentArgs||(t=new r[t.typename](t.extName,t.prop,o,f))}else{var c=t.fields.map(function(n){return t[n]}),a=u(c,function(t){return h(t,n,i)});a!==c&&(t=new r[t.typename](t.lineno,t.colno),a.forEach(function(n,i){t[t.fields[i]]=n}))}return i&&n(t)||t}function f(t,n){return h(t,n,!0)}function c(t,n,i){var s=[],u=f(i?t[i]:t,function(t){var i;return t instanceof r.Block?t:((t instanceof r.Filter&&-1!==e.indexOf(n,t.name.value)||t instanceof r.CallExtensionAsync)&&(i=new r.Symbol(t.lineno,t.colno,o()),s.push(new r.FilterAsync(t.lineno,t.colno,t.name,t.args,i))),i)});return i?t[i]=u:t=u,s.length?(s.push(t),new r.NodeList(t.lineno,t.colno,s)):t}function a(t,n){return function(t){return f(t,function(t){if(t instanceof r.If||t instanceof r.For){var n=!1;if(h(t,function(t){if(t instanceof r.FilterAsync||t instanceof r.IfAsync||t instanceof r.AsyncEach||t instanceof r.AsyncAll||t instanceof r.CallExtensionAsync)return n=!0,t}),n){if(t instanceof r.If)return new r.IfAsync(t.lineno,t.colno,t.cond,t.body,t.else_);if(t instanceof r.For&&!(t instanceof r.AsyncAll))return new r.AsyncEach(t.lineno,t.colno,t.arr,t.name,t.body,t.else_)}}})}(function(t){return h(t,function(t){if(t instanceof r.Block){var n=!1,i=o();t.body=h(t.body,function(t){if(t instanceof r.FunCall&&"super"===t.name.value)return n=!0,new r.Symbol(t.lineno,t.colno,i)}),n&&t.body.children.unshift(new r.Super(0,0,t.name,new r.Symbol(0,0,i)))}})}(function(t,n){return f(t,function(t){return t instanceof r.Output?c(t,n):t instanceof r.Set?c(t,n,"value"):t instanceof r.For?c(t,n,"arr"):t instanceof r.If?c(t,n,"cond"):t instanceof r.CallExtension?c(t,n,"args"):void 0})}(t,n)))}t.exports={transform:function(t,n){return a(t,n||[])}}},function(t,n,i){"use strict";var r=i(0),e=i(2);function s(t,n){return null===t||void 0===t||!1===t?n:t}function o(t){return t!=t}function u(t){var n=(t=s(t,"")).toLowerCase();return e.copySafeness(t,n.charAt(0).toUpperCase()+n.slice(1))}function h(t){if(r.isString(t))return t.split("");if(r.isObject(t))return r.r(t||{}).map(function(t){return{key:t[0],value:t[1]}});if(r.isArray(t))return t;throw new r.TemplateError("list filter: type not iterable")}function f(t){return function(n,i,e){void 0===i&&(i="truthy");var s=this,o=s.env.getTest(i);return r.toArray(n).filter(function(n){return o.call(s,n,e)===t})}}function c(t){return e.copySafeness(t,t.replace(/^\s*|\s*$/g,""))}(n=t.exports={}).abs=Math.abs,n.batch=function(t,n,i){var r,e=[],s=[];for(r=0;r<t.length;r++)r%n==0&&s.length&&(e.push(s),s=[]),s.push(t[r]);if(s.length){if(i)for(r=s.length;r<n;r++)s.push(i);e.push(s)}return e},n.capitalize=u,n.center=function(t,n){if(t=s(t,""),n=n||80,t.length>=n)return t;var i=n-t.length,o=r.repeat(" ",i/2-i%2),u=r.repeat(" ",i/2);return e.copySafeness(t,o+t+u)},n.default=function(t,n,i){return i?t||n:void 0!==t?t:n},n.dictsort=function(t,n,i){if(!r.isObject(t))throw new r.TemplateError("dictsort filter: val must be an object");var e,s=[];for(var o in t)s.push([o,t[o]]);if(void 0===i||"key"===i)e=0;else{if("value"!==i)throw new r.TemplateError("dictsort filter: You can only sort by either key or value");e=1}return s.sort(function(t,i){var s=t[e],o=i[e];return n||(r.isString(s)&&(s=s.toUpperCase()),r.isString(o)&&(o=o.toUpperCase())),s>o?1:s===o?0:-1}),s},n.dump=function(t,n){return JSON.stringify(t,null,n)},n.escape=function(t){return t instanceof e.SafeString?t:(t=null===t||void 0===t?"":t,e.markSafe(r.escape(t.toString())))},n.safe=function(t){return t instanceof e.SafeString?t:(t=null===t||void 0===t?"":t,e.markSafe(t.toString()))},n.first=function(t){return t[0]},n.forceescape=function(t){return t=null===t||void 0===t?"":t,e.markSafe(r.escape(t.toString()))},n.groupby=function(t,n){return r.groupBy(t,n,this.env.opts.throwOnUndefined)},n.indent=function(t,n,i){if(""===(t=s(t,"")))return"";n=n||4;var o=t.split("\n"),u=r.repeat(" ",n),h=o.map(function(t,n){return 0!==n||i?""+u+t:t}).join("\n");return e.copySafeness(t,h)},n.join=function(t,n,i){return n=n||"",i&&(t=r.map(t,function(t){return t[i]})),t.join(n)},n.last=function(t){return t[t.length-1]},n.length=function(t){var n=s(t,"");return void 0!==n?"function"==typeof Map&&n instanceof Map||"function"==typeof Set&&n instanceof Set?n.size:!r.isObject(n)||n instanceof e.SafeString?n.length:r.keys(n).length:0},n.list=h,n.lower=function(t){return(t=s(t,"")).toLowerCase()},n.nl2br=function(t){return null===t||void 0===t?"":e.copySafeness(t,t.replace(/\r\n|\n/g,"<br />\n"))},n.random=function(t){return t[Math.floor(Math.random()*t.length)]},n.reject=f(!1),n.rejectattr=function(t,n){return t.filter(function(t){return!t[n]})},n.select=f(!0),n.selectattr=function(t,n){return t.filter(function(t){return!!t[n]})},n.replace=function(t,n,i,r){var s=t;if(n instanceof RegExp)return t.replace(n,i);void 0===r&&(r=-1);var o="";if("number"==typeof n)n=""+n;else if("string"!=typeof n)return t;if("number"==typeof t&&(t=""+t),"string"!=typeof t&&!(t instanceof e.SafeString))return t;if(""===n)return o=i+t.split("").join(i)+i,e.copySafeness(t,o);var u=t.indexOf(n);if(0===r||-1===u)return t;for(var h=0,f=0;u>-1&&(-1===r||f<r);)o+=t.substring(h,u)+i,h=u+n.length,f++,u=t.indexOf(n,h);return h<t.length&&(o+=t.substring(h)),e.copySafeness(s,o)},n.reverse=function(t){var n;return(n=r.isString(t)?h(t):r.map(t,function(t){return t})).reverse(),r.isString(t)?e.copySafeness(t,n.join("")):n},n.round=function(t,n,i){var r=Math.pow(10,n=n||0);return("ceil"===i?Math.ceil:"floor"===i?Math.floor:Math.round)(t*r)/r},n.slice=function(t,n,i){for(var r=Math.floor(t.length/n),e=t.length%n,s=[],o=0,u=0;u<n;u++){var h=o+u*r;u<e&&o++;var f=o+(u+1)*r,c=t.slice(h,f);i&&u>=e&&c.push(i),s.push(c)}return s},n.sum=function(t,n,i){return void 0===i&&(i=0),n&&(t=r.map(t,function(t){return t[n]})),i+t.reduce(function(t,n){return t+n},0)},n.sort=e.makeMacro(["value","reverse","case_sensitive","attribute"],[],function(t,n,i,e){var s=this,o=r.map(t,function(t){return t}),u=r.getAttrGetter(e);return o.sort(function(t,o){var h=e?u(t):t,f=e?u(o):o;if(s.env.opts.throwOnUndefined&&e&&(void 0===h||void 0===f))throw new TypeError('sort: attribute "'+e+'" resolved to undefined');return!i&&r.isString(h)&&r.isString(f)&&(h=h.toLowerCase(),f=f.toLowerCase()),h<f?n?1:-1:h>f?n?-1:1:0}),o}),n.string=function(t){return e.copySafeness(t,t)},n.striptags=function(t,n){var i=c((t=s(t,"")).replace(/<\/?([a-z][a-z0-9]*)\b[^>]*>|<!--[\s\S]*?-->/gi,"")),r="";return r=n?i.replace(/^ +| +$/gm,"").replace(/ +/g," ").replace(/(\r\n)/g,"\n").replace(/\n\n\n+/g,"\n\n"):i.replace(/\s+/gi," "),e.copySafeness(t,r)},n.title=function(t){var n=(t=s(t,"")).split(" ").map(function(t){return u(t)});return e.copySafeness(t,n.join(" "))},n.trim=c,n.truncate=function(t,n,i,r){var o=t;if(t=s(t,""),n=n||255,t.length<=n)return t;if(i)t=t.substring(0,n);else{var u=t.lastIndexOf(" ",n);-1===u&&(u=n),t=t.substring(0,u)}return t+=void 0!==r&&null!==r?r:"...",e.copySafeness(o,t)},n.upper=function(t){return(t=s(t,"")).toUpperCase()},n.urlencode=function(t){var n=encodeURIComponent;return r.isString(t)?n(t):(r.isArray(t)?t:r.r(t)).map(function(t){var i=t[0],r=t[1];return n(i)+"="+n(r)}).join("&")};var a=/^(?:\(|<|<)?(.*?)(?:\.|,|\)|\n|>)?$/,l=/^[\w.!#$%&'*+\-\/=?\^`{|}~]+@[a-z\d\-]+(\.[a-z\d\-]+)+$/i,v=/^https?:\/\/.*$/,p=/^www\./,d=/\.(?:org|net|com)(?:\:|\/|$)/;n.urlize=function(t,n,i){o(n)&&(n=1/0);var r=!0===i?' rel="nofollow"':"";return t.split(/(\s+)/).filter(function(t){return t&&t.length}).map(function(t){var i=t.match(a),e=i?i[1]:t,s=e.substr(0,n);return v.test(e)?'<a href="'+e+'"'+r+">"+s+"</a>":p.test(e)?'<a href="http://'+e+'"'+r+">"+s+"</a>":l.test(e)?'<a href="mailto:'+e+'">'+e+"</a>":d.test(e)?'<a href="http://'+e+'"'+r+">"+s+"</a>":t}).join("")},n.wordcount=function(t){var n=(t=s(t,""))?t.match(/\w+/g):null;return n?n.length:null},n.float=function(t,n){var i=parseFloat(t);return o(i)?n:i};var m=e.makeMacro(["value","default","base"],[],function(t,n,i){void 0===i&&(i=10);var r=parseInt(t,i);return o(r)?n:r});n.int=m,n.d=n.default,n.e=n.escape},function(t,n,i){"use strict";function r(t,n){return(r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,n){return t.__proto__=n,t})(t,n)}var e=function(t){var n,i;function e(n){var i;return(i=t.call(this)||this).precompiled=n||{},i}return i=t,(n=e).prototype=Object.create(i.prototype),n.prototype.constructor=n,r(n,i),e.prototype.getSource=function(t){return this.precompiled[t]?{src:{type:"code",obj:this.precompiled[t]},path:t}:null},e}(i(6));t.exports={PrecompiledLoader:e}},function(t,n,i){"use strict";var r=i(2).SafeString;n.callable=function(t){return"function"==typeof t},n.defined=function(t){return void 0!==t},n.divisibleby=function(t,n){return t%n==0},n.escaped=function(t){return t instanceof r},n.equalto=function(t,n){return t===n},n.eq=n.equalto,n.sameas=n.equalto,n.even=function(t){return t%2==0},n.falsy=function(t){return!t},n.ge=function(t,n){return t>=n},n.greaterthan=function(t,n){return t>n},n.gt=n.greaterthan,n.le=function(t,n){return t<=n},n.lessthan=function(t,n){return t<n},n.lt=n.lessthan,n.lower=function(t){return t.toLowerCase()===t},n.ne=function(t,n){return t!==n},n.null=function(t){return null===t},n.number=function(t){return"number"==typeof t},n.odd=function(t){return t%2==1},n.string=function(t){return"string"==typeof t},n.truthy=function(t){return!!t},n.undefined=function(t){return void 0===t},n.upper=function(t){return t.toUpperCase()===t},n.iterable=function(t){return"undefined"!=typeof Symbol?!!t[Symbol.iterator]:Array.isArray(t)||"string"==typeof t},n.mapping=function(t){var n=null!==t&&void 0!==t&&"object"==typeof t&&!Array.isArray(t);return Set?n&&!(t instanceof Set):n}},function(t,n,i){"use strict";t.exports=function(){return{range:function(t,n,i){void 0===n?(n=t,t=0,i=1):i||(i=1);var r=[];if(i>0)for(var e=t;e<n;e+=i)r.push(e);else for(var s=t;s>n;s+=i)r.push(s);return r},cycler:function(){return t=Array.prototype.slice.call(arguments),n=-1,{current:null,reset:function(){n=-1,this.current=null},next:function(){return++n>=t.length&&(n=0),this.current=t[n],this.current}};var t,n},joiner:function(t){return function(t){t=t||",";var n=!0;return function(){var i=n?"":t;return n=!1,i}}(t)}}}},function(t,n,i){var r=i(4);t.exports=function(t,n){function i(t,n){if(this.name=t,this.path=t,this.defaultEngine=n.defaultEngine,this.ext=r.extname(t),!this.ext&&!this.defaultEngine)throw Error("No default engine was specified and no extension was provided.");this.ext||(this.name+=this.ext=("."!==this.defaultEngine[0]?".":"")+this.defaultEngine)}return i.prototype.render=function(n,i){t.render(this.name,n,i)},n.set("view",i),n.set("nunjucksEnv",t),t}},function(t,n,i){"use strict";var r=i(4),e=i(4),s=i(0).t,o=i(5),u=i(7).Environment,h=i(24);function f(t,n){return!!Array.isArray(n)&&n.some(function(n){return t.match(n)})}function c(t,n){(n=n||{}).isString=!0;var i=n.env||new u([]),r=n.wrapper||h;if(!n.name)throw Error('the "name" option is required when compiling a string');return r([a(t,n.name,i)],n)}function a(t,n,i){var r,e=(i=i||new u([])).asyncFilters,h=i.extensionsList;n=n.replace(/\\/g,"/");try{r=o.compile(t,e,h,n,i.opts)}catch(t){throw s(n,!1,t)}return{name:n,template:r}}t.exports={precompile:function(t,n){var i=(n=n||{}).env||new u([]),s=n.wrapper||h;if(n.isString)return c(t,n);var o=r.existsSync(t)&&r.statSync(t),l=[],v=[];if(o.isFile())l.push(a(r.readFileSync(t,"utf-8"),n.name||t,i));else if(o.isDirectory()){!function i(s){r.readdirSync(s).forEach(function(o){var u=e.join(s,o),h=u.substr(e.join(t,"/").length),c=r.statSync(u);c&&c.isDirectory()?f(h+="/",n.exclude)||i(u):f(h,n.include)&&v.push(u)})}(t);for(var p=0;p<v.length;p++){var d=v[p].replace(e.join(t,"/"),"");try{l.push(a(r.readFileSync(v[p],"utf-8"),d,i))}catch(t){if(!n.force)throw t;console.error(t)}}}return s(l,n)},precompileString:c}},function(t,n,i){"use strict";t.exports=function(t,n){var i="";n=n||{};for(var r=0;r<t.length;r++){var e=JSON.stringify(t[r].name);i+="(function() {(window.nunjucksPrecompiled = window.nunjucksPrecompiled || {})["+e+"] = (function() {\n"+t[r].template+"\n})();\n",n.asFunction&&(i+="return function(ctx, cb) { return nunjucks.render("+e+", ctx, cb); }\n"),i+="})();\n"}return i}},function(t,n,i){t.exports=function(){"use strict";var t,n,i=this.runtime,r=this.lib,e=this.compiler.Compiler,s=this.parser.Parser,o=this.nodes,u=this.lexer,h=i.contextOrFrameLookup,f=i.memberLookup;function c(t){return{index:t.index,lineno:t.lineno,colno:t.colno}}if(e&&(t=e.prototype.assertType),s&&(n=s.prototype.parseAggregate),i.contextOrFrameLookup=function(t,n,i){var r=h.apply(this,arguments);if(void 0!==r)return r;switch(i){case"True":return!0;case"False":return!1;case"None":return null;default:return}},o&&e&&s){var a=o.Node.extend("Slice",{fields:["start","stop","step"],init:function(t,n,i,r,e){i=i||new o.Literal(t,n,null),r=r||new o.Literal(t,n,null),e=e||new o.Literal(t,n,1),this.parent(t,n,i,r,e)}});e.prototype.assertType=function(n){n instanceof a||t.apply(this,arguments)},e.prototype.compileSlice=function(t,n){this.w("("),this.L(t.start,n),this.w("),("),this.L(t.stop,n),this.w("),("),this.L(t.step,n),this.w(")")},s.prototype.parseAggregate=function(){var t=this,i=c(this.tokens);i.colno--,i.index--;try{return n.apply(this)}catch(n){var e=c(this.tokens),s=function(){return r.h(t.tokens,e),n};r.h(this.tokens,i),this.peeked=!1;var h=this.peekToken();if(h.type!==u.TOKEN_LEFT_BRACKET)throw s();this.nextToken();for(var f=new a(h.lineno,h.colno),l=!1,v=0;v<=f.fields.length&&!this.skip(u.TOKEN_RIGHT_BRACKET);v++){if(v===f.fields.length){if(!l)break;this.fail("parseSlice: too many slice components",h.lineno,h.colno)}this.skip(u.TOKEN_COLON)?l=!0:(f[f.fields[v]]=this.parseExpression(),l=this.skip(u.TOKEN_COLON)||l)}if(!l)throw s();return new o.Array(h.lineno,h.colno,[f])}}}function l(t,n){return Object.prototype.hasOwnProperty.call(t,n)}var v={pop:function(t){if(void 0===t)return this.pop();if(t>=this.length||t<0)throw Error("KeyError");return this.splice(t,1)},append:function(t){return this.push(t)},remove:function(t){for(var n=0;n<this.length;n++)if(this[n]===t)return this.splice(n,1);throw Error("ValueError")},count:function(t){for(var n=0,i=0;i<this.length;i++)this[i]===t&&n++;return n},index:function(t){var n;if(-1===(n=this.indexOf(t)))throw Error("ValueError");return n},find:function(t){return this.indexOf(t)},insert:function(t,n){return this.splice(t,0,n)}},p={items:function(){return r.r(this)},values:function(){return r.u(this)},keys:function(){return r.keys(this)},get:function(t,n){var i=this[t];return void 0===i&&(i=n),i},has_key:function(t){return l(this,t)},pop:function(t,n){var i=this[t];if(void 0===i&&void 0!==n)i=n;else{if(void 0===i)throw Error("KeyError");delete this[t]}return i},popitem:function(){var t=r.keys(this);if(!t.length)throw Error("KeyError");var n=t[0],i=this[n];return delete this[n],[n,i]},setdefault:function(t,n){return void 0===n&&(n=null),t in this||(this[t]=n),this[t]},update:function(t){return r.h(this,t),null}};return p.iteritems=p.items,p.itervalues=p.values,p.iterkeys=p.keys,i.memberLookup=function(t,n,e){return 4===arguments.length?function(t,n,r,e){t=t||[],null===n&&(n=e<0?t.length-1:0),null===r?r=e<0?-1:t.length:r<0&&(r+=t.length),n<0&&(n+=t.length);for(var s=[],o=n;!(o<0||o>t.length||e>0&&o>=r||e<0&&o<=r);o+=e)s.push(i.memberLookup(t,o));return s}.apply(this,arguments):(t=t||{},r.isArray(t)&&l(v,n)?v[n].bind(t):r.isObject(t)&&l(p,n)?p[n].bind(t):f.apply(this,arguments))},function(){i.contextOrFrameLookup=h,i.memberLookup=f,e&&(e.prototype.assertType=t),s&&(s.prototype.parseAggregate=n)}}}])}); +//# sourceMappingURL=nunjucks.min.js.map
\ No newline at end of file diff --git a/node_modules/nunjucks/browser/nunjucks.min.js.map b/node_modules/nunjucks/browser/nunjucks.min.js.map new file mode 100644 index 0000000..d817b40 --- /dev/null +++ b/node_modules/nunjucks/browser/nunjucks.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../webpack/universalModuleDefinition","../webpack/bootstrap c1b088ecfcbffa181d21","../nunjucks/src/lib.js","../nunjucks/src/object.js","../nunjucks/src/runtime.js","../nunjucks/src/nodes.js","../nunjucks/src/compiler.js","../nunjucks/src/loader.js","../nunjucks/src/environment.js","../nunjucks/src/parser.js","../nunjucks/src/lexer.js","../nunjucks/src/web-loaders.js","../nunjucks/index.js","../node_modules/asap/browser-asap.js","../node_modules/asap/browser-raw.js","../node_modules/webpack/buildin/global.js","../node_modules/a-sync-waterfall/index.js","../node_modules/webpack/node_modules/events/events.js","../nunjucks/src/transformer.js","../nunjucks/src/filters.js","../nunjucks/src/precompiled-loader.js","../nunjucks/src/tests.js","../nunjucks/src/globals.js","../nunjucks/src/express-app.js","../nunjucks/src/precompile.js","../nunjucks/src/precompile-global.js","../nunjucks/src/jinja-compat.js"],"names":["root","factory","exports","module","define","amd","self","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","ArrayProto","Array","ObjProto","escapeMap","&","\"","'","<",">","\\","escapeRegex","hasOwnProp","obj","k","lookupEscape","ch","TemplateError","message","lineno","colno","err","cause","getStack","Error","setPrototypeOf","writable","value","captureStackTrace","constructor","stackDescriptor","getOwnPropertyDescriptor","stack","firstUpdate","Update","path","msg","isFunction","toString","isArray","isString","isObject","getAttrGetter","attribute","attr","parts","split","item","_item","length","part","toArray","slice","indexOf","arr","searchElement","fromIndex","keys_","push","_prettifyError","withInternals","old","create","escape","val","replace","groupBy","throwOnUndefined","result","iterator","key","undefined","TypeError","without","array","contains","arguments","index","repeat","char_","str","each","func","context","forEach","map","results","asyncIter","iter","cb","next","asyncFor","keys","len","_entries","_values","_assign","extend","obj1","obj2","inOperator","_defineProperties","target","props","descriptor","arg","input","hint","prim","Symbol","toPrimitive","res","String","Number","_toPrimitive","_createClass","Constructor","protoProps","staticProps","_inheritsLoose","subClass","superClass","_setPrototypeOf","bind","__proto__","EventEmitter","require","lib","extendClass","cls","parent","prop","tmp","apply","subclass","_cls","Obj","init","EmitterObj","_EventEmitter","_this2","_this","arrayFrom","from","supportsIterators","Frame","isolateWrites","variables","topLevel","_proto","set","resolveUp","frame","resolve","id","lookup","forWrite","pop","isKeywordArgs","numArgs","args","SafeString","valueOf","makeMacro","argNames","kwargNames","_len","macroArgs","_key","argCount","kwargs","lastArg","getKeywordArgs","makeKeywordArgs","__keywords","suppressValue","autoescape","ensureDefined","memberLookup","_len2","_key2","contextOrFrameLookup","callWrap","handleError","error","copySafeness","dest","markSafe","type","ret","asyncEach","dimen","asyncAll","outputArr","finished","done","output","join","fromIterator","traverseAndCheck","Node","findAll","_Obj","_arguments","fields","field","NodeList","children","child","iterFields","_this3","Value","_Node","_Node2","_proto2","nodes","addChild","node","Root","Literal","Group","ArrayNode","Pair","Dict","LookupVal","If","IfAsync","InlineIf","For","AsyncEach","AsyncAll","Macro","Caller","Import","FromImport","_Node3","template","names","withContext","FunCall","Filter","FilterAsync","KeywordArgs","Block","Super","Extends","Include","Set","Switch","Case","Output","Capture","TemplateData","UnaryOp","BinOp","In","Is","Or","And","Not","Add","Concat","Sub","Mul","Div","FloorDiv","Mod","Pow","Neg","Pos","Compare","CompareOperand","CallExtension","ext","contentArgs","extName","__name","CallExtensionAsync","print","indent","inline","lines","line","process","stdout","write","nl","printNodes","typename","fieldName","JSON","stringify","_ref","parser","transformer","compareOps","==","===","!=","!==","<=",">=","Compiler","templateName","codebuf","lastId","buffer","bufferStack","_scopeClosers","inBlock","fail","_pushBuffer","_tmpid","_emit","_popBuffer","code","_emitLine","_emitLines","_emitFuncBegin","_emitFuncEnd","noReturn","_closeScopeLevels","_addScopeLevel","_withScopedSyntax","_makeCallback","_templateName","_compileChildren","compile","_compileAggregate","startChar","endChar","_compileExpression","assertType","types","some","t","compileCallExtension","async","_this4","compileCallExtensionAsync","compileNodeList","compileLiteral","compileSymbol","v","compileGroup","compileArray","compileDict","compilePair","compileInlineIf","cond","body","else_","compileIn","left","right","compileIs","_binOpEmitter","compileOr","compileAnd","compileAdd","compileConcat","compileSub","compileMul","compileDiv","compileMod","compileNot","compileFloorDiv","compilePow","compileNeg","compilePos","compileCompare","_this5","expr","ops","op","compileLookupVal","_getNodeName","compileFunCall","compileFilter","compileFilterAsync","symbol","compileKeywordArgs","compileSet","_this6","ids","targets","charAt","compileSwitch","_this7","cases","default","compileIf","_this8","compileIfAsync","_emitLoopBindings","_this9","b","compileFor","_this10","u","tid","_node$name$children","_compileAsyncLoop","parallel","_this11","asyncMethod","arrayLen","buf","compileAsyncEach","compileAsyncAll","_compileMacro","_this12","funcId","keepFrame","currFrame","realNames","concat","pair","bufferId","compileMacro","compileCaller","_compileGetTemplate","eagerCompile","ignoreMissing","parentTemplateId","parentName","eagerCompileArg","ignoreMissingArg","compileImport","compileFromImport","_this13","importedId","nameNode","alias","compileBlock","compileSuper","blockName","compileExtends","compileInclude","id2","compileTemplateData","compileCapture","_this14","compileOutput","_this15","compileRoot","_this16","blockNames","blocks","block","tmpFrame","_compile","getCode","src","asyncFilters","extensions","opts","processedSrc","preprocess","filter","f","reduce","processor","transform","parse","_EmitterObj","Loader","to","dirname","isRelative","filename","asap","waterfall","compiler","filters","_require","FileSystemLoader","WebLoader","PrecompiledLoader","tests","globals","_require2","globalRuntime","expressApp","callbackAsap","noopTmplSrc","env","runtime","e","Environment","loaders","dev","trimBlocks","lstripBlocks","window","nunjucksPrecompiled","unshift","_initLoaders","extensionsList","addFilter","_ref2","test","addTest","loader","cache","on","fullname","emit","source","invalidateCache","addExtension","extension","removeExtension","getExtension","hasExtension","addGlobal","getGlobal","wrapped","getFilter","getTest","resolveTemplate","getTemplate","syncResult","that","tmpl","raw","Template","handle","getSource","info","newTmpl","noCache","express","app","render","ctx","renderString","tasks","callback","forceAsync","Context","exported","addBlock","setVariable","getVariables","getBlock","getSuper","idx","blk","addExport","getExported","_Obj2","_proto3","tmplProps","tmplStr","compiled","parentFrame","didError","rootRenderFunc","Function","_getBlocks","lexer","Parser","tokens","peeked","breakOnBlocks","dropLeadingWhitespace","nextToken","withWhitespace","tok","TOKEN_WHITESPACE","peekToken","pushToken","skip","expect","skipValue","skipSymbol","TOKEN_SYMBOL","advanceAfterBlockEnd","TOKEN_BLOCK_END","advanceAfterVariableEnd","TOKEN_VARIABLE_END","tags","VARIABLE_END","parseFor","endBlock","forTok","parsePrimary","TOKEN_COMMA","parseExpression","parseUntilBlocks","parseMacro","macroTok","parseSignature","parseCall","callTok","callerArgs","macroCall","callerName","callerNode","parseWithContext","parseImport","importTok","parseFrom","fromTok","nextTok","parseBlock","tag","parseExtends","parseInclude","parseIf","parseSet","TOKEN_OPERATOR","parseSwitch","defaultCase","col","parseStatement","parseRaw","parseFilterStatement","tagName","endTagName","rawBlockRegex","RegExp","rawLevel","matches","begun","_extractRegex","all","pre","backN","parsePostfix","TOKEN_LEFT_PAREN","TOKEN_LEFT_BRACKET","parseAggregate","parseInlineIf","parseOr","condNode","bodyNode","parseAnd","node2","parseNot","parseIn","parseIs","invert","parseCompare","not","parseConcat","parseAdd","TOKEN_TILDE","parseSub","parseMul","parseDiv","parseFloorDiv","parseMod","parsePow","parseUnary","noFilters","parseFilter","noPostfix","TOKEN_STRING","TOKEN_INT","parseInt","TOKEN_FLOAT","parseFloat","TOKEN_BOOLEAN","TOKEN_NONE","TOKEN_REGEX","flags","parseFilterName","parseFilterArgs","TOKEN_PIPE","filterTok","TOKEN_LEFT_CURLY","TOKEN_RIGHT_PAREN","TOKEN_RIGHT_BRACKET","TOKEN_RIGHT_CURLY","TOKEN_COLON","tolerant","noParens","checkComma","prev","parseNodes","TOKEN_DATA","data","nextVal","TOKEN_BLOCK_START","TOKEN_VARIABLE_START","VARIABLE_START","TOKEN_COMMENT","COMMENT_START","COMMENT_END","parseAsRoot","lex","BLOCK_START","BLOCK_END","token","Tokenizer","in_code","blockStart","blockEnd","variableStart","variableEnd","commentStart","commentEnd","cur","current","isFinished","_parseString","_extract","_extractString","forward","back","forwardN","regexBody","previous","POSSIBLE_FLAGS","regexFlags","complexOps","curComplex","_extractUntil","whitespaceChars","match","beginChars","inComment","_matches","lastLine","delimiter","charString","_extractMatching","breakOnMatch","first","regex","currentStr","lastIndexOf","substr","TOKEN_SPECIAL","_Loader","baseURL","useCache","fetch","content","status","url","ajax","XMLHttpRequest","loading","onreadystatechange","readyState","responseText","Date","getTime","open","send","precompile","installJinjaCompat","configure","templatesPath","TemplateLoader","watch","web","NodeResolveLoader","reset","precompileString","rawAsap","freeTasks","pendingErrors","requestErrorThrow","makeRequestCallFromTimer","shift","task","rawTask","RawTask","onerror","global","queue","requestFlush","capacity","flush","currentIndex","scan","newLength","toggle","observer","scope","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","timeoutHandle","setTimeout","handleTimer","intervalHandle","setInterval","clearTimeout","clearInterval","document","createTextNode","observe","characterData","g","eval","__WEBPACK_AMD_DEFINE_RESULT__","executeSync","splice","executeAsync","fn","setImmediate","nextTick","_isArray","maybeArray","wrapIterator","makeCallback","makeIterator","ReflectOwnKeys","R","Reflect","ReflectApply","receiver","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","NumberIsNaN","isNaN","once","emitter","Promise","reject","errorListener","removeListener","resolver","eventTargetAgnosticAddListener","handler","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","_getMaxListeners","_addListener","prepend","events","existing","newListener","warned","w","count","console","warn","_onceWrap","state","fired","wrapFn","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","listenerCount","copy","addEventListener","wrapListener","removeEventListener","RangeError","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","listeners","addListener","prependListener","prependOnceListener","list","position","originalListener","spliceOne","off","removeAllListeners","rawListeners","eventNames","sym","gensym","mapCOW","walk","ast","depthFirst","astT","propsT","depthWalk","_liftFilters","walked","descNode","cps","convertStatements","blockNode","hasSuper","liftSuper","liftFilters","r","normalize","defaultValue","num","capitalize","toLowerCase","toUpperCase","getSelectOrReject","expectedTestResult","testName","secondArg","trim","abs","Math","batch","linecount","fillWith","center","width","spaces","post","def","bool","dictsort","caseSensitive","by","si","sort","t1","t2","a","dump","safe","forceescape","groupby","indentfirst","sp","del","last","Map","size","lower","nl2br","random","floor","rejectattr","select","selectattr","new_","maxCount","originalStr","nextIndex","pos","substring","reverse","round","precision","method","factor","pow","ceil","slices","sliceLength","extra","offset","start","end","currSlice","sum","reversed","caseSens","getAttribute","x","y","string","striptags","preserveLinebreaks","trimmedInput","title","words","word","truncate","killwords","orig","upper","urlencode","enc","encodeURIComponent","puncRe","emailRe","httpHttpsRe","wwwRe","tldRe","urlize","nofollow","Infinity","noFollowAttr","possibleUrl","shortUrl","wordcount","float","intFilter","base","int","compiledTemplates","precompiled","callable","defined","divisibleby","one","two","escaped","equalto","eq","sameas","even","falsy","ge","greaterthan","gt","le","lessthan","lt","ne","null","number","odd","truthy","iterable","mapping","range","stop","step","cycler","items","joiner","sep","NunjucksView","defaultEngine","extname","fs","precompileGlobal","patterns","pattern","wrapper","_precompile","pathStats","existsSync","statSync","templates","isFile","readFileSync","isDirectory","addTemplates","dir","readdirSync","file","filepath","subpath","stat","exclude","include","force","out","asFunction","orig_Compiler_assertType","orig_Parser_parseAggregate","orig_contextOrFrameLookup","orig_memberLookup","getTokensState","Slice","compileSlice","origState","errState","rethrow","isSlice","ARRAY_MEMBERS","append","element","remove","find","insert","elem","OBJECT_MEMBERS","values","has_key","popitem","setdefault","update","iteritems","itervalues","iterkeys"],"mappings":"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","file":"nunjucks.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"nunjucks\"] = factory();\n\telse\n\t\troot[\"nunjucks\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 11);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap c1b088ecfcbffa181d21","'use strict';\n\nvar ArrayProto = Array.prototype;\nvar ObjProto = Object.prototype;\n\nvar escapeMap = {\n '&': '&',\n '\"': '"',\n '\\'': ''',\n '<': '<',\n '>': '>',\n '\\\\': '\',\n};\n\nvar escapeRegex = /[&\"'<>\\\\]/g;\n\nvar exports = module.exports = {};\n\nfunction hasOwnProp(obj, k) {\n return ObjProto.hasOwnProperty.call(obj, k);\n}\n\nexports.hasOwnProp = hasOwnProp;\n\nfunction lookupEscape(ch) {\n return escapeMap[ch];\n}\n\nfunction _prettifyError(path, withInternals, err) {\n if (!err.Update) {\n // not one of ours, cast it\n err = new exports.TemplateError(err);\n }\n err.Update(path);\n\n // Unless they marked the dev flag, show them a trace from here\n if (!withInternals) {\n const old = err;\n err = new Error(old.message);\n err.name = old.name;\n }\n\n return err;\n}\n\nexports._prettifyError = _prettifyError;\n\nfunction TemplateError(message, lineno, colno) {\n var err;\n var cause;\n\n if (message instanceof Error) {\n cause = message;\n message = `${cause.name}: ${cause.message}`;\n }\n\n if (Object.setPrototypeOf) {\n err = new Error(message);\n Object.setPrototypeOf(err, TemplateError.prototype);\n } else {\n err = this;\n Object.defineProperty(err, 'message', {\n enumerable: false,\n writable: true,\n value: message,\n });\n }\n\n Object.defineProperty(err, 'name', {\n value: 'Template render error',\n });\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(err, this.constructor);\n }\n\n let getStack;\n\n if (cause) {\n const stackDescriptor = Object.getOwnPropertyDescriptor(cause, 'stack');\n getStack = stackDescriptor && (stackDescriptor.get || (() => stackDescriptor.value));\n if (!getStack) {\n getStack = () => cause.stack;\n }\n } else {\n const stack = (new Error(message)).stack;\n getStack = (() => stack);\n }\n\n Object.defineProperty(err, 'stack', {\n get: () => getStack.call(err),\n });\n\n Object.defineProperty(err, 'cause', {\n value: cause\n });\n\n err.lineno = lineno;\n err.colno = colno;\n err.firstUpdate = true;\n\n err.Update = function Update(path) {\n let msg = '(' + (path || 'unknown path') + ')';\n\n // only show lineno + colno next to path of template\n // where error occurred\n if (this.firstUpdate) {\n if (this.lineno && this.colno) {\n msg += ` [Line ${this.lineno}, Column ${this.colno}]`;\n } else if (this.lineno) {\n msg += ` [Line ${this.lineno}]`;\n }\n }\n\n msg += '\\n ';\n if (this.firstUpdate) {\n msg += ' ';\n }\n\n this.message = msg + (this.message || '');\n this.firstUpdate = false;\n return this;\n };\n\n return err;\n}\n\n\nif (Object.setPrototypeOf) {\n Object.setPrototypeOf(TemplateError.prototype, Error.prototype);\n} else {\n TemplateError.prototype = Object.create(Error.prototype, {\n constructor: {\n value: TemplateError,\n },\n });\n}\n\nexports.TemplateError = TemplateError;\n\nfunction escape(val) {\n return val.replace(escapeRegex, lookupEscape);\n}\n\nexports.escape = escape;\n\nfunction isFunction(obj) {\n return ObjProto.toString.call(obj) === '[object Function]';\n}\n\nexports.isFunction = isFunction;\n\nfunction isArray(obj) {\n return ObjProto.toString.call(obj) === '[object Array]';\n}\n\nexports.isArray = isArray;\n\nfunction isString(obj) {\n return ObjProto.toString.call(obj) === '[object String]';\n}\n\nexports.isString = isString;\n\nfunction isObject(obj) {\n return ObjProto.toString.call(obj) === '[object Object]';\n}\n\nexports.isObject = isObject;\n\n/**\n * @param {string|number} attr\n * @returns {(string|number)[]}\n * @private\n */\nfunction _prepareAttributeParts(attr) {\n if (!attr) {\n return [];\n }\n\n if (typeof attr === 'string') {\n return attr.split('.');\n }\n\n return [attr];\n}\n\n/**\n * @param {string} attribute Attribute value. Dots allowed.\n * @returns {function(Object): *}\n */\nfunction getAttrGetter(attribute) {\n const parts = _prepareAttributeParts(attribute);\n\n return function attrGetter(item) {\n let _item = item;\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n\n // If item is not an object, and we still got parts to handle, it means\n // that something goes wrong. Just roll out to undefined in that case.\n if (hasOwnProp(_item, part)) {\n _item = _item[part];\n } else {\n return undefined;\n }\n }\n\n return _item;\n };\n}\n\nexports.getAttrGetter = getAttrGetter;\n\nfunction groupBy(obj, val, throwOnUndefined) {\n const result = {};\n const iterator = isFunction(val) ? val : getAttrGetter(val);\n for (let i = 0; i < obj.length; i++) {\n const value = obj[i];\n const key = iterator(value, i);\n if (key === undefined && throwOnUndefined === true) {\n throw new TypeError(`groupby: attribute \"${val}\" resolved to undefined`);\n }\n (result[key] || (result[key] = [])).push(value);\n }\n return result;\n}\n\nexports.groupBy = groupBy;\n\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj);\n}\n\nexports.toArray = toArray;\n\nfunction without(array) {\n const result = [];\n if (!array) {\n return result;\n }\n const length = array.length;\n const contains = toArray(arguments).slice(1);\n let index = -1;\n\n while (++index < length) {\n if (indexOf(contains, array[index]) === -1) {\n result.push(array[index]);\n }\n }\n return result;\n}\n\nexports.without = without;\n\nfunction repeat(char_, n) {\n var str = '';\n for (let i = 0; i < n; i++) {\n str += char_;\n }\n return str;\n}\n\nexports.repeat = repeat;\n\nfunction each(obj, func, context) {\n if (obj == null) {\n return;\n }\n\n if (ArrayProto.forEach && obj.forEach === ArrayProto.forEach) {\n obj.forEach(func, context);\n } else if (obj.length === +obj.length) {\n for (let i = 0, l = obj.length; i < l; i++) {\n func.call(context, obj[i], i, obj);\n }\n }\n}\n\nexports.each = each;\n\nfunction map(obj, func) {\n var results = [];\n if (obj == null) {\n return results;\n }\n\n if (ArrayProto.map && obj.map === ArrayProto.map) {\n return obj.map(func);\n }\n\n for (let i = 0; i < obj.length; i++) {\n results[results.length] = func(obj[i], i);\n }\n\n if (obj.length === +obj.length) {\n results.length = obj.length;\n }\n\n return results;\n}\n\nexports.map = map;\n\nfunction asyncIter(arr, iter, cb) {\n let i = -1;\n\n function next() {\n i++;\n\n if (i < arr.length) {\n iter(arr[i], i, next, cb);\n } else {\n cb();\n }\n }\n\n next();\n}\n\nexports.asyncIter = asyncIter;\n\nfunction asyncFor(obj, iter, cb) {\n const keys = keys_(obj || {});\n const len = keys.length;\n let i = -1;\n\n function next() {\n i++;\n const k = keys[i];\n\n if (i < len) {\n iter(k, obj[k], i, len, next);\n } else {\n cb();\n }\n }\n\n next();\n}\n\nexports.asyncFor = asyncFor;\n\nfunction indexOf(arr, searchElement, fromIndex) {\n return Array.prototype.indexOf.call(arr || [], searchElement, fromIndex);\n}\n\nexports.indexOf = indexOf;\n\nfunction keys_(obj) {\n /* eslint-disable no-restricted-syntax */\n const arr = [];\n for (let k in obj) {\n if (hasOwnProp(obj, k)) {\n arr.push(k);\n }\n }\n return arr;\n}\n\nexports.keys = keys_;\n\nfunction _entries(obj) {\n return keys_(obj).map((k) => [k, obj[k]]);\n}\n\nexports._entries = _entries;\n\nfunction _values(obj) {\n return keys_(obj).map((k) => obj[k]);\n}\n\nexports._values = _values;\n\nfunction extend(obj1, obj2) {\n obj1 = obj1 || {};\n keys_(obj2).forEach(k => {\n obj1[k] = obj2[k];\n });\n return obj1;\n}\n\nexports._assign = exports.extend = extend;\n\nfunction inOperator(key, val) {\n if (isArray(val) || isString(val)) {\n return val.indexOf(key) !== -1;\n } else if (isObject(val)) {\n return key in val;\n }\n throw new Error('Cannot use \"in\" operator to search for \"'\n + key + '\" in unexpected types.');\n}\n\nexports.inOperator = inOperator;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/lib.js","'use strict';\n\n// A simple class system, more documentation to come\nconst EventEmitter = require('events');\nconst lib = require('./lib');\n\nfunction parentWrap(parent, prop) {\n if (typeof parent !== 'function' || typeof prop !== 'function') {\n return prop;\n }\n return function wrap() {\n // Save the current parent method\n const tmp = this.parent;\n\n // Set parent to the previous method, call, and restore\n this.parent = parent;\n const res = prop.apply(this, arguments);\n this.parent = tmp;\n\n return res;\n };\n}\n\nfunction extendClass(cls, name, props) {\n props = props || {};\n\n lib.keys(props).forEach(k => {\n props[k] = parentWrap(cls.prototype[k], props[k]);\n });\n\n class subclass extends cls {\n get typename() {\n return name;\n }\n }\n\n lib._assign(subclass.prototype, props);\n\n return subclass;\n}\n\nclass Obj {\n constructor(...args) {\n // Unfortunately necessary for backwards compatibility\n this.init(...args);\n }\n\n init() {}\n\n get typename() {\n return this.constructor.name;\n }\n\n static extend(name, props) {\n if (typeof name === 'object') {\n props = name;\n name = 'anonymous';\n }\n return extendClass(this, name, props);\n }\n}\n\nclass EmitterObj extends EventEmitter {\n constructor(...args) {\n super();\n // Unfortunately necessary for backwards compatibility\n this.init(...args);\n }\n\n init() {}\n\n get typename() {\n return this.constructor.name;\n }\n\n static extend(name, props) {\n if (typeof name === 'object') {\n props = name;\n name = 'anonymous';\n }\n return extendClass(this, name, props);\n }\n}\n\nmodule.exports = { Obj, EmitterObj };\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/object.js","'use strict';\n\nvar lib = require('./lib');\nvar arrayFrom = Array.from;\nvar supportsIterators = (\n typeof Symbol === 'function' && Symbol.iterator && typeof arrayFrom === 'function'\n);\n\n\n// Frames keep track of scoping both at compile-time and run-time so\n// we know how to access variables. Block tags can introduce special\n// variables, for example.\nclass Frame {\n constructor(parent, isolateWrites) {\n this.variables = Object.create(null);\n this.parent = parent;\n this.topLevel = false;\n // if this is true, writes (set) should never propagate upwards past\n // this frame to its parent (though reads may).\n this.isolateWrites = isolateWrites;\n }\n\n set(name, val, resolveUp) {\n // Allow variables with dots by automatically creating the\n // nested structure\n var parts = name.split('.');\n var obj = this.variables;\n var frame = this;\n\n if (resolveUp) {\n if ((frame = this.resolve(parts[0], true))) {\n frame.set(name, val);\n return;\n }\n }\n\n for (let i = 0; i < parts.length - 1; i++) {\n const id = parts[i];\n\n if (!obj[id]) {\n obj[id] = {};\n }\n obj = obj[id];\n }\n\n obj[parts[parts.length - 1]] = val;\n }\n\n get(name) {\n var val = this.variables[name];\n if (val !== undefined) {\n return val;\n }\n return null;\n }\n\n lookup(name) {\n var p = this.parent;\n var val = this.variables[name];\n if (val !== undefined) {\n return val;\n }\n return p && p.lookup(name);\n }\n\n resolve(name, forWrite) {\n var p = (forWrite && this.isolateWrites) ? undefined : this.parent;\n var val = this.variables[name];\n if (val !== undefined) {\n return this;\n }\n return p && p.resolve(name);\n }\n\n push(isolateWrites) {\n return new Frame(this, isolateWrites);\n }\n\n pop() {\n return this.parent;\n }\n}\n\nfunction makeMacro(argNames, kwargNames, func) {\n return function macro(...macroArgs) {\n var argCount = numArgs(macroArgs);\n var args;\n var kwargs = getKeywordArgs(macroArgs);\n\n if (argCount > argNames.length) {\n args = macroArgs.slice(0, argNames.length);\n\n // Positional arguments that should be passed in as\n // keyword arguments (essentially default values)\n macroArgs.slice(args.length, argCount).forEach((val, i) => {\n if (i < kwargNames.length) {\n kwargs[kwargNames[i]] = val;\n }\n });\n args.push(kwargs);\n } else if (argCount < argNames.length) {\n args = macroArgs.slice(0, argCount);\n\n for (let i = argCount; i < argNames.length; i++) {\n const arg = argNames[i];\n\n // Keyword arguments that should be passed as\n // positional arguments, i.e. the caller explicitly\n // used the name of a positional arg\n args.push(kwargs[arg]);\n delete kwargs[arg];\n }\n args.push(kwargs);\n } else {\n args = macroArgs;\n }\n\n return func.apply(this, args);\n };\n}\n\nfunction makeKeywordArgs(obj) {\n obj.__keywords = true;\n return obj;\n}\n\nfunction isKeywordArgs(obj) {\n return obj && Object.prototype.hasOwnProperty.call(obj, '__keywords');\n}\n\nfunction getKeywordArgs(args) {\n var len = args.length;\n if (len) {\n const lastArg = args[len - 1];\n if (isKeywordArgs(lastArg)) {\n return lastArg;\n }\n }\n return {};\n}\n\nfunction numArgs(args) {\n var len = args.length;\n if (len === 0) {\n return 0;\n }\n\n const lastArg = args[len - 1];\n if (isKeywordArgs(lastArg)) {\n return len - 1;\n } else {\n return len;\n }\n}\n\n// A SafeString object indicates that the string should not be\n// autoescaped. This happens magically because autoescaping only\n// occurs on primitive string objects.\nfunction SafeString(val) {\n if (typeof val !== 'string') {\n return val;\n }\n\n this.val = val;\n this.length = val.length;\n}\n\nSafeString.prototype = Object.create(String.prototype, {\n length: {\n writable: true,\n configurable: true,\n value: 0\n }\n});\nSafeString.prototype.valueOf = function valueOf() {\n return this.val;\n};\nSafeString.prototype.toString = function toString() {\n return this.val;\n};\n\nfunction copySafeness(dest, target) {\n if (dest instanceof SafeString) {\n return new SafeString(target);\n }\n return target.toString();\n}\n\nfunction markSafe(val) {\n var type = typeof val;\n\n if (type === 'string') {\n return new SafeString(val);\n } else if (type !== 'function') {\n return val;\n } else {\n return function wrapSafe(args) {\n var ret = val.apply(this, arguments);\n\n if (typeof ret === 'string') {\n return new SafeString(ret);\n }\n\n return ret;\n };\n }\n}\n\nfunction suppressValue(val, autoescape) {\n val = (val !== undefined && val !== null) ? val : '';\n\n if (autoescape && !(val instanceof SafeString)) {\n val = lib.escape(val.toString());\n }\n\n return val;\n}\n\nfunction ensureDefined(val, lineno, colno) {\n if (val === null || val === undefined) {\n throw new lib.TemplateError(\n 'attempted to output null or undefined value',\n lineno + 1,\n colno + 1\n );\n }\n return val;\n}\n\nfunction memberLookup(obj, val) {\n if (obj === undefined || obj === null) {\n return undefined;\n }\n\n if (typeof obj[val] === 'function') {\n return (...args) => obj[val].apply(obj, args);\n }\n\n return obj[val];\n}\n\nfunction callWrap(obj, name, context, args) {\n if (!obj) {\n throw new Error('Unable to call `' + name + '`, which is undefined or falsey');\n } else if (typeof obj !== 'function') {\n throw new Error('Unable to call `' + name + '`, which is not a function');\n }\n\n return obj.apply(context, args);\n}\n\nfunction contextOrFrameLookup(context, frame, name) {\n var val = frame.lookup(name);\n return (val !== undefined) ?\n val :\n context.lookup(name);\n}\n\nfunction handleError(error, lineno, colno) {\n if (error.lineno) {\n return error;\n } else {\n return new lib.TemplateError(error, lineno, colno);\n }\n}\n\nfunction asyncEach(arr, dimen, iter, cb) {\n if (lib.isArray(arr)) {\n const len = arr.length;\n\n lib.asyncIter(arr, function iterCallback(item, i, next) {\n switch (dimen) {\n case 1:\n iter(item, i, len, next);\n break;\n case 2:\n iter(item[0], item[1], i, len, next);\n break;\n case 3:\n iter(item[0], item[1], item[2], i, len, next);\n break;\n default:\n item.push(i, len, next);\n iter.apply(this, item);\n }\n }, cb);\n } else {\n lib.asyncFor(arr, function iterCallback(key, val, i, len, next) {\n iter(key, val, i, len, next);\n }, cb);\n }\n}\n\nfunction asyncAll(arr, dimen, func, cb) {\n var finished = 0;\n var len;\n var outputArr;\n\n function done(i, output) {\n finished++;\n outputArr[i] = output;\n\n if (finished === len) {\n cb(null, outputArr.join(''));\n }\n }\n\n if (lib.isArray(arr)) {\n len = arr.length;\n outputArr = new Array(len);\n\n if (len === 0) {\n cb(null, '');\n } else {\n for (let i = 0; i < arr.length; i++) {\n const item = arr[i];\n\n switch (dimen) {\n case 1:\n func(item, i, len, done);\n break;\n case 2:\n func(item[0], item[1], i, len, done);\n break;\n case 3:\n func(item[0], item[1], item[2], i, len, done);\n break;\n default:\n item.push(i, len, done);\n func.apply(this, item);\n }\n }\n }\n } else {\n const keys = lib.keys(arr || {});\n len = keys.length;\n outputArr = new Array(len);\n\n if (len === 0) {\n cb(null, '');\n } else {\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n func(k, arr[k], i, len, done);\n }\n }\n }\n}\n\nfunction fromIterator(arr) {\n if (typeof arr !== 'object' || arr === null || lib.isArray(arr)) {\n return arr;\n } else if (supportsIterators && Symbol.iterator in arr) {\n return arrayFrom(arr);\n } else {\n return arr;\n }\n}\n\nmodule.exports = {\n Frame: Frame,\n makeMacro: makeMacro,\n makeKeywordArgs: makeKeywordArgs,\n numArgs: numArgs,\n suppressValue: suppressValue,\n ensureDefined: ensureDefined,\n memberLookup: memberLookup,\n contextOrFrameLookup: contextOrFrameLookup,\n callWrap: callWrap,\n handleError: handleError,\n isArray: lib.isArray,\n keys: lib.keys,\n SafeString: SafeString,\n copySafeness: copySafeness,\n markSafe: markSafe,\n asyncEach: asyncEach,\n asyncAll: asyncAll,\n inOperator: lib.inOperator,\n fromIterator: fromIterator\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/runtime.js","'use strict';\n\nconst {Obj} = require('./object');\n\nfunction traverseAndCheck(obj, type, results) {\n if (obj instanceof type) {\n results.push(obj);\n }\n\n if (obj instanceof Node) {\n obj.findAll(type, results);\n }\n}\n\nclass Node extends Obj {\n init(lineno, colno, ...args) {\n this.lineno = lineno;\n this.colno = colno;\n\n this.fields.forEach((field, i) => {\n // The first two args are line/col numbers, so offset by 2\n var val = arguments[i + 2];\n\n // Fields should never be undefined, but null. It makes\n // testing easier to normalize values.\n if (val === undefined) {\n val = null;\n }\n\n this[field] = val;\n });\n }\n\n findAll(type, results) {\n results = results || [];\n\n if (this instanceof NodeList) {\n this.children.forEach(child => traverseAndCheck(child, type, results));\n } else {\n this.fields.forEach(field => traverseAndCheck(this[field], type, results));\n }\n\n return results;\n }\n\n iterFields(func) {\n this.fields.forEach((field) => {\n func(this[field], field);\n });\n }\n}\n\n// Abstract nodes\nclass Value extends Node {\n get typename() { return 'Value'; }\n get fields() {\n return ['value'];\n }\n}\n\n// Concrete nodes\nclass NodeList extends Node {\n get typename() { return 'NodeList'; }\n get fields() { return ['children']; }\n\n init(lineno, colno, nodes) {\n super.init(lineno, colno, nodes || []);\n }\n\n addChild(node) {\n this.children.push(node);\n }\n}\n\nconst Root = NodeList.extend('Root');\nconst Literal = Value.extend('Literal');\nconst Symbol = Value.extend('Symbol');\nconst Group = NodeList.extend('Group');\nconst ArrayNode = NodeList.extend('Array');\nconst Pair = Node.extend('Pair', { fields: ['key', 'value'] });\nconst Dict = NodeList.extend('Dict');\nconst LookupVal = Node.extend('LookupVal', { fields: ['target', 'val'] });\nconst If = Node.extend('If', { fields: ['cond', 'body', 'else_'] });\nconst IfAsync = If.extend('IfAsync');\nconst InlineIf = Node.extend('InlineIf', { fields: ['cond', 'body', 'else_'] });\nconst For = Node.extend('For', { fields: ['arr', 'name', 'body', 'else_'] });\nconst AsyncEach = For.extend('AsyncEach');\nconst AsyncAll = For.extend('AsyncAll');\nconst Macro = Node.extend('Macro', { fields: ['name', 'args', 'body'] });\nconst Caller = Macro.extend('Caller');\nconst Import = Node.extend('Import', { fields: ['template', 'target', 'withContext'] });\n\nclass FromImport extends Node {\n get typename() { return 'FromImport'; }\n get fields() { return ['template', 'names', 'withContext']; }\n\n init(lineno, colno, template, names, withContext) {\n super.init(lineno, colno, template, names || new NodeList(), withContext);\n }\n}\n\nconst FunCall = Node.extend('FunCall', { fields: ['name', 'args'] });\nconst Filter = FunCall.extend('Filter');\nconst FilterAsync = Filter.extend('FilterAsync', { fields: ['name', 'args', 'symbol'] });\nconst KeywordArgs = Dict.extend('KeywordArgs');\nconst Block = Node.extend('Block', { fields: ['name', 'body'] });\nconst Super = Node.extend('Super', { fields: ['blockName', 'symbol'] });\nconst TemplateRef = Node.extend('TemplateRef', { fields: ['template'] });\nconst Extends = TemplateRef.extend('Extends');\nconst Include = Node.extend('Include', { fields: ['template', 'ignoreMissing'] });\nconst Set = Node.extend('Set', { fields: ['targets', 'value'] });\nconst Switch = Node.extend('Switch', { fields: ['expr', 'cases', 'default'] });\nconst Case = Node.extend('Case', { fields: ['cond', 'body'] });\nconst Output = NodeList.extend('Output');\nconst Capture = Node.extend('Capture', { fields: ['body'] });\nconst TemplateData = Literal.extend('TemplateData');\nconst UnaryOp = Node.extend('UnaryOp', { fields: ['target'] });\nconst BinOp = Node.extend('BinOp', { fields: ['left', 'right'] });\nconst In = BinOp.extend('In');\nconst Is = BinOp.extend('Is');\nconst Or = BinOp.extend('Or');\nconst And = BinOp.extend('And');\nconst Not = UnaryOp.extend('Not');\nconst Add = BinOp.extend('Add');\nconst Concat = BinOp.extend('Concat');\nconst Sub = BinOp.extend('Sub');\nconst Mul = BinOp.extend('Mul');\nconst Div = BinOp.extend('Div');\nconst FloorDiv = BinOp.extend('FloorDiv');\nconst Mod = BinOp.extend('Mod');\nconst Pow = BinOp.extend('Pow');\nconst Neg = UnaryOp.extend('Neg');\nconst Pos = UnaryOp.extend('Pos');\nconst Compare = Node.extend('Compare', { fields: ['expr', 'ops'] });\nconst CompareOperand = Node.extend('CompareOperand', { fields: ['expr', 'type'] });\nconst CallExtension = Node.extend('CallExtension', {\n init(ext, prop, args, contentArgs) {\n this.parent();\n this.extName = ext.__name || ext;\n this.prop = prop;\n this.args = args || new NodeList();\n this.contentArgs = contentArgs || [];\n this.autoescape = ext.autoescape;\n },\n fields: ['extName', 'prop', 'args', 'contentArgs']\n});\nconst CallExtensionAsync = CallExtension.extend('CallExtensionAsync');\n\n// This is hacky, but this is just a debugging function anyway\nfunction print(str, indent, inline) {\n var lines = str.split('\\n');\n\n lines.forEach((line, i) => {\n if (line && ((inline && i > 0) || !inline)) {\n process.stdout.write((' ').repeat(indent));\n }\n const nl = (i === lines.length - 1) ? '' : '\\n';\n process.stdout.write(`${line}${nl}`);\n });\n}\n\n// Print the AST in a nicely formatted tree format for debuggin\nfunction printNodes(node, indent) {\n indent = indent || 0;\n\n print(node.typename + ': ', indent);\n\n if (node instanceof NodeList) {\n print('\\n');\n node.children.forEach((n) => {\n printNodes(n, indent + 2);\n });\n } else if (node instanceof CallExtension) {\n print(`${node.extName}.${node.prop}\\n`);\n\n if (node.args) {\n printNodes(node.args, indent + 2);\n }\n\n if (node.contentArgs) {\n node.contentArgs.forEach((n) => {\n printNodes(n, indent + 2);\n });\n }\n } else {\n let nodes = [];\n let props = null;\n\n node.iterFields((val, fieldName) => {\n if (val instanceof Node) {\n nodes.push([fieldName, val]);\n } else {\n props = props || {};\n props[fieldName] = val;\n }\n });\n\n if (props) {\n print(JSON.stringify(props, null, 2) + '\\n', null, true);\n } else {\n print('\\n');\n }\n\n nodes.forEach(([fieldName, n]) => {\n print(`[${fieldName}] =>`, indent + 2);\n printNodes(n, indent + 4);\n });\n }\n}\n\nmodule.exports = {\n Node: Node,\n Root: Root,\n NodeList: NodeList,\n Value: Value,\n Literal: Literal,\n Symbol: Symbol,\n Group: Group,\n Array: ArrayNode,\n Pair: Pair,\n Dict: Dict,\n Output: Output,\n Capture: Capture,\n TemplateData: TemplateData,\n If: If,\n IfAsync: IfAsync,\n InlineIf: InlineIf,\n For: For,\n AsyncEach: AsyncEach,\n AsyncAll: AsyncAll,\n Macro: Macro,\n Caller: Caller,\n Import: Import,\n FromImport: FromImport,\n FunCall: FunCall,\n Filter: Filter,\n FilterAsync: FilterAsync,\n KeywordArgs: KeywordArgs,\n Block: Block,\n Super: Super,\n Extends: Extends,\n Include: Include,\n Set: Set,\n Switch: Switch,\n Case: Case,\n LookupVal: LookupVal,\n BinOp: BinOp,\n In: In,\n Is: Is,\n Or: Or,\n And: And,\n Not: Not,\n Add: Add,\n Concat: Concat,\n Sub: Sub,\n Mul: Mul,\n Div: Div,\n FloorDiv: FloorDiv,\n Mod: Mod,\n Pow: Pow,\n Neg: Neg,\n Pos: Pos,\n Compare: Compare,\n CompareOperand: CompareOperand,\n\n CallExtension: CallExtension,\n CallExtensionAsync: CallExtensionAsync,\n\n printNodes: printNodes\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/nodes.js","'use strict';\n\nconst parser = require('./parser');\nconst transformer = require('./transformer');\nconst nodes = require('./nodes');\nconst {TemplateError} = require('./lib');\nconst {Frame} = require('./runtime');\nconst {Obj} = require('./object');\n\n// These are all the same for now, but shouldn't be passed straight\n// through\nconst compareOps = {\n '==': '==',\n '===': '===',\n '!=': '!=',\n '!==': '!==',\n '<': '<',\n '>': '>',\n '<=': '<=',\n '>=': '>='\n};\n\nclass Compiler extends Obj {\n init(templateName, throwOnUndefined) {\n this.templateName = templateName;\n this.codebuf = [];\n this.lastId = 0;\n this.buffer = null;\n this.bufferStack = [];\n this._scopeClosers = '';\n this.inBlock = false;\n this.throwOnUndefined = throwOnUndefined;\n }\n\n fail(msg, lineno, colno) {\n if (lineno !== undefined) {\n lineno += 1;\n }\n if (colno !== undefined) {\n colno += 1;\n }\n\n throw new TemplateError(msg, lineno, colno);\n }\n\n _pushBuffer() {\n const id = this._tmpid();\n this.bufferStack.push(this.buffer);\n this.buffer = id;\n this._emit(`var ${this.buffer} = \"\";`);\n return id;\n }\n\n _popBuffer() {\n this.buffer = this.bufferStack.pop();\n }\n\n _emit(code) {\n this.codebuf.push(code);\n }\n\n _emitLine(code) {\n this._emit(code + '\\n');\n }\n\n _emitLines(...lines) {\n lines.forEach((line) => this._emitLine(line));\n }\n\n _emitFuncBegin(node, name) {\n this.buffer = 'output';\n this._scopeClosers = '';\n this._emitLine(`function ${name}(env, context, frame, runtime, cb) {`);\n this._emitLine(`var lineno = ${node.lineno};`);\n this._emitLine(`var colno = ${node.colno};`);\n this._emitLine(`var ${this.buffer} = \"\";`);\n this._emitLine('try {');\n }\n\n _emitFuncEnd(noReturn) {\n if (!noReturn) {\n this._emitLine('cb(null, ' + this.buffer + ');');\n }\n\n this._closeScopeLevels();\n this._emitLine('} catch (e) {');\n this._emitLine(' cb(runtime.handleError(e, lineno, colno));');\n this._emitLine('}');\n this._emitLine('}');\n this.buffer = null;\n }\n\n _addScopeLevel() {\n this._scopeClosers += '})';\n }\n\n _closeScopeLevels() {\n this._emitLine(this._scopeClosers + ';');\n this._scopeClosers = '';\n }\n\n _withScopedSyntax(func) {\n var _scopeClosers = this._scopeClosers;\n this._scopeClosers = '';\n\n func.call(this);\n\n this._closeScopeLevels();\n this._scopeClosers = _scopeClosers;\n }\n\n _makeCallback(res) {\n var err = this._tmpid();\n\n return 'function(' + err + (res ? ',' + res : '') + ') {\\n' +\n 'if(' + err + ') { cb(' + err + '); return; }';\n }\n\n _tmpid() {\n this.lastId++;\n return 't_' + this.lastId;\n }\n\n _templateName() {\n return this.templateName == null ? 'undefined' : JSON.stringify(this.templateName);\n }\n\n _compileChildren(node, frame) {\n node.children.forEach((child) => {\n this.compile(child, frame);\n });\n }\n\n _compileAggregate(node, frame, startChar, endChar) {\n if (startChar) {\n this._emit(startChar);\n }\n\n node.children.forEach((child, i) => {\n if (i > 0) {\n this._emit(',');\n }\n\n this.compile(child, frame);\n });\n\n if (endChar) {\n this._emit(endChar);\n }\n }\n\n _compileExpression(node, frame) {\n // TODO: I'm not really sure if this type check is worth it or\n // not.\n this.assertType(\n node,\n nodes.Literal,\n nodes.Symbol,\n nodes.Group,\n nodes.Array,\n nodes.Dict,\n nodes.FunCall,\n nodes.Caller,\n nodes.Filter,\n nodes.LookupVal,\n nodes.Compare,\n nodes.InlineIf,\n nodes.In,\n nodes.Is,\n nodes.And,\n nodes.Or,\n nodes.Not,\n nodes.Add,\n nodes.Concat,\n nodes.Sub,\n nodes.Mul,\n nodes.Div,\n nodes.FloorDiv,\n nodes.Mod,\n nodes.Pow,\n nodes.Neg,\n nodes.Pos,\n nodes.Compare,\n nodes.NodeList\n );\n this.compile(node, frame);\n }\n\n assertType(node, ...types) {\n if (!types.some(t => node instanceof t)) {\n this.fail(`assertType: invalid type: ${node.typename}`, node.lineno, node.colno);\n }\n }\n\n compileCallExtension(node, frame, async) {\n var args = node.args;\n var contentArgs = node.contentArgs;\n var autoescape = typeof node.autoescape === 'boolean' ? node.autoescape : true;\n\n if (!async) {\n this._emit(`${this.buffer} += runtime.suppressValue(`);\n }\n\n this._emit(`env.getExtension(\"${node.extName}\")[\"${node.prop}\"](`);\n this._emit('context');\n\n if (args || contentArgs) {\n this._emit(',');\n }\n\n if (args) {\n if (!(args instanceof nodes.NodeList)) {\n this.fail('compileCallExtension: arguments must be a NodeList, ' +\n 'use `parser.parseSignature`');\n }\n\n args.children.forEach((arg, i) => {\n // Tag arguments are passed normally to the call. Note\n // that keyword arguments are turned into a single js\n // object as the last argument, if they exist.\n this._compileExpression(arg, frame);\n\n if (i !== args.children.length - 1 || contentArgs.length) {\n this._emit(',');\n }\n });\n }\n\n if (contentArgs.length) {\n contentArgs.forEach((arg, i) => {\n if (i > 0) {\n this._emit(',');\n }\n\n if (arg) {\n this._emitLine('function(cb) {');\n this._emitLine('if(!cb) { cb = function(err) { if(err) { throw err; }}}');\n const id = this._pushBuffer();\n\n this._withScopedSyntax(() => {\n this.compile(arg, frame);\n this._emitLine(`cb(null, ${id});`);\n });\n\n this._popBuffer();\n this._emitLine(`return ${id};`);\n this._emitLine('}');\n } else {\n this._emit('null');\n }\n });\n }\n\n if (async) {\n const res = this._tmpid();\n this._emitLine(', ' + this._makeCallback(res));\n this._emitLine(\n `${this.buffer} += runtime.suppressValue(${res}, ${autoescape} && env.opts.autoescape);`);\n this._addScopeLevel();\n } else {\n this._emit(')');\n this._emit(`, ${autoescape} && env.opts.autoescape);\\n`);\n }\n }\n\n compileCallExtensionAsync(node, frame) {\n this.compileCallExtension(node, frame, true);\n }\n\n compileNodeList(node, frame) {\n this._compileChildren(node, frame);\n }\n\n compileLiteral(node) {\n if (typeof node.value === 'string') {\n let val = node.value.replace(/\\\\/g, '\\\\\\\\');\n val = val.replace(/\"/g, '\\\\\"');\n val = val.replace(/\\n/g, '\\\\n');\n val = val.replace(/\\r/g, '\\\\r');\n val = val.replace(/\\t/g, '\\\\t');\n val = val.replace(/\\u2028/g, '\\\\u2028');\n this._emit(`\"${val}\"`);\n } else if (node.value === null) {\n this._emit('null');\n } else {\n this._emit(node.value.toString());\n }\n }\n\n compileSymbol(node, frame) {\n var name = node.value;\n var v = frame.lookup(name);\n\n if (v) {\n this._emit(v);\n } else {\n this._emit('runtime.contextOrFrameLookup(' +\n 'context, frame, \"' + name + '\")');\n }\n }\n\n compileGroup(node, frame) {\n this._compileAggregate(node, frame, '(', ')');\n }\n\n compileArray(node, frame) {\n this._compileAggregate(node, frame, '[', ']');\n }\n\n compileDict(node, frame) {\n this._compileAggregate(node, frame, '{', '}');\n }\n\n compilePair(node, frame) {\n var key = node.key;\n var val = node.value;\n\n if (key instanceof nodes.Symbol) {\n key = new nodes.Literal(key.lineno, key.colno, key.value);\n } else if (!(key instanceof nodes.Literal &&\n typeof key.value === 'string')) {\n this.fail('compilePair: Dict keys must be strings or names',\n key.lineno,\n key.colno);\n }\n\n this.compile(key, frame);\n this._emit(': ');\n this._compileExpression(val, frame);\n }\n\n compileInlineIf(node, frame) {\n this._emit('(');\n this.compile(node.cond, frame);\n this._emit('?');\n this.compile(node.body, frame);\n this._emit(':');\n if (node.else_ !== null) {\n this.compile(node.else_, frame);\n } else {\n this._emit('\"\"');\n }\n this._emit(')');\n }\n\n compileIn(node, frame) {\n this._emit('runtime.inOperator(');\n this.compile(node.left, frame);\n this._emit(',');\n this.compile(node.right, frame);\n this._emit(')');\n }\n\n compileIs(node, frame) {\n // first, we need to try to get the name of the test function, if it's a\n // callable (i.e., has args) and not a symbol.\n var right = node.right.name\n ? node.right.name.value\n // otherwise go with the symbol value\n : node.right.value;\n this._emit('env.getTest(\"' + right + '\").call(context, ');\n this.compile(node.left, frame);\n // compile the arguments for the callable if they exist\n if (node.right.args) {\n this._emit(',');\n this.compile(node.right.args, frame);\n }\n this._emit(') === true');\n }\n\n _binOpEmitter(node, frame, str) {\n this.compile(node.left, frame);\n this._emit(str);\n this.compile(node.right, frame);\n }\n\n // ensure concatenation instead of addition\n // by adding empty string in between\n compileOr(node, frame) {\n return this._binOpEmitter(node, frame, ' || ');\n }\n\n compileAnd(node, frame) {\n return this._binOpEmitter(node, frame, ' && ');\n }\n\n compileAdd(node, frame) {\n return this._binOpEmitter(node, frame, ' + ');\n }\n\n compileConcat(node, frame) {\n return this._binOpEmitter(node, frame, ' + \"\" + ');\n }\n\n compileSub(node, frame) {\n return this._binOpEmitter(node, frame, ' - ');\n }\n\n compileMul(node, frame) {\n return this._binOpEmitter(node, frame, ' * ');\n }\n\n compileDiv(node, frame) {\n return this._binOpEmitter(node, frame, ' / ');\n }\n\n compileMod(node, frame) {\n return this._binOpEmitter(node, frame, ' % ');\n }\n\n compileNot(node, frame) {\n this._emit('!');\n this.compile(node.target, frame);\n }\n\n compileFloorDiv(node, frame) {\n this._emit('Math.floor(');\n this.compile(node.left, frame);\n this._emit(' / ');\n this.compile(node.right, frame);\n this._emit(')');\n }\n\n compilePow(node, frame) {\n this._emit('Math.pow(');\n this.compile(node.left, frame);\n this._emit(', ');\n this.compile(node.right, frame);\n this._emit(')');\n }\n\n compileNeg(node, frame) {\n this._emit('-');\n this.compile(node.target, frame);\n }\n\n compilePos(node, frame) {\n this._emit('+');\n this.compile(node.target, frame);\n }\n\n compileCompare(node, frame) {\n this.compile(node.expr, frame);\n\n node.ops.forEach((op) => {\n this._emit(` ${compareOps[op.type]} `);\n this.compile(op.expr, frame);\n });\n }\n\n compileLookupVal(node, frame) {\n this._emit('runtime.memberLookup((');\n this._compileExpression(node.target, frame);\n this._emit('),');\n this._compileExpression(node.val, frame);\n this._emit(')');\n }\n\n _getNodeName(node) {\n switch (node.typename) {\n case 'Symbol':\n return node.value;\n case 'FunCall':\n return 'the return value of (' + this._getNodeName(node.name) + ')';\n case 'LookupVal':\n return this._getNodeName(node.target) + '[\"' +\n this._getNodeName(node.val) + '\"]';\n case 'Literal':\n return node.value.toString();\n default:\n return '--expression--';\n }\n }\n\n compileFunCall(node, frame) {\n // Keep track of line/col info at runtime by settings\n // variables within an expression. An expression in javascript\n // like (x, y, z) returns the last value, and x and y can be\n // anything\n this._emit('(lineno = ' + node.lineno +\n ', colno = ' + node.colno + ', ');\n\n this._emit('runtime.callWrap(');\n // Compile it as normal.\n this._compileExpression(node.name, frame);\n\n // Output the name of what we're calling so we can get friendly errors\n // if the lookup fails.\n this._emit(', \"' + this._getNodeName(node.name).replace(/\"/g, '\\\\\"') + '\", context, ');\n\n this._compileAggregate(node.args, frame, '[', '])');\n\n this._emit(')');\n }\n\n compileFilter(node, frame) {\n var name = node.name;\n this.assertType(name, nodes.Symbol);\n this._emit('env.getFilter(\"' + name.value + '\").call(context, ');\n this._compileAggregate(node.args, frame);\n this._emit(')');\n }\n\n compileFilterAsync(node, frame) {\n var name = node.name;\n var symbol = node.symbol.value;\n\n this.assertType(name, nodes.Symbol);\n\n frame.set(symbol, symbol);\n\n this._emit('env.getFilter(\"' + name.value + '\").call(context, ');\n this._compileAggregate(node.args, frame);\n this._emitLine(', ' + this._makeCallback(symbol));\n\n this._addScopeLevel();\n }\n\n compileKeywordArgs(node, frame) {\n this._emit('runtime.makeKeywordArgs(');\n this.compileDict(node, frame);\n this._emit(')');\n }\n\n compileSet(node, frame) {\n var ids = [];\n\n // Lookup the variable names for each identifier and create\n // new ones if necessary\n node.targets.forEach((target) => {\n var name = target.value;\n var id = frame.lookup(name);\n\n if (id === null || id === undefined) {\n id = this._tmpid();\n\n // Note: This relies on js allowing scope across\n // blocks, in case this is created inside an `if`\n this._emitLine('var ' + id + ';');\n }\n\n ids.push(id);\n });\n\n if (node.value) {\n this._emit(ids.join(' = ') + ' = ');\n this._compileExpression(node.value, frame);\n this._emitLine(';');\n } else {\n this._emit(ids.join(' = ') + ' = ');\n this.compile(node.body, frame);\n this._emitLine(';');\n }\n\n node.targets.forEach((target, i) => {\n var id = ids[i];\n var name = target.value;\n\n // We are running this for every var, but it's very\n // uncommon to assign to multiple vars anyway\n this._emitLine(`frame.set(\"${name}\", ${id}, true);`);\n\n this._emitLine('if(frame.topLevel) {');\n this._emitLine(`context.setVariable(\"${name}\", ${id});`);\n this._emitLine('}');\n\n if (name.charAt(0) !== '_') {\n this._emitLine('if(frame.topLevel) {');\n this._emitLine(`context.addExport(\"${name}\", ${id});`);\n this._emitLine('}');\n }\n });\n }\n\n compileSwitch(node, frame) {\n this._emit('switch (');\n this.compile(node.expr, frame);\n this._emit(') {');\n node.cases.forEach((c, i) => {\n this._emit('case ');\n this.compile(c.cond, frame);\n this._emit(': ');\n this.compile(c.body, frame);\n // preserve fall-throughs\n if (c.body.children.length) {\n this._emitLine('break;');\n }\n });\n if (node.default) {\n this._emit('default:');\n this.compile(node.default, frame);\n }\n this._emit('}');\n }\n\n compileIf(node, frame, async) {\n this._emit('if(');\n this._compileExpression(node.cond, frame);\n this._emitLine(') {');\n\n this._withScopedSyntax(() => {\n this.compile(node.body, frame);\n\n if (async) {\n this._emit('cb()');\n }\n });\n\n if (node.else_) {\n this._emitLine('}\\nelse {');\n\n this._withScopedSyntax(() => {\n this.compile(node.else_, frame);\n\n if (async) {\n this._emit('cb()');\n }\n });\n } else if (async) {\n this._emitLine('}\\nelse {');\n this._emit('cb()');\n }\n\n this._emitLine('}');\n }\n\n compileIfAsync(node, frame) {\n this._emit('(function(cb) {');\n this.compileIf(node, frame, true);\n this._emit('})(' + this._makeCallback());\n this._addScopeLevel();\n }\n\n _emitLoopBindings(node, arr, i, len) {\n const bindings = [\n {name: 'index', val: `${i} + 1`},\n {name: 'index0', val: i},\n {name: 'revindex', val: `${len} - ${i}`},\n {name: 'revindex0', val: `${len} - ${i} - 1`},\n {name: 'first', val: `${i} === 0`},\n {name: 'last', val: `${i} === ${len} - 1`},\n {name: 'length', val: len},\n ];\n\n bindings.forEach((b) => {\n this._emitLine(`frame.set(\"loop.${b.name}\", ${b.val});`);\n });\n }\n\n compileFor(node, frame) {\n // Some of this code is ugly, but it keeps the generated code\n // as fast as possible. ForAsync also shares some of this, but\n // not much.\n\n const i = this._tmpid();\n const len = this._tmpid();\n const arr = this._tmpid();\n frame = frame.push();\n\n this._emitLine('frame = frame.push();');\n\n this._emit(`var ${arr} = `);\n this._compileExpression(node.arr, frame);\n this._emitLine(';');\n\n this._emit(`if(${arr}) {`);\n this._emitLine(arr + ' = runtime.fromIterator(' + arr + ');');\n\n // If multiple names are passed, we need to bind them\n // appropriately\n if (node.name instanceof nodes.Array) {\n this._emitLine(`var ${i};`);\n\n // The object could be an arroy or object. Note that the\n // body of the loop is duplicated for each condition, but\n // we are optimizing for speed over size.\n this._emitLine(`if(runtime.isArray(${arr})) {`);\n this._emitLine(`var ${len} = ${arr}.length;`);\n this._emitLine(`for(${i}=0; ${i} < ${arr}.length; ${i}++) {`);\n\n // Bind each declared var\n node.name.children.forEach((child, u) => {\n var tid = this._tmpid();\n this._emitLine(`var ${tid} = ${arr}[${i}][${u}];`);\n this._emitLine(`frame.set(\"${child}\", ${arr}[${i}][${u}]);`);\n frame.set(node.name.children[u].value, tid);\n });\n\n this._emitLoopBindings(node, arr, i, len);\n this._withScopedSyntax(() => {\n this.compile(node.body, frame);\n });\n this._emitLine('}');\n\n this._emitLine('} else {');\n // Iterate over the key/values of an object\n const [key, val] = node.name.children;\n const k = this._tmpid();\n const v = this._tmpid();\n frame.set(key.value, k);\n frame.set(val.value, v);\n\n this._emitLine(`${i} = -1;`);\n this._emitLine(`var ${len} = runtime.keys(${arr}).length;`);\n this._emitLine(`for(var ${k} in ${arr}) {`);\n this._emitLine(`${i}++;`);\n this._emitLine(`var ${v} = ${arr}[${k}];`);\n this._emitLine(`frame.set(\"${key.value}\", ${k});`);\n this._emitLine(`frame.set(\"${val.value}\", ${v});`);\n\n this._emitLoopBindings(node, arr, i, len);\n this._withScopedSyntax(() => {\n this.compile(node.body, frame);\n });\n this._emitLine('}');\n\n this._emitLine('}');\n } else {\n // Generate a typical array iteration\n const v = this._tmpid();\n frame.set(node.name.value, v);\n\n this._emitLine(`var ${len} = ${arr}.length;`);\n this._emitLine(`for(var ${i}=0; ${i} < ${arr}.length; ${i}++) {`);\n this._emitLine(`var ${v} = ${arr}[${i}];`);\n this._emitLine(`frame.set(\"${node.name.value}\", ${v});`);\n\n this._emitLoopBindings(node, arr, i, len);\n\n this._withScopedSyntax(() => {\n this.compile(node.body, frame);\n });\n\n this._emitLine('}');\n }\n\n this._emitLine('}');\n if (node.else_) {\n this._emitLine('if (!' + len + ') {');\n this.compile(node.else_, frame);\n this._emitLine('}');\n }\n\n this._emitLine('frame = frame.pop();');\n }\n\n _compileAsyncLoop(node, frame, parallel) {\n // This shares some code with the For tag, but not enough to\n // worry about. This iterates across an object asynchronously,\n // but not in parallel.\n\n var i = this._tmpid();\n var len = this._tmpid();\n var arr = this._tmpid();\n var asyncMethod = parallel ? 'asyncAll' : 'asyncEach';\n frame = frame.push();\n\n this._emitLine('frame = frame.push();');\n\n this._emit('var ' + arr + ' = runtime.fromIterator(');\n this._compileExpression(node.arr, frame);\n this._emitLine(');');\n\n if (node.name instanceof nodes.Array) {\n const arrayLen = node.name.children.length;\n this._emit(`runtime.${asyncMethod}(${arr}, ${arrayLen}, function(`);\n\n node.name.children.forEach((name) => {\n this._emit(`${name.value},`);\n });\n\n this._emit(i + ',' + len + ',next) {');\n\n node.name.children.forEach((name) => {\n const id = name.value;\n frame.set(id, id);\n this._emitLine(`frame.set(\"${id}\", ${id});`);\n });\n } else {\n const id = node.name.value;\n this._emitLine(`runtime.${asyncMethod}(${arr}, 1, function(${id}, ${i}, ${len},next) {`);\n this._emitLine('frame.set(\"' + id + '\", ' + id + ');');\n frame.set(id, id);\n }\n\n this._emitLoopBindings(node, arr, i, len);\n\n this._withScopedSyntax(() => {\n let buf;\n if (parallel) {\n buf = this._pushBuffer();\n }\n\n this.compile(node.body, frame);\n this._emitLine('next(' + i + (buf ? ',' + buf : '') + ');');\n\n if (parallel) {\n this._popBuffer();\n }\n });\n\n const output = this._tmpid();\n this._emitLine('}, ' + this._makeCallback(output));\n this._addScopeLevel();\n\n if (parallel) {\n this._emitLine(this.buffer + ' += ' + output + ';');\n }\n\n if (node.else_) {\n this._emitLine('if (!' + arr + '.length) {');\n this.compile(node.else_, frame);\n this._emitLine('}');\n }\n\n this._emitLine('frame = frame.pop();');\n }\n\n compileAsyncEach(node, frame) {\n this._compileAsyncLoop(node, frame);\n }\n\n compileAsyncAll(node, frame) {\n this._compileAsyncLoop(node, frame, true);\n }\n\n _compileMacro(node, frame) {\n var args = [];\n var kwargs = null;\n var funcId = 'macro_' + this._tmpid();\n var keepFrame = (frame !== undefined);\n\n // Type check the definition of the args\n node.args.children.forEach((arg, i) => {\n if (i === node.args.children.length - 1 && arg instanceof nodes.Dict) {\n kwargs = arg;\n } else {\n this.assertType(arg, nodes.Symbol);\n args.push(arg);\n }\n });\n\n const realNames = [...args.map((n) => `l_${n.value}`), 'kwargs'];\n\n // Quoted argument names\n const argNames = args.map((n) => `\"${n.value}\"`);\n const kwargNames = ((kwargs && kwargs.children) || []).map((n) => `\"${n.key.value}\"`);\n\n // We pass a function to makeMacro which destructures the\n // arguments so support setting positional args with keywords\n // args and passing keyword args as positional args\n // (essentially default values). See runtime.js.\n let currFrame;\n if (keepFrame) {\n currFrame = frame.push(true);\n } else {\n currFrame = new Frame();\n }\n this._emitLines(\n `var ${funcId} = runtime.makeMacro(`,\n `[${argNames.join(', ')}], `,\n `[${kwargNames.join(', ')}], `,\n `function (${realNames.join(', ')}) {`,\n 'var callerFrame = frame;',\n 'frame = ' + ((keepFrame) ? 'frame.push(true);' : 'new runtime.Frame();'),\n 'kwargs = kwargs || {};',\n 'if (Object.prototype.hasOwnProperty.call(kwargs, \"caller\")) {',\n 'frame.set(\"caller\", kwargs.caller); }');\n\n // Expose the arguments to the template. Don't need to use\n // random names because the function\n // will create a new run-time scope for us\n args.forEach((arg) => {\n this._emitLine(`frame.set(\"${arg.value}\", l_${arg.value});`);\n currFrame.set(arg.value, `l_${arg.value}`);\n });\n\n // Expose the keyword arguments\n if (kwargs) {\n kwargs.children.forEach((pair) => {\n const name = pair.key.value;\n this._emit(`frame.set(\"${name}\", `);\n this._emit(`Object.prototype.hasOwnProperty.call(kwargs, \"${name}\")`);\n this._emit(` ? kwargs[\"${name}\"] : `);\n this._compileExpression(pair.value, currFrame);\n this._emit(');');\n });\n }\n\n const bufferId = this._pushBuffer();\n\n this._withScopedSyntax(() => {\n this.compile(node.body, currFrame);\n });\n\n this._emitLine('frame = ' + ((keepFrame) ? 'frame.pop();' : 'callerFrame;'));\n this._emitLine(`return new runtime.SafeString(${bufferId});`);\n this._emitLine('});');\n this._popBuffer();\n\n return funcId;\n }\n\n compileMacro(node, frame) {\n var funcId = this._compileMacro(node);\n\n // Expose the macro to the templates\n var name = node.name.value;\n frame.set(name, funcId);\n\n if (frame.parent) {\n this._emitLine(`frame.set(\"${name}\", ${funcId});`);\n } else {\n if (node.name.value.charAt(0) !== '_') {\n this._emitLine(`context.addExport(\"${name}\");`);\n }\n this._emitLine(`context.setVariable(\"${name}\", ${funcId});`);\n }\n }\n\n compileCaller(node, frame) {\n // basically an anonymous \"macro expression\"\n this._emit('(function (){');\n const funcId = this._compileMacro(node, frame);\n this._emit(`return ${funcId};})()`);\n }\n\n _compileGetTemplate(node, frame, eagerCompile, ignoreMissing) {\n const parentTemplateId = this._tmpid();\n const parentName = this._templateName();\n const cb = this._makeCallback(parentTemplateId);\n const eagerCompileArg = (eagerCompile) ? 'true' : 'false';\n const ignoreMissingArg = (ignoreMissing) ? 'true' : 'false';\n this._emit('env.getTemplate(');\n this._compileExpression(node.template, frame);\n this._emitLine(`, ${eagerCompileArg}, ${parentName}, ${ignoreMissingArg}, ${cb}`);\n return parentTemplateId;\n }\n\n compileImport(node, frame) {\n const target = node.target.value;\n const id = this._compileGetTemplate(node, frame, false, false);\n this._addScopeLevel();\n\n this._emitLine(id + '.getExported(' +\n (node.withContext ? 'context.getVariables(), frame, ' : '') +\n this._makeCallback(id));\n this._addScopeLevel();\n\n frame.set(target, id);\n\n if (frame.parent) {\n this._emitLine(`frame.set(\"${target}\", ${id});`);\n } else {\n this._emitLine(`context.setVariable(\"${target}\", ${id});`);\n }\n }\n\n compileFromImport(node, frame) {\n const importedId = this._compileGetTemplate(node, frame, false, false);\n this._addScopeLevel();\n\n this._emitLine(importedId + '.getExported(' +\n (node.withContext ? 'context.getVariables(), frame, ' : '') +\n this._makeCallback(importedId));\n this._addScopeLevel();\n\n node.names.children.forEach((nameNode) => {\n var name;\n var alias;\n var id = this._tmpid();\n\n if (nameNode instanceof nodes.Pair) {\n name = nameNode.key.value;\n alias = nameNode.value.value;\n } else {\n name = nameNode.value;\n alias = name;\n }\n\n this._emitLine(`if(Object.prototype.hasOwnProperty.call(${importedId}, \"${name}\")) {`);\n this._emitLine(`var ${id} = ${importedId}.${name};`);\n this._emitLine('} else {');\n this._emitLine(`cb(new Error(\"cannot import '${name}'\")); return;`);\n this._emitLine('}');\n\n frame.set(alias, id);\n\n if (frame.parent) {\n this._emitLine(`frame.set(\"${alias}\", ${id});`);\n } else {\n this._emitLine(`context.setVariable(\"${alias}\", ${id});`);\n }\n });\n }\n\n compileBlock(node) {\n var id = this._tmpid();\n\n // If we are executing outside a block (creating a top-level\n // block), we really don't want to execute its code because it\n // will execute twice: once when the child template runs and\n // again when the parent template runs. Note that blocks\n // within blocks will *always* execute immediately *and*\n // wherever else they are invoked (like used in a parent\n // template). This may have behavioral differences from jinja\n // because blocks can have side effects, but it seems like a\n // waste of performance to always execute huge top-level\n // blocks twice\n if (!this.inBlock) {\n this._emit('(parentTemplate ? function(e, c, f, r, cb) { cb(\"\"); } : ');\n }\n this._emit(`context.getBlock(\"${node.name.value}\")`);\n if (!this.inBlock) {\n this._emit(')');\n }\n this._emitLine('(env, context, frame, runtime, ' + this._makeCallback(id));\n this._emitLine(`${this.buffer} += ${id};`);\n this._addScopeLevel();\n }\n\n compileSuper(node, frame) {\n var name = node.blockName.value;\n var id = node.symbol.value;\n\n const cb = this._makeCallback(id);\n this._emitLine(`context.getSuper(env, \"${name}\", b_${name}, frame, runtime, ${cb}`);\n this._emitLine(`${id} = runtime.markSafe(${id});`);\n this._addScopeLevel();\n frame.set(id, id);\n }\n\n compileExtends(node, frame) {\n var k = this._tmpid();\n\n const parentTemplateId = this._compileGetTemplate(node, frame, true, false);\n\n // extends is a dynamic tag and can occur within a block like\n // `if`, so if this happens we need to capture the parent\n // template in the top-level scope\n this._emitLine(`parentTemplate = ${parentTemplateId}`);\n\n this._emitLine(`for(var ${k} in parentTemplate.blocks) {`);\n this._emitLine(`context.addBlock(${k}, parentTemplate.blocks[${k}]);`);\n this._emitLine('}');\n\n this._addScopeLevel();\n }\n\n compileInclude(node, frame) {\n this._emitLine('var tasks = [];');\n this._emitLine('tasks.push(');\n this._emitLine('function(callback) {');\n const id = this._compileGetTemplate(node, frame, false, node.ignoreMissing);\n this._emitLine(`callback(null,${id});});`);\n this._emitLine('});');\n\n const id2 = this._tmpid();\n this._emitLine('tasks.push(');\n this._emitLine('function(template, callback){');\n this._emitLine('template.render(context.getVariables(), frame, ' + this._makeCallback(id2));\n this._emitLine('callback(null,' + id2 + ');});');\n this._emitLine('});');\n\n this._emitLine('tasks.push(');\n this._emitLine('function(result, callback){');\n this._emitLine(`${this.buffer} += result;`);\n this._emitLine('callback(null);');\n this._emitLine('});');\n this._emitLine('env.waterfall(tasks, function(){');\n this._addScopeLevel();\n }\n\n compileTemplateData(node, frame) {\n this.compileLiteral(node, frame);\n }\n\n compileCapture(node, frame) {\n // we need to temporarily override the current buffer id as 'output'\n // so the set block writes to the capture output instead of the buffer\n var buffer = this.buffer;\n this.buffer = 'output';\n this._emitLine('(function() {');\n this._emitLine('var output = \"\";');\n this._withScopedSyntax(() => {\n this.compile(node.body, frame);\n });\n this._emitLine('return output;');\n this._emitLine('})()');\n // and of course, revert back to the old buffer id\n this.buffer = buffer;\n }\n\n compileOutput(node, frame) {\n const children = node.children;\n children.forEach(child => {\n // TemplateData is a special case because it is never\n // autoescaped, so simply output it for optimization\n if (child instanceof nodes.TemplateData) {\n if (child.value) {\n this._emit(`${this.buffer} += `);\n this.compileLiteral(child, frame);\n this._emitLine(';');\n }\n } else {\n this._emit(`${this.buffer} += runtime.suppressValue(`);\n if (this.throwOnUndefined) {\n this._emit('runtime.ensureDefined(');\n }\n this.compile(child, frame);\n if (this.throwOnUndefined) {\n this._emit(`,${node.lineno},${node.colno})`);\n }\n this._emit(', env.opts.autoescape);\\n');\n }\n });\n }\n\n compileRoot(node, frame) {\n if (frame) {\n this.fail('compileRoot: root node can\\'t have frame');\n }\n\n frame = new Frame();\n\n this._emitFuncBegin(node, 'root');\n this._emitLine('var parentTemplate = null;');\n this._compileChildren(node, frame);\n this._emitLine('if(parentTemplate) {');\n this._emitLine('parentTemplate.rootRenderFunc(env, context, frame, runtime, cb);');\n this._emitLine('} else {');\n this._emitLine(`cb(null, ${this.buffer});`);\n this._emitLine('}');\n this._emitFuncEnd(true);\n\n this.inBlock = true;\n\n const blockNames = [];\n\n const blocks = node.findAll(nodes.Block);\n\n blocks.forEach((block, i) => {\n const name = block.name.value;\n\n if (blockNames.indexOf(name) !== -1) {\n throw new Error(`Block \"${name}\" defined more than once.`);\n }\n blockNames.push(name);\n\n this._emitFuncBegin(block, `b_${name}`);\n\n const tmpFrame = new Frame();\n this._emitLine('var frame = frame.push(true);');\n this.compile(block.body, tmpFrame);\n this._emitFuncEnd();\n });\n\n this._emitLine('return {');\n\n blocks.forEach((block, i) => {\n const blockName = `b_${block.name.value}`;\n this._emitLine(`${blockName}: ${blockName},`);\n });\n\n this._emitLine('root: root\\n};');\n }\n\n compile(node, frame) {\n var _compile = this['compile' + node.typename];\n if (_compile) {\n _compile.call(this, node, frame);\n } else {\n this.fail(`compile: Cannot compile node: ${node.typename}`, node.lineno, node.colno);\n }\n }\n\n getCode() {\n return this.codebuf.join('');\n }\n}\n\nmodule.exports = {\n compile: function compile(src, asyncFilters, extensions, name, opts = {}) {\n const c = new Compiler(name, opts.throwOnUndefined);\n\n // Run the extension preprocessors against the source.\n const preprocessors = (extensions || []).map(ext => ext.preprocess).filter(f => !!f);\n\n const processedSrc = preprocessors.reduce((s, processor) => processor(s), src);\n\n c.compile(transformer.transform(\n parser.parse(processedSrc, extensions, opts),\n asyncFilters,\n name\n ));\n return c.getCode();\n },\n\n Compiler: Compiler\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/compiler.js","'use strict';\n\nconst path = require('path');\nconst {EmitterObj} = require('./object');\n\nmodule.exports = class Loader extends EmitterObj {\n resolve(from, to) {\n return path.resolve(path.dirname(from), to);\n }\n\n isRelative(filename) {\n return (filename.indexOf('./') === 0 || filename.indexOf('../') === 0);\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/loader.js","'use strict';\n\nconst asap = require('asap');\nconst waterfall = require('a-sync-waterfall');\nconst lib = require('./lib');\nconst compiler = require('./compiler');\nconst filters = require('./filters');\nconst {FileSystemLoader, WebLoader, PrecompiledLoader} = require('./loaders');\nconst tests = require('./tests');\nconst globals = require('./globals');\nconst {Obj, EmitterObj} = require('./object');\nconst globalRuntime = require('./runtime');\nconst {handleError, Frame} = globalRuntime;\nconst expressApp = require('./express-app');\n\n// If the user is using the async API, *always* call it\n// asynchronously even if the template was synchronous.\nfunction callbackAsap(cb, err, res) {\n asap(() => {\n cb(err, res);\n });\n}\n\n/**\n * A no-op template, for use with {% include ignore missing %}\n */\nconst noopTmplSrc = {\n type: 'code',\n obj: {\n root(env, context, frame, runtime, cb) {\n try {\n cb(null, '');\n } catch (e) {\n cb(handleError(e, null, null));\n }\n }\n }\n};\n\nclass Environment extends EmitterObj {\n init(loaders, opts) {\n // The dev flag determines the trace that'll be shown on errors.\n // If set to true, returns the full trace from the error point,\n // otherwise will return trace starting from Template.render\n // (the full trace from within nunjucks may confuse developers using\n // the library)\n // defaults to false\n opts = this.opts = opts || {};\n this.opts.dev = !!opts.dev;\n\n // The autoescape flag sets global autoescaping. If true,\n // every string variable will be escaped by default.\n // If false, strings can be manually escaped using the `escape` filter.\n // defaults to true\n this.opts.autoescape = opts.autoescape != null ? opts.autoescape : true;\n\n // If true, this will make the system throw errors if trying\n // to output a null or undefined value\n this.opts.throwOnUndefined = !!opts.throwOnUndefined;\n this.opts.trimBlocks = !!opts.trimBlocks;\n this.opts.lstripBlocks = !!opts.lstripBlocks;\n\n this.loaders = [];\n\n if (!loaders) {\n // The filesystem loader is only available server-side\n if (FileSystemLoader) {\n this.loaders = [new FileSystemLoader('views')];\n } else if (WebLoader) {\n this.loaders = [new WebLoader('/views')];\n }\n } else {\n this.loaders = lib.isArray(loaders) ? loaders : [loaders];\n }\n\n // It's easy to use precompiled templates: just include them\n // before you configure nunjucks and this will automatically\n // pick it up and use it\n if (typeof window !== 'undefined' && window.nunjucksPrecompiled) {\n this.loaders.unshift(\n new PrecompiledLoader(window.nunjucksPrecompiled)\n );\n }\n\n this._initLoaders();\n\n this.globals = globals();\n this.filters = {};\n this.tests = {};\n this.asyncFilters = [];\n this.extensions = {};\n this.extensionsList = [];\n\n lib._entries(filters).forEach(([name, filter]) => this.addFilter(name, filter));\n lib._entries(tests).forEach(([name, test]) => this.addTest(name, test));\n }\n\n _initLoaders() {\n this.loaders.forEach((loader) => {\n // Caching and cache busting\n loader.cache = {};\n if (typeof loader.on === 'function') {\n loader.on('update', (name, fullname) => {\n loader.cache[name] = null;\n this.emit('update', name, fullname, loader);\n });\n loader.on('load', (name, source) => {\n this.emit('load', name, source, loader);\n });\n }\n });\n }\n\n invalidateCache() {\n this.loaders.forEach((loader) => {\n loader.cache = {};\n });\n }\n\n addExtension(name, extension) {\n extension.__name = name;\n this.extensions[name] = extension;\n this.extensionsList.push(extension);\n return this;\n }\n\n removeExtension(name) {\n var extension = this.getExtension(name);\n if (!extension) {\n return;\n }\n\n this.extensionsList = lib.without(this.extensionsList, extension);\n delete this.extensions[name];\n }\n\n getExtension(name) {\n return this.extensions[name];\n }\n\n hasExtension(name) {\n return !!this.extensions[name];\n }\n\n addGlobal(name, value) {\n this.globals[name] = value;\n return this;\n }\n\n getGlobal(name) {\n if (typeof this.globals[name] === 'undefined') {\n throw new Error('global not found: ' + name);\n }\n return this.globals[name];\n }\n\n addFilter(name, func, async) {\n var wrapped = func;\n\n if (async) {\n this.asyncFilters.push(name);\n }\n this.filters[name] = wrapped;\n return this;\n }\n\n getFilter(name) {\n if (!this.filters[name]) {\n throw new Error('filter not found: ' + name);\n }\n return this.filters[name];\n }\n\n addTest(name, func) {\n this.tests[name] = func;\n return this;\n }\n\n getTest(name) {\n if (!this.tests[name]) {\n throw new Error('test not found: ' + name);\n }\n return this.tests[name];\n }\n\n resolveTemplate(loader, parentName, filename) {\n var isRelative = (loader.isRelative && parentName) ? loader.isRelative(filename) : false;\n return (isRelative && loader.resolve) ? loader.resolve(parentName, filename) : filename;\n }\n\n getTemplate(name, eagerCompile, parentName, ignoreMissing, cb) {\n var that = this;\n var tmpl = null;\n if (name && name.raw) {\n // this fixes autoescape for templates referenced in symbols\n name = name.raw;\n }\n\n if (lib.isFunction(parentName)) {\n cb = parentName;\n parentName = null;\n eagerCompile = eagerCompile || false;\n }\n\n if (lib.isFunction(eagerCompile)) {\n cb = eagerCompile;\n eagerCompile = false;\n }\n\n if (name instanceof Template) {\n tmpl = name;\n } else if (typeof name !== 'string') {\n throw new Error('template names must be a string: ' + name);\n } else {\n for (let i = 0; i < this.loaders.length; i++) {\n const loader = this.loaders[i];\n tmpl = loader.cache[this.resolveTemplate(loader, parentName, name)];\n if (tmpl) {\n break;\n }\n }\n }\n\n if (tmpl) {\n if (eagerCompile) {\n tmpl.compile();\n }\n\n if (cb) {\n cb(null, tmpl);\n return undefined;\n } else {\n return tmpl;\n }\n }\n let syncResult;\n\n const createTemplate = (err, info) => {\n if (!info && !err && !ignoreMissing) {\n err = new Error('template not found: ' + name);\n }\n\n if (err) {\n if (cb) {\n cb(err);\n return;\n } else {\n throw err;\n }\n }\n let newTmpl;\n if (!info) {\n newTmpl = new Template(noopTmplSrc, this, '', eagerCompile);\n } else {\n newTmpl = new Template(info.src, this, info.path, eagerCompile);\n if (!info.noCache) {\n info.loader.cache[name] = newTmpl;\n }\n }\n if (cb) {\n cb(null, newTmpl);\n } else {\n syncResult = newTmpl;\n }\n };\n\n lib.asyncIter(this.loaders, (loader, i, next, done) => {\n function handle(err, src) {\n if (err) {\n done(err);\n } else if (src) {\n src.loader = loader;\n done(null, src);\n } else {\n next();\n }\n }\n\n // Resolve name relative to parentName\n name = that.resolveTemplate(loader, parentName, name);\n\n if (loader.async) {\n loader.getSource(name, handle);\n } else {\n handle(null, loader.getSource(name));\n }\n }, createTemplate);\n\n return syncResult;\n }\n\n express(app) {\n return expressApp(this, app);\n }\n\n render(name, ctx, cb) {\n if (lib.isFunction(ctx)) {\n cb = ctx;\n ctx = null;\n }\n\n // We support a synchronous API to make it easier to migrate\n // existing code to async. This works because if you don't do\n // anything async work, the whole thing is actually run\n // synchronously.\n let syncResult = null;\n\n this.getTemplate(name, (err, tmpl) => {\n if (err && cb) {\n callbackAsap(cb, err);\n } else if (err) {\n throw err;\n } else {\n syncResult = tmpl.render(ctx, cb);\n }\n });\n\n return syncResult;\n }\n\n renderString(src, ctx, opts, cb) {\n if (lib.isFunction(opts)) {\n cb = opts;\n opts = {};\n }\n opts = opts || {};\n\n const tmpl = new Template(src, this, opts.path);\n return tmpl.render(ctx, cb);\n }\n\n waterfall(tasks, callback, forceAsync) {\n return waterfall(tasks, callback, forceAsync);\n }\n}\n\nclass Context extends Obj {\n init(ctx, blocks, env) {\n // Has to be tied to an environment so we can tap into its globals.\n this.env = env || new Environment();\n\n // Make a duplicate of ctx\n this.ctx = lib.extend({}, ctx);\n\n this.blocks = {};\n this.exported = [];\n\n lib.keys(blocks).forEach(name => {\n this.addBlock(name, blocks[name]);\n });\n }\n\n lookup(name) {\n // This is one of the most called functions, so optimize for\n // the typical case where the name isn't in the globals\n if (name in this.env.globals && !(name in this.ctx)) {\n return this.env.globals[name];\n } else {\n return this.ctx[name];\n }\n }\n\n setVariable(name, val) {\n this.ctx[name] = val;\n }\n\n getVariables() {\n return this.ctx;\n }\n\n addBlock(name, block) {\n this.blocks[name] = this.blocks[name] || [];\n this.blocks[name].push(block);\n return this;\n }\n\n getBlock(name) {\n if (!this.blocks[name]) {\n throw new Error('unknown block \"' + name + '\"');\n }\n\n return this.blocks[name][0];\n }\n\n getSuper(env, name, block, frame, runtime, cb) {\n var idx = lib.indexOf(this.blocks[name] || [], block);\n var blk = this.blocks[name][idx + 1];\n var context = this;\n\n if (idx === -1 || !blk) {\n throw new Error('no super block available for \"' + name + '\"');\n }\n\n blk(env, context, frame, runtime, cb);\n }\n\n addExport(name) {\n this.exported.push(name);\n }\n\n getExported() {\n var exported = {};\n this.exported.forEach((name) => {\n exported[name] = this.ctx[name];\n });\n return exported;\n }\n}\n\nclass Template extends Obj {\n init(src, env, path, eagerCompile) {\n this.env = env || new Environment();\n\n if (lib.isObject(src)) {\n switch (src.type) {\n case 'code':\n this.tmplProps = src.obj;\n break;\n case 'string':\n this.tmplStr = src.obj;\n break;\n default:\n throw new Error(\n `Unexpected template object type ${src.type}; expected 'code', or 'string'`);\n }\n } else if (lib.isString(src)) {\n this.tmplStr = src;\n } else {\n throw new Error('src must be a string or an object describing the source');\n }\n\n this.path = path;\n\n if (eagerCompile) {\n try {\n this._compile();\n } catch (err) {\n throw lib._prettifyError(this.path, this.env.opts.dev, err);\n }\n } else {\n this.compiled = false;\n }\n }\n\n render(ctx, parentFrame, cb) {\n if (typeof ctx === 'function') {\n cb = ctx;\n ctx = {};\n } else if (typeof parentFrame === 'function') {\n cb = parentFrame;\n parentFrame = null;\n }\n\n // If there is a parent frame, we are being called from internal\n // code of another template, and the internal system\n // depends on the sync/async nature of the parent template\n // to be inherited, so force an async callback\n const forceAsync = !parentFrame;\n\n // Catch compile errors for async rendering\n try {\n this.compile();\n } catch (e) {\n const err = lib._prettifyError(this.path, this.env.opts.dev, e);\n if (cb) {\n return callbackAsap(cb, err);\n } else {\n throw err;\n }\n }\n\n const context = new Context(ctx || {}, this.blocks, this.env);\n const frame = parentFrame ? parentFrame.push(true) : new Frame();\n frame.topLevel = true;\n let syncResult = null;\n let didError = false;\n\n this.rootRenderFunc(this.env, context, frame, globalRuntime, (err, res) => {\n // TODO: this is actually a bug in the compiled template (because waterfall\n // tasks are both not passing errors up the chain of callbacks AND are not\n // causing a return from the top-most render function). But fixing that\n // will require a more substantial change to the compiler.\n if (didError && cb && typeof res !== 'undefined') {\n // prevent multiple calls to cb\n return;\n }\n\n if (err) {\n err = lib._prettifyError(this.path, this.env.opts.dev, err);\n didError = true;\n }\n\n if (cb) {\n if (forceAsync) {\n callbackAsap(cb, err, res);\n } else {\n cb(err, res);\n }\n } else {\n if (err) {\n throw err;\n }\n syncResult = res;\n }\n });\n\n return syncResult;\n }\n\n\n getExported(ctx, parentFrame, cb) { // eslint-disable-line consistent-return\n if (typeof ctx === 'function') {\n cb = ctx;\n ctx = {};\n }\n\n if (typeof parentFrame === 'function') {\n cb = parentFrame;\n parentFrame = null;\n }\n\n // Catch compile errors for async rendering\n try {\n this.compile();\n } catch (e) {\n if (cb) {\n return cb(e);\n } else {\n throw e;\n }\n }\n\n const frame = parentFrame ? parentFrame.push() : new Frame();\n frame.topLevel = true;\n\n // Run the rootRenderFunc to populate the context with exported vars\n const context = new Context(ctx || {}, this.blocks, this.env);\n this.rootRenderFunc(this.env, context, frame, globalRuntime, (err) => {\n if (err) {\n cb(err, null);\n } else {\n cb(null, context.getExported());\n }\n });\n }\n\n compile() {\n if (!this.compiled) {\n this._compile();\n }\n }\n\n _compile() {\n var props;\n\n if (this.tmplProps) {\n props = this.tmplProps;\n } else {\n const source = compiler.compile(this.tmplStr,\n this.env.asyncFilters,\n this.env.extensionsList,\n this.path,\n this.env.opts);\n\n const func = new Function(source); // eslint-disable-line no-new-func\n props = func();\n }\n\n this.blocks = this._getBlocks(props);\n this.rootRenderFunc = props.root;\n this.compiled = true;\n }\n\n _getBlocks(props) {\n var blocks = {};\n\n lib.keys(props).forEach((k) => {\n if (k.slice(0, 2) === 'b_') {\n blocks[k.slice(2)] = props[k];\n }\n });\n\n return blocks;\n }\n}\n\nmodule.exports = {\n Environment: Environment,\n Template: Template\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/environment.js","'use strict';\n\nvar lexer = require('./lexer');\nvar nodes = require('./nodes');\nvar Obj = require('./object').Obj;\nvar lib = require('./lib');\n\nclass Parser extends Obj {\n init(tokens) {\n this.tokens = tokens;\n this.peeked = null;\n this.breakOnBlocks = null;\n this.dropLeadingWhitespace = false;\n\n this.extensions = [];\n }\n\n nextToken(withWhitespace) {\n var tok;\n\n if (this.peeked) {\n if (!withWhitespace && this.peeked.type === lexer.TOKEN_WHITESPACE) {\n this.peeked = null;\n } else {\n tok = this.peeked;\n this.peeked = null;\n return tok;\n }\n }\n\n tok = this.tokens.nextToken();\n\n if (!withWhitespace) {\n while (tok && tok.type === lexer.TOKEN_WHITESPACE) {\n tok = this.tokens.nextToken();\n }\n }\n\n return tok;\n }\n\n peekToken() {\n this.peeked = this.peeked || this.nextToken();\n return this.peeked;\n }\n\n pushToken(tok) {\n if (this.peeked) {\n throw new Error('pushToken: can only push one token on between reads');\n }\n this.peeked = tok;\n }\n\n error(msg, lineno, colno) {\n if (lineno === undefined || colno === undefined) {\n const tok = this.peekToken() || {};\n lineno = tok.lineno;\n colno = tok.colno;\n }\n if (lineno !== undefined) {\n lineno += 1;\n }\n if (colno !== undefined) {\n colno += 1;\n }\n return new lib.TemplateError(msg, lineno, colno);\n }\n\n fail(msg, lineno, colno) {\n throw this.error(msg, lineno, colno);\n }\n\n skip(type) {\n var tok = this.nextToken();\n if (!tok || tok.type !== type) {\n this.pushToken(tok);\n return false;\n }\n return true;\n }\n\n expect(type) {\n var tok = this.nextToken();\n if (tok.type !== type) {\n this.fail('expected ' + type + ', got ' + tok.type,\n tok.lineno,\n tok.colno);\n }\n return tok;\n }\n\n skipValue(type, val) {\n var tok = this.nextToken();\n if (!tok || tok.type !== type || tok.value !== val) {\n this.pushToken(tok);\n return false;\n }\n return true;\n }\n\n skipSymbol(val) {\n return this.skipValue(lexer.TOKEN_SYMBOL, val);\n }\n\n advanceAfterBlockEnd(name) {\n var tok;\n if (!name) {\n tok = this.peekToken();\n\n if (!tok) {\n this.fail('unexpected end of file');\n }\n\n if (tok.type !== lexer.TOKEN_SYMBOL) {\n this.fail('advanceAfterBlockEnd: expected symbol token or ' +\n 'explicit name to be passed');\n }\n\n name = this.nextToken().value;\n }\n\n tok = this.nextToken();\n\n if (tok && tok.type === lexer.TOKEN_BLOCK_END) {\n if (tok.value.charAt(0) === '-') {\n this.dropLeadingWhitespace = true;\n }\n } else {\n this.fail('expected block end in ' + name + ' statement');\n }\n\n return tok;\n }\n\n advanceAfterVariableEnd() {\n var tok = this.nextToken();\n\n if (tok && tok.type === lexer.TOKEN_VARIABLE_END) {\n this.dropLeadingWhitespace = tok.value.charAt(\n tok.value.length - this.tokens.tags.VARIABLE_END.length - 1\n ) === '-';\n } else {\n this.pushToken(tok);\n this.fail('expected variable end');\n }\n }\n\n parseFor() {\n var forTok = this.peekToken();\n var node;\n var endBlock;\n\n if (this.skipSymbol('for')) {\n node = new nodes.For(forTok.lineno, forTok.colno);\n endBlock = 'endfor';\n } else if (this.skipSymbol('asyncEach')) {\n node = new nodes.AsyncEach(forTok.lineno, forTok.colno);\n endBlock = 'endeach';\n } else if (this.skipSymbol('asyncAll')) {\n node = new nodes.AsyncAll(forTok.lineno, forTok.colno);\n endBlock = 'endall';\n } else {\n this.fail('parseFor: expected for{Async}', forTok.lineno, forTok.colno);\n }\n\n node.name = this.parsePrimary();\n\n if (!(node.name instanceof nodes.Symbol)) {\n this.fail('parseFor: variable name expected for loop');\n }\n\n const type = this.peekToken().type;\n if (type === lexer.TOKEN_COMMA) {\n // key/value iteration\n const key = node.name;\n node.name = new nodes.Array(key.lineno, key.colno);\n node.name.addChild(key);\n\n while (this.skip(lexer.TOKEN_COMMA)) {\n const prim = this.parsePrimary();\n node.name.addChild(prim);\n }\n }\n\n if (!this.skipSymbol('in')) {\n this.fail('parseFor: expected \"in\" keyword for loop',\n forTok.lineno,\n forTok.colno);\n }\n\n node.arr = this.parseExpression();\n this.advanceAfterBlockEnd(forTok.value);\n\n node.body = this.parseUntilBlocks(endBlock, 'else');\n\n if (this.skipSymbol('else')) {\n this.advanceAfterBlockEnd('else');\n node.else_ = this.parseUntilBlocks(endBlock);\n }\n\n this.advanceAfterBlockEnd();\n\n return node;\n }\n\n parseMacro() {\n const macroTok = this.peekToken();\n if (!this.skipSymbol('macro')) {\n this.fail('expected macro');\n }\n\n const name = this.parsePrimary(true);\n const args = this.parseSignature();\n const node = new nodes.Macro(macroTok.lineno, macroTok.colno, name, args);\n\n this.advanceAfterBlockEnd(macroTok.value);\n node.body = this.parseUntilBlocks('endmacro');\n this.advanceAfterBlockEnd();\n\n return node;\n }\n\n parseCall() {\n // a call block is parsed as a normal FunCall, but with an added\n // 'caller' kwarg which is a Caller node.\n var callTok = this.peekToken();\n if (!this.skipSymbol('call')) {\n this.fail('expected call');\n }\n\n const callerArgs = this.parseSignature(true) || new nodes.NodeList();\n const macroCall = this.parsePrimary();\n\n this.advanceAfterBlockEnd(callTok.value);\n const body = this.parseUntilBlocks('endcall');\n this.advanceAfterBlockEnd();\n\n const callerName = new nodes.Symbol(callTok.lineno,\n callTok.colno,\n 'caller');\n const callerNode = new nodes.Caller(callTok.lineno,\n callTok.colno,\n callerName,\n callerArgs,\n body);\n\n // add the additional caller kwarg, adding kwargs if necessary\n const args = macroCall.args.children;\n if (!(args[args.length - 1] instanceof nodes.KeywordArgs)) {\n args.push(new nodes.KeywordArgs());\n }\n const kwargs = args[args.length - 1];\n kwargs.addChild(new nodes.Pair(callTok.lineno,\n callTok.colno,\n callerName,\n callerNode));\n\n return new nodes.Output(callTok.lineno,\n callTok.colno,\n [macroCall]);\n }\n\n parseWithContext() {\n var tok = this.peekToken();\n\n var withContext = null;\n\n if (this.skipSymbol('with')) {\n withContext = true;\n } else if (this.skipSymbol('without')) {\n withContext = false;\n }\n\n if (withContext !== null) {\n if (!this.skipSymbol('context')) {\n this.fail('parseFrom: expected context after with/without',\n tok.lineno,\n tok.colno);\n }\n }\n\n return withContext;\n }\n\n parseImport() {\n var importTok = this.peekToken();\n if (!this.skipSymbol('import')) {\n this.fail('parseImport: expected import',\n importTok.lineno,\n importTok.colno);\n }\n\n const template = this.parseExpression();\n\n if (!this.skipSymbol('as')) {\n this.fail('parseImport: expected \"as\" keyword',\n importTok.lineno,\n importTok.colno);\n }\n\n const target = this.parseExpression();\n const withContext = this.parseWithContext();\n const node = new nodes.Import(importTok.lineno,\n importTok.colno,\n template,\n target,\n withContext);\n\n this.advanceAfterBlockEnd(importTok.value);\n\n return node;\n }\n\n parseFrom() {\n const fromTok = this.peekToken();\n if (!this.skipSymbol('from')) {\n this.fail('parseFrom: expected from');\n }\n\n const template = this.parseExpression();\n\n if (!this.skipSymbol('import')) {\n this.fail('parseFrom: expected import',\n fromTok.lineno,\n fromTok.colno);\n }\n\n const names = new nodes.NodeList();\n let withContext;\n\n while (1) { // eslint-disable-line no-constant-condition\n const nextTok = this.peekToken();\n if (nextTok.type === lexer.TOKEN_BLOCK_END) {\n if (!names.children.length) {\n this.fail('parseFrom: Expected at least one import name',\n fromTok.lineno,\n fromTok.colno);\n }\n\n // Since we are manually advancing past the block end,\n // need to keep track of whitespace control (normally\n // this is done in `advanceAfterBlockEnd`\n if (nextTok.value.charAt(0) === '-') {\n this.dropLeadingWhitespace = true;\n }\n\n this.nextToken();\n break;\n }\n\n if (names.children.length > 0 && !this.skip(lexer.TOKEN_COMMA)) {\n this.fail('parseFrom: expected comma',\n fromTok.lineno,\n fromTok.colno);\n }\n\n const name = this.parsePrimary();\n if (name.value.charAt(0) === '_') {\n this.fail('parseFrom: names starting with an underscore cannot be imported',\n name.lineno,\n name.colno);\n }\n\n if (this.skipSymbol('as')) {\n const alias = this.parsePrimary();\n names.addChild(new nodes.Pair(name.lineno,\n name.colno,\n name,\n alias));\n } else {\n names.addChild(name);\n }\n\n withContext = this.parseWithContext();\n }\n\n return new nodes.FromImport(fromTok.lineno,\n fromTok.colno,\n template,\n names,\n withContext);\n }\n\n parseBlock() {\n const tag = this.peekToken();\n if (!this.skipSymbol('block')) {\n this.fail('parseBlock: expected block', tag.lineno, tag.colno);\n }\n\n const node = new nodes.Block(tag.lineno, tag.colno);\n\n node.name = this.parsePrimary();\n if (!(node.name instanceof nodes.Symbol)) {\n this.fail('parseBlock: variable name expected',\n tag.lineno,\n tag.colno);\n }\n\n this.advanceAfterBlockEnd(tag.value);\n\n node.body = this.parseUntilBlocks('endblock');\n this.skipSymbol('endblock');\n this.skipSymbol(node.name.value);\n\n const tok = this.peekToken();\n if (!tok) {\n this.fail('parseBlock: expected endblock, got end of file');\n }\n\n this.advanceAfterBlockEnd(tok.value);\n\n return node;\n }\n\n parseExtends() {\n const tagName = 'extends';\n const tag = this.peekToken();\n if (!this.skipSymbol(tagName)) {\n this.fail('parseTemplateRef: expected ' + tagName);\n }\n\n const node = new nodes.Extends(tag.lineno, tag.colno);\n node.template = this.parseExpression();\n\n this.advanceAfterBlockEnd(tag.value);\n return node;\n }\n\n parseInclude() {\n const tagName = 'include';\n const tag = this.peekToken();\n if (!this.skipSymbol(tagName)) {\n this.fail('parseInclude: expected ' + tagName);\n }\n\n const node = new nodes.Include(tag.lineno, tag.colno);\n node.template = this.parseExpression();\n\n if (this.skipSymbol('ignore') && this.skipSymbol('missing')) {\n node.ignoreMissing = true;\n }\n\n this.advanceAfterBlockEnd(tag.value);\n return node;\n }\n\n parseIf() {\n const tag = this.peekToken();\n let node;\n\n if (this.skipSymbol('if') || this.skipSymbol('elif') || this.skipSymbol('elseif')) {\n node = new nodes.If(tag.lineno, tag.colno);\n } else if (this.skipSymbol('ifAsync')) {\n node = new nodes.IfAsync(tag.lineno, tag.colno);\n } else {\n this.fail('parseIf: expected if, elif, or elseif',\n tag.lineno,\n tag.colno);\n }\n\n node.cond = this.parseExpression();\n this.advanceAfterBlockEnd(tag.value);\n\n node.body = this.parseUntilBlocks('elif', 'elseif', 'else', 'endif');\n const tok = this.peekToken();\n\n switch (tok && tok.value) {\n case 'elseif':\n case 'elif':\n node.else_ = this.parseIf();\n break;\n case 'else':\n this.advanceAfterBlockEnd();\n node.else_ = this.parseUntilBlocks('endif');\n this.advanceAfterBlockEnd();\n break;\n case 'endif':\n node.else_ = null;\n this.advanceAfterBlockEnd();\n break;\n default:\n this.fail('parseIf: expected elif, else, or endif, got end of file');\n }\n\n return node;\n }\n\n parseSet() {\n const tag = this.peekToken();\n if (!this.skipSymbol('set')) {\n this.fail('parseSet: expected set', tag.lineno, tag.colno);\n }\n\n const node = new nodes.Set(tag.lineno, tag.colno, []);\n\n let target;\n while ((target = this.parsePrimary())) {\n node.targets.push(target);\n\n if (!this.skip(lexer.TOKEN_COMMA)) {\n break;\n }\n }\n\n if (!this.skipValue(lexer.TOKEN_OPERATOR, '=')) {\n if (!this.skip(lexer.TOKEN_BLOCK_END)) {\n this.fail('parseSet: expected = or block end in set tag',\n tag.lineno,\n tag.colno);\n } else {\n node.body = new nodes.Capture(\n tag.lineno,\n tag.colno,\n this.parseUntilBlocks('endset')\n );\n node.value = null;\n this.advanceAfterBlockEnd();\n }\n } else {\n node.value = this.parseExpression();\n this.advanceAfterBlockEnd(tag.value);\n }\n\n return node;\n }\n\n parseSwitch() {\n /*\n * Store the tag names in variables in case someone ever wants to\n * customize this.\n */\n const switchStart = 'switch';\n const switchEnd = 'endswitch';\n const caseStart = 'case';\n const caseDefault = 'default';\n\n // Get the switch tag.\n const tag = this.peekToken();\n\n // fail early if we get some unexpected tag.\n if (\n !this.skipSymbol(switchStart)\n && !this.skipSymbol(caseStart)\n && !this.skipSymbol(caseDefault)\n ) {\n this.fail('parseSwitch: expected \"switch,\" \"case\" or \"default\"', tag.lineno, tag.colno);\n }\n\n // parse the switch expression\n const expr = this.parseExpression();\n\n // advance until a start of a case, a default case or an endswitch.\n this.advanceAfterBlockEnd(switchStart);\n this.parseUntilBlocks(caseStart, caseDefault, switchEnd);\n\n // this is the first case. it could also be an endswitch, we'll check.\n let tok = this.peekToken();\n\n // create new variables for our cases and default case.\n const cases = [];\n let defaultCase;\n\n // while we're dealing with new cases nodes...\n do {\n // skip the start symbol and get the case expression\n this.skipSymbol(caseStart);\n const cond = this.parseExpression();\n this.advanceAfterBlockEnd(switchStart);\n // get the body of the case node and add it to the array of cases.\n const body = this.parseUntilBlocks(caseStart, caseDefault, switchEnd);\n cases.push(new nodes.Case(tok.line, tok.col, cond, body));\n // get our next case\n tok = this.peekToken();\n } while (tok && tok.value === caseStart);\n\n // we either have a default case or a switch end.\n switch (tok.value) {\n case caseDefault:\n this.advanceAfterBlockEnd();\n defaultCase = this.parseUntilBlocks(switchEnd);\n this.advanceAfterBlockEnd();\n break;\n case switchEnd:\n this.advanceAfterBlockEnd();\n break;\n default:\n // otherwise bail because EOF\n this.fail('parseSwitch: expected \"case,\" \"default\" or \"endswitch,\" got EOF.');\n }\n\n // and return the switch node.\n return new nodes.Switch(tag.lineno, tag.colno, expr, cases, defaultCase);\n }\n\n parseStatement() {\n var tok = this.peekToken();\n var node;\n\n if (tok.type !== lexer.TOKEN_SYMBOL) {\n this.fail('tag name expected', tok.lineno, tok.colno);\n }\n\n if (this.breakOnBlocks &&\n lib.indexOf(this.breakOnBlocks, tok.value) !== -1) {\n return null;\n }\n\n switch (tok.value) {\n case 'raw':\n return this.parseRaw();\n case 'verbatim':\n return this.parseRaw('verbatim');\n case 'if':\n case 'ifAsync':\n return this.parseIf();\n case 'for':\n case 'asyncEach':\n case 'asyncAll':\n return this.parseFor();\n case 'block':\n return this.parseBlock();\n case 'extends':\n return this.parseExtends();\n case 'include':\n return this.parseInclude();\n case 'set':\n return this.parseSet();\n case 'macro':\n return this.parseMacro();\n case 'call':\n return this.parseCall();\n case 'import':\n return this.parseImport();\n case 'from':\n return this.parseFrom();\n case 'filter':\n return this.parseFilterStatement();\n case 'switch':\n return this.parseSwitch();\n default:\n if (this.extensions.length) {\n for (let i = 0; i < this.extensions.length; i++) {\n const ext = this.extensions[i];\n if (lib.indexOf(ext.tags || [], tok.value) !== -1) {\n return ext.parse(this, nodes, lexer);\n }\n }\n }\n this.fail('unknown block tag: ' + tok.value, tok.lineno, tok.colno);\n }\n\n return node;\n }\n\n parseRaw(tagName) {\n tagName = tagName || 'raw';\n const endTagName = 'end' + tagName;\n // Look for upcoming raw blocks (ignore all other kinds of blocks)\n const rawBlockRegex = new RegExp('([\\\\s\\\\S]*?){%\\\\s*(' + tagName + '|' + endTagName + ')\\\\s*(?=%})%}');\n let rawLevel = 1;\n let str = '';\n let matches = null;\n\n // Skip opening raw token\n // Keep this token to track line and column numbers\n const begun = this.advanceAfterBlockEnd();\n\n // Exit when there's nothing to match\n // or when we've found the matching \"endraw\" block\n while ((matches = this.tokens._extractRegex(rawBlockRegex)) && rawLevel > 0) {\n const all = matches[0];\n const pre = matches[1];\n const blockName = matches[2];\n\n // Adjust rawlevel\n if (blockName === tagName) {\n rawLevel += 1;\n } else if (blockName === endTagName) {\n rawLevel -= 1;\n }\n\n // Add to str\n if (rawLevel === 0) {\n // We want to exclude the last \"endraw\"\n str += pre;\n // Move tokenizer to beginning of endraw block\n this.tokens.backN(all.length - pre.length);\n } else {\n str += all;\n }\n }\n\n return new nodes.Output(\n begun.lineno,\n begun.colno,\n [new nodes.TemplateData(begun.lineno, begun.colno, str)]\n );\n }\n\n parsePostfix(node) {\n let lookup;\n let tok = this.peekToken();\n\n while (tok) {\n if (tok.type === lexer.TOKEN_LEFT_PAREN) {\n // Function call\n node = new nodes.FunCall(tok.lineno,\n tok.colno,\n node,\n this.parseSignature());\n } else if (tok.type === lexer.TOKEN_LEFT_BRACKET) {\n // Reference\n lookup = this.parseAggregate();\n if (lookup.children.length > 1) {\n this.fail('invalid index');\n }\n\n node = new nodes.LookupVal(tok.lineno,\n tok.colno,\n node,\n lookup.children[0]);\n } else if (tok.type === lexer.TOKEN_OPERATOR && tok.value === '.') {\n // Reference\n this.nextToken();\n const val = this.nextToken();\n\n if (val.type !== lexer.TOKEN_SYMBOL) {\n this.fail('expected name as lookup value, got ' + val.value,\n val.lineno,\n val.colno);\n }\n\n // Make a literal string because it's not a variable\n // reference\n lookup = new nodes.Literal(val.lineno,\n val.colno,\n val.value);\n\n node = new nodes.LookupVal(tok.lineno,\n tok.colno,\n node,\n lookup);\n } else {\n break;\n }\n\n tok = this.peekToken();\n }\n\n return node;\n }\n\n parseExpression() {\n var node = this.parseInlineIf();\n return node;\n }\n\n parseInlineIf() {\n let node = this.parseOr();\n if (this.skipSymbol('if')) {\n const condNode = this.parseOr();\n const bodyNode = node;\n node = new nodes.InlineIf(node.lineno, node.colno);\n node.body = bodyNode;\n node.cond = condNode;\n if (this.skipSymbol('else')) {\n node.else_ = this.parseOr();\n } else {\n node.else_ = null;\n }\n }\n\n return node;\n }\n\n parseOr() {\n let node = this.parseAnd();\n while (this.skipSymbol('or')) {\n const node2 = this.parseAnd();\n node = new nodes.Or(node.lineno,\n node.colno,\n node,\n node2);\n }\n return node;\n }\n\n parseAnd() {\n let node = this.parseNot();\n while (this.skipSymbol('and')) {\n const node2 = this.parseNot();\n node = new nodes.And(node.lineno,\n node.colno,\n node,\n node2);\n }\n return node;\n }\n\n parseNot() {\n const tok = this.peekToken();\n if (this.skipSymbol('not')) {\n return new nodes.Not(tok.lineno,\n tok.colno,\n this.parseNot());\n }\n return this.parseIn();\n }\n\n parseIn() {\n let node = this.parseIs();\n while (1) { // eslint-disable-line no-constant-condition\n // check if the next token is 'not'\n const tok = this.nextToken();\n if (!tok) {\n break;\n }\n const invert = tok.type === lexer.TOKEN_SYMBOL && tok.value === 'not';\n // if it wasn't 'not', put it back\n if (!invert) {\n this.pushToken(tok);\n }\n if (this.skipSymbol('in')) {\n const node2 = this.parseIs();\n node = new nodes.In(node.lineno,\n node.colno,\n node,\n node2);\n if (invert) {\n node = new nodes.Not(node.lineno,\n node.colno,\n node);\n }\n } else {\n // if we'd found a 'not' but this wasn't an 'in', put back the 'not'\n if (invert) {\n this.pushToken(tok);\n }\n break;\n }\n }\n return node;\n }\n\n // I put this right after \"in\" in the operator precedence stack. That can\n // obviously be changed to be closer to Jinja.\n parseIs() {\n let node = this.parseCompare();\n // look for an is\n if (this.skipSymbol('is')) {\n // look for a not\n const not = this.skipSymbol('not');\n // get the next node\n const node2 = this.parseCompare();\n // create an Is node using the next node and the info from our Is node.\n node = new nodes.Is(node.lineno, node.colno, node, node2);\n // if we have a Not, create a Not node from our Is node.\n if (not) {\n node = new nodes.Not(node.lineno, node.colno, node);\n }\n }\n // return the node.\n return node;\n }\n\n parseCompare() {\n const compareOps = ['==', '===', '!=', '!==', '<', '>', '<=', '>='];\n const expr = this.parseConcat();\n const ops = [];\n\n while (1) { // eslint-disable-line no-constant-condition\n const tok = this.nextToken();\n\n if (!tok) {\n break;\n } else if (compareOps.indexOf(tok.value) !== -1) {\n ops.push(new nodes.CompareOperand(tok.lineno,\n tok.colno,\n this.parseConcat(),\n tok.value));\n } else {\n this.pushToken(tok);\n break;\n }\n }\n\n if (ops.length) {\n return new nodes.Compare(ops[0].lineno,\n ops[0].colno,\n expr,\n ops);\n } else {\n return expr;\n }\n }\n\n // finds the '~' for string concatenation\n parseConcat() {\n let node = this.parseAdd();\n while (this.skipValue(lexer.TOKEN_TILDE, '~')) {\n const node2 = this.parseAdd();\n node = new nodes.Concat(node.lineno,\n node.colno,\n node,\n node2);\n }\n return node;\n }\n\n parseAdd() {\n let node = this.parseSub();\n while (this.skipValue(lexer.TOKEN_OPERATOR, '+')) {\n const node2 = this.parseSub();\n node = new nodes.Add(node.lineno,\n node.colno,\n node,\n node2);\n }\n return node;\n }\n\n parseSub() {\n let node = this.parseMul();\n while (this.skipValue(lexer.TOKEN_OPERATOR, '-')) {\n const node2 = this.parseMul();\n node = new nodes.Sub(node.lineno,\n node.colno,\n node,\n node2);\n }\n return node;\n }\n\n parseMul() {\n let node = this.parseDiv();\n while (this.skipValue(lexer.TOKEN_OPERATOR, '*')) {\n const node2 = this.parseDiv();\n node = new nodes.Mul(node.lineno,\n node.colno,\n node,\n node2);\n }\n return node;\n }\n\n parseDiv() {\n let node = this.parseFloorDiv();\n while (this.skipValue(lexer.TOKEN_OPERATOR, '/')) {\n const node2 = this.parseFloorDiv();\n node = new nodes.Div(node.lineno,\n node.colno,\n node,\n node2);\n }\n return node;\n }\n\n parseFloorDiv() {\n let node = this.parseMod();\n while (this.skipValue(lexer.TOKEN_OPERATOR, '//')) {\n const node2 = this.parseMod();\n node = new nodes.FloorDiv(node.lineno,\n node.colno,\n node,\n node2);\n }\n return node;\n }\n\n parseMod() {\n let node = this.parsePow();\n while (this.skipValue(lexer.TOKEN_OPERATOR, '%')) {\n const node2 = this.parsePow();\n node = new nodes.Mod(node.lineno,\n node.colno,\n node,\n node2);\n }\n return node;\n }\n\n parsePow() {\n let node = this.parseUnary();\n while (this.skipValue(lexer.TOKEN_OPERATOR, '**')) {\n const node2 = this.parseUnary();\n node = new nodes.Pow(node.lineno,\n node.colno,\n node,\n node2);\n }\n return node;\n }\n\n parseUnary(noFilters) {\n const tok = this.peekToken();\n let node;\n\n if (this.skipValue(lexer.TOKEN_OPERATOR, '-')) {\n node = new nodes.Neg(tok.lineno,\n tok.colno,\n this.parseUnary(true));\n } else if (this.skipValue(lexer.TOKEN_OPERATOR, '+')) {\n node = new nodes.Pos(tok.lineno,\n tok.colno,\n this.parseUnary(true));\n } else {\n node = this.parsePrimary();\n }\n\n if (!noFilters) {\n node = this.parseFilter(node);\n }\n\n return node;\n }\n\n parsePrimary(noPostfix) {\n const tok = this.nextToken();\n let val;\n let node = null;\n\n if (!tok) {\n this.fail('expected expression, got end of file');\n } else if (tok.type === lexer.TOKEN_STRING) {\n val = tok.value;\n } else if (tok.type === lexer.TOKEN_INT) {\n val = parseInt(tok.value, 10);\n } else if (tok.type === lexer.TOKEN_FLOAT) {\n val = parseFloat(tok.value);\n } else if (tok.type === lexer.TOKEN_BOOLEAN) {\n if (tok.value === 'true') {\n val = true;\n } else if (tok.value === 'false') {\n val = false;\n } else {\n this.fail('invalid boolean: ' + tok.value,\n tok.lineno,\n tok.colno);\n }\n } else if (tok.type === lexer.TOKEN_NONE) {\n val = null;\n } else if (tok.type === lexer.TOKEN_REGEX) {\n val = new RegExp(tok.value.body, tok.value.flags);\n }\n\n if (val !== undefined) {\n node = new nodes.Literal(tok.lineno, tok.colno, val);\n } else if (tok.type === lexer.TOKEN_SYMBOL) {\n node = new nodes.Symbol(tok.lineno, tok.colno, tok.value);\n } else {\n // See if it's an aggregate type, we need to push the\n // current delimiter token back on\n this.pushToken(tok);\n node = this.parseAggregate();\n }\n\n if (!noPostfix) {\n node = this.parsePostfix(node);\n }\n\n if (node) {\n return node;\n } else {\n throw this.error(`unexpected token: ${tok.value}`, tok.lineno, tok.colno);\n }\n }\n\n parseFilterName() {\n const tok = this.expect(lexer.TOKEN_SYMBOL);\n let name = tok.value;\n\n while (this.skipValue(lexer.TOKEN_OPERATOR, '.')) {\n name += '.' + this.expect(lexer.TOKEN_SYMBOL).value;\n }\n\n return new nodes.Symbol(tok.lineno, tok.colno, name);\n }\n\n parseFilterArgs(node) {\n if (this.peekToken().type === lexer.TOKEN_LEFT_PAREN) {\n // Get a FunCall node and add the parameters to the\n // filter\n const call = this.parsePostfix(node);\n return call.args.children;\n }\n return [];\n }\n\n parseFilter(node) {\n while (this.skip(lexer.TOKEN_PIPE)) {\n const name = this.parseFilterName();\n\n node = new nodes.Filter(\n name.lineno,\n name.colno,\n name,\n new nodes.NodeList(\n name.lineno,\n name.colno,\n [node].concat(this.parseFilterArgs(node))\n )\n );\n }\n\n return node;\n }\n\n parseFilterStatement() {\n var filterTok = this.peekToken();\n if (!this.skipSymbol('filter')) {\n this.fail('parseFilterStatement: expected filter');\n }\n\n const name = this.parseFilterName();\n const args = this.parseFilterArgs(name);\n\n this.advanceAfterBlockEnd(filterTok.value);\n const body = new nodes.Capture(\n name.lineno,\n name.colno,\n this.parseUntilBlocks('endfilter')\n );\n this.advanceAfterBlockEnd();\n\n const node = new nodes.Filter(\n name.lineno,\n name.colno,\n name,\n new nodes.NodeList(\n name.lineno,\n name.colno,\n [body].concat(args)\n )\n );\n\n return new nodes.Output(\n name.lineno,\n name.colno,\n [node]\n );\n }\n\n parseAggregate() {\n var tok = this.nextToken();\n var node;\n\n switch (tok.type) {\n case lexer.TOKEN_LEFT_PAREN:\n node = new nodes.Group(tok.lineno, tok.colno);\n break;\n case lexer.TOKEN_LEFT_BRACKET:\n node = new nodes.Array(tok.lineno, tok.colno);\n break;\n case lexer.TOKEN_LEFT_CURLY:\n node = new nodes.Dict(tok.lineno, tok.colno);\n break;\n default:\n return null;\n }\n\n while (1) { // eslint-disable-line no-constant-condition\n const type = this.peekToken().type;\n if (type === lexer.TOKEN_RIGHT_PAREN ||\n type === lexer.TOKEN_RIGHT_BRACKET ||\n type === lexer.TOKEN_RIGHT_CURLY) {\n this.nextToken();\n break;\n }\n\n if (node.children.length > 0) {\n if (!this.skip(lexer.TOKEN_COMMA)) {\n this.fail('parseAggregate: expected comma after expression',\n tok.lineno,\n tok.colno);\n }\n }\n\n if (node instanceof nodes.Dict) {\n // TODO: check for errors\n const key = this.parsePrimary();\n\n // We expect a key/value pair for dicts, separated by a\n // colon\n if (!this.skip(lexer.TOKEN_COLON)) {\n this.fail('parseAggregate: expected colon after dict key',\n tok.lineno,\n tok.colno);\n }\n\n // TODO: check for errors\n const value = this.parseExpression();\n node.addChild(new nodes.Pair(key.lineno,\n key.colno,\n key,\n value));\n } else {\n // TODO: check for errors\n const expr = this.parseExpression();\n node.addChild(expr);\n }\n }\n\n return node;\n }\n\n parseSignature(tolerant, noParens) {\n let tok = this.peekToken();\n if (!noParens && tok.type !== lexer.TOKEN_LEFT_PAREN) {\n if (tolerant) {\n return null;\n } else {\n this.fail('expected arguments', tok.lineno, tok.colno);\n }\n }\n\n if (tok.type === lexer.TOKEN_LEFT_PAREN) {\n tok = this.nextToken();\n }\n\n const args = new nodes.NodeList(tok.lineno, tok.colno);\n const kwargs = new nodes.KeywordArgs(tok.lineno, tok.colno);\n let checkComma = false;\n\n while (1) { // eslint-disable-line no-constant-condition\n tok = this.peekToken();\n if (!noParens && tok.type === lexer.TOKEN_RIGHT_PAREN) {\n this.nextToken();\n break;\n } else if (noParens && tok.type === lexer.TOKEN_BLOCK_END) {\n break;\n }\n\n if (checkComma && !this.skip(lexer.TOKEN_COMMA)) {\n this.fail('parseSignature: expected comma after expression',\n tok.lineno,\n tok.colno);\n } else {\n const arg = this.parseExpression();\n\n if (this.skipValue(lexer.TOKEN_OPERATOR, '=')) {\n kwargs.addChild(\n new nodes.Pair(arg.lineno,\n arg.colno,\n arg,\n this.parseExpression())\n );\n } else {\n args.addChild(arg);\n }\n }\n\n checkComma = true;\n }\n\n if (kwargs.children.length) {\n args.addChild(kwargs);\n }\n\n return args;\n }\n\n parseUntilBlocks(...blockNames) {\n const prev = this.breakOnBlocks;\n this.breakOnBlocks = blockNames;\n\n const ret = this.parse();\n\n this.breakOnBlocks = prev;\n return ret;\n }\n\n parseNodes() {\n let tok;\n const buf = [];\n\n while ((tok = this.nextToken())) {\n if (tok.type === lexer.TOKEN_DATA) {\n let data = tok.value;\n const nextToken = this.peekToken();\n const nextVal = nextToken && nextToken.value;\n\n // If the last token has \"-\" we need to trim the\n // leading whitespace of the data. This is marked with\n // the `dropLeadingWhitespace` variable.\n if (this.dropLeadingWhitespace) {\n // TODO: this could be optimized (don't use regex)\n data = data.replace(/^\\s*/, '');\n this.dropLeadingWhitespace = false;\n }\n\n // Same for the succeeding block start token\n if (nextToken &&\n ((nextToken.type === lexer.TOKEN_BLOCK_START &&\n nextVal.charAt(nextVal.length - 1) === '-') ||\n (nextToken.type === lexer.TOKEN_VARIABLE_START &&\n nextVal.charAt(this.tokens.tags.VARIABLE_START.length)\n === '-') ||\n (nextToken.type === lexer.TOKEN_COMMENT &&\n nextVal.charAt(this.tokens.tags.COMMENT_START.length)\n === '-'))) {\n // TODO: this could be optimized (don't use regex)\n data = data.replace(/\\s*$/, '');\n }\n\n buf.push(new nodes.Output(tok.lineno,\n tok.colno,\n [new nodes.TemplateData(tok.lineno,\n tok.colno,\n data)]));\n } else if (tok.type === lexer.TOKEN_BLOCK_START) {\n this.dropLeadingWhitespace = false;\n const n = this.parseStatement();\n if (!n) {\n break;\n }\n buf.push(n);\n } else if (tok.type === lexer.TOKEN_VARIABLE_START) {\n const e = this.parseExpression();\n this.dropLeadingWhitespace = false;\n this.advanceAfterVariableEnd();\n buf.push(new nodes.Output(tok.lineno, tok.colno, [e]));\n } else if (tok.type === lexer.TOKEN_COMMENT) {\n this.dropLeadingWhitespace = tok.value.charAt(\n tok.value.length - this.tokens.tags.COMMENT_END.length - 1\n ) === '-';\n } else {\n // Ignore comments, otherwise this should be an error\n this.fail('Unexpected token at top-level: ' +\n tok.type, tok.lineno, tok.colno);\n }\n }\n\n return buf;\n }\n\n parse() {\n return new nodes.NodeList(0, 0, this.parseNodes());\n }\n\n parseAsRoot() {\n return new nodes.Root(0, 0, this.parseNodes());\n }\n}\n\n// var util = require('util');\n\n// var l = lexer.lex('{%- if x -%}\\n hello {% endif %}');\n// var t;\n// while((t = l.nextToken())) {\n// console.log(util.inspect(t));\n// }\n\n// var p = new Parser(lexer.lex('hello {% filter title %}' +\n// 'Hello madam how are you' +\n// '{% endfilter %}'));\n// var n = p.parseAsRoot();\n// nodes.printNodes(n);\n\nmodule.exports = {\n parse(src, extensions, opts) {\n var p = new Parser(lexer.lex(src, opts));\n if (extensions !== undefined) {\n p.extensions = extensions;\n }\n return p.parseAsRoot();\n },\n Parser: Parser\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/parser.js","'use strict';\n\nconst lib = require('./lib');\n\nlet whitespaceChars = ' \\n\\t\\r\\u00A0';\nlet delimChars = '()[]{}%*-+~/#,:|.<>=!';\nlet intChars = '0123456789';\n\nlet BLOCK_START = '{%';\nlet BLOCK_END = '%}';\nlet VARIABLE_START = '{{';\nlet VARIABLE_END = '}}';\nlet COMMENT_START = '{#';\nlet COMMENT_END = '#}';\n\nlet TOKEN_STRING = 'string';\nlet TOKEN_WHITESPACE = 'whitespace';\nlet TOKEN_DATA = 'data';\nlet TOKEN_BLOCK_START = 'block-start';\nlet TOKEN_BLOCK_END = 'block-end';\nlet TOKEN_VARIABLE_START = 'variable-start';\nlet TOKEN_VARIABLE_END = 'variable-end';\nlet TOKEN_COMMENT = 'comment';\nlet TOKEN_LEFT_PAREN = 'left-paren';\nlet TOKEN_RIGHT_PAREN = 'right-paren';\nlet TOKEN_LEFT_BRACKET = 'left-bracket';\nlet TOKEN_RIGHT_BRACKET = 'right-bracket';\nlet TOKEN_LEFT_CURLY = 'left-curly';\nlet TOKEN_RIGHT_CURLY = 'right-curly';\nlet TOKEN_OPERATOR = 'operator';\nlet TOKEN_COMMA = 'comma';\nlet TOKEN_COLON = 'colon';\nlet TOKEN_TILDE = 'tilde';\nlet TOKEN_PIPE = 'pipe';\nlet TOKEN_INT = 'int';\nlet TOKEN_FLOAT = 'float';\nlet TOKEN_BOOLEAN = 'boolean';\nlet TOKEN_NONE = 'none';\nlet TOKEN_SYMBOL = 'symbol';\nlet TOKEN_SPECIAL = 'special';\nlet TOKEN_REGEX = 'regex';\n\nfunction token(type, value, lineno, colno) {\n return {\n type: type,\n value: value,\n lineno: lineno,\n colno: colno\n };\n}\n\nclass Tokenizer {\n constructor(str, opts) {\n this.str = str;\n this.index = 0;\n this.len = str.length;\n this.lineno = 0;\n this.colno = 0;\n\n this.in_code = false;\n\n opts = opts || {};\n\n let tags = opts.tags || {};\n this.tags = {\n BLOCK_START: tags.blockStart || BLOCK_START,\n BLOCK_END: tags.blockEnd || BLOCK_END,\n VARIABLE_START: tags.variableStart || VARIABLE_START,\n VARIABLE_END: tags.variableEnd || VARIABLE_END,\n COMMENT_START: tags.commentStart || COMMENT_START,\n COMMENT_END: tags.commentEnd || COMMENT_END\n };\n\n this.trimBlocks = !!opts.trimBlocks;\n this.lstripBlocks = !!opts.lstripBlocks;\n }\n\n nextToken() {\n let lineno = this.lineno;\n let colno = this.colno;\n let tok;\n\n if (this.in_code) {\n // Otherwise, if we are in a block parse it as code\n let cur = this.current();\n\n if (this.isFinished()) {\n // We have nothing else to parse\n return null;\n } else if (cur === '\"' || cur === '\\'') {\n // We've hit a string\n return token(TOKEN_STRING, this._parseString(cur), lineno, colno);\n } else if ((tok = this._extract(whitespaceChars))) {\n // We hit some whitespace\n return token(TOKEN_WHITESPACE, tok, lineno, colno);\n } else if ((tok = this._extractString(this.tags.BLOCK_END)) ||\n (tok = this._extractString('-' + this.tags.BLOCK_END))) {\n // Special check for the block end tag\n //\n // It is a requirement that start and end tags are composed of\n // delimiter characters (%{}[] etc), and our code always\n // breaks on delimiters so we can assume the token parsing\n // doesn't consume these elsewhere\n this.in_code = false;\n if (this.trimBlocks) {\n cur = this.current();\n if (cur === '\\n') {\n // Skip newline\n this.forward();\n } else if (cur === '\\r') {\n // Skip CRLF newline\n this.forward();\n cur = this.current();\n if (cur === '\\n') {\n this.forward();\n } else {\n // Was not a CRLF, so go back\n this.back();\n }\n }\n }\n return token(TOKEN_BLOCK_END, tok, lineno, colno);\n } else if ((tok = this._extractString(this.tags.VARIABLE_END)) ||\n (tok = this._extractString('-' + this.tags.VARIABLE_END))) {\n // Special check for variable end tag (see above)\n this.in_code = false;\n return token(TOKEN_VARIABLE_END, tok, lineno, colno);\n } else if (cur === 'r' && this.str.charAt(this.index + 1) === '/') {\n // Skip past 'r/'.\n this.forwardN(2);\n\n // Extract until the end of the regex -- / ends it, \\/ does not.\n let regexBody = '';\n while (!this.isFinished()) {\n if (this.current() === '/' && this.previous() !== '\\\\') {\n this.forward();\n break;\n } else {\n regexBody += this.current();\n this.forward();\n }\n }\n\n // Check for flags.\n // The possible flags are according to https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp)\n let POSSIBLE_FLAGS = ['g', 'i', 'm', 'y'];\n let regexFlags = '';\n while (!this.isFinished()) {\n let isCurrentAFlag = POSSIBLE_FLAGS.indexOf(this.current()) !== -1;\n if (isCurrentAFlag) {\n regexFlags += this.current();\n this.forward();\n } else {\n break;\n }\n }\n\n return token(TOKEN_REGEX, {\n body: regexBody,\n flags: regexFlags\n }, lineno, colno);\n } else if (delimChars.indexOf(cur) !== -1) {\n // We've hit a delimiter (a special char like a bracket)\n this.forward();\n let complexOps = ['==', '===', '!=', '!==', '<=', '>=', '//', '**'];\n let curComplex = cur + this.current();\n let type;\n\n if (lib.indexOf(complexOps, curComplex) !== -1) {\n this.forward();\n cur = curComplex;\n\n // See if this is a strict equality/inequality comparator\n if (lib.indexOf(complexOps, curComplex + this.current()) !== -1) {\n cur = curComplex + this.current();\n this.forward();\n }\n }\n\n switch (cur) {\n case '(':\n type = TOKEN_LEFT_PAREN;\n break;\n case ')':\n type = TOKEN_RIGHT_PAREN;\n break;\n case '[':\n type = TOKEN_LEFT_BRACKET;\n break;\n case ']':\n type = TOKEN_RIGHT_BRACKET;\n break;\n case '{':\n type = TOKEN_LEFT_CURLY;\n break;\n case '}':\n type = TOKEN_RIGHT_CURLY;\n break;\n case ',':\n type = TOKEN_COMMA;\n break;\n case ':':\n type = TOKEN_COLON;\n break;\n case '~':\n type = TOKEN_TILDE;\n break;\n case '|':\n type = TOKEN_PIPE;\n break;\n default:\n type = TOKEN_OPERATOR;\n }\n\n return token(type, cur, lineno, colno);\n } else {\n // We are not at whitespace or a delimiter, so extract the\n // text and parse it\n tok = this._extractUntil(whitespaceChars + delimChars);\n\n if (tok.match(/^[-+]?[0-9]+$/)) {\n if (this.current() === '.') {\n this.forward();\n let dec = this._extract(intChars);\n return token(TOKEN_FLOAT, tok + '.' + dec, lineno, colno);\n } else {\n return token(TOKEN_INT, tok, lineno, colno);\n }\n } else if (tok.match(/^(true|false)$/)) {\n return token(TOKEN_BOOLEAN, tok, lineno, colno);\n } else if (tok === 'none') {\n return token(TOKEN_NONE, tok, lineno, colno);\n /*\n * Added to make the test `null is null` evaluate truthily.\n * Otherwise, Nunjucks will look up null in the context and\n * return `undefined`, which is not what we want. This *may* have\n * consequences is someone is using null in their templates as a\n * variable.\n */\n } else if (tok === 'null') {\n return token(TOKEN_NONE, tok, lineno, colno);\n } else if (tok) {\n return token(TOKEN_SYMBOL, tok, lineno, colno);\n } else {\n throw new Error('Unexpected value while parsing: ' + tok);\n }\n }\n } else {\n // Parse out the template text, breaking on tag\n // delimiters because we need to look for block/variable start\n // tags (don't use the full delimChars for optimization)\n let beginChars = (this.tags.BLOCK_START.charAt(0) +\n this.tags.VARIABLE_START.charAt(0) +\n this.tags.COMMENT_START.charAt(0) +\n this.tags.COMMENT_END.charAt(0));\n\n if (this.isFinished()) {\n return null;\n } else if ((tok = this._extractString(this.tags.BLOCK_START + '-')) ||\n (tok = this._extractString(this.tags.BLOCK_START))) {\n this.in_code = true;\n return token(TOKEN_BLOCK_START, tok, lineno, colno);\n } else if ((tok = this._extractString(this.tags.VARIABLE_START + '-')) ||\n (tok = this._extractString(this.tags.VARIABLE_START))) {\n this.in_code = true;\n return token(TOKEN_VARIABLE_START, tok, lineno, colno);\n } else {\n tok = '';\n let data;\n let inComment = false;\n\n if (this._matches(this.tags.COMMENT_START)) {\n inComment = true;\n tok = this._extractString(this.tags.COMMENT_START);\n }\n\n // Continually consume text, breaking on the tag delimiter\n // characters and checking to see if it's a start tag.\n //\n // We could hit the end of the template in the middle of\n // our looping, so check for the null return value from\n // _extractUntil\n while ((data = this._extractUntil(beginChars)) !== null) {\n tok += data;\n\n if ((this._matches(this.tags.BLOCK_START) ||\n this._matches(this.tags.VARIABLE_START) ||\n this._matches(this.tags.COMMENT_START)) &&\n !inComment) {\n if (this.lstripBlocks &&\n this._matches(this.tags.BLOCK_START) &&\n this.colno > 0 &&\n this.colno <= tok.length) {\n let lastLine = tok.slice(-this.colno);\n if (/^\\s+$/.test(lastLine)) {\n // Remove block leading whitespace from beginning of the string\n tok = tok.slice(0, -this.colno);\n if (!tok.length) {\n // All data removed, collapse to avoid unnecessary nodes\n // by returning next token (block start)\n return this.nextToken();\n }\n }\n }\n // If it is a start tag, stop looping\n break;\n } else if (this._matches(this.tags.COMMENT_END)) {\n if (!inComment) {\n throw new Error('unexpected end of comment');\n }\n tok += this._extractString(this.tags.COMMENT_END);\n break;\n } else {\n // It does not match any tag, so add the character and\n // carry on\n tok += this.current();\n this.forward();\n }\n }\n\n if (data === null && inComment) {\n throw new Error('expected end of comment, got end of file');\n }\n\n return token(inComment ? TOKEN_COMMENT : TOKEN_DATA,\n tok,\n lineno,\n colno);\n }\n }\n }\n\n _parseString(delimiter) {\n this.forward();\n\n let str = '';\n\n while (!this.isFinished() && this.current() !== delimiter) {\n let cur = this.current();\n\n if (cur === '\\\\') {\n this.forward();\n switch (this.current()) {\n case 'n':\n str += '\\n';\n break;\n case 't':\n str += '\\t';\n break;\n case 'r':\n str += '\\r';\n break;\n default:\n str += this.current();\n }\n this.forward();\n } else {\n str += cur;\n this.forward();\n }\n }\n\n this.forward();\n return str;\n }\n\n _matches(str) {\n if (this.index + str.length > this.len) {\n return null;\n }\n\n let m = this.str.slice(this.index, this.index + str.length);\n return m === str;\n }\n\n _extractString(str) {\n if (this._matches(str)) {\n this.forwardN(str.length);\n return str;\n }\n return null;\n }\n\n _extractUntil(charString) {\n // Extract all non-matching chars, with the default matching set\n // to everything\n return this._extractMatching(true, charString || '');\n }\n\n _extract(charString) {\n // Extract all matching chars (no default, so charString must be\n // explicit)\n return this._extractMatching(false, charString);\n }\n\n _extractMatching(breakOnMatch, charString) {\n // Pull out characters until a breaking char is hit.\n // If breakOnMatch is false, a non-matching char stops it.\n // If breakOnMatch is true, a matching char stops it.\n\n if (this.isFinished()) {\n return null;\n }\n\n let first = charString.indexOf(this.current());\n\n // Only proceed if the first character doesn't meet our condition\n if ((breakOnMatch && first === -1) ||\n (!breakOnMatch && first !== -1)) {\n let t = this.current();\n this.forward();\n\n // And pull out all the chars one at a time until we hit a\n // breaking char\n let idx = charString.indexOf(this.current());\n\n while (((breakOnMatch && idx === -1) ||\n (!breakOnMatch && idx !== -1)) && !this.isFinished()) {\n t += this.current();\n this.forward();\n\n idx = charString.indexOf(this.current());\n }\n\n return t;\n }\n\n return '';\n }\n\n _extractRegex(regex) {\n let matches = this.currentStr().match(regex);\n if (!matches) {\n return null;\n }\n\n // Move forward whatever was matched\n this.forwardN(matches[0].length);\n\n return matches;\n }\n\n isFinished() {\n return this.index >= this.len;\n }\n\n forwardN(n) {\n for (let i = 0; i < n; i++) {\n this.forward();\n }\n }\n\n forward() {\n this.index++;\n\n if (this.previous() === '\\n') {\n this.lineno++;\n this.colno = 0;\n } else {\n this.colno++;\n }\n }\n\n backN(n) {\n for (let i = 0; i < n; i++) {\n this.back();\n }\n }\n\n back() {\n this.index--;\n\n if (this.current() === '\\n') {\n this.lineno--;\n\n let idx = this.src.lastIndexOf('\\n', this.index - 1);\n if (idx === -1) {\n this.colno = this.index;\n } else {\n this.colno = this.index - idx;\n }\n } else {\n this.colno--;\n }\n }\n\n // current returns current character\n current() {\n if (!this.isFinished()) {\n return this.str.charAt(this.index);\n }\n return '';\n }\n\n // currentStr returns what's left of the unparsed string\n currentStr() {\n if (!this.isFinished()) {\n return this.str.substr(this.index);\n }\n return '';\n }\n\n previous() {\n return this.str.charAt(this.index - 1);\n }\n}\n\nmodule.exports = {\n lex(src, opts) {\n return new Tokenizer(src, opts);\n },\n\n TOKEN_STRING: TOKEN_STRING,\n TOKEN_WHITESPACE: TOKEN_WHITESPACE,\n TOKEN_DATA: TOKEN_DATA,\n TOKEN_BLOCK_START: TOKEN_BLOCK_START,\n TOKEN_BLOCK_END: TOKEN_BLOCK_END,\n TOKEN_VARIABLE_START: TOKEN_VARIABLE_START,\n TOKEN_VARIABLE_END: TOKEN_VARIABLE_END,\n TOKEN_COMMENT: TOKEN_COMMENT,\n TOKEN_LEFT_PAREN: TOKEN_LEFT_PAREN,\n TOKEN_RIGHT_PAREN: TOKEN_RIGHT_PAREN,\n TOKEN_LEFT_BRACKET: TOKEN_LEFT_BRACKET,\n TOKEN_RIGHT_BRACKET: TOKEN_RIGHT_BRACKET,\n TOKEN_LEFT_CURLY: TOKEN_LEFT_CURLY,\n TOKEN_RIGHT_CURLY: TOKEN_RIGHT_CURLY,\n TOKEN_OPERATOR: TOKEN_OPERATOR,\n TOKEN_COMMA: TOKEN_COMMA,\n TOKEN_COLON: TOKEN_COLON,\n TOKEN_TILDE: TOKEN_TILDE,\n TOKEN_PIPE: TOKEN_PIPE,\n TOKEN_INT: TOKEN_INT,\n TOKEN_FLOAT: TOKEN_FLOAT,\n TOKEN_BOOLEAN: TOKEN_BOOLEAN,\n TOKEN_NONE: TOKEN_NONE,\n TOKEN_SYMBOL: TOKEN_SYMBOL,\n TOKEN_SPECIAL: TOKEN_SPECIAL,\n TOKEN_REGEX: TOKEN_REGEX\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/lexer.js","'use strict';\n\nconst Loader = require('./loader');\nconst {PrecompiledLoader} = require('./precompiled-loader.js');\n\nclass WebLoader extends Loader {\n constructor(baseURL, opts) {\n super();\n this.baseURL = baseURL || '.';\n opts = opts || {};\n\n // By default, the cache is turned off because there's no way\n // to \"watch\" templates over HTTP, so they are re-downloaded\n // and compiled each time. (Remember, PRECOMPILE YOUR\n // TEMPLATES in production!)\n this.useCache = !!opts.useCache;\n\n // We default `async` to false so that the simple synchronous\n // API can be used when you aren't doing anything async in\n // your templates (which is most of the time). This performs a\n // sync ajax request, but that's ok because it should *only*\n // happen in development. PRECOMPILE YOUR TEMPLATES.\n this.async = !!opts.async;\n }\n\n resolve(from, to) {\n throw new Error('relative templates not support in the browser yet');\n }\n\n getSource(name, cb) {\n var useCache = this.useCache;\n var result;\n this.fetch(this.baseURL + '/' + name, (err, src) => {\n if (err) {\n if (cb) {\n cb(err.content);\n } else if (err.status === 404) {\n result = null;\n } else {\n throw err.content;\n }\n } else {\n result = {\n src: src,\n path: name,\n noCache: !useCache\n };\n this.emit('load', name, result);\n if (cb) {\n cb(null, result);\n }\n }\n });\n\n // if this WebLoader isn't running asynchronously, the\n // fetch above would actually run sync and we'll have a\n // result here\n return result;\n }\n\n fetch(url, cb) {\n // Only in the browser please\n if (typeof window === 'undefined') {\n throw new Error('WebLoader can only by used in a browser');\n }\n\n const ajax = new XMLHttpRequest();\n let loading = true;\n\n ajax.onreadystatechange = () => {\n if (ajax.readyState === 4 && loading) {\n loading = false;\n if (ajax.status === 0 || ajax.status === 200) {\n cb(null, ajax.responseText);\n } else {\n cb({\n status: ajax.status,\n content: ajax.responseText\n });\n }\n }\n };\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + 's=' +\n (new Date().getTime());\n\n ajax.open('GET', url, this.async);\n ajax.send();\n }\n}\n\nmodule.exports = {\n WebLoader: WebLoader,\n PrecompiledLoader: PrecompiledLoader\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/web-loaders.js","'use strict';\n\nconst lib = require('./src/lib');\nconst {Environment, Template} = require('./src/environment');\nconst Loader = require('./src/loader');\nconst loaders = require('./src/loaders');\nconst precompile = require('./src/precompile');\nconst compiler = require('./src/compiler');\nconst parser = require('./src/parser');\nconst lexer = require('./src/lexer');\nconst runtime = require('./src/runtime');\nconst nodes = require('./src/nodes');\nconst installJinjaCompat = require('./src/jinja-compat');\n\n// A single instance of an environment, since this is so commonly used\nlet e;\n\nfunction configure(templatesPath, opts) {\n opts = opts || {};\n if (lib.isObject(templatesPath)) {\n opts = templatesPath;\n templatesPath = null;\n }\n\n let TemplateLoader;\n if (loaders.FileSystemLoader) {\n TemplateLoader = new loaders.FileSystemLoader(templatesPath, {\n watch: opts.watch,\n noCache: opts.noCache\n });\n } else if (loaders.WebLoader) {\n TemplateLoader = new loaders.WebLoader(templatesPath, {\n useCache: opts.web && opts.web.useCache,\n async: opts.web && opts.web.async\n });\n }\n\n e = new Environment(TemplateLoader, opts);\n\n if (opts && opts.express) {\n e.express(opts.express);\n }\n\n return e;\n}\n\nmodule.exports = {\n Environment: Environment,\n Template: Template,\n Loader: Loader,\n FileSystemLoader: loaders.FileSystemLoader,\n NodeResolveLoader: loaders.NodeResolveLoader,\n PrecompiledLoader: loaders.PrecompiledLoader,\n WebLoader: loaders.WebLoader,\n compiler: compiler,\n parser: parser,\n lexer: lexer,\n runtime: runtime,\n lib: lib,\n nodes: nodes,\n installJinjaCompat: installJinjaCompat,\n configure: configure,\n reset() {\n e = undefined;\n },\n compile(src, env, path, eagerCompile) {\n if (!e) {\n configure();\n }\n return new Template(src, env, path, eagerCompile);\n },\n render(name, ctx, cb) {\n if (!e) {\n configure();\n }\n\n return e.render(name, ctx, cb);\n },\n renderString(src, ctx, cb) {\n if (!e) {\n configure();\n }\n\n return e.renderString(src, ctx, cb);\n },\n precompile: (precompile) ? precompile.precompile : undefined,\n precompileString: (precompile) ? precompile.precompileString : undefined,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/index.js","\"use strict\";\n\n// rawAsap provides everything we need except exception management.\nvar rawAsap = require(\"./raw\");\n// RawTasks are recycled to reduce GC churn.\nvar freeTasks = [];\n// We queue errors to ensure they are thrown in right order (FIFO).\n// Array-as-queue is good enough here, since we are just dealing with exceptions.\nvar pendingErrors = [];\nvar requestErrorThrow = rawAsap.makeRequestCallFromTimer(throwFirstError);\n\nfunction throwFirstError() {\n if (pendingErrors.length) {\n throw pendingErrors.shift();\n }\n}\n\n/**\n * Calls a task as soon as possible after returning, in its own event, with priority\n * over other events like animation, reflow, and repaint. An error thrown from an\n * event will not interrupt, nor even substantially slow down the processing of\n * other events, but will be rather postponed to a lower priority event.\n * @param {{call}} task A callable object, typically a function that takes no\n * arguments.\n */\nmodule.exports = asap;\nfunction asap(task) {\n var rawTask;\n if (freeTasks.length) {\n rawTask = freeTasks.pop();\n } else {\n rawTask = new RawTask();\n }\n rawTask.task = task;\n rawAsap(rawTask);\n}\n\n// We wrap tasks with recyclable task objects. A task object implements\n// `call`, just like a function.\nfunction RawTask() {\n this.task = null;\n}\n\n// The sole purpose of wrapping the task is to catch the exception and recycle\n// the task object after its single use.\nRawTask.prototype.call = function () {\n try {\n this.task.call();\n } catch (error) {\n if (asap.onerror) {\n // This hook exists purely for testing purposes.\n // Its name will be periodically randomized to break any code that\n // depends on its existence.\n asap.onerror(error);\n } else {\n // In a web browser, exceptions are not fatal. However, to avoid\n // slowing down the queue of pending tasks, we rethrow the error in a\n // lower priority turn.\n pendingErrors.push(error);\n requestErrorThrow();\n }\n } finally {\n this.task = null;\n freeTasks[freeTasks.length] = this;\n }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/asap/browser-asap.js\n// module id = 12\n// module chunks = 0","\"use strict\";\n\n// Use the fastest means possible to execute a task in its own turn, with\n// priority over other events including IO, animation, reflow, and redraw\n// events in browsers.\n//\n// An exception thrown by a task will permanently interrupt the processing of\n// subsequent tasks. The higher level `asap` function ensures that if an\n// exception is thrown by a task, that the task queue will continue flushing as\n// soon as possible, but if you use `rawAsap` directly, you are responsible to\n// either ensure that no exceptions are thrown from your task, or to manually\n// call `rawAsap.requestFlush` if an exception is thrown.\nmodule.exports = rawAsap;\nfunction rawAsap(task) {\n if (!queue.length) {\n requestFlush();\n flushing = true;\n }\n // Equivalent to push, but avoids a function call.\n queue[queue.length] = task;\n}\n\nvar queue = [];\n// Once a flush has been requested, no further calls to `requestFlush` are\n// necessary until the next `flush` completes.\nvar flushing = false;\n// `requestFlush` is an implementation-specific method that attempts to kick\n// off a `flush` event as quickly as possible. `flush` will attempt to exhaust\n// the event queue before yielding to the browser's own event loop.\nvar requestFlush;\n// The position of the next task to execute in the task queue. This is\n// preserved between calls to `flush` so that it can be resumed if\n// a task throws an exception.\nvar index = 0;\n// If a task schedules additional tasks recursively, the task queue can grow\n// unbounded. To prevent memory exhaustion, the task queue will periodically\n// truncate already-completed tasks.\nvar capacity = 1024;\n\n// The flush function processes all tasks that have been scheduled with\n// `rawAsap` unless and until one of those tasks throws an exception.\n// If a task throws an exception, `flush` ensures that its state will remain\n// consistent and will resume where it left off when called again.\n// However, `flush` does not make any arrangements to be called again if an\n// exception is thrown.\nfunction flush() {\n while (index < queue.length) {\n var currentIndex = index;\n // Advance the index before calling the task. This ensures that we will\n // begin flushing on the next task the task throws an error.\n index = index + 1;\n queue[currentIndex].call();\n // Prevent leaking memory for long chains of recursive calls to `asap`.\n // If we call `asap` within tasks scheduled by `asap`, the queue will\n // grow, but to avoid an O(n) walk for every task we execute, we don't\n // shift tasks off the queue after they have been executed.\n // Instead, we periodically shift 1024 tasks off the queue.\n if (index > capacity) {\n // Manually shift all values starting at the index back to the\n // beginning of the queue.\n for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {\n queue[scan] = queue[scan + index];\n }\n queue.length -= index;\n index = 0;\n }\n }\n queue.length = 0;\n index = 0;\n flushing = false;\n}\n\n// `requestFlush` is implemented using a strategy based on data collected from\n// every available SauceLabs Selenium web driver worker at time of writing.\n// https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593\n\n// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that\n// have WebKitMutationObserver but not un-prefixed MutationObserver.\n// Must use `global` or `self` instead of `window` to work in both frames and web\n// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop.\n\n/* globals self */\nvar scope = typeof global !== \"undefined\" ? global : self;\nvar BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver;\n\n// MutationObservers are desirable because they have high priority and work\n// reliably everywhere they are implemented.\n// They are implemented in all modern browsers.\n//\n// - Android 4-4.3\n// - Chrome 26-34\n// - Firefox 14-29\n// - Internet Explorer 11\n// - iPad Safari 6-7.1\n// - iPhone Safari 7-7.1\n// - Safari 6-7\nif (typeof BrowserMutationObserver === \"function\") {\n requestFlush = makeRequestCallFromMutationObserver(flush);\n\n// MessageChannels are desirable because they give direct access to the HTML\n// task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera\n// 11-12, and in web workers in many engines.\n// Although message channels yield to any queued rendering and IO tasks, they\n// would be better than imposing the 4ms delay of timers.\n// However, they do not work reliably in Internet Explorer or Safari.\n\n// Internet Explorer 10 is the only browser that has setImmediate but does\n// not have MutationObservers.\n// Although setImmediate yields to the browser's renderer, it would be\n// preferrable to falling back to setTimeout since it does not have\n// the minimum 4ms penalty.\n// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and\n// Desktop to a lesser extent) that renders both setImmediate and\n// MessageChannel useless for the purposes of ASAP.\n// https://github.com/kriskowal/q/issues/396\n\n// Timers are implemented universally.\n// We fall back to timers in workers in most engines, and in foreground\n// contexts in the following browsers.\n// However, note that even this simple case requires nuances to operate in a\n// broad spectrum of browsers.\n//\n// - Firefox 3-13\n// - Internet Explorer 6-9\n// - iPad Safari 4.3\n// - Lynx 2.8.7\n} else {\n requestFlush = makeRequestCallFromTimer(flush);\n}\n\n// `requestFlush` requests that the high priority event queue be flushed as\n// soon as possible.\n// This is useful to prevent an error thrown in a task from stalling the event\n// queue if the exception handled by Node.js’s\n// `process.on(\"uncaughtException\")` or by a domain.\nrawAsap.requestFlush = requestFlush;\n\n// To request a high priority event, we induce a mutation observer by toggling\n// the text of a text node between \"1\" and \"-1\".\nfunction makeRequestCallFromMutationObserver(callback) {\n var toggle = 1;\n var observer = new BrowserMutationObserver(callback);\n var node = document.createTextNode(\"\");\n observer.observe(node, {characterData: true});\n return function requestCall() {\n toggle = -toggle;\n node.data = toggle;\n };\n}\n\n// The message channel technique was discovered by Malte Ubl and was the\n// original foundation for this library.\n// http://www.nonblocking.io/2011/06/windownexttick.html\n\n// Safari 6.0.5 (at least) intermittently fails to create message ports on a\n// page's first load. Thankfully, this version of Safari supports\n// MutationObservers, so we don't need to fall back in that case.\n\n// function makeRequestCallFromMessageChannel(callback) {\n// var channel = new MessageChannel();\n// channel.port1.onmessage = callback;\n// return function requestCall() {\n// channel.port2.postMessage(0);\n// };\n// }\n\n// For reasons explained above, we are also unable to use `setImmediate`\n// under any circumstances.\n// Even if we were, there is another bug in Internet Explorer 10.\n// It is not sufficient to assign `setImmediate` to `requestFlush` because\n// `setImmediate` must be called *by name* and therefore must be wrapped in a\n// closure.\n// Never forget.\n\n// function makeRequestCallFromSetImmediate(callback) {\n// return function requestCall() {\n// setImmediate(callback);\n// };\n// }\n\n// Safari 6.0 has a problem where timers will get lost while the user is\n// scrolling. This problem does not impact ASAP because Safari 6.0 supports\n// mutation observers, so that implementation is used instead.\n// However, if we ever elect to use timers in Safari, the prevalent work-around\n// is to add a scroll event listener that calls for a flush.\n\n// `setTimeout` does not call the passed callback if the delay is less than\n// approximately 7 in web workers in Firefox 8 through 18, and sometimes not\n// even then.\n\nfunction makeRequestCallFromTimer(callback) {\n return function requestCall() {\n // We dispatch a timeout with a specified delay of 0 for engines that\n // can reliably accommodate that request. This will usually be snapped\n // to a 4 milisecond delay, but once we're flushing, there's no delay\n // between events.\n var timeoutHandle = setTimeout(handleTimer, 0);\n // However, since this timer gets frequently dropped in Firefox\n // workers, we enlist an interval handle that will try to fire\n // an event 20 times per second until it succeeds.\n var intervalHandle = setInterval(handleTimer, 50);\n\n function handleTimer() {\n // Whichever timer succeeds will cancel both timers and\n // execute the callback.\n clearTimeout(timeoutHandle);\n clearInterval(intervalHandle);\n callback();\n }\n };\n}\n\n// This is for `asap.js` only.\n// Its name will be periodically randomized to break any code that depends on\n// its existence.\nrawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer;\n\n// ASAP was originally a nextTick shim included in Q. This was factored out\n// into this ASAP package. It was later adapted to RSVP which made further\n// amendments. These decisions, particularly to marginalize MessageChannel and\n// to capture the MutationObserver implementation in a closure, were integrated\n// back into ASAP proper.\n// https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/asap/browser-raw.js\n// module id = 13\n// module chunks = 0","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 14\n// module chunks = 0","// MIT license (by Elan Shanker).\n(function(globals) {\n 'use strict';\n\n var executeSync = function(){\n var args = Array.prototype.slice.call(arguments);\n if (typeof args[0] === 'function'){\n args[0].apply(null, args.splice(1));\n }\n };\n\n var executeAsync = function(fn){\n if (typeof setImmediate === 'function') {\n setImmediate(fn);\n } else if (typeof process !== 'undefined' && process.nextTick) {\n process.nextTick(fn);\n } else {\n setTimeout(fn, 0);\n }\n };\n\n var makeIterator = function (tasks) {\n var makeCallback = function (index) {\n var fn = function () {\n if (tasks.length) {\n tasks[index].apply(null, arguments);\n }\n return fn.next();\n };\n fn.next = function () {\n return (index < tasks.length - 1) ? makeCallback(index + 1): null;\n };\n return fn;\n };\n return makeCallback(0);\n };\n \n var _isArray = Array.isArray || function(maybeArray){\n return Object.prototype.toString.call(maybeArray) === '[object Array]';\n };\n\n var waterfall = function (tasks, callback, forceAsync) {\n var nextTick = forceAsync ? executeAsync : executeSync;\n callback = callback || function () {};\n if (!_isArray(tasks)) {\n var err = new Error('First argument to waterfall must be an array of functions');\n return callback(err);\n }\n if (!tasks.length) {\n return callback();\n }\n var wrapIterator = function (iterator) {\n return function (err) {\n if (err) {\n callback.apply(null, arguments);\n callback = function () {};\n } else {\n var args = Array.prototype.slice.call(arguments, 1);\n var next = iterator.next();\n if (next) {\n args.push(wrapIterator(next));\n } else {\n args.push(callback);\n }\n nextTick(function () {\n iterator.apply(null, args);\n });\n }\n };\n };\n wrapIterator(makeIterator(tasks))();\n };\n\n if (typeof define !== 'undefined' && define.amd) {\n define([], function () {\n return waterfall;\n }); // RequireJS\n } else if (typeof module !== 'undefined' && module.exports) {\n module.exports = waterfall; // CommonJS\n } else {\n globals.waterfall = waterfall; // <script>\n }\n})(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/a-sync-waterfall/index.js\n// module id = 15\n// module chunks = 0","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/node_modules/events/events.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nvar nodes = require('./nodes');\nvar lib = require('./lib');\n\nvar sym = 0;\nfunction gensym() {\n return 'hole_' + sym++;\n}\n\n// copy-on-write version of map\nfunction mapCOW(arr, func) {\n var res = null;\n for (let i = 0; i < arr.length; i++) {\n const item = func(arr[i]);\n\n if (item !== arr[i]) {\n if (!res) {\n res = arr.slice();\n }\n\n res[i] = item;\n }\n }\n\n return res || arr;\n}\n\nfunction walk(ast, func, depthFirst) {\n if (!(ast instanceof nodes.Node)) {\n return ast;\n }\n\n if (!depthFirst) {\n const astT = func(ast);\n\n if (astT && astT !== ast) {\n return astT;\n }\n }\n\n if (ast instanceof nodes.NodeList) {\n const children = mapCOW(ast.children, (node) => walk(node, func, depthFirst));\n\n if (children !== ast.children) {\n ast = new nodes[ast.typename](ast.lineno, ast.colno, children);\n }\n } else if (ast instanceof nodes.CallExtension) {\n const args = walk(ast.args, func, depthFirst);\n const contentArgs = mapCOW(ast.contentArgs, (node) => walk(node, func, depthFirst));\n\n if (args !== ast.args || contentArgs !== ast.contentArgs) {\n ast = new nodes[ast.typename](ast.extName, ast.prop, args, contentArgs);\n }\n } else {\n const props = ast.fields.map((field) => ast[field]);\n const propsT = mapCOW(props, (prop) => walk(prop, func, depthFirst));\n\n if (propsT !== props) {\n ast = new nodes[ast.typename](ast.lineno, ast.colno);\n propsT.forEach((prop, i) => {\n ast[ast.fields[i]] = prop;\n });\n }\n }\n\n return depthFirst ? (func(ast) || ast) : ast;\n}\n\nfunction depthWalk(ast, func) {\n return walk(ast, func, true);\n}\n\nfunction _liftFilters(node, asyncFilters, prop) {\n var children = [];\n\n var walked = depthWalk(prop ? node[prop] : node, (descNode) => {\n let symbol;\n if (descNode instanceof nodes.Block) {\n return descNode;\n } else if ((descNode instanceof nodes.Filter &&\n lib.indexOf(asyncFilters, descNode.name.value) !== -1) ||\n descNode instanceof nodes.CallExtensionAsync) {\n symbol = new nodes.Symbol(descNode.lineno,\n descNode.colno,\n gensym());\n\n children.push(new nodes.FilterAsync(descNode.lineno,\n descNode.colno,\n descNode.name,\n descNode.args,\n symbol));\n }\n return symbol;\n });\n\n if (prop) {\n node[prop] = walked;\n } else {\n node = walked;\n }\n\n if (children.length) {\n children.push(node);\n\n return new nodes.NodeList(\n node.lineno,\n node.colno,\n children\n );\n } else {\n return node;\n }\n}\n\nfunction liftFilters(ast, asyncFilters) {\n return depthWalk(ast, (node) => {\n if (node instanceof nodes.Output) {\n return _liftFilters(node, asyncFilters);\n } else if (node instanceof nodes.Set) {\n return _liftFilters(node, asyncFilters, 'value');\n } else if (node instanceof nodes.For) {\n return _liftFilters(node, asyncFilters, 'arr');\n } else if (node instanceof nodes.If) {\n return _liftFilters(node, asyncFilters, 'cond');\n } else if (node instanceof nodes.CallExtension) {\n return _liftFilters(node, asyncFilters, 'args');\n } else {\n return undefined;\n }\n });\n}\n\nfunction liftSuper(ast) {\n return walk(ast, (blockNode) => {\n if (!(blockNode instanceof nodes.Block)) {\n return;\n }\n\n let hasSuper = false;\n const symbol = gensym();\n\n blockNode.body = walk(blockNode.body, (node) => { // eslint-disable-line consistent-return\n if (node instanceof nodes.FunCall && node.name.value === 'super') {\n hasSuper = true;\n return new nodes.Symbol(node.lineno, node.colno, symbol);\n }\n });\n\n if (hasSuper) {\n blockNode.body.children.unshift(new nodes.Super(\n 0, 0, blockNode.name, new nodes.Symbol(0, 0, symbol)\n ));\n }\n });\n}\n\nfunction convertStatements(ast) {\n return depthWalk(ast, (node) => {\n if (!(node instanceof nodes.If) && !(node instanceof nodes.For)) {\n return undefined;\n }\n\n let async = false;\n walk(node, (child) => {\n if (child instanceof nodes.FilterAsync ||\n child instanceof nodes.IfAsync ||\n child instanceof nodes.AsyncEach ||\n child instanceof nodes.AsyncAll ||\n child instanceof nodes.CallExtensionAsync) {\n async = true;\n // Stop iterating by returning the node\n return child;\n }\n return undefined;\n });\n\n if (async) {\n if (node instanceof nodes.If) {\n return new nodes.IfAsync(\n node.lineno,\n node.colno,\n node.cond,\n node.body,\n node.else_\n );\n } else if (node instanceof nodes.For && !(node instanceof nodes.AsyncAll)) {\n return new nodes.AsyncEach(\n node.lineno,\n node.colno,\n node.arr,\n node.name,\n node.body,\n node.else_\n );\n }\n }\n return undefined;\n });\n}\n\nfunction cps(ast, asyncFilters) {\n return convertStatements(liftSuper(liftFilters(ast, asyncFilters)));\n}\n\nfunction transform(ast, asyncFilters) {\n return cps(ast, asyncFilters || []);\n}\n\n// var parser = require('./parser');\n// var src = 'hello {% foo %}{% endfoo %} end';\n// var ast = transform(parser.parse(src, [new FooExtension()]), ['bar']);\n// nodes.printNodes(ast);\n\nmodule.exports = {\n transform: transform\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/transformer.js","'use strict';\n\nvar lib = require('./lib');\nvar r = require('./runtime');\n\nvar exports = module.exports = {};\n\nfunction normalize(value, defaultValue) {\n if (value === null || value === undefined || value === false) {\n return defaultValue;\n }\n return value;\n}\n\nexports.abs = Math.abs;\n\nfunction isNaN(num) {\n return num !== num; // eslint-disable-line no-self-compare\n}\n\nfunction batch(arr, linecount, fillWith) {\n var i;\n var res = [];\n var tmp = [];\n\n for (i = 0; i < arr.length; i++) {\n if (i % linecount === 0 && tmp.length) {\n res.push(tmp);\n tmp = [];\n }\n\n tmp.push(arr[i]);\n }\n\n if (tmp.length) {\n if (fillWith) {\n for (i = tmp.length; i < linecount; i++) {\n tmp.push(fillWith);\n }\n }\n\n res.push(tmp);\n }\n\n return res;\n}\n\nexports.batch = batch;\n\nfunction capitalize(str) {\n str = normalize(str, '');\n const ret = str.toLowerCase();\n return r.copySafeness(str, ret.charAt(0).toUpperCase() + ret.slice(1));\n}\n\nexports.capitalize = capitalize;\n\nfunction center(str, width) {\n str = normalize(str, '');\n width = width || 80;\n\n if (str.length >= width) {\n return str;\n }\n\n const spaces = width - str.length;\n const pre = lib.repeat(' ', (spaces / 2) - (spaces % 2));\n const post = lib.repeat(' ', spaces / 2);\n return r.copySafeness(str, pre + str + post);\n}\n\nexports.center = center;\n\nfunction default_(val, def, bool) {\n if (bool) {\n return val || def;\n } else {\n return (val !== undefined) ? val : def;\n }\n}\n\n// TODO: it is confusing to export something called 'default'\nexports['default'] = default_; // eslint-disable-line dot-notation\n\nfunction dictsort(val, caseSensitive, by) {\n if (!lib.isObject(val)) {\n throw new lib.TemplateError('dictsort filter: val must be an object');\n }\n\n let array = [];\n // deliberately include properties from the object's prototype\n for (let k in val) { // eslint-disable-line guard-for-in, no-restricted-syntax\n array.push([k, val[k]]);\n }\n\n let si;\n if (by === undefined || by === 'key') {\n si = 0;\n } else if (by === 'value') {\n si = 1;\n } else {\n throw new lib.TemplateError(\n 'dictsort filter: You can only sort by either key or value');\n }\n\n array.sort((t1, t2) => {\n var a = t1[si];\n var b = t2[si];\n\n if (!caseSensitive) {\n if (lib.isString(a)) {\n a = a.toUpperCase();\n }\n if (lib.isString(b)) {\n b = b.toUpperCase();\n }\n }\n\n return a > b ? 1 : (a === b ? 0 : -1); // eslint-disable-line no-nested-ternary\n });\n\n return array;\n}\n\nexports.dictsort = dictsort;\n\nfunction dump(obj, spaces) {\n return JSON.stringify(obj, null, spaces);\n}\n\nexports.dump = dump;\n\nfunction escape(str) {\n if (str instanceof r.SafeString) {\n return str;\n }\n str = (str === null || str === undefined) ? '' : str;\n return r.markSafe(lib.escape(str.toString()));\n}\n\nexports.escape = escape;\n\nfunction safe(str) {\n if (str instanceof r.SafeString) {\n return str;\n }\n str = (str === null || str === undefined) ? '' : str;\n return r.markSafe(str.toString());\n}\n\nexports.safe = safe;\n\nfunction first(arr) {\n return arr[0];\n}\n\nexports.first = first;\n\nfunction forceescape(str) {\n str = (str === null || str === undefined) ? '' : str;\n return r.markSafe(lib.escape(str.toString()));\n}\n\nexports.forceescape = forceescape;\n\nfunction groupby(arr, attr) {\n return lib.groupBy(arr, attr, this.env.opts.throwOnUndefined);\n}\n\nexports.groupby = groupby;\n\nfunction indent(str, width, indentfirst) {\n str = normalize(str, '');\n\n if (str === '') {\n return '';\n }\n\n width = width || 4;\n // let res = '';\n const lines = str.split('\\n');\n const sp = lib.repeat(' ', width);\n\n const res = lines.map((l, i) => {\n return (i === 0 && !indentfirst) ? l : `${sp}${l}`;\n }).join('\\n');\n\n return r.copySafeness(str, res);\n}\n\nexports.indent = indent;\n\nfunction join(arr, del, attr) {\n del = del || '';\n\n if (attr) {\n arr = lib.map(arr, (v) => v[attr]);\n }\n\n return arr.join(del);\n}\n\nexports.join = join;\n\nfunction last(arr) {\n return arr[arr.length - 1];\n}\n\nexports.last = last;\n\nfunction lengthFilter(val) {\n var value = normalize(val, '');\n\n if (value !== undefined) {\n if (\n (typeof Map === 'function' && value instanceof Map) ||\n (typeof Set === 'function' && value instanceof Set)\n ) {\n // ECMAScript 2015 Maps and Sets\n return value.size;\n }\n if (lib.isObject(value) && !(value instanceof r.SafeString)) {\n // Objects (besides SafeStrings), non-primative Arrays\n return lib.keys(value).length;\n }\n return value.length;\n }\n return 0;\n}\n\nexports.length = lengthFilter;\n\nfunction list(val) {\n if (lib.isString(val)) {\n return val.split('');\n } else if (lib.isObject(val)) {\n return lib._entries(val || {}).map(([key, value]) => ({key, value}));\n } else if (lib.isArray(val)) {\n return val;\n } else {\n throw new lib.TemplateError('list filter: type not iterable');\n }\n}\n\nexports.list = list;\n\nfunction lower(str) {\n str = normalize(str, '');\n return str.toLowerCase();\n}\n\nexports.lower = lower;\n\nfunction nl2br(str) {\n if (str === null || str === undefined) {\n return '';\n }\n return r.copySafeness(str, str.replace(/\\r\\n|\\n/g, '<br />\\n'));\n}\n\nexports.nl2br = nl2br;\n\nfunction random(arr) {\n return arr[Math.floor(Math.random() * arr.length)];\n}\n\nexports.random = random;\n\n/**\n * Construct select or reject filter\n *\n * @param {boolean} expectedTestResult\n * @returns {function(array, string, *): array}\n */\nfunction getSelectOrReject(expectedTestResult) {\n function filter(arr, testName = 'truthy', secondArg) {\n const context = this;\n const test = context.env.getTest(testName);\n\n return lib.toArray(arr).filter(function examineTestResult(item) {\n return test.call(context, item, secondArg) === expectedTestResult;\n });\n }\n\n return filter;\n}\n\nexports.reject = getSelectOrReject(false);\n\nfunction rejectattr(arr, attr) {\n return arr.filter((item) => !item[attr]);\n}\n\nexports.rejectattr = rejectattr;\n\nexports.select = getSelectOrReject(true);\n\nfunction selectattr(arr, attr) {\n return arr.filter((item) => !!item[attr]);\n}\n\nexports.selectattr = selectattr;\n\nfunction replace(str, old, new_, maxCount) {\n var originalStr = str;\n\n if (old instanceof RegExp) {\n return str.replace(old, new_);\n }\n\n if (typeof maxCount === 'undefined') {\n maxCount = -1;\n }\n\n let res = ''; // Output\n\n // Cast Numbers in the search term to string\n if (typeof old === 'number') {\n old = '' + old;\n } else if (typeof old !== 'string') {\n // If it is something other than number or string,\n // return the original string\n return str;\n }\n\n // Cast numbers in the replacement to string\n if (typeof str === 'number') {\n str = '' + str;\n }\n\n // If by now, we don't have a string, throw it back\n if (typeof str !== 'string' && !(str instanceof r.SafeString)) {\n return str;\n }\n\n // ShortCircuits\n if (old === '') {\n // Mimic the python behaviour: empty string is replaced\n // by replacement e.g. \"abc\"|replace(\"\", \".\") -> .a.b.c.\n res = new_ + str.split('').join(new_) + new_;\n return r.copySafeness(str, res);\n }\n\n let nextIndex = str.indexOf(old);\n // if # of replacements to perform is 0, or the string to does\n // not contain the old value, return the string\n if (maxCount === 0 || nextIndex === -1) {\n return str;\n }\n\n let pos = 0;\n let count = 0; // # of replacements made\n\n while (nextIndex > -1 && (maxCount === -1 || count < maxCount)) {\n // Grab the next chunk of src string and add it with the\n // replacement, to the result\n res += str.substring(pos, nextIndex) + new_;\n // Increment our pointer in the src string\n pos = nextIndex + old.length;\n count++;\n // See if there are any more replacements to be made\n nextIndex = str.indexOf(old, pos);\n }\n\n // We've either reached the end, or done the max # of\n // replacements, tack on any remaining string\n if (pos < str.length) {\n res += str.substring(pos);\n }\n\n return r.copySafeness(originalStr, res);\n}\n\nexports.replace = replace;\n\nfunction reverse(val) {\n var arr;\n if (lib.isString(val)) {\n arr = list(val);\n } else {\n // Copy it\n arr = lib.map(val, v => v);\n }\n\n arr.reverse();\n\n if (lib.isString(val)) {\n return r.copySafeness(val, arr.join(''));\n }\n return arr;\n}\n\nexports.reverse = reverse;\n\nfunction round(val, precision, method) {\n precision = precision || 0;\n const factor = Math.pow(10, precision);\n let rounder;\n\n if (method === 'ceil') {\n rounder = Math.ceil;\n } else if (method === 'floor') {\n rounder = Math.floor;\n } else {\n rounder = Math.round;\n }\n\n return rounder(val * factor) / factor;\n}\n\nexports.round = round;\n\nfunction slice(arr, slices, fillWith) {\n const sliceLength = Math.floor(arr.length / slices);\n const extra = arr.length % slices;\n const res = [];\n let offset = 0;\n\n for (let i = 0; i < slices; i++) {\n const start = offset + (i * sliceLength);\n if (i < extra) {\n offset++;\n }\n const end = offset + ((i + 1) * sliceLength);\n\n const currSlice = arr.slice(start, end);\n if (fillWith && i >= extra) {\n currSlice.push(fillWith);\n }\n res.push(currSlice);\n }\n\n return res;\n}\n\nexports.slice = slice;\n\nfunction sum(arr, attr, start = 0) {\n if (attr) {\n arr = lib.map(arr, (v) => v[attr]);\n }\n\n return start + arr.reduce((a, b) => a + b, 0);\n}\n\nexports.sum = sum;\n\nexports.sort = r.makeMacro(\n ['value', 'reverse', 'case_sensitive', 'attribute'], [],\n function sortFilter(arr, reversed, caseSens, attr) {\n // Copy it\n let array = lib.map(arr, v => v);\n let getAttribute = lib.getAttrGetter(attr);\n\n array.sort((a, b) => {\n let x = (attr) ? getAttribute(a) : a;\n let y = (attr) ? getAttribute(b) : b;\n\n if (\n this.env.opts.throwOnUndefined &&\n attr && (x === undefined || y === undefined)\n ) {\n throw new TypeError(`sort: attribute \"${attr}\" resolved to undefined`);\n }\n\n if (!caseSens && lib.isString(x) && lib.isString(y)) {\n x = x.toLowerCase();\n y = y.toLowerCase();\n }\n\n if (x < y) {\n return reversed ? 1 : -1;\n } else if (x > y) {\n return reversed ? -1 : 1;\n } else {\n return 0;\n }\n });\n\n return array;\n });\n\nfunction string(obj) {\n return r.copySafeness(obj, obj);\n}\n\nexports.string = string;\n\nfunction striptags(input, preserveLinebreaks) {\n input = normalize(input, '');\n let tags = /<\\/?([a-z][a-z0-9]*)\\b[^>]*>|<!--[\\s\\S]*?-->/gi;\n let trimmedInput = trim(input.replace(tags, ''));\n let res = '';\n if (preserveLinebreaks) {\n res = trimmedInput\n .replace(/^ +| +$/gm, '') // remove leading and trailing spaces\n .replace(/ +/g, ' ') // squash adjacent spaces\n .replace(/(\\r\\n)/g, '\\n') // normalize linebreaks (CRLF -> LF)\n .replace(/\\n\\n\\n+/g, '\\n\\n'); // squash abnormal adjacent linebreaks\n } else {\n res = trimmedInput.replace(/\\s+/gi, ' ');\n }\n return r.copySafeness(input, res);\n}\n\nexports.striptags = striptags;\n\nfunction title(str) {\n str = normalize(str, '');\n let words = str.split(' ').map(word => capitalize(word));\n return r.copySafeness(str, words.join(' '));\n}\n\nexports.title = title;\n\nfunction trim(str) {\n return r.copySafeness(str, str.replace(/^\\s*|\\s*$/g, ''));\n}\n\nexports.trim = trim;\n\nfunction truncate(input, length, killwords, end) {\n var orig = input;\n input = normalize(input, '');\n length = length || 255;\n\n if (input.length <= length) {\n return input;\n }\n\n if (killwords) {\n input = input.substring(0, length);\n } else {\n let idx = input.lastIndexOf(' ', length);\n if (idx === -1) {\n idx = length;\n }\n\n input = input.substring(0, idx);\n }\n\n input += (end !== undefined && end !== null) ? end : '...';\n return r.copySafeness(orig, input);\n}\n\nexports.truncate = truncate;\n\nfunction upper(str) {\n str = normalize(str, '');\n return str.toUpperCase();\n}\n\nexports.upper = upper;\n\nfunction urlencode(obj) {\n var enc = encodeURIComponent;\n if (lib.isString(obj)) {\n return enc(obj);\n } else {\n let keyvals = (lib.isArray(obj)) ? obj : lib._entries(obj);\n return keyvals.map(([k, v]) => `${enc(k)}=${enc(v)}`).join('&');\n }\n}\n\nexports.urlencode = urlencode;\n\n// For the jinja regexp, see\n// https://github.com/mitsuhiko/jinja2/blob/f15b814dcba6aa12bc74d1f7d0c881d55f7126be/jinja2/utils.py#L20-L23\nconst puncRe = /^(?:\\(|<|<)?(.*?)(?:\\.|,|\\)|\\n|>)?$/;\n// from http://blog.gerv.net/2011/05/html5_email_address_regexp/\nconst emailRe = /^[\\w.!#$%&'*+\\-\\/=?\\^`{|}~]+@[a-z\\d\\-]+(\\.[a-z\\d\\-]+)+$/i;\nconst httpHttpsRe = /^https?:\\/\\/.*$/;\nconst wwwRe = /^www\\./;\nconst tldRe = /\\.(?:org|net|com)(?:\\:|\\/|$)/;\n\nfunction urlize(str, length, nofollow) {\n if (isNaN(length)) {\n length = Infinity;\n }\n\n const noFollowAttr = (nofollow === true ? ' rel=\"nofollow\"' : '');\n\n const words = str.split(/(\\s+)/).filter((word) => {\n // If the word has no length, bail. This can happen for str with\n // trailing whitespace.\n return word && word.length;\n }).map((word) => {\n var matches = word.match(puncRe);\n var possibleUrl = (matches) ? matches[1] : word;\n var shortUrl = possibleUrl.substr(0, length);\n\n // url that starts with http or https\n if (httpHttpsRe.test(possibleUrl)) {\n return `<a href=\"${possibleUrl}\"${noFollowAttr}>${shortUrl}</a>`;\n }\n\n // url that starts with www.\n if (wwwRe.test(possibleUrl)) {\n return `<a href=\"http://${possibleUrl}\"${noFollowAttr}>${shortUrl}</a>`;\n }\n\n // an email address of the form username@domain.tld\n if (emailRe.test(possibleUrl)) {\n return `<a href=\"mailto:${possibleUrl}\">${possibleUrl}</a>`;\n }\n\n // url that ends in .com, .org or .net that is not an email address\n if (tldRe.test(possibleUrl)) {\n return `<a href=\"http://${possibleUrl}\"${noFollowAttr}>${shortUrl}</a>`;\n }\n\n return word;\n });\n\n return words.join('');\n}\n\nexports.urlize = urlize;\n\nfunction wordcount(str) {\n str = normalize(str, '');\n const words = (str) ? str.match(/\\w+/g) : null;\n return (words) ? words.length : null;\n}\n\nexports.wordcount = wordcount;\n\nfunction float(val, def) {\n var res = parseFloat(val);\n return (isNaN(res)) ? def : res;\n}\n\nexports.float = float;\n\nconst intFilter = r.makeMacro(\n ['value', 'default', 'base'],\n [],\n function doInt(value, defaultValue, base = 10) {\n var res = parseInt(value, base);\n return (isNaN(res)) ? defaultValue : res;\n }\n);\n\nexports.int = intFilter;\n\n// Aliases\nexports.d = exports.default;\nexports.e = exports.escape;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/filters.js","'use strict';\n\nconst Loader = require('./loader');\n\nclass PrecompiledLoader extends Loader {\n constructor(compiledTemplates) {\n super();\n this.precompiled = compiledTemplates || {};\n }\n\n getSource(name) {\n if (this.precompiled[name]) {\n return {\n src: {\n type: 'code',\n obj: this.precompiled[name]\n },\n path: name\n };\n }\n return null;\n }\n}\n\nmodule.exports = {\n PrecompiledLoader: PrecompiledLoader,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/precompiled-loader.js","'use strict';\n\nvar SafeString = require('./runtime').SafeString;\n\n/**\n * Returns `true` if the object is a function, otherwise `false`.\n * @param { any } value\n * @returns { boolean }\n */\nfunction callable(value) {\n return typeof value === 'function';\n}\n\nexports.callable = callable;\n\n/**\n * Returns `true` if the object is strictly not `undefined`.\n * @param { any } value\n * @returns { boolean }\n */\nfunction defined(value) {\n return value !== undefined;\n}\n\nexports.defined = defined;\n\n/**\n * Returns `true` if the operand (one) is divisble by the test's argument\n * (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction divisibleby(one, two) {\n return (one % two) === 0;\n}\n\nexports.divisibleby = divisibleby;\n\n/**\n * Returns true if the string has been escaped (i.e., is a SafeString).\n * @param { any } value\n * @returns { boolean }\n */\nfunction escaped(value) {\n return value instanceof SafeString;\n}\n\nexports.escaped = escaped;\n\n/**\n * Returns `true` if the arguments are strictly equal.\n * @param { any } one\n * @param { any } two\n */\nfunction equalto(one, two) {\n return one === two;\n}\n\nexports.equalto = equalto;\n\n// Aliases\nexports.eq = exports.equalto;\nexports.sameas = exports.equalto;\n\n/**\n * Returns `true` if the value is evenly divisible by 2.\n * @param { number } value\n * @returns { boolean }\n */\nfunction even(value) {\n return value % 2 === 0;\n}\n\nexports.even = even;\n\n/**\n * Returns `true` if the value is falsy - if I recall correctly, '', 0, false,\n * undefined, NaN or null. I don't know if we should stick to the default JS\n * behavior or attempt to replicate what Python believes should be falsy (i.e.,\n * empty arrays, empty dicts, not 0...).\n * @param { any } value\n * @returns { boolean }\n */\nfunction falsy(value) {\n return !value;\n}\n\nexports.falsy = falsy;\n\n/**\n * Returns `true` if the operand (one) is greater or equal to the test's\n * argument (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction ge(one, two) {\n return one >= two;\n}\n\nexports.ge = ge;\n\n/**\n * Returns `true` if the operand (one) is greater than the test's argument\n * (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction greaterthan(one, two) {\n return one > two;\n}\n\nexports.greaterthan = greaterthan;\n\n// alias\nexports.gt = exports.greaterthan;\n\n/**\n * Returns `true` if the operand (one) is less than or equal to the test's\n * argument (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction le(one, two) {\n return one <= two;\n}\n\nexports.le = le;\n\n/**\n * Returns `true` if the operand (one) is less than the test's passed argument\n * (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction lessthan(one, two) {\n return one < two;\n}\n\nexports.lessthan = lessthan;\n\n// alias\nexports.lt = exports.lessthan;\n\n/**\n * Returns `true` if the string is lowercased.\n * @param { string } value\n * @returns { boolean }\n */\nfunction lower(value) {\n return value.toLowerCase() === value;\n}\n\nexports.lower = lower;\n\n/**\n * Returns `true` if the operand (one) is less than or equal to the test's\n * argument (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction ne(one, two) {\n return one !== two;\n}\n\nexports.ne = ne;\n\n/**\n * Returns true if the value is strictly equal to `null`.\n * @param { any }\n * @returns { boolean }\n */\nfunction nullTest(value) {\n return value === null;\n}\n\nexports.null = nullTest;\n\n/**\n * Returns true if value is a number.\n * @param { any }\n * @returns { boolean }\n */\nfunction number(value) {\n return typeof value === 'number';\n}\n\nexports.number = number;\n\n/**\n * Returns `true` if the value is *not* evenly divisible by 2.\n * @param { number } value\n * @returns { boolean }\n */\nfunction odd(value) {\n return value % 2 === 1;\n}\n\nexports.odd = odd;\n\n/**\n * Returns `true` if the value is a string, `false` if not.\n * @param { any } value\n * @returns { boolean }\n */\nfunction string(value) {\n return typeof value === 'string';\n}\n\nexports.string = string;\n\n/**\n * Returns `true` if the value is not in the list of things considered falsy:\n * '', null, undefined, 0, NaN and false.\n * @param { any } value\n * @returns { boolean }\n */\nfunction truthy(value) {\n return !!value;\n}\n\nexports.truthy = truthy;\n\n/**\n * Returns `true` if the value is undefined.\n * @param { any } value\n * @returns { boolean }\n */\nfunction undefinedTest(value) {\n return value === undefined;\n}\n\nexports.undefined = undefinedTest;\n\n/**\n * Returns `true` if the string is uppercased.\n * @param { string } value\n * @returns { boolean }\n */\nfunction upper(value) {\n return value.toUpperCase() === value;\n}\n\nexports.upper = upper;\n\n/**\n * If ES6 features are available, returns `true` if the value implements the\n * `Symbol.iterator` method. If not, it's a string or Array.\n *\n * Could potentially cause issues if a browser exists that has Set and Map but\n * not Symbol.\n *\n * @param { any } value\n * @returns { boolean }\n */\nfunction iterable(value) {\n if (typeof Symbol !== 'undefined') {\n return !!value[Symbol.iterator];\n } else {\n return Array.isArray(value) || typeof value === 'string';\n }\n}\n\nexports.iterable = iterable;\n\n/**\n * If ES6 features are available, returns `true` if the value is an object hash\n * or an ES6 Map. Otherwise just return if it's an object hash.\n * @param { any } value\n * @returns { boolean }\n */\nfunction mapping(value) {\n // only maps and object hashes\n var bool = value !== null\n && value !== undefined\n && typeof value === 'object'\n && !Array.isArray(value);\n if (Set) {\n return bool && !(value instanceof Set);\n } else {\n return bool;\n }\n}\n\nexports.mapping = mapping;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/tests.js","'use strict';\n\nfunction cycler(items) {\n var index = -1;\n\n return {\n current: null,\n reset() {\n index = -1;\n this.current = null;\n },\n\n next() {\n index++;\n if (index >= items.length) {\n index = 0;\n }\n\n this.current = items[index];\n return this.current;\n },\n };\n}\n\nfunction joiner(sep) {\n sep = sep || ',';\n let first = true;\n\n return () => {\n const val = first ? '' : sep;\n first = false;\n return val;\n };\n}\n\n// Making this a function instead so it returns a new object\n// each time it's called. That way, if something like an environment\n// uses it, they will each have their own copy.\nfunction globals() {\n return {\n range(start, stop, step) {\n if (typeof stop === 'undefined') {\n stop = start;\n start = 0;\n step = 1;\n } else if (!step) {\n step = 1;\n }\n\n const arr = [];\n if (step > 0) {\n for (let i = start; i < stop; i += step) {\n arr.push(i);\n }\n } else {\n for (let i = start; i > stop; i += step) { // eslint-disable-line for-direction\n arr.push(i);\n }\n }\n return arr;\n },\n\n cycler() {\n return cycler(Array.prototype.slice.call(arguments));\n },\n\n joiner(sep) {\n return joiner(sep);\n }\n };\n}\n\nmodule.exports = globals;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/globals.js","const path = require('path');\n\nmodule.exports = function express(env, app) {\n function NunjucksView(name, opts) {\n this.name = name;\n this.path = name;\n this.defaultEngine = opts.defaultEngine;\n this.ext = path.extname(name);\n if (!this.ext && !this.defaultEngine) {\n throw new Error('No default engine was specified and no extension was provided.');\n }\n if (!this.ext) {\n this.name += (this.ext = (this.defaultEngine[0] !== '.' ? '.' : '') + this.defaultEngine);\n }\n }\n\n NunjucksView.prototype.render = function render(opts, cb) {\n env.render(this.name, opts, cb);\n };\n\n app.set('view', NunjucksView);\n app.set('nunjucksEnv', env);\n return env;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/express-app.js","'use strict';\n\nconst fs = require('fs');\nconst path = require('path');\nconst {_prettifyError} = require('./lib');\nconst compiler = require('./compiler');\nconst {Environment} = require('./environment');\nconst precompileGlobal = require('./precompile-global');\n\nfunction match(filename, patterns) {\n if (!Array.isArray(patterns)) {\n return false;\n }\n return patterns.some((pattern) => filename.match(pattern));\n}\n\nfunction precompileString(str, opts) {\n opts = opts || {};\n opts.isString = true;\n const env = opts.env || new Environment([]);\n const wrapper = opts.wrapper || precompileGlobal;\n\n if (!opts.name) {\n throw new Error('the \"name\" option is required when compiling a string');\n }\n return wrapper([_precompile(str, opts.name, env)], opts);\n}\n\nfunction precompile(input, opts) {\n // The following options are available:\n //\n // * name: name of the template (auto-generated when compiling a directory)\n // * isString: input is a string, not a file path\n // * asFunction: generate a callable function\n // * force: keep compiling on error\n // * env: the Environment to use (gets extensions and async filters from it)\n // * include: which file/folders to include (folders are auto-included, files are auto-excluded)\n // * exclude: which file/folders to exclude (folders are auto-included, files are auto-excluded)\n // * wrapper: function(templates, opts) {...}\n // Customize the output format to store the compiled template.\n // By default, templates are stored in a global variable used by the runtime.\n // A custom loader will be necessary to load your custom wrapper.\n\n opts = opts || {};\n const env = opts.env || new Environment([]);\n const wrapper = opts.wrapper || precompileGlobal;\n\n if (opts.isString) {\n return precompileString(input, opts);\n }\n\n const pathStats = fs.existsSync(input) && fs.statSync(input);\n const precompiled = [];\n const templates = [];\n\n function addTemplates(dir) {\n fs.readdirSync(dir).forEach((file) => {\n const filepath = path.join(dir, file);\n let subpath = filepath.substr(path.join(input, '/').length);\n const stat = fs.statSync(filepath);\n\n if (stat && stat.isDirectory()) {\n subpath += '/';\n if (!match(subpath, opts.exclude)) {\n addTemplates(filepath);\n }\n } else if (match(subpath, opts.include)) {\n templates.push(filepath);\n }\n });\n }\n\n if (pathStats.isFile()) {\n precompiled.push(_precompile(\n fs.readFileSync(input, 'utf-8'),\n opts.name || input,\n env\n ));\n } else if (pathStats.isDirectory()) {\n addTemplates(input);\n\n for (let i = 0; i < templates.length; i++) {\n const name = templates[i].replace(path.join(input, '/'), '');\n\n try {\n precompiled.push(_precompile(\n fs.readFileSync(templates[i], 'utf-8'),\n name,\n env\n ));\n } catch (e) {\n if (opts.force) {\n // Don't stop generating the output if we're\n // forcing compilation.\n console.error(e); // eslint-disable-line no-console\n } else {\n throw e;\n }\n }\n }\n }\n\n return wrapper(precompiled, opts);\n}\n\nfunction _precompile(str, name, env) {\n env = env || new Environment([]);\n\n const asyncFilters = env.asyncFilters;\n const extensions = env.extensionsList;\n let template;\n\n name = name.replace(/\\\\/g, '/');\n\n try {\n template = compiler.compile(str,\n asyncFilters,\n extensions,\n name,\n env.opts);\n } catch (err) {\n throw _prettifyError(name, false, err);\n }\n\n return {\n name: name,\n template: template\n };\n}\n\nmodule.exports = {\n precompile: precompile,\n precompileString: precompileString\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/precompile.js","'use strict';\n\nfunction precompileGlobal(templates, opts) {\n var out = '';\n opts = opts || {};\n\n for (let i = 0; i < templates.length; i++) {\n const name = JSON.stringify(templates[i].name);\n const template = templates[i].template;\n\n out += '(function() {' +\n '(window.nunjucksPrecompiled = window.nunjucksPrecompiled || {})' +\n '[' + name + '] = (function() {\\n' + template + '\\n})();\\n';\n\n if (opts.asFunction) {\n out += 'return function(ctx, cb) { return nunjucks.render(' + name + ', ctx, cb); }\\n';\n }\n\n out += '})();\\n';\n }\n return out;\n}\n\nmodule.exports = precompileGlobal;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/precompile-global.js","function installCompat() {\n 'use strict';\n\n /* eslint-disable camelcase */\n\n // This must be called like `nunjucks.installCompat` so that `this`\n // references the nunjucks instance\n var runtime = this.runtime;\n var lib = this.lib;\n // Handle slim case where these 'modules' are excluded from the built source\n var Compiler = this.compiler.Compiler;\n var Parser = this.parser.Parser;\n var nodes = this.nodes;\n var lexer = this.lexer;\n\n var orig_contextOrFrameLookup = runtime.contextOrFrameLookup;\n var orig_memberLookup = runtime.memberLookup;\n var orig_Compiler_assertType;\n var orig_Parser_parseAggregate;\n if (Compiler) {\n orig_Compiler_assertType = Compiler.prototype.assertType;\n }\n if (Parser) {\n orig_Parser_parseAggregate = Parser.prototype.parseAggregate;\n }\n\n function uninstall() {\n runtime.contextOrFrameLookup = orig_contextOrFrameLookup;\n runtime.memberLookup = orig_memberLookup;\n if (Compiler) {\n Compiler.prototype.assertType = orig_Compiler_assertType;\n }\n if (Parser) {\n Parser.prototype.parseAggregate = orig_Parser_parseAggregate;\n }\n }\n\n runtime.contextOrFrameLookup = function contextOrFrameLookup(context, frame, key) {\n var val = orig_contextOrFrameLookup.apply(this, arguments);\n if (val !== undefined) {\n return val;\n }\n switch (key) {\n case 'True':\n return true;\n case 'False':\n return false;\n case 'None':\n return null;\n default:\n return undefined;\n }\n };\n\n function getTokensState(tokens) {\n return {\n index: tokens.index,\n lineno: tokens.lineno,\n colno: tokens.colno\n };\n }\n\n if (process.env.BUILD_TYPE !== 'SLIM' && nodes && Compiler && Parser) { // i.e., not slim mode\n const Slice = nodes.Node.extend('Slice', {\n fields: ['start', 'stop', 'step'],\n init(lineno, colno, start, stop, step) {\n start = start || new nodes.Literal(lineno, colno, null);\n stop = stop || new nodes.Literal(lineno, colno, null);\n step = step || new nodes.Literal(lineno, colno, 1);\n this.parent(lineno, colno, start, stop, step);\n }\n });\n\n Compiler.prototype.assertType = function assertType(node) {\n if (node instanceof Slice) {\n return;\n }\n orig_Compiler_assertType.apply(this, arguments);\n };\n Compiler.prototype.compileSlice = function compileSlice(node, frame) {\n this._emit('(');\n this._compileExpression(node.start, frame);\n this._emit('),(');\n this._compileExpression(node.stop, frame);\n this._emit('),(');\n this._compileExpression(node.step, frame);\n this._emit(')');\n };\n\n Parser.prototype.parseAggregate = function parseAggregate() {\n var origState = getTokensState(this.tokens);\n // Set back one accounting for opening bracket/parens\n origState.colno--;\n origState.index--;\n try {\n return orig_Parser_parseAggregate.apply(this);\n } catch (e) {\n const errState = getTokensState(this.tokens);\n const rethrow = () => {\n lib._assign(this.tokens, errState);\n return e;\n };\n\n // Reset to state before original parseAggregate called\n lib._assign(this.tokens, origState);\n this.peeked = false;\n\n const tok = this.peekToken();\n if (tok.type !== lexer.TOKEN_LEFT_BRACKET) {\n throw rethrow();\n } else {\n this.nextToken();\n }\n\n const node = new Slice(tok.lineno, tok.colno);\n\n // If we don't encounter a colon while parsing, this is not a slice,\n // so re-raise the original exception.\n let isSlice = false;\n\n for (let i = 0; i <= node.fields.length; i++) {\n if (this.skip(lexer.TOKEN_RIGHT_BRACKET)) {\n break;\n }\n if (i === node.fields.length) {\n if (isSlice) {\n this.fail('parseSlice: too many slice components', tok.lineno, tok.colno);\n } else {\n break;\n }\n }\n if (this.skip(lexer.TOKEN_COLON)) {\n isSlice = true;\n } else {\n const field = node.fields[i];\n node[field] = this.parseExpression();\n isSlice = this.skip(lexer.TOKEN_COLON) || isSlice;\n }\n }\n if (!isSlice) {\n throw rethrow();\n }\n return new nodes.Array(tok.lineno, tok.colno, [node]);\n }\n };\n }\n\n function sliceLookup(obj, start, stop, step) {\n obj = obj || [];\n if (start === null) {\n start = (step < 0) ? (obj.length - 1) : 0;\n }\n if (stop === null) {\n stop = (step < 0) ? -1 : obj.length;\n } else if (stop < 0) {\n stop += obj.length;\n }\n\n if (start < 0) {\n start += obj.length;\n }\n\n const results = [];\n\n for (let i = start; ; i += step) {\n if (i < 0 || i > obj.length) {\n break;\n }\n if (step > 0 && i >= stop) {\n break;\n }\n if (step < 0 && i <= stop) {\n break;\n }\n results.push(runtime.memberLookup(obj, i));\n }\n return results;\n }\n\n function hasOwnProp(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n }\n\n const ARRAY_MEMBERS = {\n pop(index) {\n if (index === undefined) {\n return this.pop();\n }\n if (index >= this.length || index < 0) {\n throw new Error('KeyError');\n }\n return this.splice(index, 1);\n },\n append(element) {\n return this.push(element);\n },\n remove(element) {\n for (let i = 0; i < this.length; i++) {\n if (this[i] === element) {\n return this.splice(i, 1);\n }\n }\n throw new Error('ValueError');\n },\n count(element) {\n var count = 0;\n for (let i = 0; i < this.length; i++) {\n if (this[i] === element) {\n count++;\n }\n }\n return count;\n },\n index(element) {\n var i;\n if ((i = this.indexOf(element)) === -1) {\n throw new Error('ValueError');\n }\n return i;\n },\n find(element) {\n return this.indexOf(element);\n },\n insert(index, elem) {\n return this.splice(index, 0, elem);\n }\n };\n const OBJECT_MEMBERS = {\n items() {\n return lib._entries(this);\n },\n values() {\n return lib._values(this);\n },\n keys() {\n return lib.keys(this);\n },\n get(key, def) {\n var output = this[key];\n if (output === undefined) {\n output = def;\n }\n return output;\n },\n has_key(key) {\n return hasOwnProp(this, key);\n },\n pop(key, def) {\n var output = this[key];\n if (output === undefined && def !== undefined) {\n output = def;\n } else if (output === undefined) {\n throw new Error('KeyError');\n } else {\n delete this[key];\n }\n return output;\n },\n popitem() {\n const keys = lib.keys(this);\n if (!keys.length) {\n throw new Error('KeyError');\n }\n const k = keys[0];\n const val = this[k];\n delete this[k];\n return [k, val];\n },\n setdefault(key, def = null) {\n if (!(key in this)) {\n this[key] = def;\n }\n return this[key];\n },\n update(kwargs) {\n lib._assign(this, kwargs);\n return null; // Always returns None\n }\n };\n OBJECT_MEMBERS.iteritems = OBJECT_MEMBERS.items;\n OBJECT_MEMBERS.itervalues = OBJECT_MEMBERS.values;\n OBJECT_MEMBERS.iterkeys = OBJECT_MEMBERS.keys;\n\n runtime.memberLookup = function memberLookup(obj, val, autoescape) {\n if (arguments.length === 4) {\n return sliceLookup.apply(this, arguments);\n }\n obj = obj || {};\n\n // If the object is an object, return any of the methods that Python would\n // otherwise provide.\n if (lib.isArray(obj) && hasOwnProp(ARRAY_MEMBERS, val)) {\n return ARRAY_MEMBERS[val].bind(obj);\n }\n if (lib.isObject(obj) && hasOwnProp(OBJECT_MEMBERS, val)) {\n return OBJECT_MEMBERS[val].bind(obj);\n }\n\n return orig_memberLookup.apply(this, arguments);\n };\n\n return uninstall;\n}\n\nmodule.exports = installCompat;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/jinja-compat.js"],"sourceRoot":""}
\ No newline at end of file diff --git a/node_modules/nunjucks/index.js b/node_modules/nunjucks/index.js new file mode 100644 index 0000000..237a362 --- /dev/null +++ b/node_modules/nunjucks/index.js @@ -0,0 +1,82 @@ +'use strict'; + +var lib = require('./src/lib'); +var _require = require('./src/environment'), + Environment = _require.Environment, + Template = _require.Template; +var Loader = require('./src/loader'); +var loaders = require('./src/loaders'); +var precompile = require('./src/precompile'); +var compiler = require('./src/compiler'); +var parser = require('./src/parser'); +var lexer = require('./src/lexer'); +var runtime = require('./src/runtime'); +var nodes = require('./src/nodes'); +var installJinjaCompat = require('./src/jinja-compat'); + +// A single instance of an environment, since this is so commonly used +var e; +function configure(templatesPath, opts) { + opts = opts || {}; + if (lib.isObject(templatesPath)) { + opts = templatesPath; + templatesPath = null; + } + var TemplateLoader; + if (loaders.FileSystemLoader) { + TemplateLoader = new loaders.FileSystemLoader(templatesPath, { + watch: opts.watch, + noCache: opts.noCache + }); + } else if (loaders.WebLoader) { + TemplateLoader = new loaders.WebLoader(templatesPath, { + useCache: opts.web && opts.web.useCache, + async: opts.web && opts.web.async + }); + } + e = new Environment(TemplateLoader, opts); + if (opts && opts.express) { + e.express(opts.express); + } + return e; +} +module.exports = { + Environment: Environment, + Template: Template, + Loader: Loader, + FileSystemLoader: loaders.FileSystemLoader, + NodeResolveLoader: loaders.NodeResolveLoader, + PrecompiledLoader: loaders.PrecompiledLoader, + WebLoader: loaders.WebLoader, + compiler: compiler, + parser: parser, + lexer: lexer, + runtime: runtime, + lib: lib, + nodes: nodes, + installJinjaCompat: installJinjaCompat, + configure: configure, + reset: function reset() { + e = undefined; + }, + compile: function compile(src, env, path, eagerCompile) { + if (!e) { + configure(); + } + return new Template(src, env, path, eagerCompile); + }, + render: function render(name, ctx, cb) { + if (!e) { + configure(); + } + return e.render(name, ctx, cb); + }, + renderString: function renderString(src, ctx, cb) { + if (!e) { + configure(); + } + return e.renderString(src, ctx, cb); + }, + precompile: precompile ? precompile.precompile : undefined, + precompileString: precompile ? precompile.precompileString : undefined +};
\ No newline at end of file diff --git a/node_modules/nunjucks/node_modules/commander/CHANGELOG.md b/node_modules/nunjucks/node_modules/commander/CHANGELOG.md new file mode 100644 index 0000000..0c0587f --- /dev/null +++ b/node_modules/nunjucks/node_modules/commander/CHANGELOG.md @@ -0,0 +1,385 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). (Format adopted after v3.0.0.) + +<!-- markdownlint-disable MD024 --> + +## [5.1.0] (2020-04-25) + +### Added + +- support for multiple command aliases, the first of which is shown in the auto-generated help ([#531], [#1236]) +- configuration support in `addCommand()` for `hidden` and `isDefault` ([#1232]) + +### Fixed + +- omit masked help flags from the displayed help ([#645], [#1247]) +- remove old short help flag when change help flags using `helpOption` ([#1248]) + +### Changed + +- remove use of `arguments` to improve auto-generated help in editors ([#1235]) +- rename `.command()` configuration `noHelp` to `hidden` (but not remove old support) ([#1232]) +- improvements to documentation +- update dependencies +- update tested versions of node +- eliminate lint errors in TypeScript ([#1208]) + +## [5.0.0] (2020-03-14) + +### Added + +* support for nested commands with action-handlers ([#1] [#764] [#1149]) +* `.addCommand()` for adding a separately configured command ([#764] [#1149]) +* allow a non-executable to be set as the default command ([#742] [#1149]) +* implicit help command when there are subcommands (previously only if executables) ([#1149]) +* customise implicit help command with `.addHelpCommand()` ([#1149]) +* display error message for unknown subcommand, by default ([#432] [#1088] [#1149]) +* display help for missing subcommand, by default ([#1088] [#1149]) +* combined short options as single argument may include boolean flags and value flag and value (e.g. `-a -b -p 80` can be written as `-abp80`) ([#1145]) +* `.parseOption()` includes short flag and long flag expansions ([#1145]) +* `.helpInformation()` returns help text as a string, previously a private routine ([#1169]) +* `.parse()` implicitly uses `process.argv` if arguments not specified ([#1172]) +* optionally specify where `.parse()` arguments "from", if not following node conventions ([#512] [#1172]) +* suggest help option along with unknown command error ([#1179]) +* TypeScript definition for `commands` property of `Command` ([#1184]) +* export `program` property ([#1195]) +* `createCommand` factory method to simplify subclassing ([#1191]) + +### Fixed + +* preserve argument order in subcommands ([#508] [#962] [#1138]) +* do not emit `command:*` for executable subcommands ([#809] [#1149]) +* action handler called whether or not there are non-option arguments ([#1062] [#1149]) +* combining option short flag and value in single argument now works for subcommands ([#1145]) +* only add implicit help command when it will not conflict with other uses of argument ([#1153] [#1149]) +* implicit help command works with command aliases ([#948] [#1149]) +* options are validated whether or not there is an action handler ([#1149]) + +### Changed + +* *Breaking* `.args` contains command arguments with just recognised options removed ([#1032] [#1138]) +* *Breaking* display error if required argument for command is missing ([#995] [#1149]) +* tighten TypeScript definition of custom option processing function passed to `.option()` ([#1119]) +* *Breaking* `.allowUnknownOption()` ([#802] [#1138]) + * unknown options included in arguments passed to command action handler + * unknown options included in `.args` +* only recognised option short flags and long flags are expanded (e.g. `-ab` or `--foo=bar`) ([#1145]) +* *Breaking* `.parseOptions()` ([#1138]) + * `args` in returned result renamed `operands` and does not include anything after first unknown option + * `unknown` in returned result has arguments after first unknown option including operands, not just options and values +* *Breaking* `.on('command:*', callback)` and other command events passed (changed) results from `.parseOptions`, i.e. operands and unknown ([#1138]) +* refactor Option from prototype to class ([#1133]) +* refactor Command from prototype to class ([#1159]) +* changes to error handling ([#1165]) + * throw for author error, not just display message + * preflight for variadic error + * add tips to missing subcommand executable +* TypeScript fluent return types changed to be more subclass friendly, return `this` rather than `Command` ([#1180]) +* `.parseAsync` returns `Promise<this>` to be consistent with `.parse()` ([#1180]) +* update dependencies + +### Removed + +* removed EventEmitter from TypeScript definition for Command, eliminating implicit peer dependency on `@types/node` ([#1146]) +* removed private function `normalize` (the functionality has been integrated into `parseOptions`) ([#1145]) +* `parseExpectedArgs` is now private ([#1149]) + +### Migration Tips + +If you use `.on('command:*')` or more complicated tests to detect an unrecognised subcommand, you may be able to delete the code and rely on the default behaviour. + +If you use `program.args` or more complicated tests to detect a missing subcommand, you may be able to delete the code and rely on the default behaviour. + +If you use `.command('*')` to add a default command, you may be be able to switch to `isDefault:true` with a named command. + +## [5.0.0-4] (2020-03-03) + +(Released in 5.0.0) + +## [5.0.0-3] (2020-02-20) + +(Released in 5.0.0) + +## [5.0.0-2] (2020-02-10) + +(Released in 5.0.0) + +## [5.0.0-1] (2020-02-08) + +(Released in 5.0.0) + +## [5.0.0-0] (2020-02-02) + +(Released in 5.0.0) + +## [4.1.1] (2020-02-02) + +### Fixed + +* TypeScript definition for `.action()` should include Promise for async ([#1157]) + +## [4.1.0] (2020-01-06) + +### Added + +* two routines to change how option values are handled, and eliminate name clashes with command properties ([#933] [#1102]) + * see storeOptionsAsProperties and passCommandToAction in README +* `.parseAsync` to use instead of `.parse` if supply async action handlers ([#806] [#1118]) + +### Fixed + +* Remove trailing blanks from wrapped help text ([#1096]) + +### Changed + +* update dependencies +* extend security coverage for Commander 2.x to 2020-02-03 +* improvements to README +* improvements to TypeScript definition documentation +* move old versions out of main CHANGELOG +* removed explicit use of `ts-node` in tests + +## [4.0.1] (2019-11-12) + +### Fixed + +* display help when requested, even if there are missing required options ([#1091]) + +## [4.0.0] (2019-11-02) + +### Added + +* automatically wrap and indent help descriptions for options and commands ([#1051]) +* `.exitOverride()` allows override of calls to `process.exit` for additional error handling and to keep program running ([#1040]) +* support for declaring required options with `.requiredOptions()` ([#1071]) +* GitHub Actions support ([#1027]) +* translation links in README + +### Changed + +* dev: switch tests from Sinon+Should to Jest with major rewrite of tests ([#1035]) +* call default subcommand even when there are unknown options ([#1047]) +* *Breaking* Commander is only officially supported on Node 8 and above, and requires Node 6 ([#1053]) + +### Fixed + +* *Breaking* keep command object out of program.args when action handler called ([#1048]) + * also, action handler now passed array of unknown arguments +* complain about unknown options when program argument supplied and action handler ([#1049]) + * this changes parameters to `command:*` event to include unknown arguments +* removed deprecated `customFds` option from call to `child_process.spawn` ([#1052]) +* rework TypeScript declarations to bring all types into imported namespace ([#1081]) + +### Migration Tips + +#### Testing for no arguments + +If you were previously using code like: + +```js +if (!program.args.length) ... +``` + +a partial replacement is: + +```js +if (program.rawArgs.length < 3) ... +``` + +## [4.0.0-1] Prerelease (2019-10-08) + +(Released in 4.0.0) + +## [4.0.0-0] Prerelease (2019-10-01) + +(Released in 4.0.0) + +## [2.20.1] (2019-09-29) + +### Fixed + +* Improve tracking of executable subcommands. + +### Changed + +* update development dependencies + +## [3.0.2] (2019-09-27) + +### Fixed + +* Improve tracking of executable subcommands. + +### Changed + +* update development dependencies + +## [3.0.1] (2019-08-30) + +### Added + +* .name and .usage to README ([#1010]) +* Table of Contents to README ([#1010]) +* TypeScript definition for `executableFile` in CommandOptions ([#1028]) + +### Changed + +* consistently use `const` rather than `var` in README ([#1026]) + +### Fixed + +* help for sub commands with custom executableFile ([#1018]) + +## [3.0.0] / 2019-08-08 + +* Add option to specify executable file name ([#999]) + * e.g. `.command('clone', 'clone description', { executableFile: 'myClone' })` +* Change docs for `.command` to contrast action handler vs git-style executable. ([#938] [#990]) +* **Breaking** Change TypeScript to use overloaded function for `.command`. ([#938] [#990]) +* Change to use straight quotes around strings in error messages (like 'this' instead of `this') ([#915]) +* Add TypeScript "reference types" for node ([#974]) +* Add support for hyphen as an option argument in subcommands ([#697]) +* Add support for a short option flag and its value to be concatenated for action handler subcommands ([#599]) + * e.g. `-p 80` can also be supplied as `-p80` +* Add executable arguments to spawn in win32, for git-style executables ([#611]) + * e.g. `node --harmony myCommand.js clone` +* Add parent command as prefix of subcommand in help ([#980]) +* Add optional custom description to `.version` ([#963]) + * e.g. `program.version('0.0.1', '-v, --vers', 'output the current version')` +* Add `.helpOption(flags, description)` routine to customise help flags and description ([#963]) + * e.g. `.helpOption('-e, --HELP', 'read more information')` +* Fix behavior of --no-* options ([#795]) + * can now define both `--foo` and `--no-foo` + * **Breaking** custom event listeners: `--no-foo` on cli now emits `option:no-foo` (previously `option:foo`) + * **Breaking** default value: defining `--no-foo` after defining `--foo` leaves the default value unchanged (previously set it to false) + * allow boolean default value, such as from environment ([#987]) +* Increment inspector port for spawned subcommands ([#991]) + * e.g. `node --inspect myCommand.js clone` + +### Migration Tips + +The custom event for a negated option like `--no-foo` is `option:no-foo` (previously `option:foo`). + +```js +program + .option('--no-foo') + .on('option:no-foo', () => { + console.log('removing foo'); + }); +``` + +When using TypeScript, adding a command does not allow an explicit `undefined` for an unwanted executable description (e.g +for a command with an action handler). + +```js +program + .command('action1', undefined, { noHelp: true }) // No longer valid + .command('action2', { noHelp: true }) // Correct +``` + +## 3.0.0-0 Prerelease / 2019-07-28 + +(Released as 3.0.0) + +## Older versions + +* [2.x](./changelogs/CHANGELOG-2.md) +* [1.x](./changelogs/CHANGELOG-1.md) +* [0.x](./changelogs/CHANGELOG-0.md) + +[#1]: https://github.com/tj/commander.js/issues/1 +[#432]: https://github.com/tj/commander.js/issues/432 +[#508]: https://github.com/tj/commander.js/issues/508 +[#512]: https://github.com/tj/commander.js/issues/512 +[#531]: https://github.com/tj/commander.js/issues/531 +[#599]: https://github.com/tj/commander.js/issues/599 +[#611]: https://github.com/tj/commander.js/issues/611 +[#645]: https://github.com/tj/commander.js/issues/645 +[#697]: https://github.com/tj/commander.js/issues/697 +[#742]: https://github.com/tj/commander.js/issues/742 +[#764]: https://github.com/tj/commander.js/issues/764 +[#795]: https://github.com/tj/commander.js/issues/795 +[#802]: https://github.com/tj/commander.js/issues/802 +[#806]: https://github.com/tj/commander.js/issues/806 +[#809]: https://github.com/tj/commander.js/issues/809 +[#915]: https://github.com/tj/commander.js/issues/915 +[#938]: https://github.com/tj/commander.js/issues/938 +[#948]: https://github.com/tj/commander.js/issues/948 +[#962]: https://github.com/tj/commander.js/issues/962 +[#963]: https://github.com/tj/commander.js/issues/963 +[#974]: https://github.com/tj/commander.js/issues/974 +[#980]: https://github.com/tj/commander.js/issues/980 +[#987]: https://github.com/tj/commander.js/issues/987 +[#990]: https://github.com/tj/commander.js/issues/990 +[#991]: https://github.com/tj/commander.js/issues/991 +[#993]: https://github.com/tj/commander.js/issues/993 +[#995]: https://github.com/tj/commander.js/issues/995 +[#999]: https://github.com/tj/commander.js/issues/999 +[#1010]: https://github.com/tj/commander.js/pull/1010 +[#1018]: https://github.com/tj/commander.js/pull/1018 +[#1026]: https://github.com/tj/commander.js/pull/1026 +[#1027]: https://github.com/tj/commander.js/pull/1027 +[#1028]: https://github.com/tj/commander.js/pull/1028 +[#1032]: https://github.com/tj/commander.js/issues/1032 +[#1035]: https://github.com/tj/commander.js/pull/1035 +[#1040]: https://github.com/tj/commander.js/pull/1040 +[#1047]: https://github.com/tj/commander.js/pull/1047 +[#1048]: https://github.com/tj/commander.js/pull/1048 +[#1049]: https://github.com/tj/commander.js/pull/1049 +[#1051]: https://github.com/tj/commander.js/pull/1051 +[#1052]: https://github.com/tj/commander.js/pull/1052 +[#1053]: https://github.com/tj/commander.js/pull/1053 +[#1062]: https://github.com/tj/commander.js/pull/1062 +[#1071]: https://github.com/tj/commander.js/pull/1071 +[#1081]: https://github.com/tj/commander.js/pull/1081 +[#1088]: https://github.com/tj/commander.js/issues/1088 +[#1091]: https://github.com/tj/commander.js/pull/1091 +[#1096]: https://github.com/tj/commander.js/pull/1096 +[#1102]: https://github.com/tj/commander.js/pull/1102 +[#1118]: https://github.com/tj/commander.js/pull/1118 +[#1119]: https://github.com/tj/commander.js/pull/1119 +[#1133]: https://github.com/tj/commander.js/pull/1133 +[#1138]: https://github.com/tj/commander.js/pull/1138 +[#1145]: https://github.com/tj/commander.js/pull/1145 +[#1146]: https://github.com/tj/commander.js/pull/1146 +[#1149]: https://github.com/tj/commander.js/pull/1149 +[#1153]: https://github.com/tj/commander.js/issues/1153 +[#1157]: https://github.com/tj/commander.js/pull/1157 +[#1159]: https://github.com/tj/commander.js/pull/1159 +[#1165]: https://github.com/tj/commander.js/pull/1165 +[#1169]: https://github.com/tj/commander.js/pull/1169 +[#1172]: https://github.com/tj/commander.js/pull/1172 +[#1179]: https://github.com/tj/commander.js/pull/1179 +[#1180]: https://github.com/tj/commander.js/pull/1180 +[#1184]: https://github.com/tj/commander.js/pull/1184 +[#1191]: https://github.com/tj/commander.js/pull/1191 +[#1195]: https://github.com/tj/commander.js/pull/1195 +[#1208]: https://github.com/tj/commander.js/pull/1208 +[#1232]: https://github.com/tj/commander.js/pull/1232 +[#1235]: https://github.com/tj/commander.js/pull/1235 +[#1236]: https://github.com/tj/commander.js/pull/1236 +[#1247]: https://github.com/tj/commander.js/pull/1247 +[#1248]: https://github.com/tj/commander.js/pull/1248 + +[Unreleased]: https://github.com/tj/commander.js/compare/master...develop +[5.1.0]: https://github.com/tj/commander.js/compare/v5.0.0..v5.1.0 +[5.0.0]: https://github.com/tj/commander.js/compare/v4.1.1..v5.0.0 +[5.0.0-4]: https://github.com/tj/commander.js/compare/v5.0.0-3..v5.0.0-4 +[5.0.0-3]: https://github.com/tj/commander.js/compare/v5.0.0-2..v5.0.0-3 +[5.0.0-2]: https://github.com/tj/commander.js/compare/v5.0.0-1..v5.0.0-2 +[5.0.0-1]: https://github.com/tj/commander.js/compare/v5.0.0-0..v5.0.0-1 +[5.0.0-0]: https://github.com/tj/commander.js/compare/v4.1.1..v5.0.0-0 +[4.1.1]: https://github.com/tj/commander.js/compare/v4.1.0..v4.1.1 +[4.1.0]: https://github.com/tj/commander.js/compare/v4.0.1..v4.1.0 +[4.0.1]: https://github.com/tj/commander.js/compare/v4.0.0..v4.0.1 +[4.0.0]: https://github.com/tj/commander.js/compare/v3.0.2..v4.0.0 +[4.0.0-1]: https://github.com/tj/commander.js/compare/v4.0.0-0..v4.0.0-1 +[4.0.0-0]: https://github.com/tj/commander.js/compare/v3.0.2...v4.0.0-0 +[3.0.2]: https://github.com/tj/commander.js/compare/v3.0.1...v3.0.2 +[3.0.1]: https://github.com/tj/commander.js/compare/v3.0.0...v3.0.1 +[3.0.0]: https://github.com/tj/commander.js/compare/v2.20.1...v3.0.0 +[2.20.1]: https://github.com/tj/commander.js/compare/v2.20.0...v2.20.1 diff --git a/node_modules/nunjucks/node_modules/commander/LICENSE b/node_modules/nunjucks/node_modules/commander/LICENSE new file mode 100644 index 0000000..10f997a --- /dev/null +++ b/node_modules/nunjucks/node_modules/commander/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/nunjucks/node_modules/commander/Readme.md b/node_modules/nunjucks/node_modules/commander/Readme.md new file mode 100644 index 0000000..fcb995a --- /dev/null +++ b/node_modules/nunjucks/node_modules/commander/Readme.md @@ -0,0 +1,737 @@ +# Commander.js + +[](http://travis-ci.org/tj/commander.js) +[](https://www.npmjs.org/package/commander) +[](https://npmcharts.com/compare/commander?minimal=true) +[](https://packagephobia.now.sh/result?p=commander) + +The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/commander-rb/commander). + +Read this in other languages: English | [ç®€ä½“ä¸æ–‡](./Readme_zh-CN.md) + +- [Commander.js](#commanderjs) + - [Installation](#installation) + - [Declaring _program_ variable](#declaring-program-variable) + - [Options](#options) + - [Common option types, boolean and value](#common-option-types-boolean-and-value) + - [Default option value](#default-option-value) + - [Other option types, negatable boolean and flag|value](#other-option-types-negatable-boolean-and-flagvalue) + - [Custom option processing](#custom-option-processing) + - [Required option](#required-option) + - [Version option](#version-option) + - [Commands](#commands) + - [Specify the argument syntax](#specify-the-argument-syntax) + - [Action handler (sub)commands](#action-handler-subcommands) + - [Stand-alone executable (sub)commands](#stand-alone-executable-subcommands) + - [Automated help](#automated-help) + - [Custom help](#custom-help) + - [.usage and .name](#usage-and-name) + - [.help(cb)](#helpcb) + - [.outputHelp(cb)](#outputhelpcb) + - [.helpInformation()](#helpinformation) + - [.helpOption(flags, description)](#helpoptionflags-description) + - [.addHelpCommand()](#addhelpcommand) + - [Custom event listeners](#custom-event-listeners) + - [Bits and pieces](#bits-and-pieces) + - [.parse() and .parseAsync()](#parse-and-parseasync) + - [Avoiding option name clashes](#avoiding-option-name-clashes) + - [TypeScript](#typescript) + - [createCommand()](#createcommand) + - [Node options such as `--harmony`](#node-options-such-as---harmony) + - [Debugging stand-alone executable subcommands](#debugging-stand-alone-executable-subcommands) + - [Override exit handling](#override-exit-handling) + - [Examples](#examples) + - [License](#license) + - [Support](#support) + - [Commander for enterprise](#commander-for-enterprise) + +## Installation + +```bash +npm install commander +``` + +## Declaring _program_ variable + +Commander exports a global object which is convenient for quick programs. +This is used in the examples in this README for brevity. + +```js +const { program } = require('commander'); +program.version('0.0.1'); +``` + +For larger programs which may use commander in multiple ways, including unit testing, it is better to create a local Command object to use. + + ```js + const { Command } = require('commander'); + const program = new Command(); + program.version('0.0.1'); + ``` + +## Options + +Options are defined with the `.option()` method, also serving as documentation for the options. Each option can have a short flag (single character) and a long name, separated by a comma or space or vertical bar ('|'). + +The options can be accessed as properties on the Command object. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc. See also optional new behaviour to [avoid name clashes](#avoiding-option-name-clashes). + +Multiple short flags may optionally be combined in a single argument following the dash: boolean flags, the last flag may take a value, and the value. +For example `-a -b -p 80` may be written as `-ab -p80` or even `-abp80`. + +You can use `--` to indicate the end of the options, and any remaining arguments will be used without being interpreted. +This is particularly useful for passing options through to another +command, like: `do -- git --version`. + +Options on the command line are not positional, and can be specified before or after other command arguments. + +### Common option types, boolean and value + +The two most used option types are a boolean flag, and an option which takes a value (declared using angle brackets). Both are `undefined` unless specified on command line. + +```js +const { program } = require('commander'); + +program + .option('-d, --debug', 'output extra debugging') + .option('-s, --small', 'small pizza size') + .option('-p, --pizza-type <type>', 'flavour of pizza'); + +program.parse(process.argv); + +if (program.debug) console.log(program.opts()); +console.log('pizza details:'); +if (program.small) console.log('- small pizza size'); +if (program.pizzaType) console.log(`- ${program.pizzaType}`); +``` + +```bash +$ pizza-options -d +{ debug: true, small: undefined, pizzaType: undefined } +pizza details: +$ pizza-options -p +error: option '-p, --pizza-type <type>' argument missing +$ pizza-options -ds -p vegetarian +{ debug: true, small: true, pizzaType: 'vegetarian' } +pizza details: +- small pizza size +- vegetarian +$ pizza-options --pizza-type=cheese +pizza details: +- cheese +``` + +`program.parse(arguments)` processes the arguments, leaving any args not consumed by the program options in the `program.args` array. + +### Default option value + +You can specify a default value for an option which takes a value. + +```js +const { program } = require('commander'); + +program + .option('-c, --cheese <type>', 'add the specified type of cheese', 'blue'); + +program.parse(process.argv); + +console.log(`cheese: ${program.cheese}`); +``` + +```bash +$ pizza-options +cheese: blue +$ pizza-options --cheese stilton +cheese: stilton +``` + +### Other option types, negatable boolean and flag|value + +You can specify a boolean option long name with a leading `no-` to set the option value to false when used. +Defined alone this also makes the option true by default. + +If you define `--foo` first, adding `--no-foo` does not change the default value from what it would +otherwise be. You can specify a default boolean value for a boolean flag and it can be overridden on command line. + +```js +const { program } = require('commander'); + +program + .option('--no-sauce', 'Remove sauce') + .option('--cheese <flavour>', 'cheese flavour', 'mozzarella') + .option('--no-cheese', 'plain with no cheese') + .parse(process.argv); + +const sauceStr = program.sauce ? 'sauce' : 'no sauce'; +const cheeseStr = (program.cheese === false) ? 'no cheese' : `${program.cheese} cheese`; +console.log(`You ordered a pizza with ${sauceStr} and ${cheeseStr}`); +``` + +```bash +$ pizza-options +You ordered a pizza with sauce and mozzarella cheese +$ pizza-options --sauce +error: unknown option '--sauce' +$ pizza-options --cheese=blue +You ordered a pizza with sauce and blue cheese +$ pizza-options --no-sauce --no-cheese +You ordered a pizza with no sauce and no cheese +``` + +You can specify an option which functions as a flag but may also take a value (declared using square brackets). + +```js +const { program } = require('commander'); + +program + .option('-c, --cheese [type]', 'Add cheese with optional type'); + +program.parse(process.argv); + +if (program.cheese === undefined) console.log('no cheese'); +else if (program.cheese === true) console.log('add cheese'); +else console.log(`add cheese type ${program.cheese}`); +``` + +```bash +$ pizza-options +no cheese +$ pizza-options --cheese +add cheese +$ pizza-options --cheese mozzarella +add cheese type mozzarella +``` + +### Custom option processing + +You may specify a function to do custom processing of option values. The callback function receives two parameters, the user specified value and the +previous value for the option. It returns the new value for the option. + +This allows you to coerce the option value to the desired type, or accumulate values, or do entirely custom processing. + +You can optionally specify the default/starting value for the option after the function. + +```js +const { program } = require('commander'); + +function myParseInt(value, dummyPrevious) { + // parseInt takes a string and an optional radix + return parseInt(value); +} + +function increaseVerbosity(dummyValue, previous) { + return previous + 1; +} + +function collect(value, previous) { + return previous.concat([value]); +} + +function commaSeparatedList(value, dummyPrevious) { + return value.split(','); +} + +program + .option('-f, --float <number>', 'float argument', parseFloat) + .option('-i, --integer <number>', 'integer argument', myParseInt) + .option('-v, --verbose', 'verbosity that can be increased', increaseVerbosity, 0) + .option('-c, --collect <value>', 'repeatable value', collect, []) + .option('-l, --list <items>', 'comma separated list', commaSeparatedList) +; + +program.parse(process.argv); + +if (program.float !== undefined) console.log(`float: ${program.float}`); +if (program.integer !== undefined) console.log(`integer: ${program.integer}`); +if (program.verbose > 0) console.log(`verbosity: ${program.verbose}`); +if (program.collect.length > 0) console.log(program.collect); +if (program.list !== undefined) console.log(program.list); +``` + +```bash +$ custom -f 1e2 +float: 100 +$ custom --integer 2 +integer: 2 +$ custom -v -v -v +verbose: 3 +$ custom -c a -c b -c c +[ 'a', 'b', 'c' ] +$ custom --list x,y,z +[ 'x', 'y', 'z' ] +``` + +### Required option + +You may specify a required (mandatory) option using `.requiredOption`. The option must have a value after parsing, usually specified on the command line, or perhaps from a default value (say from environment). The method is otherwise the same as `.option` in format, taking flags and description, and optional default value or custom processing. + +```js +const { program } = require('commander'); + +program + .requiredOption('-c, --cheese <type>', 'pizza must have cheese'); + +program.parse(process.argv); +``` + +```bash +$ pizza +error: required option '-c, --cheese <type>' not specified +``` + +### Version option + +The optional `version` method adds handling for displaying the command version. The default option flags are `-V` and `--version`, and when present the command prints the version number and exits. + +```js +program.version('0.0.1'); +``` + +```bash +$ ./examples/pizza -V +0.0.1 +``` + +You may change the flags and description by passing additional parameters to the `version` method, using +the same syntax for flags as the `option` method. The version flags can be named anything, but a long name is required. + +```js +program.version('0.0.1', '-v, --vers', 'output the current version'); +``` + +## Commands + +You can specify (sub)commands using `.command()` or `.addCommand()`. There are two ways these can be implemented: using an action handler attached to the command, or as a stand-alone executable file (described in more detail later). The subcommands may be nested ([example](./examples/nestedCommands.js)). + +In the first parameter to `.command()` you specify the command name and any command arguments. The arguments may be `<required>` or `[optional]`, and the last argument may also be `variadic...`. + +You can use `.addCommand()` to add an already configured subcommand to the program. + +For example: + +```js +// Command implemented using action handler (description is supplied separately to `.command`) +// Returns new command for configuring. +program + .command('clone <source> [destination]') + .description('clone a repository into a newly created directory') + .action((source, destination) => { + console.log('clone command called'); + }); + +// Command implemented using stand-alone executable file (description is second parameter to `.command`) +// Returns `this` for adding more commands. +program + .command('start <service>', 'start named service') + .command('stop [service]', 'stop named service, or all if no name supplied'); + +// Command prepared separately. +// Returns `this` for adding more commands. +program + .addCommand(build.makeBuildCommand()); +``` + +Configuration options can be passed with the call to `.command()` and `.addCommand()`. Specifying `true` for `opts.hidden` will remove the command from the generated help output. Specifying `true` for `opts.isDefault` will run the subcommand if no other subcommand is specified ([example](./examples/defaultCommand.js)). + +### Specify the argument syntax + +You use `.arguments` to specify the arguments for the top-level command, and for subcommands they are usually included in the `.command` call. Angled brackets (e.g. `<required>`) indicate required input. Square brackets (e.g. `[optional]`) indicate optional input. + +```js +const { program } = require('commander'); + +program + .version('0.1.0') + .arguments('<cmd> [env]') + .action(function (cmd, env) { + cmdValue = cmd; + envValue = env; + }); + +program.parse(process.argv); + +if (typeof cmdValue === 'undefined') { + console.error('no command given!'); + process.exit(1); +} +console.log('command:', cmdValue); +console.log('environment:', envValue || "no environment given"); +``` + + The last argument of a command can be variadic, and only the last argument. To make an argument variadic you + append `...` to the argument name. For example: + +```js +const { program } = require('commander'); + +program + .version('0.1.0') + .command('rmdir <dir> [otherDirs...]') + .action(function (dir, otherDirs) { + console.log('rmdir %s', dir); + if (otherDirs) { + otherDirs.forEach(function (oDir) { + console.log('rmdir %s', oDir); + }); + } + }); + +program.parse(process.argv); +``` + +The variadic argument is passed to the action handler as an array. + +### Action handler (sub)commands + +You can add options to a command that uses an action handler. +The action handler gets passed a parameter for each argument you declared, and one additional argument which is the +command object itself. This command argument has the values for the command-specific options added as properties. + +```js +const { program } = require('commander'); + +program + .command('rm <dir>') + .option('-r, --recursive', 'Remove recursively') + .action(function (dir, cmdObj) { + console.log('remove ' + dir + (cmdObj.recursive ? ' recursively' : '')) + }) + +program.parse(process.argv) +``` + +You may supply an `async` action handler, in which case you call `.parseAsync` rather than `.parse`. + +```js +async function run() { /* code goes here */ } + +async function main() { + program + .command('run') + .action(run); + await program.parseAsync(process.argv); +} +``` + +A command's options on the command line are validated when the command is used. Any unknown options will be reported as an error. + +### Stand-alone executable (sub)commands + +When `.command()` is invoked with a description argument, this tells Commander that you're going to use stand-alone executables for subcommands. +Commander will search the executables in the directory of the entry script (like `./examples/pm`) with the name `program-subcommand`, like `pm-install`, `pm-search`. +You can specify a custom name with the `executableFile` configuration option. + +You handle the options for an executable (sub)command in the executable, and don't declare them at the top-level. + +```js +// file: ./examples/pm +const { program } = require('commander'); + +program + .version('0.1.0') + .command('install [name]', 'install one or more packages') + .command('search [query]', 'search with optional query') + .command('update', 'update installed packages', {executableFile: 'myUpdateSubCommand'}) + .command('list', 'list packages installed', {isDefault: true}) + .parse(process.argv); +``` + +If the program is designed to be installed globally, make sure the executables have proper modes, like `755`. + +## Automated help + +The help information is auto-generated based on the information commander already knows about your program. The default +help option is `-h,--help`. ([example](./examples/pizza)) + +```bash +$ node ./examples/pizza --help +Usage: pizza [options] + +An application for pizzas ordering + +Options: + -V, --version output the version number + -p, --peppers Add peppers + -c, --cheese <type> Add the specified type of cheese (default: "marble") + -C, --no-cheese You do not want any cheese + -h, --help display help for command +``` + +A `help` command is added by default if your command has subcommands. It can be used alone, or with a subcommand name to show +further help for the subcommand. These are effectively the same if the `shell` program has implicit help: + +```bash +shell help +shell --help + +shell help spawn +shell spawn --help +``` + +### Custom help + +You can display extra information by listening for "--help". ([example](./examples/custom-help)) + +```js +program + .option('-f, --foo', 'enable some foo'); + +// must be before .parse() +program.on('--help', () => { + console.log(''); + console.log('Example call:'); + console.log(' $ custom-help --help'); +}); +``` + +Yields the following help output: + +```Text +Usage: custom-help [options] + +Options: + -f, --foo enable some foo + -h, --help display help for command + +Example call: + $ custom-help --help +``` + +### .usage and .name + +These allow you to customise the usage description in the first line of the help. The name is otherwise +deduced from the (full) program arguments. Given: + +```js +program + .name("my-command") + .usage("[global options] command") +``` + +The help will start with: + +```Text +Usage: my-command [global options] command +``` + +### .help(cb) + +Output help information and exit immediately. Optional callback cb allows post-processing of help text before it is displayed. + +### .outputHelp(cb) + +Output help information without exiting. +Optional callback cb allows post-processing of help text before it is displayed. + +### .helpInformation() + +Get the command help information as a string for processing or displaying yourself. (The text does not include the custom help +from `--help` listeners.) + +### .helpOption(flags, description) + +Override the default help flags and description. + +```js +program + .helpOption('-e, --HELP', 'read more information'); +``` + +### .addHelpCommand() + +You can explicitly turn on or off the implicit help command with `.addHelpCommand()` and `.addHelpCommand(false)`. + +You can both turn on and customise the help command by supplying the name and description: + +```js +program.addHelpCommand('assist [command]', 'show assistance'); +``` + +## Custom event listeners + +You can execute custom actions by listening to command and option events. + +```js +program.on('option:verbose', function () { + process.env.VERBOSE = this.verbose; +}); + +program.on('command:*', function (operands) { + console.error(`error: unknown command '${operands[0]}'`); + const availableCommands = program.commands.map(cmd => cmd.name()); + mySuggestBestMatch(operands[0], availableCommands); + process.exitCode = 1; +}); +``` + +## Bits and pieces + +### .parse() and .parseAsync() + +The first argument to `.parse` is the array of strings to parse. You may omit the parameter to implicitly use `process.argv`. + +If the arguments follow different conventions than node you can pass a `from` option in the second parameter: + +- 'node': default, `argv[0]` is the application and `argv[1]` is the script being run, with user parameters after that +- 'electron': `argv[1]` varies depending on whether the electron application is packaged +- 'user': all of the arguments from the user + +For example: + +```js +program.parse(process.argv); // Explicit, node conventions +program.parse(); // Implicit, and auto-detect electron +program.parse(['-f', 'filename'], { from: 'user' }); +``` + +### Avoiding option name clashes + +The original and default behaviour is that the option values are stored +as properties on the program, and the action handler is passed a +command object with the options values stored as properties. +This is very convenient to code, but the downside is possible clashes with +existing properties of Command. + +There are two new routines to change the behaviour, and the default behaviour may change in the future: + +- `storeOptionsAsProperties`: whether to store option values as properties on command object, or store separately (specify false) and access using `.opts()` +- `passCommandToAction`: whether to pass command to action handler, +or just the options (specify false) + +([example](./examples/storeOptionsAsProperties-action.js)) + +```js +program + .storeOptionsAsProperties(false) + .passCommandToAction(false); + +program + .name('my-program-name') + .option('-n,--name <name>'); + +program + .command('show') + .option('-a,--action <action>') + .action((options) => { + console.log(options.action); + }); + +program.parse(process.argv); + +const programOptions = program.opts(); +console.log(programOptions.name); +``` + +### TypeScript + +The Commander package includes its TypeScript Definition file. + +If you use `ts-node` and stand-alone executable subcommands written as `.ts` files, you need to call your program through node to get the subcommands called correctly. e.g. + +```bash +node -r ts-node/register pm.ts +``` + +### createCommand() + +This factory function creates a new command. It is exported and may be used instead of using `new`, like: + +```js +const { createCommand } = require('commander'); +const program = createCommand(); +``` + +`createCommand` is also a method of the Command object, and creates a new command rather than a subcommand. This gets used internally +when creating subcommands using `.command()`, and you may override it to +customise the new subcommand (examples using [subclass](./examples/custom-command-class.js) and [function](./examples/custom-command-function.js)). + +### Node options such as `--harmony` + +You can enable `--harmony` option in two ways: + +- Use `#! /usr/bin/env node --harmony` in the subcommands scripts. (Note Windows does not support this pattern.) +- Use the `--harmony` option when call the command, like `node --harmony examples/pm publish`. The `--harmony` option will be preserved when spawning subcommand process. + +### Debugging stand-alone executable subcommands + +An executable subcommand is launched as a separate child process. + +If you are using the node inspector for [debugging](https://nodejs.org/en/docs/guides/debugging-getting-started/) executable subcommands using `node --inspect` et al, +the inspector port is incremented by 1 for the spawned subcommand. + +If you are using VSCode to debug executable subcommands you need to set the `"autoAttachChildProcesses": true` flag in your launch.json configuration. + +### Override exit handling + +By default Commander calls `process.exit` when it detects errors, or after displaying the help or version. You can override +this behaviour and optionally supply a callback. The default override throws a `CommanderError`. + +The override callback is passed a `CommanderError` with properties `exitCode` number, `code` string, and `message`. The default override behaviour is to throw the error, except for async handling of executable subcommand completion which carries on. The normal display of error messages or version or help +is not affected by the override which is called after the display. + +``` js +program.exitOverride(); + +try { + program.parse(process.argv); +} catch (err) { + // custom processing... +} +``` + +## Examples + +```js +const { program } = require('commander'); + +program + .version('0.1.0') + .option('-C, --chdir <path>', 'change the working directory') + .option('-c, --config <path>', 'set config path. defaults to ./deploy.conf') + .option('-T, --no-tests', 'ignore test hook'); + +program + .command('setup [env]') + .description('run setup commands for all envs') + .option("-s, --setup_mode [mode]", "Which setup mode to use") + .action(function(env, options){ + const mode = options.setup_mode || "normal"; + env = env || 'all'; + console.log('setup for %s env(s) with %s mode', env, mode); + }); + +program + .command('exec <cmd>') + .alias('ex') + .description('execute the given remote cmd') + .option("-e, --exec_mode <mode>", "Which exec mode to use") + .action(function(cmd, options){ + console.log('exec "%s" using %s mode', cmd, options.exec_mode); + }).on('--help', function() { + console.log(''); + console.log('Examples:'); + console.log(''); + console.log(' $ deploy exec sequential'); + console.log(' $ deploy exec async'); + }); + +program.parse(process.argv); +``` + +More Demos can be found in the [examples](https://github.com/tj/commander.js/tree/master/examples) directory. + +## License + +[MIT](https://github.com/tj/commander.js/blob/master/LICENSE) + +## Support + +Commander 5.x is fully supported on Long Term Support versions of Node, and is likely to work with Node 6 but not tested. +(For versions of Node below Node 6, use Commander 3.x or 2.x.) + +The main forum for free and community support is the project [Issues](https://github.com/tj/commander.js/issues) on GitHub. + +### Commander for enterprise + +Available as part of the Tidelift Subscription + +The maintainers of Commander and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-commander?utm_source=npm-commander&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/nunjucks/node_modules/commander/index.js b/node_modules/nunjucks/node_modules/commander/index.js new file mode 100644 index 0000000..987b79f --- /dev/null +++ b/node_modules/nunjucks/node_modules/commander/index.js @@ -0,0 +1,1756 @@ +/** + * Module dependencies. + */ + +const EventEmitter = require('events').EventEmitter; +const spawn = require('child_process').spawn; +const path = require('path'); +const fs = require('fs'); + +// @ts-check + +class Option { + /** + * Initialize a new `Option` with the given `flags` and `description`. + * + * @param {string} flags + * @param {string} description + * @api public + */ + + constructor(flags, description) { + this.flags = flags; + this.required = flags.indexOf('<') >= 0; // A value must be supplied when the option is specified. + this.optional = flags.indexOf('[') >= 0; // A value is optional when the option is specified. + this.mandatory = false; // The option must have a value after parsing, which usually means it must be specified on command line. + this.negate = flags.indexOf('-no-') !== -1; + const flagParts = flags.split(/[ ,|]+/); + if (flagParts.length > 1 && !/^[[<]/.test(flagParts[1])) this.short = flagParts.shift(); + this.long = flagParts.shift(); + this.description = description || ''; + this.defaultValue = undefined; + } + + /** + * Return option name. + * + * @return {string} + * @api private + */ + + name() { + return this.long.replace(/^--/, ''); + }; + + /** + * Return option name, in a camelcase format that can be used + * as a object attribute key. + * + * @return {string} + * @api private + */ + + attributeName() { + return camelcase(this.name().replace(/^no-/, '')); + }; + + /** + * Check if `arg` matches the short or long flag. + * + * @param {string} arg + * @return {boolean} + * @api private + */ + + is(arg) { + return this.short === arg || this.long === arg; + }; +} + +/** + * CommanderError class + * @class + */ +class CommanderError extends Error { + /** + * Constructs the CommanderError class + * @param {number} exitCode suggested exit code which could be used with process.exit + * @param {string} code an id string representing the error + * @param {string} message human-readable description of the error + * @constructor + */ + constructor(exitCode, code, message) { + super(message); + // properly capture stack trace in Node.js + Error.captureStackTrace(this, this.constructor); + this.name = this.constructor.name; + this.code = code; + this.exitCode = exitCode; + this.nestedError = undefined; + } +} + +class Command extends EventEmitter { + /** + * Initialize a new `Command`. + * + * @param {string} [name] + * @api public + */ + + constructor(name) { + super(); + this.commands = []; + this.options = []; + this.parent = null; + this._allowUnknownOption = false; + this._args = []; + this.rawArgs = null; + this._scriptPath = null; + this._name = name || ''; + this._optionValues = {}; + this._storeOptionsAsProperties = true; // backwards compatible by default + this._passCommandToAction = true; // backwards compatible by default + this._actionResults = []; + this._actionHandler = null; + this._executableHandler = false; + this._executableFile = null; // custom name for executable + this._defaultCommandName = null; + this._exitCallback = null; + this._aliases = []; + + this._hidden = false; + this._helpFlags = '-h, --help'; + this._helpDescription = 'display help for command'; + this._helpShortFlag = '-h'; + this._helpLongFlag = '--help'; + this._hasImplicitHelpCommand = undefined; // Deliberately undefined, not decided whether true or false + this._helpCommandName = 'help'; + this._helpCommandnameAndArgs = 'help [command]'; + this._helpCommandDescription = 'display help for command'; + } + + /** + * Define a command. + * + * There are two styles of command: pay attention to where to put the description. + * + * Examples: + * + * // Command implemented using action handler (description is supplied separately to `.command`) + * program + * .command('clone <source> [destination]') + * .description('clone a repository into a newly created directory') + * .action((source, destination) => { + * console.log('clone command called'); + * }); + * + * // Command implemented using separate executable file (description is second parameter to `.command`) + * program + * .command('start <service>', 'start named service') + * .command('stop [service]', 'stop named service, or all if no name supplied'); + * + * @param {string} nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...` + * @param {Object|string} [actionOptsOrExecDesc] - configuration options (for action), or description (for executable) + * @param {Object} [execOpts] - configuration options (for executable) + * @return {Command} returns new command for action handler, or `this` for executable command + * @api public + */ + + command(nameAndArgs, actionOptsOrExecDesc, execOpts) { + let desc = actionOptsOrExecDesc; + let opts = execOpts; + if (typeof desc === 'object' && desc !== null) { + opts = desc; + desc = null; + } + opts = opts || {}; + const args = nameAndArgs.split(/ +/); + const cmd = this.createCommand(args.shift()); + + if (desc) { + cmd.description(desc); + cmd._executableHandler = true; + } + if (opts.isDefault) this._defaultCommandName = cmd._name; + + cmd._hidden = !!(opts.noHelp || opts.hidden); + cmd._helpFlags = this._helpFlags; + cmd._helpDescription = this._helpDescription; + cmd._helpShortFlag = this._helpShortFlag; + cmd._helpLongFlag = this._helpLongFlag; + cmd._helpCommandName = this._helpCommandName; + cmd._helpCommandnameAndArgs = this._helpCommandnameAndArgs; + cmd._helpCommandDescription = this._helpCommandDescription; + cmd._exitCallback = this._exitCallback; + cmd._storeOptionsAsProperties = this._storeOptionsAsProperties; + cmd._passCommandToAction = this._passCommandToAction; + + cmd._executableFile = opts.executableFile || null; // Custom name for executable file, set missing to null to match constructor + this.commands.push(cmd); + cmd._parseExpectedArgs(args); + cmd.parent = this; + + if (desc) return this; + return cmd; + }; + + /** + * Factory routine to create a new unattached command. + * + * See .command() for creating an attached subcommand, which uses this routine to + * create the command. You can override createCommand to customise subcommands. + * + * @param {string} [name] + * @return {Command} new command + * @api public + */ + + createCommand(name) { + return new Command(name); + }; + + /** + * Add a prepared subcommand. + * + * See .command() for creating an attached subcommand which inherits settings from its parent. + * + * @param {Command} cmd - new subcommand + * @param {Object} [opts] - configuration options + * @return {Command} `this` command for chaining + * @api public + */ + + addCommand(cmd, opts) { + if (!cmd._name) throw new Error('Command passed to .addCommand() must have a name'); + + // To keep things simple, block automatic name generation for deeply nested executables. + // Fail fast and detect when adding rather than later when parsing. + function checkExplicitNames(commandArray) { + commandArray.forEach((cmd) => { + if (cmd._executableHandler && !cmd._executableFile) { + throw new Error(`Must specify executableFile for deeply nested executable: ${cmd.name()}`); + } + checkExplicitNames(cmd.commands); + }); + } + checkExplicitNames(cmd.commands); + + opts = opts || {}; + if (opts.isDefault) this._defaultCommandName = cmd._name; + if (opts.noHelp || opts.hidden) cmd._hidden = true; // modifying passed command due to existing implementation + + this.commands.push(cmd); + cmd.parent = this; + return this; + }; + + /** + * Define argument syntax for the command. + * + * @api public + */ + + arguments(desc) { + return this._parseExpectedArgs(desc.split(/ +/)); + }; + + /** + * Override default decision whether to add implicit help command. + * + * addHelpCommand() // force on + * addHelpCommand(false); // force off + * addHelpCommand('help [cmd]', 'display help for [cmd]'); // force on with custom detais + * + * @return {Command} `this` command for chaining + * @api public + */ + + addHelpCommand(enableOrNameAndArgs, description) { + if (enableOrNameAndArgs === false) { + this._hasImplicitHelpCommand = false; + } else { + this._hasImplicitHelpCommand = true; + if (typeof enableOrNameAndArgs === 'string') { + this._helpCommandName = enableOrNameAndArgs.split(' ')[0]; + this._helpCommandnameAndArgs = enableOrNameAndArgs; + } + this._helpCommandDescription = description || this._helpCommandDescription; + } + return this; + }; + + /** + * @return {boolean} + * @api private + */ + + _lazyHasImplicitHelpCommand() { + if (this._hasImplicitHelpCommand === undefined) { + this._hasImplicitHelpCommand = this.commands.length && !this._actionHandler && !this._findCommand('help'); + } + return this._hasImplicitHelpCommand; + }; + + /** + * Parse expected `args`. + * + * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`. + * + * @param {Array} args + * @return {Command} `this` command for chaining + * @api private + */ + + _parseExpectedArgs(args) { + if (!args.length) return; + args.forEach((arg) => { + const argDetails = { + required: false, + name: '', + variadic: false + }; + + switch (arg[0]) { + case '<': + argDetails.required = true; + argDetails.name = arg.slice(1, -1); + break; + case '[': + argDetails.name = arg.slice(1, -1); + break; + } + + if (argDetails.name.length > 3 && argDetails.name.slice(-3) === '...') { + argDetails.variadic = true; + argDetails.name = argDetails.name.slice(0, -3); + } + if (argDetails.name) { + this._args.push(argDetails); + } + }); + this._args.forEach((arg, i) => { + if (arg.variadic && i < this._args.length - 1) { + throw new Error(`only the last argument can be variadic '${arg.name}'`); + } + }); + return this; + }; + + /** + * Register callback to use as replacement for calling process.exit. + * + * @param {Function} [fn] optional callback which will be passed a CommanderError, defaults to throwing + * @return {Command} `this` command for chaining + * @api public + */ + + exitOverride(fn) { + if (fn) { + this._exitCallback = fn; + } else { + this._exitCallback = (err) => { + if (err.code !== 'commander.executeSubCommandAsync') { + throw err; + } else { + // Async callback from spawn events, not useful to throw. + } + }; + } + return this; + }; + + /** + * Call process.exit, and _exitCallback if defined. + * + * @param {number} exitCode exit code for using with process.exit + * @param {string} code an id string representing the error + * @param {string} message human-readable description of the error + * @return never + * @api private + */ + + _exit(exitCode, code, message) { + if (this._exitCallback) { + this._exitCallback(new CommanderError(exitCode, code, message)); + // Expecting this line is not reached. + } + process.exit(exitCode); + }; + + /** + * Register callback `fn` for the command. + * + * Examples: + * + * program + * .command('help') + * .description('display verbose help') + * .action(function() { + * // output help here + * }); + * + * @param {Function} fn + * @return {Command} `this` command for chaining + * @api public + */ + + action(fn) { + const listener = (args) => { + // The .action callback takes an extra parameter which is the command or options. + const expectedArgsCount = this._args.length; + const actionArgs = args.slice(0, expectedArgsCount); + if (this._passCommandToAction) { + actionArgs[expectedArgsCount] = this; + } else { + actionArgs[expectedArgsCount] = this.opts(); + } + // Add the extra arguments so available too. + if (args.length > expectedArgsCount) { + actionArgs.push(args.slice(expectedArgsCount)); + } + + const actionResult = fn.apply(this, actionArgs); + // Remember result in case it is async. Assume parseAsync getting called on root. + let rootCommand = this; + while (rootCommand.parent) { + rootCommand = rootCommand.parent; + } + rootCommand._actionResults.push(actionResult); + }; + this._actionHandler = listener; + return this; + }; + + /** + * Internal implementation shared by .option() and .requiredOption() + * + * @param {Object} config + * @param {string} flags + * @param {string} description + * @param {Function|*} [fn] - custom option processing function or default vaue + * @param {*} [defaultValue] + * @return {Command} `this` command for chaining + * @api private + */ + + _optionEx(config, flags, description, fn, defaultValue) { + const option = new Option(flags, description); + const oname = option.name(); + const name = option.attributeName(); + option.mandatory = !!config.mandatory; + + // default as 3rd arg + if (typeof fn !== 'function') { + if (fn instanceof RegExp) { + // This is a bit simplistic (especially no error messages), and probably better handled by caller using custom option processing. + // No longer documented in README, but still present for backwards compatibility. + const regex = fn; + fn = (val, def) => { + const m = regex.exec(val); + return m ? m[0] : def; + }; + } else { + defaultValue = fn; + fn = null; + } + } + + // preassign default value for --no-*, [optional], <required>, or plain flag if boolean value + if (option.negate || option.optional || option.required || typeof defaultValue === 'boolean') { + // when --no-foo we make sure default is true, unless a --foo option is already defined + if (option.negate) { + const positiveLongFlag = option.long.replace(/^--no-/, '--'); + defaultValue = this._findOption(positiveLongFlag) ? this._getOptionValue(name) : true; + } + // preassign only if we have a default + if (defaultValue !== undefined) { + this._setOptionValue(name, defaultValue); + option.defaultValue = defaultValue; + } + } + + // register the option + this.options.push(option); + + // when it's passed assign the value + // and conditionally invoke the callback + this.on('option:' + oname, (val) => { + // coercion + if (val !== null && fn) { + val = fn(val, this._getOptionValue(name) === undefined ? defaultValue : this._getOptionValue(name)); + } + + // unassigned or boolean value + if (typeof this._getOptionValue(name) === 'boolean' || typeof this._getOptionValue(name) === 'undefined') { + // if no value, negate false, and we have a default, then use it! + if (val == null) { + this._setOptionValue(name, option.negate + ? false + : defaultValue || true); + } else { + this._setOptionValue(name, val); + } + } else if (val !== null) { + // reassign + this._setOptionValue(name, option.negate ? false : val); + } + }); + + return this; + }; + + /** + * Define option with `flags`, `description` and optional + * coercion `fn`. + * + * The `flags` string should contain both the short and long flags, + * separated by comma, a pipe or space. The following are all valid + * all will output this way when `--help` is used. + * + * "-p, --pepper" + * "-p|--pepper" + * "-p --pepper" + * + * Examples: + * + * // simple boolean defaulting to undefined + * program.option('-p, --pepper', 'add pepper'); + * + * program.pepper + * // => undefined + * + * --pepper + * program.pepper + * // => true + * + * // simple boolean defaulting to true (unless non-negated option is also defined) + * program.option('-C, --no-cheese', 'remove cheese'); + * + * program.cheese + * // => true + * + * --no-cheese + * program.cheese + * // => false + * + * // required argument + * program.option('-C, --chdir <path>', 'change the working directory'); + * + * --chdir /tmp + * program.chdir + * // => "/tmp" + * + * // optional argument + * program.option('-c, --cheese [type]', 'add cheese [marble]'); + * + * @param {string} flags + * @param {string} description + * @param {Function|*} [fn] - custom option processing function or default vaue + * @param {*} [defaultValue] + * @return {Command} `this` command for chaining + * @api public + */ + + option(flags, description, fn, defaultValue) { + return this._optionEx({}, flags, description, fn, defaultValue); + }; + + /* + * Add a required option which must have a value after parsing. This usually means + * the option must be specified on the command line. (Otherwise the same as .option().) + * + * The `flags` string should contain both the short and long flags, separated by comma, a pipe or space. + * + * @param {string} flags + * @param {string} description + * @param {Function|*} [fn] - custom option processing function or default vaue + * @param {*} [defaultValue] + * @return {Command} `this` command for chaining + * @api public + */ + + requiredOption(flags, description, fn, defaultValue) { + return this._optionEx({ mandatory: true }, flags, description, fn, defaultValue); + }; + + /** + * Allow unknown options on the command line. + * + * @param {Boolean} [arg] - if `true` or omitted, no error will be thrown + * for unknown options. + * @api public + */ + allowUnknownOption(arg) { + this._allowUnknownOption = (arg === undefined) || arg; + return this; + }; + + /** + * Whether to store option values as properties on command object, + * or store separately (specify false). In both cases the option values can be accessed using .opts(). + * + * @param {boolean} value + * @return {Command} `this` command for chaining + * @api public + */ + + storeOptionsAsProperties(value) { + this._storeOptionsAsProperties = (value === undefined) || value; + if (this.options.length) { + throw new Error('call .storeOptionsAsProperties() before adding options'); + } + return this; + }; + + /** + * Whether to pass command to action handler, + * or just the options (specify false). + * + * @param {boolean} value + * @return {Command} `this` command for chaining + * @api public + */ + + passCommandToAction(value) { + this._passCommandToAction = (value === undefined) || value; + return this; + }; + + /** + * Store option value + * + * @param {string} key + * @param {Object} value + * @api private + */ + + _setOptionValue(key, value) { + if (this._storeOptionsAsProperties) { + this[key] = value; + } else { + this._optionValues[key] = value; + } + }; + + /** + * Retrieve option value + * + * @param {string} key + * @return {Object} value + * @api private + */ + + _getOptionValue(key) { + if (this._storeOptionsAsProperties) { + return this[key]; + } + return this._optionValues[key]; + }; + + /** + * Parse `argv`, setting options and invoking commands when defined. + * + * The default expectation is that the arguments are from node and have the application as argv[0] + * and the script being run in argv[1], with user parameters after that. + * + * Examples: + * + * program.parse(process.argv); + * program.parse(); // implicitly use process.argv and auto-detect node vs electron conventions + * program.parse(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0] + * + * @param {string[]} [argv] - optional, defaults to process.argv + * @param {Object} [parseOptions] - optionally specify style of options with from: node/user/electron + * @param {string} [parseOptions.from] - where the args are from: 'node', 'user', 'electron' + * @return {Command} `this` command for chaining + * @api public + */ + + parse(argv, parseOptions) { + if (argv !== undefined && !Array.isArray(argv)) { + throw new Error('first parameter to parse must be array or undefined'); + } + parseOptions = parseOptions || {}; + + // Default to using process.argv + if (argv === undefined) { + argv = process.argv; + // @ts-ignore + if (process.versions && process.versions.electron) { + parseOptions.from = 'electron'; + } + } + this.rawArgs = argv.slice(); + + // make it a little easier for callers by supporting various argv conventions + let userArgs; + switch (parseOptions.from) { + case undefined: + case 'node': + this._scriptPath = argv[1]; + userArgs = argv.slice(2); + break; + case 'electron': + // @ts-ignore + if (process.defaultApp) { + this._scriptPath = argv[1]; + userArgs = argv.slice(2); + } else { + userArgs = argv.slice(1); + } + break; + case 'user': + userArgs = argv.slice(0); + break; + default: + throw new Error(`unexpected parse option { from: '${parseOptions.from}' }`); + } + if (!this._scriptPath && process.mainModule) { + this._scriptPath = process.mainModule.filename; + } + + // Guess name, used in usage in help. + this._name = this._name || (this._scriptPath && path.basename(this._scriptPath, path.extname(this._scriptPath))); + + // Let's go! + this._parseCommand([], userArgs); + + return this; + }; + + /** + * Parse `argv`, setting options and invoking commands when defined. + * + * Use parseAsync instead of parse if any of your action handlers are async. Returns a Promise. + * + * The default expectation is that the arguments are from node and have the application as argv[0] + * and the script being run in argv[1], with user parameters after that. + * + * Examples: + * + * program.parseAsync(process.argv); + * program.parseAsync(); // implicitly use process.argv and auto-detect node vs electron conventions + * program.parseAsync(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0] + * + * @param {string[]} [argv] + * @param {Object} [parseOptions] + * @param {string} parseOptions.from - where the args are from: 'node', 'user', 'electron' + * @return {Promise} + * @api public + */ + + parseAsync(argv, parseOptions) { + this.parse(argv, parseOptions); + return Promise.all(this._actionResults).then(() => this); + }; + + /** + * Execute a sub-command executable. + * + * @api private + */ + + _executeSubCommand(subcommand, args) { + args = args.slice(); + let launchWithNode = false; // Use node for source targets so do not need to get permissions correct, and on Windows. + const sourceExt = ['.js', '.ts', '.mjs']; + + // Not checking for help first. Unlikely to have mandatory and executable, and can't robustly test for help flags in external command. + this._checkForMissingMandatoryOptions(); + + // Want the entry script as the reference for command name and directory for searching for other files. + const scriptPath = this._scriptPath; + + let baseDir; + try { + const resolvedLink = fs.realpathSync(scriptPath); + baseDir = path.dirname(resolvedLink); + } catch (e) { + baseDir = '.'; // dummy, probably not going to find executable! + } + + // name of the subcommand, like `pm-install` + let bin = path.basename(scriptPath, path.extname(scriptPath)) + '-' + subcommand._name; + if (subcommand._executableFile) { + bin = subcommand._executableFile; + } + + const localBin = path.join(baseDir, bin); + if (fs.existsSync(localBin)) { + // prefer local `./<bin>` to bin in the $PATH + bin = localBin; + } else { + // Look for source files. + sourceExt.forEach((ext) => { + if (fs.existsSync(`${localBin}${ext}`)) { + bin = `${localBin}${ext}`; + } + }); + } + launchWithNode = sourceExt.includes(path.extname(bin)); + + let proc; + if (process.platform !== 'win32') { + if (launchWithNode) { + args.unshift(bin); + // add executable arguments to spawn + args = incrementNodeInspectorPort(process.execArgv).concat(args); + + proc = spawn(process.argv[0], args, { stdio: 'inherit' }); + } else { + proc = spawn(bin, args, { stdio: 'inherit' }); + } + } else { + args.unshift(bin); + // add executable arguments to spawn + args = incrementNodeInspectorPort(process.execArgv).concat(args); + proc = spawn(process.execPath, args, { stdio: 'inherit' }); + } + + const signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP']; + signals.forEach((signal) => { + // @ts-ignore + process.on(signal, () => { + if (proc.killed === false && proc.exitCode === null) { + proc.kill(signal); + } + }); + }); + + // By default terminate process when spawned process terminates. + // Suppressing the exit if exitCallback defined is a bit messy and of limited use, but does allow process to stay running! + const exitCallback = this._exitCallback; + if (!exitCallback) { + proc.on('close', process.exit.bind(process)); + } else { + proc.on('close', () => { + exitCallback(new CommanderError(process.exitCode || 0, 'commander.executeSubCommandAsync', '(close)')); + }); + } + proc.on('error', (err) => { + // @ts-ignore + if (err.code === 'ENOENT') { + const executableMissing = `'${bin}' does not exist + - if '${subcommand._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead + - if the default executable name is not suitable, use the executableFile option to supply a custom name`; + throw new Error(executableMissing); + // @ts-ignore + } else if (err.code === 'EACCES') { + throw new Error(`'${bin}' not executable`); + } + if (!exitCallback) { + process.exit(1); + } else { + const wrappedError = new CommanderError(1, 'commander.executeSubCommandAsync', '(error)'); + wrappedError.nestedError = err; + exitCallback(wrappedError); + } + }); + + // Store the reference to the child process + this.runningCommand = proc; + }; + + /** + * @api private + */ + _dispatchSubcommand(commandName, operands, unknown) { + const subCommand = this._findCommand(commandName); + if (!subCommand) this._helpAndError(); + + if (subCommand._executableHandler) { + this._executeSubCommand(subCommand, operands.concat(unknown)); + } else { + subCommand._parseCommand(operands, unknown); + } + }; + + /** + * Process arguments in context of this command. + * + * @api private + */ + + _parseCommand(operands, unknown) { + const parsed = this.parseOptions(unknown); + operands = operands.concat(parsed.operands); + unknown = parsed.unknown; + this.args = operands.concat(unknown); + + if (operands && this._findCommand(operands[0])) { + this._dispatchSubcommand(operands[0], operands.slice(1), unknown); + } else if (this._lazyHasImplicitHelpCommand() && operands[0] === this._helpCommandName) { + if (operands.length === 1) { + this.help(); + } else { + this._dispatchSubcommand(operands[1], [], [this._helpLongFlag]); + } + } else if (this._defaultCommandName) { + outputHelpIfRequested(this, unknown); // Run the help for default command from parent rather than passing to default command + this._dispatchSubcommand(this._defaultCommandName, operands, unknown); + } else { + if (this.commands.length && this.args.length === 0 && !this._actionHandler && !this._defaultCommandName) { + // probaby missing subcommand and no handler, user needs help + this._helpAndError(); + } + + outputHelpIfRequested(this, parsed.unknown); + this._checkForMissingMandatoryOptions(); + if (parsed.unknown.length > 0) { + this.unknownOption(parsed.unknown[0]); + } + + if (this._actionHandler) { + const args = this.args.slice(); + this._args.forEach((arg, i) => { + if (arg.required && args[i] == null) { + this.missingArgument(arg.name); + } else if (arg.variadic) { + args[i] = args.splice(i); + } + }); + + this._actionHandler(args); + this.emit('command:' + this.name(), operands, unknown); + } else if (operands.length) { + if (this._findCommand('*')) { + this._dispatchSubcommand('*', operands, unknown); + } else if (this.listenerCount('command:*')) { + this.emit('command:*', operands, unknown); + } else if (this.commands.length) { + this.unknownCommand(); + } + } else if (this.commands.length) { + // This command has subcommands and nothing hooked up at this level, so display help. + this._helpAndError(); + } else { + // fall through for caller to handle after calling .parse() + } + } + }; + + /** + * Find matching command. + * + * @api private + */ + _findCommand(name) { + if (!name) return undefined; + return this.commands.find(cmd => cmd._name === name || cmd._aliases.includes(name)); + }; + + /** + * Return an option matching `arg` if any. + * + * @param {string} arg + * @return {Option} + * @api private + */ + + _findOption(arg) { + return this.options.find(option => option.is(arg)); + }; + + /** + * Display an error message if a mandatory option does not have a value. + * Lazy calling after checking for help flags from leaf subcommand. + * + * @api private + */ + + _checkForMissingMandatoryOptions() { + // Walk up hierarchy so can call in subcommand after checking for displaying help. + for (let cmd = this; cmd; cmd = cmd.parent) { + cmd.options.forEach((anOption) => { + if (anOption.mandatory && (cmd._getOptionValue(anOption.attributeName()) === undefined)) { + cmd.missingMandatoryOptionValue(anOption); + } + }); + } + }; + + /** + * Parse options from `argv` removing known options, + * and return argv split into operands and unknown arguments. + * + * Examples: + * + * argv => operands, unknown + * --known kkk op => [op], [] + * op --known kkk => [op], [] + * sub --unknown uuu op => [sub], [--unknown uuu op] + * sub -- --unknown uuu op => [sub --unknown uuu op], [] + * + * @param {String[]} argv + * @return {{operands: String[], unknown: String[]}} + * @api public + */ + + parseOptions(argv) { + const operands = []; // operands, not options or values + const unknown = []; // first unknown option and remaining unknown args + let dest = operands; + const args = argv.slice(); + + function maybeOption(arg) { + return arg.length > 1 && arg[0] === '-'; + } + + // parse options + while (args.length) { + const arg = args.shift(); + + // literal + if (arg === '--') { + if (dest === unknown) dest.push(arg); + dest.push(...args); + break; + } + + if (maybeOption(arg)) { + const option = this._findOption(arg); + // recognised option, call listener to assign value with possible custom processing + if (option) { + if (option.required) { + const value = args.shift(); + if (value === undefined) this.optionMissingArgument(option); + this.emit(`option:${option.name()}`, value); + } else if (option.optional) { + let value = null; + // historical behaviour is optional value is following arg unless an option + if (args.length > 0 && !maybeOption(args[0])) { + value = args.shift(); + } + this.emit(`option:${option.name()}`, value); + } else { // boolean flag + this.emit(`option:${option.name()}`); + } + continue; + } + } + + // Look for combo options following single dash, eat first one if known. + if (arg.length > 2 && arg[0] === '-' && arg[1] !== '-') { + const option = this._findOption(`-${arg[1]}`); + if (option) { + if (option.required || option.optional) { + // option with value following in same argument + this.emit(`option:${option.name()}`, arg.slice(2)); + } else { + // boolean option, emit and put back remainder of arg for further processing + this.emit(`option:${option.name()}`); + args.unshift(`-${arg.slice(2)}`); + } + continue; + } + } + + // Look for known long flag with value, like --foo=bar + if (/^--[^=]+=/.test(arg)) { + const index = arg.indexOf('='); + const option = this._findOption(arg.slice(0, index)); + if (option && (option.required || option.optional)) { + this.emit(`option:${option.name()}`, arg.slice(index + 1)); + continue; + } + } + + // looks like an option but unknown, unknowns from here + if (arg.length > 1 && arg[0] === '-') { + dest = unknown; + } + + // add arg + dest.push(arg); + } + + return { operands, unknown }; + }; + + /** + * Return an object containing options as key-value pairs + * + * @return {Object} + * @api public + */ + opts() { + if (this._storeOptionsAsProperties) { + // Preserve original behaviour so backwards compatible when still using properties + const result = {}; + const len = this.options.length; + + for (let i = 0; i < len; i++) { + const key = this.options[i].attributeName(); + result[key] = key === this._versionOptionName ? this._version : this[key]; + } + return result; + } + + return this._optionValues; + }; + + /** + * Argument `name` is missing. + * + * @param {string} name + * @api private + */ + + missingArgument(name) { + const message = `error: missing required argument '${name}'`; + console.error(message); + this._exit(1, 'commander.missingArgument', message); + }; + + /** + * `Option` is missing an argument, but received `flag` or nothing. + * + * @param {Option} option + * @param {string} [flag] + * @api private + */ + + optionMissingArgument(option, flag) { + let message; + if (flag) { + message = `error: option '${option.flags}' argument missing, got '${flag}'`; + } else { + message = `error: option '${option.flags}' argument missing`; + } + console.error(message); + this._exit(1, 'commander.optionMissingArgument', message); + }; + + /** + * `Option` does not have a value, and is a mandatory option. + * + * @param {Option} option + * @api private + */ + + missingMandatoryOptionValue(option) { + const message = `error: required option '${option.flags}' not specified`; + console.error(message); + this._exit(1, 'commander.missingMandatoryOptionValue', message); + }; + + /** + * Unknown option `flag`. + * + * @param {string} flag + * @api private + */ + + unknownOption(flag) { + if (this._allowUnknownOption) return; + const message = `error: unknown option '${flag}'`; + console.error(message); + this._exit(1, 'commander.unknownOption', message); + }; + + /** + * Unknown command. + * + * @api private + */ + + unknownCommand() { + const partCommands = [this.name()]; + for (let parentCmd = this.parent; parentCmd; parentCmd = parentCmd.parent) { + partCommands.unshift(parentCmd.name()); + } + const fullCommand = partCommands.join(' '); + const message = `error: unknown command '${this.args[0]}'. See '${fullCommand} ${this._helpLongFlag}'.`; + console.error(message); + this._exit(1, 'commander.unknownCommand', message); + }; + + /** + * Set the program version to `str`. + * + * This method auto-registers the "-V, --version" flag + * which will print the version number when passed. + * + * You can optionally supply the flags and description to override the defaults. + * + * @param {string} str + * @param {string} [flags] + * @param {string} [description] + * @return {this | string} `this` command for chaining, or version string if no arguments + * @api public + */ + + version(str, flags, description) { + if (str === undefined) return this._version; + this._version = str; + flags = flags || '-V, --version'; + description = description || 'output the version number'; + const versionOption = new Option(flags, description); + this._versionOptionName = versionOption.long.substr(2) || 'version'; + this.options.push(versionOption); + this.on('option:' + this._versionOptionName, () => { + process.stdout.write(str + '\n'); + this._exit(0, 'commander.version', str); + }); + return this; + }; + + /** + * Set the description to `str`. + * + * @param {string} str + * @param {Object} [argsDescription] + * @return {string|Command} + * @api public + */ + + description(str, argsDescription) { + if (str === undefined && argsDescription === undefined) return this._description; + this._description = str; + this._argsDescription = argsDescription; + return this; + }; + + /** + * Set an alias for the command. + * + * You may call more than once to add multiple aliases. Only the first alias is shown in the auto-generated help. + * + * @param {string} [alias] + * @return {string|Command} + * @api public + */ + + alias(alias) { + if (alias === undefined) return this._aliases[0]; // just return first, for backwards compatibility + + let command = this; + if (this.commands.length !== 0 && this.commands[this.commands.length - 1]._executableHandler) { + // assume adding alias for last added executable subcommand, rather than this + command = this.commands[this.commands.length - 1]; + } + + if (alias === command._name) throw new Error('Command alias can\'t be the same as its name'); + + command._aliases.push(alias); + return this; + }; + + /** + * Set aliases for the command. + * + * Only the first alias is shown in the auto-generated help. + * + * @param {string[]} [aliases] + * @return {string[]|Command} + * @api public + */ + + aliases(aliases) { + // Getter for the array of aliases is the main reason for having aliases() in addition to alias(). + if (aliases === undefined) return this._aliases; + + aliases.forEach((alias) => this.alias(alias)); + return this; + }; + + /** + * Set / get the command usage `str`. + * + * @param {string} [str] + * @return {String|Command} + * @api public + */ + + usage(str) { + if (str === undefined) { + if (this._usage) return this._usage; + + const args = this._args.map((arg) => { + return humanReadableArgName(arg); + }); + return '[options]' + + (this.commands.length ? ' [command]' : '') + + (this._args.length ? ' ' + args.join(' ') : ''); + } + + this._usage = str; + return this; + }; + + /** + * Get or set the name of the command + * + * @param {string} [str] + * @return {String|Command} + * @api public + */ + + name(str) { + if (str === undefined) return this._name; + this._name = str; + return this; + }; + + /** + * Return prepared commands. + * + * @return {Array} + * @api private + */ + + prepareCommands() { + const commandDetails = this.commands.filter((cmd) => { + return !cmd._hidden; + }).map((cmd) => { + const args = cmd._args.map((arg) => { + return humanReadableArgName(arg); + }).join(' '); + + return [ + cmd._name + + (cmd._aliases[0] ? '|' + cmd._aliases[0] : '') + + (cmd.options.length ? ' [options]' : '') + + (args ? ' ' + args : ''), + cmd._description + ]; + }); + + if (this._lazyHasImplicitHelpCommand()) { + commandDetails.push([this._helpCommandnameAndArgs, this._helpCommandDescription]); + } + return commandDetails; + }; + + /** + * Return the largest command length. + * + * @return {number} + * @api private + */ + + largestCommandLength() { + const commands = this.prepareCommands(); + return commands.reduce((max, command) => { + return Math.max(max, command[0].length); + }, 0); + }; + + /** + * Return the largest option length. + * + * @return {number} + * @api private + */ + + largestOptionLength() { + const options = [].slice.call(this.options); + options.push({ + flags: this._helpFlags + }); + + return options.reduce((max, option) => { + return Math.max(max, option.flags.length); + }, 0); + }; + + /** + * Return the largest arg length. + * + * @return {number} + * @api private + */ + + largestArgLength() { + return this._args.reduce((max, arg) => { + return Math.max(max, arg.name.length); + }, 0); + }; + + /** + * Return the pad width. + * + * @return {number} + * @api private + */ + + padWidth() { + let width = this.largestOptionLength(); + if (this._argsDescription && this._args.length) { + if (this.largestArgLength() > width) { + width = this.largestArgLength(); + } + } + + if (this.commands && this.commands.length) { + if (this.largestCommandLength() > width) { + width = this.largestCommandLength(); + } + } + + return width; + }; + + /** + * Return help for options. + * + * @return {string} + * @api private + */ + + optionHelp() { + const width = this.padWidth(); + const columns = process.stdout.columns || 80; + const descriptionWidth = columns - width - 4; + function padOptionDetails(flags, description) { + return pad(flags, width) + ' ' + optionalWrap(description, descriptionWidth, width + 2); + }; + + // Explicit options (including version) + const help = this.options.map((option) => { + const fullDesc = option.description + + ((!option.negate && option.defaultValue !== undefined) ? ' (default: ' + JSON.stringify(option.defaultValue) + ')' : ''); + return padOptionDetails(option.flags, fullDesc); + }); + + // Implicit help + const showShortHelpFlag = this._helpShortFlag && !this._findOption(this._helpShortFlag); + const showLongHelpFlag = !this._findOption(this._helpLongFlag); + if (showShortHelpFlag || showLongHelpFlag) { + let helpFlags = this._helpFlags; + if (!showShortHelpFlag) { + helpFlags = this._helpLongFlag; + } else if (!showLongHelpFlag) { + helpFlags = this._helpShortFlag; + } + help.push(padOptionDetails(helpFlags, this._helpDescription)); + } + + return help.join('\n'); + }; + + /** + * Return command help documentation. + * + * @return {string} + * @api private + */ + + commandHelp() { + if (!this.commands.length && !this._lazyHasImplicitHelpCommand()) return ''; + + const commands = this.prepareCommands(); + const width = this.padWidth(); + + const columns = process.stdout.columns || 80; + const descriptionWidth = columns - width - 4; + + return [ + 'Commands:', + commands.map((cmd) => { + const desc = cmd[1] ? ' ' + cmd[1] : ''; + return (desc ? pad(cmd[0], width) : cmd[0]) + optionalWrap(desc, descriptionWidth, width + 2); + }).join('\n').replace(/^/gm, ' '), + '' + ].join('\n'); + }; + + /** + * Return program help documentation. + * + * @return {string} + * @api public + */ + + helpInformation() { + let desc = []; + if (this._description) { + desc = [ + this._description, + '' + ]; + + const argsDescription = this._argsDescription; + if (argsDescription && this._args.length) { + const width = this.padWidth(); + const columns = process.stdout.columns || 80; + const descriptionWidth = columns - width - 5; + desc.push('Arguments:'); + desc.push(''); + this._args.forEach((arg) => { + desc.push(' ' + pad(arg.name, width) + ' ' + wrap(argsDescription[arg.name], descriptionWidth, width + 4)); + }); + desc.push(''); + } + } + + let cmdName = this._name; + if (this._aliases[0]) { + cmdName = cmdName + '|' + this._aliases[0]; + } + let parentCmdNames = ''; + for (let parentCmd = this.parent; parentCmd; parentCmd = parentCmd.parent) { + parentCmdNames = parentCmd.name() + ' ' + parentCmdNames; + } + const usage = [ + 'Usage: ' + parentCmdNames + cmdName + ' ' + this.usage(), + '' + ]; + + let cmds = []; + const commandHelp = this.commandHelp(); + if (commandHelp) cmds = [commandHelp]; + + const options = [ + 'Options:', + '' + this.optionHelp().replace(/^/gm, ' '), + '' + ]; + + return usage + .concat(desc) + .concat(options) + .concat(cmds) + .join('\n'); + }; + + /** + * Output help information for this command. + * + * When listener(s) are available for the helpLongFlag + * those callbacks are invoked. + * + * @api public + */ + + outputHelp(cb) { + if (!cb) { + cb = (passthru) => { + return passthru; + }; + } + const cbOutput = cb(this.helpInformation()); + if (typeof cbOutput !== 'string' && !Buffer.isBuffer(cbOutput)) { + throw new Error('outputHelp callback must return a string or a Buffer'); + } + process.stdout.write(cbOutput); + this.emit(this._helpLongFlag); + }; + + /** + * You can pass in flags and a description to override the help + * flags and help description for your command. + * + * @param {string} [flags] + * @param {string} [description] + * @return {Command} `this` command for chaining + * @api public + */ + + helpOption(flags, description) { + this._helpFlags = flags || this._helpFlags; + this._helpDescription = description || this._helpDescription; + + const splitFlags = this._helpFlags.split(/[ ,|]+/); + + this._helpShortFlag = undefined; + if (splitFlags.length > 1) this._helpShortFlag = splitFlags.shift(); + + this._helpLongFlag = splitFlags.shift(); + + return this; + }; + + /** + * Output help information and exit. + * + * @param {Function} [cb] + * @api public + */ + + help(cb) { + this.outputHelp(cb); + // exitCode: preserving original behaviour which was calling process.exit() + // message: do not have all displayed text available so only passing placeholder. + this._exit(process.exitCode || 0, 'commander.help', '(outputHelp)'); + }; + + /** + * Output help information and exit. Display for error situations. + * + * @api private + */ + + _helpAndError() { + this.outputHelp(); + // message: do not have all displayed text available so only passing placeholder. + this._exit(1, 'commander.help', '(outputHelp)'); + }; +}; + +/** + * Expose the root command. + */ + +exports = module.exports = new Command(); +exports.program = exports; // More explicit access to global command. + +/** + * Expose classes + */ + +exports.Command = Command; +exports.Option = Option; +exports.CommanderError = CommanderError; + +/** + * Camel-case the given `flag` + * + * @param {string} flag + * @return {string} + * @api private + */ + +function camelcase(flag) { + return flag.split('-').reduce((str, word) => { + return str + word[0].toUpperCase() + word.slice(1); + }); +} + +/** + * Pad `str` to `width`. + * + * @param {string} str + * @param {number} width + * @return {string} + * @api private + */ + +function pad(str, width) { + const len = Math.max(0, width - str.length); + return str + Array(len + 1).join(' '); +} + +/** + * Wraps the given string with line breaks at the specified width while breaking + * words and indenting every but the first line on the left. + * + * @param {string} str + * @param {number} width + * @param {number} indent + * @return {string} + * @api private + */ +function wrap(str, width, indent) { + const regex = new RegExp('.{1,' + (width - 1) + '}([\\s\u200B]|$)|[^\\s\u200B]+?([\\s\u200B]|$)', 'g'); + const lines = str.match(regex) || []; + return lines.map((line, i) => { + if (line.slice(-1) === '\n') { + line = line.slice(0, line.length - 1); + } + return ((i > 0 && indent) ? Array(indent + 1).join(' ') : '') + line.trimRight(); + }).join('\n'); +} + +/** + * Optionally wrap the given str to a max width of width characters per line + * while indenting with indent spaces. Do not wrap if insufficient width or + * string is manually formatted. + * + * @param {string} str + * @param {number} width + * @param {number} indent + * @return {string} + * @api private + */ +function optionalWrap(str, width, indent) { + // Detect manually wrapped and indented strings by searching for line breaks + // followed by multiple spaces/tabs. + if (str.match(/[\n]\s+/)) return str; + // Do not wrap to narrow columns (or can end up with a word per line). + const minWidth = 40; + if (width < minWidth) return str; + + return wrap(str, width, indent); +} + +/** + * Output help information if help flags specified + * + * @param {Command} cmd - command to output help for + * @param {Array} args - array of options to search for help flags + * @api private + */ + +function outputHelpIfRequested(cmd, args) { + const helpOption = args.find(arg => arg === cmd._helpLongFlag || arg === cmd._helpShortFlag); + if (helpOption) { + cmd.outputHelp(); + // (Do not have all displayed text available so only passing placeholder.) + cmd._exit(0, 'commander.helpDisplayed', '(outputHelp)'); + } +} + +/** + * Takes an argument and returns its human readable equivalent for help usage. + * + * @param {Object} arg + * @return {string} + * @api private + */ + +function humanReadableArgName(arg) { + const nameOutput = arg.name + (arg.variadic === true ? '...' : ''); + + return arg.required + ? '<' + nameOutput + '>' + : '[' + nameOutput + ']'; +} + +/** + * Scan arguments and increment port number for inspect calls (to avoid conflicts when spawning new command). + * + * @param {string[]} args - array of arguments from node.execArgv + * @returns {string[]} + * @api private + */ + +function incrementNodeInspectorPort(args) { + // Testing for these options: + // --inspect[=[host:]port] + // --inspect-brk[=[host:]port] + // --inspect-port=[host:]port + return args.map((arg) => { + let result = arg; + if (arg.indexOf('--inspect') === 0) { + let debugOption; + let debugHost = '127.0.0.1'; + let debugPort = '9229'; + let match; + if ((match = arg.match(/^(--inspect(-brk)?)$/)) !== null) { + // e.g. --inspect + debugOption = match[1]; + } else if ((match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/)) !== null) { + debugOption = match[1]; + if (/^\d+$/.test(match[3])) { + // e.g. --inspect=1234 + debugPort = match[3]; + } else { + // e.g. --inspect=localhost + debugHost = match[3]; + } + } else if ((match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/)) !== null) { + // e.g. --inspect=localhost:1234 + debugOption = match[1]; + debugHost = match[3]; + debugPort = match[4]; + } + + if (debugOption && debugPort !== '0') { + result = `${debugOption}=${debugHost}:${parseInt(debugPort) + 1}`; + } + } + return result; + }); +} diff --git a/node_modules/nunjucks/node_modules/commander/package.json b/node_modules/nunjucks/node_modules/commander/package.json new file mode 100644 index 0000000..325803e --- /dev/null +++ b/node_modules/nunjucks/node_modules/commander/package.json @@ -0,0 +1,48 @@ +{ + "name": "commander", + "version": "5.1.0", + "description": "the complete solution for node.js command-line programs", + "keywords": [ + "commander", + "command", + "option", + "parser", + "cli", + "argument", + "args", + "argv" + ], + "author": "TJ Holowaychuk <tj@vision-media.ca>", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/tj/commander.js.git" + }, + "scripts": { + "lint": "eslint index.js \"tests/**/*.js\"", + "typescript-lint": "eslint typings/*.ts", + "test": "jest && npm run test-typings", + "test-typings": "tsc -p tsconfig.json" + }, + "main": "index", + "files": [ + "index.js", + "typings/index.d.ts" + ], + "dependencies": {}, + "devDependencies": { + "@types/jest": "^25.2.1", + "@types/node": "^12.12.36", + "@typescript-eslint/eslint-plugin": "^2.29.0", + "eslint": "^6.8.0", + "eslint-config-standard-with-typescript": "^15.0.1", + "eslint-plugin-jest": "^23.8.2", + "jest": "^25.4.0", + "standard": "^14.3.3", + "typescript": "^3.7.5" + }, + "typings": "typings/index.d.ts", + "engines": { + "node": ">= 6" + } +} diff --git a/node_modules/nunjucks/node_modules/commander/typings/index.d.ts b/node_modules/nunjucks/node_modules/commander/typings/index.d.ts new file mode 100644 index 0000000..6f41bf3 --- /dev/null +++ b/node_modules/nunjucks/node_modules/commander/typings/index.d.ts @@ -0,0 +1,386 @@ +// Type definitions for commander +// Original definitions by: Alan Agius <https://github.com/alan-agius4>, Marcelo Dezem <https://github.com/mdezem>, vvakame <https://github.com/vvakame>, Jules Randolph <https://github.com/sveinburne> + +declare namespace commander { + + interface CommanderError extends Error { + code: string; + exitCode: number; + message: string; + nestedError?: string; + } + type CommanderErrorConstructor = new (exitCode: number, code: string, message: string) => CommanderError; + + interface Option { + flags: string; + required: boolean; // A value must be supplied when the option is specified. + optional: boolean; // A value is optional when the option is specified. + mandatory: boolean; // The option must have a value after parsing, which usually means it must be specified on command line. + bool: boolean; + short?: string; + long: string; + description: string; + } + type OptionConstructor = new (flags: string, description?: string) => Option; + + interface ParseOptions { + from: 'node' | 'electron' | 'user'; + } + + interface Command { + [key: string]: any; // options as properties + + args: string[]; + + commands: Command[]; + + /** + * Set the program version to `str`. + * + * This method auto-registers the "-V, --version" flag + * which will print the version number when passed. + * + * You can optionally supply the flags and description to override the defaults. + */ + version(str: string, flags?: string, description?: string): this; + + /** + * Define a command, implemented using an action handler. + * + * @remarks + * The command description is supplied using `.description`, not as a parameter to `.command`. + * + * @example + * ```ts + * program + * .command('clone <source> [destination]') + * .description('clone a repository into a newly created directory') + * .action((source, destination) => { + * console.log('clone command called'); + * }); + * ``` + * + * @param nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...` + * @param opts - configuration options + * @returns new command + */ + command(nameAndArgs: string, opts?: CommandOptions): ReturnType<this['createCommand']>; + /** + * Define a command, implemented in a separate executable file. + * + * @remarks + * The command description is supplied as the second parameter to `.command`. + * + * @example + * ```ts + * program + * .command('start <service>', 'start named service') + * .command('stop [service]', 'stop named serice, or all if no name supplied'); + * ``` + * + * @param nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...` + * @param description - description of executable command + * @param opts - configuration options + * @returns `this` command for chaining + */ + command(nameAndArgs: string, description: string, opts?: commander.ExecutableCommandOptions): this; + + /** + * Factory routine to create a new unattached command. + * + * See .command() for creating an attached subcommand, which uses this routine to + * create the command. You can override createCommand to customise subcommands. + */ + createCommand(name?: string): Command; + + /** + * Add a prepared subcommand. + * + * See .command() for creating an attached subcommand which inherits settings from its parent. + * + * @returns `this` command for chaining + */ + addCommand(cmd: Command, opts?: CommandOptions): this; + + /** + * Define argument syntax for command. + * + * @returns `this` command for chaining + */ + arguments(desc: string): this; + + /** + * Register callback to use as replacement for calling process.exit. + */ + exitOverride(callback?: (err: CommanderError) => never|void): this; + + /** + * Register callback `fn` for the command. + * + * @example + * program + * .command('help') + * .description('display verbose help') + * .action(function() { + * // output help here + * }); + * + * @returns `this` command for chaining + */ + action(fn: (...args: any[]) => void | Promise<void>): this; + + /** + * Define option with `flags`, `description` and optional + * coercion `fn`. + * + * The `flags` string should contain both the short and long flags, + * separated by comma, a pipe or space. The following are all valid + * all will output this way when `--help` is used. + * + * "-p, --pepper" + * "-p|--pepper" + * "-p --pepper" + * + * @example + * // simple boolean defaulting to false + * program.option('-p, --pepper', 'add pepper'); + * + * --pepper + * program.pepper + * // => Boolean + * + * // simple boolean defaulting to true + * program.option('-C, --no-cheese', 'remove cheese'); + * + * program.cheese + * // => true + * + * --no-cheese + * program.cheese + * // => false + * + * // required argument + * program.option('-C, --chdir <path>', 'change the working directory'); + * + * --chdir /tmp + * program.chdir + * // => "/tmp" + * + * // optional argument + * program.option('-c, --cheese [type]', 'add cheese [marble]'); + * + * @returns `this` command for chaining + */ + option(flags: string, description?: string, defaultValue?: string | boolean): this; + option(flags: string, description: string, regexp: RegExp, defaultValue?: string | boolean): this; + option<T>(flags: string, description: string, fn: (value: string, previous: T) => T, defaultValue?: T): this; + + /** + * Define a required option, which must have a value after parsing. This usually means + * the option must be specified on the command line. (Otherwise the same as .option().) + * + * The `flags` string should contain both the short and long flags, separated by comma, a pipe or space. + */ + requiredOption(flags: string, description?: string, defaultValue?: string | boolean): this; + requiredOption(flags: string, description: string, regexp: RegExp, defaultValue?: string | boolean): this; + requiredOption<T>(flags: string, description: string, fn: (value: string, previous: T) => T, defaultValue?: T): this; + + /** + * Whether to store option values as properties on command object, + * or store separately (specify false). In both cases the option values can be accessed using .opts(). + * + * @returns `this` command for chaining + */ + storeOptionsAsProperties(value?: boolean): this; + + /** + * Whether to pass command to action handler, + * or just the options (specify false). + * + * @returns `this` command for chaining + */ + passCommandToAction(value?: boolean): this; + + /** + * Allow unknown options on the command line. + * + * @param [arg] if `true` or omitted, no error will be thrown for unknown options. + * @returns `this` command for chaining + */ + allowUnknownOption(arg?: boolean): this; + + /** + * Parse `argv`, setting options and invoking commands when defined. + * + * The default expectation is that the arguments are from node and have the application as argv[0] + * and the script being run in argv[1], with user parameters after that. + * + * Examples: + * + * program.parse(process.argv); + * program.parse(); // implicitly use process.argv and auto-detect node vs electron conventions + * program.parse(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0] + * + * @returns `this` command for chaining + */ + parse(argv?: string[], options?: ParseOptions): this; + + /** + * Parse `argv`, setting options and invoking commands when defined. + * + * Use parseAsync instead of parse if any of your action handlers are async. Returns a Promise. + * + * The default expectation is that the arguments are from node and have the application as argv[0] + * and the script being run in argv[1], with user parameters after that. + * + * Examples: + * + * program.parseAsync(process.argv); + * program.parseAsync(); // implicitly use process.argv and auto-detect node vs electron conventions + * program.parseAsync(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0] + * + * @returns Promise + */ + parseAsync(argv?: string[], options?: ParseOptions): Promise<this>; + + /** + * Parse options from `argv` removing known options, + * and return argv split into operands and unknown arguments. + * + * @example + * argv => operands, unknown + * --known kkk op => [op], [] + * op --known kkk => [op], [] + * sub --unknown uuu op => [sub], [--unknown uuu op] + * sub -- --unknown uuu op => [sub --unknown uuu op], [] + */ + parseOptions(argv: string[]): commander.ParseOptionsResult; + + /** + * Return an object containing options as key-value pairs + */ + opts(): { [key: string]: any }; + + /** + * Set the description. + * + * @returns `this` command for chaining + */ + description(str: string, argsDescription?: {[argName: string]: string}): this; + /** + * Get the description. + */ + description(): string; + + /** + * Set an alias for the command. + * + * You may call more than once to add multiple aliases. Only the first alias is shown in the auto-generated help. + * + * @returns `this` command for chaining + */ + alias(alias: string): this; + /** + * Get alias for the command. + */ + alias(): string; + + /** + * Set aliases for the command. + * + * Only the first alias is shown in the auto-generated help. + * + * @returns `this` command for chaining + */ + aliases(aliases: string[]): this; + /** + * Get aliases for the command. + */ + aliases(): string[]; + + /** + * Set the command usage. + * + * @returns `this` command for chaining + */ + usage(str: string): this; + /** + * Get the command usage. + */ + usage(): string; + + /** + * Set the name of the command. + * + * @returns `this` command for chaining + */ + name(str: string): this; + /** + * Get the name of the command. + */ + name(): string; + + /** + * Output help information for this command. + * + * When listener(s) are available for the helpLongFlag + * those callbacks are invoked. + */ + outputHelp(cb?: (str: string) => string): void; + + /** + * Return command help documentation. + */ + helpInformation(): string; + + /** + * You can pass in flags and a description to override the help + * flags and help description for your command. + */ + helpOption(flags?: string, description?: string): this; + + /** + * Output help information and exit. + */ + help(cb?: (str: string) => string): never; + + /** + * Add a listener (callback) for when events occur. (Implemented using EventEmitter.) + * + * @example + * program + * .on('--help', () -> { + * console.log('See web site for more information.'); + * }); + */ + on(event: string | symbol, listener: (...args: any[]) => void): this; + } + type CommandConstructor = new (name?: string) => Command; + + interface CommandOptions { + noHelp?: boolean; // old name for hidden + hidden?: boolean; + isDefault?: boolean; + } + interface ExecutableCommandOptions extends CommandOptions { + executableFile?: string; + } + + interface ParseOptionsResult { + operands: string[]; + unknown: string[]; + } + + interface CommanderStatic extends Command { + program: Command; + Command: CommandConstructor; + Option: OptionConstructor; + CommanderError: CommanderErrorConstructor; + } + +} + +// Declaring namespace AND global +// eslint-disable-next-line no-redeclare +declare const commander: commander.CommanderStatic; +export = commander; diff --git a/node_modules/nunjucks/package.json b/node_modules/nunjucks/package.json new file mode 100644 index 0000000..6eb3ff8 --- /dev/null +++ b/node_modules/nunjucks/package.json @@ -0,0 +1,112 @@ +{ + "name": "nunjucks", + "description": "A powerful templating engine with inheritance, asynchronous control, and more (jinja2 inspired)", + "version": "3.2.4", + "author": "James Long <longster@gmail.com>", + "dependencies": { + "a-sync-waterfall": "^1.0.0", + "asap": "^2.0.3", + "commander": "^5.1.0" + }, + "browser": "./browser/nunjucks.js", + "devDependencies": { + "@babel/cli": "^7.0.0-beta.38", + "@babel/core": "^7.0.0-beta.38", + "@babel/preset-env": "^7.0.0-beta.38", + "@babel/register": "^7.0.0-beta.38", + "babel-loader": "^8.0.0-beta.0", + "babel-plugin-istanbul": "^4.1.5", + "babel-plugin-module-resolver": "3.0.0-beta.5", + "connect": "^3.6.5", + "core-js": "^2.5.3", + "cross-env": "^5.1.3", + "eslint": "^4.13.0", + "eslint-config-airbnb-base": "^12.1.0", + "eslint-plugin-import": "^2.8.0", + "expect.js": "*", + "express": "4.x", + "fs-extra": "^5.0.0", + "get-port": "^3.2.0", + "mocha": "< 8.x", + "mocha-phantomjs-core": "^2.1.2", + "mocha-phantomjs-istanbul": "0.0.2", + "module-alias": "^2.0.3", + "node-libs-browser": "^0.7.0", + "nyc": "^11.4.1", + "phantomjs-prebuilt": "^2.1.16", + "serve-static": "^1.13.1", + "supertest": "*", + "uglify-js": "^2.8.29", + "uglifyjs-webpack-plugin": "^1.1.6", + "webpack": "^3.10.0" + }, + "buildDependencies": { + "@babel/cli": "^7.0.0-beta.38", + "@babel/core": "^7.0.0-beta.38", + "@babel/preset-env": "^7.0.0-beta.38", + "@babel/register": "^7.0.0-beta.38", + "babel-loader": "^8.0.0-beta.0", + "babel-plugin-istanbul": "^4.1.5", + "babel-plugin-module-resolver": "3.0.0-beta.5", + "core-js": "^2.5.3", + "module-alias": "^2.0.3", + "node-libs-browser": "^0.7.0", + "uglify-js": "^2.8.29", + "uglifyjs-webpack-plugin": "^1.1.6", + "webpack": "^3.10.0" + }, + "peerDependencies": { + "chokidar": "^3.3.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + }, + "_moduleAliases": { + "babel-register": "@babel/register" + }, + "engines": { + "node": ">= 6.9.0" + }, + "scripts": { + "build:transpile": "babel nunjucks --out-dir .", + "build:bundle": "node scripts/bundle.js", + "build": "npm run build:transpile && npm run build:bundle", + "codecov": "codecov", + "mocha": "mocha -R spec tests", + "lint": "eslint nunjucks scripts tests", + "prepare": "npm run build", + "test:instrument": "cross-env NODE_ENV=test scripts/bundle.js", + "test:runner": "cross-env NODE_ENV=test NODE_PATH=tests/test-node-pkgs scripts/testrunner.js", + "test": "npm run lint && npm run test:instrument && npm run test:runner" + }, + "bin": { + "nunjucks-precompile": "./bin/precompile" + }, + "main": "index.js", + "files": [ + "bin/**", + "browser/**", + "src/**" + ], + "nyc": { + "require": [ + "babel-register" + ], + "sourceMap": false, + "instrument": false + }, + "repository": { + "type": "git", + "url": "https://github.com/mozilla/nunjucks.git" + }, + "keywords": [ + "template", + "templating" + ], + "license": "BSD-2-Clause", + "bugs": { + "url": "https://github.com/mozilla/nunjucks/issues" + } +} diff --git a/node_modules/nunjucks/src/compiler.js b/node_modules/nunjucks/src/compiler.js new file mode 100644 index 0000000..4958283 --- /dev/null +++ b/node_modules/nunjucks/src/compiler.js @@ -0,0 +1,1027 @@ +'use strict'; + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +var parser = require('./parser'); +var transformer = require('./transformer'); +var nodes = require('./nodes'); +var _require = require('./lib'), + TemplateError = _require.TemplateError; +var _require2 = require('./runtime'), + Frame = _require2.Frame; +var _require3 = require('./object'), + Obj = _require3.Obj; + +// These are all the same for now, but shouldn't be passed straight +// through +var compareOps = { + '==': '==', + '===': '===', + '!=': '!=', + '!==': '!==', + '<': '<', + '>': '>', + '<=': '<=', + '>=': '>=' +}; +var Compiler = /*#__PURE__*/function (_Obj) { + _inheritsLoose(Compiler, _Obj); + function Compiler() { + return _Obj.apply(this, arguments) || this; + } + var _proto = Compiler.prototype; + _proto.init = function init(templateName, throwOnUndefined) { + this.templateName = templateName; + this.codebuf = []; + this.lastId = 0; + this.buffer = null; + this.bufferStack = []; + this._scopeClosers = ''; + this.inBlock = false; + this.throwOnUndefined = throwOnUndefined; + }; + _proto.fail = function fail(msg, lineno, colno) { + if (lineno !== undefined) { + lineno += 1; + } + if (colno !== undefined) { + colno += 1; + } + throw new TemplateError(msg, lineno, colno); + }; + _proto._pushBuffer = function _pushBuffer() { + var id = this._tmpid(); + this.bufferStack.push(this.buffer); + this.buffer = id; + this._emit("var " + this.buffer + " = \"\";"); + return id; + }; + _proto._popBuffer = function _popBuffer() { + this.buffer = this.bufferStack.pop(); + }; + _proto._emit = function _emit(code) { + this.codebuf.push(code); + }; + _proto._emitLine = function _emitLine(code) { + this._emit(code + '\n'); + }; + _proto._emitLines = function _emitLines() { + var _this = this; + for (var _len = arguments.length, lines = new Array(_len), _key = 0; _key < _len; _key++) { + lines[_key] = arguments[_key]; + } + lines.forEach(function (line) { + return _this._emitLine(line); + }); + }; + _proto._emitFuncBegin = function _emitFuncBegin(node, name) { + this.buffer = 'output'; + this._scopeClosers = ''; + this._emitLine("function " + name + "(env, context, frame, runtime, cb) {"); + this._emitLine("var lineno = " + node.lineno + ";"); + this._emitLine("var colno = " + node.colno + ";"); + this._emitLine("var " + this.buffer + " = \"\";"); + this._emitLine('try {'); + }; + _proto._emitFuncEnd = function _emitFuncEnd(noReturn) { + if (!noReturn) { + this._emitLine('cb(null, ' + this.buffer + ');'); + } + this._closeScopeLevels(); + this._emitLine('} catch (e) {'); + this._emitLine(' cb(runtime.handleError(e, lineno, colno));'); + this._emitLine('}'); + this._emitLine('}'); + this.buffer = null; + }; + _proto._addScopeLevel = function _addScopeLevel() { + this._scopeClosers += '})'; + }; + _proto._closeScopeLevels = function _closeScopeLevels() { + this._emitLine(this._scopeClosers + ';'); + this._scopeClosers = ''; + }; + _proto._withScopedSyntax = function _withScopedSyntax(func) { + var _scopeClosers = this._scopeClosers; + this._scopeClosers = ''; + func.call(this); + this._closeScopeLevels(); + this._scopeClosers = _scopeClosers; + }; + _proto._makeCallback = function _makeCallback(res) { + var err = this._tmpid(); + return 'function(' + err + (res ? ',' + res : '') + ') {\n' + 'if(' + err + ') { cb(' + err + '); return; }'; + }; + _proto._tmpid = function _tmpid() { + this.lastId++; + return 't_' + this.lastId; + }; + _proto._templateName = function _templateName() { + return this.templateName == null ? 'undefined' : JSON.stringify(this.templateName); + }; + _proto._compileChildren = function _compileChildren(node, frame) { + var _this2 = this; + node.children.forEach(function (child) { + _this2.compile(child, frame); + }); + }; + _proto._compileAggregate = function _compileAggregate(node, frame, startChar, endChar) { + var _this3 = this; + if (startChar) { + this._emit(startChar); + } + node.children.forEach(function (child, i) { + if (i > 0) { + _this3._emit(','); + } + _this3.compile(child, frame); + }); + if (endChar) { + this._emit(endChar); + } + }; + _proto._compileExpression = function _compileExpression(node, frame) { + // TODO: I'm not really sure if this type check is worth it or + // not. + this.assertType(node, nodes.Literal, nodes.Symbol, nodes.Group, nodes.Array, nodes.Dict, nodes.FunCall, nodes.Caller, nodes.Filter, nodes.LookupVal, nodes.Compare, nodes.InlineIf, nodes.In, nodes.Is, nodes.And, nodes.Or, nodes.Not, nodes.Add, nodes.Concat, nodes.Sub, nodes.Mul, nodes.Div, nodes.FloorDiv, nodes.Mod, nodes.Pow, nodes.Neg, nodes.Pos, nodes.Compare, nodes.NodeList); + this.compile(node, frame); + }; + _proto.assertType = function assertType(node) { + for (var _len2 = arguments.length, types = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + types[_key2 - 1] = arguments[_key2]; + } + if (!types.some(function (t) { + return node instanceof t; + })) { + this.fail("assertType: invalid type: " + node.typename, node.lineno, node.colno); + } + }; + _proto.compileCallExtension = function compileCallExtension(node, frame, async) { + var _this4 = this; + var args = node.args; + var contentArgs = node.contentArgs; + var autoescape = typeof node.autoescape === 'boolean' ? node.autoescape : true; + if (!async) { + this._emit(this.buffer + " += runtime.suppressValue("); + } + this._emit("env.getExtension(\"" + node.extName + "\")[\"" + node.prop + "\"]("); + this._emit('context'); + if (args || contentArgs) { + this._emit(','); + } + if (args) { + if (!(args instanceof nodes.NodeList)) { + this.fail('compileCallExtension: arguments must be a NodeList, ' + 'use `parser.parseSignature`'); + } + args.children.forEach(function (arg, i) { + // Tag arguments are passed normally to the call. Note + // that keyword arguments are turned into a single js + // object as the last argument, if they exist. + _this4._compileExpression(arg, frame); + if (i !== args.children.length - 1 || contentArgs.length) { + _this4._emit(','); + } + }); + } + if (contentArgs.length) { + contentArgs.forEach(function (arg, i) { + if (i > 0) { + _this4._emit(','); + } + if (arg) { + _this4._emitLine('function(cb) {'); + _this4._emitLine('if(!cb) { cb = function(err) { if(err) { throw err; }}}'); + var id = _this4._pushBuffer(); + _this4._withScopedSyntax(function () { + _this4.compile(arg, frame); + _this4._emitLine("cb(null, " + id + ");"); + }); + _this4._popBuffer(); + _this4._emitLine("return " + id + ";"); + _this4._emitLine('}'); + } else { + _this4._emit('null'); + } + }); + } + if (async) { + var res = this._tmpid(); + this._emitLine(', ' + this._makeCallback(res)); + this._emitLine(this.buffer + " += runtime.suppressValue(" + res + ", " + autoescape + " && env.opts.autoescape);"); + this._addScopeLevel(); + } else { + this._emit(')'); + this._emit(", " + autoescape + " && env.opts.autoescape);\n"); + } + }; + _proto.compileCallExtensionAsync = function compileCallExtensionAsync(node, frame) { + this.compileCallExtension(node, frame, true); + }; + _proto.compileNodeList = function compileNodeList(node, frame) { + this._compileChildren(node, frame); + }; + _proto.compileLiteral = function compileLiteral(node) { + if (typeof node.value === 'string') { + var val = node.value.replace(/\\/g, '\\\\'); + val = val.replace(/"/g, '\\"'); + val = val.replace(/\n/g, '\\n'); + val = val.replace(/\r/g, '\\r'); + val = val.replace(/\t/g, '\\t'); + val = val.replace(/\u2028/g, "\\u2028"); + this._emit("\"" + val + "\""); + } else if (node.value === null) { + this._emit('null'); + } else { + this._emit(node.value.toString()); + } + }; + _proto.compileSymbol = function compileSymbol(node, frame) { + var name = node.value; + var v = frame.lookup(name); + if (v) { + this._emit(v); + } else { + this._emit('runtime.contextOrFrameLookup(' + 'context, frame, "' + name + '")'); + } + }; + _proto.compileGroup = function compileGroup(node, frame) { + this._compileAggregate(node, frame, '(', ')'); + }; + _proto.compileArray = function compileArray(node, frame) { + this._compileAggregate(node, frame, '[', ']'); + }; + _proto.compileDict = function compileDict(node, frame) { + this._compileAggregate(node, frame, '{', '}'); + }; + _proto.compilePair = function compilePair(node, frame) { + var key = node.key; + var val = node.value; + if (key instanceof nodes.Symbol) { + key = new nodes.Literal(key.lineno, key.colno, key.value); + } else if (!(key instanceof nodes.Literal && typeof key.value === 'string')) { + this.fail('compilePair: Dict keys must be strings or names', key.lineno, key.colno); + } + this.compile(key, frame); + this._emit(': '); + this._compileExpression(val, frame); + }; + _proto.compileInlineIf = function compileInlineIf(node, frame) { + this._emit('('); + this.compile(node.cond, frame); + this._emit('?'); + this.compile(node.body, frame); + this._emit(':'); + if (node.else_ !== null) { + this.compile(node.else_, frame); + } else { + this._emit('""'); + } + this._emit(')'); + }; + _proto.compileIn = function compileIn(node, frame) { + this._emit('runtime.inOperator('); + this.compile(node.left, frame); + this._emit(','); + this.compile(node.right, frame); + this._emit(')'); + }; + _proto.compileIs = function compileIs(node, frame) { + // first, we need to try to get the name of the test function, if it's a + // callable (i.e., has args) and not a symbol. + var right = node.right.name ? node.right.name.value + // otherwise go with the symbol value + : node.right.value; + this._emit('env.getTest("' + right + '").call(context, '); + this.compile(node.left, frame); + // compile the arguments for the callable if they exist + if (node.right.args) { + this._emit(','); + this.compile(node.right.args, frame); + } + this._emit(') === true'); + }; + _proto._binOpEmitter = function _binOpEmitter(node, frame, str) { + this.compile(node.left, frame); + this._emit(str); + this.compile(node.right, frame); + } + + // ensure concatenation instead of addition + // by adding empty string in between + ; + _proto.compileOr = function compileOr(node, frame) { + return this._binOpEmitter(node, frame, ' || '); + }; + _proto.compileAnd = function compileAnd(node, frame) { + return this._binOpEmitter(node, frame, ' && '); + }; + _proto.compileAdd = function compileAdd(node, frame) { + return this._binOpEmitter(node, frame, ' + '); + }; + _proto.compileConcat = function compileConcat(node, frame) { + return this._binOpEmitter(node, frame, ' + "" + '); + }; + _proto.compileSub = function compileSub(node, frame) { + return this._binOpEmitter(node, frame, ' - '); + }; + _proto.compileMul = function compileMul(node, frame) { + return this._binOpEmitter(node, frame, ' * '); + }; + _proto.compileDiv = function compileDiv(node, frame) { + return this._binOpEmitter(node, frame, ' / '); + }; + _proto.compileMod = function compileMod(node, frame) { + return this._binOpEmitter(node, frame, ' % '); + }; + _proto.compileNot = function compileNot(node, frame) { + this._emit('!'); + this.compile(node.target, frame); + }; + _proto.compileFloorDiv = function compileFloorDiv(node, frame) { + this._emit('Math.floor('); + this.compile(node.left, frame); + this._emit(' / '); + this.compile(node.right, frame); + this._emit(')'); + }; + _proto.compilePow = function compilePow(node, frame) { + this._emit('Math.pow('); + this.compile(node.left, frame); + this._emit(', '); + this.compile(node.right, frame); + this._emit(')'); + }; + _proto.compileNeg = function compileNeg(node, frame) { + this._emit('-'); + this.compile(node.target, frame); + }; + _proto.compilePos = function compilePos(node, frame) { + this._emit('+'); + this.compile(node.target, frame); + }; + _proto.compileCompare = function compileCompare(node, frame) { + var _this5 = this; + this.compile(node.expr, frame); + node.ops.forEach(function (op) { + _this5._emit(" " + compareOps[op.type] + " "); + _this5.compile(op.expr, frame); + }); + }; + _proto.compileLookupVal = function compileLookupVal(node, frame) { + this._emit('runtime.memberLookup(('); + this._compileExpression(node.target, frame); + this._emit('),'); + this._compileExpression(node.val, frame); + this._emit(')'); + }; + _proto._getNodeName = function _getNodeName(node) { + switch (node.typename) { + case 'Symbol': + return node.value; + case 'FunCall': + return 'the return value of (' + this._getNodeName(node.name) + ')'; + case 'LookupVal': + return this._getNodeName(node.target) + '["' + this._getNodeName(node.val) + '"]'; + case 'Literal': + return node.value.toString(); + default: + return '--expression--'; + } + }; + _proto.compileFunCall = function compileFunCall(node, frame) { + // Keep track of line/col info at runtime by settings + // variables within an expression. An expression in javascript + // like (x, y, z) returns the last value, and x and y can be + // anything + this._emit('(lineno = ' + node.lineno + ', colno = ' + node.colno + ', '); + this._emit('runtime.callWrap('); + // Compile it as normal. + this._compileExpression(node.name, frame); + + // Output the name of what we're calling so we can get friendly errors + // if the lookup fails. + this._emit(', "' + this._getNodeName(node.name).replace(/"/g, '\\"') + '", context, '); + this._compileAggregate(node.args, frame, '[', '])'); + this._emit(')'); + }; + _proto.compileFilter = function compileFilter(node, frame) { + var name = node.name; + this.assertType(name, nodes.Symbol); + this._emit('env.getFilter("' + name.value + '").call(context, '); + this._compileAggregate(node.args, frame); + this._emit(')'); + }; + _proto.compileFilterAsync = function compileFilterAsync(node, frame) { + var name = node.name; + var symbol = node.symbol.value; + this.assertType(name, nodes.Symbol); + frame.set(symbol, symbol); + this._emit('env.getFilter("' + name.value + '").call(context, '); + this._compileAggregate(node.args, frame); + this._emitLine(', ' + this._makeCallback(symbol)); + this._addScopeLevel(); + }; + _proto.compileKeywordArgs = function compileKeywordArgs(node, frame) { + this._emit('runtime.makeKeywordArgs('); + this.compileDict(node, frame); + this._emit(')'); + }; + _proto.compileSet = function compileSet(node, frame) { + var _this6 = this; + var ids = []; + + // Lookup the variable names for each identifier and create + // new ones if necessary + node.targets.forEach(function (target) { + var name = target.value; + var id = frame.lookup(name); + if (id === null || id === undefined) { + id = _this6._tmpid(); + + // Note: This relies on js allowing scope across + // blocks, in case this is created inside an `if` + _this6._emitLine('var ' + id + ';'); + } + ids.push(id); + }); + if (node.value) { + this._emit(ids.join(' = ') + ' = '); + this._compileExpression(node.value, frame); + this._emitLine(';'); + } else { + this._emit(ids.join(' = ') + ' = '); + this.compile(node.body, frame); + this._emitLine(';'); + } + node.targets.forEach(function (target, i) { + var id = ids[i]; + var name = target.value; + + // We are running this for every var, but it's very + // uncommon to assign to multiple vars anyway + _this6._emitLine("frame.set(\"" + name + "\", " + id + ", true);"); + _this6._emitLine('if(frame.topLevel) {'); + _this6._emitLine("context.setVariable(\"" + name + "\", " + id + ");"); + _this6._emitLine('}'); + if (name.charAt(0) !== '_') { + _this6._emitLine('if(frame.topLevel) {'); + _this6._emitLine("context.addExport(\"" + name + "\", " + id + ");"); + _this6._emitLine('}'); + } + }); + }; + _proto.compileSwitch = function compileSwitch(node, frame) { + var _this7 = this; + this._emit('switch ('); + this.compile(node.expr, frame); + this._emit(') {'); + node.cases.forEach(function (c, i) { + _this7._emit('case '); + _this7.compile(c.cond, frame); + _this7._emit(': '); + _this7.compile(c.body, frame); + // preserve fall-throughs + if (c.body.children.length) { + _this7._emitLine('break;'); + } + }); + if (node.default) { + this._emit('default:'); + this.compile(node.default, frame); + } + this._emit('}'); + }; + _proto.compileIf = function compileIf(node, frame, async) { + var _this8 = this; + this._emit('if('); + this._compileExpression(node.cond, frame); + this._emitLine(') {'); + this._withScopedSyntax(function () { + _this8.compile(node.body, frame); + if (async) { + _this8._emit('cb()'); + } + }); + if (node.else_) { + this._emitLine('}\nelse {'); + this._withScopedSyntax(function () { + _this8.compile(node.else_, frame); + if (async) { + _this8._emit('cb()'); + } + }); + } else if (async) { + this._emitLine('}\nelse {'); + this._emit('cb()'); + } + this._emitLine('}'); + }; + _proto.compileIfAsync = function compileIfAsync(node, frame) { + this._emit('(function(cb) {'); + this.compileIf(node, frame, true); + this._emit('})(' + this._makeCallback()); + this._addScopeLevel(); + }; + _proto._emitLoopBindings = function _emitLoopBindings(node, arr, i, len) { + var _this9 = this; + var bindings = [{ + name: 'index', + val: i + " + 1" + }, { + name: 'index0', + val: i + }, { + name: 'revindex', + val: len + " - " + i + }, { + name: 'revindex0', + val: len + " - " + i + " - 1" + }, { + name: 'first', + val: i + " === 0" + }, { + name: 'last', + val: i + " === " + len + " - 1" + }, { + name: 'length', + val: len + }]; + bindings.forEach(function (b) { + _this9._emitLine("frame.set(\"loop." + b.name + "\", " + b.val + ");"); + }); + }; + _proto.compileFor = function compileFor(node, frame) { + var _this10 = this; + // Some of this code is ugly, but it keeps the generated code + // as fast as possible. ForAsync also shares some of this, but + // not much. + + var i = this._tmpid(); + var len = this._tmpid(); + var arr = this._tmpid(); + frame = frame.push(); + this._emitLine('frame = frame.push();'); + this._emit("var " + arr + " = "); + this._compileExpression(node.arr, frame); + this._emitLine(';'); + this._emit("if(" + arr + ") {"); + this._emitLine(arr + ' = runtime.fromIterator(' + arr + ');'); + + // If multiple names are passed, we need to bind them + // appropriately + if (node.name instanceof nodes.Array) { + this._emitLine("var " + i + ";"); + + // The object could be an arroy or object. Note that the + // body of the loop is duplicated for each condition, but + // we are optimizing for speed over size. + this._emitLine("if(runtime.isArray(" + arr + ")) {"); + this._emitLine("var " + len + " = " + arr + ".length;"); + this._emitLine("for(" + i + "=0; " + i + " < " + arr + ".length; " + i + "++) {"); + + // Bind each declared var + node.name.children.forEach(function (child, u) { + var tid = _this10._tmpid(); + _this10._emitLine("var " + tid + " = " + arr + "[" + i + "][" + u + "];"); + _this10._emitLine("frame.set(\"" + child + "\", " + arr + "[" + i + "][" + u + "]);"); + frame.set(node.name.children[u].value, tid); + }); + this._emitLoopBindings(node, arr, i, len); + this._withScopedSyntax(function () { + _this10.compile(node.body, frame); + }); + this._emitLine('}'); + this._emitLine('} else {'); + // Iterate over the key/values of an object + var _node$name$children = node.name.children, + key = _node$name$children[0], + val = _node$name$children[1]; + var k = this._tmpid(); + var v = this._tmpid(); + frame.set(key.value, k); + frame.set(val.value, v); + this._emitLine(i + " = -1;"); + this._emitLine("var " + len + " = runtime.keys(" + arr + ").length;"); + this._emitLine("for(var " + k + " in " + arr + ") {"); + this._emitLine(i + "++;"); + this._emitLine("var " + v + " = " + arr + "[" + k + "];"); + this._emitLine("frame.set(\"" + key.value + "\", " + k + ");"); + this._emitLine("frame.set(\"" + val.value + "\", " + v + ");"); + this._emitLoopBindings(node, arr, i, len); + this._withScopedSyntax(function () { + _this10.compile(node.body, frame); + }); + this._emitLine('}'); + this._emitLine('}'); + } else { + // Generate a typical array iteration + var _v = this._tmpid(); + frame.set(node.name.value, _v); + this._emitLine("var " + len + " = " + arr + ".length;"); + this._emitLine("for(var " + i + "=0; " + i + " < " + arr + ".length; " + i + "++) {"); + this._emitLine("var " + _v + " = " + arr + "[" + i + "];"); + this._emitLine("frame.set(\"" + node.name.value + "\", " + _v + ");"); + this._emitLoopBindings(node, arr, i, len); + this._withScopedSyntax(function () { + _this10.compile(node.body, frame); + }); + this._emitLine('}'); + } + this._emitLine('}'); + if (node.else_) { + this._emitLine('if (!' + len + ') {'); + this.compile(node.else_, frame); + this._emitLine('}'); + } + this._emitLine('frame = frame.pop();'); + }; + _proto._compileAsyncLoop = function _compileAsyncLoop(node, frame, parallel) { + var _this11 = this; + // This shares some code with the For tag, but not enough to + // worry about. This iterates across an object asynchronously, + // but not in parallel. + + var i = this._tmpid(); + var len = this._tmpid(); + var arr = this._tmpid(); + var asyncMethod = parallel ? 'asyncAll' : 'asyncEach'; + frame = frame.push(); + this._emitLine('frame = frame.push();'); + this._emit('var ' + arr + ' = runtime.fromIterator('); + this._compileExpression(node.arr, frame); + this._emitLine(');'); + if (node.name instanceof nodes.Array) { + var arrayLen = node.name.children.length; + this._emit("runtime." + asyncMethod + "(" + arr + ", " + arrayLen + ", function("); + node.name.children.forEach(function (name) { + _this11._emit(name.value + ","); + }); + this._emit(i + ',' + len + ',next) {'); + node.name.children.forEach(function (name) { + var id = name.value; + frame.set(id, id); + _this11._emitLine("frame.set(\"" + id + "\", " + id + ");"); + }); + } else { + var id = node.name.value; + this._emitLine("runtime." + asyncMethod + "(" + arr + ", 1, function(" + id + ", " + i + ", " + len + ",next) {"); + this._emitLine('frame.set("' + id + '", ' + id + ');'); + frame.set(id, id); + } + this._emitLoopBindings(node, arr, i, len); + this._withScopedSyntax(function () { + var buf; + if (parallel) { + buf = _this11._pushBuffer(); + } + _this11.compile(node.body, frame); + _this11._emitLine('next(' + i + (buf ? ',' + buf : '') + ');'); + if (parallel) { + _this11._popBuffer(); + } + }); + var output = this._tmpid(); + this._emitLine('}, ' + this._makeCallback(output)); + this._addScopeLevel(); + if (parallel) { + this._emitLine(this.buffer + ' += ' + output + ';'); + } + if (node.else_) { + this._emitLine('if (!' + arr + '.length) {'); + this.compile(node.else_, frame); + this._emitLine('}'); + } + this._emitLine('frame = frame.pop();'); + }; + _proto.compileAsyncEach = function compileAsyncEach(node, frame) { + this._compileAsyncLoop(node, frame); + }; + _proto.compileAsyncAll = function compileAsyncAll(node, frame) { + this._compileAsyncLoop(node, frame, true); + }; + _proto._compileMacro = function _compileMacro(node, frame) { + var _this12 = this; + var args = []; + var kwargs = null; + var funcId = 'macro_' + this._tmpid(); + var keepFrame = frame !== undefined; + + // Type check the definition of the args + node.args.children.forEach(function (arg, i) { + if (i === node.args.children.length - 1 && arg instanceof nodes.Dict) { + kwargs = arg; + } else { + _this12.assertType(arg, nodes.Symbol); + args.push(arg); + } + }); + var realNames = [].concat(args.map(function (n) { + return "l_" + n.value; + }), ['kwargs']); + + // Quoted argument names + var argNames = args.map(function (n) { + return "\"" + n.value + "\""; + }); + var kwargNames = (kwargs && kwargs.children || []).map(function (n) { + return "\"" + n.key.value + "\""; + }); + + // We pass a function to makeMacro which destructures the + // arguments so support setting positional args with keywords + // args and passing keyword args as positional args + // (essentially default values). See runtime.js. + var currFrame; + if (keepFrame) { + currFrame = frame.push(true); + } else { + currFrame = new Frame(); + } + this._emitLines("var " + funcId + " = runtime.makeMacro(", "[" + argNames.join(', ') + "], ", "[" + kwargNames.join(', ') + "], ", "function (" + realNames.join(', ') + ") {", 'var callerFrame = frame;', 'frame = ' + (keepFrame ? 'frame.push(true);' : 'new runtime.Frame();'), 'kwargs = kwargs || {};', 'if (Object.prototype.hasOwnProperty.call(kwargs, "caller")) {', 'frame.set("caller", kwargs.caller); }'); + + // Expose the arguments to the template. Don't need to use + // random names because the function + // will create a new run-time scope for us + args.forEach(function (arg) { + _this12._emitLine("frame.set(\"" + arg.value + "\", l_" + arg.value + ");"); + currFrame.set(arg.value, "l_" + arg.value); + }); + + // Expose the keyword arguments + if (kwargs) { + kwargs.children.forEach(function (pair) { + var name = pair.key.value; + _this12._emit("frame.set(\"" + name + "\", "); + _this12._emit("Object.prototype.hasOwnProperty.call(kwargs, \"" + name + "\")"); + _this12._emit(" ? kwargs[\"" + name + "\"] : "); + _this12._compileExpression(pair.value, currFrame); + _this12._emit(');'); + }); + } + var bufferId = this._pushBuffer(); + this._withScopedSyntax(function () { + _this12.compile(node.body, currFrame); + }); + this._emitLine('frame = ' + (keepFrame ? 'frame.pop();' : 'callerFrame;')); + this._emitLine("return new runtime.SafeString(" + bufferId + ");"); + this._emitLine('});'); + this._popBuffer(); + return funcId; + }; + _proto.compileMacro = function compileMacro(node, frame) { + var funcId = this._compileMacro(node); + + // Expose the macro to the templates + var name = node.name.value; + frame.set(name, funcId); + if (frame.parent) { + this._emitLine("frame.set(\"" + name + "\", " + funcId + ");"); + } else { + if (node.name.value.charAt(0) !== '_') { + this._emitLine("context.addExport(\"" + name + "\");"); + } + this._emitLine("context.setVariable(\"" + name + "\", " + funcId + ");"); + } + }; + _proto.compileCaller = function compileCaller(node, frame) { + // basically an anonymous "macro expression" + this._emit('(function (){'); + var funcId = this._compileMacro(node, frame); + this._emit("return " + funcId + ";})()"); + }; + _proto._compileGetTemplate = function _compileGetTemplate(node, frame, eagerCompile, ignoreMissing) { + var parentTemplateId = this._tmpid(); + var parentName = this._templateName(); + var cb = this._makeCallback(parentTemplateId); + var eagerCompileArg = eagerCompile ? 'true' : 'false'; + var ignoreMissingArg = ignoreMissing ? 'true' : 'false'; + this._emit('env.getTemplate('); + this._compileExpression(node.template, frame); + this._emitLine(", " + eagerCompileArg + ", " + parentName + ", " + ignoreMissingArg + ", " + cb); + return parentTemplateId; + }; + _proto.compileImport = function compileImport(node, frame) { + var target = node.target.value; + var id = this._compileGetTemplate(node, frame, false, false); + this._addScopeLevel(); + this._emitLine(id + '.getExported(' + (node.withContext ? 'context.getVariables(), frame, ' : '') + this._makeCallback(id)); + this._addScopeLevel(); + frame.set(target, id); + if (frame.parent) { + this._emitLine("frame.set(\"" + target + "\", " + id + ");"); + } else { + this._emitLine("context.setVariable(\"" + target + "\", " + id + ");"); + } + }; + _proto.compileFromImport = function compileFromImport(node, frame) { + var _this13 = this; + var importedId = this._compileGetTemplate(node, frame, false, false); + this._addScopeLevel(); + this._emitLine(importedId + '.getExported(' + (node.withContext ? 'context.getVariables(), frame, ' : '') + this._makeCallback(importedId)); + this._addScopeLevel(); + node.names.children.forEach(function (nameNode) { + var name; + var alias; + var id = _this13._tmpid(); + if (nameNode instanceof nodes.Pair) { + name = nameNode.key.value; + alias = nameNode.value.value; + } else { + name = nameNode.value; + alias = name; + } + _this13._emitLine("if(Object.prototype.hasOwnProperty.call(" + importedId + ", \"" + name + "\")) {"); + _this13._emitLine("var " + id + " = " + importedId + "." + name + ";"); + _this13._emitLine('} else {'); + _this13._emitLine("cb(new Error(\"cannot import '" + name + "'\")); return;"); + _this13._emitLine('}'); + frame.set(alias, id); + if (frame.parent) { + _this13._emitLine("frame.set(\"" + alias + "\", " + id + ");"); + } else { + _this13._emitLine("context.setVariable(\"" + alias + "\", " + id + ");"); + } + }); + }; + _proto.compileBlock = function compileBlock(node) { + var id = this._tmpid(); + + // If we are executing outside a block (creating a top-level + // block), we really don't want to execute its code because it + // will execute twice: once when the child template runs and + // again when the parent template runs. Note that blocks + // within blocks will *always* execute immediately *and* + // wherever else they are invoked (like used in a parent + // template). This may have behavioral differences from jinja + // because blocks can have side effects, but it seems like a + // waste of performance to always execute huge top-level + // blocks twice + if (!this.inBlock) { + this._emit('(parentTemplate ? function(e, c, f, r, cb) { cb(""); } : '); + } + this._emit("context.getBlock(\"" + node.name.value + "\")"); + if (!this.inBlock) { + this._emit(')'); + } + this._emitLine('(env, context, frame, runtime, ' + this._makeCallback(id)); + this._emitLine(this.buffer + " += " + id + ";"); + this._addScopeLevel(); + }; + _proto.compileSuper = function compileSuper(node, frame) { + var name = node.blockName.value; + var id = node.symbol.value; + var cb = this._makeCallback(id); + this._emitLine("context.getSuper(env, \"" + name + "\", b_" + name + ", frame, runtime, " + cb); + this._emitLine(id + " = runtime.markSafe(" + id + ");"); + this._addScopeLevel(); + frame.set(id, id); + }; + _proto.compileExtends = function compileExtends(node, frame) { + var k = this._tmpid(); + var parentTemplateId = this._compileGetTemplate(node, frame, true, false); + + // extends is a dynamic tag and can occur within a block like + // `if`, so if this happens we need to capture the parent + // template in the top-level scope + this._emitLine("parentTemplate = " + parentTemplateId); + this._emitLine("for(var " + k + " in parentTemplate.blocks) {"); + this._emitLine("context.addBlock(" + k + ", parentTemplate.blocks[" + k + "]);"); + this._emitLine('}'); + this._addScopeLevel(); + }; + _proto.compileInclude = function compileInclude(node, frame) { + this._emitLine('var tasks = [];'); + this._emitLine('tasks.push('); + this._emitLine('function(callback) {'); + var id = this._compileGetTemplate(node, frame, false, node.ignoreMissing); + this._emitLine("callback(null," + id + ");});"); + this._emitLine('});'); + var id2 = this._tmpid(); + this._emitLine('tasks.push('); + this._emitLine('function(template, callback){'); + this._emitLine('template.render(context.getVariables(), frame, ' + this._makeCallback(id2)); + this._emitLine('callback(null,' + id2 + ');});'); + this._emitLine('});'); + this._emitLine('tasks.push('); + this._emitLine('function(result, callback){'); + this._emitLine(this.buffer + " += result;"); + this._emitLine('callback(null);'); + this._emitLine('});'); + this._emitLine('env.waterfall(tasks, function(){'); + this._addScopeLevel(); + }; + _proto.compileTemplateData = function compileTemplateData(node, frame) { + this.compileLiteral(node, frame); + }; + _proto.compileCapture = function compileCapture(node, frame) { + var _this14 = this; + // we need to temporarily override the current buffer id as 'output' + // so the set block writes to the capture output instead of the buffer + var buffer = this.buffer; + this.buffer = 'output'; + this._emitLine('(function() {'); + this._emitLine('var output = "";'); + this._withScopedSyntax(function () { + _this14.compile(node.body, frame); + }); + this._emitLine('return output;'); + this._emitLine('})()'); + // and of course, revert back to the old buffer id + this.buffer = buffer; + }; + _proto.compileOutput = function compileOutput(node, frame) { + var _this15 = this; + var children = node.children; + children.forEach(function (child) { + // TemplateData is a special case because it is never + // autoescaped, so simply output it for optimization + if (child instanceof nodes.TemplateData) { + if (child.value) { + _this15._emit(_this15.buffer + " += "); + _this15.compileLiteral(child, frame); + _this15._emitLine(';'); + } + } else { + _this15._emit(_this15.buffer + " += runtime.suppressValue("); + if (_this15.throwOnUndefined) { + _this15._emit('runtime.ensureDefined('); + } + _this15.compile(child, frame); + if (_this15.throwOnUndefined) { + _this15._emit("," + node.lineno + "," + node.colno + ")"); + } + _this15._emit(', env.opts.autoescape);\n'); + } + }); + }; + _proto.compileRoot = function compileRoot(node, frame) { + var _this16 = this; + if (frame) { + this.fail('compileRoot: root node can\'t have frame'); + } + frame = new Frame(); + this._emitFuncBegin(node, 'root'); + this._emitLine('var parentTemplate = null;'); + this._compileChildren(node, frame); + this._emitLine('if(parentTemplate) {'); + this._emitLine('parentTemplate.rootRenderFunc(env, context, frame, runtime, cb);'); + this._emitLine('} else {'); + this._emitLine("cb(null, " + this.buffer + ");"); + this._emitLine('}'); + this._emitFuncEnd(true); + this.inBlock = true; + var blockNames = []; + var blocks = node.findAll(nodes.Block); + blocks.forEach(function (block, i) { + var name = block.name.value; + if (blockNames.indexOf(name) !== -1) { + throw new Error("Block \"" + name + "\" defined more than once."); + } + blockNames.push(name); + _this16._emitFuncBegin(block, "b_" + name); + var tmpFrame = new Frame(); + _this16._emitLine('var frame = frame.push(true);'); + _this16.compile(block.body, tmpFrame); + _this16._emitFuncEnd(); + }); + this._emitLine('return {'); + blocks.forEach(function (block, i) { + var blockName = "b_" + block.name.value; + _this16._emitLine(blockName + ": " + blockName + ","); + }); + this._emitLine('root: root\n};'); + }; + _proto.compile = function compile(node, frame) { + var _compile = this['compile' + node.typename]; + if (_compile) { + _compile.call(this, node, frame); + } else { + this.fail("compile: Cannot compile node: " + node.typename, node.lineno, node.colno); + } + }; + _proto.getCode = function getCode() { + return this.codebuf.join(''); + }; + return Compiler; +}(Obj); +module.exports = { + compile: function compile(src, asyncFilters, extensions, name, opts) { + if (opts === void 0) { + opts = {}; + } + var c = new Compiler(name, opts.throwOnUndefined); + + // Run the extension preprocessors against the source. + var preprocessors = (extensions || []).map(function (ext) { + return ext.preprocess; + }).filter(function (f) { + return !!f; + }); + var processedSrc = preprocessors.reduce(function (s, processor) { + return processor(s); + }, src); + c.compile(transformer.transform(parser.parse(processedSrc, extensions, opts), asyncFilters, name)); + return c.getCode(); + }, + Compiler: Compiler +};
\ No newline at end of file diff --git a/node_modules/nunjucks/src/environment.js b/node_modules/nunjucks/src/environment.js new file mode 100644 index 0000000..326f836 --- /dev/null +++ b/node_modules/nunjucks/src/environment.js @@ -0,0 +1,548 @@ +'use strict'; + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +var asap = require('asap'); +var _waterfall = require('a-sync-waterfall'); +var lib = require('./lib'); +var compiler = require('./compiler'); +var filters = require('./filters'); +var _require = require('./loaders'), + FileSystemLoader = _require.FileSystemLoader, + WebLoader = _require.WebLoader, + PrecompiledLoader = _require.PrecompiledLoader; +var tests = require('./tests'); +var globals = require('./globals'); +var _require2 = require('./object'), + Obj = _require2.Obj, + EmitterObj = _require2.EmitterObj; +var globalRuntime = require('./runtime'); +var handleError = globalRuntime.handleError, + Frame = globalRuntime.Frame; +var expressApp = require('./express-app'); + +// If the user is using the async API, *always* call it +// asynchronously even if the template was synchronous. +function callbackAsap(cb, err, res) { + asap(function () { + cb(err, res); + }); +} + +/** + * A no-op template, for use with {% include ignore missing %} + */ +var noopTmplSrc = { + type: 'code', + obj: { + root: function root(env, context, frame, runtime, cb) { + try { + cb(null, ''); + } catch (e) { + cb(handleError(e, null, null)); + } + } + } +}; +var Environment = /*#__PURE__*/function (_EmitterObj) { + _inheritsLoose(Environment, _EmitterObj); + function Environment() { + return _EmitterObj.apply(this, arguments) || this; + } + var _proto = Environment.prototype; + _proto.init = function init(loaders, opts) { + var _this = this; + // The dev flag determines the trace that'll be shown on errors. + // If set to true, returns the full trace from the error point, + // otherwise will return trace starting from Template.render + // (the full trace from within nunjucks may confuse developers using + // the library) + // defaults to false + opts = this.opts = opts || {}; + this.opts.dev = !!opts.dev; + + // The autoescape flag sets global autoescaping. If true, + // every string variable will be escaped by default. + // If false, strings can be manually escaped using the `escape` filter. + // defaults to true + this.opts.autoescape = opts.autoescape != null ? opts.autoescape : true; + + // If true, this will make the system throw errors if trying + // to output a null or undefined value + this.opts.throwOnUndefined = !!opts.throwOnUndefined; + this.opts.trimBlocks = !!opts.trimBlocks; + this.opts.lstripBlocks = !!opts.lstripBlocks; + this.loaders = []; + if (!loaders) { + // The filesystem loader is only available server-side + if (FileSystemLoader) { + this.loaders = [new FileSystemLoader('views')]; + } else if (WebLoader) { + this.loaders = [new WebLoader('/views')]; + } + } else { + this.loaders = lib.isArray(loaders) ? loaders : [loaders]; + } + + // It's easy to use precompiled templates: just include them + // before you configure nunjucks and this will automatically + // pick it up and use it + if (typeof window !== 'undefined' && window.nunjucksPrecompiled) { + this.loaders.unshift(new PrecompiledLoader(window.nunjucksPrecompiled)); + } + this._initLoaders(); + this.globals = globals(); + this.filters = {}; + this.tests = {}; + this.asyncFilters = []; + this.extensions = {}; + this.extensionsList = []; + lib._entries(filters).forEach(function (_ref) { + var name = _ref[0], + filter = _ref[1]; + return _this.addFilter(name, filter); + }); + lib._entries(tests).forEach(function (_ref2) { + var name = _ref2[0], + test = _ref2[1]; + return _this.addTest(name, test); + }); + }; + _proto._initLoaders = function _initLoaders() { + var _this2 = this; + this.loaders.forEach(function (loader) { + // Caching and cache busting + loader.cache = {}; + if (typeof loader.on === 'function') { + loader.on('update', function (name, fullname) { + loader.cache[name] = null; + _this2.emit('update', name, fullname, loader); + }); + loader.on('load', function (name, source) { + _this2.emit('load', name, source, loader); + }); + } + }); + }; + _proto.invalidateCache = function invalidateCache() { + this.loaders.forEach(function (loader) { + loader.cache = {}; + }); + }; + _proto.addExtension = function addExtension(name, extension) { + extension.__name = name; + this.extensions[name] = extension; + this.extensionsList.push(extension); + return this; + }; + _proto.removeExtension = function removeExtension(name) { + var extension = this.getExtension(name); + if (!extension) { + return; + } + this.extensionsList = lib.without(this.extensionsList, extension); + delete this.extensions[name]; + }; + _proto.getExtension = function getExtension(name) { + return this.extensions[name]; + }; + _proto.hasExtension = function hasExtension(name) { + return !!this.extensions[name]; + }; + _proto.addGlobal = function addGlobal(name, value) { + this.globals[name] = value; + return this; + }; + _proto.getGlobal = function getGlobal(name) { + if (typeof this.globals[name] === 'undefined') { + throw new Error('global not found: ' + name); + } + return this.globals[name]; + }; + _proto.addFilter = function addFilter(name, func, async) { + var wrapped = func; + if (async) { + this.asyncFilters.push(name); + } + this.filters[name] = wrapped; + return this; + }; + _proto.getFilter = function getFilter(name) { + if (!this.filters[name]) { + throw new Error('filter not found: ' + name); + } + return this.filters[name]; + }; + _proto.addTest = function addTest(name, func) { + this.tests[name] = func; + return this; + }; + _proto.getTest = function getTest(name) { + if (!this.tests[name]) { + throw new Error('test not found: ' + name); + } + return this.tests[name]; + }; + _proto.resolveTemplate = function resolveTemplate(loader, parentName, filename) { + var isRelative = loader.isRelative && parentName ? loader.isRelative(filename) : false; + return isRelative && loader.resolve ? loader.resolve(parentName, filename) : filename; + }; + _proto.getTemplate = function getTemplate(name, eagerCompile, parentName, ignoreMissing, cb) { + var _this3 = this; + var that = this; + var tmpl = null; + if (name && name.raw) { + // this fixes autoescape for templates referenced in symbols + name = name.raw; + } + if (lib.isFunction(parentName)) { + cb = parentName; + parentName = null; + eagerCompile = eagerCompile || false; + } + if (lib.isFunction(eagerCompile)) { + cb = eagerCompile; + eagerCompile = false; + } + if (name instanceof Template) { + tmpl = name; + } else if (typeof name !== 'string') { + throw new Error('template names must be a string: ' + name); + } else { + for (var i = 0; i < this.loaders.length; i++) { + var loader = this.loaders[i]; + tmpl = loader.cache[this.resolveTemplate(loader, parentName, name)]; + if (tmpl) { + break; + } + } + } + if (tmpl) { + if (eagerCompile) { + tmpl.compile(); + } + if (cb) { + cb(null, tmpl); + return undefined; + } else { + return tmpl; + } + } + var syncResult; + var createTemplate = function createTemplate(err, info) { + if (!info && !err && !ignoreMissing) { + err = new Error('template not found: ' + name); + } + if (err) { + if (cb) { + cb(err); + return; + } else { + throw err; + } + } + var newTmpl; + if (!info) { + newTmpl = new Template(noopTmplSrc, _this3, '', eagerCompile); + } else { + newTmpl = new Template(info.src, _this3, info.path, eagerCompile); + if (!info.noCache) { + info.loader.cache[name] = newTmpl; + } + } + if (cb) { + cb(null, newTmpl); + } else { + syncResult = newTmpl; + } + }; + lib.asyncIter(this.loaders, function (loader, i, next, done) { + function handle(err, src) { + if (err) { + done(err); + } else if (src) { + src.loader = loader; + done(null, src); + } else { + next(); + } + } + + // Resolve name relative to parentName + name = that.resolveTemplate(loader, parentName, name); + if (loader.async) { + loader.getSource(name, handle); + } else { + handle(null, loader.getSource(name)); + } + }, createTemplate); + return syncResult; + }; + _proto.express = function express(app) { + return expressApp(this, app); + }; + _proto.render = function render(name, ctx, cb) { + if (lib.isFunction(ctx)) { + cb = ctx; + ctx = null; + } + + // We support a synchronous API to make it easier to migrate + // existing code to async. This works because if you don't do + // anything async work, the whole thing is actually run + // synchronously. + var syncResult = null; + this.getTemplate(name, function (err, tmpl) { + if (err && cb) { + callbackAsap(cb, err); + } else if (err) { + throw err; + } else { + syncResult = tmpl.render(ctx, cb); + } + }); + return syncResult; + }; + _proto.renderString = function renderString(src, ctx, opts, cb) { + if (lib.isFunction(opts)) { + cb = opts; + opts = {}; + } + opts = opts || {}; + var tmpl = new Template(src, this, opts.path); + return tmpl.render(ctx, cb); + }; + _proto.waterfall = function waterfall(tasks, callback, forceAsync) { + return _waterfall(tasks, callback, forceAsync); + }; + return Environment; +}(EmitterObj); +var Context = /*#__PURE__*/function (_Obj) { + _inheritsLoose(Context, _Obj); + function Context() { + return _Obj.apply(this, arguments) || this; + } + var _proto2 = Context.prototype; + _proto2.init = function init(ctx, blocks, env) { + var _this4 = this; + // Has to be tied to an environment so we can tap into its globals. + this.env = env || new Environment(); + + // Make a duplicate of ctx + this.ctx = lib.extend({}, ctx); + this.blocks = {}; + this.exported = []; + lib.keys(blocks).forEach(function (name) { + _this4.addBlock(name, blocks[name]); + }); + }; + _proto2.lookup = function lookup(name) { + // This is one of the most called functions, so optimize for + // the typical case where the name isn't in the globals + if (name in this.env.globals && !(name in this.ctx)) { + return this.env.globals[name]; + } else { + return this.ctx[name]; + } + }; + _proto2.setVariable = function setVariable(name, val) { + this.ctx[name] = val; + }; + _proto2.getVariables = function getVariables() { + return this.ctx; + }; + _proto2.addBlock = function addBlock(name, block) { + this.blocks[name] = this.blocks[name] || []; + this.blocks[name].push(block); + return this; + }; + _proto2.getBlock = function getBlock(name) { + if (!this.blocks[name]) { + throw new Error('unknown block "' + name + '"'); + } + return this.blocks[name][0]; + }; + _proto2.getSuper = function getSuper(env, name, block, frame, runtime, cb) { + var idx = lib.indexOf(this.blocks[name] || [], block); + var blk = this.blocks[name][idx + 1]; + var context = this; + if (idx === -1 || !blk) { + throw new Error('no super block available for "' + name + '"'); + } + blk(env, context, frame, runtime, cb); + }; + _proto2.addExport = function addExport(name) { + this.exported.push(name); + }; + _proto2.getExported = function getExported() { + var _this5 = this; + var exported = {}; + this.exported.forEach(function (name) { + exported[name] = _this5.ctx[name]; + }); + return exported; + }; + return Context; +}(Obj); +var Template = /*#__PURE__*/function (_Obj2) { + _inheritsLoose(Template, _Obj2); + function Template() { + return _Obj2.apply(this, arguments) || this; + } + var _proto3 = Template.prototype; + _proto3.init = function init(src, env, path, eagerCompile) { + this.env = env || new Environment(); + if (lib.isObject(src)) { + switch (src.type) { + case 'code': + this.tmplProps = src.obj; + break; + case 'string': + this.tmplStr = src.obj; + break; + default: + throw new Error("Unexpected template object type " + src.type + "; expected 'code', or 'string'"); + } + } else if (lib.isString(src)) { + this.tmplStr = src; + } else { + throw new Error('src must be a string or an object describing the source'); + } + this.path = path; + if (eagerCompile) { + try { + this._compile(); + } catch (err) { + throw lib._prettifyError(this.path, this.env.opts.dev, err); + } + } else { + this.compiled = false; + } + }; + _proto3.render = function render(ctx, parentFrame, cb) { + var _this6 = this; + if (typeof ctx === 'function') { + cb = ctx; + ctx = {}; + } else if (typeof parentFrame === 'function') { + cb = parentFrame; + parentFrame = null; + } + + // If there is a parent frame, we are being called from internal + // code of another template, and the internal system + // depends on the sync/async nature of the parent template + // to be inherited, so force an async callback + var forceAsync = !parentFrame; + + // Catch compile errors for async rendering + try { + this.compile(); + } catch (e) { + var err = lib._prettifyError(this.path, this.env.opts.dev, e); + if (cb) { + return callbackAsap(cb, err); + } else { + throw err; + } + } + var context = new Context(ctx || {}, this.blocks, this.env); + var frame = parentFrame ? parentFrame.push(true) : new Frame(); + frame.topLevel = true; + var syncResult = null; + var didError = false; + this.rootRenderFunc(this.env, context, frame, globalRuntime, function (err, res) { + // TODO: this is actually a bug in the compiled template (because waterfall + // tasks are both not passing errors up the chain of callbacks AND are not + // causing a return from the top-most render function). But fixing that + // will require a more substantial change to the compiler. + if (didError && cb && typeof res !== 'undefined') { + // prevent multiple calls to cb + return; + } + if (err) { + err = lib._prettifyError(_this6.path, _this6.env.opts.dev, err); + didError = true; + } + if (cb) { + if (forceAsync) { + callbackAsap(cb, err, res); + } else { + cb(err, res); + } + } else { + if (err) { + throw err; + } + syncResult = res; + } + }); + return syncResult; + }; + _proto3.getExported = function getExported(ctx, parentFrame, cb) { + // eslint-disable-line consistent-return + if (typeof ctx === 'function') { + cb = ctx; + ctx = {}; + } + if (typeof parentFrame === 'function') { + cb = parentFrame; + parentFrame = null; + } + + // Catch compile errors for async rendering + try { + this.compile(); + } catch (e) { + if (cb) { + return cb(e); + } else { + throw e; + } + } + var frame = parentFrame ? parentFrame.push() : new Frame(); + frame.topLevel = true; + + // Run the rootRenderFunc to populate the context with exported vars + var context = new Context(ctx || {}, this.blocks, this.env); + this.rootRenderFunc(this.env, context, frame, globalRuntime, function (err) { + if (err) { + cb(err, null); + } else { + cb(null, context.getExported()); + } + }); + }; + _proto3.compile = function compile() { + if (!this.compiled) { + this._compile(); + } + }; + _proto3._compile = function _compile() { + var props; + if (this.tmplProps) { + props = this.tmplProps; + } else { + var source = compiler.compile(this.tmplStr, this.env.asyncFilters, this.env.extensionsList, this.path, this.env.opts); + var func = new Function(source); // eslint-disable-line no-new-func + props = func(); + } + this.blocks = this._getBlocks(props); + this.rootRenderFunc = props.root; + this.compiled = true; + }; + _proto3._getBlocks = function _getBlocks(props) { + var blocks = {}; + lib.keys(props).forEach(function (k) { + if (k.slice(0, 2) === 'b_') { + blocks[k.slice(2)] = props[k]; + } + }); + return blocks; + }; + return Template; +}(Obj); +module.exports = { + Environment: Environment, + Template: Template +};
\ No newline at end of file diff --git a/node_modules/nunjucks/src/express-app.js b/node_modules/nunjucks/src/express-app.js new file mode 100644 index 0000000..8190d78 --- /dev/null +++ b/node_modules/nunjucks/src/express-app.js @@ -0,0 +1,23 @@ +"use strict"; + +var path = require('path'); +module.exports = function express(env, app) { + function NunjucksView(name, opts) { + this.name = name; + this.path = name; + this.defaultEngine = opts.defaultEngine; + this.ext = path.extname(name); + if (!this.ext && !this.defaultEngine) { + throw new Error('No default engine was specified and no extension was provided.'); + } + if (!this.ext) { + this.name += this.ext = (this.defaultEngine[0] !== '.' ? '.' : '') + this.defaultEngine; + } + } + NunjucksView.prototype.render = function render(opts, cb) { + env.render(this.name, opts, cb); + }; + app.set('view', NunjucksView); + app.set('nunjucksEnv', env); + return env; +};
\ No newline at end of file diff --git a/node_modules/nunjucks/src/filters.js b/node_modules/nunjucks/src/filters.js new file mode 100644 index 0000000..e7f6d0d --- /dev/null +++ b/node_modules/nunjucks/src/filters.js @@ -0,0 +1,546 @@ +'use strict'; + +var lib = require('./lib'); +var r = require('./runtime'); +var _exports = module.exports = {}; +function normalize(value, defaultValue) { + if (value === null || value === undefined || value === false) { + return defaultValue; + } + return value; +} +_exports.abs = Math.abs; +function isNaN(num) { + return num !== num; // eslint-disable-line no-self-compare +} + +function batch(arr, linecount, fillWith) { + var i; + var res = []; + var tmp = []; + for (i = 0; i < arr.length; i++) { + if (i % linecount === 0 && tmp.length) { + res.push(tmp); + tmp = []; + } + tmp.push(arr[i]); + } + if (tmp.length) { + if (fillWith) { + for (i = tmp.length; i < linecount; i++) { + tmp.push(fillWith); + } + } + res.push(tmp); + } + return res; +} +_exports.batch = batch; +function capitalize(str) { + str = normalize(str, ''); + var ret = str.toLowerCase(); + return r.copySafeness(str, ret.charAt(0).toUpperCase() + ret.slice(1)); +} +_exports.capitalize = capitalize; +function center(str, width) { + str = normalize(str, ''); + width = width || 80; + if (str.length >= width) { + return str; + } + var spaces = width - str.length; + var pre = lib.repeat(' ', spaces / 2 - spaces % 2); + var post = lib.repeat(' ', spaces / 2); + return r.copySafeness(str, pre + str + post); +} +_exports.center = center; +function default_(val, def, bool) { + if (bool) { + return val || def; + } else { + return val !== undefined ? val : def; + } +} + +// TODO: it is confusing to export something called 'default' +_exports['default'] = default_; // eslint-disable-line dot-notation + +function dictsort(val, caseSensitive, by) { + if (!lib.isObject(val)) { + throw new lib.TemplateError('dictsort filter: val must be an object'); + } + var array = []; + // deliberately include properties from the object's prototype + for (var k in val) { + // eslint-disable-line guard-for-in, no-restricted-syntax + array.push([k, val[k]]); + } + var si; + if (by === undefined || by === 'key') { + si = 0; + } else if (by === 'value') { + si = 1; + } else { + throw new lib.TemplateError('dictsort filter: You can only sort by either key or value'); + } + array.sort(function (t1, t2) { + var a = t1[si]; + var b = t2[si]; + if (!caseSensitive) { + if (lib.isString(a)) { + a = a.toUpperCase(); + } + if (lib.isString(b)) { + b = b.toUpperCase(); + } + } + return a > b ? 1 : a === b ? 0 : -1; // eslint-disable-line no-nested-ternary + }); + + return array; +} +_exports.dictsort = dictsort; +function dump(obj, spaces) { + return JSON.stringify(obj, null, spaces); +} +_exports.dump = dump; +function escape(str) { + if (str instanceof r.SafeString) { + return str; + } + str = str === null || str === undefined ? '' : str; + return r.markSafe(lib.escape(str.toString())); +} +_exports.escape = escape; +function safe(str) { + if (str instanceof r.SafeString) { + return str; + } + str = str === null || str === undefined ? '' : str; + return r.markSafe(str.toString()); +} +_exports.safe = safe; +function first(arr) { + return arr[0]; +} +_exports.first = first; +function forceescape(str) { + str = str === null || str === undefined ? '' : str; + return r.markSafe(lib.escape(str.toString())); +} +_exports.forceescape = forceescape; +function groupby(arr, attr) { + return lib.groupBy(arr, attr, this.env.opts.throwOnUndefined); +} +_exports.groupby = groupby; +function indent(str, width, indentfirst) { + str = normalize(str, ''); + if (str === '') { + return ''; + } + width = width || 4; + // let res = ''; + var lines = str.split('\n'); + var sp = lib.repeat(' ', width); + var res = lines.map(function (l, i) { + return i === 0 && !indentfirst ? l : "" + sp + l; + }).join('\n'); + return r.copySafeness(str, res); +} +_exports.indent = indent; +function join(arr, del, attr) { + del = del || ''; + if (attr) { + arr = lib.map(arr, function (v) { + return v[attr]; + }); + } + return arr.join(del); +} +_exports.join = join; +function last(arr) { + return arr[arr.length - 1]; +} +_exports.last = last; +function lengthFilter(val) { + var value = normalize(val, ''); + if (value !== undefined) { + if (typeof Map === 'function' && value instanceof Map || typeof Set === 'function' && value instanceof Set) { + // ECMAScript 2015 Maps and Sets + return value.size; + } + if (lib.isObject(value) && !(value instanceof r.SafeString)) { + // Objects (besides SafeStrings), non-primative Arrays + return lib.keys(value).length; + } + return value.length; + } + return 0; +} +_exports.length = lengthFilter; +function list(val) { + if (lib.isString(val)) { + return val.split(''); + } else if (lib.isObject(val)) { + return lib._entries(val || {}).map(function (_ref) { + var key = _ref[0], + value = _ref[1]; + return { + key: key, + value: value + }; + }); + } else if (lib.isArray(val)) { + return val; + } else { + throw new lib.TemplateError('list filter: type not iterable'); + } +} +_exports.list = list; +function lower(str) { + str = normalize(str, ''); + return str.toLowerCase(); +} +_exports.lower = lower; +function nl2br(str) { + if (str === null || str === undefined) { + return ''; + } + return r.copySafeness(str, str.replace(/\r\n|\n/g, '<br />\n')); +} +_exports.nl2br = nl2br; +function random(arr) { + return arr[Math.floor(Math.random() * arr.length)]; +} +_exports.random = random; + +/** + * Construct select or reject filter + * + * @param {boolean} expectedTestResult + * @returns {function(array, string, *): array} + */ +function getSelectOrReject(expectedTestResult) { + function filter(arr, testName, secondArg) { + if (testName === void 0) { + testName = 'truthy'; + } + var context = this; + var test = context.env.getTest(testName); + return lib.toArray(arr).filter(function examineTestResult(item) { + return test.call(context, item, secondArg) === expectedTestResult; + }); + } + return filter; +} +_exports.reject = getSelectOrReject(false); +function rejectattr(arr, attr) { + return arr.filter(function (item) { + return !item[attr]; + }); +} +_exports.rejectattr = rejectattr; +_exports.select = getSelectOrReject(true); +function selectattr(arr, attr) { + return arr.filter(function (item) { + return !!item[attr]; + }); +} +_exports.selectattr = selectattr; +function replace(str, old, new_, maxCount) { + var originalStr = str; + if (old instanceof RegExp) { + return str.replace(old, new_); + } + if (typeof maxCount === 'undefined') { + maxCount = -1; + } + var res = ''; // Output + + // Cast Numbers in the search term to string + if (typeof old === 'number') { + old = '' + old; + } else if (typeof old !== 'string') { + // If it is something other than number or string, + // return the original string + return str; + } + + // Cast numbers in the replacement to string + if (typeof str === 'number') { + str = '' + str; + } + + // If by now, we don't have a string, throw it back + if (typeof str !== 'string' && !(str instanceof r.SafeString)) { + return str; + } + + // ShortCircuits + if (old === '') { + // Mimic the python behaviour: empty string is replaced + // by replacement e.g. "abc"|replace("", ".") -> .a.b.c. + res = new_ + str.split('').join(new_) + new_; + return r.copySafeness(str, res); + } + var nextIndex = str.indexOf(old); + // if # of replacements to perform is 0, or the string to does + // not contain the old value, return the string + if (maxCount === 0 || nextIndex === -1) { + return str; + } + var pos = 0; + var count = 0; // # of replacements made + + while (nextIndex > -1 && (maxCount === -1 || count < maxCount)) { + // Grab the next chunk of src string and add it with the + // replacement, to the result + res += str.substring(pos, nextIndex) + new_; + // Increment our pointer in the src string + pos = nextIndex + old.length; + count++; + // See if there are any more replacements to be made + nextIndex = str.indexOf(old, pos); + } + + // We've either reached the end, or done the max # of + // replacements, tack on any remaining string + if (pos < str.length) { + res += str.substring(pos); + } + return r.copySafeness(originalStr, res); +} +_exports.replace = replace; +function reverse(val) { + var arr; + if (lib.isString(val)) { + arr = list(val); + } else { + // Copy it + arr = lib.map(val, function (v) { + return v; + }); + } + arr.reverse(); + if (lib.isString(val)) { + return r.copySafeness(val, arr.join('')); + } + return arr; +} +_exports.reverse = reverse; +function round(val, precision, method) { + precision = precision || 0; + var factor = Math.pow(10, precision); + var rounder; + if (method === 'ceil') { + rounder = Math.ceil; + } else if (method === 'floor') { + rounder = Math.floor; + } else { + rounder = Math.round; + } + return rounder(val * factor) / factor; +} +_exports.round = round; +function slice(arr, slices, fillWith) { + var sliceLength = Math.floor(arr.length / slices); + var extra = arr.length % slices; + var res = []; + var offset = 0; + for (var i = 0; i < slices; i++) { + var start = offset + i * sliceLength; + if (i < extra) { + offset++; + } + var end = offset + (i + 1) * sliceLength; + var currSlice = arr.slice(start, end); + if (fillWith && i >= extra) { + currSlice.push(fillWith); + } + res.push(currSlice); + } + return res; +} +_exports.slice = slice; +function sum(arr, attr, start) { + if (start === void 0) { + start = 0; + } + if (attr) { + arr = lib.map(arr, function (v) { + return v[attr]; + }); + } + return start + arr.reduce(function (a, b) { + return a + b; + }, 0); +} +_exports.sum = sum; +_exports.sort = r.makeMacro(['value', 'reverse', 'case_sensitive', 'attribute'], [], function sortFilter(arr, reversed, caseSens, attr) { + var _this = this; + // Copy it + var array = lib.map(arr, function (v) { + return v; + }); + var getAttribute = lib.getAttrGetter(attr); + array.sort(function (a, b) { + var x = attr ? getAttribute(a) : a; + var y = attr ? getAttribute(b) : b; + if (_this.env.opts.throwOnUndefined && attr && (x === undefined || y === undefined)) { + throw new TypeError("sort: attribute \"" + attr + "\" resolved to undefined"); + } + if (!caseSens && lib.isString(x) && lib.isString(y)) { + x = x.toLowerCase(); + y = y.toLowerCase(); + } + if (x < y) { + return reversed ? 1 : -1; + } else if (x > y) { + return reversed ? -1 : 1; + } else { + return 0; + } + }); + return array; +}); +function string(obj) { + return r.copySafeness(obj, obj); +} +_exports.string = string; +function striptags(input, preserveLinebreaks) { + input = normalize(input, ''); + var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>|<!--[\s\S]*?-->/gi; + var trimmedInput = trim(input.replace(tags, '')); + var res = ''; + if (preserveLinebreaks) { + res = trimmedInput.replace(/^ +| +$/gm, '') // remove leading and trailing spaces + .replace(/ +/g, ' ') // squash adjacent spaces + .replace(/(\r\n)/g, '\n') // normalize linebreaks (CRLF -> LF) + .replace(/\n\n\n+/g, '\n\n'); // squash abnormal adjacent linebreaks + } else { + res = trimmedInput.replace(/\s+/gi, ' '); + } + return r.copySafeness(input, res); +} +_exports.striptags = striptags; +function title(str) { + str = normalize(str, ''); + var words = str.split(' ').map(function (word) { + return capitalize(word); + }); + return r.copySafeness(str, words.join(' ')); +} +_exports.title = title; +function trim(str) { + return r.copySafeness(str, str.replace(/^\s*|\s*$/g, '')); +} +_exports.trim = trim; +function truncate(input, length, killwords, end) { + var orig = input; + input = normalize(input, ''); + length = length || 255; + if (input.length <= length) { + return input; + } + if (killwords) { + input = input.substring(0, length); + } else { + var idx = input.lastIndexOf(' ', length); + if (idx === -1) { + idx = length; + } + input = input.substring(0, idx); + } + input += end !== undefined && end !== null ? end : '...'; + return r.copySafeness(orig, input); +} +_exports.truncate = truncate; +function upper(str) { + str = normalize(str, ''); + return str.toUpperCase(); +} +_exports.upper = upper; +function urlencode(obj) { + var enc = encodeURIComponent; + if (lib.isString(obj)) { + return enc(obj); + } else { + var keyvals = lib.isArray(obj) ? obj : lib._entries(obj); + return keyvals.map(function (_ref2) { + var k = _ref2[0], + v = _ref2[1]; + return enc(k) + "=" + enc(v); + }).join('&'); + } +} +_exports.urlencode = urlencode; + +// For the jinja regexp, see +// https://github.com/mitsuhiko/jinja2/blob/f15b814dcba6aa12bc74d1f7d0c881d55f7126be/jinja2/utils.py#L20-L23 +var puncRe = /^(?:\(|<|<)?(.*?)(?:\.|,|\)|\n|>)?$/; +// from http://blog.gerv.net/2011/05/html5_email_address_regexp/ +var emailRe = /^[\w.!#$%&'*+\-\/=?\^`{|}~]+@[a-z\d\-]+(\.[a-z\d\-]+)+$/i; +var httpHttpsRe = /^https?:\/\/.*$/; +var wwwRe = /^www\./; +var tldRe = /\.(?:org|net|com)(?:\:|\/|$)/; +function urlize(str, length, nofollow) { + if (isNaN(length)) { + length = Infinity; + } + var noFollowAttr = nofollow === true ? ' rel="nofollow"' : ''; + var words = str.split(/(\s+)/).filter(function (word) { + // If the word has no length, bail. This can happen for str with + // trailing whitespace. + return word && word.length; + }).map(function (word) { + var matches = word.match(puncRe); + var possibleUrl = matches ? matches[1] : word; + var shortUrl = possibleUrl.substr(0, length); + + // url that starts with http or https + if (httpHttpsRe.test(possibleUrl)) { + return "<a href=\"" + possibleUrl + "\"" + noFollowAttr + ">" + shortUrl + "</a>"; + } + + // url that starts with www. + if (wwwRe.test(possibleUrl)) { + return "<a href=\"http://" + possibleUrl + "\"" + noFollowAttr + ">" + shortUrl + "</a>"; + } + + // an email address of the form username@domain.tld + if (emailRe.test(possibleUrl)) { + return "<a href=\"mailto:" + possibleUrl + "\">" + possibleUrl + "</a>"; + } + + // url that ends in .com, .org or .net that is not an email address + if (tldRe.test(possibleUrl)) { + return "<a href=\"http://" + possibleUrl + "\"" + noFollowAttr + ">" + shortUrl + "</a>"; + } + return word; + }); + return words.join(''); +} +_exports.urlize = urlize; +function wordcount(str) { + str = normalize(str, ''); + var words = str ? str.match(/\w+/g) : null; + return words ? words.length : null; +} +_exports.wordcount = wordcount; +function float(val, def) { + var res = parseFloat(val); + return isNaN(res) ? def : res; +} +_exports.float = float; +var intFilter = r.makeMacro(['value', 'default', 'base'], [], function doInt(value, defaultValue, base) { + if (base === void 0) { + base = 10; + } + var res = parseInt(value, base); + return isNaN(res) ? defaultValue : res; +}); +_exports.int = intFilter; + +// Aliases +_exports.d = _exports.default; +_exports.e = _exports.escape;
\ No newline at end of file diff --git a/node_modules/nunjucks/src/globals.js b/node_modules/nunjucks/src/globals.js new file mode 100644 index 0000000..e0de671 --- /dev/null +++ b/node_modules/nunjucks/src/globals.js @@ -0,0 +1,65 @@ +'use strict'; + +function _cycler(items) { + var index = -1; + return { + current: null, + reset: function reset() { + index = -1; + this.current = null; + }, + next: function next() { + index++; + if (index >= items.length) { + index = 0; + } + this.current = items[index]; + return this.current; + } + }; +} +function _joiner(sep) { + sep = sep || ','; + var first = true; + return function () { + var val = first ? '' : sep; + first = false; + return val; + }; +} + +// Making this a function instead so it returns a new object +// each time it's called. That way, if something like an environment +// uses it, they will each have their own copy. +function globals() { + return { + range: function range(start, stop, step) { + if (typeof stop === 'undefined') { + stop = start; + start = 0; + step = 1; + } else if (!step) { + step = 1; + } + var arr = []; + if (step > 0) { + for (var i = start; i < stop; i += step) { + arr.push(i); + } + } else { + for (var _i = start; _i > stop; _i += step) { + // eslint-disable-line for-direction + arr.push(_i); + } + } + return arr; + }, + cycler: function cycler() { + return _cycler(Array.prototype.slice.call(arguments)); + }, + joiner: function joiner(sep) { + return _joiner(sep); + } + }; +} +module.exports = globals;
\ No newline at end of file diff --git a/node_modules/nunjucks/src/jinja-compat.js b/node_modules/nunjucks/src/jinja-compat.js new file mode 100644 index 0000000..8754979 --- /dev/null +++ b/node_modules/nunjucks/src/jinja-compat.js @@ -0,0 +1,293 @@ +"use strict"; + +function installCompat() { + 'use strict'; + + /* eslint-disable camelcase */ + + // This must be called like `nunjucks.installCompat` so that `this` + // references the nunjucks instance + var runtime = this.runtime; + var lib = this.lib; + // Handle slim case where these 'modules' are excluded from the built source + var Compiler = this.compiler.Compiler; + var Parser = this.parser.Parser; + var nodes = this.nodes; + var lexer = this.lexer; + var orig_contextOrFrameLookup = runtime.contextOrFrameLookup; + var orig_memberLookup = runtime.memberLookup; + var orig_Compiler_assertType; + var orig_Parser_parseAggregate; + if (Compiler) { + orig_Compiler_assertType = Compiler.prototype.assertType; + } + if (Parser) { + orig_Parser_parseAggregate = Parser.prototype.parseAggregate; + } + function uninstall() { + runtime.contextOrFrameLookup = orig_contextOrFrameLookup; + runtime.memberLookup = orig_memberLookup; + if (Compiler) { + Compiler.prototype.assertType = orig_Compiler_assertType; + } + if (Parser) { + Parser.prototype.parseAggregate = orig_Parser_parseAggregate; + } + } + runtime.contextOrFrameLookup = function contextOrFrameLookup(context, frame, key) { + var val = orig_contextOrFrameLookup.apply(this, arguments); + if (val !== undefined) { + return val; + } + switch (key) { + case 'True': + return true; + case 'False': + return false; + case 'None': + return null; + default: + return undefined; + } + }; + function getTokensState(tokens) { + return { + index: tokens.index, + lineno: tokens.lineno, + colno: tokens.colno + }; + } + if (process.env.BUILD_TYPE !== 'SLIM' && nodes && Compiler && Parser) { + // i.e., not slim mode + var Slice = nodes.Node.extend('Slice', { + fields: ['start', 'stop', 'step'], + init: function init(lineno, colno, start, stop, step) { + start = start || new nodes.Literal(lineno, colno, null); + stop = stop || new nodes.Literal(lineno, colno, null); + step = step || new nodes.Literal(lineno, colno, 1); + this.parent(lineno, colno, start, stop, step); + } + }); + Compiler.prototype.assertType = function assertType(node) { + if (node instanceof Slice) { + return; + } + orig_Compiler_assertType.apply(this, arguments); + }; + Compiler.prototype.compileSlice = function compileSlice(node, frame) { + this._emit('('); + this._compileExpression(node.start, frame); + this._emit('),('); + this._compileExpression(node.stop, frame); + this._emit('),('); + this._compileExpression(node.step, frame); + this._emit(')'); + }; + Parser.prototype.parseAggregate = function parseAggregate() { + var _this = this; + var origState = getTokensState(this.tokens); + // Set back one accounting for opening bracket/parens + origState.colno--; + origState.index--; + try { + return orig_Parser_parseAggregate.apply(this); + } catch (e) { + var errState = getTokensState(this.tokens); + var rethrow = function rethrow() { + lib._assign(_this.tokens, errState); + return e; + }; + + // Reset to state before original parseAggregate called + lib._assign(this.tokens, origState); + this.peeked = false; + var tok = this.peekToken(); + if (tok.type !== lexer.TOKEN_LEFT_BRACKET) { + throw rethrow(); + } else { + this.nextToken(); + } + var node = new Slice(tok.lineno, tok.colno); + + // If we don't encounter a colon while parsing, this is not a slice, + // so re-raise the original exception. + var isSlice = false; + for (var i = 0; i <= node.fields.length; i++) { + if (this.skip(lexer.TOKEN_RIGHT_BRACKET)) { + break; + } + if (i === node.fields.length) { + if (isSlice) { + this.fail('parseSlice: too many slice components', tok.lineno, tok.colno); + } else { + break; + } + } + if (this.skip(lexer.TOKEN_COLON)) { + isSlice = true; + } else { + var field = node.fields[i]; + node[field] = this.parseExpression(); + isSlice = this.skip(lexer.TOKEN_COLON) || isSlice; + } + } + if (!isSlice) { + throw rethrow(); + } + return new nodes.Array(tok.lineno, tok.colno, [node]); + } + }; + } + function sliceLookup(obj, start, stop, step) { + obj = obj || []; + if (start === null) { + start = step < 0 ? obj.length - 1 : 0; + } + if (stop === null) { + stop = step < 0 ? -1 : obj.length; + } else if (stop < 0) { + stop += obj.length; + } + if (start < 0) { + start += obj.length; + } + var results = []; + for (var i = start;; i += step) { + if (i < 0 || i > obj.length) { + break; + } + if (step > 0 && i >= stop) { + break; + } + if (step < 0 && i <= stop) { + break; + } + results.push(runtime.memberLookup(obj, i)); + } + return results; + } + function hasOwnProp(obj, key) { + return Object.prototype.hasOwnProperty.call(obj, key); + } + var ARRAY_MEMBERS = { + pop: function pop(index) { + if (index === undefined) { + return this.pop(); + } + if (index >= this.length || index < 0) { + throw new Error('KeyError'); + } + return this.splice(index, 1); + }, + append: function append(element) { + return this.push(element); + }, + remove: function remove(element) { + for (var i = 0; i < this.length; i++) { + if (this[i] === element) { + return this.splice(i, 1); + } + } + throw new Error('ValueError'); + }, + count: function count(element) { + var count = 0; + for (var i = 0; i < this.length; i++) { + if (this[i] === element) { + count++; + } + } + return count; + }, + index: function index(element) { + var i; + if ((i = this.indexOf(element)) === -1) { + throw new Error('ValueError'); + } + return i; + }, + find: function find(element) { + return this.indexOf(element); + }, + insert: function insert(index, elem) { + return this.splice(index, 0, elem); + } + }; + var OBJECT_MEMBERS = { + items: function items() { + return lib._entries(this); + }, + values: function values() { + return lib._values(this); + }, + keys: function keys() { + return lib.keys(this); + }, + get: function get(key, def) { + var output = this[key]; + if (output === undefined) { + output = def; + } + return output; + }, + has_key: function has_key(key) { + return hasOwnProp(this, key); + }, + pop: function pop(key, def) { + var output = this[key]; + if (output === undefined && def !== undefined) { + output = def; + } else if (output === undefined) { + throw new Error('KeyError'); + } else { + delete this[key]; + } + return output; + }, + popitem: function popitem() { + var keys = lib.keys(this); + if (!keys.length) { + throw new Error('KeyError'); + } + var k = keys[0]; + var val = this[k]; + delete this[k]; + return [k, val]; + }, + setdefault: function setdefault(key, def) { + if (def === void 0) { + def = null; + } + if (!(key in this)) { + this[key] = def; + } + return this[key]; + }, + update: function update(kwargs) { + lib._assign(this, kwargs); + return null; // Always returns None + } + }; + + OBJECT_MEMBERS.iteritems = OBJECT_MEMBERS.items; + OBJECT_MEMBERS.itervalues = OBJECT_MEMBERS.values; + OBJECT_MEMBERS.iterkeys = OBJECT_MEMBERS.keys; + runtime.memberLookup = function memberLookup(obj, val, autoescape) { + if (arguments.length === 4) { + return sliceLookup.apply(this, arguments); + } + obj = obj || {}; + + // If the object is an object, return any of the methods that Python would + // otherwise provide. + if (lib.isArray(obj) && hasOwnProp(ARRAY_MEMBERS, val)) { + return ARRAY_MEMBERS[val].bind(obj); + } + if (lib.isObject(obj) && hasOwnProp(OBJECT_MEMBERS, val)) { + return OBJECT_MEMBERS[val].bind(obj); + } + return orig_memberLookup.apply(this, arguments); + }; + return uninstall; +} +module.exports = installCompat;
\ No newline at end of file diff --git a/node_modules/nunjucks/src/lexer.js b/node_modules/nunjucks/src/lexer.js new file mode 100644 index 0000000..ca4454d --- /dev/null +++ b/node_modules/nunjucks/src/lexer.js @@ -0,0 +1,474 @@ +'use strict'; + +var lib = require('./lib'); +var whitespaceChars = " \n\t\r\xA0"; +var delimChars = '()[]{}%*-+~/#,:|.<>=!'; +var intChars = '0123456789'; +var BLOCK_START = '{%'; +var BLOCK_END = '%}'; +var VARIABLE_START = '{{'; +var VARIABLE_END = '}}'; +var COMMENT_START = '{#'; +var COMMENT_END = '#}'; +var TOKEN_STRING = 'string'; +var TOKEN_WHITESPACE = 'whitespace'; +var TOKEN_DATA = 'data'; +var TOKEN_BLOCK_START = 'block-start'; +var TOKEN_BLOCK_END = 'block-end'; +var TOKEN_VARIABLE_START = 'variable-start'; +var TOKEN_VARIABLE_END = 'variable-end'; +var TOKEN_COMMENT = 'comment'; +var TOKEN_LEFT_PAREN = 'left-paren'; +var TOKEN_RIGHT_PAREN = 'right-paren'; +var TOKEN_LEFT_BRACKET = 'left-bracket'; +var TOKEN_RIGHT_BRACKET = 'right-bracket'; +var TOKEN_LEFT_CURLY = 'left-curly'; +var TOKEN_RIGHT_CURLY = 'right-curly'; +var TOKEN_OPERATOR = 'operator'; +var TOKEN_COMMA = 'comma'; +var TOKEN_COLON = 'colon'; +var TOKEN_TILDE = 'tilde'; +var TOKEN_PIPE = 'pipe'; +var TOKEN_INT = 'int'; +var TOKEN_FLOAT = 'float'; +var TOKEN_BOOLEAN = 'boolean'; +var TOKEN_NONE = 'none'; +var TOKEN_SYMBOL = 'symbol'; +var TOKEN_SPECIAL = 'special'; +var TOKEN_REGEX = 'regex'; +function token(type, value, lineno, colno) { + return { + type: type, + value: value, + lineno: lineno, + colno: colno + }; +} +var Tokenizer = /*#__PURE__*/function () { + function Tokenizer(str, opts) { + this.str = str; + this.index = 0; + this.len = str.length; + this.lineno = 0; + this.colno = 0; + this.in_code = false; + opts = opts || {}; + var tags = opts.tags || {}; + this.tags = { + BLOCK_START: tags.blockStart || BLOCK_START, + BLOCK_END: tags.blockEnd || BLOCK_END, + VARIABLE_START: tags.variableStart || VARIABLE_START, + VARIABLE_END: tags.variableEnd || VARIABLE_END, + COMMENT_START: tags.commentStart || COMMENT_START, + COMMENT_END: tags.commentEnd || COMMENT_END + }; + this.trimBlocks = !!opts.trimBlocks; + this.lstripBlocks = !!opts.lstripBlocks; + } + var _proto = Tokenizer.prototype; + _proto.nextToken = function nextToken() { + var lineno = this.lineno; + var colno = this.colno; + var tok; + if (this.in_code) { + // Otherwise, if we are in a block parse it as code + var cur = this.current(); + if (this.isFinished()) { + // We have nothing else to parse + return null; + } else if (cur === '"' || cur === '\'') { + // We've hit a string + return token(TOKEN_STRING, this._parseString(cur), lineno, colno); + } else if (tok = this._extract(whitespaceChars)) { + // We hit some whitespace + return token(TOKEN_WHITESPACE, tok, lineno, colno); + } else if ((tok = this._extractString(this.tags.BLOCK_END)) || (tok = this._extractString('-' + this.tags.BLOCK_END))) { + // Special check for the block end tag + // + // It is a requirement that start and end tags are composed of + // delimiter characters (%{}[] etc), and our code always + // breaks on delimiters so we can assume the token parsing + // doesn't consume these elsewhere + this.in_code = false; + if (this.trimBlocks) { + cur = this.current(); + if (cur === '\n') { + // Skip newline + this.forward(); + } else if (cur === '\r') { + // Skip CRLF newline + this.forward(); + cur = this.current(); + if (cur === '\n') { + this.forward(); + } else { + // Was not a CRLF, so go back + this.back(); + } + } + } + return token(TOKEN_BLOCK_END, tok, lineno, colno); + } else if ((tok = this._extractString(this.tags.VARIABLE_END)) || (tok = this._extractString('-' + this.tags.VARIABLE_END))) { + // Special check for variable end tag (see above) + this.in_code = false; + return token(TOKEN_VARIABLE_END, tok, lineno, colno); + } else if (cur === 'r' && this.str.charAt(this.index + 1) === '/') { + // Skip past 'r/'. + this.forwardN(2); + + // Extract until the end of the regex -- / ends it, \/ does not. + var regexBody = ''; + while (!this.isFinished()) { + if (this.current() === '/' && this.previous() !== '\\') { + this.forward(); + break; + } else { + regexBody += this.current(); + this.forward(); + } + } + + // Check for flags. + // The possible flags are according to https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp) + var POSSIBLE_FLAGS = ['g', 'i', 'm', 'y']; + var regexFlags = ''; + while (!this.isFinished()) { + var isCurrentAFlag = POSSIBLE_FLAGS.indexOf(this.current()) !== -1; + if (isCurrentAFlag) { + regexFlags += this.current(); + this.forward(); + } else { + break; + } + } + return token(TOKEN_REGEX, { + body: regexBody, + flags: regexFlags + }, lineno, colno); + } else if (delimChars.indexOf(cur) !== -1) { + // We've hit a delimiter (a special char like a bracket) + this.forward(); + var complexOps = ['==', '===', '!=', '!==', '<=', '>=', '//', '**']; + var curComplex = cur + this.current(); + var type; + if (lib.indexOf(complexOps, curComplex) !== -1) { + this.forward(); + cur = curComplex; + + // See if this is a strict equality/inequality comparator + if (lib.indexOf(complexOps, curComplex + this.current()) !== -1) { + cur = curComplex + this.current(); + this.forward(); + } + } + switch (cur) { + case '(': + type = TOKEN_LEFT_PAREN; + break; + case ')': + type = TOKEN_RIGHT_PAREN; + break; + case '[': + type = TOKEN_LEFT_BRACKET; + break; + case ']': + type = TOKEN_RIGHT_BRACKET; + break; + case '{': + type = TOKEN_LEFT_CURLY; + break; + case '}': + type = TOKEN_RIGHT_CURLY; + break; + case ',': + type = TOKEN_COMMA; + break; + case ':': + type = TOKEN_COLON; + break; + case '~': + type = TOKEN_TILDE; + break; + case '|': + type = TOKEN_PIPE; + break; + default: + type = TOKEN_OPERATOR; + } + return token(type, cur, lineno, colno); + } else { + // We are not at whitespace or a delimiter, so extract the + // text and parse it + tok = this._extractUntil(whitespaceChars + delimChars); + if (tok.match(/^[-+]?[0-9]+$/)) { + if (this.current() === '.') { + this.forward(); + var dec = this._extract(intChars); + return token(TOKEN_FLOAT, tok + '.' + dec, lineno, colno); + } else { + return token(TOKEN_INT, tok, lineno, colno); + } + } else if (tok.match(/^(true|false)$/)) { + return token(TOKEN_BOOLEAN, tok, lineno, colno); + } else if (tok === 'none') { + return token(TOKEN_NONE, tok, lineno, colno); + /* + * Added to make the test `null is null` evaluate truthily. + * Otherwise, Nunjucks will look up null in the context and + * return `undefined`, which is not what we want. This *may* have + * consequences is someone is using null in their templates as a + * variable. + */ + } else if (tok === 'null') { + return token(TOKEN_NONE, tok, lineno, colno); + } else if (tok) { + return token(TOKEN_SYMBOL, tok, lineno, colno); + } else { + throw new Error('Unexpected value while parsing: ' + tok); + } + } + } else { + // Parse out the template text, breaking on tag + // delimiters because we need to look for block/variable start + // tags (don't use the full delimChars for optimization) + var beginChars = this.tags.BLOCK_START.charAt(0) + this.tags.VARIABLE_START.charAt(0) + this.tags.COMMENT_START.charAt(0) + this.tags.COMMENT_END.charAt(0); + if (this.isFinished()) { + return null; + } else if ((tok = this._extractString(this.tags.BLOCK_START + '-')) || (tok = this._extractString(this.tags.BLOCK_START))) { + this.in_code = true; + return token(TOKEN_BLOCK_START, tok, lineno, colno); + } else if ((tok = this._extractString(this.tags.VARIABLE_START + '-')) || (tok = this._extractString(this.tags.VARIABLE_START))) { + this.in_code = true; + return token(TOKEN_VARIABLE_START, tok, lineno, colno); + } else { + tok = ''; + var data; + var inComment = false; + if (this._matches(this.tags.COMMENT_START)) { + inComment = true; + tok = this._extractString(this.tags.COMMENT_START); + } + + // Continually consume text, breaking on the tag delimiter + // characters and checking to see if it's a start tag. + // + // We could hit the end of the template in the middle of + // our looping, so check for the null return value from + // _extractUntil + while ((data = this._extractUntil(beginChars)) !== null) { + tok += data; + if ((this._matches(this.tags.BLOCK_START) || this._matches(this.tags.VARIABLE_START) || this._matches(this.tags.COMMENT_START)) && !inComment) { + if (this.lstripBlocks && this._matches(this.tags.BLOCK_START) && this.colno > 0 && this.colno <= tok.length) { + var lastLine = tok.slice(-this.colno); + if (/^\s+$/.test(lastLine)) { + // Remove block leading whitespace from beginning of the string + tok = tok.slice(0, -this.colno); + if (!tok.length) { + // All data removed, collapse to avoid unnecessary nodes + // by returning next token (block start) + return this.nextToken(); + } + } + } + // If it is a start tag, stop looping + break; + } else if (this._matches(this.tags.COMMENT_END)) { + if (!inComment) { + throw new Error('unexpected end of comment'); + } + tok += this._extractString(this.tags.COMMENT_END); + break; + } else { + // It does not match any tag, so add the character and + // carry on + tok += this.current(); + this.forward(); + } + } + if (data === null && inComment) { + throw new Error('expected end of comment, got end of file'); + } + return token(inComment ? TOKEN_COMMENT : TOKEN_DATA, tok, lineno, colno); + } + } + }; + _proto._parseString = function _parseString(delimiter) { + this.forward(); + var str = ''; + while (!this.isFinished() && this.current() !== delimiter) { + var cur = this.current(); + if (cur === '\\') { + this.forward(); + switch (this.current()) { + case 'n': + str += '\n'; + break; + case 't': + str += '\t'; + break; + case 'r': + str += '\r'; + break; + default: + str += this.current(); + } + this.forward(); + } else { + str += cur; + this.forward(); + } + } + this.forward(); + return str; + }; + _proto._matches = function _matches(str) { + if (this.index + str.length > this.len) { + return null; + } + var m = this.str.slice(this.index, this.index + str.length); + return m === str; + }; + _proto._extractString = function _extractString(str) { + if (this._matches(str)) { + this.forwardN(str.length); + return str; + } + return null; + }; + _proto._extractUntil = function _extractUntil(charString) { + // Extract all non-matching chars, with the default matching set + // to everything + return this._extractMatching(true, charString || ''); + }; + _proto._extract = function _extract(charString) { + // Extract all matching chars (no default, so charString must be + // explicit) + return this._extractMatching(false, charString); + }; + _proto._extractMatching = function _extractMatching(breakOnMatch, charString) { + // Pull out characters until a breaking char is hit. + // If breakOnMatch is false, a non-matching char stops it. + // If breakOnMatch is true, a matching char stops it. + + if (this.isFinished()) { + return null; + } + var first = charString.indexOf(this.current()); + + // Only proceed if the first character doesn't meet our condition + if (breakOnMatch && first === -1 || !breakOnMatch && first !== -1) { + var t = this.current(); + this.forward(); + + // And pull out all the chars one at a time until we hit a + // breaking char + var idx = charString.indexOf(this.current()); + while ((breakOnMatch && idx === -1 || !breakOnMatch && idx !== -1) && !this.isFinished()) { + t += this.current(); + this.forward(); + idx = charString.indexOf(this.current()); + } + return t; + } + return ''; + }; + _proto._extractRegex = function _extractRegex(regex) { + var matches = this.currentStr().match(regex); + if (!matches) { + return null; + } + + // Move forward whatever was matched + this.forwardN(matches[0].length); + return matches; + }; + _proto.isFinished = function isFinished() { + return this.index >= this.len; + }; + _proto.forwardN = function forwardN(n) { + for (var i = 0; i < n; i++) { + this.forward(); + } + }; + _proto.forward = function forward() { + this.index++; + if (this.previous() === '\n') { + this.lineno++; + this.colno = 0; + } else { + this.colno++; + } + }; + _proto.backN = function backN(n) { + for (var i = 0; i < n; i++) { + this.back(); + } + }; + _proto.back = function back() { + this.index--; + if (this.current() === '\n') { + this.lineno--; + var idx = this.src.lastIndexOf('\n', this.index - 1); + if (idx === -1) { + this.colno = this.index; + } else { + this.colno = this.index - idx; + } + } else { + this.colno--; + } + } + + // current returns current character + ; + _proto.current = function current() { + if (!this.isFinished()) { + return this.str.charAt(this.index); + } + return ''; + } + + // currentStr returns what's left of the unparsed string + ; + _proto.currentStr = function currentStr() { + if (!this.isFinished()) { + return this.str.substr(this.index); + } + return ''; + }; + _proto.previous = function previous() { + return this.str.charAt(this.index - 1); + }; + return Tokenizer; +}(); +module.exports = { + lex: function lex(src, opts) { + return new Tokenizer(src, opts); + }, + TOKEN_STRING: TOKEN_STRING, + TOKEN_WHITESPACE: TOKEN_WHITESPACE, + TOKEN_DATA: TOKEN_DATA, + TOKEN_BLOCK_START: TOKEN_BLOCK_START, + TOKEN_BLOCK_END: TOKEN_BLOCK_END, + TOKEN_VARIABLE_START: TOKEN_VARIABLE_START, + TOKEN_VARIABLE_END: TOKEN_VARIABLE_END, + TOKEN_COMMENT: TOKEN_COMMENT, + TOKEN_LEFT_PAREN: TOKEN_LEFT_PAREN, + TOKEN_RIGHT_PAREN: TOKEN_RIGHT_PAREN, + TOKEN_LEFT_BRACKET: TOKEN_LEFT_BRACKET, + TOKEN_RIGHT_BRACKET: TOKEN_RIGHT_BRACKET, + TOKEN_LEFT_CURLY: TOKEN_LEFT_CURLY, + TOKEN_RIGHT_CURLY: TOKEN_RIGHT_CURLY, + TOKEN_OPERATOR: TOKEN_OPERATOR, + TOKEN_COMMA: TOKEN_COMMA, + TOKEN_COLON: TOKEN_COLON, + TOKEN_TILDE: TOKEN_TILDE, + TOKEN_PIPE: TOKEN_PIPE, + TOKEN_INT: TOKEN_INT, + TOKEN_FLOAT: TOKEN_FLOAT, + TOKEN_BOOLEAN: TOKEN_BOOLEAN, + TOKEN_NONE: TOKEN_NONE, + TOKEN_SYMBOL: TOKEN_SYMBOL, + TOKEN_SPECIAL: TOKEN_SPECIAL, + TOKEN_REGEX: TOKEN_REGEX +};
\ No newline at end of file diff --git a/node_modules/nunjucks/src/lib.js b/node_modules/nunjucks/src/lib.js new file mode 100644 index 0000000..352acb5 --- /dev/null +++ b/node_modules/nunjucks/src/lib.js @@ -0,0 +1,325 @@ +'use strict'; + +var ArrayProto = Array.prototype; +var ObjProto = Object.prototype; +var escapeMap = { + '&': '&', + '"': '"', + '\'': ''', + '<': '<', + '>': '>', + '\\': '\' +}; +var escapeRegex = /[&"'<>\\]/g; +var _exports = module.exports = {}; +function hasOwnProp(obj, k) { + return ObjProto.hasOwnProperty.call(obj, k); +} +_exports.hasOwnProp = hasOwnProp; +function lookupEscape(ch) { + return escapeMap[ch]; +} +function _prettifyError(path, withInternals, err) { + if (!err.Update) { + // not one of ours, cast it + err = new _exports.TemplateError(err); + } + err.Update(path); + + // Unless they marked the dev flag, show them a trace from here + if (!withInternals) { + var old = err; + err = new Error(old.message); + err.name = old.name; + } + return err; +} +_exports._prettifyError = _prettifyError; +function TemplateError(message, lineno, colno) { + var err; + var cause; + if (message instanceof Error) { + cause = message; + message = cause.name + ": " + cause.message; + } + if (Object.setPrototypeOf) { + err = new Error(message); + Object.setPrototypeOf(err, TemplateError.prototype); + } else { + err = this; + Object.defineProperty(err, 'message', { + enumerable: false, + writable: true, + value: message + }); + } + Object.defineProperty(err, 'name', { + value: 'Template render error' + }); + if (Error.captureStackTrace) { + Error.captureStackTrace(err, this.constructor); + } + var getStack; + if (cause) { + var stackDescriptor = Object.getOwnPropertyDescriptor(cause, 'stack'); + getStack = stackDescriptor && (stackDescriptor.get || function () { + return stackDescriptor.value; + }); + if (!getStack) { + getStack = function getStack() { + return cause.stack; + }; + } + } else { + var stack = new Error(message).stack; + getStack = function getStack() { + return stack; + }; + } + Object.defineProperty(err, 'stack', { + get: function get() { + return getStack.call(err); + } + }); + Object.defineProperty(err, 'cause', { + value: cause + }); + err.lineno = lineno; + err.colno = colno; + err.firstUpdate = true; + err.Update = function Update(path) { + var msg = '(' + (path || 'unknown path') + ')'; + + // only show lineno + colno next to path of template + // where error occurred + if (this.firstUpdate) { + if (this.lineno && this.colno) { + msg += " [Line " + this.lineno + ", Column " + this.colno + "]"; + } else if (this.lineno) { + msg += " [Line " + this.lineno + "]"; + } + } + msg += '\n '; + if (this.firstUpdate) { + msg += ' '; + } + this.message = msg + (this.message || ''); + this.firstUpdate = false; + return this; + }; + return err; +} +if (Object.setPrototypeOf) { + Object.setPrototypeOf(TemplateError.prototype, Error.prototype); +} else { + TemplateError.prototype = Object.create(Error.prototype, { + constructor: { + value: TemplateError + } + }); +} +_exports.TemplateError = TemplateError; +function escape(val) { + return val.replace(escapeRegex, lookupEscape); +} +_exports.escape = escape; +function isFunction(obj) { + return ObjProto.toString.call(obj) === '[object Function]'; +} +_exports.isFunction = isFunction; +function isArray(obj) { + return ObjProto.toString.call(obj) === '[object Array]'; +} +_exports.isArray = isArray; +function isString(obj) { + return ObjProto.toString.call(obj) === '[object String]'; +} +_exports.isString = isString; +function isObject(obj) { + return ObjProto.toString.call(obj) === '[object Object]'; +} +_exports.isObject = isObject; + +/** + * @param {string|number} attr + * @returns {(string|number)[]} + * @private + */ +function _prepareAttributeParts(attr) { + if (!attr) { + return []; + } + if (typeof attr === 'string') { + return attr.split('.'); + } + return [attr]; +} + +/** + * @param {string} attribute Attribute value. Dots allowed. + * @returns {function(Object): *} + */ +function getAttrGetter(attribute) { + var parts = _prepareAttributeParts(attribute); + return function attrGetter(item) { + var _item = item; + for (var i = 0; i < parts.length; i++) { + var part = parts[i]; + + // If item is not an object, and we still got parts to handle, it means + // that something goes wrong. Just roll out to undefined in that case. + if (hasOwnProp(_item, part)) { + _item = _item[part]; + } else { + return undefined; + } + } + return _item; + }; +} +_exports.getAttrGetter = getAttrGetter; +function groupBy(obj, val, throwOnUndefined) { + var result = {}; + var iterator = isFunction(val) ? val : getAttrGetter(val); + for (var i = 0; i < obj.length; i++) { + var value = obj[i]; + var key = iterator(value, i); + if (key === undefined && throwOnUndefined === true) { + throw new TypeError("groupby: attribute \"" + val + "\" resolved to undefined"); + } + (result[key] || (result[key] = [])).push(value); + } + return result; +} +_exports.groupBy = groupBy; +function toArray(obj) { + return Array.prototype.slice.call(obj); +} +_exports.toArray = toArray; +function without(array) { + var result = []; + if (!array) { + return result; + } + var length = array.length; + var contains = toArray(arguments).slice(1); + var index = -1; + while (++index < length) { + if (indexOf(contains, array[index]) === -1) { + result.push(array[index]); + } + } + return result; +} +_exports.without = without; +function repeat(char_, n) { + var str = ''; + for (var i = 0; i < n; i++) { + str += char_; + } + return str; +} +_exports.repeat = repeat; +function each(obj, func, context) { + if (obj == null) { + return; + } + if (ArrayProto.forEach && obj.forEach === ArrayProto.forEach) { + obj.forEach(func, context); + } else if (obj.length === +obj.length) { + for (var i = 0, l = obj.length; i < l; i++) { + func.call(context, obj[i], i, obj); + } + } +} +_exports.each = each; +function map(obj, func) { + var results = []; + if (obj == null) { + return results; + } + if (ArrayProto.map && obj.map === ArrayProto.map) { + return obj.map(func); + } + for (var i = 0; i < obj.length; i++) { + results[results.length] = func(obj[i], i); + } + if (obj.length === +obj.length) { + results.length = obj.length; + } + return results; +} +_exports.map = map; +function asyncIter(arr, iter, cb) { + var i = -1; + function next() { + i++; + if (i < arr.length) { + iter(arr[i], i, next, cb); + } else { + cb(); + } + } + next(); +} +_exports.asyncIter = asyncIter; +function asyncFor(obj, iter, cb) { + var keys = keys_(obj || {}); + var len = keys.length; + var i = -1; + function next() { + i++; + var k = keys[i]; + if (i < len) { + iter(k, obj[k], i, len, next); + } else { + cb(); + } + } + next(); +} +_exports.asyncFor = asyncFor; +function indexOf(arr, searchElement, fromIndex) { + return Array.prototype.indexOf.call(arr || [], searchElement, fromIndex); +} +_exports.indexOf = indexOf; +function keys_(obj) { + /* eslint-disable no-restricted-syntax */ + var arr = []; + for (var k in obj) { + if (hasOwnProp(obj, k)) { + arr.push(k); + } + } + return arr; +} +_exports.keys = keys_; +function _entries(obj) { + return keys_(obj).map(function (k) { + return [k, obj[k]]; + }); +} +_exports._entries = _entries; +function _values(obj) { + return keys_(obj).map(function (k) { + return obj[k]; + }); +} +_exports._values = _values; +function extend(obj1, obj2) { + obj1 = obj1 || {}; + keys_(obj2).forEach(function (k) { + obj1[k] = obj2[k]; + }); + return obj1; +} +_exports._assign = _exports.extend = extend; +function inOperator(key, val) { + if (isArray(val) || isString(val)) { + return val.indexOf(key) !== -1; + } else if (isObject(val)) { + return key in val; + } + throw new Error('Cannot use "in" operator to search for "' + key + '" in unexpected types.'); +} +_exports.inOperator = inOperator;
\ No newline at end of file diff --git a/node_modules/nunjucks/src/loader.js b/node_modules/nunjucks/src/loader.js new file mode 100644 index 0000000..a7dc277 --- /dev/null +++ b/node_modules/nunjucks/src/loader.js @@ -0,0 +1,21 @@ +'use strict'; + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +var path = require('path'); +var _require = require('./object'), + EmitterObj = _require.EmitterObj; +module.exports = /*#__PURE__*/function (_EmitterObj) { + _inheritsLoose(Loader, _EmitterObj); + function Loader() { + return _EmitterObj.apply(this, arguments) || this; + } + var _proto = Loader.prototype; + _proto.resolve = function resolve(from, to) { + return path.resolve(path.dirname(from), to); + }; + _proto.isRelative = function isRelative(filename) { + return filename.indexOf('./') === 0 || filename.indexOf('../') === 0; + }; + return Loader; +}(EmitterObj);
\ No newline at end of file diff --git a/node_modules/nunjucks/src/loaders.js b/node_modules/nunjucks/src/loaders.js new file mode 100644 index 0000000..7e57f29 --- /dev/null +++ b/node_modules/nunjucks/src/loaders.js @@ -0,0 +1,5 @@ +"use strict"; + +// This file will automatically be rewired to web-loader.js when +// building for the browser +module.exports = require('./node-loaders');
\ No newline at end of file diff --git a/node_modules/nunjucks/src/node-loaders.js b/node_modules/nunjucks/src/node-loaders.js new file mode 100644 index 0000000..0e8f548 --- /dev/null +++ b/node_modules/nunjucks/src/node-loaders.js @@ -0,0 +1,139 @@ +/* eslint-disable no-console */ + +'use strict'; + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +var fs = require('fs'); +var path = require('path'); +var Loader = require('./loader'); +var _require = require('./precompiled-loader.js'), + PrecompiledLoader = _require.PrecompiledLoader; +var chokidar; +var FileSystemLoader = /*#__PURE__*/function (_Loader) { + _inheritsLoose(FileSystemLoader, _Loader); + function FileSystemLoader(searchPaths, opts) { + var _this; + _this = _Loader.call(this) || this; + if (typeof opts === 'boolean') { + console.log('[nunjucks] Warning: you passed a boolean as the second ' + 'argument to FileSystemLoader, but it now takes an options ' + 'object. See http://mozilla.github.io/nunjucks/api.html#filesystemloader'); + } + opts = opts || {}; + _this.pathsToNames = {}; + _this.noCache = !!opts.noCache; + if (searchPaths) { + searchPaths = Array.isArray(searchPaths) ? searchPaths : [searchPaths]; + // For windows, convert to forward slashes + _this.searchPaths = searchPaths.map(path.normalize); + } else { + _this.searchPaths = ['.']; + } + if (opts.watch) { + // Watch all the templates in the paths and fire an event when + // they change + try { + chokidar = require('chokidar'); // eslint-disable-line global-require + } catch (e) { + throw new Error('watch requires chokidar to be installed'); + } + var paths = _this.searchPaths.filter(fs.existsSync); + var watcher = chokidar.watch(paths); + watcher.on('all', function (event, fullname) { + fullname = path.resolve(fullname); + if (event === 'change' && fullname in _this.pathsToNames) { + _this.emit('update', _this.pathsToNames[fullname], fullname); + } + }); + watcher.on('error', function (error) { + console.log('Watcher error: ' + error); + }); + } + return _this; + } + var _proto = FileSystemLoader.prototype; + _proto.getSource = function getSource(name) { + var fullpath = null; + var paths = this.searchPaths; + for (var i = 0; i < paths.length; i++) { + var basePath = path.resolve(paths[i]); + var p = path.resolve(paths[i], name); + + // Only allow the current directory and anything + // underneath it to be searched + if (p.indexOf(basePath) === 0 && fs.existsSync(p)) { + fullpath = p; + break; + } + } + if (!fullpath) { + return null; + } + this.pathsToNames[fullpath] = name; + var source = { + src: fs.readFileSync(fullpath, 'utf-8'), + path: fullpath, + noCache: this.noCache + }; + this.emit('load', name, source); + return source; + }; + return FileSystemLoader; +}(Loader); +var NodeResolveLoader = /*#__PURE__*/function (_Loader2) { + _inheritsLoose(NodeResolveLoader, _Loader2); + function NodeResolveLoader(opts) { + var _this2; + _this2 = _Loader2.call(this) || this; + opts = opts || {}; + _this2.pathsToNames = {}; + _this2.noCache = !!opts.noCache; + if (opts.watch) { + try { + chokidar = require('chokidar'); // eslint-disable-line global-require + } catch (e) { + throw new Error('watch requires chokidar to be installed'); + } + _this2.watcher = chokidar.watch(); + _this2.watcher.on('change', function (fullname) { + _this2.emit('update', _this2.pathsToNames[fullname], fullname); + }); + _this2.watcher.on('error', function (error) { + console.log('Watcher error: ' + error); + }); + _this2.on('load', function (name, source) { + _this2.watcher.add(source.path); + }); + } + return _this2; + } + var _proto2 = NodeResolveLoader.prototype; + _proto2.getSource = function getSource(name) { + // Don't allow file-system traversal + if (/^\.?\.?(\/|\\)/.test(name)) { + return null; + } + if (/^[A-Z]:/.test(name)) { + return null; + } + var fullpath; + try { + fullpath = require.resolve(name); + } catch (e) { + return null; + } + this.pathsToNames[fullpath] = name; + var source = { + src: fs.readFileSync(fullpath, 'utf-8'), + path: fullpath, + noCache: this.noCache + }; + this.emit('load', name, source); + return source; + }; + return NodeResolveLoader; +}(Loader); +module.exports = { + FileSystemLoader: FileSystemLoader, + PrecompiledLoader: PrecompiledLoader, + NodeResolveLoader: NodeResolveLoader +};
\ No newline at end of file diff --git a/node_modules/nunjucks/src/nodes.js b/node_modules/nunjucks/src/nodes.js new file mode 100644 index 0000000..447f350 --- /dev/null +++ b/node_modules/nunjucks/src/nodes.js @@ -0,0 +1,350 @@ +'use strict'; + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } +function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } +function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +var _require = require('./object'), + Obj = _require.Obj; +function traverseAndCheck(obj, type, results) { + if (obj instanceof type) { + results.push(obj); + } + if (obj instanceof Node) { + obj.findAll(type, results); + } +} +var Node = /*#__PURE__*/function (_Obj) { + _inheritsLoose(Node, _Obj); + function Node() { + return _Obj.apply(this, arguments) || this; + } + var _proto = Node.prototype; + _proto.init = function init(lineno, colno) { + var _arguments = arguments, + _this = this; + for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { + args[_key - 2] = arguments[_key]; + } + this.lineno = lineno; + this.colno = colno; + this.fields.forEach(function (field, i) { + // The first two args are line/col numbers, so offset by 2 + var val = _arguments[i + 2]; + + // Fields should never be undefined, but null. It makes + // testing easier to normalize values. + if (val === undefined) { + val = null; + } + _this[field] = val; + }); + }; + _proto.findAll = function findAll(type, results) { + var _this2 = this; + results = results || []; + if (this instanceof NodeList) { + this.children.forEach(function (child) { + return traverseAndCheck(child, type, results); + }); + } else { + this.fields.forEach(function (field) { + return traverseAndCheck(_this2[field], type, results); + }); + } + return results; + }; + _proto.iterFields = function iterFields(func) { + var _this3 = this; + this.fields.forEach(function (field) { + func(_this3[field], field); + }); + }; + return Node; +}(Obj); // Abstract nodes +var Value = /*#__PURE__*/function (_Node) { + _inheritsLoose(Value, _Node); + function Value() { + return _Node.apply(this, arguments) || this; + } + _createClass(Value, [{ + key: "typename", + get: function get() { + return 'Value'; + } + }, { + key: "fields", + get: function get() { + return ['value']; + } + }]); + return Value; +}(Node); // Concrete nodes +var NodeList = /*#__PURE__*/function (_Node2) { + _inheritsLoose(NodeList, _Node2); + function NodeList() { + return _Node2.apply(this, arguments) || this; + } + var _proto2 = NodeList.prototype; + _proto2.init = function init(lineno, colno, nodes) { + _Node2.prototype.init.call(this, lineno, colno, nodes || []); + }; + _proto2.addChild = function addChild(node) { + this.children.push(node); + }; + _createClass(NodeList, [{ + key: "typename", + get: function get() { + return 'NodeList'; + } + }, { + key: "fields", + get: function get() { + return ['children']; + } + }]); + return NodeList; +}(Node); +var Root = NodeList.extend('Root'); +var Literal = Value.extend('Literal'); +var _Symbol = Value.extend('Symbol'); +var Group = NodeList.extend('Group'); +var ArrayNode = NodeList.extend('Array'); +var Pair = Node.extend('Pair', { + fields: ['key', 'value'] +}); +var Dict = NodeList.extend('Dict'); +var LookupVal = Node.extend('LookupVal', { + fields: ['target', 'val'] +}); +var If = Node.extend('If', { + fields: ['cond', 'body', 'else_'] +}); +var IfAsync = If.extend('IfAsync'); +var InlineIf = Node.extend('InlineIf', { + fields: ['cond', 'body', 'else_'] +}); +var For = Node.extend('For', { + fields: ['arr', 'name', 'body', 'else_'] +}); +var AsyncEach = For.extend('AsyncEach'); +var AsyncAll = For.extend('AsyncAll'); +var Macro = Node.extend('Macro', { + fields: ['name', 'args', 'body'] +}); +var Caller = Macro.extend('Caller'); +var Import = Node.extend('Import', { + fields: ['template', 'target', 'withContext'] +}); +var FromImport = /*#__PURE__*/function (_Node3) { + _inheritsLoose(FromImport, _Node3); + function FromImport() { + return _Node3.apply(this, arguments) || this; + } + var _proto3 = FromImport.prototype; + _proto3.init = function init(lineno, colno, template, names, withContext) { + _Node3.prototype.init.call(this, lineno, colno, template, names || new NodeList(), withContext); + }; + _createClass(FromImport, [{ + key: "typename", + get: function get() { + return 'FromImport'; + } + }, { + key: "fields", + get: function get() { + return ['template', 'names', 'withContext']; + } + }]); + return FromImport; +}(Node); +var FunCall = Node.extend('FunCall', { + fields: ['name', 'args'] +}); +var Filter = FunCall.extend('Filter'); +var FilterAsync = Filter.extend('FilterAsync', { + fields: ['name', 'args', 'symbol'] +}); +var KeywordArgs = Dict.extend('KeywordArgs'); +var Block = Node.extend('Block', { + fields: ['name', 'body'] +}); +var Super = Node.extend('Super', { + fields: ['blockName', 'symbol'] +}); +var TemplateRef = Node.extend('TemplateRef', { + fields: ['template'] +}); +var Extends = TemplateRef.extend('Extends'); +var Include = Node.extend('Include', { + fields: ['template', 'ignoreMissing'] +}); +var Set = Node.extend('Set', { + fields: ['targets', 'value'] +}); +var Switch = Node.extend('Switch', { + fields: ['expr', 'cases', 'default'] +}); +var Case = Node.extend('Case', { + fields: ['cond', 'body'] +}); +var Output = NodeList.extend('Output'); +var Capture = Node.extend('Capture', { + fields: ['body'] +}); +var TemplateData = Literal.extend('TemplateData'); +var UnaryOp = Node.extend('UnaryOp', { + fields: ['target'] +}); +var BinOp = Node.extend('BinOp', { + fields: ['left', 'right'] +}); +var In = BinOp.extend('In'); +var Is = BinOp.extend('Is'); +var Or = BinOp.extend('Or'); +var And = BinOp.extend('And'); +var Not = UnaryOp.extend('Not'); +var Add = BinOp.extend('Add'); +var Concat = BinOp.extend('Concat'); +var Sub = BinOp.extend('Sub'); +var Mul = BinOp.extend('Mul'); +var Div = BinOp.extend('Div'); +var FloorDiv = BinOp.extend('FloorDiv'); +var Mod = BinOp.extend('Mod'); +var Pow = BinOp.extend('Pow'); +var Neg = UnaryOp.extend('Neg'); +var Pos = UnaryOp.extend('Pos'); +var Compare = Node.extend('Compare', { + fields: ['expr', 'ops'] +}); +var CompareOperand = Node.extend('CompareOperand', { + fields: ['expr', 'type'] +}); +var CallExtension = Node.extend('CallExtension', { + init: function init(ext, prop, args, contentArgs) { + this.parent(); + this.extName = ext.__name || ext; + this.prop = prop; + this.args = args || new NodeList(); + this.contentArgs = contentArgs || []; + this.autoescape = ext.autoescape; + }, + fields: ['extName', 'prop', 'args', 'contentArgs'] +}); +var CallExtensionAsync = CallExtension.extend('CallExtensionAsync'); + +// This is hacky, but this is just a debugging function anyway +function print(str, indent, inline) { + var lines = str.split('\n'); + lines.forEach(function (line, i) { + if (line && (inline && i > 0 || !inline)) { + process.stdout.write(' '.repeat(indent)); + } + var nl = i === lines.length - 1 ? '' : '\n'; + process.stdout.write("" + line + nl); + }); +} + +// Print the AST in a nicely formatted tree format for debuggin +function printNodes(node, indent) { + indent = indent || 0; + print(node.typename + ': ', indent); + if (node instanceof NodeList) { + print('\n'); + node.children.forEach(function (n) { + printNodes(n, indent + 2); + }); + } else if (node instanceof CallExtension) { + print(node.extName + "." + node.prop + "\n"); + if (node.args) { + printNodes(node.args, indent + 2); + } + if (node.contentArgs) { + node.contentArgs.forEach(function (n) { + printNodes(n, indent + 2); + }); + } + } else { + var nodes = []; + var props = null; + node.iterFields(function (val, fieldName) { + if (val instanceof Node) { + nodes.push([fieldName, val]); + } else { + props = props || {}; + props[fieldName] = val; + } + }); + if (props) { + print(JSON.stringify(props, null, 2) + '\n', null, true); + } else { + print('\n'); + } + nodes.forEach(function (_ref) { + var fieldName = _ref[0], + n = _ref[1]; + print("[" + fieldName + "] =>", indent + 2); + printNodes(n, indent + 4); + }); + } +} +module.exports = { + Node: Node, + Root: Root, + NodeList: NodeList, + Value: Value, + Literal: Literal, + Symbol: _Symbol, + Group: Group, + Array: ArrayNode, + Pair: Pair, + Dict: Dict, + Output: Output, + Capture: Capture, + TemplateData: TemplateData, + If: If, + IfAsync: IfAsync, + InlineIf: InlineIf, + For: For, + AsyncEach: AsyncEach, + AsyncAll: AsyncAll, + Macro: Macro, + Caller: Caller, + Import: Import, + FromImport: FromImport, + FunCall: FunCall, + Filter: Filter, + FilterAsync: FilterAsync, + KeywordArgs: KeywordArgs, + Block: Block, + Super: Super, + Extends: Extends, + Include: Include, + Set: Set, + Switch: Switch, + Case: Case, + LookupVal: LookupVal, + BinOp: BinOp, + In: In, + Is: Is, + Or: Or, + And: And, + Not: Not, + Add: Add, + Concat: Concat, + Sub: Sub, + Mul: Mul, + Div: Div, + FloorDiv: FloorDiv, + Mod: Mod, + Pow: Pow, + Neg: Neg, + Pos: Pos, + Compare: Compare, + CompareOperand: CompareOperand, + CallExtension: CallExtension, + CallExtensionAsync: CallExtensionAsync, + printNodes: printNodes +};
\ No newline at end of file diff --git a/node_modules/nunjucks/src/object.js b/node_modules/nunjucks/src/object.js new file mode 100644 index 0000000..773e818 --- /dev/null +++ b/node_modules/nunjucks/src/object.js @@ -0,0 +1,100 @@ +'use strict'; + +// A simple class system, more documentation to come +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } +function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } +function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +var EventEmitter = require('events'); +var lib = require('./lib'); +function parentWrap(parent, prop) { + if (typeof parent !== 'function' || typeof prop !== 'function') { + return prop; + } + return function wrap() { + // Save the current parent method + var tmp = this.parent; + + // Set parent to the previous method, call, and restore + this.parent = parent; + var res = prop.apply(this, arguments); + this.parent = tmp; + return res; + }; +} +function extendClass(cls, name, props) { + props = props || {}; + lib.keys(props).forEach(function (k) { + props[k] = parentWrap(cls.prototype[k], props[k]); + }); + var subclass = /*#__PURE__*/function (_cls) { + _inheritsLoose(subclass, _cls); + function subclass() { + return _cls.apply(this, arguments) || this; + } + _createClass(subclass, [{ + key: "typename", + get: function get() { + return name; + } + }]); + return subclass; + }(cls); + lib._assign(subclass.prototype, props); + return subclass; +} +var Obj = /*#__PURE__*/function () { + function Obj() { + // Unfortunately necessary for backwards compatibility + this.init.apply(this, arguments); + } + var _proto = Obj.prototype; + _proto.init = function init() {}; + Obj.extend = function extend(name, props) { + if (typeof name === 'object') { + props = name; + name = 'anonymous'; + } + return extendClass(this, name, props); + }; + _createClass(Obj, [{ + key: "typename", + get: function get() { + return this.constructor.name; + } + }]); + return Obj; +}(); +var EmitterObj = /*#__PURE__*/function (_EventEmitter) { + _inheritsLoose(EmitterObj, _EventEmitter); + function EmitterObj() { + var _this2; + var _this; + _this = _EventEmitter.call(this) || this; + // Unfortunately necessary for backwards compatibility + (_this2 = _this).init.apply(_this2, arguments); + return _this; + } + var _proto2 = EmitterObj.prototype; + _proto2.init = function init() {}; + EmitterObj.extend = function extend(name, props) { + if (typeof name === 'object') { + props = name; + name = 'anonymous'; + } + return extendClass(this, name, props); + }; + _createClass(EmitterObj, [{ + key: "typename", + get: function get() { + return this.constructor.name; + } + }]); + return EmitterObj; +}(EventEmitter); +module.exports = { + Obj: Obj, + EmitterObj: EmitterObj +};
\ No newline at end of file diff --git a/node_modules/nunjucks/src/parser.js b/node_modules/nunjucks/src/parser.js new file mode 100644 index 0000000..87bab7a --- /dev/null +++ b/node_modules/nunjucks/src/parser.js @@ -0,0 +1,1028 @@ +'use strict'; + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +var lexer = require('./lexer'); +var nodes = require('./nodes'); +var Obj = require('./object').Obj; +var lib = require('./lib'); +var Parser = /*#__PURE__*/function (_Obj) { + _inheritsLoose(Parser, _Obj); + function Parser() { + return _Obj.apply(this, arguments) || this; + } + var _proto = Parser.prototype; + _proto.init = function init(tokens) { + this.tokens = tokens; + this.peeked = null; + this.breakOnBlocks = null; + this.dropLeadingWhitespace = false; + this.extensions = []; + }; + _proto.nextToken = function nextToken(withWhitespace) { + var tok; + if (this.peeked) { + if (!withWhitespace && this.peeked.type === lexer.TOKEN_WHITESPACE) { + this.peeked = null; + } else { + tok = this.peeked; + this.peeked = null; + return tok; + } + } + tok = this.tokens.nextToken(); + if (!withWhitespace) { + while (tok && tok.type === lexer.TOKEN_WHITESPACE) { + tok = this.tokens.nextToken(); + } + } + return tok; + }; + _proto.peekToken = function peekToken() { + this.peeked = this.peeked || this.nextToken(); + return this.peeked; + }; + _proto.pushToken = function pushToken(tok) { + if (this.peeked) { + throw new Error('pushToken: can only push one token on between reads'); + } + this.peeked = tok; + }; + _proto.error = function error(msg, lineno, colno) { + if (lineno === undefined || colno === undefined) { + var tok = this.peekToken() || {}; + lineno = tok.lineno; + colno = tok.colno; + } + if (lineno !== undefined) { + lineno += 1; + } + if (colno !== undefined) { + colno += 1; + } + return new lib.TemplateError(msg, lineno, colno); + }; + _proto.fail = function fail(msg, lineno, colno) { + throw this.error(msg, lineno, colno); + }; + _proto.skip = function skip(type) { + var tok = this.nextToken(); + if (!tok || tok.type !== type) { + this.pushToken(tok); + return false; + } + return true; + }; + _proto.expect = function expect(type) { + var tok = this.nextToken(); + if (tok.type !== type) { + this.fail('expected ' + type + ', got ' + tok.type, tok.lineno, tok.colno); + } + return tok; + }; + _proto.skipValue = function skipValue(type, val) { + var tok = this.nextToken(); + if (!tok || tok.type !== type || tok.value !== val) { + this.pushToken(tok); + return false; + } + return true; + }; + _proto.skipSymbol = function skipSymbol(val) { + return this.skipValue(lexer.TOKEN_SYMBOL, val); + }; + _proto.advanceAfterBlockEnd = function advanceAfterBlockEnd(name) { + var tok; + if (!name) { + tok = this.peekToken(); + if (!tok) { + this.fail('unexpected end of file'); + } + if (tok.type !== lexer.TOKEN_SYMBOL) { + this.fail('advanceAfterBlockEnd: expected symbol token or ' + 'explicit name to be passed'); + } + name = this.nextToken().value; + } + tok = this.nextToken(); + if (tok && tok.type === lexer.TOKEN_BLOCK_END) { + if (tok.value.charAt(0) === '-') { + this.dropLeadingWhitespace = true; + } + } else { + this.fail('expected block end in ' + name + ' statement'); + } + return tok; + }; + _proto.advanceAfterVariableEnd = function advanceAfterVariableEnd() { + var tok = this.nextToken(); + if (tok && tok.type === lexer.TOKEN_VARIABLE_END) { + this.dropLeadingWhitespace = tok.value.charAt(tok.value.length - this.tokens.tags.VARIABLE_END.length - 1) === '-'; + } else { + this.pushToken(tok); + this.fail('expected variable end'); + } + }; + _proto.parseFor = function parseFor() { + var forTok = this.peekToken(); + var node; + var endBlock; + if (this.skipSymbol('for')) { + node = new nodes.For(forTok.lineno, forTok.colno); + endBlock = 'endfor'; + } else if (this.skipSymbol('asyncEach')) { + node = new nodes.AsyncEach(forTok.lineno, forTok.colno); + endBlock = 'endeach'; + } else if (this.skipSymbol('asyncAll')) { + node = new nodes.AsyncAll(forTok.lineno, forTok.colno); + endBlock = 'endall'; + } else { + this.fail('parseFor: expected for{Async}', forTok.lineno, forTok.colno); + } + node.name = this.parsePrimary(); + if (!(node.name instanceof nodes.Symbol)) { + this.fail('parseFor: variable name expected for loop'); + } + var type = this.peekToken().type; + if (type === lexer.TOKEN_COMMA) { + // key/value iteration + var key = node.name; + node.name = new nodes.Array(key.lineno, key.colno); + node.name.addChild(key); + while (this.skip(lexer.TOKEN_COMMA)) { + var prim = this.parsePrimary(); + node.name.addChild(prim); + } + } + if (!this.skipSymbol('in')) { + this.fail('parseFor: expected "in" keyword for loop', forTok.lineno, forTok.colno); + } + node.arr = this.parseExpression(); + this.advanceAfterBlockEnd(forTok.value); + node.body = this.parseUntilBlocks(endBlock, 'else'); + if (this.skipSymbol('else')) { + this.advanceAfterBlockEnd('else'); + node.else_ = this.parseUntilBlocks(endBlock); + } + this.advanceAfterBlockEnd(); + return node; + }; + _proto.parseMacro = function parseMacro() { + var macroTok = this.peekToken(); + if (!this.skipSymbol('macro')) { + this.fail('expected macro'); + } + var name = this.parsePrimary(true); + var args = this.parseSignature(); + var node = new nodes.Macro(macroTok.lineno, macroTok.colno, name, args); + this.advanceAfterBlockEnd(macroTok.value); + node.body = this.parseUntilBlocks('endmacro'); + this.advanceAfterBlockEnd(); + return node; + }; + _proto.parseCall = function parseCall() { + // a call block is parsed as a normal FunCall, but with an added + // 'caller' kwarg which is a Caller node. + var callTok = this.peekToken(); + if (!this.skipSymbol('call')) { + this.fail('expected call'); + } + var callerArgs = this.parseSignature(true) || new nodes.NodeList(); + var macroCall = this.parsePrimary(); + this.advanceAfterBlockEnd(callTok.value); + var body = this.parseUntilBlocks('endcall'); + this.advanceAfterBlockEnd(); + var callerName = new nodes.Symbol(callTok.lineno, callTok.colno, 'caller'); + var callerNode = new nodes.Caller(callTok.lineno, callTok.colno, callerName, callerArgs, body); + + // add the additional caller kwarg, adding kwargs if necessary + var args = macroCall.args.children; + if (!(args[args.length - 1] instanceof nodes.KeywordArgs)) { + args.push(new nodes.KeywordArgs()); + } + var kwargs = args[args.length - 1]; + kwargs.addChild(new nodes.Pair(callTok.lineno, callTok.colno, callerName, callerNode)); + return new nodes.Output(callTok.lineno, callTok.colno, [macroCall]); + }; + _proto.parseWithContext = function parseWithContext() { + var tok = this.peekToken(); + var withContext = null; + if (this.skipSymbol('with')) { + withContext = true; + } else if (this.skipSymbol('without')) { + withContext = false; + } + if (withContext !== null) { + if (!this.skipSymbol('context')) { + this.fail('parseFrom: expected context after with/without', tok.lineno, tok.colno); + } + } + return withContext; + }; + _proto.parseImport = function parseImport() { + var importTok = this.peekToken(); + if (!this.skipSymbol('import')) { + this.fail('parseImport: expected import', importTok.lineno, importTok.colno); + } + var template = this.parseExpression(); + if (!this.skipSymbol('as')) { + this.fail('parseImport: expected "as" keyword', importTok.lineno, importTok.colno); + } + var target = this.parseExpression(); + var withContext = this.parseWithContext(); + var node = new nodes.Import(importTok.lineno, importTok.colno, template, target, withContext); + this.advanceAfterBlockEnd(importTok.value); + return node; + }; + _proto.parseFrom = function parseFrom() { + var fromTok = this.peekToken(); + if (!this.skipSymbol('from')) { + this.fail('parseFrom: expected from'); + } + var template = this.parseExpression(); + if (!this.skipSymbol('import')) { + this.fail('parseFrom: expected import', fromTok.lineno, fromTok.colno); + } + var names = new nodes.NodeList(); + var withContext; + while (1) { + // eslint-disable-line no-constant-condition + var nextTok = this.peekToken(); + if (nextTok.type === lexer.TOKEN_BLOCK_END) { + if (!names.children.length) { + this.fail('parseFrom: Expected at least one import name', fromTok.lineno, fromTok.colno); + } + + // Since we are manually advancing past the block end, + // need to keep track of whitespace control (normally + // this is done in `advanceAfterBlockEnd` + if (nextTok.value.charAt(0) === '-') { + this.dropLeadingWhitespace = true; + } + this.nextToken(); + break; + } + if (names.children.length > 0 && !this.skip(lexer.TOKEN_COMMA)) { + this.fail('parseFrom: expected comma', fromTok.lineno, fromTok.colno); + } + var name = this.parsePrimary(); + if (name.value.charAt(0) === '_') { + this.fail('parseFrom: names starting with an underscore cannot be imported', name.lineno, name.colno); + } + if (this.skipSymbol('as')) { + var alias = this.parsePrimary(); + names.addChild(new nodes.Pair(name.lineno, name.colno, name, alias)); + } else { + names.addChild(name); + } + withContext = this.parseWithContext(); + } + return new nodes.FromImport(fromTok.lineno, fromTok.colno, template, names, withContext); + }; + _proto.parseBlock = function parseBlock() { + var tag = this.peekToken(); + if (!this.skipSymbol('block')) { + this.fail('parseBlock: expected block', tag.lineno, tag.colno); + } + var node = new nodes.Block(tag.lineno, tag.colno); + node.name = this.parsePrimary(); + if (!(node.name instanceof nodes.Symbol)) { + this.fail('parseBlock: variable name expected', tag.lineno, tag.colno); + } + this.advanceAfterBlockEnd(tag.value); + node.body = this.parseUntilBlocks('endblock'); + this.skipSymbol('endblock'); + this.skipSymbol(node.name.value); + var tok = this.peekToken(); + if (!tok) { + this.fail('parseBlock: expected endblock, got end of file'); + } + this.advanceAfterBlockEnd(tok.value); + return node; + }; + _proto.parseExtends = function parseExtends() { + var tagName = 'extends'; + var tag = this.peekToken(); + if (!this.skipSymbol(tagName)) { + this.fail('parseTemplateRef: expected ' + tagName); + } + var node = new nodes.Extends(tag.lineno, tag.colno); + node.template = this.parseExpression(); + this.advanceAfterBlockEnd(tag.value); + return node; + }; + _proto.parseInclude = function parseInclude() { + var tagName = 'include'; + var tag = this.peekToken(); + if (!this.skipSymbol(tagName)) { + this.fail('parseInclude: expected ' + tagName); + } + var node = new nodes.Include(tag.lineno, tag.colno); + node.template = this.parseExpression(); + if (this.skipSymbol('ignore') && this.skipSymbol('missing')) { + node.ignoreMissing = true; + } + this.advanceAfterBlockEnd(tag.value); + return node; + }; + _proto.parseIf = function parseIf() { + var tag = this.peekToken(); + var node; + if (this.skipSymbol('if') || this.skipSymbol('elif') || this.skipSymbol('elseif')) { + node = new nodes.If(tag.lineno, tag.colno); + } else if (this.skipSymbol('ifAsync')) { + node = new nodes.IfAsync(tag.lineno, tag.colno); + } else { + this.fail('parseIf: expected if, elif, or elseif', tag.lineno, tag.colno); + } + node.cond = this.parseExpression(); + this.advanceAfterBlockEnd(tag.value); + node.body = this.parseUntilBlocks('elif', 'elseif', 'else', 'endif'); + var tok = this.peekToken(); + switch (tok && tok.value) { + case 'elseif': + case 'elif': + node.else_ = this.parseIf(); + break; + case 'else': + this.advanceAfterBlockEnd(); + node.else_ = this.parseUntilBlocks('endif'); + this.advanceAfterBlockEnd(); + break; + case 'endif': + node.else_ = null; + this.advanceAfterBlockEnd(); + break; + default: + this.fail('parseIf: expected elif, else, or endif, got end of file'); + } + return node; + }; + _proto.parseSet = function parseSet() { + var tag = this.peekToken(); + if (!this.skipSymbol('set')) { + this.fail('parseSet: expected set', tag.lineno, tag.colno); + } + var node = new nodes.Set(tag.lineno, tag.colno, []); + var target; + while (target = this.parsePrimary()) { + node.targets.push(target); + if (!this.skip(lexer.TOKEN_COMMA)) { + break; + } + } + if (!this.skipValue(lexer.TOKEN_OPERATOR, '=')) { + if (!this.skip(lexer.TOKEN_BLOCK_END)) { + this.fail('parseSet: expected = or block end in set tag', tag.lineno, tag.colno); + } else { + node.body = new nodes.Capture(tag.lineno, tag.colno, this.parseUntilBlocks('endset')); + node.value = null; + this.advanceAfterBlockEnd(); + } + } else { + node.value = this.parseExpression(); + this.advanceAfterBlockEnd(tag.value); + } + return node; + }; + _proto.parseSwitch = function parseSwitch() { + /* + * Store the tag names in variables in case someone ever wants to + * customize this. + */ + var switchStart = 'switch'; + var switchEnd = 'endswitch'; + var caseStart = 'case'; + var caseDefault = 'default'; + + // Get the switch tag. + var tag = this.peekToken(); + + // fail early if we get some unexpected tag. + if (!this.skipSymbol(switchStart) && !this.skipSymbol(caseStart) && !this.skipSymbol(caseDefault)) { + this.fail('parseSwitch: expected "switch," "case" or "default"', tag.lineno, tag.colno); + } + + // parse the switch expression + var expr = this.parseExpression(); + + // advance until a start of a case, a default case or an endswitch. + this.advanceAfterBlockEnd(switchStart); + this.parseUntilBlocks(caseStart, caseDefault, switchEnd); + + // this is the first case. it could also be an endswitch, we'll check. + var tok = this.peekToken(); + + // create new variables for our cases and default case. + var cases = []; + var defaultCase; + + // while we're dealing with new cases nodes... + do { + // skip the start symbol and get the case expression + this.skipSymbol(caseStart); + var cond = this.parseExpression(); + this.advanceAfterBlockEnd(switchStart); + // get the body of the case node and add it to the array of cases. + var body = this.parseUntilBlocks(caseStart, caseDefault, switchEnd); + cases.push(new nodes.Case(tok.line, tok.col, cond, body)); + // get our next case + tok = this.peekToken(); + } while (tok && tok.value === caseStart); + + // we either have a default case or a switch end. + switch (tok.value) { + case caseDefault: + this.advanceAfterBlockEnd(); + defaultCase = this.parseUntilBlocks(switchEnd); + this.advanceAfterBlockEnd(); + break; + case switchEnd: + this.advanceAfterBlockEnd(); + break; + default: + // otherwise bail because EOF + this.fail('parseSwitch: expected "case," "default" or "endswitch," got EOF.'); + } + + // and return the switch node. + return new nodes.Switch(tag.lineno, tag.colno, expr, cases, defaultCase); + }; + _proto.parseStatement = function parseStatement() { + var tok = this.peekToken(); + var node; + if (tok.type !== lexer.TOKEN_SYMBOL) { + this.fail('tag name expected', tok.lineno, tok.colno); + } + if (this.breakOnBlocks && lib.indexOf(this.breakOnBlocks, tok.value) !== -1) { + return null; + } + switch (tok.value) { + case 'raw': + return this.parseRaw(); + case 'verbatim': + return this.parseRaw('verbatim'); + case 'if': + case 'ifAsync': + return this.parseIf(); + case 'for': + case 'asyncEach': + case 'asyncAll': + return this.parseFor(); + case 'block': + return this.parseBlock(); + case 'extends': + return this.parseExtends(); + case 'include': + return this.parseInclude(); + case 'set': + return this.parseSet(); + case 'macro': + return this.parseMacro(); + case 'call': + return this.parseCall(); + case 'import': + return this.parseImport(); + case 'from': + return this.parseFrom(); + case 'filter': + return this.parseFilterStatement(); + case 'switch': + return this.parseSwitch(); + default: + if (this.extensions.length) { + for (var i = 0; i < this.extensions.length; i++) { + var ext = this.extensions[i]; + if (lib.indexOf(ext.tags || [], tok.value) !== -1) { + return ext.parse(this, nodes, lexer); + } + } + } + this.fail('unknown block tag: ' + tok.value, tok.lineno, tok.colno); + } + return node; + }; + _proto.parseRaw = function parseRaw(tagName) { + tagName = tagName || 'raw'; + var endTagName = 'end' + tagName; + // Look for upcoming raw blocks (ignore all other kinds of blocks) + var rawBlockRegex = new RegExp('([\\s\\S]*?){%\\s*(' + tagName + '|' + endTagName + ')\\s*(?=%})%}'); + var rawLevel = 1; + var str = ''; + var matches = null; + + // Skip opening raw token + // Keep this token to track line and column numbers + var begun = this.advanceAfterBlockEnd(); + + // Exit when there's nothing to match + // or when we've found the matching "endraw" block + while ((matches = this.tokens._extractRegex(rawBlockRegex)) && rawLevel > 0) { + var all = matches[0]; + var pre = matches[1]; + var blockName = matches[2]; + + // Adjust rawlevel + if (blockName === tagName) { + rawLevel += 1; + } else if (blockName === endTagName) { + rawLevel -= 1; + } + + // Add to str + if (rawLevel === 0) { + // We want to exclude the last "endraw" + str += pre; + // Move tokenizer to beginning of endraw block + this.tokens.backN(all.length - pre.length); + } else { + str += all; + } + } + return new nodes.Output(begun.lineno, begun.colno, [new nodes.TemplateData(begun.lineno, begun.colno, str)]); + }; + _proto.parsePostfix = function parsePostfix(node) { + var lookup; + var tok = this.peekToken(); + while (tok) { + if (tok.type === lexer.TOKEN_LEFT_PAREN) { + // Function call + node = new nodes.FunCall(tok.lineno, tok.colno, node, this.parseSignature()); + } else if (tok.type === lexer.TOKEN_LEFT_BRACKET) { + // Reference + lookup = this.parseAggregate(); + if (lookup.children.length > 1) { + this.fail('invalid index'); + } + node = new nodes.LookupVal(tok.lineno, tok.colno, node, lookup.children[0]); + } else if (tok.type === lexer.TOKEN_OPERATOR && tok.value === '.') { + // Reference + this.nextToken(); + var val = this.nextToken(); + if (val.type !== lexer.TOKEN_SYMBOL) { + this.fail('expected name as lookup value, got ' + val.value, val.lineno, val.colno); + } + + // Make a literal string because it's not a variable + // reference + lookup = new nodes.Literal(val.lineno, val.colno, val.value); + node = new nodes.LookupVal(tok.lineno, tok.colno, node, lookup); + } else { + break; + } + tok = this.peekToken(); + } + return node; + }; + _proto.parseExpression = function parseExpression() { + var node = this.parseInlineIf(); + return node; + }; + _proto.parseInlineIf = function parseInlineIf() { + var node = this.parseOr(); + if (this.skipSymbol('if')) { + var condNode = this.parseOr(); + var bodyNode = node; + node = new nodes.InlineIf(node.lineno, node.colno); + node.body = bodyNode; + node.cond = condNode; + if (this.skipSymbol('else')) { + node.else_ = this.parseOr(); + } else { + node.else_ = null; + } + } + return node; + }; + _proto.parseOr = function parseOr() { + var node = this.parseAnd(); + while (this.skipSymbol('or')) { + var node2 = this.parseAnd(); + node = new nodes.Or(node.lineno, node.colno, node, node2); + } + return node; + }; + _proto.parseAnd = function parseAnd() { + var node = this.parseNot(); + while (this.skipSymbol('and')) { + var node2 = this.parseNot(); + node = new nodes.And(node.lineno, node.colno, node, node2); + } + return node; + }; + _proto.parseNot = function parseNot() { + var tok = this.peekToken(); + if (this.skipSymbol('not')) { + return new nodes.Not(tok.lineno, tok.colno, this.parseNot()); + } + return this.parseIn(); + }; + _proto.parseIn = function parseIn() { + var node = this.parseIs(); + while (1) { + // eslint-disable-line no-constant-condition + // check if the next token is 'not' + var tok = this.nextToken(); + if (!tok) { + break; + } + var invert = tok.type === lexer.TOKEN_SYMBOL && tok.value === 'not'; + // if it wasn't 'not', put it back + if (!invert) { + this.pushToken(tok); + } + if (this.skipSymbol('in')) { + var node2 = this.parseIs(); + node = new nodes.In(node.lineno, node.colno, node, node2); + if (invert) { + node = new nodes.Not(node.lineno, node.colno, node); + } + } else { + // if we'd found a 'not' but this wasn't an 'in', put back the 'not' + if (invert) { + this.pushToken(tok); + } + break; + } + } + return node; + } + + // I put this right after "in" in the operator precedence stack. That can + // obviously be changed to be closer to Jinja. + ; + _proto.parseIs = function parseIs() { + var node = this.parseCompare(); + // look for an is + if (this.skipSymbol('is')) { + // look for a not + var not = this.skipSymbol('not'); + // get the next node + var node2 = this.parseCompare(); + // create an Is node using the next node and the info from our Is node. + node = new nodes.Is(node.lineno, node.colno, node, node2); + // if we have a Not, create a Not node from our Is node. + if (not) { + node = new nodes.Not(node.lineno, node.colno, node); + } + } + // return the node. + return node; + }; + _proto.parseCompare = function parseCompare() { + var compareOps = ['==', '===', '!=', '!==', '<', '>', '<=', '>=']; + var expr = this.parseConcat(); + var ops = []; + while (1) { + // eslint-disable-line no-constant-condition + var tok = this.nextToken(); + if (!tok) { + break; + } else if (compareOps.indexOf(tok.value) !== -1) { + ops.push(new nodes.CompareOperand(tok.lineno, tok.colno, this.parseConcat(), tok.value)); + } else { + this.pushToken(tok); + break; + } + } + if (ops.length) { + return new nodes.Compare(ops[0].lineno, ops[0].colno, expr, ops); + } else { + return expr; + } + } + + // finds the '~' for string concatenation + ; + _proto.parseConcat = function parseConcat() { + var node = this.parseAdd(); + while (this.skipValue(lexer.TOKEN_TILDE, '~')) { + var node2 = this.parseAdd(); + node = new nodes.Concat(node.lineno, node.colno, node, node2); + } + return node; + }; + _proto.parseAdd = function parseAdd() { + var node = this.parseSub(); + while (this.skipValue(lexer.TOKEN_OPERATOR, '+')) { + var node2 = this.parseSub(); + node = new nodes.Add(node.lineno, node.colno, node, node2); + } + return node; + }; + _proto.parseSub = function parseSub() { + var node = this.parseMul(); + while (this.skipValue(lexer.TOKEN_OPERATOR, '-')) { + var node2 = this.parseMul(); + node = new nodes.Sub(node.lineno, node.colno, node, node2); + } + return node; + }; + _proto.parseMul = function parseMul() { + var node = this.parseDiv(); + while (this.skipValue(lexer.TOKEN_OPERATOR, '*')) { + var node2 = this.parseDiv(); + node = new nodes.Mul(node.lineno, node.colno, node, node2); + } + return node; + }; + _proto.parseDiv = function parseDiv() { + var node = this.parseFloorDiv(); + while (this.skipValue(lexer.TOKEN_OPERATOR, '/')) { + var node2 = this.parseFloorDiv(); + node = new nodes.Div(node.lineno, node.colno, node, node2); + } + return node; + }; + _proto.parseFloorDiv = function parseFloorDiv() { + var node = this.parseMod(); + while (this.skipValue(lexer.TOKEN_OPERATOR, '//')) { + var node2 = this.parseMod(); + node = new nodes.FloorDiv(node.lineno, node.colno, node, node2); + } + return node; + }; + _proto.parseMod = function parseMod() { + var node = this.parsePow(); + while (this.skipValue(lexer.TOKEN_OPERATOR, '%')) { + var node2 = this.parsePow(); + node = new nodes.Mod(node.lineno, node.colno, node, node2); + } + return node; + }; + _proto.parsePow = function parsePow() { + var node = this.parseUnary(); + while (this.skipValue(lexer.TOKEN_OPERATOR, '**')) { + var node2 = this.parseUnary(); + node = new nodes.Pow(node.lineno, node.colno, node, node2); + } + return node; + }; + _proto.parseUnary = function parseUnary(noFilters) { + var tok = this.peekToken(); + var node; + if (this.skipValue(lexer.TOKEN_OPERATOR, '-')) { + node = new nodes.Neg(tok.lineno, tok.colno, this.parseUnary(true)); + } else if (this.skipValue(lexer.TOKEN_OPERATOR, '+')) { + node = new nodes.Pos(tok.lineno, tok.colno, this.parseUnary(true)); + } else { + node = this.parsePrimary(); + } + if (!noFilters) { + node = this.parseFilter(node); + } + return node; + }; + _proto.parsePrimary = function parsePrimary(noPostfix) { + var tok = this.nextToken(); + var val; + var node = null; + if (!tok) { + this.fail('expected expression, got end of file'); + } else if (tok.type === lexer.TOKEN_STRING) { + val = tok.value; + } else if (tok.type === lexer.TOKEN_INT) { + val = parseInt(tok.value, 10); + } else if (tok.type === lexer.TOKEN_FLOAT) { + val = parseFloat(tok.value); + } else if (tok.type === lexer.TOKEN_BOOLEAN) { + if (tok.value === 'true') { + val = true; + } else if (tok.value === 'false') { + val = false; + } else { + this.fail('invalid boolean: ' + tok.value, tok.lineno, tok.colno); + } + } else if (tok.type === lexer.TOKEN_NONE) { + val = null; + } else if (tok.type === lexer.TOKEN_REGEX) { + val = new RegExp(tok.value.body, tok.value.flags); + } + if (val !== undefined) { + node = new nodes.Literal(tok.lineno, tok.colno, val); + } else if (tok.type === lexer.TOKEN_SYMBOL) { + node = new nodes.Symbol(tok.lineno, tok.colno, tok.value); + } else { + // See if it's an aggregate type, we need to push the + // current delimiter token back on + this.pushToken(tok); + node = this.parseAggregate(); + } + if (!noPostfix) { + node = this.parsePostfix(node); + } + if (node) { + return node; + } else { + throw this.error("unexpected token: " + tok.value, tok.lineno, tok.colno); + } + }; + _proto.parseFilterName = function parseFilterName() { + var tok = this.expect(lexer.TOKEN_SYMBOL); + var name = tok.value; + while (this.skipValue(lexer.TOKEN_OPERATOR, '.')) { + name += '.' + this.expect(lexer.TOKEN_SYMBOL).value; + } + return new nodes.Symbol(tok.lineno, tok.colno, name); + }; + _proto.parseFilterArgs = function parseFilterArgs(node) { + if (this.peekToken().type === lexer.TOKEN_LEFT_PAREN) { + // Get a FunCall node and add the parameters to the + // filter + var call = this.parsePostfix(node); + return call.args.children; + } + return []; + }; + _proto.parseFilter = function parseFilter(node) { + while (this.skip(lexer.TOKEN_PIPE)) { + var name = this.parseFilterName(); + node = new nodes.Filter(name.lineno, name.colno, name, new nodes.NodeList(name.lineno, name.colno, [node].concat(this.parseFilterArgs(node)))); + } + return node; + }; + _proto.parseFilterStatement = function parseFilterStatement() { + var filterTok = this.peekToken(); + if (!this.skipSymbol('filter')) { + this.fail('parseFilterStatement: expected filter'); + } + var name = this.parseFilterName(); + var args = this.parseFilterArgs(name); + this.advanceAfterBlockEnd(filterTok.value); + var body = new nodes.Capture(name.lineno, name.colno, this.parseUntilBlocks('endfilter')); + this.advanceAfterBlockEnd(); + var node = new nodes.Filter(name.lineno, name.colno, name, new nodes.NodeList(name.lineno, name.colno, [body].concat(args))); + return new nodes.Output(name.lineno, name.colno, [node]); + }; + _proto.parseAggregate = function parseAggregate() { + var tok = this.nextToken(); + var node; + switch (tok.type) { + case lexer.TOKEN_LEFT_PAREN: + node = new nodes.Group(tok.lineno, tok.colno); + break; + case lexer.TOKEN_LEFT_BRACKET: + node = new nodes.Array(tok.lineno, tok.colno); + break; + case lexer.TOKEN_LEFT_CURLY: + node = new nodes.Dict(tok.lineno, tok.colno); + break; + default: + return null; + } + while (1) { + // eslint-disable-line no-constant-condition + var type = this.peekToken().type; + if (type === lexer.TOKEN_RIGHT_PAREN || type === lexer.TOKEN_RIGHT_BRACKET || type === lexer.TOKEN_RIGHT_CURLY) { + this.nextToken(); + break; + } + if (node.children.length > 0) { + if (!this.skip(lexer.TOKEN_COMMA)) { + this.fail('parseAggregate: expected comma after expression', tok.lineno, tok.colno); + } + } + if (node instanceof nodes.Dict) { + // TODO: check for errors + var key = this.parsePrimary(); + + // We expect a key/value pair for dicts, separated by a + // colon + if (!this.skip(lexer.TOKEN_COLON)) { + this.fail('parseAggregate: expected colon after dict key', tok.lineno, tok.colno); + } + + // TODO: check for errors + var value = this.parseExpression(); + node.addChild(new nodes.Pair(key.lineno, key.colno, key, value)); + } else { + // TODO: check for errors + var expr = this.parseExpression(); + node.addChild(expr); + } + } + return node; + }; + _proto.parseSignature = function parseSignature(tolerant, noParens) { + var tok = this.peekToken(); + if (!noParens && tok.type !== lexer.TOKEN_LEFT_PAREN) { + if (tolerant) { + return null; + } else { + this.fail('expected arguments', tok.lineno, tok.colno); + } + } + if (tok.type === lexer.TOKEN_LEFT_PAREN) { + tok = this.nextToken(); + } + var args = new nodes.NodeList(tok.lineno, tok.colno); + var kwargs = new nodes.KeywordArgs(tok.lineno, tok.colno); + var checkComma = false; + while (1) { + // eslint-disable-line no-constant-condition + tok = this.peekToken(); + if (!noParens && tok.type === lexer.TOKEN_RIGHT_PAREN) { + this.nextToken(); + break; + } else if (noParens && tok.type === lexer.TOKEN_BLOCK_END) { + break; + } + if (checkComma && !this.skip(lexer.TOKEN_COMMA)) { + this.fail('parseSignature: expected comma after expression', tok.lineno, tok.colno); + } else { + var arg = this.parseExpression(); + if (this.skipValue(lexer.TOKEN_OPERATOR, '=')) { + kwargs.addChild(new nodes.Pair(arg.lineno, arg.colno, arg, this.parseExpression())); + } else { + args.addChild(arg); + } + } + checkComma = true; + } + if (kwargs.children.length) { + args.addChild(kwargs); + } + return args; + }; + _proto.parseUntilBlocks = function parseUntilBlocks() { + var prev = this.breakOnBlocks; + for (var _len = arguments.length, blockNames = new Array(_len), _key = 0; _key < _len; _key++) { + blockNames[_key] = arguments[_key]; + } + this.breakOnBlocks = blockNames; + var ret = this.parse(); + this.breakOnBlocks = prev; + return ret; + }; + _proto.parseNodes = function parseNodes() { + var tok; + var buf = []; + while (tok = this.nextToken()) { + if (tok.type === lexer.TOKEN_DATA) { + var data = tok.value; + var nextToken = this.peekToken(); + var nextVal = nextToken && nextToken.value; + + // If the last token has "-" we need to trim the + // leading whitespace of the data. This is marked with + // the `dropLeadingWhitespace` variable. + if (this.dropLeadingWhitespace) { + // TODO: this could be optimized (don't use regex) + data = data.replace(/^\s*/, ''); + this.dropLeadingWhitespace = false; + } + + // Same for the succeeding block start token + if (nextToken && (nextToken.type === lexer.TOKEN_BLOCK_START && nextVal.charAt(nextVal.length - 1) === '-' || nextToken.type === lexer.TOKEN_VARIABLE_START && nextVal.charAt(this.tokens.tags.VARIABLE_START.length) === '-' || nextToken.type === lexer.TOKEN_COMMENT && nextVal.charAt(this.tokens.tags.COMMENT_START.length) === '-')) { + // TODO: this could be optimized (don't use regex) + data = data.replace(/\s*$/, ''); + } + buf.push(new nodes.Output(tok.lineno, tok.colno, [new nodes.TemplateData(tok.lineno, tok.colno, data)])); + } else if (tok.type === lexer.TOKEN_BLOCK_START) { + this.dropLeadingWhitespace = false; + var n = this.parseStatement(); + if (!n) { + break; + } + buf.push(n); + } else if (tok.type === lexer.TOKEN_VARIABLE_START) { + var e = this.parseExpression(); + this.dropLeadingWhitespace = false; + this.advanceAfterVariableEnd(); + buf.push(new nodes.Output(tok.lineno, tok.colno, [e])); + } else if (tok.type === lexer.TOKEN_COMMENT) { + this.dropLeadingWhitespace = tok.value.charAt(tok.value.length - this.tokens.tags.COMMENT_END.length - 1) === '-'; + } else { + // Ignore comments, otherwise this should be an error + this.fail('Unexpected token at top-level: ' + tok.type, tok.lineno, tok.colno); + } + } + return buf; + }; + _proto.parse = function parse() { + return new nodes.NodeList(0, 0, this.parseNodes()); + }; + _proto.parseAsRoot = function parseAsRoot() { + return new nodes.Root(0, 0, this.parseNodes()); + }; + return Parser; +}(Obj); // var util = require('util'); +// var l = lexer.lex('{%- if x -%}\n hello {% endif %}'); +// var t; +// while((t = l.nextToken())) { +// console.log(util.inspect(t)); +// } +// var p = new Parser(lexer.lex('hello {% filter title %}' + +// 'Hello madam how are you' + +// '{% endfilter %}')); +// var n = p.parseAsRoot(); +// nodes.printNodes(n); +module.exports = { + parse: function parse(src, extensions, opts) { + var p = new Parser(lexer.lex(src, opts)); + if (extensions !== undefined) { + p.extensions = extensions; + } + return p.parseAsRoot(); + }, + Parser: Parser +};
\ No newline at end of file diff --git a/node_modules/nunjucks/src/precompile-global.js b/node_modules/nunjucks/src/precompile-global.js new file mode 100644 index 0000000..c99119a --- /dev/null +++ b/node_modules/nunjucks/src/precompile-global.js @@ -0,0 +1,17 @@ +'use strict'; + +function precompileGlobal(templates, opts) { + var out = ''; + opts = opts || {}; + for (var i = 0; i < templates.length; i++) { + var name = JSON.stringify(templates[i].name); + var template = templates[i].template; + out += '(function() {' + '(window.nunjucksPrecompiled = window.nunjucksPrecompiled || {})' + '[' + name + '] = (function() {\n' + template + '\n})();\n'; + if (opts.asFunction) { + out += 'return function(ctx, cb) { return nunjucks.render(' + name + ', ctx, cb); }\n'; + } + out += '})();\n'; + } + return out; +} +module.exports = precompileGlobal;
\ No newline at end of file diff --git a/node_modules/nunjucks/src/precompile.js b/node_modules/nunjucks/src/precompile.js new file mode 100644 index 0000000..14678cb --- /dev/null +++ b/node_modules/nunjucks/src/precompile.js @@ -0,0 +1,108 @@ +'use strict'; + +var fs = require('fs'); +var path = require('path'); +var _require = require('./lib'), + _prettifyError = _require._prettifyError; +var compiler = require('./compiler'); +var _require2 = require('./environment'), + Environment = _require2.Environment; +var precompileGlobal = require('./precompile-global'); +function match(filename, patterns) { + if (!Array.isArray(patterns)) { + return false; + } + return patterns.some(function (pattern) { + return filename.match(pattern); + }); +} +function precompileString(str, opts) { + opts = opts || {}; + opts.isString = true; + var env = opts.env || new Environment([]); + var wrapper = opts.wrapper || precompileGlobal; + if (!opts.name) { + throw new Error('the "name" option is required when compiling a string'); + } + return wrapper([_precompile(str, opts.name, env)], opts); +} +function precompile(input, opts) { + // The following options are available: + // + // * name: name of the template (auto-generated when compiling a directory) + // * isString: input is a string, not a file path + // * asFunction: generate a callable function + // * force: keep compiling on error + // * env: the Environment to use (gets extensions and async filters from it) + // * include: which file/folders to include (folders are auto-included, files are auto-excluded) + // * exclude: which file/folders to exclude (folders are auto-included, files are auto-excluded) + // * wrapper: function(templates, opts) {...} + // Customize the output format to store the compiled template. + // By default, templates are stored in a global variable used by the runtime. + // A custom loader will be necessary to load your custom wrapper. + + opts = opts || {}; + var env = opts.env || new Environment([]); + var wrapper = opts.wrapper || precompileGlobal; + if (opts.isString) { + return precompileString(input, opts); + } + var pathStats = fs.existsSync(input) && fs.statSync(input); + var precompiled = []; + var templates = []; + function addTemplates(dir) { + fs.readdirSync(dir).forEach(function (file) { + var filepath = path.join(dir, file); + var subpath = filepath.substr(path.join(input, '/').length); + var stat = fs.statSync(filepath); + if (stat && stat.isDirectory()) { + subpath += '/'; + if (!match(subpath, opts.exclude)) { + addTemplates(filepath); + } + } else if (match(subpath, opts.include)) { + templates.push(filepath); + } + }); + } + if (pathStats.isFile()) { + precompiled.push(_precompile(fs.readFileSync(input, 'utf-8'), opts.name || input, env)); + } else if (pathStats.isDirectory()) { + addTemplates(input); + for (var i = 0; i < templates.length; i++) { + var name = templates[i].replace(path.join(input, '/'), ''); + try { + precompiled.push(_precompile(fs.readFileSync(templates[i], 'utf-8'), name, env)); + } catch (e) { + if (opts.force) { + // Don't stop generating the output if we're + // forcing compilation. + console.error(e); // eslint-disable-line no-console + } else { + throw e; + } + } + } + } + return wrapper(precompiled, opts); +} +function _precompile(str, name, env) { + env = env || new Environment([]); + var asyncFilters = env.asyncFilters; + var extensions = env.extensionsList; + var template; + name = name.replace(/\\/g, '/'); + try { + template = compiler.compile(str, asyncFilters, extensions, name, env.opts); + } catch (err) { + throw _prettifyError(name, false, err); + } + return { + name: name, + template: template + }; +} +module.exports = { + precompile: precompile, + precompileString: precompileString +};
\ No newline at end of file diff --git a/node_modules/nunjucks/src/precompiled-loader.js b/node_modules/nunjucks/src/precompiled-loader.js new file mode 100644 index 0000000..d833c4f --- /dev/null +++ b/node_modules/nunjucks/src/precompiled-loader.js @@ -0,0 +1,31 @@ +'use strict'; + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +var Loader = require('./loader'); +var PrecompiledLoader = /*#__PURE__*/function (_Loader) { + _inheritsLoose(PrecompiledLoader, _Loader); + function PrecompiledLoader(compiledTemplates) { + var _this; + _this = _Loader.call(this) || this; + _this.precompiled = compiledTemplates || {}; + return _this; + } + var _proto = PrecompiledLoader.prototype; + _proto.getSource = function getSource(name) { + if (this.precompiled[name]) { + return { + src: { + type: 'code', + obj: this.precompiled[name] + }, + path: name + }; + } + return null; + }; + return PrecompiledLoader; +}(Loader); +module.exports = { + PrecompiledLoader: PrecompiledLoader +};
\ No newline at end of file diff --git a/node_modules/nunjucks/src/runtime.js b/node_modules/nunjucks/src/runtime.js new file mode 100644 index 0000000..36eef4d --- /dev/null +++ b/node_modules/nunjucks/src/runtime.js @@ -0,0 +1,333 @@ +'use strict'; + +var lib = require('./lib'); +var arrayFrom = Array.from; +var supportsIterators = typeof Symbol === 'function' && Symbol.iterator && typeof arrayFrom === 'function'; + +// Frames keep track of scoping both at compile-time and run-time so +// we know how to access variables. Block tags can introduce special +// variables, for example. +var Frame = /*#__PURE__*/function () { + function Frame(parent, isolateWrites) { + this.variables = Object.create(null); + this.parent = parent; + this.topLevel = false; + // if this is true, writes (set) should never propagate upwards past + // this frame to its parent (though reads may). + this.isolateWrites = isolateWrites; + } + var _proto = Frame.prototype; + _proto.set = function set(name, val, resolveUp) { + // Allow variables with dots by automatically creating the + // nested structure + var parts = name.split('.'); + var obj = this.variables; + var frame = this; + if (resolveUp) { + if (frame = this.resolve(parts[0], true)) { + frame.set(name, val); + return; + } + } + for (var i = 0; i < parts.length - 1; i++) { + var id = parts[i]; + if (!obj[id]) { + obj[id] = {}; + } + obj = obj[id]; + } + obj[parts[parts.length - 1]] = val; + }; + _proto.get = function get(name) { + var val = this.variables[name]; + if (val !== undefined) { + return val; + } + return null; + }; + _proto.lookup = function lookup(name) { + var p = this.parent; + var val = this.variables[name]; + if (val !== undefined) { + return val; + } + return p && p.lookup(name); + }; + _proto.resolve = function resolve(name, forWrite) { + var p = forWrite && this.isolateWrites ? undefined : this.parent; + var val = this.variables[name]; + if (val !== undefined) { + return this; + } + return p && p.resolve(name); + }; + _proto.push = function push(isolateWrites) { + return new Frame(this, isolateWrites); + }; + _proto.pop = function pop() { + return this.parent; + }; + return Frame; +}(); +function makeMacro(argNames, kwargNames, func) { + return function macro() { + for (var _len = arguments.length, macroArgs = new Array(_len), _key = 0; _key < _len; _key++) { + macroArgs[_key] = arguments[_key]; + } + var argCount = numArgs(macroArgs); + var args; + var kwargs = getKeywordArgs(macroArgs); + if (argCount > argNames.length) { + args = macroArgs.slice(0, argNames.length); + + // Positional arguments that should be passed in as + // keyword arguments (essentially default values) + macroArgs.slice(args.length, argCount).forEach(function (val, i) { + if (i < kwargNames.length) { + kwargs[kwargNames[i]] = val; + } + }); + args.push(kwargs); + } else if (argCount < argNames.length) { + args = macroArgs.slice(0, argCount); + for (var i = argCount; i < argNames.length; i++) { + var arg = argNames[i]; + + // Keyword arguments that should be passed as + // positional arguments, i.e. the caller explicitly + // used the name of a positional arg + args.push(kwargs[arg]); + delete kwargs[arg]; + } + args.push(kwargs); + } else { + args = macroArgs; + } + return func.apply(this, args); + }; +} +function makeKeywordArgs(obj) { + obj.__keywords = true; + return obj; +} +function isKeywordArgs(obj) { + return obj && Object.prototype.hasOwnProperty.call(obj, '__keywords'); +} +function getKeywordArgs(args) { + var len = args.length; + if (len) { + var lastArg = args[len - 1]; + if (isKeywordArgs(lastArg)) { + return lastArg; + } + } + return {}; +} +function numArgs(args) { + var len = args.length; + if (len === 0) { + return 0; + } + var lastArg = args[len - 1]; + if (isKeywordArgs(lastArg)) { + return len - 1; + } else { + return len; + } +} + +// A SafeString object indicates that the string should not be +// autoescaped. This happens magically because autoescaping only +// occurs on primitive string objects. +function SafeString(val) { + if (typeof val !== 'string') { + return val; + } + this.val = val; + this.length = val.length; +} +SafeString.prototype = Object.create(String.prototype, { + length: { + writable: true, + configurable: true, + value: 0 + } +}); +SafeString.prototype.valueOf = function valueOf() { + return this.val; +}; +SafeString.prototype.toString = function toString() { + return this.val; +}; +function copySafeness(dest, target) { + if (dest instanceof SafeString) { + return new SafeString(target); + } + return target.toString(); +} +function markSafe(val) { + var type = typeof val; + if (type === 'string') { + return new SafeString(val); + } else if (type !== 'function') { + return val; + } else { + return function wrapSafe(args) { + var ret = val.apply(this, arguments); + if (typeof ret === 'string') { + return new SafeString(ret); + } + return ret; + }; + } +} +function suppressValue(val, autoescape) { + val = val !== undefined && val !== null ? val : ''; + if (autoescape && !(val instanceof SafeString)) { + val = lib.escape(val.toString()); + } + return val; +} +function ensureDefined(val, lineno, colno) { + if (val === null || val === undefined) { + throw new lib.TemplateError('attempted to output null or undefined value', lineno + 1, colno + 1); + } + return val; +} +function memberLookup(obj, val) { + if (obj === undefined || obj === null) { + return undefined; + } + if (typeof obj[val] === 'function') { + return function () { + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + return obj[val].apply(obj, args); + }; + } + return obj[val]; +} +function callWrap(obj, name, context, args) { + if (!obj) { + throw new Error('Unable to call `' + name + '`, which is undefined or falsey'); + } else if (typeof obj !== 'function') { + throw new Error('Unable to call `' + name + '`, which is not a function'); + } + return obj.apply(context, args); +} +function contextOrFrameLookup(context, frame, name) { + var val = frame.lookup(name); + return val !== undefined ? val : context.lookup(name); +} +function handleError(error, lineno, colno) { + if (error.lineno) { + return error; + } else { + return new lib.TemplateError(error, lineno, colno); + } +} +function asyncEach(arr, dimen, iter, cb) { + if (lib.isArray(arr)) { + var len = arr.length; + lib.asyncIter(arr, function iterCallback(item, i, next) { + switch (dimen) { + case 1: + iter(item, i, len, next); + break; + case 2: + iter(item[0], item[1], i, len, next); + break; + case 3: + iter(item[0], item[1], item[2], i, len, next); + break; + default: + item.push(i, len, next); + iter.apply(this, item); + } + }, cb); + } else { + lib.asyncFor(arr, function iterCallback(key, val, i, len, next) { + iter(key, val, i, len, next); + }, cb); + } +} +function asyncAll(arr, dimen, func, cb) { + var finished = 0; + var len; + var outputArr; + function done(i, output) { + finished++; + outputArr[i] = output; + if (finished === len) { + cb(null, outputArr.join('')); + } + } + if (lib.isArray(arr)) { + len = arr.length; + outputArr = new Array(len); + if (len === 0) { + cb(null, ''); + } else { + for (var i = 0; i < arr.length; i++) { + var item = arr[i]; + switch (dimen) { + case 1: + func(item, i, len, done); + break; + case 2: + func(item[0], item[1], i, len, done); + break; + case 3: + func(item[0], item[1], item[2], i, len, done); + break; + default: + item.push(i, len, done); + func.apply(this, item); + } + } + } + } else { + var keys = lib.keys(arr || {}); + len = keys.length; + outputArr = new Array(len); + if (len === 0) { + cb(null, ''); + } else { + for (var _i = 0; _i < keys.length; _i++) { + var k = keys[_i]; + func(k, arr[k], _i, len, done); + } + } + } +} +function fromIterator(arr) { + if (typeof arr !== 'object' || arr === null || lib.isArray(arr)) { + return arr; + } else if (supportsIterators && Symbol.iterator in arr) { + return arrayFrom(arr); + } else { + return arr; + } +} +module.exports = { + Frame: Frame, + makeMacro: makeMacro, + makeKeywordArgs: makeKeywordArgs, + numArgs: numArgs, + suppressValue: suppressValue, + ensureDefined: ensureDefined, + memberLookup: memberLookup, + contextOrFrameLookup: contextOrFrameLookup, + callWrap: callWrap, + handleError: handleError, + isArray: lib.isArray, + keys: lib.keys, + SafeString: SafeString, + copySafeness: copySafeness, + markSafe: markSafe, + asyncEach: asyncEach, + asyncAll: asyncAll, + inOperator: lib.inOperator, + fromIterator: fromIterator +};
\ No newline at end of file diff --git a/node_modules/nunjucks/src/tests.js b/node_modules/nunjucks/src/tests.js new file mode 100644 index 0000000..9c6ba15 --- /dev/null +++ b/node_modules/nunjucks/src/tests.js @@ -0,0 +1,265 @@ +'use strict'; + +var SafeString = require('./runtime').SafeString; + +/** + * Returns `true` if the object is a function, otherwise `false`. + * @param { any } value + * @returns { boolean } + */ +function callable(value) { + return typeof value === 'function'; +} +exports.callable = callable; + +/** + * Returns `true` if the object is strictly not `undefined`. + * @param { any } value + * @returns { boolean } + */ +function defined(value) { + return value !== undefined; +} +exports.defined = defined; + +/** + * Returns `true` if the operand (one) is divisble by the test's argument + * (two). + * @param { number } one + * @param { number } two + * @returns { boolean } + */ +function divisibleby(one, two) { + return one % two === 0; +} +exports.divisibleby = divisibleby; + +/** + * Returns true if the string has been escaped (i.e., is a SafeString). + * @param { any } value + * @returns { boolean } + */ +function escaped(value) { + return value instanceof SafeString; +} +exports.escaped = escaped; + +/** + * Returns `true` if the arguments are strictly equal. + * @param { any } one + * @param { any } two + */ +function equalto(one, two) { + return one === two; +} +exports.equalto = equalto; + +// Aliases +exports.eq = exports.equalto; +exports.sameas = exports.equalto; + +/** + * Returns `true` if the value is evenly divisible by 2. + * @param { number } value + * @returns { boolean } + */ +function even(value) { + return value % 2 === 0; +} +exports.even = even; + +/** + * Returns `true` if the value is falsy - if I recall correctly, '', 0, false, + * undefined, NaN or null. I don't know if we should stick to the default JS + * behavior or attempt to replicate what Python believes should be falsy (i.e., + * empty arrays, empty dicts, not 0...). + * @param { any } value + * @returns { boolean } + */ +function falsy(value) { + return !value; +} +exports.falsy = falsy; + +/** + * Returns `true` if the operand (one) is greater or equal to the test's + * argument (two). + * @param { number } one + * @param { number } two + * @returns { boolean } + */ +function ge(one, two) { + return one >= two; +} +exports.ge = ge; + +/** + * Returns `true` if the operand (one) is greater than the test's argument + * (two). + * @param { number } one + * @param { number } two + * @returns { boolean } + */ +function greaterthan(one, two) { + return one > two; +} +exports.greaterthan = greaterthan; + +// alias +exports.gt = exports.greaterthan; + +/** + * Returns `true` if the operand (one) is less than or equal to the test's + * argument (two). + * @param { number } one + * @param { number } two + * @returns { boolean } + */ +function le(one, two) { + return one <= two; +} +exports.le = le; + +/** + * Returns `true` if the operand (one) is less than the test's passed argument + * (two). + * @param { number } one + * @param { number } two + * @returns { boolean } + */ +function lessthan(one, two) { + return one < two; +} +exports.lessthan = lessthan; + +// alias +exports.lt = exports.lessthan; + +/** + * Returns `true` if the string is lowercased. + * @param { string } value + * @returns { boolean } + */ +function lower(value) { + return value.toLowerCase() === value; +} +exports.lower = lower; + +/** + * Returns `true` if the operand (one) is less than or equal to the test's + * argument (two). + * @param { number } one + * @param { number } two + * @returns { boolean } + */ +function ne(one, two) { + return one !== two; +} +exports.ne = ne; + +/** + * Returns true if the value is strictly equal to `null`. + * @param { any } + * @returns { boolean } + */ +function nullTest(value) { + return value === null; +} +exports.null = nullTest; + +/** + * Returns true if value is a number. + * @param { any } + * @returns { boolean } + */ +function number(value) { + return typeof value === 'number'; +} +exports.number = number; + +/** + * Returns `true` if the value is *not* evenly divisible by 2. + * @param { number } value + * @returns { boolean } + */ +function odd(value) { + return value % 2 === 1; +} +exports.odd = odd; + +/** + * Returns `true` if the value is a string, `false` if not. + * @param { any } value + * @returns { boolean } + */ +function string(value) { + return typeof value === 'string'; +} +exports.string = string; + +/** + * Returns `true` if the value is not in the list of things considered falsy: + * '', null, undefined, 0, NaN and false. + * @param { any } value + * @returns { boolean } + */ +function truthy(value) { + return !!value; +} +exports.truthy = truthy; + +/** + * Returns `true` if the value is undefined. + * @param { any } value + * @returns { boolean } + */ +function undefinedTest(value) { + return value === undefined; +} +exports.undefined = undefinedTest; + +/** + * Returns `true` if the string is uppercased. + * @param { string } value + * @returns { boolean } + */ +function upper(value) { + return value.toUpperCase() === value; +} +exports.upper = upper; + +/** + * If ES6 features are available, returns `true` if the value implements the + * `Symbol.iterator` method. If not, it's a string or Array. + * + * Could potentially cause issues if a browser exists that has Set and Map but + * not Symbol. + * + * @param { any } value + * @returns { boolean } + */ +function iterable(value) { + if (typeof Symbol !== 'undefined') { + return !!value[Symbol.iterator]; + } else { + return Array.isArray(value) || typeof value === 'string'; + } +} +exports.iterable = iterable; + +/** + * If ES6 features are available, returns `true` if the value is an object hash + * or an ES6 Map. Otherwise just return if it's an object hash. + * @param { any } value + * @returns { boolean } + */ +function mapping(value) { + // only maps and object hashes + var bool = value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value); + if (Set) { + return bool && !(value instanceof Set); + } else { + return bool; + } +} +exports.mapping = mapping;
\ No newline at end of file diff --git a/node_modules/nunjucks/src/transformer.js b/node_modules/nunjucks/src/transformer.js new file mode 100644 index 0000000..b11e91c --- /dev/null +++ b/node_modules/nunjucks/src/transformer.js @@ -0,0 +1,166 @@ +'use strict'; + +var nodes = require('./nodes'); +var lib = require('./lib'); +var sym = 0; +function gensym() { + return 'hole_' + sym++; +} + +// copy-on-write version of map +function mapCOW(arr, func) { + var res = null; + for (var i = 0; i < arr.length; i++) { + var item = func(arr[i]); + if (item !== arr[i]) { + if (!res) { + res = arr.slice(); + } + res[i] = item; + } + } + return res || arr; +} +function walk(ast, func, depthFirst) { + if (!(ast instanceof nodes.Node)) { + return ast; + } + if (!depthFirst) { + var astT = func(ast); + if (astT && astT !== ast) { + return astT; + } + } + if (ast instanceof nodes.NodeList) { + var children = mapCOW(ast.children, function (node) { + return walk(node, func, depthFirst); + }); + if (children !== ast.children) { + ast = new nodes[ast.typename](ast.lineno, ast.colno, children); + } + } else if (ast instanceof nodes.CallExtension) { + var args = walk(ast.args, func, depthFirst); + var contentArgs = mapCOW(ast.contentArgs, function (node) { + return walk(node, func, depthFirst); + }); + if (args !== ast.args || contentArgs !== ast.contentArgs) { + ast = new nodes[ast.typename](ast.extName, ast.prop, args, contentArgs); + } + } else { + var props = ast.fields.map(function (field) { + return ast[field]; + }); + var propsT = mapCOW(props, function (prop) { + return walk(prop, func, depthFirst); + }); + if (propsT !== props) { + ast = new nodes[ast.typename](ast.lineno, ast.colno); + propsT.forEach(function (prop, i) { + ast[ast.fields[i]] = prop; + }); + } + } + return depthFirst ? func(ast) || ast : ast; +} +function depthWalk(ast, func) { + return walk(ast, func, true); +} +function _liftFilters(node, asyncFilters, prop) { + var children = []; + var walked = depthWalk(prop ? node[prop] : node, function (descNode) { + var symbol; + if (descNode instanceof nodes.Block) { + return descNode; + } else if (descNode instanceof nodes.Filter && lib.indexOf(asyncFilters, descNode.name.value) !== -1 || descNode instanceof nodes.CallExtensionAsync) { + symbol = new nodes.Symbol(descNode.lineno, descNode.colno, gensym()); + children.push(new nodes.FilterAsync(descNode.lineno, descNode.colno, descNode.name, descNode.args, symbol)); + } + return symbol; + }); + if (prop) { + node[prop] = walked; + } else { + node = walked; + } + if (children.length) { + children.push(node); + return new nodes.NodeList(node.lineno, node.colno, children); + } else { + return node; + } +} +function liftFilters(ast, asyncFilters) { + return depthWalk(ast, function (node) { + if (node instanceof nodes.Output) { + return _liftFilters(node, asyncFilters); + } else if (node instanceof nodes.Set) { + return _liftFilters(node, asyncFilters, 'value'); + } else if (node instanceof nodes.For) { + return _liftFilters(node, asyncFilters, 'arr'); + } else if (node instanceof nodes.If) { + return _liftFilters(node, asyncFilters, 'cond'); + } else if (node instanceof nodes.CallExtension) { + return _liftFilters(node, asyncFilters, 'args'); + } else { + return undefined; + } + }); +} +function liftSuper(ast) { + return walk(ast, function (blockNode) { + if (!(blockNode instanceof nodes.Block)) { + return; + } + var hasSuper = false; + var symbol = gensym(); + blockNode.body = walk(blockNode.body, function (node) { + // eslint-disable-line consistent-return + if (node instanceof nodes.FunCall && node.name.value === 'super') { + hasSuper = true; + return new nodes.Symbol(node.lineno, node.colno, symbol); + } + }); + if (hasSuper) { + blockNode.body.children.unshift(new nodes.Super(0, 0, blockNode.name, new nodes.Symbol(0, 0, symbol))); + } + }); +} +function convertStatements(ast) { + return depthWalk(ast, function (node) { + if (!(node instanceof nodes.If) && !(node instanceof nodes.For)) { + return undefined; + } + var async = false; + walk(node, function (child) { + if (child instanceof nodes.FilterAsync || child instanceof nodes.IfAsync || child instanceof nodes.AsyncEach || child instanceof nodes.AsyncAll || child instanceof nodes.CallExtensionAsync) { + async = true; + // Stop iterating by returning the node + return child; + } + return undefined; + }); + if (async) { + if (node instanceof nodes.If) { + return new nodes.IfAsync(node.lineno, node.colno, node.cond, node.body, node.else_); + } else if (node instanceof nodes.For && !(node instanceof nodes.AsyncAll)) { + return new nodes.AsyncEach(node.lineno, node.colno, node.arr, node.name, node.body, node.else_); + } + } + return undefined; + }); +} +function cps(ast, asyncFilters) { + return convertStatements(liftSuper(liftFilters(ast, asyncFilters))); +} +function transform(ast, asyncFilters) { + return cps(ast, asyncFilters || []); +} + +// var parser = require('./parser'); +// var src = 'hello {% foo %}{% endfoo %} end'; +// var ast = transform(parser.parse(src, [new FooExtension()]), ['bar']); +// nodes.printNodes(ast); + +module.exports = { + transform: transform +};
\ No newline at end of file diff --git a/node_modules/nunjucks/src/web-loaders.js b/node_modules/nunjucks/src/web-loaders.js new file mode 100644 index 0000000..ff23ca4 --- /dev/null +++ b/node_modules/nunjucks/src/web-loaders.js @@ -0,0 +1,94 @@ +'use strict'; + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +var Loader = require('./loader'); +var _require = require('./precompiled-loader.js'), + PrecompiledLoader = _require.PrecompiledLoader; +var WebLoader = /*#__PURE__*/function (_Loader) { + _inheritsLoose(WebLoader, _Loader); + function WebLoader(baseURL, opts) { + var _this; + _this = _Loader.call(this) || this; + _this.baseURL = baseURL || '.'; + opts = opts || {}; + + // By default, the cache is turned off because there's no way + // to "watch" templates over HTTP, so they are re-downloaded + // and compiled each time. (Remember, PRECOMPILE YOUR + // TEMPLATES in production!) + _this.useCache = !!opts.useCache; + + // We default `async` to false so that the simple synchronous + // API can be used when you aren't doing anything async in + // your templates (which is most of the time). This performs a + // sync ajax request, but that's ok because it should *only* + // happen in development. PRECOMPILE YOUR TEMPLATES. + _this.async = !!opts.async; + return _this; + } + var _proto = WebLoader.prototype; + _proto.resolve = function resolve(from, to) { + throw new Error('relative templates not support in the browser yet'); + }; + _proto.getSource = function getSource(name, cb) { + var _this2 = this; + var useCache = this.useCache; + var result; + this.fetch(this.baseURL + '/' + name, function (err, src) { + if (err) { + if (cb) { + cb(err.content); + } else if (err.status === 404) { + result = null; + } else { + throw err.content; + } + } else { + result = { + src: src, + path: name, + noCache: !useCache + }; + _this2.emit('load', name, result); + if (cb) { + cb(null, result); + } + } + }); + + // if this WebLoader isn't running asynchronously, the + // fetch above would actually run sync and we'll have a + // result here + return result; + }; + _proto.fetch = function fetch(url, cb) { + // Only in the browser please + if (typeof window === 'undefined') { + throw new Error('WebLoader can only by used in a browser'); + } + var ajax = new XMLHttpRequest(); + var loading = true; + ajax.onreadystatechange = function () { + if (ajax.readyState === 4 && loading) { + loading = false; + if (ajax.status === 0 || ajax.status === 200) { + cb(null, ajax.responseText); + } else { + cb({ + status: ajax.status, + content: ajax.responseText + }); + } + } + }; + url += (url.indexOf('?') === -1 ? '?' : '&') + 's=' + new Date().getTime(); + ajax.open('GET', url, this.async); + ajax.send(); + }; + return WebLoader; +}(Loader); +module.exports = { + WebLoader: WebLoader, + PrecompiledLoader: PrecompiledLoader +};
\ No newline at end of file |
