query.js
2.79 KB
//>>built
define(["dojo/_base/kernel","dojo/_base/lang"],function(p,x){var n=function(q,n,f){f||(f={});var u=[],p=function(a){return u[a]}.name;if("PATH"==f.resultType&&"RESULT"==f.evalType)throw Error("RESULT based evaluation not supported with PATH based results");var d={resultType:f.resultType||"VALUE",normalize:function(a){var b=[];a=a.replace(/'([^']|'')*'/g,function(a){return p+"("+(u.push(eval(a))-1)+")"});for(var c=-1;c!=b.length;)c=b.length,a=a.replace(/(\??\([^\(\)]*\))/g,function(a){return"#"+(b.push(a)-
1)});a=a.replace(/[\['](#[0-9]+)[\]']/g,"[$1]").replace(/'?\.'?|\['?/g,";").replace(/;;;|;;/g,";..;").replace(/;$|'?\]|'$/g,"");for(c=-1;c!=a;)c=a,a=a.replace(/#([0-9]+)/g,function(a,c){return b[c]});return a.split(";")},asPaths:function(a){var b,c,d,r,f;for(c=0;c<a.length;c++){d="$";r=a[c];b=1;for(f=r.length;b<f;b++)d+=/^[0-9*]+$/.test(r[b])?"["+r[b]+"]":"['"+r[b]+"']";a[c]=d}return a},exec:function(a,b,c){function k(e,a,c){e&&e.hasOwnProperty(a)&&"VALUE"!=d.resultType&&h.push(g.concat([a]));c?m=
e[a]:e&&e.hasOwnProperty(a)&&m.push(e[a])}function f(a){m.push(a);h.push(g);d.walk(a,function(e){if("object"===typeof a[e]){var c=g;g=g.concat(e);f(a[e]);g=c}})}function n(a,c){if(c instanceof Array){var e=c.length,b=0,l=e,d=1;a.replace(/^(-?[0-9]*):(-?[0-9]*):?(-?[0-9]*)$/g,function(a,c,e,f){b=parseInt(c||b,10);l=parseInt(e||l,10);d=parseInt(f||d,10)});b=0>b?Math.max(0,b+e):Math.min(e,b);l=0>l?Math.max(0,l+e):Math.min(e,l);for(a=b;a<l;a+=d)k(c,a)}}function p(a,c){return(c=c.match(/^_str\(([0-9]+)\)$/))?
u[c[1]]:a}function q(a,b){if(/^\(.*?\)$/.test(b))k(a,d.eval(b,a),c);else if("*"===b)d.walk(a,c&&a instanceof Array?function(b){d.walk(a[b],function(c){k(a[b],c)})}:function(b){k(a,b)});else if(".."===b)f(a);else if(/,/.test(b)){var e,h,g;e=b.split(/'?,'?/);g=0;for(h=e.length;g<h;g++)k(a,p(e[g],b))}else/^\?\(.*?\)$/.test(b)?d.walk(a,function(c){d.eval(b.replace(/^\?\((.*?)\)$/,"$1"),a[c])&&k(a,c)}):/^(-?[0-9]*):(-?[0-9]*):?([0-9]*)$/.test(b)?n(b,a):(b=p(b,b),c&&a instanceof Array&&!/^[0-9*]+$/.test(b)?
d.walk(a,function(c){k(a[c],b)}):k(a,b,c))}for(var g=["$"],m=c?b:[b],h=[g],v,w;a.length;){v=a.shift();if(null===(b=m)||void 0===b)return b;m=[];w=h;h=[];c?q(b,v):d.walk(b,function(a){g=w[a]||g;q(b[a],v)})}if("BOTH"==d.resultType){h=d.asPaths(h);a=[];var t;for(t=0;t<h.length;t++)a.push({path:h[t],value:m[t]});return a}return"PATH"==d.resultType?d.asPaths(h):m},walk:function(a,b){var c,d;if(a instanceof Array)for(c=0,d=a.length;c<d;c++)c in a&&b(c);else if("object"===typeof a)for(c in a)a.hasOwnProperty(c)&&
b(c)},eval:function(a,b){try{return q&&b&&eval(a.replace(/@/g,"v"))}catch(c){throw new SyntaxError("jsonPath: "+c.message+": "+a.replace(/@/g,"v").replace(/\^/g,"_a"));}}};return n&&q?d.exec(d.normalize(n).slice(1),q,"RESULT"==f.evalType):!1};p.isAsync||(x.getObject("dojox.jsonPath",!0).query=n);return n});