query-weaver 0.1.4 → 0.2.0-alpha.0

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/dist/index.cjs.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var W=Object.defineProperty;var fe=Object.getOwnPropertyDescriptor;var Ee=Object.getOwnPropertyNames;var he=Object.prototype.hasOwnProperty;var de=(e,r)=>{for(var t in r)W(e,t,{get:r[t],enumerable:!0})},we=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let u of Ee(r))!he.call(e,u)&&u!==t&&W(e,u,{get:()=>r[u],enumerable:!(n=fe(r,u))||n.enumerable});return e};var me=e=>we(W({},"__esModule",{value:!0}),e);var H=(e,r,t)=>{if(!r.has(e))throw TypeError("Cannot "+t)};var s=(e,r,t)=>(H(e,r,"read from private field"),t?t.call(e):r.get(e)),y=(e,r,t)=>{if(r.has(e))throw TypeError("Cannot add the same private member more than once");r instanceof WeakSet?r.add(e):r.set(e,t)},c=(e,r,t,n)=>(H(e,r,"write to private field"),n?n.call(e,t):r.set(e,t),t);var T=(e,r,t)=>(H(e,r,"access private method"),t);var Ae={};de(Ae,{AND:()=>_,LIMIT:()=>ie,OFFSET:()=>se,OR:()=>Y,QueryFragments:()=>p,QueryHelper:()=>q,UNION:()=>ue,UNION_ALL:()=>ne,WHERE:()=>w,WHERE_AND:()=>le,WHERE_OR:()=>v,and:()=>ae,buildClauses:()=>N,buildDelete:()=>j,buildInsert:()=>k,buildKeys:()=>X,buildUpdate:()=>U,buildValues:()=>G,ident:()=>te,isQueryFragment:()=>m,isQueryTemplateStyle:()=>x,json:()=>re,or:()=>oe,pgIdent:()=>z,pgString:()=>b,raw:()=>C,sql:()=>i,where:()=>pe,where_and:()=>ye,where_or:()=>ce,withQueryHelper:()=>Qe});module.exports=me(Ae);var Re=["AES128","AES256","ALL","ALLOWOVERWRITE","ANALYSE","ANALYZE","AND","ANY","ARRAY","AS","ASC","AUTHORIZATION","BACKUP","BETWEEN","BINARY","BLANKSASNULL","BOTH","BYTEDICT","CASE","CAST","CHECK","COLLATE","COLUMN","CONSTRAINT","CREATE","CREDENTIALS","CROSS","CURRENT_DATE","CURRENT_TIME","CURRENT_TIMESTAMP","CURRENT_USER","CURRENT_USER_ID","DEFAULT","DEFERRABLE","DEFLATE","DEFRAG","DELTA","DELTA32K","DESC","DISABLE","DISTINCT","DO","ELSE","EMPTYASNULL","ENABLE","ENCODE","ENCRYPT","ENCRYPTION","END","EXCEPT","EXPLICIT","FALSE","FOR","FOREIGN","FREEZE","FROM","FULL","GLOBALDICT256","GLOBALDICT64K","GRANT","GROUP","GZIP","HAVING","IDENTITY","IGNORE","ILIKE","IN","INITIALLY","INNER","INTERSECT","INTO","IS","ISNULL","JOIN","LEADING","LEFT","LIKE","LIMIT","LOCALTIME","LOCALTIMESTAMP","LUN","LUNS","LZO","LZOP","MINUS","MOSTLY13","MOSTLY32","MOSTLY8","NATURAL","NEW","NOT","NOTNULL","NULL","NULLS","OFF","OFFLINE","OFFSET","OLD","ON","ONLY","OPEN","OR","ORDER","OUTER","OVERLAPS","PARALLEL","PARTITION","PERCENT","PLACING","PRIMARY","RAW","READRATIO","RECOVER","REFERENCES","REJECTLOG","RESORT","RESTORE","RIGHT","SELECT","SESSION_USER","SIMILAR","SOME","SYSDATE","SYSTEM","TABLE","TAG","TDES","TEXT255","TEXT32K","THEN","TO","TOP","TRAILING","TRUE","TRUNCATECOLUMNS","UNION","UNIQUE","USER","USING","VERBOSE","WALLET","WHEN","WHERE","WITH","WITHOUT"];function B(e){return e.match(/^[a-zA-Z_][0-9a-zA-Z_$]*$/)&&!Re.includes(e.toUpperCase())?e:`"${e.replace(/"/g,'""')}"`}function I(e){return`${e.includes("'")?"E":""}'${e.replace(/'/g,"''").replace(/\\/g,"\\\\")}'`}function z(e){return e.split(".").map(r=>B(r)).join(".")}function b(e){return e===null?"NULL":typeof e=="boolean"?e?"true":"false":Array.isArray(e)?"ARRAY["+e.map(b).join(",")+"]":typeof e=="object"?"toJSON"in e&&typeof e.toJSON=="function"?I(e.toJSON()):I(e.toString()):I(String(e))}var h=class{constructor(){this.text="";this.values=[];this.embed="";Object.defineProperties(this,{text:{enumerable:!0,get(){return this.compiled.text}},values:{enumerable:!0,get(){return this.compiled.values}},embed:{enumerable:!0,get(){return this.compiled.embed}}})}get compiled(){let r=[],t=this.toString({valueFn:u=>(r.push(u),"$"+r.length)}),n=this.toString();return{text:t,values:r,embed:n}}},O,$=class extends h{constructor(t){super();y(this,O,void 0);c(this,O,t)}toString(t){return(t?.valueFn??b)(s(this,O))}};O=new WeakMap;var Q,M=class extends h{constructor(t){super();y(this,Q,void 0);c(this,Q,t)}toString(t){return(t?.identFn??z)(s(this,Q))}};Q=new WeakMap;var A,V=class extends h{constructor(t){super();y(this,A,void 0);c(this,A,String(t))}toString(){return s(this,A)}};A=new WeakMap;function m(e){return e instanceof h}function g(e){return new M(e)}function Z(e){return typeof e>"u"||m(e)?e:new $(e)}function d(e){return typeof e>"u"||m(e)?e:Array.isArray(e)?new p(e.map(d)):new V(e)}function J(e){return typeof e>"u"||m(e)?e:d(JSON.stringify(e))}var x=e=>{if(!Array.isArray(e)||typeof e?.[0]!="object"||e[0]===null||!("raw"in e[0])||!Array.isArray(e[0]))return!1;let[r,...t]=e;return r.length-1===t.length};function ee(e,r){if(e.length-1!==r.length)throw new Error("Invalid call of the function");return e.flatMap((t,n)=>n?[r[n-1],t]:[t])}var S,o,p=class extends h{constructor(...t){super();y(this,S,[]);y(this,o,void 0);if(c(this,o,{prefix:"",glue:"",suffix:"",empty:"",wrapperFn:n=>n}),Array.isArray(t[0])){let[n,u]=t;c(this,o,{...s(this,o),...u}),this.push(...n)}else{let[n]=t;c(this,o,{...s(this,o),...n})}}setSewingPattern(t="",n="",u="",a=""){return c(this,o,{...s(this,o),prefix:t,glue:n,suffix:u,empty:a}),this}push(...t){return s(this,S).push(...t.map(d).filter(n=>n!==void 0)),this}append(...t){return this.push(...t)}join(t=", "){return s(this,o).glue=t,this}prefix(t=" "){return s(this,o).prefix=t,this}suffix(t=" "){return s(this,o).suffix=t,this}empty(t=""){return s(this,o).empty=t,this}toString(t){let n=s(this,S).map(u=>u.toString(t)).filter(u=>u).join(s(this,o).glue);return n?s(this,o).prefix+s(this,o).wrapperFn(n,t)+s(this,o).suffix:s(this,o).empty}};S=new WeakMap,o=new WeakMap;function i(...e){let r;if(x(e)){let[t,...n]=e;r=[new p(ee(t.map(d),n.map(Z)))]}else r=e.map(Z);return new p(r)}var te=g;function C(...e){return new p(e.map(d))}function re(...e){let r,t=(n,u)=>(u?.valueFn||b)(n);if(x(e)){let[n,...u]=e;r=[new p(ee(n.map(d),u.map(J)),{wrapperFn:t})]}else r=e.map(n=>new p([J(n)],{wrapperFn:t}));return new p(r)}function N(...e){let r=new p,t=n=>{if(n!==void 0&&n!==null){if(typeof n=="string"){r.push(d(n));return}if(m(n)){r.push(n);return}if(Array.isArray(n)){n.forEach(t);return}if(typeof n=="object"){for(let u in n)if(n[u]!==void 0){if(m(n[u])){r.push(i`${g(u)} ${n[u]}`);continue}if(n[u]===null){r.push(i`${g(u)} IS NULL`);continue}if(Array.isArray(n[u])){r.push(i`${g(u)} = ANY (${n[u]})`);continue}r.push(i`${g(u)} = ${n[u]}`)}return}}};return t(e),r}function Y(...e){return N(e).setSewingPattern("((",") OR (","))","")}function _(...e){return N(e).setSewingPattern("((",") AND (","))","")}function w(...e){return N(e).setSewingPattern("WHERE ((",") AND (","))","")}function v(...e){return N(e).setSewingPattern("WHERE ((",") OR (","))","")}function ne(...e){return C(...e).join(" UNION ALL ")}function ue(...e){return C(...e).join(" UNION ")}function ie(e){return e==null?i``:(e=Number(e),e>0?i`LIMIT ${e}`:i``)}function se(e){return e==null?i``:(e=Number(e),e>=0?i`OFFSET ${e}`:i``)}function G(e){if(!Array.isArray(e)){if(typeof e!="object")throw new Error("buildValues: The argument must be an array");e=[e]}if(e.length===0)throw new Error("buildValues: Array must contain elements at least one");let r=e.map(u=>typeof u=="object"?Object.values(u):u),t=r[0].length;if(r.some(u=>u.length!==t))throw new Error("buildValues: Array must all be the same length");let n=i(...r.map(u=>i(...u).join(", "))).setSewingPattern("(","), (",")");return i`VALUES ${n}`}function X(e){if(Array.isArray(e)||(e=[e]),e.length==0||!e[0]||typeof e[0]!="object")throw new Error("Invalid call of the function");e=e.map(n=>Object.fromEntries(Object.entries(n).filter(([u,a])=>a!==void 0)));let r=Object.keys(e[0]),t=r.join();if(e.some(n=>Object.keys(n).join()!==t))throw new Error("buildKeys: All objects must have the same keys");return i(...r.map(g)).setSewingPattern("(",", ",")")}function k(e,r,t){Array.isArray(r)||(r=[r]);let n=X(r),u=G(r.map(Object.values));return i`INSERT INTO ${g(e)} ${n} ${u}`.append(t).join(" ")}function U(e,r,t,n){let u=new p;for(let a in r){let F=r[a];F!==void 0&&u.push(i`${g(a)} = ${F}`)}return i`UPDATE ${g(e)} SET ${u.join(", ")} ${w(t)}`.append(n).join(" ")}function j(e,r,t){return i`DELETE FROM ${g(e)} ${w(r)}`.append(t).join(" ")}var oe=Y,ae=_,pe=w,le=w,ye=w,ce=v;i.raw=C;i.ident=te;i.json=re;i.WHERE=w;i.WHERE_AND=le;i.WHERE_OR=v;i.AND=_;i.OR=Y;i.where=pe;i.where_and=ye;i.where_or=ce;i.and=ae;i.or=oe;i.insert=k;i.update=U;i.delete=j;i.keys=X;i.values=G;i.UNION_ALL=ne;i.UNION=ue;i.LIMIT=ie;i.OFFSET=se;function Oe(e,r){return e={...e},Object.defineProperties(e,Object.fromEntries(Object.keys(e).map(t=>[t,r.includes(t)?{}:{enumerable:!1}]))),e}var L,E,D,Te,l,f,q=class{constructor(r,t={}){y(this,D);y(this,l);y(this,L,void 0);y(this,E,void 0);c(this,L,r),c(this,E,{...t}),s(this,E).query||"query"in r&&typeof r.query=="function"&&(s(this,E).query=r.query)}async insert(r,t,n){let u=k(r,t,n);return await T(this,l,f).call(this,[u])}async update(r,t,n,u){let a=U(r,t,n,u);return await T(this,l,f).call(this,[a])}async delete(r,t,n){let u=j(r,t,n);return await T(this,l,f).call(this,[u])}async query(...r){return T(this,l,f).call(this,r)}async getRows(...r){return T(this,l,f).call(this,r).then(t=>t.rows)}async getRow(...r){return T(this,l,f).call(this,r).then(t=>t.rows?.[0])}async getOne(...r){return T(this,l,f).call(this,r).then(t=>Object.values(t.rows?.[0]??{})?.[0])}async getCount(...r){return T(this,l,f).call(this,r).then(t=>t.rowCount)}async exec(...r){return T(this,l,f).call(this,r).then(t=>t.rowCount)}static get prisma(){return async function({text:r,values:t}){if("$queryRawUnsafe"in this&&typeof this.$queryRawUnsafe=="function"){let n=await this.$queryRawUnsafe(r,...t);return{rows:n,rowCount:n.length}}throw new Error("Invalid object")}}static get typeorm(){return async function({text:r,values:t}){if("query"in this&&typeof this.query=="function"){let n=await this.query(r,t);return n.length===2&&Array.isArray(n[0])&&typeof n[1]=="number"?{rows:n[0],rowCount:n[1]}:{rows:n,rowCount:n.length}}throw new Error("Invalid object")}}};L=new WeakMap,E=new WeakMap,D=new WeakSet,Te=function(r){if(x(r)){let[u,...a]=r;return i(u,...a)}let[t,n]=r;return typeof t=="object"&&t&&"text"in t?{...t,values:t.values??[]}:{text:t,values:n??[]}},l=new WeakSet,f=async function(r){let t=T(this,D,Te).call(this,r);s(this,E)?.beforeQuery?.(t);let n=s(this,E).query;if(!n)throw new Error("Missing query function");let u=await n.call(s(this,L),t).catch(a=>{throw s(this,E)?.onError?.(t,a),a});return typeof u.rowCount!="number"&&(u.rowCount=u.rows?.length??0),s(this,E)?.afterQuery?.({...t,results:Oe(u,["command","rowCount","rows"])}),u};function Qe(e,r){let t=new q(e,r),n=new Proxy(e,{get(u,a,F){let P=a in t?t:a in u?u:void 0,R=P&&Reflect.get(P,a);return R&&R instanceof Function?function(...ge){let K=R.apply(this===F?P:this,ge);return K===u?n:K}:R===u?n:R}});return n}0&&(module.exports={AND,LIMIT,OFFSET,OR,QueryFragments,QueryHelper,UNION,UNION_ALL,WHERE,WHERE_AND,WHERE_OR,and,buildClauses,buildDelete,buildInsert,buildKeys,buildUpdate,buildValues,ident,isQueryFragment,isQueryTemplateStyle,json,or,pgIdent,pgString,raw,sql,where,where_and,where_or,withQueryHelper});
1
+ "use strict";var H=Object.defineProperty;var we=Object.getOwnPropertyDescriptor;var Ee=Object.getOwnPropertyNames;var de=Object.prototype.hasOwnProperty;var Z=e=>{throw TypeError(e)};var Re=(e,r)=>{for(var t in r)H(e,t,{get:r[t],enumerable:!0})},me=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let u of Ee(r))!de.call(e,u)&&u!==t&&H(e,u,{get:()=>r[u],enumerable:!(n=we(r,u))||n.enumerable});return e};var Qe=e=>me(H({},"__esModule",{value:!0}),e);var M=(e,r,t)=>r.has(e)||Z("Cannot "+t);var s=(e,r,t)=>(M(e,r,"read from private field"),t?t.call(e):r.get(e)),c=(e,r,t)=>r.has(e)?Z("Cannot add the same private member more than once"):r instanceof WeakSet?r.add(e):r.set(e,t),l=(e,r,t,n)=>(M(e,r,"write to private field"),n?n.call(e,t):r.set(e,t),t),p=(e,r,t)=>(M(e,r,"access private method"),t);var xe={};Re(xe,{AND:()=>X,LIMIT:()=>oe,OFFSET:()=>ae,OR:()=>K,QueryFragments:()=>T,QueryHelper:()=>q,UNION:()=>se,UNION_ALL:()=>ie,WHERE:()=>d,WHERE_AND:()=>Te,WHERE_OR:()=>Y,and:()=>ye,buildClauses:()=>F,buildDelete:()=>P,buildInsert:()=>j,buildKeys:()=>G,buildUpdate:()=>W,buildValues:()=>_,ident:()=>ne,isQueryFragment:()=>R,isQueryTemplateStyle:()=>N,json:()=>ue,or:()=>pe,pgIdent:()=>te,pgString:()=>k,raw:()=>U,sql:()=>i,where:()=>le,where_and:()=>ce,where_or:()=>ge,withQueryHelper:()=>Se});module.exports=Qe(xe);var Ae=["AES128","AES256","ALL","ALLOWOVERWRITE","ANALYSE","ANALYZE","AND","ANY","ARRAY","AS","ASC","AUTHORIZATION","BACKUP","BETWEEN","BINARY","BLANKSASNULL","BOTH","BYTEDICT","CASE","CAST","CHECK","COLLATE","COLUMN","CONSTRAINT","CREATE","CREDENTIALS","CROSS","CURRENT_DATE","CURRENT_TIME","CURRENT_TIMESTAMP","CURRENT_USER","CURRENT_USER_ID","DEFAULT","DEFERRABLE","DEFLATE","DEFRAG","DELTA","DELTA32K","DESC","DISABLE","DISTINCT","DO","ELSE","EMPTYASNULL","ENABLE","ENCODE","ENCRYPT","ENCRYPTION","END","EXCEPT","EXPLICIT","FALSE","FOR","FOREIGN","FREEZE","FROM","FULL","GLOBALDICT256","GLOBALDICT64K","GRANT","GROUP","GZIP","HAVING","IDENTITY","IGNORE","ILIKE","IN","INITIALLY","INNER","INTERSECT","INTO","IS","ISNULL","JOIN","LEADING","LEFT","LIKE","LIMIT","LOCALTIME","LOCALTIMESTAMP","LUN","LUNS","LZO","LZOP","MINUS","MOSTLY13","MOSTLY32","MOSTLY8","NATURAL","NEW","NOT","NOTNULL","NULL","NULLS","OFF","OFFLINE","OFFSET","OLD","ON","ONLY","OPEN","OR","ORDER","OUTER","OVERLAPS","PARALLEL","PARTITION","PERCENT","PLACING","PRIMARY","RAW","READRATIO","RECOVER","REFERENCES","REJECTLOG","RESORT","RESTORE","RIGHT","SELECT","SESSION_USER","SIMILAR","SOME","SYSDATE","SYSTEM","TABLE","TAG","TDES","TEXT255","TEXT32K","THEN","TO","TOP","TRAILING","TRUE","TRUNCATECOLUMNS","UNION","UNIQUE","USER","USING","VERBOSE","WALLET","WHEN","WHERE","WITH","WITHOUT"];function J(e){return e.match(/^[a-zA-Z_][0-9a-zA-Z_$]*$/)&&!Ae.includes(e.toUpperCase())?e:`"${e.replace(/"/g,'""')}"`}function C(e){return`${e.includes("'")?"E":""}'${e.replace(/'/g,"''").replace(/\\/g,"\\\\")}'`}function te(e){return e.split(".").map(r=>J(r)).join(".")}function k(e){return e===null?"NULL":typeof e=="boolean"?e?"true":"false":Array.isArray(e)?"ARRAY["+e.map(k).join(",")+"]":typeof e=="object"?"toJSON"in e&&typeof e.toJSON=="function"?C(e.toJSON()):C(e.toString()):C(String(e))}var w=class{constructor(){this.text="";this.values=[];this.embed="";Object.defineProperties(this,{text:{enumerable:!0,get(){return this.compiled.text}},values:{enumerable:!0,get(){return this.compiled.values}},embed:{enumerable:!0,get(){return this.compiled.embed}}})}get compiled(){let r=[],t=this.toString({valueFn:u=>(r.push(u),"$"+r.length)}),n=this.toString();return{text:t,values:r,embed:n}}},A,$=class extends w{constructor(t){super();c(this,A);l(this,A,t)}toString(t){return(t?.valueFn??k)(s(this,A))}};A=new WeakMap;var O,V=class extends w{constructor(t){super();c(this,O);l(this,O,t)}toString(t){return(t?.identFn??te)(s(this,O))}};O=new WeakMap;var S,v=class extends w{constructor(t){super();c(this,S);l(this,S,String(t))}toString(){return s(this,S)}};S=new WeakMap;function R(e){return e instanceof w}function g(e){return new V(e)}function z(e){return typeof e>"u"||R(e)?e:new $(e)}function E(e){return typeof e>"u"||R(e)?e:Array.isArray(e)?new T(e.map(E)):new v(e)}function ee(e){return typeof e>"u"||R(e)?e:E(JSON.stringify(e))}var N=e=>{if(!Array.isArray(e)||typeof e?.[0]!="object"||e[0]===null||!("raw"in e[0])||!Array.isArray(e[0]))return!1;let[r,...t]=e;return r.length-1===t.length};function re(e,r){if(e.length-1!==r.length)throw new Error("Invalid call of the function");return e.flatMap((t,n)=>n?[r[n-1],t]:[t])}var x,o,T=class extends w{constructor(...t){super();c(this,x,[]);c(this,o);if(l(this,o,{prefix:"",glue:"",suffix:"",empty:"",wrapperFn:n=>n}),Array.isArray(t[0])){let[n,u]=t;l(this,o,{...s(this,o),...u}),this.push(...n)}else{let[n]=t;l(this,o,{...s(this,o),...n})}}setSewingPattern(t="",n="",u="",y=""){return l(this,o,{...s(this,o),prefix:t,glue:n,suffix:u,empty:y}),this}push(...t){return s(this,x).push(...t.map(E).filter(n=>n!==void 0)),this}append(...t){return this.push(...t)}join(t=", "){return s(this,o).glue=t,this}prefix(t=" "){return s(this,o).prefix=t,this}suffix(t=" "){return s(this,o).suffix=t,this}empty(t=""){return s(this,o).empty=t,this}toString(t){let n=s(this,x).map(u=>u.toString(t)).filter(u=>u).join(s(this,o).glue);return n?s(this,o).prefix+s(this,o).wrapperFn(n,t)+s(this,o).suffix:s(this,o).empty}};x=new WeakMap,o=new WeakMap;function i(...e){let r;if(N(e)){let[t,...n]=e;r=[new T(re(t.map(E),n.map(z)))]}else r=e.map(z);return new T(r)}var ne=g;function U(...e){return new T(e.map(E))}function ue(...e){let r,t=(n,u)=>(u?.valueFn||k)(n);if(N(e)){let[n,...u]=e;r=[new T(re(n.map(E),u.map(ee)),{wrapperFn:t})]}else r=e.map(n=>new T([ee(n)],{wrapperFn:t}));return new T(r)}function F(...e){let r=new T,t=n=>{if(n!==void 0&&n!==null){if(typeof n=="string"){r.push(E(n));return}if(R(n)){r.push(n);return}if(Array.isArray(n)){n.forEach(t);return}if(typeof n=="object"){for(let u in n)if(n[u]!==void 0){if(R(n[u])){r.push(i`${g(u)} ${n[u]}`);continue}if(n[u]===null){r.push(i`${g(u)} IS NULL`);continue}if(Array.isArray(n[u])){r.push(i`${g(u)} = ANY (${n[u]})`);continue}r.push(i`${g(u)} = ${n[u]}`)}return}}};return t(e),r}function K(...e){return F(e).setSewingPattern("((",") OR (","))","")}function X(...e){return F(e).setSewingPattern("((",") AND (","))","")}function d(...e){return F(e).setSewingPattern("WHERE ((",") AND (","))","")}function Y(...e){return F(e).setSewingPattern("WHERE ((",") OR (","))","")}function ie(...e){return U(...e).join(" UNION ALL ")}function se(...e){return U(...e).join(" UNION ")}function oe(e){return e==null?i``:(e=Number(e),e>0?i`LIMIT ${e}`:i``)}function ae(e){return e==null?i``:(e=Number(e),e>=0?i`OFFSET ${e}`:i``)}function _(e){if(!Array.isArray(e)){if(typeof e!="object")throw new Error("buildValues: The argument must be an array");e=[e]}if(e.length===0)throw new Error("buildValues: Array must contain elements at least one");let r=e.map(u=>typeof u=="object"?Object.values(u):u),t=r[0].length;if(r.some(u=>u.length!==t))throw new Error("buildValues: Array must all be the same length");let n=i(...r.map(u=>i(...u).join(", "))).setSewingPattern("(","), (",")");return i`VALUES ${n}`}function G(e){if(Array.isArray(e)||(e=[e]),e.length==0||!e[0]||typeof e[0]!="object")throw new Error("Invalid call of the function");e=e.map(n=>Object.fromEntries(Object.entries(n).filter(([u,y])=>y!==void 0)));let r=Object.keys(e[0]),t=r.join();if(e.some(n=>Object.keys(n).join()!==t))throw new Error("buildKeys: All objects must have the same keys");return i(...r.map(g)).setSewingPattern("(",", ",")")}function j(e,r,t){Array.isArray(r)||(r=[r]);let n=G(r),u=_(r.map(Object.values));return i`INSERT INTO ${g(e)} ${n} ${u}`.append(t).join(" ")}function W(e,r,t,n){let u=new T;for(let y in r){let I=r[y];I!==void 0&&u.push(i`${g(y)} = ${I}`)}return i`UPDATE ${g(e)} SET ${u.join(", ")} ${d(t)}`.append(n).join(" ")}function P(e,r,t){return i`DELETE FROM ${g(e)} ${d(r)}`.append(t).join(" ")}var pe=K,ye=X,le=d,Te=d,ce=d,ge=Y;i.raw=U;i.ident=ne;i.json=ue;i.WHERE=d;i.WHERE_AND=Te;i.WHERE_OR=Y;i.AND=X;i.OR=K;i.where=le;i.where_and=ce;i.where_or=ge;i.and=ye;i.or=pe;i.insert=j;i.update=W;i.delete=P;i.keys=G;i.values=_;i.UNION_ALL=ie;i.UNION=se;i.LIMIT=oe;i.OFFSET=ae;function Oe(e,r){return Object.fromEntries(r.map(t=>[t,e[t]]))}var b,f,m,a,he,L,h,q=class{constructor(r,t={}){c(this,a);c(this,b);c(this,f);c(this,m,!1);if(l(this,b,r),l(this,f,{...t}),!s(this,f).query){if(!("query"in r)||typeof r.query!="function")throw new Error("Invalid or no query functionn is specified");s(this,f).query=r.query}}async insert(r,t,n){let u=j(r,t,n);return await p(this,a,h).call(this,[u])}async update(r,t,n,u){let y=W(r,t,n,u);return await p(this,a,h).call(this,[y])}async delete(r,t,n){let u=P(r,t,n);return await p(this,a,h).call(this,[u])}async query(...r){return p(this,a,h).call(this,r)}async getRows(...r){return p(this,a,h).call(this,r).then(t=>t.rows)}async getRow(...r){return p(this,a,h).call(this,r).then(t=>t.rows?.[0])}async getOne(...r){return p(this,a,h).call(this,r).then(t=>Object.values(t.rows?.[0]??{})?.[0])}async getCount(...r){return p(this,a,h).call(this,r).then(t=>t.rowCount)}async exec(...r){return p(this,a,h).call(this,r).then(t=>t.rowCount)}async begin(r){if(s(this,m))throw new Error("Nested transaction is not supported");try{l(this,m,!0),await p(this,a,L).call(this,{text:"BEGIN",values:[]});let t=await r(this);return await p(this,a,L).call(this,{text:"COMMIT",values:[]}),t}catch(t){throw await p(this,a,L).call(this,{text:"ROLLBACK",values:[]}),t}finally{l(this,m,!1)}}static get prisma(){return async function({text:r,values:t}){if("$queryRawUnsafe"in this&&typeof this.$queryRawUnsafe=="function"){let n=await this.$queryRawUnsafe(r,...t);return{rows:n,rowCount:n.length}}throw new Error("Invalid object")}}static get typeorm(){return async function({text:r,values:t}){if("query"in this&&typeof this.query=="function"){let n=await this.query(r,t);return n.length===2&&Array.isArray(n[0])&&typeof n[1]=="number"?{rows:n[0],rowCount:n[1]}:{rows:n,rowCount:n.length}}throw new Error("Invalid object")}}};b=new WeakMap,f=new WeakMap,m=new WeakMap,a=new WeakSet,he=function(r){if(N(r)){let[u,...y]=r;return i(u,...y)}let[t,n]=r;return typeof t=="object"&&t&&"text"in t?{...t,values:t.values??[]}:{text:t,values:n??[]}},L=function(r){let t=s(this,f).query;if(!t)throw new Error("Missing query function");return t.call(s(this,b),r)},h=async function(r){let t=p(this,a,he).call(this,r);s(this,f)?.beforeQuery?.(t);let n=await p(this,a,L).call(this,t).catch(u=>{throw s(this,f)?.onError?.(t,u),u});return typeof n.rowCount!="number"&&(n.rowCount=n.rows?.length??0),s(this,f)?.afterQuery?.(t,Oe(n,["command","rowCount","rows"])),n};function Se(e,r){let t=new q(e,r),n=new Proxy(e,{get(u,y,I){let D=y in t?t:y in u?u:void 0,Q=D&&Reflect.get(D,y);return Q&&Q instanceof Function?function(...fe){let B=Q.apply(this===I?D:this,fe);return B===u?n:B}:Q===u?n:Q}});return n}0&&(module.exports={AND,LIMIT,OFFSET,OR,QueryFragments,QueryHelper,UNION,UNION_ALL,WHERE,WHERE_AND,WHERE_OR,and,buildClauses,buildDelete,buildInsert,buildKeys,buildUpdate,buildValues,ident,isQueryFragment,isQueryTemplateStyle,json,or,pgIdent,pgString,raw,sql,where,where_and,where_or,withQueryHelper});
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts", "../src/quote.ts", "../src/query-weaver.ts", "../src/query-helper.ts"],
4
- "sourcesContent": ["export * from './query-weaver';\nexport * from './query-helper';\n", "const reservedKeywords = [\n // copied from pg-escape's reserved.txt\n 'AES128',\n 'AES256',\n 'ALL',\n 'ALLOWOVERWRITE',\n 'ANALYSE',\n 'ANALYZE',\n 'AND',\n 'ANY',\n 'ARRAY',\n 'AS',\n 'ASC',\n 'AUTHORIZATION',\n 'BACKUP',\n 'BETWEEN',\n 'BINARY',\n 'BLANKSASNULL',\n 'BOTH',\n 'BYTEDICT',\n 'CASE',\n 'CAST',\n 'CHECK',\n 'COLLATE',\n 'COLUMN',\n 'CONSTRAINT',\n 'CREATE',\n 'CREDENTIALS',\n 'CROSS',\n 'CURRENT_DATE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_USER',\n 'CURRENT_USER_ID',\n 'DEFAULT',\n 'DEFERRABLE',\n 'DEFLATE',\n 'DEFRAG',\n 'DELTA',\n 'DELTA32K',\n 'DESC',\n 'DISABLE',\n 'DISTINCT',\n 'DO',\n 'ELSE',\n 'EMPTYASNULL',\n 'ENABLE',\n 'ENCODE',\n 'ENCRYPT',\n 'ENCRYPTION',\n 'END',\n 'EXCEPT',\n 'EXPLICIT',\n 'FALSE',\n 'FOR',\n 'FOREIGN',\n 'FREEZE',\n 'FROM',\n 'FULL',\n 'GLOBALDICT256',\n 'GLOBALDICT64K',\n 'GRANT',\n 'GROUP',\n 'GZIP',\n 'HAVING',\n 'IDENTITY',\n 'IGNORE',\n 'ILIKE',\n 'IN',\n 'INITIALLY',\n 'INNER',\n 'INTERSECT',\n 'INTO',\n 'IS',\n 'ISNULL',\n 'JOIN',\n 'LEADING',\n 'LEFT',\n 'LIKE',\n 'LIMIT',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'LUN',\n 'LUNS',\n 'LZO',\n 'LZOP',\n 'MINUS',\n 'MOSTLY13',\n 'MOSTLY32',\n 'MOSTLY8',\n 'NATURAL',\n 'NEW',\n 'NOT',\n 'NOTNULL',\n 'NULL',\n 'NULLS',\n 'OFF',\n 'OFFLINE',\n 'OFFSET',\n 'OLD',\n 'ON',\n 'ONLY',\n 'OPEN',\n 'OR',\n 'ORDER',\n 'OUTER',\n 'OVERLAPS',\n 'PARALLEL',\n 'PARTITION',\n 'PERCENT',\n 'PLACING',\n 'PRIMARY',\n 'RAW',\n 'READRATIO',\n 'RECOVER',\n 'REFERENCES',\n 'REJECTLOG',\n 'RESORT',\n 'RESTORE',\n 'RIGHT',\n 'SELECT',\n 'SESSION_USER',\n 'SIMILAR',\n 'SOME',\n 'SYSDATE',\n 'SYSTEM',\n 'TABLE',\n 'TAG',\n 'TDES',\n 'TEXT255',\n 'TEXT32K',\n 'THEN',\n 'TO',\n 'TOP',\n 'TRAILING',\n 'TRUE',\n 'TRUNCATECOLUMNS',\n 'UNION',\n 'UNIQUE',\n 'USER',\n 'USING',\n 'VERBOSE',\n 'WALLET',\n 'WHEN',\n 'WHERE',\n 'WITH',\n 'WITHOUT',\n];\n\nexport function quoteIdent(id: string) {\n if (\n id.match(/^[a-zA-Z_][0-9a-zA-Z_$]*$/) &&\n !reservedKeywords.includes(id.toUpperCase())\n ) {\n return id;\n }\n return `\"${id.replace(/\"/g, '\"\"')}\"`;\n}\n\nexport function quoteLiteral(s: string) {\n const prefix = s.includes(\"'\") ? 'E' : '';\n return `${prefix}'${s.replace(/'/g, \"''\").replace(/\\\\/g, '\\\\\\\\')}'`;\n}\n\nexport default {\n quoteIdent,\n quoteLiteral,\n};\n", "type EscapeFunction = (v: unknown) => string;\nexport type FieldValues = Record<string, unknown>;\nexport type WhereArg =\n | string\n | FieldValues\n | QueryFragment\n | undefined\n | WhereArg[];\n\nimport { quoteIdent, quoteLiteral } from './quote';\n\nexport function pgIdent(s: string) {\n // '.' is a special for us\n return s\n .split('.')\n .map((x) => quoteIdent(x))\n .join('.');\n}\n\n// fallback function for when the EscapeFunction is not specified\nexport function pgString(s: unknown): string {\n if (s === null) return 'NULL';\n if (typeof s === 'boolean') return s ? 'true' : 'false';\n if (Array.isArray(s)) return 'ARRAY[' + s.map(pgString).join(',') + ']';\n if (typeof s === 'object') {\n if ('toJSON' in s && typeof s.toJSON === 'function') {\n return quoteLiteral(s.toJSON());\n }\n return quoteLiteral(s.toString());\n }\n return quoteLiteral(String(s));\n}\n\ntype QueryFragmentToStringOptions = {\n valueFn?: EscapeFunction;\n identFn?: EscapeFunction;\n};\n\nexport interface QueryFragment {\n text: string;\n values?: unknown[];\n embed?: string;\n sql?: string;\n\n toString(opts?: QueryFragmentToStringOptions): string;\n}\n\nabstract class QueryFragmentBase implements QueryFragment {\n // XXX: entries for defineProperties\n text: string = '';\n values: unknown[] = [];\n embed?: string = '';\n\n get compiled() {\n const values = [] as unknown[];\n const text = this.toString({\n valueFn: (x: unknown) => {\n values.push(x);\n return '$' + values.length;\n },\n });\n const embed = this.toString();\n\n return {\n text,\n values,\n embed,\n };\n }\n\n constructor() {\n Object.defineProperties(this, {\n text: {\n enumerable: true,\n get() {\n return this.compiled.text;\n },\n },\n values: {\n enumerable: true,\n get() {\n return this.compiled.values;\n },\n },\n embed: {\n enumerable: true,\n get() {\n return this.compiled.embed;\n },\n },\n });\n }\n\n abstract toString(opts?: QueryFragmentToStringOptions): string;\n}\n\nclass QueryFragmentValue extends QueryFragmentBase {\n #value: unknown;\n\n constructor(value: unknown) {\n super();\n this.#value = value;\n }\n\n toString(opts?: QueryFragmentToStringOptions) {\n return (opts?.valueFn ?? pgString)(this.#value);\n }\n}\n\nclass QueryFragmentIdent extends QueryFragmentBase {\n #ident: string;\n\n constructor(ident: string) {\n super();\n this.#ident = ident;\n }\n\n toString(opts?: QueryFragmentToStringOptions) {\n return (opts?.identFn ?? pgIdent)(this.#ident);\n }\n}\n\n// we exploits String constructor\nclass QueryFragmentRawString extends QueryFragmentBase {\n #string: string;\n\n constructor(s: unknown) {\n super();\n this.#string = String(s);\n }\n\n /* toString(_?: QueryFragmentToStringOptions) { */\n toString() {\n return this.#string;\n }\n}\n\nexport function isQueryFragment(x: unknown): x is QueryFragment {\n return x instanceof QueryFragmentBase;\n}\n\nfunction makeIdent(name: string) {\n return new QueryFragmentIdent(name);\n}\n\nfunction makeValue(x: unknown): QueryFragment | undefined {\n if (typeof x === 'undefined' || isQueryFragment(x)) return x;\n return new QueryFragmentValue(x);\n}\n\nfunction makeRaw(text: unknown | unknown[]): QueryFragment | undefined {\n if (typeof text === 'undefined' || isQueryFragment(text)) return text;\n if (Array.isArray(text)) return new QueryFragments(text.map(makeRaw));\n return new QueryFragmentRawString(text);\n}\n\nfunction makeJsonValue(x: unknown) {\n if (typeof x === 'undefined' || isQueryFragment(x)) return x;\n return makeRaw(JSON.stringify(x));\n}\n\ntype QueryFragmentsOptions = {\n prefix?: string;\n glue?: string;\n suffix?: string;\n empty?: string;\n\n wrapperFn?: (s: string, opts?: QueryFragmentToStringOptions) => string;\n};\n\nexport type QueryTemplateStyle = [\n text: TemplateStringsArray,\n ...values: unknown[],\n];\nexport const isQueryTemplateStyle = (\n args: unknown,\n): args is QueryTemplateStyle => {\n if (!Array.isArray(args)) return false;\n if (typeof args?.[0] !== 'object' || args[0] === null || !('raw' in args[0]))\n return false;\n if (!Array.isArray(args[0])) return false;\n const [texts, ...values] = args;\n return texts.length - 1 === values.length;\n};\n\nfunction sewTemplateTextsAndValues<T = unknown, R = unknown>(\n texts: T[],\n values: R[],\n) {\n if (texts.length - 1 !== values.length)\n throw new Error('Invalid call of the function');\n return texts.flatMap((text, idx) => (idx ? [values[idx - 1], text] : [text]));\n}\n\nexport class QueryFragments extends QueryFragmentBase {\n #list: QueryFragment[] = [];\n #opts: Required<QueryFragmentsOptions>;\n\n constructor(\n ...args:\n | []\n | [values: (QueryFragment | undefined)[], opts?: QueryFragmentsOptions]\n | [opts?: QueryFragmentsOptions]\n ) {\n super();\n this.#opts = {\n prefix: '',\n glue: '',\n suffix: '',\n empty: '',\n wrapperFn: (x) => x,\n };\n\n if (Array.isArray(args[0])) {\n const [values, opts] = args as [\n values: (QueryFragment | undefined)[],\n opts?: QueryFragmentsOptions,\n ];\n this.#opts = { ...this.#opts, ...opts };\n this.push(...values);\n } else {\n const [opts] = args as [opts?: QueryFragmentsOptions];\n this.#opts = { ...this.#opts, ...opts };\n }\n }\n\n setSewingPattern(\n prefix: string = '',\n glue: string = '',\n suffix: string = '',\n empty: string = '',\n ) {\n this.#opts = { ...this.#opts, prefix, glue, suffix, empty };\n return this;\n }\n\n push(...args: (QueryFragment | string | undefined)[]) {\n this.#list.push(\n ...(args.map(makeRaw).filter((x) => x !== undefined) as QueryFragment[]),\n );\n return this;\n }\n\n // alias\n append(...args: (QueryFragment | string | undefined)[]) {\n return this.push(...args);\n }\n\n join(glue: string = ', ') {\n this.#opts.glue = glue;\n return this;\n }\n\n prefix(prefix: string = ' ') {\n this.#opts.prefix = prefix;\n return this;\n }\n\n suffix(suffix: string = ' ') {\n this.#opts.suffix = suffix;\n return this;\n }\n\n empty(empty: string = '') {\n this.#opts.empty = empty;\n return this;\n }\n\n toString(opts?: QueryFragmentToStringOptions): string {\n const children = this.#list\n .map((x) => x.toString(opts))\n .filter((x) => x)\n .join(this.#opts.glue);\n if (!children) return this.#opts.empty;\n return (\n this.#opts.prefix +\n this.#opts.wrapperFn(children, opts) +\n this.#opts.suffix\n );\n }\n}\n\nexport function sql(\n ...args:\n | [texts: TemplateStringsArray, ...values: unknown[]]\n | [...values: unknown[]]\n): QueryFragments {\n let fragments: (QueryFragment | undefined)[];\n if (isQueryTemplateStyle(args)) {\n // sql`...` comes here\n const [texts, ...values] = args as [\n texts: TemplateStringsArray,\n values: unknown[],\n ];\n // template string looks like a single QueryFragment for user\n fragments = [\n new QueryFragments(\n sewTemplateTextsAndValues(texts.map(makeRaw), values.map(makeValue)),\n ),\n ];\n } else {\n // normal function call\n fragments = args.map(makeValue);\n }\n\n return new QueryFragments(fragments);\n}\n\nexport const ident = makeIdent;\n\nexport function raw(...args: unknown[]) {\n return new QueryFragments(args.map(makeRaw));\n}\n\nexport function json(\n ...args:\n | [...json: unknown[]]\n | [texts: TemplateStringsArray, ...args: unknown[]]\n) {\n let fragments: (QueryFragment | undefined)[];\n const wrapperFn = (x: string, opts?: QueryFragmentToStringOptions) =>\n (opts?.valueFn || pgString)(x);\n if (isQueryTemplateStyle(args)) {\n const [texts, ...values] = args;\n fragments = [\n new QueryFragments(\n sewTemplateTextsAndValues(\n texts.map(makeRaw),\n values.map(makeJsonValue),\n ),\n { wrapperFn },\n ),\n ];\n } else {\n // normal function call\n fragments = args.map(\n (x) => new QueryFragments([makeJsonValue(x)], { wrapperFn }),\n );\n }\n\n return new QueryFragments(fragments);\n}\n\nexport function buildClauses(...args: WhereArg[]) {\n const clauses = new QueryFragments();\n\n const parse = (val: WhereArg) => {\n if (val === undefined) return;\n if (val === null) return;\n\n if (typeof val === 'string') {\n clauses.push(makeRaw(val));\n return;\n }\n\n if (isQueryFragment(val)) {\n clauses.push(val);\n return;\n }\n\n if (Array.isArray(val)) {\n val.forEach(parse);\n return;\n }\n\n if (typeof val === 'object') {\n for (const key in val) {\n if (val[key] === undefined) continue;\n\n if (isQueryFragment(val[key])) {\n clauses.push(sql`${makeIdent(key)} ${val[key]}`);\n continue;\n }\n\n if (val[key] === null) {\n clauses.push(sql`${makeIdent(key)} IS NULL`);\n continue;\n }\n\n if (Array.isArray(val[key])) {\n clauses.push(sql`${makeIdent(key)} = ANY (${val[key]})`);\n continue;\n }\n\n // \u305D\u308C\u4EE5\u5916\n clauses.push(sql`${makeIdent(key)} = ${val[key]}`);\n }\n return;\n }\n };\n\n parse(args);\n\n return clauses;\n}\n\nexport function OR(...fv: WhereArg[]) {\n return buildClauses(fv).setSewingPattern('((', ') OR (', '))', '');\n}\n\nexport function AND(...fv: WhereArg[]) {\n return buildClauses(fv).setSewingPattern('((', ') AND (', '))', '');\n}\n\nexport function WHERE(...fv: WhereArg[]) {\n return buildClauses(fv).setSewingPattern('WHERE ((', ') AND (', '))', '');\n}\n\nexport function WHERE_OR(...fv: WhereArg[]) {\n return buildClauses(fv).setSewingPattern('WHERE ((', ') OR (', '))', '');\n}\n\nexport function UNION_ALL(...fv: unknown[]) {\n return raw(...fv).join(' UNION ALL ');\n}\n\nexport function UNION(...fv: unknown[]) {\n return raw(...fv).join(' UNION ');\n}\n\nexport function LIMIT(limit: number | string | null | undefined) {\n if (limit == null) return sql``;\n limit = Number(limit);\n return limit > 0 ? sql`LIMIT ${limit}` : sql``;\n}\n\nexport function OFFSET(offset: number | string | null | undefined) {\n if (offset == null) return sql``;\n offset = Number(offset);\n return offset >= 0 ? sql`OFFSET ${offset}` : sql``;\n}\n\nexport function buildValues(fvs: (FieldValues | unknown[])[]) {\n if (!Array.isArray(fvs)) {\n if (typeof fvs !== 'object')\n throw new Error('buildValues: The argument must be an array');\n fvs = [fvs];\n }\n if (fvs.length === 0)\n throw new Error('buildValues: Array must contain elements at least one');\n\n const array = fvs.map((x) => (typeof x === 'object' ? Object.values(x) : x));\n\n const sig = array[0].length;\n if (array.some((arg) => arg.length !== sig)) {\n throw new Error('buildValues: Array must all be the same length');\n }\n\n const values = sql(\n ...array.map((v) => sql(...v).join(', ')),\n ).setSewingPattern('(', '), (', ')');\n return sql`VALUES ${values}`;\n}\n\nexport function buildKeys(fvs: FieldValues[] | FieldValues) {\n if (!Array.isArray(fvs)) fvs = [fvs];\n if (fvs.length == 0 || !fvs[0] || typeof fvs[0] !== 'object')\n throw new Error('Invalid call of the function');\n\n fvs = fvs.map((fv) =>\n Object.fromEntries(Object.entries(fv).filter(([_, v]) => v !== undefined)),\n );\n\n const ks = Object.keys(fvs[0]);\n const sig = ks.join();\n if (fvs.some((fv) => Object.keys(fv).join() !== sig)) {\n throw new Error('buildKeys: All objects must have the same keys');\n }\n\n return sql(...ks.map(makeIdent)).setSewingPattern('(', ', ', ')');\n}\n\nexport function buildInsert(\n table: string,\n fvs: FieldValues[] | FieldValues,\n appendix?: string | QueryFragment,\n) {\n if (!Array.isArray(fvs)) fvs = [fvs];\n\n const keys = buildKeys(fvs);\n const values = buildValues(fvs.map(Object.values));\n\n return sql`INSERT INTO ${makeIdent(table)} ${keys} ${values}`\n .append(appendix)\n .join(' ');\n}\n\nexport function buildUpdate(\n table: string,\n fv: FieldValues,\n where?: WhereArg,\n appendix?: string | QueryFragment,\n) {\n const pairs = new QueryFragments();\n\n for (const k in fv) {\n const val = fv[k];\n if (val === undefined) continue;\n\n pairs.push(sql`${makeIdent(k)} = ${val}`);\n }\n\n return sql`UPDATE ${makeIdent(table)} SET ${pairs.join(', ')} ${WHERE(where)}`\n .append(appendix)\n .join(' ');\n}\n\nexport function buildDelete(\n table: string,\n where?: WhereArg,\n appendix?: string | QueryFragment,\n) {\n return sql`DELETE FROM ${makeIdent(table)} ${WHERE(where)}`\n .append(appendix)\n .join(' ');\n}\n\n// aliases\nexport const or = OR;\nexport const and = AND;\nexport const where = WHERE;\nexport const WHERE_AND = WHERE;\nexport const where_and = WHERE;\nexport const where_or = WHERE_OR;\n\n// expose via `sql`\nsql.raw = raw;\nsql.ident = ident;\nsql.json = json;\nsql.WHERE = WHERE;\nsql.WHERE_AND = WHERE_AND;\nsql.WHERE_OR = WHERE_OR;\nsql.AND = AND;\nsql.OR = OR;\nsql.where = where;\nsql.where_and = where_and;\nsql.where_or = where_or;\nsql.and = and;\nsql.or = or;\nsql.insert = buildInsert;\nsql.update = buildUpdate;\nsql.delete = buildDelete;\nsql.keys = buildKeys;\nsql.values = buildValues;\nsql.UNION_ALL = UNION_ALL;\nsql.UNION = UNION;\nsql.LIMIT = LIMIT;\nsql.OFFSET = OFFSET;\n\nexport default {\n sql,\n raw,\n ident,\n json,\n WHERE,\n WHERE_AND,\n WHERE_OR,\n AND,\n OR,\n where,\n where_and,\n where_or,\n and,\n or,\n buildInsert,\n buildUpdate,\n buildDelete,\n buildValues,\n UNION_ALL,\n UNION,\n LIMIT,\n OFFSET,\n};\n", "import type pg from 'pg';\nimport type {\n QueryFragment,\n FieldValues,\n WhereArg,\n QueryTemplateStyle,\n} from './query-weaver';\nimport {\n sql,\n buildInsert,\n buildUpdate,\n buildDelete,\n isQueryTemplateStyle,\n} from './query-weaver';\n\nexport type QueryResultRow = pg.QueryResultRow;\n\n// pg (almost) compatible types to relief and reduce their requirements\nexport type QueryResult<T extends QueryResultRow> = {\n rowCount?: number | null;\n rows: T[];\n fields?: Partial<pg.FieldDef>[];\n};\n\nexport type QueryConfig = {\n text: string;\n values: unknown[];\n embed?: string;\n};\n\nexport type QueryableFunction<T extends object> = (\n this: T,\n queryConfig: QueryConfig,\n) => Promise<QueryResult<QueryResultRow>>;\n\nexport type Queryable<T extends object> = {\n query: QueryableFunction<T>;\n};\n\ntype pgQueryResult<X, T extends QueryResultRow> = (X extends {\n query(...args: unknown[]): Promise<pg.QueryResult<T>>; // pg\n}\n ? pg.QueryResult<T>\n : QueryResult<T>) & { rowCount: number };\n\ntype QueryHelperOptions<X extends object> = {\n beforeQuery?: <T extends QueryConfig>(ctx: T) => void;\n afterQuery?: <T extends QueryConfig>(ctx: T) => void;\n onError?: <T extends QueryConfig>(ctx: T, e: unknown) => void;\n\n query?: QueryableFunction<X>;\n};\n\ntype QueryTemplateOrSimpleQuery =\n | QueryTemplateStyle\n | [query: string, values?: unknown[]]\n | [query: pg.QueryConfig<unknown[]>];\n\nfunction hidePropertyExcludes(target: object, keys: string[]) {\n target = { ...target };\n Object.defineProperties(\n target,\n Object.fromEntries(\n Object.keys(target).map((k) => [\n k,\n keys.includes(k) ? {} : { enumerable: false },\n ]),\n ),\n );\n return target;\n}\n\n/**\n * Query Helper\n */\nexport class QueryHelper<X extends object> {\n #db: X;\n #opts: QueryHelperOptions<X>;\n\n constructor(db: X, opts: QueryHelperOptions<X> = {}) {\n this.#db = db;\n this.#opts = { ...opts };\n\n // set query function\n if (!this.#opts.query) {\n if ('query' in db && typeof db.query === 'function') {\n // default\n this.#opts.query = db.query as QueryableFunction<X>;\n }\n }\n }\n\n #parseQueryTemplateStyle(args: QueryTemplateOrSimpleQuery): QueryConfig {\n if (isQueryTemplateStyle(args)) {\n const [texts, ...values] = args;\n return sql(texts, ...values);\n }\n\n const [query, values] = args;\n\n if (typeof query === 'object' && query && 'text' in query) {\n return { ...query, values: query.values ?? [] };\n }\n\n return { text: query, values: values ?? [] };\n }\n\n async #query<T extends QueryResultRow>(\n args: QueryTemplateOrSimpleQuery,\n ): Promise<pgQueryResult<X, T>> {\n const query = this.#parseQueryTemplateStyle(args);\n\n this.#opts?.beforeQuery?.(query);\n\n const queryFn = this.#opts.query;\n if (!queryFn) throw new Error('Missing query function');\n const results = await queryFn.call(this.#db, query).catch((e: unknown) => {\n this.#opts?.onError?.(query, e);\n throw e;\n });\n\n if (typeof results.rowCount !== 'number') {\n results.rowCount = results.rows?.length ?? 0;\n }\n\n this.#opts?.afterQuery?.({\n ...query,\n results: hidePropertyExcludes(results, ['command', 'rowCount', 'rows']),\n });\n\n return results as pgQueryResult<X, T>;\n }\n\n // ======================================================================\n // query executors\n\n async insert<T extends QueryResultRow>(\n table: string,\n fv: FieldValues,\n appendix?: string | QueryFragment,\n ) {\n const query = buildInsert(table, fv, appendix);\n return await this.#query<T>([query]);\n }\n\n async update<T extends QueryResultRow>(\n table: string,\n fv: FieldValues,\n where: WhereArg,\n appendix?: string | QueryFragment,\n ) {\n const query = buildUpdate(table, fv, where, appendix);\n return await this.#query<T>([query]);\n }\n\n async delete<T extends QueryResultRow>(\n table: string,\n where: WhereArg,\n appendix?: string | QueryFragment,\n ) {\n const query = buildDelete(table, where, appendix);\n return await this.#query<T>([query]);\n }\n\n async query<T extends QueryResultRow>(...args: QueryTemplateOrSimpleQuery) {\n return this.#query<T>(args);\n }\n\n async getRows<T extends QueryResultRow>(...args: QueryTemplateOrSimpleQuery) {\n return this.#query<T>(args).then((x) => x.rows);\n }\n\n async getRow<T extends QueryResultRow>(...args: QueryTemplateOrSimpleQuery) {\n return this.#query<T>(args).then((x) => x.rows?.[0] as T | undefined);\n }\n\n async getOne<T = unknown>(...args: QueryTemplateOrSimpleQuery) {\n return this.#query<[T]>(args).then(\n (x) => Object.values(x.rows?.[0] ?? {})?.[0] as T | undefined,\n );\n }\n\n async getCount(...args: QueryTemplateOrSimpleQuery) {\n return this.#query(args).then((x) => x.rowCount);\n }\n\n async exec(...args: QueryTemplateOrSimpleQuery) {\n // same as getCount\n return this.#query(args).then((x) => x.rowCount);\n }\n\n // ======================================================================\n // query adapters\n\n // Prisma adapter: NB; It only supports a query return rows\n public static get prisma() {\n return async function <T extends QueryResultRow>(\n this: object,\n { text, values }: QueryConfig,\n ): Promise<QueryResult<T>> {\n if (\n '$queryRawUnsafe' in this &&\n typeof this.$queryRawUnsafe === 'function'\n ) {\n const rows: T[] = await this.$queryRawUnsafe(text, ...values);\n return {\n rows: rows,\n rowCount: rows.length,\n };\n }\n throw new Error('Invalid object');\n };\n }\n\n // TypeORM adapter\n public static get typeorm() {\n return async function <T extends QueryResultRow>(\n this: object,\n { text, values }: QueryConfig,\n ): Promise<QueryResult<T>> {\n if ('query' in this && typeof this.query === 'function') {\n const rows: unknown[] = await this.query(text, values);\n\n // returns with row count\n if (\n rows.length === 2 &&\n Array.isArray(rows[0]) &&\n typeof rows[1] === 'number'\n ) {\n return { rows: rows[0], rowCount: rows[1] };\n }\n\n return {\n rows,\n rowCount: rows.length,\n } as { rows: T[]; rowCount: number };\n }\n throw new Error('Invalid object');\n };\n }\n}\n\ntype Overwrite<T, Q> = Omit<T, keyof Q> & Q;\ntype MethodChainRewrite<T, Q> = {\n [K in keyof T]: T[K] extends (...args: infer R) => T\n ? (...args: R) => Override<T, Q>\n : T[K] extends T\n ? Override<T, Q>\n : T[K];\n};\ntype Override<T, Q> = Overwrite<MethodChainRewrite<T, Q>, Q>;\n\nexport type WithQueryHelper<T extends object> = Override<T, QueryHelper<T>>;\n\n/**\n * Returns a proxy object that overrides the queryable instance `db` by Query Helper utilities\n * @param db - Queryable object to be wrapped\n */\nexport function withQueryHelper<T extends Queryable<T>>(\n db: T,\n opts?: QueryHelperOptions<T>,\n): WithQueryHelper<T>;\nexport function withQueryHelper<T extends object>(\n db: T,\n opts: Overwrite<QueryHelperOptions<T>, Queryable<T>>,\n): WithQueryHelper<T>;\nexport function withQueryHelper<T extends object>(\n db: T,\n opts?: QueryHelperOptions<T>,\n): WithQueryHelper<T> {\n const qh = new QueryHelper<T>(db, opts);\n const proxy: unknown = new Proxy(db, {\n get(db, key, receiver) {\n const target = key in qh ? qh : key in db ? db : undefined;\n const value = target && Reflect.get(target, key);\n\n if (value && value instanceof Function) {\n return function (this: unknown, ...args: unknown[]) {\n const result = value.apply(this === receiver ? target : this, args);\n return result === db ? proxy : result;\n };\n }\n\n return value === db ? proxy : value;\n },\n });\n\n return proxy as WithQueryHelper<T>;\n}\n"],
5
- "mappings": "wzBAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,SAAAE,EAAA,UAAAC,GAAA,WAAAC,GAAA,OAAAC,EAAA,mBAAAC,EAAA,gBAAAC,EAAA,UAAAC,GAAA,cAAAC,GAAA,UAAAC,EAAA,cAAAC,GAAA,aAAAC,EAAA,QAAAC,GAAA,iBAAAC,EAAA,gBAAAC,EAAA,gBAAAC,EAAA,cAAAC,EAAA,gBAAAC,EAAA,gBAAAC,EAAA,UAAAC,GAAA,oBAAAC,EAAA,yBAAAC,EAAA,SAAAC,GAAA,OAAAC,GAAA,YAAAC,EAAA,aAAAC,EAAA,QAAAC,EAAA,QAAAC,EAAA,UAAAC,GAAA,cAAAC,GAAA,aAAAC,GAAA,oBAAAC,KAAA,eAAAC,GAAAjC,ICAA,IAAMkC,GAAmB,CAEvB,SACA,SACA,MACA,iBACA,UACA,UACA,MACA,MACA,QACA,KACA,MACA,gBACA,SACA,UACA,SACA,eACA,OACA,WACA,OACA,OACA,QACA,UACA,SACA,aACA,SACA,cACA,QACA,eACA,eACA,oBACA,eACA,kBACA,UACA,aACA,UACA,SACA,QACA,WACA,OACA,UACA,WACA,KACA,OACA,cACA,SACA,SACA,UACA,aACA,MACA,SACA,WACA,QACA,MACA,UACA,SACA,OACA,OACA,gBACA,gBACA,QACA,QACA,OACA,SACA,WACA,SACA,QACA,KACA,YACA,QACA,YACA,OACA,KACA,SACA,OACA,UACA,OACA,OACA,QACA,YACA,iBACA,MACA,OACA,MACA,OACA,QACA,WACA,WACA,UACA,UACA,MACA,MACA,UACA,OACA,QACA,MACA,UACA,SACA,MACA,KACA,OACA,OACA,KACA,QACA,QACA,WACA,WACA,YACA,UACA,UACA,UACA,MACA,YACA,UACA,aACA,YACA,SACA,UACA,QACA,SACA,eACA,UACA,OACA,UACA,SACA,QACA,MACA,OACA,UACA,UACA,OACA,KACA,MACA,WACA,OACA,kBACA,QACA,SACA,OACA,QACA,UACA,SACA,OACA,QACA,OACA,SACF,EAEO,SAASC,EAAWC,EAAY,CACrC,OACEA,EAAG,MAAM,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",
6
- "names": ["src_exports", "__export", "AND", "LIMIT", "OFFSET", "OR", "QueryFragments", "QueryHelper", "UNION", "UNION_ALL", "WHERE", "WHERE_AND", "WHERE_OR", "and", "buildClauses", "buildDelete", "buildInsert", "buildKeys", "buildUpdate", "buildValues", "ident", "isQueryFragment", "isQueryTemplateStyle", "json", "or", "pgIdent", "pgString", "raw", "sql", "where", "where_and", "where_or", "withQueryHelper", "__toCommonJS", "reservedKeywords", "quoteIdent", "id", "quoteLiteral", "s", "pgIdent", "s", "x", "quoteIdent", "pgString", "quoteLiteral", "QueryFragmentBase", "values", "text", "embed", "_value", "QueryFragmentValue", "value", "__privateAdd", "__privateSet", "opts", "__privateGet", "_ident", "QueryFragmentIdent", "ident", "_string", "QueryFragmentRawString", "isQueryFragment", "makeIdent", "name", "makeValue", "makeRaw", "QueryFragments", "makeJsonValue", "isQueryTemplateStyle", "args", "texts", "sewTemplateTextsAndValues", "idx", "_list", "_opts", "prefix", "glue", "suffix", "empty", "children", "sql", "fragments", "raw", "json", "wrapperFn", "buildClauses", "clauses", "parse", "val", "key", "OR", "fv", "AND", "WHERE", "WHERE_OR", "UNION_ALL", "UNION", "LIMIT", "limit", "OFFSET", "offset", "buildValues", "fvs", "array", "sig", "arg", "v", "buildKeys", "_", "ks", "buildInsert", "table", "appendix", "keys", "buildUpdate", "where", "pairs", "k", "buildDelete", "or", "and", "WHERE_AND", "where_and", "where_or", "hidePropertyExcludes", "target", "keys", "k", "_db", "_opts", "_parseQueryTemplateStyle", "parseQueryTemplateStyle_fn", "_query", "query_fn", "QueryHelper", "db", "opts", "__privateAdd", "__privateSet", "__privateGet", "table", "fv", "appendix", "query", "buildInsert", "__privateMethod", "where", "buildUpdate", "buildDelete", "args", "x", "text", "values", "rows", "isQueryTemplateStyle", "texts", "sql", "queryFn", "results", "e", "withQueryHelper", "qh", "proxy", "key", "receiver", "value", "result"]
4
+ "sourcesContent": ["export * from './query-weaver';\nexport * from './query-helper';\n", "const reservedKeywords = [\n // copied from pg-escape's reserved.txt\n 'AES128',\n 'AES256',\n 'ALL',\n 'ALLOWOVERWRITE',\n 'ANALYSE',\n 'ANALYZE',\n 'AND',\n 'ANY',\n 'ARRAY',\n 'AS',\n 'ASC',\n 'AUTHORIZATION',\n 'BACKUP',\n 'BETWEEN',\n 'BINARY',\n 'BLANKSASNULL',\n 'BOTH',\n 'BYTEDICT',\n 'CASE',\n 'CAST',\n 'CHECK',\n 'COLLATE',\n 'COLUMN',\n 'CONSTRAINT',\n 'CREATE',\n 'CREDENTIALS',\n 'CROSS',\n 'CURRENT_DATE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_USER',\n 'CURRENT_USER_ID',\n 'DEFAULT',\n 'DEFERRABLE',\n 'DEFLATE',\n 'DEFRAG',\n 'DELTA',\n 'DELTA32K',\n 'DESC',\n 'DISABLE',\n 'DISTINCT',\n 'DO',\n 'ELSE',\n 'EMPTYASNULL',\n 'ENABLE',\n 'ENCODE',\n 'ENCRYPT',\n 'ENCRYPTION',\n 'END',\n 'EXCEPT',\n 'EXPLICIT',\n 'FALSE',\n 'FOR',\n 'FOREIGN',\n 'FREEZE',\n 'FROM',\n 'FULL',\n 'GLOBALDICT256',\n 'GLOBALDICT64K',\n 'GRANT',\n 'GROUP',\n 'GZIP',\n 'HAVING',\n 'IDENTITY',\n 'IGNORE',\n 'ILIKE',\n 'IN',\n 'INITIALLY',\n 'INNER',\n 'INTERSECT',\n 'INTO',\n 'IS',\n 'ISNULL',\n 'JOIN',\n 'LEADING',\n 'LEFT',\n 'LIKE',\n 'LIMIT',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'LUN',\n 'LUNS',\n 'LZO',\n 'LZOP',\n 'MINUS',\n 'MOSTLY13',\n 'MOSTLY32',\n 'MOSTLY8',\n 'NATURAL',\n 'NEW',\n 'NOT',\n 'NOTNULL',\n 'NULL',\n 'NULLS',\n 'OFF',\n 'OFFLINE',\n 'OFFSET',\n 'OLD',\n 'ON',\n 'ONLY',\n 'OPEN',\n 'OR',\n 'ORDER',\n 'OUTER',\n 'OVERLAPS',\n 'PARALLEL',\n 'PARTITION',\n 'PERCENT',\n 'PLACING',\n 'PRIMARY',\n 'RAW',\n 'READRATIO',\n 'RECOVER',\n 'REFERENCES',\n 'REJECTLOG',\n 'RESORT',\n 'RESTORE',\n 'RIGHT',\n 'SELECT',\n 'SESSION_USER',\n 'SIMILAR',\n 'SOME',\n 'SYSDATE',\n 'SYSTEM',\n 'TABLE',\n 'TAG',\n 'TDES',\n 'TEXT255',\n 'TEXT32K',\n 'THEN',\n 'TO',\n 'TOP',\n 'TRAILING',\n 'TRUE',\n 'TRUNCATECOLUMNS',\n 'UNION',\n 'UNIQUE',\n 'USER',\n 'USING',\n 'VERBOSE',\n 'WALLET',\n 'WHEN',\n 'WHERE',\n 'WITH',\n 'WITHOUT',\n];\n\nexport function quoteIdent(id: string) {\n if (\n id.match(/^[a-zA-Z_][0-9a-zA-Z_$]*$/) &&\n !reservedKeywords.includes(id.toUpperCase())\n ) {\n return id;\n }\n return `\"${id.replace(/\"/g, '\"\"')}\"`;\n}\n\nexport function quoteLiteral(s: string) {\n const prefix = s.includes(\"'\") ? 'E' : '';\n return `${prefix}'${s.replace(/'/g, \"''\").replace(/\\\\/g, '\\\\\\\\')}'`;\n}\n\nexport default {\n quoteIdent,\n quoteLiteral,\n};\n", "type EscapeFunction = (v: unknown) => string;\nexport type FieldValues = Record<string, unknown>;\nexport type WhereArg =\n | string\n | FieldValues\n | QueryFragment\n | undefined\n | WhereArg[];\n\nimport { quoteIdent, quoteLiteral } from './quote';\n\nexport function pgIdent(s: string) {\n // '.' is a special for us\n return s\n .split('.')\n .map((x) => quoteIdent(x))\n .join('.');\n}\n\n// fallback function for when the EscapeFunction is not specified\nexport function pgString(s: unknown): string {\n if (s === null) return 'NULL';\n if (typeof s === 'boolean') return s ? 'true' : 'false';\n if (Array.isArray(s)) return 'ARRAY[' + s.map(pgString).join(',') + ']';\n if (typeof s === 'object') {\n if ('toJSON' in s && typeof s.toJSON === 'function') {\n return quoteLiteral(s.toJSON());\n }\n return quoteLiteral(s.toString());\n }\n return quoteLiteral(String(s));\n}\n\ntype QueryFragmentToStringOptions = {\n valueFn?: EscapeFunction;\n identFn?: EscapeFunction;\n};\n\nexport interface QueryFragment {\n text: string;\n values?: unknown[];\n embed?: string;\n sql?: string;\n\n toString(opts?: QueryFragmentToStringOptions): string;\n}\n\nabstract class QueryFragmentBase implements QueryFragment {\n // XXX: entries for defineProperties\n text: string = '';\n values: unknown[] = [];\n embed?: string = '';\n\n get compiled() {\n const values = [] as unknown[];\n const text = this.toString({\n valueFn: (x: unknown) => {\n values.push(x);\n return '$' + values.length;\n },\n });\n const embed = this.toString();\n\n return {\n text,\n values,\n embed,\n };\n }\n\n constructor() {\n Object.defineProperties(this, {\n text: {\n enumerable: true,\n get() {\n return this.compiled.text;\n },\n },\n values: {\n enumerable: true,\n get() {\n return this.compiled.values;\n },\n },\n embed: {\n enumerable: true,\n get() {\n return this.compiled.embed;\n },\n },\n });\n }\n\n abstract toString(opts?: QueryFragmentToStringOptions): string;\n}\n\nclass QueryFragmentValue extends QueryFragmentBase {\n #value: unknown;\n\n constructor(value: unknown) {\n super();\n this.#value = value;\n }\n\n toString(opts?: QueryFragmentToStringOptions) {\n return (opts?.valueFn ?? pgString)(this.#value);\n }\n}\n\nclass QueryFragmentIdent extends QueryFragmentBase {\n #ident: string;\n\n constructor(ident: string) {\n super();\n this.#ident = ident;\n }\n\n toString(opts?: QueryFragmentToStringOptions) {\n return (opts?.identFn ?? pgIdent)(this.#ident);\n }\n}\n\n// we exploits String constructor\nclass QueryFragmentRawString extends QueryFragmentBase {\n #string: string;\n\n constructor(s: unknown) {\n super();\n this.#string = String(s);\n }\n\n /* toString(_?: QueryFragmentToStringOptions) { */\n toString() {\n return this.#string;\n }\n}\n\nexport function isQueryFragment(x: unknown): x is QueryFragment {\n return x instanceof QueryFragmentBase;\n}\n\nfunction makeIdent(name: string) {\n return new QueryFragmentIdent(name);\n}\n\nfunction makeValue(x: unknown): QueryFragment | undefined {\n if (typeof x === 'undefined' || isQueryFragment(x)) return x;\n return new QueryFragmentValue(x);\n}\n\nfunction makeRaw(text: unknown | unknown[]): QueryFragment | undefined {\n if (typeof text === 'undefined' || isQueryFragment(text)) return text;\n if (Array.isArray(text)) return new QueryFragments(text.map(makeRaw));\n return new QueryFragmentRawString(text);\n}\n\nfunction makeJsonValue(x: unknown) {\n if (typeof x === 'undefined' || isQueryFragment(x)) return x;\n return makeRaw(JSON.stringify(x));\n}\n\ntype QueryFragmentsOptions = {\n prefix?: string;\n glue?: string;\n suffix?: string;\n empty?: string;\n\n wrapperFn?: (s: string, opts?: QueryFragmentToStringOptions) => string;\n};\n\nexport type QueryTemplateStyle = [\n text: TemplateStringsArray,\n ...values: unknown[],\n];\nexport const isQueryTemplateStyle = (\n args: unknown,\n): args is QueryTemplateStyle => {\n if (!Array.isArray(args)) return false;\n if (typeof args?.[0] !== 'object' || args[0] === null || !('raw' in args[0]))\n return false;\n if (!Array.isArray(args[0])) return false;\n const [texts, ...values] = args;\n return texts.length - 1 === values.length;\n};\n\nfunction sewTemplateTextsAndValues<T = unknown, R = unknown>(\n texts: T[],\n values: R[],\n) {\n if (texts.length - 1 !== values.length)\n throw new Error('Invalid call of the function');\n return texts.flatMap((text, idx) => (idx ? [values[idx - 1], text] : [text]));\n}\n\nexport class QueryFragments extends QueryFragmentBase {\n #list: QueryFragment[] = [];\n #opts: Required<QueryFragmentsOptions>;\n\n constructor(\n ...args:\n | []\n | [values: (QueryFragment | undefined)[], opts?: QueryFragmentsOptions]\n | [opts?: QueryFragmentsOptions]\n ) {\n super();\n this.#opts = {\n prefix: '',\n glue: '',\n suffix: '',\n empty: '',\n wrapperFn: (x) => x,\n };\n\n if (Array.isArray(args[0])) {\n const [values, opts] = args as [\n values: (QueryFragment | undefined)[],\n opts?: QueryFragmentsOptions,\n ];\n this.#opts = { ...this.#opts, ...opts };\n this.push(...values);\n } else {\n const [opts] = args as [opts?: QueryFragmentsOptions];\n this.#opts = { ...this.#opts, ...opts };\n }\n }\n\n setSewingPattern(\n prefix: string = '',\n glue: string = '',\n suffix: string = '',\n empty: string = '',\n ) {\n this.#opts = { ...this.#opts, prefix, glue, suffix, empty };\n return this;\n }\n\n push(...args: (QueryFragment | string | undefined)[]) {\n this.#list.push(\n ...(args.map(makeRaw).filter((x) => x !== undefined) as QueryFragment[]),\n );\n return this;\n }\n\n // alias\n append(...args: (QueryFragment | string | undefined)[]) {\n return this.push(...args);\n }\n\n join(glue: string = ', ') {\n this.#opts.glue = glue;\n return this;\n }\n\n prefix(prefix: string = ' ') {\n this.#opts.prefix = prefix;\n return this;\n }\n\n suffix(suffix: string = ' ') {\n this.#opts.suffix = suffix;\n return this;\n }\n\n empty(empty: string = '') {\n this.#opts.empty = empty;\n return this;\n }\n\n toString(opts?: QueryFragmentToStringOptions): string {\n const children = this.#list\n .map((x) => x.toString(opts))\n .filter((x) => x)\n .join(this.#opts.glue);\n if (!children) return this.#opts.empty;\n return (\n this.#opts.prefix +\n this.#opts.wrapperFn(children, opts) +\n this.#opts.suffix\n );\n }\n}\n\nexport function sql(\n ...args:\n | [texts: TemplateStringsArray, ...values: unknown[]]\n | [...values: unknown[]]\n): QueryFragments {\n let fragments: (QueryFragment | undefined)[];\n if (isQueryTemplateStyle(args)) {\n // sql`...` comes here\n const [texts, ...values] = args as [\n texts: TemplateStringsArray,\n values: unknown[],\n ];\n // template string looks like a single QueryFragment for user\n fragments = [\n new QueryFragments(\n sewTemplateTextsAndValues(texts.map(makeRaw), values.map(makeValue)),\n ),\n ];\n } else {\n // normal function call\n fragments = args.map(makeValue);\n }\n\n return new QueryFragments(fragments);\n}\n\nexport const ident = makeIdent;\n\nexport function raw(...args: unknown[]) {\n return new QueryFragments(args.map(makeRaw));\n}\n\nexport function json(\n ...args:\n | [...json: unknown[]]\n | [texts: TemplateStringsArray, ...args: unknown[]]\n) {\n let fragments: (QueryFragment | undefined)[];\n const wrapperFn = (x: string, opts?: QueryFragmentToStringOptions) =>\n (opts?.valueFn || pgString)(x);\n if (isQueryTemplateStyle(args)) {\n const [texts, ...values] = args;\n fragments = [\n new QueryFragments(\n sewTemplateTextsAndValues(\n texts.map(makeRaw),\n values.map(makeJsonValue),\n ),\n { wrapperFn },\n ),\n ];\n } else {\n // normal function call\n fragments = args.map(\n (x) => new QueryFragments([makeJsonValue(x)], { wrapperFn }),\n );\n }\n\n return new QueryFragments(fragments);\n}\n\nexport function buildClauses(...args: WhereArg[]) {\n const clauses = new QueryFragments();\n\n const parse = (val: WhereArg) => {\n if (val === undefined) return;\n if (val === null) return;\n\n if (typeof val === 'string') {\n clauses.push(makeRaw(val));\n return;\n }\n\n if (isQueryFragment(val)) {\n clauses.push(val);\n return;\n }\n\n if (Array.isArray(val)) {\n val.forEach(parse);\n return;\n }\n\n if (typeof val === 'object') {\n for (const key in val) {\n if (val[key] === undefined) continue;\n\n if (isQueryFragment(val[key])) {\n clauses.push(sql`${makeIdent(key)} ${val[key]}`);\n continue;\n }\n\n if (val[key] === null) {\n clauses.push(sql`${makeIdent(key)} IS NULL`);\n continue;\n }\n\n if (Array.isArray(val[key])) {\n clauses.push(sql`${makeIdent(key)} = ANY (${val[key]})`);\n continue;\n }\n\n // \u305D\u308C\u4EE5\u5916\n clauses.push(sql`${makeIdent(key)} = ${val[key]}`);\n }\n return;\n }\n };\n\n parse(args);\n\n return clauses;\n}\n\nexport function OR(...fv: WhereArg[]) {\n return buildClauses(fv).setSewingPattern('((', ') OR (', '))', '');\n}\n\nexport function AND(...fv: WhereArg[]) {\n return buildClauses(fv).setSewingPattern('((', ') AND (', '))', '');\n}\n\nexport function WHERE(...fv: WhereArg[]) {\n return buildClauses(fv).setSewingPattern('WHERE ((', ') AND (', '))', '');\n}\n\nexport function WHERE_OR(...fv: WhereArg[]) {\n return buildClauses(fv).setSewingPattern('WHERE ((', ') OR (', '))', '');\n}\n\nexport function UNION_ALL(...fv: unknown[]) {\n return raw(...fv).join(' UNION ALL ');\n}\n\nexport function UNION(...fv: unknown[]) {\n return raw(...fv).join(' UNION ');\n}\n\nexport function LIMIT(limit: number | string | null | undefined) {\n if (limit == null) return sql``;\n limit = Number(limit);\n return limit > 0 ? sql`LIMIT ${limit}` : sql``;\n}\n\nexport function OFFSET(offset: number | string | null | undefined) {\n if (offset == null) return sql``;\n offset = Number(offset);\n return offset >= 0 ? sql`OFFSET ${offset}` : sql``;\n}\n\nexport function buildValues(fvs: (FieldValues | unknown[])[]) {\n if (!Array.isArray(fvs)) {\n if (typeof fvs !== 'object')\n throw new Error('buildValues: The argument must be an array');\n fvs = [fvs];\n }\n if (fvs.length === 0)\n throw new Error('buildValues: Array must contain elements at least one');\n\n const array = fvs.map((x) => (typeof x === 'object' ? Object.values(x) : x));\n\n const sig = array[0].length;\n if (array.some((arg) => arg.length !== sig)) {\n throw new Error('buildValues: Array must all be the same length');\n }\n\n const values = sql(\n ...array.map((v) => sql(...v).join(', ')),\n ).setSewingPattern('(', '), (', ')');\n return sql`VALUES ${values}`;\n}\n\nexport function buildKeys(fvs: FieldValues[] | FieldValues) {\n if (!Array.isArray(fvs)) fvs = [fvs];\n if (fvs.length == 0 || !fvs[0] || typeof fvs[0] !== 'object')\n throw new Error('Invalid call of the function');\n\n fvs = fvs.map((fv) =>\n Object.fromEntries(Object.entries(fv).filter(([_, v]) => v !== undefined)),\n );\n\n const ks = Object.keys(fvs[0]);\n const sig = ks.join();\n if (fvs.some((fv) => Object.keys(fv).join() !== sig)) {\n throw new Error('buildKeys: All objects must have the same keys');\n }\n\n return sql(...ks.map(makeIdent)).setSewingPattern('(', ', ', ')');\n}\n\nexport function buildInsert(\n table: string,\n fvs: FieldValues[] | FieldValues,\n appendix?: string | QueryFragment,\n) {\n if (!Array.isArray(fvs)) fvs = [fvs];\n\n const keys = buildKeys(fvs);\n const values = buildValues(fvs.map(Object.values));\n\n return sql`INSERT INTO ${makeIdent(table)} ${keys} ${values}`\n .append(appendix)\n .join(' ');\n}\n\nexport function buildUpdate(\n table: string,\n fv: FieldValues,\n where?: WhereArg,\n appendix?: string | QueryFragment,\n) {\n const pairs = new QueryFragments();\n\n for (const k in fv) {\n const val = fv[k];\n if (val === undefined) continue;\n\n pairs.push(sql`${makeIdent(k)} = ${val}`);\n }\n\n return sql`UPDATE ${makeIdent(table)} SET ${pairs.join(', ')} ${WHERE(where)}`\n .append(appendix)\n .join(' ');\n}\n\nexport function buildDelete(\n table: string,\n where?: WhereArg,\n appendix?: string | QueryFragment,\n) {\n return sql`DELETE FROM ${makeIdent(table)} ${WHERE(where)}`\n .append(appendix)\n .join(' ');\n}\n\n// aliases\nexport const or = OR;\nexport const and = AND;\nexport const where = WHERE;\nexport const WHERE_AND = WHERE;\nexport const where_and = WHERE;\nexport const where_or = WHERE_OR;\n\n// expose via `sql`\nsql.raw = raw;\nsql.ident = ident;\nsql.json = json;\nsql.WHERE = WHERE;\nsql.WHERE_AND = WHERE_AND;\nsql.WHERE_OR = WHERE_OR;\nsql.AND = AND;\nsql.OR = OR;\nsql.where = where;\nsql.where_and = where_and;\nsql.where_or = where_or;\nsql.and = and;\nsql.or = or;\nsql.insert = buildInsert;\nsql.update = buildUpdate;\nsql.delete = buildDelete;\nsql.keys = buildKeys;\nsql.values = buildValues;\nsql.UNION_ALL = UNION_ALL;\nsql.UNION = UNION;\nsql.LIMIT = LIMIT;\nsql.OFFSET = OFFSET;\n\nexport default {\n sql,\n raw,\n ident,\n json,\n WHERE,\n WHERE_AND,\n WHERE_OR,\n AND,\n OR,\n where,\n where_and,\n where_or,\n and,\n or,\n buildInsert,\n buildUpdate,\n buildDelete,\n buildValues,\n UNION_ALL,\n UNION,\n LIMIT,\n OFFSET,\n};\n", "import type pg from 'pg';\nimport type {\n QueryFragment,\n FieldValues,\n WhereArg,\n QueryTemplateStyle,\n} from './query-weaver';\nimport {\n sql,\n buildInsert,\n buildUpdate,\n buildDelete,\n isQueryTemplateStyle,\n} from './query-weaver';\n\nexport type QueryResultRow = pg.QueryResultRow;\n\n// pg (almost) compatible types to relief and reduce their requirements\nexport type QueryResult<T extends QueryResultRow> = {\n rowCount?: number | null;\n rows: T[];\n fields?: Partial<pg.FieldDef>[];\n};\n\nexport type QueryConfig = {\n text: string;\n values: unknown[];\n embed?: string;\n};\n\ntype QueryableFunctionReturnType = Promise<QueryResult<QueryResultRow>>;\ntype QueryableFunctionWithoutThis = (\n queryConfig: QueryConfig,\n) => QueryableFunctionReturnType;\ntype QueryableFunctionWithThis<T extends object> = (\n this: T,\n queryConfig: QueryConfig,\n) => QueryableFunctionReturnType;\n\ntype QueryableWithThis<T extends object> = {\n query: QueryableFunctionWithThis<T>;\n};\n\nexport type QueryableFunction<T extends object> =\n | QueryableFunctionWithoutThis\n | QueryableFunctionWithThis<T>;\nexport type Queryable<T extends object> = {\n query: QueryableFunction<T>;\n};\n\ntype pgQueryResult<X, T extends QueryResultRow> = (X extends {\n query(...args: unknown[]): Promise<pg.QueryResult<T>>; // pg\n}\n ? pg.QueryResult<T>\n : QueryResult<T>) & { rowCount: number };\n\ntype QueryHelperOptions = {\n beforeQuery?: <T extends QueryConfig>(ctx: T) => void;\n afterQuery?: <T extends QueryConfig, R extends QueryResultRow>(\n ctx: T,\n r: QueryResult<R>,\n ) => void;\n onError?: <T extends QueryConfig>(ctx: T, e: unknown) => void;\n};\n\ntype QueryTemplateOrSimpleQuery =\n | QueryTemplateStyle\n | [query: string, values?: unknown[]]\n | [query: pg.QueryConfig<unknown[]>];\n\nfunction pick<T extends { [X in string]: T[X] }, K extends string>(\n target: T,\n keys: K[],\n): { [X in K]: T[X] } {\n return Object.fromEntries(keys.map((k) => [k, target[k]])) as {\n [X in K]: T[X];\n };\n}\n\n/**\n * Query Helper\n */\nexport class QueryHelper<X extends object = object> {\n #db: X;\n #opts: QueryHelperOptions & Partial<Queryable<X>>;\n #inTransaction: boolean = false;\n\n constructor(db: X, opts: QueryHelperOptions & Partial<Queryable<X>> = {}) {\n this.#db = db;\n this.#opts = { ...opts };\n\n // set query function\n if (!this.#opts.query) {\n if (!('query' in db) || typeof db.query !== 'function') {\n throw new Error('Invalid or no query functionn is specified');\n }\n\n this.#opts.query = db.query as QueryableFunction<X>;\n }\n }\n\n #parseQueryTemplateStyle(args: QueryTemplateOrSimpleQuery): QueryConfig {\n if (isQueryTemplateStyle(args)) {\n const [texts, ...values] = args;\n return sql(texts, ...values);\n }\n\n const [query, values] = args;\n\n if (typeof query === 'object' && query && 'text' in query) {\n return { ...query, values: query.values ?? [] };\n }\n\n return { text: query, values: values ?? [] };\n }\n\n #exec(query: QueryConfig) {\n const queryFn = this.#opts.query;\n if (!queryFn) throw new Error('Missing query function');\n return queryFn.call(this.#db, query);\n }\n\n async #query<T extends QueryResultRow>(\n args: QueryTemplateOrSimpleQuery,\n ): Promise<pgQueryResult<X, T>> {\n const query = this.#parseQueryTemplateStyle(args);\n\n this.#opts?.beforeQuery?.(query);\n\n const results = await this.#exec(query).catch((e: unknown) => {\n this.#opts?.onError?.(query, e);\n throw e;\n });\n\n if (typeof results.rowCount !== 'number') {\n results.rowCount = results.rows?.length ?? 0;\n }\n\n this.#opts?.afterQuery?.(\n query,\n pick(results, ['command', 'rowCount', 'rows']),\n );\n\n return results as pgQueryResult<X, T>;\n }\n\n // ======================================================================\n // query executors\n\n async insert<T extends QueryResultRow>(\n table: string,\n fv: FieldValues,\n appendix?: string | QueryFragment,\n ) {\n const query = buildInsert(table, fv, appendix);\n return await this.#query<T>([query]);\n }\n\n async update<T extends QueryResultRow>(\n table: string,\n fv: FieldValues,\n where: WhereArg,\n appendix?: string | QueryFragment,\n ) {\n const query = buildUpdate(table, fv, where, appendix);\n return await this.#query<T>([query]);\n }\n\n async delete<T extends QueryResultRow>(\n table: string,\n where: WhereArg,\n appendix?: string | QueryFragment,\n ) {\n const query = buildDelete(table, where, appendix);\n return await this.#query<T>([query]);\n }\n\n async query<T extends QueryResultRow>(...args: QueryTemplateOrSimpleQuery) {\n return this.#query<T>(args);\n }\n\n async getRows<T extends QueryResultRow>(...args: QueryTemplateOrSimpleQuery) {\n return this.#query<T>(args).then((x) => x.rows);\n }\n\n async getRow<T extends QueryResultRow>(...args: QueryTemplateOrSimpleQuery) {\n return this.#query<T>(args).then((x) => x.rows?.[0] as T | undefined);\n }\n\n async getOne<T = unknown>(...args: QueryTemplateOrSimpleQuery) {\n return this.#query<[T]>(args).then(\n (x) => Object.values(x.rows?.[0] ?? {})?.[0] as T | undefined,\n );\n }\n\n async getCount(...args: QueryTemplateOrSimpleQuery) {\n return this.#query(args).then((x) => x.rowCount);\n }\n\n async exec(...args: QueryTemplateOrSimpleQuery) {\n // same as getCount\n return this.#query(args).then((x) => x.rowCount);\n }\n\n async begin<R>(callback: (conn: this) => Promise<R>) {\n if (this.#inTransaction)\n throw new Error('Nested transaction is not supported');\n\n try {\n this.#inTransaction = true;\n await this.#exec({ text: 'BEGIN', values: [] });\n\n const result = await callback(this);\n\n await this.#exec({ text: 'COMMIT', values: [] });\n\n return result;\n } catch (e) {\n await this.#exec({ text: 'ROLLBACK', values: [] });\n throw e;\n } finally {\n this.#inTransaction = false;\n }\n }\n\n // ======================================================================\n // query adapters\n\n // Prisma adapter: NB; It only supports a query return rows\n public static get prisma() {\n return async function <T extends QueryResultRow>(\n this: object,\n { text, values }: QueryConfig,\n ): Promise<QueryResult<T>> {\n if (\n '$queryRawUnsafe' in this &&\n typeof this.$queryRawUnsafe === 'function'\n ) {\n const rows: T[] = await this.$queryRawUnsafe(text, ...values);\n return {\n rows: rows,\n rowCount: rows.length,\n };\n }\n throw new Error('Invalid object');\n };\n }\n\n // TypeORM adapter\n public static get typeorm() {\n return async function <T extends QueryResultRow>(\n this: object,\n { text, values }: QueryConfig,\n ): Promise<QueryResult<T>> {\n if ('query' in this && typeof this.query === 'function') {\n const rows: unknown[] = await this.query(text, values);\n\n // returns with row count\n if (\n rows.length === 2 &&\n Array.isArray(rows[0]) &&\n typeof rows[1] === 'number'\n ) {\n return { rows: rows[0], rowCount: rows[1] };\n }\n\n return {\n rows,\n rowCount: rows.length,\n } as { rows: T[]; rowCount: number };\n }\n throw new Error('Invalid object');\n };\n }\n}\n\ntype Overwrite<T, Q> = Omit<T, keyof Q> & Q;\ntype MethodChainRewrite<T, Q> = {\n [K in keyof T]: T[K] extends (...args: infer R) => T\n ? (...args: R) => Override<T, Q>\n : T[K] extends T\n ? Override<T, Q>\n : T[K];\n};\ntype Override<T, Q> = Overwrite<MethodChainRewrite<T, Q>, Q>;\n\nexport type WithQueryHelper<T extends object = object> = Override<\n T,\n QueryHelper<T>\n>;\n\n/**\n * Returns a proxy object that overrides the queryable instance `db` by Query Helper utilities\n * @param db - Queryable object to be wrapped\n */\nexport function withQueryHelper<T extends Queryable<object>>(\n db: T,\n opts?: QueryHelperOptions & Partial<QueryableWithThis<T>>,\n): WithQueryHelper<T>;\nexport function withQueryHelper<T extends object>(\n db: T,\n opts: QueryHelperOptions & QueryableWithThis<T>,\n): WithQueryHelper<T>;\nexport function withQueryHelper<T extends object>(\n db: T,\n opts?: QueryHelperOptions & Partial<QueryableWithThis<T>>,\n): WithQueryHelper<T> {\n const qh = new QueryHelper<T>(db, opts);\n const proxy: unknown = new Proxy(db, {\n get(db, key, receiver) {\n const target = key in qh ? qh : key in db ? db : undefined;\n const value = target && Reflect.get(target, key);\n\n if (value && value instanceof Function) {\n return function (this: unknown, ...args: unknown[]) {\n const result = value.apply(this === receiver ? target : this, args);\n return result === db ? proxy : result;\n };\n }\n\n return value === db ? proxy : value;\n },\n });\n\n return proxy as WithQueryHelper<T>;\n}\n"],
5
+ "mappings": "4yBAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,SAAAE,EAAA,UAAAC,GAAA,WAAAC,GAAA,OAAAC,EAAA,mBAAAC,EAAA,gBAAAC,EAAA,UAAAC,GAAA,cAAAC,GAAA,UAAAC,EAAA,cAAAC,GAAA,aAAAC,EAAA,QAAAC,GAAA,iBAAAC,EAAA,gBAAAC,EAAA,gBAAAC,EAAA,cAAAC,EAAA,gBAAAC,EAAA,gBAAAC,EAAA,UAAAC,GAAA,oBAAAC,EAAA,yBAAAC,EAAA,SAAAC,GAAA,OAAAC,GAAA,YAAAC,GAAA,aAAAC,EAAA,QAAAC,EAAA,QAAAC,EAAA,UAAAC,GAAA,cAAAC,GAAA,aAAAC,GAAA,oBAAAC,KAAA,eAAAC,GAAAjC,ICAA,IAAMkC,GAAmB,CAEvB,SACA,SACA,MACA,iBACA,UACA,UACA,MACA,MACA,QACA,KACA,MACA,gBACA,SACA,UACA,SACA,eACA,OACA,WACA,OACA,OACA,QACA,UACA,SACA,aACA,SACA,cACA,QACA,eACA,eACA,oBACA,eACA,kBACA,UACA,aACA,UACA,SACA,QACA,WACA,OACA,UACA,WACA,KACA,OACA,cACA,SACA,SACA,UACA,aACA,MACA,SACA,WACA,QACA,MACA,UACA,SACA,OACA,OACA,gBACA,gBACA,QACA,QACA,OACA,SACA,WACA,SACA,QACA,KACA,YACA,QACA,YACA,OACA,KACA,SACA,OACA,UACA,OACA,OACA,QACA,YACA,iBACA,MACA,OACA,MACA,OACA,QACA,WACA,WACA,UACA,UACA,MACA,MACA,UACA,OACA,QACA,MACA,UACA,SACA,MACA,KACA,OACA,OACA,KACA,QACA,QACA,WACA,WACA,YACA,UACA,UACA,UACA,MACA,YACA,UACA,aACA,YACA,SACA,UACA,QACA,SACA,eACA,UACA,OACA,UACA,SACA,QACA,MACA,OACA,UACA,UACA,OACA,KACA,MACA,WACA,OACA,kBACA,QACA,SACA,OACA,QACA,UACA,SACA,OACA,QACA,OACA,SACF,EAEO,SAASC,EAAWC,EAAY,CACrC,OACEA,EAAG,MAAM,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",
6
+ "names": ["index_exports", "__export", "AND", "LIMIT", "OFFSET", "OR", "QueryFragments", "QueryHelper", "UNION", "UNION_ALL", "WHERE", "WHERE_AND", "WHERE_OR", "and", "buildClauses", "buildDelete", "buildInsert", "buildKeys", "buildUpdate", "buildValues", "ident", "isQueryFragment", "isQueryTemplateStyle", "json", "or", "pgIdent", "pgString", "raw", "sql", "where", "where_and", "where_or", "withQueryHelper", "__toCommonJS", "reservedKeywords", "quoteIdent", "id", "quoteLiteral", "s", "pgIdent", "s", "x", "quoteIdent", "pgString", "quoteLiteral", "QueryFragmentBase", "values", "text", "embed", "_value", "QueryFragmentValue", "value", "__privateAdd", "__privateSet", "opts", "__privateGet", "_ident", "QueryFragmentIdent", "ident", "_string", "QueryFragmentRawString", "isQueryFragment", "makeIdent", "name", "makeValue", "makeRaw", "QueryFragments", "makeJsonValue", "isQueryTemplateStyle", "args", "texts", "sewTemplateTextsAndValues", "idx", "_list", "_opts", "prefix", "glue", "suffix", "empty", "children", "sql", "fragments", "raw", "json", "wrapperFn", "buildClauses", "clauses", "parse", "val", "key", "OR", "fv", "AND", "WHERE", "WHERE_OR", "UNION_ALL", "UNION", "LIMIT", "limit", "OFFSET", "offset", "buildValues", "fvs", "array", "sig", "arg", "v", "buildKeys", "_", "ks", "buildInsert", "table", "appendix", "keys", "buildUpdate", "where", "pairs", "k", "buildDelete", "or", "and", "WHERE_AND", "where_and", "where_or", "pick", "target", "keys", "k", "_db", "_opts", "_inTransaction", "_QueryHelper_instances", "parseQueryTemplateStyle_fn", "exec_fn", "query_fn", "QueryHelper", "db", "opts", "__privateAdd", "__privateSet", "__privateGet", "table", "fv", "appendix", "query", "buildInsert", "__privateMethod", "where", "buildUpdate", "buildDelete", "args", "x", "callback", "result", "e", "text", "values", "rows", "isQueryTemplateStyle", "texts", "sql", "queryFn", "results", "withQueryHelper", "qh", "proxy", "key", "receiver", "value"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var k=(e,r,t)=>{if(!r.has(e))throw TypeError("Cannot "+t)};var s=(e,r,t)=>(k(e,r,"read from private field"),t?t.call(e):r.get(e)),l=(e,r,t)=>{if(r.has(e))throw TypeError("Cannot add the same private member more than once");r instanceof WeakSet?r.add(e):r.set(e,t)},y=(e,r,t,n)=>(k(e,r,"write to private field"),n?n.call(e,t):r.set(e,t),t);var c=(e,r,t)=>(k(e,r,"access private method"),t);var te=["AES128","AES256","ALL","ALLOWOVERWRITE","ANALYSE","ANALYZE","AND","ANY","ARRAY","AS","ASC","AUTHORIZATION","BACKUP","BETWEEN","BINARY","BLANKSASNULL","BOTH","BYTEDICT","CASE","CAST","CHECK","COLLATE","COLUMN","CONSTRAINT","CREATE","CREDENTIALS","CROSS","CURRENT_DATE","CURRENT_TIME","CURRENT_TIMESTAMP","CURRENT_USER","CURRENT_USER_ID","DEFAULT","DEFERRABLE","DEFLATE","DEFRAG","DELTA","DELTA32K","DESC","DISABLE","DISTINCT","DO","ELSE","EMPTYASNULL","ENABLE","ENCODE","ENCRYPT","ENCRYPTION","END","EXCEPT","EXPLICIT","FALSE","FOR","FOREIGN","FREEZE","FROM","FULL","GLOBALDICT256","GLOBALDICT64K","GRANT","GROUP","GZIP","HAVING","IDENTITY","IGNORE","ILIKE","IN","INITIALLY","INNER","INTERSECT","INTO","IS","ISNULL","JOIN","LEADING","LEFT","LIKE","LIMIT","LOCALTIME","LOCALTIMESTAMP","LUN","LUNS","LZO","LZOP","MINUS","MOSTLY13","MOSTLY32","MOSTLY8","NATURAL","NEW","NOT","NOTNULL","NULL","NULLS","OFF","OFFLINE","OFFSET","OLD","ON","ONLY","OPEN","OR","ORDER","OUTER","OVERLAPS","PARALLEL","PARTITION","PERCENT","PLACING","PRIMARY","RAW","READRATIO","RECOVER","REFERENCES","REJECTLOG","RESORT","RESTORE","RIGHT","SELECT","SESSION_USER","SIMILAR","SOME","SYSDATE","SYSTEM","TABLE","TAG","TDES","TEXT255","TEXT32K","THEN","TO","TOP","TRAILING","TRUE","TRUNCATECOLUMNS","UNION","UNIQUE","USER","USING","VERBOSE","WALLET","WHEN","WHERE","WITH","WITHOUT"];function Y(e){return e.match(/^[a-zA-Z_][0-9a-zA-Z_$]*$/)&&!te.includes(e.toUpperCase())?e:`"${e.replace(/"/g,'""')}"`}function L(e){return`${e.includes("'")?"E":""}'${e.replace(/'/g,"''").replace(/\\/g,"\\\\")}'`}function re(e){return e.split(".").map(r=>Y(r)).join(".")}function D(e){return e===null?"NULL":typeof e=="boolean"?e?"true":"false":Array.isArray(e)?"ARRAY["+e.map(D).join(",")+"]":typeof e=="object"?"toJSON"in e&&typeof e.toJSON=="function"?L(e.toJSON()):L(e.toString()):L(String(e))}var h=class{constructor(){this.text="";this.values=[];this.embed="";Object.defineProperties(this,{text:{enumerable:!0,get(){return this.compiled.text}},values:{enumerable:!0,get(){return this.compiled.values}},embed:{enumerable:!0,get(){return this.compiled.embed}}})}get compiled(){let r=[],t=this.toString({valueFn:u=>(r.push(u),"$"+r.length)}),n=this.toString();return{text:t,values:r,embed:n}}},O,U=class extends h{constructor(t){super();l(this,O,void 0);y(this,O,t)}toString(t){return(t?.valueFn??D)(s(this,O))}};O=new WeakMap;var Q,j=class extends h{constructor(t){super();l(this,Q,void 0);y(this,Q,t)}toString(t){return(t?.identFn??re)(s(this,Q))}};Q=new WeakMap;var A,q=class extends h{constructor(t){super();l(this,A,void 0);y(this,A,String(t))}toString(){return s(this,A)}};A=new WeakMap;function R(e){return e instanceof h}function g(e){return new j(e)}function _(e){return typeof e>"u"||R(e)?e:new U(e)}function d(e){return typeof e>"u"||R(e)?e:Array.isArray(e)?new T(e.map(d)):new q(e)}function v(e){return typeof e>"u"||R(e)?e:d(JSON.stringify(e))}var F=e=>{if(!Array.isArray(e)||typeof e?.[0]!="object"||e[0]===null||!("raw"in e[0])||!Array.isArray(e[0]))return!1;let[r,...t]=e;return r.length-1===t.length};function G(e,r){if(e.length-1!==r.length)throw new Error("Invalid call of the function");return e.flatMap((t,n)=>n?[r[n-1],t]:[t])}var S,o,T=class extends h{constructor(...t){super();l(this,S,[]);l(this,o,void 0);if(y(this,o,{prefix:"",glue:"",suffix:"",empty:"",wrapperFn:n=>n}),Array.isArray(t[0])){let[n,u]=t;y(this,o,{...s(this,o),...u}),this.push(...n)}else{let[n]=t;y(this,o,{...s(this,o),...n})}}setSewingPattern(t="",n="",u="",a=""){return y(this,o,{...s(this,o),prefix:t,glue:n,suffix:u,empty:a}),this}push(...t){return s(this,S).push(...t.map(d).filter(n=>n!==void 0)),this}append(...t){return this.push(...t)}join(t=", "){return s(this,o).glue=t,this}prefix(t=" "){return s(this,o).prefix=t,this}suffix(t=" "){return s(this,o).suffix=t,this}empty(t=""){return s(this,o).empty=t,this}toString(t){let n=s(this,S).map(u=>u.toString(t)).filter(u=>u).join(s(this,o).glue);return n?s(this,o).prefix+s(this,o).wrapperFn(n,t)+s(this,o).suffix:s(this,o).empty}};S=new WeakMap,o=new WeakMap;function i(...e){let r;if(F(e)){let[t,...n]=e;r=[new T(G(t.map(d),n.map(_)))]}else r=e.map(_);return new T(r)}var ne=g;function P(...e){return new T(e.map(d))}function ue(...e){let r,t=(n,u)=>(u?.valueFn||D)(n);if(F(e)){let[n,...u]=e;r=[new T(G(n.map(d),u.map(v)),{wrapperFn:t})]}else r=e.map(n=>new T([v(n)],{wrapperFn:t}));return new T(r)}function I(...e){let r=new T,t=n=>{if(n!==void 0&&n!==null){if(typeof n=="string"){r.push(d(n));return}if(R(n)){r.push(n);return}if(Array.isArray(n)){n.forEach(t);return}if(typeof n=="object"){for(let u in n)if(n[u]!==void 0){if(R(n[u])){r.push(i`${g(u)} ${n[u]}`);continue}if(n[u]===null){r.push(i`${g(u)} IS NULL`);continue}if(Array.isArray(n[u])){r.push(i`${g(u)} = ANY (${n[u]})`);continue}r.push(i`${g(u)} = ${n[u]}`)}return}}};return t(e),r}function X(...e){return I(e).setSewingPattern("((",") OR (","))","")}function K(...e){return I(e).setSewingPattern("((",") AND (","))","")}function w(...e){return I(e).setSewingPattern("WHERE ((",") AND (","))","")}function B(...e){return I(e).setSewingPattern("WHERE ((",") OR (","))","")}function ie(...e){return P(...e).join(" UNION ALL ")}function se(...e){return P(...e).join(" UNION ")}function oe(e){return e==null?i``:(e=Number(e),e>0?i`LIMIT ${e}`:i``)}function ae(e){return e==null?i``:(e=Number(e),e>=0?i`OFFSET ${e}`:i``)}function Z(e){if(!Array.isArray(e)){if(typeof e!="object")throw new Error("buildValues: The argument must be an array");e=[e]}if(e.length===0)throw new Error("buildValues: Array must contain elements at least one");let r=e.map(u=>typeof u=="object"?Object.values(u):u),t=r[0].length;if(r.some(u=>u.length!==t))throw new Error("buildValues: Array must all be the same length");let n=i(...r.map(u=>i(...u).join(", "))).setSewingPattern("(","), (",")");return i`VALUES ${n}`}function J(e){if(Array.isArray(e)||(e=[e]),e.length==0||!e[0]||typeof e[0]!="object")throw new Error("Invalid call of the function");e=e.map(n=>Object.fromEntries(Object.entries(n).filter(([u,a])=>a!==void 0)));let r=Object.keys(e[0]),t=r.join();if(e.some(n=>Object.keys(n).join()!==t))throw new Error("buildKeys: All objects must have the same keys");return i(...r.map(g)).setSewingPattern("(",", ",")")}function W(e,r,t){Array.isArray(r)||(r=[r]);let n=J(r),u=Z(r.map(Object.values));return i`INSERT INTO ${g(e)} ${n} ${u}`.append(t).join(" ")}function H(e,r,t,n){let u=new T;for(let a in r){let N=r[a];N!==void 0&&u.push(i`${g(a)} = ${N}`)}return i`UPDATE ${g(e)} SET ${u.join(", ")} ${w(t)}`.append(n).join(" ")}function $(e,r,t){return i`DELETE FROM ${g(e)} ${w(r)}`.append(t).join(" ")}var pe=X,le=K,ye=w,ce=w,Te=w,ge=B;i.raw=P;i.ident=ne;i.json=ue;i.WHERE=w;i.WHERE_AND=ce;i.WHERE_OR=B;i.AND=K;i.OR=X;i.where=ye;i.where_and=Te;i.where_or=ge;i.and=le;i.or=pe;i.insert=W;i.update=H;i.delete=$;i.keys=J;i.values=Z;i.UNION_ALL=ie;i.UNION=se;i.LIMIT=oe;i.OFFSET=ae;function fe(e,r){return e={...e},Object.defineProperties(e,Object.fromEntries(Object.keys(e).map(t=>[t,r.includes(t)?{}:{enumerable:!1}]))),e}var x,E,b,z,p,f,M=class{constructor(r,t={}){l(this,b);l(this,p);l(this,x,void 0);l(this,E,void 0);y(this,x,r),y(this,E,{...t}),s(this,E).query||"query"in r&&typeof r.query=="function"&&(s(this,E).query=r.query)}async insert(r,t,n){let u=W(r,t,n);return await c(this,p,f).call(this,[u])}async update(r,t,n,u){let a=H(r,t,n,u);return await c(this,p,f).call(this,[a])}async delete(r,t,n){let u=$(r,t,n);return await c(this,p,f).call(this,[u])}async query(...r){return c(this,p,f).call(this,r)}async getRows(...r){return c(this,p,f).call(this,r).then(t=>t.rows)}async getRow(...r){return c(this,p,f).call(this,r).then(t=>t.rows?.[0])}async getOne(...r){return c(this,p,f).call(this,r).then(t=>Object.values(t.rows?.[0]??{})?.[0])}async getCount(...r){return c(this,p,f).call(this,r).then(t=>t.rowCount)}async exec(...r){return c(this,p,f).call(this,r).then(t=>t.rowCount)}static get prisma(){return async function({text:r,values:t}){if("$queryRawUnsafe"in this&&typeof this.$queryRawUnsafe=="function"){let n=await this.$queryRawUnsafe(r,...t);return{rows:n,rowCount:n.length}}throw new Error("Invalid object")}}static get typeorm(){return async function({text:r,values:t}){if("query"in this&&typeof this.query=="function"){let n=await this.query(r,t);return n.length===2&&Array.isArray(n[0])&&typeof n[1]=="number"?{rows:n[0],rowCount:n[1]}:{rows:n,rowCount:n.length}}throw new Error("Invalid object")}}};x=new WeakMap,E=new WeakMap,b=new WeakSet,z=function(r){if(F(r)){let[u,...a]=r;return i(u,...a)}let[t,n]=r;return typeof t=="object"&&t&&"text"in t?{...t,values:t.values??[]}:{text:t,values:n??[]}},p=new WeakSet,f=async function(r){let t=c(this,b,z).call(this,r);s(this,E)?.beforeQuery?.(t);let n=s(this,E).query;if(!n)throw new Error("Missing query function");let u=await n.call(s(this,x),t).catch(a=>{throw s(this,E)?.onError?.(t,a),a});return typeof u.rowCount!="number"&&(u.rowCount=u.rows?.length??0),s(this,E)?.afterQuery?.({...t,results:fe(u,["command","rowCount","rows"])}),u};function Oe(e,r){let t=new M(e,r),n=new Proxy(e,{get(u,a,N){let C=a in t?t:a in u?u:void 0,m=C&&Reflect.get(C,a);return m&&m instanceof Function?function(...ee){let V=m.apply(this===N?C:this,ee);return V===u?n:V}:m===u?n:m}});return n}export{K as AND,oe as LIMIT,ae as OFFSET,X as OR,T as QueryFragments,M as QueryHelper,se as UNION,ie as UNION_ALL,w as WHERE,ce as WHERE_AND,B as WHERE_OR,le as and,I as buildClauses,$ as buildDelete,W as buildInsert,J as buildKeys,H as buildUpdate,Z as buildValues,ne as ident,R as isQueryFragment,F as isQueryTemplateStyle,ue as json,pe as or,re as pgIdent,D as pgString,P as raw,i as sql,ye as where,Te as where_and,ge as where_or,Oe as withQueryHelper};
1
+ var K=e=>{throw TypeError(e)};var U=(e,r,t)=>r.has(e)||K("Cannot "+t);var s=(e,r,t)=>(U(e,r,"read from private field"),t?t.call(e):r.get(e)),T=(e,r,t)=>r.has(e)?K("Cannot add the same private member more than once"):r instanceof WeakSet?r.add(e):r.set(e,t),l=(e,r,t,n)=>(U(e,r,"write to private field"),n?n.call(e,t):r.set(e,t),t),p=(e,r,t)=>(U(e,r,"access private method"),t);var ne=["AES128","AES256","ALL","ALLOWOVERWRITE","ANALYSE","ANALYZE","AND","ANY","ARRAY","AS","ASC","AUTHORIZATION","BACKUP","BETWEEN","BINARY","BLANKSASNULL","BOTH","BYTEDICT","CASE","CAST","CHECK","COLLATE","COLUMN","CONSTRAINT","CREATE","CREDENTIALS","CROSS","CURRENT_DATE","CURRENT_TIME","CURRENT_TIMESTAMP","CURRENT_USER","CURRENT_USER_ID","DEFAULT","DEFERRABLE","DEFLATE","DEFRAG","DELTA","DELTA32K","DESC","DISABLE","DISTINCT","DO","ELSE","EMPTYASNULL","ENABLE","ENCODE","ENCRYPT","ENCRYPTION","END","EXCEPT","EXPLICIT","FALSE","FOR","FOREIGN","FREEZE","FROM","FULL","GLOBALDICT256","GLOBALDICT64K","GRANT","GROUP","GZIP","HAVING","IDENTITY","IGNORE","ILIKE","IN","INITIALLY","INNER","INTERSECT","INTO","IS","ISNULL","JOIN","LEADING","LEFT","LIKE","LIMIT","LOCALTIME","LOCALTIMESTAMP","LUN","LUNS","LZO","LZOP","MINUS","MOSTLY13","MOSTLY32","MOSTLY8","NATURAL","NEW","NOT","NOTNULL","NULL","NULLS","OFF","OFFLINE","OFFSET","OLD","ON","ONLY","OPEN","OR","ORDER","OUTER","OVERLAPS","PARALLEL","PARTITION","PERCENT","PLACING","PRIMARY","RAW","READRATIO","RECOVER","REFERENCES","REJECTLOG","RESORT","RESTORE","RIGHT","SELECT","SESSION_USER","SIMILAR","SOME","SYSDATE","SYSTEM","TABLE","TAG","TDES","TEXT255","TEXT32K","THEN","TO","TOP","TRAILING","TRUE","TRUNCATECOLUMNS","UNION","UNIQUE","USER","USING","VERBOSE","WALLET","WHEN","WHERE","WITH","WITHOUT"];function X(e){return e.match(/^[a-zA-Z_][0-9a-zA-Z_$]*$/)&&!ne.includes(e.toUpperCase())?e:`"${e.replace(/"/g,'""')}"`}function b(e){return`${e.includes("'")?"E":""}'${e.replace(/'/g,"''").replace(/\\/g,"\\\\")}'`}function ue(e){return e.split(".").map(r=>X(r)).join(".")}function q(e){return e===null?"NULL":typeof e=="boolean"?e?"true":"false":Array.isArray(e)?"ARRAY["+e.map(q).join(",")+"]":typeof e=="object"?"toJSON"in e&&typeof e.toJSON=="function"?b(e.toJSON()):b(e.toString()):b(String(e))}var w=class{constructor(){this.text="";this.values=[];this.embed="";Object.defineProperties(this,{text:{enumerable:!0,get(){return this.compiled.text}},values:{enumerable:!0,get(){return this.compiled.values}},embed:{enumerable:!0,get(){return this.compiled.embed}}})}get compiled(){let r=[],t=this.toString({valueFn:u=>(r.push(u),"$"+r.length)}),n=this.toString();return{text:t,values:r,embed:n}}},A,j=class extends w{constructor(t){super();T(this,A);l(this,A,t)}toString(t){return(t?.valueFn??q)(s(this,A))}};A=new WeakMap;var O,W=class extends w{constructor(t){super();T(this,O);l(this,O,t)}toString(t){return(t?.identFn??ue)(s(this,O))}};O=new WeakMap;var S,P=class extends w{constructor(t){super();T(this,S);l(this,S,String(t))}toString(){return s(this,S)}};S=new WeakMap;function Q(e){return e instanceof w}function g(e){return new W(e)}function Y(e){return typeof e>"u"||Q(e)?e:new j(e)}function E(e){return typeof e>"u"||Q(e)?e:Array.isArray(e)?new c(e.map(E)):new P(e)}function _(e){return typeof e>"u"||Q(e)?e:E(JSON.stringify(e))}var I=e=>{if(!Array.isArray(e)||typeof e?.[0]!="object"||e[0]===null||!("raw"in e[0])||!Array.isArray(e[0]))return!1;let[r,...t]=e;return r.length-1===t.length};function G(e,r){if(e.length-1!==r.length)throw new Error("Invalid call of the function");return e.flatMap((t,n)=>n?[r[n-1],t]:[t])}var x,o,c=class extends w{constructor(...t){super();T(this,x,[]);T(this,o);if(l(this,o,{prefix:"",glue:"",suffix:"",empty:"",wrapperFn:n=>n}),Array.isArray(t[0])){let[n,u]=t;l(this,o,{...s(this,o),...u}),this.push(...n)}else{let[n]=t;l(this,o,{...s(this,o),...n})}}setSewingPattern(t="",n="",u="",y=""){return l(this,o,{...s(this,o),prefix:t,glue:n,suffix:u,empty:y}),this}push(...t){return s(this,x).push(...t.map(E).filter(n=>n!==void 0)),this}append(...t){return this.push(...t)}join(t=", "){return s(this,o).glue=t,this}prefix(t=" "){return s(this,o).prefix=t,this}suffix(t=" "){return s(this,o).suffix=t,this}empty(t=""){return s(this,o).empty=t,this}toString(t){let n=s(this,x).map(u=>u.toString(t)).filter(u=>u).join(s(this,o).glue);return n?s(this,o).prefix+s(this,o).wrapperFn(n,t)+s(this,o).suffix:s(this,o).empty}};x=new WeakMap,o=new WeakMap;function i(...e){let r;if(I(e)){let[t,...n]=e;r=[new c(G(t.map(E),n.map(Y)))]}else r=e.map(Y);return new c(r)}var ie=g;function D(...e){return new c(e.map(E))}function se(...e){let r,t=(n,u)=>(u?.valueFn||q)(n);if(I(e)){let[n,...u]=e;r=[new c(G(n.map(E),u.map(_)),{wrapperFn:t})]}else r=e.map(n=>new c([_(n)],{wrapperFn:t}));return new c(r)}function C(...e){let r=new c,t=n=>{if(n!==void 0&&n!==null){if(typeof n=="string"){r.push(E(n));return}if(Q(n)){r.push(n);return}if(Array.isArray(n)){n.forEach(t);return}if(typeof n=="object"){for(let u in n)if(n[u]!==void 0){if(Q(n[u])){r.push(i`${g(u)} ${n[u]}`);continue}if(n[u]===null){r.push(i`${g(u)} IS NULL`);continue}if(Array.isArray(n[u])){r.push(i`${g(u)} = ANY (${n[u]})`);continue}r.push(i`${g(u)} = ${n[u]}`)}return}}};return t(e),r}function B(...e){return C(e).setSewingPattern("((",") OR (","))","")}function Z(...e){return C(e).setSewingPattern("((",") AND (","))","")}function d(...e){return C(e).setSewingPattern("WHERE ((",") AND (","))","")}function J(...e){return C(e).setSewingPattern("WHERE ((",") OR (","))","")}function oe(...e){return D(...e).join(" UNION ALL ")}function ae(...e){return D(...e).join(" UNION ")}function pe(e){return e==null?i``:(e=Number(e),e>0?i`LIMIT ${e}`:i``)}function ye(e){return e==null?i``:(e=Number(e),e>=0?i`OFFSET ${e}`:i``)}function z(e){if(!Array.isArray(e)){if(typeof e!="object")throw new Error("buildValues: The argument must be an array");e=[e]}if(e.length===0)throw new Error("buildValues: Array must contain elements at least one");let r=e.map(u=>typeof u=="object"?Object.values(u):u),t=r[0].length;if(r.some(u=>u.length!==t))throw new Error("buildValues: Array must all be the same length");let n=i(...r.map(u=>i(...u).join(", "))).setSewingPattern("(","), (",")");return i`VALUES ${n}`}function ee(e){if(Array.isArray(e)||(e=[e]),e.length==0||!e[0]||typeof e[0]!="object")throw new Error("Invalid call of the function");e=e.map(n=>Object.fromEntries(Object.entries(n).filter(([u,y])=>y!==void 0)));let r=Object.keys(e[0]),t=r.join();if(e.some(n=>Object.keys(n).join()!==t))throw new Error("buildKeys: All objects must have the same keys");return i(...r.map(g)).setSewingPattern("(",", ",")")}function H(e,r,t){Array.isArray(r)||(r=[r]);let n=ee(r),u=z(r.map(Object.values));return i`INSERT INTO ${g(e)} ${n} ${u}`.append(t).join(" ")}function M(e,r,t,n){let u=new c;for(let y in r){let L=r[y];L!==void 0&&u.push(i`${g(y)} = ${L}`)}return i`UPDATE ${g(e)} SET ${u.join(", ")} ${d(t)}`.append(n).join(" ")}function $(e,r,t){return i`DELETE FROM ${g(e)} ${d(r)}`.append(t).join(" ")}var le=B,Te=Z,ce=d,ge=d,he=d,fe=J;i.raw=D;i.ident=ie;i.json=se;i.WHERE=d;i.WHERE_AND=ge;i.WHERE_OR=J;i.AND=Z;i.OR=B;i.where=ce;i.where_and=he;i.where_or=fe;i.and=Te;i.or=le;i.insert=H;i.update=M;i.delete=$;i.keys=ee;i.values=z;i.UNION_ALL=oe;i.UNION=ae;i.LIMIT=pe;i.OFFSET=ye;function we(e,r){return Object.fromEntries(r.map(t=>[t,e[t]]))}var F,f,R,a,te,N,h,V=class{constructor(r,t={}){T(this,a);T(this,F);T(this,f);T(this,R,!1);if(l(this,F,r),l(this,f,{...t}),!s(this,f).query){if(!("query"in r)||typeof r.query!="function")throw new Error("Invalid or no query functionn is specified");s(this,f).query=r.query}}async insert(r,t,n){let u=H(r,t,n);return await p(this,a,h).call(this,[u])}async update(r,t,n,u){let y=M(r,t,n,u);return await p(this,a,h).call(this,[y])}async delete(r,t,n){let u=$(r,t,n);return await p(this,a,h).call(this,[u])}async query(...r){return p(this,a,h).call(this,r)}async getRows(...r){return p(this,a,h).call(this,r).then(t=>t.rows)}async getRow(...r){return p(this,a,h).call(this,r).then(t=>t.rows?.[0])}async getOne(...r){return p(this,a,h).call(this,r).then(t=>Object.values(t.rows?.[0]??{})?.[0])}async getCount(...r){return p(this,a,h).call(this,r).then(t=>t.rowCount)}async exec(...r){return p(this,a,h).call(this,r).then(t=>t.rowCount)}async begin(r){if(s(this,R))throw new Error("Nested transaction is not supported");try{l(this,R,!0),await p(this,a,N).call(this,{text:"BEGIN",values:[]});let t=await r(this);return await p(this,a,N).call(this,{text:"COMMIT",values:[]}),t}catch(t){throw await p(this,a,N).call(this,{text:"ROLLBACK",values:[]}),t}finally{l(this,R,!1)}}static get prisma(){return async function({text:r,values:t}){if("$queryRawUnsafe"in this&&typeof this.$queryRawUnsafe=="function"){let n=await this.$queryRawUnsafe(r,...t);return{rows:n,rowCount:n.length}}throw new Error("Invalid object")}}static get typeorm(){return async function({text:r,values:t}){if("query"in this&&typeof this.query=="function"){let n=await this.query(r,t);return n.length===2&&Array.isArray(n[0])&&typeof n[1]=="number"?{rows:n[0],rowCount:n[1]}:{rows:n,rowCount:n.length}}throw new Error("Invalid object")}}};F=new WeakMap,f=new WeakMap,R=new WeakMap,a=new WeakSet,te=function(r){if(I(r)){let[u,...y]=r;return i(u,...y)}let[t,n]=r;return typeof t=="object"&&t&&"text"in t?{...t,values:t.values??[]}:{text:t,values:n??[]}},N=function(r){let t=s(this,f).query;if(!t)throw new Error("Missing query function");return t.call(s(this,F),r)},h=async function(r){let t=p(this,a,te).call(this,r);s(this,f)?.beforeQuery?.(t);let n=await p(this,a,N).call(this,t).catch(u=>{throw s(this,f)?.onError?.(t,u),u});return typeof n.rowCount!="number"&&(n.rowCount=n.rows?.length??0),s(this,f)?.afterQuery?.(t,we(n,["command","rowCount","rows"])),n};function Oe(e,r){let t=new V(e,r),n=new Proxy(e,{get(u,y,L){let k=y in t?t:y in u?u:void 0,m=k&&Reflect.get(k,y);return m&&m instanceof Function?function(...re){let v=m.apply(this===L?k:this,re);return v===u?n:v}:m===u?n:m}});return n}export{Z as AND,pe as LIMIT,ye as OFFSET,B as OR,c as QueryFragments,V as QueryHelper,ae as UNION,oe as UNION_ALL,d as WHERE,ge as WHERE_AND,J as WHERE_OR,Te as and,C as buildClauses,$ as buildDelete,H as buildInsert,ee as buildKeys,M as buildUpdate,z as buildValues,ie as ident,Q as isQueryFragment,I as isQueryTemplateStyle,se as json,le as or,ue as pgIdent,q as pgString,D as raw,i as sql,ce as where,he as where_and,fe as where_or,Oe as withQueryHelper};
2
2
  //# sourceMappingURL=index.esm.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/quote.ts", "../src/query-weaver.ts", "../src/query-helper.ts"],
4
- "sourcesContent": ["const reservedKeywords = [\n // copied from pg-escape's reserved.txt\n 'AES128',\n 'AES256',\n 'ALL',\n 'ALLOWOVERWRITE',\n 'ANALYSE',\n 'ANALYZE',\n 'AND',\n 'ANY',\n 'ARRAY',\n 'AS',\n 'ASC',\n 'AUTHORIZATION',\n 'BACKUP',\n 'BETWEEN',\n 'BINARY',\n 'BLANKSASNULL',\n 'BOTH',\n 'BYTEDICT',\n 'CASE',\n 'CAST',\n 'CHECK',\n 'COLLATE',\n 'COLUMN',\n 'CONSTRAINT',\n 'CREATE',\n 'CREDENTIALS',\n 'CROSS',\n 'CURRENT_DATE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_USER',\n 'CURRENT_USER_ID',\n 'DEFAULT',\n 'DEFERRABLE',\n 'DEFLATE',\n 'DEFRAG',\n 'DELTA',\n 'DELTA32K',\n 'DESC',\n 'DISABLE',\n 'DISTINCT',\n 'DO',\n 'ELSE',\n 'EMPTYASNULL',\n 'ENABLE',\n 'ENCODE',\n 'ENCRYPT',\n 'ENCRYPTION',\n 'END',\n 'EXCEPT',\n 'EXPLICIT',\n 'FALSE',\n 'FOR',\n 'FOREIGN',\n 'FREEZE',\n 'FROM',\n 'FULL',\n 'GLOBALDICT256',\n 'GLOBALDICT64K',\n 'GRANT',\n 'GROUP',\n 'GZIP',\n 'HAVING',\n 'IDENTITY',\n 'IGNORE',\n 'ILIKE',\n 'IN',\n 'INITIALLY',\n 'INNER',\n 'INTERSECT',\n 'INTO',\n 'IS',\n 'ISNULL',\n 'JOIN',\n 'LEADING',\n 'LEFT',\n 'LIKE',\n 'LIMIT',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'LUN',\n 'LUNS',\n 'LZO',\n 'LZOP',\n 'MINUS',\n 'MOSTLY13',\n 'MOSTLY32',\n 'MOSTLY8',\n 'NATURAL',\n 'NEW',\n 'NOT',\n 'NOTNULL',\n 'NULL',\n 'NULLS',\n 'OFF',\n 'OFFLINE',\n 'OFFSET',\n 'OLD',\n 'ON',\n 'ONLY',\n 'OPEN',\n 'OR',\n 'ORDER',\n 'OUTER',\n 'OVERLAPS',\n 'PARALLEL',\n 'PARTITION',\n 'PERCENT',\n 'PLACING',\n 'PRIMARY',\n 'RAW',\n 'READRATIO',\n 'RECOVER',\n 'REFERENCES',\n 'REJECTLOG',\n 'RESORT',\n 'RESTORE',\n 'RIGHT',\n 'SELECT',\n 'SESSION_USER',\n 'SIMILAR',\n 'SOME',\n 'SYSDATE',\n 'SYSTEM',\n 'TABLE',\n 'TAG',\n 'TDES',\n 'TEXT255',\n 'TEXT32K',\n 'THEN',\n 'TO',\n 'TOP',\n 'TRAILING',\n 'TRUE',\n 'TRUNCATECOLUMNS',\n 'UNION',\n 'UNIQUE',\n 'USER',\n 'USING',\n 'VERBOSE',\n 'WALLET',\n 'WHEN',\n 'WHERE',\n 'WITH',\n 'WITHOUT',\n];\n\nexport function quoteIdent(id: string) {\n if (\n id.match(/^[a-zA-Z_][0-9a-zA-Z_$]*$/) &&\n !reservedKeywords.includes(id.toUpperCase())\n ) {\n return id;\n }\n return `\"${id.replace(/\"/g, '\"\"')}\"`;\n}\n\nexport function quoteLiteral(s: string) {\n const prefix = s.includes(\"'\") ? 'E' : '';\n return `${prefix}'${s.replace(/'/g, \"''\").replace(/\\\\/g, '\\\\\\\\')}'`;\n}\n\nexport default {\n quoteIdent,\n quoteLiteral,\n};\n", "type EscapeFunction = (v: unknown) => string;\nexport type FieldValues = Record<string, unknown>;\nexport type WhereArg =\n | string\n | FieldValues\n | QueryFragment\n | undefined\n | WhereArg[];\n\nimport { quoteIdent, quoteLiteral } from './quote';\n\nexport function pgIdent(s: string) {\n // '.' is a special for us\n return s\n .split('.')\n .map((x) => quoteIdent(x))\n .join('.');\n}\n\n// fallback function for when the EscapeFunction is not specified\nexport function pgString(s: unknown): string {\n if (s === null) return 'NULL';\n if (typeof s === 'boolean') return s ? 'true' : 'false';\n if (Array.isArray(s)) return 'ARRAY[' + s.map(pgString).join(',') + ']';\n if (typeof s === 'object') {\n if ('toJSON' in s && typeof s.toJSON === 'function') {\n return quoteLiteral(s.toJSON());\n }\n return quoteLiteral(s.toString());\n }\n return quoteLiteral(String(s));\n}\n\ntype QueryFragmentToStringOptions = {\n valueFn?: EscapeFunction;\n identFn?: EscapeFunction;\n};\n\nexport interface QueryFragment {\n text: string;\n values?: unknown[];\n embed?: string;\n sql?: string;\n\n toString(opts?: QueryFragmentToStringOptions): string;\n}\n\nabstract class QueryFragmentBase implements QueryFragment {\n // XXX: entries for defineProperties\n text: string = '';\n values: unknown[] = [];\n embed?: string = '';\n\n get compiled() {\n const values = [] as unknown[];\n const text = this.toString({\n valueFn: (x: unknown) => {\n values.push(x);\n return '$' + values.length;\n },\n });\n const embed = this.toString();\n\n return {\n text,\n values,\n embed,\n };\n }\n\n constructor() {\n Object.defineProperties(this, {\n text: {\n enumerable: true,\n get() {\n return this.compiled.text;\n },\n },\n values: {\n enumerable: true,\n get() {\n return this.compiled.values;\n },\n },\n embed: {\n enumerable: true,\n get() {\n return this.compiled.embed;\n },\n },\n });\n }\n\n abstract toString(opts?: QueryFragmentToStringOptions): string;\n}\n\nclass QueryFragmentValue extends QueryFragmentBase {\n #value: unknown;\n\n constructor(value: unknown) {\n super();\n this.#value = value;\n }\n\n toString(opts?: QueryFragmentToStringOptions) {\n return (opts?.valueFn ?? pgString)(this.#value);\n }\n}\n\nclass QueryFragmentIdent extends QueryFragmentBase {\n #ident: string;\n\n constructor(ident: string) {\n super();\n this.#ident = ident;\n }\n\n toString(opts?: QueryFragmentToStringOptions) {\n return (opts?.identFn ?? pgIdent)(this.#ident);\n }\n}\n\n// we exploits String constructor\nclass QueryFragmentRawString extends QueryFragmentBase {\n #string: string;\n\n constructor(s: unknown) {\n super();\n this.#string = String(s);\n }\n\n /* toString(_?: QueryFragmentToStringOptions) { */\n toString() {\n return this.#string;\n }\n}\n\nexport function isQueryFragment(x: unknown): x is QueryFragment {\n return x instanceof QueryFragmentBase;\n}\n\nfunction makeIdent(name: string) {\n return new QueryFragmentIdent(name);\n}\n\nfunction makeValue(x: unknown): QueryFragment | undefined {\n if (typeof x === 'undefined' || isQueryFragment(x)) return x;\n return new QueryFragmentValue(x);\n}\n\nfunction makeRaw(text: unknown | unknown[]): QueryFragment | undefined {\n if (typeof text === 'undefined' || isQueryFragment(text)) return text;\n if (Array.isArray(text)) return new QueryFragments(text.map(makeRaw));\n return new QueryFragmentRawString(text);\n}\n\nfunction makeJsonValue(x: unknown) {\n if (typeof x === 'undefined' || isQueryFragment(x)) return x;\n return makeRaw(JSON.stringify(x));\n}\n\ntype QueryFragmentsOptions = {\n prefix?: string;\n glue?: string;\n suffix?: string;\n empty?: string;\n\n wrapperFn?: (s: string, opts?: QueryFragmentToStringOptions) => string;\n};\n\nexport type QueryTemplateStyle = [\n text: TemplateStringsArray,\n ...values: unknown[],\n];\nexport const isQueryTemplateStyle = (\n args: unknown,\n): args is QueryTemplateStyle => {\n if (!Array.isArray(args)) return false;\n if (typeof args?.[0] !== 'object' || args[0] === null || !('raw' in args[0]))\n return false;\n if (!Array.isArray(args[0])) return false;\n const [texts, ...values] = args;\n return texts.length - 1 === values.length;\n};\n\nfunction sewTemplateTextsAndValues<T = unknown, R = unknown>(\n texts: T[],\n values: R[],\n) {\n if (texts.length - 1 !== values.length)\n throw new Error('Invalid call of the function');\n return texts.flatMap((text, idx) => (idx ? [values[idx - 1], text] : [text]));\n}\n\nexport class QueryFragments extends QueryFragmentBase {\n #list: QueryFragment[] = [];\n #opts: Required<QueryFragmentsOptions>;\n\n constructor(\n ...args:\n | []\n | [values: (QueryFragment | undefined)[], opts?: QueryFragmentsOptions]\n | [opts?: QueryFragmentsOptions]\n ) {\n super();\n this.#opts = {\n prefix: '',\n glue: '',\n suffix: '',\n empty: '',\n wrapperFn: (x) => x,\n };\n\n if (Array.isArray(args[0])) {\n const [values, opts] = args as [\n values: (QueryFragment | undefined)[],\n opts?: QueryFragmentsOptions,\n ];\n this.#opts = { ...this.#opts, ...opts };\n this.push(...values);\n } else {\n const [opts] = args as [opts?: QueryFragmentsOptions];\n this.#opts = { ...this.#opts, ...opts };\n }\n }\n\n setSewingPattern(\n prefix: string = '',\n glue: string = '',\n suffix: string = '',\n empty: string = '',\n ) {\n this.#opts = { ...this.#opts, prefix, glue, suffix, empty };\n return this;\n }\n\n push(...args: (QueryFragment | string | undefined)[]) {\n this.#list.push(\n ...(args.map(makeRaw).filter((x) => x !== undefined) as QueryFragment[]),\n );\n return this;\n }\n\n // alias\n append(...args: (QueryFragment | string | undefined)[]) {\n return this.push(...args);\n }\n\n join(glue: string = ', ') {\n this.#opts.glue = glue;\n return this;\n }\n\n prefix(prefix: string = ' ') {\n this.#opts.prefix = prefix;\n return this;\n }\n\n suffix(suffix: string = ' ') {\n this.#opts.suffix = suffix;\n return this;\n }\n\n empty(empty: string = '') {\n this.#opts.empty = empty;\n return this;\n }\n\n toString(opts?: QueryFragmentToStringOptions): string {\n const children = this.#list\n .map((x) => x.toString(opts))\n .filter((x) => x)\n .join(this.#opts.glue);\n if (!children) return this.#opts.empty;\n return (\n this.#opts.prefix +\n this.#opts.wrapperFn(children, opts) +\n this.#opts.suffix\n );\n }\n}\n\nexport function sql(\n ...args:\n | [texts: TemplateStringsArray, ...values: unknown[]]\n | [...values: unknown[]]\n): QueryFragments {\n let fragments: (QueryFragment | undefined)[];\n if (isQueryTemplateStyle(args)) {\n // sql`...` comes here\n const [texts, ...values] = args as [\n texts: TemplateStringsArray,\n values: unknown[],\n ];\n // template string looks like a single QueryFragment for user\n fragments = [\n new QueryFragments(\n sewTemplateTextsAndValues(texts.map(makeRaw), values.map(makeValue)),\n ),\n ];\n } else {\n // normal function call\n fragments = args.map(makeValue);\n }\n\n return new QueryFragments(fragments);\n}\n\nexport const ident = makeIdent;\n\nexport function raw(...args: unknown[]) {\n return new QueryFragments(args.map(makeRaw));\n}\n\nexport function json(\n ...args:\n | [...json: unknown[]]\n | [texts: TemplateStringsArray, ...args: unknown[]]\n) {\n let fragments: (QueryFragment | undefined)[];\n const wrapperFn = (x: string, opts?: QueryFragmentToStringOptions) =>\n (opts?.valueFn || pgString)(x);\n if (isQueryTemplateStyle(args)) {\n const [texts, ...values] = args;\n fragments = [\n new QueryFragments(\n sewTemplateTextsAndValues(\n texts.map(makeRaw),\n values.map(makeJsonValue),\n ),\n { wrapperFn },\n ),\n ];\n } else {\n // normal function call\n fragments = args.map(\n (x) => new QueryFragments([makeJsonValue(x)], { wrapperFn }),\n );\n }\n\n return new QueryFragments(fragments);\n}\n\nexport function buildClauses(...args: WhereArg[]) {\n const clauses = new QueryFragments();\n\n const parse = (val: WhereArg) => {\n if (val === undefined) return;\n if (val === null) return;\n\n if (typeof val === 'string') {\n clauses.push(makeRaw(val));\n return;\n }\n\n if (isQueryFragment(val)) {\n clauses.push(val);\n return;\n }\n\n if (Array.isArray(val)) {\n val.forEach(parse);\n return;\n }\n\n if (typeof val === 'object') {\n for (const key in val) {\n if (val[key] === undefined) continue;\n\n if (isQueryFragment(val[key])) {\n clauses.push(sql`${makeIdent(key)} ${val[key]}`);\n continue;\n }\n\n if (val[key] === null) {\n clauses.push(sql`${makeIdent(key)} IS NULL`);\n continue;\n }\n\n if (Array.isArray(val[key])) {\n clauses.push(sql`${makeIdent(key)} = ANY (${val[key]})`);\n continue;\n }\n\n // \u305D\u308C\u4EE5\u5916\n clauses.push(sql`${makeIdent(key)} = ${val[key]}`);\n }\n return;\n }\n };\n\n parse(args);\n\n return clauses;\n}\n\nexport function OR(...fv: WhereArg[]) {\n return buildClauses(fv).setSewingPattern('((', ') OR (', '))', '');\n}\n\nexport function AND(...fv: WhereArg[]) {\n return buildClauses(fv).setSewingPattern('((', ') AND (', '))', '');\n}\n\nexport function WHERE(...fv: WhereArg[]) {\n return buildClauses(fv).setSewingPattern('WHERE ((', ') AND (', '))', '');\n}\n\nexport function WHERE_OR(...fv: WhereArg[]) {\n return buildClauses(fv).setSewingPattern('WHERE ((', ') OR (', '))', '');\n}\n\nexport function UNION_ALL(...fv: unknown[]) {\n return raw(...fv).join(' UNION ALL ');\n}\n\nexport function UNION(...fv: unknown[]) {\n return raw(...fv).join(' UNION ');\n}\n\nexport function LIMIT(limit: number | string | null | undefined) {\n if (limit == null) return sql``;\n limit = Number(limit);\n return limit > 0 ? sql`LIMIT ${limit}` : sql``;\n}\n\nexport function OFFSET(offset: number | string | null | undefined) {\n if (offset == null) return sql``;\n offset = Number(offset);\n return offset >= 0 ? sql`OFFSET ${offset}` : sql``;\n}\n\nexport function buildValues(fvs: (FieldValues | unknown[])[]) {\n if (!Array.isArray(fvs)) {\n if (typeof fvs !== 'object')\n throw new Error('buildValues: The argument must be an array');\n fvs = [fvs];\n }\n if (fvs.length === 0)\n throw new Error('buildValues: Array must contain elements at least one');\n\n const array = fvs.map((x) => (typeof x === 'object' ? Object.values(x) : x));\n\n const sig = array[0].length;\n if (array.some((arg) => arg.length !== sig)) {\n throw new Error('buildValues: Array must all be the same length');\n }\n\n const values = sql(\n ...array.map((v) => sql(...v).join(', ')),\n ).setSewingPattern('(', '), (', ')');\n return sql`VALUES ${values}`;\n}\n\nexport function buildKeys(fvs: FieldValues[] | FieldValues) {\n if (!Array.isArray(fvs)) fvs = [fvs];\n if (fvs.length == 0 || !fvs[0] || typeof fvs[0] !== 'object')\n throw new Error('Invalid call of the function');\n\n fvs = fvs.map((fv) =>\n Object.fromEntries(Object.entries(fv).filter(([_, v]) => v !== undefined)),\n );\n\n const ks = Object.keys(fvs[0]);\n const sig = ks.join();\n if (fvs.some((fv) => Object.keys(fv).join() !== sig)) {\n throw new Error('buildKeys: All objects must have the same keys');\n }\n\n return sql(...ks.map(makeIdent)).setSewingPattern('(', ', ', ')');\n}\n\nexport function buildInsert(\n table: string,\n fvs: FieldValues[] | FieldValues,\n appendix?: string | QueryFragment,\n) {\n if (!Array.isArray(fvs)) fvs = [fvs];\n\n const keys = buildKeys(fvs);\n const values = buildValues(fvs.map(Object.values));\n\n return sql`INSERT INTO ${makeIdent(table)} ${keys} ${values}`\n .append(appendix)\n .join(' ');\n}\n\nexport function buildUpdate(\n table: string,\n fv: FieldValues,\n where?: WhereArg,\n appendix?: string | QueryFragment,\n) {\n const pairs = new QueryFragments();\n\n for (const k in fv) {\n const val = fv[k];\n if (val === undefined) continue;\n\n pairs.push(sql`${makeIdent(k)} = ${val}`);\n }\n\n return sql`UPDATE ${makeIdent(table)} SET ${pairs.join(', ')} ${WHERE(where)}`\n .append(appendix)\n .join(' ');\n}\n\nexport function buildDelete(\n table: string,\n where?: WhereArg,\n appendix?: string | QueryFragment,\n) {\n return sql`DELETE FROM ${makeIdent(table)} ${WHERE(where)}`\n .append(appendix)\n .join(' ');\n}\n\n// aliases\nexport const or = OR;\nexport const and = AND;\nexport const where = WHERE;\nexport const WHERE_AND = WHERE;\nexport const where_and = WHERE;\nexport const where_or = WHERE_OR;\n\n// expose via `sql`\nsql.raw = raw;\nsql.ident = ident;\nsql.json = json;\nsql.WHERE = WHERE;\nsql.WHERE_AND = WHERE_AND;\nsql.WHERE_OR = WHERE_OR;\nsql.AND = AND;\nsql.OR = OR;\nsql.where = where;\nsql.where_and = where_and;\nsql.where_or = where_or;\nsql.and = and;\nsql.or = or;\nsql.insert = buildInsert;\nsql.update = buildUpdate;\nsql.delete = buildDelete;\nsql.keys = buildKeys;\nsql.values = buildValues;\nsql.UNION_ALL = UNION_ALL;\nsql.UNION = UNION;\nsql.LIMIT = LIMIT;\nsql.OFFSET = OFFSET;\n\nexport default {\n sql,\n raw,\n ident,\n json,\n WHERE,\n WHERE_AND,\n WHERE_OR,\n AND,\n OR,\n where,\n where_and,\n where_or,\n and,\n or,\n buildInsert,\n buildUpdate,\n buildDelete,\n buildValues,\n UNION_ALL,\n UNION,\n LIMIT,\n OFFSET,\n};\n", "import type pg from 'pg';\nimport type {\n QueryFragment,\n FieldValues,\n WhereArg,\n QueryTemplateStyle,\n} from './query-weaver';\nimport {\n sql,\n buildInsert,\n buildUpdate,\n buildDelete,\n isQueryTemplateStyle,\n} from './query-weaver';\n\nexport type QueryResultRow = pg.QueryResultRow;\n\n// pg (almost) compatible types to relief and reduce their requirements\nexport type QueryResult<T extends QueryResultRow> = {\n rowCount?: number | null;\n rows: T[];\n fields?: Partial<pg.FieldDef>[];\n};\n\nexport type QueryConfig = {\n text: string;\n values: unknown[];\n embed?: string;\n};\n\nexport type QueryableFunction<T extends object> = (\n this: T,\n queryConfig: QueryConfig,\n) => Promise<QueryResult<QueryResultRow>>;\n\nexport type Queryable<T extends object> = {\n query: QueryableFunction<T>;\n};\n\ntype pgQueryResult<X, T extends QueryResultRow> = (X extends {\n query(...args: unknown[]): Promise<pg.QueryResult<T>>; // pg\n}\n ? pg.QueryResult<T>\n : QueryResult<T>) & { rowCount: number };\n\ntype QueryHelperOptions<X extends object> = {\n beforeQuery?: <T extends QueryConfig>(ctx: T) => void;\n afterQuery?: <T extends QueryConfig>(ctx: T) => void;\n onError?: <T extends QueryConfig>(ctx: T, e: unknown) => void;\n\n query?: QueryableFunction<X>;\n};\n\ntype QueryTemplateOrSimpleQuery =\n | QueryTemplateStyle\n | [query: string, values?: unknown[]]\n | [query: pg.QueryConfig<unknown[]>];\n\nfunction hidePropertyExcludes(target: object, keys: string[]) {\n target = { ...target };\n Object.defineProperties(\n target,\n Object.fromEntries(\n Object.keys(target).map((k) => [\n k,\n keys.includes(k) ? {} : { enumerable: false },\n ]),\n ),\n );\n return target;\n}\n\n/**\n * Query Helper\n */\nexport class QueryHelper<X extends object> {\n #db: X;\n #opts: QueryHelperOptions<X>;\n\n constructor(db: X, opts: QueryHelperOptions<X> = {}) {\n this.#db = db;\n this.#opts = { ...opts };\n\n // set query function\n if (!this.#opts.query) {\n if ('query' in db && typeof db.query === 'function') {\n // default\n this.#opts.query = db.query as QueryableFunction<X>;\n }\n }\n }\n\n #parseQueryTemplateStyle(args: QueryTemplateOrSimpleQuery): QueryConfig {\n if (isQueryTemplateStyle(args)) {\n const [texts, ...values] = args;\n return sql(texts, ...values);\n }\n\n const [query, values] = args;\n\n if (typeof query === 'object' && query && 'text' in query) {\n return { ...query, values: query.values ?? [] };\n }\n\n return { text: query, values: values ?? [] };\n }\n\n async #query<T extends QueryResultRow>(\n args: QueryTemplateOrSimpleQuery,\n ): Promise<pgQueryResult<X, T>> {\n const query = this.#parseQueryTemplateStyle(args);\n\n this.#opts?.beforeQuery?.(query);\n\n const queryFn = this.#opts.query;\n if (!queryFn) throw new Error('Missing query function');\n const results = await queryFn.call(this.#db, query).catch((e: unknown) => {\n this.#opts?.onError?.(query, e);\n throw e;\n });\n\n if (typeof results.rowCount !== 'number') {\n results.rowCount = results.rows?.length ?? 0;\n }\n\n this.#opts?.afterQuery?.({\n ...query,\n results: hidePropertyExcludes(results, ['command', 'rowCount', 'rows']),\n });\n\n return results as pgQueryResult<X, T>;\n }\n\n // ======================================================================\n // query executors\n\n async insert<T extends QueryResultRow>(\n table: string,\n fv: FieldValues,\n appendix?: string | QueryFragment,\n ) {\n const query = buildInsert(table, fv, appendix);\n return await this.#query<T>([query]);\n }\n\n async update<T extends QueryResultRow>(\n table: string,\n fv: FieldValues,\n where: WhereArg,\n appendix?: string | QueryFragment,\n ) {\n const query = buildUpdate(table, fv, where, appendix);\n return await this.#query<T>([query]);\n }\n\n async delete<T extends QueryResultRow>(\n table: string,\n where: WhereArg,\n appendix?: string | QueryFragment,\n ) {\n const query = buildDelete(table, where, appendix);\n return await this.#query<T>([query]);\n }\n\n async query<T extends QueryResultRow>(...args: QueryTemplateOrSimpleQuery) {\n return this.#query<T>(args);\n }\n\n async getRows<T extends QueryResultRow>(...args: QueryTemplateOrSimpleQuery) {\n return this.#query<T>(args).then((x) => x.rows);\n }\n\n async getRow<T extends QueryResultRow>(...args: QueryTemplateOrSimpleQuery) {\n return this.#query<T>(args).then((x) => x.rows?.[0] as T | undefined);\n }\n\n async getOne<T = unknown>(...args: QueryTemplateOrSimpleQuery) {\n return this.#query<[T]>(args).then(\n (x) => Object.values(x.rows?.[0] ?? {})?.[0] as T | undefined,\n );\n }\n\n async getCount(...args: QueryTemplateOrSimpleQuery) {\n return this.#query(args).then((x) => x.rowCount);\n }\n\n async exec(...args: QueryTemplateOrSimpleQuery) {\n // same as getCount\n return this.#query(args).then((x) => x.rowCount);\n }\n\n // ======================================================================\n // query adapters\n\n // Prisma adapter: NB; It only supports a query return rows\n public static get prisma() {\n return async function <T extends QueryResultRow>(\n this: object,\n { text, values }: QueryConfig,\n ): Promise<QueryResult<T>> {\n if (\n '$queryRawUnsafe' in this &&\n typeof this.$queryRawUnsafe === 'function'\n ) {\n const rows: T[] = await this.$queryRawUnsafe(text, ...values);\n return {\n rows: rows,\n rowCount: rows.length,\n };\n }\n throw new Error('Invalid object');\n };\n }\n\n // TypeORM adapter\n public static get typeorm() {\n return async function <T extends QueryResultRow>(\n this: object,\n { text, values }: QueryConfig,\n ): Promise<QueryResult<T>> {\n if ('query' in this && typeof this.query === 'function') {\n const rows: unknown[] = await this.query(text, values);\n\n // returns with row count\n if (\n rows.length === 2 &&\n Array.isArray(rows[0]) &&\n typeof rows[1] === 'number'\n ) {\n return { rows: rows[0], rowCount: rows[1] };\n }\n\n return {\n rows,\n rowCount: rows.length,\n } as { rows: T[]; rowCount: number };\n }\n throw new Error('Invalid object');\n };\n }\n}\n\ntype Overwrite<T, Q> = Omit<T, keyof Q> & Q;\ntype MethodChainRewrite<T, Q> = {\n [K in keyof T]: T[K] extends (...args: infer R) => T\n ? (...args: R) => Override<T, Q>\n : T[K] extends T\n ? Override<T, Q>\n : T[K];\n};\ntype Override<T, Q> = Overwrite<MethodChainRewrite<T, Q>, Q>;\n\nexport type WithQueryHelper<T extends object> = Override<T, QueryHelper<T>>;\n\n/**\n * Returns a proxy object that overrides the queryable instance `db` by Query Helper utilities\n * @param db - Queryable object to be wrapped\n */\nexport function withQueryHelper<T extends Queryable<T>>(\n db: T,\n opts?: QueryHelperOptions<T>,\n): WithQueryHelper<T>;\nexport function withQueryHelper<T extends object>(\n db: T,\n opts: Overwrite<QueryHelperOptions<T>, Queryable<T>>,\n): WithQueryHelper<T>;\nexport function withQueryHelper<T extends object>(\n db: T,\n opts?: QueryHelperOptions<T>,\n): WithQueryHelper<T> {\n const qh = new QueryHelper<T>(db, opts);\n const proxy: unknown = new Proxy(db, {\n get(db, key, receiver) {\n const target = key in qh ? qh : key in db ? db : undefined;\n const value = target && Reflect.get(target, key);\n\n if (value && value instanceof Function) {\n return function (this: unknown, ...args: unknown[]) {\n const result = value.apply(this === receiver ? target : this, args);\n return result === db ? proxy : result;\n };\n }\n\n return value === db ? proxy : value;\n },\n });\n\n return proxy as WithQueryHelper<T>;\n}\n"],
5
- "mappings": "qYAAA,IAAMA,GAAmB,CAEvB,SACA,SACA,MACA,iBACA,UACA,UACA,MACA,MACA,QACA,KACA,MACA,gBACA,SACA,UACA,SACA,eACA,OACA,WACA,OACA,OACA,QACA,UACA,SACA,aACA,SACA,cACA,QACA,eACA,eACA,oBACA,eACA,kBACA,UACA,aACA,UACA,SACA,QACA,WACA,OACA,UACA,WACA,KACA,OACA,cACA,SACA,SACA,UACA,aACA,MACA,SACA,WACA,QACA,MACA,UACA,SACA,OACA,OACA,gBACA,gBACA,QACA,QACA,OACA,SACA,WACA,SACA,QACA,KACA,YACA,QACA,YACA,OACA,KACA,SACA,OACA,UACA,OACA,OACA,QACA,YACA,iBACA,MACA,OACA,MACA,OACA,QACA,WACA,WACA,UACA,UACA,MACA,MACA,UACA,OACA,QACA,MACA,UACA,SACA,MACA,KACA,OACA,OACA,KACA,QACA,QACA,WACA,WACA,YACA,UACA,UACA,UACA,MACA,YACA,UACA,aACA,YACA,SACA,UACA,QACA,SACA,eACA,UACA,OACA,UACA,SACA,QACA,MACA,OACA,UACA,UACA,OACA,KACA,MACA,WACA,OACA,kBACA,QACA,SACA,OACA,QACA,UACA,SACA,OACA,QACA,OACA,SACF,EAEO,SAASC,EAAWC,EAAY,CACrC,OACEA,EAAG,MAAM,2BAA2B,GACpC,CAACF,GAAiB,SAASE,EAAG,YAAY,CAAC,EAEpCA,EAEF,IAAIA,EAAG,QAAQ,KAAM,IAAI,CAAC,GACnC,CAEO,SAASC,EAAaC,EAAW,CAEtC,MAAO,GADQA,EAAE,SAAS,GAAG,EAAI,IAAM,EACvB,IAAIA,EAAE,QAAQ,KAAM,IAAI,EAAE,QAAQ,MAAO,MAAM,CAAC,GAClE,CCvJO,SAASC,GAAQC,EAAW,CAEjC,OAAOA,EACJ,MAAM,GAAG,EACT,IAAKC,GAAMC,EAAWD,CAAC,CAAC,EACxB,KAAK,GAAG,CACb,CAGO,SAASE,EAASH,EAAoB,CAC3C,OAAIA,IAAM,KAAa,OACnB,OAAOA,GAAM,UAAkBA,EAAI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",
6
- "names": ["reservedKeywords", "quoteIdent", "id", "quoteLiteral", "s", "pgIdent", "s", "x", "quoteIdent", "pgString", "quoteLiteral", "QueryFragmentBase", "values", "text", "embed", "_value", "QueryFragmentValue", "value", "__privateAdd", "__privateSet", "opts", "__privateGet", "_ident", "QueryFragmentIdent", "ident", "_string", "QueryFragmentRawString", "isQueryFragment", "makeIdent", "name", "makeValue", "makeRaw", "QueryFragments", "makeJsonValue", "isQueryTemplateStyle", "args", "texts", "sewTemplateTextsAndValues", "idx", "_list", "_opts", "prefix", "glue", "suffix", "empty", "children", "sql", "fragments", "raw", "json", "wrapperFn", "buildClauses", "clauses", "parse", "val", "key", "OR", "fv", "AND", "WHERE", "WHERE_OR", "UNION_ALL", "UNION", "LIMIT", "limit", "OFFSET", "offset", "buildValues", "fvs", "array", "sig", "arg", "v", "buildKeys", "_", "ks", "buildInsert", "table", "appendix", "keys", "buildUpdate", "where", "pairs", "k", "buildDelete", "or", "and", "WHERE_AND", "where_and", "where_or", "hidePropertyExcludes", "target", "keys", "k", "_db", "_opts", "_parseQueryTemplateStyle", "parseQueryTemplateStyle_fn", "_query", "query_fn", "QueryHelper", "db", "opts", "__privateAdd", "__privateSet", "__privateGet", "table", "fv", "appendix", "query", "buildInsert", "__privateMethod", "where", "buildUpdate", "buildDelete", "args", "x", "text", "values", "rows", "isQueryTemplateStyle", "texts", "sql", "queryFn", "results", "e", "withQueryHelper", "qh", "proxy", "key", "receiver", "value", "result"]
4
+ "sourcesContent": ["const reservedKeywords = [\n // copied from pg-escape's reserved.txt\n 'AES128',\n 'AES256',\n 'ALL',\n 'ALLOWOVERWRITE',\n 'ANALYSE',\n 'ANALYZE',\n 'AND',\n 'ANY',\n 'ARRAY',\n 'AS',\n 'ASC',\n 'AUTHORIZATION',\n 'BACKUP',\n 'BETWEEN',\n 'BINARY',\n 'BLANKSASNULL',\n 'BOTH',\n 'BYTEDICT',\n 'CASE',\n 'CAST',\n 'CHECK',\n 'COLLATE',\n 'COLUMN',\n 'CONSTRAINT',\n 'CREATE',\n 'CREDENTIALS',\n 'CROSS',\n 'CURRENT_DATE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_USER',\n 'CURRENT_USER_ID',\n 'DEFAULT',\n 'DEFERRABLE',\n 'DEFLATE',\n 'DEFRAG',\n 'DELTA',\n 'DELTA32K',\n 'DESC',\n 'DISABLE',\n 'DISTINCT',\n 'DO',\n 'ELSE',\n 'EMPTYASNULL',\n 'ENABLE',\n 'ENCODE',\n 'ENCRYPT',\n 'ENCRYPTION',\n 'END',\n 'EXCEPT',\n 'EXPLICIT',\n 'FALSE',\n 'FOR',\n 'FOREIGN',\n 'FREEZE',\n 'FROM',\n 'FULL',\n 'GLOBALDICT256',\n 'GLOBALDICT64K',\n 'GRANT',\n 'GROUP',\n 'GZIP',\n 'HAVING',\n 'IDENTITY',\n 'IGNORE',\n 'ILIKE',\n 'IN',\n 'INITIALLY',\n 'INNER',\n 'INTERSECT',\n 'INTO',\n 'IS',\n 'ISNULL',\n 'JOIN',\n 'LEADING',\n 'LEFT',\n 'LIKE',\n 'LIMIT',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'LUN',\n 'LUNS',\n 'LZO',\n 'LZOP',\n 'MINUS',\n 'MOSTLY13',\n 'MOSTLY32',\n 'MOSTLY8',\n 'NATURAL',\n 'NEW',\n 'NOT',\n 'NOTNULL',\n 'NULL',\n 'NULLS',\n 'OFF',\n 'OFFLINE',\n 'OFFSET',\n 'OLD',\n 'ON',\n 'ONLY',\n 'OPEN',\n 'OR',\n 'ORDER',\n 'OUTER',\n 'OVERLAPS',\n 'PARALLEL',\n 'PARTITION',\n 'PERCENT',\n 'PLACING',\n 'PRIMARY',\n 'RAW',\n 'READRATIO',\n 'RECOVER',\n 'REFERENCES',\n 'REJECTLOG',\n 'RESORT',\n 'RESTORE',\n 'RIGHT',\n 'SELECT',\n 'SESSION_USER',\n 'SIMILAR',\n 'SOME',\n 'SYSDATE',\n 'SYSTEM',\n 'TABLE',\n 'TAG',\n 'TDES',\n 'TEXT255',\n 'TEXT32K',\n 'THEN',\n 'TO',\n 'TOP',\n 'TRAILING',\n 'TRUE',\n 'TRUNCATECOLUMNS',\n 'UNION',\n 'UNIQUE',\n 'USER',\n 'USING',\n 'VERBOSE',\n 'WALLET',\n 'WHEN',\n 'WHERE',\n 'WITH',\n 'WITHOUT',\n];\n\nexport function quoteIdent(id: string) {\n if (\n id.match(/^[a-zA-Z_][0-9a-zA-Z_$]*$/) &&\n !reservedKeywords.includes(id.toUpperCase())\n ) {\n return id;\n }\n return `\"${id.replace(/\"/g, '\"\"')}\"`;\n}\n\nexport function quoteLiteral(s: string) {\n const prefix = s.includes(\"'\") ? 'E' : '';\n return `${prefix}'${s.replace(/'/g, \"''\").replace(/\\\\/g, '\\\\\\\\')}'`;\n}\n\nexport default {\n quoteIdent,\n quoteLiteral,\n};\n", "type EscapeFunction = (v: unknown) => string;\nexport type FieldValues = Record<string, unknown>;\nexport type WhereArg =\n | string\n | FieldValues\n | QueryFragment\n | undefined\n | WhereArg[];\n\nimport { quoteIdent, quoteLiteral } from './quote';\n\nexport function pgIdent(s: string) {\n // '.' is a special for us\n return s\n .split('.')\n .map((x) => quoteIdent(x))\n .join('.');\n}\n\n// fallback function for when the EscapeFunction is not specified\nexport function pgString(s: unknown): string {\n if (s === null) return 'NULL';\n if (typeof s === 'boolean') return s ? 'true' : 'false';\n if (Array.isArray(s)) return 'ARRAY[' + s.map(pgString).join(',') + ']';\n if (typeof s === 'object') {\n if ('toJSON' in s && typeof s.toJSON === 'function') {\n return quoteLiteral(s.toJSON());\n }\n return quoteLiteral(s.toString());\n }\n return quoteLiteral(String(s));\n}\n\ntype QueryFragmentToStringOptions = {\n valueFn?: EscapeFunction;\n identFn?: EscapeFunction;\n};\n\nexport interface QueryFragment {\n text: string;\n values?: unknown[];\n embed?: string;\n sql?: string;\n\n toString(opts?: QueryFragmentToStringOptions): string;\n}\n\nabstract class QueryFragmentBase implements QueryFragment {\n // XXX: entries for defineProperties\n text: string = '';\n values: unknown[] = [];\n embed?: string = '';\n\n get compiled() {\n const values = [] as unknown[];\n const text = this.toString({\n valueFn: (x: unknown) => {\n values.push(x);\n return '$' + values.length;\n },\n });\n const embed = this.toString();\n\n return {\n text,\n values,\n embed,\n };\n }\n\n constructor() {\n Object.defineProperties(this, {\n text: {\n enumerable: true,\n get() {\n return this.compiled.text;\n },\n },\n values: {\n enumerable: true,\n get() {\n return this.compiled.values;\n },\n },\n embed: {\n enumerable: true,\n get() {\n return this.compiled.embed;\n },\n },\n });\n }\n\n abstract toString(opts?: QueryFragmentToStringOptions): string;\n}\n\nclass QueryFragmentValue extends QueryFragmentBase {\n #value: unknown;\n\n constructor(value: unknown) {\n super();\n this.#value = value;\n }\n\n toString(opts?: QueryFragmentToStringOptions) {\n return (opts?.valueFn ?? pgString)(this.#value);\n }\n}\n\nclass QueryFragmentIdent extends QueryFragmentBase {\n #ident: string;\n\n constructor(ident: string) {\n super();\n this.#ident = ident;\n }\n\n toString(opts?: QueryFragmentToStringOptions) {\n return (opts?.identFn ?? pgIdent)(this.#ident);\n }\n}\n\n// we exploits String constructor\nclass QueryFragmentRawString extends QueryFragmentBase {\n #string: string;\n\n constructor(s: unknown) {\n super();\n this.#string = String(s);\n }\n\n /* toString(_?: QueryFragmentToStringOptions) { */\n toString() {\n return this.#string;\n }\n}\n\nexport function isQueryFragment(x: unknown): x is QueryFragment {\n return x instanceof QueryFragmentBase;\n}\n\nfunction makeIdent(name: string) {\n return new QueryFragmentIdent(name);\n}\n\nfunction makeValue(x: unknown): QueryFragment | undefined {\n if (typeof x === 'undefined' || isQueryFragment(x)) return x;\n return new QueryFragmentValue(x);\n}\n\nfunction makeRaw(text: unknown | unknown[]): QueryFragment | undefined {\n if (typeof text === 'undefined' || isQueryFragment(text)) return text;\n if (Array.isArray(text)) return new QueryFragments(text.map(makeRaw));\n return new QueryFragmentRawString(text);\n}\n\nfunction makeJsonValue(x: unknown) {\n if (typeof x === 'undefined' || isQueryFragment(x)) return x;\n return makeRaw(JSON.stringify(x));\n}\n\ntype QueryFragmentsOptions = {\n prefix?: string;\n glue?: string;\n suffix?: string;\n empty?: string;\n\n wrapperFn?: (s: string, opts?: QueryFragmentToStringOptions) => string;\n};\n\nexport type QueryTemplateStyle = [\n text: TemplateStringsArray,\n ...values: unknown[],\n];\nexport const isQueryTemplateStyle = (\n args: unknown,\n): args is QueryTemplateStyle => {\n if (!Array.isArray(args)) return false;\n if (typeof args?.[0] !== 'object' || args[0] === null || !('raw' in args[0]))\n return false;\n if (!Array.isArray(args[0])) return false;\n const [texts, ...values] = args;\n return texts.length - 1 === values.length;\n};\n\nfunction sewTemplateTextsAndValues<T = unknown, R = unknown>(\n texts: T[],\n values: R[],\n) {\n if (texts.length - 1 !== values.length)\n throw new Error('Invalid call of the function');\n return texts.flatMap((text, idx) => (idx ? [values[idx - 1], text] : [text]));\n}\n\nexport class QueryFragments extends QueryFragmentBase {\n #list: QueryFragment[] = [];\n #opts: Required<QueryFragmentsOptions>;\n\n constructor(\n ...args:\n | []\n | [values: (QueryFragment | undefined)[], opts?: QueryFragmentsOptions]\n | [opts?: QueryFragmentsOptions]\n ) {\n super();\n this.#opts = {\n prefix: '',\n glue: '',\n suffix: '',\n empty: '',\n wrapperFn: (x) => x,\n };\n\n if (Array.isArray(args[0])) {\n const [values, opts] = args as [\n values: (QueryFragment | undefined)[],\n opts?: QueryFragmentsOptions,\n ];\n this.#opts = { ...this.#opts, ...opts };\n this.push(...values);\n } else {\n const [opts] = args as [opts?: QueryFragmentsOptions];\n this.#opts = { ...this.#opts, ...opts };\n }\n }\n\n setSewingPattern(\n prefix: string = '',\n glue: string = '',\n suffix: string = '',\n empty: string = '',\n ) {\n this.#opts = { ...this.#opts, prefix, glue, suffix, empty };\n return this;\n }\n\n push(...args: (QueryFragment | string | undefined)[]) {\n this.#list.push(\n ...(args.map(makeRaw).filter((x) => x !== undefined) as QueryFragment[]),\n );\n return this;\n }\n\n // alias\n append(...args: (QueryFragment | string | undefined)[]) {\n return this.push(...args);\n }\n\n join(glue: string = ', ') {\n this.#opts.glue = glue;\n return this;\n }\n\n prefix(prefix: string = ' ') {\n this.#opts.prefix = prefix;\n return this;\n }\n\n suffix(suffix: string = ' ') {\n this.#opts.suffix = suffix;\n return this;\n }\n\n empty(empty: string = '') {\n this.#opts.empty = empty;\n return this;\n }\n\n toString(opts?: QueryFragmentToStringOptions): string {\n const children = this.#list\n .map((x) => x.toString(opts))\n .filter((x) => x)\n .join(this.#opts.glue);\n if (!children) return this.#opts.empty;\n return (\n this.#opts.prefix +\n this.#opts.wrapperFn(children, opts) +\n this.#opts.suffix\n );\n }\n}\n\nexport function sql(\n ...args:\n | [texts: TemplateStringsArray, ...values: unknown[]]\n | [...values: unknown[]]\n): QueryFragments {\n let fragments: (QueryFragment | undefined)[];\n if (isQueryTemplateStyle(args)) {\n // sql`...` comes here\n const [texts, ...values] = args as [\n texts: TemplateStringsArray,\n values: unknown[],\n ];\n // template string looks like a single QueryFragment for user\n fragments = [\n new QueryFragments(\n sewTemplateTextsAndValues(texts.map(makeRaw), values.map(makeValue)),\n ),\n ];\n } else {\n // normal function call\n fragments = args.map(makeValue);\n }\n\n return new QueryFragments(fragments);\n}\n\nexport const ident = makeIdent;\n\nexport function raw(...args: unknown[]) {\n return new QueryFragments(args.map(makeRaw));\n}\n\nexport function json(\n ...args:\n | [...json: unknown[]]\n | [texts: TemplateStringsArray, ...args: unknown[]]\n) {\n let fragments: (QueryFragment | undefined)[];\n const wrapperFn = (x: string, opts?: QueryFragmentToStringOptions) =>\n (opts?.valueFn || pgString)(x);\n if (isQueryTemplateStyle(args)) {\n const [texts, ...values] = args;\n fragments = [\n new QueryFragments(\n sewTemplateTextsAndValues(\n texts.map(makeRaw),\n values.map(makeJsonValue),\n ),\n { wrapperFn },\n ),\n ];\n } else {\n // normal function call\n fragments = args.map(\n (x) => new QueryFragments([makeJsonValue(x)], { wrapperFn }),\n );\n }\n\n return new QueryFragments(fragments);\n}\n\nexport function buildClauses(...args: WhereArg[]) {\n const clauses = new QueryFragments();\n\n const parse = (val: WhereArg) => {\n if (val === undefined) return;\n if (val === null) return;\n\n if (typeof val === 'string') {\n clauses.push(makeRaw(val));\n return;\n }\n\n if (isQueryFragment(val)) {\n clauses.push(val);\n return;\n }\n\n if (Array.isArray(val)) {\n val.forEach(parse);\n return;\n }\n\n if (typeof val === 'object') {\n for (const key in val) {\n if (val[key] === undefined) continue;\n\n if (isQueryFragment(val[key])) {\n clauses.push(sql`${makeIdent(key)} ${val[key]}`);\n continue;\n }\n\n if (val[key] === null) {\n clauses.push(sql`${makeIdent(key)} IS NULL`);\n continue;\n }\n\n if (Array.isArray(val[key])) {\n clauses.push(sql`${makeIdent(key)} = ANY (${val[key]})`);\n continue;\n }\n\n // \u305D\u308C\u4EE5\u5916\n clauses.push(sql`${makeIdent(key)} = ${val[key]}`);\n }\n return;\n }\n };\n\n parse(args);\n\n return clauses;\n}\n\nexport function OR(...fv: WhereArg[]) {\n return buildClauses(fv).setSewingPattern('((', ') OR (', '))', '');\n}\n\nexport function AND(...fv: WhereArg[]) {\n return buildClauses(fv).setSewingPattern('((', ') AND (', '))', '');\n}\n\nexport function WHERE(...fv: WhereArg[]) {\n return buildClauses(fv).setSewingPattern('WHERE ((', ') AND (', '))', '');\n}\n\nexport function WHERE_OR(...fv: WhereArg[]) {\n return buildClauses(fv).setSewingPattern('WHERE ((', ') OR (', '))', '');\n}\n\nexport function UNION_ALL(...fv: unknown[]) {\n return raw(...fv).join(' UNION ALL ');\n}\n\nexport function UNION(...fv: unknown[]) {\n return raw(...fv).join(' UNION ');\n}\n\nexport function LIMIT(limit: number | string | null | undefined) {\n if (limit == null) return sql``;\n limit = Number(limit);\n return limit > 0 ? sql`LIMIT ${limit}` : sql``;\n}\n\nexport function OFFSET(offset: number | string | null | undefined) {\n if (offset == null) return sql``;\n offset = Number(offset);\n return offset >= 0 ? sql`OFFSET ${offset}` : sql``;\n}\n\nexport function buildValues(fvs: (FieldValues | unknown[])[]) {\n if (!Array.isArray(fvs)) {\n if (typeof fvs !== 'object')\n throw new Error('buildValues: The argument must be an array');\n fvs = [fvs];\n }\n if (fvs.length === 0)\n throw new Error('buildValues: Array must contain elements at least one');\n\n const array = fvs.map((x) => (typeof x === 'object' ? Object.values(x) : x));\n\n const sig = array[0].length;\n if (array.some((arg) => arg.length !== sig)) {\n throw new Error('buildValues: Array must all be the same length');\n }\n\n const values = sql(\n ...array.map((v) => sql(...v).join(', ')),\n ).setSewingPattern('(', '), (', ')');\n return sql`VALUES ${values}`;\n}\n\nexport function buildKeys(fvs: FieldValues[] | FieldValues) {\n if (!Array.isArray(fvs)) fvs = [fvs];\n if (fvs.length == 0 || !fvs[0] || typeof fvs[0] !== 'object')\n throw new Error('Invalid call of the function');\n\n fvs = fvs.map((fv) =>\n Object.fromEntries(Object.entries(fv).filter(([_, v]) => v !== undefined)),\n );\n\n const ks = Object.keys(fvs[0]);\n const sig = ks.join();\n if (fvs.some((fv) => Object.keys(fv).join() !== sig)) {\n throw new Error('buildKeys: All objects must have the same keys');\n }\n\n return sql(...ks.map(makeIdent)).setSewingPattern('(', ', ', ')');\n}\n\nexport function buildInsert(\n table: string,\n fvs: FieldValues[] | FieldValues,\n appendix?: string | QueryFragment,\n) {\n if (!Array.isArray(fvs)) fvs = [fvs];\n\n const keys = buildKeys(fvs);\n const values = buildValues(fvs.map(Object.values));\n\n return sql`INSERT INTO ${makeIdent(table)} ${keys} ${values}`\n .append(appendix)\n .join(' ');\n}\n\nexport function buildUpdate(\n table: string,\n fv: FieldValues,\n where?: WhereArg,\n appendix?: string | QueryFragment,\n) {\n const pairs = new QueryFragments();\n\n for (const k in fv) {\n const val = fv[k];\n if (val === undefined) continue;\n\n pairs.push(sql`${makeIdent(k)} = ${val}`);\n }\n\n return sql`UPDATE ${makeIdent(table)} SET ${pairs.join(', ')} ${WHERE(where)}`\n .append(appendix)\n .join(' ');\n}\n\nexport function buildDelete(\n table: string,\n where?: WhereArg,\n appendix?: string | QueryFragment,\n) {\n return sql`DELETE FROM ${makeIdent(table)} ${WHERE(where)}`\n .append(appendix)\n .join(' ');\n}\n\n// aliases\nexport const or = OR;\nexport const and = AND;\nexport const where = WHERE;\nexport const WHERE_AND = WHERE;\nexport const where_and = WHERE;\nexport const where_or = WHERE_OR;\n\n// expose via `sql`\nsql.raw = raw;\nsql.ident = ident;\nsql.json = json;\nsql.WHERE = WHERE;\nsql.WHERE_AND = WHERE_AND;\nsql.WHERE_OR = WHERE_OR;\nsql.AND = AND;\nsql.OR = OR;\nsql.where = where;\nsql.where_and = where_and;\nsql.where_or = where_or;\nsql.and = and;\nsql.or = or;\nsql.insert = buildInsert;\nsql.update = buildUpdate;\nsql.delete = buildDelete;\nsql.keys = buildKeys;\nsql.values = buildValues;\nsql.UNION_ALL = UNION_ALL;\nsql.UNION = UNION;\nsql.LIMIT = LIMIT;\nsql.OFFSET = OFFSET;\n\nexport default {\n sql,\n raw,\n ident,\n json,\n WHERE,\n WHERE_AND,\n WHERE_OR,\n AND,\n OR,\n where,\n where_and,\n where_or,\n and,\n or,\n buildInsert,\n buildUpdate,\n buildDelete,\n buildValues,\n UNION_ALL,\n UNION,\n LIMIT,\n OFFSET,\n};\n", "import type pg from 'pg';\nimport type {\n QueryFragment,\n FieldValues,\n WhereArg,\n QueryTemplateStyle,\n} from './query-weaver';\nimport {\n sql,\n buildInsert,\n buildUpdate,\n buildDelete,\n isQueryTemplateStyle,\n} from './query-weaver';\n\nexport type QueryResultRow = pg.QueryResultRow;\n\n// pg (almost) compatible types to relief and reduce their requirements\nexport type QueryResult<T extends QueryResultRow> = {\n rowCount?: number | null;\n rows: T[];\n fields?: Partial<pg.FieldDef>[];\n};\n\nexport type QueryConfig = {\n text: string;\n values: unknown[];\n embed?: string;\n};\n\ntype QueryableFunctionReturnType = Promise<QueryResult<QueryResultRow>>;\ntype QueryableFunctionWithoutThis = (\n queryConfig: QueryConfig,\n) => QueryableFunctionReturnType;\ntype QueryableFunctionWithThis<T extends object> = (\n this: T,\n queryConfig: QueryConfig,\n) => QueryableFunctionReturnType;\n\ntype QueryableWithThis<T extends object> = {\n query: QueryableFunctionWithThis<T>;\n};\n\nexport type QueryableFunction<T extends object> =\n | QueryableFunctionWithoutThis\n | QueryableFunctionWithThis<T>;\nexport type Queryable<T extends object> = {\n query: QueryableFunction<T>;\n};\n\ntype pgQueryResult<X, T extends QueryResultRow> = (X extends {\n query(...args: unknown[]): Promise<pg.QueryResult<T>>; // pg\n}\n ? pg.QueryResult<T>\n : QueryResult<T>) & { rowCount: number };\n\ntype QueryHelperOptions = {\n beforeQuery?: <T extends QueryConfig>(ctx: T) => void;\n afterQuery?: <T extends QueryConfig, R extends QueryResultRow>(\n ctx: T,\n r: QueryResult<R>,\n ) => void;\n onError?: <T extends QueryConfig>(ctx: T, e: unknown) => void;\n};\n\ntype QueryTemplateOrSimpleQuery =\n | QueryTemplateStyle\n | [query: string, values?: unknown[]]\n | [query: pg.QueryConfig<unknown[]>];\n\nfunction pick<T extends { [X in string]: T[X] }, K extends string>(\n target: T,\n keys: K[],\n): { [X in K]: T[X] } {\n return Object.fromEntries(keys.map((k) => [k, target[k]])) as {\n [X in K]: T[X];\n };\n}\n\n/**\n * Query Helper\n */\nexport class QueryHelper<X extends object = object> {\n #db: X;\n #opts: QueryHelperOptions & Partial<Queryable<X>>;\n #inTransaction: boolean = false;\n\n constructor(db: X, opts: QueryHelperOptions & Partial<Queryable<X>> = {}) {\n this.#db = db;\n this.#opts = { ...opts };\n\n // set query function\n if (!this.#opts.query) {\n if (!('query' in db) || typeof db.query !== 'function') {\n throw new Error('Invalid or no query functionn is specified');\n }\n\n this.#opts.query = db.query as QueryableFunction<X>;\n }\n }\n\n #parseQueryTemplateStyle(args: QueryTemplateOrSimpleQuery): QueryConfig {\n if (isQueryTemplateStyle(args)) {\n const [texts, ...values] = args;\n return sql(texts, ...values);\n }\n\n const [query, values] = args;\n\n if (typeof query === 'object' && query && 'text' in query) {\n return { ...query, values: query.values ?? [] };\n }\n\n return { text: query, values: values ?? [] };\n }\n\n #exec(query: QueryConfig) {\n const queryFn = this.#opts.query;\n if (!queryFn) throw new Error('Missing query function');\n return queryFn.call(this.#db, query);\n }\n\n async #query<T extends QueryResultRow>(\n args: QueryTemplateOrSimpleQuery,\n ): Promise<pgQueryResult<X, T>> {\n const query = this.#parseQueryTemplateStyle(args);\n\n this.#opts?.beforeQuery?.(query);\n\n const results = await this.#exec(query).catch((e: unknown) => {\n this.#opts?.onError?.(query, e);\n throw e;\n });\n\n if (typeof results.rowCount !== 'number') {\n results.rowCount = results.rows?.length ?? 0;\n }\n\n this.#opts?.afterQuery?.(\n query,\n pick(results, ['command', 'rowCount', 'rows']),\n );\n\n return results as pgQueryResult<X, T>;\n }\n\n // ======================================================================\n // query executors\n\n async insert<T extends QueryResultRow>(\n table: string,\n fv: FieldValues,\n appendix?: string | QueryFragment,\n ) {\n const query = buildInsert(table, fv, appendix);\n return await this.#query<T>([query]);\n }\n\n async update<T extends QueryResultRow>(\n table: string,\n fv: FieldValues,\n where: WhereArg,\n appendix?: string | QueryFragment,\n ) {\n const query = buildUpdate(table, fv, where, appendix);\n return await this.#query<T>([query]);\n }\n\n async delete<T extends QueryResultRow>(\n table: string,\n where: WhereArg,\n appendix?: string | QueryFragment,\n ) {\n const query = buildDelete(table, where, appendix);\n return await this.#query<T>([query]);\n }\n\n async query<T extends QueryResultRow>(...args: QueryTemplateOrSimpleQuery) {\n return this.#query<T>(args);\n }\n\n async getRows<T extends QueryResultRow>(...args: QueryTemplateOrSimpleQuery) {\n return this.#query<T>(args).then((x) => x.rows);\n }\n\n async getRow<T extends QueryResultRow>(...args: QueryTemplateOrSimpleQuery) {\n return this.#query<T>(args).then((x) => x.rows?.[0] as T | undefined);\n }\n\n async getOne<T = unknown>(...args: QueryTemplateOrSimpleQuery) {\n return this.#query<[T]>(args).then(\n (x) => Object.values(x.rows?.[0] ?? {})?.[0] as T | undefined,\n );\n }\n\n async getCount(...args: QueryTemplateOrSimpleQuery) {\n return this.#query(args).then((x) => x.rowCount);\n }\n\n async exec(...args: QueryTemplateOrSimpleQuery) {\n // same as getCount\n return this.#query(args).then((x) => x.rowCount);\n }\n\n async begin<R>(callback: (conn: this) => Promise<R>) {\n if (this.#inTransaction)\n throw new Error('Nested transaction is not supported');\n\n try {\n this.#inTransaction = true;\n await this.#exec({ text: 'BEGIN', values: [] });\n\n const result = await callback(this);\n\n await this.#exec({ text: 'COMMIT', values: [] });\n\n return result;\n } catch (e) {\n await this.#exec({ text: 'ROLLBACK', values: [] });\n throw e;\n } finally {\n this.#inTransaction = false;\n }\n }\n\n // ======================================================================\n // query adapters\n\n // Prisma adapter: NB; It only supports a query return rows\n public static get prisma() {\n return async function <T extends QueryResultRow>(\n this: object,\n { text, values }: QueryConfig,\n ): Promise<QueryResult<T>> {\n if (\n '$queryRawUnsafe' in this &&\n typeof this.$queryRawUnsafe === 'function'\n ) {\n const rows: T[] = await this.$queryRawUnsafe(text, ...values);\n return {\n rows: rows,\n rowCount: rows.length,\n };\n }\n throw new Error('Invalid object');\n };\n }\n\n // TypeORM adapter\n public static get typeorm() {\n return async function <T extends QueryResultRow>(\n this: object,\n { text, values }: QueryConfig,\n ): Promise<QueryResult<T>> {\n if ('query' in this && typeof this.query === 'function') {\n const rows: unknown[] = await this.query(text, values);\n\n // returns with row count\n if (\n rows.length === 2 &&\n Array.isArray(rows[0]) &&\n typeof rows[1] === 'number'\n ) {\n return { rows: rows[0], rowCount: rows[1] };\n }\n\n return {\n rows,\n rowCount: rows.length,\n } as { rows: T[]; rowCount: number };\n }\n throw new Error('Invalid object');\n };\n }\n}\n\ntype Overwrite<T, Q> = Omit<T, keyof Q> & Q;\ntype MethodChainRewrite<T, Q> = {\n [K in keyof T]: T[K] extends (...args: infer R) => T\n ? (...args: R) => Override<T, Q>\n : T[K] extends T\n ? Override<T, Q>\n : T[K];\n};\ntype Override<T, Q> = Overwrite<MethodChainRewrite<T, Q>, Q>;\n\nexport type WithQueryHelper<T extends object = object> = Override<\n T,\n QueryHelper<T>\n>;\n\n/**\n * Returns a proxy object that overrides the queryable instance `db` by Query Helper utilities\n * @param db - Queryable object to be wrapped\n */\nexport function withQueryHelper<T extends Queryable<object>>(\n db: T,\n opts?: QueryHelperOptions & Partial<QueryableWithThis<T>>,\n): WithQueryHelper<T>;\nexport function withQueryHelper<T extends object>(\n db: T,\n opts: QueryHelperOptions & QueryableWithThis<T>,\n): WithQueryHelper<T>;\nexport function withQueryHelper<T extends object>(\n db: T,\n opts?: QueryHelperOptions & Partial<QueryableWithThis<T>>,\n): WithQueryHelper<T> {\n const qh = new QueryHelper<T>(db, opts);\n const proxy: unknown = new Proxy(db, {\n get(db, key, receiver) {\n const target = key in qh ? qh : key in db ? db : undefined;\n const value = target && Reflect.get(target, key);\n\n if (value && value instanceof Function) {\n return function (this: unknown, ...args: unknown[]) {\n const result = value.apply(this === receiver ? target : this, args);\n return result === db ? proxy : result;\n };\n }\n\n return value === db ? proxy : value;\n },\n });\n\n return proxy as WithQueryHelper<T>;\n}\n"],
5
+ "mappings": "yXAAA,IAAMA,GAAmB,CAEvB,SACA,SACA,MACA,iBACA,UACA,UACA,MACA,MACA,QACA,KACA,MACA,gBACA,SACA,UACA,SACA,eACA,OACA,WACA,OACA,OACA,QACA,UACA,SACA,aACA,SACA,cACA,QACA,eACA,eACA,oBACA,eACA,kBACA,UACA,aACA,UACA,SACA,QACA,WACA,OACA,UACA,WACA,KACA,OACA,cACA,SACA,SACA,UACA,aACA,MACA,SACA,WACA,QACA,MACA,UACA,SACA,OACA,OACA,gBACA,gBACA,QACA,QACA,OACA,SACA,WACA,SACA,QACA,KACA,YACA,QACA,YACA,OACA,KACA,SACA,OACA,UACA,OACA,OACA,QACA,YACA,iBACA,MACA,OACA,MACA,OACA,QACA,WACA,WACA,UACA,UACA,MACA,MACA,UACA,OACA,QACA,MACA,UACA,SACA,MACA,KACA,OACA,OACA,KACA,QACA,QACA,WACA,WACA,YACA,UACA,UACA,UACA,MACA,YACA,UACA,aACA,YACA,SACA,UACA,QACA,SACA,eACA,UACA,OACA,UACA,SACA,QACA,MACA,OACA,UACA,UACA,OACA,KACA,MACA,WACA,OACA,kBACA,QACA,SACA,OACA,QACA,UACA,SACA,OACA,QACA,OACA,SACF,EAEO,SAASC,EAAWC,EAAY,CACrC,OACEA,EAAG,MAAM,2BAA2B,GACpC,CAACF,GAAiB,SAASE,EAAG,YAAY,CAAC,EAEpCA,EAEF,IAAIA,EAAG,QAAQ,KAAM,IAAI,CAAC,GACnC,CAEO,SAASC,EAAaC,EAAW,CAEtC,MAAO,GADQA,EAAE,SAAS,GAAG,EAAI,IAAM,EACvB,IAAIA,EAAE,QAAQ,KAAM,IAAI,EAAE,QAAQ,MAAO,MAAM,CAAC,GAClE,CCvJO,SAASC,GAAQC,EAAW,CAEjC,OAAOA,EACJ,MAAM,GAAG,EACT,IAAKC,GAAMC,EAAWD,CAAC,CAAC,EACxB,KAAK,GAAG,CACb,CAGO,SAASE,EAASH,EAAoB,CAC3C,OAAIA,IAAM,KAAa,OACnB,OAAOA,GAAM,UAAkBA,EAAI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",
6
+ "names": ["reservedKeywords", "quoteIdent", "id", "quoteLiteral", "s", "pgIdent", "s", "x", "quoteIdent", "pgString", "quoteLiteral", "QueryFragmentBase", "values", "text", "embed", "_value", "QueryFragmentValue", "value", "__privateAdd", "__privateSet", "opts", "__privateGet", "_ident", "QueryFragmentIdent", "ident", "_string", "QueryFragmentRawString", "isQueryFragment", "makeIdent", "name", "makeValue", "makeRaw", "QueryFragments", "makeJsonValue", "isQueryTemplateStyle", "args", "texts", "sewTemplateTextsAndValues", "idx", "_list", "_opts", "prefix", "glue", "suffix", "empty", "children", "sql", "fragments", "raw", "json", "wrapperFn", "buildClauses", "clauses", "parse", "val", "key", "OR", "fv", "AND", "WHERE", "WHERE_OR", "UNION_ALL", "UNION", "LIMIT", "limit", "OFFSET", "offset", "buildValues", "fvs", "array", "sig", "arg", "v", "buildKeys", "_", "ks", "buildInsert", "table", "appendix", "keys", "buildUpdate", "where", "pairs", "k", "buildDelete", "or", "and", "WHERE_AND", "where_and", "where_or", "pick", "target", "keys", "k", "_db", "_opts", "_inTransaction", "_QueryHelper_instances", "parseQueryTemplateStyle_fn", "exec_fn", "query_fn", "QueryHelper", "db", "opts", "__privateAdd", "__privateSet", "__privateGet", "table", "fv", "appendix", "query", "buildInsert", "__privateMethod", "where", "buildUpdate", "buildDelete", "args", "x", "callback", "result", "e", "text", "values", "rows", "isQueryTemplateStyle", "texts", "sql", "queryFn", "results", "withQueryHelper", "qh", "proxy", "key", "receiver", "value"]
7
7
  }
