jinq
Version:
jinqJs provides you the ability to query, update and delete javaScript arrays using SQL like syntaxes and LINQ like expressions.
1 lines • 11 kB
JavaScript
var jinqJs=function(n){"use strict";var e=[],t=[],r=[],u=!1,l=!1,s=null,i=!1,a={LessThen:0,LessThenEqual:1,GreaterThen:2,GreaterThenEqual:3,Equal:4,EqualEqualType:5,NotEqual:6,NotEqualEqualType:7,Contains:8},f={};jinqJs.settings=jinqJs.settings||{},jinqJs.settings="undefined"!=typeof n?n:{includeIdentity:jinqJs.settings.includeIdentity||!1};var o=function(n){return"undefined"==typeof n||0===n.length},h=function(n){return m(n,"length")&&!c(n)&&!v(n)},g=function(n){return null!==n&&n.constructor===Object},c=function(n){return null!==n&&n.constructor===String},m=function(n,e){return void 0!==n[e]},v=function(n){return"function"==typeof n},d=function(n){return"number"==typeof n},p=function(n,e,t){for(var r=0;r<n.length;r++)if(n[r][e]===t)return!0;return!1},y=function(n,e){return q(n,e,!0)},q=function(n,e,t){var r=null,u=!1,l=[],s=!1;t=t||!1;for(var i=0;i<n.length;i++){u=!1;for(var a in e){if(r=n[i],s=g(r),!s&&r!=e[a]||s&&r[a]!=e[a]){u=!1;break}u=!0}if(u){if(t)return r;l.push(r)}}return 0===l.length?null:l},E=function(n,e){for(var t={},r=null,u=0;u<e.length;u++)r=e[u],t[r]=m(n,r)?n[r]:0;return t},N=function(n,e){for(var u=[],l=null,s=null,i=null,a=0;a<t.length;a++)if(l=E(t[a],r),s=E(t[a],n),i=y(u,l),null===i){i={};for(var f in l)i[f]=l[f];for(var o in s)i[o]=e(i[o],s[o],JSON.stringify(l)+o);u.push(i)}else for(var h in s)i[h]=e(i[h],t[a][h],JSON.stringify(l)+h);return r=[],u},J=function(n){for(var e=null,r=null,u=null,l=null,s=null,i=null,a=null,f=1,o=null,h=null,g=!1,c=0;c<n.length;c++)r=c>0?n[c-1]:null,e=n[c],u=m(e,"field")?e.field:null,f=m(e,"sort")&&"desc"===e.sort?-1:1,g=null===u||isNaN(u)?!1:!0,t.sort(function(n,e){return g?(l=Object.keys(n)[u],s=Object.keys(e)[u],null!==r&&(i=Object.keys(n)[r.field],a=Object.keys(e)[r.field])):(l=s=u,null!==r&&(i=a=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[i]==e[a])?-1*f:o>h&&(null===r||null===u||n[i]==e[a])?1*f:0})},T=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}},b=function(n){for(var e={},t=0;t<n.length;t++)for(var r in n[t])e[r]=n[t][r];return e},w=function(n){var e={};for(var t in n)e[t]="";return e},O=function(n){switch(n){case"<":return a.LessThen;case">":return a.GreaterThen;case"!=":return a.NotEqual;case"!==":return a.NotEqualEqualType;case"=":case"==":return a.Equal;case"===":return a.EqualEqualType;case"<=":return a.LessThenEqual;case">=":return a.GreaterThenEqual;case"*":return a.Contains;default:throw"Invalid Expression!"}},j=function(n){var e=[];for(var t in n)e.push({field:t});return e},x=function(){return"undefined"!=typeof module&&"undefined"!=typeof module.exports},V=function(n,r){var u=null,l=[],s=null,i=[],a=1;if(h(r)&&0!==r.length&&0!==e.length){switch(n){case"from":if(1===e.length)return void(t=e[0]);i=e[0];break;case"full":case"inner":case"left":i=t,a=0;break;default:return}for(var f=a;f<e.length;f++){if(l=[],i.forEach(function(t){v(r[0])?(s=[],e[f].forEach(function(n){r[0](t,n)&&s.push(n)}),0===s.length&&(s=null)):(u=E(t,r),s=q(e[f],u)),null!==s?c(s[0])?l.push(t):s.forEach(function(n){l.push(b([n,t]))}):("left"===n||"full"===n)&&(e[f].length>0&&(u=w(e[f][0]),u=b([u,t])),l.push(b([t,u])))}),"full"===n){var o=(new jinqJs).from(e[f]).not()["in"](l,r).select(j(l[0]));l=l.concat(o)}i=l}e=[],t=l}},k=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])},F=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=h(r)?r:new Array(r),e.push(s),t=s,v(u)&&u(n)})})},S=function(n,r,u){var l=new XMLHttpRequest,s=null;if(v(u)&&(l.onreadystatechange=function(){if(0!==l.response.length){var r=JSON.parse(l.response);s=h(r)?r:new Array(r),e.push(s),t=s,u(n)}}),l.open("GET",r,v(u)),l.send(),!v(u)){var i=JSON.parse(l.response);s=h(i)?i:new Array(i),e.push(s)}},A=function(n){for(var e=n.length,t=new Array(e),r=0;e>r;r++){var u=n[r].split(" ");if(3!==u.length)throw"Invalid expression!";t[r]={lField:u[0],operator:O(u[1]),rValue:u[2]}}return t},G=function(n,e){switch(e.operator){case a.EqualEqualType:return n[e.lField]===e.rValue;case a.NotEqualEqualType:return n[e.lField]!==e.rValue;case a.LessThen:return n[e.lField]<e.rValue;case a.GreaterThen:return n[e.lField]>e.rValue;case a.NotEqual:return n[e.lField]!=e.rValue;case a.Equal:return n[e.lField]==e.rValue;case a.LessThenEqual:return n[e.lField]<=e.rValue;case a.GreaterThenEqual:return n[e.lField]>=e.rValue;case a.Contains:return n[e.lField].indexOf(e.rValue)>-1;default:return!1}},I=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&&v(arguments[1]))n=arguments[0],r=arguments[1],u=arguments.length;else if(n=arguments[u],v(n))continue;c(n)?x()?F(this,n,r):S(this,n,r):e.push(n)}return e.func="from",t=T(e),v(r)?r:this},L=function(){var n=null,e=!1,r=!1,u=null;if(o(t))return[];var s=null,i=null,a=null,f=!1,c=null;if(jinqJs.settings.includeIdentity&&!l&&Y(),o(arguments))return t;if(u=new Array(t.length),h(arguments[0])){n=arguments[0],e=!0,c=new Array(n.length);for(var p=0;p<n.length;p++)c[p]={hasField:m(n[p],"field"),hasText:m(n[p],"text"),hasValue:m(n[p],"value")}}else v(arguments[0])?(n=arguments[0],r=!0):n=arguments;f=!g(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?(c[q].hasField&&(i=d(n[q].field)?Object.keys(t[y])[n[q].field]:n[q].field),a=c[q].hasText?n[q].text:n[q].field):a=i=n[q],s[a]=e&&c[q].hasValue?v(n[q].value)?n[q].value(t[y]):n[q].value:f?t[y]:t[y][i]||null;u[y]=s}return u},C=function(n){if(i)throw"A pending delete operation exists!";return"undefined"!=typeof n&&v(n)?(s=n,this):this},B=function(){if(null!==s)throw"A pending update operation exists!";return i=!0,this},M=function(){var n=t.length,e=null,r=!1,u=!1,l=arguments.length;if(null===s&&!i||0===n)return this;l>0&&(r=v(arguments[0]),r||(e=A(arguments)));for(var a=n-1;a>-1;a--)if(r)arguments[0](t[a],a)&&(i?t.splice(a,1):s(t[a],a));else if(0===l)i?t.splice(a,1):s(t[a],a);else{for(var f=0;l>f&&(u=G(t[a],e[f]),u);f++);u&&(i?t.splice(a,1):s(t[a],a))}return s=null,i=!1,this},_=function(){e.func=null;for(var n=0;n<arguments.length;n++)t=t.concat(arguments[n]);return this},D=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},H=function(n){return D(-1*n),this},P=function(n){var e=[],r=!1,u=!1,l=arguments.length,s=t.length,i=null,a=null;if("undefined"==typeof n)return this;r=v(n),r||(i=A(arguments));for(var f=0;s>f;f++)if(a=t[f],r)n(a,f)&&e.push(a);else{for(var o=0;l>o&&(u=G(a,i[o]),u);o++);u&&e.push(a)}return t=e,this},R=function(){var n=[],e=null,r=null,u=0,l=t.length,s=0,i=!1;if(0===arguments.length)if(g(t[0]))for(u=0;l>u;u++){i=!1;for(var a=0;s>a;a++)if(t[u]===n[a]){i=!0;break}i||(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 o=arguments;for(Array.isArray(arguments[0])&&(o=arguments[0]),u=0;l>u;u++){e=E(t[u],o);for(var h=0;h<o.length;h++)if(r=o[h],!p(n,r,e[r])){n.push(e);break}}}return t=n,this},X=function(){return r=arguments,this},z=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=N(arguments,function(e,t,r){var u=r;return m(n,u)||(n[u]=0),n[u]+=t});return this},K=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=N(arguments,function(e,t,r){var u=JSON.stringify(r);return m(n,u)||(n[u]={count:0,sum:0}),n[u].count++,n[u].sum+=t,n[u].sum/n[u].count});return this},Q=function(){var n={};return t=N(arguments,function(e,t,r){var u=JSON.stringify(r);return m(n,u)||(n[u]=0),++n[u]}),this},U=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=N(arguments,function(e,t,r){var u=JSON.stringify(r);return m(n,u)||(n[u]=0),(0===n[u]||t<n[u])&&(n[u]=t),n[u]});return this},W=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=N(arguments,function(e,t,r){var u=JSON.stringify(r);return m(n,u)||(n[u]=0),t>n[u]&&(n[u]=t),n[u]});return this},Y=function(){var n=1,e=0===arguments.length?"ID":arguments[0],r=t.length>0&&!g(t[0]),u=[],s=null;l=!0;for(var i=0;i<t.length;i++)r?(s={},s[e]=n++,s.Value=t[i],u.push(s)):t[i][e]=n++;return r&&(t=u),this},Z=function(){var n=arguments;return arguments.length>0&&h(arguments[0])?(J(arguments[0]),this):(t.sort(function(e,t){var r=JSON.stringify(E(e,n)),u=JSON.stringify(E(t,n));return u>r?-1:r>u?1:0}),this)},$=function(){if(0===arguments.length||!h(arguments[0])||0===arguments[0].length)return this;if(g(arguments[0][0])){var n=T(arguments);_(n),r=[];for(var e in arguments[0][0])r.push(e);Q()}else{for(var t=0;t<arguments.length;t++)_(arguments[t]);R()}return this},ne=function(){return 0!==arguments.length&&m(e,"func")?(V(e.func,arguments),e.func=null,this):this},ee=function(){var n=[],e=null,r=null,l=!1,s=[],i=null;if(0===arguments.length)return this;if(i=arguments[0],0===i.length||0===t.length)return this;var a=!g(i[0]),f=!g(t[0]);if((!a||!f)&&arguments.length<2)throw"Invalid field or missing field!";if(arguments.length<2)s=[0];else if(h(arguments[1]))s=arguments[1];else for(var o=1;o<arguments.length;o++)s.push(arguments[o]);for(var c=0,m=0;m<t.length;m++){for(var v=0;v<i.length;v++){c=0;for(var d=0;d<s.length;d++)e=f?t[m]:t[m][s[d]],r=a?i[v]:i[v][s[d]],l=e===r,l&&c++;if(c===s.length)break}(v<i.length&&!u||v===i.length&&u)&&n.push(t[m])}return u=!1,t=n,this},te=function(){return k("inner",arguments),this},re=function(){return k("left",arguments),this},ue=function(){return k("full",arguments),this},le=function(){return u=!0,this},se=function(){var n=0;if(0===arguments.length||!d(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=I,this.select=L,this.update=C,this.top=D,this.bottom=H,this.where=P,this.distinct=R,this.groupBy=X,this.sum=z,this.count=Q,this.min=U,this.max=W,this.avg=K,this.identity=Y,this.orderBy=Z,this.on=ne,this.join=te,this.leftJoin=re,this.fullJoin=ue,this.concat=_,this.union=$,this.not=le,this["in"]=ee,this.skip=se,this.filter=P,this.at=M,this["delete"]=B,this._x=function(n,e,r){return f[n]=f[n]||{},r.call(this,t,e,f[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)}();