Socket
Socket
Sign inDemoInstall

riot-tmpl

Package Overview
Dependencies
0
Maintainers
4
Versions
31
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 2.3.21 to 2.3.22

5

CHANGELOG.md
# riot-tmpl Changes
### v2.3.22
- It has changed the character used to hide quoted strings and regexes, maybe this fix [riot#1588](https://github.com/riot/riot/issues/1588) : Syntax Error: Invalid character `\0129` (riot+compiler.min).
- Removed support for raw expressions. It is unlikely this feature will be implemented in v2.3.x
- Update devDependencies
### v2.3.21

@@ -4,0 +9,0 @@ - Refactorization, now `tmpl` and `brackets` are ~5% faster.

71

dist/es6.tmpl.js
/**
* The riot template engine
* @version v2.3.21
* @version v2.3.22
*/

@@ -103,3 +103,3 @@

while (match = re.exec(str)) {
while ((match = re.exec(str))) {

@@ -114,4 +114,5 @@ pos = match.index

}
if (!match[3])
if (!match[3]) {
continue
}
}

@@ -134,6 +135,7 @@

function unescapeStr (s) {
if (tmpl || isexpr)
if (tmpl || isexpr) {
parts.push(s && s.replace(_bp[5], '$1'))
else
} else {
parts.push(s)
}
}

@@ -148,3 +150,3 @@

ix = 1
while (match = recch.exec(s)) {
while ((match = recch.exec(s))) {
if (match[1] &&

@@ -163,2 +165,3 @@ !(match[1] === ch ? ++ix : --ix)) break

var m = expr.match(_cache[9])
return m

@@ -169,6 +172,2 @@ ? { key: m[1], pos: m[2], val: _cache[0] + m[3].trim() + _cache[1] }

_brackets.hasRaw = function (src) {
return _cache[10].test(src)
}
_brackets.array = function array (pair) {

@@ -183,3 +182,2 @@ return pair ? _create(pair) : _cache

_cache[9] = _regex(_pairs[9])
_cache[10] = _regex(_pairs[10])
}

@@ -191,2 +189,3 @@ cachedBrackets = pair

var b
o = o || {}

@@ -260,12 +259,15 @@ b = o.brackets

function _create (str) {
var expr = _getTmpl(str)
var expr = _getTmpl(str)
if (expr.slice(0, 11) !== 'try{return ') expr = 'return ' + expr
return new Function('E', expr + ';')
return new Function('E', expr + ';') //eslint-disable-line no-new-func
}
var
CH_IDEXPR = '\u2057',
RE_CSNAME = /^(?:(-?[_A-Za-z\xA0-\xFF][-\w\xA0-\xFF]*)|\u2057(\d+)~):/,
RE_QBLOCK = RegExp(brackets.S_QBLOCKS, 'g'),
RE_QBMARK = /\x01(\d+)~/g
RE_DQUOTE = /\u2057/g,
RE_QBMARK = /\u2057(\d+)~/g

@@ -276,3 +278,3 @@ function _getTmpl (str) {

expr,
parts = brackets.split(str.replace(/\u2057/g, '"'), 1)
parts = brackets.split(str.replace(RE_DQUOTE, '"'), 1)

@@ -286,7 +288,7 @@ if (parts.length > 2 || parts[0]) {

if (expr && (expr = i & 1 ?
if (expr && (expr = i & 1
_parseExpr(expr, 1, qstr) :
? _parseExpr(expr, 1, qstr)
'"' + expr
: '"' + expr
.replace(/\\/g, '\\\\')

@@ -301,4 +303,4 @@ .replace(/\r\n?|\n/g, '\\n')

expr = j < 2 ? list[0] :
'[' + list.join(',') + '].join("")'
expr = j < 2 ? list[0]
: '[' + list.join(',') + '].join("")'

@@ -310,3 +312,3 @@ } else {

if (qstr[0])
if (qstr[0]) {
expr = expr.replace(RE_QBMARK, function (_, pos) {

@@ -317,3 +319,3 @@ return qstr[pos]

})
}
return expr

@@ -327,12 +329,9 @@ }

'{': /[{}]/g
},
CS_IDENT = /^(?:(-?[_A-Za-z\xA0-\xFF][-\w\xA0-\xFF]*)|\x01(\d+)~):/
}
function _parseExpr (expr, asText, qstr) {
if (expr[0] === '=') expr = expr.slice(1)
expr = expr
.replace(RE_QBLOCK, function (s, div) {
return s.length > 2 && !div ? '\x01' + (qstr.push(s) - 1) + '~' : s
return s.length > 2 && !div ? CH_IDEXPR + (qstr.push(s) - 1) + '~' : s
})

@@ -349,3 +348,3 @@ .replace(/\s+/g, ' ').trim()

while (expr &&
(match = expr.match(CS_IDENT)) &&
(match = expr.match(RE_CSNAME)) &&
!match.index

@@ -369,4 +368,4 @@ ) {

expr = !cnt ? _wrapExpr(expr, asText) :
cnt > 1 ? '[' + list.join(',') + '].join(" ").trim()' : list[0]
expr = !cnt ? _wrapExpr(expr, asText)
: cnt > 1 ? '[' + list.join(',') + '].join(" ").trim()' : list[0]
}

@@ -391,3 +390,3 @@ return expr

// istanbul ignore next: not both
var
var // eslint-disable-next-line max-len
JS_CONTEXT = '"in this?this:' + (typeof window !== 'object' ? 'global' : 'window') + ').',

@@ -420,4 +419,4 @@ JS_VARNAME = /[,{][$\w]+:|(^ *|[^$\w\.])(?!(?:typeof|true|false|null|undefined|in|instanceof|is(?:Finite|NaN)|void|NaN|new|Date|RegExp|Math)(?![$\w]))([$_A-Za-z][$\w]*)/g,

expr = (tb ?
'function(){' + expr + '}.call(this)' : '(' + expr + ')'
expr = (tb
? 'function(){' + expr + '}.call(this)' : '(' + expr + ')'
) + '?"' + key + '":""'

@@ -427,4 +426,4 @@

expr = 'function(v){' + (tb ?
expr.replace('return ', 'v=') : 'v=(' + expr + ')'
expr = 'function(v){' + (tb
? expr.replace('return ', 'v=') : 'v=(' + expr + ')'
) + ';return v||v===0?v:""}.call(this)'

@@ -439,3 +438,3 @@ }

_tmpl.version = brackets.version = 'v2.3.21'
_tmpl.version = brackets.version = 'v2.3.22'

@@ -442,0 +441,0 @@ return _tmpl

/**
* The riot template engine
* @version v2.3.21
* @version v2.3.22
*/

@@ -100,3 +100,3 @@

while (match = re.exec(str)) {
while ((match = re.exec(str))) {

@@ -111,4 +111,5 @@ pos = match.index

}
if (!match[3])
if (!match[3]) {
continue
}
}

@@ -131,6 +132,7 @@

function unescapeStr (s) {
if (tmpl || isexpr)
if (tmpl || isexpr) {
parts.push(s && s.replace(_bp[5], '$1'))
else
} else {
parts.push(s)
}
}

@@ -145,3 +147,3 @@

ix = 1
while (match = recch.exec(s)) {
while ((match = recch.exec(s))) {
if (match[1] &&

@@ -160,2 +162,3 @@ !(match[1] === ch ? ++ix : --ix)) break

var m = expr.match(_cache[9])
return m

@@ -166,6 +169,2 @@ ? { key: m[1], pos: m[2], val: _cache[0] + m[3].trim() + _cache[1] }

_brackets.hasRaw = function (src) {
return _cache[10].test(src)
}
_brackets.array = function array (pair) {

@@ -180,3 +179,2 @@ return pair ? _create(pair) : _cache

_cache[9] = _regex(_pairs[9])
_cache[10] = _regex(_pairs[10])
}

@@ -188,2 +186,3 @@ cachedBrackets = pair

var b
o = o || {}

@@ -256,12 +255,15 @@ b = o.brackets

function _create (str) {
var expr = _getTmpl(str)
var expr = _getTmpl(str)
if (expr.slice(0, 11) !== 'try{return ') expr = 'return ' + expr
return new Function('E', expr + ';')
return new Function('E', expr + ';') //eslint-disable-line no-new-func
}
var
CH_IDEXPR = '\u2057',
RE_CSNAME = /^(?:(-?[_A-Za-z\xA0-\xFF][-\w\xA0-\xFF]*)|\u2057(\d+)~):/,
RE_QBLOCK = RegExp(brackets.S_QBLOCKS, 'g'),
RE_QBMARK = /\x01(\d+)~/g
RE_DQUOTE = /\u2057/g,
RE_QBMARK = /\u2057(\d+)~/g

@@ -272,3 +274,3 @@ function _getTmpl (str) {

expr,
parts = brackets.split(str.replace(/\u2057/g, '"'), 1)
parts = brackets.split(str.replace(RE_DQUOTE, '"'), 1)

@@ -282,7 +284,7 @@ if (parts.length > 2 || parts[0]) {

if (expr && (expr = i & 1 ?
if (expr && (expr = i & 1
_parseExpr(expr, 1, qstr) :
? _parseExpr(expr, 1, qstr)
'"' + expr
: '"' + expr
.replace(/\\/g, '\\\\')

@@ -297,4 +299,4 @@ .replace(/\r\n?|\n/g, '\\n')

expr = j < 2 ? list[0] :
'[' + list.join(',') + '].join("")'
expr = j < 2 ? list[0]
: '[' + list.join(',') + '].join("")'

@@ -306,3 +308,3 @@ } else {

if (qstr[0])
if (qstr[0]) {
expr = expr.replace(RE_QBMARK, function (_, pos) {

@@ -313,3 +315,3 @@ return qstr[pos]

})
}
return expr

@@ -323,12 +325,9 @@ }

'{': /[{}]/g
},
CS_IDENT = /^(?:(-?[_A-Za-z\xA0-\xFF][-\w\xA0-\xFF]*)|\x01(\d+)~):/
}
function _parseExpr (expr, asText, qstr) {
if (expr[0] === '=') expr = expr.slice(1)
expr = expr
.replace(RE_QBLOCK, function (s, div) {
return s.length > 2 && !div ? '\x01' + (qstr.push(s) - 1) + '~' : s
return s.length > 2 && !div ? CH_IDEXPR + (qstr.push(s) - 1) + '~' : s
})

@@ -345,3 +344,3 @@ .replace(/\s+/g, ' ').trim()

while (expr &&
(match = expr.match(CS_IDENT)) &&
(match = expr.match(RE_CSNAME)) &&
!match.index

@@ -365,4 +364,4 @@ ) {

expr = !cnt ? _wrapExpr(expr, asText) :
cnt > 1 ? '[' + list.join(',') + '].join(" ").trim()' : list[0]
expr = !cnt ? _wrapExpr(expr, asText)
: cnt > 1 ? '[' + list.join(',') + '].join(" ").trim()' : list[0]
}

@@ -387,3 +386,3 @@ return expr

// istanbul ignore next: not both
var
var // eslint-disable-next-line max-len
JS_CONTEXT = '"in this?this:' + (typeof window !== 'object' ? 'global' : 'window') + ').',

@@ -416,4 +415,4 @@ JS_VARNAME = /[,{][$\w]+:|(^ *|[^$\w\.])(?!(?:typeof|true|false|null|undefined|in|instanceof|is(?:Finite|NaN)|void|NaN|new|Date|RegExp|Math)(?![$\w]))([$_A-Za-z][$\w]*)/g,

expr = (tb ?
'function(){' + expr + '}.call(this)' : '(' + expr + ')'
expr = (tb
? 'function(){' + expr + '}.call(this)' : '(' + expr + ')'
) + '?"' + key + '":""'

@@ -423,4 +422,4 @@

expr = 'function(v){' + (tb ?
expr.replace('return ', 'v=') : 'v=(' + expr + ')'
expr = 'function(v){' + (tb
? expr.replace('return ', 'v=') : 'v=(' + expr + ')'
) + ';return v||v===0?v:""}.call(this)'

@@ -435,3 +434,3 @@ }

_tmpl.version = brackets.version = 'v2.3.21'
_tmpl.version = brackets.version = 'v2.3.22'

@@ -438,0 +437,0 @@ return _tmpl

@@ -1,5 +0,4 @@

/* riot-tmpl v2.3.21, @license MIT, (c) 2015 Muut Inc. + contributors */
/* riot-tmpl v2.3.22, @license MIT, (c) 2015 Muut Inc. + contributors */
;(function (window) { // eslint-disable-line no-extra-semi
'use strict'
/*eslint-env amd */

@@ -99,3 +98,3 @@ /**

while (match = re.exec(str)) {
while ((match = re.exec(str))) {

@@ -110,4 +109,5 @@ pos = match.index

}
if (!match[3])
if (!match[3]) {
continue
}
}

@@ -130,6 +130,7 @@

function unescapeStr (s) {
if (tmpl || isexpr)
if (tmpl || isexpr) {
parts.push(s && s.replace(_bp[5], '$1'))
else
} else {
parts.push(s)
}
}

@@ -144,3 +145,3 @@

ix = 1
while (match = recch.exec(s)) {
while ((match = recch.exec(s))) {
if (match[1] &&

@@ -159,2 +160,3 @@ !(match[1] === ch ? ++ix : --ix)) break

var m = expr.match(_cache[9])
return m

@@ -165,6 +167,2 @@ ? { key: m[1], pos: m[2], val: _cache[0] + m[3].trim() + _cache[1] }

_brackets.hasRaw = function (src) {
return _cache[10].test(src)
}
_brackets.array = function array (pair) {

@@ -179,3 +177,2 @@ return pair ? _create(pair) : _cache

_cache[9] = _regex(_pairs[9])
_cache[10] = _regex(_pairs[10])
}

@@ -187,2 +184,3 @@ cachedBrackets = pair

var b
o = o || {}

@@ -255,12 +253,15 @@ b = o.brackets

function _create (str) {
var expr = _getTmpl(str)
var expr = _getTmpl(str)
if (expr.slice(0, 11) !== 'try{return ') expr = 'return ' + expr
return new Function('E', expr + ';')
return new Function('E', expr + ';') //eslint-disable-line no-new-func
}
var
CH_IDEXPR = '\u2057',
RE_CSNAME = /^(?:(-?[_A-Za-z\xA0-\xFF][-\w\xA0-\xFF]*)|\u2057(\d+)~):/,
RE_QBLOCK = RegExp(brackets.S_QBLOCKS, 'g'),
RE_QBMARK = /\x01(\d+)~/g
RE_DQUOTE = /\u2057/g,
RE_QBMARK = /\u2057(\d+)~/g

@@ -271,3 +272,3 @@ function _getTmpl (str) {

expr,
parts = brackets.split(str.replace(/\u2057/g, '"'), 1)
parts = brackets.split(str.replace(RE_DQUOTE, '"'), 1)

@@ -281,7 +282,7 @@ if (parts.length > 2 || parts[0]) {

if (expr && (expr = i & 1 ?
if (expr && (expr = i & 1
_parseExpr(expr, 1, qstr) :
? _parseExpr(expr, 1, qstr)
'"' + expr
: '"' + expr
.replace(/\\/g, '\\\\')

@@ -296,4 +297,4 @@ .replace(/\r\n?|\n/g, '\\n')

expr = j < 2 ? list[0] :
'[' + list.join(',') + '].join("")'
expr = j < 2 ? list[0]
: '[' + list.join(',') + '].join("")'

@@ -305,3 +306,3 @@ } else {

if (qstr[0])
if (qstr[0]) {
expr = expr.replace(RE_QBMARK, function (_, pos) {

@@ -312,3 +313,3 @@ return qstr[pos]

})
}
return expr

@@ -322,12 +323,9 @@ }

'{': /[{}]/g
},
CS_IDENT = /^(?:(-?[_A-Za-z\xA0-\xFF][-\w\xA0-\xFF]*)|\x01(\d+)~):/
}
function _parseExpr (expr, asText, qstr) {
if (expr[0] === '=') expr = expr.slice(1)
expr = expr
.replace(RE_QBLOCK, function (s, div) {
return s.length > 2 && !div ? '\x01' + (qstr.push(s) - 1) + '~' : s
return s.length > 2 && !div ? CH_IDEXPR + (qstr.push(s) - 1) + '~' : s
})

@@ -344,3 +342,3 @@ .replace(/\s+/g, ' ').trim()

while (expr &&
(match = expr.match(CS_IDENT)) &&
(match = expr.match(RE_CSNAME)) &&
!match.index

@@ -364,4 +362,4 @@ ) {

expr = !cnt ? _wrapExpr(expr, asText) :
cnt > 1 ? '[' + list.join(',') + '].join(" ").trim()' : list[0]
expr = !cnt ? _wrapExpr(expr, asText)
: cnt > 1 ? '[' + list.join(',') + '].join(" ").trim()' : list[0]
}

@@ -386,3 +384,3 @@ return expr

// istanbul ignore next: not both
var
var // eslint-disable-next-line max-len
JS_CONTEXT = '"in this?this:' + (typeof window !== 'object' ? 'global' : 'window') + ').',

@@ -415,4 +413,4 @@ JS_VARNAME = /[,{][$\w]+:|(^ *|[^$\w\.])(?!(?:typeof|true|false|null|undefined|in|instanceof|is(?:Finite|NaN)|void|NaN|new|Date|RegExp|Math)(?![$\w]))([$_A-Za-z][$\w]*)/g,

expr = (tb ?
'function(){' + expr + '}.call(this)' : '(' + expr + ')'
expr = (tb
? 'function(){' + expr + '}.call(this)' : '(' + expr + ')'
) + '?"' + key + '":""'

@@ -422,4 +420,4 @@

expr = 'function(v){' + (tb ?
expr.replace('return ', 'v=') : 'v=(' + expr + ')'
expr = 'function(v){' + (tb
? expr.replace('return ', 'v=') : 'v=(' + expr + ')'
) + ';return v||v===0?v:""}.call(this)'

@@ -438,3 +436,3 @@ }

tmpl.version = brackets.version = 'v2.3.21'
tmpl.version = brackets.version = 'v2.3.22'

@@ -444,3 +442,3 @@ /* istanbul ignore else */

module.exports = {
'tmpl': tmpl, 'brackets': brackets
tmpl: tmpl, brackets: brackets
}

@@ -450,3 +448,3 @@ } else if (typeof define === 'function' && typeof define.amd !== 'undefined') {

return {
'tmpl': tmpl, 'brackets': brackets
tmpl: tmpl, brackets: brackets
}

@@ -459,2 +457,2 @@ })

})(typeof window === 'object' ? /* istanbul ignore next */ window : void 0) // eslint-disable-line
})(typeof window === 'object' ? /* istanbul ignore next */ window : void 0)
{
"name": "riot-tmpl",
"version": "2.3.21",
"version": "2.3.22",
"description": "The riot template engine",

@@ -31,14 +31,14 @@ "main": "dist/tmpl.js",

"devDependencies": {
"coveralls": "^2.11.6",
"eslint": "^1.10.3",
"coveralls": "^2.11.8",
"eslint": "^2.3.0",
"expect.js": "^0.3.1",
"istanbul": "^0.4.2",
"jspreproc": "^0.2.7",
"karma": "^0.13.19",
"karma": "^0.13.21",
"karma-browserstack-launcher": "^0.1.6",
"karma-coverage": "^0.5.3",
"karma-mocha": "^0.2.1",
"karma-phantomjs-launcher": "^0.2.3",
"mocha": "^2.4.4",
"phantomjs": "^2.1.2",
"karma-coverage": "^0.5.5",
"karma-mocha": "^0.2.2",
"karma-phantomjs-launcher": "^1.0.0",
"mocha": "^2.4.5",
"phantomjs": "^2.1.3",
"riot-bump": "^1.0.0"

@@ -45,0 +45,0 @@ },

@@ -22,3 +22,20 @@ /**

// --------------------------------------------------------------------------
//
//#set $_RIX_TEST = 4
//#set $_RIX_ESC = 5
//#set $_RIX_OPEN = 6
//#set $_RIX_CLOSE = 7
//#set $_RIX_PAIR = 8
//#set $_RIX_LOOP = 9
//#ifndef $_RIX_TEST
var
$_RIX_TEST = 4, // DONT'T FORGET SYNC THE #set BLOCK!!!
$_RIX_ESC = 5,
$_RIX_OPEN = 6,
$_RIX_CLOSE = 7,
$_RIX_PAIR = 8,
$_RIX_LOOP = 9
//#endif
var
REGLOB = 'g',

@@ -82,20 +99,2 @@

//#set $_RIX_TEST = 4
//#set $_RIX_ESC = 5
//#set $_RIX_OPEN = 6
//#set $_RIX_CLOSE = 7
//#set $_RIX_PAIR = 8
//#set $_RIX_LOOP = 9
//#set $_RIX_RAW = 10
//#ifndef $_RIX_TEST
var
$_RIX_TEST = 4, // DONT'T FORGET SYNC THE #set BLOCK!!!
$_RIX_ESC = 5,
$_RIX_OPEN = 6,
$_RIX_CLOSE = 7,
$_RIX_PAIR = 8,
$_RIX_LOOP = 9,
$_RIX_RAW = 10
//#endif
// pre-made string and regexes for the default brackets

@@ -235,3 +234,3 @@ var _pairs = [

while (match = re.exec(str)) {
while ((match = re.exec(str))) {

@@ -250,4 +249,5 @@ pos = match.index

}
if (!match[3]) // if don't have a closing bracket
if (!match[3]) { // if don't have a closing bracket
continue // search again
}
}

@@ -278,6 +278,7 @@

function unescapeStr (s) {
if (tmpl || isexpr)
if (tmpl || isexpr) {
parts.push(s && s.replace(_bp[$_RIX_ESC], '$1'))
else
} else {
parts.push(s)
}
}

@@ -294,3 +295,3 @@

ix = 1
while (match = recch.exec(s)) {
while ((match = recch.exec(s))) {
if (match[1] &&

@@ -311,2 +312,3 @@ !(match[1] === ch ? ++ix : --ix)) break

var m = expr.match(_cache[$_RIX_LOOP])
return m

@@ -317,7 +319,2 @@ ? { key: m[1], pos: m[2], val: _cache[0] + m[3].trim() + _cache[1] }

// exposed by riot.util.tmpl.haveRaw
_brackets.hasRaw = function (src) {
return _cache[$_RIX_RAW].test(src)
}
/**

@@ -347,3 +344,2 @@ * Returns an array with brackets information, defaults to the current brackets.

_cache[$_RIX_LOOP] = _regex(_pairs[$_RIX_LOOP])
_cache[$_RIX_RAW] = _regex(_pairs[$_RIX_RAW])
}

@@ -360,2 +356,3 @@ cachedBrackets = pair // always set these

var b
o = o || {}

@@ -362,0 +359,0 @@ b = o.brackets

//#if 0
/*global tmpl, brackets */
/* global tmpl, brackets, window */
/* eslint-disable no-void */
/* eslint-env amd */
//#endif

@@ -8,3 +10,2 @@ //#if NODE

'use strict'
/*eslint-env amd */
//#else

@@ -22,3 +23,2 @@

//#if NODE

@@ -31,3 +31,3 @@ tmpl.version = brackets.version = 'WIP'

module.exports = {
'tmpl': tmpl, 'brackets': brackets
tmpl: tmpl, brackets: brackets
}

@@ -37,3 +37,3 @@ } else if (typeof define === 'function' && typeof define.amd !== 'undefined') {

return {
'tmpl': tmpl, 'brackets': brackets
tmpl: tmpl, brackets: brackets
}

@@ -46,3 +46,3 @@ })

})(typeof window === 'object' ? /* istanbul ignore next */ window : void 0) // eslint-disable-line
})(typeof window === 'object' ? /* istanbul ignore next */ window : void 0)
//#endif

@@ -45,4 +45,5 @@ /**

_cache[str] = _create(str, 1) // request debug output
var rs = typeof riot === 'undefined' ?
'(riot undefined)' : JSON.stringify(riot.settings)
var rs = typeof riot === 'undefined'
? '(riot undefined)' : JSON.stringify(riot.settings)
console.log('--- DEBUG' +

@@ -139,9 +140,8 @@ '\n riot.settings: ' + rs + '\n data: ' + JSON.stringify(data))

function _create (str) {
var expr = _getTmpl(str)
var expr = _getTmpl(str)
if (expr.slice(0, 11) !== 'try{return ') expr = 'return ' + expr
//#if DEBUG
if (arguments.length > 1)
console.log('--- getter:\n `' + expr + '`\n---')
if (arguments.length > 1) console.log('--- getter:\n `' + expr + '`\n---')
//#elif LIST_GETTERS

@@ -153,3 +153,3 @@ //console.log(' In: `%s`\nOUT: `%s`', str, expr)

// The parameter `E` is the error handler for runtime only.
return new Function('E', expr + ';')
return new Function('E', expr + ';') //eslint-disable-line no-new-func
}

@@ -163,4 +163,7 @@

var
CH_IDEXPR = '\u2057',
RE_CSNAME = /^(?:(-?[_A-Za-z\xA0-\xFF][-\w\xA0-\xFF]*)|\u2057(\d+)~):/,
RE_QBLOCK = RegExp(brackets.S_QBLOCKS, 'g'),
RE_QBMARK = /\x01(\d+)~/g // string or regex marker, $1: array index
RE_DQUOTE = /\u2057/g,
RE_QBMARK = /\u2057(\d+)~/g // string or regex marker, $1: array index

@@ -179,3 +182,3 @@ /**

expr,
parts = brackets.split(str.replace(/\u2057/g, '"'), 1) // get text/expr parts
parts = brackets.split(str.replace(RE_DQUOTE, '"'), 1) // get text/expr parts

@@ -190,7 +193,7 @@ // We can have almost anything as expressions, except comments... hope

if (expr && (expr = i & 1 ? // every odd element is an expression
if (expr && (expr = i & 1 // every odd element is an expression
_parseExpr(expr, 1, qstr) : // mode 1 convert falsy values to "",
? _parseExpr(expr, 1, qstr) // mode 1 convert falsy values to "",
// except zero
'"' + expr // ttext: convert to js literal string
: '"' + expr // ttext: convert to js literal string
.replace(/\\/g, '\\\\') // this is html, preserve backslashes

@@ -205,4 +208,4 @@ .replace(/\r\n?|\n/g, '\\n') // normalize eols

expr = j < 2 ? list[0] : // optimize code for 0-1 parts
'[' + list.join(',') + '].join("")'
expr = j < 2 ? list[0] // optimize code for 0-1 parts
: '[' + list.join(',') + '].join("")'

@@ -215,3 +218,3 @@ } else {

// Restore quoted strings and regexes
if (qstr[0])
if (qstr[0]) {
expr = expr.replace(RE_QBMARK, function (_, pos) {

@@ -222,3 +225,3 @@ return qstr[pos]

})
}
return expr

@@ -232,4 +235,3 @@ }

'{': /[{}]/g
},
CS_IDENT = /^(?:(-?[_A-Za-z\xA0-\xFF][-\w\xA0-\xFF]*)|\x01(\d+)~):/
}

@@ -270,7 +272,5 @@ /**

if (expr[0] === '=') expr = expr.slice(1)
expr = expr
.replace(RE_QBLOCK, function (s, div) { // hide strings & regexes
return s.length > 2 && !div ? '\x01' + (qstr.push(s) - 1) + '~' : s
return s.length > 2 && !div ? CH_IDEXPR + (qstr.push(s) - 1) + '~' : s
})

@@ -288,3 +288,3 @@ .replace(/\s+/g, ' ').trim()

while (expr &&
(match = expr.match(CS_IDENT)) &&
(match = expr.match(RE_CSNAME)) &&
!match.index // index > 0 means error

@@ -313,4 +313,4 @@ ) {

// For shorthands, the generated code returns an array with expression-name pairs
expr = !cnt ? _wrapExpr(expr, asText) :
cnt > 1 ? '[' + list.join(',') + '].join(" ").trim()' : list[0]
expr = !cnt ? _wrapExpr(expr, asText)
: cnt > 1 ? '[' + list.join(',') + '].join(" ").trim()' : list[0]
}

@@ -337,3 +337,3 @@ return expr

// istanbul ignore next: not both
var
var // eslint-disable-next-line max-len
JS_CONTEXT = '"in this?this:' + (typeof window !== 'object' ? 'global' : 'window') + ').',

@@ -384,4 +384,4 @@ JS_VARNAME = /[,{][$\w]+:|(^ *|[^$\w\.])(?!(?:typeof|true|false|null|undefined|in|instanceof|is(?:Finite|NaN)|void|NaN|new|Date|RegExp|Math)(?![$\w]))([$_A-Za-z][$\w]*)/g,

// ==> 'return [' + expr_list.join(',') + '].join(" ").trim()'
expr = (tb ?
'function(){' + expr + '}.call(this)' : '(' + expr + ')'
expr = (tb
? 'function(){' + expr + '}.call(this)' : '(' + expr + ')'
) + '?"' + key + '":""'

@@ -393,4 +393,4 @@

// ==> 'return [' + text_and_expr_list.join(',') + '].join("")'
expr = 'function(v){' + (tb ?
expr.replace('return ', 'v=') : 'v=(' + expr + ')'
expr = 'function(v){' + (tb
? expr.replace('return ', 'v=') : 'v=(' + expr + ')'
) + ';return v||v===0?v:""}.call(this)'

@@ -397,0 +397,0 @@ }

@@ -11,3 +11,3 @@ /*eslint-env mocha */

str: 'x',
obj: {val: 2},
obj: { val: 2 },
arr: [2],

@@ -260,3 +260,2 @@ x: 2,

describe('whitespace', function () {

@@ -304,2 +303,3 @@

var gw = typeof window === 'object' ? 'window' : 'global'
expect(render('{ ' + gw + '.globalVar }')).to.be(5)

@@ -313,5 +313,6 @@ data.Date = '{}'

var i, a = ['isFinite', 'isNaN', 'Date', 'RegExp', 'Math']
for (i = 0; i < a.length; ++i)
for (i = 0; i < a.length; ++i) {
data[a[i]] = 0
}
expect(render('{ Infinity }')).to.be.a('number')

@@ -324,4 +325,5 @@ expect(render('{ isFinite(1) }')).to.be(true)

for (i = 0; i < a.length; ++i)
for (i = 0; i < a.length; ++i) {
delete data[a[i]]
}
})

@@ -374,2 +376,3 @@

var err
tmpl.errorHandler = function (e) { err = e }

@@ -382,3 +385,3 @@ // je, tmpl({x}, NaN) does not generate error... bug or danling var?

expect(err instanceof Error).to.be(true)
expect(err.riotData).to.eql({tagName: undefined, _riot_id: undefined})
expect(err.riotData).to.eql({ tagName: undefined, _riot_id: undefined })
// undefined as parameter for Function.call(`this`) defaults to global

@@ -388,3 +391,3 @@ err = 0

expect(err instanceof Error).to.be(true)
expect(err.riotData).to.eql({tagName: undefined, _riot_id: undefined})
expect(err.riotData).to.eql({ tagName: undefined, _riot_id: undefined })
})

@@ -394,2 +397,3 @@

var err
tmpl.errorHandler = function (e) { err = e }

@@ -399,3 +403,3 @@ err = 0

expect(err instanceof Error).to.be(true)
expect(err.riotData).to.eql({tagName: undefined, _riot_id: undefined})
expect(err.riotData).to.eql({ tagName: undefined, _riot_id: undefined })
})

@@ -407,3 +411,3 @@

tmpl.errorHandler = function (e) { err = e }
data.root = {tagName: 'DIV'}
data.root = { tagName: 'DIV' }
data._riot_id = 1

@@ -416,3 +420,3 @@ result = render('{ undefinedVar.property }') // render as normal

expect(err instanceof Error).to.be(true)
expect(err.riotData).to.eql({tagName: 'DIV', _riot_id: 1})
expect(err.riotData).to.eql({ tagName: 'DIV', _riot_id: 1 })
})

@@ -448,12 +452,13 @@

atest = [
'{ studio in studios["Nearby Locations"] }', {key: 'studio', pos: undefined, val: '{studios["Nearby Locations"]}'},
'{k,i in item}', {key: 'k', pos: 'i', val: '{item}'},
'{ k in i }', {key: 'k', pos: undefined, val: '{i}'},
'{^ item in i }', {key: 'item', pos: undefined, val: '{i}'},
'{^item,idx in items } ', {key: 'item', pos: 'idx', val: '{items}'},
'{ item} ', {val: '{ item}'},
'{item', {val: '{item'}, // val is expected
'{}', {val: '{}'},
'0', {val: '0'}
'{ studio in studios["Nearby Locations"] }', { key: 'studio', pos: undefined, val: '{studios["Nearby Locations"]}' },
'{k,i in item}', { key: 'k', pos: 'i', val: '{item}' },
'{ k in i }', { key: 'k', pos: undefined, val: '{i}' },
'{^ item in i }', { key: 'item', pos: undefined, val: '{i}' },
'{^item,idx in items } ', { key: 'item', pos: 'idx', val: '{items}' },
'{ item} ', { val: '{ item}' },
'{item', { val: '{item' }, // val is expected
'{}', { val: '{}' },
'0', { val: '0' }
]
for (i = 0; i < atest.length; i += 2) {

@@ -468,11 +473,12 @@ expect(tmpl.loopKeys(atest[i])).to.eql(atest[i + 1])

atest = [
'{{k,i in item}}', {key: 'k', pos: 'i', val: '{{item}}'},
'{{ k in i }}', {key: 'k', pos: undefined, val: '{{i}}'},
'{{^ item in i }}', {key: 'item', pos: undefined, val: '{{i}}'},
'{{^item,idx in items }} ', {key: 'item', pos: 'idx', val: '{{items}}'},
'{{ item}} ', {val: '{{ item}}'},
'{{item', {val: '{{item'}, // val is expected
'{{}}', {val: '{{}}'},
'0', {val: '0'}
'{{k,i in item}}', { key: 'k', pos: 'i', val: '{{item}}' },
'{{ k in i }}', { key: 'k', pos: undefined, val: '{{i}}' },
'{{^ item in i }}', { key: 'item', pos: undefined, val: '{{i}}' },
'{{^item,idx in items }} ', { key: 'item', pos: 'idx', val: '{{items}}' },
'{{ item}} ', { val: '{{ item}}' },
'{{item', { val: '{{item' }, // val is expected
'{{}}', { val: '{{}}' },
'0', { val: '0' }
]
for (i = 0; i < atest.length; i += 2) {

@@ -495,16 +501,16 @@ expect(tmpl.loopKeys(atest[i])).to.eql(atest[i + 1])

it('tmpl.haveRaw: test for raw html flag in a template (v2.3.14)', function () {
expect(tmpl.haveRaw('{' + RAW_FLAG + ' "<br>" }')).to.be(true)
expect(tmpl.haveRaw('{ ' + RAW_FLAG + ' "<br>" }')).to.be(false)
expect(tmpl.haveRaw('\\{= "<br>" } ')).to.be(false)
expect(tmpl.haveRaw(' {' + RAW_FLAG + ' "<br>" }')).to.be(true)
expect(tmpl.haveRaw(' { ' + RAW_FLAG + ' "<br>" }')).to.be(false)
expect(tmpl.haveRaw(' \\{= "<br>" } ')).to.be(false)
})
//it('tmpl.haveRaw: test for raw html flag in a template (v2.3.14)', function () {
// expect(tmpl.haveRaw('{' + RAW_FLAG + ' "<br>" }')).to.be(true)
// expect(tmpl.haveRaw('{ ' + RAW_FLAG + ' "<br>" }')).to.be(false)
// expect(tmpl.haveRaw('\\{= "<br>" } ')).to.be(false)
// expect(tmpl.haveRaw(' {' + RAW_FLAG + ' "<br>" }')).to.be(true)
// expect(tmpl.haveRaw(' { ' + RAW_FLAG + ' "<br>" }')).to.be(false)
// expect(tmpl.haveRaw(' \\{= "<br>" } ')).to.be(false)
//})
it('the raw html is removed before evaluation (v2.3.14)', function () {
expect(render('{' + RAW_FLAG + ' "<br>" }')).to.be('<br>')
expect(render(' {' + RAW_FLAG + ' "<br>" }')).to.be(' <br>')
expect(render('{' + RAW_FLAG + ' "<" + str + ">" }')).to.be('<x>')
})
//it('the raw html is removed before evaluation (v2.3.14)', function () {
// expect(render('{' + RAW_FLAG + ' "<br>" }')).to.be('<br>')
// expect(render(' {' + RAW_FLAG + ' "<br>" }')).to.be(' <br>')
// expect(render('{' + RAW_FLAG + ' "<" + str + ">" }')).to.be('<x>')
//})

@@ -511,0 +517,0 @@ })

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc