sqlstack 1.0.18 → 1.0.19

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.
@@ -1 +1 @@
1
- {"version":3,"file":"sqlBinder.js","sourceRoot":"","sources":["../../../src/binders/sqlBinder.ts"],"names":[],"mappings":"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","sourcesContent":["import { extractNamedParams } from '../core/sqlParams';\n\nexport type BindResult = {\n sql: string;\n params: unknown[];\n};\n\nexport interface SqlBinder {\n bind(sql: string, args: Record<string, unknown> | unknown[]): BindResult;\n}\n\ntype Dialect = 'mysql' | 'sqlite' | 'postgres';\n\nexport function createBinder(dialect: Dialect): SqlBinder {\n const placeholder = (indexRef: { i: number }) => {\n if (dialect === 'postgres') return `$${indexRef.i++}`;\n return '?'; // mysql + sqlite\n };\n\n return {\n bind(sql: string, args: Record<string, unknown> | unknown[]): BindResult {\n const isArrayArgs = Array.isArray(args);\n const params: unknown[] = [];\n const out: string[] = [];\n\n let i = 0;\n let inSQ = false; // single quote string\n let inDQ = false; // double quote identifier\n let inLC = false; // line comment -- ...\\n\n let inBC = false; // block comment /* ... */\n const pgIndex = { i: 1 };\n\n let sawNamed = false;\n let sawPositional = false;\n\n const len = sql.length;\n while (i < len) {\n const ch = sql[i];\n const next = i + 1 < len ? sql[i + 1] : '';\n\n // Handle exiting comments/strings first\n if (inLC) {\n out.push(ch);\n i++;\n if (ch === '\\n') inLC = false;\n continue;\n }\n if (inBC) {\n out.push(ch);\n i++;\n if (ch === '*' && next === '/') {\n out.push(next);\n i++;\n inBC = false;\n }\n continue;\n }\n if (inSQ) {\n out.push(ch);\n i++;\n // escape '' inside string\n if (ch === \"'\" && next === \"'\") {\n out.push(next);\n i++;\n } else if (ch === \"'\") {\n inSQ = false;\n }\n continue;\n }\n if (inDQ) {\n out.push(ch);\n i++;\n // escape \"\" inside identifier\n if (ch === '\"' && next === '\"') {\n out.push(next);\n i++;\n } else if (ch === '\"') {\n inDQ = false;\n }\n continue;\n }\n\n // Not inside string/comment\n if (ch === '-' && next === '-') {\n out.push(ch, next);\n i += 2;\n inLC = true;\n continue;\n }\n if (ch === '/' && next === '*') {\n out.push(ch, next);\n i += 2;\n inBC = true;\n continue;\n }\n if (ch === \"'\") {\n out.push(ch);\n i++;\n inSQ = true;\n continue;\n }\n if (ch === '\"') {\n out.push(ch);\n i++;\n inDQ = true;\n continue;\n }\n\n // Postgres cast :: — skip as literal\n if (ch === ':' && next === ':') {\n out.push('::');\n i += 2;\n continue;\n }\n\n if (ch === ':') {\n // Check for :update(...) syntax (case-insensitive)\n const updateMatch = /^:update\\s*\\(/i.exec(sql.slice(i));\n if (updateMatch) {\n if (isArrayArgs) {\n throw new Error(':update() syntax only works with named parameters');\n }\n \n // Parse the column list inside parentheses\n let j = i + updateMatch[0].length; // Skip ':update('\n const columnStart = j;\n let parenDepth = 1;\n let inString = false;\n let stringChar = '';\n \n // Find matching closing parenthesis\n while (j < len && parenDepth > 0) {\n const c = sql[j];\n const cNext = j + 1 < len ? sql[j + 1] : '';\n \n if (!inString) {\n if (c === \"'\" || c === '\"') {\n inString = true;\n stringChar = c;\n } else if (c === '(') {\n parenDepth++;\n } else if (c === ')') {\n parenDepth--;\n }\n } else {\n if (c === stringChar) {\n // Check for escaped quote\n if (cNext === stringChar) {\n j++; // Skip escaped quote\n } else {\n inString = false;\n }\n }\n }\n if (parenDepth > 0) j++;\n }\n \n if (parenDepth > 0) {\n throw new Error('Unclosed :update() parentheses');\n }\n \n // Extract column list (between the parentheses)\n const columnList = sql.slice(columnStart, j).trim();\n const updateEnd = j + 1; // Include closing ')'\n \n // Parse column list (split by comma, respecting quotes and parentheses)\n const items: string[] = [];\n let current = '';\n let inSQ = false; // single quote string\n let inDQ = false; // double quote identifier\n let itemParenDepth = 0;\n \n for (let k = 0; k < columnList.length; k++) {\n const ch = columnList[k];\n const next = k + 1 < columnList.length ? columnList[k + 1] : '';\n \n if (inSQ) {\n current += ch;\n if (ch === \"'\" && next === \"'\") {\n current += next;\n k++;\n } else if (ch === \"'\") {\n inSQ = false;\n }\n continue;\n }\n \n if (inDQ) {\n current += ch;\n if (ch === '\"' && next === '\"') {\n current += next;\n k++;\n } else if (ch === '\"') {\n inDQ = false;\n }\n continue;\n }\n \n if (ch === \"'\") {\n current += ch;\n inSQ = true;\n continue;\n }\n \n if (ch === '\"') {\n current += ch;\n inDQ = true;\n continue;\n }\n \n if (ch === '(') {\n current += ch;\n itemParenDepth++;\n continue;\n }\n \n if (ch === ')') {\n current += ch;\n itemParenDepth--;\n continue;\n }\n \n if (ch === ',' && itemParenDepth === 0) {\n const trimmed = current.trim();\n if (trimmed.length > 0) {\n items.push(trimmed);\n }\n current = '';\n continue;\n }\n \n current += ch;\n }\n \n // Add the last item\n const trimmed = current.trim();\n if (trimmed.length > 0) {\n items.push(trimmed);\n }\n \n if (items.length === 0) {\n throw new Error(':update() requires at least one column name');\n }\n \n // Build SET clause with literal expressions and parameterized columns\n const obj = args as Record<string, unknown>;\n const setParts: string[] = [];\n const updateParams: unknown[] = [];\n let hasParameterized = false;\n \n for (const item of items) {\n const trimmed = item.trim();\n \n // Check if this is a literal expression (contains = not inside quotes)\n let isLiteral = false;\n let eqIndex = -1;\n let inString = false;\n let stringChar = '';\n \n for (let k = 0; k < trimmed.length; k++) {\n const ch = trimmed[k];\n const next = k + 1 < trimmed.length ? trimmed[k + 1] : '';\n \n if (!inString && (ch === \"'\" || ch === '\"')) {\n inString = true;\n stringChar = ch;\n } else if (inString) {\n if (ch === stringChar) {\n if (next === stringChar) {\n k++; // Skip escaped quote\n } else {\n inString = false;\n }\n }\n } else if (ch === '=') {\n eqIndex = k;\n isLiteral = true;\n break;\n }\n }\n \n if (isLiteral && eqIndex >= 0) {\n // Literal SQL expression - include as-is\n setParts.push(trimmed);\n } else {\n // Parameterized column - check if defined in args\n hasParameterized = true;\n if (Object.prototype.hasOwnProperty.call(obj, trimmed) && obj[trimmed] !== undefined) {\n setParts.push(`${trimmed} = ${placeholder(pgIndex)}`);\n updateParams.push(obj[trimmed]);\n }\n }\n }\n \n // Only throw error if all parameterized columns are undefined (literals are always included)\n if (hasParameterized && setParts.length === 0) {\n throw new Error('All columns in :update() are undefined');\n }\n \n if (setParts.length === 0) {\n throw new Error(':update() requires at least one column name');\n }\n \n // Replace :update(...) with SET clause\n out.push('SET ', setParts.join(', '));\n params.push(...updateParams);\n \n i = updateEnd;\n continue;\n }\n \n // Check for :insert(...) syntax (case-insensitive)\n const insertMatch = /^:insert\\s*\\(/i.exec(sql.slice(i));\n if (insertMatch) {\n if (isArrayArgs) {\n throw new Error(':insert() syntax only works with named parameters');\n }\n \n // Parse the column list inside parentheses\n let j = i + insertMatch[0].length; // Skip ':insert('\n const columnStart = j;\n let parenDepth = 1;\n let inString = false;\n let stringChar = '';\n \n // Find matching closing parenthesis\n while (j < len && parenDepth > 0) {\n const c = sql[j];\n const cNext = j + 1 < len ? sql[j + 1] : '';\n \n if (!inString) {\n if (c === \"'\" || c === '\"') {\n inString = true;\n stringChar = c;\n } else if (c === '(') {\n parenDepth++;\n } else if (c === ')') {\n parenDepth--;\n }\n } else {\n if (c === stringChar) {\n // Check for escaped quote\n if (cNext === stringChar) {\n j++; // Skip escaped quote\n } else {\n inString = false;\n }\n }\n }\n if (parenDepth > 0) j++;\n }\n \n if (parenDepth > 0) {\n throw new Error('Unclosed :insert() parentheses');\n }\n \n // Extract column list (between the parentheses)\n const columnList = sql.slice(columnStart, j).trim();\n const insertEnd = j + 1; // Include closing ')'\n \n // Parse column list (split by comma, respecting quotes and parentheses)\n const items: string[] = [];\n let current = '';\n let inSQ = false; // single quote string\n let inDQ = false; // double quote identifier\n let itemParenDepth = 0;\n \n for (let k = 0; k < columnList.length; k++) {\n const ch = columnList[k];\n const next = k + 1 < columnList.length ? columnList[k + 1] : '';\n \n if (inSQ) {\n current += ch;\n if (ch === \"'\" && next === \"'\") {\n current += next;\n k++;\n } else if (ch === \"'\") {\n inSQ = false;\n }\n continue;\n }\n \n if (inDQ) {\n current += ch;\n if (ch === '\"' && next === '\"') {\n current += next;\n k++;\n } else if (ch === '\"') {\n inDQ = false;\n }\n continue;\n }\n \n if (ch === \"'\") {\n current += ch;\n inSQ = true;\n continue;\n }\n \n if (ch === '\"') {\n current += ch;\n inDQ = true;\n continue;\n }\n \n if (ch === '(') {\n current += ch;\n itemParenDepth++;\n continue;\n }\n \n if (ch === ')') {\n current += ch;\n itemParenDepth--;\n continue;\n }\n \n if (ch === ',' && itemParenDepth === 0) {\n const trimmed = current.trim();\n if (trimmed.length > 0) {\n items.push(trimmed);\n }\n current = '';\n continue;\n }\n \n current += ch;\n }\n \n // Add the last item\n const trimmed = current.trim();\n if (trimmed.length > 0) {\n items.push(trimmed);\n }\n \n if (items.length === 0) {\n throw new Error(':insert() requires at least one column name');\n }\n \n // Build column list and VALUES clause\n const obj = args as Record<string, unknown>;\n const columnNames: string[] = [];\n const valueParts: string[] = [];\n const insertParams: unknown[] = [];\n let hasParameterized = false;\n \n for (const item of items) {\n const trimmed = item.trim();\n \n // Check if this is a literal expression (contains = not inside quotes)\n let isLiteral = false;\n let eqIndex = -1;\n let inString = false;\n let stringChar = '';\n \n for (let k = 0; k < trimmed.length; k++) {\n const ch = trimmed[k];\n const next = k + 1 < trimmed.length ? trimmed[k + 1] : '';\n \n if (!inString && (ch === \"'\" || ch === '\"')) {\n inString = true;\n stringChar = ch;\n } else if (inString) {\n if (ch === stringChar) {\n if (next === stringChar) {\n k++; // Skip escaped quote\n } else {\n inString = false;\n }\n }\n } else if (ch === '=') {\n eqIndex = k;\n isLiteral = true;\n break;\n }\n }\n \n if (isLiteral && eqIndex >= 0) {\n // Literal SQL expression - extract column name and value\n const colName = trimmed.slice(0, eqIndex).trim();\n const literalValue = trimmed.slice(eqIndex + 1).trim();\n columnNames.push(colName);\n valueParts.push(literalValue);\n } else {\n // Parameterized column - check if defined in args\n hasParameterized = true;\n if (Object.prototype.hasOwnProperty.call(obj, trimmed) && obj[trimmed] !== undefined) {\n columnNames.push(trimmed);\n valueParts.push(placeholder(pgIndex));\n insertParams.push(obj[trimmed]);\n }\n }\n }\n \n // Only throw error if all parameterized columns are undefined (literals are always included)\n if (hasParameterized && columnNames.length === 0) {\n throw new Error('All columns in :insert() are undefined');\n }\n \n if (columnNames.length === 0) {\n throw new Error(':insert() requires at least one column name');\n }\n \n // Replace :insert(...) with column list and VALUES clause\n out.push('(', columnNames.join(', '), ') VALUES (', valueParts.join(', '), ')');\n params.push(...insertParams);\n \n i = insertEnd;\n continue;\n }\n \n // Check for :filter(...) syntax (case-insensitive)\n const filterMatch = /^:filter\\s*\\(/i.exec(sql.slice(i));\n if (filterMatch) {\n if (isArrayArgs) {\n throw new Error(':filter() syntax only works with named parameters');\n }\n \n // Parse the condition list inside parentheses\n let j = i + filterMatch[0].length; // Skip ':filter('\n const conditionStart = j;\n let parenDepth = 1;\n let inString = false;\n let stringChar = '';\n \n // Find matching closing parenthesis\n while (j < len && parenDepth > 0) {\n const c = sql[j];\n const cNext = j + 1 < len ? sql[j + 1] : '';\n \n if (!inString) {\n if (c === \"'\" || c === '\"') {\n inString = true;\n stringChar = c;\n } else if (c === '(') {\n parenDepth++;\n } else if (c === ')') {\n parenDepth--;\n }\n } else {\n if (c === stringChar) {\n // Check for escaped quote\n if (cNext === stringChar) {\n j++; // Skip escaped quote\n } else {\n inString = false;\n }\n }\n }\n if (parenDepth > 0) j++;\n }\n \n if (parenDepth > 0) {\n throw new Error('Unclosed :filter() parentheses');\n }\n \n // Extract condition list (between the parentheses)\n const conditionList = sql.slice(conditionStart, j).trim();\n const filterEnd = j + 1; // Include closing ')'\n \n // Parse condition list (split by comma, respecting quotes and parentheses)\n const items: string[] = [];\n let current = '';\n let inSQ = false; // single quote string\n let inDQ = false; // double quote identifier\n let itemParenDepth = 0;\n \n for (let k = 0; k < conditionList.length; k++) {\n const ch = conditionList[k];\n const next = k + 1 < conditionList.length ? conditionList[k + 1] : '';\n \n if (inSQ) {\n current += ch;\n if (ch === \"'\" && next === \"'\") {\n current += next;\n k++;\n } else if (ch === \"'\") {\n inSQ = false;\n }\n continue;\n }\n \n if (inDQ) {\n current += ch;\n if (ch === '\"' && next === '\"') {\n current += next;\n k++;\n } else if (ch === '\"') {\n inDQ = false;\n }\n continue;\n }\n \n if (ch === \"'\") {\n current += ch;\n inSQ = true;\n continue;\n }\n \n if (ch === '\"') {\n current += ch;\n inDQ = true;\n continue;\n }\n \n if (ch === '(') {\n current += ch;\n itemParenDepth++;\n continue;\n }\n \n if (ch === ')') {\n current += ch;\n itemParenDepth--;\n continue;\n }\n \n if (ch === ',' && itemParenDepth === 0) {\n const trimmed = current.trim();\n if (trimmed.length > 0) {\n items.push(trimmed);\n }\n current = '';\n continue;\n }\n \n current += ch;\n }\n \n // Add the last item\n const trimmed = current.trim();\n if (trimmed.length > 0) {\n items.push(trimmed);\n }\n \n if (items.length === 0) {\n throw new Error(':filter() requires at least one condition');\n }\n \n // Build WHERE/HAVING conditions\n const obj = args as Record<string, unknown>;\n const conditions: string[] = [];\n const filterParams: unknown[] = [];\n let hasParameterized = false;\n \n // Helper function to expand :or(:param) patterns\n const expandOr = (expr: string): { condition: string; params: unknown[] } => {\n // Find all :or(:param) patterns\n const orPattern = /:or\\s*\\(\\s*:(\\w+)\\s*\\)/gi;\n const matches: Array<{ fullMatch: string; paramName: string; index: number }> = [];\n let match;\n while ((match = orPattern.exec(expr)) !== null) {\n matches.push({\n fullMatch: match[0],\n paramName: match[1],\n index: match.index\n });\n }\n \n if (matches.length === 0) {\n return { condition: '', params: [] };\n }\n \n // Check if all parameters are defined\n let shouldInclude = true;\n const replacements: Array<{ index: number; length: number; replacement: string; params: unknown[] }> = [];\n \n for (const m of matches) {\n if (!Object.prototype.hasOwnProperty.call(obj, m.paramName) || obj[m.paramName] === undefined) {\n shouldInclude = false;\n break;\n }\n const arr = obj[m.paramName];\n if (!Array.isArray(arr) || arr.length === 0) {\n shouldInclude = false;\n break;\n }\n // Find the column expression for this :or() pattern\n // Look backwards from the match to find the column name and operator\n const beforeOr = expr.slice(0, m.index);\n const afterOr = expr.slice(m.index + m.fullMatch.length);\n \n // Try to match column name and operator pattern\n // Match patterns like \"col =\", \"col >\", \"col <=\", \"col LIKE\", etc.\n const beforeTrimmed = beforeOr.trim();\n const operatorMatch = beforeTrimmed.match(/(\\w+)\\s+([=<>!]+|>=|<=|!=|<>|LIKE|IN|BETWEEN|IS(?:\\s+NOT)?)\\s*$/i);\n if (operatorMatch) {\n const colName = operatorMatch[1];\n const operator = operatorMatch[2];\n const parts: string[] = [];\n const params: unknown[] = [];\n for (const val of arr) {\n if (val === undefined) continue;\n parts.push(`${colName} ${operator} ${placeholder(pgIndex)}`);\n params.push(val);\n }\n if (parts.length > 0) {\n // Replace the column/operator and :or() together\n // Find the operator text in the original expr by searching backwards\n const operatorText = operatorMatch[0];\n // Find the last occurrence of this pattern before m.index\n let operatorStart = -1;\n for (let pos = m.index - operatorText.length; pos >= 0; pos--) {\n if (expr.slice(pos, pos + operatorText.length) === operatorText) {\n operatorStart = pos;\n break;\n }\n }\n if (operatorStart === -1) {\n // Fallback: use m.index - operatorText.length\n operatorStart = Math.max(0, m.index - operatorText.length);\n }\n replacements.push({\n index: operatorStart,\n length: m.index + m.fullMatch.length - operatorStart,\n replacement: parts.join(' OR '),\n params\n });\n } else {\n shouldInclude = false;\n break;\n }\n } else {\n // Fallback: use the entire before/after context\n const parts: string[] = [];\n const params: unknown[] = [];\n for (const val of arr) {\n if (val === undefined) continue;\n parts.push(`${beforeTrimmed}${placeholder(pgIndex)}${afterOr.trim()}`);\n params.push(val);\n }\n if (parts.length > 0) {\n replacements.push({\n index: m.index,\n length: m.fullMatch.length,\n replacement: parts.join(' OR '),\n params\n });\n } else {\n shouldInclude = false;\n break;\n }\n }\n }\n \n if (!shouldInclude || replacements.length === 0) {\n return { condition: '', params: [] };\n }\n \n // Replace from end to start to preserve indices\n let resultExpr = expr;\n const allParams: unknown[] = [];\n for (const rep of replacements.reverse()) {\n const before = resultExpr.slice(0, rep.index);\n const after = resultExpr.slice(rep.index + rep.length);\n resultExpr = before + rep.replacement + after;\n allParams.unshift(...rep.params);\n }\n \n // Check if the original expression was already wrapped in parentheses\n const trimmedExpr = expr.trim();\n const alreadyWrapped = trimmedExpr.startsWith('(') && trimmedExpr.endsWith(')');\n const wrappedCondition = alreadyWrapped ? resultExpr : `(${resultExpr})`;\n \n return { condition: wrappedCondition, params: allParams };\n };\n \n for (const item of items) {\n const trimmed = item.trim();\n \n // Check for :or(:param) pattern first\n const orResult = expandOr(trimmed);\n if (orResult.condition) {\n conditions.push(orResult.condition);\n filterParams.push(...orResult.params);\n continue;\n }\n \n // Check if this is a simple column name (no operators, no :param)\n let hasOperator = false;\n let hasParam = false;\n let inString = false;\n let stringChar = '';\n \n for (let k = 0; k < trimmed.length; k++) {\n const ch = trimmed[k];\n const next = k + 1 < trimmed.length ? trimmed[k + 1] : '';\n \n if (!inString && (ch === \"'\" || ch === '\"')) {\n inString = true;\n stringChar = ch;\n } else if (inString) {\n if (ch === stringChar) {\n if (next === stringChar) {\n k++; // Skip escaped quote\n } else {\n inString = false;\n }\n }\n } else {\n // Check for operators (outside strings)\n if ((ch === '>' || ch === '<' || ch === '=' || ch === '!') ||\n (ch === 'L' && trimmed.slice(k, k + 4).toUpperCase() === 'LIKE') ||\n (ch === 'I' && trimmed.slice(k, k + 2).toUpperCase() === 'IN') ||\n (ch === 'B' && trimmed.slice(k, k + 7).toUpperCase() === 'BETWEEN') ||\n (ch === 'I' && trimmed.slice(k, k + 2).toUpperCase() === 'IS')) {\n hasOperator = true;\n }\n // Check for :param pattern\n if (ch === ':' && next && /[a-zA-Z_]/.test(next)) {\n hasParam = true;\n }\n }\n }\n \n if (!hasOperator && !hasParam) {\n // Simple column name → equality\n hasParameterized = true;\n if (Object.prototype.hasOwnProperty.call(obj, trimmed) && obj[trimmed] !== undefined) {\n conditions.push(`${trimmed} = ${placeholder(pgIndex)}`);\n filterParams.push(obj[trimmed]);\n }\n } else if (hasParam) {\n // Parameterized expression → extract and bind parameters\n hasParameterized = true;\n // Extract all :param patterns and check if they're defined\n let shouldInclude = true;\n const paramMatches: Array<{ name: string; index: number }> = [];\n let searchStart = 0;\n while (true) {\n const paramMatch = /:([a-zA-Z_][a-zA-Z0-9_]*)/g.exec(trimmed.slice(searchStart));\n if (!paramMatch) break;\n const paramName = paramMatch[1];\n const fullIndex = searchStart + paramMatch.index;\n paramMatches.push({ name: paramName, index: fullIndex });\n if (!Object.prototype.hasOwnProperty.call(obj, paramName) || obj[paramName] === undefined) {\n shouldInclude = false;\n break;\n }\n searchStart = fullIndex + paramMatch[0].length;\n }\n \n if (shouldInclude && paramMatches.length > 0) {\n // Replace :param with placeholders (from end to start to preserve indices)\n let conditionExpr = trimmed;\n const orderedParams: unknown[] = [];\n for (const pm of paramMatches.reverse()) {\n const paramValue = obj[pm.name];\n const before = conditionExpr.slice(0, pm.index);\n const after = conditionExpr.slice(pm.index + pm.name.length + 1);\n \n // Check if this is an array parameter (for IN clauses)\n if (Array.isArray(paramValue)) {\n if (paramValue.length === 0) {\n shouldInclude = false;\n break;\n }\n // Expand array: replace :ids with ?, ?, ?\n const placeholders = paramValue.map(() => placeholder(pgIndex)).join(', ');\n conditionExpr = before + placeholders + after;\n orderedParams.unshift(...paramValue);\n } else {\n conditionExpr = before + placeholder(pgIndex) + after;\n orderedParams.unshift(paramValue);\n }\n }\n if (shouldInclude) {\n // Add params in original order\n const finalParams: unknown[] = [];\n for (const pm of paramMatches.reverse()) {\n const paramValue = obj[pm.name];\n if (Array.isArray(paramValue)) {\n finalParams.push(...paramValue);\n } else {\n finalParams.push(paramValue);\n }\n }\n conditions.push(conditionExpr);\n filterParams.push(...finalParams);\n }\n }\n } else {\n // Literal expression → include as-is\n conditions.push(trimmed);\n }\n }\n \n // Only throw error if all parameterized conditions are undefined (literals are always included)\n if (hasParameterized && conditions.length === 0) {\n throw new Error('All conditions in :filter() are undefined');\n }\n \n if (conditions.length === 0) {\n throw new Error(':filter() requires at least one condition');\n }\n \n // Replace :filter(...) with conditions joined by AND\n out.push(conditions.join(' AND '));\n params.push(...filterParams);\n \n i = filterEnd;\n continue;\n }\n \n // Attempt to parse a parameter token\n let j = i + 1;\n const start = j;\n while (j < len) {\n const c = sql[j];\n if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c === '_') {\n j++;\n } else {\n break;\n }\n }\n const name = sql.slice(start, j);\n if (!name) {\n // not a parameter — keep literal ':'\n out.push(':');\n i++;\n continue;\n }\n\n // Decide positional vs named\n const m = /^arg([1-9][0-9]*)$/.exec(name);\n const isPos = !!m;\n if (isPos) sawPositional = true; else sawNamed = true;\n if (sawNamed && sawPositional) {\n throw new Error('Cannot mix named and positional parameters in a single query');\n }\n\n let value: unknown;\n if (isPos) {\n if (!isArrayArgs) throw new Error('Positional placeholders require array arguments');\n const index = parseInt(m![1], 10) - 1; // 1-based in SQL\n const arr = args as unknown[];\n if (index < 0 || index >= arr.length) throw new Error(`Missing positional argument :${name}`);\n value = arr[index];\n } else {\n if (isArrayArgs) throw new Error('Named placeholders require a parameter object');\n const obj = args as Record<string, unknown>;\n if (!Object.prototype.hasOwnProperty.call(obj, name)) {\n throw new Error(`Missing named parameter :${name}`);\n }\n value = obj[name];\n }\n\n if (value === undefined) {\n throw new Error(`Parameter :${name} is undefined`);\n }\n\n // Expand placeholder(s)\n if (Array.isArray(value)) {\n if (value.length === 0) throw new Error(`Array parameter :${name} must not be empty`);\n const placeholders: string[] = [];\n for (const v of value) {\n if (v === undefined) throw new Error(`Array parameter :${name} contains undefined`);\n placeholders.push(placeholder(pgIndex));\n params.push(v === undefined ? null : v);\n }\n out.push(placeholders.join(', '));\n } else {\n out.push(placeholder(pgIndex));\n params.push(value === undefined ? null : value);\n }\n\n i = j;\n continue;\n }\n\n // default: copy char\n out.push(ch);\n i++;\n }\n\n return { sql: out.join(''), params };\n },\n };\n}\n\nexport const createMysqlBinder = () => createBinder('mysql');\nexport const createSqliteBinder = () => createBinder('sqlite');\nexport const createPostgresBinder = () => createBinder('postgres');\n\n// Re-export the shared helper for use in decorators\nexport { extractNamedParams };\n"]}
1
+ {"version":3,"file":"sqlBinder.js","sourceRoot":"","sources":["../../../src/binders/sqlBinder.ts"],"names":[],"mappings":"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","sourcesContent":["import { extractNamedParams } from '../core/sqlParams';\n\nexport type BindResult = {\n sql: string;\n params: unknown[];\n};\n\nexport interface SqlBinder {\n bind(sql: string, args: Record<string, unknown> | unknown[]): BindResult;\n}\n\ntype Dialect = 'mysql' | 'sqlite' | 'postgres';\n\nexport function createBinder(dialect: Dialect): SqlBinder {\n const placeholder = (indexRef: { i: number }) => {\n if (dialect === 'postgres') return `$${indexRef.i++}`;\n return '?'; // mysql + sqlite\n };\n\n return {\n bind(sql: string, args: Record<string, unknown> | unknown[]): BindResult {\n const isArrayArgs = Array.isArray(args);\n const params: unknown[] = [];\n const out: string[] = [];\n\n let i = 0;\n let inSQ = false; // single quote string\n let inDQ = false; // double quote identifier\n let inLC = false; // line comment -- ...\\n\n let inBC = false; // block comment /* ... */\n const pgIndex = { i: 1 };\n\n let sawNamed = false;\n let sawPositional = false;\n\n const len = sql.length;\n while (i < len) {\n const ch = sql[i];\n const next = i + 1 < len ? sql[i + 1] : '';\n\n // Handle exiting comments/strings first\n if (inLC) {\n out.push(ch);\n i++;\n if (ch === '\\n') inLC = false;\n continue;\n }\n if (inBC) {\n out.push(ch);\n i++;\n if (ch === '*' && next === '/') {\n out.push(next);\n i++;\n inBC = false;\n }\n continue;\n }\n if (inSQ) {\n out.push(ch);\n i++;\n // escape '' inside string\n if (ch === \"'\" && next === \"'\") {\n out.push(next);\n i++;\n } else if (ch === \"'\") {\n inSQ = false;\n }\n continue;\n }\n if (inDQ) {\n out.push(ch);\n i++;\n // escape \"\" inside identifier\n if (ch === '\"' && next === '\"') {\n out.push(next);\n i++;\n } else if (ch === '\"') {\n inDQ = false;\n }\n continue;\n }\n\n // Not inside string/comment\n if (ch === '-' && next === '-') {\n out.push(ch, next);\n i += 2;\n inLC = true;\n continue;\n }\n if (ch === '/' && next === '*') {\n out.push(ch, next);\n i += 2;\n inBC = true;\n continue;\n }\n if (ch === \"'\") {\n out.push(ch);\n i++;\n inSQ = true;\n continue;\n }\n if (ch === '\"') {\n out.push(ch);\n i++;\n inDQ = true;\n continue;\n }\n\n // Postgres cast :: — skip as literal\n if (ch === ':' && next === ':') {\n out.push('::');\n i += 2;\n continue;\n }\n\n if (ch === ':') {\n // Check for :update(...) syntax (case-insensitive)\n const updateMatch = /^:update\\s*\\(/i.exec(sql.slice(i));\n if (updateMatch) {\n if (isArrayArgs) {\n throw new Error(':update() syntax only works with named parameters');\n }\n \n // Parse the column list inside parentheses\n let j = i + updateMatch[0].length; // Skip ':update('\n const columnStart = j;\n let parenDepth = 1;\n let inString = false;\n let stringChar = '';\n \n // Find matching closing parenthesis\n while (j < len && parenDepth > 0) {\n const c = sql[j];\n const cNext = j + 1 < len ? sql[j + 1] : '';\n \n if (!inString) {\n if (c === \"'\" || c === '\"') {\n inString = true;\n stringChar = c;\n } else if (c === '(') {\n parenDepth++;\n } else if (c === ')') {\n parenDepth--;\n }\n } else {\n if (c === stringChar) {\n // Check for escaped quote\n if (cNext === stringChar) {\n j++; // Skip escaped quote\n } else {\n inString = false;\n }\n }\n }\n if (parenDepth > 0) j++;\n }\n \n if (parenDepth > 0) {\n throw new Error('Unclosed :update() parentheses');\n }\n \n // Extract column list (between the parentheses)\n const columnList = sql.slice(columnStart, j).trim();\n const updateEnd = j + 1; // Include closing ')'\n \n // Parse column list (split by comma, respecting quotes and parentheses)\n const items: string[] = [];\n let current = '';\n let inSQ = false; // single quote string\n let inDQ = false; // double quote identifier\n let itemParenDepth = 0;\n \n for (let k = 0; k < columnList.length; k++) {\n const ch = columnList[k];\n const next = k + 1 < columnList.length ? columnList[k + 1] : '';\n \n if (inSQ) {\n current += ch;\n if (ch === \"'\" && next === \"'\") {\n current += next;\n k++;\n } else if (ch === \"'\") {\n inSQ = false;\n }\n continue;\n }\n \n if (inDQ) {\n current += ch;\n if (ch === '\"' && next === '\"') {\n current += next;\n k++;\n } else if (ch === '\"') {\n inDQ = false;\n }\n continue;\n }\n \n if (ch === \"'\") {\n current += ch;\n inSQ = true;\n continue;\n }\n \n if (ch === '\"') {\n current += ch;\n inDQ = true;\n continue;\n }\n \n if (ch === '(') {\n current += ch;\n itemParenDepth++;\n continue;\n }\n \n if (ch === ')') {\n current += ch;\n itemParenDepth--;\n continue;\n }\n \n if (ch === ',' && itemParenDepth === 0) {\n const trimmed = current.trim();\n if (trimmed.length > 0) {\n items.push(trimmed);\n }\n current = '';\n continue;\n }\n \n current += ch;\n }\n \n // Add the last item\n const trimmed = current.trim();\n if (trimmed.length > 0) {\n items.push(trimmed);\n }\n \n if (items.length === 0) {\n throw new Error(':update() requires at least one column name');\n }\n \n // Build SET clause with literal expressions and parameterized columns\n const obj = args as Record<string, unknown>;\n const setParts: string[] = [];\n const updateParams: unknown[] = [];\n let hasParameterized = false;\n \n for (const item of items) {\n const trimmed = item.trim();\n \n // Check if this is a literal expression (contains = not inside quotes)\n let isLiteral = false;\n let eqIndex = -1;\n let inString = false;\n let stringChar = '';\n \n for (let k = 0; k < trimmed.length; k++) {\n const ch = trimmed[k];\n const next = k + 1 < trimmed.length ? trimmed[k + 1] : '';\n \n if (!inString && (ch === \"'\" || ch === '\"')) {\n inString = true;\n stringChar = ch;\n } else if (inString) {\n if (ch === stringChar) {\n if (next === stringChar) {\n k++; // Skip escaped quote\n } else {\n inString = false;\n }\n }\n } else if (ch === '=') {\n eqIndex = k;\n isLiteral = true;\n break;\n }\n }\n \n if (isLiteral && eqIndex >= 0) {\n // Literal SQL expression - include as-is\n setParts.push(trimmed);\n } else {\n // Parameterized column - check if defined in args\n hasParameterized = true;\n if (Object.prototype.hasOwnProperty.call(obj, trimmed) && obj[trimmed] !== undefined) {\n setParts.push(`${trimmed} = ${placeholder(pgIndex)}`);\n updateParams.push(obj[trimmed]);\n }\n }\n }\n \n // Only throw error if all parameterized columns are undefined (literals are always included)\n if (hasParameterized && setParts.length === 0) {\n throw new Error('All columns in :update() are undefined');\n }\n \n if (setParts.length === 0) {\n throw new Error(':update() requires at least one column name');\n }\n \n // Replace :update(...) with SET clause\n out.push('SET ', setParts.join(', '));\n params.push(...updateParams);\n \n i = updateEnd;\n continue;\n }\n \n // Check for :insert(...) syntax (case-insensitive)\n const insertMatch = /^:insert\\s*\\(/i.exec(sql.slice(i));\n if (insertMatch) {\n if (isArrayArgs) {\n throw new Error(':insert() syntax only works with named parameters');\n }\n \n // Parse the column list inside parentheses\n let j = i + insertMatch[0].length; // Skip ':insert('\n const columnStart = j;\n let parenDepth = 1;\n let inString = false;\n let stringChar = '';\n \n // Find matching closing parenthesis\n while (j < len && parenDepth > 0) {\n const c = sql[j];\n const cNext = j + 1 < len ? sql[j + 1] : '';\n \n if (!inString) {\n if (c === \"'\" || c === '\"') {\n inString = true;\n stringChar = c;\n } else if (c === '(') {\n parenDepth++;\n } else if (c === ')') {\n parenDepth--;\n }\n } else {\n if (c === stringChar) {\n // Check for escaped quote\n if (cNext === stringChar) {\n j++; // Skip escaped quote\n } else {\n inString = false;\n }\n }\n }\n if (parenDepth > 0) j++;\n }\n \n if (parenDepth > 0) {\n throw new Error('Unclosed :insert() parentheses');\n }\n \n // Extract column list (between the parentheses)\n const columnList = sql.slice(columnStart, j).trim();\n const insertEnd = j + 1; // Include closing ')'\n \n // Parse column list (split by comma, respecting quotes and parentheses)\n const items: string[] = [];\n let current = '';\n let inSQ = false; // single quote string\n let inDQ = false; // double quote identifier\n let itemParenDepth = 0;\n \n for (let k = 0; k < columnList.length; k++) {\n const ch = columnList[k];\n const next = k + 1 < columnList.length ? columnList[k + 1] : '';\n \n if (inSQ) {\n current += ch;\n if (ch === \"'\" && next === \"'\") {\n current += next;\n k++;\n } else if (ch === \"'\") {\n inSQ = false;\n }\n continue;\n }\n \n if (inDQ) {\n current += ch;\n if (ch === '\"' && next === '\"') {\n current += next;\n k++;\n } else if (ch === '\"') {\n inDQ = false;\n }\n continue;\n }\n \n if (ch === \"'\") {\n current += ch;\n inSQ = true;\n continue;\n }\n \n if (ch === '\"') {\n current += ch;\n inDQ = true;\n continue;\n }\n \n if (ch === '(') {\n current += ch;\n itemParenDepth++;\n continue;\n }\n \n if (ch === ')') {\n current += ch;\n itemParenDepth--;\n continue;\n }\n \n if (ch === ',' && itemParenDepth === 0) {\n const trimmed = current.trim();\n if (trimmed.length > 0) {\n items.push(trimmed);\n }\n current = '';\n continue;\n }\n \n current += ch;\n }\n \n // Add the last item\n const trimmed = current.trim();\n if (trimmed.length > 0) {\n items.push(trimmed);\n }\n \n if (items.length === 0) {\n throw new Error(':insert() requires at least one column name');\n }\n \n // Build column list and VALUES clause\n const obj = args as Record<string, unknown>;\n const columnNames: string[] = [];\n const valueParts: string[] = [];\n const insertParams: unknown[] = [];\n let hasParameterized = false;\n \n for (const item of items) {\n const trimmed = item.trim();\n \n // Check if this is a literal expression (contains = not inside quotes)\n let isLiteral = false;\n let eqIndex = -1;\n let inString = false;\n let stringChar = '';\n \n for (let k = 0; k < trimmed.length; k++) {\n const ch = trimmed[k];\n const next = k + 1 < trimmed.length ? trimmed[k + 1] : '';\n \n if (!inString && (ch === \"'\" || ch === '\"')) {\n inString = true;\n stringChar = ch;\n } else if (inString) {\n if (ch === stringChar) {\n if (next === stringChar) {\n k++; // Skip escaped quote\n } else {\n inString = false;\n }\n }\n } else if (ch === '=') {\n eqIndex = k;\n isLiteral = true;\n break;\n }\n }\n \n if (isLiteral && eqIndex >= 0) {\n // Literal SQL expression - extract column name and value\n const colName = trimmed.slice(0, eqIndex).trim();\n const literalValue = trimmed.slice(eqIndex + 1).trim();\n columnNames.push(colName);\n valueParts.push(literalValue);\n } else {\n // Parameterized column - check if defined in args\n hasParameterized = true;\n if (Object.prototype.hasOwnProperty.call(obj, trimmed) && obj[trimmed] !== undefined) {\n columnNames.push(trimmed);\n valueParts.push(placeholder(pgIndex));\n insertParams.push(obj[trimmed]);\n }\n }\n }\n \n // Only throw error if all parameterized columns are undefined (literals are always included)\n if (hasParameterized && columnNames.length === 0) {\n throw new Error('All columns in :insert() are undefined');\n }\n \n if (columnNames.length === 0) {\n throw new Error(':insert() requires at least one column name');\n }\n \n // Replace :insert(...) with column list and VALUES clause\n out.push('(', columnNames.join(', '), ') VALUES (', valueParts.join(', '), ')');\n params.push(...insertParams);\n \n i = insertEnd;\n continue;\n }\n \n // Check for :batch_insert(...) syntax (case-insensitive)\n const batchInsertMatch = /^:batch_insert\\s*\\(/i.exec(sql.slice(i));\n if (batchInsertMatch) {\n if (isArrayArgs) {\n throw new Error(':batch_insert() syntax only works with named parameters');\n }\n\n // Parse the argument list inside parentheses\n let j = i + batchInsertMatch[0].length; // Skip ':batch_insert('\n const argStart = j;\n let parenDepth = 1;\n let inString = false;\n let stringChar = '';\n\n // Find matching closing parenthesis\n while (j < len && parenDepth > 0) {\n const c = sql[j];\n const cNext = j + 1 < len ? sql[j + 1] : '';\n\n if (!inString) {\n if (c === \"'\" || c === '\"') {\n inString = true;\n stringChar = c;\n } else if (c === '(') {\n parenDepth++;\n } else if (c === ')') {\n parenDepth--;\n }\n } else {\n if (c === stringChar) {\n // Check for escaped quote\n if (cNext === stringChar) {\n j++; // Skip escaped quote\n } else {\n inString = false;\n }\n }\n }\n if (parenDepth > 0) j++;\n }\n\n if (parenDepth > 0) {\n throw new Error('Unclosed :batch_insert() parentheses');\n }\n\n // Extract argument list (between the parentheses)\n const argList = sql.slice(argStart, j).trim();\n const batchInsertEnd = j + 1; // Include closing ')'\n\n // Parse argument list (split by comma, respecting quotes and parentheses)\n const items: string[] = [];\n let current = '';\n let inSQ = false; // single quote string\n let inDQ = false; // double quote identifier\n let itemParenDepth = 0;\n\n for (let k = 0; k < argList.length; k++) {\n const ch2 = argList[k];\n const next2 = k + 1 < argList.length ? argList[k + 1] : '';\n\n if (inSQ) {\n current += ch2;\n if (ch2 === \"'\" && next2 === \"'\") {\n current += next2;\n k++;\n } else if (ch2 === \"'\") {\n inSQ = false;\n }\n continue;\n }\n\n if (inDQ) {\n current += ch2;\n if (ch2 === '\"' && next2 === '\"') {\n current += next2;\n k++;\n } else if (ch2 === '\"') {\n inDQ = false;\n }\n continue;\n }\n\n if (ch2 === \"'\") {\n current += ch2;\n inSQ = true;\n continue;\n }\n\n if (ch2 === '\"') {\n current += ch2;\n inDQ = true;\n continue;\n }\n\n if (ch2 === '(') {\n current += ch2;\n itemParenDepth++;\n continue;\n }\n\n if (ch2 === ')') {\n current += ch2;\n itemParenDepth--;\n continue;\n }\n\n if (ch2 === ',' && itemParenDepth === 0) {\n const trimmedItem = current.trim();\n if (trimmedItem.length > 0) {\n items.push(trimmedItem);\n }\n current = '';\n continue;\n }\n\n current += ch2;\n }\n\n // Add the last item\n const trimmedItem = current.trim();\n if (trimmedItem.length > 0) {\n items.push(trimmedItem);\n }\n\n if (items.length === 0) {\n throw new Error(':batch_insert() requires at least one argument');\n }\n\n const obj = args as Record<string, unknown>;\n\n type BatchArg = {\n path: string;\n isArray: boolean;\n values: unknown[];\n };\n\n const batchArgs: BatchArg[] = [];\n\n const resolvePath = (root: any, path: string): { isArray: boolean; values: unknown[] } => {\n const segments = path.split('.').map((s) => s.trim()).filter((s) => s.length > 0);\n if (segments.length === 0) {\n throw new Error(`Invalid path \"${path}\" in :batch_insert()`);\n }\n\n const nestedArrayError = () => {\n throw new Error('Nested arrays are not supported in :batch_insert()');\n };\n\n const descend = (value: any, idx: number): { isArray: boolean; values: unknown[] } => {\n if (idx >= segments.length) {\n if (Array.isArray(value)) {\n // At leaf: array-of-arrays is not allowed\n for (const v of value) {\n if (Array.isArray(v)) nestedArrayError();\n }\n return { isArray: true, values: value.slice() };\n }\n return { isArray: false, values: [value] };\n }\n\n const key = segments[idx]!;\n\n if (Array.isArray(value)) {\n // We are traversing through an array: map remaining path over each element\n const rowValues: unknown[] = [];\n for (const element of value) {\n const sub = descend(element, idx);\n if (sub.isArray) nestedArrayError();\n rowValues.push(sub.values[0]);\n }\n return { isArray: true, values: rowValues };\n }\n\n let nextVal: any;\n if (value && typeof value === 'object' && Object.prototype.hasOwnProperty.call(value, key)) {\n nextVal = (value as any)[key];\n } else {\n nextVal = undefined;\n }\n\n return descend(nextVal, idx + 1);\n };\n\n return descend(root, 0);\n };\n\n for (const item of items) {\n const path = item.trim();\n const firstSeg = path.split('.')[0]!;\n if (!Object.prototype.hasOwnProperty.call(obj, firstSeg)) {\n throw new Error(`Path \"${path}\" in :batch_insert() refers to a missing key`);\n }\n\n const { isArray, values } = resolvePath(obj, path);\n\n // Undefined is not allowed for any value\n for (const v of values) {\n if (v === undefined) {\n throw new Error(`Path \"${path}\" in :batch_insert() resolved to undefined`);\n }\n }\n\n batchArgs.push({ path, isArray, values });\n }\n\n const arrayArgs = batchArgs.filter((b) => b.isArray);\n if (arrayArgs.length === 0) {\n throw new Error(':batch_insert() requires at least one array argument');\n }\n\n const rowCount = arrayArgs[0]!.values.length;\n if (rowCount === 0) {\n throw new Error(':batch_insert() array arguments must not be empty');\n }\n\n for (const argInfo of arrayArgs) {\n if (argInfo.values.length !== rowCount) {\n throw new Error(':batch_insert() arrays must share the same length');\n }\n }\n\n // Build VALUES clause\n const valueTuples: string[] = [];\n for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n const placeholders: string[] = [];\n for (const argInfo of batchArgs) {\n const value = argInfo.isArray ? argInfo.values[rowIndex] : argInfo.values[0];\n placeholders.push(placeholder(pgIndex));\n params.push(value);\n }\n valueTuples.push(`(${placeholders.join(', ')})`);\n }\n\n out.push('VALUES ', valueTuples.join(', '));\n\n i = batchInsertEnd;\n continue;\n }\n \n // Check for :filter(...) syntax (case-insensitive)\n const filterMatch = /^:filter\\s*\\(/i.exec(sql.slice(i));\n if (filterMatch) {\n if (isArrayArgs) {\n throw new Error(':filter() syntax only works with named parameters');\n }\n \n // Parse the condition list inside parentheses\n let j = i + filterMatch[0].length; // Skip ':filter('\n const conditionStart = j;\n let parenDepth = 1;\n let inString = false;\n let stringChar = '';\n \n // Find matching closing parenthesis\n while (j < len && parenDepth > 0) {\n const c = sql[j];\n const cNext = j + 1 < len ? sql[j + 1] : '';\n \n if (!inString) {\n if (c === \"'\" || c === '\"') {\n inString = true;\n stringChar = c;\n } else if (c === '(') {\n parenDepth++;\n } else if (c === ')') {\n parenDepth--;\n }\n } else {\n if (c === stringChar) {\n // Check for escaped quote\n if (cNext === stringChar) {\n j++; // Skip escaped quote\n } else {\n inString = false;\n }\n }\n }\n if (parenDepth > 0) j++;\n }\n \n if (parenDepth > 0) {\n throw new Error('Unclosed :filter() parentheses');\n }\n \n // Extract condition list (between the parentheses)\n const conditionList = sql.slice(conditionStart, j).trim();\n const filterEnd = j + 1; // Include closing ')'\n \n // Parse condition list (split by comma, respecting quotes and parentheses)\n const items: string[] = [];\n let current = '';\n let inSQ = false; // single quote string\n let inDQ = false; // double quote identifier\n let itemParenDepth = 0;\n \n for (let k = 0; k < conditionList.length; k++) {\n const ch = conditionList[k];\n const next = k + 1 < conditionList.length ? conditionList[k + 1] : '';\n \n if (inSQ) {\n current += ch;\n if (ch === \"'\" && next === \"'\") {\n current += next;\n k++;\n } else if (ch === \"'\") {\n inSQ = false;\n }\n continue;\n }\n \n if (inDQ) {\n current += ch;\n if (ch === '\"' && next === '\"') {\n current += next;\n k++;\n } else if (ch === '\"') {\n inDQ = false;\n }\n continue;\n }\n \n if (ch === \"'\") {\n current += ch;\n inSQ = true;\n continue;\n }\n \n if (ch === '\"') {\n current += ch;\n inDQ = true;\n continue;\n }\n \n if (ch === '(') {\n current += ch;\n itemParenDepth++;\n continue;\n }\n \n if (ch === ')') {\n current += ch;\n itemParenDepth--;\n continue;\n }\n \n if (ch === ',' && itemParenDepth === 0) {\n const trimmed = current.trim();\n if (trimmed.length > 0) {\n items.push(trimmed);\n }\n current = '';\n continue;\n }\n \n current += ch;\n }\n \n // Add the last item\n const trimmed = current.trim();\n if (trimmed.length > 0) {\n items.push(trimmed);\n }\n \n if (items.length === 0) {\n throw new Error(':filter() requires at least one condition');\n }\n \n // Build WHERE/HAVING conditions\n const obj = args as Record<string, unknown>;\n const conditions: string[] = [];\n const filterParams: unknown[] = [];\n let hasParameterized = false;\n \n // Helper function to expand :or(:param) patterns\n const expandOr = (expr: string): { condition: string; params: unknown[] } => {\n // Find all :or(:param) patterns\n const orPattern = /:or\\s*\\(\\s*:(\\w+)\\s*\\)/gi;\n const matches: Array<{ fullMatch: string; paramName: string; index: number }> = [];\n let match;\n while ((match = orPattern.exec(expr)) !== null) {\n matches.push({\n fullMatch: match[0],\n paramName: match[1],\n index: match.index\n });\n }\n \n if (matches.length === 0) {\n return { condition: '', params: [] };\n }\n \n // Check if all parameters are defined\n let shouldInclude = true;\n const replacements: Array<{ index: number; length: number; replacement: string; params: unknown[] }> = [];\n \n for (const m of matches) {\n if (!Object.prototype.hasOwnProperty.call(obj, m.paramName) || obj[m.paramName] === undefined) {\n shouldInclude = false;\n break;\n }\n const arr = obj[m.paramName];\n if (!Array.isArray(arr) || arr.length === 0) {\n shouldInclude = false;\n break;\n }\n // Find the column expression for this :or() pattern\n // Look backwards from the match to find the column name and operator\n const beforeOr = expr.slice(0, m.index);\n const afterOr = expr.slice(m.index + m.fullMatch.length);\n \n // Try to match column name and operator pattern\n // Match patterns like \"col =\", \"col >\", \"col <=\", \"col LIKE\", etc.\n const beforeTrimmed = beforeOr.trim();\n const operatorMatch = beforeTrimmed.match(/(\\w+)\\s+([=<>!]+|>=|<=|!=|<>|LIKE|IN|BETWEEN|IS(?:\\s+NOT)?)\\s*$/i);\n if (operatorMatch) {\n const colName = operatorMatch[1];\n const operator = operatorMatch[2];\n const parts: string[] = [];\n const params: unknown[] = [];\n for (const val of arr) {\n if (val === undefined) continue;\n parts.push(`${colName} ${operator} ${placeholder(pgIndex)}`);\n params.push(val);\n }\n if (parts.length > 0) {\n // Replace the column/operator and :or() together\n // Find the operator text in the original expr by searching backwards\n const operatorText = operatorMatch[0];\n // Find the last occurrence of this pattern before m.index\n let operatorStart = -1;\n for (let pos = m.index - operatorText.length; pos >= 0; pos--) {\n if (expr.slice(pos, pos + operatorText.length) === operatorText) {\n operatorStart = pos;\n break;\n }\n }\n if (operatorStart === -1) {\n // Fallback: use m.index - operatorText.length\n operatorStart = Math.max(0, m.index - operatorText.length);\n }\n replacements.push({\n index: operatorStart,\n length: m.index + m.fullMatch.length - operatorStart,\n replacement: parts.join(' OR '),\n params\n });\n } else {\n shouldInclude = false;\n break;\n }\n } else {\n // Fallback: use the entire before/after context\n const parts: string[] = [];\n const params: unknown[] = [];\n for (const val of arr) {\n if (val === undefined) continue;\n parts.push(`${beforeTrimmed}${placeholder(pgIndex)}${afterOr.trim()}`);\n params.push(val);\n }\n if (parts.length > 0) {\n replacements.push({\n index: m.index,\n length: m.fullMatch.length,\n replacement: parts.join(' OR '),\n params\n });\n } else {\n shouldInclude = false;\n break;\n }\n }\n }\n \n if (!shouldInclude || replacements.length === 0) {\n return { condition: '', params: [] };\n }\n \n // Replace from end to start to preserve indices\n let resultExpr = expr;\n const allParams: unknown[] = [];\n for (const rep of replacements.reverse()) {\n const before = resultExpr.slice(0, rep.index);\n const after = resultExpr.slice(rep.index + rep.length);\n resultExpr = before + rep.replacement + after;\n allParams.unshift(...rep.params);\n }\n \n // Check if the original expression was already wrapped in parentheses\n const trimmedExpr = expr.trim();\n const alreadyWrapped = trimmedExpr.startsWith('(') && trimmedExpr.endsWith(')');\n const wrappedCondition = alreadyWrapped ? resultExpr : `(${resultExpr})`;\n \n return { condition: wrappedCondition, params: allParams };\n };\n \n for (const item of items) {\n const trimmed = item.trim();\n \n // Check for :or(:param) pattern first\n const orResult = expandOr(trimmed);\n if (orResult.condition) {\n conditions.push(orResult.condition);\n filterParams.push(...orResult.params);\n continue;\n }\n \n // Check if this is a simple column name (no operators, no :param)\n let hasOperator = false;\n let hasParam = false;\n let inString = false;\n let stringChar = '';\n \n for (let k = 0; k < trimmed.length; k++) {\n const ch = trimmed[k];\n const next = k + 1 < trimmed.length ? trimmed[k + 1] : '';\n \n if (!inString && (ch === \"'\" || ch === '\"')) {\n inString = true;\n stringChar = ch;\n } else if (inString) {\n if (ch === stringChar) {\n if (next === stringChar) {\n k++; // Skip escaped quote\n } else {\n inString = false;\n }\n }\n } else {\n // Check for operators (outside strings)\n if ((ch === '>' || ch === '<' || ch === '=' || ch === '!') ||\n (ch === 'L' && trimmed.slice(k, k + 4).toUpperCase() === 'LIKE') ||\n (ch === 'I' && trimmed.slice(k, k + 2).toUpperCase() === 'IN') ||\n (ch === 'B' && trimmed.slice(k, k + 7).toUpperCase() === 'BETWEEN') ||\n (ch === 'I' && trimmed.slice(k, k + 2).toUpperCase() === 'IS')) {\n hasOperator = true;\n }\n // Check for :param pattern\n if (ch === ':' && next && /[a-zA-Z_]/.test(next)) {\n hasParam = true;\n }\n }\n }\n \n if (!hasOperator && !hasParam) {\n // Simple column name → equality\n hasParameterized = true;\n if (Object.prototype.hasOwnProperty.call(obj, trimmed) && obj[trimmed] !== undefined) {\n conditions.push(`${trimmed} = ${placeholder(pgIndex)}`);\n filterParams.push(obj[trimmed]);\n }\n } else if (hasParam) {\n // Parameterized expression → extract and bind parameters\n hasParameterized = true;\n // Extract all :param patterns and check if they're defined\n let shouldInclude = true;\n const paramMatches: Array<{ name: string; index: number }> = [];\n let searchStart = 0;\n while (true) {\n const paramMatch = /:([a-zA-Z_][a-zA-Z0-9_]*)/g.exec(trimmed.slice(searchStart));\n if (!paramMatch) break;\n const paramName = paramMatch[1];\n const fullIndex = searchStart + paramMatch.index;\n paramMatches.push({ name: paramName, index: fullIndex });\n if (!Object.prototype.hasOwnProperty.call(obj, paramName) || obj[paramName] === undefined) {\n shouldInclude = false;\n break;\n }\n searchStart = fullIndex + paramMatch[0].length;\n }\n \n if (shouldInclude && paramMatches.length > 0) {\n // Replace :param with placeholders (from end to start to preserve indices)\n let conditionExpr = trimmed;\n const orderedParams: unknown[] = [];\n for (const pm of paramMatches.reverse()) {\n const paramValue = obj[pm.name];\n const before = conditionExpr.slice(0, pm.index);\n const after = conditionExpr.slice(pm.index + pm.name.length + 1);\n \n // Check if this is an array parameter (for IN clauses)\n if (Array.isArray(paramValue)) {\n if (paramValue.length === 0) {\n shouldInclude = false;\n break;\n }\n // Expand array: replace :ids with ?, ?, ?\n const placeholders = paramValue.map(() => placeholder(pgIndex)).join(', ');\n conditionExpr = before + placeholders + after;\n orderedParams.unshift(...paramValue);\n } else {\n conditionExpr = before + placeholder(pgIndex) + after;\n orderedParams.unshift(paramValue);\n }\n }\n if (shouldInclude) {\n // Add params in original order\n const finalParams: unknown[] = [];\n for (const pm of paramMatches.reverse()) {\n const paramValue = obj[pm.name];\n if (Array.isArray(paramValue)) {\n finalParams.push(...paramValue);\n } else {\n finalParams.push(paramValue);\n }\n }\n conditions.push(conditionExpr);\n filterParams.push(...finalParams);\n }\n }\n } else {\n // Literal expression → include as-is\n conditions.push(trimmed);\n }\n }\n \n // Only throw error if all parameterized conditions are undefined (literals are always included)\n if (hasParameterized && conditions.length === 0) {\n throw new Error('All conditions in :filter() are undefined');\n }\n \n if (conditions.length === 0) {\n throw new Error(':filter() requires at least one condition');\n }\n \n // Replace :filter(...) with conditions joined by AND\n out.push(conditions.join(' AND '));\n params.push(...filterParams);\n \n i = filterEnd;\n continue;\n }\n \n // Attempt to parse a parameter token\n let j = i + 1;\n const start = j;\n while (j < len) {\n const c = sql[j];\n if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c === '_') {\n j++;\n } else {\n break;\n }\n }\n const name = sql.slice(start, j);\n if (!name) {\n // not a parameter — keep literal ':'\n out.push(':');\n i++;\n continue;\n }\n\n // Decide positional vs named\n const m = /^arg([1-9][0-9]*)$/.exec(name);\n const isPos = !!m;\n if (isPos) sawPositional = true; else sawNamed = true;\n if (sawNamed && sawPositional) {\n throw new Error('Cannot mix named and positional parameters in a single query');\n }\n\n let value: unknown;\n if (isPos) {\n if (!isArrayArgs) throw new Error('Positional placeholders require array arguments');\n const index = parseInt(m![1], 10) - 1; // 1-based in SQL\n const arr = args as unknown[];\n if (index < 0 || index >= arr.length) throw new Error(`Missing positional argument :${name}`);\n value = arr[index];\n } else {\n if (isArrayArgs) throw new Error('Named placeholders require a parameter object');\n const obj = args as Record<string, unknown>;\n if (!Object.prototype.hasOwnProperty.call(obj, name)) {\n throw new Error(`Missing named parameter :${name}`);\n }\n value = obj[name];\n }\n\n if (value === undefined) {\n throw new Error(`Parameter :${name} is undefined`);\n }\n\n // Expand placeholder(s)\n if (Array.isArray(value)) {\n if (value.length === 0) throw new Error(`Array parameter :${name} must not be empty`);\n const placeholders: string[] = [];\n for (const v of value) {\n if (v === undefined) throw new Error(`Array parameter :${name} contains undefined`);\n placeholders.push(placeholder(pgIndex));\n params.push(v === undefined ? null : v);\n }\n out.push(placeholders.join(', '));\n } else {\n out.push(placeholder(pgIndex));\n params.push(value === undefined ? null : value);\n }\n\n i = j;\n continue;\n }\n\n // default: copy char\n out.push(ch);\n i++;\n }\n\n return { sql: out.join(''), params };\n },\n };\n}\n\nexport const createMysqlBinder = () => createBinder('mysql');\nexport const createSqliteBinder = () => createBinder('sqlite');\nexport const createPostgresBinder = () => createBinder('postgres');\n\n// Re-export the shared helper for use in decorators\nexport { extractNamedParams };\n"]}
@@ -1,3 +1,72 @@
1
+ function isPromiseLike(value) {
2
+ return !!value && typeof value.then === 'function';
3
+ }
4
+ async function prepareStatement(db, sql) {
5
+ const stmt = db.prepare(sql);
6
+ return isPromiseLike(stmt) ? await stmt : stmt;
7
+ }
8
+ async function finalizeStatement(stmt) {
9
+ if (!stmt || typeof stmt.finalize !== 'function')
10
+ return;
11
+ const result = stmt.finalize();
12
+ if (isPromiseLike(result)) {
13
+ await result;
14
+ }
15
+ }
16
+ async function statementAll(stmt, params) {
17
+ if (typeof stmt.all !== 'function') {
18
+ throw new Error('SQLite statement missing all()');
19
+ }
20
+ if (stmt.all.length >= 2) {
21
+ return await new Promise((resolve, reject) => {
22
+ const callback = (err, rows) => {
23
+ if (err)
24
+ return reject(err);
25
+ resolve(rows || []);
26
+ };
27
+ try {
28
+ if (params.length > 0) {
29
+ stmt.all(params, callback);
30
+ }
31
+ else {
32
+ stmt.all(callback);
33
+ }
34
+ }
35
+ catch (error) {
36
+ reject(error);
37
+ }
38
+ });
39
+ }
40
+ const result = stmt.all(...params);
41
+ return isPromiseLike(result) ? await result : result;
42
+ }
43
+ async function statementRun(stmt, params) {
44
+ if (typeof stmt.run !== 'function') {
45
+ throw new Error('SQLite statement missing run()');
46
+ }
47
+ if (stmt.run.length >= 2) {
48
+ return await new Promise((resolve, reject) => {
49
+ const callback = function (err) {
50
+ if (err)
51
+ return reject(err);
52
+ resolve({ changes: this?.changes ?? 0, lastInsertId: this?.lastID });
53
+ };
54
+ try {
55
+ if (params.length > 0) {
56
+ stmt.run(params, callback);
57
+ }
58
+ else {
59
+ stmt.run(callback);
60
+ }
61
+ }
62
+ catch (error) {
63
+ reject(error);
64
+ }
65
+ });
66
+ }
67
+ const result = stmt.run(...params);
68
+ return isPromiseLike(result) ? await result : result;
69
+ }
1
70
  function stripLeadingComments(sql) {
2
71
  let i = 0;
3
72
  const n = sql.length;
@@ -35,17 +104,32 @@ export async function createSqliteDb(filenameOrDb) {
35
104
  return {
36
105
  dialect: 'sqlite',
37
106
  async query(sql, params) {
38
- const stmt = db.prepare(sql);
39
- const text = stripLeadingComments(String(sql)).trimStart().toUpperCase();
40
- if (text.startsWith('SELECT') || text.startsWith('WITH')) {
41
- return stmt.all(...params);
107
+ const stmt = await prepareStatement(db, sql);
108
+ try {
109
+ const text = stripLeadingComments(String(sql)).trimStart().toUpperCase();
110
+ if (text.startsWith('SELECT') || text.startsWith('WITH')) {
111
+ const rows = await statementAll(stmt, params);
112
+ return rows;
113
+ }
114
+ const info = await statementRun(stmt, params);
115
+ const rowsAffected = Number(info?.changes ?? info?.rowsAffected ?? 0);
116
+ const lastInsertId = info?.lastInsertRowid ?? info?.lastID ?? info?.lastInsertId;
117
+ return { rowsAffected, lastInsertId };
118
+ }
119
+ finally {
120
+ await finalizeStatement(stmt);
42
121
  }
43
- const info = stmt.run(...params);
44
- return { rowsAffected: Number(info?.changes ?? 0), lastInsertId: info?.lastInsertRowid };
45
122
  },
46
123
  conn: db,
47
124
  // Do not close externally provided connection
48
- close() { },
125
+ async close() {
126
+ if (typeof db.close === 'function') {
127
+ const res = db.close();
128
+ if (isPromiseLike(res)) {
129
+ await res;
130
+ }
131
+ }
132
+ },
49
133
  };
50
134
  }
51
135
  // sqlite3 shape
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../src/adapters/sqlite.ts"],"names":[],"mappings":"AAEA,SAAS,oBAAoB,CAAC,GAAW;IACvC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IACrB,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM;QAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;IAC/C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC;YAAE,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACtD,kBAAkB;YAClB,CAAC,IAAI,CAAC,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI;gBAAE,CAAC,EAAE,CAAC;YACrC,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACtD,sBAAsB;YACtB,CAAC,IAAI,CAAC,CAAC;YACP,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACjC,IAAI,GAAG,KAAK,CAAC,CAAC;gBAAE,OAAO,EAAE,CAAC;YAC1B,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;YACZ,SAAS;QACX,CAAC;QACD,MAAM;IACR,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,YAA0B;IAC7D,0CAA0C;IAC1C,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,EAAE,CAAC;QACrD,MAAM,EAAE,GAAG,YAAY,CAAC;QAExB,uBAAuB;QACvB,IAAI,OAAO,EAAE,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YACrC,OAAO;gBACL,OAAO,EAAE,QAAQ;gBACjB,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,MAAiB;oBACxC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAC7B,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,CAAC;oBACzE,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;wBACzD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;oBAC7B,CAAC;oBACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;oBACjC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;gBAC3F,CAAC;gBACD,IAAI,EAAE,EAAE;gBACR,8CAA8C;gBAC9C,KAAK,KAAI,CAAC;aACC,CAAC;QAChB,CAAC;QAED,gBAAgB;QAChB,OAAO;YACL,OAAO,EAAE,QAAQ;YACjB,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,MAAiB;gBACxC,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,CAAC;gBACzE,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBACzD,OAAO,IAAI,OAAO,CAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;wBAC5C,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,GAAiB,EAAE,IAAW,EAAE,EAAE;4BACrD,IAAI,GAAG;gCAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;4BAC5B,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;wBACtB,CAAC,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBACrC,sDAAsD;oBACtD,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,UAAqB,GAAiB;wBACxD,IAAI,GAAG;4BAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;wBAC5B,OAAO,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;oBACpF,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC;YACD,IAAI,EAAE,EAAE;YACR,8CAA8C;YAC9C,KAAK,KAAI,CAAC;SACC,CAAC;IAChB,CAAC;IAED,MAAM,QAAQ,GAAG,YAAsB,CAAC;IAExC,IAAI,aAAkB,CAAC;IACvB,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,+CAA+C;YAC/C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAC3C,aAAa,GAAI,GAAW,CAAC,OAAO,IAAI,GAAG,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;IACH,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,EAAE,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC;QACvC,OAAO;YACL,OAAO,EAAE,QAAQ;YACjB,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,MAAiB;gBACxC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC7B,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,CAAC;gBACzE,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBACzD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;gBAC7B,CAAC;gBACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;gBACjC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;YAC3F,CAAC;YACD,IAAI,EAAE,EAAE;YACR,KAAK;gBACH,EAAE,CAAC,KAAK,EAAE,CAAC;YACb,CAAC;SACU,CAAC;IAChB,CAAC;IAED,IAAI,OAAY,CAAC;IACjB,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,+CAA+C;YAC/C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;YACpC,OAAO,GAAI,GAAW,CAAC,OAAO,IAAI,GAAG,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC1C,OAAO;YACL,OAAO,EAAE,QAAQ;YACjB,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,MAAiB;gBACxC,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,CAAC;gBACzE,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBACzD,OAAO,IAAI,OAAO,CAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;wBAC5C,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,GAAiB,EAAE,IAAW,EAAE,EAAE;4BACrD,IAAI,GAAG;gCAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;4BAC5B,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;wBACtB,CAAC,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,wBAAwB;gBACxB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBACrC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,UAAqB,GAAiB;wBACxD,IAAI,GAAG;4BAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;wBAC5B,OAAO,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;oBACpF,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC;YACD,IAAI,EAAE,EAAE;YACR,KAAK;gBACH,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBAC3C,EAAE,CAAC,KAAK,CAAC,CAAC,GAAiB,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACnE,CAAC,CAAC,CAAC;YACL,CAAC;SACU,CAAC;IAChB,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;AAC3F,CAAC","sourcesContent":["import type { Database } from '../registry';\n\nfunction stripLeadingComments(sql: string): string {\n let i = 0;\n const n = sql.length;\n if (sql.charCodeAt(0) === 0xfeff) i = 1; // BOM\n while (i < n) {\n while (i < n && /\\s/.test(sql[i]!)) i++;\n if (i + 1 < n && sql[i] === '-' && sql[i + 1] === '-') {\n // -- line comment\n i += 2;\n while (i < n && sql[i] !== '\\n') i++;\n continue;\n }\n if (i + 1 < n && sql[i] === '/' && sql[i + 1] === '*') {\n // /* block comment */\n i += 2;\n const end = sql.indexOf('*/', i);\n if (end === -1) return '';\n i = end + 2;\n continue;\n }\n break;\n }\n return sql.slice(i);\n}\n\nexport async function createSqliteDb(filenameOrDb: string | any): Promise<Database> {\n // If a pre-created connection is provided\n if (typeof filenameOrDb !== 'string' && filenameOrDb) {\n const db = filenameOrDb;\n\n // better-sqlite3 shape\n if (typeof db.prepare === 'function') {\n return {\n dialect: 'sqlite',\n async query(sql: string, params: unknown[]) {\n const stmt = db.prepare(sql);\n const text = stripLeadingComments(String(sql)).trimStart().toUpperCase();\n if (text.startsWith('SELECT') || text.startsWith('WITH')) {\n return stmt.all(...params);\n }\n const info = stmt.run(...params);\n return { rowsAffected: Number(info?.changes ?? 0), lastInsertId: info?.lastInsertRowid };\n },\n conn: db,\n // Do not close externally provided connection\n close() {},\n } as Database;\n }\n\n // sqlite3 shape\n return {\n dialect: 'sqlite',\n async query(sql: string, params: unknown[]) {\n const text = stripLeadingComments(String(sql)).trimStart().toUpperCase();\n if (text.startsWith('SELECT') || text.startsWith('WITH')) {\n return new Promise<any[]>((resolve, reject) => {\n db.all(sql, params, (err: Error | null, rows: any[]) => {\n if (err) return reject(err);\n resolve(rows || []);\n });\n });\n }\n return new Promise((resolve, reject) => {\n // Use function callback to access `this` for metadata\n db.run(sql, params, function (this: any, err: Error | null) {\n if (err) return reject(err);\n resolve({ rowsAffected: Number(this?.changes ?? 0), lastInsertId: this?.lastID });\n });\n });\n },\n conn: db,\n // Do not close externally provided connection\n close() {},\n } as Database;\n }\n\n const filename = filenameOrDb as string;\n\n let BetterSqlite3: any;\n if (typeof require === 'function') {\n try {\n BetterSqlite3 = require('better-sqlite3');\n } catch {\n BetterSqlite3 = null;\n }\n } else {\n try {\n // @ts-ignore optional dependency without types\n const mod = await import('better-sqlite3');\n BetterSqlite3 = (mod as any).default ?? mod;\n } catch {\n BetterSqlite3 = null;\n }\n }\n\n if (BetterSqlite3) {\n const db = new BetterSqlite3(filename);\n return {\n dialect: 'sqlite',\n async query(sql: string, params: unknown[]) {\n const stmt = db.prepare(sql);\n const text = stripLeadingComments(String(sql)).trimStart().toUpperCase();\n if (text.startsWith('SELECT') || text.startsWith('WITH')) {\n return stmt.all(...params);\n }\n const info = stmt.run(...params);\n return { rowsAffected: Number(info?.changes ?? 0), lastInsertId: info?.lastInsertRowid };\n },\n conn: db,\n close() {\n db.close();\n },\n } as Database;\n }\n\n let sqlite3: any;\n if (typeof require === 'function') {\n try {\n sqlite3 = require('sqlite3');\n } catch {\n sqlite3 = null;\n }\n } else {\n try {\n // @ts-ignore optional dependency without types\n const mod = await import('sqlite3');\n sqlite3 = (mod as any).default ?? mod;\n } catch {\n sqlite3 = null;\n }\n }\n\n if (sqlite3) {\n const db = new sqlite3.Database(filename);\n return {\n dialect: 'sqlite',\n async query(sql: string, params: unknown[]) {\n const text = stripLeadingComments(String(sql)).trimStart().toUpperCase();\n if (text.startsWith('SELECT') || text.startsWith('WITH')) {\n return new Promise<any[]>((resolve, reject) => {\n db.all(sql, params, (err: Error | null, rows: any[]) => {\n if (err) return reject(err);\n resolve(rows || []);\n });\n });\n }\n // Non-SELECT statements\n return new Promise((resolve, reject) => {\n db.run(sql, params, function (this: any, err: Error | null) {\n if (err) return reject(err);\n resolve({ rowsAffected: Number(this?.changes ?? 0), lastInsertId: this?.lastID });\n });\n });\n },\n conn: db,\n close() {\n return new Promise<void>((resolve, reject) => {\n db.close((err: Error | null) => (err ? reject(err) : resolve()));\n });\n },\n } as Database;\n }\n\n throw new Error('No SQLite driver available. Install either better-sqlite3 or sqlite3.');\n}\n"]}
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../src/adapters/sqlite.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Database } from '../registry';\n\nfunction isPromiseLike<T>(value: unknown): value is Promise<T> {\n return !!value && typeof (value as Promise<T>).then === 'function';\n}\n\nasync function prepareStatement(db: any, sql: string) {\n const stmt = db.prepare(sql);\n return isPromiseLike(stmt) ? await stmt : stmt;\n}\n\nasync function finalizeStatement(stmt: any) {\n if (!stmt || typeof stmt.finalize !== 'function') return;\n const result = stmt.finalize();\n if (isPromiseLike(result)) {\n await result;\n }\n}\n\nasync function statementAll(stmt: any, params: unknown[]) {\n if (typeof stmt.all !== 'function') {\n throw new Error('SQLite statement missing all()');\n }\n if (stmt.all.length >= 2) {\n return await new Promise((resolve, reject) => {\n const callback = (err: Error | null, rows: any[]) => {\n if (err) return reject(err);\n resolve(rows || []);\n };\n try {\n if (params.length > 0) {\n stmt.all(params, callback);\n } else {\n stmt.all(callback);\n }\n } catch (error) {\n reject(error);\n }\n });\n }\n const result = stmt.all(...(params as any[]));\n return isPromiseLike(result) ? await result : result;\n}\n\nasync function statementRun(stmt: any, params: unknown[]) {\n if (typeof stmt.run !== 'function') {\n throw new Error('SQLite statement missing run()');\n }\n if (stmt.run.length >= 2) {\n return await new Promise((resolve, reject) => {\n const callback = function (this: any, err: Error | null) {\n if (err) return reject(err);\n resolve({ changes: this?.changes ?? 0, lastInsertId: this?.lastID });\n };\n try {\n if (params.length > 0) {\n stmt.run(params, callback);\n } else {\n stmt.run(callback);\n }\n } catch (error) {\n reject(error);\n }\n });\n }\n const result = stmt.run(...(params as any[]));\n return isPromiseLike(result) ? await result : result;\n}\n\nfunction stripLeadingComments(sql: string): string {\n let i = 0;\n const n = sql.length;\n if (sql.charCodeAt(0) === 0xfeff) i = 1; // BOM\n while (i < n) {\n while (i < n && /\\s/.test(sql[i]!)) i++;\n if (i + 1 < n && sql[i] === '-' && sql[i + 1] === '-') {\n // -- line comment\n i += 2;\n while (i < n && sql[i] !== '\\n') i++;\n continue;\n }\n if (i + 1 < n && sql[i] === '/' && sql[i + 1] === '*') {\n // /* block comment */\n i += 2;\n const end = sql.indexOf('*/', i);\n if (end === -1) return '';\n i = end + 2;\n continue;\n }\n break;\n }\n return sql.slice(i);\n}\n\nexport async function createSqliteDb(filenameOrDb: string | any): Promise<Database> {\n // If a pre-created connection is provided\n if (typeof filenameOrDb !== 'string' && filenameOrDb) {\n const db = filenameOrDb;\n\n // better-sqlite3 shape\n if (typeof db.prepare === 'function') {\n return {\n dialect: 'sqlite',\n async query(sql: string, params: unknown[]) {\n const stmt = await prepareStatement(db, sql);\n try {\n const text = stripLeadingComments(String(sql)).trimStart().toUpperCase();\n if (text.startsWith('SELECT') || text.startsWith('WITH')) {\n const rows = await statementAll(stmt, params);\n return rows;\n }\n const info = await statementRun(stmt, params);\n const rowsAffected = Number(info?.changes ?? info?.rowsAffected ?? 0);\n const lastInsertId = info?.lastInsertRowid ?? info?.lastID ?? info?.lastInsertId;\n return { rowsAffected, lastInsertId };\n } finally {\n await finalizeStatement(stmt);\n }\n },\n conn: db,\n // Do not close externally provided connection\n async close() {\n if (typeof db.close === 'function') {\n const res = db.close();\n if (isPromiseLike(res)) {\n await res;\n }\n }\n },\n } as Database;\n }\n\n // sqlite3 shape\n return {\n dialect: 'sqlite',\n async query(sql: string, params: unknown[]) {\n const text = stripLeadingComments(String(sql)).trimStart().toUpperCase();\n if (text.startsWith('SELECT') || text.startsWith('WITH')) {\n return new Promise<any[]>((resolve, reject) => {\n db.all(sql, params, (err: Error | null, rows: any[]) => {\n if (err) return reject(err);\n resolve(rows || []);\n });\n });\n }\n return new Promise((resolve, reject) => {\n // Use function callback to access `this` for metadata\n db.run(sql, params, function (this: any, err: Error | null) {\n if (err) return reject(err);\n resolve({ rowsAffected: Number(this?.changes ?? 0), lastInsertId: this?.lastID });\n });\n });\n },\n conn: db,\n // Do not close externally provided connection\n close() {},\n } as Database;\n }\n\n const filename = filenameOrDb as string;\n\n let BetterSqlite3: any;\n if (typeof require === 'function') {\n try {\n BetterSqlite3 = require('better-sqlite3');\n } catch {\n BetterSqlite3 = null;\n }\n } else {\n try {\n // @ts-ignore optional dependency without types\n const mod = await import('better-sqlite3');\n BetterSqlite3 = (mod as any).default ?? mod;\n } catch {\n BetterSqlite3 = null;\n }\n }\n\n if (BetterSqlite3) {\n const db = new BetterSqlite3(filename);\n return {\n dialect: 'sqlite',\n async query(sql: string, params: unknown[]) {\n const stmt = db.prepare(sql);\n const text = stripLeadingComments(String(sql)).trimStart().toUpperCase();\n if (text.startsWith('SELECT') || text.startsWith('WITH')) {\n return stmt.all(...params);\n }\n const info = stmt.run(...params);\n return { rowsAffected: Number(info?.changes ?? 0), lastInsertId: info?.lastInsertRowid };\n },\n conn: db,\n close() {\n db.close();\n },\n } as Database;\n }\n\n let sqlite3: any;\n if (typeof require === 'function') {\n try {\n sqlite3 = require('sqlite3');\n } catch {\n sqlite3 = null;\n }\n } else {\n try {\n // @ts-ignore optional dependency without types\n const mod = await import('sqlite3');\n sqlite3 = (mod as any).default ?? mod;\n } catch {\n sqlite3 = null;\n }\n }\n\n if (sqlite3) {\n const db = new sqlite3.Database(filename);\n return {\n dialect: 'sqlite',\n async query(sql: string, params: unknown[]) {\n const text = stripLeadingComments(String(sql)).trimStart().toUpperCase();\n if (text.startsWith('SELECT') || text.startsWith('WITH')) {\n return new Promise<any[]>((resolve, reject) => {\n db.all(sql, params, (err: Error | null, rows: any[]) => {\n if (err) return reject(err);\n resolve(rows || []);\n });\n });\n }\n // Non-SELECT statements\n return new Promise((resolve, reject) => {\n db.run(sql, params, function (this: any, err: Error | null) {\n if (err) return reject(err);\n resolve({ rowsAffected: Number(this?.changes ?? 0), lastInsertId: this?.lastID });\n });\n });\n },\n conn: db,\n close() {\n return new Promise<void>((resolve, reject) => {\n db.close((err: Error | null) => (err ? reject(err) : resolve()));\n });\n },\n } as Database;\n }\n\n throw new Error('No SQLite driver available. Install either better-sqlite3 or sqlite3.');\n}\n"]}