{"version":3,"sources":["webpack://Sqrl/webpack/universalModuleDefinition","webpack://Sqrl/webpack/bootstrap","webpack://Sqrl/external \"fs\"","webpack://Sqrl/./src/helpers.js","webpack://Sqrl/./src/regexps.js","webpack://Sqrl/./src/nativeHelpers.js","webpack://Sqrl/./src/filters.js","webpack://Sqrl/./src/partials.js","webpack://Sqrl/./src/compile.js","webpack://Sqrl/./src/utils.js","webpack://Sqrl/./src/index.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","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","require","src_helpers","initialRegEx","initialTags","e","paramHelperRefRegExp","regEx","tags","defaultTags","tagArray","changeTags","firstTag","secondTag","newRegEx","source","slice","length","lastIndex","RegExp","replaceParamHelpers","params","replace","p1","p2","src_nativeHelpers","if","helperStart","param","helperEnd","blocks","else","each","id","foreach","log","selfClosing","indexOf","trim","js","escMap","&","<","\"","'","replaceChar","escapeRegEx","escapeRegExTest","filters_filters","str","newStr","String","test","defaultFilters","defaultFilterCache","start","end","setDefaultFilters","obj","cacheDefaultFilters","autoEscape","autoEscaping","bool","parseFiltered","initialString","filterString","filtersArray","safe","filterStart","filterEnd","split","partials","compile","funcStr","helperArray","helperNumber","helperAutoId","helperContainsBlocks","exec","index","globalRef","helperRef","native","helperTag","mostRecentHelper","console","error","parent","nativeH","warn","innerParams","preContent","endContent","partialParams","refName","filters","Function","utils_defineFilter","callback","defineHelper","defineNativeHelper","Render","template","options","src_namespaceObject","load","definePartial","cache","filePath","$file","$name","caching","$cache","fs2","readFileSync","Error","fileContent","renderFile","__express","__webpack_exports__"],"mappings":"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","file":"squirrelly.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[\"Sqrl\"] = factory();\n\telse\n\t\troot[\"Sqrl\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn "," \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, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\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\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","module.exports = require(\"fs\");","var helpers = {\r\n// No helpers are included by default for the sake of size,\r\n// But there's an example of a helper below\r\n/*\r\n Date: function (args, content, blocks, options) {\r\n var today = new Date()\r\n var dd = today.getDate()\r\n var mm = today.getMonth() + 1 // January is 0!\r\n var yyyy = today.getFullYear()\r\n if (dd < 10) {\r\n dd = '0' + dd\r\n }\r\n if (mm < 10) {\r\n mm = '0' + mm\r\n }\r\n today = mm + '/' + dd + '/' + yyyy\r\n return today\r\n } */\r\n}\r\n\r\nexport default helpers\r\n","export var initialRegEx = /{{ *?(?:(?:(?:(?:([\\w$]+ *?(?:[^\\s\\w($][^\\n]*?)*?))|(?:@(?:([\\w$]+:|(?:\\.\\.\\/)+))? *(.+?) *))(?: *?(\\| *?[\\w$]+? *?)+?)?)|(?:([\\w$]+) *?\\(([^\\n]*?)\\) *?([\\w$]*))|(?:\\/ *?([\\w$]+))|(?:# *?([\\w$]+))|(?:([\\w$]+) *?\\(([^\\n]*?)\\) *?\\/)|(?:!--[^]+?--)) *?}}\\n?/g\r\nexport var initialTags = {\r\n s: '{{',\r\n e: '}}'\r\n}\r\n\r\n// The regExp below matches all helper references inside helper parameters\r\nvar paramHelperRefRegExp = /\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'|[\\\\]@(?:[\\w$]*:)?[\\w$]+|@(?:([\\w$]*):)?([\\w$]+)/g\r\n\r\nexport var regEx = initialRegEx\r\nexport var tags = initialTags\r\n\r\nexport function setup () { // Resets the current tags to the default tags\r\n tags = initialTags\r\n regEx = initialRegEx\r\n regEx.lastIndex = 0\r\n}\r\n\r\nexport function defaultTags (tagArray) { // Redefine the default tags of the regexp\r\n changeTags(tagArray[0], tagArray[1])\r\n initialRegEx = regEx\r\n initialTags = tags\r\n}\r\n\r\nexport function changeTags (firstTag, secondTag) { // Update current tags\r\n var newRegEx = firstTag + regEx.source.slice(tags.s.length, 0 - (tags.e.length + 3)) + secondTag + '\\\\n?'\r\n var lastIndex = regEx.lastIndex\r\n tags = {\r\n s: firstTag,\r\n e: secondTag\r\n }\r\n regEx = RegExp(newRegEx, 'g')\r\n regEx.lastIndex = lastIndex\r\n}\r\n\r\nexport function replaceParamHelpers (params) {\r\n params = params.replace(paramHelperRefRegExp, function (m, p1, p2) { // p1 scope, p2 string\r\n if (typeof p2 === 'undefined') {\r\n return m\r\n } else {\r\n if (typeof p1 === 'undefined') {\r\n p1 = ''\r\n }\r\n return 'hvals' + p1 + '.' + p2\r\n }\r\n })\r\n return params\r\n}\r\n\r\n// The whole regular expression can be hard to comprehend, so here it's broken down.\r\n// You can pass the string between \"START REGEXP\" and \"END REGEXP\" into a regular expression\r\n// That removes whitespace and comments, and outputs a working regular expression.\r\n\r\n/* START REGEXP\r\n{{ *? //the beginning\r\n(?: //or for each possible tag\r\n(?: //if a global or helper ref\r\n(?: //choosing global or helper ref\r\n(?:([\\w$]+ *?(?:[^\\s\\w($][^\\n]*?)*?)) //global reference\r\n|\r\n(?:@(?:([\\w$]+:|(?:\\.\\.\\/)+))? *(.+?) *) //helper reference\r\n)\r\n(?: *?(\\| *?[\\w$]+? *?)+?)? //filter\r\n) //end if a global or helper ref\r\n| //now if a helper oTag\r\n(?:([\\w$]+) *?\\(([^\\n]*?)\\) *?([\\w$]*))\r\n| //now if a helper cTag\r\n(?:\\/ *?([\\w$]+))\r\n| //now if a helper block\r\n(?:# *?([\\w$]+))\r\n| //now for a self closing tag\r\n(?:([\\w$]+) *?\\(([^\\n]*?)\\) *?\\/)\r\n| //now for comments\r\n(?:!--[^]+?--)\r\n) //end or for each possible tag\r\n *?}}\r\n\\n? //To replace a newline at the end of a line\r\n\r\nEND REGEXP */\r\n/*\r\np1: global ref main\r\np2: helper ref id (with ':' after it) or path\r\np3: helper ref main\r\np4: filters\r\np5: helper name\r\np6: helper parameters\r\np7: helper id\r\np8: helper cTag name\r\np9: helper block name\r\np10: self closing helper name\r\np11: self closing helper params\r\nHere's the RegExp I use to turn the expanded version between START REGEXP and END REGEXP to a working one: I replace [\\f\\n\\r\\t\\v\\u00a0\\u1680\\u2000\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]| \\/\\/[\\w ']+\\n with nothing.\r\n*/\r\n","/* global RUNTIME */\r\nimport { changeTags } from './regexps'\r\nvar nativeHelpers = {\r\n if: {\r\n helperStart: function (param) { // helperStart is called with (params, id) but id isn't needed\r\n return 'if(' + param + '){'\r\n },\r\n helperEnd: function () {\r\n return '}'\r\n },\r\n blocks: {\r\n else: function () { // called with (id) but neither param is needed\r\n return '}else{'\r\n }\r\n }\r\n },\r\n each: {\r\n helperStart: function (param, id) { // helperStart is called with (params, id) but id isn't needed\r\n return 'for(var i=0;i<' + param + \".length; i++){tR+=(function(hvals){var tR='';var hvals\" + id + '=hvals;'\r\n },\r\n helperEnd: function (param) {\r\n return 'return tR})({this:' + param + '[i],index:i})};'\r\n }\r\n },\r\n foreach: {\r\n helperStart: function (param, id) {\r\n return 'for(var key in ' + param + '){if(!' + param + \".hasOwnProperty(key)) continue;tR+=(function(hvals){var tR='';var hvals\" + id + '=hvals;'\r\n },\r\n helperEnd: function (param) {\r\n return 'return tR})({this:' + param + '[key], key: key})};'\r\n }\r\n },\r\n log: {\r\n selfClosing: function (param) {\r\n return 'console.log(' + param + ');'\r\n }\r\n },\r\n tags: {\r\n selfClosing: function (param) {\r\n var firstTag = param.slice(0, param.indexOf(',')).trim()\r\n var secondTag = param.slice(param.indexOf(',') + 1).trim()\r\n changeTags(firstTag, secondTag)\r\n return ''\r\n }\r\n },\r\n js: { // The js self-closing helper allows you to inject JavaScript straight into your template function\r\n selfClosing: function (param) {\r\n return param + ';'\r\n }\r\n }\r\n}\r\n// We don't need to export nativeHelpers for the runtime script\r\nif (RUNTIME) {\r\n nativeHelpers = {}\r\n}\r\nexport default nativeHelpers\r\n","var escMap = {\r\n '&': '&',\r\n '<': '<',\r\n '\"': '"',\r\n \"'\": '''\r\n}\r\n\r\nfunction replaceChar (s) {\r\n return escMap[s]\r\n}\r\n\r\nvar escapeRegEx = /[&<\"']/g\r\nvar escapeRegExTest = /[&<\"']/\r\n\r\nexport var filters = {\r\n e: function (str) {\r\n // To deal with XSS. Based on Escape implementations of Mustache.JS and Marko, then customized.\r\n var newStr = String(str)\r\n if (escapeRegExTest.test(newStr)) {\r\n return newStr.replace(escapeRegEx, replaceChar)\r\n } else {\r\n return newStr\r\n }\r\n }\r\n}\r\n// Don't need a filter for unescape because that's just a flag telling Squirrelly not to escape\r\n\r\nexport var defaultFilters = {\r\n /*\r\n All strings are automatically passed through each of the default filters the user\r\n Has set to true. This opens up a realm of possibilities.\r\n */\r\n // somefilter: false\r\n}\r\n\r\nexport var defaultFilterCache = {\r\n // This is to prevent having to re-calculate default filters every time you return a filtered string\r\n start: '',\r\n end: ''\r\n}\r\n\r\nexport function setDefaultFilters (obj) {\r\n if (obj === 'clear') { // If someone calls Sqrl.setDefaultFilters('clear') it clears all default filters\r\n defaultFilters = {}\r\n } else {\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n defaultFilters[key] = obj[key]\r\n }\r\n }\r\n }\r\n cacheDefaultFilters()\r\n}\r\n\r\nexport var autoEscape = true\r\n\r\nexport function autoEscaping (bool) {\r\n autoEscape = bool\r\n return autoEscape\r\n}\r\n\r\nexport function cacheDefaultFilters () {\r\n defaultFilterCache = {\r\n start: '',\r\n end: ''\r\n }\r\n for (var key in defaultFilters) {\r\n if (!defaultFilters.hasOwnProperty(key) || !defaultFilters[key]) continue\r\n defaultFilterCache.start += 'Sqrl.F.' + key + '('\r\n defaultFilterCache.end += ')'\r\n }\r\n}\r\nexport function parseFiltered (initialString, filterString) {\r\n var filtersArray\r\n var safe = false\r\n var filterStart = ''\r\n var filterEnd = ''\r\n if (filterString && filterString !== '') {\r\n filtersArray = filterString.split('|')\r\n for (var i = 0; i < filtersArray.length; i++) {\r\n filtersArray[i] = filtersArray[i].trim() // Removing the spaces just in case someone put | filter| or | filter | or something similar\r\n if (filtersArray[i] === '') continue\r\n if (filtersArray[i] === 'safe') {\r\n // If 'safe' is one of the filters, set safe to true but don't add Sqrl.F.safe\r\n // Essentially, 'safe' is a flag telling Squirrelly not to autoEscape\r\n safe = true\r\n continue\r\n }\r\n filterStart = 'Sqrl.F.' + filtersArray[i] + '(' + filterStart\r\n filterEnd += ')'\r\n }\r\n }\r\n filterStart += defaultFilterCache.start\r\n filterEnd += defaultFilterCache.end\r\n if (!safe && autoEscape) {\r\n filterStart += 'Sqrl.F.e('\r\n filterEnd += ')'\r\n }\r\n\r\n return filterStart + initialString + filterEnd\r\n}\r\n\r\nfunction defineFilter (name, callback) {\r\n filters[name] = callback\r\n}\r\n\r\nexport { filters as default, defineFilter }\r\n","var Partials = {/*\r\n partialName: \"partialString\"\r\n*/}\r\n\r\nexport default Partials\r\n","/* global RUNTIME */\r\nimport {\r\n regEx,\r\n setup,\r\n replaceParamHelpers\r\n} from './regexps'\r\nimport nativeHelpers from './nativeHelpers'\r\nimport {\r\n parseFiltered\r\n} from './filters'\r\nimport P from './partials'\r\n\r\nfunction Compile (str) {\r\n var lastIndex = 0 // Because lastIndex can be complicated, and this way the minifier can minify more\r\n var funcStr = '' // This will be called with Function() and returned\r\n var helperArray = [] // A list of all 'outstanding' helpers, or unclosed helpers\r\n var helperNumber = -1\r\n var helperAutoId = 0 // Squirrelly automatically generates an ID for helpers that don't have a custom ID\r\n var helperContainsBlocks = {} // If a helper contains any blocks, helperContainsBlocks[helperID] will be set to true\r\n var m\r\n setup()\r\n while ((m = regEx.exec(str)) !== null) {\r\n if (funcStr === '') {\r\n funcStr += \"var tR='\" + str.slice(lastIndex, m.index).replace(/'/g, \"\\\\'\") + '\\';'\r\n } else if (lastIndex !== m.index) {\r\n funcStr += \"tR+='\" + str.slice(lastIndex, m.index).replace(/'/g, \"\\\\'\") + '\\';'\r\n }\r\n lastIndex = m[0].length + m.index\r\n if (m[1]) {\r\n // It's a global ref. p4 = filters\r\n funcStr += 'tR+=' + globalRef(m[1], m[4]) + ';'\r\n } else if (m[3]) {\r\n // It's a helper ref. p2 = id (with ':' after it) or path, p4 = filters\r\n funcStr += 'tR+=' + helperRef(m[3], m[2], m[4]) + ';'\r\n } else if (m[5]) {\r\n // It's a helper oTag. p6 parameters, p7 id\r\n var id = m[7]\r\n if (id === '' || id === null) {\r\n id = helperAutoId\r\n helperAutoId++\r\n }\r\n var native = nativeHelpers.hasOwnProperty(m[5]) // true or false\r\n helperNumber += 1\r\n var params = m[6] || ''\r\n params = replaceParamHelpers(params)\r\n if (!native) {\r\n params = '[' + params + ']'\r\n }\r\n var helperTag = {\r\n name: m[5],\r\n id: id,\r\n params: params,\r\n native: native\r\n }\r\n helperArray[helperNumber] = helperTag\r\n if (native) {\r\n funcStr += nativeHelpers[m[5]].helperStart(params, id)\r\n lastIndex = regEx.lastIndex // the changeTags function sets lastIndex already\r\n } else {\r\n funcStr += 'tR+=Sqrl.H.' + m[5] + '(' + params + ',function(hvals){var hvals' + id + \"=hvals;var tR='';\"\r\n }\r\n } else if (m[8]) {\r\n // It's a helper cTag.\r\n var mostRecentHelper = helperArray[helperNumber]\r\n if (mostRecentHelper && mostRecentHelper.name === m[8]) {\r\n helperNumber -= 1\r\n if (mostRecentHelper.native === true) {\r\n funcStr += nativeHelpers[mostRecentHelper.name].helperEnd(mostRecentHelper.params, mostRecentHelper.id)\r\n } else {\r\n if (helperContainsBlocks[mostRecentHelper.id]) {\r\n funcStr += 'return tR}});'\r\n } else {\r\n funcStr += 'return tR});'\r\n }\r\n }\r\n } else {\r\n console.error(\"Helper beginning & end don't match.\")\r\n }\r\n } else if (m[9]) {\r\n // It's a helper block.\r\n var parent = helperArray[helperNumber]\r\n if (parent.native) {\r\n var nativeH = nativeHelpers[parent.name]\r\n if (nativeH.blocks && nativeH.blocks[m[9]]) {\r\n funcStr += nativeH.blocks[m[9]](parent.id)\r\n lastIndex = regEx.lastIndex // Some native helpers set regEx.lastIndex\r\n } else {\r\n console.warn(\"Native helper '%s' doesn't accept that block.\", parent.name)\r\n }\r\n } else {\r\n if (!helperContainsBlocks[parent.id]) {\r\n funcStr += 'return tR},{' + m[9] + ':function(hvals){var hvals' + parent.id + \"=hvals;var tR='';\"\r\n helperContainsBlocks[parent.id] = true\r\n } else {\r\n funcStr += 'return tR},' + m[9] + ':function(hvals){var hvals' + parent.id + \"=hvals;var tR='';\"\r\n }\r\n }\r\n } else if (m[10]) {\r\n // It's a self-closing helper\r\n var innerParams = m[11] || ''\r\n innerParams = replaceParamHelpers(innerParams)\r\n if (m[10] === 'include') {\r\n // This code literally gets the template string up to the include self-closing helper,\r\n // adds the content of the partial, and adds the template string after the include self-closing helper\r\n var preContent = str.slice(0, m.index)\r\n var endContent = str.slice(m.index + m[0].length)\r\n var partialParams = innerParams.replace(/'|\"/g, '') // So people can write {{include(mypartial)/}} or {{include('mypartial')/}}\r\n var partialContent = P[partialParams]\r\n str = preContent + partialContent + endContent\r\n lastIndex = regEx.lastIndex = m.index\r\n } else if (nativeHelpers.hasOwnProperty(m[10]) && nativeHelpers[m[10]].hasOwnProperty('selfClosing')) {\r\n funcStr += nativeHelpers[m[10]].selfClosing(innerParams)\r\n lastIndex = regEx.lastIndex // changeTags sets regEx.lastIndex\r\n } else {\r\n funcStr += 'tR+=Sqrl.H.' + m[10] + '(' + innerParams + ');' // If it's not native, passing args to a non-native helper\r\n }\r\n }\r\n /* eslint-disable no-inner-declarations */\r\n function globalRef (refName, filters) {\r\n return parseFiltered('options.' + refName, filters)\r\n }\r\n\r\n function helperRef (name, id, filters) {\r\n var prefix\r\n if (typeof id !== 'undefined') {\r\n if (/(?:\\.\\.\\/)+/g.test(id)) { // Test if the helper reference is prefixed with ../\r\n prefix = helperArray[helperNumber - (id.length / 3) - 1].id\r\n } else {\r\n prefix = id.slice(0, -1)\r\n }\r\n return parseFiltered('hvals' + prefix + '.' + name, filters)\r\n } // Implied 'else'\r\n return parseFiltered('hvals.' + name, filters)\r\n }\r\n /* eslint-enable no-inner-declarations */\r\n }\r\n if (funcStr === '') {\r\n funcStr += \"var tR='\" + str.slice(lastIndex, str.length).replace(/'/g, \"\\\\'\") + \"';\"\r\n } else if (lastIndex !== str.length) {\r\n funcStr += \"tR+='\" + str.slice(lastIndex, str.length).replace(/'/g, \"\\\\'\") + \"';\"\r\n }\r\n funcStr += 'return tR'\r\n var func = new Function('options', 'Sqrl', funcStr.replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r')) //eslint-disable-line\r\n return func\r\n}\r\n\r\nif (RUNTIME) { // Don't include Sqrl.Compile() in the runtime library, to make it more lightweight\r\n Compile = {} // eslint-disable-line no-func-assign\r\n}\r\n\r\nexport default Compile\r\n","import F from './filters'\r\nimport C from './compile'\r\nimport * as Sqrl from './index' // So we can pass Sqrl as a parameter to Render()\r\nimport H from './helpers'\r\nimport n from './nativeHelpers'\r\nimport P from './partials'\r\n\r\nexport function defineFilter (name, callback) {\r\n F[name] = callback\r\n}\r\n\r\nexport function defineHelper (name, callback) {\r\n H[name] = callback\r\n}\r\n\r\nexport function defineNativeHelper (name, obj) {\r\n n[name] = obj\r\n}\r\n\r\nexport function Render (template, options) {\r\n // If the template parameter is a function, call that function with (options, Sqrl)\r\n // If it's a string, first compile the string and then call the function\r\n if (typeof template === 'function') {\r\n return template(options, Sqrl)\r\n } else if (typeof template === 'string') {\r\n var res = load(options, template)(options, Sqrl)\r\n return res\r\n }\r\n}\r\n\r\nexport function definePartial (name, str) {\r\n P[name] = str\r\n}\r\n\r\nexport var cache = {}\r\n\r\nexport function load (options, str) {\r\n var filePath = options.$file\r\n var name = options.$name\r\n var caching = options.$cache\r\n if (caching !== false) {\r\n // If caching isn't disabled\r\n if (filePath) {\r\n // If the $file attribute is passed in\r\n if (cache[filePath]) {\r\n // If the template is cached\r\n return cache[filePath] // Return template\r\n } else {\r\n // Otherwise, read file\r\n var fs = require('fs')\r\n var fileContent = fs.readFileSync(filePath, 'utf8')\r\n cache[filePath] = C(fileContent) // Add the template to the cache\r\n return cache[filePath] // Then return the cached template\r\n }\r\n } else if (name) {\r\n // If the $name attribute is passed in\r\n if (cache[name]) {\r\n // If there's a cache for that name\r\n return cache[name] // Return cached template\r\n } else if (str) {\r\n // Otherwise, as long as there's a string passed in\r\n cache[name] = C(str) // Add the template to the cache\r\n return cache[name] // Return cached template\r\n }\r\n } else if (str) {\r\n // If the string is passed in\r\n if (caching === true) {\r\n if (cache[str]) {\r\n // If it's cached\r\n return cache[str]\r\n } else {\r\n cache[str] = C(str) // Add it to cache\r\n return cache[str]\r\n }\r\n } else {\r\n return C(str)\r\n }\r\n } else {\r\n return 'Error'\r\n }\r\n } else {\r\n // If caching is disabled\r\n if (filePath) {\r\n // If the $file attribute is passed in\r\n var fs2 = require('fs')\r\n return C(fs2.readFileSync(filePath, 'utf8')) // Then return the cached template\r\n } else if (str) {\r\n // If the string is passed in\r\n return C(str)\r\n } else {\r\n throw Error('No template')\r\n }\r\n }\r\n}\r\n\r\nexport function renderFile (filePath, options) {\r\n options.$file = filePath\r\n return load(options)(options, Sqrl)\r\n}\r\n\r\nexport function __express (filePath, options, callback) {\r\n return callback(null, renderFile(filePath, options))\r\n}\r\n","export { default as H } from './helpers'\r\nexport { default as Compile } from './compile'\r\nexport {\r\n defineFilter,\r\n defineHelper,\r\n defineNativeHelper,\r\n definePartial,\r\n Render,\r\n renderFile,\r\n load,\r\n __express } from './utils'\r\nexport {\r\n default as F,\r\n setDefaultFilters,\r\n autoEscaping\r\n} from './filters'\r\nexport { defaultTags } from './regexps'\r\n"],"sourceRoot":""}