squel 6.0.6 → 6.0.7
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/CHANGELOG.md +7 -0
- package/dist/browser/squel.min.js +1 -1
- package/dist/cjs/index.js +12 -12
- package/dist/cjs/index.js.map +4 -4
- package/dist/esm/index.js +12 -12
- package/dist/esm/index.js.map +4 -4
- package/dist/types/core.d.ts.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [6.0.7](https://github.com/hiddentao/squel/compare/v6.0.6...v6.0.7) (2026-04-23)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Code Refactoring
|
|
9
|
+
|
|
10
|
+
* enhance code quality and resolve sonar technical debt across core builders ([#403](https://github.com/hiddentao/squel/issues/403)) ([62466bd](https://github.com/hiddentao/squel/commit/62466bd7290c0a732644e43b32643da1f700ab74))
|
|
11
|
+
|
|
5
12
|
## [6.0.6](https://github.com/hiddentao/squel/compare/v6.0.5...v6.0.6) (2026-04-17)
|
|
6
13
|
|
|
7
14
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{var{defineProperty:b,getOwnPropertyNames:Q,getOwnPropertyDescriptor:V}=Object,$=Object.prototype.hasOwnProperty;function z(c){return this[c]}var A=(c)=>{var t=(O??=new WeakMap).get(c),s;if(t)return t;if(t=b({},"__esModule",{value:!0}),c&&typeof c==="object"||typeof c==="function"){for(var i of Q(c))if(!$.call(t,i))b(t,i,{get:z.bind(c,i),enumerable:!(s=V(c,i))||s.enumerable})}return O.set(c,t),t},O;var q=(c)=>c;function C(c,t){this[c]=q.bind(null,t)}var D=(c,t)=>{for(var s in t)b(c,s,{get:t[s],enumerable:!0,configurable:!0,set:C.bind(t,s)})};var j={};D(j,{squel:()=>S,default:()=>H});var P={name:"squel",version:"6.0.6",description:"SQL query string builder",keywords:["sql","database","rdbms","query-builder","mysql","postgres","mssql"],author:"Ramesh Nair <ram@hiddentao.com> (http://www.hiddentao.com/)",contributors:["Ramesh Nair <ram@hiddentao.com> (http://www.hiddentao.com/)","Sergej Brjuchanov <serges@seznam.cz>"],license:"MIT",repository:{type:"git",url:"https://github.com/hiddentao/squel.git"},homepage:"https://github.com/hiddentao/squel",bugs:{url:"https://github.com/hiddentao/squel/issues"},type:"module",main:"./dist/cjs/index.js",module:"./dist/esm/index.js",types:"./dist/types/index.d.ts",exports:{".":{types:"./dist/types/index.d.ts",import:"./dist/esm/index.js",require:"./dist/cjs/index.js"},"./browser":"./dist/browser/squel.min.js"},files:["dist","README.md","LICENSE.md","CHANGELOG.md"],engines:{node:">=18.0.0"},publishConfig:{access:"public",provenance:!0},scripts:{build:"bun run scripts/build.ts",test:"bun test","test:coverage":"bun test --coverage --coverage-reporter=lcov","test:watch":"bun test --watch",lint:"biome check --write ./src ./tests ./scripts",format:"biome format --write ./src ./tests ./scripts",check:"biome check ./src ./tests ./scripts",typecheck:"tsc --noEmit",prepare:"husky",prepublishOnly:"bun run build && bun run test"},dependencies:{},devDependencies:{"@biomejs/biome":"^1.9.4","@commitlint/cli":"^19.8.1","@commitlint/config-conventional":"^19.8.1","@types/bun":"latest","@types/node":"^22.0.0","commit-and-tag-version":"^12.6.0",husky:"^9.1.7",typescript:"^5.3.0"}};function p(c,t){return c.length?c+t:c}function f(c,...t){if(c&&t){for(let s of t)if(s&&typeof s==="object")for(let i of Object.getOwnPropertyNames(s))c[i]=s[i]}return c}function x(c){return!!c&&c.constructor.prototype===Object.prototype}function B(c){return!!c&&c.constructor.prototype===Array.prototype}function E(c){if(!c)return c;let t=c;if(typeof t.clone==="function")return t.clone();if(x(c)||B(c)){let s=new t.constructor;for(let i of Object.getOwnPropertyNames(c))if(typeof t[i]!=="function")s[i]=E(t[i]);return s}return JSON.parse(JSON.stringify(c))}function v(c,t,s){let i=typeof t;if(i!=="function"&&i!=="string")throw Error("type must be a class constructor or string");if(typeof s!=="function")throw Error("handler must be a function");for(let e of c)if(e.type===t){e.handler=s;return}c.push({type:t,handler:s})}function T(c,t,s){return F(c,t)||F(c,s)}function F(c,t){for(let s of t)if(typeof c===s.type||typeof s.type!=="string"&&c instanceof s.type)return s.handler;return}function N(c=null){let t={isSquelBuilder(e){return!!e&&!!e._toParamString}},s=(e)=>{return!t.isSquelBuilder(e)||!e.options.rawNesting};t.DefaultQueryBuilderOptions={autoQuoteTableNames:!1,autoQuoteFieldNames:!1,autoQuoteAliasNames:!0,useAsForTableAliasNames:!1,nameQuoteCharacter:"`",tableAliasQuoteCharacter:"`",fieldAliasQuoteCharacter:'"',valueHandlers:[],parameterCharacter:"?",numberedParameters:!1,numberedParametersPrefix:"$",numberedParametersStartAt:1,replaceSingleQuotes:!1,singleQuoteReplacement:"''",separator:" ",stringFormatter:null,rawNesting:!1},t.globalValueHandlers=[],t.registerValueHandler=(e,n)=>{v(t.globalValueHandlers,e,n)},t.Cloneable=class{clone(){let e=new this.constructor;return f(e,E(f({},this)))}},t.BaseBuilder=class extends t.Cloneable{options;constructor(e){super();let n=JSON.parse(JSON.stringify(t.DefaultQueryBuilderOptions));n.stringFormatter=t.DefaultQueryBuilderOptions.stringFormatter,this.options=f(n,e)}registerValueHandler(e,n){return v(this.options.valueHandlers,e,n),this}_sanitizeExpression(e){if(!t.isSquelBuilder(e)){if(typeof e!=="string")throw Error("expression must be a string or builder instance")}return e}_sanitizeName(e,n){if(typeof e!=="string")throw Error(`${n} must be a string`);return e}_sanitizeField(e){if(!t.isSquelBuilder(e))return this._sanitizeName(e,"field name");return e}_sanitizeBaseBuilder(e){if(t.isSquelBuilder(e))return e;throw Error("must be a builder instance")}_sanitizeTable(e,n){if(typeof e!=="string")try{return this._sanitizeBaseBuilder(e)}catch(r){throw Error("table name must be a string or a builder")}return this._sanitizeName(e,"table")}_sanitizeTableAlias(e){return this._sanitizeName(e,"table alias")}_sanitizeFieldAlias(e){return this._sanitizeName(e,"field alias")}_sanitizeLimitOffset(e){let n=Number.parseInt(e,10);if(n<0||Number.isNaN(n))throw Error("limit/offset must be >= 0");return n}_sanitizeValue(e){let n=typeof e;if(e===null);else if(n==="string"||n==="number"||n==="boolean");else if(t.isSquelBuilder(e));else if(!T(e,this.options.valueHandlers,t.globalValueHandlers))throw Error("field value must be a string, number, boolean, null or one of the registered custom value types");return e}_escapeValue(e){return this.options.replaceSingleQuotes&&e?e.replace(/'/g,this.options.singleQuoteReplacement):e}_formatTableName(e){if(this.options.autoQuoteTableNames){let n=this.options.nameQuoteCharacter;e=`${n}${e}${n}`}return e}_formatFieldAlias(e){if(this.options.autoQuoteAliasNames){let n=this.options.fieldAliasQuoteCharacter;e=`${n}${e}${n}`}return e}_formatTableAlias(e){if(this.options.autoQuoteAliasNames){let n=this.options.tableAliasQuoteCharacter;e=`${n}${e}${n}`}return this.options.useAsForTableAliasNames?`AS ${e}`:e}_formatFieldName(e,n={}){if(this.options.autoQuoteFieldNames){let r=this.options.nameQuoteCharacter;if(n.ignorePeriodsForFieldNameQuotes)e=`${r}${e}${r}`;else e=e.split(".").map((a)=>a==="*"?a:`${r}${a}${r}`).join(".")}return e}_formatCustomValue(e,n,r){let a=T(e,this.options.valueHandlers,t.globalValueHandlers);if(a){if(e=a(e,n,r),e&&e.rawNesting)return{formatted:!0,rawNesting:!0,value:e.value}}return{formatted:!!a,value:e}}_formatValueForParamArray(e,n={}){if(B(e))return e.map((r)=>this._formatValueForParamArray(r,n));return this._formatCustomValue(e,!0,n).value}_formatValueForQueryString(e,n={}){let{rawNesting:r,formatted:a,value:o}=this._formatCustomValue(e,!1,n),l=o;if(a){if(r)return l;return this._applyNestingFormatting(l,s(e))}if(B(l))l=l.map((u)=>this._formatValueForQueryString(u)),l=this._applyNestingFormatting(l.join(", "),s(l));else{let u=typeof l;if(l===null)l="NULL";else if(u==="boolean")l=l?"TRUE":"FALSE";else if(t.isSquelBuilder(l))l=this._applyNestingFormatting(l.toString(),s(l));else if(u!=="number"){if(u==="string"&&this.options.stringFormatter)return this.options.stringFormatter(l);if(n.dontQuote)l=`${l}`;else l=`'${this._escapeValue(l)}'`}}return l}_applyNestingFormatting(e,n=!0){if(e&&typeof e==="string"&&n&&!this.options.rawNesting){let r=e.charAt(0)==="("&&e.charAt(e.length-1)===")";if(r){let a=0,o=1;while(e.length-1>++a){let l=e.charAt(a);if(l==="(")o++;else if(l===")"){if(o--,o<1){r=!1;break}}}}if(!r)e=`(${e})`}return e}_buildString(e,n,r={}){let{nested:a,buildParameterized:o,formattingOptions:l}=r;n=n||[],e=e||"";let u="",d=-1,h=[],y=this.options.parameterCharacter,_=0;while(e.length>_)if(e.substring(_,_+y.length)===y){let g=n[++d];if(o)if(t.isSquelBuilder(g)){let w=g._toParamString({buildParameterized:o,nested:!0});u+=w.text,w.values.forEach((k)=>h.push(k))}else if(g=this._formatValueForParamArray(g,l),B(g)){let w=g.map(()=>y).join(", ");u+=`(${w})`,g.forEach((k)=>h.push(k))}else u+=y,h.push(g);else u+=this._formatValueForQueryString(g,l);_+=y.length}else u+=e.charAt(_),_++;return{text:this._applyNestingFormatting(u,!!a),values:h}}_buildManyStrings(e,n,r={}){let a=[],o=[];for(let u=0;e.length>u;++u){let d=e[u],h=n[u],{text:y,values:_}=this._buildString(d,h,{buildParameterized:r.buildParameterized,nested:!1});a.push(y),_.forEach((g)=>o.push(g))}let l=a.join(this.options.separator);return{text:l.length?this._applyNestingFormatting(l,!!r.nested):"",values:o}}_toParamString(e){throw Error("Not yet implemented")}toString(e={}){return this._toParamString(e).text}toParam(e={}){return this._toParamString({...e,buildParameterized:!0})}},t.Expression=class extends t.BaseBuilder{_nodes;constructor(e){super(e);this._nodes=[]}and(e,...n){return e=this._sanitizeExpression(e),this._nodes.push({type:"AND",expr:e,para:n}),this}or(e,...n){return e=this._sanitizeExpression(e),this._nodes.push({type:"OR",expr:e,para:n}),this}_toParamString(e={}){let n=[],r=[];for(let a of this._nodes){let{type:o,expr:l,para:u}=a,{text:d,values:h}=t.isSquelBuilder(l)?l._toParamString({buildParameterized:e.buildParameterized,nested:!0}):this._buildString(l,u,{buildParameterized:e.buildParameterized});if(n.length)n.push(o);n.push(d),h.forEach((y)=>r.push(y))}return n=n.join(" "),{text:this._applyNestingFormatting(n,!!e.nested),values:r}}},t.Case=class extends t.BaseBuilder{_fieldName=null;_cases;_elseValue=null;constructor(e,n={}){super(n);let r=null;if(x(e))n=e;else if(e)r=this._sanitizeField(e);this._fieldName=r,this.options=f(Object.assign({},t.DefaultQueryBuilderOptions),n),this._cases=[]}when(e,...n){return this._cases.unshift({expression:e,values:n||[]}),this}then(e){if(this._cases.length===0)throw Error("when() needs to be called first");return this._cases[0].result=e,this}else(e){return this._elseValue=e,this}_toParamString(e={}){let n="",r=[];for(let{expression:a,values:o,result:l}of this._cases){n=p(n," ");let u=this._buildString(a,o,{buildParameterized:e.buildParameterized,nested:!0});n+=`WHEN ${u.text} THEN ${this._formatValueForQueryString(l)}`,u.values.forEach((d)=>r.push(d))}if(n.length){if(n+=` ELSE ${this._formatValueForQueryString(this._elseValue)} END`,this._fieldName)n=`${this._fieldName} ${n}`;n=`CASE ${n}`}else n=this._formatValueForQueryString(this._elseValue);return{text:n,values:r}}},t.Block=class extends t.BaseBuilder{constructor(e){super(e)}exposedMethods(){let e={},n=this;while(n){for(let r of Object.getOwnPropertyNames(n))if(r!=="constructor"&&typeof n[r]==="function"&&r.charAt(0)!=="_"&&!t.Block.prototype[r])e[r]=n[r];n=Object.getPrototypeOf(n)}return e}},t.StringBlock=class extends t.Block{_str;constructor(e,n){super(e);this._str=n}_toParamString(e={}){return{text:this._str,values:[]}}},t.FunctionBlock=class extends t.Block{_strings;_values;constructor(e){super(e);this._strings=[],this._values=[]}function(e,...n){this._strings.push(e),this._values.push(n)}_toParamString(e={}){return this._buildManyStrings(this._strings,this._values,e)}},t.registerValueHandler(t.FunctionBlock,(e,n=!1)=>{return n?e.toParam():e.toString()}),t.AbstractTableBlock=class extends t.Block{_tables;constructor(e,n){super(e);this._tables=[]}_table(e,n=null){if(n=n?this._sanitizeTableAlias(n):n,e=this._sanitizeTable(e),this.options.singleTable)this._tables=[];this._tables.push({table:e,alias:n})}_hasTable(){return this._tables.length>0}_toParamString(e={}){let n="",r=[];if(this._hasTable()){for(let{table:a,alias:o}of this._tables){n=p(n,", ");let l;if(t.isSquelBuilder(a)){let{text:u,values:d}=a._toParamString({buildParameterized:e.buildParameterized,nested:!0});l=u,d.forEach((h)=>r.push(h))}else l=this._formatTableName(a);if(o)l+=` ${this._formatTableAlias(o)}`;n+=l}if(this.options.prefix)n=`${this.options.prefix} ${n}`}return{text:n,values:r}}},t.TargetTableBlock=class extends t.AbstractTableBlock{target(e){this._table(e)}},t.UpdateTableBlock=class extends t.AbstractTableBlock{table(e,n=null){this._table(e,n)}_toParamString(e={}){if(!this._hasTable())throw Error("table() needs to be called");return super._toParamString(e)}},t.FromTableBlock=class extends t.AbstractTableBlock{constructor(e){super(f({},e,{prefix:"FROM"}))}from(e,n=null){this._table(e,n)}},t.IntoTableBlock=class extends t.AbstractTableBlock{constructor(e){super(f({},e,{prefix:"INTO",singleTable:!0}))}into(e){this._table(e)}_toParamString(e={}){if(!this._hasTable())throw Error("into() needs to be called");return super._toParamString(e)}},t.GetFieldBlock=class extends t.Block{_fields;constructor(e){super(e);this._fields=[]}fields(e,n={}){if(B(e))for(let r of e)this.field(r,null,n);else for(let r in e){let a=e[r];this.field(r,a,n)}}field(e,n=null,r={}){if(n=n?this._sanitizeFieldAlias(n):n,e=this._sanitizeField(e),this._fields.filter((o)=>o.name===e&&o.alias===n).length)return this;this._fields.push({name:e,alias:n,options:r});return}_toParamString(e={}){let{queryBuilder:n,buildParameterized:r}=e,a="",o=[];for(let l of this._fields){a=p(a,", ");let{name:u,alias:d,options:h}=l;if(typeof u==="string")a+=this._formatFieldName(u,h);else{let y=u._toParamString({nested:!0,buildParameterized:r});a+=y.text,y.values.forEach((_)=>o.push(_))}if(d)a+=` AS ${this._formatFieldAlias(d)}`}if(!a.length){let l=n?.getBlock(t.FromTableBlock);if(l&&l._hasTable())a="*"}return{text:a,values:o}}},t.AbstractSetFieldBlock=class extends t.Block{_fields;_values;_valueOptions;constructor(e){super(e);this._fields=[],this._values=[[]],this._valueOptions=[[]]}_reset(){this._fields=[],this._values=[[]],this._valueOptions=[[]]}_set(e,n,r={}){if(this._values.length>1)throw Error("Cannot set multiple rows of fields this way.");if(typeof n<"u")n=this._sanitizeValue(n);e=this._sanitizeField(e);let a=this._fields.indexOf(e);if(a===-1)this._fields.push(e),a=this._fields.length-1;this._values[0][a]=n,this._valueOptions[0][a]=r}_setFields(e,n={}){if(typeof e!=="object")throw Error(`Expected an object but got ${typeof e}`);for(let r in e)this._set(r,e[r],n)}_setFieldsRows(e,n={}){if(!B(e))throw Error(`Expected an array of objects but got ${typeof e}`);this._reset();for(let r=0;e.length>r;++r){let a=e[r];for(let o in a){let l=a[o];o=this._sanitizeField(o),l=this._sanitizeValue(l);let u=this._fields.indexOf(o);if(r>0&&u===-1)throw Error("All fields in subsequent rows must match the fields in the first row");if(u===-1)this._fields.push(o),u=this._fields.length-1;if(!B(this._values[r]))this._values[r]=[],this._valueOptions[r]=[];this._values[r][u]=l,this._valueOptions[r][u]=n}}}},t.SetFieldBlock=class extends t.AbstractSetFieldBlock{set(e,n,r){this._set(e,n,r)}setFields(e,n){this._setFields(e,n)}_toParamString(e={}){let{buildParameterized:n}=e;if(this._fields.length<=0)throw Error("set() needs to be called");let r="",a=[];for(let o=0;o<this._fields.length;++o){r=p(r,", ");let l=this._formatFieldName(this._fields[o]),u=this._values[0][o];if(l.indexOf("=")<0)l=`${l} = ${this.options.parameterCharacter}`;let d=this._buildString(l,[u],{buildParameterized:n,formattingOptions:this._valueOptions[0][o]});r+=d.text,d.values.forEach((h)=>a.push(h))}return{text:`SET ${r}`,values:a}}},t.InsertFieldValueBlock=class extends t.AbstractSetFieldBlock{set(e,n,r={}){this._set(e,n,r)}setFields(e,n){this._setFields(e,n)}setFieldsRows(e,n){this._setFieldsRows(e,n)}_toParamString(e={}){let{buildParameterized:n}=e,r=this._fields.map((l)=>this._formatFieldName(l)).join(", "),a=[],o=[];for(let l=0;l<this._values.length;++l){a[l]="";for(let u=0;u<this._values[l].length;++u){let d=this._buildString(this.options.parameterCharacter,[this._values[l][u]],{buildParameterized:n,formattingOptions:this._valueOptions[l][u]});d.values.forEach((h)=>o.push(h)),a[l]=p(a[l],", "),a[l]+=d.text}}return{text:r.length?`(${r}) VALUES (${a.join("), (")})`:"",values:o}}},t.InsertFieldsFromQueryBlock=class extends t.Block{_fields;_query=null;constructor(e){super(e);this._fields=[]}fromQuery(e,n){this._fields=e.map((r)=>this._sanitizeField(r)),this._query=this._sanitizeBaseBuilder(n)}_toParamString(e={}){let n="",r=[];if(this._fields.length&&this._query){let{text:a,values:o}=this._query._toParamString({buildParameterized:e.buildParameterized,nested:!0});n=`(${this._fields.join(", ")}) ${this._applyNestingFormatting(a)}`,r=o}return{text:n,values:r}}},t.DistinctBlock=class extends t.Block{_useDistinct=!1;distinct(){this._useDistinct=!0}_toParamString(){return{text:this._useDistinct?"DISTINCT":"",values:[]}}},t.GroupByBlock=class extends t.Block{_groups;constructor(e){super(e);this._groups=[]}group(e){this._groups.push(this._sanitizeField(e))}_toParamString(e={}){return{text:this._groups.length?`GROUP BY ${this._groups.join(", ")}`:"",values:[]}}},t.AbstractVerbSingleValueBlock=class extends t.Block{_value=null;constructor(e){super(e)}_setValue(e){this._value=e!==null?this._sanitizeLimitOffset(e):e}_toParamString(e={}){let n=this._value!==null?`${this.options.verb} ${this.options.parameterCharacter}`:"",r=this._value!==null?[this._value]:[];return this._buildString(n,r,e)}},t.OffsetBlock=class extends t.AbstractVerbSingleValueBlock{constructor(e){super(f({},e,{verb:"OFFSET"}))}offset(e){this._setValue(e)}},t.LimitBlock=class extends t.AbstractVerbSingleValueBlock{constructor(e){super(f({},e,{verb:"LIMIT"}))}limit(e){this._setValue(e)}},t.AbstractConditionBlock=class extends t.Block{_conditions;constructor(e){super(e);this._conditions=[]}_condition(e,...n){e=this._sanitizeExpression(e),this._conditions.push({expr:e,values:n||[]})}_toParamString(e={}){let n=[],r=[];for(let{expr:o,values:l}of this._conditions){let u=t.isSquelBuilder(o)?o._toParamString({buildParameterized:e.buildParameterized}):this._buildString(o,l,{buildParameterized:e.buildParameterized});if(u.text.length)n.push(u.text);u.values.forEach((d)=>r.push(d))}let a=n.join(") AND (");return{text:a.length?`${this.options.verb} (${a})`:"",values:r}}},t.WhereBlock=class extends t.AbstractConditionBlock{constructor(e){super(f({},e,{verb:"WHERE"}))}where(e,...n){this._condition(e,...n)}},t.HavingBlock=class extends t.AbstractConditionBlock{constructor(e){super(f({},e,{verb:"HAVING"}))}having(e,...n){this._condition(e,...n)}},t.OrderByBlock=class extends t.Block{_orders;constructor(e){super(e);this._orders=[]}order(e,n,...r){e=this._sanitizeField(e);let a;if(typeof n==="string")a=n;else if(n===void 0)a="ASC";else if(n===null)a=null;else a=n?"ASC":"DESC";this._orders.push({field:e,dir:a,values:r||[]})}_toParamString(e={}){let n="",r=[];for(let{field:a,dir:o,values:l}of this._orders){n=p(n,", ");let u=this._buildString(a,l,{buildParameterized:e.buildParameterized});if(n+=u.text,B(u.values))u.values.forEach((d)=>r.push(d));if(o!==null)n+=` ${o}`}return{text:n.length?`ORDER BY ${n}`:"",values:r}}},t.JoinBlock=class extends t.Block{_joins;constructor(e){super(e);this._joins=[]}join(e,n=null,r=null,a="INNER"){e=this._sanitizeTable(e,!0),n=n?this._sanitizeTableAlias(n):n,r=r?this._sanitizeExpression(r):r,this._joins.push({type:a,table:e,alias:n,condition:r})}left_join(e,n=null,r=null){this.join(e,n,r,"LEFT")}right_join(e,n=null,r=null){this.join(e,n,r,"RIGHT")}outer_join(e,n=null,r=null){this.join(e,n,r,"OUTER")}left_outer_join(e,n=null,r=null){this.join(e,n,r,"LEFT OUTER")}full_join(e,n=null,r=null){this.join(e,n,r,"FULL")}cross_join(e,n=null,r=null){this.join(e,n,r,"CROSS")}_toParamString(e={}){let n="",r=[];for(let{type:a,table:o,alias:l,condition:u}of this._joins){n=p(n,this.options.separator);let d;if(t.isSquelBuilder(o)){let h=o._toParamString({buildParameterized:e.buildParameterized,nested:!0});h.values.forEach((y)=>r.push(y)),d=h.text}else d=this._formatTableName(o);if(n+=`${a} JOIN ${d}`,l)n+=` ${this._formatTableAlias(l)}`;if(u){n+=" ON ";let h;if(t.isSquelBuilder(u))h=u._toParamString({buildParameterized:e.buildParameterized});else h=this._buildString(u,[],{buildParameterized:e.buildParameterized});n+=this._applyNestingFormatting(h.text),h.values.forEach((y)=>r.push(y))}}return{text:n,values:r}}},t.UnionBlock=class extends t.Block{_unions;constructor(e){super(e);this._unions=[]}union(e,n="UNION"){e=this._sanitizeTable(e),this._unions.push({type:n,table:e})}union_all(e){this.union(e,"UNION ALL")}_toParamString(e={}){let n="",r=[];for(let{type:a,table:o}of this._unions){n=p(n,this.options.separator);let l;if(o instanceof t.BaseBuilder){let u=o._toParamString({buildParameterized:e.buildParameterized,nested:!0});l=u.text,u.values.forEach((d)=>r.push(d))}else n=this._formatTableName(o),l="";n+=`${a} ${l}`}return{text:n,values:r}}},t.QueryBuilder=class extends t.BaseBuilder{blocks;constructor(e,n){super(e);this.blocks=n||[];for(let r of this.blocks){let a=r.exposedMethods();for(let o in a){let l=a[o];if(this[o]!==void 0)throw Error(`Builder already has a builder method called: ${o}`);((u,d,h)=>{this[d]=(...y)=>{return h.call(u,...y),this}})(r,o,l)}}}registerValueHandler(e,n){for(let r of this.blocks)r.registerValueHandler(e,n);return super.registerValueHandler(e,n),this}updateOptions(e){this.options=f(this.options,e);for(let n of this.blocks)n.options=f(n.options,e)}_toParamString(e={}){let n=f({},this.options,e),r=this.blocks.map((d)=>d._toParamString({buildParameterized:n.buildParameterized,queryBuilder:this})),a=r.map((d)=>d.text),o=r.map((d)=>d.values),l=a.filter((d)=>d.length>0).join(n.separator),u=[];if(o.forEach((d)=>d.forEach((h)=>u.push(h))),!n.nested){if(n.numberedParameters){let d=n.numberedParametersStartAt!==void 0?n.numberedParametersStartAt:1,h=n.parameterCharacter.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");l=l.replace(new RegExp(h,"g"),()=>{return`${n.numberedParametersPrefix}${d++}`})}}return{text:this._applyNestingFormatting(l,!!n.nested),values:u}}clone(){let e=this.blocks.map((n)=>n.clone());return new this.constructor(this.options,e)}getBlock(e){return this.blocks.filter((n)=>n instanceof e)[0]}},t.Select=class extends t.QueryBuilder{constructor(e,n=null){n=n||[new t.StringBlock(e,"SELECT"),new t.FunctionBlock(e),new t.DistinctBlock(e),new t.GetFieldBlock(e),new t.FromTableBlock(e),new t.JoinBlock(e),new t.WhereBlock(e),new t.GroupByBlock(e),new t.HavingBlock(e),new t.OrderByBlock(e),new t.LimitBlock(e),new t.OffsetBlock(e),new t.UnionBlock(e)];super(e,n)}},t.Update=class extends t.QueryBuilder{constructor(e,n=null){n=n||[new t.StringBlock(e,"UPDATE"),new t.UpdateTableBlock(e),new t.SetFieldBlock(e),new t.WhereBlock(e),new t.OrderByBlock(e),new t.LimitBlock(e)];super(e,n)}},t.Delete=class extends t.QueryBuilder{constructor(e,n=null){n=n||[new t.StringBlock(e,"DELETE"),new t.TargetTableBlock(e),new t.FromTableBlock(f({},e,{singleTable:!0})),new t.JoinBlock(e),new t.WhereBlock(e),new t.OrderByBlock(e),new t.LimitBlock(e)];super(e,n)}},t.Insert=class extends t.QueryBuilder{constructor(e,n=null){n=n||[new t.StringBlock(e,"INSERT"),new t.IntoTableBlock(e),new t.InsertFieldValueBlock(e),new t.InsertFieldsFromQueryBlock(e)];super(e,n)}};let i={VERSION:P.version,flavour:c,expr:(e)=>new t.Expression(e),case:(e,n)=>new t.Case(e,n),select:(e,n)=>new t.Select(e,n),update:(e,n)=>new t.Update(e,n),insert:(e,n)=>new t.Insert(e,n),delete:(e,n)=>new t.Delete(e,n),str:(...e)=>{let n=new t.FunctionBlock;return n.function(...e),n},rstr:(...e)=>{let n=new t.FunctionBlock({rawNesting:!0});return n.function(...e),n},registerValueHandler:t.registerValueHandler};return i.remove=i.delete,i.cls=t,i}var m=N();m.flavours={};m.useFlavour=function(t=null){if(!t)return m;if(m.flavours[t]instanceof Function){let s=N(t);return m.flavours[t].call(null,s),s.flavours=m.flavours,s.useFlavour=m.useFlavour,s}throw Error(`Flavour not available: ${t}`)};var S=m;m.flavours.mysql=(c)=>{let t=c.cls;t.MysqlOnDuplicateKeyUpdateBlock=class extends t.AbstractSetFieldBlock{onDupUpdate(s,i,e){this._set(s,i,e)}_toParamString(s={}){let i="",e=[];for(let n=0;n<this._fields.length;++n){i=p(i,", ");let r=this._fields[n],a=this._values[0][n],o=this._valueOptions[0][n];if(typeof a>"u")i+=r;else{let l=this._buildString(`${r} = ${this.options.parameterCharacter}`,[a],{buildParameterized:s.buildParameterized,formattingOptions:o});i+=l.text,l.values.forEach((u)=>e.push(u))}}return{text:!i.length?"":`ON DUPLICATE KEY UPDATE ${i}`,values:e}}},t.Insert=class extends t.QueryBuilder{constructor(s,i=null){i=i||[new t.StringBlock(s,"INSERT"),new t.IntoTableBlock(s),new t.InsertFieldValueBlock(s),new t.InsertFieldsFromQueryBlock(s),new t.MysqlOnDuplicateKeyUpdateBlock(s)];super(s,i)}},t.Replace=class extends t.QueryBuilder{constructor(s,i=null){i=i||[new t.StringBlock(s,"REPLACE"),new t.IntoTableBlock(s),new t.InsertFieldValueBlock(s),new t.InsertFieldsFromQueryBlock(s)];super(s,i)}},c.replace=(s,i)=>new t.Replace(s,i)};m.flavours.postgres=(c)=>{let t=c.cls;t.DefaultQueryBuilderOptions.numberedParameters=!0,t.DefaultQueryBuilderOptions.numberedParametersStartAt=1,t.DefaultQueryBuilderOptions.autoQuoteAliasNames=!1,t.DefaultQueryBuilderOptions.useAsForTableAliasNames=!0,t.PostgresOnConflictKeyUpdateBlock=class extends t.AbstractSetFieldBlock{_onConflict;_dupFields;constructor(s){super(s);this._onConflict=!1,this._dupFields=[]}onConflict(s,i){if(this._onConflict=!0,!s)return;if(!B(s))s=[s];if(this._dupFields=s.map(this._sanitizeField.bind(this)),i)Object.keys(i).forEach((e)=>{this._set(e,i[e])})}_toParamString(s={}){let i="",e=[];for(let r=0;r<this._fields.length;++r){i=p(i,", ");let a=this._fields[r],o=this._values[0][r],l=this._valueOptions[0][r];if(typeof o>"u")i+=a;else{let u=this._buildString(`${a} = ${this.options.parameterCharacter}`,[o],{buildParameterized:s.buildParameterized,formattingOptions:l});i+=u.text,u.values.forEach((d)=>e.push(d))}}let n={text:"",values:e};if(this._onConflict){let r=this._dupFields.length?`(${this._dupFields.join(", ")}) `:"",a=i.length?`UPDATE SET ${i}`:"NOTHING";n.text=`ON CONFLICT ${r}DO ${a}`}return n}},t.ReturningBlock=class extends t.Block{_fields;constructor(s){super(s);this._fields=[]}returning(s,i=null,e={}){if(i=i?this._sanitizeFieldAlias(i):i,s=this._sanitizeField(s),this._fields.filter((r)=>r.name===s&&r.alias===i).length)return this;this._fields.push({name:s,alias:i,options:e})}_toParamString(s={}){let{buildParameterized:i}=s,e="",n=[];for(let r of this._fields){e=p(e,", ");let{name:a,alias:o,options:l}=r;if(typeof a==="string")e+=this._formatFieldName(a,l);else{let u=a._toParamString({nested:!0,buildParameterized:i});e+=u.text,u.values.forEach((d)=>n.push(d))}if(o)e+=` AS ${this._formatFieldAlias(o)}`}return{text:e.length>0?`RETURNING ${e}`:"",values:n}}},t.WithBlock=class extends t.Block{_tables;constructor(s){super(s);this._tables=[]}with(s,i){this._tables.push({alias:s,table:i})}_toParamString(s={}){let i=[],e=[];for(let{alias:n,table:r}of this._tables){let a=r._toParamString({buildParameterized:s.buildParameterized,nested:!0});i.push(`${n} AS ${a.text}`),a.values.forEach((o)=>e.push(o))}return{text:i.length?`WITH ${i.join(", ")}`:"",values:e}}},t.DistinctOnBlock=class extends t.Block{_useDistinct=!1;_distinctFields;constructor(s){super(s);this._distinctFields=[]}distinct(...s){this._useDistinct=!0,s.forEach((i)=>{this._distinctFields.push(this._sanitizeField(i))})}_toParamString(){let s="";if(this._useDistinct){if(s="DISTINCT",this._distinctFields.length)s+=` ON (${this._distinctFields.join(", ")})`}return{text:s,values:[]}}},t.Select=class extends t.QueryBuilder{constructor(s,i=null){i=i||[new t.WithBlock(s),new t.StringBlock(s,"SELECT"),new t.FunctionBlock(s),new t.DistinctOnBlock(s),new t.GetFieldBlock(s),new t.FromTableBlock(s),new t.JoinBlock(s),new t.WhereBlock(s),new t.GroupByBlock(s),new t.HavingBlock(s),new t.OrderByBlock(s),new t.LimitBlock(s),new t.OffsetBlock(s),new t.UnionBlock(s)];super(s,i)}},t.Insert=class extends t.QueryBuilder{constructor(s,i=null){i=i||[new t.WithBlock(s),new t.StringBlock(s,"INSERT"),new t.IntoTableBlock(s),new t.InsertFieldValueBlock(s),new t.InsertFieldsFromQueryBlock(s),new t.PostgresOnConflictKeyUpdateBlock(s),new t.ReturningBlock(s)];super(s,i)}},t.Update=class extends t.QueryBuilder{constructor(s,i=null){i=i||[new t.WithBlock(s),new t.StringBlock(s,"UPDATE"),new t.UpdateTableBlock(s),new t.SetFieldBlock(s),new t.FromTableBlock(s),new t.WhereBlock(s),new t.OrderByBlock(s),new t.LimitBlock(s),new t.ReturningBlock(s)];super(s,i)}},t.Delete=class extends t.QueryBuilder{constructor(s,i=null){i=i||[new t.WithBlock(s),new t.StringBlock(s,"DELETE"),new t.TargetTableBlock(s),new t.FromTableBlock({...s,singleTable:!0}),new t.JoinBlock(s),new t.WhereBlock(s),new t.OrderByBlock(s),new t.LimitBlock(s),new t.ReturningBlock(s)];super(s,i)}}};m.flavours.mssql=(c)=>{let t=c.cls;t.DefaultQueryBuilderOptions.replaceSingleQuotes=!0,t.DefaultQueryBuilderOptions.autoQuoteAliasNames=!1,t.DefaultQueryBuilderOptions.numberedParametersPrefix="@",c.registerValueHandler(Date,(s)=>{let i=s;return`'${i.getUTCFullYear()}-${i.getUTCMonth()+1}-${i.getUTCDate()} ${i.getUTCHours()}:${i.getUTCMinutes()}:${i.getUTCSeconds()}'`}),t.MssqlLimitOffsetTopBlock=class extends t.Block{_limits;_offsets;ParentBlock;LimitBlock;TopBlock;OffsetBlock;constructor(s){super(s);this._limits=null,this._offsets=null;let i=function(e){e=this._sanitizeLimitOffset(e),this._parent._limits=e};this.ParentBlock=class extends t.Block{_parent;constructor(e){super(e.options);this._parent=e}},this.LimitBlock=class extends this.ParentBlock{limit;constructor(e){super(e);this.limit=i}_toParamString(){let e="";if(this._parent._limits&&this._parent._offsets)e=`FETCH NEXT ${this._parent._limits} ROWS ONLY`;return{text:e,values:[]}}},this.TopBlock=class extends this.ParentBlock{top;constructor(e){super(e);this.top=i}_toParamString(){let e="";if(this._parent._limits&&!this._parent._offsets)e=`TOP (${this._parent._limits})`;return{text:e,values:[]}}},this.OffsetBlock=class extends this.ParentBlock{offset(e){this._parent._offsets=this._sanitizeLimitOffset(e)}_toParamString(){let e="";if(this._parent._offsets)e=`OFFSET ${this._parent._offsets} ROWS`;return{text:e,values:[]}}}}LIMIT(){return new this.LimitBlock(this)}TOP(){return new this.TopBlock(this)}OFFSET(){return new this.OffsetBlock(this)}},t.MssqlUpdateTopBlock=class extends t.Block{_limits;limit;top;constructor(s){super(s);this._limits=null;let i=(e)=>{this._limits=this._sanitizeLimitOffset(e)};this.limit=i,this.top=i}_toParamString(){return{text:this._limits?`TOP (${this._limits})`:"",values:[]}}},t.MssqlInsertFieldValueBlock=class extends t.InsertFieldValueBlock{_outputs;constructor(s){super(s);this._outputs=[]}output(s){if(typeof s==="string")this._outputs.push(`INSERTED.${this._sanitizeField(s)}`);else s.forEach((i)=>{this._outputs.push(`INSERTED.${this._sanitizeField(i)}`)})}_toParamString(s){let i=super._toParamString(s);if(i.text.length&&this._outputs.length>0){let e=`OUTPUT ${this._outputs.join(", ")} `,n=i.text.indexOf("VALUES");i.text=i.text.substring(0,n)+e+i.text.substring(n)}return i}},t.MssqlUpdateDeleteOutputBlock=class extends t.Block{_outputs;constructor(s){super(s);this._outputs=[]}outputs(s){for(let i in s)this.output(i,s[i])}output(s,i=null){s=this._sanitizeField(s),i=i?this._sanitizeFieldAlias(i):i,this._outputs.push({name:this.options.forDelete?`DELETED.${s}`:`INSERTED.${s}`,alias:i})}_toParamString(s){let i="";if(this._outputs.length){for(let e of this._outputs)if(i=p(i,", "),i+=e.name,e.alias)i+=` AS ${this._formatFieldAlias(e.alias)}`;i=`OUTPUT ${i}`}return{text:i,values:[]}}},t.Select=class extends t.QueryBuilder{constructor(s,i=null){let e=new t.MssqlLimitOffsetTopBlock(s);i=i||[new t.StringBlock(s,"SELECT"),new t.DistinctBlock(s),e.TOP(),new t.GetFieldBlock(s),new t.FromTableBlock(s),new t.JoinBlock(s),new t.WhereBlock(s),new t.GroupByBlock(s),new t.HavingBlock(s),new t.OrderByBlock(s),e.OFFSET(),e.LIMIT(),new t.UnionBlock(s)];super(s,i)}},t.Update=class extends t.QueryBuilder{constructor(s,i=null){i=i||[new t.StringBlock(s,"UPDATE"),new t.MssqlUpdateTopBlock(s),new t.UpdateTableBlock(s),new t.SetFieldBlock(s),new t.MssqlUpdateDeleteOutputBlock(s),new t.WhereBlock(s)];super(s,i)}},t.Delete=class extends t.QueryBuilder{constructor(s,i=null){i=i||[new t.StringBlock(s,"DELETE"),new t.TargetTableBlock(s),new t.FromTableBlock(f({},s,{singleTable:!0})),new t.JoinBlock(s),new t.MssqlUpdateDeleteOutputBlock(f({},s,{forDelete:!0})),new t.WhereBlock(s),new t.OrderByBlock(s),new t.LimitBlock(s)];super(s,i)}},t.Insert=class extends t.QueryBuilder{constructor(s,i=null){i=i||[new t.StringBlock(s,"INSERT"),new t.IntoTableBlock(s),new t.MssqlInsertFieldValueBlock(s),new t.InsertFieldsFromQueryBlock(s)];super(s,i)}}};var H=S;})();
|
|
1
|
+
(()=>{var{defineProperty:b,getOwnPropertyNames:V,getOwnPropertyDescriptor:$}=Object,z=Object.prototype.hasOwnProperty;function A(c){return this[c]}var q=(c)=>{var t=(O??=new WeakMap).get(c),s;if(t)return t;if(t=b({},"__esModule",{value:!0}),c&&typeof c==="object"||typeof c==="function"){for(var r of V(c))if(!z.call(t,r))b(t,r,{get:A.bind(c,r),enumerable:!(s=$(c,r))||s.enumerable})}return O.set(c,t),t},O;var C=(c)=>c;function D(c,t){this[c]=C.bind(null,t)}var I=(c,t)=>{for(var s in t)b(c,s,{get:t[s],enumerable:!0,configurable:!0,set:D.bind(t,s)})};var H={};I(H,{squel:()=>S,default:()=>R});var P={name:"squel",version:"6.0.7",description:"SQL query string builder",keywords:["sql","database","rdbms","query-builder","mysql","postgres","mssql"],author:"Ramesh Nair <ram@hiddentao.com> (http://www.hiddentao.com/)",contributors:["Ramesh Nair <ram@hiddentao.com> (http://www.hiddentao.com/)","Sergej Brjuchanov <serges@seznam.cz>"],license:"MIT",repository:{type:"git",url:"https://github.com/hiddentao/squel.git"},homepage:"https://github.com/hiddentao/squel",bugs:{url:"https://github.com/hiddentao/squel/issues"},type:"module",main:"./dist/cjs/index.js",module:"./dist/esm/index.js",types:"./dist/types/index.d.ts",exports:{".":{types:"./dist/types/index.d.ts",import:"./dist/esm/index.js",require:"./dist/cjs/index.js"},"./browser":"./dist/browser/squel.min.js"},files:["dist","README.md","LICENSE.md","CHANGELOG.md"],engines:{node:">=18.0.0"},publishConfig:{access:"public",provenance:!0},scripts:{build:"bun run scripts/build.ts",test:"bun test","test:coverage":"bun test --coverage --coverage-reporter=lcov","test:watch":"bun test --watch",lint:"biome check --write ./src ./tests ./scripts",format:"biome format --write ./src ./tests ./scripts",check:"biome check ./src ./tests ./scripts",typecheck:"tsc --noEmit",prepare:"husky",prepublishOnly:"bun run build && bun run test"},dependencies:{},devDependencies:{"@biomejs/biome":"^1.9.4","@commitlint/cli":"^19.8.1","@commitlint/config-conventional":"^19.8.1","@types/bun":"latest","@types/node":"^22.0.0","commit-and-tag-version":"^12.6.0",husky:"^9.1.7",typescript:"^5.3.0"}};function p(c,t){return c.length?c+t:c}function f(c,...t){if(c&&t){for(let s of t)if(s&&typeof s==="object")for(let r of Object.getOwnPropertyNames(s))c[r]=s[r]}return c}function x(c){return!!c&&c.constructor.prototype===Object.prototype}function B(c){return!!c&&c.constructor.prototype===Array.prototype}function E(c){if(!c)return c;let t=c;if(typeof t.clone==="function")return t.clone();if(x(c)||B(c)){let s=new t.constructor;for(let r of Object.getOwnPropertyNames(c))if(typeof t[r]!=="function")s[r]=E(t[r]);return s}return JSON.parse(JSON.stringify(c))}function v(c,t,s){let r=typeof t;if(r!=="function"&&r!=="string")throw Error("type must be a class constructor or string");if(typeof s!=="function")throw Error("handler must be a function");for(let e of c)if(e.type===t){e.handler=s;return}c.push({type:t,handler:s})}function T(c,t,s){return F(c,t)||F(c,s)}function F(c,t){for(let s of t)if(typeof c===s.type||typeof s.type!=="string"&&c instanceof s.type)return s.handler;return}function N(c=null){let t={isSquelBuilder(e){return!!e&&!!e._toParamString}},s=(e)=>{return!t.isSquelBuilder(e)||!e.options.rawNesting};t.DefaultQueryBuilderOptions={autoQuoteTableNames:!1,autoQuoteFieldNames:!1,autoQuoteAliasNames:!0,useAsForTableAliasNames:!1,nameQuoteCharacter:"`",tableAliasQuoteCharacter:"`",fieldAliasQuoteCharacter:'"',valueHandlers:[],parameterCharacter:"?",numberedParameters:!1,numberedParametersPrefix:"$",numberedParametersStartAt:1,replaceSingleQuotes:!1,singleQuoteReplacement:"''",separator:" ",stringFormatter:null,rawNesting:!1},t.globalValueHandlers=[],t.registerValueHandler=(e,n)=>{v(t.globalValueHandlers,e,n)},t.Cloneable=class{clone(){let e=new this.constructor;return f(e,E(f({},this)))}},t.BaseBuilder=class extends t.Cloneable{options;constructor(e){super();let n=JSON.parse(JSON.stringify(t.DefaultQueryBuilderOptions));n.stringFormatter=t.DefaultQueryBuilderOptions.stringFormatter,this.options=f(n,e)}registerValueHandler(e,n){return v(this.options.valueHandlers,e,n),this}_sanitizeExpression(e){if(!t.isSquelBuilder(e)){if(typeof e!=="string")throw Error("expression must be a string or builder instance")}return e}_sanitizeName(e,n){if(typeof e!=="string")throw Error(`${n} must be a string`);return e}_sanitizeField(e){if(!t.isSquelBuilder(e))return this._sanitizeName(e,"field name");return e}_sanitizeBaseBuilder(e){if(t.isSquelBuilder(e))return e;throw Error("must be a builder instance")}_sanitizeTable(e,n){if(typeof e!=="string")try{return this._sanitizeBaseBuilder(e)}catch(i){throw Error("table name must be a string or a builder")}return this._sanitizeName(e,"table")}_sanitizeTableAlias(e){return this._sanitizeName(e,"table alias")}_sanitizeFieldAlias(e){return this._sanitizeName(e,"field alias")}_sanitizeLimitOffset(e){let n=Number.parseInt(e,10);if(n<0||Number.isNaN(n))throw Error("limit/offset must be >= 0");return n}_sanitizeValue(e){let n=typeof e;if(e===null);else if(n==="string"||n==="number"||n==="boolean");else if(t.isSquelBuilder(e));else if(!T(e,this.options.valueHandlers,t.globalValueHandlers))throw Error("field value must be a string, number, boolean, null or one of the registered custom value types");return e}_escapeValue(e){return this.options.replaceSingleQuotes&&e?e.replace(/'/g,this.options.singleQuoteReplacement):e}_formatTableName(e){if(this.options.autoQuoteTableNames){let n=this.options.nameQuoteCharacter;e=`${n}${e}${n}`}return e}_formatFieldAlias(e){if(this.options.autoQuoteAliasNames){let n=this.options.fieldAliasQuoteCharacter;e=`${n}${e}${n}`}return e}_formatTableAlias(e){if(this.options.autoQuoteAliasNames){let n=this.options.tableAliasQuoteCharacter;e=`${n}${e}${n}`}return this.options.useAsForTableAliasNames?`AS ${e}`:e}_formatFieldName(e,n={}){if(this.options.autoQuoteFieldNames){let i=this.options.nameQuoteCharacter;if(n.ignorePeriodsForFieldNameQuotes)e=`${i}${e}${i}`;else e=e.split(".").map((a)=>a==="*"?a:`${i}${a}${i}`).join(".")}return e}_formatCustomValue(e,n,i){let a=T(e,this.options.valueHandlers,t.globalValueHandlers);if(a){if(e=a(e,n,i),e?.rawNesting)return{formatted:!0,rawNesting:!0,value:e.value}}return{formatted:!!a,value:e}}_formatValueForParamArray(e,n={}){if(B(e))return e.map((i)=>this._formatValueForParamArray(i,n));return this._formatCustomValue(e,!0,n).value}_formatValueForQueryString(e,n={}){let{rawNesting:i,formatted:a,value:o}=this._formatCustomValue(e,!1,n),l=o;if(a){if(i)return l;return this._applyNestingFormatting(l,s(e))}if(B(l))l=l.map((u)=>this._formatValueForQueryString(u)),l=this._applyNestingFormatting(l.join(", "),s(l));else{let u=typeof l;if(l===null)l="NULL";else if(u==="boolean")l=l?"TRUE":"FALSE";else if(t.isSquelBuilder(l))l=this._applyNestingFormatting(l.toString(),s(l));else if(u!=="number"){if(u==="string"&&this.options.stringFormatter)return this.options.stringFormatter(l);if(n.dontQuote)l=`${l}`;else l=`'${this._escapeValue(l)}'`}}return l}_applyNestingFormatting(e,n=!0){if(e&&typeof e==="string"&&n&&!this.options.rawNesting){let i=e.startsWith("(")&&e.endsWith(")");if(i){let a=0,o=1;while(e.length-1>++a){let l=e.charAt(a);if(l==="(")o++;else if(l===")"){if(o--,o<1){i=!1;break}}}}if(!i)e=`(${e})`}return e}_buildString(e,n,i={}){let{nested:a,buildParameterized:o,formattingOptions:l}=i;n=n||[],e=e||"";let u="",d=-1,h=[],y=this.options.parameterCharacter,_=0;while(e.length>_)if(e.substring(_,_+y.length)===y){let g=n[++d];if(o)if(t.isSquelBuilder(g)){let w=g._toParamString({buildParameterized:o,nested:!0});u+=w.text,w.values.forEach((k)=>h.push(k))}else if(g=this._formatValueForParamArray(g,l),B(g)){let w=g.map(()=>y).join(", ");u+=`(${w})`,g.forEach((k)=>h.push(k))}else u+=y,h.push(g);else u+=this._formatValueForQueryString(g,l);_+=y.length}else u+=e.charAt(_),_++;return{text:this._applyNestingFormatting(u,!!a),values:h}}_buildManyStrings(e,n,i={}){let a=[],o=[];for(let u=0;e.length>u;++u){let d=e[u],h=n[u],{text:y,values:_}=this._buildString(d,h,{buildParameterized:i.buildParameterized,nested:!1});a.push(y),_.forEach((g)=>o.push(g))}let l=a.join(this.options.separator);return{text:l.length?this._applyNestingFormatting(l,!!i.nested):"",values:o}}_toParamString(e){throw Error("Not yet implemented")}toString(e={}){return this._toParamString(e).text}toParam(e={}){return this._toParamString({...e,buildParameterized:!0})}},t.Expression=class extends t.BaseBuilder{_nodes;constructor(e){super(e);this._nodes=[]}and(e,...n){return e=this._sanitizeExpression(e),this._nodes.push({type:"AND",expr:e,para:n}),this}or(e,...n){return e=this._sanitizeExpression(e),this._nodes.push({type:"OR",expr:e,para:n}),this}_toParamString(e={}){let n=[],i=[];for(let a of this._nodes){let{type:o,expr:l,para:u}=a,{text:d,values:h}=t.isSquelBuilder(l)?l._toParamString({buildParameterized:e.buildParameterized,nested:!0}):this._buildString(l,u,{buildParameterized:e.buildParameterized});if(n.length)n.push(o);n.push(d),h.forEach((y)=>i.push(y))}return n=n.join(" "),{text:this._applyNestingFormatting(n,!!e.nested),values:i}}},t.Case=class extends t.BaseBuilder{_fieldName=null;_cases;_elseValue=null;constructor(e,n={}){super(n);let i=null;if(x(e))n=e;else if(e)i=this._sanitizeField(e);this._fieldName=i,this.options=f({...t.DefaultQueryBuilderOptions},n),this._cases=[]}when(e,...n){return this._cases.unshift({expression:e,values:n||[]}),this}then(e){if(this._cases.length===0)throw Error("when() needs to be called first");return this._cases[0].result=e,this}else(e){return this._elseValue=e,this}_toParamString(e={}){let n="",i=[];for(let{expression:a,values:o,result:l}of this._cases){n=p(n," ");let u=this._buildString(a,o,{buildParameterized:e.buildParameterized,nested:!0});n+=`WHEN ${u.text} THEN ${this._formatValueForQueryString(l)}`,u.values.forEach((d)=>i.push(d))}if(n.length){if(n+=` ELSE ${this._formatValueForQueryString(this._elseValue)} END`,this._fieldName)n=`${this._fieldName} ${n}`;n=`CASE ${n}`}else n=this._formatValueForQueryString(this._elseValue);return{text:n,values:i}}},t.Block=class extends t.BaseBuilder{constructor(e){super(e)}exposedMethods(){let e={},n=this;while(n){for(let i of Object.getOwnPropertyNames(n))if(i!=="constructor"&&typeof n[i]==="function"&&!i.startsWith("_")&&!t.Block.prototype[i])e[i]=n[i];n=Object.getPrototypeOf(n)}return e}},t.StringBlock=class extends t.Block{_str;constructor(e,n){super(e);this._str=n}_toParamString(e={}){return{text:this._str,values:[]}}},t.FunctionBlock=class extends t.Block{_strings;_values;constructor(e){super(e);this._strings=[],this._values=[]}function(e,...n){this._strings.push(e),this._values.push(n)}_toParamString(e={}){return this._buildManyStrings(this._strings,this._values,e)}},t.registerValueHandler(t.FunctionBlock,(e,n=!1)=>{return n?e.toParam():e.toString()}),t.AbstractTableBlock=class extends t.Block{_tables;constructor(e,n){super(e);this._tables=[]}_table(e,n=null){if(n=n?this._sanitizeTableAlias(n):n,e=this._sanitizeTable(e),this.options.singleTable)this._tables=[];this._tables.push({table:e,alias:n})}_hasTable(){return this._tables.length>0}_toParamString(e={}){let n="",i=[];if(this._hasTable()){for(let{table:a,alias:o}of this._tables){n=p(n,", ");let l;if(t.isSquelBuilder(a)){let{text:u,values:d}=a._toParamString({buildParameterized:e.buildParameterized,nested:!0});l=u,d.forEach((h)=>i.push(h))}else l=this._formatTableName(a);if(o)l+=` ${this._formatTableAlias(o)}`;n+=l}if(this.options.prefix)n=`${this.options.prefix} ${n}`}return{text:n,values:i}}},t.TargetTableBlock=class extends t.AbstractTableBlock{target(e){this._table(e)}},t.UpdateTableBlock=class extends t.AbstractTableBlock{table(e,n=null){this._table(e,n)}_toParamString(e={}){if(!this._hasTable())throw Error("table() needs to be called");return super._toParamString(e)}},t.FromTableBlock=class extends t.AbstractTableBlock{constructor(e){super(f({},e,{prefix:"FROM"}))}from(e,n=null){this._table(e,n)}},t.IntoTableBlock=class extends t.AbstractTableBlock{constructor(e){super(f({},e,{prefix:"INTO",singleTable:!0}))}into(e){this._table(e)}_toParamString(e={}){if(!this._hasTable())throw Error("into() needs to be called");return super._toParamString(e)}},t.GetFieldBlock=class extends t.Block{_fields;constructor(e){super(e);this._fields=[]}fields(e,n={}){if(B(e))for(let i of e)this.field(i,null,n);else for(let i in e){let a=e[i];this.field(i,a,n)}}field(e,n=null,i={}){if(n=n?this._sanitizeFieldAlias(n):n,e=this._sanitizeField(e),this._fields.filter((o)=>o.name===e&&o.alias===n).length)return this;this._fields.push({name:e,alias:n,options:i});return}_toParamString(e={}){let{queryBuilder:n,buildParameterized:i}=e,a="",o=[];for(let l of this._fields){a=p(a,", ");let{name:u,alias:d,options:h}=l;if(typeof u==="string")a+=this._formatFieldName(u,h);else{let y=u._toParamString({nested:!0,buildParameterized:i});a+=y.text,y.values.forEach((_)=>o.push(_))}if(d)a+=` AS ${this._formatFieldAlias(d)}`}if(!a.length){if(n?.getBlock(t.FromTableBlock)?._hasTable())a="*"}return{text:a,values:o}}},t.AbstractSetFieldBlock=class extends t.Block{_fields;_values;_valueOptions;constructor(e){super(e);this._fields=[],this._values=[[]],this._valueOptions=[[]]}_reset(){this._fields=[],this._values=[[]],this._valueOptions=[[]]}_set(e,n,i={}){if(this._values.length>1)throw Error("Cannot set multiple rows of fields this way.");if(typeof n<"u")n=this._sanitizeValue(n);e=this._sanitizeField(e);let a=this._fields.indexOf(e);if(a===-1)this._fields.push(e),a=this._fields.length-1;this._values[0][a]=n,this._valueOptions[0][a]=i}_setFields(e,n={}){if(typeof e!=="object")throw Error(`Expected an object but got ${typeof e}`);for(let i in e)this._set(i,e[i],n)}_setFieldsRows(e,n={}){if(!B(e))throw Error(`Expected an array of objects but got ${typeof e}`);this._reset();for(let i=0;e.length>i;++i){let a=e[i];for(let o in a){let l=a[o];o=this._sanitizeField(o),l=this._sanitizeValue(l);let u=this._fields.indexOf(o);if(i>0&&u===-1)throw Error("All fields in subsequent rows must match the fields in the first row");if(u===-1)this._fields.push(o),u=this._fields.length-1;if(!B(this._values[i]))this._values[i]=[],this._valueOptions[i]=[];this._values[i][u]=l,this._valueOptions[i][u]=n}}}},t.SetFieldBlock=class extends t.AbstractSetFieldBlock{set(e,n,i){this._set(e,n,i)}setFields(e,n){this._setFields(e,n)}_toParamString(e={}){let{buildParameterized:n}=e;if(this._fields.length<=0)throw Error("set() needs to be called");let i="",a=[];for(let o=0;o<this._fields.length;++o){i=p(i,", ");let l=this._formatFieldName(this._fields[o]),u=this._values[0][o];if(l.indexOf("=")<0)l=`${l} = ${this.options.parameterCharacter}`;let d=this._buildString(l,[u],{buildParameterized:n,formattingOptions:this._valueOptions[0][o]});i+=d.text,d.values.forEach((h)=>a.push(h))}return{text:`SET ${i}`,values:a}}},t.InsertFieldValueBlock=class extends t.AbstractSetFieldBlock{set(e,n,i={}){this._set(e,n,i)}setFields(e,n){this._setFields(e,n)}setFieldsRows(e,n){this._setFieldsRows(e,n)}_toParamString(e={}){let{buildParameterized:n}=e,i=this._fields.map((l)=>this._formatFieldName(l)).join(", "),a=[],o=[];for(let l=0;l<this._values.length;++l){a[l]="";for(let u=0;u<this._values[l].length;++u){let d=this._buildString(this.options.parameterCharacter,[this._values[l][u]],{buildParameterized:n,formattingOptions:this._valueOptions[l][u]});d.values.forEach((h)=>o.push(h)),a[l]=p(a[l],", "),a[l]+=d.text}}return{text:i.length?`(${i}) VALUES (${a.join("), (")})`:"",values:o}}},t.InsertFieldsFromQueryBlock=class extends t.Block{_fields;_query=null;constructor(e){super(e);this._fields=[]}fromQuery(e,n){this._fields=e.map((i)=>this._sanitizeField(i)),this._query=this._sanitizeBaseBuilder(n)}_toParamString(e={}){let n="",i=[];if(this._fields.length&&this._query){let{text:a,values:o}=this._query._toParamString({buildParameterized:e.buildParameterized,nested:!0});n=`(${this._fields.join(", ")}) ${this._applyNestingFormatting(a)}`,i=o}return{text:n,values:i}}},t.DistinctBlock=class extends t.Block{_useDistinct=!1;distinct(){this._useDistinct=!0}_toParamString(){return{text:this._useDistinct?"DISTINCT":"",values:[]}}},t.GroupByBlock=class extends t.Block{_groups;constructor(e){super(e);this._groups=[]}group(e){this._groups.push(this._sanitizeField(e))}_toParamString(e={}){return{text:this._groups.length?`GROUP BY ${this._groups.join(", ")}`:"",values:[]}}},t.AbstractVerbSingleValueBlock=class extends t.Block{_value=null;constructor(e){super(e)}_setValue(e){this._value=e!==null?this._sanitizeLimitOffset(e):e}_toParamString(e={}){let n=this._value!==null?`${this.options.verb} ${this.options.parameterCharacter}`:"",i=this._value!==null?[this._value]:[];return this._buildString(n,i,e)}},t.OffsetBlock=class extends t.AbstractVerbSingleValueBlock{constructor(e){super(f({},e,{verb:"OFFSET"}))}offset(e){this._setValue(e)}},t.LimitBlock=class extends t.AbstractVerbSingleValueBlock{constructor(e){super(f({},e,{verb:"LIMIT"}))}limit(e){this._setValue(e)}},t.AbstractConditionBlock=class extends t.Block{_conditions;constructor(e){super(e);this._conditions=[]}_condition(e,...n){e=this._sanitizeExpression(e),this._conditions.push({expr:e,values:n||[]})}_toParamString(e={}){let n=[],i=[];for(let{expr:o,values:l}of this._conditions){let u=t.isSquelBuilder(o)?o._toParamString({buildParameterized:e.buildParameterized}):this._buildString(o,l,{buildParameterized:e.buildParameterized});if(u.text.length)n.push(u.text);u.values.forEach((d)=>i.push(d))}let a=n.join(") AND (");return{text:a.length?`${this.options.verb} (${a})`:"",values:i}}},t.WhereBlock=class extends t.AbstractConditionBlock{constructor(e){super(f({},e,{verb:"WHERE"}))}where(e,...n){this._condition(e,...n)}},t.HavingBlock=class extends t.AbstractConditionBlock{constructor(e){super(f({},e,{verb:"HAVING"}))}having(e,...n){this._condition(e,...n)}},t.OrderByBlock=class extends t.Block{_orders;constructor(e){super(e);this._orders=[]}order(e,n,...i){e=this._sanitizeField(e);let a;if(typeof n==="string")a=n;else if(n===void 0)a="ASC";else if(n===null)a=null;else a=n?"ASC":"DESC";this._orders.push({field:e,dir:a,values:i||[]})}_toParamString(e={}){let n="",i=[];for(let{field:a,dir:o,values:l}of this._orders){n=p(n,", ");let u=this._buildString(a,l,{buildParameterized:e.buildParameterized});if(n+=u.text,B(u.values))u.values.forEach((d)=>i.push(d));if(o!==null)n+=` ${o}`}return{text:n.length?`ORDER BY ${n}`:"",values:i}}},t.JoinBlock=class extends t.Block{_joins;constructor(e){super(e);this._joins=[]}join(e,n=null,i=null,a="INNER"){e=this._sanitizeTable(e,!0),n=n?this._sanitizeTableAlias(n):n,i=i?this._sanitizeExpression(i):i,this._joins.push({type:a,table:e,alias:n,condition:i})}left_join(e,n=null,i=null){this.join(e,n,i,"LEFT")}right_join(e,n=null,i=null){this.join(e,n,i,"RIGHT")}outer_join(e,n=null,i=null){this.join(e,n,i,"OUTER")}left_outer_join(e,n=null,i=null){this.join(e,n,i,"LEFT OUTER")}full_join(e,n=null,i=null){this.join(e,n,i,"FULL")}cross_join(e,n=null,i=null){this.join(e,n,i,"CROSS")}_toParamString(e={}){let n="",i=[];for(let{type:a,table:o,alias:l,condition:u}of this._joins){n=p(n,this.options.separator);let d;if(t.isSquelBuilder(o)){let h=o._toParamString({buildParameterized:e.buildParameterized,nested:!0});h.values.forEach((y)=>i.push(y)),d=h.text}else d=this._formatTableName(o);if(n+=`${a} JOIN ${d}`,l)n+=` ${this._formatTableAlias(l)}`;if(u){n+=" ON ";let h;if(t.isSquelBuilder(u))h=u._toParamString({buildParameterized:e.buildParameterized});else h=this._buildString(u,[],{buildParameterized:e.buildParameterized});n+=this._applyNestingFormatting(h.text),h.values.forEach((y)=>i.push(y))}}return{text:n,values:i}}},t.UnionBlock=class extends t.Block{_unions;constructor(e){super(e);this._unions=[]}union(e,n="UNION"){e=this._sanitizeTable(e),this._unions.push({type:n,table:e})}union_all(e){this.union(e,"UNION ALL")}_toParamString(e={}){let n="",i=[];for(let{type:a,table:o}of this._unions){n=p(n,this.options.separator);let l;if(o instanceof t.BaseBuilder){let u=o._toParamString({buildParameterized:e.buildParameterized,nested:!0});l=u.text,u.values.forEach((d)=>i.push(d))}else n=this._formatTableName(o),l="";n+=`${a} ${l}`}return{text:n,values:i}}},t.QueryBuilder=class extends t.BaseBuilder{blocks;constructor(e,n){super(e);this.blocks=n||[];for(let i of this.blocks){let a=i.exposedMethods();for(let o in a){let l=a[o];if(this[o]!==void 0)throw Error(`Builder already has a builder method called: ${o}`);((u,d,h)=>{this[d]=(...y)=>{return h.call(u,...y),this}})(i,o,l)}}}registerValueHandler(e,n){for(let i of this.blocks)i.registerValueHandler(e,n);return super.registerValueHandler(e,n),this}updateOptions(e){this.options=f(this.options,e);for(let n of this.blocks)n.options=f(n.options,e)}_toParamString(e={}){let n=f({},this.options,e),i=this.blocks.map((d)=>d._toParamString({buildParameterized:n.buildParameterized,queryBuilder:this})),a=i.map((d)=>d.text),o=i.map((d)=>d.values),l=a.filter((d)=>d.length>0).join(n.separator),u=[];if(o.forEach((d)=>d.forEach((h)=>u.push(h))),!n.nested){if(n.numberedParameters){let d=n.numberedParametersStartAt!==void 0?n.numberedParametersStartAt:1,h=n.parameterCharacter.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");l=l.replace(new RegExp(h,"g"),()=>{return`${n.numberedParametersPrefix}${d++}`})}}return{text:this._applyNestingFormatting(l,!!n.nested),values:u}}clone(){let e=this.blocks.map((n)=>n.clone());return new this.constructor(this.options,e)}getBlock(e){return this.blocks.find((n)=>n instanceof e)}},t.Select=class extends t.QueryBuilder{constructor(e,n=null){n=n||[new t.StringBlock(e,"SELECT"),new t.FunctionBlock(e),new t.DistinctBlock(e),new t.GetFieldBlock(e),new t.FromTableBlock(e),new t.JoinBlock(e),new t.WhereBlock(e),new t.GroupByBlock(e),new t.HavingBlock(e),new t.OrderByBlock(e),new t.LimitBlock(e),new t.OffsetBlock(e),new t.UnionBlock(e)];super(e,n)}},t.Update=class extends t.QueryBuilder{constructor(e,n=null){n=n||[new t.StringBlock(e,"UPDATE"),new t.UpdateTableBlock(e),new t.SetFieldBlock(e),new t.WhereBlock(e),new t.OrderByBlock(e),new t.LimitBlock(e)];super(e,n)}},t.Delete=class extends t.QueryBuilder{constructor(e,n=null){n=n||[new t.StringBlock(e,"DELETE"),new t.TargetTableBlock(e),new t.FromTableBlock(f({},e,{singleTable:!0})),new t.JoinBlock(e),new t.WhereBlock(e),new t.OrderByBlock(e),new t.LimitBlock(e)];super(e,n)}},t.Insert=class extends t.QueryBuilder{constructor(e,n=null){n=n||[new t.StringBlock(e,"INSERT"),new t.IntoTableBlock(e),new t.InsertFieldValueBlock(e),new t.InsertFieldsFromQueryBlock(e)];super(e,n)}};let r={VERSION:P.version,flavour:c,expr:(e)=>new t.Expression(e),case:(e,n)=>new t.Case(e,n),select:(e,n)=>new t.Select(e,n),update:(e,n)=>new t.Update(e,n),insert:(e,n)=>new t.Insert(e,n),delete:(e,n)=>new t.Delete(e,n),str:(...e)=>{let n=new t.FunctionBlock;return n.function(...e),n},rstr:(...e)=>{let n=new t.FunctionBlock({rawNesting:!0});return n.function(...e),n},registerValueHandler:t.registerValueHandler};return r.remove=r.delete,r.cls=t,r}var m=N();m.flavours={};m.useFlavour=function(t=null){if(!t)return m;if(m.flavours[t]instanceof Function){let s=N(t);return m.flavours[t].call(null,s),s.flavours=m.flavours,s.useFlavour=m.useFlavour,s}throw Error(`Flavour not available: ${t}`)};var S=m;m.flavours.mysql=(c)=>{let t=c.cls;t.MysqlOnDuplicateKeyUpdateBlock=class extends t.AbstractSetFieldBlock{onDupUpdate(s,r,e){this._set(s,r,e)}_toParamString(s={}){let r="",e=[];for(let n=0;n<this._fields.length;++n){r=p(r,", ");let i=this._fields[n],a=this._values[0][n],o=this._valueOptions[0][n];if(typeof a>"u")r+=i;else{let l=this._buildString(`${i} = ${this.options.parameterCharacter}`,[a],{buildParameterized:s.buildParameterized,formattingOptions:o});r+=l.text,l.values.forEach((u)=>e.push(u))}}return{text:!r.length?"":`ON DUPLICATE KEY UPDATE ${r}`,values:e}}},t.Insert=class extends t.QueryBuilder{constructor(s,r=null){r=r||[new t.StringBlock(s,"INSERT"),new t.IntoTableBlock(s),new t.InsertFieldValueBlock(s),new t.InsertFieldsFromQueryBlock(s),new t.MysqlOnDuplicateKeyUpdateBlock(s)];super(s,r)}},t.Replace=class extends t.QueryBuilder{constructor(s,r=null){r=r||[new t.StringBlock(s,"REPLACE"),new t.IntoTableBlock(s),new t.InsertFieldValueBlock(s),new t.InsertFieldsFromQueryBlock(s)];super(s,r)}},c.replace=(s,r)=>new t.Replace(s,r)};m.flavours.postgres=(c)=>{let t=c.cls;t.DefaultQueryBuilderOptions.numberedParameters=!0,t.DefaultQueryBuilderOptions.numberedParametersStartAt=1,t.DefaultQueryBuilderOptions.autoQuoteAliasNames=!1,t.DefaultQueryBuilderOptions.useAsForTableAliasNames=!0,t.PostgresOnConflictKeyUpdateBlock=class extends t.AbstractSetFieldBlock{_onConflict;_dupFields;constructor(s){super(s);this._onConflict=!1,this._dupFields=[]}onConflict(s,r){if(this._onConflict=!0,!s)return;if(!B(s))s=[s];if(this._dupFields=s.map(this._sanitizeField.bind(this)),r)Object.keys(r).forEach((e)=>{this._set(e,r[e])})}_toParamString(s={}){let r="",e=[];for(let i=0;i<this._fields.length;++i){r=p(r,", ");let a=this._fields[i],o=this._values[0][i],l=this._valueOptions[0][i];if(typeof o>"u")r+=a;else{let u=this._buildString(`${a} = ${this.options.parameterCharacter}`,[o],{buildParameterized:s.buildParameterized,formattingOptions:l});r+=u.text,u.values.forEach((d)=>e.push(d))}}let n={text:"",values:e};if(this._onConflict){let i=this._dupFields.length?`(${this._dupFields.join(", ")}) `:"",a=r.length?`UPDATE SET ${r}`:"NOTHING";n.text=`ON CONFLICT ${i}DO ${a}`}return n}},t.ReturningBlock=class extends t.Block{_fields;constructor(s){super(s);this._fields=[]}returning(s,r=null,e={}){if(r=r?this._sanitizeFieldAlias(r):r,s=this._sanitizeField(s),this._fields.filter((i)=>i.name===s&&i.alias===r).length)return this;this._fields.push({name:s,alias:r,options:e})}_toParamString(s={}){let{buildParameterized:r}=s,e="",n=[];for(let i of this._fields){e=p(e,", ");let{name:a,alias:o,options:l}=i;if(typeof a==="string")e+=this._formatFieldName(a,l);else{let u=a._toParamString({nested:!0,buildParameterized:r});e+=u.text,u.values.forEach((d)=>n.push(d))}if(o)e+=` AS ${this._formatFieldAlias(o)}`}return{text:e.length>0?`RETURNING ${e}`:"",values:n}}},t.WithBlock=class extends t.Block{_tables;constructor(s){super(s);this._tables=[]}with(s,r){this._tables.push({alias:s,table:r})}_toParamString(s={}){let r=[],e=[];for(let{alias:n,table:i}of this._tables){let a=i._toParamString({buildParameterized:s.buildParameterized,nested:!0});r.push(`${n} AS ${a.text}`),a.values.forEach((o)=>e.push(o))}return{text:r.length?`WITH ${r.join(", ")}`:"",values:e}}},t.DistinctOnBlock=class extends t.Block{_useDistinct=!1;_distinctFields;constructor(s){super(s);this._distinctFields=[]}distinct(...s){this._useDistinct=!0,s.forEach((r)=>{this._distinctFields.push(this._sanitizeField(r))})}_toParamString(){let s="";if(this._useDistinct){if(s="DISTINCT",this._distinctFields.length)s+=` ON (${this._distinctFields.join(", ")})`}return{text:s,values:[]}}},t.Select=class extends t.QueryBuilder{constructor(s,r=null){r=r||[new t.WithBlock(s),new t.StringBlock(s,"SELECT"),new t.FunctionBlock(s),new t.DistinctOnBlock(s),new t.GetFieldBlock(s),new t.FromTableBlock(s),new t.JoinBlock(s),new t.WhereBlock(s),new t.GroupByBlock(s),new t.HavingBlock(s),new t.OrderByBlock(s),new t.LimitBlock(s),new t.OffsetBlock(s),new t.UnionBlock(s)];super(s,r)}},t.Insert=class extends t.QueryBuilder{constructor(s,r=null){r=r||[new t.WithBlock(s),new t.StringBlock(s,"INSERT"),new t.IntoTableBlock(s),new t.InsertFieldValueBlock(s),new t.InsertFieldsFromQueryBlock(s),new t.PostgresOnConflictKeyUpdateBlock(s),new t.ReturningBlock(s)];super(s,r)}},t.Update=class extends t.QueryBuilder{constructor(s,r=null){r=r||[new t.WithBlock(s),new t.StringBlock(s,"UPDATE"),new t.UpdateTableBlock(s),new t.SetFieldBlock(s),new t.FromTableBlock(s),new t.WhereBlock(s),new t.OrderByBlock(s),new t.LimitBlock(s),new t.ReturningBlock(s)];super(s,r)}},t.Delete=class extends t.QueryBuilder{constructor(s,r=null){r=r||[new t.WithBlock(s),new t.StringBlock(s,"DELETE"),new t.TargetTableBlock(s),new t.FromTableBlock({...s,singleTable:!0}),new t.JoinBlock(s),new t.WhereBlock(s),new t.OrderByBlock(s),new t.LimitBlock(s),new t.ReturningBlock(s)];super(s,r)}}};var Q=function(c){c=this._sanitizeLimitOffset(c),this._parent._limits=c};m.flavours.mssql=(c)=>{let t=c.cls;t.DefaultQueryBuilderOptions.replaceSingleQuotes=!0,t.DefaultQueryBuilderOptions.autoQuoteAliasNames=!1,t.DefaultQueryBuilderOptions.numberedParametersPrefix="@",c.registerValueHandler(Date,(s)=>{let r=s;return`'${r.getUTCFullYear()}-${r.getUTCMonth()+1}-${r.getUTCDate()} ${r.getUTCHours()}:${r.getUTCMinutes()}:${r.getUTCSeconds()}'`}),t.MssqlLimitOffsetTopBlock=class extends t.Block{_limits;_offsets;ParentBlock;LimitBlock;TopBlock;OffsetBlock;constructor(s){super(s);this._limits=null,this._offsets=null,this.ParentBlock=class extends t.Block{_parent;constructor(r){super(r.options);this._parent=r}},this.LimitBlock=class extends this.ParentBlock{limit;constructor(r){super(r);this.limit=Q}_toParamString(){let r="";if(this._parent._limits&&this._parent._offsets)r=`FETCH NEXT ${this._parent._limits} ROWS ONLY`;return{text:r,values:[]}}},this.TopBlock=class extends this.ParentBlock{top;constructor(r){super(r);this.top=Q}_toParamString(){let r="";if(this._parent._limits&&!this._parent._offsets)r=`TOP (${this._parent._limits})`;return{text:r,values:[]}}},this.OffsetBlock=class extends this.ParentBlock{offset(r){this._parent._offsets=this._sanitizeLimitOffset(r)}_toParamString(){let r="";if(this._parent._offsets)r=`OFFSET ${this._parent._offsets} ROWS`;return{text:r,values:[]}}}}LIMIT(){return new this.LimitBlock(this)}TOP(){return new this.TopBlock(this)}OFFSET(){return new this.OffsetBlock(this)}},t.MssqlUpdateTopBlock=class extends t.Block{_limits;limit;top;constructor(s){super(s);this._limits=null;let r=(e)=>{this._limits=this._sanitizeLimitOffset(e)};this.limit=r,this.top=r}_toParamString(){return{text:this._limits?`TOP (${this._limits})`:"",values:[]}}},t.MssqlInsertFieldValueBlock=class extends t.InsertFieldValueBlock{_outputs;constructor(s){super(s);this._outputs=[]}output(s){if(typeof s==="string")this._outputs.push(`INSERTED.${this._sanitizeField(s)}`);else s.forEach((r)=>{this._outputs.push(`INSERTED.${this._sanitizeField(r)}`)})}_toParamString(s){let r=super._toParamString(s);if(r.text.length&&this._outputs.length>0){let e=`OUTPUT ${this._outputs.join(", ")} `,n=r.text.indexOf("VALUES");r.text=r.text.substring(0,n)+e+r.text.substring(n)}return r}},t.MssqlUpdateDeleteOutputBlock=class extends t.Block{_outputs;constructor(s){super(s);this._outputs=[]}outputs(s){for(let r in s)this.output(r,s[r])}output(s,r=null){s=this._sanitizeField(s),r=r?this._sanitizeFieldAlias(r):r,this._outputs.push({name:this.options.forDelete?`DELETED.${s}`:`INSERTED.${s}`,alias:r})}_toParamString(s){let r="";if(this._outputs.length){for(let e of this._outputs)if(r=p(r,", "),r+=e.name,e.alias)r+=` AS ${this._formatFieldAlias(e.alias)}`;r=`OUTPUT ${r}`}return{text:r,values:[]}}},t.Select=class extends t.QueryBuilder{constructor(s,r=null){let e=new t.MssqlLimitOffsetTopBlock(s);r=r||[new t.StringBlock(s,"SELECT"),new t.DistinctBlock(s),e.TOP(),new t.GetFieldBlock(s),new t.FromTableBlock(s),new t.JoinBlock(s),new t.WhereBlock(s),new t.GroupByBlock(s),new t.HavingBlock(s),new t.OrderByBlock(s),e.OFFSET(),e.LIMIT(),new t.UnionBlock(s)];super(s,r)}},t.Update=class extends t.QueryBuilder{constructor(s,r=null){r=r||[new t.StringBlock(s,"UPDATE"),new t.MssqlUpdateTopBlock(s),new t.UpdateTableBlock(s),new t.SetFieldBlock(s),new t.MssqlUpdateDeleteOutputBlock(s),new t.WhereBlock(s)];super(s,r)}},t.Delete=class extends t.QueryBuilder{constructor(s,r=null){r=r||[new t.StringBlock(s,"DELETE"),new t.TargetTableBlock(s),new t.FromTableBlock(f({},s,{singleTable:!0})),new t.JoinBlock(s),new t.MssqlUpdateDeleteOutputBlock(f({},s,{forDelete:!0})),new t.WhereBlock(s),new t.OrderByBlock(s),new t.LimitBlock(s)];super(s,r)}},t.Insert=class extends t.QueryBuilder{constructor(s,r=null){r=r||[new t.StringBlock(s,"INSERT"),new t.IntoTableBlock(s),new t.MssqlInsertFieldValueBlock(s),new t.InsertFieldsFromQueryBlock(s)];super(s,r)}}};var R=S;})();
|
package/dist/cjs/index.js
CHANGED
|
@@ -46,7 +46,7 @@ module.exports = __toCommonJS(exports_src);
|
|
|
46
46
|
// package.json
|
|
47
47
|
var package_default = {
|
|
48
48
|
name: "squel",
|
|
49
|
-
version: "6.0.
|
|
49
|
+
version: "6.0.7",
|
|
50
50
|
description: "SQL query string builder",
|
|
51
51
|
keywords: [
|
|
52
52
|
"sql",
|
|
@@ -334,7 +334,7 @@ function _buildSquel(flavour = null) {
|
|
|
334
334
|
const customHandler = getValueHandler(value, this.options.valueHandlers, cls.globalValueHandlers);
|
|
335
335
|
if (customHandler) {
|
|
336
336
|
value = customHandler(value, asParam, formattingOptions);
|
|
337
|
-
if (value
|
|
337
|
+
if (value?.rawNesting) {
|
|
338
338
|
return { formatted: true, rawNesting: true, value: value.value };
|
|
339
339
|
}
|
|
340
340
|
}
|
|
@@ -385,7 +385,7 @@ function _buildSquel(flavour = null) {
|
|
|
385
385
|
}
|
|
386
386
|
_applyNestingFormatting(str, nesting = true) {
|
|
387
387
|
if (str && typeof str === "string" && nesting && !this.options.rawNesting) {
|
|
388
|
-
let alreadyHasBrackets = str.
|
|
388
|
+
let alreadyHasBrackets = str.startsWith("(") && str.endsWith(")");
|
|
389
389
|
if (alreadyHasBrackets) {
|
|
390
390
|
let idx = 0;
|
|
391
391
|
let open = 1;
|
|
@@ -534,7 +534,7 @@ function _buildSquel(flavour = null) {
|
|
|
534
534
|
name = this._sanitizeField(fieldName);
|
|
535
535
|
}
|
|
536
536
|
this._fieldName = name;
|
|
537
|
-
this.options = _extend(
|
|
537
|
+
this.options = _extend({ ...cls.DefaultQueryBuilderOptions }, options);
|
|
538
538
|
this._cases = [];
|
|
539
539
|
}
|
|
540
540
|
when(expression, ...values) {
|
|
@@ -584,7 +584,7 @@ function _buildSquel(flavour = null) {
|
|
|
584
584
|
let obj = this;
|
|
585
585
|
while (obj) {
|
|
586
586
|
for (const prop of Object.getOwnPropertyNames(obj)) {
|
|
587
|
-
if (prop !== "constructor" && typeof obj[prop] === "function" && prop.
|
|
587
|
+
if (prop !== "constructor" && typeof obj[prop] === "function" && !prop.startsWith("_") && !cls.Block.prototype[prop]) {
|
|
588
588
|
ret[prop] = obj[prop];
|
|
589
589
|
}
|
|
590
590
|
}
|
|
@@ -750,7 +750,7 @@ function _buildSquel(flavour = null) {
|
|
|
750
750
|
}
|
|
751
751
|
if (!totalStr.length) {
|
|
752
752
|
const fromTableBlock = queryBuilder?.getBlock(cls.FromTableBlock);
|
|
753
|
-
if (fromTableBlock
|
|
753
|
+
if (fromTableBlock?._hasTable()) {
|
|
754
754
|
totalStr = "*";
|
|
755
755
|
}
|
|
756
756
|
}
|
|
@@ -1222,7 +1222,7 @@ function _buildSquel(flavour = null) {
|
|
|
1222
1222
|
return new this.constructor(this.options, blockClones);
|
|
1223
1223
|
}
|
|
1224
1224
|
getBlock(blockType) {
|
|
1225
|
-
return this.blocks.
|
|
1225
|
+
return this.blocks.find((b) => b instanceof blockType);
|
|
1226
1226
|
}
|
|
1227
1227
|
};
|
|
1228
1228
|
cls.Select = class extends cls.QueryBuilder {
|
|
@@ -1596,6 +1596,10 @@ squel.flavours.postgres = (_squel) => {
|
|
|
1596
1596
|
};
|
|
1597
1597
|
|
|
1598
1598
|
// src/mssql.ts
|
|
1599
|
+
var _limit = function(max) {
|
|
1600
|
+
max = this._sanitizeLimitOffset(max);
|
|
1601
|
+
this._parent._limits = max;
|
|
1602
|
+
};
|
|
1599
1603
|
squel.flavours.mssql = (_squel) => {
|
|
1600
1604
|
const cls = _squel.cls;
|
|
1601
1605
|
cls.DefaultQueryBuilderOptions.replaceSingleQuotes = true;
|
|
@@ -1616,10 +1620,6 @@ squel.flavours.mssql = (_squel) => {
|
|
|
1616
1620
|
super(options);
|
|
1617
1621
|
this._limits = null;
|
|
1618
1622
|
this._offsets = null;
|
|
1619
|
-
const _limit = function(max) {
|
|
1620
|
-
max = this._sanitizeLimitOffset(max);
|
|
1621
|
-
this._parent._limits = max;
|
|
1622
|
-
};
|
|
1623
1623
|
this.ParentBlock = class extends cls.Block {
|
|
1624
1624
|
_parent;
|
|
1625
1625
|
constructor(parent) {
|
|
@@ -1822,4 +1822,4 @@ squel.flavours.mssql = (_squel) => {
|
|
|
1822
1822
|
// src/index.ts
|
|
1823
1823
|
var src_default = core_default;
|
|
1824
1824
|
|
|
1825
|
-
//# debugId=
|
|
1825
|
+
//# debugId=88C06FB6B4CC8B9064756E2164756E21
|