-
Notifications
You must be signed in to change notification settings - Fork 1
/
praetor.min.js
7 lines (7 loc) · 5.91 KB
/
praetor.min.js
1
2
3
4
5
6
7
/* Praeter.js 0.1.7 - Stored Procedures (JS Code blocks) for JSON results via XPath JSON
*
* Copyright (c) 2015 Michael Glazer (https://github.com/magnumjs/praetor.js)
* Licensed under the MIT (MIT-LICENSE.txt) licence.
*/
function jsonPath1(t,e,r,n){var o={resultType:r&&r.resultType||"VALUE",result:[],normalize:function(t){var e=[];return t.replace(/[\['](\??\(.*?\))[\]']|\['(.*?)'\]/g,function(t,r,n){return"[#"+(e.push(r||n)-1)+"]"}).replace(/'?\.'?|\['?/g,";").replace(/;;;|;;/g,";..;").replace(/;$|'?\]|'$/g,"").replace(/#([0-9]+)/g,function(t,r){return e[r]})},asPath:function(t){for(var e=t.split(";"),r="$",n=1,o=e.length;o>n;n++)r+=/^[0-9*]+$/.test(e[n])?"["+e[n]+"]":"['"+e[n]+"']";return r},store:function(t,e){return t&&(o.result[o.result.length]="PATH"==o.resultType.toUpperCase()?o.asPath(t):e),!!t},trace:function(t,e,r){if(""!==t){var n=t.split(";"),a=n.shift();if(n=n.join(";"),e&&e.hasOwnProperty(a))o.trace(n,e[a],r+";"+a);else if("*"===a)o.walk(a,n,e,r,function(t,e,r,n,a){o.trace(t+";"+r,n,a)});else if(".."===a)o.trace(n,e,r),o.walk(a,n,e,r,function(t,e,r,n,a){"object"==typeof n[t]&&o.trace("..;"+r,n[t],a+";"+t)});else if(/^\(.*?\)$/.test(a))o.trace(o.eval(a,e,r.substr(r.lastIndexOf(";")+1))+";"+n,e,r);else if(/^\?\(.*?\)$/.test(a))o.walk(a,n,e,r,function(t,e,r,n,a){o.eval(e.replace(/^\?\((.*?)\)$/,"$1"),n instanceof Array?n[t]:n,t)&&o.trace(t+";"+r,n,a)});else if(/^(-?[0-9]*):(-?[0-9]*):?([0-9]*)$/.test(a))o.slice(a,n,e,r);else if(/,/.test(a))for(var i=a.split(/'?,'?/),s=0,u=i.length;u>s;s++)o.trace(i[s]+";"+n,e,r)}else o.store(r,e)},walk:function(t,e,r,n,o){if(r instanceof Array)for(var a=0,i=r.length;i>a;a++)a in r&&o(a,t,e,r,n);else if("object"==typeof r)for(var s in r)r.hasOwnProperty(s)&&o(s,t,e,r,n)},slice:function(t,e,r,n){if(r instanceof Array){var a=r.length,i=0,s=a,u=1;t.replace(/^(-?[0-9]*):(-?[0-9]*):?(-?[0-9]*)$/g,function(t,e,r,n){i=parseInt(e||i),s=parseInt(r||s),u=parseInt(n||u)}),i=0>i?Math.max(0,i+a):Math.min(a,i),s=0>s?Math.max(0,s+a):Math.min(a,s);for(var c=i;s>c;c+=u)o.trace(c+";"+e,r,n)}},eval:function(t,e,r){try{var o=JSON.stringify({query:t,obj:e,index:r});if(n[o]=n[o]||{},!n[o].functionToInvoke){var i=function(t,e,r,a){if(!n[o].innerFunctionToInvoke){var i='return x.replace(/(^|[^\\\\])@/g, "$1_v").replace(/\\@/g, "@")';n[o].innerFunctionToInvoke=new Function(["x","_v","_vname","$"],i)}t=n[o].innerFunctionToInvoke.apply(this,[t,e,r,a]);var s="return "+t,u=new Function(["x","_v","_vname","$"],s),c=u.apply(this,[t,e,r,a]);return c}.bind(this);n[o]={functionToInvoke:i}}var s=n[o].functionToInvoke(t,e,r,a);return a&&e&&s}catch(u){throw new SyntaxError("jsonPath: "+u.message+": "+t.replace(/(^|[^\\])@/g,"$1_v").replace(/\\@/g,"@"))}}},a=t;return e&&t&&("VALUE"==o.resultType.toUpperCase()||"PATH"==o.resultType.toUpperCase())?(o.trace(o.normalize(e).replace(/^\$;?/,""),t,"$"),o.result.length?o.result:!1):void 0}var JSONPath=function(){return function(t,e,r){return this.cache=this.cache||{},jsonPath1(e,r,t,this.cache)}}(),p=function(t){"use strict";function e(){if("undefined"==typeof JSONPath)throw new Error("JSONPath is required: ()");return JSONPath}function r(e,n){for(var o in n)if("object"!=typeof e[o])e[o]=e[o]===t?n[o]:e[o];else{if(f.call(e[o])==s){delete e[o];continue}e[o]=r(e[o],n[o])}return e}function n(t){return JSON.parse(JSON.stringify(t))}function o(t,e,r){o.setOptions(r,e);var n=l(o.getState(e),t||{});o.map(e,n)}function a(e,r,n){var o=JSON.stringify({proc:r,parms:n});if(m[o]=m[o]={},!m[o].fun)try{m[o].fun=Function(r.code)}catch(a){return new Error("code error: "+a,"praetor.js:createFunctionExec",265)}n=n||{};for(var i in r.parms)n[i]=n[i]===t?r.parms[i]:n[i];var s={results:e,params:n},u=m[o].fun.apply(s);return u?u:s.results}var i="[object Object]",s="[object Null]",u="[object Array]",c="[object String]",f={}.toString,l=function(t,e){for(var r in e)if("object"!=typeof t[r])t[r]=e[r];else if("object"==typeof e[r]){if(f.call(e[r])==s){delete t[r];continue}t[r]=l(t[r],e[r])}return t},p="rootid",v={jsonPathOptions:{}},h={},g={};o.model=function(){return{stores:{},queries:{},procs:{}}},o.setOptions=function(t,e){h=t,o.settings(t,e)},o.getOptions=function(){return h},o.settings=function(t){return g=l(v,t)},o.map=function(t,e){return this.state=this.state||{},t?(this.state[t]=e||this.state[t]||o.model(),this.state[t]):(this.state[p]=e||this.state[p]||o.model(),this.state[p])},o.setState=function(t,e){var n=r(t||{},o.model());o.map(e,n)},o.getState=function(t){return n(o.map(t))},o.setDataStore=function(t,e,r){o.map(r).stores[t]=e},o.getDataStore=function(t,e){return o.map(e).stores[t]},o.removeDataStore=function(t,e){delete o.map(e).stores[t]},o.emptyDataStore=function(t,e){o.map(e).stores[t]={}},o.setJsonQuery=function(t,e,r,n){o.map(n).queries[t]={query:e,store:r}},o.getJsonQuery=function(t,e){return o.map(e).queries[t]},o.getJsonQueryResult=function(t,r,n){var a=o.getJsonQuery(t,n),i=o.getDataStore(a.store,n);for(var s in r)a.query=a.query.split(s).join(r[s]);var u=e()(o.settings().jsonPathOptions,i,a.query);return u},o.setStoredProc=function(t,e,r,n,a){o.map(a).procs[t]={queries:f.call(e)==u?e:e.split(","),code:r,parms:n}},o.getStoredProc=function(t,e){return o.map(e).procs[t]},o.getStoredProcResult=function(t,e,r){var n=o.getStoredProc(t,r),i=[];return i=n.queries.map(function(t){var n={};return n[t]=o.getJsonQueryResult(t,e,r),n}),a(i,n,e)},o.proc=function(t,r,n,s,l,p){if(1==arguments.length&&f.call(t)==i)return o.getStoredProcResult(t.name,t.parms,t.id);if(t&&!o.getStoredProc(t,p)){var v={};return v[t]=o.setStoredProc(t,n,s,l,p),v}f.call(r)==c&&(r=o.getDataStore(r,p)),f.call(n)!=u&&(n=n.split(","));var h=n.map(function(t){if(o.getJsonQuery(t,p))return o.getJsonQueryResult(t,l,p);for(var n in l)t=t.split(n).join(l[n]);return e()(o.settings().jsonPathOptions,r,t)}),g={parms:l,code:s};return a(h,g,l)};var m={};return o}();"undefined"!=typeof module&&null!==module&&module.exports?module.exports=p:"function"==typeof define&&define.amd&&define(function(){return p});
//# sourceMappingURL=praetor.min.js.map