query-weaver 0.2.0-alpha.0 → 0.2.0-alpha.2
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/README.md +1 -1
- package/dist/index.cjs.js +2 -1
- package/dist/index.cjs.js.map +4 -4
- package/dist/index.esm.mjs +2 -1
- package/dist/index.esm.mjs.map +4 -4
- package/dist/query-helper.d.ts +81 -0
- package/dist/query-weaver.d.ts +38 -9
- package/dist/string-reader.d.ts +10 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -249,7 +249,7 @@ import zlib from 'node:zlib'
|
|
|
249
249
|
const db = withQueryHelper(new pg.Pool(), {
|
|
250
250
|
onError: (ctx, error) => console.error(JSON.stringify({ error: zlib.gzipSync(JSON.stringify({ ... ctx, error })).toString('base64') })),
|
|
251
251
|
beforeQuery: (ctx) => console.log(JSON.stringify({ query: zlib.gzipSync(JSON.stringify(ctx)).toString('base64') })),
|
|
252
|
-
afterQuery: (ctx) => console.log(JSON.stringify({ result: zlib.gzipSync(JSON.stringify(ctx)).toString('base64') })),
|
|
252
|
+
afterQuery: (ctx, result) => console.log(JSON.stringify({ result: zlib.gzipSync(JSON.stringify({ ... ctx, result })).toString('base64') })),
|
|
253
253
|
});
|
|
254
254
|
```
|
|
255
255
|
|
package/dist/index.cjs.js
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
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});
|
|
1
|
+
"use strict";var K=Object.defineProperty;var Oe=Object.getOwnPropertyDescriptor;var Se=Object.getOwnPropertyNames;var xe=Object.prototype.hasOwnProperty;var ie=e=>{throw TypeError(e)};var be=(e,n)=>{for(var t in n)K(e,t,{get:n[t],enumerable:!0})},Le=(e,n,t,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let i of Se(n))!xe.call(e,i)&&i!==t&&K(e,i,{get:()=>n[i],enumerable:!(r=Oe(n,i))||r.enumerable});return e};var Ne=e=>Le(K({},"__esModule",{value:!0}),e);var X=(e,n,t)=>n.has(e)||ie("Cannot "+t);var u=(e,n,t)=>(X(e,n,"read from private field"),t?t.call(e):n.get(e)),p=(e,n,t)=>n.has(e)?ie("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(e):n.set(e,t),y=(e,n,t,r)=>(X(e,n,"write to private field"),r?r.call(e,t):n.set(e,t),t),o=(e,n,t)=>(X(e,n,"access private method"),t);var P=(e,n,t,r)=>({set _(i){y(e,n,i,t)},get _(){return u(e,n,r)}});var je={};be(je,{AND:()=>z,LIMIT:()=>ge,OFFSET:()=>he,OR:()=>J,QueryFragments:()=>g,QueryHelper:()=>_,UNION:()=>fe,UNION_ALL:()=>ce,WHERE:()=>R,WHERE_AND:()=>Ee,WHERE_OR:()=>ee,and:()=>de,buildClauses:()=>U,buildDelete:()=>v,buildInsert:()=>M,buildKeys:()=>ne,buildUpdate:()=>V,buildValues:()=>te,ident:()=>pe,isQueryFragment:()=>x,isQueryTemplateStyle:()=>k,json:()=>ye,or:()=>Te,pgIdent:()=>ae,pgString:()=>I,raw:()=>$,sql:()=>s,where:()=>me,where_and:()=>we,where_or:()=>Qe,withQueryHelper:()=>Ue});module.exports=Ne(je);var Fe=["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 ue(e){return e.match(/^[a-zA-Z_][0-9a-zA-Z_$]*$/)&&!Fe.includes(e.toUpperCase())?e:`"${e.replace(/"/g,'""')}"`}function D(e){return`${e.includes("'")?"E":""}'${e.replace(/'/g,"''").replace(/\\/g,"\\\\")}'`}var E,f,A,H=class{constructor(n){p(this,E);p(this,f,0);p(this,A);y(this,E,n),y(this,A,n.length)}match(n,t){if(this.eof())return!1;let r=u(this,E).slice(u(this,f)),i=typeof n=="string"?r.startsWith(n)&&[n]:r.match(new RegExp(n,"y"));return i?(t?.(i,u(this,f)),this.skip(i[0].length),i):!1}skipUntil(n){if(this.eof())return!1;let t=u(this,E).slice(u(this,f)),r=typeof n=="string"?t.indexOf(n):t.search(n);return r<0?!1:(this.skip(r),!0)}read(n){if(this.eof())return"";n=n??1;let t=u(this,E).slice(u(this,f),u(this,f)+n);return this.skip(n),t}skip(n){y(this,f,u(this,f)+Math.min(n??1,u(this,A)-u(this,f)))}eof(){return u(this,A)<=u(this,f)}get position(){return u(this,f)}};E=new WeakMap,f=new WeakMap,A=new WeakMap;function ae(e,n){return e.split(".").map(t=>ue(t)).join(".")}function I(e,n){return e===null?"NULL":typeof e=="boolean"?e?"true":"false":Array.isArray(e)?"ARRAY["+e.map(t=>I(t)).join(",")+"]":typeof e=="object"?"toJSON"in e&&typeof e.toJSON=="function"?D(e.toJSON()):D(e.toString()):D(String(e))}function Ce(e,n){let t=new H(n);for(;!t.eof();)if(e.dollarQuoted){if(!t.skipUntil(e.dollarQuoted))break;t.skip(e.dollarQuoted.length),e.dollarQuoted=void 0}else if(e.inEscapedSingleQuote){if(!t.skipUntil(/[\\']/))break;if(t.match("''"))continue;if(t.match("\\")){t.skip();continue}t.skip(),e.inEscapedSingleQuote=!1}else if(e.inSingleQuote){if(!t.skipUntil("'"))break;if(t.match("''"))continue;t.skip(),e.inSingleQuote=!1}else if(e.inBlockComment){if(!t.skipUntil(/\/\*|\*\//))break;if(t.match("/*",()=>e.inBlockComment++))continue;t.skip(2),e.inBlockComment--}else if(e.inLineComment){if(!t.skipUntil(`
|
|
2
|
+
`))break;t.skip(),e.inLineComment=!1}else{if(!t.skipUntil(/[-$E'/]/))break;if(t.match(/\$[a-zA-Z]*\$/,r=>e.dollarQuoted=r[0])||t.match("E'",()=>e.inEscapedSingleQuote=!0)||t.match("'",()=>e.inSingleQuote=!0)||t.match("--",()=>e.inLineComment=!0)||t.match("/*",()=>e.inBlockComment=1))continue;t.skip()}}function Ie(e){return e?!!(e.dollarQuoted||e.inLineComment||e.inBlockComment||e.inSingleQuote||e.inEscapedSingleQuote):!1}var m,O,w=class{constructor(){p(this,m);this.text="";this.values=[];this.sql="";this.statement="";this.embed="";Object.defineProperties(this,{text:{enumerable:!0,get:()=>{let n=1;return o(this,m,O).call(this,()=>"$"+n++)}},values:{enumerable:!0,get:()=>{let n=[];return o(this,m,O).call(this,t=>(n.push(t),"")),n}},sql:{enumerable:!0,get:()=>o(this,m,O).call(this,()=>"?")},statement:{enumerable:!0,get:()=>{let n=1;return o(this,m,O).call(this,()=>":"+n++)}},embed:{enumerable:!0,get:()=>o(this,m,O).call(this,n=>I(n))}})}};m=new WeakSet,O=function(n){return this.toString({valueFn:(t,r)=>Ie(r)?"":n(t),context:{},contextHandler:Ce})};var N,Y=class extends w{constructor(t){super();p(this,N);y(this,N,t)}toString(t){return(t?.valueFn??I)(u(this,N),t?.context)}};N=new WeakMap;var F,G=class extends w{constructor(t){super();p(this,F);y(this,F,t)}toString(t){return(t?.identFn??ae)(u(this,F),t?.context)}};F=new WeakMap;var S,Z=class extends w{constructor(t){super();p(this,S);y(this,S,String(t))}toString(t){return t?.context&&t?.contextHandler&&t.contextHandler(t.context,u(this,S)),u(this,S)}};S=new WeakMap;function x(e){return e instanceof w}function h(e){return new G(e)}function se(e){return typeof e>"u"||x(e)?e:new Y(e)}function Q(e){return typeof e>"u"||x(e)?e:Array.isArray(e)?new g(e.map(Q)):new Z(e)}function oe(e){return typeof e>"u"||x(e)?e:Q(JSON.stringify(e))}var k=e=>{if(!Array.isArray(e)||typeof e?.[0]!="object"||e[0]===null||!("raw"in e[0])||!Array.isArray(e[0]))return!1;let[n,...t]=e;return n.length-1===t.length};function le(e,n){if(e.length-1!==n.length)throw new Error("Invalid call of the function");return e.flatMap((t,r)=>r?[n[r-1],t]:[t])}var C,a,g=class extends w{constructor(...t){super();p(this,C,[]);p(this,a);if(y(this,a,{prefix:"",glue:"",suffix:"",empty:"",wrapperFn:r=>r}),Array.isArray(t[0])){let[r,i]=t;y(this,a,{...u(this,a),...i}),this.push(...r)}else{let[r]=t;y(this,a,{...u(this,a),...r})}}setSewingPattern(t="",r="",i="",c=""){return y(this,a,{...u(this,a),prefix:t,glue:r,suffix:i,empty:c}),this}push(...t){return u(this,C).push(...t.map(Q).filter(r=>r!==void 0)),this}append(...t){return this.push(...t)}join(t=", "){return u(this,a).glue=t,this}prefix(t=" "){return u(this,a).prefix=t,this}suffix(t=" "){return u(this,a).suffix=t,this}empty(t=""){return u(this,a).empty=t,this}toString(t){let r=u(this,C).map(i=>i.toString(t)).filter(i=>i).join(u(this,a).glue);return r?u(this,a).prefix+u(this,a).wrapperFn(r,t)+u(this,a).suffix:u(this,a).empty}};C=new WeakMap,a=new WeakMap;function s(...e){let n;if(k(e)){let[t,...r]=e;n=[new g(le(t.map(Q),r.map(se)))]}else n=e.map(se);return new g(n)}var pe=h;function $(...e){return new g(e.map(Q))}function ye(...e){let n,t=(r,i)=>(i?.valueFn||I)(r,i?.context);if(k(e)){let[r,...i]=e;n=[new g(le(r.map(Q),i.map(oe)),{wrapperFn:t})]}else n=e.map(r=>new g([oe(r)],{wrapperFn:t}));return new g(n)}function U(...e){let n=new g,t=r=>{if(r!==void 0&&r!==null){if(typeof r=="string"){n.push(Q(r));return}if(x(r)){n.push(r);return}if(Array.isArray(r)){r.forEach(t);return}if(typeof r=="object"){for(let i in r)if(r[i]!==void 0){if(x(r[i])){n.push(s`${h(i)} ${r[i]}`);continue}if(r[i]===null){n.push(s`${h(i)} IS NULL`);continue}if(Array.isArray(r[i])){n.push(s`${h(i)} = ANY (${r[i]})`);continue}n.push(s`${h(i)} = ${r[i]}`)}return}}};return t(e),n}function J(...e){return U(e).setSewingPattern("((",") OR (","))","")}function z(...e){return U(e).setSewingPattern("((",") AND (","))","")}function R(...e){return U(e).setSewingPattern("WHERE ((",") AND (","))","")}function ee(...e){return U(e).setSewingPattern("WHERE ((",") OR (","))","")}function ce(...e){return $(...e).join(" UNION ALL ")}function fe(...e){return $(...e).join(" UNION ")}function ge(e){return e==null?s``:(e=Number(e),e>0?s`LIMIT ${e}`:s``)}function he(e){return e==null?s``:(e=Number(e),e>=0?s`OFFSET ${e}`:s``)}function te(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 n=e.map(i=>typeof i=="object"?Object.values(i):i),t=n[0].length;if(n.some(i=>i.length!==t))throw new Error("buildValues: Array must all be the same length");let r=s(...n.map(i=>s(...i).join(", "))).setSewingPattern("(","), (",")");return s`VALUES ${r}`}function ne(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(r=>Object.fromEntries(Object.entries(r).filter(([i,c])=>c!==void 0)));let n=Object.keys(e[0]),t=n.join();if(e.some(r=>Object.keys(r).join()!==t))throw new Error("buildKeys: All objects must have the same keys");return s(...n.map(h)).setSewingPattern("(",", ",")")}function M(e,n,t){Array.isArray(n)||(n=[n]);let r=ne(n),i=te(n.map(Object.values));return s`INSERT INTO ${h(e)} ${r} ${i}`.append(t).join(" ")}function V(e,n,t,r){let i=new g;for(let c in n){let q=n[c];q!==void 0&&i.push(s`${h(c)} = ${q}`)}return s`UPDATE ${h(e)} SET ${i.join(", ")} ${R(t)}`.append(r).join(" ")}function v(e,n,t){return s`DELETE FROM ${h(e)} ${R(n)}`.append(t).join(" ")}var Te=J,de=z,me=R,Ee=R,we=R,Qe=ee;s.raw=$;s.ident=pe;s.json=ye;s.WHERE=R;s.WHERE_AND=Ee;s.WHERE_OR=ee;s.AND=z;s.OR=J;s.where=me;s.where_and=we;s.where_or=Qe;s.and=de;s.or=Te;s.insert=M;s.update=V;s.delete=v;s.keys=ne;s.values=te;s.UNION_ALL=ce;s.UNION=fe;s.LIMIT=ge;s.OFFSET=he;function ke(e,n){return Object.fromEntries(n.map(t=>[t,e[t]]))}var W,d,b,l,Re,j,T,_=class{constructor(n,t={}){p(this,l);p(this,W);p(this,d);p(this,b,0);if(y(this,W,n),y(this,d,{...t}),!u(this,d).query){if(!("query"in n)||typeof n.query!="function")throw new Error("Invalid or no query functionn is specified");u(this,d).query=n.query}}async insert(n,t,r){let i=M(n,t,r);return await o(this,l,T).call(this,[i])}async update(n,t,r,i){let c=V(n,t,r,i);return await o(this,l,T).call(this,[c])}async delete(n,t,r){let i=v(n,t,r);return await o(this,l,T).call(this,[i])}async query(...n){return o(this,l,T).call(this,n)}async getRows(...n){return o(this,l,T).call(this,n).then(t=>t.rows)}async getRow(...n){return o(this,l,T).call(this,n).then(t=>t.rows?.[0])}async getOne(...n){return o(this,l,T).call(this,n).then(t=>Object.values(t.rows?.[0]??{})?.[0])}async getCount(...n){return o(this,l,T).call(this,n).then(t=>t.rowCount)}async exec(...n){return o(this,l,T).call(this,n).then(t=>t.rowCount)}async begin(n){try{P(this,b)._++||await o(this,l,j).call(this,{text:"BEGIN",values:[]});let t=await n(this);return--P(this,b)._||await o(this,l,j).call(this,{text:"COMMIT",values:[]}),t}catch(t){throw--P(this,b)._||await o(this,l,j).call(this,{text:"ROLLBACK",values:[]}),t}}static get prisma(){return async function({text:n,values:t}){if("$queryRawUnsafe"in this&&typeof this.$queryRawUnsafe=="function"){let r=await this.$queryRawUnsafe(n,...t);return{rows:r,rowCount:r.length}}throw new Error("Invalid object")}}static get typeorm(){return async function({text:n,values:t}){if("query"in this&&typeof this.query=="function"){let r=await this.query(n,t);return r.length===2&&Array.isArray(r[0])&&typeof r[1]=="number"?{rows:r[0],rowCount:r[1]}:{rows:r,rowCount:r.length}}throw new Error("Invalid object")}}};W=new WeakMap,d=new WeakMap,b=new WeakMap,l=new WeakSet,Re=function(n){if(k(n)){let[i,...c]=n;return s(i,...c)}let[t,r]=n;return typeof t=="object"&&t&&"text"in t?{...t,values:t.values??[]}:{text:t,values:r??[]}},j=function(n){let t=u(this,d).query;if(!t)throw new Error("Missing query function");return t.call(u(this,W),n)},T=async function(n){let t=o(this,l,Re).call(this,n);u(this,d)?.beforeQuery?.(t);let r=await o(this,l,j).call(this,t).catch(i=>{throw u(this,d)?.onError?.(t,i),i});return typeof r.rowCount!="number"&&(r.rowCount=r.rows?.length??0),u(this,d)?.afterQuery?.(t,ke(r,["command","rowCount","rows"])),r};function Ue(e,n){let t=new _(e,n),r=new Proxy(e,{get(i,c,q){let B=c in t?t:c in i?i:void 0,L=B&&Reflect.get(B,c);return L&&L instanceof Function?function(...Ae){let re=L.apply(this===q?B:this,Ae);return re===i?r:re}:L===i?r:L}});return r}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
3
|
//# sourceMappingURL=index.cjs.js.map
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 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\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", "
|
|
3
|
+
"sources": ["../src/index.ts", "../src/quote.ts", "../src/string-reader.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", "export class StringReader {\n #s: string;\n #pos: number = 0;\n #length: number;\n\n constructor(s: string) {\n this.#s = s;\n this.#length = s.length;\n }\n\n match(m: string | RegExp, cb?: (m: string[], pos: number) => void) {\n if (this.eof()) return false;\n\n const sliced = this.#s.slice(this.#pos);\n\n const matched =\n typeof m === 'string'\n ? sliced.startsWith(m) && [m]\n : sliced.match(new RegExp(m, 'y'));\n if (matched) {\n cb?.(matched, this.#pos);\n this.skip(matched[0].length);\n return matched;\n }\n return false;\n }\n\n skipUntil(m: string | RegExp) {\n if (this.eof()) return false;\n\n const sliced = this.#s.slice(this.#pos);\n const pos = typeof m === 'string' ? sliced.indexOf(m) : sliced.search(m);\n if (pos < 0) return false;\n this.skip(pos);\n return true;\n }\n\n read(n?: number) {\n if (this.eof()) return '';\n\n n = n ?? 1;\n const result = this.#s.slice(this.#pos, this.#pos + n);\n this.skip(n);\n return result;\n }\n\n skip(n?: number) {\n this.#pos += Math.min(n ?? 1, this.#length - this.#pos);\n }\n\n eof() {\n return this.#length <= this.#pos;\n }\n\n get position() {\n return this.#pos;\n }\n}\n", "import { quoteIdent, quoteLiteral } from './quote';\nimport { StringReader } from './string-reader';\n\ntype Context = {\n inLineComment?: boolean;\n inBlockComment?: number;\n inSingleQuote?: boolean;\n inEscapedSingleQuote?: boolean;\n dollarQuoted?: string;\n};\n\ntype EscapeFunction = (v: unknown, context?: Context) => string;\nexport type FieldValues = Record<string, unknown>;\nexport type WhereArg =\n | string\n | FieldValues\n | QueryFragment\n | undefined\n | WhereArg[];\n\nexport function pgIdent(s: string, _ctx?: Context) {\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, _ctx?: Context): string {\n if (s === null) return 'NULL';\n if (typeof s === 'boolean') return s ? 'true' : 'false';\n if (Array.isArray(s))\n return 'ARRAY[' + s.map((e) => pgString(e)).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\nfunction pgContextHandler(ctx: Context, src: string): void {\n const r = new StringReader(src);\n\n while (!r.eof()) {\n if (ctx.dollarQuoted) {\n if (!r.skipUntil(ctx.dollarQuoted)) break;\n\n r.skip(ctx.dollarQuoted.length);\n ctx.dollarQuoted = undefined;\n } else if (ctx.inEscapedSingleQuote) {\n if (!r.skipUntil(/[\\\\']/)) break;\n if (r.match(\"''\")) continue; // ignore double single-quote\n if (r.match('\\\\')) {\n r.skip(); // just skip the escaped letter\n continue;\n }\n\n // must be the ending single-quote\n r.skip();\n ctx.inEscapedSingleQuote = false;\n } else if (ctx.inSingleQuote) {\n if (!r.skipUntil(\"'\")) break;\n if (r.match(\"''\")) continue; // ignore double single-quote\n\n // must be the ending single-quote\n r.skip();\n ctx.inSingleQuote = false;\n } else if (ctx.inBlockComment) {\n if (!r.skipUntil(/\\/\\*|\\*\\//)) break;\n if (r.match('/*', () => ctx!.inBlockComment!++)) continue;\n\n r.skip(2);\n ctx.inBlockComment--;\n } else if (ctx.inLineComment) {\n if (!r.skipUntil('\\n')) break;\n\n r.skip();\n ctx.inLineComment = false;\n } else {\n if (!r.skipUntil(/[-$E'/]/)) break;\n\n if (r.match(/\\$[a-zA-Z]*\\$/, (m) => (ctx.dollarQuoted = m[0]))) continue;\n if (r.match(\"E'\", () => (ctx.inEscapedSingleQuote = true))) continue;\n if (r.match(\"'\", () => (ctx.inSingleQuote = true))) continue;\n if (r.match('--', () => (ctx.inLineComment = true))) continue;\n if (r.match('/*', () => (ctx.inBlockComment = 1))) continue;\n\n r.skip();\n }\n }\n}\n\nfunction shouldIgnoreValue(ctx?: Context) {\n if (!ctx) return false;\n\n return !!(\n ctx.dollarQuoted ||\n ctx.inLineComment ||\n ctx.inBlockComment ||\n ctx.inSingleQuote ||\n ctx.inEscapedSingleQuote\n );\n}\n\ntype QueryFragmentToStringOptions = {\n valueFn?: EscapeFunction;\n identFn?: EscapeFunction;\n context: Context;\n contextHandler?: (ctx: Context, s: string) => void;\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 text: string = '';\n values: unknown[] = [];\n sql: string = '';\n statement: string = '';\n embed: string = '';\n\n #compile(valueFn: (x: unknown) => string) {\n return this.toString({\n valueFn: (x, context) => {\n if (shouldIgnoreValue(context)) return '';\n return valueFn(x);\n },\n context: {},\n contextHandler: pgContextHandler,\n });\n }\n\n constructor() {\n Object.defineProperties(this, {\n text: {\n enumerable: true,\n get: () => {\n let idx = 1;\n return this.#compile(() => '$' + idx++);\n },\n },\n\n values: {\n enumerable: true,\n get: () => {\n const values: unknown[] = [];\n this.#compile((x) => (values.push(x), ''));\n return values;\n },\n },\n\n sql: {\n enumerable: true,\n get: () => {\n return this.#compile(() => '?');\n },\n },\n\n statement: {\n enumerable: true,\n get: () => {\n let idx = 1;\n return this.#compile(() => ':' + idx++);\n },\n },\n\n embed: {\n enumerable: true,\n get: () => {\n return this.#compile((x) => pgString(x));\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, opts?.context);\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, opts?.context);\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(opts?: QueryFragmentToStringOptions) {\n if (opts?.context && opts?.contextHandler) {\n opts.contextHandler(opts.context, this.#string);\n }\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\n/**\n * SQL template tag\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\n/**\n * Example:\n * SELECT * FROM ${ident('test.table')}\n * => SELECT * FROM \"test\".\"table\"\n */\nexport const ident = makeIdent;\n\n/**\n * Raw string injection\n */\nexport function raw(...args: unknown[]) {\n return new QueryFragments(args.map(makeRaw));\n}\n\n/**\n * JSON injector\n *\n * Example 1:\n * json({ obj: 'abc' )\n * => '{\"obj\": \"abc\"}'\n *\n * Example 2:\n * json\uFF40{\"obj\": ${ 'abc' }}\uFF40\n * => '{\"obj\": \"abc\"}'\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, opts?.context);\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: number = 0;\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 /**\n * INSERT builder\n *\n * @example\n * await db.insert('table', { name: 'myname' }, 'RETURNING *');\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 /**\n * UPDATE builder\n *\n * @example\n * await db.update('table', { name: 'myname' }, { id: 'root' }, 'RETURNING *');\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 /**\n * DELETE builder\n *\n * @example\n * await db.delete('table', { id: 'root' }, 'RETURNING *');\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 /**\n * Execute query with query-weaver\n *\n * It's equivalent to ```db.query(sql`...`)```\n *\n * @example\n * const { rows } = await db.query`SELECT * FROM table WHERE id = ${id}`\n */\n async query<T extends QueryResultRow>(...args: QueryTemplateOrSimpleQuery) {\n return this.#query<T>(args);\n }\n\n /**\n * Get rows directly\n *\n * @example\n * const rows = await db.getRows`SELECT * FROM table WHERE id = ${id}`\n * => [{ id: 10, name: '...' }, ...]\n */\n async getRows<T extends QueryResultRow>(...args: QueryTemplateOrSimpleQuery) {\n return this.#query<T>(args).then((x) => x.rows);\n }\n\n /**\n * Get a single row directly\n *\n * @example\n * const row = await db.getRow`SELECT * FROM table WHERE id = ${id}`\n * => { id: 10, name: '...' }\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 /**\n * Get a single value directly\n *\n * @example\n * const value = await db.getRow`SELECT 10`\n * => 10\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 /**\n * Get rowCount directly\n *\n * @example\n * const numRows = await db.getCount`SELECT * FROM table`\n * => 10\n */\n async getCount(...args: QueryTemplateOrSimpleQuery) {\n return this.#query(args).then((x) => x.rowCount);\n }\n\n /**\n * Execute a single statement\n * (It's equivalent to getCount)\n *\n * @example\n * const result = await db.exec`INSERT INTO ...`\n * => 1\n */\n async exec(...args: QueryTemplateOrSimpleQuery) {\n // same as getCount\n return this.#query(args).then((x) => x.rowCount);\n }\n\n /**\n * BEGIN the transaction\n *\n * @example\n * await db.begin(() => {\n * await db.insert(...);\n * await db.update(...);\n * return true;\n * });\n */\n async begin<R>(callback: (conn: this) => Promise<R>) {\n try {\n if (!this.#inTransaction++) {\n await this.#exec({ text: 'BEGIN', values: [] });\n }\n\n const result = await callback(this);\n\n if (!--this.#inTransaction) {\n await this.#exec({ text: 'COMMIT', values: [] });\n }\n\n return result;\n } catch (e) {\n if (!--this.#inTransaction) {\n await this.#exec({ text: 'ROLLBACK', values: [] });\n }\n throw e;\n }\n }\n\n // ======================================================================\n // query adapters\n\n /**\n * Prisma adapter: NB; It only supports a query that returns rows\n */\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 /**\n * TypeORM adapter\n */\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 *\n * @example\n * const db = withQueryHelper(new pg.Client());\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": "k3BAAA,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,GAAA,QAAAC,GAAA,iBAAAC,EAAA,gBAAAC,EAAA,gBAAAC,EAAA,cAAAC,GAAA,gBAAAC,EAAA,gBAAAC,GAAA,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,GAAWC,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", "_s", "_pos", "_length", "StringReader", "s", "__privateAdd", "__privateSet", "m", "cb", "sliced", "__privateGet", "matched", "pos", "result", "pgIdent", "s", "_ctx", "x", "quoteIdent", "pgString", "e", "quoteLiteral", "pgContextHandler", "ctx", "src", "r", "StringReader", "m", "shouldIgnoreValue", "_QueryFragmentBase_instances", "compile_fn", "QueryFragmentBase", "__privateAdd", "idx", "__privateMethod", "values", "valueFn", "context", "_value", "QueryFragmentValue", "value", "__privateSet", "opts", "__privateGet", "_ident", "QueryFragmentIdent", "ident", "_string", "QueryFragmentRawString", "isQueryFragment", "makeIdent", "name", "makeValue", "makeRaw", "text", "QueryFragments", "makeJsonValue", "isQueryTemplateStyle", "args", "texts", "sewTemplateTextsAndValues", "_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", "__privateWrapper", "result", "e", "text", "values", "rows", "isQueryTemplateStyle", "texts", "sql", "queryFn", "results", "withQueryHelper", "qh", "proxy", "key", "receiver", "value"]
|
|
7
7
|
}
|
package/dist/index.esm.mjs
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
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};
|
|
1
|
+
var J=e=>{throw TypeError(e)};var M=(e,n,t)=>n.has(e)||J("Cannot "+t);var u=(e,n,t)=>(M(e,n,"read from private field"),t?t.call(e):n.get(e)),p=(e,n,t)=>n.has(e)?J("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(e):n.set(e,t),y=(e,n,t,r)=>(M(e,n,"write to private field"),r?r.call(e,t):n.set(e,t),t),o=(e,n,t)=>(M(e,n,"access private method"),t);var j=(e,n,t,r)=>({set _(i){y(e,n,i,t)},get _(){return u(e,n,r)}});var pe=["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 z(e){return e.match(/^[a-zA-Z_][0-9a-zA-Z_$]*$/)&&!pe.includes(e.toUpperCase())?e:`"${e.replace(/"/g,'""')}"`}function W(e){return`${e.includes("'")?"E":""}'${e.replace(/'/g,"''").replace(/\\/g,"\\\\")}'`}var E,f,R,q=class{constructor(n){p(this,E);p(this,f,0);p(this,R);y(this,E,n),y(this,R,n.length)}match(n,t){if(this.eof())return!1;let r=u(this,E).slice(u(this,f)),i=typeof n=="string"?r.startsWith(n)&&[n]:r.match(new RegExp(n,"y"));return i?(t?.(i,u(this,f)),this.skip(i[0].length),i):!1}skipUntil(n){if(this.eof())return!1;let t=u(this,E).slice(u(this,f)),r=typeof n=="string"?t.indexOf(n):t.search(n);return r<0?!1:(this.skip(r),!0)}read(n){if(this.eof())return"";n=n??1;let t=u(this,E).slice(u(this,f),u(this,f)+n);return this.skip(n),t}skip(n){y(this,f,u(this,f)+Math.min(n??1,u(this,R)-u(this,f)))}eof(){return u(this,R)<=u(this,f)}get position(){return u(this,f)}};E=new WeakMap,f=new WeakMap,R=new WeakMap;function ye(e,n){return e.split(".").map(t=>z(t)).join(".")}function P(e,n){return e===null?"NULL":typeof e=="boolean"?e?"true":"false":Array.isArray(e)?"ARRAY["+e.map(t=>P(t)).join(",")+"]":typeof e=="object"?"toJSON"in e&&typeof e.toJSON=="function"?W(e.toJSON()):W(e.toString()):W(String(e))}function ce(e,n){let t=new q(n);for(;!t.eof();)if(e.dollarQuoted){if(!t.skipUntil(e.dollarQuoted))break;t.skip(e.dollarQuoted.length),e.dollarQuoted=void 0}else if(e.inEscapedSingleQuote){if(!t.skipUntil(/[\\']/))break;if(t.match("''"))continue;if(t.match("\\")){t.skip();continue}t.skip(),e.inEscapedSingleQuote=!1}else if(e.inSingleQuote){if(!t.skipUntil("'"))break;if(t.match("''"))continue;t.skip(),e.inSingleQuote=!1}else if(e.inBlockComment){if(!t.skipUntil(/\/\*|\*\//))break;if(t.match("/*",()=>e.inBlockComment++))continue;t.skip(2),e.inBlockComment--}else if(e.inLineComment){if(!t.skipUntil(`
|
|
2
|
+
`))break;t.skip(),e.inLineComment=!1}else{if(!t.skipUntil(/[-$E'/]/))break;if(t.match(/\$[a-zA-Z]*\$/,r=>e.dollarQuoted=r[0])||t.match("E'",()=>e.inEscapedSingleQuote=!0)||t.match("'",()=>e.inSingleQuote=!0)||t.match("--",()=>e.inLineComment=!0)||t.match("/*",()=>e.inBlockComment=1))continue;t.skip()}}function fe(e){return e?!!(e.dollarQuoted||e.inLineComment||e.inBlockComment||e.inSingleQuote||e.inEscapedSingleQuote):!1}var m,A,w=class{constructor(){p(this,m);this.text="";this.values=[];this.sql="";this.statement="";this.embed="";Object.defineProperties(this,{text:{enumerable:!0,get:()=>{let n=1;return o(this,m,A).call(this,()=>"$"+n++)}},values:{enumerable:!0,get:()=>{let n=[];return o(this,m,A).call(this,t=>(n.push(t),"")),n}},sql:{enumerable:!0,get:()=>o(this,m,A).call(this,()=>"?")},statement:{enumerable:!0,get:()=>{let n=1;return o(this,m,A).call(this,()=>":"+n++)}},embed:{enumerable:!0,get:()=>o(this,m,A).call(this,n=>P(n))}})}};m=new WeakSet,A=function(n){return this.toString({valueFn:(t,r)=>fe(r)?"":n(t),context:{},contextHandler:ce})};var N,V=class extends w{constructor(t){super();p(this,N);y(this,N,t)}toString(t){return(t?.valueFn??P)(u(this,N),t?.context)}};N=new WeakMap;var F,v=class extends w{constructor(t){super();p(this,F);y(this,F,t)}toString(t){return(t?.identFn??ye)(u(this,F),t?.context)}};F=new WeakMap;var O,_=class extends w{constructor(t){super();p(this,O);y(this,O,String(t))}toString(t){return t?.context&&t?.contextHandler&&t.contextHandler(t.context,u(this,O)),u(this,O)}};O=new WeakMap;function L(e){return e instanceof w}function h(e){return new v(e)}function ee(e){return typeof e>"u"||L(e)?e:new V(e)}function Q(e){return typeof e>"u"||L(e)?e:Array.isArray(e)?new g(e.map(Q)):new _(e)}function te(e){return typeof e>"u"||L(e)?e:Q(JSON.stringify(e))}var D=e=>{if(!Array.isArray(e)||typeof e?.[0]!="object"||e[0]===null||!("raw"in e[0])||!Array.isArray(e[0]))return!1;let[n,...t]=e;return n.length-1===t.length};function ne(e,n){if(e.length-1!==n.length)throw new Error("Invalid call of the function");return e.flatMap((t,r)=>r?[n[r-1],t]:[t])}var C,a,g=class extends w{constructor(...t){super();p(this,C,[]);p(this,a);if(y(this,a,{prefix:"",glue:"",suffix:"",empty:"",wrapperFn:r=>r}),Array.isArray(t[0])){let[r,i]=t;y(this,a,{...u(this,a),...i}),this.push(...r)}else{let[r]=t;y(this,a,{...u(this,a),...r})}}setSewingPattern(t="",r="",i="",c=""){return y(this,a,{...u(this,a),prefix:t,glue:r,suffix:i,empty:c}),this}push(...t){return u(this,C).push(...t.map(Q).filter(r=>r!==void 0)),this}append(...t){return this.push(...t)}join(t=", "){return u(this,a).glue=t,this}prefix(t=" "){return u(this,a).prefix=t,this}suffix(t=" "){return u(this,a).suffix=t,this}empty(t=""){return u(this,a).empty=t,this}toString(t){let r=u(this,C).map(i=>i.toString(t)).filter(i=>i).join(u(this,a).glue);return r?u(this,a).prefix+u(this,a).wrapperFn(r,t)+u(this,a).suffix:u(this,a).empty}};C=new WeakMap,a=new WeakMap;function s(...e){let n;if(D(e)){let[t,...r]=e;n=[new g(ne(t.map(Q),r.map(ee)))]}else n=e.map(ee);return new g(n)}var ge=h;function B(...e){return new g(e.map(Q))}function he(...e){let n,t=(r,i)=>(i?.valueFn||P)(r,i?.context);if(D(e)){let[r,...i]=e;n=[new g(ne(r.map(Q),i.map(te)),{wrapperFn:t})]}else n=e.map(r=>new g([te(r)],{wrapperFn:t}));return new g(n)}function H(...e){let n=new g,t=r=>{if(r!==void 0&&r!==null){if(typeof r=="string"){n.push(Q(r));return}if(L(r)){n.push(r);return}if(Array.isArray(r)){r.forEach(t);return}if(typeof r=="object"){for(let i in r)if(r[i]!==void 0){if(L(r[i])){n.push(s`${h(i)} ${r[i]}`);continue}if(r[i]===null){n.push(s`${h(i)} IS NULL`);continue}if(Array.isArray(r[i])){n.push(s`${h(i)} = ANY (${r[i]})`);continue}n.push(s`${h(i)} = ${r[i]}`)}return}}};return t(e),n}function re(...e){return H(e).setSewingPattern("((",") OR (","))","")}function ie(...e){return H(e).setSewingPattern("((",") AND (","))","")}function S(...e){return H(e).setSewingPattern("WHERE ((",") AND (","))","")}function ue(...e){return H(e).setSewingPattern("WHERE ((",") OR (","))","")}function Te(...e){return B(...e).join(" UNION ALL ")}function de(...e){return B(...e).join(" UNION ")}function me(e){return e==null?s``:(e=Number(e),e>0?s`LIMIT ${e}`:s``)}function Ee(e){return e==null?s``:(e=Number(e),e>=0?s`OFFSET ${e}`:s``)}function se(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 n=e.map(i=>typeof i=="object"?Object.values(i):i),t=n[0].length;if(n.some(i=>i.length!==t))throw new Error("buildValues: Array must all be the same length");let r=s(...n.map(i=>s(...i).join(", "))).setSewingPattern("(","), (",")");return s`VALUES ${r}`}function oe(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(r=>Object.fromEntries(Object.entries(r).filter(([i,c])=>c!==void 0)));let n=Object.keys(e[0]),t=n.join();if(e.some(r=>Object.keys(r).join()!==t))throw new Error("buildKeys: All objects must have the same keys");return s(...n.map(h)).setSewingPattern("(",", ",")")}function K(e,n,t){Array.isArray(n)||(n=[n]);let r=oe(n),i=se(n.map(Object.values));return s`INSERT INTO ${h(e)} ${r} ${i}`.append(t).join(" ")}function X(e,n,t,r){let i=new g;for(let c in n){let U=n[c];U!==void 0&&i.push(s`${h(c)} = ${U}`)}return s`UPDATE ${h(e)} SET ${i.join(", ")} ${S(t)}`.append(r).join(" ")}function Y(e,n,t){return s`DELETE FROM ${h(e)} ${S(n)}`.append(t).join(" ")}var we=re,Qe=ie,Re=S,Ae=S,Oe=S,Se=ue;s.raw=B;s.ident=ge;s.json=he;s.WHERE=S;s.WHERE_AND=Ae;s.WHERE_OR=ue;s.AND=ie;s.OR=re;s.where=Re;s.where_and=Oe;s.where_or=Se;s.and=Qe;s.or=we;s.insert=K;s.update=X;s.delete=Y;s.keys=oe;s.values=se;s.UNION_ALL=Te;s.UNION=de;s.LIMIT=me;s.OFFSET=Ee;function xe(e,n){return Object.fromEntries(n.map(t=>[t,e[t]]))}var k,d,x,l,ae,I,T,G=class{constructor(n,t={}){p(this,l);p(this,k);p(this,d);p(this,x,0);if(y(this,k,n),y(this,d,{...t}),!u(this,d).query){if(!("query"in n)||typeof n.query!="function")throw new Error("Invalid or no query functionn is specified");u(this,d).query=n.query}}async insert(n,t,r){let i=K(n,t,r);return await o(this,l,T).call(this,[i])}async update(n,t,r,i){let c=X(n,t,r,i);return await o(this,l,T).call(this,[c])}async delete(n,t,r){let i=Y(n,t,r);return await o(this,l,T).call(this,[i])}async query(...n){return o(this,l,T).call(this,n)}async getRows(...n){return o(this,l,T).call(this,n).then(t=>t.rows)}async getRow(...n){return o(this,l,T).call(this,n).then(t=>t.rows?.[0])}async getOne(...n){return o(this,l,T).call(this,n).then(t=>Object.values(t.rows?.[0]??{})?.[0])}async getCount(...n){return o(this,l,T).call(this,n).then(t=>t.rowCount)}async exec(...n){return o(this,l,T).call(this,n).then(t=>t.rowCount)}async begin(n){try{j(this,x)._++||await o(this,l,I).call(this,{text:"BEGIN",values:[]});let t=await n(this);return--j(this,x)._||await o(this,l,I).call(this,{text:"COMMIT",values:[]}),t}catch(t){throw--j(this,x)._||await o(this,l,I).call(this,{text:"ROLLBACK",values:[]}),t}}static get prisma(){return async function({text:n,values:t}){if("$queryRawUnsafe"in this&&typeof this.$queryRawUnsafe=="function"){let r=await this.$queryRawUnsafe(n,...t);return{rows:r,rowCount:r.length}}throw new Error("Invalid object")}}static get typeorm(){return async function({text:n,values:t}){if("query"in this&&typeof this.query=="function"){let r=await this.query(n,t);return r.length===2&&Array.isArray(r[0])&&typeof r[1]=="number"?{rows:r[0],rowCount:r[1]}:{rows:r,rowCount:r.length}}throw new Error("Invalid object")}}};k=new WeakMap,d=new WeakMap,x=new WeakMap,l=new WeakSet,ae=function(n){if(D(n)){let[i,...c]=n;return s(i,...c)}let[t,r]=n;return typeof t=="object"&&t&&"text"in t?{...t,values:t.values??[]}:{text:t,values:r??[]}},I=function(n){let t=u(this,d).query;if(!t)throw new Error("Missing query function");return t.call(u(this,k),n)},T=async function(n){let t=o(this,l,ae).call(this,n);u(this,d)?.beforeQuery?.(t);let r=await o(this,l,I).call(this,t).catch(i=>{throw u(this,d)?.onError?.(t,i),i});return typeof r.rowCount!="number"&&(r.rowCount=r.rows?.length??0),u(this,d)?.afterQuery?.(t,xe(r,["command","rowCount","rows"])),r};function We(e,n){let t=new G(e,n),r=new Proxy(e,{get(i,c,U){let $=c in t?t:c in i?i:void 0,b=$&&Reflect.get($,c);return b&&b instanceof Function?function(...le){let Z=b.apply(this===U?$:this,le);return Z===i?r:Z}:b===i?r:b}});return r}export{ie as AND,me as LIMIT,Ee as OFFSET,re as OR,g as QueryFragments,G as QueryHelper,de as UNION,Te as UNION_ALL,S as WHERE,Ae as WHERE_AND,ue as WHERE_OR,Qe as and,H as buildClauses,Y as buildDelete,K as buildInsert,oe as buildKeys,X as buildUpdate,se as buildValues,ge as ident,L as isQueryFragment,D as isQueryTemplateStyle,he as json,we as or,ye as pgIdent,P as pgString,B as raw,s as sql,Re as where,Oe as where_and,Se as where_or,We as withQueryHelper};
|
|
2
3
|
//# sourceMappingURL=index.esm.mjs.map
|
package/dist/index.esm.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 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\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", "
|
|
3
|
+
"sources": ["../src/quote.ts", "../src/string-reader.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", "export class StringReader {\n #s: string;\n #pos: number = 0;\n #length: number;\n\n constructor(s: string) {\n this.#s = s;\n this.#length = s.length;\n }\n\n match(m: string | RegExp, cb?: (m: string[], pos: number) => void) {\n if (this.eof()) return false;\n\n const sliced = this.#s.slice(this.#pos);\n\n const matched =\n typeof m === 'string'\n ? sliced.startsWith(m) && [m]\n : sliced.match(new RegExp(m, 'y'));\n if (matched) {\n cb?.(matched, this.#pos);\n this.skip(matched[0].length);\n return matched;\n }\n return false;\n }\n\n skipUntil(m: string | RegExp) {\n if (this.eof()) return false;\n\n const sliced = this.#s.slice(this.#pos);\n const pos = typeof m === 'string' ? sliced.indexOf(m) : sliced.search(m);\n if (pos < 0) return false;\n this.skip(pos);\n return true;\n }\n\n read(n?: number) {\n if (this.eof()) return '';\n\n n = n ?? 1;\n const result = this.#s.slice(this.#pos, this.#pos + n);\n this.skip(n);\n return result;\n }\n\n skip(n?: number) {\n this.#pos += Math.min(n ?? 1, this.#length - this.#pos);\n }\n\n eof() {\n return this.#length <= this.#pos;\n }\n\n get position() {\n return this.#pos;\n }\n}\n", "import { quoteIdent, quoteLiteral } from './quote';\nimport { StringReader } from './string-reader';\n\ntype Context = {\n inLineComment?: boolean;\n inBlockComment?: number;\n inSingleQuote?: boolean;\n inEscapedSingleQuote?: boolean;\n dollarQuoted?: string;\n};\n\ntype EscapeFunction = (v: unknown, context?: Context) => string;\nexport type FieldValues = Record<string, unknown>;\nexport type WhereArg =\n | string\n | FieldValues\n | QueryFragment\n | undefined\n | WhereArg[];\n\nexport function pgIdent(s: string, _ctx?: Context) {\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, _ctx?: Context): string {\n if (s === null) return 'NULL';\n if (typeof s === 'boolean') return s ? 'true' : 'false';\n if (Array.isArray(s))\n return 'ARRAY[' + s.map((e) => pgString(e)).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\nfunction pgContextHandler(ctx: Context, src: string): void {\n const r = new StringReader(src);\n\n while (!r.eof()) {\n if (ctx.dollarQuoted) {\n if (!r.skipUntil(ctx.dollarQuoted)) break;\n\n r.skip(ctx.dollarQuoted.length);\n ctx.dollarQuoted = undefined;\n } else if (ctx.inEscapedSingleQuote) {\n if (!r.skipUntil(/[\\\\']/)) break;\n if (r.match(\"''\")) continue; // ignore double single-quote\n if (r.match('\\\\')) {\n r.skip(); // just skip the escaped letter\n continue;\n }\n\n // must be the ending single-quote\n r.skip();\n ctx.inEscapedSingleQuote = false;\n } else if (ctx.inSingleQuote) {\n if (!r.skipUntil(\"'\")) break;\n if (r.match(\"''\")) continue; // ignore double single-quote\n\n // must be the ending single-quote\n r.skip();\n ctx.inSingleQuote = false;\n } else if (ctx.inBlockComment) {\n if (!r.skipUntil(/\\/\\*|\\*\\//)) break;\n if (r.match('/*', () => ctx!.inBlockComment!++)) continue;\n\n r.skip(2);\n ctx.inBlockComment--;\n } else if (ctx.inLineComment) {\n if (!r.skipUntil('\\n')) break;\n\n r.skip();\n ctx.inLineComment = false;\n } else {\n if (!r.skipUntil(/[-$E'/]/)) break;\n\n if (r.match(/\\$[a-zA-Z]*\\$/, (m) => (ctx.dollarQuoted = m[0]))) continue;\n if (r.match(\"E'\", () => (ctx.inEscapedSingleQuote = true))) continue;\n if (r.match(\"'\", () => (ctx.inSingleQuote = true))) continue;\n if (r.match('--', () => (ctx.inLineComment = true))) continue;\n if (r.match('/*', () => (ctx.inBlockComment = 1))) continue;\n\n r.skip();\n }\n }\n}\n\nfunction shouldIgnoreValue(ctx?: Context) {\n if (!ctx) return false;\n\n return !!(\n ctx.dollarQuoted ||\n ctx.inLineComment ||\n ctx.inBlockComment ||\n ctx.inSingleQuote ||\n ctx.inEscapedSingleQuote\n );\n}\n\ntype QueryFragmentToStringOptions = {\n valueFn?: EscapeFunction;\n identFn?: EscapeFunction;\n context: Context;\n contextHandler?: (ctx: Context, s: string) => void;\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 text: string = '';\n values: unknown[] = [];\n sql: string = '';\n statement: string = '';\n embed: string = '';\n\n #compile(valueFn: (x: unknown) => string) {\n return this.toString({\n valueFn: (x, context) => {\n if (shouldIgnoreValue(context)) return '';\n return valueFn(x);\n },\n context: {},\n contextHandler: pgContextHandler,\n });\n }\n\n constructor() {\n Object.defineProperties(this, {\n text: {\n enumerable: true,\n get: () => {\n let idx = 1;\n return this.#compile(() => '$' + idx++);\n },\n },\n\n values: {\n enumerable: true,\n get: () => {\n const values: unknown[] = [];\n this.#compile((x) => (values.push(x), ''));\n return values;\n },\n },\n\n sql: {\n enumerable: true,\n get: () => {\n return this.#compile(() => '?');\n },\n },\n\n statement: {\n enumerable: true,\n get: () => {\n let idx = 1;\n return this.#compile(() => ':' + idx++);\n },\n },\n\n embed: {\n enumerable: true,\n get: () => {\n return this.#compile((x) => pgString(x));\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, opts?.context);\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, opts?.context);\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(opts?: QueryFragmentToStringOptions) {\n if (opts?.context && opts?.contextHandler) {\n opts.contextHandler(opts.context, this.#string);\n }\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\n/**\n * SQL template tag\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\n/**\n * Example:\n * SELECT * FROM ${ident('test.table')}\n * => SELECT * FROM \"test\".\"table\"\n */\nexport const ident = makeIdent;\n\n/**\n * Raw string injection\n */\nexport function raw(...args: unknown[]) {\n return new QueryFragments(args.map(makeRaw));\n}\n\n/**\n * JSON injector\n *\n * Example 1:\n * json({ obj: 'abc' )\n * => '{\"obj\": \"abc\"}'\n *\n * Example 2:\n * json\uFF40{\"obj\": ${ 'abc' }}\uFF40\n * => '{\"obj\": \"abc\"}'\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, opts?.context);\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: number = 0;\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 /**\n * INSERT builder\n *\n * @example\n * await db.insert('table', { name: 'myname' }, 'RETURNING *');\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 /**\n * UPDATE builder\n *\n * @example\n * await db.update('table', { name: 'myname' }, { id: 'root' }, 'RETURNING *');\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 /**\n * DELETE builder\n *\n * @example\n * await db.delete('table', { id: 'root' }, 'RETURNING *');\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 /**\n * Execute query with query-weaver\n *\n * It's equivalent to ```db.query(sql`...`)```\n *\n * @example\n * const { rows } = await db.query`SELECT * FROM table WHERE id = ${id}`\n */\n async query<T extends QueryResultRow>(...args: QueryTemplateOrSimpleQuery) {\n return this.#query<T>(args);\n }\n\n /**\n * Get rows directly\n *\n * @example\n * const rows = await db.getRows`SELECT * FROM table WHERE id = ${id}`\n * => [{ id: 10, name: '...' }, ...]\n */\n async getRows<T extends QueryResultRow>(...args: QueryTemplateOrSimpleQuery) {\n return this.#query<T>(args).then((x) => x.rows);\n }\n\n /**\n * Get a single row directly\n *\n * @example\n * const row = await db.getRow`SELECT * FROM table WHERE id = ${id}`\n * => { id: 10, name: '...' }\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 /**\n * Get a single value directly\n *\n * @example\n * const value = await db.getRow`SELECT 10`\n * => 10\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 /**\n * Get rowCount directly\n *\n * @example\n * const numRows = await db.getCount`SELECT * FROM table`\n * => 10\n */\n async getCount(...args: QueryTemplateOrSimpleQuery) {\n return this.#query(args).then((x) => x.rowCount);\n }\n\n /**\n * Execute a single statement\n * (It's equivalent to getCount)\n *\n * @example\n * const result = await db.exec`INSERT INTO ...`\n * => 1\n */\n async exec(...args: QueryTemplateOrSimpleQuery) {\n // same as getCount\n return this.#query(args).then((x) => x.rowCount);\n }\n\n /**\n * BEGIN the transaction\n *\n * @example\n * await db.begin(() => {\n * await db.insert(...);\n * await db.update(...);\n * return true;\n * });\n */\n async begin<R>(callback: (conn: this) => Promise<R>) {\n try {\n if (!this.#inTransaction++) {\n await this.#exec({ text: 'BEGIN', values: [] });\n }\n\n const result = await callback(this);\n\n if (!--this.#inTransaction) {\n await this.#exec({ text: 'COMMIT', values: [] });\n }\n\n return result;\n } catch (e) {\n if (!--this.#inTransaction) {\n await this.#exec({ text: 'ROLLBACK', values: [] });\n }\n throw e;\n }\n }\n\n // ======================================================================\n // query adapters\n\n /**\n * Prisma adapter: NB; It only supports a query that returns rows\n */\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 /**\n * TypeORM adapter\n */\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 *\n * @example\n * const db = withQueryHelper(new pg.Client());\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": "4bAAA,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,CClKA,IAAAC,EAAAC,EAAAC,EAAaC,EAAN,KAAmB,CAKxB,YAAYC,EAAW,CAJvBC,EAAA,KAAAL,GACAK,EAAA,KAAAJ,EAAe,GACfI,EAAA,KAAAH,GAGEI,EAAA,KAAKN,EAAKI,GACVE,EAAA,KAAKJ,EAAUE,EAAE,OACnB,CAEA,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",
|
|
6
|
+
"names": ["reservedKeywords", "quoteIdent", "id", "quoteLiteral", "s", "_s", "_pos", "_length", "StringReader", "s", "__privateAdd", "__privateSet", "m", "cb", "sliced", "__privateGet", "matched", "pos", "result", "pgIdent", "s", "_ctx", "x", "quoteIdent", "pgString", "e", "quoteLiteral", "pgContextHandler", "ctx", "src", "r", "StringReader", "m", "shouldIgnoreValue", "_QueryFragmentBase_instances", "compile_fn", "QueryFragmentBase", "__privateAdd", "idx", "__privateMethod", "values", "valueFn", "context", "_value", "QueryFragmentValue", "value", "__privateSet", "opts", "__privateGet", "_ident", "QueryFragmentIdent", "ident", "_string", "QueryFragmentRawString", "isQueryFragment", "makeIdent", "name", "makeValue", "makeRaw", "text", "QueryFragments", "makeJsonValue", "isQueryTemplateStyle", "args", "texts", "sewTemplateTextsAndValues", "_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", "__privateWrapper", "result", "e", "text", "values", "rows", "isQueryTemplateStyle", "texts", "sql", "queryFn", "results", "withQueryHelper", "qh", "proxy", "key", "receiver", "value"]
|
|
7
7
|
}
|
package/dist/query-helper.d.ts
CHANGED
|
@@ -38,17 +38,95 @@ type QueryTemplateOrSimpleQuery = QueryTemplateStyle | [query: string, values?:
|
|
|
38
38
|
export declare class QueryHelper<X extends object = object> {
|
|
39
39
|
#private;
|
|
40
40
|
constructor(db: X, opts?: QueryHelperOptions & Partial<Queryable<X>>);
|
|
41
|
+
/**
|
|
42
|
+
* INSERT builder
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* await db.insert('table', { name: 'myname' }, 'RETURNING *');
|
|
46
|
+
*/
|
|
41
47
|
insert<T extends QueryResultRow>(table: string, fv: FieldValues, appendix?: string | QueryFragment): Promise<pgQueryResult<X, T>>;
|
|
48
|
+
/**
|
|
49
|
+
* UPDATE builder
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* await db.update('table', { name: 'myname' }, { id: 'root' }, 'RETURNING *');
|
|
53
|
+
*/
|
|
42
54
|
update<T extends QueryResultRow>(table: string, fv: FieldValues, where: WhereArg, appendix?: string | QueryFragment): Promise<pgQueryResult<X, T>>;
|
|
55
|
+
/**
|
|
56
|
+
* DELETE builder
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* await db.delete('table', { id: 'root' }, 'RETURNING *');
|
|
60
|
+
*/
|
|
43
61
|
delete<T extends QueryResultRow>(table: string, where: WhereArg, appendix?: string | QueryFragment): Promise<pgQueryResult<X, T>>;
|
|
62
|
+
/**
|
|
63
|
+
* Execute query with query-weaver
|
|
64
|
+
*
|
|
65
|
+
* It's equivalent to ```db.query(sql`...`)```
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* const { rows } = await db.query`SELECT * FROM table WHERE id = ${id}`
|
|
69
|
+
*/
|
|
44
70
|
query<T extends QueryResultRow>(...args: QueryTemplateOrSimpleQuery): Promise<pgQueryResult<X, T>>;
|
|
71
|
+
/**
|
|
72
|
+
* Get rows directly
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* const rows = await db.getRows`SELECT * FROM table WHERE id = ${id}`
|
|
76
|
+
* => [{ id: 10, name: '...' }, ...]
|
|
77
|
+
*/
|
|
45
78
|
getRows<T extends QueryResultRow>(...args: QueryTemplateOrSimpleQuery): Promise<T[]>;
|
|
79
|
+
/**
|
|
80
|
+
* Get a single row directly
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* const row = await db.getRow`SELECT * FROM table WHERE id = ${id}`
|
|
84
|
+
* => { id: 10, name: '...' }
|
|
85
|
+
*/
|
|
46
86
|
getRow<T extends QueryResultRow>(...args: QueryTemplateOrSimpleQuery): Promise<T | undefined>;
|
|
87
|
+
/**
|
|
88
|
+
* Get a single value directly
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* const value = await db.getRow`SELECT 10`
|
|
92
|
+
* => 10
|
|
93
|
+
*/
|
|
47
94
|
getOne<T = unknown>(...args: QueryTemplateOrSimpleQuery): Promise<T | undefined>;
|
|
95
|
+
/**
|
|
96
|
+
* Get rowCount directly
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* const numRows = await db.getCount`SELECT * FROM table`
|
|
100
|
+
* => 10
|
|
101
|
+
*/
|
|
48
102
|
getCount(...args: QueryTemplateOrSimpleQuery): Promise<number>;
|
|
103
|
+
/**
|
|
104
|
+
* Execute a single statement
|
|
105
|
+
* (It's equivalent to getCount)
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* const result = await db.exec`INSERT INTO ...`
|
|
109
|
+
* => 1
|
|
110
|
+
*/
|
|
49
111
|
exec(...args: QueryTemplateOrSimpleQuery): Promise<number>;
|
|
112
|
+
/**
|
|
113
|
+
* BEGIN the transaction
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* await db.begin(() => {
|
|
117
|
+
* await db.insert(...);
|
|
118
|
+
* await db.update(...);
|
|
119
|
+
* return true;
|
|
120
|
+
* });
|
|
121
|
+
*/
|
|
50
122
|
begin<R>(callback: (conn: this) => Promise<R>): Promise<R>;
|
|
123
|
+
/**
|
|
124
|
+
* Prisma adapter: NB; It only supports a query that returns rows
|
|
125
|
+
*/
|
|
51
126
|
static get prisma(): <T extends QueryResultRow>(this: object, { text, values }: QueryConfig) => Promise<QueryResult<T>>;
|
|
127
|
+
/**
|
|
128
|
+
* TypeORM adapter
|
|
129
|
+
*/
|
|
52
130
|
static get typeorm(): <T extends QueryResultRow>(this: object, { text, values }: QueryConfig) => Promise<QueryResult<T>>;
|
|
53
131
|
}
|
|
54
132
|
type Overwrite<T, Q> = Omit<T, keyof Q> & Q;
|
|
@@ -60,6 +138,9 @@ export type WithQueryHelper<T extends object = object> = Override<T, QueryHelper
|
|
|
60
138
|
/**
|
|
61
139
|
* Returns a proxy object that overrides the queryable instance `db` by Query Helper utilities
|
|
62
140
|
* @param db - Queryable object to be wrapped
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* const db = withQueryHelper(new pg.Client());
|
|
63
144
|
*/
|
|
64
145
|
export declare function withQueryHelper<T extends Queryable<object>>(db: T, opts?: QueryHelperOptions & Partial<QueryableWithThis<T>>): WithQueryHelper<T>;
|
|
65
146
|
export declare function withQueryHelper<T extends object>(db: T, opts: QueryHelperOptions & QueryableWithThis<T>): WithQueryHelper<T>;
|
package/dist/query-weaver.d.ts
CHANGED
|
@@ -1,11 +1,20 @@
|
|
|
1
|
-
type
|
|
1
|
+
type Context = {
|
|
2
|
+
inLineComment?: boolean;
|
|
3
|
+
inBlockComment?: number;
|
|
4
|
+
inSingleQuote?: boolean;
|
|
5
|
+
inEscapedSingleQuote?: boolean;
|
|
6
|
+
dollarQuoted?: string;
|
|
7
|
+
};
|
|
8
|
+
type EscapeFunction = (v: unknown, context?: Context) => string;
|
|
2
9
|
export type FieldValues = Record<string, unknown>;
|
|
3
10
|
export type WhereArg = string | FieldValues | QueryFragment | undefined | WhereArg[];
|
|
4
|
-
export declare function pgIdent(s: string): string;
|
|
5
|
-
export declare function pgString(s: unknown): string;
|
|
11
|
+
export declare function pgIdent(s: string, _ctx?: Context): string;
|
|
12
|
+
export declare function pgString(s: unknown, _ctx?: Context): string;
|
|
6
13
|
type QueryFragmentToStringOptions = {
|
|
7
14
|
valueFn?: EscapeFunction;
|
|
8
15
|
identFn?: EscapeFunction;
|
|
16
|
+
context: Context;
|
|
17
|
+
contextHandler?: (ctx: Context, s: string) => void;
|
|
9
18
|
};
|
|
10
19
|
export interface QueryFragment {
|
|
11
20
|
text: string;
|
|
@@ -15,14 +24,12 @@ export interface QueryFragment {
|
|
|
15
24
|
toString(opts?: QueryFragmentToStringOptions): string;
|
|
16
25
|
}
|
|
17
26
|
declare abstract class QueryFragmentBase implements QueryFragment {
|
|
27
|
+
#private;
|
|
18
28
|
text: string;
|
|
19
29
|
values: unknown[];
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
values: unknown[];
|
|
24
|
-
embed: string;
|
|
25
|
-
};
|
|
30
|
+
sql: string;
|
|
31
|
+
statement: string;
|
|
32
|
+
embed: string;
|
|
26
33
|
constructor();
|
|
27
34
|
abstract toString(opts?: QueryFragmentToStringOptions): string;
|
|
28
35
|
}
|
|
@@ -57,6 +64,9 @@ export declare class QueryFragments extends QueryFragmentBase {
|
|
|
57
64
|
empty(empty?: string): this;
|
|
58
65
|
toString(opts?: QueryFragmentToStringOptions): string;
|
|
59
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* SQL template tag
|
|
69
|
+
*/
|
|
60
70
|
export declare function sql(...args: [texts: TemplateStringsArray, ...values: unknown[]] | [...values: unknown[]]): QueryFragments;
|
|
61
71
|
export declare namespace sql {
|
|
62
72
|
export var raw: typeof import("./query-weaver").raw;
|
|
@@ -83,8 +93,27 @@ export declare namespace sql {
|
|
|
83
93
|
export var OFFSET: typeof import("./query-weaver").OFFSET;
|
|
84
94
|
export { _a as delete };
|
|
85
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Example:
|
|
98
|
+
* SELECT * FROM ${ident('test.table')}
|
|
99
|
+
* => SELECT * FROM "test"."table"
|
|
100
|
+
*/
|
|
86
101
|
export declare const ident: typeof makeIdent;
|
|
102
|
+
/**
|
|
103
|
+
* Raw string injection
|
|
104
|
+
*/
|
|
87
105
|
export declare function raw(...args: unknown[]): QueryFragments;
|
|
106
|
+
/**
|
|
107
|
+
* JSON injector
|
|
108
|
+
*
|
|
109
|
+
* Example 1:
|
|
110
|
+
* json({ obj: 'abc' )
|
|
111
|
+
* => '{"obj": "abc"}'
|
|
112
|
+
*
|
|
113
|
+
* Example 2:
|
|
114
|
+
* json`{"obj": ${ 'abc' }}`
|
|
115
|
+
* => '{"obj": "abc"}'
|
|
116
|
+
*/
|
|
88
117
|
export declare function json(...args: [...json: unknown[]] | [texts: TemplateStringsArray, ...args: unknown[]]): QueryFragments;
|
|
89
118
|
export declare function buildClauses(...args: WhereArg[]): QueryFragments;
|
|
90
119
|
export declare function OR(...fv: WhereArg[]): QueryFragments;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare class StringReader {
|
|
2
|
+
#private;
|
|
3
|
+
constructor(s: string);
|
|
4
|
+
match(m: string | RegExp, cb?: (m: string[], pos: number) => void): false | string[];
|
|
5
|
+
skipUntil(m: string | RegExp): boolean;
|
|
6
|
+
read(n?: number): string;
|
|
7
|
+
skip(n?: number): void;
|
|
8
|
+
eof(): boolean;
|
|
9
|
+
get position(): number;
|
|
10
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "query-weaver",
|
|
3
|
-
"version": "0.2.0-alpha.
|
|
3
|
+
"version": "0.2.0-alpha.2",
|
|
4
4
|
"description": "SQL query builder using template string literal",
|
|
5
5
|
"main": "./dist/index.cjs.js",
|
|
6
6
|
"module": "./dist/index.esm.mjs",
|
|
@@ -44,6 +44,6 @@
|
|
|
44
44
|
"pg": "^8.13.3",
|
|
45
45
|
"rimraf": "^6.0.1",
|
|
46
46
|
"typescript": "^5.7.3",
|
|
47
|
-
"vitest": "^3.0.
|
|
47
|
+
"vitest": "^3.0.7"
|
|
48
48
|
}
|
|
49
49
|
}
|