Comparing version 21.2.0 to 21.2.1
@@ -8,6 +8,6 @@ | ||
, cache = {} | ||
, formatRe = /{(?!;)({[\s\S]*}|\[[\s\S]*]|(?:("|')(?:\\?.)*?\2|[^;{}])+?)(?:;((?:(['"\/])(?:\\?.)*?\4[gim]*|[^}])*))?}/g | ||
, exprRe = /(['"\/])(?:\\?.)*?\1[gim]*|\b(?:[$_]|false|in|null|true|typeof|void)\b|\.\w+|\w+\s*:|\s+/g | ||
, formatRe = /{(?!;)({[\s\S]*}|\[[\s\S]*]|(?:("|')(?:\\\2|.)*?\2|[^;{}])+?)(?:;((?:(['"\/])(?:\\\4|.)*?\4[gim]*|[^}])*))?}/g | ||
, exprRe = /(['"\/])(?:\\\1|.)*?\1[gim]*|\b(?:[$_]|false|in|null|true|typeof|void)\b|\.\w+|\w+\s*:|\s+/g | ||
, wordRe = /(\$?)([a-z_][\w$]*)/ig | ||
, pattRe = /(\w+)(?::((?:(['"\/])(?:\\?.)*?\3[gim]*|[^;])*))?/g | ||
, pattRe = /(\w+)(?::((?:(['"\/])(?:\\\3|.)*?\3[gim]*|[^;])*))?/g | ||
, pointerRe = /^([\w ]+)\.([\w ]+)$/ | ||
@@ -325,3 +325,3 @@ , globalTexts = {} | ||
len < 16 ? numJunk(arr, i?i-1:i, len, dec) : "r.slice(0,-" + (lastLen + dec) + ")" | ||
) + "+'" + arr[i].charAt(0).replace("'", "\\'") + "'+r.slice(-" + (len + dec) + ( | ||
) + "+" + quote(arr[i].charAt(0)) + "+r.slice(-" + (len + dec) + ( | ||
lastLen ? ",-" + (lastLen + dec) : "" | ||
@@ -328,0 +328,0 @@ ) + "))" |
81
json.js
@@ -13,3 +13,5 @@ | ||
, escRe = /['\n\r\u2028\u2029]|\\(?!x2e)/g | ||
, pathRe = /(^$|.+?)(?:\[([^\]]*)\](\*.*)?|\{([^}]*)})?(\.(?=[^.])|$)/g | ||
, pathRe = /(^$|[\s\S]+?)(?:(?:\[((?:\[[^\]]+\]|[^\]])*)\]|\{([^}]*)})(?:([*^])(.*))?)?(?:\.(?=([^.]))|(?:;(.+))?$)/g | ||
, pathArgs = "i,j,I,J,K,m,p,f,r,e,t" | ||
, pattRe = /(\w+)(?::((?:(['"\/])(?:\\\3|.)*?\3[gim]*|[^;])*))?/g | ||
, reEscRe = /[.+^=:${}()|\/\\]/g | ||
@@ -21,4 +23,4 @@ , keyRe = /\[(.*?)\]/g | ||
, primitiveRe = /^(-?(\d*\.)?\d+|true|false|null)$/ | ||
, valRe = /("|')(?:\\?[^\\])*?\1|(\w*)\{((?:("|')(?:\\?[^\\])*?\4|\w*\{(?:("|')(?:\\?[^\\])*?\5|[^}])*?\}|.)*?)\}|([@$]?)([^,]+)/g | ||
, filterRe = /(!?)(\$?)((?:[-+:.\/\w]+|\[[^\]]+\]|\{[^}]+}|\\x2e)+)(\[]|\{}|)(?:(!(?=\1)==?|(?=\1)[<>=]=?)((?:("|')(?:\\?[^\\])*?\7|\w*\{(?:("|')(?:\\?[^\\])*?\8|\w*\{(?:("|')(?:\\?[^\\])*?\9|[^}])*?\}|.)*?\}|[^|&()])*))?(?=[;)|&]|$)|(([;&|])\11*|([()])|.)/g | ||
, valRe = /("|')(?:\\\1|.)*?\1|(\w*)\{((?:("|')(?:\\\4|.)*?\4|\w*\{(?:("|')(?:\\\5|.)*?\5|[^}])*?\}|.)*?)\}|([@$]?)([^,]+)/g | ||
, filterRe = /(!?)(\$?)((?:[-+:.\/\w]|\[[^\]]+\]|\{[^}]+}|\\x2e)+)(\[]|\{}|)(?:(!(?=\1)==?|(?=\1)[<>=]=?)((?:("|')(?:\\\7|.)*?\7|\w*\{(?:("|')(?:\\\8|.)*?\8|\{(?:("|')(?:\\\9|.)*?\9|[^}])*?\}|.)*?\}|[^|&()])*))?(?=[;)|&]|$)|(([;&|])\11*|([()])|.)/g | ||
, onlyFilterRe = RegExp("^(?:([@*])|" + filterRe.source.slice(0, -10) + "))+$") | ||
@@ -64,2 +66,18 @@ , cleanRe = /(\(o=d\)&&(?!.*o=o).*)\(o=d\)&&/g | ||
exports.ext = { | ||
num: function(str, dec) { | ||
var out = typeof str === "string" ? parseFloat( | ||
dec ? | ||
str.replace(dec, "\ufdff").replace(/[^-e\d\ufdff]/g, "").replace("\ufdff", ".") : | ||
str.replace(/[^-e\d.]/g, "") | ||
) : NaN | ||
return out === out ? out : null | ||
}, | ||
date: Date.parse | ||
} | ||
function quote(str) { | ||
return "'" + (str || "").replace(escRe, escFn) + "'" | ||
} | ||
/** | ||
@@ -123,20 +141,21 @@ * JSON Merge Patch | ||
) | ||
.replace(escRe, escFn) | ||
.replace(pathRe, set === true ? pathSet : pathGet) | ||
} | ||
function pathGet(str, path, arr, arrExt, obj, dot) { | ||
function pathGet(str, path, arr, obj, arrExt, arrSup, dot, ext) { | ||
var v = dot ? "(o=" : "(c=" | ||
, sub = arr || obj | ||
if (sub && !(sub = onlyFilterRe.exec(sub))) throw Error(FILTER_ERR + str) | ||
return ( | ||
v = ( | ||
sub ? | ||
pathGet(0, path, 0, 0, 0, 1) + (arr ? "i" : "j") + "(o)&&" + v + ( | ||
// TODO:2021-01-22:lauri:Filter with single loop | ||
arrExt ? "o.filter(m('" + sub[0] + "'))" + (arrExt === "*" ? "" : ".map(p('" + arrExt.slice(1) + "'))") : | ||
pathGet(0, path, 0, 0, 0, 0, 1) + (arr ? "i" : "j") + "(o)&&" + v + ( | ||
arrExt ? "f(o,m(" + quote(sub[0]) + ")" + ( | ||
arrSup ? (arrExt === "*" ? ",p(" : ",r(") + quote(arrSup) + "))" : ")" | ||
) : | ||
sub[1] ? (arr ? "o" : "K(o)") + (sub[0] === "*" ? "" : ".length") : | ||
+arr == arr ? "o[" + (arr < 0 ? "o.length" + arr : arr) + "]" : | ||
(arr ? "I" : "J") + "(o,m('" + sub[0] + "'))" | ||
sub[0].charAt(0) === "@" ? "o[p(" + quote(sub[0].slice(1)) + ")(d)]" : | ||
(arr ? "I" : "J") + "(o,m(" + quote(sub[0]) + "))" | ||
) + ")" : | ||
v + "o['" + path + "'])" + ( | ||
v + "o[" + quote(path) + "])" + ( | ||
arr === "" ? "&&i(c)&&c" : | ||
@@ -147,6 +166,10 @@ obj === "" ? "&&j(c)&&c" : | ||
) + (dot ? "&&" : "") | ||
if (ext) for (; sub = pattRe.exec(ext); ) { | ||
v = "(c=e." + sub[1] + "(" + v + (sub[2] ? "," + sub[2] : "") + "))" | ||
} | ||
return v | ||
} | ||
function pathSet(str, path, arr, arrExt, obj, dot) { | ||
var op = "o['" + path + "']" | ||
function pathSet(str, path, arr, obj, arrExt, arrSup, dot) { | ||
var op = "o[" + quote(path) + "]" | ||
, out = "" | ||
@@ -160,6 +183,8 @@ , sub = arr || obj | ||
op = "o[" + (arr < 0 ? "o.length" + arr : arr) + "]" | ||
} else if (sub.charAt(0) === "@") { | ||
op = "o[p(" + quote(sub.slice(1)) + ")(d)]" | ||
} else { | ||
if (!onlyFilterRe.test(arr)) throw Error(FILTER_ERR + str) | ||
op = "o[t]" | ||
out += "(t=" + (arr ? "I" : "J") + "(o,m('" + sub + "'),1))!=null&&" | ||
out += "(t=" + (arr ? "I" : "J") + "(o,m(" + quote(sub) + "),1))!=null&&" | ||
} | ||
@@ -176,7 +201,7 @@ } | ||
return map[str] || (map[str] = Function( | ||
"i,j,I,J,K,m,p", | ||
"return function(d,v,b){var c,o,t;return (o=d)&&" + | ||
pathArgs, | ||
"return function(d,v,b){var c,o;return (o=d)&&" + | ||
pathStr(str, set) + | ||
(set ? ",c}": "!==void 0?c:v}") | ||
)(isArray, isObject, inArray, inObject, KEYS, matcher, pathFn)) | ||
)(isArray, isObject, inArray, inObject, KEYS, matcher, pathFn, filterObj, tr, exports.ext)) | ||
} | ||
@@ -207,3 +232,3 @@ | ||
fn = filterFns[key] = Function( | ||
fns[str] ? "a" : "a,i,j,I,J,K,m,p,t", | ||
fns[str] ? "a" : "a," + pathArgs, | ||
"return function(d,b){var o;return " + optimized + "}" | ||
@@ -214,3 +239,3 @@ ) | ||
return fns[str] ? fn : fn( | ||
arr, isArray, isObject, inArray, inObject, KEYS, matcher, pathFn, tmp | ||
arr, isArray, isObject, inArray, inObject, KEYS, matcher, pathFn, filterObj, tr, exports.ext, tmp | ||
) | ||
@@ -229,3 +254,3 @@ } | ||
matcher.date = function(str) { | ||
return matcher(str, "(t.setTime(+d)>=0)&&", null, dateGetter, tmpDate) | ||
return matcher(str, "(t.setTime(typeof d==='string'?Date.parse(d):+d)>=0)&&", null, dateGetter, tmpDate) | ||
} | ||
@@ -385,2 +410,18 @@ | ||
} | ||
function filterObj(a, match, get) { | ||
var out = [] | ||
, i = -1 | ||
, len = a.length | ||
if (isObject(a)) { | ||
for (i in a) if (hasOwn.call(a, i) && match(a[i])) { | ||
out.push(get ? get(a[i]) : a[i]) | ||
} | ||
} else { | ||
for (; ++i < len; ) if (match(a[i])) { | ||
out.push(get ? get(a[i]) : a[i]) | ||
} | ||
} | ||
return out | ||
} | ||
// `this` refers to the `window` in browser and to the `exports` in Node.js. | ||
@@ -387,0 +428,0 @@ }(JSON, Object) // jshint ignore:line |
{ | ||
"name": "litejs", | ||
"version": "21.2.0", | ||
"version": "21.2.1", | ||
"description": "Full-stack web framework in a tiny package", | ||
@@ -5,0 +5,0 @@ "license": "MIT", |
70951
2327