speexjs 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/better-sqlite3/lib/util.js","../../../node_modules/better-sqlite3/lib/sqlite-error.js","../../../node_modules/file-uri-to-path/index.js","../../../node_modules/bindings/bindings.js","../../../node_modules/better-sqlite3/lib/methods/wrappers.js","../../../node_modules/better-sqlite3/lib/methods/transaction.js","../../../node_modules/better-sqlite3/lib/methods/pragma.js","../../../node_modules/better-sqlite3/lib/methods/backup.js","../../../node_modules/better-sqlite3/lib/methods/serialize.js","../../../node_modules/better-sqlite3/lib/methods/function.js","../../../node_modules/better-sqlite3/lib/methods/aggregate.js","../../../node_modules/better-sqlite3/lib/methods/table.js","../../../node_modules/better-sqlite3/lib/methods/inspect.js","../../../node_modules/better-sqlite3/lib/database.js","../../../node_modules/better-sqlite3/lib/index.js","../../../src/server/database/connection.ts","../../../src/server/database/dialect.ts","../../../src/server/database/driver.ts","../../../src/server/database/query.ts","../../../src/server/database/migration.ts","../../../src/server/database/pagination.ts","../../../src/server/database/seeder.ts","../../../src/server/database/model.ts"],"sourcesContent":["'use strict';\n\nexports.getBooleanOption = (options, key) => {\n\tlet value = false;\n\tif (key in options && typeof (value = options[key]) !== 'boolean') {\n\t\tthrow new TypeError(`Expected the \"${key}\" option to be a boolean`);\n\t}\n\treturn value;\n};\n\nexports.cppdb = Symbol();\nexports.inspect = Symbol.for('nodejs.util.inspect.custom');\n","'use strict';\nconst descriptor = { value: 'SqliteError', writable: true, enumerable: false, configurable: true };\n\nfunction SqliteError(message, code) {\n\tif (new.target !== SqliteError) {\n\t\treturn new SqliteError(message, code);\n\t}\n\tif (typeof code !== 'string') {\n\t\tthrow new TypeError('Expected second argument to be a string');\n\t}\n\tError.call(this, message);\n\tdescriptor.value = '' + message;\n\tObject.defineProperty(this, 'message', descriptor);\n\tError.captureStackTrace(this, SqliteError);\n\tthis.code = code;\n}\nObject.setPrototypeOf(SqliteError, Error);\nObject.setPrototypeOf(SqliteError.prototype, Error.prototype);\nObject.defineProperty(SqliteError.prototype, 'name', descriptor);\nmodule.exports = SqliteError;\n","\n/**\n * Module dependencies.\n */\n\nvar sep = require('path').sep || '/';\n\n/**\n * Module exports.\n */\n\nmodule.exports = fileUriToPath;\n\n/**\n * File URI to Path function.\n *\n * @param {String} uri\n * @return {String} path\n * @api public\n */\n\nfunction fileUriToPath (uri) {\n if ('string' != typeof uri ||\n uri.length <= 7 ||\n 'file://' != uri.substring(0, 7)) {\n throw new TypeError('must pass in a file:// URI to convert to a file path');\n }\n\n var rest = decodeURI(uri.substring(7));\n var firstSlash = rest.indexOf('/');\n var host = rest.substring(0, firstSlash);\n var path = rest.substring(firstSlash + 1);\n\n // 2. Scheme Definition\n // As a special case, <host> can be the string \"localhost\" or the empty\n // string; this is interpreted as \"the machine from which the URL is\n // being interpreted\".\n if ('localhost' == host) host = '';\n\n if (host) {\n host = sep + sep + host;\n }\n\n // 3.2 Drives, drive letters, mount points, file system root\n // Drive letters are mapped into the top of a file URI in various ways,\n // depending on the implementation; some applications substitute\n // vertical bar (\"|\") for the colon after the drive letter, yielding\n // \"file:///c|/tmp/test.txt\". In some cases, the colon is left\n // unchanged, as in \"file:///c:/tmp/test.txt\". In other cases, the\n // colon is simply omitted, as in \"file:///c/tmp/test.txt\".\n path = path.replace(/^(.+)\\|/, '$1:');\n\n // for Windows, we need to invert the path separators from what a URI uses\n if (sep == '\\\\') {\n path = path.replace(/\\//g, '\\\\');\n }\n\n if (/^.+\\:/.test(path)) {\n // has Windows drive at beginning of path\n } else {\n // unix path…\n path = sep + path;\n }\n\n return host + path;\n}\n","/**\n * Module dependencies.\n */\n\nvar fs = require('fs'),\n path = require('path'),\n fileURLToPath = require('file-uri-to-path'),\n join = path.join,\n dirname = path.dirname,\n exists =\n (fs.accessSync &&\n function(path) {\n try {\n fs.accessSync(path);\n } catch (e) {\n return false;\n }\n return true;\n }) ||\n fs.existsSync ||\n path.existsSync,\n defaults = {\n arrow: process.env.NODE_BINDINGS_ARROW || ' → ',\n compiled: process.env.NODE_BINDINGS_COMPILED_DIR || 'compiled',\n platform: process.platform,\n arch: process.arch,\n nodePreGyp:\n 'node-v' +\n process.versions.modules +\n '-' +\n process.platform +\n '-' +\n process.arch,\n version: process.versions.node,\n bindings: 'bindings.node',\n try: [\n // node-gyp's linked version in the \"build\" dir\n ['module_root', 'build', 'bindings'],\n // node-waf and gyp_addon (a.k.a node-gyp)\n ['module_root', 'build', 'Debug', 'bindings'],\n ['module_root', 'build', 'Release', 'bindings'],\n // Debug files, for development (legacy behavior, remove for node v0.9)\n ['module_root', 'out', 'Debug', 'bindings'],\n ['module_root', 'Debug', 'bindings'],\n // Release files, but manually compiled (legacy behavior, remove for node v0.9)\n ['module_root', 'out', 'Release', 'bindings'],\n ['module_root', 'Release', 'bindings'],\n // Legacy from node-waf, node <= 0.4.x\n ['module_root', 'build', 'default', 'bindings'],\n // Production \"Release\" buildtype binary (meh...)\n ['module_root', 'compiled', 'version', 'platform', 'arch', 'bindings'],\n // node-qbs builds\n ['module_root', 'addon-build', 'release', 'install-root', 'bindings'],\n ['module_root', 'addon-build', 'debug', 'install-root', 'bindings'],\n ['module_root', 'addon-build', 'default', 'install-root', 'bindings'],\n // node-pre-gyp path ./lib/binding/{node_abi}-{platform}-{arch}\n ['module_root', 'lib', 'binding', 'nodePreGyp', 'bindings']\n ]\n };\n\n/**\n * The main `bindings()` function loads the compiled bindings for a given module.\n * It uses V8's Error API to determine the parent filename that this function is\n * being invoked from, which is then used to find the root directory.\n */\n\nfunction bindings(opts) {\n // Argument surgery\n if (typeof opts == 'string') {\n opts = { bindings: opts };\n } else if (!opts) {\n opts = {};\n }\n\n // maps `defaults` onto `opts` object\n Object.keys(defaults).map(function(i) {\n if (!(i in opts)) opts[i] = defaults[i];\n });\n\n // Get the module root\n if (!opts.module_root) {\n opts.module_root = exports.getRoot(exports.getFileName());\n }\n\n // Ensure the given bindings name ends with .node\n if (path.extname(opts.bindings) != '.node') {\n opts.bindings += '.node';\n }\n\n // https://github.com/webpack/webpack/issues/4175#issuecomment-342931035\n var requireFunc =\n typeof __webpack_require__ === 'function'\n ? __non_webpack_require__\n : require;\n\n var tries = [],\n i = 0,\n l = opts.try.length,\n n,\n b,\n err;\n\n for (; i < l; i++) {\n n = join.apply(\n null,\n opts.try[i].map(function(p) {\n return opts[p] || p;\n })\n );\n tries.push(n);\n try {\n b = opts.path ? requireFunc.resolve(n) : requireFunc(n);\n if (!opts.path) {\n b.path = n;\n }\n return b;\n } catch (e) {\n if (e.code !== 'MODULE_NOT_FOUND' &&\n e.code !== 'QUALIFIED_PATH_RESOLUTION_FAILED' &&\n !/not find/i.test(e.message)) {\n throw e;\n }\n }\n }\n\n err = new Error(\n 'Could not locate the bindings file. Tried:\\n' +\n tries\n .map(function(a) {\n return opts.arrow + a;\n })\n .join('\\n')\n );\n err.tries = tries;\n throw err;\n}\nmodule.exports = exports = bindings;\n\n/**\n * Gets the filename of the JavaScript file that invokes this function.\n * Used to help find the root directory of a module.\n * Optionally accepts an filename argument to skip when searching for the invoking filename\n */\n\nexports.getFileName = function getFileName(calling_file) {\n var origPST = Error.prepareStackTrace,\n origSTL = Error.stackTraceLimit,\n dummy = {},\n fileName;\n\n Error.stackTraceLimit = 10;\n\n Error.prepareStackTrace = function(e, st) {\n for (var i = 0, l = st.length; i < l; i++) {\n fileName = st[i].getFileName();\n if (fileName !== __filename) {\n if (calling_file) {\n if (fileName !== calling_file) {\n return;\n }\n } else {\n return;\n }\n }\n }\n };\n\n // run the 'prepareStackTrace' function above\n Error.captureStackTrace(dummy);\n dummy.stack;\n\n // cleanup\n Error.prepareStackTrace = origPST;\n Error.stackTraceLimit = origSTL;\n\n // handle filename that starts with \"file://\"\n var fileSchema = 'file://';\n if (fileName.indexOf(fileSchema) === 0) {\n fileName = fileURLToPath(fileName);\n }\n\n return fileName;\n};\n\n/**\n * Gets the root directory of a module, given an arbitrary filename\n * somewhere in the module tree. The \"root directory\" is the directory\n * containing the `package.json` file.\n *\n * In: /home/nate/node-native-module/lib/index.js\n * Out: /home/nate/node-native-module\n */\n\nexports.getRoot = function getRoot(file) {\n var dir = dirname(file),\n prev;\n while (true) {\n if (dir === '.') {\n // Avoids an infinite loop in rare cases, like the REPL\n dir = process.cwd();\n }\n if (\n exists(join(dir, 'package.json')) ||\n exists(join(dir, 'node_modules'))\n ) {\n // Found the 'package.json' file or 'node_modules' dir; we're done\n return dir;\n }\n if (prev === dir) {\n // Got to the top\n throw new Error(\n 'Could not find module root given file: \"' +\n file +\n '\". Do you have a `package.json` file? '\n );\n }\n // Try the parent dir next\n prev = dir;\n dir = join(dir, '..');\n }\n};\n","'use strict';\nconst { cppdb } = require('../util');\n\nexports.prepare = function prepare(sql) {\n\treturn this[cppdb].prepare(sql, this, false);\n};\n\nexports.exec = function exec(sql) {\n\tthis[cppdb].exec(sql);\n\treturn this;\n};\n\nexports.close = function close() {\n\tthis[cppdb].close();\n\treturn this;\n};\n\nexports.loadExtension = function loadExtension(...args) {\n\tthis[cppdb].loadExtension(...args);\n\treturn this;\n};\n\nexports.defaultSafeIntegers = function defaultSafeIntegers(...args) {\n\tthis[cppdb].defaultSafeIntegers(...args);\n\treturn this;\n};\n\nexports.unsafeMode = function unsafeMode(...args) {\n\tthis[cppdb].unsafeMode(...args);\n\treturn this;\n};\n\nexports.getters = {\n\tname: {\n\t\tget: function name() { return this[cppdb].name; },\n\t\tenumerable: true,\n\t},\n\topen: {\n\t\tget: function open() { return this[cppdb].open; },\n\t\tenumerable: true,\n\t},\n\tinTransaction: {\n\t\tget: function inTransaction() { return this[cppdb].inTransaction; },\n\t\tenumerable: true,\n\t},\n\treadonly: {\n\t\tget: function readonly() { return this[cppdb].readonly; },\n\t\tenumerable: true,\n\t},\n\tmemory: {\n\t\tget: function memory() { return this[cppdb].memory; },\n\t\tenumerable: true,\n\t},\n};\n","'use strict';\nconst { cppdb } = require('../util');\nconst controllers = new WeakMap();\n\nmodule.exports = function transaction(fn) {\n\tif (typeof fn !== 'function') throw new TypeError('Expected first argument to be a function');\n\n\tconst db = this[cppdb];\n\tconst controller = getController(db, this);\n\tconst { apply } = Function.prototype;\n\n\t// Each version of the transaction function has these same properties\n\tconst properties = {\n\t\tdefault: { value: wrapTransaction(apply, fn, db, controller.default) },\n\t\tdeferred: { value: wrapTransaction(apply, fn, db, controller.deferred) },\n\t\timmediate: { value: wrapTransaction(apply, fn, db, controller.immediate) },\n\t\texclusive: { value: wrapTransaction(apply, fn, db, controller.exclusive) },\n\t\tdatabase: { value: this, enumerable: true },\n\t};\n\n\tObject.defineProperties(properties.default.value, properties);\n\tObject.defineProperties(properties.deferred.value, properties);\n\tObject.defineProperties(properties.immediate.value, properties);\n\tObject.defineProperties(properties.exclusive.value, properties);\n\n\t// Return the default version of the transaction function\n\treturn properties.default.value;\n};\n\n// Return the database's cached transaction controller, or create a new one\nconst getController = (db, self) => {\n\tlet controller = controllers.get(db);\n\tif (!controller) {\n\t\tconst shared = {\n\t\t\tcommit: db.prepare('COMMIT', self, false),\n\t\t\trollback: db.prepare('ROLLBACK', self, false),\n\t\t\tsavepoint: db.prepare('SAVEPOINT `\\t_bs3.\\t`', self, false),\n\t\t\trelease: db.prepare('RELEASE `\\t_bs3.\\t`', self, false),\n\t\t\trollbackTo: db.prepare('ROLLBACK TO `\\t_bs3.\\t`', self, false),\n\t\t};\n\t\tcontrollers.set(db, controller = {\n\t\t\tdefault: Object.assign({ begin: db.prepare('BEGIN', self, false) }, shared),\n\t\t\tdeferred: Object.assign({ begin: db.prepare('BEGIN DEFERRED', self, false) }, shared),\n\t\t\timmediate: Object.assign({ begin: db.prepare('BEGIN IMMEDIATE', self, false) }, shared),\n\t\t\texclusive: Object.assign({ begin: db.prepare('BEGIN EXCLUSIVE', self, false) }, shared),\n\t\t});\n\t}\n\treturn controller;\n};\n\n// Return a new transaction function by wrapping the given function\nconst wrapTransaction = (apply, fn, db, { begin, commit, rollback, savepoint, release, rollbackTo }) => function sqliteTransaction() {\n\tlet before, after, undo;\n\tif (db.inTransaction) {\n\t\tbefore = savepoint;\n\t\tafter = release;\n\t\tundo = rollbackTo;\n\t} else {\n\t\tbefore = begin;\n\t\tafter = commit;\n\t\tundo = rollback;\n\t}\n\tbefore.run();\n\ttry {\n\t\tconst result = apply.call(fn, this, arguments);\n\t\tif (result && typeof result.then === 'function') {\n\t\t\tthrow new TypeError('Transaction function cannot return a promise');\n\t\t}\n\t\tafter.run();\n\t\treturn result;\n\t} catch (ex) {\n\t\tif (db.inTransaction) {\n\t\t\tundo.run();\n\t\t\tif (undo !== rollback) after.run();\n\t\t}\n\t\tthrow ex;\n\t}\n};\n","'use strict';\nconst { getBooleanOption, cppdb } = require('../util');\n\nmodule.exports = function pragma(source, options) {\n\tif (options == null) options = {};\n\tif (typeof source !== 'string') throw new TypeError('Expected first argument to be a string');\n\tif (typeof options !== 'object') throw new TypeError('Expected second argument to be an options object');\n\tconst simple = getBooleanOption(options, 'simple');\n\n\tconst stmt = this[cppdb].prepare(`PRAGMA ${source}`, this, true);\n\treturn simple ? stmt.pluck().get() : stmt.all();\n};\n","'use strict';\nconst fs = require('fs');\nconst path = require('path');\nconst { promisify } = require('util');\nconst { cppdb } = require('../util');\nconst fsAccess = promisify(fs.access);\n\nmodule.exports = async function backup(filename, options) {\n\tif (options == null) options = {};\n\n\t// Validate arguments\n\tif (typeof filename !== 'string') throw new TypeError('Expected first argument to be a string');\n\tif (typeof options !== 'object') throw new TypeError('Expected second argument to be an options object');\n\n\t// Interpret options\n\tfilename = filename.trim();\n\tconst attachedName = 'attached' in options ? options.attached : 'main';\n\tconst handler = 'progress' in options ? options.progress : null;\n\n\t// Validate interpreted options\n\tif (!filename) throw new TypeError('Backup filename cannot be an empty string');\n\tif (filename === ':memory:') throw new TypeError('Invalid backup filename \":memory:\"');\n\tif (typeof attachedName !== 'string') throw new TypeError('Expected the \"attached\" option to be a string');\n\tif (!attachedName) throw new TypeError('The \"attached\" option cannot be an empty string');\n\tif (handler != null && typeof handler !== 'function') throw new TypeError('Expected the \"progress\" option to be a function');\n\n\t// Make sure the specified directory exists\n\tawait fsAccess(path.dirname(filename)).catch(() => {\n\t\tthrow new TypeError('Cannot save backup because the directory does not exist');\n\t});\n\n\tconst isNewFile = await fsAccess(filename).then(() => false, () => true);\n\treturn runBackup(this[cppdb].backup(this, attachedName, filename, isNewFile), handler || null);\n};\n\nconst runBackup = (backup, handler) => {\n\tlet rate = 0;\n\tlet useDefault = true;\n\n\treturn new Promise((resolve, reject) => {\n\t\tsetImmediate(function step() {\n\t\t\ttry {\n\t\t\t\tconst progress = backup.transfer(rate);\n\t\t\t\tif (!progress.remainingPages) {\n\t\t\t\t\tbackup.close();\n\t\t\t\t\tresolve(progress);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (useDefault) {\n\t\t\t\t\tuseDefault = false;\n\t\t\t\t\trate = 100;\n\t\t\t\t}\n\t\t\t\tif (handler) {\n\t\t\t\t\tconst ret = handler(progress);\n\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\tif (typeof ret === 'number' && ret === ret) rate = Math.max(0, Math.min(0x7fffffff, Math.round(ret)));\n\t\t\t\t\t\telse throw new TypeError('Expected progress callback to return a number or undefined');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsetImmediate(step);\n\t\t\t} catch (err) {\n\t\t\t\tbackup.close();\n\t\t\t\treject(err);\n\t\t\t}\n\t\t});\n\t});\n};\n","'use strict';\nconst { cppdb } = require('../util');\n\nmodule.exports = function serialize(options) {\n\tif (options == null) options = {};\n\n\t// Validate arguments\n\tif (typeof options !== 'object') throw new TypeError('Expected first argument to be an options object');\n\n\t// Interpret and validate options\n\tconst attachedName = 'attached' in options ? options.attached : 'main';\n\tif (typeof attachedName !== 'string') throw new TypeError('Expected the \"attached\" option to be a string');\n\tif (!attachedName) throw new TypeError('The \"attached\" option cannot be an empty string');\n\n\treturn this[cppdb].serialize(attachedName);\n};\n","'use strict';\nconst { getBooleanOption, cppdb } = require('../util');\n\nmodule.exports = function defineFunction(name, options, fn) {\n\t// Apply defaults\n\tif (options == null) options = {};\n\tif (typeof options === 'function') { fn = options; options = {}; }\n\n\t// Validate arguments\n\tif (typeof name !== 'string') throw new TypeError('Expected first argument to be a string');\n\tif (typeof fn !== 'function') throw new TypeError('Expected last argument to be a function');\n\tif (typeof options !== 'object') throw new TypeError('Expected second argument to be an options object');\n\tif (!name) throw new TypeError('User-defined function name cannot be an empty string');\n\n\t// Interpret options\n\tconst safeIntegers = 'safeIntegers' in options ? +getBooleanOption(options, 'safeIntegers') : 2;\n\tconst deterministic = getBooleanOption(options, 'deterministic');\n\tconst directOnly = getBooleanOption(options, 'directOnly');\n\tconst varargs = getBooleanOption(options, 'varargs');\n\tlet argCount = -1;\n\n\t// Determine argument count\n\tif (!varargs) {\n\t\targCount = fn.length;\n\t\tif (!Number.isInteger(argCount) || argCount < 0) throw new TypeError('Expected function.length to be a positive integer');\n\t\tif (argCount > 100) throw new RangeError('User-defined functions cannot have more than 100 arguments');\n\t}\n\n\tthis[cppdb].function(fn, name, argCount, safeIntegers, deterministic, directOnly);\n\treturn this;\n};\n","'use strict';\nconst { getBooleanOption, cppdb } = require('../util');\n\nmodule.exports = function defineAggregate(name, options) {\n\t// Validate arguments\n\tif (typeof name !== 'string') throw new TypeError('Expected first argument to be a string');\n\tif (typeof options !== 'object' || options === null) throw new TypeError('Expected second argument to be an options object');\n\tif (!name) throw new TypeError('User-defined function name cannot be an empty string');\n\n\t// Interpret options\n\tconst start = 'start' in options ? options.start : null;\n\tconst step = getFunctionOption(options, 'step', true);\n\tconst inverse = getFunctionOption(options, 'inverse', false);\n\tconst result = getFunctionOption(options, 'result', false);\n\tconst safeIntegers = 'safeIntegers' in options ? +getBooleanOption(options, 'safeIntegers') : 2;\n\tconst deterministic = getBooleanOption(options, 'deterministic');\n\tconst directOnly = getBooleanOption(options, 'directOnly');\n\tconst varargs = getBooleanOption(options, 'varargs');\n\tlet argCount = -1;\n\n\t// Determine argument count\n\tif (!varargs) {\n\t\targCount = Math.max(getLength(step), inverse ? getLength(inverse) : 0);\n\t\tif (argCount > 0) argCount -= 1;\n\t\tif (argCount > 100) throw new RangeError('User-defined functions cannot have more than 100 arguments');\n\t}\n\n\tthis[cppdb].aggregate(start, step, inverse, result, name, argCount, safeIntegers, deterministic, directOnly);\n\treturn this;\n};\n\nconst getFunctionOption = (options, key, required) => {\n\tconst value = key in options ? options[key] : null;\n\tif (typeof value === 'function') return value;\n\tif (value != null) throw new TypeError(`Expected the \"${key}\" option to be a function`);\n\tif (required) throw new TypeError(`Missing required option \"${key}\"`);\n\treturn null;\n};\n\nconst getLength = ({ length }) => {\n\tif (Number.isInteger(length) && length >= 0) return length;\n\tthrow new TypeError('Expected function.length to be a positive integer');\n};\n","'use strict';\nconst { cppdb } = require('../util');\n\nmodule.exports = function defineTable(name, factory) {\n\t// Validate arguments\n\tif (typeof name !== 'string') throw new TypeError('Expected first argument to be a string');\n\tif (!name) throw new TypeError('Virtual table module name cannot be an empty string');\n\n\t// Determine whether the module is eponymous-only or not\n\tlet eponymous = false;\n\tif (typeof factory === 'object' && factory !== null) {\n\t\teponymous = true;\n\t\tfactory = defer(parseTableDefinition(factory, 'used', name));\n\t} else {\n\t\tif (typeof factory !== 'function') throw new TypeError('Expected second argument to be a function or a table definition object');\n\t\tfactory = wrapFactory(factory);\n\t}\n\n\tthis[cppdb].table(factory, name, eponymous);\n\treturn this;\n};\n\nfunction wrapFactory(factory) {\n\treturn function virtualTableFactory(moduleName, databaseName, tableName, ...args) {\n\t\tconst thisObject = {\n\t\t\tmodule: moduleName,\n\t\t\tdatabase: databaseName,\n\t\t\ttable: tableName,\n\t\t};\n\n\t\t// Generate a new table definition by invoking the factory\n\t\tconst def = apply.call(factory, thisObject, args);\n\t\tif (typeof def !== 'object' || def === null) {\n\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" did not return a table definition object`);\n\t\t}\n\n\t\treturn parseTableDefinition(def, 'returned', moduleName);\n\t};\n}\n\nfunction parseTableDefinition(def, verb, moduleName) {\n\t// Validate required properties\n\tif (!hasOwnProperty.call(def, 'rows')) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition without a \"rows\" property`);\n\t}\n\tif (!hasOwnProperty.call(def, 'columns')) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition without a \"columns\" property`);\n\t}\n\n\t// Validate \"rows\" property\n\tconst rows = def.rows;\n\tif (typeof rows !== 'function' || Object.getPrototypeOf(rows) !== GeneratorFunctionPrototype) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with an invalid \"rows\" property (should be a generator function)`);\n\t}\n\n\t// Validate \"columns\" property\n\tlet columns = def.columns;\n\tif (!Array.isArray(columns) || !(columns = [...columns]).every(x => typeof x === 'string')) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with an invalid \"columns\" property (should be an array of strings)`);\n\t}\n\tif (columns.length !== new Set(columns).size) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with duplicate column names`);\n\t}\n\tif (!columns.length) {\n\t\tthrow new RangeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with zero columns`);\n\t}\n\n\t// Validate \"parameters\" property\n\tlet parameters;\n\tif (hasOwnProperty.call(def, 'parameters')) {\n\t\tparameters = def.parameters;\n\t\tif (!Array.isArray(parameters) || !(parameters = [...parameters]).every(x => typeof x === 'string')) {\n\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with an invalid \"parameters\" property (should be an array of strings)`);\n\t\t}\n\t} else {\n\t\tparameters = inferParameters(rows);\n\t}\n\tif (parameters.length !== new Set(parameters).size) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with duplicate parameter names`);\n\t}\n\tif (parameters.length > 32) {\n\t\tthrow new RangeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with more than the maximum number of 32 parameters`);\n\t}\n\tfor (const parameter of parameters) {\n\t\tif (columns.includes(parameter)) {\n\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with column \"${parameter}\" which was ambiguously defined as both a column and parameter`);\n\t\t}\n\t}\n\n\t// Validate \"safeIntegers\" option\n\tlet safeIntegers = 2;\n\tif (hasOwnProperty.call(def, 'safeIntegers')) {\n\t\tconst bool = def.safeIntegers;\n\t\tif (typeof bool !== 'boolean') {\n\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with an invalid \"safeIntegers\" property (should be a boolean)`);\n\t\t}\n\t\tsafeIntegers = +bool;\n\t}\n\n\t// Validate \"directOnly\" option\n\tlet directOnly = false;\n\tif (hasOwnProperty.call(def, 'directOnly')) {\n\t\tdirectOnly = def.directOnly;\n\t\tif (typeof directOnly !== 'boolean') {\n\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with an invalid \"directOnly\" property (should be a boolean)`);\n\t\t}\n\t}\n\n\t// Generate SQL for the virtual table definition\n\tconst columnDefinitions = [\n\t\t...parameters.map(identifier).map(str => `${str} HIDDEN`),\n\t\t...columns.map(identifier),\n\t];\n\treturn [\n\t\t`CREATE TABLE x(${columnDefinitions.join(', ')});`,\n\t\twrapGenerator(rows, new Map(columns.map((x, i) => [x, parameters.length + i])), moduleName),\n\t\tparameters,\n\t\tsafeIntegers,\n\t\tdirectOnly,\n\t];\n}\n\nfunction wrapGenerator(generator, columnMap, moduleName) {\n\treturn function* virtualTable(...args) {\n\t\t/*\n\t\t\tWe must defensively clone any buffers in the arguments, because\n\t\t\totherwise the generator could mutate one of them, which would cause\n\t\t\tus to return incorrect values for hidden columns, potentially\n\t\t\tcorrupting the database.\n\t\t */\n\t\tconst output = args.map(x => Buffer.isBuffer(x) ? Buffer.from(x) : x);\n\t\tfor (let i = 0; i < columnMap.size; ++i) {\n\t\t\toutput.push(null); // Fill with nulls to prevent gaps in array (v8 optimization)\n\t\t}\n\t\tfor (const row of generator(...args)) {\n\t\t\tif (Array.isArray(row)) {\n\t\t\t\textractRowArray(row, output, columnMap.size, moduleName);\n\t\t\t\tyield output;\n\t\t\t} else if (typeof row === 'object' && row !== null) {\n\t\t\t\textractRowObject(row, output, columnMap, moduleName);\n\t\t\t\tyield output;\n\t\t\t} else {\n\t\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" yielded something that isn't a valid row object`);\n\t\t\t}\n\t\t}\n\t};\n}\n\nfunction extractRowArray(row, output, columnCount, moduleName) {\n\tif (row.length !== columnCount) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" yielded a row with an incorrect number of columns`);\n\t}\n\tconst offset = output.length - columnCount;\n\tfor (let i = 0; i < columnCount; ++i) {\n\t\toutput[i + offset] = row[i];\n\t}\n}\n\nfunction extractRowObject(row, output, columnMap, moduleName) {\n\tlet count = 0;\n\tfor (const key of Object.keys(row)) {\n\t\tconst index = columnMap.get(key);\n\t\tif (index === undefined) {\n\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" yielded a row with an undeclared column \"${key}\"`);\n\t\t}\n\t\toutput[index] = row[key];\n\t\tcount += 1;\n\t}\n\tif (count !== columnMap.size) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" yielded a row with missing columns`);\n\t}\n}\n\nfunction inferParameters({ length }) {\n\tif (!Number.isInteger(length) || length < 0) {\n\t\tthrow new TypeError('Expected function.length to be a positive integer');\n\t}\n\tconst params = [];\n\tfor (let i = 0; i < length; ++i) {\n\t\tparams.push(`$${i + 1}`);\n\t}\n\treturn params;\n}\n\nconst { hasOwnProperty } = Object.prototype;\nconst { apply } = Function.prototype;\nconst GeneratorFunctionPrototype = Object.getPrototypeOf(function*(){});\nconst identifier = str => `\"${str.replace(/\"/g, '\"\"')}\"`;\nconst defer = x => () => x;\n","'use strict';\nconst DatabaseInspection = function Database() {};\n\nmodule.exports = function inspect(depth, opts) {\n\treturn Object.assign(new DatabaseInspection(), this);\n};\n\n","'use strict';\nconst fs = require('fs');\nconst path = require('path');\nconst util = require('./util');\nconst SqliteError = require('./sqlite-error');\n\nlet DEFAULT_ADDON;\n\nfunction Database(filenameGiven, options) {\n\tif (new.target == null) {\n\t\treturn new Database(filenameGiven, options);\n\t}\n\n\t// Apply defaults\n\tlet buffer;\n\tif (Buffer.isBuffer(filenameGiven)) {\n\t\tbuffer = filenameGiven;\n\t\tfilenameGiven = ':memory:';\n\t}\n\tif (filenameGiven == null) filenameGiven = '';\n\tif (options == null) options = {};\n\n\t// Validate arguments\n\tif (typeof filenameGiven !== 'string') throw new TypeError('Expected first argument to be a string');\n\tif (typeof options !== 'object') throw new TypeError('Expected second argument to be an options object');\n\tif ('readOnly' in options) throw new TypeError('Misspelled option \"readOnly\" should be \"readonly\"');\n\tif ('memory' in options) throw new TypeError('Option \"memory\" was removed in v7.0.0 (use \":memory:\" filename instead)');\n\n\t// Interpret options\n\tconst filename = filenameGiven.trim();\n\tconst anonymous = filename === '' || filename === ':memory:';\n\tconst readonly = util.getBooleanOption(options, 'readonly');\n\tconst fileMustExist = util.getBooleanOption(options, 'fileMustExist');\n\tconst timeout = 'timeout' in options ? options.timeout : 5000;\n\tconst verbose = 'verbose' in options ? options.verbose : null;\n\tconst nativeBinding = 'nativeBinding' in options ? options.nativeBinding : null;\n\n\t// Validate interpreted options\n\tif (readonly && anonymous && !buffer) throw new TypeError('In-memory/temporary databases cannot be readonly');\n\tif (!Number.isInteger(timeout) || timeout < 0) throw new TypeError('Expected the \"timeout\" option to be a positive integer');\n\tif (timeout > 0x7fffffff) throw new RangeError('Option \"timeout\" cannot be greater than 2147483647');\n\tif (verbose != null && typeof verbose !== 'function') throw new TypeError('Expected the \"verbose\" option to be a function');\n\tif (nativeBinding != null && typeof nativeBinding !== 'string' && typeof nativeBinding !== 'object') throw new TypeError('Expected the \"nativeBinding\" option to be a string or addon object');\n\n\t// Load the native addon\n\tlet addon;\n\tif (nativeBinding == null) {\n\t\taddon = DEFAULT_ADDON || (DEFAULT_ADDON = require('bindings')('better_sqlite3.node'));\n\t} else if (typeof nativeBinding === 'string') {\n\t\t// See <https://webpack.js.org/api/module-variables/#__non_webpack_require__-webpack-specific>\n\t\tconst requireFunc = typeof __non_webpack_require__ === 'function' ? __non_webpack_require__ : require;\n\t\taddon = requireFunc(path.resolve(nativeBinding).replace(/(\\.node)?$/, '.node'));\n\t} else {\n\t\t// See <https://github.com/WiseLibs/better-sqlite3/issues/972>\n\t\taddon = nativeBinding;\n\t}\n\n\tif (!addon.isInitialized) {\n\t\taddon.setErrorConstructor(SqliteError);\n\t\taddon.isInitialized = true;\n\t}\n\n\t// Make sure the specified directory exists\n\tif (!anonymous && !filename.startsWith('file:') && !fs.existsSync(path.dirname(filename))) {\n\t\tthrow new TypeError('Cannot open database because the directory does not exist');\n\t}\n\n\tObject.defineProperties(this, {\n\t\t[util.cppdb]: { value: new addon.Database(filename, filenameGiven, anonymous, readonly, fileMustExist, timeout, verbose || null, buffer || null) },\n\t\t...wrappers.getters,\n\t});\n}\n\nconst wrappers = require('./methods/wrappers');\nDatabase.prototype.prepare = wrappers.prepare;\nDatabase.prototype.transaction = require('./methods/transaction');\nDatabase.prototype.pragma = require('./methods/pragma');\nDatabase.prototype.backup = require('./methods/backup');\nDatabase.prototype.serialize = require('./methods/serialize');\nDatabase.prototype.function = require('./methods/function');\nDatabase.prototype.aggregate = require('./methods/aggregate');\nDatabase.prototype.table = require('./methods/table');\nDatabase.prototype.loadExtension = wrappers.loadExtension;\nDatabase.prototype.exec = wrappers.exec;\nDatabase.prototype.close = wrappers.close;\nDatabase.prototype.defaultSafeIntegers = wrappers.defaultSafeIntegers;\nDatabase.prototype.unsafeMode = wrappers.unsafeMode;\nDatabase.prototype[util.inspect] = require('./methods/inspect');\n\nmodule.exports = Database;\n","'use strict';\nmodule.exports = require('./database');\nmodule.exports.SqliteError = require('./sqlite-error');\n","import { randomUUID } from \"node:crypto\";\nimport { createDriver, type Dialect, type Driver } from \"./driver.js\";\nimport { QueryBuilder } from \"./query.js\";\nimport type {\n\tConnectionConfig,\n\tDatabaseDriver,\n\tQueryResult,\n\tQueryRunner,\n} from \"./types.js\";\n\nexport type { ConnectionConfig, DatabaseDriver, QueryResult };\n\nexport class DatabaseConnection implements QueryRunner {\n\tprivate config: ConnectionConfig;\n\tprivate driver: Driver | null = null;\n\n\tconstructor(config: ConnectionConfig) {\n\t\tthis.config = {\n\t\t\tdriver: \"mysql\",\n\t\t\thost: \"127.0.0.1\",\n\t\t\tcharset: \"utf8mb4\",\n\t\t\tprefix: \"\",\n\t\t\t...config,\n\t\t};\n\n\t\tif (this.config.port === undefined) {\n\t\t\tif (this.config.driver === \"mysql\") this.config.port = 3306;\n\t\t\telse if (this.config.driver === \"postgresql\") this.config.port = 5432;\n\t\t}\n\t}\n\n\tasync connect(): Promise<void> {\n\t\tif (this.driver !== null) return;\n\t\tthis.driver = await createDriver(this.config);\n\t\tawait this.driver.connect();\n\t}\n\n\tasync disconnect(): Promise<void> {\n\t\tif (this.driver !== null) {\n\t\t\tawait this.driver.disconnect();\n\t\t\tthis.driver = null;\n\t\t}\n\t}\n\n\tasync raw(sql: string, bindings?: any[]): Promise<QueryResult> {\n\t\tthis.ensureConnected();\n\t\treturn this.driver!.raw(sql, bindings);\n\t}\n\n\ttable(tableName: string): QueryBuilder {\n\t\treturn new QueryBuilder(this, `${this.config.prefix ?? \"\"}${tableName}`);\n\t}\n\n\tisConnected(): boolean {\n\t\treturn this.driver !== null && this.driver.isConnected();\n\t}\n\n\tgetDriver(): DatabaseDriver {\n\t\treturn (this.config.driver ?? \"mysql\") as DatabaseDriver;\n\t}\n\n\tgetDialect(): Dialect {\n\t\tthis.ensureConnected();\n\t\treturn this.driver!.getDialect();\n\t}\n\n\tgetPrefix(): string {\n\t\treturn this.config.prefix ?? \"\";\n\t}\n\n\tgetConfig(): Readonly<ConnectionConfig> {\n\t\treturn { ...this.config };\n\t}\n\n\tasync transaction<T>(\n\t\tcallback: (trx: DatabaseConnection) => Promise<T>,\n\t): Promise<T> {\n\t\tthis.ensureConnected();\n\n\t\treturn this.driver!.transaction(async (_driver: Driver) => {\n\t\t\tconst trxConnection = new DatabaseConnection(this.config);\n\t\t\ttrxConnection[\"driver\"] = this.driver;\n\n\t\t\ttrxConnection.raw = async (\n\t\t\t\tsql: string,\n\t\t\t\tbindings?: any[],\n\t\t\t): Promise<QueryResult> => {\n\t\t\t\treturn this.driver!.raw(sql, bindings);\n\t\t\t};\n\n\t\t\treturn callback(trxConnection);\n\t\t});\n\t}\n\n\tstatic generateId(): string {\n\t\treturn randomUUID();\n\t}\n\n\tprivate ensureConnected(): void {\n\t\tif (this.driver === null || !this.driver.isConnected()) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Database not connected. Call connect() before performing operations.\",\n\t\t\t);\n\t\t}\n\t}\n}\n","export interface Dialect {\n\twrapIdentifier(identifier: string): string;\n\tmakeParameter(index: number): string;\n\tcompileLimitOffset(\n\t\tbindings: any[],\n\t\tlimit: number | null,\n\t\toffset: number | null,\n\t): string;\n\tcompileInsertReturning(\n\t\tsql: string,\n\t\tbindings: any[],\n\t\tidColumn?: string,\n\t): string;\n\tcompileTruncate(tableName: string): string;\n\tcompileCreateMigrationsTable(): string;\n\tcompileColumn(column: ColumnCompileOptions): string;\n\tcompileModifyColumn(column: ColumnCompileOptions): string;\n\tcompileTableBlueprint(\n\t\ttableName: string,\n\t\tcolumns: ColumnCompileOptions[],\n\t\tconstraints: string[],\n\t): string;\n\tcompileAddColumns(tableName: string, columns: ColumnCompileOptions[]): string;\n\tcompileDropColumns(tableName: string, columns: string[]): string;\n\tcompileRenameColumn(tableName: string, from: string, to: string): string;\n\tcompileCreateTable(\n\t\ttableName: string,\n\t\tcolumns: ColumnCompileOptions[],\n\t\tconstraints: string[],\n\t): string;\n\tcompileRenameTable(from: string, to: string): string;\n\tcompileDropTable(tableName: string): string;\n\tcompileDropTableIfExists(tableName: string): string;\n\tcompileHasTable(tableName: string): string;\n\tcompileHasColumn(tableName: string, columnName: string): string;\n\tcompileInsert(sql: string): string;\n}\n\nexport interface ColumnCompileOptions {\n\tname: string;\n\ttype: string;\n\tnullable: boolean;\n\tdefaultValue: any;\n\tunsigned: boolean;\n\tunique: boolean;\n\tprimary: boolean;\n\tindex: boolean;\n\tcomment: string | null;\n\tafter: string | null;\n\tfirst: boolean;\n\tautoIncrement: boolean;\n\tprecision: number | null;\n\tscale: number | null;\n\tlength: number | null;\n\tvalues: string[] | null;\n\tisForeignId: boolean;\n}\n\nexport class MysqlDialect implements Dialect {\n\twrapIdentifier(identifier: string): string {\n\t\treturn `\\`${identifier.replace(/`/g, \"``\")}\\``;\n\t}\n\n\tmakeParameter(_index: number): string {\n\t\treturn \"?\";\n\t}\n\n\tcompileLimitOffset(\n\t\tbindings: any[],\n\t\tlimit: number | null,\n\t\toffset: number | null,\n\t): string {\n\t\tif (limit === null && offset === null) return \"\";\n\t\tif (offset !== null) {\n\t\t\tbindings.push(limit ?? 0, offset);\n\t\t\treturn \" LIMIT ? OFFSET ?\";\n\t\t}\n\t\tbindings.push(limit);\n\t\treturn \" LIMIT ?\";\n\t}\n\n\tcompileInsertReturning(\n\t\tsql: string,\n\t\t_bindings: any[],\n\t\t_idColumn?: string,\n\t): string {\n\t\treturn `${sql}; SELECT LAST_INSERT_ID() as id`;\n\t}\n\n\tcompileTruncate(tableName: string): string {\n\t\treturn `TRUNCATE TABLE ${this.wrapIdentifier(tableName)}`;\n\t}\n\n\tcompileCreateMigrationsTable(): string {\n\t\treturn `CREATE TABLE IF NOT EXISTS \\`migrations\\` (\n \\`id\\` INT AUTO_INCREMENT PRIMARY KEY,\n \\`name\\` VARCHAR(255) NOT NULL,\n \\`batch\\` INT NOT NULL,\n \\`executed_at\\` TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n)`;\n\t}\n\n\tprivate mapType(type: string, options: ColumnCompileOptions): string {\n\t\tswitch (type) {\n\t\t\tcase \"id\":\n\t\t\tcase \"increments\":\n\t\t\t\treturn \"INT AUTO_INCREMENT PRIMARY KEY\";\n\t\t\tcase \"bigIncrements\":\n\t\t\t\treturn \"BIGINT AUTO_INCREMENT PRIMARY KEY\";\n\t\t\tcase \"string\":\n\t\t\t\treturn `VARCHAR(${options.length ?? 255})`;\n\t\t\tcase \"text\":\n\t\t\t\treturn \"TEXT\";\n\t\t\tcase \"integer\":\n\t\t\t\treturn \"INT\";\n\t\t\tcase \"bigInteger\":\n\t\t\t\treturn \"BIGINT\";\n\t\t\tcase \"tinyInteger\":\n\t\t\t\treturn \"TINYINT\";\n\t\t\tcase \"smallInteger\":\n\t\t\t\treturn \"SMALLINT\";\n\t\t\tcase \"boolean\":\n\t\t\t\treturn \"TINYINT(1)\";\n\t\t\tcase \"float\":\n\t\t\t\treturn \"FLOAT\";\n\t\t\tcase \"double\":\n\t\t\t\treturn \"DOUBLE\";\n\t\t\tcase \"decimal\":\n\t\t\t\treturn `DECIMAL(${options.precision ?? 10},${options.scale ?? 0})`;\n\t\t\tcase \"date\":\n\t\t\t\treturn \"DATE\";\n\t\t\tcase \"datetime\":\n\t\t\t\treturn \"DATETIME\";\n\t\t\tcase \"timestamp\":\n\t\t\t\treturn \"TIMESTAMP\";\n\t\t\tcase \"time\":\n\t\t\t\treturn \"TIME\";\n\t\t\tcase \"year\":\n\t\t\t\treturn \"YEAR\";\n\t\t\tcase \"json\":\n\t\t\tcase \"jsonb\":\n\t\t\t\treturn \"JSON\";\n\t\t\tcase \"binary\":\n\t\t\t\treturn \"BLOB\";\n\t\t\tcase \"uuid\":\n\t\t\t\treturn \"CHAR(36)\";\n\t\t\tcase \"foreignId\":\n\t\t\t\treturn \"INT UNSIGNED\";\n\t\t\tdefault:\n\t\t\t\treturn type;\n\t\t}\n\t}\n\n\tcompileColumn(options: ColumnCompileOptions): string {\n\t\tlet sql = `${this.wrapIdentifier(options.name)} ${this.mapType(options.type, options)}`;\n\t\tif (\n\t\t\toptions.unsigned &&\n\t\t\toptions.type !== \"id\" &&\n\t\t\toptions.type !== \"increments\" &&\n\t\t\toptions.type !== \"bigIncrements\" &&\n\t\t\toptions.type !== \"foreignId\"\n\t\t)\n\t\t\tsql += \" UNSIGNED\";\n\t\tif (\n\t\t\toptions.autoIncrement &&\n\t\t\toptions.type !== \"id\" &&\n\t\t\toptions.type !== \"increments\" &&\n\t\t\toptions.type !== \"bigIncrements\"\n\t\t)\n\t\t\tsql += \" AUTO_INCREMENT\";\n\t\tif (options.defaultValue !== undefined && options.defaultValue !== null) {\n\t\t\tsql += ` DEFAULT ${this.formatDefault(options.defaultValue)}`;\n\t\t} else if (\n\t\t\t!options.nullable &&\n\t\t\t!options.autoIncrement &&\n\t\t\toptions.type !== \"id\" &&\n\t\t\toptions.type !== \"increments\" &&\n\t\t\toptions.type !== \"bigIncrements\"\n\t\t) {\n\t\t\tsql += \" NOT NULL\";\n\t\t}\n\t\tif (options.nullable) sql += \" NULL\";\n\t\tif (options.primary) sql += \" PRIMARY KEY\";\n\t\tif (options.unique) sql += \" UNIQUE\";\n\t\tif (options.comment !== null)\n\t\t\tsql += ` COMMENT '${options.comment.replace(/'/g, \"\\\\'\")}'`;\n\t\tif (options.after !== null)\n\t\t\tsql += ` AFTER ${this.wrapIdentifier(options.after)}`;\n\t\treturn sql;\n\t}\n\n\tcompileModifyColumn(options: ColumnCompileOptions): string {\n\t\treturn `MODIFY COLUMN ${this.compileColumn(options)}`;\n\t}\n\n\tcompileTableBlueprint(\n\t\t_tableName: string,\n\t\tcolumns: ColumnCompileOptions[],\n\t\tconstraints: string[],\n\t): string {\n\t\tconst parts = [\n\t\t\t...columns.map((c) => this.compileColumn(c)),\n\t\t\t...constraints,\n\t\t];\n\t\treturn parts.join(\",\\n \");\n\t}\n\n\tcompileAddColumns(\n\t\t_tableName: string,\n\t\tcolumns: ColumnCompileOptions[],\n\t): string {\n\t\treturn `ADD ${columns.map((c) => this.compileColumn(c)).join(\", ADD \")}`;\n\t}\n\n\tcompileDropColumns(_tableName: string, columns: string[]): string {\n\t\treturn `DROP COLUMN ${columns.map((c) => this.wrapIdentifier(c)).join(\", DROP COLUMN \")}`;\n\t}\n\n\tcompileRenameColumn(_tableName: string, from: string, to: string): string {\n\t\treturn `RENAME COLUMN ${this.wrapIdentifier(from)} TO ${this.wrapIdentifier(to)}`;\n\t}\n\n\tcompileCreateTable(\n\t\ttableName: string,\n\t\tcolumns: ColumnCompileOptions[],\n\t\tconstraints: string[],\n\t): string {\n\t\tconst body = this.compileTableBlueprint(tableName, columns, constraints);\n\t\treturn `CREATE TABLE ${this.wrapIdentifier(tableName)} (\\n ${body}\\n)`;\n\t}\n\n\tcompileRenameTable(from: string, to: string): string {\n\t\treturn `RENAME TABLE ${this.wrapIdentifier(from)} TO ${this.wrapIdentifier(to)}`;\n\t}\n\n\tcompileDropTable(tableName: string): string {\n\t\treturn `DROP TABLE ${this.wrapIdentifier(tableName)}`;\n\t}\n\n\tcompileDropTableIfExists(tableName: string): string {\n\t\treturn `DROP TABLE IF EXISTS ${this.wrapIdentifier(tableName)}`;\n\t}\n\n\tcompileHasTable(_tableName: string): string {\n\t\treturn `SELECT COUNT(*) as \\`count\\` FROM \\`information_schema\\`.\\`tables\\` WHERE \\`table_schema\\` = DATABASE() AND \\`table_name\\` = ?`;\n\t}\n\n\tcompileHasColumn(_tableName: string, _columnName: string): string {\n\t\treturn `SELECT COUNT(*) as \\`count\\` FROM \\`information_schema\\`.\\`columns\\` WHERE \\`table_schema\\` = DATABASE() AND \\`table_name\\` = ? AND \\`column_name\\` = ?`;\n\t}\n\n\tcompileInsert(sql: string): string {\n\t\treturn sql;\n\t}\n\n\tprivate formatDefault(value: any): string {\n\t\tif (typeof value === \"string\") {\n\t\t\tif (value === \"CURRENT_TIMESTAMP\") return value;\n\t\t\treturn `'${value.replace(/'/g, \"\\\\'\")}'`;\n\t\t}\n\t\tif (value === null) return \"NULL\";\n\t\tif (typeof value === \"boolean\") return value ? \"1\" : \"0\";\n\t\treturn String(value);\n\t}\n}\n\nexport class SqliteDialect implements Dialect {\n\twrapIdentifier(identifier: string): string {\n\t\treturn `\"${identifier.replace(/\"/g, '\"\"')}\"`;\n\t}\n\n\tmakeParameter(_index: number): string {\n\t\treturn \"?\";\n\t}\n\n\tcompileLimitOffset(\n\t\tbindings: any[],\n\t\tlimit: number | null,\n\t\toffset: number | null,\n\t): string {\n\t\tif (limit === null && offset === null) return \"\";\n\t\tif (offset !== null) {\n\t\t\tbindings.push(limit ?? 0, offset);\n\t\t\treturn \" LIMIT ? OFFSET ?\";\n\t\t}\n\t\tbindings.push(limit);\n\t\treturn \" LIMIT ?\";\n\t}\n\n\tcompileInsertReturning(\n\t\tsql: string,\n\t\t_bindings: any[],\n\t\t_idColumn?: string,\n\t): string {\n\t\treturn `${sql}; SELECT last_insert_rowid() as id`;\n\t}\n\n\tcompileTruncate(tableName: string): string {\n\t\treturn `DELETE FROM ${this.wrapIdentifier(tableName)}`;\n\t}\n\n\tcompileCreateMigrationsTable(): string {\n\t\treturn `CREATE TABLE IF NOT EXISTS \"migrations\" (\n \"id\" INTEGER PRIMARY KEY AUTOINCREMENT,\n \"name\" TEXT NOT NULL,\n \"batch\" INTEGER NOT NULL,\n \"executed_at\" TEXT DEFAULT CURRENT_TIMESTAMP\n)`;\n\t}\n\n\tprivate mapType(type: string, options: ColumnCompileOptions): string {\n\t\tswitch (type) {\n\t\t\tcase \"id\":\n\t\t\tcase \"increments\":\n\t\t\t\treturn \"INTEGER PRIMARY KEY AUTOINCREMENT\";\n\t\t\tcase \"bigIncrements\":\n\t\t\t\treturn \"INTEGER PRIMARY KEY AUTOINCREMENT\";\n\t\t\tcase \"string\":\n\t\t\t\treturn `VARCHAR(${options.length ?? 255})`;\n\t\t\tcase \"text\":\n\t\t\t\treturn \"TEXT\";\n\t\t\tcase \"integer\":\n\t\t\t\treturn \"INTEGER\";\n\t\t\tcase \"bigInteger\":\n\t\t\t\treturn \"INTEGER\";\n\t\t\tcase \"tinyInteger\":\n\t\t\t\treturn \"INTEGER\";\n\t\t\tcase \"smallInteger\":\n\t\t\t\treturn \"INTEGER\";\n\t\t\tcase \"boolean\":\n\t\t\t\treturn \"INTEGER\";\n\t\t\tcase \"float\":\n\t\t\t\treturn \"REAL\";\n\t\t\tcase \"double\":\n\t\t\t\treturn \"REAL\";\n\t\t\tcase \"decimal\":\n\t\t\t\treturn \"REAL\";\n\t\t\tcase \"date\":\n\t\t\t\treturn \"TEXT\";\n\t\t\tcase \"datetime\":\n\t\t\t\treturn \"TEXT\";\n\t\t\tcase \"timestamp\":\n\t\t\t\treturn \"TEXT\";\n\t\t\tcase \"time\":\n\t\t\t\treturn \"TEXT\";\n\t\t\tcase \"year\":\n\t\t\t\treturn \"TEXT\";\n\t\t\tcase \"json\":\n\t\t\tcase \"jsonb\":\n\t\t\t\treturn \"TEXT\";\n\t\t\tcase \"binary\":\n\t\t\t\treturn \"BLOB\";\n\t\t\tcase \"uuid\":\n\t\t\t\treturn \"TEXT\";\n\t\t\tcase \"foreignId\":\n\t\t\t\treturn \"INTEGER\";\n\t\t\tdefault:\n\t\t\t\treturn type;\n\t\t}\n\t}\n\n\tcompileColumn(options: ColumnCompileOptions): string {\n\t\tlet sql = `${this.wrapIdentifier(options.name)} ${this.mapType(options.type, options)}`;\n\t\tif (\n\t\t\toptions.autoIncrement &&\n\t\t\toptions.type !== \"id\" &&\n\t\t\toptions.type !== \"increments\" &&\n\t\t\toptions.type !== \"bigIncrements\"\n\t\t)\n\t\t\tsql += \" AUTOINCREMENT\";\n\t\tif (\n\t\t\t!options.nullable &&\n\t\t\toptions.defaultValue === undefined &&\n\t\t\t!options.autoIncrement &&\n\t\t\toptions.type !== \"id\" &&\n\t\t\toptions.type !== \"increments\" &&\n\t\t\toptions.type !== \"bigIncrements\"\n\t\t)\n\t\t\tsql += \" NOT NULL\";\n\t\tif (options.nullable) sql += \" NULL\";\n\t\tif (options.defaultValue !== undefined && options.defaultValue !== null) {\n\t\t\tsql += ` DEFAULT ${this.formatDefault(options.defaultValue)}`;\n\t\t}\n\t\tif (options.primary) sql += \" PRIMARY KEY\";\n\t\tif (options.unique) sql += \" UNIQUE\";\n\t\treturn sql;\n\t}\n\n\tcompileModifyColumn(options: ColumnCompileOptions): string {\n\t\treturn this.compileColumn(options);\n\t}\n\n\tcompileTableBlueprint(\n\t\t_tableName: string,\n\t\tcolumns: ColumnCompileOptions[],\n\t\tconstraints: string[],\n\t): string {\n\t\tconst parts = [\n\t\t\t...columns.map((c) => this.compileColumn(c)),\n\t\t\t...constraints,\n\t\t];\n\t\treturn parts.join(\",\\n \");\n\t}\n\n\tcompileAddColumns(\n\t\t_tableName: string,\n\t\tcolumns: ColumnCompileOptions[],\n\t): string {\n\t\treturn `ADD COLUMN ${columns.map((c) => this.compileColumn(c)).join(\", ADD COLUMN \")}`;\n\t}\n\n\tcompileDropColumns(_tableName: string, columns: string[]): string {\n\t\treturn `DROP COLUMN ${columns.map((c) => this.wrapIdentifier(c)).join(\", DROP COLUMN \")}`;\n\t}\n\n\tcompileRenameColumn(_tableName: string, from: string, to: string): string {\n\t\treturn `RENAME COLUMN ${this.wrapIdentifier(from)} TO ${this.wrapIdentifier(to)}`;\n\t}\n\n\tcompileCreateTable(\n\t\ttableName: string,\n\t\tcolumns: ColumnCompileOptions[],\n\t\tconstraints: string[],\n\t): string {\n\t\tconst body = this.compileTableBlueprint(tableName, columns, constraints);\n\t\treturn `CREATE TABLE ${this.wrapIdentifier(tableName)} (\\n ${body}\\n)`;\n\t}\n\n\tcompileRenameTable(from: string, to: string): string {\n\t\treturn `ALTER TABLE ${this.wrapIdentifier(from)} RENAME TO ${this.wrapIdentifier(to)}`;\n\t}\n\n\tcompileDropTable(tableName: string): string {\n\t\treturn `DROP TABLE ${this.wrapIdentifier(tableName)}`;\n\t}\n\n\tcompileDropTableIfExists(tableName: string): string {\n\t\treturn `DROP TABLE IF EXISTS ${this.wrapIdentifier(tableName)}`;\n\t}\n\n\tcompileHasTable(_tableName: string): string {\n\t\treturn `SELECT COUNT(*) as \"count\" FROM \"sqlite_master\" WHERE \"type\" = 'table' AND \"name\" = ?`;\n\t}\n\n\tcompileHasColumn(_tableName: string, _columnName: string): string {\n\t\treturn `PRAGMA table_info(${this.wrapIdentifier(_tableName)})`;\n\t}\n\n\tcompileInsert(sql: string): string {\n\t\treturn sql;\n\t}\n\n\tprivate formatDefault(value: any): string {\n\t\tif (typeof value === \"string\") {\n\t\t\tif (value === \"CURRENT_TIMESTAMP\") return value;\n\t\t\treturn `'${value.replace(/'/g, \"''\")}'`;\n\t\t}\n\t\tif (value === null) return \"NULL\";\n\t\tif (typeof value === \"boolean\") return value ? \"1\" : \"0\";\n\t\treturn String(value);\n\t}\n}\n\nexport class PostgresqlDialect implements Dialect {\n\twrapIdentifier(identifier: string): string {\n\t\treturn `\"${identifier.replace(/\"/g, '\"\"')}\"`;\n\t}\n\n\tmakeParameter(index: number): string {\n\t\treturn `$${index + 1}`;\n\t}\n\n\tcompileLimitOffset(\n\t\tbindings: any[],\n\t\tlimit: number | null,\n\t\toffset: number | null,\n\t): string {\n\t\tif (limit === null && offset === null) return \"\";\n\t\tconst start = bindings.length;\n\t\tif (offset !== null) {\n\t\t\tbindings.push(limit ?? 0, offset);\n\t\t\treturn ` LIMIT $${start + 1} OFFSET $${start + 2}`;\n\t\t}\n\t\tbindings.push(limit);\n\t\treturn ` LIMIT $${start + 1}`;\n\t}\n\n\tcompileInsertReturning(\n\t\tsql: string,\n\t\t_bindings: any[],\n\t\tidColumn = \"id\",\n\t): string {\n\t\treturn `${sql} RETURNING ${this.wrapIdentifier(idColumn)}`;\n\t}\n\n\tcompileTruncate(tableName: string): string {\n\t\treturn `TRUNCATE TABLE ${this.wrapIdentifier(tableName)} RESTART IDENTITY CASCADE`;\n\t}\n\n\tcompileCreateMigrationsTable(): string {\n\t\treturn `CREATE TABLE IF NOT EXISTS \"migrations\" (\n \"id\" SERIAL PRIMARY KEY,\n \"name\" VARCHAR(255) NOT NULL,\n \"batch\" INTEGER NOT NULL,\n \"executed_at\" TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n)`;\n\t}\n\n\tprivate mapType(type: string, options: ColumnCompileOptions): string {\n\t\tswitch (type) {\n\t\t\tcase \"id\":\n\t\t\tcase \"increments\":\n\t\t\t\treturn \"SERIAL PRIMARY KEY\";\n\t\t\tcase \"bigIncrements\":\n\t\t\t\treturn \"BIGSERIAL PRIMARY KEY\";\n\t\t\tcase \"string\":\n\t\t\t\treturn `VARCHAR(${options.length ?? 255})`;\n\t\t\tcase \"text\":\n\t\t\t\treturn \"TEXT\";\n\t\t\tcase \"integer\":\n\t\t\t\treturn \"INTEGER\";\n\t\t\tcase \"bigInteger\":\n\t\t\t\treturn \"BIGINT\";\n\t\t\tcase \"tinyInteger\":\n\t\t\t\treturn \"SMALLINT\";\n\t\t\tcase \"smallInteger\":\n\t\t\t\treturn \"SMALLINT\";\n\t\t\tcase \"boolean\":\n\t\t\t\treturn \"BOOLEAN\";\n\t\t\tcase \"float\":\n\t\t\t\treturn \"REAL\";\n\t\t\tcase \"double\":\n\t\t\t\treturn \"DOUBLE PRECISION\";\n\t\t\tcase \"decimal\":\n\t\t\t\treturn `DECIMAL(${options.precision ?? 10},${options.scale ?? 0})`;\n\t\t\tcase \"date\":\n\t\t\t\treturn \"DATE\";\n\t\t\tcase \"datetime\":\n\t\t\t\treturn \"TIMESTAMP\";\n\t\t\tcase \"timestamp\":\n\t\t\t\treturn \"TIMESTAMP\";\n\t\t\tcase \"time\":\n\t\t\t\treturn \"TIME\";\n\t\t\tcase \"year\":\n\t\t\t\treturn \"INTEGER\";\n\t\t\tcase \"json\":\n\t\t\t\treturn \"JSON\";\n\t\t\tcase \"jsonb\":\n\t\t\t\treturn \"JSONB\";\n\t\t\tcase \"binary\":\n\t\t\t\treturn \"BYTEA\";\n\t\t\tcase \"uuid\":\n\t\t\t\treturn \"UUID\";\n\t\t\tcase \"foreignId\":\n\t\t\t\treturn \"INTEGER\";\n\t\t\tdefault:\n\t\t\t\treturn type;\n\t\t}\n\t}\n\n\tcompileColumn(options: ColumnCompileOptions): string {\n\t\tlet sql = `${this.wrapIdentifier(options.name)} ${this.mapType(options.type, options)}`;\n\t\tif (\n\t\t\t!options.nullable &&\n\t\t\toptions.type !== \"id\" &&\n\t\t\toptions.type !== \"increments\" &&\n\t\t\toptions.type !== \"bigIncrements\"\n\t\t)\n\t\t\tsql += \" NOT NULL\";\n\t\tif (options.nullable) sql += \" NULL\";\n\t\tif (options.defaultValue !== undefined && options.defaultValue !== null) {\n\t\t\tsql += ` DEFAULT ${this.formatDefault(options.defaultValue)}`;\n\t\t}\n\t\tif (\n\t\t\toptions.primary &&\n\t\t\toptions.type !== \"id\" &&\n\t\t\toptions.type !== \"increments\" &&\n\t\t\toptions.type !== \"bigIncrements\"\n\t\t)\n\t\t\tsql += \" PRIMARY KEY\";\n\t\tif (options.unique) sql += \" UNIQUE\";\n\t\tif (options.comment !== null)\n\t\t\tsql += ` -- ${options.comment.replace(/--/g, \"\")}`;\n\t\treturn sql;\n\t}\n\n\tcompileModifyColumn(options: ColumnCompileOptions): string {\n\t\treturn `ALTER COLUMN ${this.wrapIdentifier(options.name)} TYPE ${this.mapType(options.type, options)}`;\n\t}\n\n\tcompileTableBlueprint(\n\t\t_tableName: string,\n\t\tcolumns: ColumnCompileOptions[],\n\t\tconstraints: string[],\n\t): string {\n\t\tconst parts = [\n\t\t\t...columns.map((c) => this.compileColumn(c)),\n\t\t\t...constraints,\n\t\t];\n\t\treturn parts.join(\",\\n \");\n\t}\n\n\tcompileAddColumns(\n\t\t_tableName: string,\n\t\tcolumns: ColumnCompileOptions[],\n\t): string {\n\t\treturn `ADD COLUMN ${columns.map((c) => this.compileColumn(c)).join(\", ADD COLUMN \")}`;\n\t}\n\n\tcompileDropColumns(_tableName: string, columns: string[]): string {\n\t\treturn `DROP COLUMN ${columns.map((c) => this.wrapIdentifier(c)).join(\", DROP COLUMN \")}`;\n\t}\n\n\tcompileRenameColumn(_tableName: string, from: string, to: string): string {\n\t\treturn `RENAME COLUMN ${this.wrapIdentifier(from)} TO ${this.wrapIdentifier(to)}`;\n\t}\n\n\tcompileCreateTable(\n\t\ttableName: string,\n\t\tcolumns: ColumnCompileOptions[],\n\t\tconstraints: string[],\n\t): string {\n\t\tconst body = this.compileTableBlueprint(tableName, columns, constraints);\n\t\treturn `CREATE TABLE ${this.wrapIdentifier(tableName)} (\\n ${body}\\n)`;\n\t}\n\n\tcompileRenameTable(from: string, to: string): string {\n\t\treturn `ALTER TABLE ${this.wrapIdentifier(from)} RENAME TO ${this.wrapIdentifier(to)}`;\n\t}\n\n\tcompileDropTable(_tableName: string): string {\n\t\treturn `DROP TABLE IF EXISTS ${this.wrapIdentifier(_tableName)}`;\n\t}\n\n\tcompileDropTableIfExists(tableName: string): string {\n\t\treturn `DROP TABLE IF EXISTS ${this.wrapIdentifier(tableName)}`;\n\t}\n\n\tcompileHasTable(_tableName: string): string {\n\t\treturn `SELECT COUNT(*)::int as \"count\" FROM \"information_schema\".\"tables\" WHERE \"table_schema\" = 'public' AND \"table_name\" = $1`;\n\t}\n\n\tcompileHasColumn(_tableName: string, _columnName: string): string {\n\t\treturn `SELECT COUNT(*)::int as \"count\" FROM \"information_schema\".\"columns\" WHERE \"table_schema\" = 'public' AND \"table_name\" = $1 AND \"column_name\" = $2`;\n\t}\n\n\tcompileInsert(sql: string): string {\n\t\treturn sql;\n\t}\n\n\tprivate formatDefault(value: any): string {\n\t\tif (typeof value === \"string\") {\n\t\t\tif (value === \"CURRENT_TIMESTAMP\") return value;\n\t\t\treturn `'${value.replace(/'/g, \"''\")}'`;\n\t\t}\n\t\tif (value === null) return \"NULL\";\n\t\tif (typeof value === \"boolean\") return value ? \"true\" : \"false\";\n\t\treturn String(value);\n\t}\n}\n\nexport function createDialect(driver: string): Dialect {\n\tswitch (driver) {\n\t\tcase \"mysql\":\n\t\t\treturn new MysqlDialect();\n\t\tcase \"sqlite\":\n\t\t\treturn new SqliteDialect();\n\t\tcase \"postgresql\":\n\t\t\treturn new PostgresqlDialect();\n\t\tdefault:\n\t\t\treturn new MysqlDialect();\n\t}\n}\n","import {\n\ttype Dialect,\n\tMysqlDialect,\n\tPostgresqlDialect,\n\tSqliteDialect,\n} from \"./dialect.js\";\nexport type { Dialect }\nimport type { ConnectionConfig, QueryResult } from \"./types.js\";\n\nexport interface Driver {\n\tconnect(): Promise<void>;\n\tdisconnect(): Promise<void>;\n\tisConnected(): boolean;\n\traw(sql: string, bindings?: any[]): Promise<QueryResult>;\n\ttransaction<T>(callback: (driver: Driver) => Promise<T>): Promise<T>;\n\tgetDialect(): Dialect;\n\tgetDriver(): string;\n}\n\nexport async function createDriver(config: ConnectionConfig): Promise<Driver> {\n\tconst driverType = config.driver ?? \"mysql\";\n\n\tswitch (driverType) {\n\t\tcase \"mysql\":\n\t\t\treturn createMysqlDriver(config);\n\t\tcase \"postgresql\":\n\t\t\treturn createPostgresqlDriver(config);\n\t\tcase \"sqlite\":\n\t\t\treturn createSqliteDriver(config);\n\t\tdefault:\n\t\t\treturn createMysqlDriver(config);\n\t}\n}\n\nasync function createMysqlDriver(config: ConnectionConfig): Promise<Driver> {\n\tlet mysqlPackage: any;\n\ttry {\n\t\t// @ts-expect-error - mysql2 is an optional runtime dependency\n\t\tmysqlPackage = await import(\"mysql2/promise\");\n\t} catch {\n\t\tthrow new Error(\n\t\t\t\"MySQL driver (mysql2) is not installed. Run: npm install mysql2\",\n\t\t);\n\t}\n\n\tlet pool: any = null;\n\tconst dialect = new MysqlDialect();\n\n\tconst driver: Driver = {\n\t\tasync connect(): Promise<void> {\n\t\t\tpool = mysqlPackage.createPool({\n\t\t\t\thost: config.host ?? \"127.0.0.1\",\n\t\t\t\tport: config.port ?? 3306,\n\t\t\t\tuser: config.username,\n\t\t\t\tpassword: config.password,\n\t\t\t\tdatabase: config.database,\n\t\t\t\tcharset: config.charset ?? \"utf8mb4\",\n\t\t\t\twaitForConnections: true,\n\t\t\t\tconnectionLimit: 10,\n\t\t\t\tqueueLimit: 0,\n\t\t\t});\n\t\t\t// Verify connection\n\t\t\tconst conn = await pool.getConnection();\n\t\t\tconn.release();\n\t\t},\n\n\t\tasync disconnect(): Promise<void> {\n\t\t\tif (pool !== null) {\n\t\t\t\tawait pool.end();\n\t\t\t\tpool = null;\n\t\t\t}\n\t\t},\n\n\t\tisConnected(): boolean {\n\t\t\treturn pool !== null;\n\t\t},\n\n\t\tasync raw(sql: string, bindings?: any[]): Promise<QueryResult> {\n\t\t\tif (pool === null) {\n\t\t\t\tthrow new Error(\"Database not connected. Call connect() first.\");\n\t\t\t}\n\t\t\tconst [rows, fields] = await pool.execute(sql, bindings ?? []);\n\t\t\treturn { rows, fields };\n\t\t},\n\n\t\tasync transaction<T>(callback: (d: Driver) => Promise<T>): Promise<T> {\n\t\t\tif (pool === null) throw new Error(\"Database not connected.\");\n\t\t\tconst conn = await pool.getConnection();\n\t\t\ttry {\n\t\t\t\tawait conn.beginTransaction();\n\t\t\t\tconst trxDriver: Driver = {\n\t\t\t\t\t...driver,\n\t\t\t\t\tasync raw(sql: string, bindings?: any[]): Promise<QueryResult> {\n\t\t\t\t\t\tconst [rows, fields] = await conn.execute(sql, bindings ?? []);\n\t\t\t\t\t\treturn { rows, fields };\n\t\t\t\t\t},\n\t\t\t\t\tgetDialect(): Dialect { return dialect; },\n\t\t\t\t\tgetDriver(): string { return \"mysql\"; },\n\t\t\t\t};\n\t\t\t\tconst result = await callback(trxDriver);\n\t\t\t\tawait conn.commit();\n\t\t\t\treturn result;\n\t\t\t} catch (err) {\n\t\t\t\tawait conn.rollback();\n\t\t\t\tthrow err;\n\t\t\t} finally {\n\t\t\t\tconn.release();\n\t\t\t}\n\t\t},\n\n\t\tgetDialect(): Dialect {\n\t\t\treturn dialect;\n\t\t},\n\n\t\tgetDriver(): string {\n\t\t\treturn \"mysql\";\n\t\t},\n\t};\n\n\treturn driver;\n}\n\nasync function createPostgresqlDriver(\n\tconfig: ConnectionConfig,\n): Promise<Driver> {\n\tlet pgPackage: any;\n\ttry {\n\t\t// @ts-expect-error - pg is an optional runtime dependency\n\t\tpgPackage = await import(\"pg\");\n\t} catch {\n\t\tthrow new Error(\n\t\t\t\"PostgreSQL driver (pg) is not installed. Run: npm install pg\",\n\t\t);\n\t}\n\n\tlet pool: any = null;\n\tconst dialect = new PostgresqlDialect();\n\n\tconst driver: Driver = {\n\t\tasync connect(): Promise<void> {\n\t\t\tconst { Pool } = pgPackage;\n\t\t\tpool = new Pool({\n\t\t\t\thost: config.host ?? \"127.0.0.1\",\n\t\t\t\tport: config.port ?? 5432,\n\t\t\t\tuser: config.username,\n\t\t\t\tpassword: config.password,\n\t\t\t\tdatabase: config.database,\n\t\t\t});\n\t\t\tawait pool.query(\"SELECT 1\");\n\t\t},\n\n\t\tasync disconnect(): Promise<void> {\n\t\t\tif (pool !== null) {\n\t\t\t\tawait pool.end();\n\t\t\t\tpool = null;\n\t\t\t}\n\t\t},\n\n\t\tisConnected(): boolean {\n\t\t\treturn pool !== null;\n\t\t},\n\n\t\tasync raw(sql: string, bindings?: any[]): Promise<QueryResult> {\n\t\t\tif (pool === null) {\n\t\t\t\tthrow new Error(\"Database not connected. Call connect() first.\");\n\t\t\t}\n\t\t\tconst result = await pool.query(sql, bindings ?? []);\n\t\t\treturn { rows: result.rows };\n\t\t},\n\n\t\tasync transaction<T>(callback: (d: Driver) => Promise<T>): Promise<T> {\n\t\t\tif (pool === null) {\n\t\t\t\tthrow new Error(\"Database not connected. Call connect() first.\");\n\t\t\t}\n\t\t\tconst client = await pool.connect();\n\t\t\ttry {\n\t\t\t\tawait client.query(\"BEGIN\");\n\t\t\t\tconst trxDriver: Driver = {\n\t\t\t\t\t...driver,\n\t\t\t\t\tasync raw(sql: string, bindings?: any[]): Promise<QueryResult> {\n\t\t\t\t\t\tconst result = await client.query(sql, bindings ?? []);\n\t\t\t\t\t\treturn { rows: result.rows };\n\t\t\t\t\t},\n\t\t\t\t\tgetDialect(): Dialect {\n\t\t\t\t\t\treturn dialect;\n\t\t\t\t\t},\n\t\t\t\t\tgetDriver(): string {\n\t\t\t\t\t\treturn \"postgresql\";\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tconst result = await callback(trxDriver);\n\t\t\t\tawait client.query(\"COMMIT\");\n\t\t\t\treturn result;\n\t\t\t} catch (err) {\n\t\t\t\tawait client.query(\"ROLLBACK\");\n\t\t\t\tthrow err;\n\t\t\t} finally {\n\t\t\t\tclient.release();\n\t\t\t}\n\t\t},\n\n\t\tgetDialect(): Dialect {\n\t\t\treturn dialect;\n\t\t},\n\n\t\tgetDriver(): string {\n\t\t\treturn \"postgresql\";\n\t\t},\n\t};\n\n\treturn driver;\n}\n\nasync function createSqliteDriver(config: ConnectionConfig): Promise<Driver> {\n\tlet sqlitePackage: any;\n\ttry {\n\t\t// @ts-expect-error - better-sqlite3 is an optional runtime dependency\n\t\tsqlitePackage = await import(\"better-sqlite3\");\n\t} catch {\n\t\tthrow new Error(\n\t\t\t\"SQLite driver (better-sqlite3) is not installed. Run: npm install better-sqlite3\",\n\t\t);\n\t}\n\n\tlet db: any = null;\n\tlet connected = false;\n\tconst dialect = new SqliteDialect();\n\n\tconst driver: Driver = {\n\t\tasync connect(): Promise<void> {\n\t\t\tdb = new sqlitePackage(config.database);\n\t\t\tdb.pragma(\"journal_mode = WAL\");\n\t\t\tconnected = true;\n\t\t},\n\n\t\tasync disconnect(): Promise<void> {\n\t\t\tif (db !== null) {\n\t\t\t\tdb.close();\n\t\t\t\tdb = null;\n\t\t\t\tconnected = false;\n\t\t\t}\n\t\t},\n\n\t\tisConnected(): boolean {\n\t\t\treturn connected;\n\t\t},\n\n\t\tasync raw(sql: string, bindings?: any[]): Promise<QueryResult> {\n\t\t\tif (db === null) {\n\t\t\t\tthrow new Error(\"Database not connected. Call connect() first.\");\n\t\t\t}\n\t\t\tconst trimmedSQL = sql.trim().toUpperCase();\n\t\t\tconst isQuery =\n\t\t\t\ttrimmedSQL.startsWith(\"SELECT\") ||\n\t\t\t\ttrimmedSQL.startsWith(\"WITH\") ||\n\t\t\t\ttrimmedSQL.startsWith(\"PRAGMA\");\n\t\t\tconst stmt = db.prepare(sql);\n\t\t\tif (isQuery) {\n\t\t\t\tconst rows =\n\t\t\t\t\tbindings !== undefined && bindings.length > 0\n\t\t\t\t\t\t? stmt.all(...bindings)\n\t\t\t\t\t\t: stmt.all();\n\t\t\t\treturn { rows };\n\t\t\t}\n\t\t\tif (bindings !== undefined && bindings.length > 0) {\n\t\t\t\tstmt.run(...bindings);\n\t\t\t} else {\n\t\t\t\tstmt.run();\n\t\t\t}\n\t\t\treturn { rows: [] };\n\t\t},\n\n\t\tasync transaction<T>(callback: (d: Driver) => Promise<T>): Promise<T> {\n\t\t\tif (db === null) {\n\t\t\t\tthrow new Error(\"Database not connected. Call connect() first.\");\n\t\t\t}\n\t\t\tdb.exec(\"BEGIN\");\n\t\t\ttry {\n\t\t\t\tconst result = await callback(driver);\n\t\t\t\tdb.exec(\"COMMIT\");\n\t\t\t\treturn result;\n\t\t\t} catch (err) {\n\t\t\t\tdb.exec(\"ROLLBACK\");\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t},\n\n\t\tgetDialect(): Dialect {\n\t\t\treturn dialect;\n\t\t},\n\n\t\tgetDriver(): string {\n\t\t\treturn \"sqlite\";\n\t\t},\n\t};\n\n\treturn driver;\n}\n","import type { Dialect } from \"./dialect.js\";\nimport type { JoinType, OrderDirection, QueryRunner } from \"./types.js\";\n\ninterface WhereClause {\n\ttype:\n\t\t| \"basic\"\n\t\t| \"in\"\n\t\t| \"notIn\"\n\t\t| \"null\"\n\t\t| \"notNull\"\n\t\t| \"between\"\n\t\t| \"notBetween\"\n\t\t| \"like\"\n\t\t| \"nested\";\n\tcolumn?: string;\n\toperator?: string;\n\tvalue?: any;\n\tvalues?: any[];\n\tboolean: \"and\" | \"or\";\n\tnested?: WhereClause[];\n}\n\ninterface JoinClause {\n\ttable: string;\n\tfirst: string;\n\toperator: string;\n\tsecond: string;\n\ttype: JoinType;\n}\n\ninterface OrderByClause {\n\tcolumn: string;\n\tdirection: OrderDirection;\n}\n\ninterface HavingClause {\n\tcolumn: string;\n\toperator: string;\n\tvalue: any;\n}\n\nexport interface PaginatedResult<T = any> {\n\tdata: T[];\n\tcurrentPage: number;\n\tperPage: number;\n\ttotal: number;\n\tlastPage: number;\n\tfrom: number;\n\tto: number;\n\thasMore: boolean;\n\thasPrev: boolean;\n\tisEmpty: boolean;\n}\n\nexport class QueryBuilder {\n\tprivate connection: QueryRunner;\n\tprivate tableName: string;\n\tprivate columns: string[] = [\"*\"];\n\tprivate distinctEnabled = false;\n\tprivate wheres: WhereClause[] = [];\n\tprivate joins: JoinClause[] = [];\n\tprivate orderBys: OrderByClause[] = [];\n\tprivate havings: HavingClause[] = [];\n\tprivate groupBys: string[] = [];\n\tprivate limitValue: number | null = null;\n\tprivate offsetValue: number | null = null;\n\tprivate fromSubquery: string | null = null;\n\n\tconstructor(connection: QueryRunner, tableName: string) {\n\t\tthis.connection = connection;\n\t\tthis.tableName = tableName;\n\t}\n\n\tselect(...columns: string[]): this {\n\t\tthis.columns = columns.length > 0 ? columns : [\"*\"];\n\t\treturn this;\n\t}\n\n\taddSelect(...columns: string[]): this {\n\t\tif (this.columns[0] === \"*\") {\n\t\t\tthis.columns = columns;\n\t\t} else {\n\t\t\tthis.columns.push(...columns);\n\t\t}\n\t\treturn this;\n\t}\n\n\tdistinct(): this {\n\t\tthis.distinctEnabled = true;\n\t\treturn this;\n\t}\n\n\tfrom(table: string): this {\n\t\tthis.fromSubquery = table;\n\t\treturn this;\n\t}\n\n\twhere(column: string, operator: any, value?: any): this {\n\t\tif (value === undefined) {\n\t\t\tvalue = operator;\n\t\t\toperator = \"=\";\n\t\t}\n\t\tthis.wheres.push({\n\t\t\ttype: \"basic\",\n\t\t\tcolumn,\n\t\t\toperator: String(operator),\n\t\t\tvalue,\n\t\t\tboolean: \"and\",\n\t\t});\n\t\treturn this;\n\t}\n\n\torWhere(column: string, operator: any, value?: any): this {\n\t\tif (value === undefined) {\n\t\t\tvalue = operator;\n\t\t\toperator = \"=\";\n\t\t}\n\t\tthis.wheres.push({\n\t\t\ttype: \"basic\",\n\t\t\tcolumn,\n\t\t\toperator: String(operator),\n\t\t\tvalue,\n\t\t\tboolean: \"or\",\n\t\t});\n\t\treturn this;\n\t}\n\n\twhereIn(column: string, values: any[]): this {\n\t\tthis.wheres.push({ type: \"in\", column, values, boolean: \"and\" });\n\t\treturn this;\n\t}\n\n\twhereNotIn(column: string, values: any[]): this {\n\t\tthis.wheres.push({ type: \"notIn\", column, values, boolean: \"and\" });\n\t\treturn this;\n\t}\n\n\twhereNull(column: string): this {\n\t\tthis.wheres.push({ type: \"null\", column, boolean: \"and\" });\n\t\treturn this;\n\t}\n\n\twhereNotNull(column: string): this {\n\t\tthis.wheres.push({ type: \"notNull\", column, boolean: \"and\" });\n\t\treturn this;\n\t}\n\n\twhereBetween(column: string, range: [any, any]): this {\n\t\tthis.wheres.push({\n\t\t\ttype: \"between\",\n\t\t\tcolumn,\n\t\t\tvalues: range,\n\t\t\tboolean: \"and\",\n\t\t});\n\t\treturn this;\n\t}\n\n\twhereNotBetween(column: string, range: [any, any]): this {\n\t\tthis.wheres.push({\n\t\t\ttype: \"notBetween\",\n\t\t\tcolumn,\n\t\t\tvalues: range,\n\t\t\tboolean: \"and\",\n\t\t});\n\t\treturn this;\n\t}\n\n\twhereLike(column: string, pattern: string): this {\n\t\tthis.wheres.push({ type: \"like\", column, value: pattern, boolean: \"and\" });\n\t\treturn this;\n\t}\n\n\torWhereLike(column: string, pattern: string): this {\n\t\tthis.wheres.push({ type: \"like\", column, value: pattern, boolean: \"or\" });\n\t\treturn this;\n\t}\n\n\twhereGroup(callback: (query: QueryBuilder) => void): this {\n\t\tconst subQuery = new QueryBuilder(this.connection, this.tableName);\n\t\tcallback(subQuery);\n\t\tthis.wheres.push({\n\t\t\ttype: \"nested\",\n\t\t\tnested: subQuery.wheres,\n\t\t\tboolean: \"and\",\n\t\t});\n\t\treturn this;\n\t}\n\n\tjoin(\n\t\ttable: string,\n\t\tfirst: string,\n\t\toperator: string,\n\t\tsecond: string,\n\t\ttype: JoinType = \"inner\",\n\t): this {\n\t\tthis.joins.push({ table, first, operator, second, type });\n\t\treturn this;\n\t}\n\n\tleftJoin(\n\t\ttable: string,\n\t\tfirst: string,\n\t\toperator: string,\n\t\tsecond: string,\n\t): this {\n\t\treturn this.join(table, first, operator, second, \"left\");\n\t}\n\n\trightJoin(\n\t\ttable: string,\n\t\tfirst: string,\n\t\toperator: string,\n\t\tsecond: string,\n\t): this {\n\t\treturn this.join(table, first, operator, second, \"right\");\n\t}\n\n\tcrossJoin(\n\t\ttable: string,\n\t\tfirst: string,\n\t\toperator: string,\n\t\tsecond: string,\n\t): this {\n\t\treturn this.join(table, first, operator, second, \"cross\");\n\t}\n\n\torderBy(column: string, direction: OrderDirection = \"asc\"): this {\n\t\tthis.orderBys.push({ column, direction });\n\t\treturn this;\n\t}\n\n\torderByDesc(column: string): this {\n\t\treturn this.orderBy(column, \"desc\");\n\t}\n\n\tlatest(column = \"created_at\"): this {\n\t\treturn this.orderBy(column, \"desc\");\n\t}\n\n\toldest(column = \"created_at\"): this {\n\t\treturn this.orderBy(column, \"asc\");\n\t}\n\n\tinRandomOrder(): this {\n\t\tthis.orderBys.push({ column: \"RANDOM()\", direction: \"asc\" });\n\t\treturn this;\n\t}\n\n\tlimit(limit: number): this {\n\t\tthis.limitValue = limit;\n\t\treturn this;\n\t}\n\n\toffset(offset: number): this {\n\t\tthis.offsetValue = offset;\n\t\treturn this;\n\t}\n\n\tskip(skip: number): this {\n\t\treturn this.offset(skip);\n\t}\n\n\ttake(take: number): this {\n\t\treturn this.limit(take);\n\t}\n\n\tgroupBy(...columns: string[]): this {\n\t\tthis.groupBys.push(...columns);\n\t\treturn this;\n\t}\n\n\thaving(column: string, operator: string, value: any): this {\n\t\tthis.havings.push({ column, operator, value });\n\t\treturn this;\n\t}\n\n\tasync get<T = any>(): Promise<T[]> {\n\t\tconst { sql, bindings } = this.toSQL();\n\t\tconst result = await this.connection.raw(sql, bindings);\n\t\treturn result.rows as T[];\n\t}\n\n\tasync first<T = any>(): Promise<T | null> {\n\t\tconst qb = this.clone();\n\t\tqb.limitValue = 1;\n\t\tconst { sql, bindings } = qb.toSQL();\n\t\tconst result = await this.connection.raw(sql, bindings);\n\t\treturn (result.rows.length > 0 ? result.rows[0] : null) as T | null;\n\t}\n\n\tasync find<T = any>(id: number | string): Promise<T | null> {\n\t\treturn this.where(\"id\", id).first<T>();\n\t}\n\n\tasync pluck(column: string): Promise<any[]> {\n\t\tconst qb = this.clone();\n\t\tqb.columns = [column];\n\t\tconst { sql, bindings } = qb.toSQL();\n\t\tconst result = await this.connection.raw(sql, bindings);\n\t\treturn result.rows.map((row: any) => row[column]);\n\t}\n\n\tasync count(column = \"*\"): Promise<number> {\n\t\tconst qb = this.clone();\n\t\tqb.columns = [\n\t\t\t`COUNT(${column === \"*\" ? \"*\" : this.wrap(column)}) as aggregate`,\n\t\t];\n\t\tqb.orderBys = [];\n\t\tqb.limitValue = null;\n\t\tqb.offsetValue = null;\n\t\tconst { sql, bindings } = qb.toSQL();\n\t\tconst result = await this.connection.raw(sql, bindings);\n\t\tconst row = result.rows[0];\n\t\tif (!row) return 0;\n\t\treturn Number(row.aggregate ?? row.count ?? row[\"COUNT(*)\"] ?? 0);\n\t}\n\n\tasync exists(): Promise<boolean> {\n\t\tconst count = await this.count();\n\t\treturn count > 0;\n\t}\n\n\tasync doesntExist(): Promise<boolean> {\n\t\treturn !(await this.exists());\n\t}\n\n\tasync max(column: string): Promise<number | null> {\n\t\treturn this.aggregate(\"MAX\", column);\n\t}\n\n\tasync min(column: string): Promise<number | null> {\n\t\treturn this.aggregate(\"MIN\", column);\n\t}\n\n\tasync sum(column: string): Promise<number> {\n\t\tconst result = await this.aggregate(\"SUM\", column);\n\t\treturn result ?? 0;\n\t}\n\n\tasync avg(column: string): Promise<number> {\n\t\tconst result = await this.aggregate(\"AVG\", column);\n\t\treturn result ?? 0;\n\t}\n\n\tasync paginate(perPage = 15, page = 1): Promise<PaginatedResult> {\n\t\tconst countQb = this.clone();\n\t\tconst total = await countQb.count();\n\n\t\tconst lastPage = Math.max(1, Math.ceil(total / perPage));\n\t\tconst currentPage = Math.max(1, Math.min(page, lastPage));\n\t\tconst fromVal = (currentPage - 1) * perPage + 1;\n\t\tconst toVal = Math.min(currentPage * perPage, total);\n\n\t\tconst qb = this.clone();\n\t\tqb.limitValue = perPage;\n\t\tqb.offsetValue = (currentPage - 1) * perPage;\n\t\tconst { sql, bindings } = qb.toSQL();\n\t\tconst result = await this.connection.raw(sql, bindings);\n\n\t\treturn {\n\t\t\tdata: result.rows,\n\t\t\tcurrentPage,\n\t\t\tperPage,\n\t\t\ttotal,\n\t\t\tlastPage,\n\t\t\tfrom: total > 0 ? fromVal : 0,\n\t\t\tto: total > 0 ? toVal : 0,\n\t\t\thasMore: currentPage < lastPage,\n\t\t\thasPrev: currentPage > 1,\n\t\t\tisEmpty: total === 0,\n\t\t};\n\t}\n\n\tasync insert(data: Record<string, any>): Promise<number | string> {\n\t\tconst { sql, bindings } = this.compileInsert(data);\n\t\tconst driverType = this.connection.getDriver();\n\t\tconst dialect = this.connection.getDialect();\n\n\t\t// PostgreSQL: use RETURNING clause\n\t\tif (driverType === \"postgresql\") {\n\t\t\tconst returningSQL = dialect.compileInsertReturning(sql, bindings);\n\t\t\tconst result = await this.connection.raw(returningSQL, bindings);\n\t\t\treturn result.rows.length > 0 ? (Number(result.rows[0].id) ?? 0) : 0;\n\t\t}\n\n\t\tconst result = await this.connection.raw(sql, bindings);\n\n\t\t// MySQL: mysql2 returns [ResultSetHeader] with insertId\n\t\tif (driverType === \"mysql\") {\n\t\t\tconst header = result.rows;\n\t\t\t// mysql2 ResultSetHeader has insertId directly\n\t\t\tif (header && typeof header === 'object' && 'insertId' in header) {\n\t\t\t\treturn Number((header as any).insertId) ?? 0;\n\t\t\t}\n\t\t\t// Fallback: check rows[0]\n\t\t\tif (Array.isArray(result.rows) && result.rows.length > 0) {\n\t\t\t\tconst row = result.rows[0];\n\t\t\t\treturn Number(row?.insertId ?? row?.id ?? 0);\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\n\t\t// SQLite: last_insert_rowid()\n\t\tif (driverType === \"sqlite\") {\n\t\t\tconst lastIdResult = await this.connection.raw(\"SELECT last_insert_rowid() as id\");\n\t\t\tif (lastIdResult.rows.length > 0) {\n\t\t\t\treturn Number(lastIdResult.rows[0].id) ?? 0;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Fallback: return 0\n\t\treturn 0;\n\t}\n\n\tasync insertGetId(data: Record<string, any>): Promise<number | string> {\n\t\treturn this.insert(data);\n\t}\n\n\tasync insertReturning(data: Record<string, any>): Promise<any> {\n\t\tconst { sql, bindings } = this.compileInsert(data);\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst returningSQL = dialect.compileInsertReturning(sql, bindings);\n\t\tconst result = await this.connection.raw(returningSQL, bindings);\n\t\treturn result.rows.length > 0 ? result.rows[0] : null;\n\t}\n\n\tasync update(data: Record<string, any>): Promise<number> {\n\t\tconst { sql, bindings } = this.compileUpdate(data);\n\t\tconst result = await this.connection.raw(sql, bindings);\n\t\tconst rows = result.rows;\n\t\tif (rows.length > 0) {\n\t\t\tconst info = rows[0];\n\t\t\treturn info.affectedRows ?? info.changes ?? rows.length;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tasync delete(): Promise<number> {\n\t\tconst { sql, bindings } = this.compileDelete();\n\t\tconst result = await this.connection.raw(sql, bindings);\n\t\tconst rows = result.rows;\n\t\tif (rows.length > 0) {\n\t\t\tconst info = rows[0];\n\t\t\treturn info.affectedRows ?? info.changes ?? rows.length;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tasync truncate(): Promise<void> {\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst sql = dialect.compileTruncate(this.tableName);\n\t\tawait this.connection.raw(sql);\n\t}\n\n\tasync chunk(\n\t\tsize: number,\n\t\tcallback: (rows: any[]) => Promise<void>,\n\t): Promise<void> {\n\t\tlet page = 1;\n\t\tlet hasMore = true;\n\n\t\twhile (hasMore) {\n\t\t\tconst qb = this.clone();\n\t\t\tqb.limitValue = size;\n\t\t\tqb.offsetValue = (page - 1) * size;\n\t\t\tconst rows = await qb.get();\n\n\t\t\tif (rows.length === 0) {\n\t\t\t\thasMore = false;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tawait callback(rows);\n\n\t\t\tif (rows.length < size) {\n\t\t\t\thasMore = false;\n\t\t\t}\n\n\t\t\tpage++;\n\t\t}\n\t}\n\n\tclone(): QueryBuilder {\n\t\tconst qb = new QueryBuilder(this.connection, this.tableName);\n\t\tqb.columns = [...this.columns];\n\t\tqb.distinctEnabled = this.distinctEnabled;\n\t\tqb.wheres = this.cloneWheres(this.wheres);\n\t\tqb.joins = [...this.joins];\n\t\tqb.orderBys = [...this.orderBys];\n\t\tqb.havings = [...this.havings];\n\t\tqb.groupBys = [...this.groupBys];\n\t\tqb.limitValue = this.limitValue;\n\t\tqb.offsetValue = this.offsetValue;\n\t\tqb.fromSubquery = this.fromSubquery;\n\t\treturn qb;\n\t}\n\n\ttoSQL(): { sql: string; bindings: any[] } {\n\t\tconst bindings: any[] = [];\n\t\tconst dialect = this.connection.getDialect();\n\n\t\tconst wrappedColumns = this.columns\n\t\t\t.map((c) =>\n\t\t\t\tc.includes(\"(\") || c === \"*\" || c.includes(\" as \") || c.includes(\" AS \")\n\t\t\t\t\t? c\n\t\t\t\t\t: dialect.wrapIdentifier(c),\n\t\t\t)\n\t\t\t.join(\", \");\n\n\t\tconst from = this.fromSubquery ?? this.tableName;\n\t\tconst wrappedFrom = this.fromSubquery ?? dialect.wrapIdentifier(from);\n\n\t\tlet sql = this.distinctEnabled\n\t\t\t? `SELECT DISTINCT ${wrappedColumns} FROM ${wrappedFrom}`\n\t\t\t: `SELECT ${wrappedColumns} FROM ${wrappedFrom}`;\n\n\t\tconst joinSQL = this.compileJoins(dialect);\n\t\tif (joinSQL) sql += joinSQL;\n\n\t\tconst whereSQL = this.compileWheres(dialect, bindings);\n\t\tif (whereSQL) sql += whereSQL;\n\n\t\tif (this.groupBys.length > 0) {\n\t\t\tsql += ` GROUP BY ${this.groupBys.map((c) => dialect.wrapIdentifier(c)).join(\", \")}`;\n\t\t}\n\n\t\tconst havingSQL = this.compileHavings(dialect, bindings);\n\t\tif (havingSQL) sql += havingSQL;\n\n\t\tif (this.orderBys.length > 0) {\n\t\t\tsql += ` ORDER BY ${this.orderBys\n\t\t\t\t.map((o) => {\n\t\t\t\t\tconst col =\n\t\t\t\t\t\to.column === \"RANDOM()\"\n\t\t\t\t\t\t\t? o.column\n\t\t\t\t\t\t\t: dialect.wrapIdentifier(o.column);\n\t\t\t\t\treturn `${col} ${o.direction.toUpperCase()}`;\n\t\t\t\t})\n\t\t\t\t.join(\", \")}`;\n\t\t}\n\n\t\tconst limitOffsetSQL = dialect.compileLimitOffset(\n\t\t\tbindings,\n\t\t\tthis.limitValue,\n\t\t\tthis.offsetValue,\n\t\t);\n\t\tif (limitOffsetSQL) sql += limitOffsetSQL;\n\n\t\treturn { sql, bindings };\n\t}\n\n\tdd(): string {\n\t\tconst { sql, bindings } = this.toSQL();\n\t\tconst output = `SQL: ${sql}\\nBindings: ${JSON.stringify(bindings)}`;\n\t\tconsole.error(output);\n\t\treturn output;\n\t}\n\n\tprivate compileJoins(dialect: Dialect): string {\n\t\tif (this.joins.length === 0) return \"\";\n\n\t\treturn (\n\t\t\t\" \" +\n\t\t\tthis.joins\n\t\t\t\t.map((j) => {\n\t\t\t\t\tconst type = j.type.toUpperCase();\n\t\t\t\t\treturn `${type} JOIN ${dialect.wrapIdentifier(j.table)} ON ${dialect.wrapIdentifier(j.first)} ${j.operator} ${this.wrap(j.second)}`;\n\t\t\t\t})\n\t\t\t\t.join(\" \")\n\t\t);\n\t}\n\n\tprivate compileWheres(dialect: Dialect, bindings: any[]): string {\n\t\tif (this.wheres.length === 0) return \"\";\n\n\t\tconst sql = this.compileWhereArray(this.wheres, dialect, bindings);\n\t\treturn sql ? ` WHERE ${sql}` : \"\";\n\t}\n\n\tprivate compileWhereArray(\n\t\twheres: WhereClause[],\n\t\tdialect: Dialect,\n\t\tbindings: any[],\n\t): string {\n\t\tif (wheres.length === 0) return \"\";\n\t\tconst parts: string[] = [];\n\t\tfor (const w of wheres) {\n\t\t\tconst sql = this.compileSingleWhere(w, dialect, bindings);\n\t\t\tif (sql !== null) parts.push(sql);\n\t\t}\n\t\tif (parts.length === 0) return \"\";\n\t\t// Join with the boolean from each WHERE clause (respecting \"and\"/\"or\")\n\t\treturn parts.reduce((acc, part, i) => {\n\t\t\tif (i === 0) return part;\n\t\t\tconst bool = wheres[i]?.boolean ?? \"and\";\n\t\t\treturn `${acc} ${bool.toUpperCase()} ${part}`;\n\t\t}, \"\");\n\t}\n\n\tprivate compileSingleWhere(\n\t\tw: WhereClause,\n\t\tdialect: Dialect,\n\t\tbindings: any[],\n\t): string | null {\n\t\tconst col = w.column ? dialect.wrapIdentifier(w.column) : \"\";\n\n\t\tswitch (w.type) {\n\t\t\tcase \"basic\": {\n\t\t\t\tbindings.push(w.value);\n\t\t\t\tconst operator = w.operator === \"=\" ? \"=\" : w.operator;\n\t\t\t\treturn `${col} ${operator} ${dialect.makeParameter(bindings.length - 1)}`;\n\t\t\t}\n\t\t\tcase \"in\": {\n\t\t\t\tconst placeholders = w\n\t\t\t\t\t.values!.map((v: any) => {\n\t\t\t\t\t\tbindings.push(v);\n\t\t\t\t\t\treturn dialect.makeParameter(bindings.length - 1);\n\t\t\t\t\t})\n\t\t\t\t\t.join(\", \");\n\t\t\t\treturn `${col} IN (${placeholders})`;\n\t\t\t}\n\t\t\tcase \"notIn\": {\n\t\t\t\tconst placeholders = w\n\t\t\t\t\t.values!.map((v: any) => {\n\t\t\t\t\t\tbindings.push(v);\n\t\t\t\t\t\treturn dialect.makeParameter(bindings.length - 1);\n\t\t\t\t\t})\n\t\t\t\t\t.join(\", \");\n\t\t\t\treturn `${col} NOT IN (${placeholders})`;\n\t\t\t}\n\t\t\tcase \"null\":\n\t\t\t\treturn `${col} IS NULL`;\n\t\t\tcase \"notNull\":\n\t\t\t\treturn `${col} IS NOT NULL`;\n\t\t\tcase \"between\": {\n\t\t\t\tbindings.push(w.values![0], w.values![1]);\n\t\t\t\treturn `${col} BETWEEN ${dialect.makeParameter(bindings.length - 2)} AND ${dialect.makeParameter(bindings.length - 1)}`;\n\t\t\t}\n\t\t\tcase \"notBetween\": {\n\t\t\t\tbindings.push(w.values![0], w.values![1]);\n\t\t\t\treturn `${col} NOT BETWEEN ${dialect.makeParameter(bindings.length - 2)} AND ${dialect.makeParameter(bindings.length - 1)}`;\n\t\t\t}\n\t\t\tcase \"like\": {\n\t\t\t\tbindings.push(w.value);\n\t\t\t\treturn `${col} LIKE ${dialect.makeParameter(bindings.length - 1)}`;\n\t\t\t}\n\t\t\tcase \"nested\": {\n\t\t\t\tconst nestedSQL = this.compileNestedWhere(w.nested!, dialect, bindings);\n\t\t\t\treturn nestedSQL ? `(${nestedSQL})` : null;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate compileNestedWhere(\n\t\twheres: WhereClause[],\n\t\tdialect: Dialect,\n\t\tbindings: any[],\n\t): string {\n\t\tif (wheres.length === 0) return \"\";\n\t\tconst parts: string[] = [];\n\t\tfor (const w of wheres) {\n\t\t\tconst sql = this.compileSingleWhere(w, dialect, bindings);\n\t\t\tif (sql !== null) parts.push(sql);\n\t\t}\n\t\tif (parts.length === 0) return \"\";\n\t\treturn parts.reduce((acc, part, i) => {\n\t\t\tif (i === 0) return part;\n\t\t\tconst bool = wheres[i]?.boolean ?? \"and\";\n\t\t\treturn `${acc} ${bool.toUpperCase()} ${part}`;\n\t\t}, \"\");\n\t}\n\n\tprivate compileHavings(dialect: Dialect, bindings: any[]): string {\n\t\tif (this.havings.length === 0) return \"\";\n\n\t\tconst parts = this.havings.map((h) => {\n\t\t\tbindings.push(h.value);\n\t\t\treturn `${dialect.wrapIdentifier(h.column)} ${h.operator} ${dialect.makeParameter(bindings.length - 1)}`;\n\t\t});\n\n\t\treturn ` HAVING ${parts.join(\" AND \")}`;\n\t}\n\n\tprivate compileInsert(data: Record<string, any>): {\n\t\tsql: string;\n\t\tbindings: any[];\n\t} {\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst columns = Object.keys(data);\n\t\tconst values = Object.values(data);\n\t\tconst bindings: any[] = [];\n\n\t\tconst placeholders = values\n\t\t\t.map((v: any) => {\n\t\t\t\tbindings.push(v);\n\t\t\t\treturn dialect.makeParameter(bindings.length - 1);\n\t\t\t})\n\t\t\t.join(\", \");\n\n\t\tconst sql = `INSERT INTO ${dialect.wrapIdentifier(this.tableName)} (${columns.map((c) => dialect.wrapIdentifier(c)).join(\", \")}) VALUES (${placeholders})`;\n\t\treturn { sql, bindings };\n\t}\n\n\tprivate compileUpdate(data: Record<string, any>): {\n\t\tsql: string;\n\t\tbindings: any[];\n\t} {\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst bindings: any[] = [];\n\n\t\tconst sets = Object.entries(data).map(([key, value]) => {\n\t\t\tbindings.push(value);\n\t\t\treturn `${dialect.wrapIdentifier(key)} = ${dialect.makeParameter(bindings.length - 1)}`;\n\t\t});\n\n\t\tlet sql = `UPDATE ${dialect.wrapIdentifier(this.tableName)} SET ${sets.join(\", \")}`;\n\n\t\tconst whereSQL = this.compileWheres(dialect, bindings);\n\t\tif (whereSQL) sql += whereSQL;\n\n\t\tif (this.orderBys.length > 0) {\n\t\t\tsql += ` ORDER BY ${this.orderBys\n\t\t\t\t.map((o) => {\n\t\t\t\t\tconst col =\n\t\t\t\t\t\to.column === \"RANDOM()\"\n\t\t\t\t\t\t\t? o.column\n\t\t\t\t\t\t\t: dialect.wrapIdentifier(o.column);\n\t\t\t\t\treturn `${col} ${o.direction.toUpperCase()}`;\n\t\t\t\t})\n\t\t\t\t.join(\", \")}`;\n\t\t}\n\n\t\tconst limitOffsetSQL = dialect.compileLimitOffset(\n\t\t\tbindings,\n\t\t\tthis.limitValue,\n\t\t\tthis.offsetValue,\n\t\t);\n\t\tif (limitOffsetSQL) sql += limitOffsetSQL;\n\n\t\treturn { sql, bindings };\n\t}\n\n\tprivate compileDelete(): { sql: string; bindings: any[] } {\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst bindings: any[] = [];\n\n\t\tlet sql = `DELETE FROM ${dialect.wrapIdentifier(this.tableName)}`;\n\n\t\tconst whereSQL = this.compileWheres(dialect, bindings);\n\t\tif (whereSQL) sql += whereSQL;\n\n\t\tif (this.orderBys.length > 0) {\n\t\t\tsql += ` ORDER BY ${this.orderBys\n\t\t\t\t.map((o) => {\n\t\t\t\t\tconst col =\n\t\t\t\t\t\to.column === \"RANDOM()\"\n\t\t\t\t\t\t\t? o.column\n\t\t\t\t\t\t\t: dialect.wrapIdentifier(o.column);\n\t\t\t\t\treturn `${col} ${o.direction.toUpperCase()}`;\n\t\t\t\t})\n\t\t\t\t.join(\", \")}`;\n\t\t}\n\n\t\tconst limitOffsetSQL = dialect.compileLimitOffset(\n\t\t\tbindings,\n\t\t\tthis.limitValue,\n\t\t\tthis.offsetValue,\n\t\t);\n\t\tif (limitOffsetSQL) sql += limitOffsetSQL;\n\n\t\treturn { sql, bindings };\n\t}\n\n\tprivate async aggregate(fn: string, column: string): Promise<number | null> {\n\t\tconst qb = this.clone();\n\t\tqb.columns = [`${fn}(${this.wrap(column)}) as aggregate`];\n\t\tqb.orderBys = [];\n\t\tqb.limitValue = null;\n\t\tqb.offsetValue = null;\n\t\tconst { sql, bindings } = qb.toSQL();\n\t\tconst result = await this.connection.raw(sql, bindings);\n\t\tconst row = result.rows[0];\n\t\tif (!row) return null;\n\t\tconst val = row.aggregate ?? row[`${fn}(${column})`];\n\t\treturn val !== null && val !== undefined ? Number(val) : null;\n\t}\n\n\tprivate cloneWheres(wheres: WhereClause[]): WhereClause[] {\n\t\treturn wheres.map((w) => ({\n\t\t\t...w,\n\t\t\tvalues: w.values ? [...w.values] : undefined,\n\t\t\tnested: w.nested ? this.cloneWheres(w.nested) : undefined,\n\t\t}));\n\t}\n\n\tprivate wrap(identifier: string): string {\n\t\tif (identifier === \"*\" || identifier.includes(\"(\")) return identifier;\n\t\tconst dialect = this.connection.getDialect();\n\t\treturn dialect.wrapIdentifier(identifier);\n\t}\n}\n","import type { DatabaseConnection } from \"./connection.js\";\nimport type { ColumnCompileOptions, Dialect } from \"./dialect.js\";\nimport type { QueryResult } from \"./types.js\";\n\nexport interface MigrationDefinition {\n\tname: string;\n\tup: (schema: SchemaBuilder) => Promise<void>;\n\tdown: (schema: SchemaBuilder) => Promise<void>;\n}\n\nexport interface MigrationStatusRow {\n\tname: string;\n\tbatch: number;\n\texecutedAt: string;\n}\n\nexport class SchemaBuilder {\n\tprivate connection: DatabaseConnection;\n\n\tconstructor(connection: DatabaseConnection) {\n\t\tthis.connection = connection;\n\t}\n\n\tasync createTable(\n\t\ttableName: string,\n\t\tcallback: (table: TableBlueprint) => void,\n\t): Promise<void> {\n\t\tconst blueprint = new TableBlueprint(this.connection, \"create\");\n\t\tcallback(blueprint);\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst columns = blueprint.compileColumns();\n\t\tconst constraints = blueprint.compileConstraints(dialect);\n\t\tconst sql = dialect.compileCreateTable(tableName, columns, constraints);\n\t\tawait this.connection.raw(sql);\n\t}\n\n\tasync dropTable(tableName: string): Promise<void> {\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst sql = dialect.compileDropTable(tableName);\n\t\tawait this.connection.raw(sql);\n\t}\n\n\tasync dropTableIfExists(tableName: string): Promise<void> {\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst sql = dialect.compileDropTableIfExists(tableName);\n\t\tawait this.connection.raw(sql);\n\t}\n\n\tasync renameTable(from: string, to: string): Promise<void> {\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst sql = dialect.compileRenameTable(from, to);\n\t\tawait this.connection.raw(sql);\n\t}\n\n\tasync alterTable(\n\t\ttableName: string,\n\t\tcallback: (table: TableBlueprint) => void,\n\t): Promise<void> {\n\t\tconst blueprint = new TableBlueprint(this.connection, \"alter\");\n\t\tcallback(blueprint);\n\t\tconst dialect = this.connection.getDialect();\n\n\t\tif (blueprint.droppedColumns.length > 0) {\n\t\t\tconst dropSQL = dialect.compileDropColumns(\n\t\t\t\ttableName,\n\t\t\t\tblueprint.droppedColumns,\n\t\t\t);\n\t\t\tawait this.connection.raw(\n\t\t\t\t`ALTER TABLE ${dialect.wrapIdentifier(tableName)} ${dropSQL}`,\n\t\t\t);\n\t\t}\n\n\t\tif (blueprint.renamedColumns.length > 0) {\n\t\t\tfor (const { from, to } of blueprint.renamedColumns) {\n\t\t\t\tconst renameSQL = dialect.compileRenameColumn(tableName, from, to);\n\t\t\t\tawait this.connection.raw(\n\t\t\t\t\t`ALTER TABLE ${dialect.wrapIdentifier(tableName)} ${renameSQL}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst compiledColumns = blueprint.compileColumnDefinitions(dialect);\n\t\tif (compiledColumns.length > 0) {\n\t\t\tfor (const colSQL of compiledColumns) {\n\t\t\t\tawait this.connection.raw(\n\t\t\t\t\t`ALTER TABLE ${dialect.wrapIdentifier(tableName)} ${colSQL}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync hasTable(tableName: string): Promise<boolean> {\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst sql = dialect.compileHasTable(tableName);\n\t\tconst result = await this.connection.raw(sql, [tableName]);\n\t\treturn this.parseCount(result) > 0;\n\t}\n\n\tasync hasColumn(tableName: string, columnName: string): Promise<boolean> {\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst driver = this.connection.getDriver();\n\n\t\tif (driver === \"sqlite\") {\n\t\t\tconst sql = dialect.compileHasColumn(tableName, columnName);\n\t\t\tconst result = await this.connection.raw(sql);\n\t\t\treturn result.rows.some((row: any) => row.name === columnName);\n\t\t}\n\n\t\tconst sql = dialect.compileHasColumn(tableName, columnName);\n\t\tconst result = await this.connection.raw(sql, [tableName, columnName]);\n\t\treturn this.parseCount(result) > 0;\n\t}\n\n\tprivate parseCount(result: QueryResult): number {\n\t\tif (result.rows.length === 0) return 0;\n\t\tconst row = result.rows[0];\n\t\treturn Number(row.count ?? row.Count ?? 0);\n\t}\n}\n\nexport type BlueprintMode = \"create\" | \"alter\";\n\nexport class TableBlueprint {\n\tprivate mode: BlueprintMode;\n\tprivate columns: ColumnDefinition[] = [];\n\tprivate primaryKeys: string[] = [];\n\tprivate uniqueKeys: string[][] = [];\n\tprivate indexKeys: string[][] = [];\n\tprivate foreignKeys: ForeignKeyDef[] = [];\n\tdroppedColumns: string[] = [];\n\trenamedColumns: { from: string; to: string }[] = [];\n\n\tconstructor(_connection: DatabaseConnection, mode: BlueprintMode) {\n\t\tthis.mode = mode;\n\t}\n\n\tid(name = \"id\"): ColumnDefinition {\n\t\tconst col = this.addColumn(\"id\", name);\n\t\tcol.autoIncrement();\n\t\tcol.unsigned();\n\t\treturn col;\n\t}\n\n\tincrements(name = \"id\"): ColumnDefinition {\n\t\tconst col = this.addColumn(\"increments\", name);\n\t\tcol.autoIncrement();\n\t\tcol.unsigned();\n\t\treturn col;\n\t}\n\n\tbigIncrements(name = \"id\"): ColumnDefinition {\n\t\tconst col = this.addColumn(\"bigIncrements\", name);\n\t\tcol.autoIncrement();\n\t\tcol.unsigned();\n\t\treturn col;\n\t}\n\n\tstring(name: string, length = 255): ColumnDefinition {\n\t\tconst col = this.addColumn(\"string\", name);\n\t\tcol.setLength(length);\n\t\treturn col;\n\t}\n\n\ttext(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"text\", name);\n\t}\n\n\tinteger(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"integer\", name);\n\t}\n\n\tbigInteger(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"bigInteger\", name);\n\t}\n\n\ttinyInteger(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"tinyInteger\", name);\n\t}\n\n\tsmallInteger(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"smallInteger\", name);\n\t}\n\n\tboolean(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"boolean\", name);\n\t}\n\n\tfloat(name: string, _precision?: number): ColumnDefinition {\n\t\tconst col = this.addColumn(\"float\", name);\n\t\tif (_precision !== undefined) col.setPrecision(_precision);\n\t\treturn col;\n\t}\n\n\tdouble(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"double\", name);\n\t}\n\n\tdecimal(name: string, precision = 10, scale = 0): ColumnDefinition {\n\t\tconst col = this.addColumn(\"decimal\", name);\n\t\tcol.setPrecision(precision);\n\t\tcol.setScale(scale);\n\t\treturn col;\n\t}\n\n\tdate(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"date\", name);\n\t}\n\n\tdatetime(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"datetime\", name);\n\t}\n\n\ttimestamp(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"timestamp\", name);\n\t}\n\n\ttime(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"time\", name);\n\t}\n\n\tyear(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"year\", name);\n\t}\n\n\tjson(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"json\", name);\n\t}\n\n\tjsonb(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"jsonb\", name);\n\t}\n\n\tbinary(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"binary\", name);\n\t}\n\n\tuuid(name = \"uuid\"): ColumnDefinition {\n\t\treturn this.addColumn(\"uuid\", name);\n\t}\n\n\tenum(name: string, values: string[]): ColumnDefinition {\n\t\tconst col = this.addColumn(\"enum\", name);\n\t\tcol.setValues(values);\n\t\treturn col;\n\t}\n\n\tforeignId(name: string): ColumnDefinition {\n\t\tconst col = this.addColumn(\"foreignId\", name);\n\t\tcol.unsigned();\n\t\treturn col;\n\t}\n\n\tprimary(...columns: string[]): void {\n\t\tthis.primaryKeys.push(...columns);\n\t}\n\n\tunique(...columns: string[]): void {\n\t\tthis.uniqueKeys.push(columns);\n\t}\n\n\tindex(...columns: string[]): void {\n\t\tthis.indexKeys.push(columns);\n\t}\n\n\tforeign(column: string): ForeignKeyDefinition {\n\t\tconst fk: ForeignKeyDef = {\n\t\t\tcolumn,\n\t\t\treferences: \"\",\n\t\t\ton: \"\",\n\t\t\tonDelete: null,\n\t\t\tonUpdate: null,\n\t\t};\n\t\tthis.foreignKeys.push(fk);\n\t\treturn new ForeignKeyDefinition(fk);\n\t}\n\n\ttimestamps(): void {\n\t\tthis.timestamp(\"created_at\").nullable();\n\t\tthis.timestamp(\"updated_at\").nullable();\n\t}\n\n\tsoftDeletes(): void {\n\t\tthis.timestamp(\"deleted_at\").nullable();\n\t}\n\n\trememberToken(): void {\n\t\tthis.string(\"remember_token\", 100).nullable();\n\t}\n\n\tdropColumn(column: string): void {\n\t\tthis.droppedColumns.push(column);\n\t}\n\n\trenameColumn(from: string, to: string): void {\n\t\tthis.renamedColumns.push({ from, to });\n\t}\n\n\tdropPrimary(): void {\n\t\tthis.primaryKeys = [];\n\t}\n\n\tdropUnique(_indexName?: string): void {\n\t\tthis.uniqueKeys = [];\n\t}\n\n\tdropIndex(_indexName?: string): void {\n\t\tthis.indexKeys = [];\n\t}\n\n\tdropForeign(_indexName?: string): void {\n\t\tthis.foreignKeys = [];\n\t}\n\n\tdropTimestamps(): void {\n\t\tthis.droppedColumns.push(\"created_at\", \"updated_at\");\n\t}\n\n\tdropSoftDeletes(): void {\n\t\tthis.droppedColumns.push(\"deleted_at\");\n\t}\n\n\tdropRememberToken(): void {\n\t\tthis.droppedColumns.push(\"remember_token\");\n\t}\n\n\tcompileColumns(): ColumnCompileOptions[] {\n\t\treturn this.columns\n\t\t\t.filter((c) => this.mode === \"create\" || c.isNew)\n\t\t\t.map((c) => c.compile());\n\t}\n\n\tcompileConstraints(dialect: Dialect): string[] {\n\t\tconst constraints: string[] = [];\n\t\tconst wrap = (name: string) => dialect.wrapIdentifier(name);\n\n\t\tfor (const pk of this.primaryKeys) {\n\t\t\tconstraints.push(`PRIMARY KEY (${wrap(pk)})`);\n\t\t}\n\n\t\tfor (const uk of this.uniqueKeys) {\n\t\t\tconstraints.push(`UNIQUE (${uk.map((c) => wrap(c)).join(\", \")})`);\n\t\t}\n\n\t\tfor (const ik of this.indexKeys) {\n\t\t\tconstraints.push(`INDEX (${ik.map((c) => wrap(c)).join(\", \")})`);\n\t\t}\n\n\t\tfor (const fk of this.foreignKeys) {\n\t\t\tlet fkSQL = `FOREIGN KEY (${wrap(fk.column)}) REFERENCES ${wrap(fk.on)} (${wrap(fk.references)})`;\n\t\t\tif (fk.onDelete) fkSQL += ` ON DELETE ${fk.onDelete}`;\n\t\t\tif (fk.onUpdate) fkSQL += ` ON UPDATE ${fk.onUpdate}`;\n\t\t\tconstraints.push(fkSQL);\n\t\t}\n\n\t\treturn constraints;\n\t}\n\n\tcompileColumnDefinitions(dialect: Dialect): string[] {\n\t\treturn this.columns\n\t\t\t.filter((c) => c.isNew && this.mode === \"alter\")\n\t\t\t.map((c) => dialect.compileAddColumns(\"\", [c.compile()]));\n\t}\n\n\tprivate addColumn(type: string, name: string): ColumnDefinition {\n\t\tconst col = new ColumnDefinition(type, name);\n\t\tthis.columns.push(col);\n\t\treturn col;\n\t}\n}\n\nexport class ColumnDefinition {\n\tprivate type: string;\n\tprivate name: string;\n\tprivate isNullable = false;\n\tprivate defaultValue: any = undefined;\n\tprivate isUnsigned = false;\n\tprivate isUnique = false;\n\tprivate isPrimary = false;\n\tprivate isIndex = false;\n\tprivate commentText: string | null = null;\n\tprivate afterColumn: string | null = null;\n\tprivate isFirst = false;\n\tprivate isAutoIncrement = false;\n\tprivate precisionValue: number | null = null;\n\tprivate scaleValue: number | null = null;\n\tprivate lengthValue: number | null = null;\n\tprivate enumValues: string[] | null = null;\n\tprivate isForeignId = false;\n\tisNew = true;\n\n\tconstructor(type: string, name: string) {\n\t\tthis.type = type;\n\t\tthis.name = name;\n\t}\n\n\tnullable(): this {\n\t\tthis.isNullable = true;\n\t\treturn this;\n\t}\n\n\tdefault(value: any): this {\n\t\tthis.defaultValue = value;\n\t\treturn this;\n\t}\n\n\tunsigned(): this {\n\t\tthis.isUnsigned = true;\n\t\treturn this;\n\t}\n\n\tunique(): this {\n\t\tthis.isUnique = true;\n\t\treturn this;\n\t}\n\n\tprimary(): this {\n\t\tthis.isPrimary = true;\n\t\treturn this;\n\t}\n\n\tindex(): this {\n\t\tthis.isIndex = true;\n\t\treturn this;\n\t}\n\n\tcomment(text: string): this {\n\t\tthis.commentText = text;\n\t\treturn this;\n\t}\n\n\tafter(column: string): this {\n\t\tthis.afterColumn = column;\n\t\treturn this;\n\t}\n\n\tfirst(): this {\n\t\tthis.isFirst = true;\n\t\treturn this;\n\t}\n\n\tautoIncrement(): this {\n\t\tthis.isAutoIncrement = true;\n\t\treturn this;\n\t}\n\n\tsetValues(vals: string[]): this {\n\t\tthis.enumValues = vals;\n\t\treturn this;\n\t}\n\n\tsetLength(len: number): this {\n\t\tthis.lengthValue = len;\n\t\treturn this;\n\t}\n\n\tsetPrecision(precision: number): this {\n\t\tthis.precisionValue = precision;\n\t\treturn this;\n\t}\n\n\tsetScale(scale: number): this {\n\t\tthis.scaleValue = scale;\n\t\treturn this;\n\t}\n\n\tcompile(): ColumnCompileOptions {\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\ttype: this.type,\n\t\t\tnullable: this.isNullable,\n\t\t\tdefaultValue: this.defaultValue,\n\t\t\tunsigned: this.isUnsigned,\n\t\t\tunique: this.isUnique,\n\t\t\tprimary: this.isPrimary,\n\t\t\tindex: this.isIndex,\n\t\t\tcomment: this.commentText,\n\t\t\tafter: this.afterColumn,\n\t\t\tfirst: this.isFirst,\n\t\t\tautoIncrement: this.isAutoIncrement,\n\t\t\tprecision: this.precisionValue,\n\t\t\tscale: this.scaleValue,\n\t\t\tlength: this.lengthValue,\n\t\t\tvalues: this.enumValues,\n\t\t\tisForeignId: this.isForeignId,\n\t\t};\n\t}\n}\n\ninterface ForeignKeyDef {\n\tcolumn: string;\n\treferences: string;\n\ton: string;\n\tonDelete: string | null;\n\tonUpdate: string | null;\n}\n\nexport class ForeignKeyDefinition {\n\tprivate def: ForeignKeyDef;\n\n\tconstructor(def: ForeignKeyDef) {\n\t\tthis.def = def;\n\t}\n\n\treferences(column: string): this {\n\t\tthis.def.references = column;\n\t\treturn this;\n\t}\n\n\ton(table: string): this {\n\t\tthis.def.on = table;\n\t\treturn this;\n\t}\n\n\tonDelete(action: string): this {\n\t\tthis.def.onDelete = action;\n\t\treturn this;\n\t}\n\n\tonUpdate(action: string): this {\n\t\tthis.def.onUpdate = action;\n\t\treturn this;\n\t}\n}\n\nexport class Migrator {\n\tprivate connection: DatabaseConnection;\n\tprivate migrations: MigrationDefinition[] = [];\n\n\tconstructor(connection: DatabaseConnection) {\n\t\tthis.connection = connection;\n\t}\n\n\taddMigrations(migrations: MigrationDefinition[]): void {\n\t\tthis.migrations.push(...migrations);\n\t}\n\n\tsetMigrations(migrations: MigrationDefinition[]): void {\n\t\tthis.migrations = migrations;\n\t}\n\n\tasync run(): Promise<void> {\n\t\tawait this.ensureMigrationTable();\n\n\t\tconst ran = await this.getRanMigrations();\n\t\tconst ranNames = new Set(ran.map((r) => r.name));\n\n\t\tconst pending = this.migrations.filter((m) => !ranNames.has(m.name));\n\t\tif (pending.length === 0) {\n\t\t\tconsole.log(\"Nothing to migrate.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst nextBatch = await this.getNextBatchNumber();\n\t\tconst schema = new SchemaBuilder(this.connection);\n\n\t\tfor (const migration of pending) {\n\t\t\tconsole.log(`Migrating: ${migration.name}`);\n\t\t\ttry {\n\t\t\t\tawait migration.up(schema);\n\t\t\t\tawait this.recordMigration(migration.name, nextBatch);\n\t\t\t\tconsole.log(`Migrated: ${migration.name}`);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(`Migration failed: ${migration.name}`, err);\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\t}\n\n\tasync rollback(): Promise<void> {\n\t\tawait this.ensureMigrationTable();\n\n\t\tconst lastBatch = await this.getLastBatchNumber();\n\t\tif (lastBatch === 0) {\n\t\t\tconsole.log(\"Nothing to rollback.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst lastBatchMigrations = await this.getMigrationsByBatch(lastBatch);\n\t\tconst schema = new SchemaBuilder(this.connection);\n\n\t\tfor (const migration of lastBatchMigrations.reverse()) {\n\t\t\tconst def = this.migrations.find((m) => m.name === migration.name);\n\t\t\tif (def) {\n\t\t\t\tconsole.log(`Rolling back: ${migration.name}`);\n\t\t\t\ttry {\n\t\t\t\t\tawait def.down(schema);\n\t\t\t\t\tawait this.removeMigration(migration.name);\n\t\t\t\t\tconsole.log(`Rolled back: ${migration.name}`);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tconsole.error(`Rollback failed: ${migration.name}`, err);\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tasync reset(): Promise<void> {\n\t\tawait this.ensureMigrationTable();\n\n\t\tconst allRan = await this.getRanMigrations();\n\t\tconst schema = new SchemaBuilder(this.connection);\n\n\t\tfor (const migration of allRan.reverse()) {\n\t\t\tconst def = this.migrations.find((m) => m.name === migration.name);\n\t\t\tif (def) {\n\t\t\t\tconsole.log(`Resetting: ${migration.name}`);\n\t\t\t\ttry {\n\t\t\t\t\tawait def.down(schema);\n\t\t\t\t\tawait this.removeMigration(migration.name);\n\t\t\t\t\tconsole.log(`Reset: ${migration.name}`);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tconsole.error(`Reset failed: ${migration.name}`, err);\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tasync refresh(): Promise<void> {\n\t\tawait this.reset();\n\t\tawait this.run();\n\t}\n\n\tasync status(): Promise<MigrationStatusRow[]> {\n\t\tawait this.ensureMigrationTable();\n\t\treturn this.getRanMigrations();\n\t}\n\n\tprivate async ensureMigrationTable(): Promise<void> {\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst sql = dialect.compileCreateMigrationsTable();\n\t\tawait this.connection.raw(sql);\n\t}\n\n\tprivate async getRanMigrations(): Promise<MigrationStatusRow[]> {\n\t\tconst result = await this.connection.raw(\n\t\t\t\"SELECT name, batch, executed_at as executedAt FROM migrations ORDER BY batch ASC, name ASC\",\n\t\t);\n\t\treturn result.rows.map((row: any) => ({\n\t\t\tname: String(row.name),\n\t\t\tbatch: Number(row.batch),\n\t\t\texecutedAt: String(row.executedAt ?? \"\"),\n\t\t}));\n\t}\n\n\tprivate async getNextBatchNumber(): Promise<number> {\n\t\tconst result = await this.connection.raw(\n\t\t\t\"SELECT COALESCE(MAX(batch), 0) + 1 as next_batch FROM migrations\",\n\t\t);\n\t\treturn Number(result.rows[0]?.next_batch ?? 1);\n\t}\n\n\tprivate async getLastBatchNumber(): Promise<number> {\n\t\tconst result = await this.connection.raw(\n\t\t\t\"SELECT COALESCE(MAX(batch), 0) as last_batch FROM migrations\",\n\t\t);\n\t\treturn Number(result.rows[0]?.last_batch ?? 0);\n\t}\n\n\tprivate async getMigrationsByBatch(\n\t\tbatch: number,\n\t): Promise<MigrationStatusRow[]> {\n\t\tconst result = await this.connection.raw(\n\t\t\t\"SELECT name, batch, executed_at as executedAt FROM migrations WHERE batch = ? ORDER BY name ASC\",\n\t\t\t[batch],\n\t\t);\n\t\treturn result.rows.map((row: any) => ({\n\t\t\tname: String(row.name),\n\t\t\tbatch: Number(row.batch),\n\t\t\texecutedAt: String(row.executedAt ?? \"\"),\n\t\t}));\n\t}\n\n\tprivate async recordMigration(name: string, batch: number): Promise<void> {\n\t\tawait this.connection.raw(\n\t\t\t\"INSERT INTO migrations (name, batch) VALUES (?, ?)\",\n\t\t\t[name, batch],\n\t\t);\n\t}\n\n\tprivate async removeMigration(name: string): Promise<void> {\n\t\tawait this.connection.raw(\"DELETE FROM migrations WHERE name = ?\", [name]);\n\t}\n}\n","export interface PaginatedResult<T = any> {\n\tdata: T[];\n\tcurrentPage: number;\n\tperPage: number;\n\ttotal: number;\n\tlastPage: number;\n\tfrom: number;\n\tto: number;\n\thasMore: boolean;\n\thasPrev: boolean;\n\tisEmpty: boolean;\n}\n\nexport class Pagination<T = any> {\n\treadonly data: T[];\n\treadonly currentPage: number;\n\treadonly perPage: number;\n\treadonly total: number;\n\treadonly lastPage: number;\n\treadonly from: number;\n\treadonly to: number;\n\n\tconstructor(result: PaginatedResult<T>) {\n\t\tthis.data = result.data;\n\t\tthis.currentPage = result.currentPage;\n\t\tthis.perPage = result.perPage;\n\t\tthis.total = result.total;\n\t\tthis.lastPage = result.lastPage;\n\t\tthis.from = result.from;\n\t\tthis.to = result.to;\n\t}\n\n\tget hasMore(): boolean {\n\t\treturn this.currentPage < this.lastPage;\n\t}\n\n\tget hasPrev(): boolean {\n\t\treturn this.currentPage > 1;\n\t}\n\n\tget isEmpty(): boolean {\n\t\treturn this.data.length === 0;\n\t}\n\n\tnextPage(): PaginationUrl | null {\n\t\tif (!this.hasMore) return null;\n\t\treturn {\n\t\t\tpage: this.currentPage + 1,\n\t\t\tperPage: this.perPage,\n\t\t\turl: null,\n\t\t};\n\t}\n\n\tprevPage(): PaginationUrl | null {\n\t\tif (!this.hasPrev) return null;\n\t\treturn {\n\t\t\tpage: this.currentPage - 1,\n\t\t\tperPage: this.perPage,\n\t\t\turl: null,\n\t\t};\n\t}\n\n\ttoJSON(): Record<string, any> {\n\t\treturn {\n\t\t\tdata: this.data,\n\t\t\tpagination: {\n\t\t\t\tcurrentPage: this.currentPage,\n\t\t\t\tperPage: this.perPage,\n\t\t\t\ttotal: this.total,\n\t\t\t\tlastPage: this.lastPage,\n\t\t\t\tfrom: this.from,\n\t\t\t\tto: this.to,\n\t\t\t\thasMore: this.hasMore,\n\t\t\t\thasPrev: this.hasPrev,\n\t\t\t\tisEmpty: this.isEmpty,\n\t\t\t},\n\t\t};\n\t}\n\n\tmap<U>(fn: (item: T, index: number) => U): Pagination<U> {\n\t\treturn new Pagination<U>({\n\t\t\t...this,\n\t\t\tdata: this.data.map(fn),\n\t\t});\n\t}\n\n\titems(): T[] {\n\t\treturn this.data;\n\t}\n\n\tstatic from<T>(result: PaginatedResult<T>): Pagination<T> {\n\t\treturn new Pagination(result);\n\t}\n}\n\nexport interface PaginationUrl {\n\tpage: number;\n\tperPage: number;\n\turl: string | null;\n}\n","import type { DatabaseConnection } from \"./connection.js\";\n\nexport interface SeederClass {\n\trun(connection: DatabaseConnection): Promise<void>;\n}\n\nexport class Seeder {\n\tprivate connection: DatabaseConnection;\n\n\tconstructor(connection: DatabaseConnection) {\n\t\tthis.connection = connection;\n\t}\n\n\tasync call(seederClass: SeederClass): Promise<void> {\n\t\tawait seederClass.run(this.connection);\n\t}\n\n\tasync insert(table: string, data: Record<string, any>[]): Promise<void> {\n\t\tif (data.length === 0) return;\n\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst firstRow = data[0];\n\t\tif (!firstRow) return;\n\n\t\tconst columns = Object.keys(firstRow);\n\t\tconst wrappedColumns = columns\n\t\t\t.map((c) => dialect.wrapIdentifier(c))\n\t\t\t.join(\", \");\n\n\t\tconst batchSize = 100;\n\t\tfor (let i = 0; i < data.length; i += batchSize) {\n\t\t\tconst batch = data.slice(i, i + batchSize);\n\t\t\tconst placeholders: string[] = [];\n\t\t\tconst bindings: any[] = [];\n\n\t\t\tfor (const row of batch) {\n\t\t\t\tconst rowPlaceholders = columns.map((col) => {\n\t\t\t\t\tbindings.push(row[col]);\n\t\t\t\t\treturn dialect.makeParameter(bindings.length - 1);\n\t\t\t\t});\n\t\t\t\tplaceholders.push(`(${rowPlaceholders.join(\", \")})`);\n\t\t\t}\n\n\t\t\tconst sql = `INSERT INTO ${dialect.wrapIdentifier(table)} (${wrappedColumns}) VALUES ${placeholders.join(\", \")}`;\n\t\t\tawait this.connection.raw(sql, bindings);\n\t\t}\n\t}\n\n\tasync truncate(table: string): Promise<void> {\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst driver = this.connection.getDriver();\n\n\t\tif (driver === \"sqlite\") {\n\t\t\tawait this.connection.raw(`DELETE FROM ${dialect.wrapIdentifier(table)}`);\n\t\t} else if (driver === \"postgresql\") {\n\t\t\tawait this.connection.raw(dialect.compileTruncate(table));\n\t\t} else {\n\t\t\tawait this.connection.raw(\"SET FOREIGN_KEY_CHECKS = 0\");\n\t\t\tawait this.connection.raw(dialect.compileTruncate(table));\n\t\t\tawait this.connection.raw(\"SET FOREIGN_KEY_CHECKS = 1\");\n\t\t}\n\t}\n\n\tasync run(): Promise<void> {\n\t\tthrow new Error(\"Seeder.run() must be overridden by subclasses\");\n\t}\n}\n","import { QueryBuilder } from './query.js'\nimport type { QueryRunner } from './types.js'\n\nexport class Model {\n id?: number | string\n static table: string = ''\n static connection: QueryRunner | null = null\n protected static queryRunner: QueryRunner | null = null\n\n static setConnection(conn: QueryRunner): void {\n this.connection = conn\n this.queryRunner = conn\n }\n\n static query<T extends typeof Model>(this: T): QueryBuilder {\n if (!this.queryRunner) {\n throw new Error('Database connection not set. Call Model.setConnection() first.')\n }\n return new QueryBuilder(this.queryRunner, this.table)\n }\n\n static async all<T extends typeof Model>(this: T): Promise<InstanceType<T>[]> {\n const rows = await this.query().get()\n return rows.map((row: Record<string, any>) => this.hydrate(row)) as any\n }\n\n static async find<T extends typeof Model>(this: T, id: number | string): Promise<InstanceType<T> | null> {\n const row = await this.query().find(id)\n if (!row) return null\n return this.hydrate(row) as any\n }\n\n static async where<T extends typeof Model>(this: T, column: string, value: any): Promise<QueryBuilder> {\n return this.query().where(column, value)\n }\n\n static async create<T extends typeof Model>(this: T, data: Record<string, any>): Promise<InstanceType<T>> {\n const id = await this.query().insert(data)\n return this.find(id) as any\n }\n\n static async updateOrCreate<T extends typeof Model>(\n this: T,\n attributes: Record<string, any>,\n values?: Record<string, any>,\n ): Promise<InstanceType<T>> {\n const qb = this.query()\n for (const [key, value] of Object.entries(attributes)) {\n qb.where(key, value)\n }\n const existing = await qb.first()\n if (existing) {\n const mergeValues = values ?? attributes\n const id = (existing as any).id\n const updateQb = new QueryBuilder(this.queryRunner!, this.table)\n for (const [key, value] of Object.entries(attributes)) {\n updateQb.where(key, value)\n }\n await updateQb.update(mergeValues)\n return this.find(id) as any\n }\n return this.create({ ...attributes, ...values }) as any\n }\n\n async save(): Promise<void> {\n const ModelClass = this.constructor as typeof Model\n const id = this.id\n if (id !== undefined && id !== null) {\n await ModelClass.query().where('id', id).update(this.getData())\n } else {\n const newId = await ModelClass.query().insert(this.getData())\n this.id = newId\n }\n }\n\n async delete(): Promise<void> {\n const ModelClass = this.constructor as typeof Model\n const id = this.id\n if (id !== undefined && id !== null) {\n await ModelClass.query().where('id', id).delete()\n }\n }\n\n static belongsTo<T extends typeof Model>(\n this: T,\n relatedModel: typeof Model,\n foreignKey?: string,\n ownerKey?: string,\n ): any {\n const related = relatedModel.table\n const fk = foreignKey ?? `${related}_id`\n const ok = ownerKey ?? 'id'\n return this.query().where(fk, ok)\n }\n\n static hasMany<T extends typeof Model>(\n this: T,\n relatedModel: typeof Model,\n foreignKey?: string,\n localKey?: string,\n ): any {\n const related = relatedModel.table\n const fk = foreignKey ?? `${this.table}_id`\n const lk = localKey ?? 'id'\n return this.query().join(related, fk, '=', lk)\n }\n\n private static hydrate<T extends typeof Model>(this: T, data: Record<string, any>): InstanceType<T> {\n const instance = new this() as InstanceType<T>\n for (const [key, value] of Object.entries(data)) {\n ;(instance as any)[key] = value\n }\n return instance\n }\n\n private getData(): Record<string, any> {\n const data: Record<string, any> = {}\n const instance = this as Record<string, any>\n const prototype = Object.getPrototypeOf(this)\n const ownKeys = [\n ...Object.getOwnPropertyNames(instance),\n ...Object.keys(instance),\n ]\n const classKeys = new Set([\n ...Object.getOwnPropertyNames(prototype),\n 'save', 'delete', 'getData',\n ])\n for (const key of ownKeys) {\n if (typeof key === 'string' && !classKeys.has(key) && key !== 'constructor') {\n data[key] = instance[key]\n }\n }\n return data\n }\n}\n"],"mappings":"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","names":["path","i","result","result","sql","result"]}
1
+ {"version":3,"sources":["../../../node_modules/better-sqlite3/lib/util.js","../../../node_modules/better-sqlite3/lib/sqlite-error.js","../../../node_modules/file-uri-to-path/index.js","../../../node_modules/bindings/bindings.js","../../../node_modules/better-sqlite3/lib/methods/wrappers.js","../../../node_modules/better-sqlite3/lib/methods/transaction.js","../../../node_modules/better-sqlite3/lib/methods/pragma.js","../../../node_modules/better-sqlite3/lib/methods/backup.js","../../../node_modules/better-sqlite3/lib/methods/serialize.js","../../../node_modules/better-sqlite3/lib/methods/function.js","../../../node_modules/better-sqlite3/lib/methods/aggregate.js","../../../node_modules/better-sqlite3/lib/methods/table.js","../../../node_modules/better-sqlite3/lib/methods/inspect.js","../../../node_modules/better-sqlite3/lib/database.js","../../../node_modules/better-sqlite3/lib/index.js","../../../src/server/database/connection.ts","../../../src/server/database/dialect.ts","../../../src/server/database/driver.ts","../../../src/server/database/query.ts","../../../src/server/database/migration.ts","../../../src/server/database/pagination.ts","../../../src/server/database/seeder.ts","../../../src/server/database/model.ts"],"sourcesContent":["'use strict';\n\nexports.getBooleanOption = (options, key) => {\n\tlet value = false;\n\tif (key in options && typeof (value = options[key]) !== 'boolean') {\n\t\tthrow new TypeError(`Expected the \"${key}\" option to be a boolean`);\n\t}\n\treturn value;\n};\n\nexports.cppdb = Symbol();\nexports.inspect = Symbol.for('nodejs.util.inspect.custom');\n","'use strict';\nconst descriptor = { value: 'SqliteError', writable: true, enumerable: false, configurable: true };\n\nfunction SqliteError(message, code) {\n\tif (new.target !== SqliteError) {\n\t\treturn new SqliteError(message, code);\n\t}\n\tif (typeof code !== 'string') {\n\t\tthrow new TypeError('Expected second argument to be a string');\n\t}\n\tError.call(this, message);\n\tdescriptor.value = '' + message;\n\tObject.defineProperty(this, 'message', descriptor);\n\tError.captureStackTrace(this, SqliteError);\n\tthis.code = code;\n}\nObject.setPrototypeOf(SqliteError, Error);\nObject.setPrototypeOf(SqliteError.prototype, Error.prototype);\nObject.defineProperty(SqliteError.prototype, 'name', descriptor);\nmodule.exports = SqliteError;\n","\n/**\n * Module dependencies.\n */\n\nvar sep = require('path').sep || '/';\n\n/**\n * Module exports.\n */\n\nmodule.exports = fileUriToPath;\n\n/**\n * File URI to Path function.\n *\n * @param {String} uri\n * @return {String} path\n * @api public\n */\n\nfunction fileUriToPath (uri) {\n if ('string' != typeof uri ||\n uri.length <= 7 ||\n 'file://' != uri.substring(0, 7)) {\n throw new TypeError('must pass in a file:// URI to convert to a file path');\n }\n\n var rest = decodeURI(uri.substring(7));\n var firstSlash = rest.indexOf('/');\n var host = rest.substring(0, firstSlash);\n var path = rest.substring(firstSlash + 1);\n\n // 2. Scheme Definition\n // As a special case, <host> can be the string \"localhost\" or the empty\n // string; this is interpreted as \"the machine from which the URL is\n // being interpreted\".\n if ('localhost' == host) host = '';\n\n if (host) {\n host = sep + sep + host;\n }\n\n // 3.2 Drives, drive letters, mount points, file system root\n // Drive letters are mapped into the top of a file URI in various ways,\n // depending on the implementation; some applications substitute\n // vertical bar (\"|\") for the colon after the drive letter, yielding\n // \"file:///c|/tmp/test.txt\". In some cases, the colon is left\n // unchanged, as in \"file:///c:/tmp/test.txt\". In other cases, the\n // colon is simply omitted, as in \"file:///c/tmp/test.txt\".\n path = path.replace(/^(.+)\\|/, '$1:');\n\n // for Windows, we need to invert the path separators from what a URI uses\n if (sep == '\\\\') {\n path = path.replace(/\\//g, '\\\\');\n }\n\n if (/^.+\\:/.test(path)) {\n // has Windows drive at beginning of path\n } else {\n // unix path…\n path = sep + path;\n }\n\n return host + path;\n}\n","/**\n * Module dependencies.\n */\n\nvar fs = require('fs'),\n path = require('path'),\n fileURLToPath = require('file-uri-to-path'),\n join = path.join,\n dirname = path.dirname,\n exists =\n (fs.accessSync &&\n function(path) {\n try {\n fs.accessSync(path);\n } catch (e) {\n return false;\n }\n return true;\n }) ||\n fs.existsSync ||\n path.existsSync,\n defaults = {\n arrow: process.env.NODE_BINDINGS_ARROW || ' → ',\n compiled: process.env.NODE_BINDINGS_COMPILED_DIR || 'compiled',\n platform: process.platform,\n arch: process.arch,\n nodePreGyp:\n 'node-v' +\n process.versions.modules +\n '-' +\n process.platform +\n '-' +\n process.arch,\n version: process.versions.node,\n bindings: 'bindings.node',\n try: [\n // node-gyp's linked version in the \"build\" dir\n ['module_root', 'build', 'bindings'],\n // node-waf and gyp_addon (a.k.a node-gyp)\n ['module_root', 'build', 'Debug', 'bindings'],\n ['module_root', 'build', 'Release', 'bindings'],\n // Debug files, for development (legacy behavior, remove for node v0.9)\n ['module_root', 'out', 'Debug', 'bindings'],\n ['module_root', 'Debug', 'bindings'],\n // Release files, but manually compiled (legacy behavior, remove for node v0.9)\n ['module_root', 'out', 'Release', 'bindings'],\n ['module_root', 'Release', 'bindings'],\n // Legacy from node-waf, node <= 0.4.x\n ['module_root', 'build', 'default', 'bindings'],\n // Production \"Release\" buildtype binary (meh...)\n ['module_root', 'compiled', 'version', 'platform', 'arch', 'bindings'],\n // node-qbs builds\n ['module_root', 'addon-build', 'release', 'install-root', 'bindings'],\n ['module_root', 'addon-build', 'debug', 'install-root', 'bindings'],\n ['module_root', 'addon-build', 'default', 'install-root', 'bindings'],\n // node-pre-gyp path ./lib/binding/{node_abi}-{platform}-{arch}\n ['module_root', 'lib', 'binding', 'nodePreGyp', 'bindings']\n ]\n };\n\n/**\n * The main `bindings()` function loads the compiled bindings for a given module.\n * It uses V8's Error API to determine the parent filename that this function is\n * being invoked from, which is then used to find the root directory.\n */\n\nfunction bindings(opts) {\n // Argument surgery\n if (typeof opts == 'string') {\n opts = { bindings: opts };\n } else if (!opts) {\n opts = {};\n }\n\n // maps `defaults` onto `opts` object\n Object.keys(defaults).map(function(i) {\n if (!(i in opts)) opts[i] = defaults[i];\n });\n\n // Get the module root\n if (!opts.module_root) {\n opts.module_root = exports.getRoot(exports.getFileName());\n }\n\n // Ensure the given bindings name ends with .node\n if (path.extname(opts.bindings) != '.node') {\n opts.bindings += '.node';\n }\n\n // https://github.com/webpack/webpack/issues/4175#issuecomment-342931035\n var requireFunc =\n typeof __webpack_require__ === 'function'\n ? __non_webpack_require__\n : require;\n\n var tries = [],\n i = 0,\n l = opts.try.length,\n n,\n b,\n err;\n\n for (; i < l; i++) {\n n = join.apply(\n null,\n opts.try[i].map(function(p) {\n return opts[p] || p;\n })\n );\n tries.push(n);\n try {\n b = opts.path ? requireFunc.resolve(n) : requireFunc(n);\n if (!opts.path) {\n b.path = n;\n }\n return b;\n } catch (e) {\n if (e.code !== 'MODULE_NOT_FOUND' &&\n e.code !== 'QUALIFIED_PATH_RESOLUTION_FAILED' &&\n !/not find/i.test(e.message)) {\n throw e;\n }\n }\n }\n\n err = new Error(\n 'Could not locate the bindings file. Tried:\\n' +\n tries\n .map(function(a) {\n return opts.arrow + a;\n })\n .join('\\n')\n );\n err.tries = tries;\n throw err;\n}\nmodule.exports = exports = bindings;\n\n/**\n * Gets the filename of the JavaScript file that invokes this function.\n * Used to help find the root directory of a module.\n * Optionally accepts an filename argument to skip when searching for the invoking filename\n */\n\nexports.getFileName = function getFileName(calling_file) {\n var origPST = Error.prepareStackTrace,\n origSTL = Error.stackTraceLimit,\n dummy = {},\n fileName;\n\n Error.stackTraceLimit = 10;\n\n Error.prepareStackTrace = function(e, st) {\n for (var i = 0, l = st.length; i < l; i++) {\n fileName = st[i].getFileName();\n if (fileName !== __filename) {\n if (calling_file) {\n if (fileName !== calling_file) {\n return;\n }\n } else {\n return;\n }\n }\n }\n };\n\n // run the 'prepareStackTrace' function above\n Error.captureStackTrace(dummy);\n dummy.stack;\n\n // cleanup\n Error.prepareStackTrace = origPST;\n Error.stackTraceLimit = origSTL;\n\n // handle filename that starts with \"file://\"\n var fileSchema = 'file://';\n if (fileName.indexOf(fileSchema) === 0) {\n fileName = fileURLToPath(fileName);\n }\n\n return fileName;\n};\n\n/**\n * Gets the root directory of a module, given an arbitrary filename\n * somewhere in the module tree. The \"root directory\" is the directory\n * containing the `package.json` file.\n *\n * In: /home/nate/node-native-module/lib/index.js\n * Out: /home/nate/node-native-module\n */\n\nexports.getRoot = function getRoot(file) {\n var dir = dirname(file),\n prev;\n while (true) {\n if (dir === '.') {\n // Avoids an infinite loop in rare cases, like the REPL\n dir = process.cwd();\n }\n if (\n exists(join(dir, 'package.json')) ||\n exists(join(dir, 'node_modules'))\n ) {\n // Found the 'package.json' file or 'node_modules' dir; we're done\n return dir;\n }\n if (prev === dir) {\n // Got to the top\n throw new Error(\n 'Could not find module root given file: \"' +\n file +\n '\". Do you have a `package.json` file? '\n );\n }\n // Try the parent dir next\n prev = dir;\n dir = join(dir, '..');\n }\n};\n","'use strict';\nconst { cppdb } = require('../util');\n\nexports.prepare = function prepare(sql) {\n\treturn this[cppdb].prepare(sql, this, false);\n};\n\nexports.exec = function exec(sql) {\n\tthis[cppdb].exec(sql);\n\treturn this;\n};\n\nexports.close = function close() {\n\tthis[cppdb].close();\n\treturn this;\n};\n\nexports.loadExtension = function loadExtension(...args) {\n\tthis[cppdb].loadExtension(...args);\n\treturn this;\n};\n\nexports.defaultSafeIntegers = function defaultSafeIntegers(...args) {\n\tthis[cppdb].defaultSafeIntegers(...args);\n\treturn this;\n};\n\nexports.unsafeMode = function unsafeMode(...args) {\n\tthis[cppdb].unsafeMode(...args);\n\treturn this;\n};\n\nexports.getters = {\n\tname: {\n\t\tget: function name() { return this[cppdb].name; },\n\t\tenumerable: true,\n\t},\n\topen: {\n\t\tget: function open() { return this[cppdb].open; },\n\t\tenumerable: true,\n\t},\n\tinTransaction: {\n\t\tget: function inTransaction() { return this[cppdb].inTransaction; },\n\t\tenumerable: true,\n\t},\n\treadonly: {\n\t\tget: function readonly() { return this[cppdb].readonly; },\n\t\tenumerable: true,\n\t},\n\tmemory: {\n\t\tget: function memory() { return this[cppdb].memory; },\n\t\tenumerable: true,\n\t},\n};\n","'use strict';\nconst { cppdb } = require('../util');\nconst controllers = new WeakMap();\n\nmodule.exports = function transaction(fn) {\n\tif (typeof fn !== 'function') throw new TypeError('Expected first argument to be a function');\n\n\tconst db = this[cppdb];\n\tconst controller = getController(db, this);\n\tconst { apply } = Function.prototype;\n\n\t// Each version of the transaction function has these same properties\n\tconst properties = {\n\t\tdefault: { value: wrapTransaction(apply, fn, db, controller.default) },\n\t\tdeferred: { value: wrapTransaction(apply, fn, db, controller.deferred) },\n\t\timmediate: { value: wrapTransaction(apply, fn, db, controller.immediate) },\n\t\texclusive: { value: wrapTransaction(apply, fn, db, controller.exclusive) },\n\t\tdatabase: { value: this, enumerable: true },\n\t};\n\n\tObject.defineProperties(properties.default.value, properties);\n\tObject.defineProperties(properties.deferred.value, properties);\n\tObject.defineProperties(properties.immediate.value, properties);\n\tObject.defineProperties(properties.exclusive.value, properties);\n\n\t// Return the default version of the transaction function\n\treturn properties.default.value;\n};\n\n// Return the database's cached transaction controller, or create a new one\nconst getController = (db, self) => {\n\tlet controller = controllers.get(db);\n\tif (!controller) {\n\t\tconst shared = {\n\t\t\tcommit: db.prepare('COMMIT', self, false),\n\t\t\trollback: db.prepare('ROLLBACK', self, false),\n\t\t\tsavepoint: db.prepare('SAVEPOINT `\\t_bs3.\\t`', self, false),\n\t\t\trelease: db.prepare('RELEASE `\\t_bs3.\\t`', self, false),\n\t\t\trollbackTo: db.prepare('ROLLBACK TO `\\t_bs3.\\t`', self, false),\n\t\t};\n\t\tcontrollers.set(db, controller = {\n\t\t\tdefault: Object.assign({ begin: db.prepare('BEGIN', self, false) }, shared),\n\t\t\tdeferred: Object.assign({ begin: db.prepare('BEGIN DEFERRED', self, false) }, shared),\n\t\t\timmediate: Object.assign({ begin: db.prepare('BEGIN IMMEDIATE', self, false) }, shared),\n\t\t\texclusive: Object.assign({ begin: db.prepare('BEGIN EXCLUSIVE', self, false) }, shared),\n\t\t});\n\t}\n\treturn controller;\n};\n\n// Return a new transaction function by wrapping the given function\nconst wrapTransaction = (apply, fn, db, { begin, commit, rollback, savepoint, release, rollbackTo }) => function sqliteTransaction() {\n\tlet before, after, undo;\n\tif (db.inTransaction) {\n\t\tbefore = savepoint;\n\t\tafter = release;\n\t\tundo = rollbackTo;\n\t} else {\n\t\tbefore = begin;\n\t\tafter = commit;\n\t\tundo = rollback;\n\t}\n\tbefore.run();\n\ttry {\n\t\tconst result = apply.call(fn, this, arguments);\n\t\tif (result && typeof result.then === 'function') {\n\t\t\tthrow new TypeError('Transaction function cannot return a promise');\n\t\t}\n\t\tafter.run();\n\t\treturn result;\n\t} catch (ex) {\n\t\tif (db.inTransaction) {\n\t\t\tundo.run();\n\t\t\tif (undo !== rollback) after.run();\n\t\t}\n\t\tthrow ex;\n\t}\n};\n","'use strict';\nconst { getBooleanOption, cppdb } = require('../util');\n\nmodule.exports = function pragma(source, options) {\n\tif (options == null) options = {};\n\tif (typeof source !== 'string') throw new TypeError('Expected first argument to be a string');\n\tif (typeof options !== 'object') throw new TypeError('Expected second argument to be an options object');\n\tconst simple = getBooleanOption(options, 'simple');\n\n\tconst stmt = this[cppdb].prepare(`PRAGMA ${source}`, this, true);\n\treturn simple ? stmt.pluck().get() : stmt.all();\n};\n","'use strict';\nconst fs = require('fs');\nconst path = require('path');\nconst { promisify } = require('util');\nconst { cppdb } = require('../util');\nconst fsAccess = promisify(fs.access);\n\nmodule.exports = async function backup(filename, options) {\n\tif (options == null) options = {};\n\n\t// Validate arguments\n\tif (typeof filename !== 'string') throw new TypeError('Expected first argument to be a string');\n\tif (typeof options !== 'object') throw new TypeError('Expected second argument to be an options object');\n\n\t// Interpret options\n\tfilename = filename.trim();\n\tconst attachedName = 'attached' in options ? options.attached : 'main';\n\tconst handler = 'progress' in options ? options.progress : null;\n\n\t// Validate interpreted options\n\tif (!filename) throw new TypeError('Backup filename cannot be an empty string');\n\tif (filename === ':memory:') throw new TypeError('Invalid backup filename \":memory:\"');\n\tif (typeof attachedName !== 'string') throw new TypeError('Expected the \"attached\" option to be a string');\n\tif (!attachedName) throw new TypeError('The \"attached\" option cannot be an empty string');\n\tif (handler != null && typeof handler !== 'function') throw new TypeError('Expected the \"progress\" option to be a function');\n\n\t// Make sure the specified directory exists\n\tawait fsAccess(path.dirname(filename)).catch(() => {\n\t\tthrow new TypeError('Cannot save backup because the directory does not exist');\n\t});\n\n\tconst isNewFile = await fsAccess(filename).then(() => false, () => true);\n\treturn runBackup(this[cppdb].backup(this, attachedName, filename, isNewFile), handler || null);\n};\n\nconst runBackup = (backup, handler) => {\n\tlet rate = 0;\n\tlet useDefault = true;\n\n\treturn new Promise((resolve, reject) => {\n\t\tsetImmediate(function step() {\n\t\t\ttry {\n\t\t\t\tconst progress = backup.transfer(rate);\n\t\t\t\tif (!progress.remainingPages) {\n\t\t\t\t\tbackup.close();\n\t\t\t\t\tresolve(progress);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (useDefault) {\n\t\t\t\t\tuseDefault = false;\n\t\t\t\t\trate = 100;\n\t\t\t\t}\n\t\t\t\tif (handler) {\n\t\t\t\t\tconst ret = handler(progress);\n\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\tif (typeof ret === 'number' && ret === ret) rate = Math.max(0, Math.min(0x7fffffff, Math.round(ret)));\n\t\t\t\t\t\telse throw new TypeError('Expected progress callback to return a number or undefined');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsetImmediate(step);\n\t\t\t} catch (err) {\n\t\t\t\tbackup.close();\n\t\t\t\treject(err);\n\t\t\t}\n\t\t});\n\t});\n};\n","'use strict';\nconst { cppdb } = require('../util');\n\nmodule.exports = function serialize(options) {\n\tif (options == null) options = {};\n\n\t// Validate arguments\n\tif (typeof options !== 'object') throw new TypeError('Expected first argument to be an options object');\n\n\t// Interpret and validate options\n\tconst attachedName = 'attached' in options ? options.attached : 'main';\n\tif (typeof attachedName !== 'string') throw new TypeError('Expected the \"attached\" option to be a string');\n\tif (!attachedName) throw new TypeError('The \"attached\" option cannot be an empty string');\n\n\treturn this[cppdb].serialize(attachedName);\n};\n","'use strict';\nconst { getBooleanOption, cppdb } = require('../util');\n\nmodule.exports = function defineFunction(name, options, fn) {\n\t// Apply defaults\n\tif (options == null) options = {};\n\tif (typeof options === 'function') { fn = options; options = {}; }\n\n\t// Validate arguments\n\tif (typeof name !== 'string') throw new TypeError('Expected first argument to be a string');\n\tif (typeof fn !== 'function') throw new TypeError('Expected last argument to be a function');\n\tif (typeof options !== 'object') throw new TypeError('Expected second argument to be an options object');\n\tif (!name) throw new TypeError('User-defined function name cannot be an empty string');\n\n\t// Interpret options\n\tconst safeIntegers = 'safeIntegers' in options ? +getBooleanOption(options, 'safeIntegers') : 2;\n\tconst deterministic = getBooleanOption(options, 'deterministic');\n\tconst directOnly = getBooleanOption(options, 'directOnly');\n\tconst varargs = getBooleanOption(options, 'varargs');\n\tlet argCount = -1;\n\n\t// Determine argument count\n\tif (!varargs) {\n\t\targCount = fn.length;\n\t\tif (!Number.isInteger(argCount) || argCount < 0) throw new TypeError('Expected function.length to be a positive integer');\n\t\tif (argCount > 100) throw new RangeError('User-defined functions cannot have more than 100 arguments');\n\t}\n\n\tthis[cppdb].function(fn, name, argCount, safeIntegers, deterministic, directOnly);\n\treturn this;\n};\n","'use strict';\nconst { getBooleanOption, cppdb } = require('../util');\n\nmodule.exports = function defineAggregate(name, options) {\n\t// Validate arguments\n\tif (typeof name !== 'string') throw new TypeError('Expected first argument to be a string');\n\tif (typeof options !== 'object' || options === null) throw new TypeError('Expected second argument to be an options object');\n\tif (!name) throw new TypeError('User-defined function name cannot be an empty string');\n\n\t// Interpret options\n\tconst start = 'start' in options ? options.start : null;\n\tconst step = getFunctionOption(options, 'step', true);\n\tconst inverse = getFunctionOption(options, 'inverse', false);\n\tconst result = getFunctionOption(options, 'result', false);\n\tconst safeIntegers = 'safeIntegers' in options ? +getBooleanOption(options, 'safeIntegers') : 2;\n\tconst deterministic = getBooleanOption(options, 'deterministic');\n\tconst directOnly = getBooleanOption(options, 'directOnly');\n\tconst varargs = getBooleanOption(options, 'varargs');\n\tlet argCount = -1;\n\n\t// Determine argument count\n\tif (!varargs) {\n\t\targCount = Math.max(getLength(step), inverse ? getLength(inverse) : 0);\n\t\tif (argCount > 0) argCount -= 1;\n\t\tif (argCount > 100) throw new RangeError('User-defined functions cannot have more than 100 arguments');\n\t}\n\n\tthis[cppdb].aggregate(start, step, inverse, result, name, argCount, safeIntegers, deterministic, directOnly);\n\treturn this;\n};\n\nconst getFunctionOption = (options, key, required) => {\n\tconst value = key in options ? options[key] : null;\n\tif (typeof value === 'function') return value;\n\tif (value != null) throw new TypeError(`Expected the \"${key}\" option to be a function`);\n\tif (required) throw new TypeError(`Missing required option \"${key}\"`);\n\treturn null;\n};\n\nconst getLength = ({ length }) => {\n\tif (Number.isInteger(length) && length >= 0) return length;\n\tthrow new TypeError('Expected function.length to be a positive integer');\n};\n","'use strict';\nconst { cppdb } = require('../util');\n\nmodule.exports = function defineTable(name, factory) {\n\t// Validate arguments\n\tif (typeof name !== 'string') throw new TypeError('Expected first argument to be a string');\n\tif (!name) throw new TypeError('Virtual table module name cannot be an empty string');\n\n\t// Determine whether the module is eponymous-only or not\n\tlet eponymous = false;\n\tif (typeof factory === 'object' && factory !== null) {\n\t\teponymous = true;\n\t\tfactory = defer(parseTableDefinition(factory, 'used', name));\n\t} else {\n\t\tif (typeof factory !== 'function') throw new TypeError('Expected second argument to be a function or a table definition object');\n\t\tfactory = wrapFactory(factory);\n\t}\n\n\tthis[cppdb].table(factory, name, eponymous);\n\treturn this;\n};\n\nfunction wrapFactory(factory) {\n\treturn function virtualTableFactory(moduleName, databaseName, tableName, ...args) {\n\t\tconst thisObject = {\n\t\t\tmodule: moduleName,\n\t\t\tdatabase: databaseName,\n\t\t\ttable: tableName,\n\t\t};\n\n\t\t// Generate a new table definition by invoking the factory\n\t\tconst def = apply.call(factory, thisObject, args);\n\t\tif (typeof def !== 'object' || def === null) {\n\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" did not return a table definition object`);\n\t\t}\n\n\t\treturn parseTableDefinition(def, 'returned', moduleName);\n\t};\n}\n\nfunction parseTableDefinition(def, verb, moduleName) {\n\t// Validate required properties\n\tif (!hasOwnProperty.call(def, 'rows')) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition without a \"rows\" property`);\n\t}\n\tif (!hasOwnProperty.call(def, 'columns')) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition without a \"columns\" property`);\n\t}\n\n\t// Validate \"rows\" property\n\tconst rows = def.rows;\n\tif (typeof rows !== 'function' || Object.getPrototypeOf(rows) !== GeneratorFunctionPrototype) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with an invalid \"rows\" property (should be a generator function)`);\n\t}\n\n\t// Validate \"columns\" property\n\tlet columns = def.columns;\n\tif (!Array.isArray(columns) || !(columns = [...columns]).every(x => typeof x === 'string')) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with an invalid \"columns\" property (should be an array of strings)`);\n\t}\n\tif (columns.length !== new Set(columns).size) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with duplicate column names`);\n\t}\n\tif (!columns.length) {\n\t\tthrow new RangeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with zero columns`);\n\t}\n\n\t// Validate \"parameters\" property\n\tlet parameters;\n\tif (hasOwnProperty.call(def, 'parameters')) {\n\t\tparameters = def.parameters;\n\t\tif (!Array.isArray(parameters) || !(parameters = [...parameters]).every(x => typeof x === 'string')) {\n\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with an invalid \"parameters\" property (should be an array of strings)`);\n\t\t}\n\t} else {\n\t\tparameters = inferParameters(rows);\n\t}\n\tif (parameters.length !== new Set(parameters).size) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with duplicate parameter names`);\n\t}\n\tif (parameters.length > 32) {\n\t\tthrow new RangeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with more than the maximum number of 32 parameters`);\n\t}\n\tfor (const parameter of parameters) {\n\t\tif (columns.includes(parameter)) {\n\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with column \"${parameter}\" which was ambiguously defined as both a column and parameter`);\n\t\t}\n\t}\n\n\t// Validate \"safeIntegers\" option\n\tlet safeIntegers = 2;\n\tif (hasOwnProperty.call(def, 'safeIntegers')) {\n\t\tconst bool = def.safeIntegers;\n\t\tif (typeof bool !== 'boolean') {\n\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with an invalid \"safeIntegers\" property (should be a boolean)`);\n\t\t}\n\t\tsafeIntegers = +bool;\n\t}\n\n\t// Validate \"directOnly\" option\n\tlet directOnly = false;\n\tif (hasOwnProperty.call(def, 'directOnly')) {\n\t\tdirectOnly = def.directOnly;\n\t\tif (typeof directOnly !== 'boolean') {\n\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with an invalid \"directOnly\" property (should be a boolean)`);\n\t\t}\n\t}\n\n\t// Generate SQL for the virtual table definition\n\tconst columnDefinitions = [\n\t\t...parameters.map(identifier).map(str => `${str} HIDDEN`),\n\t\t...columns.map(identifier),\n\t];\n\treturn [\n\t\t`CREATE TABLE x(${columnDefinitions.join(', ')});`,\n\t\twrapGenerator(rows, new Map(columns.map((x, i) => [x, parameters.length + i])), moduleName),\n\t\tparameters,\n\t\tsafeIntegers,\n\t\tdirectOnly,\n\t];\n}\n\nfunction wrapGenerator(generator, columnMap, moduleName) {\n\treturn function* virtualTable(...args) {\n\t\t/*\n\t\t\tWe must defensively clone any buffers in the arguments, because\n\t\t\totherwise the generator could mutate one of them, which would cause\n\t\t\tus to return incorrect values for hidden columns, potentially\n\t\t\tcorrupting the database.\n\t\t */\n\t\tconst output = args.map(x => Buffer.isBuffer(x) ? Buffer.from(x) : x);\n\t\tfor (let i = 0; i < columnMap.size; ++i) {\n\t\t\toutput.push(null); // Fill with nulls to prevent gaps in array (v8 optimization)\n\t\t}\n\t\tfor (const row of generator(...args)) {\n\t\t\tif (Array.isArray(row)) {\n\t\t\t\textractRowArray(row, output, columnMap.size, moduleName);\n\t\t\t\tyield output;\n\t\t\t} else if (typeof row === 'object' && row !== null) {\n\t\t\t\textractRowObject(row, output, columnMap, moduleName);\n\t\t\t\tyield output;\n\t\t\t} else {\n\t\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" yielded something that isn't a valid row object`);\n\t\t\t}\n\t\t}\n\t};\n}\n\nfunction extractRowArray(row, output, columnCount, moduleName) {\n\tif (row.length !== columnCount) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" yielded a row with an incorrect number of columns`);\n\t}\n\tconst offset = output.length - columnCount;\n\tfor (let i = 0; i < columnCount; ++i) {\n\t\toutput[i + offset] = row[i];\n\t}\n}\n\nfunction extractRowObject(row, output, columnMap, moduleName) {\n\tlet count = 0;\n\tfor (const key of Object.keys(row)) {\n\t\tconst index = columnMap.get(key);\n\t\tif (index === undefined) {\n\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" yielded a row with an undeclared column \"${key}\"`);\n\t\t}\n\t\toutput[index] = row[key];\n\t\tcount += 1;\n\t}\n\tif (count !== columnMap.size) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" yielded a row with missing columns`);\n\t}\n}\n\nfunction inferParameters({ length }) {\n\tif (!Number.isInteger(length) || length < 0) {\n\t\tthrow new TypeError('Expected function.length to be a positive integer');\n\t}\n\tconst params = [];\n\tfor (let i = 0; i < length; ++i) {\n\t\tparams.push(`$${i + 1}`);\n\t}\n\treturn params;\n}\n\nconst { hasOwnProperty } = Object.prototype;\nconst { apply } = Function.prototype;\nconst GeneratorFunctionPrototype = Object.getPrototypeOf(function*(){});\nconst identifier = str => `\"${str.replace(/\"/g, '\"\"')}\"`;\nconst defer = x => () => x;\n","'use strict';\nconst DatabaseInspection = function Database() {};\n\nmodule.exports = function inspect(depth, opts) {\n\treturn Object.assign(new DatabaseInspection(), this);\n};\n\n","'use strict';\nconst fs = require('fs');\nconst path = require('path');\nconst util = require('./util');\nconst SqliteError = require('./sqlite-error');\n\nlet DEFAULT_ADDON;\n\nfunction Database(filenameGiven, options) {\n\tif (new.target == null) {\n\t\treturn new Database(filenameGiven, options);\n\t}\n\n\t// Apply defaults\n\tlet buffer;\n\tif (Buffer.isBuffer(filenameGiven)) {\n\t\tbuffer = filenameGiven;\n\t\tfilenameGiven = ':memory:';\n\t}\n\tif (filenameGiven == null) filenameGiven = '';\n\tif (options == null) options = {};\n\n\t// Validate arguments\n\tif (typeof filenameGiven !== 'string') throw new TypeError('Expected first argument to be a string');\n\tif (typeof options !== 'object') throw new TypeError('Expected second argument to be an options object');\n\tif ('readOnly' in options) throw new TypeError('Misspelled option \"readOnly\" should be \"readonly\"');\n\tif ('memory' in options) throw new TypeError('Option \"memory\" was removed in v7.0.0 (use \":memory:\" filename instead)');\n\n\t// Interpret options\n\tconst filename = filenameGiven.trim();\n\tconst anonymous = filename === '' || filename === ':memory:';\n\tconst readonly = util.getBooleanOption(options, 'readonly');\n\tconst fileMustExist = util.getBooleanOption(options, 'fileMustExist');\n\tconst timeout = 'timeout' in options ? options.timeout : 5000;\n\tconst verbose = 'verbose' in options ? options.verbose : null;\n\tconst nativeBinding = 'nativeBinding' in options ? options.nativeBinding : null;\n\n\t// Validate interpreted options\n\tif (readonly && anonymous && !buffer) throw new TypeError('In-memory/temporary databases cannot be readonly');\n\tif (!Number.isInteger(timeout) || timeout < 0) throw new TypeError('Expected the \"timeout\" option to be a positive integer');\n\tif (timeout > 0x7fffffff) throw new RangeError('Option \"timeout\" cannot be greater than 2147483647');\n\tif (verbose != null && typeof verbose !== 'function') throw new TypeError('Expected the \"verbose\" option to be a function');\n\tif (nativeBinding != null && typeof nativeBinding !== 'string' && typeof nativeBinding !== 'object') throw new TypeError('Expected the \"nativeBinding\" option to be a string or addon object');\n\n\t// Load the native addon\n\tlet addon;\n\tif (nativeBinding == null) {\n\t\taddon = DEFAULT_ADDON || (DEFAULT_ADDON = require('bindings')('better_sqlite3.node'));\n\t} else if (typeof nativeBinding === 'string') {\n\t\t// See <https://webpack.js.org/api/module-variables/#__non_webpack_require__-webpack-specific>\n\t\tconst requireFunc = typeof __non_webpack_require__ === 'function' ? __non_webpack_require__ : require;\n\t\taddon = requireFunc(path.resolve(nativeBinding).replace(/(\\.node)?$/, '.node'));\n\t} else {\n\t\t// See <https://github.com/WiseLibs/better-sqlite3/issues/972>\n\t\taddon = nativeBinding;\n\t}\n\n\tif (!addon.isInitialized) {\n\t\taddon.setErrorConstructor(SqliteError);\n\t\taddon.isInitialized = true;\n\t}\n\n\t// Make sure the specified directory exists\n\tif (!anonymous && !filename.startsWith('file:') && !fs.existsSync(path.dirname(filename))) {\n\t\tthrow new TypeError('Cannot open database because the directory does not exist');\n\t}\n\n\tObject.defineProperties(this, {\n\t\t[util.cppdb]: { value: new addon.Database(filename, filenameGiven, anonymous, readonly, fileMustExist, timeout, verbose || null, buffer || null) },\n\t\t...wrappers.getters,\n\t});\n}\n\nconst wrappers = require('./methods/wrappers');\nDatabase.prototype.prepare = wrappers.prepare;\nDatabase.prototype.transaction = require('./methods/transaction');\nDatabase.prototype.pragma = require('./methods/pragma');\nDatabase.prototype.backup = require('./methods/backup');\nDatabase.prototype.serialize = require('./methods/serialize');\nDatabase.prototype.function = require('./methods/function');\nDatabase.prototype.aggregate = require('./methods/aggregate');\nDatabase.prototype.table = require('./methods/table');\nDatabase.prototype.loadExtension = wrappers.loadExtension;\nDatabase.prototype.exec = wrappers.exec;\nDatabase.prototype.close = wrappers.close;\nDatabase.prototype.defaultSafeIntegers = wrappers.defaultSafeIntegers;\nDatabase.prototype.unsafeMode = wrappers.unsafeMode;\nDatabase.prototype[util.inspect] = require('./methods/inspect');\n\nmodule.exports = Database;\n","'use strict';\nmodule.exports = require('./database');\nmodule.exports.SqliteError = require('./sqlite-error');\n","import { randomUUID } from \"node:crypto\";\nimport { createDriver, type Dialect, type Driver } from \"./driver.js\";\nimport { QueryBuilder } from \"./query.js\";\nimport type {\n\tConnectionConfig,\n\tDatabaseDriver,\n\tQueryResult,\n\tQueryRunner,\n} from \"./types.js\";\n\nexport type { ConnectionConfig, DatabaseDriver, QueryResult };\n\nexport class DatabaseConnection implements QueryRunner {\n\tprivate config: ConnectionConfig;\n\tprivate driver: Driver | null = null;\n\n\tconstructor(config: ConnectionConfig) {\n\t\tthis.config = {\n\t\t\tdriver: \"mysql\",\n\t\t\thost: \"127.0.0.1\",\n\t\t\tcharset: \"utf8mb4\",\n\t\t\tprefix: \"\",\n\t\t\t...config,\n\t\t};\n\n\t\tif (this.config.port === undefined) {\n\t\t\tif (this.config.driver === \"mysql\") this.config.port = 3306;\n\t\t\telse if (this.config.driver === \"postgresql\") this.config.port = 5432;\n\t\t}\n\t}\n\n\tasync connect(): Promise<void> {\n\t\tif (this.driver !== null) return;\n\t\tthis.driver = await createDriver(this.config);\n\t\tawait this.driver.connect();\n\t}\n\n\tasync disconnect(): Promise<void> {\n\t\tif (this.driver !== null) {\n\t\t\tawait this.driver.disconnect();\n\t\t\tthis.driver = null;\n\t\t}\n\t}\n\n\tasync raw(sql: string, bindings?: any[]): Promise<QueryResult> {\n\t\tthis.ensureConnected();\n\t\treturn this.driver!.raw(sql, bindings);\n\t}\n\n\ttable(tableName: string): QueryBuilder {\n\t\treturn new QueryBuilder(this, `${this.config.prefix ?? \"\"}${tableName}`);\n\t}\n\n\tisConnected(): boolean {\n\t\treturn this.driver !== null && this.driver.isConnected();\n\t}\n\n\tgetDriver(): DatabaseDriver {\n\t\treturn (this.config.driver ?? \"mysql\") as DatabaseDriver;\n\t}\n\n\tgetDialect(): Dialect {\n\t\tthis.ensureConnected();\n\t\treturn this.driver!.getDialect();\n\t}\n\n\tgetPrefix(): string {\n\t\treturn this.config.prefix ?? \"\";\n\t}\n\n\tgetConfig(): Readonly<ConnectionConfig> {\n\t\treturn { ...this.config };\n\t}\n\n\tasync transaction<T>(\n\t\tcallback: (trx: DatabaseConnection) => Promise<T>,\n\t): Promise<T> {\n\t\tthis.ensureConnected();\n\n\t\treturn this.driver!.transaction(async (_driver: Driver) => {\n\t\t\tconst trxConnection = new DatabaseConnection(this.config);\n\t\t\ttrxConnection[\"driver\"] = this.driver;\n\n\t\t\ttrxConnection.raw = async (\n\t\t\t\tsql: string,\n\t\t\t\tbindings?: any[],\n\t\t\t): Promise<QueryResult> => {\n\t\t\t\treturn this.driver!.raw(sql, bindings);\n\t\t\t};\n\n\t\t\treturn callback(trxConnection);\n\t\t});\n\t}\n\n\tstatic generateId(): string {\n\t\treturn randomUUID();\n\t}\n\n\tprivate ensureConnected(): void {\n\t\tif (this.driver === null || !this.driver.isConnected()) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Database not connected. Call connect() before performing operations.\",\n\t\t\t);\n\t\t}\n\t}\n}\n","export interface Dialect {\n\twrapIdentifier(identifier: string): string;\n\tmakeParameter(index: number): string;\n\tcompileLimitOffset(\n\t\tbindings: any[],\n\t\tlimit: number | null,\n\t\toffset: number | null,\n\t): string;\n\tcompileInsertReturning(\n\t\tsql: string,\n\t\tbindings: any[],\n\t\tidColumn?: string,\n\t): string;\n\tcompileTruncate(tableName: string): string;\n\tcompileCreateMigrationsTable(): string;\n\tcompileColumn(column: ColumnCompileOptions): string;\n\tcompileModifyColumn(column: ColumnCompileOptions): string;\n\tcompileTableBlueprint(\n\t\ttableName: string,\n\t\tcolumns: ColumnCompileOptions[],\n\t\tconstraints: string[],\n\t): string;\n\tcompileAddColumns(tableName: string, columns: ColumnCompileOptions[]): string;\n\tcompileDropColumns(tableName: string, columns: string[]): string;\n\tcompileRenameColumn(tableName: string, from: string, to: string): string;\n\tcompileCreateTable(\n\t\ttableName: string,\n\t\tcolumns: ColumnCompileOptions[],\n\t\tconstraints: string[],\n\t): string;\n\tcompileRenameTable(from: string, to: string): string;\n\tcompileDropTable(tableName: string): string;\n\tcompileDropTableIfExists(tableName: string): string;\n\tcompileHasTable(tableName: string): string;\n\tcompileHasColumn(tableName: string, columnName: string): string;\n\tcompileInsert(sql: string): string;\n}\n\nexport interface ColumnCompileOptions {\n\tname: string;\n\ttype: string;\n\tnullable: boolean;\n\tdefaultValue: any;\n\tunsigned: boolean;\n\tunique: boolean;\n\tprimary: boolean;\n\tindex: boolean;\n\tcomment: string | null;\n\tafter: string | null;\n\tfirst: boolean;\n\tautoIncrement: boolean;\n\tprecision: number | null;\n\tscale: number | null;\n\tlength: number | null;\n\tvalues: string[] | null;\n\tisForeignId: boolean;\n}\n\nexport class MysqlDialect implements Dialect {\n\twrapIdentifier(identifier: string): string {\n\t\treturn `\\`${identifier.replace(/`/g, \"``\")}\\``;\n\t}\n\n\tmakeParameter(_index: number): string {\n\t\treturn \"?\";\n\t}\n\n\tcompileLimitOffset(\n\t\tbindings: any[],\n\t\tlimit: number | null,\n\t\toffset: number | null,\n\t): string {\n\t\tif (limit === null && offset === null) return \"\";\n\t\tif (offset !== null) {\n\t\t\tbindings.push(limit ?? 0, offset);\n\t\t\treturn \" LIMIT ? OFFSET ?\";\n\t\t}\n\t\tbindings.push(limit);\n\t\treturn \" LIMIT ?\";\n\t}\n\n\tcompileInsertReturning(\n\t\tsql: string,\n\t\t_bindings: any[],\n\t\t_idColumn?: string,\n\t): string {\n\t\treturn `${sql}; SELECT LAST_INSERT_ID() as id`;\n\t}\n\n\tcompileTruncate(tableName: string): string {\n\t\treturn `TRUNCATE TABLE ${this.wrapIdentifier(tableName)}`;\n\t}\n\n\tcompileCreateMigrationsTable(): string {\n\t\treturn `CREATE TABLE IF NOT EXISTS \\`migrations\\` (\n \\`id\\` INT AUTO_INCREMENT PRIMARY KEY,\n \\`name\\` VARCHAR(255) NOT NULL,\n \\`batch\\` INT NOT NULL,\n \\`executed_at\\` TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n)`;\n\t}\n\n\tprivate mapType(type: string, options: ColumnCompileOptions): string {\n\t\tswitch (type) {\n\t\t\tcase \"id\":\n\t\t\tcase \"increments\":\n\t\t\t\treturn \"INT AUTO_INCREMENT PRIMARY KEY\";\n\t\t\tcase \"bigIncrements\":\n\t\t\t\treturn \"BIGINT AUTO_INCREMENT PRIMARY KEY\";\n\t\t\tcase \"string\":\n\t\t\t\treturn `VARCHAR(${options.length ?? 255})`;\n\t\t\tcase \"text\":\n\t\t\t\treturn \"TEXT\";\n\t\t\tcase \"integer\":\n\t\t\t\treturn \"INT\";\n\t\t\tcase \"bigInteger\":\n\t\t\t\treturn \"BIGINT\";\n\t\t\tcase \"tinyInteger\":\n\t\t\t\treturn \"TINYINT\";\n\t\t\tcase \"smallInteger\":\n\t\t\t\treturn \"SMALLINT\";\n\t\t\tcase \"boolean\":\n\t\t\t\treturn \"TINYINT(1)\";\n\t\t\tcase \"float\":\n\t\t\t\treturn \"FLOAT\";\n\t\t\tcase \"double\":\n\t\t\t\treturn \"DOUBLE\";\n\t\t\tcase \"decimal\":\n\t\t\t\treturn `DECIMAL(${options.precision ?? 10},${options.scale ?? 0})`;\n\t\t\tcase \"date\":\n\t\t\t\treturn \"DATE\";\n\t\t\tcase \"datetime\":\n\t\t\t\treturn \"DATETIME\";\n\t\t\tcase \"timestamp\":\n\t\t\t\treturn \"TIMESTAMP\";\n\t\t\tcase \"time\":\n\t\t\t\treturn \"TIME\";\n\t\t\tcase \"year\":\n\t\t\t\treturn \"YEAR\";\n\t\t\tcase \"json\":\n\t\t\tcase \"jsonb\":\n\t\t\t\treturn \"JSON\";\n\t\t\tcase \"binary\":\n\t\t\t\treturn \"BLOB\";\n\t\t\tcase \"uuid\":\n\t\t\t\treturn \"CHAR(36)\";\n\t\t\tcase \"foreignId\":\n\t\t\t\treturn \"INT UNSIGNED\";\n\t\t\tdefault:\n\t\t\t\treturn type;\n\t\t}\n\t}\n\n\tcompileColumn(options: ColumnCompileOptions): string {\n\t\tlet sql = `${this.wrapIdentifier(options.name)} ${this.mapType(options.type, options)}`;\n\t\tif (\n\t\t\toptions.unsigned &&\n\t\t\toptions.type !== \"id\" &&\n\t\t\toptions.type !== \"increments\" &&\n\t\t\toptions.type !== \"bigIncrements\" &&\n\t\t\toptions.type !== \"foreignId\"\n\t\t)\n\t\t\tsql += \" UNSIGNED\";\n\t\tif (\n\t\t\toptions.autoIncrement &&\n\t\t\toptions.type !== \"id\" &&\n\t\t\toptions.type !== \"increments\" &&\n\t\t\toptions.type !== \"bigIncrements\"\n\t\t)\n\t\t\tsql += \" AUTO_INCREMENT\";\n\t\tif (options.defaultValue !== undefined && options.defaultValue !== null) {\n\t\t\tsql += ` DEFAULT ${this.formatDefault(options.defaultValue)}`;\n\t\t} else if (\n\t\t\t!options.nullable &&\n\t\t\t!options.autoIncrement &&\n\t\t\toptions.type !== \"id\" &&\n\t\t\toptions.type !== \"increments\" &&\n\t\t\toptions.type !== \"bigIncrements\"\n\t\t) {\n\t\t\tsql += \" NOT NULL\";\n\t\t}\n\t\tif (options.nullable) sql += \" NULL\";\n\t\tif (options.primary) sql += \" PRIMARY KEY\";\n\t\tif (options.unique) sql += \" UNIQUE\";\n\t\tif (options.comment !== null)\n\t\t\tsql += ` COMMENT '${options.comment.replace(/'/g, \"\\\\'\")}'`;\n\t\tif (options.after !== null)\n\t\t\tsql += ` AFTER ${this.wrapIdentifier(options.after)}`;\n\t\treturn sql;\n\t}\n\n\tcompileModifyColumn(options: ColumnCompileOptions): string {\n\t\treturn `MODIFY COLUMN ${this.compileColumn(options)}`;\n\t}\n\n\tcompileTableBlueprint(\n\t\t_tableName: string,\n\t\tcolumns: ColumnCompileOptions[],\n\t\tconstraints: string[],\n\t): string {\n\t\tconst parts = [\n\t\t\t...columns.map((c) => this.compileColumn(c)),\n\t\t\t...constraints,\n\t\t];\n\t\treturn parts.join(\",\\n \");\n\t}\n\n\tcompileAddColumns(\n\t\t_tableName: string,\n\t\tcolumns: ColumnCompileOptions[],\n\t): string {\n\t\treturn `ADD ${columns.map((c) => this.compileColumn(c)).join(\", ADD \")}`;\n\t}\n\n\tcompileDropColumns(_tableName: string, columns: string[]): string {\n\t\treturn `DROP COLUMN ${columns.map((c) => this.wrapIdentifier(c)).join(\", DROP COLUMN \")}`;\n\t}\n\n\tcompileRenameColumn(_tableName: string, from: string, to: string): string {\n\t\treturn `RENAME COLUMN ${this.wrapIdentifier(from)} TO ${this.wrapIdentifier(to)}`;\n\t}\n\n\tcompileCreateTable(\n\t\ttableName: string,\n\t\tcolumns: ColumnCompileOptions[],\n\t\tconstraints: string[],\n\t): string {\n\t\tconst body = this.compileTableBlueprint(tableName, columns, constraints);\n\t\treturn `CREATE TABLE ${this.wrapIdentifier(tableName)} (\\n ${body}\\n)`;\n\t}\n\n\tcompileRenameTable(from: string, to: string): string {\n\t\treturn `RENAME TABLE ${this.wrapIdentifier(from)} TO ${this.wrapIdentifier(to)}`;\n\t}\n\n\tcompileDropTable(tableName: string): string {\n\t\treturn `DROP TABLE ${this.wrapIdentifier(tableName)}`;\n\t}\n\n\tcompileDropTableIfExists(tableName: string): string {\n\t\treturn `DROP TABLE IF EXISTS ${this.wrapIdentifier(tableName)}`;\n\t}\n\n\tcompileHasTable(_tableName: string): string {\n\t\treturn `SELECT COUNT(*) as \\`count\\` FROM \\`information_schema\\`.\\`tables\\` WHERE \\`table_schema\\` = DATABASE() AND \\`table_name\\` = ?`;\n\t}\n\n\tcompileHasColumn(_tableName: string, _columnName: string): string {\n\t\treturn `SELECT COUNT(*) as \\`count\\` FROM \\`information_schema\\`.\\`columns\\` WHERE \\`table_schema\\` = DATABASE() AND \\`table_name\\` = ? AND \\`column_name\\` = ?`;\n\t}\n\n\tcompileInsert(sql: string): string {\n\t\treturn sql;\n\t}\n\n\tprivate formatDefault(value: any): string {\n\t\tif (typeof value === \"string\") {\n\t\t\tif (value === \"CURRENT_TIMESTAMP\") return value;\n\t\t\treturn `'${value.replace(/'/g, \"\\\\'\")}'`;\n\t\t}\n\t\tif (value === null) return \"NULL\";\n\t\tif (typeof value === \"boolean\") return value ? \"1\" : \"0\";\n\t\treturn String(value);\n\t}\n}\n\nexport class SqliteDialect implements Dialect {\n\twrapIdentifier(identifier: string): string {\n\t\treturn `\"${identifier.replace(/\"/g, '\"\"')}\"`;\n\t}\n\n\tmakeParameter(_index: number): string {\n\t\treturn \"?\";\n\t}\n\n\tcompileLimitOffset(\n\t\tbindings: any[],\n\t\tlimit: number | null,\n\t\toffset: number | null,\n\t): string {\n\t\tif (limit === null && offset === null) return \"\";\n\t\tif (offset !== null) {\n\t\t\tbindings.push(limit ?? 0, offset);\n\t\t\treturn \" LIMIT ? OFFSET ?\";\n\t\t}\n\t\tbindings.push(limit);\n\t\treturn \" LIMIT ?\";\n\t}\n\n\tcompileInsertReturning(\n\t\tsql: string,\n\t\t_bindings: any[],\n\t\t_idColumn?: string,\n\t): string {\n\t\treturn `${sql}; SELECT last_insert_rowid() as id`;\n\t}\n\n\tcompileTruncate(tableName: string): string {\n\t\treturn `DELETE FROM ${this.wrapIdentifier(tableName)}`;\n\t}\n\n\tcompileCreateMigrationsTable(): string {\n\t\treturn `CREATE TABLE IF NOT EXISTS \"migrations\" (\n \"id\" INTEGER PRIMARY KEY AUTOINCREMENT,\n \"name\" TEXT NOT NULL,\n \"batch\" INTEGER NOT NULL,\n \"executed_at\" TEXT DEFAULT CURRENT_TIMESTAMP\n)`;\n\t}\n\n\tprivate mapType(type: string, options: ColumnCompileOptions): string {\n\t\tswitch (type) {\n\t\t\tcase \"id\":\n\t\t\tcase \"increments\":\n\t\t\t\treturn \"INTEGER PRIMARY KEY AUTOINCREMENT\";\n\t\t\tcase \"bigIncrements\":\n\t\t\t\treturn \"INTEGER PRIMARY KEY AUTOINCREMENT\";\n\t\t\tcase \"string\":\n\t\t\t\treturn `VARCHAR(${options.length ?? 255})`;\n\t\t\tcase \"text\":\n\t\t\t\treturn \"TEXT\";\n\t\t\tcase \"integer\":\n\t\t\t\treturn \"INTEGER\";\n\t\t\tcase \"bigInteger\":\n\t\t\t\treturn \"INTEGER\";\n\t\t\tcase \"tinyInteger\":\n\t\t\t\treturn \"INTEGER\";\n\t\t\tcase \"smallInteger\":\n\t\t\t\treturn \"INTEGER\";\n\t\t\tcase \"boolean\":\n\t\t\t\treturn \"INTEGER\";\n\t\t\tcase \"float\":\n\t\t\t\treturn \"REAL\";\n\t\t\tcase \"double\":\n\t\t\t\treturn \"REAL\";\n\t\t\tcase \"decimal\":\n\t\t\t\treturn \"REAL\";\n\t\t\tcase \"date\":\n\t\t\t\treturn \"TEXT\";\n\t\t\tcase \"datetime\":\n\t\t\t\treturn \"TEXT\";\n\t\t\tcase \"timestamp\":\n\t\t\t\treturn \"TEXT\";\n\t\t\tcase \"time\":\n\t\t\t\treturn \"TEXT\";\n\t\t\tcase \"year\":\n\t\t\t\treturn \"TEXT\";\n\t\t\tcase \"json\":\n\t\t\tcase \"jsonb\":\n\t\t\t\treturn \"TEXT\";\n\t\t\tcase \"binary\":\n\t\t\t\treturn \"BLOB\";\n\t\t\tcase \"uuid\":\n\t\t\t\treturn \"TEXT\";\n\t\t\tcase \"foreignId\":\n\t\t\t\treturn \"INTEGER\";\n\t\t\tdefault:\n\t\t\t\treturn type;\n\t\t}\n\t}\n\n\tcompileColumn(options: ColumnCompileOptions): string {\n\t\tlet sql = `${this.wrapIdentifier(options.name)} ${this.mapType(options.type, options)}`;\n\t\tif (\n\t\t\toptions.autoIncrement &&\n\t\t\toptions.type !== \"id\" &&\n\t\t\toptions.type !== \"increments\" &&\n\t\t\toptions.type !== \"bigIncrements\"\n\t\t)\n\t\t\tsql += \" AUTOINCREMENT\";\n\t\tif (\n\t\t\t!options.nullable &&\n\t\t\toptions.defaultValue === undefined &&\n\t\t\t!options.autoIncrement &&\n\t\t\toptions.type !== \"id\" &&\n\t\t\toptions.type !== \"increments\" &&\n\t\t\toptions.type !== \"bigIncrements\"\n\t\t)\n\t\t\tsql += \" NOT NULL\";\n\t\tif (options.nullable) sql += \" NULL\";\n\t\tif (options.defaultValue !== undefined && options.defaultValue !== null) {\n\t\t\tsql += ` DEFAULT ${this.formatDefault(options.defaultValue)}`;\n\t\t}\n\t\tif (options.primary) sql += \" PRIMARY KEY\";\n\t\tif (options.unique) sql += \" UNIQUE\";\n\t\treturn sql;\n\t}\n\n\tcompileModifyColumn(options: ColumnCompileOptions): string {\n\t\treturn this.compileColumn(options);\n\t}\n\n\tcompileTableBlueprint(\n\t\t_tableName: string,\n\t\tcolumns: ColumnCompileOptions[],\n\t\tconstraints: string[],\n\t): string {\n\t\tconst parts = [\n\t\t\t...columns.map((c) => this.compileColumn(c)),\n\t\t\t...constraints,\n\t\t];\n\t\treturn parts.join(\",\\n \");\n\t}\n\n\tcompileAddColumns(\n\t\t_tableName: string,\n\t\tcolumns: ColumnCompileOptions[],\n\t): string {\n\t\treturn `ADD COLUMN ${columns.map((c) => this.compileColumn(c)).join(\", ADD COLUMN \")}`;\n\t}\n\n\tcompileDropColumns(_tableName: string, columns: string[]): string {\n\t\treturn `DROP COLUMN ${columns.map((c) => this.wrapIdentifier(c)).join(\", DROP COLUMN \")}`;\n\t}\n\n\tcompileRenameColumn(_tableName: string, from: string, to: string): string {\n\t\treturn `RENAME COLUMN ${this.wrapIdentifier(from)} TO ${this.wrapIdentifier(to)}`;\n\t}\n\n\tcompileCreateTable(\n\t\ttableName: string,\n\t\tcolumns: ColumnCompileOptions[],\n\t\tconstraints: string[],\n\t): string {\n\t\tconst body = this.compileTableBlueprint(tableName, columns, constraints);\n\t\treturn `CREATE TABLE ${this.wrapIdentifier(tableName)} (\\n ${body}\\n)`;\n\t}\n\n\tcompileRenameTable(from: string, to: string): string {\n\t\treturn `ALTER TABLE ${this.wrapIdentifier(from)} RENAME TO ${this.wrapIdentifier(to)}`;\n\t}\n\n\tcompileDropTable(tableName: string): string {\n\t\treturn `DROP TABLE ${this.wrapIdentifier(tableName)}`;\n\t}\n\n\tcompileDropTableIfExists(tableName: string): string {\n\t\treturn `DROP TABLE IF EXISTS ${this.wrapIdentifier(tableName)}`;\n\t}\n\n\tcompileHasTable(_tableName: string): string {\n\t\treturn `SELECT COUNT(*) as \"count\" FROM \"sqlite_master\" WHERE \"type\" = 'table' AND \"name\" = ?`;\n\t}\n\n\tcompileHasColumn(_tableName: string, _columnName: string): string {\n\t\treturn `PRAGMA table_info(${this.wrapIdentifier(_tableName)})`;\n\t}\n\n\tcompileInsert(sql: string): string {\n\t\treturn sql;\n\t}\n\n\tprivate formatDefault(value: any): string {\n\t\tif (typeof value === \"string\") {\n\t\t\tif (value === \"CURRENT_TIMESTAMP\") return value;\n\t\t\treturn `'${value.replace(/'/g, \"''\")}'`;\n\t\t}\n\t\tif (value === null) return \"NULL\";\n\t\tif (typeof value === \"boolean\") return value ? \"1\" : \"0\";\n\t\treturn String(value);\n\t}\n}\n\nexport class PostgresqlDialect implements Dialect {\n\twrapIdentifier(identifier: string): string {\n\t\treturn `\"${identifier.replace(/\"/g, '\"\"')}\"`;\n\t}\n\n\tmakeParameter(index: number): string {\n\t\treturn `$${index + 1}`;\n\t}\n\n\tcompileLimitOffset(\n\t\tbindings: any[],\n\t\tlimit: number | null,\n\t\toffset: number | null,\n\t): string {\n\t\tif (limit === null && offset === null) return \"\";\n\t\tconst start = bindings.length;\n\t\tif (offset !== null) {\n\t\t\tbindings.push(limit ?? 0, offset);\n\t\t\treturn ` LIMIT $${start + 1} OFFSET $${start + 2}`;\n\t\t}\n\t\tbindings.push(limit);\n\t\treturn ` LIMIT $${start + 1}`;\n\t}\n\n\tcompileInsertReturning(\n\t\tsql: string,\n\t\t_bindings: any[],\n\t\tidColumn = \"id\",\n\t): string {\n\t\treturn `${sql} RETURNING ${this.wrapIdentifier(idColumn)}`;\n\t}\n\n\tcompileTruncate(tableName: string): string {\n\t\treturn `TRUNCATE TABLE ${this.wrapIdentifier(tableName)} RESTART IDENTITY CASCADE`;\n\t}\n\n\tcompileCreateMigrationsTable(): string {\n\t\treturn `CREATE TABLE IF NOT EXISTS \"migrations\" (\n \"id\" SERIAL PRIMARY KEY,\n \"name\" VARCHAR(255) NOT NULL,\n \"batch\" INTEGER NOT NULL,\n \"executed_at\" TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n)`;\n\t}\n\n\tprivate mapType(type: string, options: ColumnCompileOptions): string {\n\t\tswitch (type) {\n\t\t\tcase \"id\":\n\t\t\tcase \"increments\":\n\t\t\t\treturn \"SERIAL PRIMARY KEY\";\n\t\t\tcase \"bigIncrements\":\n\t\t\t\treturn \"BIGSERIAL PRIMARY KEY\";\n\t\t\tcase \"string\":\n\t\t\t\treturn `VARCHAR(${options.length ?? 255})`;\n\t\t\tcase \"text\":\n\t\t\t\treturn \"TEXT\";\n\t\t\tcase \"integer\":\n\t\t\t\treturn \"INTEGER\";\n\t\t\tcase \"bigInteger\":\n\t\t\t\treturn \"BIGINT\";\n\t\t\tcase \"tinyInteger\":\n\t\t\t\treturn \"SMALLINT\";\n\t\t\tcase \"smallInteger\":\n\t\t\t\treturn \"SMALLINT\";\n\t\t\tcase \"boolean\":\n\t\t\t\treturn \"BOOLEAN\";\n\t\t\tcase \"float\":\n\t\t\t\treturn \"REAL\";\n\t\t\tcase \"double\":\n\t\t\t\treturn \"DOUBLE PRECISION\";\n\t\t\tcase \"decimal\":\n\t\t\t\treturn `DECIMAL(${options.precision ?? 10},${options.scale ?? 0})`;\n\t\t\tcase \"date\":\n\t\t\t\treturn \"DATE\";\n\t\t\tcase \"datetime\":\n\t\t\t\treturn \"TIMESTAMP\";\n\t\t\tcase \"timestamp\":\n\t\t\t\treturn \"TIMESTAMP\";\n\t\t\tcase \"time\":\n\t\t\t\treturn \"TIME\";\n\t\t\tcase \"year\":\n\t\t\t\treturn \"INTEGER\";\n\t\t\tcase \"json\":\n\t\t\t\treturn \"JSON\";\n\t\t\tcase \"jsonb\":\n\t\t\t\treturn \"JSONB\";\n\t\t\tcase \"binary\":\n\t\t\t\treturn \"BYTEA\";\n\t\t\tcase \"uuid\":\n\t\t\t\treturn \"UUID\";\n\t\t\tcase \"foreignId\":\n\t\t\t\treturn \"INTEGER\";\n\t\t\tdefault:\n\t\t\t\treturn type;\n\t\t}\n\t}\n\n\tcompileColumn(options: ColumnCompileOptions): string {\n\t\tlet sql = `${this.wrapIdentifier(options.name)} ${this.mapType(options.type, options)}`;\n\t\tif (\n\t\t\t!options.nullable &&\n\t\t\toptions.type !== \"id\" &&\n\t\t\toptions.type !== \"increments\" &&\n\t\t\toptions.type !== \"bigIncrements\"\n\t\t)\n\t\t\tsql += \" NOT NULL\";\n\t\tif (options.nullable) sql += \" NULL\";\n\t\tif (options.defaultValue !== undefined && options.defaultValue !== null) {\n\t\t\tsql += ` DEFAULT ${this.formatDefault(options.defaultValue)}`;\n\t\t}\n\t\tif (\n\t\t\toptions.primary &&\n\t\t\toptions.type !== \"id\" &&\n\t\t\toptions.type !== \"increments\" &&\n\t\t\toptions.type !== \"bigIncrements\"\n\t\t)\n\t\t\tsql += \" PRIMARY KEY\";\n\t\tif (options.unique) sql += \" UNIQUE\";\n\t\tif (options.comment !== null)\n\t\t\tsql += ` -- ${options.comment.replace(/--/g, \"\")}`;\n\t\treturn sql;\n\t}\n\n\tcompileModifyColumn(options: ColumnCompileOptions): string {\n\t\treturn `ALTER COLUMN ${this.wrapIdentifier(options.name)} TYPE ${this.mapType(options.type, options)}`;\n\t}\n\n\tcompileTableBlueprint(\n\t\t_tableName: string,\n\t\tcolumns: ColumnCompileOptions[],\n\t\tconstraints: string[],\n\t): string {\n\t\tconst parts = [\n\t\t\t...columns.map((c) => this.compileColumn(c)),\n\t\t\t...constraints,\n\t\t];\n\t\treturn parts.join(\",\\n \");\n\t}\n\n\tcompileAddColumns(\n\t\t_tableName: string,\n\t\tcolumns: ColumnCompileOptions[],\n\t): string {\n\t\treturn `ADD COLUMN ${columns.map((c) => this.compileColumn(c)).join(\", ADD COLUMN \")}`;\n\t}\n\n\tcompileDropColumns(_tableName: string, columns: string[]): string {\n\t\treturn `DROP COLUMN ${columns.map((c) => this.wrapIdentifier(c)).join(\", DROP COLUMN \")}`;\n\t}\n\n\tcompileRenameColumn(_tableName: string, from: string, to: string): string {\n\t\treturn `RENAME COLUMN ${this.wrapIdentifier(from)} TO ${this.wrapIdentifier(to)}`;\n\t}\n\n\tcompileCreateTable(\n\t\ttableName: string,\n\t\tcolumns: ColumnCompileOptions[],\n\t\tconstraints: string[],\n\t): string {\n\t\tconst body = this.compileTableBlueprint(tableName, columns, constraints);\n\t\treturn `CREATE TABLE ${this.wrapIdentifier(tableName)} (\\n ${body}\\n)`;\n\t}\n\n\tcompileRenameTable(from: string, to: string): string {\n\t\treturn `ALTER TABLE ${this.wrapIdentifier(from)} RENAME TO ${this.wrapIdentifier(to)}`;\n\t}\n\n\tcompileDropTable(_tableName: string): string {\n\t\treturn `DROP TABLE IF EXISTS ${this.wrapIdentifier(_tableName)}`;\n\t}\n\n\tcompileDropTableIfExists(tableName: string): string {\n\t\treturn `DROP TABLE IF EXISTS ${this.wrapIdentifier(tableName)}`;\n\t}\n\n\tcompileHasTable(_tableName: string): string {\n\t\treturn `SELECT COUNT(*)::int as \"count\" FROM \"information_schema\".\"tables\" WHERE \"table_schema\" = 'public' AND \"table_name\" = $1`;\n\t}\n\n\tcompileHasColumn(_tableName: string, _columnName: string): string {\n\t\treturn `SELECT COUNT(*)::int as \"count\" FROM \"information_schema\".\"columns\" WHERE \"table_schema\" = 'public' AND \"table_name\" = $1 AND \"column_name\" = $2`;\n\t}\n\n\tcompileInsert(sql: string): string {\n\t\treturn sql;\n\t}\n\n\tprivate formatDefault(value: any): string {\n\t\tif (typeof value === \"string\") {\n\t\t\tif (value === \"CURRENT_TIMESTAMP\") return value;\n\t\t\treturn `'${value.replace(/'/g, \"''\")}'`;\n\t\t}\n\t\tif (value === null) return \"NULL\";\n\t\tif (typeof value === \"boolean\") return value ? \"true\" : \"false\";\n\t\treturn String(value);\n\t}\n}\n\nexport function createDialect(driver: string): Dialect {\n\tswitch (driver) {\n\t\tcase \"mysql\":\n\t\t\treturn new MysqlDialect();\n\t\tcase \"sqlite\":\n\t\t\treturn new SqliteDialect();\n\t\tcase \"postgresql\":\n\t\t\treturn new PostgresqlDialect();\n\t\tdefault:\n\t\t\treturn new MysqlDialect();\n\t}\n}\n","import {\n\ttype Dialect,\n\tMysqlDialect,\n\tPostgresqlDialect,\n\tSqliteDialect,\n} from \"./dialect.js\";\nexport type { Dialect }\nimport type { ConnectionConfig, QueryResult } from \"./types.js\";\n\nexport interface Driver {\n\tconnect(): Promise<void>;\n\tdisconnect(): Promise<void>;\n\tisConnected(): boolean;\n\traw(sql: string, bindings?: any[]): Promise<QueryResult>;\n\ttransaction<T>(callback: (driver: Driver) => Promise<T>): Promise<T>;\n\tgetDialect(): Dialect;\n\tgetDriver(): string;\n}\n\nexport async function createDriver(config: ConnectionConfig): Promise<Driver> {\n\tconst driverType = config.driver ?? \"mysql\";\n\n\tswitch (driverType) {\n\t\tcase \"mysql\":\n\t\t\treturn createMysqlDriver(config);\n\t\tcase \"postgresql\":\n\t\t\treturn createPostgresqlDriver(config);\n\t\tcase \"sqlite\":\n\t\t\treturn createSqliteDriver(config);\n\t\tdefault:\n\t\t\treturn createMysqlDriver(config);\n\t}\n}\n\nasync function createMysqlDriver(config: ConnectionConfig): Promise<Driver> {\n\tlet mysqlPackage: any;\n\ttry {\n\t\t// @ts-expect-error - mysql2 is an optional runtime dependency\n\t\tmysqlPackage = await import(\"mysql2/promise\");\n\t} catch {\n\t\tthrow new Error(\n\t\t\t\"MySQL driver (mysql2) is not installed. Run: npm install mysql2\",\n\t\t);\n\t}\n\n\tlet pool: any = null;\n\tconst dialect = new MysqlDialect();\n\n\tconst driver: Driver = {\n\t\tasync connect(): Promise<void> {\n\t\t\tpool = mysqlPackage.createPool({\n\t\t\t\thost: config.host ?? \"127.0.0.1\",\n\t\t\t\tport: config.port ?? 3306,\n\t\t\t\tuser: config.username,\n\t\t\t\tpassword: config.password,\n\t\t\t\tdatabase: config.database,\n\t\t\t\tcharset: config.charset ?? \"utf8mb4\",\n\t\t\t\twaitForConnections: true,\n\t\t\t\tconnectionLimit: 10,\n\t\t\t\tqueueLimit: 0,\n\t\t\t});\n\t\t\t// Verify connection\n\t\t\tconst conn = await pool.getConnection();\n\t\t\tconn.release();\n\t\t},\n\n\t\tasync disconnect(): Promise<void> {\n\t\t\tif (pool !== null) {\n\t\t\t\tawait pool.end();\n\t\t\t\tpool = null;\n\t\t\t}\n\t\t},\n\n\t\tisConnected(): boolean {\n\t\t\treturn pool !== null;\n\t\t},\n\n\t\tasync raw(sql: string, bindings?: any[]): Promise<QueryResult> {\n\t\t\tif (pool === null) {\n\t\t\t\tthrow new Error(\"Database not connected. Call connect() first.\");\n\t\t\t}\n\t\t\tconst [rows, fields] = await pool.execute(sql, bindings ?? []);\n\t\t\treturn { rows, fields };\n\t\t},\n\n\t\tasync transaction<T>(callback: (d: Driver) => Promise<T>): Promise<T> {\n\t\t\tif (pool === null) throw new Error(\"Database not connected.\");\n\t\t\tconst conn = await pool.getConnection();\n\t\t\ttry {\n\t\t\t\tawait conn.beginTransaction();\n\t\t\t\tconst trxDriver: Driver = {\n\t\t\t\t\t...driver,\n\t\t\t\t\tasync raw(sql: string, bindings?: any[]): Promise<QueryResult> {\n\t\t\t\t\t\tconst [rows, fields] = await conn.execute(sql, bindings ?? []);\n\t\t\t\t\t\treturn { rows, fields };\n\t\t\t\t\t},\n\t\t\t\t\tgetDialect(): Dialect { return dialect; },\n\t\t\t\t\tgetDriver(): string { return \"mysql\"; },\n\t\t\t\t};\n\t\t\t\tconst result = await callback(trxDriver);\n\t\t\t\tawait conn.commit();\n\t\t\t\treturn result;\n\t\t\t} catch (err) {\n\t\t\t\tawait conn.rollback();\n\t\t\t\tthrow err;\n\t\t\t} finally {\n\t\t\t\tconn.release();\n\t\t\t}\n\t\t},\n\n\t\tgetDialect(): Dialect {\n\t\t\treturn dialect;\n\t\t},\n\n\t\tgetDriver(): string {\n\t\t\treturn \"mysql\";\n\t\t},\n\t};\n\n\treturn driver;\n}\n\nasync function createPostgresqlDriver(\n\tconfig: ConnectionConfig,\n): Promise<Driver> {\n\tlet pgPackage: any;\n\ttry {\n\t\t// @ts-expect-error - pg is an optional runtime dependency\n\t\tpgPackage = await import(\"pg\");\n\t} catch {\n\t\tthrow new Error(\n\t\t\t\"PostgreSQL driver (pg) is not installed. Run: npm install pg\",\n\t\t);\n\t}\n\n\tlet pool: any = null;\n\tconst dialect = new PostgresqlDialect();\n\n\tconst driver: Driver = {\n\t\tasync connect(): Promise<void> {\n\t\t\tconst { Pool } = pgPackage;\n\t\t\tpool = new Pool({\n\t\t\t\thost: config.host ?? \"127.0.0.1\",\n\t\t\t\tport: config.port ?? 5432,\n\t\t\t\tuser: config.username,\n\t\t\t\tpassword: config.password,\n\t\t\t\tdatabase: config.database,\n\t\t\t});\n\t\t\tawait pool.query(\"SELECT 1\");\n\t\t},\n\n\t\tasync disconnect(): Promise<void> {\n\t\t\tif (pool !== null) {\n\t\t\t\tawait pool.end();\n\t\t\t\tpool = null;\n\t\t\t}\n\t\t},\n\n\t\tisConnected(): boolean {\n\t\t\treturn pool !== null;\n\t\t},\n\n\t\tasync raw(sql: string, bindings?: any[]): Promise<QueryResult> {\n\t\t\tif (pool === null) {\n\t\t\t\tthrow new Error(\"Database not connected. Call connect() first.\");\n\t\t\t}\n\t\t\tconst result = await pool.query(sql, bindings ?? []);\n\t\t\treturn { rows: result.rows };\n\t\t},\n\n\t\tasync transaction<T>(callback: (d: Driver) => Promise<T>): Promise<T> {\n\t\t\tif (pool === null) {\n\t\t\t\tthrow new Error(\"Database not connected. Call connect() first.\");\n\t\t\t}\n\t\t\tconst client = await pool.connect();\n\t\t\ttry {\n\t\t\t\tawait client.query(\"BEGIN\");\n\t\t\t\tconst trxDriver: Driver = {\n\t\t\t\t\t...driver,\n\t\t\t\t\tasync raw(sql: string, bindings?: any[]): Promise<QueryResult> {\n\t\t\t\t\t\tconst result = await client.query(sql, bindings ?? []);\n\t\t\t\t\t\treturn { rows: result.rows };\n\t\t\t\t\t},\n\t\t\t\t\tgetDialect(): Dialect {\n\t\t\t\t\t\treturn dialect;\n\t\t\t\t\t},\n\t\t\t\t\tgetDriver(): string {\n\t\t\t\t\t\treturn \"postgresql\";\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tconst result = await callback(trxDriver);\n\t\t\t\tawait client.query(\"COMMIT\");\n\t\t\t\treturn result;\n\t\t\t} catch (err) {\n\t\t\t\tawait client.query(\"ROLLBACK\");\n\t\t\t\tthrow err;\n\t\t\t} finally {\n\t\t\t\tclient.release();\n\t\t\t}\n\t\t},\n\n\t\tgetDialect(): Dialect {\n\t\t\treturn dialect;\n\t\t},\n\n\t\tgetDriver(): string {\n\t\t\treturn \"postgresql\";\n\t\t},\n\t};\n\n\treturn driver;\n}\n\nasync function createSqliteDriver(config: ConnectionConfig): Promise<Driver> {\n\tlet sqlitePackage: any;\n\ttry {\n\t\t// @ts-expect-error - better-sqlite3 is an optional runtime dependency\n\t\tsqlitePackage = await import(\"better-sqlite3\");\n\t} catch {\n\t\tthrow new Error(\n\t\t\t\"SQLite driver (better-sqlite3) is not installed. Run: npm install better-sqlite3\",\n\t\t);\n\t}\n\n\tlet db: any = null;\n\tlet connected = false;\n\tconst dialect = new SqliteDialect();\n\n\tconst driver: Driver = {\n\t\tasync connect(): Promise<void> {\n\t\t\tdb = new sqlitePackage(config.database);\n\t\t\tdb.pragma(\"journal_mode = WAL\");\n\t\t\tconnected = true;\n\t\t},\n\n\t\tasync disconnect(): Promise<void> {\n\t\t\tif (db !== null) {\n\t\t\t\tdb.close();\n\t\t\t\tdb = null;\n\t\t\t\tconnected = false;\n\t\t\t}\n\t\t},\n\n\t\tisConnected(): boolean {\n\t\t\treturn connected;\n\t\t},\n\n\t\tasync raw(sql: string, bindings?: any[]): Promise<QueryResult> {\n\t\t\tif (db === null) {\n\t\t\t\tthrow new Error(\"Database not connected. Call connect() first.\");\n\t\t\t}\n\t\t\tconst trimmedSQL = sql.trim().toUpperCase();\n\t\t\tconst isQuery =\n\t\t\t\ttrimmedSQL.startsWith(\"SELECT\") ||\n\t\t\t\ttrimmedSQL.startsWith(\"WITH\") ||\n\t\t\t\ttrimmedSQL.startsWith(\"PRAGMA\");\n\t\t\tconst stmt = db.prepare(sql);\n\t\t\tif (isQuery) {\n\t\t\t\tconst rows =\n\t\t\t\t\tbindings !== undefined && bindings.length > 0\n\t\t\t\t\t\t? stmt.all(...bindings)\n\t\t\t\t\t\t: stmt.all();\n\t\t\t\treturn { rows };\n\t\t\t}\n\t\t\tif (bindings !== undefined && bindings.length > 0) {\n\t\t\t\tstmt.run(...bindings);\n\t\t\t} else {\n\t\t\t\tstmt.run();\n\t\t\t}\n\t\t\treturn { rows: [] };\n\t\t},\n\n\t\tasync transaction<T>(callback: (d: Driver) => Promise<T>): Promise<T> {\n\t\t\tif (db === null) {\n\t\t\t\tthrow new Error(\"Database not connected. Call connect() first.\");\n\t\t\t}\n\t\t\tdb.exec(\"BEGIN\");\n\t\t\ttry {\n\t\t\t\tconst result = await callback(driver);\n\t\t\t\tdb.exec(\"COMMIT\");\n\t\t\t\treturn result;\n\t\t\t} catch (err) {\n\t\t\t\tdb.exec(\"ROLLBACK\");\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t},\n\n\t\tgetDialect(): Dialect {\n\t\t\treturn dialect;\n\t\t},\n\n\t\tgetDriver(): string {\n\t\t\treturn \"sqlite\";\n\t\t},\n\t};\n\n\treturn driver;\n}\n","import type { Dialect } from \"./dialect.js\";\nimport type { JoinType, OrderDirection, QueryRunner } from \"./types.js\";\n\ninterface WhereClause {\n\ttype:\n\t\t| \"basic\"\n\t\t| \"in\"\n\t\t| \"notIn\"\n\t\t| \"null\"\n\t\t| \"notNull\"\n\t\t| \"between\"\n\t\t| \"notBetween\"\n\t\t| \"like\"\n\t\t| \"nested\";\n\tcolumn?: string;\n\toperator?: string;\n\tvalue?: any;\n\tvalues?: any[];\n\tboolean: \"and\" | \"or\";\n\tnested?: WhereClause[];\n}\n\ninterface JoinClause {\n\ttable: string;\n\tfirst: string;\n\toperator: string;\n\tsecond: string;\n\ttype: JoinType;\n}\n\ninterface OrderByClause {\n\tcolumn: string;\n\tdirection: OrderDirection;\n}\n\ninterface HavingClause {\n\tcolumn: string;\n\toperator: string;\n\tvalue: any;\n}\n\nexport interface PaginatedResult<T = any> {\n\tdata: T[];\n\tcurrentPage: number;\n\tperPage: number;\n\ttotal: number;\n\tlastPage: number;\n\tfrom: number;\n\tto: number;\n\thasMore: boolean;\n\thasPrev: boolean;\n\tisEmpty: boolean;\n}\n\nexport class QueryBuilder {\n\tprivate connection: QueryRunner;\n\tprivate tableName: string;\n\tprivate columns: string[] = [\"*\"];\n\tprivate distinctEnabled = false;\n\tprivate wheres: WhereClause[] = [];\n\tprivate joins: JoinClause[] = [];\n\tprivate orderBys: OrderByClause[] = [];\n\tprivate havings: HavingClause[] = [];\n\tprivate groupBys: string[] = [];\n\tprivate limitValue: number | null = null;\n\tprivate offsetValue: number | null = null;\n\tprivate fromSubquery: string | null = null;\n\n\tconstructor(connection: QueryRunner, tableName: string) {\n\t\tthis.connection = connection;\n\t\tthis.tableName = tableName;\n\t}\n\n\tselect(...columns: string[]): this {\n\t\tthis.columns = columns.length > 0 ? columns : [\"*\"];\n\t\treturn this;\n\t}\n\n\taddSelect(...columns: string[]): this {\n\t\tif (this.columns[0] === \"*\") {\n\t\t\tthis.columns = columns;\n\t\t} else {\n\t\t\tthis.columns.push(...columns);\n\t\t}\n\t\treturn this;\n\t}\n\n\tdistinct(): this {\n\t\tthis.distinctEnabled = true;\n\t\treturn this;\n\t}\n\n\tfrom(table: string): this {\n\t\tthis.fromSubquery = table;\n\t\treturn this;\n\t}\n\n\twhere(column: string, operator: any, value?: any): this {\n\t\tif (value === undefined) {\n\t\t\tvalue = operator;\n\t\t\toperator = \"=\";\n\t\t}\n\t\tthis.wheres.push({\n\t\t\ttype: \"basic\",\n\t\t\tcolumn,\n\t\t\toperator: String(operator),\n\t\t\tvalue,\n\t\t\tboolean: \"and\",\n\t\t});\n\t\treturn this;\n\t}\n\n\torWhere(column: string, operator: any, value?: any): this {\n\t\tif (value === undefined) {\n\t\t\tvalue = operator;\n\t\t\toperator = \"=\";\n\t\t}\n\t\tthis.wheres.push({\n\t\t\ttype: \"basic\",\n\t\t\tcolumn,\n\t\t\toperator: String(operator),\n\t\t\tvalue,\n\t\t\tboolean: \"or\",\n\t\t});\n\t\treturn this;\n\t}\n\n\twhereIn(column: string, values: any[]): this {\n\t\tthis.wheres.push({ type: \"in\", column, values, boolean: \"and\" });\n\t\treturn this;\n\t}\n\n\twhereNotIn(column: string, values: any[]): this {\n\t\tthis.wheres.push({ type: \"notIn\", column, values, boolean: \"and\" });\n\t\treturn this;\n\t}\n\n\twhereNull(column: string): this {\n\t\tthis.wheres.push({ type: \"null\", column, boolean: \"and\" });\n\t\treturn this;\n\t}\n\n\twhereNotNull(column: string): this {\n\t\tthis.wheres.push({ type: \"notNull\", column, boolean: \"and\" });\n\t\treturn this;\n\t}\n\n\twhereBetween(column: string, range: [any, any]): this {\n\t\tthis.wheres.push({\n\t\t\ttype: \"between\",\n\t\t\tcolumn,\n\t\t\tvalues: range,\n\t\t\tboolean: \"and\",\n\t\t});\n\t\treturn this;\n\t}\n\n\twhereNotBetween(column: string, range: [any, any]): this {\n\t\tthis.wheres.push({\n\t\t\ttype: \"notBetween\",\n\t\t\tcolumn,\n\t\t\tvalues: range,\n\t\t\tboolean: \"and\",\n\t\t});\n\t\treturn this;\n\t}\n\n\twhereLike(column: string, pattern: string): this {\n\t\tthis.wheres.push({ type: \"like\", column, value: pattern, boolean: \"and\" });\n\t\treturn this;\n\t}\n\n\torWhereLike(column: string, pattern: string): this {\n\t\tthis.wheres.push({ type: \"like\", column, value: pattern, boolean: \"or\" });\n\t\treturn this;\n\t}\n\n\twhereGroup(callback: (query: QueryBuilder) => void): this {\n\t\tconst subQuery = new QueryBuilder(this.connection, this.tableName);\n\t\tcallback(subQuery);\n\t\tthis.wheres.push({\n\t\t\ttype: \"nested\",\n\t\t\tnested: subQuery.wheres,\n\t\t\tboolean: \"and\",\n\t\t});\n\t\treturn this;\n\t}\n\n\tjoin(\n\t\ttable: string,\n\t\tfirst: string,\n\t\toperator: string,\n\t\tsecond: string,\n\t\ttype: JoinType = \"inner\",\n\t): this {\n\t\tthis.joins.push({ table, first, operator, second, type });\n\t\treturn this;\n\t}\n\n\tleftJoin(\n\t\ttable: string,\n\t\tfirst: string,\n\t\toperator: string,\n\t\tsecond: string,\n\t): this {\n\t\treturn this.join(table, first, operator, second, \"left\");\n\t}\n\n\trightJoin(\n\t\ttable: string,\n\t\tfirst: string,\n\t\toperator: string,\n\t\tsecond: string,\n\t): this {\n\t\treturn this.join(table, first, operator, second, \"right\");\n\t}\n\n\tcrossJoin(\n\t\ttable: string,\n\t\tfirst: string,\n\t\toperator: string,\n\t\tsecond: string,\n\t): this {\n\t\treturn this.join(table, first, operator, second, \"cross\");\n\t}\n\n\torderBy(column: string, direction: OrderDirection = \"asc\"): this {\n\t\tthis.orderBys.push({ column, direction });\n\t\treturn this;\n\t}\n\n\torderByDesc(column: string): this {\n\t\treturn this.orderBy(column, \"desc\");\n\t}\n\n\tlatest(column = \"created_at\"): this {\n\t\treturn this.orderBy(column, \"desc\");\n\t}\n\n\toldest(column = \"created_at\"): this {\n\t\treturn this.orderBy(column, \"asc\");\n\t}\n\n\tinRandomOrder(): this {\n\t\tthis.orderBys.push({ column: \"RANDOM()\", direction: \"asc\" });\n\t\treturn this;\n\t}\n\n\tlimit(limit: number): this {\n\t\tthis.limitValue = limit;\n\t\treturn this;\n\t}\n\n\toffset(offset: number): this {\n\t\tthis.offsetValue = offset;\n\t\treturn this;\n\t}\n\n\tskip(skip: number): this {\n\t\treturn this.offset(skip);\n\t}\n\n\ttake(take: number): this {\n\t\treturn this.limit(take);\n\t}\n\n\tgroupBy(...columns: string[]): this {\n\t\tthis.groupBys.push(...columns);\n\t\treturn this;\n\t}\n\n\thaving(column: string, operator: string, value: any): this {\n\t\tthis.havings.push({ column, operator, value });\n\t\treturn this;\n\t}\n\n\tasync get<T = any>(): Promise<T[]> {\n\t\tconst { sql, bindings } = this.toSQL();\n\t\tconst result = await this.connection.raw(sql, bindings);\n\t\treturn result.rows as T[];\n\t}\n\n\tasync first<T = any>(): Promise<T | null> {\n\t\tconst qb = this.clone();\n\t\tqb.limitValue = 1;\n\t\tconst { sql, bindings } = qb.toSQL();\n\t\tconst result = await this.connection.raw(sql, bindings);\n\t\treturn (result.rows.length > 0 ? result.rows[0] : null) as T | null;\n\t}\n\n\tasync find<T = any>(id: number | string): Promise<T | null> {\n\t\treturn this.where(\"id\", id).first<T>();\n\t}\n\n\tasync pluck(column: string): Promise<any[]> {\n\t\tconst qb = this.clone();\n\t\tqb.columns = [column];\n\t\tconst { sql, bindings } = qb.toSQL();\n\t\tconst result = await this.connection.raw(sql, bindings);\n\t\treturn result.rows.map((row: any) => row[column]);\n\t}\n\n\tasync count(column = \"*\"): Promise<number> {\n\t\tconst qb = this.clone();\n\t\tqb.columns = [\n\t\t\t`COUNT(${column === \"*\" ? \"*\" : this.wrap(column)}) as aggregate`,\n\t\t];\n\t\tqb.orderBys = [];\n\t\tqb.limitValue = null;\n\t\tqb.offsetValue = null;\n\t\tconst { sql, bindings } = qb.toSQL();\n\t\tconst result = await this.connection.raw(sql, bindings);\n\t\tconst row = result.rows[0];\n\t\tif (!row) return 0;\n\t\treturn Number(row.aggregate ?? row.count ?? row[\"COUNT(*)\"] ?? 0);\n\t}\n\n\tasync exists(): Promise<boolean> {\n\t\tconst count = await this.count();\n\t\treturn count > 0;\n\t}\n\n\tasync doesntExist(): Promise<boolean> {\n\t\treturn !(await this.exists());\n\t}\n\n\tasync max(column: string): Promise<number | null> {\n\t\treturn this.aggregate(\"MAX\", column);\n\t}\n\n\tasync min(column: string): Promise<number | null> {\n\t\treturn this.aggregate(\"MIN\", column);\n\t}\n\n\tasync sum(column: string): Promise<number> {\n\t\tconst result = await this.aggregate(\"SUM\", column);\n\t\treturn result ?? 0;\n\t}\n\n\tasync avg(column: string): Promise<number> {\n\t\tconst result = await this.aggregate(\"AVG\", column);\n\t\treturn result ?? 0;\n\t}\n\n\tasync paginate(perPage = 15, page = 1): Promise<PaginatedResult> {\n\t\tconst countQb = this.clone();\n\t\tconst total = await countQb.count();\n\n\t\tconst lastPage = Math.max(1, Math.ceil(total / perPage));\n\t\tconst currentPage = Math.max(1, Math.min(page, lastPage));\n\t\tconst fromVal = (currentPage - 1) * perPage + 1;\n\t\tconst toVal = Math.min(currentPage * perPage, total);\n\n\t\tconst qb = this.clone();\n\t\tqb.limitValue = perPage;\n\t\tqb.offsetValue = (currentPage - 1) * perPage;\n\t\tconst { sql, bindings } = qb.toSQL();\n\t\tconst result = await this.connection.raw(sql, bindings);\n\n\t\treturn {\n\t\t\tdata: result.rows,\n\t\t\tcurrentPage,\n\t\t\tperPage,\n\t\t\ttotal,\n\t\t\tlastPage,\n\t\t\tfrom: total > 0 ? fromVal : 0,\n\t\t\tto: total > 0 ? toVal : 0,\n\t\t\thasMore: currentPage < lastPage,\n\t\t\thasPrev: currentPage > 1,\n\t\t\tisEmpty: total === 0,\n\t\t};\n\t}\n\n\tasync insert(data: Record<string, any>): Promise<number | string> {\n\t\tconst { sql, bindings } = this.compileInsert(data);\n\t\tconst driverType = this.connection.getDriver();\n\t\tconst dialect = this.connection.getDialect();\n\n\t\t// PostgreSQL: use RETURNING clause\n\t\tif (driverType === \"postgresql\") {\n\t\t\tconst returningSQL = dialect.compileInsertReturning(sql, bindings);\n\t\t\tconst result = await this.connection.raw(returningSQL, bindings);\n\t\t\treturn result.rows.length > 0 ? (Number(result.rows[0].id) ?? 0) : 0;\n\t\t}\n\n\t\tconst result = await this.connection.raw(sql, bindings);\n\n\t\t// MySQL: mysql2 returns [ResultSetHeader] with insertId\n\t\tif (driverType === \"mysql\") {\n\t\t\tconst header = result.rows;\n\t\t\t// mysql2 ResultSetHeader has insertId directly\n\t\t\tif (header && typeof header === 'object' && 'insertId' in header) {\n\t\t\t\treturn Number((header as any).insertId) ?? 0;\n\t\t\t}\n\t\t\t// Fallback: check rows[0]\n\t\t\tif (Array.isArray(result.rows) && result.rows.length > 0) {\n\t\t\t\tconst row = result.rows[0];\n\t\t\t\treturn Number(row?.insertId ?? row?.id ?? 0);\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\n\t\t// SQLite: last_insert_rowid()\n\t\tif (driverType === \"sqlite\") {\n\t\t\tconst lastIdResult = await this.connection.raw(\"SELECT last_insert_rowid() as id\");\n\t\t\tif (lastIdResult.rows.length > 0) {\n\t\t\t\treturn Number(lastIdResult.rows[0].id) ?? 0;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Fallback: return 0\n\t\treturn 0;\n\t}\n\n\tasync insertGetId(data: Record<string, any>): Promise<number | string> {\n\t\treturn this.insert(data);\n\t}\n\n\tasync insertReturning(data: Record<string, any>): Promise<any> {\n\t\tconst { sql, bindings } = this.compileInsert(data);\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst returningSQL = dialect.compileInsertReturning(sql, bindings);\n\t\tconst result = await this.connection.raw(returningSQL, bindings);\n\t\treturn result.rows.length > 0 ? result.rows[0] : null;\n\t}\n\n\tasync update(data: Record<string, any>): Promise<number> {\n\t\tconst { sql, bindings } = this.compileUpdate(data);\n\t\tconst result = await this.connection.raw(sql, bindings);\n\t\tconst rows = result.rows;\n\t\tif (rows.length > 0) {\n\t\t\tconst info = rows[0];\n\t\t\treturn info.affectedRows ?? info.changes ?? rows.length;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tasync delete(): Promise<number> {\n\t\tconst { sql, bindings } = this.compileDelete();\n\t\tconst result = await this.connection.raw(sql, bindings);\n\t\tconst rows = result.rows;\n\t\tif (rows.length > 0) {\n\t\t\tconst info = rows[0];\n\t\t\treturn info.affectedRows ?? info.changes ?? rows.length;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tasync truncate(): Promise<void> {\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst sql = dialect.compileTruncate(this.tableName);\n\t\tawait this.connection.raw(sql);\n\t}\n\n\tasync chunk(\n\t\tsize: number,\n\t\tcallback: (rows: any[]) => Promise<void>,\n\t): Promise<void> {\n\t\tlet page = 1;\n\t\tlet hasMore = true;\n\n\t\twhile (hasMore) {\n\t\t\tconst qb = this.clone();\n\t\t\tqb.limitValue = size;\n\t\t\tqb.offsetValue = (page - 1) * size;\n\t\t\tconst rows = await qb.get();\n\n\t\t\tif (rows.length === 0) {\n\t\t\t\thasMore = false;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tawait callback(rows);\n\n\t\t\tif (rows.length < size) {\n\t\t\t\thasMore = false;\n\t\t\t}\n\n\t\t\tpage++;\n\t\t}\n\t}\n\n\tclone(): QueryBuilder {\n\t\tconst qb = new QueryBuilder(this.connection, this.tableName);\n\t\tqb.columns = [...this.columns];\n\t\tqb.distinctEnabled = this.distinctEnabled;\n\t\tqb.wheres = this.cloneWheres(this.wheres);\n\t\tqb.joins = [...this.joins];\n\t\tqb.orderBys = [...this.orderBys];\n\t\tqb.havings = [...this.havings];\n\t\tqb.groupBys = [...this.groupBys];\n\t\tqb.limitValue = this.limitValue;\n\t\tqb.offsetValue = this.offsetValue;\n\t\tqb.fromSubquery = this.fromSubquery;\n\t\treturn qb;\n\t}\n\n\ttoSQL(): { sql: string; bindings: any[] } {\n\t\tconst bindings: any[] = [];\n\t\tconst dialect = this.connection.getDialect();\n\n\t\tconst wrappedColumns = this.columns\n\t\t\t.map((c) =>\n\t\t\t\tc.includes(\"(\") || c === \"*\" || c.includes(\" as \") || c.includes(\" AS \")\n\t\t\t\t\t? c\n\t\t\t\t\t: dialect.wrapIdentifier(c),\n\t\t\t)\n\t\t\t.join(\", \");\n\n\t\tconst from = this.fromSubquery ?? this.tableName;\n\t\tconst wrappedFrom = this.fromSubquery ?? dialect.wrapIdentifier(from);\n\n\t\tlet sql = this.distinctEnabled\n\t\t\t? `SELECT DISTINCT ${wrappedColumns} FROM ${wrappedFrom}`\n\t\t\t: `SELECT ${wrappedColumns} FROM ${wrappedFrom}`;\n\n\t\tconst joinSQL = this.compileJoins(dialect);\n\t\tif (joinSQL) sql += joinSQL;\n\n\t\tconst whereSQL = this.compileWheres(dialect, bindings);\n\t\tif (whereSQL) sql += whereSQL;\n\n\t\tif (this.groupBys.length > 0) {\n\t\t\tsql += ` GROUP BY ${this.groupBys.map((c) => dialect.wrapIdentifier(c)).join(\", \")}`;\n\t\t}\n\n\t\tconst havingSQL = this.compileHavings(dialect, bindings);\n\t\tif (havingSQL) sql += havingSQL;\n\n\t\tif (this.orderBys.length > 0) {\n\t\t\tsql += ` ORDER BY ${this.orderBys\n\t\t\t\t.map((o) => {\n\t\t\t\t\tconst col =\n\t\t\t\t\t\to.column === \"RANDOM()\"\n\t\t\t\t\t\t\t? o.column\n\t\t\t\t\t\t\t: dialect.wrapIdentifier(o.column);\n\t\t\t\t\treturn `${col} ${o.direction.toUpperCase()}`;\n\t\t\t\t})\n\t\t\t\t.join(\", \")}`;\n\t\t}\n\n\t\tconst limitOffsetSQL = dialect.compileLimitOffset(\n\t\t\tbindings,\n\t\t\tthis.limitValue,\n\t\t\tthis.offsetValue,\n\t\t);\n\t\tif (limitOffsetSQL) sql += limitOffsetSQL;\n\n\t\treturn { sql, bindings };\n\t}\n\n\tdd(): string {\n\t\tconst { sql, bindings } = this.toSQL();\n\t\tconst output = `SQL: ${sql}\\nBindings: ${JSON.stringify(bindings)}`;\n\t\tconsole.error(output);\n\t\treturn output;\n\t}\n\n\tprivate compileJoins(dialect: Dialect): string {\n\t\tif (this.joins.length === 0) return \"\";\n\n\t\treturn (\n\t\t\t\" \" +\n\t\t\tthis.joins\n\t\t\t\t.map((j) => {\n\t\t\t\t\tconst type = j.type.toUpperCase();\n\t\t\t\t\treturn `${type} JOIN ${dialect.wrapIdentifier(j.table)} ON ${dialect.wrapIdentifier(j.first)} ${j.operator} ${this.wrap(j.second)}`;\n\t\t\t\t})\n\t\t\t\t.join(\" \")\n\t\t);\n\t}\n\n\tprivate compileWheres(dialect: Dialect, bindings: any[]): string {\n\t\tif (this.wheres.length === 0) return \"\";\n\n\t\tconst sql = this.compileWhereArray(this.wheres, dialect, bindings);\n\t\treturn sql ? ` WHERE ${sql}` : \"\";\n\t}\n\n\tprivate compileWhereArray(\n\t\twheres: WhereClause[],\n\t\tdialect: Dialect,\n\t\tbindings: any[],\n\t): string {\n\t\tif (wheres.length === 0) return \"\";\n\t\tconst parts: string[] = [];\n\t\tfor (const w of wheres) {\n\t\t\tconst sql = this.compileSingleWhere(w, dialect, bindings);\n\t\t\tif (sql !== null) parts.push(sql);\n\t\t}\n\t\tif (parts.length === 0) return \"\";\n\t\t// Join with the boolean from each WHERE clause (respecting \"and\"/\"or\")\n\t\treturn parts.reduce((acc, part, i) => {\n\t\t\tif (i === 0) return part;\n\t\t\tconst bool = wheres[i]?.boolean ?? \"and\";\n\t\t\treturn `${acc} ${bool.toUpperCase()} ${part}`;\n\t\t}, \"\");\n\t}\n\n\tprivate compileSingleWhere(\n\t\tw: WhereClause,\n\t\tdialect: Dialect,\n\t\tbindings: any[],\n\t): string | null {\n\t\tconst col = w.column ? dialect.wrapIdentifier(w.column) : \"\";\n\n\t\tswitch (w.type) {\n\t\t\tcase \"basic\": {\n\t\t\t\tbindings.push(w.value);\n\t\t\t\tconst operator = w.operator === \"=\" ? \"=\" : w.operator;\n\t\t\t\treturn `${col} ${operator} ${dialect.makeParameter(bindings.length - 1)}`;\n\t\t\t}\n\t\t\tcase \"in\": {\n\t\t\t\tconst placeholders = w\n\t\t\t\t\t.values!.map((v: any) => {\n\t\t\t\t\t\tbindings.push(v);\n\t\t\t\t\t\treturn dialect.makeParameter(bindings.length - 1);\n\t\t\t\t\t})\n\t\t\t\t\t.join(\", \");\n\t\t\t\treturn `${col} IN (${placeholders})`;\n\t\t\t}\n\t\t\tcase \"notIn\": {\n\t\t\t\tconst placeholders = w\n\t\t\t\t\t.values!.map((v: any) => {\n\t\t\t\t\t\tbindings.push(v);\n\t\t\t\t\t\treturn dialect.makeParameter(bindings.length - 1);\n\t\t\t\t\t})\n\t\t\t\t\t.join(\", \");\n\t\t\t\treturn `${col} NOT IN (${placeholders})`;\n\t\t\t}\n\t\t\tcase \"null\":\n\t\t\t\treturn `${col} IS NULL`;\n\t\t\tcase \"notNull\":\n\t\t\t\treturn `${col} IS NOT NULL`;\n\t\t\tcase \"between\": {\n\t\t\t\tbindings.push(w.values![0], w.values![1]);\n\t\t\t\treturn `${col} BETWEEN ${dialect.makeParameter(bindings.length - 2)} AND ${dialect.makeParameter(bindings.length - 1)}`;\n\t\t\t}\n\t\t\tcase \"notBetween\": {\n\t\t\t\tbindings.push(w.values![0], w.values![1]);\n\t\t\t\treturn `${col} NOT BETWEEN ${dialect.makeParameter(bindings.length - 2)} AND ${dialect.makeParameter(bindings.length - 1)}`;\n\t\t\t}\n\t\t\tcase \"like\": {\n\t\t\t\tbindings.push(w.value);\n\t\t\t\treturn `${col} LIKE ${dialect.makeParameter(bindings.length - 1)}`;\n\t\t\t}\n\t\t\tcase \"nested\": {\n\t\t\t\tconst nestedSQL = this.compileNestedWhere(w.nested!, dialect, bindings);\n\t\t\t\treturn nestedSQL ? `(${nestedSQL})` : null;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate compileNestedWhere(\n\t\twheres: WhereClause[],\n\t\tdialect: Dialect,\n\t\tbindings: any[],\n\t): string {\n\t\tif (wheres.length === 0) return \"\";\n\t\tconst parts: string[] = [];\n\t\tfor (const w of wheres) {\n\t\t\tconst sql = this.compileSingleWhere(w, dialect, bindings);\n\t\t\tif (sql !== null) parts.push(sql);\n\t\t}\n\t\tif (parts.length === 0) return \"\";\n\t\treturn parts.reduce((acc, part, i) => {\n\t\t\tif (i === 0) return part;\n\t\t\tconst bool = wheres[i]?.boolean ?? \"and\";\n\t\t\treturn `${acc} ${bool.toUpperCase()} ${part}`;\n\t\t}, \"\");\n\t}\n\n\tprivate compileHavings(dialect: Dialect, bindings: any[]): string {\n\t\tif (this.havings.length === 0) return \"\";\n\n\t\tconst parts = this.havings.map((h) => {\n\t\t\tbindings.push(h.value);\n\t\t\treturn `${dialect.wrapIdentifier(h.column)} ${h.operator} ${dialect.makeParameter(bindings.length - 1)}`;\n\t\t});\n\n\t\treturn ` HAVING ${parts.join(\" AND \")}`;\n\t}\n\n\tprivate compileInsert(data: Record<string, any>): {\n\t\tsql: string;\n\t\tbindings: any[];\n\t} {\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst columns = Object.keys(data);\n\t\tconst values = Object.values(data);\n\t\tconst bindings: any[] = [];\n\n\t\tconst placeholders = values\n\t\t\t.map((v: any) => {\n\t\t\t\tbindings.push(v);\n\t\t\t\treturn dialect.makeParameter(bindings.length - 1);\n\t\t\t})\n\t\t\t.join(\", \");\n\n\t\tconst sql = `INSERT INTO ${dialect.wrapIdentifier(this.tableName)} (${columns.map((c) => dialect.wrapIdentifier(c)).join(\", \")}) VALUES (${placeholders})`;\n\t\treturn { sql, bindings };\n\t}\n\n\tprivate compileUpdate(data: Record<string, any>): {\n\t\tsql: string;\n\t\tbindings: any[];\n\t} {\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst bindings: any[] = [];\n\n\t\tconst sets = Object.entries(data).map(([key, value]) => {\n\t\t\tbindings.push(value);\n\t\t\treturn `${dialect.wrapIdentifier(key)} = ${dialect.makeParameter(bindings.length - 1)}`;\n\t\t});\n\n\t\tlet sql = `UPDATE ${dialect.wrapIdentifier(this.tableName)} SET ${sets.join(\", \")}`;\n\n\t\tconst whereSQL = this.compileWheres(dialect, bindings);\n\t\tif (whereSQL) sql += whereSQL;\n\n\t\tif (this.orderBys.length > 0) {\n\t\t\tsql += ` ORDER BY ${this.orderBys\n\t\t\t\t.map((o) => {\n\t\t\t\t\tconst col =\n\t\t\t\t\t\to.column === \"RANDOM()\"\n\t\t\t\t\t\t\t? o.column\n\t\t\t\t\t\t\t: dialect.wrapIdentifier(o.column);\n\t\t\t\t\treturn `${col} ${o.direction.toUpperCase()}`;\n\t\t\t\t})\n\t\t\t\t.join(\", \")}`;\n\t\t}\n\n\t\tconst limitOffsetSQL = dialect.compileLimitOffset(\n\t\t\tbindings,\n\t\t\tthis.limitValue,\n\t\t\tthis.offsetValue,\n\t\t);\n\t\tif (limitOffsetSQL) sql += limitOffsetSQL;\n\n\t\treturn { sql, bindings };\n\t}\n\n\tprivate compileDelete(): { sql: string; bindings: any[] } {\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst bindings: any[] = [];\n\n\t\tlet sql = `DELETE FROM ${dialect.wrapIdentifier(this.tableName)}`;\n\n\t\tconst whereSQL = this.compileWheres(dialect, bindings);\n\t\tif (whereSQL) sql += whereSQL;\n\n\t\tif (this.orderBys.length > 0) {\n\t\t\tsql += ` ORDER BY ${this.orderBys\n\t\t\t\t.map((o) => {\n\t\t\t\t\tconst col =\n\t\t\t\t\t\to.column === \"RANDOM()\"\n\t\t\t\t\t\t\t? o.column\n\t\t\t\t\t\t\t: dialect.wrapIdentifier(o.column);\n\t\t\t\t\treturn `${col} ${o.direction.toUpperCase()}`;\n\t\t\t\t})\n\t\t\t\t.join(\", \")}`;\n\t\t}\n\n\t\tconst limitOffsetSQL = dialect.compileLimitOffset(\n\t\t\tbindings,\n\t\t\tthis.limitValue,\n\t\t\tthis.offsetValue,\n\t\t);\n\t\tif (limitOffsetSQL) sql += limitOffsetSQL;\n\n\t\treturn { sql, bindings };\n\t}\n\n\tprivate async aggregate(fn: string, column: string): Promise<number | null> {\n\t\tconst qb = this.clone();\n\t\tqb.columns = [`${fn}(${this.wrap(column)}) as aggregate`];\n\t\tqb.orderBys = [];\n\t\tqb.limitValue = null;\n\t\tqb.offsetValue = null;\n\t\tconst { sql, bindings } = qb.toSQL();\n\t\tconst result = await this.connection.raw(sql, bindings);\n\t\tconst row = result.rows[0];\n\t\tif (!row) return null;\n\t\tconst val = row.aggregate ?? row[`${fn}(${column})`];\n\t\treturn val !== null && val !== undefined ? Number(val) : null;\n\t}\n\n\tprivate cloneWheres(wheres: WhereClause[]): WhereClause[] {\n\t\treturn wheres.map((w) => ({\n\t\t\t...w,\n\t\t\tvalues: w.values ? [...w.values] : undefined,\n\t\t\tnested: w.nested ? this.cloneWheres(w.nested) : undefined,\n\t\t}));\n\t}\n\n\tprivate wrap(identifier: string): string {\n\t\tif (identifier === \"*\" || identifier.includes(\"(\")) return identifier;\n\t\tconst dialect = this.connection.getDialect();\n\t\treturn dialect.wrapIdentifier(identifier);\n\t}\n}\n","import type { DatabaseConnection } from \"./connection.js\";\nimport type { ColumnCompileOptions, Dialect } from \"./dialect.js\";\nimport type { QueryResult } from \"./types.js\";\n\nexport interface MigrationDefinition {\n\tname: string;\n\tup: (schema: SchemaBuilder) => Promise<void>;\n\tdown: (schema: SchemaBuilder) => Promise<void>;\n}\n\nexport interface MigrationStatusRow {\n\tname: string;\n\tbatch: number;\n\texecutedAt: string;\n}\n\nexport class SchemaBuilder {\n\tprivate connection: DatabaseConnection;\n\n\tconstructor(connection: DatabaseConnection) {\n\t\tthis.connection = connection;\n\t}\n\n\tasync createTable(\n\t\ttableName: string,\n\t\tcallback: (table: TableBlueprint) => void,\n\t): Promise<void> {\n\t\tconst blueprint = new TableBlueprint(this.connection, \"create\");\n\t\tcallback(blueprint);\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst columns = blueprint.compileColumns();\n\t\tconst constraints = blueprint.compileConstraints(dialect);\n\t\tconst sql = dialect.compileCreateTable(tableName, columns, constraints);\n\t\tawait this.connection.raw(sql);\n\t}\n\n\tasync dropTable(tableName: string): Promise<void> {\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst sql = dialect.compileDropTable(tableName);\n\t\tawait this.connection.raw(sql);\n\t}\n\n\tasync dropTableIfExists(tableName: string): Promise<void> {\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst sql = dialect.compileDropTableIfExists(tableName);\n\t\tawait this.connection.raw(sql);\n\t}\n\n\tasync renameTable(from: string, to: string): Promise<void> {\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst sql = dialect.compileRenameTable(from, to);\n\t\tawait this.connection.raw(sql);\n\t}\n\n\tasync alterTable(\n\t\ttableName: string,\n\t\tcallback: (table: TableBlueprint) => void,\n\t): Promise<void> {\n\t\tconst blueprint = new TableBlueprint(this.connection, \"alter\");\n\t\tcallback(blueprint);\n\t\tconst dialect = this.connection.getDialect();\n\n\t\tif (blueprint.droppedColumns.length > 0) {\n\t\t\tconst dropSQL = dialect.compileDropColumns(\n\t\t\t\ttableName,\n\t\t\t\tblueprint.droppedColumns,\n\t\t\t);\n\t\t\tawait this.connection.raw(\n\t\t\t\t`ALTER TABLE ${dialect.wrapIdentifier(tableName)} ${dropSQL}`,\n\t\t\t);\n\t\t}\n\n\t\tif (blueprint.renamedColumns.length > 0) {\n\t\t\tfor (const { from, to } of blueprint.renamedColumns) {\n\t\t\t\tconst renameSQL = dialect.compileRenameColumn(tableName, from, to);\n\t\t\t\tawait this.connection.raw(\n\t\t\t\t\t`ALTER TABLE ${dialect.wrapIdentifier(tableName)} ${renameSQL}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst compiledColumns = blueprint.compileColumnDefinitions(dialect);\n\t\tif (compiledColumns.length > 0) {\n\t\t\tfor (const colSQL of compiledColumns) {\n\t\t\t\tawait this.connection.raw(\n\t\t\t\t\t`ALTER TABLE ${dialect.wrapIdentifier(tableName)} ${colSQL}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync hasTable(tableName: string): Promise<boolean> {\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst sql = dialect.compileHasTable(tableName);\n\t\tconst result = await this.connection.raw(sql, [tableName]);\n\t\treturn this.parseCount(result) > 0;\n\t}\n\n\tasync hasColumn(tableName: string, columnName: string): Promise<boolean> {\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst driver = this.connection.getDriver();\n\n\t\tif (driver === \"sqlite\") {\n\t\t\tconst sql = dialect.compileHasColumn(tableName, columnName);\n\t\t\tconst result = await this.connection.raw(sql);\n\t\t\treturn result.rows.some((row: any) => row.name === columnName);\n\t\t}\n\n\t\tconst sql = dialect.compileHasColumn(tableName, columnName);\n\t\tconst result = await this.connection.raw(sql, [tableName, columnName]);\n\t\treturn this.parseCount(result) > 0;\n\t}\n\n\tprivate parseCount(result: QueryResult): number {\n\t\tif (result.rows.length === 0) return 0;\n\t\tconst row = result.rows[0];\n\t\treturn Number(row.count ?? row.Count ?? 0);\n\t}\n}\n\nexport type BlueprintMode = \"create\" | \"alter\";\n\nexport class TableBlueprint {\n\tprivate mode: BlueprintMode;\n\tprivate columns: ColumnDefinition[] = [];\n\tprivate primaryKeys: string[] = [];\n\tprivate uniqueKeys: string[][] = [];\n\tprivate indexKeys: string[][] = [];\n\tprivate foreignKeys: ForeignKeyDef[] = [];\n\tdroppedColumns: string[] = [];\n\trenamedColumns: { from: string; to: string }[] = [];\n\n\tconstructor(_connection: DatabaseConnection, mode: BlueprintMode) {\n\t\tthis.mode = mode;\n\t}\n\n\tid(name = \"id\"): ColumnDefinition {\n\t\tconst col = this.addColumn(\"id\", name);\n\t\tcol.autoIncrement();\n\t\tcol.unsigned();\n\t\treturn col;\n\t}\n\n\tincrements(name = \"id\"): ColumnDefinition {\n\t\tconst col = this.addColumn(\"increments\", name);\n\t\tcol.autoIncrement();\n\t\tcol.unsigned();\n\t\treturn col;\n\t}\n\n\tbigIncrements(name = \"id\"): ColumnDefinition {\n\t\tconst col = this.addColumn(\"bigIncrements\", name);\n\t\tcol.autoIncrement();\n\t\tcol.unsigned();\n\t\treturn col;\n\t}\n\n\tstring(name: string, length = 255): ColumnDefinition {\n\t\tconst col = this.addColumn(\"string\", name);\n\t\tcol.setLength(length);\n\t\treturn col;\n\t}\n\n\ttext(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"text\", name);\n\t}\n\n\tinteger(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"integer\", name);\n\t}\n\n\tbigInteger(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"bigInteger\", name);\n\t}\n\n\ttinyInteger(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"tinyInteger\", name);\n\t}\n\n\tsmallInteger(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"smallInteger\", name);\n\t}\n\n\tboolean(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"boolean\", name);\n\t}\n\n\tfloat(name: string, _precision?: number): ColumnDefinition {\n\t\tconst col = this.addColumn(\"float\", name);\n\t\tif (_precision !== undefined) col.setPrecision(_precision);\n\t\treturn col;\n\t}\n\n\tdouble(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"double\", name);\n\t}\n\n\tdecimal(name: string, precision = 10, scale = 0): ColumnDefinition {\n\t\tconst col = this.addColumn(\"decimal\", name);\n\t\tcol.setPrecision(precision);\n\t\tcol.setScale(scale);\n\t\treturn col;\n\t}\n\n\tdate(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"date\", name);\n\t}\n\n\tdatetime(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"datetime\", name);\n\t}\n\n\ttimestamp(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"timestamp\", name);\n\t}\n\n\ttime(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"time\", name);\n\t}\n\n\tyear(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"year\", name);\n\t}\n\n\tjson(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"json\", name);\n\t}\n\n\tjsonb(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"jsonb\", name);\n\t}\n\n\tbinary(name: string): ColumnDefinition {\n\t\treturn this.addColumn(\"binary\", name);\n\t}\n\n\tuuid(name = \"uuid\"): ColumnDefinition {\n\t\treturn this.addColumn(\"uuid\", name);\n\t}\n\n\tenum(name: string, values: string[]): ColumnDefinition {\n\t\tconst col = this.addColumn(\"enum\", name);\n\t\tcol.setValues(values);\n\t\treturn col;\n\t}\n\n\tforeignId(name: string): ColumnDefinition {\n\t\tconst col = this.addColumn(\"foreignId\", name);\n\t\tcol.unsigned();\n\t\treturn col;\n\t}\n\n\tprimary(...columns: string[]): void {\n\t\tthis.primaryKeys.push(...columns);\n\t}\n\n\tunique(...columns: string[]): void {\n\t\tthis.uniqueKeys.push(columns);\n\t}\n\n\tindex(...columns: string[]): void {\n\t\tthis.indexKeys.push(columns);\n\t}\n\n\tforeign(column: string): ForeignKeyDefinition {\n\t\tconst fk: ForeignKeyDef = {\n\t\t\tcolumn,\n\t\t\treferences: \"\",\n\t\t\ton: \"\",\n\t\t\tonDelete: null,\n\t\t\tonUpdate: null,\n\t\t};\n\t\tthis.foreignKeys.push(fk);\n\t\treturn new ForeignKeyDefinition(fk);\n\t}\n\n\ttimestamps(): void {\n\t\tthis.timestamp(\"created_at\").nullable();\n\t\tthis.timestamp(\"updated_at\").nullable();\n\t}\n\n\tsoftDeletes(): void {\n\t\tthis.timestamp(\"deleted_at\").nullable();\n\t}\n\n\trememberToken(): void {\n\t\tthis.string(\"remember_token\", 100).nullable();\n\t}\n\n\tdropColumn(column: string): void {\n\t\tthis.droppedColumns.push(column);\n\t}\n\n\trenameColumn(from: string, to: string): void {\n\t\tthis.renamedColumns.push({ from, to });\n\t}\n\n\tdropPrimary(): void {\n\t\tthis.primaryKeys = [];\n\t}\n\n\tdropUnique(_indexName?: string): void {\n\t\tthis.uniqueKeys = [];\n\t}\n\n\tdropIndex(_indexName?: string): void {\n\t\tthis.indexKeys = [];\n\t}\n\n\tdropForeign(_indexName?: string): void {\n\t\tthis.foreignKeys = [];\n\t}\n\n\tdropTimestamps(): void {\n\t\tthis.droppedColumns.push(\"created_at\", \"updated_at\");\n\t}\n\n\tdropSoftDeletes(): void {\n\t\tthis.droppedColumns.push(\"deleted_at\");\n\t}\n\n\tdropRememberToken(): void {\n\t\tthis.droppedColumns.push(\"remember_token\");\n\t}\n\n\tcompileColumns(): ColumnCompileOptions[] {\n\t\treturn this.columns\n\t\t\t.filter((c) => this.mode === \"create\" || c.isNew)\n\t\t\t.map((c) => c.compile());\n\t}\n\n\tcompileConstraints(dialect: Dialect): string[] {\n\t\tconst constraints: string[] = [];\n\t\tconst wrap = (name: string) => dialect.wrapIdentifier(name);\n\n\t\tfor (const pk of this.primaryKeys) {\n\t\t\tconstraints.push(`PRIMARY KEY (${wrap(pk)})`);\n\t\t}\n\n\t\tfor (const uk of this.uniqueKeys) {\n\t\t\tconstraints.push(`UNIQUE (${uk.map((c) => wrap(c)).join(\", \")})`);\n\t\t}\n\n\t\tfor (const ik of this.indexKeys) {\n\t\t\tconstraints.push(`INDEX (${ik.map((c) => wrap(c)).join(\", \")})`);\n\t\t}\n\n\t\tfor (const fk of this.foreignKeys) {\n\t\t\tlet fkSQL = `FOREIGN KEY (${wrap(fk.column)}) REFERENCES ${wrap(fk.on)} (${wrap(fk.references)})`;\n\t\t\tif (fk.onDelete) fkSQL += ` ON DELETE ${fk.onDelete}`;\n\t\t\tif (fk.onUpdate) fkSQL += ` ON UPDATE ${fk.onUpdate}`;\n\t\t\tconstraints.push(fkSQL);\n\t\t}\n\n\t\treturn constraints;\n\t}\n\n\tcompileColumnDefinitions(dialect: Dialect): string[] {\n\t\treturn this.columns\n\t\t\t.filter((c) => c.isNew && this.mode === \"alter\")\n\t\t\t.map((c) => dialect.compileAddColumns(\"\", [c.compile()]));\n\t}\n\n\tprivate addColumn(type: string, name: string): ColumnDefinition {\n\t\tconst col = new ColumnDefinition(type, name);\n\t\tthis.columns.push(col);\n\t\treturn col;\n\t}\n}\n\nexport class ColumnDefinition {\n\tprivate type: string;\n\tprivate name: string;\n\tprivate isNullable = false;\n\tprivate defaultValue: any = undefined;\n\tprivate isUnsigned = false;\n\tprivate isUnique = false;\n\tprivate isPrimary = false;\n\tprivate isIndex = false;\n\tprivate commentText: string | null = null;\n\tprivate afterColumn: string | null = null;\n\tprivate isFirst = false;\n\tprivate isAutoIncrement = false;\n\tprivate precisionValue: number | null = null;\n\tprivate scaleValue: number | null = null;\n\tprivate lengthValue: number | null = null;\n\tprivate enumValues: string[] | null = null;\n\tprivate isForeignId = false;\n\tisNew = true;\n\n\tconstructor(type: string, name: string) {\n\t\tthis.type = type;\n\t\tthis.name = name;\n\t}\n\n\tnullable(): this {\n\t\tthis.isNullable = true;\n\t\treturn this;\n\t}\n\n\tdefault(value: any): this {\n\t\tthis.defaultValue = value;\n\t\treturn this;\n\t}\n\n\tunsigned(): this {\n\t\tthis.isUnsigned = true;\n\t\treturn this;\n\t}\n\n\tunique(): this {\n\t\tthis.isUnique = true;\n\t\treturn this;\n\t}\n\n\tprimary(): this {\n\t\tthis.isPrimary = true;\n\t\treturn this;\n\t}\n\n\tindex(): this {\n\t\tthis.isIndex = true;\n\t\treturn this;\n\t}\n\n\tcomment(text: string): this {\n\t\tthis.commentText = text;\n\t\treturn this;\n\t}\n\n\tafter(column: string): this {\n\t\tthis.afterColumn = column;\n\t\treturn this;\n\t}\n\n\tfirst(): this {\n\t\tthis.isFirst = true;\n\t\treturn this;\n\t}\n\n\tautoIncrement(): this {\n\t\tthis.isAutoIncrement = true;\n\t\treturn this;\n\t}\n\n\tsetValues(vals: string[]): this {\n\t\tthis.enumValues = vals;\n\t\treturn this;\n\t}\n\n\tsetLength(len: number): this {\n\t\tthis.lengthValue = len;\n\t\treturn this;\n\t}\n\n\tsetPrecision(precision: number): this {\n\t\tthis.precisionValue = precision;\n\t\treturn this;\n\t}\n\n\tsetScale(scale: number): this {\n\t\tthis.scaleValue = scale;\n\t\treturn this;\n\t}\n\n\tcompile(): ColumnCompileOptions {\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\ttype: this.type,\n\t\t\tnullable: this.isNullable,\n\t\t\tdefaultValue: this.defaultValue,\n\t\t\tunsigned: this.isUnsigned,\n\t\t\tunique: this.isUnique,\n\t\t\tprimary: this.isPrimary,\n\t\t\tindex: this.isIndex,\n\t\t\tcomment: this.commentText,\n\t\t\tafter: this.afterColumn,\n\t\t\tfirst: this.isFirst,\n\t\t\tautoIncrement: this.isAutoIncrement,\n\t\t\tprecision: this.precisionValue,\n\t\t\tscale: this.scaleValue,\n\t\t\tlength: this.lengthValue,\n\t\t\tvalues: this.enumValues,\n\t\t\tisForeignId: this.isForeignId,\n\t\t};\n\t}\n}\n\ninterface ForeignKeyDef {\n\tcolumn: string;\n\treferences: string;\n\ton: string;\n\tonDelete: string | null;\n\tonUpdate: string | null;\n}\n\nexport class ForeignKeyDefinition {\n\tprivate def: ForeignKeyDef;\n\n\tconstructor(def: ForeignKeyDef) {\n\t\tthis.def = def;\n\t}\n\n\treferences(column: string): this {\n\t\tthis.def.references = column;\n\t\treturn this;\n\t}\n\n\ton(table: string): this {\n\t\tthis.def.on = table;\n\t\treturn this;\n\t}\n\n\tonDelete(action: string): this {\n\t\tthis.def.onDelete = action;\n\t\treturn this;\n\t}\n\n\tonUpdate(action: string): this {\n\t\tthis.def.onUpdate = action;\n\t\treturn this;\n\t}\n}\n\nexport class Migrator {\n\tprivate connection: DatabaseConnection;\n\tprivate migrations: MigrationDefinition[] = [];\n\n\tconstructor(connection: DatabaseConnection) {\n\t\tthis.connection = connection;\n\t}\n\n\taddMigrations(migrations: MigrationDefinition[]): void {\n\t\tthis.migrations.push(...migrations);\n\t}\n\n\tsetMigrations(migrations: MigrationDefinition[]): void {\n\t\tthis.migrations = migrations;\n\t}\n\n\tasync run(): Promise<void> {\n\t\tawait this.ensureMigrationTable();\n\n\t\tconst ran = await this.getRanMigrations();\n\t\tconst ranNames = new Set(ran.map((r) => r.name));\n\n\t\tconst pending = this.migrations.filter((m) => !ranNames.has(m.name));\n\t\tif (pending.length === 0) {\n\t\t\tconsole.log(\"Nothing to migrate.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst nextBatch = await this.getNextBatchNumber();\n\t\tconst schema = new SchemaBuilder(this.connection);\n\n\t\tfor (const migration of pending) {\n\t\t\tconsole.log(`Migrating: ${migration.name}`);\n\t\t\ttry {\n\t\t\t\tawait migration.up(schema);\n\t\t\t\tawait this.recordMigration(migration.name, nextBatch);\n\t\t\t\tconsole.log(`Migrated: ${migration.name}`);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(`Migration failed: ${migration.name}`, err);\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\t}\n\n\tasync rollback(): Promise<void> {\n\t\tawait this.ensureMigrationTable();\n\n\t\tconst lastBatch = await this.getLastBatchNumber();\n\t\tif (lastBatch === 0) {\n\t\t\tconsole.log(\"Nothing to rollback.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst lastBatchMigrations = await this.getMigrationsByBatch(lastBatch);\n\t\tconst schema = new SchemaBuilder(this.connection);\n\n\t\tfor (const migration of lastBatchMigrations.reverse()) {\n\t\t\tconst def = this.migrations.find((m) => m.name === migration.name);\n\t\t\tif (def) {\n\t\t\t\tconsole.log(`Rolling back: ${migration.name}`);\n\t\t\t\ttry {\n\t\t\t\t\tawait def.down(schema);\n\t\t\t\t\tawait this.removeMigration(migration.name);\n\t\t\t\t\tconsole.log(`Rolled back: ${migration.name}`);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tconsole.error(`Rollback failed: ${migration.name}`, err);\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tasync reset(): Promise<void> {\n\t\tawait this.ensureMigrationTable();\n\n\t\tconst allRan = await this.getRanMigrations();\n\t\tconst schema = new SchemaBuilder(this.connection);\n\n\t\tfor (const migration of allRan.reverse()) {\n\t\t\tconst def = this.migrations.find((m) => m.name === migration.name);\n\t\t\tif (def) {\n\t\t\t\tconsole.log(`Resetting: ${migration.name}`);\n\t\t\t\ttry {\n\t\t\t\t\tawait def.down(schema);\n\t\t\t\t\tawait this.removeMigration(migration.name);\n\t\t\t\t\tconsole.log(`Reset: ${migration.name}`);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tconsole.error(`Reset failed: ${migration.name}`, err);\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tasync refresh(): Promise<void> {\n\t\tawait this.reset();\n\t\tawait this.run();\n\t}\n\n\tasync status(): Promise<MigrationStatusRow[]> {\n\t\tawait this.ensureMigrationTable();\n\t\treturn this.getRanMigrations();\n\t}\n\n\tprivate async ensureMigrationTable(): Promise<void> {\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst sql = dialect.compileCreateMigrationsTable();\n\t\tawait this.connection.raw(sql);\n\t}\n\n\tprivate async getRanMigrations(): Promise<MigrationStatusRow[]> {\n\t\tconst result = await this.connection.raw(\n\t\t\t\"SELECT name, batch, executed_at as executedAt FROM migrations ORDER BY batch ASC, name ASC\",\n\t\t);\n\t\treturn result.rows.map((row: any) => ({\n\t\t\tname: String(row.name),\n\t\t\tbatch: Number(row.batch),\n\t\t\texecutedAt: String(row.executedAt ?? \"\"),\n\t\t}));\n\t}\n\n\tprivate async getNextBatchNumber(): Promise<number> {\n\t\tconst result = await this.connection.raw(\n\t\t\t\"SELECT COALESCE(MAX(batch), 0) + 1 as next_batch FROM migrations\",\n\t\t);\n\t\treturn Number(result.rows[0]?.next_batch ?? 1);\n\t}\n\n\tprivate async getLastBatchNumber(): Promise<number> {\n\t\tconst result = await this.connection.raw(\n\t\t\t\"SELECT COALESCE(MAX(batch), 0) as last_batch FROM migrations\",\n\t\t);\n\t\treturn Number(result.rows[0]?.last_batch ?? 0);\n\t}\n\n\tprivate async getMigrationsByBatch(\n\t\tbatch: number,\n\t): Promise<MigrationStatusRow[]> {\n\t\tconst result = await this.connection.raw(\n\t\t\t\"SELECT name, batch, executed_at as executedAt FROM migrations WHERE batch = ? ORDER BY name ASC\",\n\t\t\t[batch],\n\t\t);\n\t\treturn result.rows.map((row: any) => ({\n\t\t\tname: String(row.name),\n\t\t\tbatch: Number(row.batch),\n\t\t\texecutedAt: String(row.executedAt ?? \"\"),\n\t\t}));\n\t}\n\n\tprivate async recordMigration(name: string, batch: number): Promise<void> {\n\t\tawait this.connection.raw(\n\t\t\t\"INSERT INTO migrations (name, batch) VALUES (?, ?)\",\n\t\t\t[name, batch],\n\t\t);\n\t}\n\n\tprivate async removeMigration(name: string): Promise<void> {\n\t\tawait this.connection.raw(\"DELETE FROM migrations WHERE name = ?\", [name]);\n\t}\n}\n","export interface PaginatedResult<T = any> {\n\tdata: T[];\n\tcurrentPage: number;\n\tperPage: number;\n\ttotal: number;\n\tlastPage: number;\n\tfrom: number;\n\tto: number;\n\thasMore: boolean;\n\thasPrev: boolean;\n\tisEmpty: boolean;\n}\n\nexport class Pagination<T = any> {\n\treadonly data: T[];\n\treadonly currentPage: number;\n\treadonly perPage: number;\n\treadonly total: number;\n\treadonly lastPage: number;\n\treadonly from: number;\n\treadonly to: number;\n\n\tconstructor(result: PaginatedResult<T>) {\n\t\tthis.data = result.data;\n\t\tthis.currentPage = result.currentPage;\n\t\tthis.perPage = result.perPage;\n\t\tthis.total = result.total;\n\t\tthis.lastPage = result.lastPage;\n\t\tthis.from = result.from;\n\t\tthis.to = result.to;\n\t}\n\n\tget hasMore(): boolean {\n\t\treturn this.currentPage < this.lastPage;\n\t}\n\n\tget hasPrev(): boolean {\n\t\treturn this.currentPage > 1;\n\t}\n\n\tget isEmpty(): boolean {\n\t\treturn this.data.length === 0;\n\t}\n\n\tnextPage(): PaginationUrl | null {\n\t\tif (!this.hasMore) return null;\n\t\treturn {\n\t\t\tpage: this.currentPage + 1,\n\t\t\tperPage: this.perPage,\n\t\t\turl: null,\n\t\t};\n\t}\n\n\tprevPage(): PaginationUrl | null {\n\t\tif (!this.hasPrev) return null;\n\t\treturn {\n\t\t\tpage: this.currentPage - 1,\n\t\t\tperPage: this.perPage,\n\t\t\turl: null,\n\t\t};\n\t}\n\n\ttoJSON(): Record<string, any> {\n\t\treturn {\n\t\t\tdata: this.data,\n\t\t\tpagination: {\n\t\t\t\tcurrentPage: this.currentPage,\n\t\t\t\tperPage: this.perPage,\n\t\t\t\ttotal: this.total,\n\t\t\t\tlastPage: this.lastPage,\n\t\t\t\tfrom: this.from,\n\t\t\t\tto: this.to,\n\t\t\t\thasMore: this.hasMore,\n\t\t\t\thasPrev: this.hasPrev,\n\t\t\t\tisEmpty: this.isEmpty,\n\t\t\t},\n\t\t};\n\t}\n\n\tmap<U>(fn: (item: T, index: number) => U): Pagination<U> {\n\t\treturn new Pagination<U>({\n\t\t\t...this,\n\t\t\tdata: this.data.map(fn),\n\t\t});\n\t}\n\n\titems(): T[] {\n\t\treturn this.data;\n\t}\n\n\tstatic from<T>(result: PaginatedResult<T>): Pagination<T> {\n\t\treturn new Pagination(result);\n\t}\n}\n\nexport interface PaginationUrl {\n\tpage: number;\n\tperPage: number;\n\turl: string | null;\n}\n","import type { DatabaseConnection } from \"./connection.js\";\n\nexport interface SeederClass {\n\trun(connection: DatabaseConnection): Promise<void>;\n}\n\nexport class Seeder {\n\tprivate connection: DatabaseConnection;\n\n\tconstructor(connection: DatabaseConnection) {\n\t\tthis.connection = connection;\n\t}\n\n\tasync call(seederClass: SeederClass): Promise<void> {\n\t\tawait seederClass.run(this.connection);\n\t}\n\n\tasync insert(table: string, data: Record<string, any>[]): Promise<void> {\n\t\tif (data.length === 0) return;\n\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst firstRow = data[0];\n\t\tif (!firstRow) return;\n\n\t\tconst columns = Object.keys(firstRow);\n\t\tconst wrappedColumns = columns\n\t\t\t.map((c) => dialect.wrapIdentifier(c))\n\t\t\t.join(\", \");\n\n\t\tconst batchSize = 100;\n\t\tfor (let i = 0; i < data.length; i += batchSize) {\n\t\t\tconst batch = data.slice(i, i + batchSize);\n\t\t\tconst placeholders: string[] = [];\n\t\t\tconst bindings: any[] = [];\n\n\t\t\tfor (const row of batch) {\n\t\t\t\tconst rowPlaceholders = columns.map((col) => {\n\t\t\t\t\tbindings.push(row[col]);\n\t\t\t\t\treturn dialect.makeParameter(bindings.length - 1);\n\t\t\t\t});\n\t\t\t\tplaceholders.push(`(${rowPlaceholders.join(\", \")})`);\n\t\t\t}\n\n\t\t\tconst sql = `INSERT INTO ${dialect.wrapIdentifier(table)} (${wrappedColumns}) VALUES ${placeholders.join(\", \")}`;\n\t\t\tawait this.connection.raw(sql, bindings);\n\t\t}\n\t}\n\n\tasync truncate(table: string): Promise<void> {\n\t\tconst dialect = this.connection.getDialect();\n\t\tconst driver = this.connection.getDriver();\n\n\t\tif (driver === \"sqlite\") {\n\t\t\tawait this.connection.raw(`DELETE FROM ${dialect.wrapIdentifier(table)}`);\n\t\t} else if (driver === \"postgresql\") {\n\t\t\tawait this.connection.raw(dialect.compileTruncate(table));\n\t\t} else {\n\t\t\tawait this.connection.raw(\"SET FOREIGN_KEY_CHECKS = 0\");\n\t\t\tawait this.connection.raw(dialect.compileTruncate(table));\n\t\t\tawait this.connection.raw(\"SET FOREIGN_KEY_CHECKS = 1\");\n\t\t}\n\t}\n\n\tasync run(): Promise<void> {\n\t\tthrow new Error(\"Seeder.run() must be overridden by subclasses\");\n\t}\n}\n","import { QueryBuilder } from './query.js'\nimport type { QueryRunner } from './types.js'\n\nexport type RelationType = 'hasOne' | 'hasMany' | 'belongsTo' | 'belongsToMany' | 'morphMany' | 'morphTo'\n\ninterface RelationDefinition {\n type: RelationType\n relatedModel: typeof Model\n foreignKey: string\n localKey: string\n pivotTable?: string\n morphName?: string\n}\n\nexport class Model {\n /** Primary key */\n id?: number | string\n /** Dynamic properties from database */\n [key: string]: unknown\n\n static table: string = ''\n static connection: QueryRunner | null = null\n protected static queryRunner: QueryRunner | null = null\n private static relationDefs: Map<string, RelationDefinition> = new Map()\n private static eagerLoads: Map<string, boolean> = new Map()\n /** @internal cache for loaded relations on instances */\n _relations: Record<string, unknown> = {}\n\n static setConnection(conn: QueryRunner): void {\n this.connection = conn\n this.queryRunner = conn\n }\n\n static query<T extends typeof Model>(this: T): QueryBuilder {\n if (!this.queryRunner) {\n throw new Error('Database connection not set. Call Model.setConnection() first.')\n }\n return new QueryBuilder(this.queryRunner, this.table)\n }\n\n // ─── Relations Definition ──────────────────────────────────\n\n static hasOne(\n relatedModel: typeof Model,\n foreignKey?: string,\n localKey?: string,\n ): void {\n const key = `hasOne:${relatedModel.table}`\n this.relationDefs.set(key, {\n type: 'hasOne',\n relatedModel,\n foreignKey: foreignKey ?? `${this.table}_id`,\n localKey: localKey ?? 'id',\n })\n }\n\n static hasMany(\n relatedModel: typeof Model,\n foreignKey?: string,\n localKey?: string,\n ): void {\n const key = `hasMany:${relatedModel.table}`\n this.relationDefs.set(key, {\n type: 'hasMany',\n relatedModel,\n foreignKey: foreignKey ?? `${this.table}_id`,\n localKey: localKey ?? 'id',\n })\n }\n\n static belongsTo(\n relatedModel: typeof Model,\n foreignKey?: string,\n ownerKey?: string,\n ): void {\n const key = `belongsTo:${relatedModel.table}`\n this.relationDefs.set(key, {\n type: 'belongsTo',\n relatedModel,\n foreignKey: foreignKey ?? `${relatedModel.table}_id`,\n localKey: ownerKey ?? 'id',\n })\n }\n\n static belongsToMany(\n relatedModel: typeof Model,\n pivotTable?: string,\n foreignPivotKey?: string,\n relatedPivotKey?: string,\n ): void {\n const tables = [this.table, relatedModel.table].sort()\n const key = `belongsToMany:${relatedModel.table}`\n this.relationDefs.set(key, {\n type: 'belongsToMany',\n relatedModel,\n foreignKey: foreignPivotKey ?? `${this.table}_id`,\n localKey: relatedPivotKey ?? `${relatedModel.table}_id`,\n pivotTable: pivotTable ?? `${tables[0]}_${tables[1]}`,\n })\n }\n\n static morphMany(\n relatedModel: typeof Model,\n morphName: string,\n ): void {\n const key = `morphMany:${morphName}`\n this.relationDefs.set(key, {\n type: 'morphMany',\n relatedModel,\n foreignKey: `${morphName}_id`,\n localKey: 'id',\n morphName,\n })\n }\n\n // ─── Eager Loading ─────────────────────────────────────────\n\n static with(...relations: string[]): void {\n for (const rel of relations) {\n this.eagerLoads.set(rel, true)\n }\n }\n\n // ─── Query Shortcuts ───────────────────────────────────────\n\n static async all<T extends typeof Model>(this: T): Promise<InstanceType<T>[]> {\n const rows = await this.query().get()\n const instances = rows.map((row: any) => this.hydrate(row))\n await this.loadRelations(instances)\n return instances as any\n }\n\n static async find<T extends typeof Model>(this: T, id: number | string): Promise<InstanceType<T> | null> {\n const row = await this.query().find(id)\n if (!row) return null\n const instance = this.hydrate(row)\n await this.loadRelations([instance])\n return instance as any\n }\n\n static async where<T extends typeof Model>(this: T, column: string, value: any): Promise<QueryBuilder> {\n return this.query().where(column, value)\n }\n\n static async create<T extends typeof Model>(this: T, data: Record<string, any>): Promise<InstanceType<T>> {\n const id = await this.query().insert(data)\n return this.find(id) as any\n }\n\n static async updateOrCreate<T extends typeof Model>(\n this: T, attributes: Record<string, any>, values?: Record<string, any>,\n ): Promise<InstanceType<T>> {\n const qb = this.query()\n for (const [key, value] of Object.entries(attributes)) {\n qb.where(key, value)\n }\n const existing = await qb.first()\n if (existing) {\n const mergeValues = values ?? attributes\n const id = (existing as any).id\n const updateQb = new QueryBuilder(this.queryRunner!, this.table)\n for (const [key, value] of Object.entries(attributes)) {\n updateQb.where(key, value)\n }\n await updateQb.update(mergeValues)\n return this.find(id) as any\n }\n return this.create({ ...attributes, ...values }) as any\n }\n\n // ─── Instance Methods ──────────────────────────────────────\n\n async save(): Promise<void> {\n const ModelClass = this.constructor as typeof Model\n const id = this.id\n if (id !== undefined && id !== null) {\n await ModelClass.query().where('id', id).update(this.getData())\n } else {\n const newId = await ModelClass.query().insert(this.getData())\n this.id = newId\n }\n }\n\n async delete(): Promise<void> {\n const ModelClass = this.constructor as typeof Model\n const id = this.id\n if (id !== undefined && id !== null) {\n await ModelClass.query().where('id', id).delete()\n }\n }\n\n // ─── Relation Loader ───────────────────────────────────────\n\n private static async loadRelations(instances: any[]): Promise<void> {\n if (instances.length === 0) return\n\n for (const [key, def] of this.relationDefs) {\n const shouldLoad = this.eagerLoads.size === 0 || this.eagerLoads.has(key.split(':')[1] ?? key)\n if (!shouldLoad) continue\n\n const localIds = instances.map((i: any) => i[def.localKey]).filter(Boolean)\n\n if (def.type === 'belongsTo') {\n if (!def.relatedModel.queryRunner) def.relatedModel.setConnection(this.queryRunner!)\n const related = await def.relatedModel.query().whereIn(def.localKey, localIds).get()\n for (const inst of instances) {\n inst._relations[key] = related.find((r: any) => r[def.localKey] === inst[def.foreignKey]) ?? null\n }\n }\n\n if (def.type === 'hasMany') {\n if (!def.relatedModel.queryRunner) def.relatedModel.setConnection(this.queryRunner!)\n const related = await def.relatedModel.query().whereIn(def.foreignKey, localIds).get()\n for (const inst of instances) {\n inst._relations[key] = related.filter((r: any) => r[def.foreignKey] === inst[def.localKey])\n }\n }\n\n if (def.type === 'hasOne') {\n if (!def.relatedModel.queryRunner) def.relatedModel.setConnection(this.queryRunner!)\n const related = await def.relatedModel.query().whereIn(def.foreignKey, localIds).get()\n for (const inst of instances) {\n inst._relations[key] = related.find((r: any) => r[def.foreignKey] === inst[def.localKey]) ?? null\n }\n }\n\n if (def.type === 'belongsToMany' && def.pivotTable) {\n if (!def.relatedModel.queryRunner) def.relatedModel.setConnection(this.queryRunner!)\n const pivotQb = new QueryBuilder(this.queryRunner!, def.pivotTable)\n const pivotRows = await pivotQb.whereIn(def.foreignKey, localIds).get()\n const relatedIds = pivotRows.map((r: any) => r[def.localKey])\n if (relatedIds.length > 0) {\n const related = await def.relatedModel.query().whereIn('id', relatedIds).get()\n for (const inst of instances) {\n const pivots = pivotRows.filter((p: any) => p[def.foreignKey] === inst[def.localKey])\n inst._relations[key] = pivots\n .map((p: any) => related.find((r: any) => r.id === p[def.localKey]))\n .filter(Boolean)\n }\n } else {\n for (const inst of instances) { inst._relations[key] = [] }\n }\n }\n\n if (def.type === 'morphMany' && def.morphName) {\n if (!def.relatedModel.queryRunner) def.relatedModel.setConnection(this.queryRunner!)\n const related = await def.relatedModel.query()\n .where(`${def.morphName}_type`, this.name)\n .whereIn(`${def.morphName}_id`, localIds).get()\n for (const inst of instances) {\n inst._relations[key] = related.filter((r: any) => r[`${def.morphName}_id`] === inst[def.localKey])\n }\n }\n }\n }\n\n // ─── Internal Helpers ──────────────────────────────────────\n\n private static hydrate(data: Record<string, any>): any {\n const instance = new this()\n for (const [key, value] of Object.entries(data)) {\n instance[key] = value\n }\n return instance\n }\n\n private getData(): Record<string, any> {\n const data: Record<string, any> = {}\n const instance = this as Record<string, any>\n const prototype = Object.getPrototypeOf(this)\n const ownKeys = [\n ...Object.getOwnPropertyNames(instance),\n ...Object.keys(instance),\n ]\n const classKeys = new Set([\n ...Object.getOwnPropertyNames(prototype),\n 'save', 'delete', 'getData',\n ])\n for (const key of ownKeys) {\n if (typeof key === 'string' && !classKeys.has(key) && key !== 'constructor' && !key.startsWith('_')) {\n data[key] = instance[key]\n }\n }\n return data\n }\n}\n"],"mappings":"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","names":["path","i","result","result","sql","result"]}