jet-engine
Advanced tools
Comparing version 1.0.2 to 1.0.3
@@ -1,5 +0,15 @@ | ||
import { render, register } from '../src'; | ||
import { compress, loader, render, register } from '../src'; | ||
import { registerPlugin } from '../src/library'; | ||
describe('Jet Engine', () => { | ||
describe('compress', function () { | ||
it('should remove comments', function () { | ||
expect(compress('{*a short comment*}Hello')).toEqual('Hello'); | ||
}); | ||
it('should load a template', function () { | ||
expect(loader('This is a {* short *}test')).toEqual('module.exports = "This is a test";'); | ||
}); | ||
}); | ||
it('should handle {%TEXT} directive', () => { | ||
@@ -6,0 +16,0 @@ const out = render( |
@@ -1,451 +0,2 @@ | ||
'use strict'; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.setFlag = setFlag; | ||
exports.getFlag = getFlag; | ||
exports.appendOut = appendOut; | ||
exports.pushOutput = pushOutput; | ||
exports.popOutput = popOutput; | ||
exports.pushSpecial = pushSpecial; | ||
exports.setSpecial = setSpecial; | ||
exports.getSpecial = getSpecial; | ||
exports.popSpecial = popSpecial; | ||
exports.pushTemplate = pushTemplate; | ||
exports.popTemplate = popTemplate; | ||
exports.getTemplate = getTemplate; | ||
exports.incPtr = incPtr; | ||
exports.getPtr = getPtr; | ||
exports.setPtr = setPtr; | ||
exports.pushStack = pushStack; | ||
exports.popStack = popStack; | ||
exports.getAttributes = getAttributes; | ||
exports.parseDirective = parseDirective; | ||
exports.get = get; | ||
exports.processUntil = processUntil; | ||
exports.readUntil = readUntil; | ||
exports.skipUntil = skipUntil; | ||
exports.runUntil = runUntil; | ||
exports.compress = compress; | ||
exports.compile = compile; | ||
exports.isSelfClosing = isSelfClosing; | ||
exports.endTag = endTag; | ||
exports.render = render; | ||
exports.register = register; | ||
exports.isRegistered = isRegistered; | ||
exports.cleanup = cleanup; | ||
var _library = require('./library'); | ||
require('./plugins'); | ||
var stack = []; | ||
var registry = {}; | ||
var outputStack = []; | ||
var templateStack = []; | ||
var ptrStack = []; | ||
var specialStack = []; | ||
var flags = {}; | ||
var template = void 0; | ||
function setFlag(flag, value) { | ||
flags[flag] = value; | ||
} | ||
function getFlag(flag) { | ||
return flags[flag]; | ||
} | ||
function appendOut(s) { | ||
outputStack[outputStack.length - 1] += s; | ||
} | ||
function pushOutput(s) { | ||
outputStack.push(s); | ||
} | ||
function popOutput() { | ||
return outputStack.pop(); | ||
} | ||
function pushSpecial(o) { | ||
specialStack.push(o); | ||
} | ||
function setSpecial(key, value) { | ||
specialStack[specialStack.length - 1][key] = value; | ||
} | ||
function getSpecial(key) { | ||
return specialStack[specialStack.length - 1][key]; | ||
} | ||
function popSpecial() { | ||
return specialStack.pop(); | ||
} | ||
function pushTemplate(templ) { | ||
templateStack.push(templ); | ||
ptrStack.push(0); | ||
template = templ; | ||
} | ||
function popTemplate() { | ||
ptrStack.pop(); | ||
var lastTemplate = templateStack.pop(); | ||
if (templateStack.length > 0) { | ||
template = templateStack[templateStack.length - 1]; | ||
} | ||
return lastTemplate; | ||
} | ||
function getTemplate() { | ||
// return templateStack[templateStack.length - 1]; | ||
return template; | ||
} | ||
function incPtr() { | ||
var ptr = ptrStack[ptrStack.length - 1]; | ||
ptrStack[ptrStack.length - 1] = ptr + 1; | ||
return ptr; | ||
} | ||
function getPtr() { | ||
return ptrStack[ptrStack.length - 1]; | ||
} | ||
function setPtr(ptr) { | ||
ptrStack[ptrStack.length - 1] = ptr; | ||
} | ||
function pushStack(context) { | ||
stack.push(context); | ||
} | ||
function popStack() { | ||
return stack.pop(); | ||
} | ||
function getAttributes(attr) { | ||
var attributes = {}; | ||
var keys = Object.keys(attr); | ||
var len = keys.length; | ||
for (var i = 0; i < len; i++) { | ||
var key = keys[i]; | ||
attributes[key] = get(attr[key]); | ||
} | ||
return attributes; | ||
} | ||
function parseDirective(chunkValue) { | ||
var value = chunkValue; | ||
if (value.slice(-1) === '/') { | ||
value = value.slice(0, -1).trim(); | ||
} | ||
var parts = []; | ||
var attributes = {}; | ||
var isSpace = false; | ||
var quote = null; | ||
var part = ''; | ||
for (var i = 0; i < value.length; i++) { | ||
var c = value.charAt(i); | ||
if (c === '"' || c === "'") { | ||
if (c === quote) { | ||
quote = null; | ||
} else if (!quote) { | ||
quote = c; | ||
} | ||
} | ||
if (c === ' ' && !quote) { | ||
isSpace = true; | ||
} else { | ||
if (isSpace) { | ||
parts.push(part); | ||
part = ''; | ||
} | ||
isSpace = false; | ||
} | ||
if (!isSpace) { | ||
part += c; | ||
} | ||
} | ||
parts.push(part); | ||
for (var _i = 1; _i < parts.length; _i++) { | ||
part = parts[_i]; | ||
var idx = part.indexOf('='); | ||
attributes[part.slice(0, idx)] = part.slice(idx + 1); | ||
} | ||
return { | ||
id: parts[0], | ||
attributes: attributes | ||
}; | ||
} | ||
function closeQuote(id, quote, endQuote) { | ||
var level = 0; | ||
for (var i = 0; i < id.length; i++) { | ||
var c = id.charAt(i); | ||
switch (c) { | ||
case quote: | ||
level++; | ||
break; | ||
case endQuote: | ||
level--; | ||
if (level === 0) { | ||
return i; | ||
} | ||
break; | ||
default: | ||
break; | ||
} | ||
} | ||
return -1; | ||
} | ||
function getValue(id, o) { | ||
if (o === undefined) { | ||
return o; | ||
} | ||
var c = id.charAt(0); | ||
switch (c) { | ||
case '': | ||
return o; | ||
case "'": | ||
case '"': | ||
{ | ||
var endQuote = id.indexOf(c, 1); | ||
if (endQuote === -1) { | ||
throw new Error('Mismatched quote (' + c + ')'); | ||
} | ||
return getValue(id.slice(endQuote + 1), id.slice(1, endQuote)); | ||
} | ||
case '.': | ||
return getValue(id.slice(1), o); | ||
case '[': | ||
{ | ||
var iClose = closeQuote(id, '[', ']'); | ||
if (iClose === -1) { | ||
throw new Error('Mismatched brackets'); | ||
} | ||
return getValue(id.slice(iClose + 1), o[get(id.slice(1, iClose))]); | ||
} | ||
default: | ||
{ | ||
var iDot = id.indexOf('.'); | ||
var iOpen = id.indexOf('['); | ||
if (iDot === -1 && iOpen === -1) { | ||
return o[id]; | ||
} | ||
if (iDot >= 0 && (iOpen === -1 || iOpen > iDot)) { | ||
return getValue(id.slice(iDot), o[id.slice(0, iDot)]); | ||
} | ||
return getValue(id.slice(iOpen), o[id.slice(0, iOpen)]); | ||
} | ||
} | ||
} | ||
function get(id) { | ||
if (!Number.isNaN(parseFloat(id))) { | ||
return parseFloat(id); | ||
} | ||
if (id === '.') { | ||
return stack[stack.length - 1]; | ||
} | ||
if (id.charAt(0) === '$') { | ||
return getSpecial(id); | ||
} | ||
for (var i = stack.length - 1; i >= 0; i--) { | ||
var o = stack[i]; | ||
var value = getValue(id, o); | ||
if (value !== undefined) { | ||
return value; | ||
} | ||
if (id[0] === '.') { | ||
return ''; | ||
} | ||
} | ||
return ''; | ||
} | ||
function nextChunk() { | ||
var ptr = incPtr(); | ||
var chunk = getTemplate()[ptr]; | ||
return chunk; | ||
} | ||
function handleValue(chunk) { | ||
appendOut(get(chunk.value.slice(1, -1))); | ||
} | ||
function handleDirective(chunk) { | ||
var key = chunk.id ? chunk.id[0] : ''; | ||
if ((0, _library.getPlugin)(key)) { | ||
(0, _library.getPlugin)(key)(chunk); | ||
} else { | ||
handleValue(chunk); | ||
} | ||
} | ||
function handleLiteral(chunk) { | ||
appendOut(chunk.value); | ||
} | ||
function handleChunk() { | ||
var chunk = nextChunk(); | ||
if (chunk.value.charAt(0) === '{') { | ||
handleDirective(chunk); | ||
} else { | ||
handleLiteral(chunk); | ||
} | ||
return chunk; | ||
} | ||
function processUntil(directives, process) { | ||
var list = Array.isArray(directives) ? directives : [directives]; | ||
var result = { returnVal: [] }; | ||
do { | ||
result = process(result); // { chunk, returnVal } | ||
} while (list.indexOf(result.chunk.value) === -1 && result.chunk.value !== ''); | ||
if (list.indexOf(result.chunk.value) === -1) { | ||
throw new Error('Mismatched tag: ' + list[0]); | ||
} | ||
return result.returnVal; | ||
} | ||
function readUntil(directives) { | ||
return processUntil(directives, function (result) { | ||
result.chunk = nextChunk(); | ||
result.returnVal.push(result.chunk); | ||
return result; | ||
}); | ||
} | ||
function skipUntil(directives) { | ||
return processUntil(directives, function (result) { | ||
result.chunk = nextChunk(); | ||
result.returnVal = result.chunk.value; | ||
return result; | ||
}); | ||
} | ||
function runUntil(directives) { | ||
return processUntil(directives, function (result) { | ||
result.chunk = handleChunk(); | ||
result.returnVal = result.chunk.value; | ||
return result; | ||
}); | ||
} | ||
function compress(s) { | ||
var isText = s.slice(0, 7) === '{%TEXT}'; | ||
var isHTML = s.slice(0, 7) === '{%HTML}'; | ||
if (!isHTML && s.charAt(0) !== '<') { | ||
return isText ? s.slice(7) : s; | ||
} | ||
return (isHTML ? s.slice(7) : s).replace(/\n\s*/g, ' ').replace(/\s*</g, '<').replace(/>\s*/g, '>').trim(); | ||
} | ||
function compile(t) { | ||
// if its an Array, assume it's already compiled; | ||
if (Array.isArray(t)) { | ||
return t; | ||
} | ||
var templ = compress(t); | ||
function getFragment() { | ||
var idx = templ.indexOf('{'); | ||
var value = void 0; | ||
if (idx === 0) { | ||
var idx2 = templ.indexOf('}'); | ||
value = templ.slice(0, idx2 + 1); | ||
templ = templ.slice(idx2 + 1); | ||
} else if (idx === -1) { | ||
value = templ; | ||
templ = ''; | ||
} else { | ||
value = templ.slice(0, idx); | ||
templ = templ.slice(idx); | ||
} | ||
return value; | ||
} | ||
var result = []; | ||
var fragment = void 0; | ||
var dir = void 0; | ||
var chunk = void 0; | ||
do { | ||
fragment = getFragment(); | ||
if (fragment.charAt(0) === '{' && (0, _library.getPlugin)(fragment.charAt(1))) { | ||
dir = parseDirective(fragment.slice(1, -1)); | ||
chunk = { | ||
value: fragment, | ||
id: dir.id, | ||
key: dir.id.slice(1), | ||
attributes: dir.attributes | ||
}; | ||
} else { | ||
chunk = { value: fragment }; | ||
} | ||
result.push(chunk); | ||
} while (fragment !== ''); | ||
return result; | ||
} | ||
function isSelfClosing(chunk) { | ||
return chunk.value.slice(-2) === '/}'; | ||
} | ||
function endTag(id) { | ||
return '{/' + id + '}'; | ||
} | ||
function render(t, data) { | ||
var templ = registry[t] ? registry[t] : compile(t); | ||
pushOutput(''); | ||
pushTemplate(templ); | ||
pushStack(data); | ||
try { | ||
runUntil(''); | ||
} catch (err) { | ||
cleanup(); | ||
throw err; | ||
} | ||
popStack(); | ||
popTemplate(); | ||
if (outputStack.length === 1) { | ||
(0, _library.postProcess)(); | ||
} | ||
return popOutput(); | ||
} | ||
function register(name, t) { | ||
registry[name] = compile(t); | ||
} | ||
function isRegistered(name) { | ||
return !!registry[name]; | ||
} | ||
function cleanup() { | ||
stack.length = 0; | ||
outputStack.length = 0; | ||
templateStack.length = 0; | ||
ptrStack.length = 0; | ||
specialStack.length = 0; | ||
flags = {}; | ||
} | ||
!function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.registerPlugin=function(e,t){r[e]=t},t.getPlugin=function(e){return r[e]},t.registerPostProcessor=function(e){i.push(e)},t.postProcess=function(){i.forEach(function(e){return e()})};var r={},i=[]},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.setFlag=function(e,t){o[e]=t},t.getFlag=function(e){return o[e]},t.appendOut=g,t.pushOutput=f,t.popOutput=h,t.pushSpecial=function(e){c.push(e)},t.setSpecial=function(e,t){c[c.length-1][e]=t},t.getSpecial=d,t.popSpecial=function(){return c.pop()},t.pushTemplate=v,t.popTemplate=k,t.getTemplate=U,t.incPtr=b,t.getPtr=function(){return a[a.length-1]},t.setPtr=function(e){a[a.length-1]=e},t.pushStack=O,t.popStack=P,t.getAttributes=function(e){for(var t={},n=Object.keys(e),r=n.length,i=0;i<r;i++){var u=n[i];t[u]=x(e[u])}return t},t.parseDirective=y,t.get=x,t.processUntil=M,t.readUntil=function(e){return M(e,function(e){return e.chunk=A(),e.returnVal.push(e.chunk),e})},t.skipUntil=function(e){return M(e,function(e){return e.chunk=A(),e.returnVal=e.chunk.value,e})},t.runUntil=F,t.compress=$,t.loader=function(e){return"module.exports = "+JSON.stringify($(e))+";"},t.compile=_,t.isSelfClosing=function(e){return"/}"===e.value.slice(-2)},t.endTag=function(e){return"{/"+e+"}"},t.render=function(e,t){var n=u[e]?u[e]:_(e);f(""),v(n),O(t);try{F("")}catch(e){throw R(),e}P(),k(),1===s.length&&(0,r.postProcess)();return h()},t.register=function(e,t){u[e]=_(t)},t.isRegistered=function(e){return!!u[e]},t.cleanup=R;var r=n(0);n(21);var i=[],u={},s=[],l=[],a=[],c=[],o={},p=void 0;function g(e){s[s.length-1]+=e}function f(e){s.push(e)}function h(){return s.pop()}function d(e){return c[c.length-1][e]}function v(e){l.push(e),a.push(0),p=e}function k(){a.pop();var e=l.pop();return l.length>0&&(p=l[l.length-1]),e}function U(){return p}function b(){var e=a[a.length-1];return a[a.length-1]=e+1,e}function O(e){i.push(e)}function P(){return i.pop()}function y(e){var t=e;"/"===t.slice(-1)&&(t=t.slice(0,-1).trim());for(var n=[],r={},i=!1,u=null,s="",l=0;l<t.length;l++){var a=t.charAt(l);'"'!==a&&"'"!==a||(a===u?u=null:u||(u=a))," "!==a||u?(i&&(n.push(s),s=""),i=!1):i=!0,i||(s+=a)}n.push(s);for(var c=1;c<n.length;c++){var o=(s=n[c]).indexOf("=");r[s.slice(0,o)]=s.slice(o+1)}return{id:n[0],attributes:r}}function S(e,t){if(void 0===t)return t;var n=e.charAt(0);switch(n){case"":return t;case"'":case'"':var r=e.indexOf(n,1);if(-1===r)throw new Error("Mismatched quote ("+n+")");return S(e.slice(r+1),e.slice(1,r));case".":return S(e.slice(1),t);case"[":var i=function(e,t,n){for(var r=0,i=0;i<e.length;i++)switch(e.charAt(i)){case t:r++;break;case n:if(0==--r)return i}return-1}(e,"[","]");if(-1===i)throw new Error("Mismatched brackets");return S(e.slice(i+1),t[x(e.slice(1,i))]);default:var u=e.indexOf("."),s=e.indexOf("[");return-1===u&&-1===s?t[e]:u>=0&&(-1===s||s>u)?S(e.slice(u),t[e.slice(0,u)]):S(e.slice(s),t[e.slice(0,s)])}}function x(e){if(!Number.isNaN(parseFloat(e)))return parseFloat(e);if("."===e)return i[i.length-1];if("$"===e.charAt(0))return d(e);for(var t=i.length-1;t>=0;t--){var n=S(e,i[t]);if(void 0!==n)return n;if("."===e[0])return""}return""}function A(){var e=b();return U()[e]}function w(e){var t=e.id?e.id[0]:"";(0,r.getPlugin)(t)?(0,r.getPlugin)(t)(e):function(e){g(x(e.value.slice(1,-1)))}(e)}function m(){var e=A();return"{"===e.value.charAt(0)?w(e):function(e){g(e.value)}(e),e}function M(e,t){var n=Array.isArray(e)?e:[e],r={returnVal:[]};do{r=t(r)}while(-1===n.indexOf(r.chunk.value)&&""!==r.chunk.value);if(-1===n.indexOf(r.chunk.value))throw new Error("Mismatched tag: "+n[0]);return r.returnVal}function F(e){return M(e,function(e){return e.chunk=m(),e.returnVal=e.chunk.value,e})}function $(e){var t="{%TEXT}"===e.slice(0,7),n="{%HTML}"===e.slice(0,7);return n||"<"===e.charAt(0)?(n?e.slice(7):e).replace(/\n\s*/g," ").replace(/\s*</g,"<").replace(/>\s*/g,">").replace(/{\*.*?\*}/g,"").trim():(t?e.slice(7):e).replace(/{\*.*?\*}/g,"")}function _(e){if(Array.isArray(e))return e;var t=$(e);function n(){var e=t.indexOf("{"),n=void 0;if(0===e){var r=t.indexOf("}");n=t.slice(0,r+1),t=t.slice(r+1)}else-1===e?(n=t,t=""):(n=t.slice(0,e),t=t.slice(e));return n}var i=[],u=void 0,s=void 0,l=void 0;do{l="{"===(u=n()).charAt(0)&&(0,r.getPlugin)(u.charAt(1))?{value:u,id:(s=y(u.slice(1,-1))).id,key:s.id.slice(1),attributes:s.attributes}:{value:u},i.push(l)}while(""!==u);return i}function R(){i.length=0,s.length=0,l.length=0,a.length=0,c.length=0,o={}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.setRef=s,t.getRef=function(e){return u[e]};var r=n(0),i=n(1),u={};function s(e,t){u[e]=t}(0,r.registerPlugin)("+",function(e){var t=e.key;(0,i.pushOutput)(""),(0,i.isSelfClosing)(e)||(0,i.runUntil)((0,i.endTag)(t)),s(t,(0,i.popOutput)()),(0,i.isRegistered)(t)&&s(t,(0,i.render)(t,{})),(0,i.appendOut)("{+"+t+"}")}),(0,r.registerPostProcessor)(function(){var e=(0,i.popOutput)();Object.keys(u).forEach(function(t){var n="{\\+"+t+"}";e=e.replace(new RegExp(n,"g"),u[t])}),(0,i.pushOutput)(e)})},function(e,t,n){"use strict";var r=n(0),i=n(1),u=n(2);(0,r.registerPlugin)("<",function(e){var t=e.key,n=(0,i.getAttributes)(e.attributes),r=(0,i.readUntil)("{/"+t+"}");r.pop(),r.push({value:""}),(0,i.register)(t,r),(0,i.getFlag)("s")?(0===(0,i.get)("$idx")&&(0,u.setRef)(t,""),(0,u.setRef)(t,""+(0,u.getRef)(t)+(0,i.render)(t,n))):(0,u.setRef)(t,(0,i.render)(t,n))})},function(e,t,n){"use strict";var r=n(0),i=n(1);(0,r.registerPlugin)("@math",function(e){(0,i.pushStack)(e);var t=(0,i.get)((0,i.get)("key")),n=parseFloat(t),r=(0,i.get)((0,i.get)("method")),u=parseFloat((0,i.get)((0,i.get)("operand")));switch(r){case"add":(0,i.appendOut)(""+(n+u));break;case"subtract":(0,i.appendOut)(""+(n-u));break;case"multiply":(0,i.appendOut)(""+n*u);break;case"divide":(0,i.appendOut)(""+n/u);break;case"mod":(0,i.appendOut)(""+n%u);break;case"ceil":(0,i.appendOut)(""+Math.ceil(n));break;case"floor":(0,i.appendOut)(""+Math.floor(n));break;case"round":(0,i.appendOut)(""+Math.round(n));break;case"toint":(0,i.appendOut)(""+parseInt(t,10));break;case"abs":(0,i.appendOut)(""+Math.abs(n))}(0,i.popStack)()})},function(e,t,n){"use strict";var r=n(0),i=n(1);(0,r.registerPlugin)("~",function(e){switch(e.key){case"n":(0,i.appendOut)("\n");break;case"r":(0,i.appendOut)("\r");break;case"s":(0,i.appendOut)(" ");break;case"lb":(0,i.appendOut)("{");break;case"rb":(0,i.appendOut)("}");break;case"lt":(0,i.appendOut)("<");break;case"gt":(0,i.appendOut)(">");break;case"a":(0,i.appendOut)("'");break;case"q":(0,i.appendOut)('"')}})},function(e,t,n){"use strict";var r=n(0),i=n(1);(0,r.registerPlugin)("@ne",function(e){(0,i.pushStack)(e);var t=(0,i.get)((0,i.get)("key")),n=(0,i.get)((0,i.get)("value")),r=(0,i.endTag)("ne");t!==n?"{:else}"===(0,i.runUntil)([r,"{:else}"])&&(0,i.skipUntil)(r):"{:else}"===(0,i.skipUntil)([r,"{:else}"])&&(0,i.runUntil)(r),(0,i.popStack)()})},function(e,t,n){"use strict";var r=n(0),i=n(1);(0,r.registerPlugin)("@lte",function(e){(0,i.pushStack)(e),(0,i.get)((0,i.get)("key"))<=(0,i.get)((0,i.get)("value"))?"{:else}"===(0,i.runUntil)(["{/lte}","{:else}"])&&(0,i.skipUntil)("{/lte}"):"{:else}"===(0,i.skipUntil)(["{/lte}","{:else}"])&&(0,i.runUntil)("{/lte}"),(0,i.popStack)()})},function(e,t,n){"use strict";var r=n(0),i=n(1);(0,r.registerPlugin)("@lt",function(e){(0,i.pushStack)(e),(0,i.get)((0,i.get)("key"))<(0,i.get)((0,i.get)("value"))?"{:else}"===(0,i.runUntil)(["{/lt}","{:else}"])&&(0,i.skipUntil)("{/lt}"):"{:else}"===(0,i.skipUntil)(["{/lt}","{:else}"])&&(0,i.runUntil)("{/lt}"),(0,i.popStack)()})},function(e,t,n){"use strict";var r=n(0),i=n(1);(0,r.registerPlugin)("@gte",function(e){(0,i.pushStack)(e),(0,i.get)((0,i.get)("key"))>=(0,i.get)((0,i.get)("value"))?"{:else}"===(0,i.runUntil)(["{/gte}","{:else}"])&&(0,i.skipUntil)("{/gte}"):"{:else}"===(0,i.skipUntil)(["{/gte}","{:else}"])&&(0,i.runUntil)("{/gte}"),(0,i.popStack)()})},function(e,t,n){"use strict";var r=n(0),i=n(1);(0,r.registerPlugin)("@gt",function(e){(0,i.pushStack)(e),(0,i.get)((0,i.get)("key"))>(0,i.get)((0,i.get)("value"))?"{:else}"===(0,i.runUntil)(["{/gt}","{:else}"])&&(0,i.skipUntil)("{/gt}"):"{:else}"===(0,i.skipUntil)(["{/gt}","{:else}"])&&(0,i.runUntil)("{/gt}"),(0,i.popStack)()})},function(e,t,n){"use strict";var r=n(0),i=n(1);(0,r.registerPlugin)("@sep",function(){(0,i.get)("$idx")!==(0,i.get)("$len")-1?"{:else}"===(0,i.runUntil)(["{/sep}","{:else}"])&&(0,i.skipUntil)("{/sep}"):"{:else}"===(0,i.skipUntil)(["{/sep}","{:else}"])&&(0,i.runUntil)("{/sep}")})},function(e,t,n){"use strict";var r=n(0),i=n(1);(0,r.registerPlugin)("@last",function(){(0,i.get)("$idx")===(0,i.get)("$len")-1?"{:else}"===(0,i.runUntil)(["{/last}","{:else}"])&&(0,i.skipUntil)("{/last}"):"{:else}"===(0,i.skipUntil)(["{/last}","{:else}"])&&(0,i.runUntil)("{/last}")})},function(e,t,n){"use strict";var r=n(0),i=n(1);(0,r.registerPlugin)("@first",function(){0===(0,i.get)("$idx")?"{:else}"===(0,i.runUntil)(["{/first}","{:else}"])&&(0,i.skipUntil)("{/first}"):"{:else}"===(0,i.skipUntil)(["{/first}","{:else}"])&&(0,i.runUntil)("{/first}")})},function(e,t,n){"use strict";var r=n(0),i=n(1);(0,r.registerPlugin)(">",function(e){var t=(0,i.getAttributes)(e.attributes),n=t.with?t.with:t;(0,i.appendOut)((0,i.render)(e.key,n))})},function(e,t,n){"use strict";(0,n(0).registerPlugin)("/",function(){})},function(e,t,n){"use strict";var r=n(0),i=n(1);(0,r.registerPlugin)("@eq",function(e){(0,i.pushStack)(e),(0,i.get)((0,i.get)("key"))===(0,i.get)((0,i.get)("value"))?"{:else}"===(0,i.runUntil)(["{/eq}","{:else}"])&&(0,i.skipUntil)("{/eq}"):"{:else}"===(0,i.skipUntil)(["{/eq}","{:else}"])&&(0,i.runUntil)("{/eq}"),(0,i.popStack)()})},function(e,t,n){"use strict";var r=n(0),i=n(1);(0,r.registerPlugin)("#",function(e){var t=e.key,n=(0,i.getAttributes)(e.attributes),r=(0,i.get)(t),u=(0,i.getPtr)(),s="{/"+t+"}";if(""===r||!1===r||null===r||void 0===r||Array.isArray(r)&&0===r.length)"{:else}"===(0,i.skipUntil)([s,"{:else}"])&&(0,i.runUntil)(s);else{Array.isArray(r)||(r=[r]);var l=(0,i.getFlag)("s")||0;(0,i.setFlag)("s",l+1),(0,i.pushSpecial)({$len:r.length,$idx:0}),(0,i.pushStack)(n);for(var a=0,c=r.length;a<c;a++)(0,i.setSpecial)("$idx",a),(0,i.pushStack)(r[a]),"{:else}"===(0,i.runUntil)([s,"{:else}"])&&(0,i.skipUntil)(s),(0,i.popStack)(),a<r.length-1&&(0,i.setPtr)(u);(0,i.popStack)(),(0,i.popSpecial)(),(0,i.setFlag)("s",l)}})},function(e,t,n){"use strict";var r=n(0),i=n(1);(0,r.registerPlugin)("!",function(e){var t=e.key,n="{/"+t+"}";(0,i.get)(t)?"{:else}"===(0,i.skipUntil)([n,"{:else}"])&&(0,i.runUntil)(n):"{:else}"===(0,i.runUntil)([n,"{:else}"])&&(0,i.skipUntil)(n)})},function(e,t,n){"use strict";var r=n(0),i=n(1);(0,r.registerPlugin)("?",function(e){var t=e.key,n=(0,i.get)(t),r="{/"+t+"}";""===n||!1===n||null===n||void 0===n||Array.isArray(n)&&0===n.length?"{:else}"===(0,i.skipUntil)([r,"{:else}"])&&(0,i.runUntil)(r):"{:else}"===(0,i.runUntil)([r,"{:else}"])&&(0,i.skipUntil)(r)})},function(e,t,n){"use strict";var r=n(0);(0,r.registerPlugin)("@",function(e){try{(0,r.getPlugin)(e.id)(e.attributes)}catch(t){throw new Error("Unable to execute helper "+e.id)}})},function(e,t,n){"use strict";n(20),n(19),n(18),n(17),n(16),n(15),n(14),n(13),n(12),n(11),n(10),n(9),n(8),n(7),n(6),n(5),n(4),n(3),n(2)}]); | ||
//# sourceMappingURL=index.js.map |
{ | ||
"name": "jet-engine", | ||
"version": "1.0.2", | ||
"version": "1.0.3", | ||
"description": "Jet engine", | ||
"main": "index.js", | ||
"main": "dist/index.js", | ||
"scripts": { | ||
"test": "jest --verbose", | ||
"lint": "eslint ./ --ignore-path .gitignore --ext .js", | ||
"build:dist": "babel src --out-dir dist", | ||
"build:babel": "babel src --out-dir dist", | ||
"build:dist": "webpack -p", | ||
"clean": "rimraf dist", | ||
@@ -44,5 +45,10 @@ "build": "npm run clean && npm run build:dist" | ||
"jest": "^22.4.3", | ||
"rimraf": "^2.6.2" | ||
"rimraf": "^2.6.2", | ||
"webpack-cli": "^2.0.14" | ||
}, | ||
"dependencies": {} | ||
"dependencies": { | ||
"babel-loader": "^7.1.4", | ||
"path": "^0.12.7", | ||
"webpack": "^4.5.0" | ||
} | ||
} |
@@ -6,3 +6,3 @@ #jet-engine | ||
jet-engine is a template engine with syntax very similar to dustjs-linked in. It was written because I needed a template engine that was more compact and less complicated to use than dustjs, but I liked dustjs syntax, compared to other template engines like handlebars. In the few cases in which I wanted templates to behave differently, I implemented my preferred way. I also had no requirement for asynchronous template handing, so I left that out. | ||
jet-engine is a template engine with syntax very similar to dustjs-linked in. It was written because we were trying to produce the smallest bundle possible for a recent project. I liked dustjs syntax, compared to other template engines, and thought this would be a fun side project. I'm very pleased with the result. Each function is written in a separate source file, and it is easy to add additional features. In the few cases in which I wanted templates to behave differently than dustjs, I implemented my preferred approach. We also had no requirement for asynchronous template handing, so I left that out. | ||
@@ -19,18 +19,20 @@ # Usage | ||
All the familiar keywords are implemented, | ||
Nearly all of the familiar keywords are implemented: | ||
``` | ||
{value} | ||
{#section} | ||
{?test} | ||
{!not} // also supports {^not} syntax for compatability | ||
{@eq ...} // and other helpers | ||
{>partials} | ||
{<inline-partials} | ||
{+blocks} | ||
{~gt} // and other special characters | ||
{!test} // my preferred negation test | ||
{* comment *} // my preferred comment | ||
{@eq ...} // and many other helpers | ||
{>subroutine} // I prefer this terminology | ||
{<definition} // ditto | ||
{+block} | ||
{~gt} // and several other other special characters | ||
``` | ||
# Partials | ||
# Subroutines | ||
Register a partial like this | ||
Register a subroutine like this | ||
@@ -45,2 +47,21 @@ ``` | ||
# Many more examples and additional documentation to follow | ||
# Context | ||
The data context is exactly as you would expect form a sophisticated engine. | ||
An initial context is set when the render() function is first invoked. Addition conexts are pushed and popped from context stack by the following commands: | ||
``` | ||
{#names} // value of "names" is pushed onto the context stack | ||
{>subroutine name="Jim"} // { name: "Jim" } is pushed onto the context stack | ||
{@eq key="size" value=17} // { key: "size", value: 17 } is pushed onto the stack (explained in Helpers section below) | ||
``` | ||
Data references are resolved from the top of the context stack downward, with the following exceptions: | ||
``` | ||
{.} refers to the entire context currently on the top of the stack | ||
{.value} references "value" only if it exists on the top of the stack. Searching will not continue downwards in the stack. | ||
``` | ||
If a reference cannot be found on the context stack, an empty string `''` is returned. | ||
*provide examples* | ||
## Document each keyword funciton |
@@ -311,3 +311,3 @@ import { getPlugin, postProcess } from './library'; | ||
if (!isHTML && s.charAt(0) !== '<') { | ||
return isText ? s.slice(7) : s; | ||
return (isText ? s.slice(7) : s).replace(/{\*.*?\*}/g, ''); | ||
} | ||
@@ -319,5 +319,10 @@ | ||
.replace(/>\s*/g, '>') | ||
.replace(/{\*.*?\*}/g, '') | ||
.trim(); | ||
} | ||
export function loader(content) { | ||
return `module.exports = ${JSON.stringify(compress(content))};`; | ||
} | ||
export function compile(t) { | ||
@@ -324,0 +329,0 @@ // if its an Array, assume it's already compiled; |
@@ -23,2 +23,1 @@ import { registerPlugin } from './library'; | ||
registerPlugin('!', not); | ||
registerPlugin('^', not); // for dustjs syntax compatability |
103883
64
3
9
32
1645
+ Addedbabel-loader@^7.1.4
+ Addedpath@^0.12.7
+ Addedwebpack@^4.5.0
+ Added@webassemblyjs/ast@1.9.0(transitive)
+ Added@webassemblyjs/floating-point-hex-parser@1.9.0(transitive)
+ Added@webassemblyjs/helper-api-error@1.9.0(transitive)
+ Added@webassemblyjs/helper-buffer@1.9.0(transitive)
+ Added@webassemblyjs/helper-code-frame@1.9.0(transitive)
+ Added@webassemblyjs/helper-fsm@1.9.0(transitive)
+ Added@webassemblyjs/helper-module-context@1.9.0(transitive)
+ Added@webassemblyjs/helper-wasm-bytecode@1.9.0(transitive)
+ Added@webassemblyjs/helper-wasm-section@1.9.0(transitive)
+ Added@webassemblyjs/ieee754@1.9.0(transitive)
+ Added@webassemblyjs/leb128@1.9.0(transitive)
+ Added@webassemblyjs/utf8@1.9.0(transitive)
+ Added@webassemblyjs/wasm-edit@1.9.0(transitive)
+ Added@webassemblyjs/wasm-gen@1.9.0(transitive)
+ Added@webassemblyjs/wasm-opt@1.9.0(transitive)
+ Added@webassemblyjs/wasm-parser@1.9.0(transitive)
+ Added@webassemblyjs/wast-parser@1.9.0(transitive)
+ Added@webassemblyjs/wast-printer@1.9.0(transitive)
+ Added@xtuc/ieee754@1.2.0(transitive)
+ Added@xtuc/long@4.2.2(transitive)
+ Addedacorn@6.4.2(transitive)
+ Addedajv@6.12.6(transitive)
+ Addedajv-errors@1.0.1(transitive)
+ Addedajv-keywords@3.5.2(transitive)
+ Addedansi-regex@2.1.1(transitive)
+ Addedansi-styles@2.2.1(transitive)
+ Addedanymatch@2.0.03.1.3(transitive)
+ Addedaproba@1.2.0(transitive)
+ Addedarr-diff@4.0.0(transitive)
+ Addedarr-flatten@1.1.0(transitive)
+ Addedarr-union@3.1.0(transitive)
+ Addedarray-unique@0.3.2(transitive)
+ Addedasn1.js@4.10.1(transitive)
+ Addedassert@1.5.1(transitive)
+ Addedassign-symbols@1.0.0(transitive)
+ Addedasync-each@1.0.6(transitive)
+ Addedatob@2.1.2(transitive)
+ Addedbabel-code-frame@6.26.0(transitive)
+ Addedbabel-core@6.26.3(transitive)
+ Addedbabel-generator@6.26.1(transitive)
+ Addedbabel-helpers@6.24.1(transitive)
+ Addedbabel-loader@7.1.5(transitive)
+ Addedbabel-messages@6.23.0(transitive)
+ Addedbabel-register@6.26.0(transitive)
+ Addedbabel-runtime@6.26.0(transitive)
+ Addedbabel-template@6.26.0(transitive)
+ Addedbabel-traverse@6.26.0(transitive)
+ Addedbabel-types@6.26.0(transitive)
+ Addedbabylon@6.18.0(transitive)
+ Addedbalanced-match@1.0.2(transitive)
+ Addedbase@0.11.2(transitive)
+ Addedbase64-js@1.5.1(transitive)
+ Addedbig.js@5.2.2(transitive)
+ Addedbinary-extensions@1.13.12.3.0(transitive)
+ Addedbindings@1.5.0(transitive)
+ Addedbluebird@3.7.2(transitive)
+ Addedbn.js@4.12.05.2.1(transitive)
+ Addedbrace-expansion@1.1.11(transitive)
+ Addedbraces@2.3.23.0.3(transitive)
+ Addedbrorand@1.1.0(transitive)
+ Addedbrowserify-aes@1.2.0(transitive)
+ Addedbrowserify-cipher@1.0.1(transitive)
+ Addedbrowserify-des@1.0.2(transitive)
+ Addedbrowserify-rsa@4.1.0(transitive)
+ Addedbrowserify-sign@4.2.3(transitive)
+ Addedbrowserify-zlib@0.2.0(transitive)
+ Addedbuffer@4.9.2(transitive)
+ Addedbuffer-from@1.1.2(transitive)
+ Addedbuffer-xor@1.0.3(transitive)
+ Addedbuiltin-status-codes@3.0.0(transitive)
+ Addedcacache@12.0.4(transitive)
+ Addedcache-base@1.0.1(transitive)
+ Addedcall-bind@1.0.7(transitive)
+ Addedchalk@1.1.3(transitive)
+ Addedchokidar@2.1.83.6.0(transitive)
+ Addedchownr@1.1.4(transitive)
+ Addedchrome-trace-event@1.0.4(transitive)
+ Addedcipher-base@1.0.4(transitive)
+ Addedclass-utils@0.3.6(transitive)
+ Addedcollection-visit@1.0.0(transitive)
+ Addedcommander@2.20.3(transitive)
+ Addedcommondir@1.0.1(transitive)
+ Addedcomponent-emitter@1.3.1(transitive)
+ Addedconcat-map@0.0.1(transitive)
+ Addedconcat-stream@1.6.2(transitive)
+ Addedconsole-browserify@1.2.0(transitive)
+ Addedconstants-browserify@1.0.0(transitive)
+ Addedconvert-source-map@1.9.0(transitive)
+ Addedcopy-concurrently@1.0.5(transitive)
+ Addedcopy-descriptor@0.1.1(transitive)
+ Addedcore-js@2.6.12(transitive)
+ Addedcore-util-is@1.0.3(transitive)
+ Addedcreate-ecdh@4.0.4(transitive)
+ Addedcreate-hash@1.2.0(transitive)
+ Addedcreate-hmac@1.1.7(transitive)
+ Addedcrypto-browserify@3.12.0(transitive)
+ Addedcyclist@1.0.2(transitive)
+ Addeddebug@2.6.9(transitive)
+ Addeddecode-uri-component@0.2.2(transitive)
+ Addeddefine-data-property@1.1.4(transitive)
+ Addeddefine-properties@1.2.1(transitive)
+ Addeddefine-property@0.2.51.0.02.0.2(transitive)
+ Addeddes.js@1.1.0(transitive)
+ Addeddetect-indent@4.0.0(transitive)
+ Addeddiffie-hellman@5.0.3(transitive)
+ Addeddomain-browser@1.2.0(transitive)
+ Addedduplexify@3.7.1(transitive)
+ Addedelliptic@6.5.5(transitive)
+ Addedemojis-list@3.0.0(transitive)
+ Addedend-of-stream@1.4.4(transitive)
+ Addedenhanced-resolve@4.5.0(transitive)
+ Addederrno@0.1.8(transitive)
+ Addedes-define-property@1.0.0(transitive)
+ Addedes-errors@1.3.0(transitive)
+ Addedescape-string-regexp@1.0.5(transitive)
+ Addedeslint-scope@4.0.3(transitive)
+ Addedesrecurse@4.3.0(transitive)
+ Addedestraverse@4.3.05.3.0(transitive)
+ Addedesutils@2.0.3(transitive)
+ Addedevents@3.3.0(transitive)
+ Addedevp_bytestokey@1.0.3(transitive)
+ Addedexpand-brackets@2.1.4(transitive)
+ Addedextend-shallow@2.0.13.0.2(transitive)
+ Addedextglob@2.0.4(transitive)
+ Addedfast-deep-equal@3.1.3(transitive)
+ Addedfast-json-stable-stringify@2.1.0(transitive)
+ Addedfiggy-pudding@3.5.2(transitive)
+ Addedfile-uri-to-path@1.0.0(transitive)
+ Addedfill-range@4.0.07.1.1(transitive)
+ Addedfind-cache-dir@1.0.02.1.0(transitive)
+ Addedfind-up@2.1.03.0.0(transitive)
+ Addedflush-write-stream@1.1.1(transitive)
+ Addedfor-in@1.0.2(transitive)
+ Addedfragment-cache@0.2.1(transitive)
+ Addedfrom2@2.3.0(transitive)
+ Addedfs-write-stream-atomic@1.0.10(transitive)
+ Addedfs.realpath@1.0.0(transitive)
+ Addedfsevents@1.2.132.3.3(transitive)
+ Addedfunction-bind@1.1.2(transitive)
+ Addedget-intrinsic@1.2.4(transitive)
+ Addedget-value@2.0.6(transitive)
+ Addedglob@7.2.3(transitive)
+ Addedglob-parent@3.1.05.1.2(transitive)
+ Addedglobals@9.18.0(transitive)
+ Addedgopd@1.0.1(transitive)
+ Addedgraceful-fs@4.2.11(transitive)
+ Addedhas-ansi@2.0.0(transitive)
+ Addedhas-property-descriptors@1.0.2(transitive)
+ Addedhas-proto@1.0.3(transitive)
+ Addedhas-symbols@1.0.3(transitive)
+ Addedhas-value@0.3.11.0.0(transitive)
+ Addedhas-values@0.1.41.0.0(transitive)
+ Addedhash-base@3.0.4(transitive)
+ Addedhash.js@1.1.7(transitive)
+ Addedhasown@2.0.2(transitive)
+ Addedhmac-drbg@1.0.1(transitive)
+ Addedhome-or-tmp@2.0.0(transitive)
+ Addedhttps-browserify@1.0.0(transitive)
+ Addedieee754@1.2.1(transitive)
+ Addediferr@0.1.5(transitive)
+ Addedimurmurhash@0.1.4(transitive)
+ Addedinfer-owner@1.0.4(transitive)
+ Addedinflight@1.0.6(transitive)
+ Addedinherits@2.0.32.0.4(transitive)
+ Addedinvariant@2.2.4(transitive)
+ Addedis-accessor-descriptor@1.0.1(transitive)
+ Addedis-binary-path@1.0.12.1.0(transitive)
+ Addedis-buffer@1.1.6(transitive)
+ Addedis-data-descriptor@1.0.1(transitive)
+ Addedis-descriptor@0.1.71.0.3(transitive)
+ Addedis-extendable@0.1.11.0.1(transitive)
+ Addedis-extglob@2.1.1(transitive)
+ Addedis-finite@1.1.0(transitive)
+ Addedis-glob@3.1.04.0.3(transitive)
+ Addedis-number@3.0.07.0.0(transitive)
+ Addedis-plain-object@2.0.4(transitive)
+ Addedis-windows@1.0.2(transitive)
+ Addedis-wsl@1.1.0(transitive)
+ Addedisarray@1.0.0(transitive)
+ Addedisobject@2.1.03.0.1(transitive)
+ Addedjs-tokens@3.0.2(transitive)
+ Addedjsesc@1.3.0(transitive)
+ Addedjson-parse-better-errors@1.0.2(transitive)
+ Addedjson-schema-traverse@0.4.1(transitive)
+ Addedjson5@0.5.11.0.2(transitive)
+ Addedkind-of@3.2.24.0.06.0.3(transitive)
+ Addedloader-runner@2.4.0(transitive)
+ Addedloader-utils@1.4.2(transitive)
+ Addedlocate-path@2.0.03.0.0(transitive)
+ Addedlodash@4.17.21(transitive)
+ Addedloose-envify@1.4.0(transitive)
+ Addedlru-cache@5.1.1(transitive)
+ Addedmake-dir@1.3.02.1.0(transitive)
+ Addedmap-cache@0.2.2(transitive)
+ Addedmap-visit@1.0.0(transitive)
+ Addedmd5.js@1.3.5(transitive)
+ Addedmemory-fs@0.4.10.5.0(transitive)
+ Addedmicromatch@3.1.10(transitive)
+ Addedmiller-rabin@4.0.1(transitive)
+ Addedminimalistic-assert@1.0.1(transitive)
+ Addedminimalistic-crypto-utils@1.0.1(transitive)
+ Addedminimatch@3.1.2(transitive)
+ Addedminimist@1.2.8(transitive)
+ Addedmississippi@3.0.0(transitive)
+ Addedmixin-deep@1.3.2(transitive)
+ Addedmkdirp@0.5.6(transitive)
+ Addedmove-concurrently@1.0.1(transitive)
+ Addedms@2.0.0(transitive)
+ Addednan@2.19.0(transitive)
+ Addednanomatch@1.2.13(transitive)
+ Addedneo-async@2.6.2(transitive)
+ Addednode-libs-browser@2.2.1(transitive)
+ Addednormalize-path@2.1.13.0.0(transitive)
+ Addedobject-copy@0.1.0(transitive)
+ Addedobject-inspect@1.13.1(transitive)
+ Addedobject-keys@1.1.1(transitive)
+ Addedobject-visit@1.0.1(transitive)
+ Addedobject.assign@4.1.5(transitive)
+ Addedobject.pick@1.3.0(transitive)
+ Addedonce@1.4.0(transitive)
+ Addedos-browserify@0.3.0(transitive)
+ Addedos-homedir@1.0.2(transitive)
+ Addedos-tmpdir@1.0.2(transitive)
+ Addedp-limit@1.3.02.3.0(transitive)
+ Addedp-locate@2.0.03.0.0(transitive)
+ Addedp-try@1.0.02.2.0(transitive)
+ Addedpako@1.0.11(transitive)
+ Addedparallel-transform@1.2.0(transitive)
+ Addedparse-asn1@5.1.7(transitive)
+ Addedpascalcase@0.1.1(transitive)
+ Addedpath@0.12.7(transitive)
+ Addedpath-browserify@0.0.1(transitive)
+ Addedpath-dirname@1.0.2(transitive)
+ Addedpath-exists@3.0.0(transitive)
+ Addedpath-is-absolute@1.0.1(transitive)
+ Addedpbkdf2@3.1.2(transitive)
+ Addedpicomatch@2.3.1(transitive)
+ Addedpify@3.0.04.0.1(transitive)
+ Addedpkg-dir@2.0.03.0.0(transitive)
+ Addedposix-character-classes@0.1.1(transitive)
+ Addedprivate@0.1.8(transitive)
+ Addedprocess@0.11.10(transitive)
+ Addedprocess-nextick-args@2.0.1(transitive)
+ Addedpromise-inflight@1.0.1(transitive)
+ Addedprr@1.0.1(transitive)
+ Addedpublic-encrypt@4.0.3(transitive)
+ Addedpump@2.0.13.0.0(transitive)
+ Addedpumpify@1.5.1(transitive)
+ Addedpunycode@1.4.12.3.1(transitive)
+ Addedqs@6.12.1(transitive)
+ Addedquerystring-es3@0.2.1(transitive)
+ Addedrandombytes@2.1.0(transitive)
+ Addedrandomfill@1.0.4(transitive)
+ Addedreadable-stream@2.3.8(transitive)
+ Addedreaddirp@2.2.13.6.0(transitive)
+ Addedregenerator-runtime@0.11.1(transitive)
+ Addedregex-not@1.0.2(transitive)
+ Addedremove-trailing-separator@1.1.0(transitive)
+ Addedrepeat-element@1.1.4(transitive)
+ Addedrepeat-string@1.6.1(transitive)
+ Addedrepeating@2.0.1(transitive)
+ Addedresolve-url@0.2.1(transitive)
+ Addedret@0.1.15(transitive)
+ Addedrimraf@2.7.1(transitive)
+ Addedripemd160@2.0.2(transitive)
+ Addedrun-queue@1.0.3(transitive)
+ Addedsafe-buffer@5.1.25.2.1(transitive)
+ Addedsafe-regex@1.1.0(transitive)
+ Addedschema-utils@1.0.0(transitive)
+ Addedsemver@5.7.2(transitive)
+ Addedserialize-javascript@4.0.0(transitive)
+ Addedset-function-length@1.2.2(transitive)
+ Addedset-value@2.0.1(transitive)
+ Addedsetimmediate@1.0.5(transitive)
+ Addedsha.js@2.4.11(transitive)
+ Addedside-channel@1.0.6(transitive)
+ Addedslash@1.0.0(transitive)
+ Addedsnapdragon@0.8.2(transitive)
+ Addedsnapdragon-node@2.1.1(transitive)
+ Addedsnapdragon-util@3.0.1(transitive)
+ Addedsource-list-map@2.0.1(transitive)
+ Addedsource-map@0.5.70.6.1(transitive)
+ Addedsource-map-resolve@0.5.3(transitive)
+ Addedsource-map-support@0.4.180.5.21(transitive)
+ Addedsource-map-url@0.4.1(transitive)
+ Addedsplit-string@3.1.0(transitive)
+ Addedssri@6.0.2(transitive)
+ Addedstatic-extend@0.1.2(transitive)
+ Addedstream-browserify@2.0.2(transitive)
+ Addedstream-each@1.2.3(transitive)
+ Addedstream-http@2.8.3(transitive)
+ Addedstream-shift@1.0.3(transitive)
+ Addedstring_decoder@1.1.11.3.0(transitive)
+ Addedstrip-ansi@3.0.1(transitive)
+ Addedsupports-color@2.0.0(transitive)
+ Addedtapable@1.1.3(transitive)
+ Addedterser@4.8.1(transitive)
+ Addedterser-webpack-plugin@1.4.5(transitive)
+ Addedthrough2@2.0.5(transitive)
+ Addedtimers-browserify@2.0.12(transitive)
+ Addedto-arraybuffer@1.0.1(transitive)
+ Addedto-fast-properties@1.0.3(transitive)
+ Addedto-object-path@0.3.0(transitive)
+ Addedto-regex@3.0.2(transitive)
+ Addedto-regex-range@2.1.15.0.1(transitive)
+ Addedtrim-right@1.0.1(transitive)
+ Addedtty-browserify@0.0.0(transitive)
+ Addedtypedarray@0.0.6(transitive)
+ Addedunion-value@1.0.1(transitive)
+ Addedunique-filename@1.1.1(transitive)
+ Addedunique-slug@2.0.2(transitive)
+ Addedunset-value@1.0.0(transitive)
+ Addedupath@1.2.0(transitive)
+ Addeduri-js@4.4.1(transitive)
+ Addedurix@0.1.0(transitive)
+ Addedurl@0.11.3(transitive)
+ Addeduse@3.1.1(transitive)
+ Addedutil@0.10.40.11.1(transitive)
+ Addedutil-deprecate@1.0.2(transitive)
+ Addedvm-browserify@1.1.2(transitive)
+ Addedwatchpack@1.7.5(transitive)
+ Addedwatchpack-chokidar2@2.0.1(transitive)
+ Addedwebpack@4.47.0(transitive)
+ Addedwebpack-sources@1.4.3(transitive)
+ Addedworker-farm@1.7.0(transitive)
+ Addedwrappy@1.0.2(transitive)
+ Addedxtend@4.0.2(transitive)
+ Addedy18n@4.0.3(transitive)
+ Addedyallist@3.1.1(transitive)