@@ -11,7 +11,13 @@ export type QueryConfig = {
11
11
  values: unknown[];
12
12
  embed?: string;
13
13
  };
14
- export type QueryableFunction<T extends object> = (this: T, queryConfig: QueryConfig) => Promise<QueryResult<QueryResultRow>>;
14
+ type QueryableFunctionReturnType = Promise<QueryResult<QueryResultRow>>;
15
+ type QueryableFunctionWithoutThis = (queryConfig: QueryConfig) => QueryableFunctionReturnType;
16
+ type QueryableFunctionWithThis<T extends object> = (this: T, queryConfig: QueryConfig) => QueryableFunctionReturnType;
17
+ type QueryableWithThis<T extends object> = {
18
+ query: QueryableFunctionWithThis<T>;
19
+ };
20
+ export type QueryableFunction<T extends object> = QueryableFunctionWithoutThis | QueryableFunctionWithThis<T>;
15
21
  export type Queryable<T extends object> = {
16
22
  query: QueryableFunction<T>;
17
23
  };
@@ -20,19 +26,18 @@ type pgQueryResult<X, T extends QueryResultRow> = (X extends {
20
26
  } ? pg.QueryResult<T> : QueryResult<T>) & {
21
27
  rowCount: number;
22
28
  };
23
- type QueryHelperOptions<X extends object> = {
29
+ type QueryHelperOptions = {
24
30
  beforeQuery?: <T extends QueryConfig>(ctx: T) => void;
25
- afterQuery?: <T extends QueryConfig>(ctx: T) => void;
31
+ afterQuery?: <T extends QueryConfig, R extends QueryResultRow>(ctx: T, r: QueryResult<R>) => void;
26
32
  onError?: <T extends QueryConfig>(ctx: T, e: unknown) => void;
27
- query?: QueryableFunction<X>;
28
33
  };
29
34
  type QueryTemplateOrSimpleQuery = QueryTemplateStyle | [query: string, values?: unknown[]] | [query: pg.QueryConfig<unknown[]>];
30
35
  /**
31
36
  * Query Helper
32
37
  */
33
- export declare class QueryHelper<X extends object> {
38
+ export declare class QueryHelper<X extends object = object> {
34
39
  #private;
35
- constructor(db: X, opts?: QueryHelperOptions<X>);
40
+ constructor(db: X, opts?: QueryHelperOptions & Partial<Queryable<X>>);
36
41
  insert<T extends QueryResultRow>(table: string, fv: FieldValues, appendix?: string | QueryFragment): Promise<pgQueryResult<X, T>>;
37
42
  update<T extends QueryResultRow>(table: string, fv: FieldValues, where: WhereArg, appendix?: string | QueryFragment): Promise<pgQueryResult<X, T>>;
38
43
  delete<T extends QueryResultRow>(table: string, where: WhereArg, appendix?: string | QueryFragment): Promise<pgQueryResult<X, T>>;
@@ -42,19 +47,20 @@ export declare class QueryHelper<X extends object> {
42
47
  getOne<T = unknown>(...args: QueryTemplateOrSimpleQuery): Promise<T | undefined>;
43
48
  getCount(...args: QueryTemplateOrSimpleQuery): Promise<number>;
44
49
  exec(...args: QueryTemplateOrSimpleQuery): Promise<number>;
45
- static get prisma(): <T extends pg.QueryResultRow>(this: object, { text, values }: QueryConfig) => Promise<QueryResult<T>>;
46
- static get typeorm(): <T extends pg.QueryResultRow>(this: object, { text, values }: QueryConfig) => Promise<QueryResult<T>>;
50
+ begin<R>(callback: (conn: this) => Promise<R>): Promise<R>;
51
+ static get prisma(): <T extends QueryResultRow>(this: object, { text, values }: QueryConfig) => Promise<QueryResult<T>>;
52
+ static get typeorm(): <T extends QueryResultRow>(this: object, { text, values }: QueryConfig) => Promise<QueryResult<T>>;
47
53
  }
48
54
  type Overwrite<T, Q> = Omit<T, keyof Q> & Q;
49
55
  type MethodChainRewrite<T, Q> = {
50
56
  [K in keyof T]: T[K] extends (...args: infer R) => T ? (...args: R) => Override<T, Q> : T[K] extends T ? Override<T, Q> : T[K];
51
57
  };
52
58
  type Override<T, Q> = Overwrite<MethodChainRewrite<T, Q>, Q>;
53
- export type WithQueryHelper<T extends object> = Override<T, QueryHelper<T>>;
59
+ export type WithQueryHelper<T extends object = object> = Override<T, QueryHelper<T>>;
54
60
  /**
55
61
  * Returns a proxy object that overrides the queryable instance `db` by Query Helper utilities
56
62
  * @param db - Queryable object to be wrapped
57
63
  */
58
- export declare function withQueryHelper<T extends Queryable<T>>(db: T, opts?: QueryHelperOptions<T>): WithQueryHelper<T>;
59
- export declare function withQueryHelper<T extends object>(db: T, opts: Overwrite<QueryHelperOptions<T>, Queryable<T>>): WithQueryHelper<T>;
64
+ export declare function withQueryHelper<T extends Queryable<object>>(db: T, opts?: QueryHelperOptions & Partial<QueryableWithThis<T>>): WithQueryHelper<T>;
65
+ export declare function withQueryHelper<T extends object>(db: T, opts: QueryHelperOptions & QueryableWithThis<T>): WithQueryHelper<T>;
60
66
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "query-weaver",
3
- "version": "0.1.4",
3
+ "version": "0.2.0-alpha.0",
4
4
  "description": "SQL query builder using template string literal",
5
5
  "main": "./dist/index.cjs.js",
6
6
  "module": "./dist/index.esm.mjs",
@@ -23,31 +23,27 @@
23
23
  "build:esbuild": "node -r esbuild-register build.ts",
24
24
  "build:types": "tsc --declaration --emitDeclarationOnly --declarationDir './dist'",
25
25
  "prepack": "pnpm run build && pnpm run test",
26
- "format": "prettier --check . --ignore-path .prettierignore",
27
- "format:fix": "pnpm run format --write",
28
- "lint": "eslint src --ext .ts --ignore-path .prettierignore",
29
- "lint:fix": "pnpm run lint --fix",
26
+ "format": "biome format ./src",
27
+ "format:fix": "biome format ./src --write",
28
+ "lint": "biome lint ./src",
29
+ "lint:fix": "biome lint ./src --write",
30
30
  "type-check": "tsc --noEmit -p tsconfig.json",
31
- "prepare": "husky install"
31
+ "prepare": "husky"
32
32
  },
33
33
  "author": "kikuchan98@gmail.com",
34
34
  "homepage": "https://github.com/kikuchan/query-weaver#readme",
35
35
  "license": "MIT",
36
36
  "devDependencies": {
37
- "@types/pg": "^8.11.2",
38
- "@typescript-eslint/eslint-plugin": "^7.2.0",
39
- "@typescript-eslint/parser": "^7.2.0",
40
- "esbuild": "^0.20.2",
41
- "esbuild-node-externals": "^1.13.0",
42
- "esbuild-register": "^3.5.0",
43
- "eslint": "^8.57.0",
44
- "eslint-config-prettier": "^9.1.0",
45
- "husky": "^9.0.11",
46
- "lint-staged": "^15.2.2",
47
- "pg": "^8.11.3",
48
- "prettier": "^3.2.5",
49
- "rimraf": "^5.0.5",
50
- "typescript": "^5.4.2",
51
- "vitest": "^1.4.0"
37
+ "@biomejs/biome": "^1.9.4",
38
+ "@types/pg": "^8.11.11",
39
+ "esbuild": "^0.25.0",
40
+ "esbuild-node-externals": "^1.18.0",
41
+ "esbuild-register": "^3.6.0",
42
+ "husky": "^9.1.7",
43
+ "lint-staged": "^15.4.3",
44
+ "pg": "^8.13.3",
45
+ "rimraf": "^6.0.1",
46
+ "typescript": "^5.7.3",
47
+ "vitest": "^3.0.5"
52
48
  }
53
49
  }