UNPKG

jinq

Version:

jinqJs provides you the ability to query, update and delete javaScript arrays using SQL like syntaxes and LINQ like expressions.

1 lines 10.3 kB
var jinqJs=function(n){"use strict";var e=[],t=[],r=[],u=!1,l=!1,s={LessThen:0,LessThenEqual:1,GreaterThen:2,GreaterThenEqual:3,Equal:4,EqualEqualType:5,NotEqual:6,NotEqualEqualType:7,Contains:8},a={};jinqJs.settings=jinqJs.settings||{},jinqJs.settings="undefined"!=typeof n?n:{includeIdentity:jinqJs.settings.includeIdentity||!1};var i=function(n){return"undefined"==typeof n||0===n.length},f=function(n){return g(n,"length")&&!h(n)&&!c(n)},o=function(n){return null!==n&&n.constructor===Object},h=function(n){return null!==n&&n.constructor===String},g=function(n,e){return void 0!==n[e]},c=function(n){return"function"==typeof n},m=function(n){return"number"==typeof n},v=function(n,e,t){for(var r=0;r<n.length;r++)if(n[r][e]===t)return!0;return!1},d=function(n,e){return p(n,e,!0)},p=function(n,e,t){var r=null,u=!1,l=[],s=!1;t=t||!1;for(var a=0;a<n.length;a++){u=!1;for(var i in e){if(r=n[a],s=o(r),!s&&r!=e[i]||s&&r[i]!=e[i]){u=!1;break}u=!0}if(u){if(t)return r;l.push(r)}}return 0===l.length?null:l},y=function(n,e){for(var t={},r=null,u=0;u<e.length;u++)r=e[u],t[r]=g(n,r)?n[r]:0;return t},q=function(n,e){for(var u=[],l=null,s=null,a=null,i=0;i<t.length;i++)if(l=y(t[i],r),s=y(t[i],n),a=d(u,l),null===a){a={};for(var f in l)a[f]=l[f];for(var o in s)a[o]=e(a[o],s[o],JSON.stringify(l)+o);u.push(a)}else for(var h in s)a[h]=e(a[h],t[i][h],JSON.stringify(l)+h);return r=[],u},b=function(n){for(var e=null,r=null,u=null,l=null,s=null,a=null,i=null,f=1,o=null,h=null,c=!1,m=0;m<n.length;m++)r=m>0?n[m-1]:null,e=n[m],u=g(e,"field")?e.field:null,f=g(e,"sort")&&"desc"===e.sort?-1:1,c=null===u||isNaN(u)?!1:!0,t.sort(function(n,e){return c?(l=Object.keys(n)[u],s=Object.keys(e)[u],null!==r&&(a=Object.keys(n)[r.field],i=Object.keys(e)[r.field])):(l=s=u,null!==r&&(a=i=r.field)),o=null===u?n:isNaN(n[l])?n[l]:Number(n[l]),h=null===u?e:isNaN(e[s])?e[s]:Number(e[s]),h>o&&(null===r||null===u||n[a]==e[i])?-1*f:o>h&&(null===r||null===u||n[a]==e[i])?1*f:0})},E=function(n){switch(n.length){case 1:return n[0].concat();case 2:return[].concat(n[0],n[1]);case 3:return[].concat(n[0],n[1],n[2]);case 4:return[].concat(n[0],n[1],n[2],n[3]);case 5:return[].concat(n[0],n[1],n[2],n[3],n[4]);default:for(var e=[],t=0;t<n.length;t++)e=e.concat(n[t]);return e}},N=function(n){for(var e={},t=0;t<n.length;t++)for(var r in n[t])e[r]=n[t][r];return e},J=function(n){var e={};for(var t in n)e[t]="";return e},k=function(n){switch(n){case"<":return s.LessThen;case">":return s.GreaterThen;case"!=":return s.NotEqual;case"!==":return s.NotEqualEqualType;case"=":case"==":return s.Equal;case"===":return s.EqualEqualType;case"<=":return s.LessThenEqual;case">=":return s.GreaterThenEqual;case"*":return s.Contains;default:throw"Invalid Expression!"}},T=function(n){var e=[];for(var t in n)e.push({field:t});return e},O=function(){return"undefined"!=typeof module&&"undefined"!=typeof module.exports},j=function(n,r){var u=null,l=[],s=null,a=[],i=1;if(f(r)&&0!==r.length&&0!==e.length){switch(n){case"from":if(1===e.length)return void(t=e[0]);a=e[0];break;case"full":case"inner":case"left":a=t,i=0;break;default:return}for(var o=i;o<e.length;o++){if(l=[],a.forEach(function(t){c(r[0])?(s=[],e[o].forEach(function(n){r[0](t,n)&&s.push(n)}),0===s.length&&(s=null)):(u=y(t,r),s=p(e[o],u)),null!==s?h(s[0])?l.push(t):s.forEach(function(n){l.push(N([n,t]))}):("left"===n||"full"===n)&&(e[o].length>0&&(u=J(e[o][0]),u=N([u,t])),l.push(N([t,u])))}),"full"===n){var g=(new jinqJs).from(e[o]).not()["in"](l,r).select(T(l[0]));l=l.concat(g)}a=l}e=[],t=l}},w=function(n,t){if(0===t.length)return this;e=[],e.func=n;for(var r=0;r<t.length;r++)t[r].length>0&&e.push(t[r])},x=function(n,r,u){var l=require("http");l.get(r,function(r){var l="";r.on("data",function(n){l+=n}),r.on("end",function(){var r=JSON.parse(l),s=null;s=f(r)?r:new Array(r),e.push(s),t=s,c(u)&&u(n)})})},V=function(n,r,u){var l=new XMLHttpRequest,s=null;if(c(u)&&(l.onreadystatechange=function(){if(0!==l.response.length){var r=JSON.parse(l.response);s=f(r)?r:new Array(r),e.push(s),t=s,u(n)}}),l.open("GET",r,c(u)),l.send(),!c(u)){var a=JSON.parse(l.response);s=f(a)?a:new Array(a),e.push(s)}},F=function(){var n=null,r=null;if(0===arguments.length)return this;t=[];for(var u=0;u<arguments.length;u++)if(null!==arguments[u]&&0!==arguments[u].length){if(2==arguments.length&&c(arguments[1]))n=arguments[0],r=arguments[1],u=arguments.length;else if(n=arguments[u],c(n))continue;h(n)?O()?x(this,n,r):V(this,n,r):e.push(n)}return e.func="from",t=E(e),c(r)?r:this},S=function(){var n=null,e=!1,r=!1,u=null;if(i(t))return[];var s=null,a=null,h=null,v=!1,d=null;if(jinqJs.settings.includeIdentity&&!l&&R(),i(arguments))return t;if(u=new Array(t.length),f(arguments[0])){n=arguments[0],e=!0,d=new Array(n.length);for(var p=0;p<n.length;p++)d[p]={hasField:g(n[p],"field"),hasText:g(n[p],"text"),hasValue:g(n[p],"value")}}else c(arguments[0])?(n=arguments[0],r=!0):n=arguments;v=!o(t[0]);for(var y=0;y<t.length;y++)if(r)u[y]=n(t[y],y);else{s={};for(var q=0;q<n.length;q++)e?(d[q].hasField&&(a=m(n[q].field)?Object.keys(t[y])[n[q].field]:n[q].field),h=d[q].hasText?n[q].text:n[q].field):h=a=n[q],s[h]=e&&d[q].hasValue?c(n[q].value)?n[q].value(t[y]):n[q].value:v?t[y]:t[y][a]||null;u[y]=s}return u},A=function(){e.func=null;for(var n=0;n<arguments.length;n++)t=t.concat(arguments[n]);return this},G=function(n){var e=0;return e=n>-1&&1>n?t.length*n:n,t=0>n?t.slice(e,t.length- -1*Math.abs(e)):t.slice(0,e),this},I=function(n){return G(-1*n),this},L=function(n){var e=[],r=!1,u=!1,l=arguments.length,a=t.length,i=new Array(l),f=null;if("undefined"==typeof n)return this;if(r=c(n),!r)for(var o=0;l>o;o++){var h=arguments[o].split(" ");if(3!==h.length)throw"Invalid expression!";i[o]={lField:h[0],operator:k(h[1]),rValue:h[2]}}for(var g=0;a>g;g++)if(f=t[g],r)n(f,g)&&e.push(f);else{for(var m=0;l>m;m++){switch(i[m].operator){case s.EqualEqualType:u=f[i[m].lField]===i[m].rValue;break;case s.NotEqualEqualType:u=f[i[m].lField]!==i[m].rValue;break;case s.LessThen:u=f[i[m].lField]<i[m].rValue;break;case s.GreaterThen:u=f[i[m].lField]>i[m].rValue;break;case s.NotEqual:u=f[i[m].lField]!=i[m].rValue;break;case s.Equal:u=f[i[m].lField]==i[m].rValue;break;case s.LessThenEqual:u=f[i[m].lField]<=i[m].rValue;break;case s.GreaterThenEqual:u=f[i[m].lField]>=i[m].rValue;break;case s.Contains:u=f[i[m].lField].indexOf(i[m].rValue)>-1;break;default:u=!1}if(!u)break}u&&e.push(f)}return t=e,this},C=function(){var n=[],e=null,r=null,u=0,l=t.length,s=0,a=!1;if(0===arguments.length)if(o(t[0]))for(u=0;l>u;u++){a=!1;for(var i=0;s>i;i++)if(t[u]===n[i]){a=!0;break}a||(n[s++]=t[u])}else{var f={};for(u=0;u!==l;u++)e=t[u],1!==f[e]&&(f[e]=1,n[n.length]=e)}else{var h=arguments;for(Array.isArray(arguments[0])&&(h=arguments[0]),u=0;l>u;u++){e=y(t[u],h);for(var g=0;g<h.length;g++)if(r=h[g],!v(n,r,e[r])){n.push(e);break}}}return t=n,this},B=function(){return r=arguments,this},M=function(){var n={};if(0===r.length){n=0;for(var e=0;e<t.length;e++)n+=0===arguments.length?t[e]:t[e][arguments[0]];t=[n]}else t=q(arguments,function(e,t,r){var u=r;return g(n,u)||(n[u]=0),n[u]+=t});return this},_=function(){var n={};if(0===r.length){n=0;for(var e=0;e<t.length;e++)n+=0===arguments.length?t[e]:t[e][arguments[0]];t=[n/t.length]}else t=q(arguments,function(e,t,r){var u=JSON.stringify(r);return g(n,u)||(n[u]={count:0,sum:0}),n[u].count++,n[u].sum+=t,n[u].sum/n[u].count});return this},D=function(){var n={};return t=q(arguments,function(e,t,r){var u=JSON.stringify(r);return g(n,u)||(n[u]=0),++n[u]}),this},H=function(){var n={},e=0;if(0===r.length){n=-1;for(var u=0;u<t.length;u++)e=Number(0===arguments.length?t[u]:t[u][arguments[0]]),n=n>e||-1===n?e:n;t=[n]}else t=q(arguments,function(e,t,r){var u=JSON.stringify(r);return g(n,u)||(n[u]=0),(0===n[u]||t<n[u])&&(n[u]=t),n[u]});return this},P=function(){var n={},e=0;if(0===r.length){n=-1;for(var u=0;u<t.length;u++)e=Number(0===arguments.length?t[u]:t[u][arguments[0]]),n=e>n||-1===n?e:n;t=[n]}else t=q(arguments,function(e,t,r){var u=JSON.stringify(r);return g(n,u)||(n[u]=0),t>n[u]&&(n[u]=t),n[u]});return this},R=function(){var n=1,e=0===arguments.length?"ID":arguments[0],r=t.length>0&&!o(t[0]),u=[],s=null;l=!0;for(var a=0;a<t.length;a++)r?(s={},s[e]=n++,s.Value=t[a],u.push(s)):t[a][e]=n++;return r&&(t=u),this},X=function(){var n=arguments;return arguments.length>0&&f(arguments[0])?(b(arguments[0]),this):(t.sort(function(e,t){var r=JSON.stringify(y(e,n)),u=JSON.stringify(y(t,n));return u>r?-1:r>u?1:0}),this)},z=function(){if(0===arguments.length||!f(arguments[0])||0===arguments[0].length)return this;if(o(arguments[0][0])){var n=E(arguments);A(n),r=[];for(var e in arguments[0][0])r.push(e);D()}else{for(var t=0;t<arguments.length;t++)A(arguments[t]);C()}return this},K=function(){return 0!==arguments.length&&g(e,"func")?(j(e.func,arguments),e.func=null,this):this},Q=function(){var n=[],e=null,r=null,l=!1,s=[],a=null;if(0===arguments.length)return this;if(a=arguments[0],0===a.length||0===t.length)return this;var i=!o(a[0]),h=!o(t[0]);if((!i||!h)&&arguments.length<2)throw"Invalid field or missing field!";if(arguments.length<2)s=[0];else if(f(arguments[1]))s=arguments[1];else for(var g=1;g<arguments.length;g++)s.push(arguments[g]);for(var c=0,m=0;m<t.length;m++){for(var v=0;v<a.length;v++){c=0;for(var d=0;d<s.length;d++)e=h?t[m]:t[m][s[d]],r=i?a[v]:a[v][s[d]],l=e===r,l&&c++;if(c===s.length)break}(v<a.length&&!u||v===a.length&&u)&&n.push(t[m])}return u=!1,t=n,this},U=function(){return w("inner",arguments),this},W=function(){return w("left",arguments),this},Y=function(){return w("full",arguments),this},Z=function(){return u=!0,this},$=function(){var n=0;if(0===arguments.length||!m(arguments[0]))return this;var e=arguments[0];return n=e>-1&&arguments[0]<1?t.length*e:e,t=t.slice(n),this};this.from=F,this.select=S,this.top=G,this.bottom=I,this.where=L,this.distinct=C,this.groupBy=B,this.sum=M,this.count=D,this.min=H,this.max=P,this.avg=_,this.identity=R,this.orderBy=X,this.on=K,this.join=U,this.leftJoin=W,this.fullJoin=Y,this.concat=A,this.union=z,this.not=Z,this["in"]=Q,this.skip=$,this._x=function(n,e,r){return a[n]=a[n]||{},r.call(this,t,e,a[n])}};!function(){"use strict";jinqJs.addPlugin=function(n,e){jinqJs.prototype[n]=function(){return this._x(n,arguments,e)}},"undefined"!=typeof module&&"undefined"!=typeof module.exports&&(module.exports=jinqJs)}();