jinq
Version:
jinqJs provides you the ability to query, update and delete javaScript arrays using SQL like syntaxes and LINQ like expressions.
1 lines • 5.72 kB
JavaScript
var jinqJs=function(n){"use strict";var r=[],t=[],e=[],u=!1;jinqJs.settings="undefined"!=typeof n?n:{includeIdentity:!1};var i=function(n){return"undefined"==typeof n||0===n.length},s=function(n){return f(n,"length")&&!a(n)&&!l(n)},a=function(n){return null!==n&&n.constructor===String},f=function(n,r){return"undefined"!=typeof n[r]},l=function(n){return"function"==typeof n},o=function(n,r,t){for(var e=0;e<n.length;e++)if(n[e][r]==t)return!0;return!1},g=function(n,r){return c(n,r,!0)},c=function(n,r,t){var e=null,u=!1,i=[];t=t||!1;for(var s=0;s<n.length;s++){u=!1;for(var a in r){if(e=n[s],e[a]!=r[a]){u=!1;break}u=!0}if(u){if(t)return e;i.push(e)}}return 0===i.length?null:i},h=function(n,r){for(var t={},e=null,u=0;u<r.length;u++)e=r[u],t[e]=f(n,e)?n[e]:0;return t},v=function(n,r){for(var u=[],i=null,s=null,a=null,f=0;f<t.length;f++)if(i=h(t[f],e),s=h(t[f],n),a=g(u,i),null===a){a={};for(var l in i)a[l]=i[l];for(var o in s)a[o]=r(a[o],s[o],JSON.stringify(i)+o);u.push(a)}else for(var c in s)a[c]=r(a[c],t[f][c],JSON.stringify(i)+c);return u},m=function(n){for(var r=null,e=null,u=null,i=1,s=null,a=null,l=0;l<n.length;l++)e=l>0?n[l-1]:null,r=n[l],u=r.field,i=f(r,"sort")&&"desc"===r.sort?-1:1,t.sort(function(n,r){return s=isNaN(n[u])?n[u]:Number(n[u]),a=isNaN(r[u])?r[u]:Number(r[u]),a>s&&(null===e||n[e.field]==r[e.field])?-1*i:s>a&&(null===e||n[e.field]==r[e.field])?1*i:0})},d=function(n){for(var r=[],t=0;t<n.length;t++)r=r.concat(n[t]);return r},p=function(n){for(var r={},t=0;t<n.length;t++)for(var e in n[t])r[e]=n[t][e];return r},y=function(n){var r={};for(var t in n)r[t]="";return r},b=function(n,e){var u=null,i=[],a=null,f=[],o=1;if(s(e)&&0!==e.length&&0!==r.length){switch(n){case"from":if(1===r.length)return void(t=r[0]);f=r[0];break;case"inner":case"left":f=t,o=0;break;default:return}for(var g=o;g<r.length;g++)i=[],f.forEach(function(t){l(e[0])?(a=[],r[g].forEach(function(n){e[0](t,n)&&a.push(n)}),0===a.length&&(a=null)):(u=h(t,e),a=c(r[g],u)),null!==a?a.forEach(function(n){i.push(p([n,t]))}):"left"===n&&(r[g].length>0&&(u=y(r[g][0]),u=p([u,t])),i.push(p([t,u])))}),f=i;r=[],t=i}},N=function(n,t){if(0===t.length)return this;r=[],r.func=n;for(var e=0;e<t.length;e++)t[e].length>0&&r.push(t[e])},J=function(){var n=null,e=null;if(0===arguments.length)return this;for(var u=0;u<arguments.length;u++)if(null!==arguments[u]&&0!==arguments[u].length){if(2==arguments.length&&l(arguments[1]))n=arguments[0],e=arguments[1],u=arguments.length;else if(n=arguments[u],l(n))continue;if(a(n)){var i=new XMLHttpRequest;if(l(e)&&(i.self=this,i.onreadystatechange=function(){if(0!==i.response.length){var u=JSON.parse(i.response);n=s(u)?u:new Array(u),r.push(n),t=n,e(this.self)}}),i.open("GET",n,l(e)),i.send(),!l(e)){var f=JSON.parse(i.response);n=s(f)?f:new Array(f),r.push(n)}}else r.push(n)}return r.func="from",t=d(r),l(e)?e:this},k=function(){var n=null,r=!1,e=!1,a=[];if(i(t))return[];var o=null,g=null,c=null;if(jinqJs.settings.includeIdentity&&!u&&B(),i(arguments))return t;s(arguments[0])?(n=arguments[0],r=!0):l(arguments[0])?(n=arguments[0],e=!0):n=arguments;for(var h=0;h<t.length;h++){if(o={},e)o=n(t[h]);else for(var v=0;v<n.length;v++)r?(f(n[v],"field")&&(g=n[v].field),c=f(n[v],"text")?n[v].text:n[v].field):c=g=n[v],o[c]=f(n[v],"value")?l(n[v].value)?n[v].value(t[h]):n[v].value:f(t[h],g)?t[h][g]:t[h];a.push(o)}return a},O=function(n){var r=0;return r=Math.abs(n)>0&&Math.abs(n)<1?t.length*n:n,t=0>n?t.slice(r,t.length- -1*Math.abs(r)):t.slice(0,r),this},S=function(n){return O(-1*n),this},w=function(n){var r=[],e=!1,u=/([^\s]+)\s([<>=!*]{1,2})\s(.+)/,i=!1;if("undefined"==typeof n)return this;e=l(n);for(var s=0;s<t.length;s++){var a=t[s];if(e)n(a)&&r.push(a);else{for(var f=0;f<arguments.length;f++){var o=arguments[f].match(u);if(i=!1,null===o||4!==o.length)throw"Invalid predicate!";var g=o[2],c=o[1],h=o[3];switch(g){case"<":a[c]<h&&(i=!0);break;case">":a[c]>h&&(i=!0);break;case"!=":a[c]!=h&&(i=!0);break;case"=":case"==":a[c]==h&&(i=!0);break;case"<=":a[c]<=h&&(i=!0);break;case">=":a[c]>=h&&(i=!0);break;case"*":a[c].indexOf(h)>-1&&(i=!0)}if(!i)break}i&&r.push(a)}}return t=r,this},j=function(){if(i(arguments))return this;for(var n=[],r=null,e=null,u=0;u<t.length;u++){r=h(t[u],arguments);for(var s=0;s<arguments.length;s++)if(e=arguments[s],!o(n,e,r[e])){n.push(r);break}}return t=n,this},q=function(){return e=arguments,this},x=function(){var n={};return t=v(arguments,function(r,t,e){var u=e;return f(n,u)||(n[u]=0),n[u]+=t}),this},E=function(){var n={};return t=v(arguments,function(r,t,e){var u=JSON.stringify(e);return f(n,u)||(n[u]={count:0,sum:0}),n[u].count++,n[u].sum+=t,n[u].sum/n[u].count}),this},I=function(){var n={};return t=v(arguments,function(r,t,e){var u=JSON.stringify(e);return f(n,u)||(n[u]=0),++n[u]}),this},M=function(){var n={};return t=v(arguments,function(r,t,e){var u=JSON.stringify(e);return f(n,u)||(n[u]=0),(0===n[u]||t<n[u])&&(n[u]=t),n[u]}),this},A=function(){var n={};return t=v(arguments,function(r,t,e){var u=JSON.stringify(e);return f(n,u)||(n[u]=0),t>n[u]&&(n[u]=t),n[u]}),this},B=function(){var n=1,r=0===arguments.length?"ID":arguments[0];u=!0;for(var e=0;e<t.length;e++)t[e][r]=n++;return this},D=function(){var n=arguments;return arguments.length>0&&s(arguments[0])?(m(arguments[0]),this):(t.sort(function(r,t){var e=JSON.stringify(h(r,n)),u=JSON.stringify(h(t,n));return u>e?-1:e>u?1:0}),this)},G=function(){return 0!==arguments.length&&f(r,"func")?(b(r.func,arguments),r.func=null,this):this},H=function(){return N("inner",arguments),this},L=function(){return N("left",arguments),this};return{from:J,select:k,top:O,bottom:S,where:w,distinct:j,groupBy:q,sum:x,count:I,min:M,max:A,avg:E,identity:B,orderBy:D,on:G,join:H,leftJoin:L}};