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