UNPKG

json-path

Version:

JSON-Path utility (XPath for JSON) for nodejs and modern browsers.

1 lines 7.1 kB
!function(e){"use strict";var r,n,t=[];if(typeof global==="object"&&global){r=global;n=global.JsonPath}else if(typeof window!=="undefined"){r=window;n=window.JsonPath}else{r={}}if(n){t.push(function(){if(r.JsonPath===A){r.JsonPath=n;n=null}})}if(e){t.push(function(r){if(r){e=r}})}else if(!e){if(typeof r.JsonPointer!=="undefined"){e=r.JsonPointer;t.push(function(r){if(r){e=r}})}else if(typeof require==="function"){e=require("json-ptr")}else{throw new Error("Missing JsonPointer (https://github.com/flitbit/json-ptr).")}}function i(e,r){e=Array.isArray(e)?e:[e];var n,t;for(n=0;n<e.length;n++){var i=e[n];t=typeof i==="function"?i():i;if(!t){r=r||"Failed contract requirement:".concat(i);throw new Error(typeof r==="function"?r():r)}}}function s(e,r,n){n=Array.isArray(n)?n:[n];var t=r,i,s=e.length,o=n.length;while(++t<s){i=-1;while(++i<o){if(e[t]===n[i]){return t}}}return-1}function o(e,r,n,t){var i=r-1,s=-1,o=t.length;if(n-r<o){throw new Error("Expected `".concat(t,"` beginning at character ",r,"."))}while(++i<n&&++s<o){if(e[i]!==t[s]){throw new Error("Unexpected character at position ".concat(i," expected `",t,"` beginning at position ",r,"."))}}}function c(e,r,n){var t=e[r],i=r,s=e.length,o=[];o.push(r);while(++i<s){if(e[i]===t){o.push(r)}else if(e[i]===n){o.pop();if(o.length===0){break}}}if(o.length){throw new Error("Expected `".concat(e[0],"` to have a matching `",n,"`."))}return i}function a(r,n){var t=n.cursor,i=n.result,o=r.length,c=s(r,t,["]","["]);if(c<t){c=o}var a=e.create(r.substring(t,c));i.push(function(e,r){r=r||[];var n=a.get(e);if(typeof n!=="undefined"){r.push(n)}return r});n.cursor=c-1}function u(e,r,n){o(e,r.cursor,e.length,n)}function l(e,r,n){var t=-1,i=Array.isArray(e)?e:[e],s=r.length,o,c,a;while(++t<s&&i.length){c=-1;a=i.length;o=[];while(++c<a){o=r[t](i[c],o,n)}i=o}return i}function f(e,r,n,t){n=n||[];var i=-1,s,o,c;if(typeof e==="object"&&e!==null){c=l(e,r,t);if(c.length){n=n.concat(c)}if(!Array.isArray(e)){s=Object.keys(e);o=s.length;while(++i<o){n=f(e[s[i]],r,n,t)}}}return n}function h(e,r){var n=r.result,t=[];r.result=t;n.push(function(e,r,n){return f(e,t,r,n)});E(e,r);r.result=n}function p(e,r){r=r||[];if(typeof e==="object"&&e!==null){if(Array.isArray(e)){r=r.concat(e)}else{var n=-1,t=Object.keys(e),i=t.length;while(++n<i){r.push(e[t[n]])}}}return r}function d(r,n,t){var s=-1,o=r.length,c,a={},u,l,f=[];while(++s<o){c=r[s];i([false],"Expressions are not implemented in this version.");switch(c){case"#":{u=r.indexOf(" ",s);if(u<s){u=o}l=r.substring(s,u);if(!a[l]){a[l]=e.create(l)}f.push({kind:"v",ref:a[l]});s=u;break}}}}function g(e,r){var n=e[r.cursor]==="!";if(n){r.cursor++}u(e,r,"{");var t=c(e,r.cursor,"}"),i=e.substring(r.cursor+1,t);r.result.push(d(i,n,r.offset));r.cursor=t}function w(e,r){var n=r.cursor,t=r.result,i=e.length,s=e.indexOf("]",n);if(s<n){s=i}var o=e.substring(n,s);r.result.push(function(e,r,n){var t;if(e){if(o.length===0&&typeof n==="function"){t=n}else if(typeof n==="object"&&n){if(!n[o]&&n.RESOLVER){t=n.RESOLVER(o)}else{t=n[o]}}if(!t){throw new Error("Missing user-supplied function: `".concat(o.length?o:"@","`."))}return t(e,r,n)}return r});r.cursor=s-1}function b(e){var r={result:[],stack:[],cursor:-1,offset:0};E(e,r);return r.result}function k(r,n){var t=n.cursor,i=r.indexOf(")",t);o(r,t,i,"take(");t+=5;var s=r.slice(t,i).split(","),c=-1,a=s.length,u;while(++c<a){u=s[c].split("=");if(u.length===1){u=e.create(u[0]);u={name:u.path[u.path.length-1],ptr:u}}else if(u.length===2){u={name:u[0],ptr:e.create(u[1])}}else{throw new Error("Invalid `take` expression")}t+=s[c].length;s[c]=u}n.result.push(function(e,r){r=r||[];var n={},t=-1,i=s.length;while(++t<i){n[s[t].name]=s[t].ptr.get(e)}r.push(n);return r});n.cursor=i}function x(e,r,n){var t=r;while(e[t]>="0"&&e[t]<="9"){t=t+1}if(t===r){throw new Error("Expected an integer at position ".concat(t,"."))}return t-r}function v(e,r,n,t,i){var s=1,c;o(e,r,n,t);r+=t.length-1;if(e[r+1]==="("){r+=2;c=x(e,r,n);s=parseInt(e.substring(r,r+c),10);r+=c;o(e,r,n,")");++r}i.push({kind:t[0],index:s});return r}function y(e,r){var n=r.cursor-1,t=e.length,i=e.indexOf("]",r.cursor),s=null,c=null,a=false,u=[];if(i<n){i=t}while(++n<i){switch(e[n]){case" ":if(c!==null){u.push({kind:"i",index:parseInt(e.substring(c,n),10)});c=null;a=true}break;case",":{if(c!==null){u.push({kind:"i",index:parseInt(e.substring(c,n),10)});c=null}if(a){a=false}}break;case".":{o(e,n,i,"..");if(c!==null){u.push({kind:"s",index:parseInt(e.substring(c,n),10)});c=null}n++;if(a){a=false}}break;case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":{if(a){throw new Error("Unexpected numeral at position ".concat(n," expected punctuation."))}if(c===null){c=n}}break;case"l":{if(a){throw new Error("Unexpected numeral at position ".concat(n," expected punctuation."))}n=v(e,n,i,"last",u)}break;case"f":{if(a){throw new Error("Unexpected numeral at position ".concat(n," expected punctuation."))}n=v(e,n,i,"first",u)}break;case"c":{if(a){throw new Error("Unexpected numeral at position ".concat(n," expected punctuation."))}n=v(e,n,i,"count",u);break}}}if(c!==null){u.push({kind:"i",index:parseInt(e.substring(c,n),10)})}r.result.push(function(e,r){r=r||[];if(Array.isArray(e)){var n=-1,t=u.length,i=e.length,s,o;while(++n<t){var c=u[n];switch(c.kind){case"c":r.push(i);break;case"f":{s=-1;while(++s<c.index&&s<i){r.push(e[s])}}break;case"l":{s=i;o=i-c.index;while(--s>=o&&s>0){r.push(e[s])}}break;case"i":case"s":{if(c.index<i){r.push(e[c.index]);if(c.kind==="s"){s=c.index;o=++n<t?u[n].index:i-1;while(++s<=o){r.push(e[s])}}}}}}}return r});r.cursor=i-1}function E(e,r){i([typeof e==="string"],"Selector must be a string.");if(e.length===0){return[]}var n=e.length,t;while(++r.cursor<n){t=e[r.cursor];switch(t){case"/":case"#":{a(e,r)}break;case"[":{r.stack.push(r.cursor)}break;case"]":{if(r.stack.length){r.stack.pop()}else{throw new Error("Unexpected `]` at cursor position ".concat(r.cursor,"."))}}break;case".":{u(e,r,"..");++r.cursor;h(e,r)}break;case"*":{u(e,r,"*]");r.result.push(p)}break;case"{":case"!":{g(e,r)}break;case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":{y(e,r)}break;case"l":{y(e,r)}break;case"f":{y(e,r)}break;case"c":{y(e,r)}break;case"t":{k(e,r)}break;case"@":{r.cursor+=1;w(e,r)}break;default:{throw new Error("Unexpected character at position ".concat(r.cursor,": ",t,"."))}}}i([!r.stack.length],function(){return"Unexpected end; unclosed scope beginning at cursor position ".concat(r.stack.pop(),".")})}function m(e,r,n){return l(e,r,n)}function A(e){Object.defineProperties(this,{selectors:{value:b(e),enumerable:true},resolve:{value:function(e,r){return l(e,this.selectors,r)},enumerable:true}})}A.parseSelector=b;A.executeSelectors=m;A.create=function(e){return new A(e)};A.resolve=function(e,r,n){var t=b(r);return l(e,t,n)};A.noConflict=function(e){if(t){t.forEach(function(r){r(e)});t=null}return A};if(typeof module!=="undefined"&&module&&typeof exports==="object"&&exports&&module.exports===exports){module.exports=A}else{r.JsonPath=A}}(typeof JsonPointer!=="undefined"?JsonPointer:null);