@starbemtech/star-db-query-builder 1.0.38 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/publish.yml +118 -0
- package/ARCHITECTURE.md +313 -0
- package/CHANGELOG.md +65 -0
- package/README.md +1309 -129
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +131 -0
- package/coverage/lcov-report/block-navigation.js +1 -1
- package/coverage/lcov-report/index.html +41 -11
- package/coverage/lcov-report/mysqlClient.ts.html +685 -0
- package/coverage/lcov-report/pgClient.ts.html +823 -0
- package/coverage/lcov-report/sorter.js +21 -7
- package/coverage/lcov.info +533 -0
- package/coverage/mysqlClient.ts.html +685 -0
- package/coverage/pgClient.ts.html +823 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +210 -0
- package/dist/index.d.ts +5 -4
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/src/core/repository.d.ts +374 -0
- package/dist/src/core/repository.js +677 -0
- package/dist/src/core/repository.js.map +1 -0
- package/dist/src/{default → core}/types.d.ts +9 -1
- package/dist/src/{default → core}/types.js.map +1 -1
- package/dist/src/core/utils.d.ts +133 -0
- package/dist/src/{default → core}/utils.js +167 -0
- package/dist/src/core/utils.js.map +1 -0
- package/dist/src/db/IDatabaseClient.d.ts +10 -1
- package/dist/src/db/initDb.d.ts +120 -1
- package/dist/src/db/initDb.js +119 -0
- package/dist/src/db/initDb.js.map +1 -1
- package/dist/src/db/mysqlClient.d.ts +23 -1
- package/dist/src/db/mysqlClient.js +115 -0
- package/dist/src/db/mysqlClient.js.map +1 -1
- package/dist/src/db/pgClient.d.ts +22 -1
- package/dist/src/db/pgClient.js +127 -0
- package/dist/src/db/pgClient.js.map +1 -1
- package/dist/src/monitor/monitor.d.ts +6 -1
- package/dist/src/monitor/monitor.js +5 -0
- package/dist/src/monitor/monitor.js.map +1 -1
- package/dist/src/setupTests.d.ts +26 -0
- package/dist/src/setupTests.js +43 -0
- package/dist/src/setupTests.js.map +1 -0
- package/docs/INDEX.md +145 -0
- package/docs/methods/findFirst.md +394 -0
- package/docs/methods/findMany.md +587 -0
- package/docs/methods/insert.md +536 -0
- package/docs/methods/insertMany.md +627 -0
- package/docs/methods/joins.md +781 -0
- package/docs/methods/rawQuery.md +284 -0
- package/docs/methods/transactions.md +737 -0
- package/eslint.config.mjs +77 -0
- package/index.ts +5 -4
- package/jest.config.ts +23 -28
- package/package.json +52 -29
- package/scripts/release.sh +123 -0
- package/src/core/repository.ts +865 -0
- package/src/{default → core}/types.ts +11 -2
- package/src/{default → core}/utils.ts +168 -0
- package/src/db/IDatabaseClient.ts +11 -1
- package/src/db/__tests__/mysqlClient.test.ts +262 -0
- package/src/db/__tests__/pgClient.test.ts +260 -0
- package/src/db/initDb.ts +120 -1
- package/src/db/mysqlClient.ts +119 -3
- package/src/db/pgClient.ts +131 -3
- package/src/monitor/monitor.ts +5 -0
- package/src/setupTests.ts +45 -0
- package/tsconfig.test.json +21 -0
- package/.eslintignore +0 -4
- package/.eslintrc.json +0 -32
- package/coverage/clover.xml +0 -6
- package/coverage/coverage-final.json +0 -1
- package/dist/.eslintrc.json +0 -32
- package/dist/src/default/genericRepository.d.ts +0 -20
- package/dist/src/default/genericRepository.js +0 -192
- package/dist/src/default/genericRepository.js.map +0 -1
- package/dist/src/default/utils.d.ts +0 -9
- package/dist/src/default/utils.js.map +0 -1
- package/index.d.ts +0 -60
- package/src/default/genericRepository.ts +0 -320
- /package/dist/src/{default → core}/types.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.ignoreCase){ac=true}else{if(/[a-z]/i.test(ae.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi,""))){S=true;ac=false;break}}}var Y={b:8,t:9,n:10,v:11,f:12,r:13};function ab(ah){var ag=ah.charCodeAt(0);if(ag!==92){return ag}var af=ah.charAt(1);ag=Y[af];if(ag){return ag}else{if("0"<=af&&af<="7"){return parseInt(ah.substring(1),8)}else{if(af==="u"||af==="x"){return parseInt(ah.substring(2),16)}else{return ah.charCodeAt(1)}}}}function T(af){if(af<32){return(af<16?"\\x0":"\\x")+af.toString(16)}var ag=String.fromCharCode(af);if(ag==="\\"||ag==="-"||ag==="["||ag==="]"){ag="\\"+ag}return ag}function X(am){var aq=am.substring(1,am.length-1).match(new RegExp("\\\\u[0-9A-Fa-f]{4}|\\\\x[0-9A-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\s\\S]|-|[^-\\\\]","g"));var ak=[];var af=[];var ao=aq[0]==="^";for(var ar=ao?1:0,aj=aq.length;ar<aj;++ar){var ah=aq[ar];if(/\\[bdsw]/i.test(ah)){ak.push(ah)}else{var ag=ab(ah);var al;if(ar+2<aj&&"-"===aq[ar+1]){al=ab(aq[ar+2]);ar+=2}else{al=ag}af.push([ag,al]);if(!(al<65||ag>122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;ar<af.length;++ar){var at=af[ar];if(at[0]<=ap[1]+1){ap[1]=Math.max(ap[1],at[1])}else{ai.push(ap=at)}}var an=["["];if(ao){an.push("^")}an.push.apply(an,ak);for(var ar=0;ar<ai.length;++ar){var at=ai[ar];an.push(T(at[0]));if(at[1]>at[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){an[af]=-1}}}}for(var ak=1;ak<an.length;++ak){if(-1===an[ak]){an[ak]=++ad}}for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am;if(an[am]===undefined){aj[ak]="(?:"}}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){aj[ak]="\\"+an[am]}}}}for(var ak=0,am=0;ak<ah;++ak){if("^"===aj[ak]&&"^"!==aj[ak+1]){aj[ak]=""}}if(al.ignoreCase&&S){for(var ak=0;ak<ah;++ak){var ag=aj[ak];var ai=ag.charAt(0);if(ag.length>=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.global||ae.multiline){throw new Error(""+ae)}aa.push("(?:"+W(ae)+")")}return new RegExp(aa.join("|"),ac?"gi":"g")}function a(V){var U=/(?:^|\s)nocode(?:\s|$)/;var X=[];var T=0;var Z=[];var W=0;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=document.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Y=S&&"pre"===S.substring(0,3);function aa(ab){switch(ab.nodeType){case 1:if(U.test(ab.className)){return}for(var ae=ab.firstChild;ae;ae=ae.nextSibling){aa(ae)}var ad=ab.nodeName;if("BR"===ad||"LI"===ad){X[W]="\n";Z[W<<1]=T++;Z[(W++<<1)|1]=ab}break;case 3:case 4:var ac=ab.nodeValue;if(ac.length){if(!Y){ac=ac.replace(/[ \t\r\n]+/g," ")}else{ac=ac.replace(/\r\n?/g,"\n")}X[W]=ac;Z[W<<1]=T;T+=ac.length;Z[(W++<<1)|1]=ab}break}}aa(V);return{sourceCode:X.join("").replace(/\n$/,""),spans:Z}}function B(S,U,W,T){if(!U){return}var V={sourceCode:U,basePos:S};W(V);T.push.apply(T,V.decorations)}var v=/\S/;function o(S){var V=undefined;for(var U=S.firstChild;U;U=U.nextSibling){var T=U.nodeType;V=(T===1)?(V?S:U):(T===3)?(v.test(U.nodeValue)?S:V):V}return V===S?undefined:V}function g(U,T){var S={};var V;(function(){var ad=U.concat(T);var ah=[];var ag={};for(var ab=0,Z=ad.length;ab<Z;++ab){var Y=ad[ab];var ac=Y[3];if(ac){for(var ae=ac.length;--ae>=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae<aq;++ae){var ag=an[ae];var ap=aj[ag];var ai=void 0;var am;if(typeof ap==="string"){am=false}else{var aa=S[ag.charAt(0)];if(aa){ai=ag.match(aa[1]);ap=aa[0]}else{for(var ao=0;ao<X;++ao){aa=T[ao];ai=ag.match(aa[1]);if(ai){ap=aa[0];break}}if(!ai){ap=F}}am=ap.length>=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y<W.length;++Y){ae(W[Y])}if(ag===(ag|0)){W[0].setAttribute("value",ag)}var aa=ac.createElement("OL");aa.className="linenums";var X=Math.max(0,((ag-1))|0)||0;for(var Y=0,T=W.length;Y<T;++Y){af=W[Y];af.className="L"+((Y+X)%10);if(!af.firstChild){af.appendChild(ac.createTextNode("\xA0"))}aa.appendChild(af)}V.appendChild(aa)}function D(ac){var aj=/\bMSIE\b/.test(navigator.userAgent);var am=/\n/g;var al=ac.sourceCode;var an=al.length;var V=0;var aa=ac.spans;var T=aa.length;var ah=0;var X=ac.decorations;var Y=X.length;var Z=0;X[Y]=an;var ar,aq;for(aq=ar=0;aq<Y;){if(X[aq]!==X[aq+2]){X[ar++]=X[aq++];X[ar++]=X[aq++]}else{aq+=2}}Y=ar;for(aq=ar=0;aq<Y;){var at=X[aq];var ab=X[aq+1];var W=aq+2;while(W+2<=Y&&X[W+1]===ab){W+=2}X[ar++]=at;X[ar++]=ab;aq=W}Y=X.length=ar;var ae=null;while(ah<T){var af=aa[ah];var S=aa[ah+2]||an;var ag=X[Z];var ap=X[Z+2]||an;var W=Math.min(S,ap);var ak=aa[ah+1];var U;if(ak.nodeType!==1&&(U=al.substring(V,W))){if(aj){U=U.replace(am,"\r")}ak.nodeValue=U;var ai=ak.ownerDocument;var ao=ai.createElement("SPAN");ao.className=X[Z+1];var ad=ak.parentNode;ad.replaceChild(ao,ak);ao.appendChild(ak);if(V<S){aa[ah+1]=ak=ai.createTextNode(al.substring(W,S));ad.insertBefore(ak,ao.nextSibling)}}V=W;if(V>=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*</.test(S)?"default-markup":"default-code"}return t[T]}c(K,["default-code"]);c(g([],[[F,/^[^<?]+/],[E,/^<!\w[^>]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa<ac.length;++aa){for(var Z=0,V=ac[aa].length;Z<V;++Z){T.push(ac[aa][Z])}}ac=null;var W=Date;if(!W.now){W={now:function(){return +(new Date)}}}var X=0;var S;var ab=/\blang(?:uage)?-([\w.]+)(?!\S)/;var ae=/\bprettyprint\b/;function U(){var ag=(window.PR_SHOULD_USE_CONTINUATION?W.now()+250:Infinity);for(;X<T.length&&W.now()<ag;X++){var aj=T[X];var ai=aj.className;if(ai.indexOf("prettyprint")>=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X<T.length){setTimeout(U,250)}else{if(ad){ad()}}}U()}window.prettyPrintOne=y;window.prettyPrint=b;window.PR={createSimpleLexer:g,registerLangHandler:c,sourceDecorator:i,PR_ATTRIB_NAME:P,PR_ATTRIB_VALUE:n,PR_COMMENT:j,PR_DECLARATION:E,PR_KEYWORD:z,PR_LITERAL:G,PR_NOCODE:N,PR_PLAIN:F,PR_PUNCTUATION:L,PR_SOURCE:J,PR_STRING:C,PR_TAG:m,PR_TYPE:O}})();PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_DECLARATION,/^<!\w[^>]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^<script\b[^>]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:<!--|-->)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]);
|
|
Binary file
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
var addSorting = (function() {
|
|
3
|
+
'use strict';
|
|
4
|
+
var cols,
|
|
5
|
+
currentSort = {
|
|
6
|
+
index: 0,
|
|
7
|
+
desc: false
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
// returns the summary table element
|
|
11
|
+
function getTable() {
|
|
12
|
+
return document.querySelector('.coverage-summary');
|
|
13
|
+
}
|
|
14
|
+
// returns the thead element of the summary table
|
|
15
|
+
function getTableHeader() {
|
|
16
|
+
return getTable().querySelector('thead tr');
|
|
17
|
+
}
|
|
18
|
+
// returns the tbody element of the summary table
|
|
19
|
+
function getTableBody() {
|
|
20
|
+
return getTable().querySelector('tbody');
|
|
21
|
+
}
|
|
22
|
+
// returns the th element for nth column
|
|
23
|
+
function getNthColumn(n) {
|
|
24
|
+
return getTableHeader().querySelectorAll('th')[n];
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function onFilterInput() {
|
|
28
|
+
const searchValue = document.getElementById('fileSearch').value;
|
|
29
|
+
const rows = document.getElementsByTagName('tbody')[0].children;
|
|
30
|
+
|
|
31
|
+
// Try to create a RegExp from the searchValue. If it fails (invalid regex),
|
|
32
|
+
// it will be treated as a plain text search
|
|
33
|
+
let searchRegex;
|
|
34
|
+
try {
|
|
35
|
+
searchRegex = new RegExp(searchValue, 'i'); // 'i' for case-insensitive
|
|
36
|
+
} catch (error) {
|
|
37
|
+
searchRegex = null;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
for (let i = 0; i < rows.length; i++) {
|
|
41
|
+
const row = rows[i];
|
|
42
|
+
let isMatch = false;
|
|
43
|
+
|
|
44
|
+
if (searchRegex) {
|
|
45
|
+
// If a valid regex was created, use it for matching
|
|
46
|
+
isMatch = searchRegex.test(row.textContent);
|
|
47
|
+
} else {
|
|
48
|
+
// Otherwise, fall back to the original plain text search
|
|
49
|
+
isMatch = row.textContent
|
|
50
|
+
.toLowerCase()
|
|
51
|
+
.includes(searchValue.toLowerCase());
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
row.style.display = isMatch ? '' : 'none';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// loads the search box
|
|
59
|
+
function addSearchBox() {
|
|
60
|
+
var template = document.getElementById('filterTemplate');
|
|
61
|
+
var templateClone = template.content.cloneNode(true);
|
|
62
|
+
templateClone.getElementById('fileSearch').oninput = onFilterInput;
|
|
63
|
+
template.parentElement.appendChild(templateClone);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// loads all columns
|
|
67
|
+
function loadColumns() {
|
|
68
|
+
var colNodes = getTableHeader().querySelectorAll('th'),
|
|
69
|
+
colNode,
|
|
70
|
+
cols = [],
|
|
71
|
+
col,
|
|
72
|
+
i;
|
|
73
|
+
|
|
74
|
+
for (i = 0; i < colNodes.length; i += 1) {
|
|
75
|
+
colNode = colNodes[i];
|
|
76
|
+
col = {
|
|
77
|
+
key: colNode.getAttribute('data-col'),
|
|
78
|
+
sortable: !colNode.getAttribute('data-nosort'),
|
|
79
|
+
type: colNode.getAttribute('data-type') || 'string'
|
|
80
|
+
};
|
|
81
|
+
cols.push(col);
|
|
82
|
+
if (col.sortable) {
|
|
83
|
+
col.defaultDescSort = col.type === 'number';
|
|
84
|
+
colNode.innerHTML =
|
|
85
|
+
colNode.innerHTML + '<span class="sorter"></span>';
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return cols;
|
|
89
|
+
}
|
|
90
|
+
// attaches a data attribute to every tr element with an object
|
|
91
|
+
// of data values keyed by column name
|
|
92
|
+
function loadRowData(tableRow) {
|
|
93
|
+
var tableCols = tableRow.querySelectorAll('td'),
|
|
94
|
+
colNode,
|
|
95
|
+
col,
|
|
96
|
+
data = {},
|
|
97
|
+
i,
|
|
98
|
+
val;
|
|
99
|
+
for (i = 0; i < tableCols.length; i += 1) {
|
|
100
|
+
colNode = tableCols[i];
|
|
101
|
+
col = cols[i];
|
|
102
|
+
val = colNode.getAttribute('data-value');
|
|
103
|
+
if (col.type === 'number') {
|
|
104
|
+
val = Number(val);
|
|
105
|
+
}
|
|
106
|
+
data[col.key] = val;
|
|
107
|
+
}
|
|
108
|
+
return data;
|
|
109
|
+
}
|
|
110
|
+
// loads all row data
|
|
111
|
+
function loadData() {
|
|
112
|
+
var rows = getTableBody().querySelectorAll('tr'),
|
|
113
|
+
i;
|
|
114
|
+
|
|
115
|
+
for (i = 0; i < rows.length; i += 1) {
|
|
116
|
+
rows[i].data = loadRowData(rows[i]);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// sorts the table using the data for the ith column
|
|
120
|
+
function sortByIndex(index, desc) {
|
|
121
|
+
var key = cols[index].key,
|
|
122
|
+
sorter = function(a, b) {
|
|
123
|
+
a = a.data[key];
|
|
124
|
+
b = b.data[key];
|
|
125
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
126
|
+
},
|
|
127
|
+
finalSorter = sorter,
|
|
128
|
+
tableBody = document.querySelector('.coverage-summary tbody'),
|
|
129
|
+
rowNodes = tableBody.querySelectorAll('tr'),
|
|
130
|
+
rows = [],
|
|
131
|
+
i;
|
|
132
|
+
|
|
133
|
+
if (desc) {
|
|
134
|
+
finalSorter = function(a, b) {
|
|
135
|
+
return -1 * sorter(a, b);
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
for (i = 0; i < rowNodes.length; i += 1) {
|
|
140
|
+
rows.push(rowNodes[i]);
|
|
141
|
+
tableBody.removeChild(rowNodes[i]);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
rows.sort(finalSorter);
|
|
145
|
+
|
|
146
|
+
for (i = 0; i < rows.length; i += 1) {
|
|
147
|
+
tableBody.appendChild(rows[i]);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// removes sort indicators for current column being sorted
|
|
151
|
+
function removeSortIndicators() {
|
|
152
|
+
var col = getNthColumn(currentSort.index),
|
|
153
|
+
cls = col.className;
|
|
154
|
+
|
|
155
|
+
cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, '');
|
|
156
|
+
col.className = cls;
|
|
157
|
+
}
|
|
158
|
+
// adds sort indicators for current column being sorted
|
|
159
|
+
function addSortIndicators() {
|
|
160
|
+
getNthColumn(currentSort.index).className += currentSort.desc
|
|
161
|
+
? ' sorted-desc'
|
|
162
|
+
: ' sorted';
|
|
163
|
+
}
|
|
164
|
+
// adds event listeners for all sorter widgets
|
|
165
|
+
function enableUI() {
|
|
166
|
+
var i,
|
|
167
|
+
el,
|
|
168
|
+
ithSorter = function ithSorter(i) {
|
|
169
|
+
var col = cols[i];
|
|
170
|
+
|
|
171
|
+
return function() {
|
|
172
|
+
var desc = col.defaultDescSort;
|
|
173
|
+
|
|
174
|
+
if (currentSort.index === i) {
|
|
175
|
+
desc = !currentSort.desc;
|
|
176
|
+
}
|
|
177
|
+
sortByIndex(i, desc);
|
|
178
|
+
removeSortIndicators();
|
|
179
|
+
currentSort.index = i;
|
|
180
|
+
currentSort.desc = desc;
|
|
181
|
+
addSortIndicators();
|
|
182
|
+
};
|
|
183
|
+
};
|
|
184
|
+
for (i = 0; i < cols.length; i += 1) {
|
|
185
|
+
if (cols[i].sortable) {
|
|
186
|
+
// add the click event handler on the th so users
|
|
187
|
+
// dont have to click on those tiny arrows
|
|
188
|
+
el = getNthColumn(i).querySelector('.sorter').parentElement;
|
|
189
|
+
if (el.addEventListener) {
|
|
190
|
+
el.addEventListener('click', ithSorter(i));
|
|
191
|
+
} else {
|
|
192
|
+
el.attachEvent('onclick', ithSorter(i));
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// adds sorting functionality to the UI
|
|
198
|
+
return function() {
|
|
199
|
+
if (!getTable()) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
cols = loadColumns();
|
|
203
|
+
loadData();
|
|
204
|
+
addSearchBox();
|
|
205
|
+
addSortIndicators();
|
|
206
|
+
enableUI();
|
|
207
|
+
};
|
|
208
|
+
})();
|
|
209
|
+
|
|
210
|
+
window.addEventListener('load', addSorting);
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { PoolConfig as PgPoolConfig } from 'pg';
|
|
1
|
+
import { PoolConfig as PgPoolConfig, PoolOptions as PgPoolOptions } from 'pg';
|
|
2
2
|
import { PoolOptions as MySqlPoolOptions } from 'mysql2';
|
|
3
|
-
import { Conditions as TypeConditions } from './src/
|
|
3
|
+
import { Conditions as TypeConditions } from './src/core/types';
|
|
4
4
|
export * from './src/db/initDb';
|
|
5
|
-
export * from './src/
|
|
5
|
+
export * from './src/core/repository';
|
|
6
6
|
export * from './src/monitor/monitor';
|
|
7
|
-
export type { PgPoolConfig, MySqlPoolOptions, TypeConditions };
|
|
7
|
+
export type { PgPoolConfig, PgPoolOptions, MySqlPoolOptions, TypeConditions };
|
|
8
|
+
export type * from './src/core/types';
|
package/dist/index.js
CHANGED
|
@@ -17,7 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
// Configs
|
|
18
18
|
__exportStar(require("./src/db/initDb"), exports);
|
|
19
19
|
// Generic Repository
|
|
20
|
-
__exportStar(require("./src/
|
|
20
|
+
__exportStar(require("./src/core/repository"), exports);
|
|
21
21
|
// Monitor
|
|
22
22
|
__exportStar(require("./src/monitor/monitor"), exports);
|
|
23
23
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAIA,UAAU;AACV,kDAA+B;AAE/B,qBAAqB;AACrB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAIA,UAAU;AACV,kDAA+B;AAE/B,qBAAqB;AACrB,wDAAqC;AAErC,UAAU;AACV,wDAAqC"}
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
import { QueryParams, RawQueryParams } from './types';
|
|
2
|
+
import { ITransactionClient } from '../db/IDatabaseClient';
|
|
3
|
+
/**
|
|
4
|
+
* Finds the first record in the specified table
|
|
5
|
+
*
|
|
6
|
+
* This function retrieves the first record from the specified table based on the provided
|
|
7
|
+
* query parameters. It constructs the SQL query, executes it, and returns the result.
|
|
8
|
+
*
|
|
9
|
+
* @template T - The type of the record to be returned
|
|
10
|
+
* @param params - Query parameters including table name, database client, select fields, where conditions, group by, order by, and limit
|
|
11
|
+
* @returns Promise<T | null> - The first record or null if no record is found
|
|
12
|
+
*
|
|
13
|
+
* @throws {Error} When table name is not provided
|
|
14
|
+
* @throws {Error} When database client is not provided
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* const firstRecord = await findFirst({
|
|
18
|
+
* tableName: 'users',
|
|
19
|
+
* dbClient: dbClient,
|
|
20
|
+
* select: ['id', 'name', 'email'],
|
|
21
|
+
* where: { status: 'active' },
|
|
22
|
+
* groupBy: ['status'],
|
|
23
|
+
* orderBy: [{ field: 'created_at', direction: 'DESC' }],
|
|
24
|
+
* })
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* const firstRecord = await findFirst({
|
|
28
|
+
* tableName: 'users',
|
|
29
|
+
* dbClient: dbClient,
|
|
30
|
+
* select: ['id', 'name', 'email'],
|
|
31
|
+
* where: { status: 'active' },
|
|
32
|
+
* groupBy: ['status'],
|
|
33
|
+
* orderBy: [{ field: 'created_at', direction: 'DESC' }],
|
|
34
|
+
* })
|
|
35
|
+
*/
|
|
36
|
+
export declare const findFirst: <T>({ tableName, dbClient, select, where, groupBy, orderBy, }: QueryParams<T>) => Promise<T | null>;
|
|
37
|
+
/**
|
|
38
|
+
* Finds multiple records in the specified table
|
|
39
|
+
*
|
|
40
|
+
* This function retrieves multiple records from the specified table based on the provided
|
|
41
|
+
* query parameters. It constructs the SQL query, executes it, and returns the result.
|
|
42
|
+
*
|
|
43
|
+
* @template T - The type of the records to be returned
|
|
44
|
+
* @param params - Query parameters including table name, database client, select fields, where conditions, group by, order by, limit, and offset
|
|
45
|
+
* @returns Promise<T[]> - The records found in the table
|
|
46
|
+
*
|
|
47
|
+
* @throws {Error} When table name is not provided
|
|
48
|
+
* @throws {Error} When database client is not provided
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* const records = await findMany({
|
|
52
|
+
* tableName: 'users',
|
|
53
|
+
* dbClient: dbClient,
|
|
54
|
+
* select: ['id', 'name', 'email'],
|
|
55
|
+
* where: { status: 'active' },
|
|
56
|
+
* groupBy: ['status'],
|
|
57
|
+
* orderBy: [{ field: 'created_at', direction: 'DESC' }],
|
|
58
|
+
* limit: 10,
|
|
59
|
+
* offset: 0,
|
|
60
|
+
* unaccent: true,
|
|
61
|
+
* })
|
|
62
|
+
*/
|
|
63
|
+
export declare const findMany: <T>({ tableName, dbClient, select, where, groupBy, orderBy, limit, offset, unaccent, }: QueryParams<T>) => Promise<T[]>;
|
|
64
|
+
/**
|
|
65
|
+
* Inserts a new record into the specified table
|
|
66
|
+
*
|
|
67
|
+
* This function inserts a new record into the specified table based on the provided
|
|
68
|
+
* query parameters. It constructs the SQL query, executes it, and returns the result.
|
|
69
|
+
*
|
|
70
|
+
* @template P - The type of the data to be inserted
|
|
71
|
+
* @template R - The type of the record to be returned
|
|
72
|
+
* @param params - Query parameters including table name, database client, data to be inserted, and optional returning fields
|
|
73
|
+
* @returns Promise<R> - The inserted record
|
|
74
|
+
*
|
|
75
|
+
* @throws {Error} When table name is not provided
|
|
76
|
+
* @throws {Error} When database client is not provided
|
|
77
|
+
* @throws {Error} When data object is not provided
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* const insertedRecord = await insert({
|
|
81
|
+
* tableName: 'users',
|
|
82
|
+
* dbClient: dbClient,
|
|
83
|
+
* data: { name: 'John Doe', email: 'john.doe@example.com' },
|
|
84
|
+
* returning: ['id', 'name', 'email'],
|
|
85
|
+
* })
|
|
86
|
+
*/
|
|
87
|
+
export declare const insert: <P, R>({ tableName, dbClient, data, returning, }: QueryParams<R> & {
|
|
88
|
+
data: P;
|
|
89
|
+
returning?: string[];
|
|
90
|
+
}) => Promise<R>;
|
|
91
|
+
/**
|
|
92
|
+
* Inserts multiple records into the specified table
|
|
93
|
+
*
|
|
94
|
+
* This function inserts multiple records into the specified table based on the provided
|
|
95
|
+
* query parameters. It constructs the SQL query, executes it, and returns the result.
|
|
96
|
+
*
|
|
97
|
+
* @template P - The type of the data to be inserted
|
|
98
|
+
* @template R - The type of the record to be returned
|
|
99
|
+
* @param params - Query parameters including table name, database client, data to be inserted, and optional returning fields
|
|
100
|
+
* @returns Promise<R[]> - The inserted records
|
|
101
|
+
*
|
|
102
|
+
* @throws {Error} When table name is not provided
|
|
103
|
+
* @throws {Error} When database client is not provided
|
|
104
|
+
* @throws {Error} When data array is not provided or empty
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* const insertedRecords = await insertMany({
|
|
108
|
+
* tableName: 'users',
|
|
109
|
+
* dbClient: dbClient,
|
|
110
|
+
* data: [{ name: 'John Doe', email: 'john.doe@example.com' }, { name: 'Jane Doe', email: 'jane.doe@example.com' }],
|
|
111
|
+
* returning: ['id', 'name', 'email'],
|
|
112
|
+
* })
|
|
113
|
+
*/
|
|
114
|
+
export declare const insertMany: <P, R>({ tableName, dbClient, data, returning, }: QueryParams<R> & {
|
|
115
|
+
data: P[];
|
|
116
|
+
returning?: string[];
|
|
117
|
+
}) => Promise<R[]>;
|
|
118
|
+
/**
|
|
119
|
+
* Updates a record in the specified table
|
|
120
|
+
*
|
|
121
|
+
* This function updates a record in the specified table based on the provided
|
|
122
|
+
* query parameters. It constructs the SQL query, executes it, and returns the result.
|
|
123
|
+
*
|
|
124
|
+
* @template P - The type of the data to be updated
|
|
125
|
+
* @template R - The type of the record to be returned
|
|
126
|
+
* @param params - Query parameters including table name, database client, ID of the record to be updated, data to be updated, and optional returning fields
|
|
127
|
+
* @returns Promise<R | void> - The updated record or void if no record is found
|
|
128
|
+
*
|
|
129
|
+
* @throws {Error} When table name is not provided
|
|
130
|
+
* @throws {Error} When database client is not provided
|
|
131
|
+
* @throws {Error} When ID is not provided
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* const updatedRecord = await update({
|
|
135
|
+
* tableName: 'users',
|
|
136
|
+
* dbClient: dbClient,
|
|
137
|
+
* id: '123',
|
|
138
|
+
* data: { name: 'John Doe', email: 'john.doe@example.com' },
|
|
139
|
+
* returning: ['id', 'name', 'email'],
|
|
140
|
+
* })
|
|
141
|
+
*/
|
|
142
|
+
export declare const update: <P, R>({ tableName, dbClient, id, data, returning, }: QueryParams<R> & {
|
|
143
|
+
data: P;
|
|
144
|
+
returning?: string[];
|
|
145
|
+
}) => Promise<R | void>;
|
|
146
|
+
/**
|
|
147
|
+
* Updates multiple records in the specified table
|
|
148
|
+
*
|
|
149
|
+
* This function updates multiple records in the specified table based on the provided
|
|
150
|
+
* query parameters. It constructs the SQL query, executes it, and returns the result.
|
|
151
|
+
*
|
|
152
|
+
* @template P - The type of the data to be updated
|
|
153
|
+
* @template R - The type of the record to be returned
|
|
154
|
+
* @param params - Query parameters including table name, database client, data to be updated, where conditions, and optional returning fields
|
|
155
|
+
* @returns Promise<R[]> - The updated records
|
|
156
|
+
*
|
|
157
|
+
* @throws {Error} When table name is not provided
|
|
158
|
+
* @throws {Error} When database client is not provided
|
|
159
|
+
* @throws {Error} When data object is not provided
|
|
160
|
+
* @throws {Error} When where condition is not provided
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* const updatedRecords = await updateMany({
|
|
164
|
+
* tableName: 'users',
|
|
165
|
+
* dbClient: dbClient,
|
|
166
|
+
* data: { name: 'John Doe', email: 'john.doe@example.com' },
|
|
167
|
+
* where: { status: 'active' },
|
|
168
|
+
* returning: ['id', 'name', 'email'],
|
|
169
|
+
* })
|
|
170
|
+
*/
|
|
171
|
+
export declare const updateMany: <P, R>({ tableName, dbClient, data, where, returning, }: QueryParams<R> & {
|
|
172
|
+
data: P;
|
|
173
|
+
returning?: string[];
|
|
174
|
+
}) => Promise<R[]>;
|
|
175
|
+
/**
|
|
176
|
+
* Deletes a record from the specified table
|
|
177
|
+
*
|
|
178
|
+
* This function deletes a record from the specified table based on the provided
|
|
179
|
+
* query parameters. It constructs the SQL query, executes it, and returns the result.
|
|
180
|
+
*
|
|
181
|
+
* @template T - The type of the record to be deleted
|
|
182
|
+
* @param params - Query parameters including table name, database client, ID of the record to be deleted, and optional permanently flag
|
|
183
|
+
* @returns Promise<void> - Resolves when the record is deleted
|
|
184
|
+
*
|
|
185
|
+
* @throws {Error} When table name is not provided
|
|
186
|
+
* @throws {Error} When database client is not provided
|
|
187
|
+
* @throws {Error} When ID is not provided
|
|
188
|
+
*
|
|
189
|
+
* @example
|
|
190
|
+
* await deleteOne({
|
|
191
|
+
* tableName: 'users',
|
|
192
|
+
* dbClient: dbClient,
|
|
193
|
+
* id: '123',
|
|
194
|
+
* permanently: true,
|
|
195
|
+
* })
|
|
196
|
+
*/
|
|
197
|
+
export declare const deleteOne: <T>({ tableName, dbClient, id, permanently, }: QueryParams<T> & {
|
|
198
|
+
permanently?: boolean;
|
|
199
|
+
}) => Promise<void>;
|
|
200
|
+
/**
|
|
201
|
+
* Deletes multiple records from the specified table
|
|
202
|
+
*
|
|
203
|
+
* This function deletes multiple records from the specified table based on the provided
|
|
204
|
+
* query parameters. It constructs the SQL query, executes it, and returns the result.
|
|
205
|
+
*
|
|
206
|
+
* @template T - The type of the record to be deleted
|
|
207
|
+
* @param params - Query parameters including table name, database client, IDs of the records to be deleted, field to be used for deletion, and optional permanently flag
|
|
208
|
+
* @returns Promise<void> - Resolves when the records are deleted
|
|
209
|
+
*
|
|
210
|
+
* @throws {Error} When table name is not provided
|
|
211
|
+
* @throws {Error} When database client is not provided
|
|
212
|
+
* @throws {Error} When IDs are not provided or empty
|
|
213
|
+
* @throws {Error} When field is not provided
|
|
214
|
+
*
|
|
215
|
+
* @example
|
|
216
|
+
* await deleteMany({
|
|
217
|
+
* tableName: 'users',
|
|
218
|
+
* dbClient: dbClient,
|
|
219
|
+
* ids: ['123', '456', '789'],
|
|
220
|
+
* field: 'id',
|
|
221
|
+
* permanently: true,
|
|
222
|
+
* })
|
|
223
|
+
*/
|
|
224
|
+
export declare const deleteMany: <T>({ tableName, dbClient, ids, field, permanently, }: QueryParams<T> & {
|
|
225
|
+
ids: string[] | number[];
|
|
226
|
+
field?: string;
|
|
227
|
+
permanently?: boolean;
|
|
228
|
+
}) => Promise<void>;
|
|
229
|
+
/**
|
|
230
|
+
* Joins multiple tables in the specified table
|
|
231
|
+
*
|
|
232
|
+
* This function joins multiple tables in the specified table based on the provided
|
|
233
|
+
* query parameters. It constructs the SQL query, executes it, and returns the result.
|
|
234
|
+
*
|
|
235
|
+
* @template T - The type of the record to be joined
|
|
236
|
+
* @param params - Query parameters including table name, database client, select fields, joins, where conditions, group by, order by, limit, and offset
|
|
237
|
+
* @returns Promise<T[]> - The records found in the joined tables
|
|
238
|
+
*
|
|
239
|
+
* @throws {Error} When table name is not provided
|
|
240
|
+
* @throws {Error} When database client is not provided
|
|
241
|
+
* @throws {Error} When select fields are not provided
|
|
242
|
+
* @throws {Error} When joins are not provided
|
|
243
|
+
*
|
|
244
|
+
* @example
|
|
245
|
+
* const records = await joins({
|
|
246
|
+
* tableName: 'users',
|
|
247
|
+
* dbClient: dbClient,
|
|
248
|
+
* select: ['id', 'name', 'email'],
|
|
249
|
+
* joins: [{ type: 'INNER', table: 'orders', on: 'users.id = orders.user_id' }],
|
|
250
|
+
* where: { status: 'active' },
|
|
251
|
+
* groupBy: ['status'],
|
|
252
|
+
* orderBy: [{ field: 'created_at', direction: 'DESC' }],
|
|
253
|
+
* limit: 10,
|
|
254
|
+
* offset: 0,
|
|
255
|
+
* unaccent: true,
|
|
256
|
+
* })
|
|
257
|
+
*/
|
|
258
|
+
export declare const joins: <T>({ tableName, dbClient, select, joins, where, groupBy, orderBy, limit, offset, unaccent, }: QueryParams<T>) => Promise<T[]>;
|
|
259
|
+
/**
|
|
260
|
+
* Executa uma query SQL raw diretamente no banco de dados
|
|
261
|
+
* @param params - Parâmetros da query raw
|
|
262
|
+
* @returns Promise com o resultado da query
|
|
263
|
+
*
|
|
264
|
+
* @example
|
|
265
|
+
* // Query simples sem parâmetros
|
|
266
|
+
* const users = await rawQuery({
|
|
267
|
+
* dbClient,
|
|
268
|
+
* sql: 'SELECT * FROM users WHERE active = true'
|
|
269
|
+
* })
|
|
270
|
+
*
|
|
271
|
+
* @example
|
|
272
|
+
* // Query com parâmetros
|
|
273
|
+
* const user = await rawQuery({
|
|
274
|
+
* dbClient,
|
|
275
|
+
* sql: 'SELECT * FROM users WHERE id = ? AND email = ?',
|
|
276
|
+
* params: ['user-id', 'user@example.com']
|
|
277
|
+
* })
|
|
278
|
+
*
|
|
279
|
+
* @example
|
|
280
|
+
* // Query de agregação
|
|
281
|
+
* const stats = await rawQuery({
|
|
282
|
+
* dbClient,
|
|
283
|
+
* sql: `
|
|
284
|
+
* SELECT
|
|
285
|
+
* COUNT(*) as total_users,
|
|
286
|
+
* AVG(age) as avg_age,
|
|
287
|
+
* MAX(created_at) as last_created
|
|
288
|
+
* FROM users
|
|
289
|
+
* WHERE created_at >= ?
|
|
290
|
+
* `,
|
|
291
|
+
* params: [new Date('2023-01-01')]
|
|
292
|
+
* })
|
|
293
|
+
*/
|
|
294
|
+
export declare const rawQuery: <T = any>({ dbClient, sql, params, }: RawQueryParams) => Promise<T>;
|
|
295
|
+
/**
|
|
296
|
+
* Executes a function within a database transaction
|
|
297
|
+
* @param dbClient - Database client instance
|
|
298
|
+
* @param transactionFn - Function to execute within the transaction
|
|
299
|
+
* @returns Promise with the result of the transaction function
|
|
300
|
+
*
|
|
301
|
+
* @example
|
|
302
|
+
* // Simple transaction
|
|
303
|
+
* const result = await withTransaction(dbClient, async (tx) => {
|
|
304
|
+
* const user = await insert({
|
|
305
|
+
* tableName: 'users',
|
|
306
|
+
* dbClient: tx,
|
|
307
|
+
* data: { name: 'John', email: 'john@example.com' }
|
|
308
|
+
* })
|
|
309
|
+
*
|
|
310
|
+
* await insert({
|
|
311
|
+
* tableName: 'user_profiles',
|
|
312
|
+
* dbClient: tx,
|
|
313
|
+
* data: { user_id: user.id, bio: 'Hello world' }
|
|
314
|
+
* })
|
|
315
|
+
*
|
|
316
|
+
* return user
|
|
317
|
+
* })
|
|
318
|
+
*
|
|
319
|
+
* @example
|
|
320
|
+
* // Transaction with error handling
|
|
321
|
+
* try {
|
|
322
|
+
* const result = await withTransaction(dbClient, async (tx) => {
|
|
323
|
+
* // Multiple operations that must succeed or fail together
|
|
324
|
+
* const order = await insert({
|
|
325
|
+
* tableName: 'orders',
|
|
326
|
+
* dbClient: tx,
|
|
327
|
+
* data: { user_id: 'user-123', total: 100 }
|
|
328
|
+
* })
|
|
329
|
+
*
|
|
330
|
+
* await update({
|
|
331
|
+
* tableName: 'users',
|
|
332
|
+
* dbClient: tx,
|
|
333
|
+
* id: 'user-123',
|
|
334
|
+
* data: { last_order_id: order.id }
|
|
335
|
+
* })
|
|
336
|
+
*
|
|
337
|
+
* return order
|
|
338
|
+
* })
|
|
339
|
+
* } catch (error) {
|
|
340
|
+
* // Transaction was automatically rolled back
|
|
341
|
+
* console.error('Transaction failed:', error)
|
|
342
|
+
* }
|
|
343
|
+
*/
|
|
344
|
+
export declare const withTransaction: <T>(dbClient: any, transactionFn: (tx: ITransactionClient) => Promise<T>) => Promise<T>;
|
|
345
|
+
/**
|
|
346
|
+
* Creates a transaction client for manual transaction management
|
|
347
|
+
* @param dbClient - Database client instance
|
|
348
|
+
* @returns Promise with the transaction client
|
|
349
|
+
*
|
|
350
|
+
* @example
|
|
351
|
+
* // Manual transaction management
|
|
352
|
+
* const transaction = await beginTransaction(dbClient)
|
|
353
|
+
*
|
|
354
|
+
* try {
|
|
355
|
+
* const user = await insert({
|
|
356
|
+
* tableName: 'users',
|
|
357
|
+
* dbClient: transaction,
|
|
358
|
+
* data: { name: 'John', email: 'john@example.com' }
|
|
359
|
+
* })
|
|
360
|
+
*
|
|
361
|
+
* await insert({
|
|
362
|
+
* tableName: 'user_profiles',
|
|
363
|
+
* dbClient: transaction,
|
|
364
|
+
* data: { user_id: user.id, bio: 'Hello world' }
|
|
365
|
+
* })
|
|
366
|
+
*
|
|
367
|
+
* await transaction.commit()
|
|
368
|
+
* return user
|
|
369
|
+
* } catch (error) {
|
|
370
|
+
* await transaction.rollback()
|
|
371
|
+
* throw error
|
|
372
|
+
* }
|
|
373
|
+
*/
|
|
374
|
+
export declare const beginTransaction: (dbClient: any) => Promise<ITransactionClient>;
|