squel 5.13.0 → 6.0.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.
@@ -0,0 +1,14 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/core.ts", "../../src/mysql.ts", "../../src/postgres.ts", "../../src/mssql.ts", "../../src/index.ts"],
4
+ "sourcesContent": [
5
+ "import pkg from \"../package.json\" with { type: \"json\" }\nimport type {\n BuildStringOptions,\n Flavour,\n FormattingOptions,\n ParamString,\n QueryBuilderOptions,\n Squel,\n ToParamOptions,\n ValueHandler,\n ValueHandlerEntry,\n ValueType,\n} from \"./types\"\n\nfunction _pad(str: string, pad: string): string {\n return str.length ? str + pad : str\n}\n\nfunction _extend<T extends Record<string, any>>(\n dst: T,\n ...sources: Array<Record<string, any> | undefined | null>\n): T {\n if (dst && sources) {\n for (const src of sources) {\n if (src && typeof src === \"object\") {\n for (const key of Object.getOwnPropertyNames(src)) {\n ;(dst as any)[key] = (src as any)[key]\n }\n }\n }\n }\n return dst\n}\n\nfunction _isPlainObject(obj: unknown): boolean {\n return !!obj && (obj as any).constructor.prototype === Object.prototype\n}\n\nfunction _isArray(obj: unknown): boolean {\n return !!obj && (obj as any).constructor.prototype === Array.prototype\n}\n\nfunction _clone<T>(src: T): T {\n if (!src) return src\n const anySrc = src as any\n if (typeof anySrc.clone === \"function\") return anySrc.clone()\n if (_isPlainObject(src) || _isArray(src)) {\n const ret = new anySrc.constructor()\n for (const key of Object.getOwnPropertyNames(src)) {\n if (typeof anySrc[key] !== \"function\") {\n ret[key] = _clone(anySrc[key])\n }\n }\n return ret\n }\n return JSON.parse(JSON.stringify(src))\n}\n\nfunction registerValueHandler(\n handlers: ValueHandlerEntry[],\n type: ValueType,\n handler: ValueHandler,\n): void {\n const typeofType = typeof type\n if (typeofType !== \"function\" && typeofType !== \"string\") {\n throw new Error(\"type must be a class constructor or string\")\n }\n if (typeof handler !== \"function\") {\n throw new Error(\"handler must be a function\")\n }\n for (const typeHandler of handlers) {\n if (typeHandler.type === type) {\n typeHandler.handler = handler\n return\n }\n }\n handlers.push({ type, handler })\n}\n\nfunction getValueHandler(\n value: unknown,\n localHandlers: ValueHandlerEntry[],\n globalHandlers: ValueHandlerEntry[],\n): ValueHandler | undefined {\n return (\n _getValueHandler(value, localHandlers) ||\n _getValueHandler(value, globalHandlers)\n )\n}\n\nfunction _getValueHandler(\n value: unknown,\n handlers: ValueHandlerEntry[],\n): ValueHandler | undefined {\n for (const typeHandler of handlers) {\n if (\n typeof value === typeHandler.type ||\n (typeof typeHandler.type !== \"string\" &&\n value instanceof (typeHandler.type as new (...args: any[]) => any))\n ) {\n return typeHandler.handler\n }\n }\n return undefined\n}\n\nfunction _buildSquel(flavour: Flavour | null = null): Squel {\n const cls: any = {\n isSquelBuilder(obj: unknown): boolean {\n return !!obj && !!(obj as any)._toParamString\n },\n }\n\n const _shouldApplyNesting = (obj: unknown): boolean => {\n return !cls.isSquelBuilder(obj) || !(obj as any).options.rawNesting\n }\n\n cls.DefaultQueryBuilderOptions = {\n autoQuoteTableNames: false,\n autoQuoteFieldNames: false,\n autoQuoteAliasNames: true,\n useAsForTableAliasNames: false,\n nameQuoteCharacter: \"`\",\n tableAliasQuoteCharacter: \"`\",\n fieldAliasQuoteCharacter: '\"',\n valueHandlers: [],\n parameterCharacter: \"?\",\n numberedParameters: false,\n numberedParametersPrefix: \"$\",\n numberedParametersStartAt: 1,\n replaceSingleQuotes: false,\n singleQuoteReplacement: \"''\",\n separator: \" \",\n stringFormatter: null,\n rawNesting: false,\n }\n\n cls.globalValueHandlers = [] as ValueHandlerEntry[]\n\n cls.registerValueHandler = (type: ValueType, handler: ValueHandler): void => {\n registerValueHandler(cls.globalValueHandlers, type, handler)\n }\n\n cls.Cloneable = class {\n clone(): any {\n const newInstance = new (this as any).constructor()\n return _extend(newInstance, _clone(_extend({}, this)))\n }\n }\n\n cls.BaseBuilder = class extends cls.Cloneable {\n options: Required<QueryBuilderOptions>\n\n constructor(options?: QueryBuilderOptions) {\n super()\n const defaults = JSON.parse(\n JSON.stringify(cls.DefaultQueryBuilderOptions),\n )\n defaults.stringFormatter = cls.DefaultQueryBuilderOptions.stringFormatter\n this.options = _extend(defaults, options)\n }\n\n registerValueHandler(type: ValueType, handler: ValueHandler): this {\n registerValueHandler(this.options.valueHandlers, type, handler)\n return this\n }\n\n _sanitizeExpression(expr: unknown): unknown {\n if (!cls.isSquelBuilder(expr)) {\n if (typeof expr !== \"string\") {\n throw new Error(\"expression must be a string or builder instance\")\n }\n }\n return expr\n }\n\n _sanitizeName(value: unknown, type: string): string {\n if (typeof value !== \"string\") {\n throw new Error(`${type} must be a string`)\n }\n return value\n }\n\n _sanitizeField(item: unknown): unknown {\n if (!cls.isSquelBuilder(item)) {\n return this._sanitizeName(item, \"field name\")\n }\n return item\n }\n\n _sanitizeBaseBuilder(item: unknown): unknown {\n if (cls.isSquelBuilder(item)) return item\n throw new Error(\"must be a builder instance\")\n }\n\n _sanitizeTable(item: unknown, _allowNested?: boolean): unknown {\n if (typeof item !== \"string\") {\n try {\n return this._sanitizeBaseBuilder(item)\n } catch (_e) {\n throw new Error(\"table name must be a string or a builder\")\n }\n }\n return this._sanitizeName(item, \"table\")\n }\n\n _sanitizeTableAlias(item: unknown): string {\n return this._sanitizeName(item, \"table alias\")\n }\n\n _sanitizeFieldAlias(item: unknown): string {\n return this._sanitizeName(item, \"field alias\")\n }\n\n _sanitizeLimitOffset(value: unknown): number {\n const num = Number.parseInt(value as any, 10)\n if (num < 0 || Number.isNaN(num)) {\n throw new Error(\"limit/offset must be >= 0\")\n }\n return num\n }\n\n _sanitizeValue(item: unknown): unknown {\n const itemType = typeof item\n if (item === null) {\n // null allowed\n } else if (\n itemType === \"string\" ||\n itemType === \"number\" ||\n itemType === \"boolean\"\n ) {\n // primitives allowed\n } else if (cls.isSquelBuilder(item)) {\n // builders allowed\n } else {\n const typeIsValid = !!getValueHandler(\n item,\n this.options.valueHandlers,\n cls.globalValueHandlers,\n )\n if (!typeIsValid) {\n throw new Error(\n \"field value must be a string, number, boolean, null or one of the registered custom value types\",\n )\n }\n }\n return item\n }\n\n _escapeValue(value: any): any {\n return this.options.replaceSingleQuotes && value\n ? value.replace(/'/g, this.options.singleQuoteReplacement)\n : value\n }\n\n _formatTableName(item: any): any {\n if (this.options.autoQuoteTableNames) {\n const q = this.options.nameQuoteCharacter\n item = `${q}${item}${q}`\n }\n return item\n }\n\n _formatFieldAlias(item: any): any {\n if (this.options.autoQuoteAliasNames) {\n const q = this.options.fieldAliasQuoteCharacter\n item = `${q}${item}${q}`\n }\n return item\n }\n\n _formatTableAlias(item: any): string {\n if (this.options.autoQuoteAliasNames) {\n const q = this.options.tableAliasQuoteCharacter\n item = `${q}${item}${q}`\n }\n return this.options.useAsForTableAliasNames ? `AS ${item}` : item\n }\n\n _formatFieldName(\n item: any,\n formattingOptions: FormattingOptions = {},\n ): any {\n if (this.options.autoQuoteFieldNames) {\n const q = this.options.nameQuoteCharacter\n if (formattingOptions.ignorePeriodsForFieldNameQuotes) {\n item = `${q}${item}${q}`\n } else {\n item = item\n .split(\".\")\n .map((v: string) => (v === \"*\" ? v : `${q}${v}${q}`))\n .join(\".\")\n }\n }\n return item\n }\n\n _formatCustomValue(\n value: any,\n asParam: boolean,\n formattingOptions?: FormattingOptions,\n ): { formatted: boolean; value: any; rawNesting?: boolean } {\n const customHandler = getValueHandler(\n value,\n this.options.valueHandlers,\n cls.globalValueHandlers,\n )\n if (customHandler) {\n value = customHandler(value, asParam, formattingOptions)\n if (value && value.rawNesting) {\n return { formatted: true, rawNesting: true, value: value.value }\n }\n }\n return { formatted: !!customHandler, value }\n }\n\n _formatValueForParamArray(\n value: any,\n formattingOptions: FormattingOptions = {},\n ): any {\n if (_isArray(value)) {\n return value.map((v: any) =>\n this._formatValueForParamArray(v, formattingOptions),\n )\n }\n return this._formatCustomValue(value, true, formattingOptions).value\n }\n\n _formatValueForQueryString(\n initialValue: any,\n formattingOptions: FormattingOptions = {},\n ): any {\n const {\n rawNesting,\n formatted,\n value: fv,\n } = this._formatCustomValue(initialValue, false, formattingOptions)\n let value = fv\n if (formatted) {\n if (rawNesting) return value\n return this._applyNestingFormatting(\n value,\n _shouldApplyNesting(initialValue),\n )\n }\n if (_isArray(value)) {\n value = value.map((v: any) => this._formatValueForQueryString(v))\n value = this._applyNestingFormatting(\n value.join(\", \"),\n _shouldApplyNesting(value),\n )\n } else {\n const typeofValue = typeof value\n if (value === null) {\n value = \"NULL\"\n } else if (typeofValue === \"boolean\") {\n value = value ? \"TRUE\" : \"FALSE\"\n } else if (cls.isSquelBuilder(value)) {\n value = this._applyNestingFormatting(\n value.toString(),\n _shouldApplyNesting(value),\n )\n } else if (typeofValue !== \"number\") {\n if (typeofValue === \"string\" && this.options.stringFormatter) {\n return this.options.stringFormatter(value)\n }\n if (formattingOptions.dontQuote) {\n value = `${value}`\n } else {\n const escapedValue = this._escapeValue(value)\n value = `'${escapedValue}'`\n }\n }\n }\n return value\n }\n\n _applyNestingFormatting(str: any, nesting = true): any {\n if (\n str &&\n typeof str === \"string\" &&\n nesting &&\n !this.options.rawNesting\n ) {\n let alreadyHasBrackets =\n str.charAt(0) === \"(\" && str.charAt(str.length - 1) === \")\"\n if (alreadyHasBrackets) {\n let idx = 0\n let open = 1\n while (str.length - 1 > ++idx) {\n const c = str.charAt(idx)\n if (c === \"(\") {\n open++\n } else if (c === \")\") {\n open--\n if (open < 1) {\n alreadyHasBrackets = false\n break\n }\n }\n }\n }\n if (!alreadyHasBrackets) {\n str = `(${str})`\n }\n }\n return str\n }\n\n _buildString(\n str: string,\n values: any[],\n options: BuildStringOptions = {},\n ): ParamString {\n const { nested, buildParameterized, formattingOptions } = options\n values = values || []\n str = str || \"\"\n let formattedStr = \"\"\n let curValue = -1\n const formattedValues: any[] = []\n const paramChar = this.options.parameterCharacter\n let idx = 0\n while (str.length > idx) {\n if (str.substring(idx, idx + paramChar.length) === paramChar) {\n let value = values[++curValue]\n if (buildParameterized) {\n if (cls.isSquelBuilder(value)) {\n const ret = value._toParamString({\n buildParameterized,\n nested: true,\n })\n formattedStr += ret.text\n ret.values.forEach((v: any) => formattedValues.push(v))\n } else {\n value = this._formatValueForParamArray(value, formattingOptions)\n if (_isArray(value)) {\n const tmpStr = value.map(() => paramChar).join(\", \")\n formattedStr += `(${tmpStr})`\n value.forEach((val: any) => formattedValues.push(val))\n } else {\n formattedStr += paramChar\n formattedValues.push(value)\n }\n }\n } else {\n formattedStr += this._formatValueForQueryString(\n value,\n formattingOptions,\n )\n }\n idx += paramChar.length\n } else {\n formattedStr += str.charAt(idx)\n idx++\n }\n }\n return {\n text: this._applyNestingFormatting(formattedStr, !!nested),\n values: formattedValues,\n }\n }\n\n _buildManyStrings(\n strings: string[],\n strValues: any[][],\n options: BuildStringOptions = {},\n ): ParamString {\n const parts: string[] = []\n const totalValues: any[] = []\n for (let idx = 0; strings.length > idx; ++idx) {\n const inputString = strings[idx]\n const inputValues = strValues[idx]\n const { text, values } = this._buildString(inputString, inputValues, {\n buildParameterized: options.buildParameterized,\n nested: false,\n })\n parts.push(text)\n values.forEach((v: any) => totalValues.push(v))\n }\n const totalStr = parts.join(this.options.separator)\n return {\n text: totalStr.length\n ? this._applyNestingFormatting(totalStr, !!options.nested)\n : \"\",\n values: totalValues,\n }\n }\n\n _toParamString(_options?: ToParamOptions): ParamString {\n throw new Error(\"Not yet implemented\")\n }\n\n toString(options: ToParamOptions = {}): string {\n return this._toParamString(options).text\n }\n\n toParam(options: ToParamOptions = {}): ParamString {\n return this._toParamString({ ...options, buildParameterized: true })\n }\n }\n\n interface ExpressionNode {\n type: \"AND\" | \"OR\"\n expr: unknown\n para: unknown[]\n }\n\n cls.Expression = class extends cls.BaseBuilder {\n _nodes: ExpressionNode[]\n\n constructor(options?: QueryBuilderOptions) {\n super(options)\n this._nodes = []\n }\n\n and(expr: unknown, ...params: unknown[]): this {\n expr = this._sanitizeExpression(expr)\n this._nodes.push({ type: \"AND\", expr, para: params })\n return this\n }\n\n or(expr: unknown, ...params: unknown[]): this {\n expr = this._sanitizeExpression(expr)\n this._nodes.push({ type: \"OR\", expr, para: params })\n return this\n }\n\n _toParamString(options: ToParamOptions = {}): ParamString {\n let totalStr: any = []\n const totalValues: any[] = []\n for (const node of this._nodes) {\n const { type, expr, para } = node\n const { text, values } = cls.isSquelBuilder(expr)\n ? (expr as any)._toParamString({\n buildParameterized: options.buildParameterized,\n nested: true,\n })\n : this._buildString(expr as string, para, {\n buildParameterized: options.buildParameterized,\n })\n if (totalStr.length) totalStr.push(type)\n totalStr.push(text)\n values.forEach((v: any) => totalValues.push(v))\n }\n totalStr = totalStr.join(\" \")\n return {\n text: this._applyNestingFormatting(totalStr, !!options.nested),\n values: totalValues,\n }\n }\n }\n\n interface CaseClause {\n expression: string\n values: unknown[]\n result?: unknown\n }\n\n cls.Case = class extends cls.BaseBuilder {\n _fieldName: string | null = null\n _cases: CaseClause[]\n _elseValue: unknown = null\n\n constructor(\n fieldName?: string | QueryBuilderOptions,\n options: QueryBuilderOptions = {},\n ) {\n super(options as QueryBuilderOptions)\n let name: string | null = null\n if (_isPlainObject(fieldName)) {\n options = fieldName as QueryBuilderOptions\n } else if (fieldName) {\n name = this._sanitizeField(fieldName) as string\n }\n this._fieldName = name\n this.options = _extend(\n Object.assign({}, cls.DefaultQueryBuilderOptions),\n options,\n )\n this._cases = []\n }\n\n when(expression: string, ...values: unknown[]): this {\n this._cases.unshift({ expression, values: values || [] })\n return this\n }\n\n then(result: unknown): this {\n if (this._cases.length === 0) {\n throw new Error(\"when() needs to be called first\")\n }\n this._cases[0].result = result\n return this\n }\n\n else(elseValue: unknown): this {\n this._elseValue = elseValue\n return this\n }\n\n _toParamString(options: ToParamOptions = {}): ParamString {\n let totalStr = \"\"\n const totalValues: any[] = []\n for (const { expression, values, result } of this._cases) {\n totalStr = _pad(totalStr, \" \")\n const ret = this._buildString(expression, values as any[], {\n buildParameterized: options.buildParameterized,\n nested: true,\n })\n totalStr += `WHEN ${ret.text} THEN ${this._formatValueForQueryString(result)}`\n ret.values.forEach((v: any) => totalValues.push(v))\n }\n if (totalStr.length) {\n totalStr += ` ELSE ${this._formatValueForQueryString(this._elseValue)} END`\n if (this._fieldName) totalStr = `${this._fieldName} ${totalStr}`\n totalStr = `CASE ${totalStr}`\n } else {\n totalStr = this._formatValueForQueryString(this._elseValue)\n }\n return { text: totalStr, values: totalValues }\n }\n }\n\n cls.Block = class extends cls.BaseBuilder {\n constructor(options?: QueryBuilderOptions) {\n super(options)\n }\n\n exposedMethods(): Record<string, (...args: any[]) => any> {\n const ret: Record<string, (...args: any[]) => any> = {}\n let obj: any = this\n while (obj) {\n for (const prop of Object.getOwnPropertyNames(obj)) {\n if (\n prop !== \"constructor\" &&\n typeof obj[prop] === \"function\" &&\n prop.charAt(0) !== \"_\" &&\n !cls.Block.prototype[prop]\n ) {\n ret[prop] = obj[prop]\n }\n }\n obj = Object.getPrototypeOf(obj)\n }\n return ret\n }\n }\n\n cls.StringBlock = class extends cls.Block {\n _str: string\n\n constructor(options: QueryBuilderOptions | undefined, str: string) {\n super(options)\n this._str = str\n }\n\n _toParamString(_options: ToParamOptions = {}): ParamString {\n return { text: this._str, values: [] }\n }\n }\n\n cls.FunctionBlock = class extends cls.Block {\n _strings: string[]\n _values: any[][]\n\n constructor(options?: QueryBuilderOptions) {\n super(options)\n this._strings = []\n this._values = []\n }\n\n function(str: string, ...values: any[]): void {\n this._strings.push(str)\n this._values.push(values)\n }\n\n _toParamString(options: ToParamOptions = {}): ParamString {\n return this._buildManyStrings(this._strings, this._values, options)\n }\n }\n\n cls.registerValueHandler(cls.FunctionBlock, (value: any, asParam = false) => {\n return asParam ? value.toParam() : value.toString()\n })\n\n interface TableEntry {\n table: unknown\n alias: string | null\n }\n\n cls.AbstractTableBlock = class extends cls.Block {\n _tables: TableEntry[]\n\n constructor(options?: QueryBuilderOptions, _prefix?: string) {\n super(options)\n this._tables = []\n }\n\n _table(table: unknown, alias: string | null = null): void {\n alias = alias ? this._sanitizeTableAlias(alias) : alias\n table = this._sanitizeTable(table)\n if (this.options.singleTable) this._tables = []\n this._tables.push({ table, alias })\n }\n\n _hasTable(): boolean {\n return this._tables.length > 0\n }\n\n _toParamString(options: ToParamOptions = {}): ParamString {\n let totalStr = \"\"\n const totalValues: any[] = []\n if (this._hasTable()) {\n for (const { table, alias } of this._tables) {\n totalStr = _pad(totalStr, \", \")\n let tableStr: string\n if (cls.isSquelBuilder(table)) {\n const { text, values } = (table as any)._toParamString({\n buildParameterized: options.buildParameterized,\n nested: true,\n })\n tableStr = text\n values.forEach((v: any) => totalValues.push(v))\n } else {\n tableStr = this._formatTableName(table)\n }\n if (alias) tableStr += ` ${this._formatTableAlias(alias)}`\n totalStr += tableStr\n }\n if (this.options.prefix) totalStr = `${this.options.prefix} ${totalStr}`\n }\n return { text: totalStr, values: totalValues }\n }\n }\n\n cls.TargetTableBlock = class extends cls.AbstractTableBlock {\n target(table: unknown): void {\n this._table(table)\n }\n }\n\n cls.UpdateTableBlock = class extends cls.AbstractTableBlock {\n table(table: unknown, alias: string | null = null): void {\n this._table(table, alias)\n }\n\n _toParamString(options: ToParamOptions = {}): ParamString {\n if (!this._hasTable()) throw new Error(\"table() needs to be called\")\n return super._toParamString(options)\n }\n }\n\n cls.FromTableBlock = class extends cls.AbstractTableBlock {\n constructor(options?: QueryBuilderOptions) {\n super(_extend({}, options, { prefix: \"FROM\" }))\n }\n\n from(table: unknown, alias: string | null = null): void {\n this._table(table, alias)\n }\n }\n\n cls.IntoTableBlock = class extends cls.AbstractTableBlock {\n constructor(options?: QueryBuilderOptions) {\n super(_extend({}, options, { prefix: \"INTO\", singleTable: true }))\n }\n\n into(table: unknown): void {\n this._table(table)\n }\n\n _toParamString(options: ToParamOptions = {}): ParamString {\n if (!this._hasTable()) throw new Error(\"into() needs to be called\")\n return super._toParamString(options)\n }\n }\n\n interface FieldEntry {\n name: unknown\n alias: string | null\n options: FormattingOptions\n }\n\n cls.GetFieldBlock = class extends cls.Block {\n _fields: FieldEntry[]\n\n constructor(options?: QueryBuilderOptions) {\n super(options)\n this._fields = []\n }\n\n fields(\n _fields: string[] | Record<string, string | null>,\n options: FormattingOptions = {},\n ): void {\n if (_isArray(_fields)) {\n for (const field of _fields as string[]) {\n this.field(field, null, options)\n }\n } else {\n for (const field in _fields as Record<string, string | null>) {\n const alias = (_fields as Record<string, string | null>)[field]\n this.field(field, alias, options)\n }\n }\n }\n\n field(\n field: unknown,\n alias: string | null = null,\n options: FormattingOptions = {},\n ): unknown {\n alias = alias ? this._sanitizeFieldAlias(alias) : alias\n field = this._sanitizeField(field)\n const existingField = this._fields.filter(\n (f) => f.name === field && f.alias === alias,\n )\n if (existingField.length) return this\n this._fields.push({ name: field, alias, options })\n return undefined\n }\n\n _toParamString(options: ToParamOptions = {}): ParamString {\n const { queryBuilder, buildParameterized } = options as any\n let totalStr = \"\"\n const totalValues: any[] = []\n for (const field of this._fields) {\n totalStr = _pad(totalStr, \", \")\n const { name, alias, options: fieldOptions } = field\n if (typeof name === \"string\") {\n totalStr += this._formatFieldName(name, fieldOptions)\n } else {\n const ret = (name as any)._toParamString({\n nested: true,\n buildParameterized,\n })\n totalStr += ret.text\n ret.values.forEach((v: any) => totalValues.push(v))\n }\n if (alias) totalStr += ` AS ${this._formatFieldAlias(alias)}`\n }\n if (!totalStr.length) {\n const fromTableBlock = queryBuilder?.getBlock(cls.FromTableBlock)\n if (fromTableBlock && fromTableBlock._hasTable()) {\n totalStr = \"*\"\n }\n }\n return { text: totalStr, values: totalValues }\n }\n }\n\n cls.AbstractSetFieldBlock = class extends cls.Block {\n _fields: unknown[]\n _values: unknown[][]\n _valueOptions: FormattingOptions[][]\n\n constructor(options?: QueryBuilderOptions) {\n super(options)\n this._fields = []\n this._values = [[]]\n this._valueOptions = [[]]\n }\n\n _reset(): void {\n this._fields = []\n this._values = [[]]\n this._valueOptions = [[]]\n }\n\n _set(\n field: unknown,\n value: unknown,\n valueOptions: FormattingOptions = {},\n ): void {\n if (this._values.length > 1) {\n throw new Error(\"Cannot set multiple rows of fields this way.\")\n }\n if (typeof value !== \"undefined\") {\n value = this._sanitizeValue(value)\n }\n field = this._sanitizeField(field)\n let index = this._fields.indexOf(field)\n if (index === -1) {\n this._fields.push(field)\n index = this._fields.length - 1\n }\n this._values[0][index] = value\n this._valueOptions[0][index] = valueOptions\n }\n\n _setFields(\n fields: Record<string, unknown>,\n valueOptions: FormattingOptions = {},\n ): void {\n if (typeof fields !== \"object\") {\n throw new Error(`Expected an object but got ${typeof fields}`)\n }\n for (const field in fields) {\n this._set(field, fields[field], valueOptions)\n }\n }\n\n _setFieldsRows(\n fieldsRows: Record<string, unknown>[],\n valueOptions: FormattingOptions = {},\n ): void {\n if (!_isArray(fieldsRows)) {\n throw new Error(\n `Expected an array of objects but got ${typeof fieldsRows}`,\n )\n }\n this._reset()\n for (let i = 0; fieldsRows.length > i; ++i) {\n const fieldRow = fieldsRows[i]\n for (let field in fieldRow) {\n let value = fieldRow[field]\n field = this._sanitizeField(field)\n value = this._sanitizeValue(value)\n let index = this._fields.indexOf(field)\n if (i > 0 && index === -1) {\n throw new Error(\n \"All fields in subsequent rows must match the fields in the first row\",\n )\n }\n if (index === -1) {\n this._fields.push(field)\n index = this._fields.length - 1\n }\n if (!_isArray(this._values[i])) {\n this._values[i] = []\n this._valueOptions[i] = []\n }\n this._values[i][index] = value\n this._valueOptions[i][index] = valueOptions\n }\n }\n }\n }\n\n cls.SetFieldBlock = class extends cls.AbstractSetFieldBlock {\n set(field: any, value: any, options?: any): void {\n this._set(field, value, options)\n }\n\n setFields(fields: any, valueOptions?: any): void {\n this._setFields(fields, valueOptions)\n }\n\n _toParamString(options: any = {}): any {\n const { buildParameterized } = options\n if (this._fields.length <= 0) throw new Error(\"set() needs to be called\")\n let totalStr = \"\"\n const totalValues: any[] = []\n for (let i = 0; i < this._fields.length; ++i) {\n totalStr = _pad(totalStr, \", \")\n let field = this._formatFieldName(this._fields[i])\n const value = this._values[0][i]\n if (field.indexOf(\"=\") < 0) {\n field = `${field} = ${this.options.parameterCharacter}`\n }\n const ret = this._buildString(field, [value], {\n buildParameterized,\n formattingOptions: this._valueOptions[0][i],\n })\n totalStr += ret.text\n ret.values.forEach((v: any) => totalValues.push(v))\n }\n return { text: `SET ${totalStr}`, values: totalValues }\n }\n }\n\n cls.InsertFieldValueBlock = class extends cls.AbstractSetFieldBlock {\n set(field: any, value: any, options: any = {}): void {\n this._set(field, value, options)\n }\n\n setFields(fields: any, valueOptions?: any): void {\n this._setFields(fields, valueOptions)\n }\n\n setFieldsRows(fieldsRows: any, valueOptions?: any): void {\n this._setFieldsRows(fieldsRows, valueOptions)\n }\n\n _toParamString(options: any = {}): any {\n const { buildParameterized } = options\n const fieldString = this._fields\n .map((f: any) => this._formatFieldName(f))\n .join(\", \")\n const valueStrings: string[] = []\n const totalValues: any[] = []\n for (let i = 0; i < this._values.length; ++i) {\n valueStrings[i] = \"\"\n for (let j = 0; j < this._values[i].length; ++j) {\n const ret = this._buildString(\n this.options.parameterCharacter,\n [this._values[i][j]],\n {\n buildParameterized,\n formattingOptions: this._valueOptions[i][j],\n },\n )\n ret.values.forEach((v: any) => totalValues.push(v))\n valueStrings[i] = _pad(valueStrings[i], \", \")\n valueStrings[i] += ret.text\n }\n }\n return {\n text: fieldString.length\n ? `(${fieldString}) VALUES (${valueStrings.join(\"), (\")})`\n : \"\",\n values: totalValues,\n }\n }\n }\n\n cls.InsertFieldsFromQueryBlock = class extends cls.Block {\n _fields: unknown[]\n _query: unknown = null\n\n constructor(options?: QueryBuilderOptions) {\n super(options)\n this._fields = []\n }\n\n fromQuery(fields: string[], selectQuery: unknown): void {\n this._fields = fields.map((v) => this._sanitizeField(v))\n this._query = this._sanitizeBaseBuilder(selectQuery)\n }\n\n _toParamString(options: ToParamOptions = {}): ParamString {\n let totalStr = \"\"\n let totalValues: any[] = []\n if (this._fields.length && this._query) {\n const { text, values } = (this._query as any)._toParamString({\n buildParameterized: options.buildParameterized,\n nested: true,\n })\n totalStr = `(${this._fields.join(\", \")}) ${this._applyNestingFormatting(text)}`\n totalValues = values\n }\n return { text: totalStr, values: totalValues }\n }\n }\n\n cls.DistinctBlock = class extends cls.Block {\n _useDistinct = false\n\n distinct(): void {\n this._useDistinct = true\n }\n\n _toParamString(): ParamString {\n return { text: this._useDistinct ? \"DISTINCT\" : \"\", values: [] }\n }\n }\n\n cls.GroupByBlock = class extends cls.Block {\n _groups: string[]\n\n constructor(options?: QueryBuilderOptions) {\n super(options)\n this._groups = []\n }\n\n group(field: string): void {\n this._groups.push(this._sanitizeField(field) as string)\n }\n\n _toParamString(_options: ToParamOptions = {}): ParamString {\n return {\n text: this._groups.length ? `GROUP BY ${this._groups.join(\", \")}` : \"\",\n values: [],\n }\n }\n }\n\n cls.AbstractVerbSingleValueBlock = class extends cls.Block {\n _value: number | null = null\n\n constructor(options?: QueryBuilderOptions) {\n super(options)\n }\n\n _setValue(value: number | null): void {\n this._value = value !== null ? this._sanitizeLimitOffset(value) : value\n }\n\n _toParamString(options: ToParamOptions = {}): ParamString {\n const expr =\n this._value !== null\n ? `${this.options.verb} ${this.options.parameterCharacter}`\n : \"\"\n const values = this._value !== null ? [this._value] : []\n return this._buildString(expr, values, options as BuildStringOptions)\n }\n }\n\n cls.OffsetBlock = class extends cls.AbstractVerbSingleValueBlock {\n constructor(options?: QueryBuilderOptions) {\n super(_extend({}, options, { verb: \"OFFSET\" }))\n }\n\n offset(start: number | null): void {\n this._setValue(start)\n }\n }\n\n cls.LimitBlock = class extends cls.AbstractVerbSingleValueBlock {\n constructor(options?: QueryBuilderOptions) {\n super(_extend({}, options, { verb: \"LIMIT\" }))\n }\n\n limit(limit: number | null): void {\n this._setValue(limit)\n }\n }\n\n interface ConditionEntry {\n expr: unknown\n values: unknown[]\n }\n\n cls.AbstractConditionBlock = class extends cls.Block {\n _conditions: ConditionEntry[]\n\n constructor(options?: QueryBuilderOptions) {\n super(options)\n this._conditions = []\n }\n\n _condition(condition: unknown, ...values: unknown[]): void {\n condition = this._sanitizeExpression(condition)\n this._conditions.push({ expr: condition, values: values || [] })\n }\n\n _toParamString(options: ToParamOptions = {}): ParamString {\n const parts: string[] = []\n const totalValues: any[] = []\n for (const { expr, values } of this._conditions) {\n const ret: ParamString = cls.isSquelBuilder(expr)\n ? (expr as any)._toParamString({\n buildParameterized: options.buildParameterized,\n })\n : this._buildString(expr as string, values as any[], {\n buildParameterized: options.buildParameterized,\n })\n if (ret.text.length) parts.push(ret.text)\n ret.values.forEach((v: any) => totalValues.push(v))\n }\n const totalStr = parts.join(\") AND (\")\n return {\n text: totalStr.length ? `${this.options.verb} (${totalStr})` : \"\",\n values: totalValues,\n }\n }\n }\n\n cls.WhereBlock = class extends cls.AbstractConditionBlock {\n constructor(options?: QueryBuilderOptions) {\n super(_extend({}, options, { verb: \"WHERE\" }))\n }\n\n where(condition: unknown, ...values: unknown[]): void {\n this._condition(condition, ...values)\n }\n }\n\n cls.HavingBlock = class extends cls.AbstractConditionBlock {\n constructor(options?: QueryBuilderOptions) {\n super(_extend({}, options, { verb: \"HAVING\" }))\n }\n\n having(condition: unknown, ...values: unknown[]): void {\n this._condition(condition, ...values)\n }\n }\n\n interface OrderEntry {\n field: unknown\n dir: string | null\n values: unknown[]\n }\n\n cls.OrderByBlock = class extends cls.Block {\n _orders: OrderEntry[]\n\n constructor(options?: QueryBuilderOptions) {\n super(options)\n this._orders = []\n }\n\n order(\n field: unknown,\n dir: boolean | string | null | undefined,\n ...values: unknown[]\n ): void {\n field = this._sanitizeField(field)\n let direction: string | null\n if (typeof dir === \"string\") {\n direction = dir\n } else if (dir === undefined) {\n direction = \"ASC\"\n } else if (dir === null) {\n direction = null\n } else {\n direction = dir ? \"ASC\" : \"DESC\"\n }\n this._orders.push({ field, dir: direction, values: values || [] })\n }\n\n _toParamString(options: ToParamOptions = {}): ParamString {\n let totalStr = \"\"\n const totalValues: any[] = []\n for (const { field, dir, values } of this._orders) {\n totalStr = _pad(totalStr, \", \")\n const ret = this._buildString(field as string, values as any[], {\n buildParameterized: options.buildParameterized,\n })\n totalStr += ret.text\n if (_isArray(ret.values)) {\n ret.values.forEach((v: any) => totalValues.push(v))\n }\n if (dir !== null) totalStr += ` ${dir}`\n }\n return {\n text: totalStr.length ? `ORDER BY ${totalStr}` : \"\",\n values: totalValues,\n }\n }\n }\n\n interface JoinEntry {\n type: string\n table: unknown\n alias: string | null\n condition: unknown\n }\n\n cls.JoinBlock = class extends cls.Block {\n _joins: JoinEntry[]\n\n constructor(options?: QueryBuilderOptions) {\n super(options)\n this._joins = []\n }\n\n join(\n table: unknown,\n alias: string | null = null,\n condition: unknown = null,\n type = \"INNER\",\n ): void {\n table = this._sanitizeTable(table, true)\n alias = alias ? this._sanitizeTableAlias(alias) : alias\n condition = condition ? this._sanitizeExpression(condition) : condition\n this._joins.push({ type, table, alias, condition })\n }\n\n left_join(\n table: unknown,\n alias: string | null = null,\n condition: unknown = null,\n ): void {\n this.join(table, alias, condition, \"LEFT\")\n }\n\n right_join(\n table: unknown,\n alias: string | null = null,\n condition: unknown = null,\n ): void {\n this.join(table, alias, condition, \"RIGHT\")\n }\n\n outer_join(\n table: unknown,\n alias: string | null = null,\n condition: unknown = null,\n ): void {\n this.join(table, alias, condition, \"OUTER\")\n }\n\n left_outer_join(\n table: unknown,\n alias: string | null = null,\n condition: unknown = null,\n ): void {\n this.join(table, alias, condition, \"LEFT OUTER\")\n }\n\n full_join(\n table: unknown,\n alias: string | null = null,\n condition: unknown = null,\n ): void {\n this.join(table, alias, condition, \"FULL\")\n }\n\n cross_join(\n table: unknown,\n alias: string | null = null,\n condition: unknown = null,\n ): void {\n this.join(table, alias, condition, \"CROSS\")\n }\n\n _toParamString(options: ToParamOptions = {}): ParamString {\n let totalStr = \"\"\n const totalValues: any[] = []\n for (const { type, table, alias, condition } of this._joins) {\n totalStr = _pad(totalStr, this.options.separator)\n let tableStr: string\n if (cls.isSquelBuilder(table)) {\n const ret: ParamString = (table as any)._toParamString({\n buildParameterized: options.buildParameterized,\n nested: true,\n })\n ret.values.forEach((v: any) => totalValues.push(v))\n tableStr = ret.text\n } else {\n tableStr = this._formatTableName(table)\n }\n totalStr += `${type} JOIN ${tableStr}`\n if (alias) totalStr += ` ${this._formatTableAlias(alias)}`\n if (condition) {\n totalStr += \" ON \"\n let ret: ParamString\n if (cls.isSquelBuilder(condition)) {\n ret = (condition as any)._toParamString({\n buildParameterized: options.buildParameterized,\n })\n } else {\n ret = this._buildString(condition as string, [], {\n buildParameterized: options.buildParameterized,\n })\n }\n totalStr += this._applyNestingFormatting(ret.text)\n ret.values.forEach((v: any) => totalValues.push(v))\n }\n }\n return { text: totalStr, values: totalValues }\n }\n }\n\n cls.UnionBlock = class extends cls.Block {\n _unions: any[]\n\n constructor(options?: QueryBuilderOptions) {\n super(options)\n this._unions = []\n }\n\n union(table: unknown, type = \"UNION\"): void {\n table = this._sanitizeTable(table)\n this._unions.push({ type, table })\n }\n\n union_all(table: unknown): void {\n this.union(table, \"UNION ALL\")\n }\n\n _toParamString(options: ToParamOptions = {}): ParamString {\n let totalStr = \"\"\n const totalValues: any[] = []\n for (const { type, table } of this._unions) {\n totalStr = _pad(totalStr, this.options.separator)\n let tableStr: string\n if (table instanceof cls.BaseBuilder) {\n const ret: ParamString = (table as any)._toParamString({\n buildParameterized: options.buildParameterized,\n nested: true,\n })\n tableStr = ret.text\n ret.values.forEach((v: any) => totalValues.push(v))\n } else {\n totalStr = this._formatTableName(table)\n tableStr = \"\"\n }\n totalStr += `${type} ${tableStr}`\n }\n return { text: totalStr, values: totalValues }\n }\n }\n\n cls.QueryBuilder = class extends cls.BaseBuilder {\n blocks: any[];\n [methodName: string]: any\n\n constructor(options?: QueryBuilderOptions, blocks?: any[]) {\n super(options)\n this.blocks = blocks || []\n for (const block of this.blocks) {\n const exposedMethods = block.exposedMethods()\n for (const methodName in exposedMethods) {\n const methodBody = exposedMethods[methodName]\n if (this[methodName] !== undefined) {\n throw new Error(\n `Builder already has a builder method called: ${methodName}`,\n )\n }\n ;((b, name, body) => {\n this[name] = (...args: any[]) => {\n body.call(b, ...args)\n return this\n }\n })(block, methodName, methodBody)\n }\n }\n }\n\n registerValueHandler(type: ValueType, handler: ValueHandler): this {\n for (const block of this.blocks) {\n block.registerValueHandler(type, handler)\n }\n super.registerValueHandler(type, handler)\n return this\n }\n\n updateOptions(options: QueryBuilderOptions): void {\n this.options = _extend(this.options, options)\n for (const block of this.blocks) {\n block.options = _extend(block.options, options)\n }\n }\n\n _toParamString(options: ToParamOptions = {}): ParamString {\n const opts: any = _extend({}, this.options, options)\n const blockResults = this.blocks.map((b) =>\n b._toParamString({\n buildParameterized: opts.buildParameterized,\n queryBuilder: this,\n }),\n )\n const blockTexts = blockResults.map((b: any) => b.text)\n const blockValues = blockResults.map((b: any) => b.values)\n let totalStr = blockTexts\n .filter((v: string) => v.length > 0)\n .join(opts.separator)\n const totalValues: any[] = []\n blockValues.forEach((block: any) =>\n block.forEach((value: any) => totalValues.push(value)),\n )\n if (!opts.nested) {\n if (opts.numberedParameters) {\n let i =\n opts.numberedParametersStartAt !== undefined\n ? opts.numberedParametersStartAt\n : 1\n const regex = (opts.parameterCharacter as string).replace(\n /[-[\\]{}()*+?.,\\\\^$|#\\s]/g,\n \"\\\\$&\",\n )\n totalStr = totalStr.replace(new RegExp(regex, \"g\"), () => {\n return `${opts.numberedParametersPrefix}${i++}`\n })\n }\n }\n return {\n text: this._applyNestingFormatting(totalStr, !!opts.nested),\n values: totalValues,\n }\n }\n\n clone(): this {\n const blockClones = this.blocks.map((v) => v.clone())\n return new (this as any).constructor(this.options, blockClones)\n }\n\n getBlock<T>(blockType: new (...args: any[]) => T): T | undefined {\n return this.blocks.filter((b) => b instanceof blockType)[0]\n }\n }\n\n cls.Select = class extends cls.QueryBuilder {\n constructor(options?: QueryBuilderOptions, blocks: any = null) {\n blocks = blocks || [\n new cls.StringBlock(options, \"SELECT\"),\n new cls.FunctionBlock(options),\n new cls.DistinctBlock(options),\n new cls.GetFieldBlock(options),\n new cls.FromTableBlock(options),\n new cls.JoinBlock(options),\n new cls.WhereBlock(options),\n new cls.GroupByBlock(options),\n new cls.HavingBlock(options),\n new cls.OrderByBlock(options),\n new cls.LimitBlock(options),\n new cls.OffsetBlock(options),\n new cls.UnionBlock(options),\n ]\n super(options, blocks)\n }\n }\n\n cls.Update = class extends cls.QueryBuilder {\n constructor(options?: QueryBuilderOptions, blocks: any = null) {\n blocks = blocks || [\n new cls.StringBlock(options, \"UPDATE\"),\n new cls.UpdateTableBlock(options),\n new cls.SetFieldBlock(options),\n new cls.WhereBlock(options),\n new cls.OrderByBlock(options),\n new cls.LimitBlock(options),\n ]\n super(options, blocks)\n }\n }\n\n cls.Delete = class extends cls.QueryBuilder {\n constructor(options?: QueryBuilderOptions, blocks: any = null) {\n blocks = blocks || [\n new cls.StringBlock(options, \"DELETE\"),\n new cls.TargetTableBlock(options),\n new cls.FromTableBlock(_extend({}, options, { singleTable: true })),\n new cls.JoinBlock(options),\n new cls.WhereBlock(options),\n new cls.OrderByBlock(options),\n new cls.LimitBlock(options),\n ]\n super(options, blocks)\n }\n }\n\n cls.Insert = class extends cls.QueryBuilder {\n constructor(options?: QueryBuilderOptions, blocks: any = null) {\n blocks = blocks || [\n new cls.StringBlock(options, \"INSERT\"),\n new cls.IntoTableBlock(options),\n new cls.InsertFieldValueBlock(options),\n new cls.InsertFieldsFromQueryBlock(options),\n ]\n super(options, blocks)\n }\n }\n\n const _squel: any = {\n VERSION: pkg.version,\n flavour,\n expr: (options?: QueryBuilderOptions) => new cls.Expression(options),\n case: (\n name?: string | QueryBuilderOptions,\n options?: QueryBuilderOptions,\n ) => new cls.Case(name, options),\n select: (options?: QueryBuilderOptions, blocks?: any[]) =>\n new cls.Select(options, blocks),\n update: (options?: QueryBuilderOptions, blocks?: any[]) =>\n new cls.Update(options, blocks),\n insert: (options?: QueryBuilderOptions, blocks?: any[]) =>\n new cls.Insert(options, blocks),\n delete: (options?: QueryBuilderOptions, blocks?: any[]) =>\n new cls.Delete(options, blocks),\n str: (...args: unknown[]) => {\n const inst = new cls.FunctionBlock()\n ;(inst as any).function(...args)\n return inst\n },\n rstr: (...args: unknown[]) => {\n const inst = new cls.FunctionBlock({ rawNesting: true })\n ;(inst as any).function(...args)\n return inst\n },\n registerValueHandler: cls.registerValueHandler,\n }\n\n _squel.remove = _squel.delete\n _squel.cls = cls\n\n return _squel as Squel\n}\n\nexport { _buildSquel, _pad, _extend, _isPlainObject, _isArray, _clone }\n\nconst squel: Squel = _buildSquel()\n\nsquel.flavours = {}\n\nsquel.useFlavour = function useFlavour(\n f: Flavour | string | null = null,\n): Squel {\n if (!f) return squel\n if (squel.flavours[f] instanceof Function) {\n const s = _buildSquel(f as Flavour)\n squel.flavours[f].call(null, s)\n s.flavours = squel.flavours\n s.useFlavour = squel.useFlavour\n return s\n }\n throw new Error(`Flavour not available: ${f}`)\n}\n\nexport default squel\nexport { squel }\n",
6
+ "import { _pad, squel } from \"./core\"\nimport type { Squel } from \"./types\"\n\nsquel.flavours.mysql = (_squel: Squel) => {\n const cls = _squel.cls as any\n\n cls.MysqlOnDuplicateKeyUpdateBlock = class extends cls.AbstractSetFieldBlock {\n onDupUpdate(field: any, value: any, options?: any): void {\n this._set(field, value, options)\n }\n\n _toParamString(options: any = {}): any {\n let totalStr = \"\"\n const totalValues: any[] = []\n for (let i = 0; i < this._fields.length; ++i) {\n totalStr = _pad(totalStr, \", \")\n const field = this._fields[i]\n const value = this._values[0][i]\n const valueOptions = this._valueOptions[0][i]\n if (typeof value === \"undefined\") {\n totalStr += field\n } else {\n const ret = this._buildString(\n `${field} = ${this.options.parameterCharacter}`,\n [value],\n {\n buildParameterized: options.buildParameterized,\n formattingOptions: valueOptions,\n },\n )\n totalStr += ret.text\n ret.values.forEach((v: any) => totalValues.push(v))\n }\n }\n return {\n text: !totalStr.length ? \"\" : `ON DUPLICATE KEY UPDATE ${totalStr}`,\n values: totalValues,\n }\n }\n }\n\n cls.Insert = class extends cls.QueryBuilder {\n constructor(options?: any, blocks: any = null) {\n blocks = blocks || [\n new cls.StringBlock(options, \"INSERT\"),\n new cls.IntoTableBlock(options),\n new cls.InsertFieldValueBlock(options),\n new cls.InsertFieldsFromQueryBlock(options),\n new cls.MysqlOnDuplicateKeyUpdateBlock(options),\n ]\n super(options, blocks)\n }\n }\n\n cls.Replace = class extends cls.QueryBuilder {\n constructor(options?: any, blocks: any = null) {\n blocks = blocks || [\n new cls.StringBlock(options, \"REPLACE\"),\n new cls.IntoTableBlock(options),\n new cls.InsertFieldValueBlock(options),\n new cls.InsertFieldsFromQueryBlock(options),\n ]\n super(options, blocks)\n }\n }\n\n _squel.replace = (options?: any, blocks?: any) =>\n new cls.Replace(options, blocks)\n}\n",
7
+ "import { _isArray, _pad, squel } from \"./core\"\nimport type { Squel } from \"./types\"\n\nsquel.flavours.postgres = (_squel: Squel) => {\n const cls = _squel.cls as any\n\n cls.DefaultQueryBuilderOptions.numberedParameters = true\n cls.DefaultQueryBuilderOptions.numberedParametersStartAt = 1\n cls.DefaultQueryBuilderOptions.autoQuoteAliasNames = false\n cls.DefaultQueryBuilderOptions.useAsForTableAliasNames = true\n\n cls.PostgresOnConflictKeyUpdateBlock = class extends (\n cls.AbstractSetFieldBlock\n ) {\n _onConflict: boolean\n _dupFields: any[]\n\n constructor(options: any) {\n super(options)\n this._onConflict = false\n this._dupFields = []\n }\n\n onConflict(conflictFields: any, fields: any): void {\n this._onConflict = true\n if (!conflictFields) return\n if (!_isArray(conflictFields)) {\n conflictFields = [conflictFields]\n }\n this._dupFields = conflictFields.map(this._sanitizeField.bind(this))\n if (fields) {\n Object.keys(fields).forEach((key) => {\n this._set(key, fields[key])\n })\n }\n }\n\n _toParamString(options: any = {}): any {\n let totalStr = \"\"\n const totalValues: any[] = []\n for (let i = 0; i < this._fields.length; ++i) {\n totalStr = _pad(totalStr, \", \")\n const field = this._fields[i]\n const value = this._values[0][i]\n const valueOptions = this._valueOptions[0][i]\n if (typeof value === \"undefined\") {\n totalStr += field\n } else {\n const ret = this._buildString(\n `${field} = ${this.options.parameterCharacter}`,\n [value],\n {\n buildParameterized: options.buildParameterized,\n formattingOptions: valueOptions,\n },\n )\n totalStr += ret.text\n ret.values.forEach((v: any) => totalValues.push(v))\n }\n }\n const returned = { text: \"\", values: totalValues }\n if (this._onConflict) {\n const conflictFields = this._dupFields.length\n ? `(${this._dupFields.join(\", \")}) `\n : \"\"\n const action = totalStr.length ? `UPDATE SET ${totalStr}` : \"NOTHING\"\n returned.text = `ON CONFLICT ${conflictFields}DO ${action}`\n }\n return returned\n }\n }\n\n cls.ReturningBlock = class extends cls.Block {\n _fields: any[]\n\n constructor(options: any) {\n super(options)\n this._fields = []\n }\n\n returning(field: any, alias: any = null, options: any = {}): any {\n alias = alias ? this._sanitizeFieldAlias(alias) : alias\n field = this._sanitizeField(field)\n const existingField = this._fields.filter(\n (f: any) => f.name === field && f.alias === alias,\n )\n if (existingField.length) return this\n this._fields.push({ name: field, alias, options })\n }\n\n _toParamString(options: any = {}): any {\n const { buildParameterized } = options\n let totalStr = \"\"\n const totalValues: any[] = []\n for (const field of this._fields) {\n totalStr = _pad(totalStr, \", \")\n const { name, alias, options: fieldOptions } = field\n if (typeof name === \"string\") {\n totalStr += this._formatFieldName(name, fieldOptions)\n } else {\n const ret = name._toParamString({ nested: true, buildParameterized })\n totalStr += ret.text\n ret.values.forEach((v: any) => totalValues.push(v))\n }\n if (alias) totalStr += ` AS ${this._formatFieldAlias(alias)}`\n }\n return {\n text: totalStr.length > 0 ? `RETURNING ${totalStr}` : \"\",\n values: totalValues,\n }\n }\n }\n\n cls.WithBlock = class extends cls.Block {\n _tables: any[]\n\n constructor(options: any) {\n super(options)\n this._tables = []\n }\n\n with(alias: any, table: any): void {\n this._tables.push({ alias, table })\n }\n\n _toParamString(options: any = {}): any {\n const parts: string[] = []\n const values: any[] = []\n for (const { alias, table } of this._tables) {\n const ret = table._toParamString({\n buildParameterized: options.buildParameterized,\n nested: true,\n })\n parts.push(`${alias} AS ${ret.text}`)\n ret.values.forEach((v: any) => values.push(v))\n }\n return {\n text: parts.length ? `WITH ${parts.join(\", \")}` : \"\",\n values,\n }\n }\n }\n\n cls.DistinctOnBlock = class extends cls.Block {\n _useDistinct = false\n _distinctFields: any[]\n\n constructor(options: any) {\n super(options)\n this._distinctFields = []\n }\n\n distinct(...fields: any[]): void {\n this._useDistinct = true\n fields.forEach((field) => {\n this._distinctFields.push(this._sanitizeField(field))\n })\n }\n\n _toParamString(): any {\n let text = \"\"\n if (this._useDistinct) {\n text = \"DISTINCT\"\n if (this._distinctFields.length) {\n text += ` ON (${this._distinctFields.join(\", \")})`\n }\n }\n return { text, values: [] }\n }\n }\n\n cls.Select = class extends cls.QueryBuilder {\n constructor(options?: any, blocks: any = null) {\n blocks = blocks || [\n new cls.WithBlock(options),\n new cls.StringBlock(options, \"SELECT\"),\n new cls.FunctionBlock(options),\n new cls.DistinctOnBlock(options),\n new cls.GetFieldBlock(options),\n new cls.FromTableBlock(options),\n new cls.JoinBlock(options),\n new cls.WhereBlock(options),\n new cls.GroupByBlock(options),\n new cls.HavingBlock(options),\n new cls.OrderByBlock(options),\n new cls.LimitBlock(options),\n new cls.OffsetBlock(options),\n new cls.UnionBlock(options),\n ]\n super(options, blocks)\n }\n }\n\n cls.Insert = class extends cls.QueryBuilder {\n constructor(options?: any, blocks: any = null) {\n blocks = blocks || [\n new cls.WithBlock(options),\n new cls.StringBlock(options, \"INSERT\"),\n new cls.IntoTableBlock(options),\n new cls.InsertFieldValueBlock(options),\n new cls.InsertFieldsFromQueryBlock(options),\n new cls.PostgresOnConflictKeyUpdateBlock(options),\n new cls.ReturningBlock(options),\n ]\n super(options, blocks)\n }\n }\n\n cls.Update = class extends cls.QueryBuilder {\n constructor(options?: any, blocks: any = null) {\n blocks = blocks || [\n new cls.WithBlock(options),\n new cls.StringBlock(options, \"UPDATE\"),\n new cls.UpdateTableBlock(options),\n new cls.SetFieldBlock(options),\n new cls.FromTableBlock(options),\n new cls.WhereBlock(options),\n new cls.OrderByBlock(options),\n new cls.LimitBlock(options),\n new cls.ReturningBlock(options),\n ]\n super(options, blocks)\n }\n }\n\n cls.Delete = class extends cls.QueryBuilder {\n constructor(options?: any, blocks: any = null) {\n blocks = blocks || [\n new cls.WithBlock(options),\n new cls.StringBlock(options, \"DELETE\"),\n new cls.TargetTableBlock(options),\n new cls.FromTableBlock({ ...options, singleTable: true }),\n new cls.JoinBlock(options),\n new cls.WhereBlock(options),\n new cls.OrderByBlock(options),\n new cls.LimitBlock(options),\n new cls.ReturningBlock(options),\n ]\n super(options, blocks)\n }\n }\n}\n",
8
+ "import { _extend, _pad, squel } from \"./core\"\nimport type { Squel } from \"./types\"\n\nsquel.flavours.mssql = (_squel: Squel) => {\n const cls = _squel.cls as any\n\n cls.DefaultQueryBuilderOptions.replaceSingleQuotes = true\n cls.DefaultQueryBuilderOptions.autoQuoteAliasNames = false\n cls.DefaultQueryBuilderOptions.numberedParametersPrefix = \"@\"\n\n _squel.registerValueHandler(Date, (value) => {\n const date = value as Date\n return `'${date.getUTCFullYear()}-${date.getUTCMonth() + 1}-${date.getUTCDate()} ${date.getUTCHours()}:${date.getUTCMinutes()}:${date.getUTCSeconds()}'`\n })\n\n cls.MssqlLimitOffsetTopBlock = class extends cls.Block {\n _limits: any\n _offsets: any\n ParentBlock: any\n LimitBlock: any\n TopBlock: any\n OffsetBlock: any\n\n constructor(options: any) {\n super(options)\n this._limits = null\n this._offsets = null\n\n const _limit = function (this: any, max: number): void {\n max = this._sanitizeLimitOffset(max)\n this._parent._limits = max\n }\n\n this.ParentBlock = class extends cls.Block {\n _parent: any\n constructor(parent: any) {\n super(parent.options)\n this._parent = parent\n }\n }\n\n this.LimitBlock = class extends this.ParentBlock {\n limit: any\n constructor(parent: any) {\n super(parent)\n this.limit = _limit\n }\n\n _toParamString(): any {\n let str = \"\"\n if (this._parent._limits && this._parent._offsets) {\n str = `FETCH NEXT ${this._parent._limits} ROWS ONLY`\n }\n return { text: str, values: [] }\n }\n }\n\n this.TopBlock = class extends this.ParentBlock {\n top: any\n constructor(parent: any) {\n super(parent)\n this.top = _limit\n }\n\n _toParamString(): any {\n let str = \"\"\n if (this._parent._limits && !this._parent._offsets) {\n str = `TOP (${this._parent._limits})`\n }\n return { text: str, values: [] }\n }\n }\n\n this.OffsetBlock = class extends this.ParentBlock {\n offset(start: any): void {\n this._parent._offsets = this._sanitizeLimitOffset(start)\n }\n\n _toParamString(): any {\n let str = \"\"\n if (this._parent._offsets) {\n str = `OFFSET ${this._parent._offsets} ROWS`\n }\n return { text: str, values: [] }\n }\n }\n }\n\n LIMIT(): any {\n return new this.LimitBlock(this)\n }\n\n TOP(): any {\n return new this.TopBlock(this)\n }\n\n OFFSET(): any {\n return new this.OffsetBlock(this)\n }\n }\n\n cls.MssqlUpdateTopBlock = class extends cls.Block {\n _limits: any\n limit: any\n top: any\n\n constructor(options: any) {\n super(options)\n this._limits = null\n const setter = (max: any): void => {\n this._limits = this._sanitizeLimitOffset(max)\n }\n this.limit = setter\n this.top = setter\n }\n\n _toParamString(): any {\n return {\n text: this._limits ? `TOP (${this._limits})` : \"\",\n values: [],\n }\n }\n }\n\n cls.MssqlInsertFieldValueBlock = class extends cls.InsertFieldValueBlock {\n _outputs: string[]\n\n constructor(options: any) {\n super(options)\n this._outputs = []\n }\n\n output(fields: any): void {\n if (typeof fields === \"string\") {\n this._outputs.push(`INSERTED.${this._sanitizeField(fields)}`)\n } else {\n fields.forEach((f: any) => {\n this._outputs.push(`INSERTED.${this._sanitizeField(f)}`)\n })\n }\n }\n\n _toParamString(options?: any): any {\n const ret = super._toParamString(options)\n if (ret.text.length && this._outputs.length > 0) {\n const innerStr = `OUTPUT ${this._outputs.join(\", \")} `\n const valuesPos = ret.text.indexOf(\"VALUES\")\n ret.text =\n ret.text.substring(0, valuesPos) +\n innerStr +\n ret.text.substring(valuesPos)\n }\n return ret\n }\n }\n\n cls.MssqlUpdateDeleteOutputBlock = class extends cls.Block {\n _outputs: any[]\n\n constructor(options: any) {\n super(options)\n this._outputs = []\n }\n\n outputs(outputs: any): void {\n for (const output in outputs) {\n this.output(output, outputs[output])\n }\n }\n\n output(output: any, alias: any = null): void {\n output = this._sanitizeField(output)\n alias = alias ? this._sanitizeFieldAlias(alias) : alias\n this._outputs.push({\n name: this.options.forDelete\n ? `DELETED.${output}`\n : `INSERTED.${output}`,\n alias,\n })\n }\n\n _toParamString(_queryBuilder?: any): any {\n let totalStr = \"\"\n if (this._outputs.length) {\n for (const output of this._outputs) {\n totalStr = _pad(totalStr, \", \")\n totalStr += output.name\n if (output.alias) {\n totalStr += ` AS ${this._formatFieldAlias(output.alias)}`\n }\n }\n totalStr = `OUTPUT ${totalStr}`\n }\n return { text: totalStr, values: [] }\n }\n }\n\n cls.Select = class extends cls.QueryBuilder {\n constructor(options?: any, blocks: any = null) {\n const limitOffsetTopBlock = new cls.MssqlLimitOffsetTopBlock(options)\n blocks = blocks || [\n new cls.StringBlock(options, \"SELECT\"),\n new cls.DistinctBlock(options),\n limitOffsetTopBlock.TOP(),\n new cls.GetFieldBlock(options),\n new cls.FromTableBlock(options),\n new cls.JoinBlock(options),\n new cls.WhereBlock(options),\n new cls.GroupByBlock(options),\n new cls.OrderByBlock(options),\n limitOffsetTopBlock.OFFSET(),\n limitOffsetTopBlock.LIMIT(),\n new cls.UnionBlock(options),\n ]\n super(options, blocks)\n }\n }\n\n cls.Update = class extends cls.QueryBuilder {\n constructor(options?: any, blocks: any = null) {\n blocks = blocks || [\n new cls.StringBlock(options, \"UPDATE\"),\n new cls.MssqlUpdateTopBlock(options),\n new cls.UpdateTableBlock(options),\n new cls.SetFieldBlock(options),\n new cls.MssqlUpdateDeleteOutputBlock(options),\n new cls.WhereBlock(options),\n ]\n super(options, blocks)\n }\n }\n\n cls.Delete = class extends cls.QueryBuilder {\n constructor(options?: any, blocks: any = null) {\n blocks = blocks || [\n new cls.StringBlock(options, \"DELETE\"),\n new cls.TargetTableBlock(options),\n new cls.FromTableBlock(_extend({}, options, { singleTable: true })),\n new cls.JoinBlock(options),\n new cls.MssqlUpdateDeleteOutputBlock(\n _extend({}, options, { forDelete: true }),\n ),\n new cls.WhereBlock(options),\n new cls.OrderByBlock(options),\n new cls.LimitBlock(options),\n ]\n super(options, blocks)\n }\n }\n\n cls.Insert = class extends cls.QueryBuilder {\n constructor(options?: any, blocks: any = null) {\n blocks = blocks || [\n new cls.StringBlock(options, \"INSERT\"),\n new cls.IntoTableBlock(options),\n new cls.MssqlInsertFieldValueBlock(options),\n new cls.InsertFieldsFromQueryBlock(options),\n ]\n super(options, blocks)\n }\n }\n}\n",
9
+ "import squel from \"./core\"\nimport \"./mysql\"\nimport \"./postgres\"\nimport \"./mssql\"\n\nexport default squel\nexport { squel }\nexport type {\n BaseBuilder,\n Case,\n Cloneable,\n Delete,\n Expression,\n Flavour,\n FormattingOptions,\n Insert,\n ParamString,\n QueryBuilder,\n QueryBuilderOptions,\n Select,\n Squel,\n ToParamOptions,\n Update,\n ValueHandler,\n} from \"./types\"\n"
10
+ ],
11
+ "mappings": "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",
12
+ "debugId": "3126B12691A1372D64756E2164756E21",
13
+ "names": []
14
+ }
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,12 @@
1
+ import type { Flavour, Squel } from "./types";
2
+ declare function _pad(str: string, pad: string): string;
3
+ declare function _extend<T extends Record<string, any>>(dst: T, ...sources: Array<Record<string, any> | undefined | null>): T;
4
+ declare function _isPlainObject(obj: unknown): boolean;
5
+ declare function _isArray(obj: unknown): boolean;
6
+ declare function _clone<T>(src: T): T;
7
+ declare function _buildSquel(flavour?: Flavour | null): Squel;
8
+ export { _buildSquel, _pad, _extend, _isPlainObject, _isArray, _clone };
9
+ declare const squel: Squel;
10
+ export default squel;
11
+ export { squel };
12
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/core.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,OAAO,EAIP,KAAK,EAKN,MAAM,SAAS,CAAA;AAEhB,iBAAS,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,iBAAS,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5C,GAAG,EAAE,CAAC,EACN,GAAG,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,GACxD,CAAC,CAWH;AAED,iBAAS,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAE7C;AAED,iBAAS,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEvC;AAED,iBAAS,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAc5B;AAkDD,iBAAS,WAAW,CAAC,OAAO,GAAE,OAAO,GAAG,IAAW,GAAG,KAAK,CAu7C1D;AAED,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;AAEvE,QAAA,MAAM,KAAK,EAAE,KAAqB,CAAA;AAkBlC,eAAe,KAAK,CAAA;AACpB,OAAO,EAAE,KAAK,EAAE,CAAA"}
@@ -0,0 +1,8 @@
1
+ import squel from "./core";
2
+ import "./mysql";
3
+ import "./postgres";
4
+ import "./mssql";
5
+ export default squel;
6
+ export { squel };
7
+ export type { BaseBuilder, Case, Cloneable, Delete, Expression, Flavour, FormattingOptions, Insert, ParamString, QueryBuilder, QueryBuilderOptions, Select, Squel, ToParamOptions, Update, ValueHandler, } from "./types";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,QAAQ,CAAA;AAC1B,OAAO,SAAS,CAAA;AAChB,OAAO,YAAY,CAAA;AACnB,OAAO,SAAS,CAAA;AAEhB,eAAe,KAAK,CAAA;AACpB,OAAO,EAAE,KAAK,EAAE,CAAA;AAChB,YAAY,EACV,WAAW,EACX,IAAI,EACJ,SAAS,EACT,MAAM,EACN,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,MAAM,EACN,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,MAAM,EACN,KAAK,EACL,cAAc,EACd,MAAM,EACN,YAAY,GACb,MAAM,SAAS,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mssql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mssql.d.ts","sourceRoot":"","sources":["../../src/mssql.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mysql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../../src/mysql.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=postgres.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/postgres.ts"],"names":[],"mappings":""}
@@ -0,0 +1,206 @@
1
+ export type Flavour = "mssql" | "mysql" | "postgres";
2
+ export interface ParamString {
3
+ text: string;
4
+ values: unknown[];
5
+ }
6
+ export type ValueHandler<T = unknown> = (value: T, asParam: boolean, formattingOptions?: FormattingOptions) => string | ParamString | unknown;
7
+ export type ValueType = string | (new (...args: unknown[]) => unknown);
8
+ export interface ValueHandlerEntry {
9
+ type: ValueType;
10
+ handler: ValueHandler;
11
+ }
12
+ export interface FormattingOptions {
13
+ ignorePeriodsForFieldNameQuotes?: boolean;
14
+ dontQuote?: boolean;
15
+ [key: string]: unknown;
16
+ }
17
+ export interface BuildStringOptions {
18
+ buildParameterized?: boolean;
19
+ nested?: boolean;
20
+ formattingOptions?: FormattingOptions;
21
+ }
22
+ export interface QueryBuilderOptions {
23
+ autoQuoteTableNames?: boolean;
24
+ autoQuoteFieldNames?: boolean;
25
+ autoQuoteAliasNames?: boolean;
26
+ useAsForTableAliasNames?: boolean;
27
+ nameQuoteCharacter?: string;
28
+ tableAliasQuoteCharacter?: string;
29
+ fieldAliasQuoteCharacter?: string;
30
+ valueHandlers?: ValueHandlerEntry[];
31
+ parameterCharacter?: string;
32
+ numberedParameters?: boolean;
33
+ numberedParametersPrefix?: string;
34
+ numberedParametersStartAt?: number;
35
+ replaceSingleQuotes?: boolean;
36
+ singleQuoteReplacement?: string;
37
+ separator?: string;
38
+ stringFormatter?: ((value: string) => string) | null;
39
+ rawNesting?: boolean;
40
+ /** Internal: prefix string used by AbstractTableBlock subclasses (e.g. "FROM"). */
41
+ prefix?: string;
42
+ /** Internal: restrict AbstractTableBlock to a single table (e.g. INTO). */
43
+ singleTable?: boolean;
44
+ /** Internal: SQL keyword used by AbstractConditionBlock subclasses (e.g. "WHERE"). */
45
+ verb?: string;
46
+ /** Internal: marks MssqlUpdateDeleteOutputBlock as a DELETE-output. */
47
+ forDelete?: boolean;
48
+ /** Allow flavour-specific or test-time additions. */
49
+ [key: string]: unknown;
50
+ }
51
+ export interface ToParamOptions {
52
+ numberedParametersStartAt?: number;
53
+ buildParameterized?: boolean;
54
+ nested?: boolean;
55
+ [key: string]: unknown;
56
+ }
57
+ export interface Cloneable {
58
+ clone(): this;
59
+ }
60
+ export interface BaseBuilder extends Cloneable {
61
+ options: QueryBuilderOptions;
62
+ registerValueHandler(type: ValueType, handler: ValueHandler): this;
63
+ toString(options?: ToParamOptions): string;
64
+ toParam(options?: ToParamOptions): ParamString;
65
+ }
66
+ export interface Expression extends BaseBuilder {
67
+ and(expr: string | Expression | QueryBuilder, ...params: unknown[]): this;
68
+ or(expr: string | Expression | QueryBuilder, ...params: unknown[]): this;
69
+ }
70
+ export interface Case extends BaseBuilder {
71
+ when(expression: string, ...values: unknown[]): this;
72
+ then(result: unknown): this;
73
+ else(elseValue: unknown): this;
74
+ }
75
+ export interface QueryBuilder extends BaseBuilder {
76
+ blocks: unknown[];
77
+ updateOptions(options: QueryBuilderOptions): void;
78
+ getBlock<T>(blockType: new (...args: any[]) => T): T | undefined;
79
+ [method: string]: unknown;
80
+ }
81
+ export type Joinable = string | BaseBuilder;
82
+ export type Conditional = string | BaseBuilder;
83
+ export type Fieldable = string | BaseBuilder;
84
+ export interface Select extends QueryBuilder {
85
+ from(table: Joinable, alias?: string): this;
86
+ field(field: Fieldable, alias?: string, options?: FormattingOptions): this;
87
+ fields(fields: string[] | {
88
+ [field: string]: string | null;
89
+ }, options?: FormattingOptions): this;
90
+ distinct(...fields: string[]): this;
91
+ group(field: string): this;
92
+ where(condition: Conditional, ...values: unknown[]): this;
93
+ having(condition: Conditional, ...values: unknown[]): this;
94
+ order(field: string, dir?: boolean | string | null, ...values: unknown[]): this;
95
+ limit(limit: number | null): this;
96
+ offset(start: number | null): this;
97
+ join(table: Joinable, alias?: string | null, condition?: Conditional | null, type?: string): this;
98
+ left_join(table: Joinable, alias?: string | null, condition?: Conditional | null): this;
99
+ right_join(table: Joinable, alias?: string | null, condition?: Conditional | null): this;
100
+ outer_join(table: Joinable, alias?: string | null, condition?: Conditional | null): this;
101
+ left_outer_join(table: Joinable, alias?: string | null, condition?: Conditional | null): this;
102
+ full_join(table: Joinable, alias?: string | null, condition?: Conditional | null): this;
103
+ cross_join(table: Joinable, alias?: string | null, condition?: Conditional | null): this;
104
+ union(table: Joinable, type?: string): this;
105
+ union_all(table: Joinable): this;
106
+ function(str: string, ...values: unknown[]): this;
107
+ with?(alias: string, table: QueryBuilder): this;
108
+ }
109
+ export interface Update extends QueryBuilder {
110
+ table(table: string, alias?: string): this;
111
+ set(field: string, value?: unknown, options?: FormattingOptions): this;
112
+ setFields(fields: {
113
+ [field: string]: unknown;
114
+ }, valueOptions?: FormattingOptions): this;
115
+ where(condition: Conditional, ...values: unknown[]): this;
116
+ order(field: string, dir?: boolean | string | null, ...values: unknown[]): this;
117
+ limit(limit: number | null): this;
118
+ }
119
+ export interface Insert extends QueryBuilder {
120
+ into(table: string): this;
121
+ set(field: string, value?: unknown, options?: FormattingOptions): this;
122
+ setFields(fields: {
123
+ [field: string]: unknown;
124
+ }, valueOptions?: FormattingOptions): this;
125
+ setFieldsRows(fieldsRows: Array<{
126
+ [field: string]: unknown;
127
+ }>, valueOptions?: FormattingOptions): this;
128
+ fromQuery(fields: string[], selectQuery: Select): this;
129
+ onDupUpdate?(field: string, value?: unknown, options?: FormattingOptions): this;
130
+ }
131
+ export interface Delete extends QueryBuilder {
132
+ target(table: string): this;
133
+ from(table: string, alias?: string): this;
134
+ where(condition: Conditional, ...values: unknown[]): this;
135
+ order(field: string, dir?: boolean | string | null, ...values: unknown[]): this;
136
+ limit(limit: number | null): this;
137
+ }
138
+ export type FlavourRegistration = (squel: Squel) => void;
139
+ export interface Squel {
140
+ VERSION: string;
141
+ flavour: Flavour | string | null;
142
+ flavours: {
143
+ [name: string]: FlavourRegistration;
144
+ };
145
+ cls: ClsRegistry;
146
+ expr(options?: QueryBuilderOptions): Expression;
147
+ case(name?: string, options?: QueryBuilderOptions): Case;
148
+ case(options?: QueryBuilderOptions): Case;
149
+ select(options?: QueryBuilderOptions, blocks?: unknown[]): Select;
150
+ update(options?: QueryBuilderOptions, blocks?: unknown[]): Update;
151
+ insert(options?: QueryBuilderOptions, blocks?: unknown[]): Insert;
152
+ delete(options?: QueryBuilderOptions, blocks?: unknown[]): Delete;
153
+ remove(options?: QueryBuilderOptions, blocks?: unknown[]): Delete;
154
+ str(...args: unknown[]): BaseBuilder;
155
+ rstr(...args: unknown[]): BaseBuilder;
156
+ registerValueHandler(type: ValueType, handler: ValueHandler): void;
157
+ useFlavour(flavour?: Flavour | string | null): Squel;
158
+ replace?(options?: QueryBuilderOptions, blocks?: unknown[]): Insert;
159
+ }
160
+ /**
161
+ * The cls registry exposes squel's internal class hierarchy. Each entry is a
162
+ * constructor for one of the building-block classes. Flavours add their own
163
+ * classes via index access, hence the open index signature.
164
+ */
165
+ export interface ClsRegistry {
166
+ isSquelBuilder(obj: unknown): boolean;
167
+ DefaultQueryBuilderOptions: QueryBuilderOptions;
168
+ globalValueHandlers: ValueHandlerEntry[];
169
+ registerValueHandler(type: ValueType, handler: ValueHandler): void;
170
+ Cloneable: new () => Cloneable;
171
+ BaseBuilder: new (options?: QueryBuilderOptions) => BaseBuilder;
172
+ Block: new (options?: QueryBuilderOptions) => BaseBuilder;
173
+ Expression: new (options?: QueryBuilderOptions) => Expression;
174
+ Case: new (fieldName?: string | QueryBuilderOptions, options?: QueryBuilderOptions) => Case;
175
+ StringBlock: new (options: QueryBuilderOptions | undefined, str: string) => BaseBuilder;
176
+ FunctionBlock: new (options?: QueryBuilderOptions) => BaseBuilder;
177
+ AbstractTableBlock: new (options?: QueryBuilderOptions) => BaseBuilder;
178
+ TargetTableBlock: new (options?: QueryBuilderOptions) => BaseBuilder;
179
+ UpdateTableBlock: new (options?: QueryBuilderOptions) => BaseBuilder;
180
+ FromTableBlock: new (options?: QueryBuilderOptions) => BaseBuilder;
181
+ IntoTableBlock: new (options?: QueryBuilderOptions) => BaseBuilder;
182
+ GetFieldBlock: new (options?: QueryBuilderOptions) => BaseBuilder;
183
+ AbstractSetFieldBlock: new (options?: QueryBuilderOptions) => BaseBuilder;
184
+ SetFieldBlock: new (options?: QueryBuilderOptions) => BaseBuilder;
185
+ InsertFieldValueBlock: new (options?: QueryBuilderOptions) => BaseBuilder;
186
+ InsertFieldsFromQueryBlock: new (options?: QueryBuilderOptions) => BaseBuilder;
187
+ DistinctBlock: new (options?: QueryBuilderOptions) => BaseBuilder;
188
+ GroupByBlock: new (options?: QueryBuilderOptions) => BaseBuilder;
189
+ AbstractVerbSingleValueBlock: new (options?: QueryBuilderOptions) => BaseBuilder;
190
+ OffsetBlock: new (options?: QueryBuilderOptions) => BaseBuilder;
191
+ LimitBlock: new (options?: QueryBuilderOptions) => BaseBuilder;
192
+ AbstractConditionBlock: new (options?: QueryBuilderOptions) => BaseBuilder;
193
+ WhereBlock: new (options?: QueryBuilderOptions) => BaseBuilder;
194
+ HavingBlock: new (options?: QueryBuilderOptions) => BaseBuilder;
195
+ OrderByBlock: new (options?: QueryBuilderOptions) => BaseBuilder;
196
+ JoinBlock: new (options?: QueryBuilderOptions) => BaseBuilder;
197
+ UnionBlock: new (options?: QueryBuilderOptions) => BaseBuilder;
198
+ QueryBuilder: new (options?: QueryBuilderOptions, blocks?: unknown[]) => QueryBuilder;
199
+ Select: new (options?: QueryBuilderOptions, blocks?: unknown[]) => Select;
200
+ Update: new (options?: QueryBuilderOptions, blocks?: unknown[]) => Update;
201
+ Delete: new (options?: QueryBuilderOptions, blocks?: unknown[]) => Delete;
202
+ Insert: new (options?: QueryBuilderOptions, blocks?: unknown[]) => Insert;
203
+ /** Flavour-added classes (e.g. PostgresOnConflictKeyUpdateBlock). */
204
+ [key: string]: any;
205
+ }
206
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}