arcanajs 4.0.0 → 5.0.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.
- package/dist/529.js +2 -0
- package/dist/529.js.map +1 -0
- package/dist/630.js +3 -0
- package/dist/630.js.LICENSE.txt +14 -0
- package/dist/630.js.map +1 -0
- package/dist/arcanajs.auth.js +3 -0
- package/dist/arcanajs.auth.js.LICENSE.txt +14 -0
- package/dist/arcanajs.auth.js.map +1 -0
- package/dist/arcanajs.js +1 -1
- package/dist/arcanajs.js.map +1 -1
- package/dist/arcanajs.mail.js +2 -0
- package/dist/arcanajs.mail.js.map +1 -0
- package/dist/arcanajs.validator.js +2 -0
- package/dist/arcanajs.validator.js.map +1 -0
- package/dist/arcanox.js +1 -1
- package/dist/arcanox.js.map +1 -1
- package/dist/cli/commands/dependency.d.ts +1 -0
- package/dist/cli/commands/make/Controller.d.ts +3 -0
- package/dist/cli/commands/make/Factory.d.ts +2 -0
- package/dist/cli/commands/make/Middleware.d.ts +1 -0
- package/dist/cli/commands/make/Migration.d.ts +2 -0
- package/dist/cli/commands/make/Model.d.ts +2 -0
- package/dist/cli/commands/make/Provider.d.ts +1 -0
- package/dist/cli/commands/make/Request.d.ts +1 -0
- package/dist/cli/commands/make/Seeder.d.ts +2 -0
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils/toPascalCase.d.ts +1 -0
- package/dist/cli/utils/writeFile.d.ts +1 -0
- package/dist/lib/arcanox/providers/DatabaseProvider.d.ts +9 -4
- package/dist/lib/auth/AuthProvider.d.ts +10 -0
- package/dist/lib/auth/JWTService.d.ts +11 -0
- package/dist/lib/auth/SessionManager.d.ts +4 -0
- package/dist/lib/auth/middleware/AuthMiddleware.d.ts +5 -0
- package/dist/lib/auth/middleware/AuthenticatedMiddleware.d.ts +5 -0
- package/dist/lib/auth/middleware/GuestMiddleware.d.ts +5 -0
- package/dist/lib/auth/middleware/RoleMiddleware.d.ts +7 -0
- package/dist/lib/auth/types/AuthConfig.d.ts +24 -0
- package/dist/lib/auth/types/JWTPayload.d.ts +10 -0
- package/dist/lib/auth/types/index.d.ts +2 -0
- package/dist/lib/auth/utils/PasswordHasher.d.ts +16 -0
- package/dist/lib/auth/utils/TokenBlacklist.d.ts +9 -0
- package/dist/lib/index.arcanox.d.ts +16 -2
- package/dist/lib/index.auth.d.ts +11 -0
- package/dist/lib/index.client.d.ts +2 -0
- package/dist/lib/index.mail.d.ts +8 -0
- package/dist/lib/index.server.d.ts +4 -6
- package/dist/lib/index.validator.d.ts +6 -0
- package/dist/lib/mail/MailProvider.d.ts +10 -0
- package/dist/lib/mail/MailService.d.ts +57 -0
- package/dist/lib/mail/Mailable.d.ts +106 -0
- package/dist/lib/mail/index.d.ts +6 -0
- package/dist/lib/mail/queue/MailQueue.d.ts +51 -0
- package/dist/lib/mail/queue/index.d.ts +1 -0
- package/dist/lib/mail/types/MailConfig.d.ts +146 -0
- package/dist/lib/mail/types/index.d.ts +1 -0
- package/dist/lib/mail/utils/TemplateRenderer.d.ts +34 -0
- package/dist/lib/mail/utils/index.d.ts +1 -0
- package/dist/lib/server/ArcanaJSServer.d.ts +15 -8
- package/dist/lib/server/Container.d.ts +8 -0
- package/dist/lib/server/Router.d.ts +23 -33
- package/dist/lib/server/support/ServiceProvider.d.ts +4 -0
- package/dist/lib/validation/Validator.d.ts +55 -0
- package/dist/types/global.d.ts +102 -0
- package/package.json +68 -15
- package/dist/lib/arcanox/index.d.ts +0 -13
- package/dist/lib/server/validation/Validator.d.ts +0 -12
- /package/dist/lib/{server/validation → validation}/ValidationException.d.ts +0 -0
package/dist/arcanox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arcanox.js","mappings":"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","sources":["webpack://arcanajs/./src/lib/server/utils/dynamicRequire.ts","webpack://arcanajs/external node-commonjs \"fs\"","webpack://arcanajs/external node-commonjs \"path\"","webpack://arcanajs/external commonjs \"@faker-js/faker\"","webpack://arcanajs/webpack/bootstrap","webpack://arcanajs/webpack/runtime/create fake namespace object","webpack://arcanajs/webpack/runtime/define property getters","webpack://arcanajs/webpack/runtime/hasOwnProperty shorthand","webpack://arcanajs/webpack/runtime/make namespace object","webpack://arcanajs/./src/lib/arcanox/adapters/MongoAdapter.ts","webpack://arcanajs/./src/lib/arcanox/adapters/MySQLAdapter.ts","webpack://arcanajs/./src/lib/arcanox/adapters/PostgresAdapter.ts","webpack://arcanajs/./src/lib/arcanox/support/Macroable.ts","webpack://arcanajs/./src/lib/arcanox/QueryBuilder.ts","webpack://arcanajs/./src/lib/arcanox/relations/Relation.ts","webpack://arcanajs/./src/lib/arcanox/relations/BelongsTo.ts","webpack://arcanajs/./src/lib/arcanox/relations/BelongsToMany.ts","webpack://arcanajs/./src/lib/arcanox/relations/HasMany.ts","webpack://arcanajs/./src/lib/arcanox/relations/HasOne.ts","webpack://arcanajs/./src/lib/arcanox/Model.ts","webpack://arcanajs/./src/lib/arcanox/extensions/MongoExtensions.ts","webpack://arcanajs/./src/lib/arcanox/schema/Blueprint.ts","webpack://arcanajs/./src/lib/arcanox/schema/Schema.ts","webpack://arcanajs/./src/lib/arcanox/schema/Migration.ts","webpack://arcanajs/./src/lib/arcanox/factory/Factory.ts","webpack://arcanajs/./src/lib/arcanox/seeder/Seeder.ts"],"sourcesContent":["/**\n * Helper to dynamically require modules at runtime, bypassing Webpack bundling.\n * This is necessary for loading user configuration files, migrations, and views\n * that are not part of the framework bundle but exist in the user's project.\n */\nexport const dynamicRequire = (id: string) => {\n if (typeof __non_webpack_require__ !== \"undefined\") {\n return __non_webpack_require__(id);\n }\n // Fallback for non-webpack environments (e.g. direct node execution)\n // We use eval to prevent Webpack from seeing this as a dependency\n return eval(\"require\")(id);\n};\n","module.exports = require(\"fs\");","module.exports = require(\"path\");","module.exports = require(\"@faker-js/faker\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type { Db, MongoClient } from \"mongodb\";\nimport { dynamicRequire } from \"../../server/utils/dynamicRequire\";\nimport {\n ColumnDefinition,\n Connection,\n DatabaseAdapter,\n DatabaseConfig,\n SelectOptions,\n WhereClause,\n} from \"../types\";\n\nexport class MongoAdapter implements DatabaseAdapter {\n private client: MongoClient | null = null;\n private db: Db | null = null;\n\n async connect(config: DatabaseConfig): Promise<Connection> {\n const { MongoClient } = dynamicRequire(\"mongodb\");\n const url = `mongodb://${config.host}:${config.port}`;\n this.client = new MongoClient(url, {\n auth:\n config.username && config.password\n ? {\n username: config.username,\n password: config.password,\n }\n : undefined,\n });\n\n await this.client!.connect();\n this.db = this.client!.db(config.database);\n\n return {\n query: async (sql: string, params?: any[]) => {\n throw new Error(\"Raw SQL queries are not supported in MongoDB adapter\");\n },\n execute: async (sql: string, params?: any[]) => {\n throw new Error(\n \"Raw SQL execution is not supported in MongoDB adapter\"\n );\n },\n close: async () => {\n await this.disconnect();\n },\n };\n }\n\n async disconnect(): Promise<void> {\n if (this.client) {\n await this.client.close();\n this.client = null;\n this.db = null;\n }\n }\n\n // Schema operations\n async createTable(\n tableName: string,\n columns: ColumnDefinition[]\n ): Promise<void> {\n if (!this.db) throw new Error(\"Database not connected\");\n // MongoDB creates collections automatically, but we can create it explicitly\n // to apply validation rules if needed (not implemented here for simplicity)\n await this.db.createCollection(tableName);\n }\n\n async dropTable(tableName: string): Promise<void> {\n if (!this.db) throw new Error(\"Database not connected\");\n await this.db.collection(tableName).drop();\n }\n\n async hasTable(tableName: string): Promise<boolean> {\n if (!this.db) throw new Error(\"Database not connected\");\n const collections = await this.db\n .listCollections({ name: tableName })\n .toArray();\n return collections.length > 0;\n }\n\n async hasColumn(tableName: string, columnName: string): Promise<boolean> {\n // MongoDB is schemaless, so this is always true effectively,\n // or we could check if any document has this field.\n return true;\n }\n\n // Query operations\n async select(table: string, options: SelectOptions): Promise<any[]> {\n if (!this.db) throw new Error(\"Database not connected\");\n\n const collection = this.db.collection(table);\n const filter = this.buildFilter(options.where || []);\n const projection = this.buildProjection(options.columns);\n\n let cursor = collection.find(filter);\n\n if (projection) {\n cursor = cursor.project(projection);\n }\n\n if (options.orderBy) {\n const sort: any = {};\n options.orderBy.forEach((order) => {\n sort[order.column] = order.direction === \"ASC\" ? 1 : -1;\n });\n cursor = cursor.sort(sort);\n }\n\n if (options.offset) {\n cursor = cursor.skip(options.offset);\n }\n\n if (options.limit) {\n cursor = cursor.limit(options.limit);\n }\n\n const results = await cursor.toArray();\n\n // Map _id to id but keep _id\n return results.map((doc) => {\n const { _id, ...rest } = doc;\n return { id: _id, _id, ...rest };\n });\n }\n\n async insert(table: string, data: Record<string, any>): Promise<any> {\n if (!this.db) throw new Error(\"Database not connected\");\n const collection = this.db.collection(table);\n\n // Remove id if present and let Mongo generate _id, or map id to _id\n const doc = { ...data };\n if (doc.id) {\n doc._id = doc.id;\n delete doc.id;\n }\n\n const result = await collection.insertOne(doc);\n\n return {\n id: result.insertedId,\n _id: result.insertedId,\n ...data,\n };\n }\n\n async update(\n table: string,\n id: any,\n data: Record<string, any>\n ): Promise<any> {\n if (!this.db) throw new Error(\"Database not connected\");\n const collection = this.db.collection(table);\n\n const filter = { _id: this.normalizeId(id) };\n const update = { $set: data };\n\n await collection.updateOne(filter, update);\n\n // Return updated document (requires another query or findOneAndUpdate)\n const updated = await collection.findOne(filter);\n if (updated) {\n const { _id, ...rest } = updated;\n return { id: _id, _id, ...rest };\n }\n return null;\n }\n\n async delete(table: string, id: any): Promise<boolean> {\n if (!this.db) throw new Error(\"Database not connected\");\n const collection = this.db.collection(table);\n const result = await collection.deleteOne({ _id: this.normalizeId(id) });\n return result.deletedCount === 1;\n }\n\n // Transaction support\n async beginTransaction(): Promise<void> {\n // MongoDB transactions require replica set\n // Placeholder implementation\n }\n\n async raw(query: string, params: any[] = []): Promise<any> {\n if (!this.db) {\n throw new Error(\"Database not connected\");\n }\n // For MongoDB, raw query might interpret the string as a command\n // or return the raw db object for advanced usage if query is \"db\"\n if (query === \"db\") return this.db;\n\n // Simple command execution\n return await this.db.command(JSON.parse(query));\n }\n\n async commit(): Promise<void> {\n //\n }\n\n async rollback(): Promise<void> {\n //\n }\n\n // Helpers\n private buildFilter(where: WhereClause[]): any {\n const filter: any = {};\n\n where.forEach((clause) => {\n const column = clause.column === \"id\" ? \"_id\" : clause.column;\n let value = clause.value;\n\n if (column === \"_id\") {\n value = this.normalizeId(value);\n }\n\n switch (clause.operator) {\n case \"=\":\n filter[column] = value;\n break;\n case \"!=\":\n filter[column] = { $ne: value };\n break;\n case \">\":\n filter[column] = { $gt: value };\n break;\n case \"<\":\n filter[column] = { $lt: value };\n break;\n case \">=\":\n filter[column] = { $gte: value };\n break;\n case \"<=\":\n filter[column] = { $lte: value };\n break;\n case \"IN\":\n filter[column] = { $in: Array.isArray(value) ? value : [value] };\n break;\n case \"NOT IN\":\n filter[column] = { $nin: Array.isArray(value) ? value : [value] };\n break;\n case \"LIKE\":\n // Simple regex for LIKE\n filter[column] = {\n $regex: new RegExp(value.replace(/%/g, \".*\"), \"i\"),\n };\n break;\n case \"IS NULL\":\n filter[column] = null;\n break;\n case \"IS NOT NULL\":\n filter[column] = { $ne: null };\n break;\n }\n });\n\n return filter;\n }\n\n private buildProjection(columns?: string[]): any {\n if (!columns || columns.length === 0 || columns.includes(\"*\")) {\n return null;\n }\n const projection: any = {};\n columns.forEach((col) => {\n if (col === \"id\") {\n // _id is included by default, no need to project it explicitly unless we want to exclude others\n // But if we select specific columns, we need to ensure _id is handled\n } else {\n projection[col] = 1;\n }\n });\n return projection;\n }\n\n private normalizeId(id: any): any {\n const { ObjectId } = dynamicRequire(\"mongodb\");\n if (id instanceof ObjectId) return id;\n if (typeof id === \"string\" && ObjectId.isValid(id)) {\n return new ObjectId(id);\n }\n return id;\n }\n}\n","import type {\n Pool,\n PoolConnection,\n ResultSetHeader,\n RowDataPacket,\n} from \"mysql2/promise\";\nimport { dynamicRequire } from \"../../server/utils/dynamicRequire\";\nimport type {\n ColumnDefinition,\n Connection,\n DatabaseAdapter,\n DatabaseConfig,\n SelectOptions,\n WhereClause,\n} from \"../types\";\n\n/**\n * MySQL Database Adapter\n */\nexport class MySQLAdapter implements DatabaseAdapter {\n private pool: Pool | null = null;\n private connection: PoolConnection | null = null;\n\n async connect(config: DatabaseConfig): Promise<Connection> {\n const mysql = dynamicRequire(\"mysql2/promise\");\n\n this.pool = mysql.createPool({\n host: config.host,\n port: config.port,\n database: config.database,\n user: config.username,\n password: config.password,\n waitForConnections: true,\n connectionLimit: config.pool?.max || 10,\n queueLimit: 0,\n });\n\n return {\n query: this.query.bind(this),\n execute: this.execute.bind(this),\n close: this.disconnect.bind(this),\n };\n }\n\n async disconnect(): Promise<void> {\n if (this.pool) {\n await this.pool.end();\n this.pool = null;\n }\n }\n\n async query(sql: string, params?: any[]): Promise<any> {\n if (!this.pool) throw new Error(\"Database not connected\");\n const [rows] = await this.pool.query<RowDataPacket[]>(sql, params);\n return rows;\n }\n\n async execute(sql: string, params?: any[]): Promise<any> {\n if (!this.pool) throw new Error(\"Database not connected\");\n const [result] = await this.pool.execute<ResultSetHeader>(sql, params);\n return result;\n }\n\n async createTable(\n tableName: string,\n columns: ColumnDefinition[]\n ): Promise<void> {\n const columnDefs = columns\n .map((col) => {\n let def = `\\`${col.name}\\` ${this.mapType(col.type, col.length)}`;\n\n if (col.unsigned) def += \" UNSIGNED\";\n if (col.autoIncrement) def += \" AUTO_INCREMENT\";\n if (!col.nullable) def += \" NOT NULL\";\n if (col.default !== undefined) {\n def += ` DEFAULT ${this.formatValue(col.default)}`;\n }\n if (col.primary) def += \" PRIMARY KEY\";\n if (col.unique) def += \" UNIQUE\";\n\n return def;\n })\n .join(\", \");\n\n const sql = `CREATE TABLE IF NOT EXISTS \\`${tableName}\\` (${columnDefs}) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci`;\n await this.execute(sql);\n }\n\n async dropTable(tableName: string): Promise<void> {\n await this.execute(`DROP TABLE IF EXISTS \\`${tableName}\\``);\n }\n\n async hasTable(tableName: string): Promise<boolean> {\n const result = await this.query(\n `SELECT COUNT(*) as count FROM information_schema.tables \n WHERE table_schema = DATABASE() AND table_name = ?`,\n [tableName]\n );\n return result[0]?.count > 0;\n }\n\n async hasColumn(tableName: string, columnName: string): Promise<boolean> {\n const result = await this.query(\n `SELECT COUNT(*) as count FROM information_schema.columns \n WHERE table_schema = DATABASE() AND table_name = ? AND column_name = ?`,\n [tableName, columnName]\n );\n return result[0]?.count > 0;\n }\n\n async select(table: string, options: SelectOptions): Promise<any[]> {\n const columns = options.columns?.join(\", \") || \"*\";\n let sql = `SELECT ${columns} FROM \\`${table}\\``;\n const params: any[] = [];\n\n // Joins\n if (options.joins && options.joins.length > 0) {\n for (const join of options.joins) {\n sql += ` ${join.type} JOIN \\`${join.table}\\` ON ${join.first} ${join.operator} ${join.second}`;\n }\n }\n\n // Where clauses\n if (options.where && options.where.length > 0) {\n const whereParts = options.where.map((clause, index) => {\n const boolean = index === 0 ? \"WHERE\" : clause.boolean;\n const condition = this.buildWhereCondition(clause, params);\n return `${boolean} ${condition}`;\n });\n sql += \" \" + whereParts.join(\" \");\n }\n\n // Order by\n if (options.orderBy && options.orderBy.length > 0) {\n const orderParts = options.orderBy.map(\n (o) => `\\`${o.column}\\` ${o.direction}`\n );\n sql += ` ORDER BY ${orderParts.join(\", \")}`;\n }\n\n // Limit and offset\n if (options.limit) {\n sql += ` LIMIT ?`;\n params.push(options.limit);\n }\n if (options.offset) {\n sql += ` OFFSET ?`;\n params.push(options.offset);\n }\n\n return await this.query(sql, params);\n }\n\n async insert(table: string, data: Record<string, any>): Promise<any> {\n const keys = Object.keys(data);\n const values = Object.values(data);\n const placeholders = values.map(() => \"?\").join(\", \");\n\n const sql = `INSERT INTO \\`${table}\\` (${keys\n .map((k) => `\\`${k}\\``)\n .join(\", \")}) VALUES (${placeholders})`;\n const result = await this.execute(sql, values);\n\n return { id: result.insertId, ...data };\n }\n\n async update(\n table: string,\n id: any,\n data: Record<string, any>\n ): Promise<any> {\n const keys = Object.keys(data);\n const values = Object.values(data);\n const setParts = keys.map((k) => `\\`${k}\\` = ?`).join(\", \");\n\n const sql = `UPDATE \\`${table}\\` SET ${setParts} WHERE id = ?`;\n await this.execute(sql, [...values, id]);\n\n return { id, ...data };\n }\n\n async delete(table: string, id: any): Promise<boolean> {\n const sql = `DELETE FROM \\`${table}\\` WHERE id = ?`;\n const result = await this.execute(sql, [id]);\n return result.affectedRows > 0;\n }\n\n async beginTransaction(): Promise<void> {\n if (!this.pool) throw new Error(\"Database not connected\");\n this.connection = await this.pool.getConnection();\n await this.connection.beginTransaction();\n }\n\n async commit(): Promise<void> {\n if (!this.connection) throw new Error(\"No active transaction\");\n await this.connection.commit();\n this.connection.release();\n this.connection = null;\n }\n\n async rollback(): Promise<void> {\n if (!this.connection) throw new Error(\"No active transaction\");\n await this.connection.rollback();\n this.connection.release();\n this.connection = null;\n }\n\n async raw(query: string, params: any[] = []): Promise<any> {\n if (!this.pool) throw new Error(\"Database not connected\");\n const [result] = await this.pool.execute(query, params);\n return result;\n }\n\n private buildWhereCondition(clause: WhereClause, params: any[]): string {\n const column = `\\`${clause.column}\\``;\n\n switch (clause.operator) {\n case \"IN\":\n const inPlaceholders = (clause.value as any[])\n .map(() => \"?\")\n .join(\", \");\n params.push(...clause.value);\n return `${column} IN (${inPlaceholders})`;\n\n case \"NOT IN\":\n const notInPlaceholders = (clause.value as any[])\n .map(() => \"?\")\n .join(\", \");\n params.push(...clause.value);\n return `${column} NOT IN (${notInPlaceholders})`;\n\n case \"BETWEEN\":\n params.push(clause.value[0], clause.value[1]);\n return `${column} BETWEEN ? AND ?`;\n\n case \"IS NULL\":\n return `${column} IS NULL`;\n\n case \"IS NOT NULL\":\n return `${column} IS NOT NULL`;\n\n default:\n params.push(clause.value);\n return `${column} ${clause.operator} ?`;\n }\n }\n\n private mapType(type: string, length?: number): string {\n const typeMap: Record<string, string> = {\n string: length ? `VARCHAR(${length})` : \"VARCHAR(255)\",\n text: \"TEXT\",\n integer: \"INT\",\n bigInteger: \"BIGINT\",\n float: \"FLOAT\",\n double: \"DOUBLE\",\n decimal: \"DECIMAL(10,2)\",\n boolean: \"TINYINT(1)\",\n date: \"DATE\",\n datetime: \"DATETIME\",\n timestamp: \"TIMESTAMP\",\n json: \"JSON\",\n uuid: \"CHAR(36)\",\n };\n return typeMap[type] || type.toUpperCase();\n }\n\n private formatValue(value: any): string {\n if (value === null) return \"NULL\";\n if (typeof value === \"string\") return `'${value.replace(/'/g, \"''\")}'`;\n if (typeof value === \"boolean\") return value ? \"1\" : \"0\";\n if (value instanceof Date)\n return `'${value.toISOString().slice(0, 19).replace(\"T\", \" \")}'`;\n return String(value);\n }\n}\n","import type { Pool, PoolClient, QueryResult } from \"pg\";\nimport { dynamicRequire } from \"../../server/utils/dynamicRequire\";\nimport type {\n ColumnDefinition,\n Connection,\n DatabaseAdapter,\n DatabaseConfig,\n SelectOptions,\n WhereClause,\n} from \"../types\";\n\n/**\n * PostgreSQL Database Adapter\n */\nexport class PostgresAdapter implements DatabaseAdapter {\n private pool: Pool | null = null;\n private client: PoolClient | null = null;\n\n async connect(config: DatabaseConfig): Promise<Connection> {\n const { Pool } = dynamicRequire(\"pg\");\n\n this.pool = new Pool({\n host: config.host,\n port: config.port,\n database: config.database,\n user: config.username,\n password: config.password,\n ssl: config.ssl,\n min: config.pool?.min || 2,\n max: config.pool?.max || 10,\n });\n\n return {\n query: this.query.bind(this),\n execute: this.execute.bind(this),\n close: this.disconnect.bind(this),\n };\n }\n\n async disconnect(): Promise<void> {\n if (this.pool) {\n await this.pool.end();\n this.pool = null;\n }\n }\n\n async query(sql: string, params?: any[]): Promise<any> {\n if (!this.pool) throw new Error(\"Database not connected\");\n const result: QueryResult = await this.pool.query(sql, params);\n return result.rows;\n }\n\n async execute(sql: string, params?: any[]): Promise<any> {\n if (!this.pool) throw new Error(\"Database not connected\");\n const result: QueryResult = await this.pool.query(sql, params);\n return result;\n }\n\n async createTable(\n tableName: string,\n columns: ColumnDefinition[]\n ): Promise<void> {\n const columnDefs = columns\n .map((col) => {\n let def = `\"${col.name}\" ${this.mapType(col.type, col.length)}`;\n\n if (col.primary) def += \" PRIMARY KEY\";\n if (col.autoIncrement) def += \" GENERATED ALWAYS AS IDENTITY\";\n if (!col.nullable) def += \" NOT NULL\";\n if (col.unique) def += \" UNIQUE\";\n if (col.default !== undefined) {\n def += ` DEFAULT ${this.formatValue(col.default)}`;\n }\n\n return def;\n })\n .join(\", \");\n\n const sql = `CREATE TABLE IF NOT EXISTS \"${tableName}\" (${columnDefs})`;\n await this.execute(sql);\n }\n\n async dropTable(tableName: string): Promise<void> {\n await this.execute(`DROP TABLE IF EXISTS \"${tableName}\"`);\n }\n\n async hasTable(tableName: string): Promise<boolean> {\n const result = await this.query(\n `SELECT EXISTS (\n SELECT FROM information_schema.tables \n WHERE table_schema = 'public' \n AND table_name = $1\n )`,\n [tableName]\n );\n return result[0]?.exists || false;\n }\n\n async hasColumn(tableName: string, columnName: string): Promise<boolean> {\n const result = await this.query(\n `SELECT EXISTS (\n SELECT FROM information_schema.columns \n WHERE table_schema = 'public' \n AND table_name = $1 \n AND column_name = $2\n )`,\n [tableName, columnName]\n );\n return result[0]?.exists || false;\n }\n\n async select(table: string, options: SelectOptions): Promise<any[]> {\n const columns = options.columns?.join(\", \") || \"*\";\n let sql = `SELECT ${columns} FROM \"${table}\"`;\n const params: any[] = [];\n let paramIndex = 1;\n\n // Joins\n if (options.joins && options.joins.length > 0) {\n for (const join of options.joins) {\n sql += ` ${join.type} JOIN \"${join.table}\" ON ${join.first} ${join.operator} ${join.second}`;\n }\n }\n\n // Where clauses\n if (options.where && options.where.length > 0) {\n const whereParts = options.where.map((clause, index) => {\n const boolean = index === 0 ? \"WHERE\" : clause.boolean;\n const condition = this.buildWhereCondition(clause, params, paramIndex);\n paramIndex = params.length + 1;\n return `${boolean} ${condition}`;\n });\n sql += \" \" + whereParts.join(\" \");\n }\n\n // Order by\n if (options.orderBy && options.orderBy.length > 0) {\n const orderParts = options.orderBy.map(\n (o) => `\"${o.column}\" ${o.direction}`\n );\n sql += ` ORDER BY ${orderParts.join(\", \")}`;\n }\n\n // Limit and offset\n if (options.limit) {\n sql += ` LIMIT $${paramIndex++}`;\n params.push(options.limit);\n }\n if (options.offset) {\n sql += ` OFFSET $${paramIndex++}`;\n params.push(options.offset);\n }\n\n return await this.query(sql, params);\n }\n\n async insert(table: string, data: Record<string, any>): Promise<any> {\n const keys = Object.keys(data);\n const values = Object.values(data);\n const placeholders = values.map((_, i) => `$${i + 1}`).join(\", \");\n\n const sql = `INSERT INTO \"${table}\" (${keys\n .map((k) => `\"${k}\"`)\n .join(\", \")}) \n VALUES (${placeholders}) \n RETURNING *`;\n\n const result = await this.query(sql, values);\n return result[0];\n }\n\n async update(\n table: string,\n id: any,\n data: Record<string, any>\n ): Promise<any> {\n const keys = Object.keys(data);\n const values = Object.values(data);\n const setParts = keys.map((k, i) => `\"${k}\" = $${i + 1}`).join(\", \");\n\n const sql = `UPDATE \"${table}\" SET ${setParts} WHERE id = $${\n keys.length + 1\n } RETURNING *`;\n const result = await this.query(sql, [...values, id]);\n return result[0];\n }\n\n async delete(table: string, id: any): Promise<boolean> {\n const sql = `DELETE FROM \"${table}\" WHERE id = $1`;\n const result = await this.execute(sql, [id]);\n return result.rowCount > 0;\n }\n\n async beginTransaction(): Promise<void> {\n if (!this.pool) throw new Error(\"Database not connected\");\n this.client = await this.pool.connect();\n await this.client.query(\"BEGIN\");\n }\n\n async commit(): Promise<void> {\n if (!this.client) throw new Error(\"No active transaction\");\n await this.client.query(\"COMMIT\");\n this.client.release();\n this.client = null;\n }\n\n async rollback(): Promise<void> {\n if (!this.client) throw new Error(\"No active transaction\");\n await this.client.query(\"ROLLBACK\");\n this.client.release();\n this.client = null;\n }\n\n async raw(query: string, params: any[] = []): Promise<any> {\n if (!this.pool) throw new Error(\"Database not connected\");\n const result = await this.pool.query(query, params);\n return result.rows;\n }\n\n private buildWhereCondition(\n clause: WhereClause,\n params: any[],\n startIndex: number\n ): string {\n const column = `\"${clause.column}\"`;\n\n switch (clause.operator) {\n case \"IN\":\n const inPlaceholders = (clause.value as any[])\n .map((_, i) => `$${startIndex + i}`)\n .join(\", \");\n params.push(...clause.value);\n return `${column} IN (${inPlaceholders})`;\n\n case \"NOT IN\":\n const notInPlaceholders = (clause.value as any[])\n .map((_, i) => `$${startIndex + i}`)\n .join(\", \");\n params.push(...clause.value);\n return `${column} NOT IN (${notInPlaceholders})`;\n\n case \"BETWEEN\":\n params.push(clause.value[0], clause.value[1]);\n return `${column} BETWEEN $${startIndex} AND $${startIndex + 1}`;\n\n case \"IS NULL\":\n return `${column} IS NULL`;\n\n case \"IS NOT NULL\":\n return `${column} IS NOT NULL`;\n\n default:\n params.push(clause.value);\n return `${column} ${clause.operator} $${startIndex}`;\n }\n }\n\n private mapType(type: string, length?: number): string {\n const typeMap: Record<string, string> = {\n string: length ? `VARCHAR(${length})` : \"VARCHAR(255)\",\n text: \"TEXT\",\n integer: \"INTEGER\",\n bigInteger: \"BIGINT\",\n float: \"REAL\",\n double: \"DOUBLE PRECISION\",\n decimal: \"DECIMAL\",\n boolean: \"BOOLEAN\",\n date: \"DATE\",\n datetime: \"TIMESTAMP\",\n timestamp: \"TIMESTAMP\",\n json: \"JSONB\",\n uuid: \"UUID\",\n };\n return typeMap[type] || type.toUpperCase();\n }\n\n private formatValue(value: any): string {\n if (value === null) return \"NULL\";\n if (typeof value === \"string\") return `'${value.replace(/'/g, \"''\")}'`;\n if (typeof value === \"boolean\") return value ? \"TRUE\" : \"FALSE\";\n if (value instanceof Date) return `'${value.toISOString()}'`;\n return String(value);\n }\n}\n","/**\n * Macroable trait\n * Allows adding custom methods to a class at runtime\n */\nexport class Macroable {\n protected static macros: Record<string, Function> = {};\n\n /**\n * Register a custom macro\n */\n static macro(name: string, macro: Function): void {\n this.macros[name] = macro;\n (this.prototype as any)[name] = macro;\n }\n\n /**\n * Mix another object into the class\n */\n static mixin(mixin: Record<string, Function>): void {\n Object.keys(mixin).forEach((key) => {\n this.macro(key, mixin[key]);\n });\n }\n\n /**\n * Check if macro exists\n */\n static hasMacro(name: string): boolean {\n return !!this.macros[name];\n }\n}\n","import type {\n JoinClause,\n OrderByClause,\n SelectOptions,\n WhereClause,\n} from \"./types\";\n\nimport { Macroable } from \"./support/Macroable\";\n\n/**\n * Query Builder - Fluent interface for building database queries\n * Arcanox Query Builder\n */\nexport class QueryBuilder<T = any> extends Macroable {\n protected tableName: string;\n protected selectColumns: string[] = [\"*\"];\n protected whereClauses: WhereClause[] = [];\n protected orderByClauses: OrderByClause[] = [];\n protected joinClauses: JoinClause[] = [];\n protected limitValue?: number;\n protected offsetValue?: number;\n protected adapter: any; // DatabaseAdapter\n\n constructor(table: string, adapter: any) {\n super();\n this.tableName = table;\n this.adapter = adapter;\n }\n\n /**\n * Select specific columns\n */\n select(...columns: string[]): this {\n this.selectColumns = columns;\n return this;\n }\n\n /**\n * Add a WHERE clause\n */\n where(column: string, operator: any, value?: any): this {\n // Support where(column, value) syntax\n if (value === undefined) {\n value = operator;\n operator = \"=\";\n }\n\n this.whereClauses.push({\n column,\n operator,\n value,\n boolean: \"AND\",\n });\n return this;\n }\n\n /**\n * Add an OR WHERE clause\n */\n orWhere(column: string, operator: any, value?: any): this {\n if (value === undefined) {\n value = operator;\n operator = \"=\";\n }\n\n this.whereClauses.push({\n column,\n operator,\n value,\n boolean: \"OR\",\n });\n return this;\n }\n\n /**\n * WHERE IN clause\n */\n whereIn(column: string, values: any[]): this {\n this.whereClauses.push({\n column,\n operator: \"IN\",\n value: values,\n boolean: \"AND\",\n });\n return this;\n }\n\n /**\n * WHERE NOT IN clause\n */\n whereNotIn(column: string, values: any[]): this {\n this.whereClauses.push({\n column,\n operator: \"NOT IN\",\n value: values,\n boolean: \"AND\",\n });\n return this;\n }\n\n /**\n * WHERE BETWEEN clause\n */\n whereBetween(column: string, range: [any, any]): this {\n this.whereClauses.push({\n column,\n operator: \"BETWEEN\",\n value: range,\n boolean: \"AND\",\n });\n return this;\n }\n\n /**\n * WHERE NULL clause\n */\n whereNull(column: string): this {\n this.whereClauses.push({\n column,\n operator: \"IS NULL\",\n value: null,\n boolean: \"AND\",\n });\n return this;\n }\n\n /**\n * WHERE NOT NULL clause\n */\n whereNotNull(column: string): this {\n this.whereClauses.push({\n column,\n operator: \"IS NOT NULL\",\n value: null,\n boolean: \"AND\",\n });\n return this;\n }\n\n /**\n * Add ORDER BY clause\n */\n orderBy(\n column: string,\n direction: \"ASC\" | \"DESC\" | \"asc\" | \"desc\" = \"ASC\"\n ): this {\n this.orderByClauses.push({\n column,\n direction: direction.toUpperCase() as \"ASC\" | \"DESC\",\n });\n return this;\n }\n\n /**\n * Add LIMIT clause\n */\n limit(count: number): this {\n this.limitValue = count;\n return this;\n }\n\n /**\n * Add OFFSET clause\n */\n offset(count: number): this {\n this.offsetValue = count;\n return this;\n }\n\n /**\n * Add JOIN clause\n */\n join(\n table: string,\n first: string,\n operator: string,\n second: string,\n type: \"INNER\" | \"LEFT\" | \"RIGHT\" = \"INNER\"\n ): this {\n this.joinClauses.push({\n type,\n table,\n first,\n operator,\n second,\n });\n return this;\n }\n\n /**\n * Add LEFT JOIN clause\n */\n leftJoin(\n table: string,\n first: string,\n operator: string,\n second: string\n ): this {\n return this.join(table, first, operator, second, \"LEFT\");\n }\n\n /**\n * Add RIGHT JOIN clause\n */\n rightJoin(\n table: string,\n first: string,\n operator: string,\n second: string\n ): this {\n return this.join(table, first, operator, second, \"RIGHT\");\n }\n\n protected eagerLoads: string[] = [];\n protected model: any; // Model class\n\n /**\n * Set the model class\n */\n setModel(model: any): this {\n this.model = model;\n return this;\n }\n\n /**\n * Eager load relationships\n */\n with(relations: string | string[]): this {\n if (Array.isArray(relations)) {\n this.eagerLoads.push(...relations);\n } else {\n this.eagerLoads.push(relations);\n }\n return this;\n }\n\n /**\n * Execute query and get all results\n */\n async get(): Promise<T[]> {\n const options: SelectOptions = {\n columns: this.selectColumns,\n where: this.whereClauses,\n orderBy: this.orderByClauses,\n limit: this.limitValue,\n offset: this.offsetValue,\n joins: this.joinClauses,\n };\n\n const results = await this.adapter.select(this.tableName, options);\n\n if (this.eagerLoads.length > 0 && this.model) {\n return await this.eagerLoadRelations(results);\n }\n\n return results;\n }\n\n /**\n * Eager load relations\n */\n protected async eagerLoadRelations(results: any[]): Promise<any[]> {\n if (results.length === 0) return results;\n\n // Hydrate models first\n const models = results.map((result) => this.model.hydrate(result));\n\n for (const relationName of this.eagerLoads) {\n // Check if relation exists on model\n const instance = new this.model();\n if (typeof instance[relationName] !== \"function\") {\n throw new Error(\n `Relation ${relationName} does not exist on ${this.model.name}`\n );\n }\n\n // Get relation instance\n const relation = instance[relationName]();\n\n // Add constraints for eager loading\n relation.addEagerConstraints(models);\n\n // Get related results\n const relatedResults = await relation.get();\n\n // Match results to models\n relation.match(models, relatedResults, relationName);\n }\n\n return models;\n }\n\n /**\n * Get first result\n */\n async first(): Promise<T | null> {\n this.limit(1);\n const results = await this.get();\n return results[0] || null;\n }\n\n /**\n * Find by ID\n */\n async find(id: any): Promise<T | null> {\n return this.where(\"id\", id).first();\n }\n\n /**\n * Count results\n */\n async count(): Promise<number> {\n this.selectColumns = [\"COUNT(*) as count\"];\n const result = await this.first();\n return result ? (result as any).count : 0;\n }\n\n /**\n * Get specific column values\n */\n async pluck(column: string): Promise<any[]> {\n this.select(column);\n const results = await this.get();\n return results.map((row) => (row as any)[column]);\n }\n\n /**\n * Sum of column\n */\n async sum(column: string): Promise<number> {\n this.selectColumns = [`SUM(${column}) as sum`];\n const result = await this.first();\n return result ? (result as any).sum || 0 : 0;\n }\n\n /**\n * Average of column\n */\n async avg(column: string): Promise<number> {\n this.selectColumns = [`AVG(${column}) as avg`];\n const result = await this.first();\n return result ? (result as any).avg || 0 : 0;\n }\n\n /**\n * Minimum value of column\n */\n async min(column: string): Promise<any> {\n this.selectColumns = [`MIN(${column}) as min`];\n const result = await this.first();\n return result ? (result as any).min : null;\n }\n\n /**\n * Maximum value of column\n */\n async max(column: string): Promise<any> {\n this.selectColumns = [`MAX(${column}) as max`];\n const result = await this.first();\n return result ? (result as any).max : null;\n }\n\n /**\n * Check if any records exist\n */\n async exists(): Promise<boolean> {\n const count = await this.count();\n return count > 0;\n }\n\n /**\n * Paginate results\n */\n async paginate(\n page: number = 1,\n perPage: number = 15\n ): Promise<{\n data: T[];\n total: number;\n perPage: number;\n currentPage: number;\n lastPage: number;\n }> {\n const total = await this.count();\n const offset = (page - 1) * perPage;\n\n this.limit(perPage).offset(offset);\n const data = await this.get();\n\n return {\n data,\n total,\n perPage,\n currentPage: page,\n lastPage: Math.ceil(total / perPage),\n };\n }\n\n /**\n * Clone the query builder\n */\n clone(): QueryBuilder<T> {\n const cloned = new QueryBuilder<T>(this.tableName, this.adapter);\n cloned.selectColumns = [...this.selectColumns];\n cloned.whereClauses = [...this.whereClauses];\n cloned.orderByClauses = [...this.orderByClauses];\n cloned.joinClauses = [...this.joinClauses];\n cloned.limitValue = this.limitValue;\n cloned.offsetValue = this.offsetValue;\n return cloned;\n }\n}\n","import { Model } from \"../Model\";\nimport { QueryBuilder } from \"../QueryBuilder\";\n\nexport abstract class Relation<R extends Model = any> {\n protected query: QueryBuilder<R>;\n protected parent: Model;\n protected related: new () => R;\n\n constructor(query: QueryBuilder<R>, parent: Model) {\n this.query = query;\n this.parent = parent;\n this.related = (query as any).model;\n this.addConstraints();\n }\n\n abstract addConstraints(): void;\n\n abstract addEagerConstraints(models: Model[]): void;\n\n abstract match(models: Model[], results: R[], relation: string): Model[];\n\n getQuery(): QueryBuilder<R> {\n return this.query;\n }\n\n async get(): Promise<R[]> {\n return this.query.get();\n }\n\n async first(): Promise<R | null> {\n return this.query.first();\n }\n}\n","import { Model } from \"../Model\";\nimport { QueryBuilder } from \"../QueryBuilder\";\nimport { Relation } from \"./Relation\";\n\nexport class BelongsTo<R extends Model = any> extends Relation<R> {\n protected foreignKey: string;\n protected ownerKey: string;\n\n constructor(\n query: QueryBuilder<R>,\n parent: Model,\n foreignKey: string,\n ownerKey: string\n ) {\n super(query, parent);\n this.foreignKey = foreignKey;\n this.ownerKey = ownerKey;\n }\n\n addConstraints(): void {\n const foreignValue = this.parent.getAttribute(this.foreignKey);\n this.query.where(this.ownerKey, \"=\", foreignValue);\n }\n\n addEagerConstraints(models: Model[]): void {\n const keys = models\n .map((model) => model.getAttribute(this.foreignKey))\n .filter((k) => k !== null);\n this.query.whereIn(this.ownerKey, keys);\n }\n\n match(models: Model[], results: R[], relation: string): Model[] {\n const dictionary: Record<string, R> = {};\n\n results.forEach((result) => {\n const key = result.getAttribute(this.ownerKey);\n dictionary[key] = result;\n });\n\n models.forEach((model) => {\n const key = model.getAttribute(this.foreignKey);\n if (dictionary[key]) {\n model.setRelation(relation, dictionary[key]);\n }\n });\n\n return models;\n }\n}\n","import { Model } from \"../Model\";\nimport { QueryBuilder } from \"../QueryBuilder\";\nimport { Relation } from \"./Relation\";\n\nexport class BelongsToMany<R extends Model = any> extends Relation<R> {\n protected table: string;\n protected foreignPivotKey: string;\n protected relatedPivotKey: string;\n protected parentKey: string;\n protected relatedKey: string;\n\n constructor(\n query: QueryBuilder<R>,\n parent: Model,\n table: string,\n foreignPivotKey: string,\n relatedPivotKey: string,\n parentKey: string,\n relatedKey: string\n ) {\n super(query, parent);\n this.table = table;\n this.foreignPivotKey = foreignPivotKey;\n this.relatedPivotKey = relatedPivotKey;\n this.parentKey = parentKey;\n this.relatedKey = relatedKey;\n }\n\n addConstraints(): void {\n this.performJoin();\n this.query.where(\n `${this.table}.${this.foreignPivotKey}`,\n \"=\",\n this.parent.getAttribute(this.parentKey)\n );\n }\n\n protected performJoin(query?: QueryBuilder<R>): this {\n const q = query || this.query;\n const relatedTable = this.related.prototype.getTable();\n\n q.join(\n this.table,\n `${relatedTable}.${this.relatedKey}`,\n \"=\",\n `${this.table}.${this.relatedPivotKey}`\n );\n\n return this;\n }\n\n addEagerConstraints(models: Model[]): void {\n this.performJoin();\n const keys = models\n .map((model) => model.getAttribute(this.parentKey))\n .filter((k) => k !== null);\n this.query.whereIn(`${this.table}.${this.foreignPivotKey}`, keys);\n }\n\n match(models: Model[], results: R[], relation: string): Model[] {\n const dictionary: Record<string, R[]> = {};\n\n // In a real implementation, we'd select the pivot fields to map correctly\n // For now, we'll assume the results contain the pivot data or we re-query\n // This is a simplified implementation\n\n // TODO: Implement proper pivot mapping\n // For now, we'll just map based on the assumption that results are correct\n\n return models;\n }\n}\n","import { Model } from \"../Model\";\nimport { QueryBuilder } from \"../QueryBuilder\";\nimport { Relation } from \"./Relation\";\n\nexport class HasMany<R extends Model = any> extends Relation<R> {\n protected foreignKey: string;\n protected localKey: string;\n\n constructor(\n query: QueryBuilder<R>,\n parent: Model,\n foreignKey: string,\n localKey: string\n ) {\n super(query, parent);\n this.foreignKey = foreignKey;\n this.localKey = localKey;\n }\n\n addConstraints(): void {\n const localValue = this.parent.getAttribute(this.localKey);\n this.query.where(this.foreignKey, \"=\", localValue);\n }\n\n addEagerConstraints(models: Model[]): void {\n const keys = models\n .map((model) => model.getAttribute(this.localKey))\n .filter((k) => k !== null);\n this.query.whereIn(this.foreignKey, keys);\n }\n\n match(models: Model[], results: R[], relation: string): Model[] {\n const dictionary: Record<string, R[]> = {};\n\n results.forEach((result) => {\n const key = result.getAttribute(this.foreignKey);\n if (!dictionary[key]) {\n dictionary[key] = [];\n }\n dictionary[key].push(result);\n });\n\n models.forEach((model) => {\n const key = model.getAttribute(this.localKey);\n if (dictionary[key]) {\n model.setRelation(relation, dictionary[key]);\n } else {\n model.setRelation(relation, []);\n }\n });\n\n return models;\n }\n}\n","import { Model } from \"../Model\";\nimport { QueryBuilder } from \"../QueryBuilder\";\nimport { Relation } from \"./Relation\";\n\nexport class HasOne<R extends Model = any> extends Relation<R> {\n protected foreignKey: string;\n protected localKey: string;\n\n constructor(\n query: QueryBuilder<R>,\n parent: Model,\n foreignKey: string,\n localKey: string\n ) {\n super(query, parent);\n this.foreignKey = foreignKey;\n this.localKey = localKey;\n }\n\n addConstraints(): void {\n const localValue = this.parent.getAttribute(this.localKey);\n this.query.where(this.foreignKey, \"=\", localValue);\n }\n\n addEagerConstraints(models: Model[]): void {\n const keys = models\n .map((model) => model.getAttribute(this.localKey))\n .filter((k) => k !== null);\n this.query.whereIn(this.foreignKey, keys);\n }\n\n match(models: Model[], results: R[], relation: string): Model[] {\n const dictionary: Record<string, R> = {};\n\n results.forEach((result) => {\n const key = result.getAttribute(this.foreignKey);\n dictionary[key] = result;\n });\n\n models.forEach((model) => {\n const key = model.getAttribute(this.localKey);\n if (dictionary[key]) {\n model.setRelation(relation, dictionary[key]);\n }\n });\n\n return models;\n }\n}\n","import { QueryBuilder } from \"./QueryBuilder\";\nimport { BelongsTo } from \"./relations/BelongsTo\";\nimport { BelongsToMany } from \"./relations/BelongsToMany\";\nimport { HasMany } from \"./relations/HasMany\";\nimport { HasOne } from \"./relations/HasOne\";\nimport type { DatabaseAdapter } from \"./types\";\n\n/**\n * Relation types for arcanox relationships\n */\nexport type RelationType = \"hasOne\" | \"hasMany\" | \"belongsTo\" | \"belongsToMany\";\n\nexport interface RelationConfig {\n type: RelationType;\n related: typeof Model;\n foreignKey?: string;\n localKey?: string;\n pivotTable?: string;\n}\n\nimport { Macroable } from \"./support/Macroable\";\n\n/**\n * Base Model class - Arcanox ORM\n */\nexport class Model<T = any> extends Macroable {\n // Static properties\n protected static adapter: DatabaseAdapter;\n protected static tableName: string;\n protected static primaryKey: string = \"id\";\n protected static connection: string = \"default\";\n\n // Instance properties\n protected attributes: Record<string, any> = {};\n protected original: Record<string, any> = {};\n protected relations: Record<string, any> = {};\n protected exists: boolean = false;\n\n // Configuration\n protected fillable: string[] = [];\n protected guarded: string[] = [\"id\"];\n protected hidden: string[] = [];\n protected visible: string[] = [];\n protected casts: Record<string, string> = {};\n protected dates: string[] = [];\n protected timestamps: boolean = true;\n protected createdAt: string = \"created_at\";\n protected updatedAt: string = \"updated_at\";\n protected softDeletes: boolean = false;\n protected deletedAt: string = \"deleted_at\";\n\n /**\n * Set the database adapter\n */\n static setAdapter(adapter: DatabaseAdapter): void {\n this.adapter = adapter;\n }\n\n /**\n * Get the table name\n */\n static getTable(): string {\n if (this.tableName) {\n return this.tableName;\n }\n // Auto-generate table name from class name (pluralize and snake_case)\n const className = this.name;\n return this.pluralize(this.snakeCase(className));\n }\n\n /**\n * Create a new query builder instance\n */\n static query<T>(): QueryBuilder<T> {\n return new QueryBuilder<T>(this.getTable(), this.adapter);\n }\n\n /**\n * Get all records\n */\n static async all<T>(): Promise<T[]> {\n const results = await this.query<T>().get();\n return results.map((data) => this.hydrate<T>(data));\n }\n\n /**\n * Find a record by ID\n */\n static async find<T>(id: any): Promise<T | null> {\n const data = await this.query<T>().where(this.primaryKey, id).first();\n return data ? this.hydrate<T>(data) : null;\n }\n\n /**\n * Find a record by ID or throw exception\n */\n static async findOrFail<T>(id: any): Promise<T> {\n const model = await this.find<T>(id);\n if (!model) {\n throw new Error(`Model not found with ${this.primaryKey}: ${id}`);\n }\n return model;\n }\n\n /**\n * Create a WHERE query\n */\n static where<T>(column: string, operator: any, value?: any): QueryBuilder<T> {\n return this.query<T>().where(column, operator, value);\n }\n\n /**\n * Create a new record\n */\n static async create<T>(data: Partial<T>): Promise<T> {\n const instance = new this() as any;\n instance.fill(data);\n\n if (instance.timestamps) {\n const now = new Date();\n instance.attributes[instance.createdAt] = now;\n instance.attributes[instance.updatedAt] = now;\n }\n\n const result = await this.adapter.insert(\n this.getTable(),\n instance.attributes\n );\n\n const id = result[this.primaryKey] || result.id || result.insertId;\n instance.attributes[this.primaryKey] = id;\n if (this.primaryKey !== \"id\") {\n instance.attributes.id = id;\n }\n\n instance.exists = true;\n instance.syncOriginal();\n\n return instance as T;\n }\n\n /**\n * Update a record\n */\n static async update<T>(id: any, data: Partial<T>): Promise<T> {\n const instance = await this.findOrFail<T>(id);\n await (instance as any).update(data);\n return instance;\n }\n\n /**\n * Delete a record\n */\n static async destroy(id: any): Promise<boolean> {\n const instance = await this.find(id);\n if (!instance) return false;\n return await (instance as any).delete();\n }\n\n /**\n * First or create\n */\n static async firstOrCreate<T>(\n attributes: Partial<T>,\n values: Partial<T> = {}\n ): Promise<T> {\n const query = this.query<T>();\n\n for (const [key, value] of Object.entries(attributes)) {\n query.where(key, value);\n }\n\n const existing = await query.first();\n if (existing) {\n return this.hydrate<T>(existing);\n }\n\n return await this.create<T>({ ...attributes, ...values });\n }\n\n /**\n * Update or create\n */\n static async updateOrCreate<T>(\n attributes: Partial<T>,\n values: Partial<T> = {}\n ): Promise<T> {\n const query = this.query<T>();\n\n for (const [key, value] of Object.entries(attributes)) {\n query.where(key, value);\n }\n\n const existing = await query.first();\n if (existing) {\n const instance = this.hydrate<T>(existing) as any;\n await instance.update(values);\n return instance;\n }\n\n return await this.create<T>({ ...attributes, ...values });\n }\n\n /**\n * Hydrate a model instance from data\n */\n protected static hydrate<T>(data: any): T {\n const instance = new this() as any;\n instance.attributes = { ...data };\n instance.original = { ...data };\n instance.exists = true;\n return instance as T;\n }\n\n /**\n * Fill model attributes\n */\n fill(attributes: Partial<T>): this {\n for (const [key, value] of Object.entries(attributes)) {\n if (this.isFillable(key)) {\n this.setAttribute(key, value);\n }\n }\n return this;\n }\n\n /**\n * Check if attribute is fillable\n */\n protected isFillable(key: string): boolean {\n if (this.fillable.length > 0) {\n return this.fillable.includes(key);\n }\n return !this.guarded.includes(key);\n }\n\n /**\n * Set an attribute\n */\n setAttribute(key: string, value: any): void {\n // Check for mutator\n const mutator = `set${this.studly(key)}Attribute`;\n if (typeof (this as any)[mutator] === \"function\") {\n value = (this as any)[mutator](value);\n }\n\n this.attributes[key] = this.castAttribute(key, value);\n }\n\n /**\n * Get an attribute\n */\n getAttribute(key: string): any {\n // Check for accessor\n const accessor = `get${this.studly(key)}Attribute`;\n if (typeof (this as any)[accessor] === \"function\") {\n return (this as any)[accessor]();\n }\n\n const value = this.attributes[key];\n return this.castAttribute(key, value, true);\n }\n\n /**\n * Cast attribute to specified type\n */\n protected castAttribute(\n key: string,\n value: any,\n isGetting: boolean = false\n ): any {\n if (value === null || value === undefined) return value;\n\n const cast = this.casts[key];\n if (!cast) return value;\n\n if (isGetting) {\n switch (cast) {\n case \"int\":\n case \"integer\":\n return parseInt(value);\n case \"float\":\n case \"double\":\n return parseFloat(value);\n case \"string\":\n return String(value);\n case \"bool\":\n case \"boolean\":\n return Boolean(value);\n case \"array\":\n case \"json\":\n return typeof value === \"string\" ? JSON.parse(value) : value;\n case \"date\":\n case \"datetime\":\n return value instanceof Date ? value : new Date(value);\n default:\n return value;\n }\n } else {\n switch (cast) {\n case \"array\":\n case \"json\":\n return typeof value === \"object\" ? JSON.stringify(value) : value;\n case \"date\":\n case \"datetime\":\n return value instanceof Date ? value : new Date(value);\n default:\n return value;\n }\n }\n }\n\n /**\n * Save the model\n */\n async save(): Promise<this> {\n const constructor = this.constructor as typeof Model;\n\n if (this.timestamps) {\n const now = new Date();\n if (!this.exists) {\n this.attributes[this.createdAt] = now;\n }\n this.attributes[this.updatedAt] = now;\n }\n\n if (this.exists) {\n // Update existing record\n const id = this.attributes[constructor.primaryKey];\n await constructor.adapter.update(\n constructor.getTable(),\n id,\n this.attributes\n );\n } else {\n // Insert new record\n const result = await constructor.adapter.insert(\n constructor.getTable(),\n this.attributes\n );\n\n const id = result[constructor.primaryKey] || result.id || result.insertId;\n this.attributes[constructor.primaryKey] = id;\n if (constructor.primaryKey !== \"id\") {\n this.attributes.id = id;\n }\n\n this.exists = true;\n }\n\n this.syncOriginal();\n return this;\n }\n\n /**\n * Update the model\n */\n async update(attributes: Partial<T>): Promise<this> {\n this.fill(attributes);\n return await this.save();\n }\n\n /**\n * Delete the model\n */\n async delete(): Promise<boolean> {\n const constructor = this.constructor as typeof Model;\n\n if (this.softDeletes) {\n this.attributes[this.deletedAt] = new Date();\n await this.save();\n return true;\n }\n\n const id = this.attributes[constructor.primaryKey];\n return await constructor.adapter.delete(constructor.getTable(), id);\n }\n\n /**\n * Force delete (ignore soft deletes)\n */\n async forceDelete(): Promise<boolean> {\n const constructor = this.constructor as typeof Model;\n const id = this.attributes[constructor.primaryKey];\n return await constructor.adapter.delete(constructor.getTable(), id);\n }\n\n /**\n * Restore soft deleted model\n */\n async restore(): Promise<this> {\n if (this.softDeletes) {\n this.attributes[this.deletedAt] = null;\n await this.save();\n }\n return this;\n }\n\n /**\n * Sync original attributes\n */\n protected syncOriginal(): void {\n this.original = { ...this.attributes };\n }\n\n /**\n * Get dirty attributes (changed since last sync)\n */\n getDirty(): Record<string, any> {\n const dirty: Record<string, any> = {};\n for (const [key, value] of Object.entries(this.attributes)) {\n if (this.original[key] !== value) {\n dirty[key] = value;\n }\n }\n return dirty;\n }\n\n /**\n * Check if model is dirty\n */\n isDirty(): boolean {\n return Object.keys(this.getDirty()).length > 0;\n }\n\n constructor(attributes: Partial<T> = {}) {\n super();\n this.fill(attributes);\n }\n\n /**\n * Convert model to JSON\n */\n toJSON(): Record<string, any> {\n const json: Record<string, any> = {};\n\n // Add attributes\n for (const [key, value] of Object.entries(this.attributes)) {\n if (this.hidden.includes(key)) continue;\n if (this.visible.length > 0 && !this.visible.includes(key)) continue;\n json[key] = this.getAttribute(key);\n }\n\n // Add relations\n for (const [key, value] of Object.entries(this.relations)) {\n json[key] = value;\n }\n\n return json;\n }\n\n /**\n * Define a one-to-one relationship\n */\n hasOne<R extends Model>(\n related: new () => R,\n foreignKey?: string,\n localKey?: string\n ): HasOne<R> {\n const instance = new related();\n const foreign = foreignKey || `${this.constructor.name.toLowerCase()}_id`;\n const local = localKey || \"id\";\n\n return new HasOne<R>(instance.newQuery(), this, foreign, local);\n }\n\n /**\n * Define a one-to-many relationship\n */\n hasMany<R extends Model>(\n related: new () => R,\n foreignKey?: string,\n localKey?: string\n ): HasMany<R> {\n const instance = new related();\n const foreign = foreignKey || `${this.constructor.name.toLowerCase()}_id`;\n const local = localKey || \"id\";\n\n return new HasMany<R>(instance.newQuery(), this, foreign, local);\n }\n\n /**\n * Define an inverse one-to-one or many relationship\n */\n belongsTo<R extends Model>(\n related: new () => R,\n foreignKey?: string,\n ownerKey?: string\n ): BelongsTo<R> {\n const instance = new related();\n const foreign =\n foreignKey || `${instance.constructor.name.toLowerCase()}_id`;\n const owner = ownerKey || \"id\";\n\n return new BelongsTo<R>(instance.newQuery(), this, foreign, owner);\n }\n\n /**\n * Define a many-to-many relationship\n */\n belongsToMany<R extends Model>(\n related: new () => R,\n table?: string,\n foreignPivotKey?: string,\n relatedPivotKey?: string,\n parentKey?: string,\n relatedKey?: string\n ): BelongsToMany<R> {\n const instance = new related();\n const pivotTable = table || this.guessPivotTable(instance);\n const foreignPivot =\n foreignPivotKey || `${this.constructor.name.toLowerCase()}_id`;\n const relatedPivot =\n relatedPivotKey || `${instance.constructor.name.toLowerCase()}_id`;\n const parent = parentKey || \"id\";\n const relatedK = relatedKey || \"id\";\n\n return new BelongsToMany<R>(\n instance.newQuery(),\n this,\n pivotTable,\n foreignPivot,\n relatedPivot,\n parent,\n relatedK\n );\n }\n\n /**\n * Guess the pivot table name (alphabetical order of model names)\n */\n protected guessPivotTable(related: Model): string {\n const segments = [\n this.constructor.name.toLowerCase(),\n related.constructor.name.toLowerCase(),\n ];\n segments.sort();\n return segments.join(\"_\");\n }\n\n /**\n * Eager load relationships\n */\n static with<T>(relations: string | string[]): QueryBuilder<T> {\n return this.query<T>().with(relations);\n }\n\n /**\n * Set a loaded relationship\n */\n setRelation(relation: string, value: any): this {\n this.relations[relation] = value;\n return this;\n }\n\n /**\n * Get a loaded relationship\n */\n getRelation(relation: string): any {\n return this.relations[relation];\n }\n\n /**\n * Check if a relationship is loaded\n */\n relationLoaded(relation: string): boolean {\n return this.relations[relation] !== undefined;\n }\n\n /**\n * Create a new query builder for the model\n */\n newQuery(): QueryBuilder<T> {\n return (this.constructor as typeof Model).query<T>();\n }\n\n /**\n * Helper: Convert string to snake_case\n */\n protected static snakeCase(str: string): string {\n return str\n .replace(/([A-Z])/g, \"_$1\")\n .toLowerCase()\n .replace(/^_/, \"\");\n }\n\n /**\n * Helper: Pluralize string (simple implementation)\n */\n protected static pluralize(str: string): string {\n if (str.endsWith(\"y\")) {\n return str.slice(0, -1) + \"ies\";\n }\n if (str.endsWith(\"s\")) {\n return str + \"es\";\n }\n return str + \"s\";\n }\n\n /**\n * Helper: Convert to StudlyCase\n */\n protected studly(str: string): string {\n return str.replace(/(^|_)(\\w)/g, (_, __, c) => c.toUpperCase());\n }\n}\n","import { QueryBuilder } from \"../QueryBuilder\";\n\n/**\n * MongoDB-specific extensions for QueryBuilder\n * These extensions provide Mongoose-style functionality for MongoDB\n */\n\nexport interface PopulateOptions {\n from?: string;\n localField?: string;\n foreignField?: string;\n as?: string;\n select?: string[];\n}\n\n/**\n * Populate (Mongoose-style relationships)\n * Uses MongoDB's $lookup aggregation to join collections\n */\nQueryBuilder.macro(\n \"populate\",\n async function (\n this: QueryBuilder<any>,\n field: string,\n options?: PopulateOptions\n ) {\n // Get the native DB instance\n const db = await this.adapter.raw(\"db\");\n const collection = db.collection(this.tableName);\n\n // Determine the related collection name\n // By convention: 'author' field -> 'authors' collection\n const relatedCollection = options?.from || `${field}s`;\n const localField = options?.localField || `${field}_id`;\n const foreignField = options?.foreignField || \"_id\";\n const as = options?.as || field;\n\n // Build the aggregation pipeline\n const pipeline: any[] = [];\n\n // Add existing where clauses as $match\n if ((this as any).whereClauses && (this as any).whereClauses.length > 0) {\n const filter =\n this.adapter.buildFilter?.((this as any).whereClauses) || {};\n if (Object.keys(filter).length > 0) {\n pipeline.push({ $match: filter });\n }\n }\n\n // Build $lookup with optional projection\n if (options?.select && options.select.length > 0) {\n // Use pipeline-based $lookup for field selection\n const projection: any = {};\n options.select.forEach((field) => {\n projection[field] = 1;\n });\n\n pipeline.push({\n $lookup: {\n from: relatedCollection,\n let: { localId: `$${localField}` },\n pipeline: [\n { $match: { $expr: { $eq: [`$${foreignField}`, \"$$localId\"] } } },\n { $project: projection },\n ],\n as: as,\n },\n });\n } else {\n // Standard $lookup\n pipeline.push({\n $lookup: {\n from: relatedCollection,\n localField: localField,\n foreignField: foreignField,\n as: as,\n },\n });\n }\n\n // Unwind to convert array to object (if you want single object instead of array)\n pipeline.push({\n $unwind: {\n path: `$${as}`,\n preserveNullAndEmptyArrays: true, // Keep documents even if no match\n },\n });\n\n // Add limit if specified\n if ((this as any).limitValue) {\n pipeline.push({ $limit: (this as any).limitValue });\n }\n\n // Execute aggregation\n const results = await collection.aggregate(pipeline).toArray();\n\n // Map _id to id\n return results.map((doc: any) => {\n const { _id, ...rest } = doc;\n return { id: _id, _id, ...rest };\n });\n }\n);\n\n/**\n * Execute query (alias for get())\n * Provides Mongoose-style exec() method\n */\nQueryBuilder.macro(\"exec\", async function (this: QueryBuilder<any>) {\n return await this.get();\n});\n\n/**\n * Direct aggregation pipeline access\n * Allows running custom MongoDB aggregation pipelines\n */\nQueryBuilder.macro(\n \"aggregate\",\n async function (this: QueryBuilder<any>, pipeline: any[]) {\n // Get the native DB instance\n const db = await this.adapter.raw(\"db\");\n const collection = db.collection(this.tableName);\n\n // Execute aggregation\n const results = await collection.aggregate(pipeline).toArray();\n\n // Map _id to id for consistency\n return results.map((doc: any) => {\n if (doc._id) {\n const { _id, ...rest } = doc;\n return { id: _id, _id, ...rest };\n }\n return doc;\n });\n }\n);\n\n/**\n * TypeScript type augmentation for better IDE support\n */\ndeclare module \"../QueryBuilder\" {\n interface QueryBuilder<T> {\n /**\n * Populate a relationship using MongoDB's $lookup\n * @param field - The field name to populate\n * @param options - Population options\n */\n populate(field: string, options?: PopulateOptions): Promise<T[]>;\n\n /**\n * Execute the query (alias for get())\n */\n exec(): Promise<T[]>;\n\n /**\n * Execute a MongoDB aggregation pipeline\n * @param pipeline - MongoDB aggregation pipeline stages\n */\n aggregate(pipeline: any[]): Promise<any[]>;\n }\n}\n","import type { ColumnDefinition } from \"../types\";\n\n/**\n * Column definition builder - fluent interface for defining columns\n */\nexport class ColumnBuilder {\n private definition: ColumnDefinition;\n\n constructor(name: string, type: string, length?: number) {\n this.definition = {\n name,\n type,\n length,\n nullable: false,\n };\n }\n\n /**\n * Make column nullable\n */\n nullable(): this {\n this.definition.nullable = true;\n return this;\n }\n\n /**\n * Set default value\n */\n default(value: any): this {\n this.definition.default = value;\n return this;\n }\n\n /**\n * Make column unique\n */\n unique(): this {\n this.definition.unique = true;\n return this;\n }\n\n /**\n * Make column primary key\n */\n primary(): this {\n this.definition.primary = true;\n return this;\n }\n\n /**\n * Make column auto-increment\n */\n autoIncrement(): this {\n this.definition.autoIncrement = true;\n return this;\n }\n\n /**\n * Make column unsigned (for numbers)\n */\n unsigned(): this {\n this.definition.unsigned = true;\n return this;\n }\n\n /**\n * Get the column definition\n */\n getDefinition(): ColumnDefinition {\n return this.definition;\n }\n}\n\n/**\n * Foreign key definition builder\n */\nexport class ForeignKeyBuilder {\n private column: string;\n private referencedTable?: string;\n private referencedColumn?: string;\n private onDeleteAction?: string;\n private onUpdateAction?: string;\n\n constructor(column: string) {\n this.column = column;\n }\n\n /**\n * Set referenced table and column\n */\n references(column: string): this {\n this.referencedColumn = column;\n return this;\n }\n\n /**\n * Set referenced table\n */\n on(table: string): this {\n this.referencedTable = table;\n return this;\n }\n\n /**\n * Set ON DELETE action\n */\n onDelete(action: \"CASCADE\" | \"SET NULL\" | \"RESTRICT\" | \"NO ACTION\"): this {\n this.onDeleteAction = action;\n return this;\n }\n\n /**\n * Set ON UPDATE action\n */\n onUpdate(action: \"CASCADE\" | \"SET NULL\" | \"RESTRICT\" | \"NO ACTION\"): this {\n this.onUpdateAction = action;\n return this;\n }\n\n /**\n * Get foreign key SQL\n */\n toSQL(): string {\n if (!this.referencedTable || !this.referencedColumn) {\n throw new Error(\"Foreign key must reference a table and column\");\n }\n\n let sql = `FOREIGN KEY (${this.column}) REFERENCES ${this.referencedTable}(${this.referencedColumn})`;\n\n if (this.onDeleteAction) {\n sql += ` ON DELETE ${this.onDeleteAction}`;\n }\n if (this.onUpdateAction) {\n sql += ` ON UPDATE ${this.onUpdateAction}`;\n }\n\n return sql;\n }\n}\n\n/**\n * Blueprint - defines table structure\n * Arcanox's Schema Blueprint\n */\nexport class Blueprint {\n private tableName: string;\n private columns: ColumnDefinition[] = [];\n private indexes: Array<{\n columns: string[];\n unique: boolean;\n name?: string;\n }> = [];\n private foreignKeys: ForeignKeyBuilder[] = [];\n private primaryKeys: string[] = [];\n\n constructor(tableName: string) {\n this.tableName = tableName;\n }\n\n /**\n * Add auto-incrementing ID column\n */\n id(name: string = \"id\"): ColumnBuilder {\n const col = new ColumnBuilder(name, \"bigInteger\");\n col.primary().autoIncrement().unsigned();\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add UUID column\n */\n uuid(name: string = \"id\"): ColumnBuilder {\n const col = new ColumnBuilder(name, \"uuid\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add string column\n */\n string(name: string, length: number = 255): ColumnBuilder {\n const col = new ColumnBuilder(name, \"string\", length);\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add text column\n */\n text(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"text\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add integer column\n */\n integer(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"integer\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add big integer column\n */\n bigInteger(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"bigInteger\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add decimal column\n */\n decimal(\n name: string,\n precision: number = 10,\n scale: number = 2\n ): ColumnBuilder {\n const col = new ColumnBuilder(name, \"decimal\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add float column\n */\n float(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"float\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add double column\n */\n double(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"double\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add boolean column\n */\n boolean(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"boolean\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add date column\n */\n date(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"date\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add datetime column\n */\n datetime(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"datetime\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add timestamp column\n */\n timestamp(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"timestamp\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add created_at and updated_at timestamps\n */\n timestamps(): void {\n this.timestamp(\"created_at\").nullable();\n this.timestamp(\"updated_at\").nullable();\n }\n\n /**\n * Add deleted_at timestamp for soft deletes\n */\n softDeletes(name: string = \"deleted_at\"): ColumnBuilder {\n return this.timestamp(name).nullable();\n }\n\n /**\n * Add JSON column\n */\n json(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"json\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add enum column\n */\n enum(name: string, values: string[]): ColumnBuilder {\n const col = new ColumnBuilder(name, \"enum\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add foreign key constraint\n */\n foreign(column: string): ForeignKeyBuilder {\n const fk = new ForeignKeyBuilder(column);\n this.foreignKeys.push(fk);\n return fk;\n }\n\n /**\n * Add index\n */\n index(columns: string | string[], name?: string): void {\n const cols = Array.isArray(columns) ? columns : [columns];\n this.indexes.push({ columns: cols, unique: false, name });\n }\n\n /**\n * Add unique index\n */\n unique(columns: string | string[], name?: string): void {\n const cols = Array.isArray(columns) ? columns : [columns];\n this.indexes.push({ columns: cols, unique: true, name });\n }\n\n /**\n * Set primary key\n */\n primary(columns: string | string[]): void {\n this.primaryKeys = Array.isArray(columns) ? columns : [columns];\n }\n\n /**\n * Get all columns\n */\n getColumns(): ColumnDefinition[] {\n return this.columns;\n }\n\n /**\n * Get table name\n */\n getTableName(): string {\n return this.tableName;\n }\n\n /**\n * Get indexes\n */\n getIndexes() {\n return this.indexes;\n }\n\n /**\n * Get foreign keys\n */\n getForeignKeys() {\n return this.foreignKeys;\n }\n}\n","import type { DatabaseAdapter } from \"../types\";\nimport { Blueprint } from \"./Blueprint\";\n\n/**\n * Schema - ArcnanJS schema builder\n * Provides fluent interface for creating and modifying database tables\n */\nexport class Schema {\n private static adapter: DatabaseAdapter;\n\n /**\n * Set the database adapter\n */\n static setAdapter(adapter: DatabaseAdapter): void {\n this.adapter = adapter;\n }\n\n /**\n * Create a new table\n */\n static async create(\n tableName: string,\n callback: (table: Blueprint) => void\n ): Promise<void> {\n const blueprint = new Blueprint(tableName);\n callback(blueprint);\n\n await this.adapter.createTable(tableName, blueprint.getColumns());\n }\n\n /**\n * Modify an existing table\n */\n static async table(\n tableName: string,\n callback: (table: Blueprint) => void\n ): Promise<void> {\n const blueprint = new Blueprint(tableName);\n callback(blueprint);\n\n // For now, this is a simplified implementation\n // In a full implementation, this would generate ALTER TABLE statements\n console.warn(\n \"Schema.table() is not fully implemented yet. Use migrations for complex alterations.\"\n );\n }\n\n /**\n * Drop a table\n */\n static async drop(tableName: string): Promise<void> {\n await this.adapter.dropTable(tableName);\n }\n\n /**\n * Drop a table if it exists\n */\n static async dropIfExists(tableName: string): Promise<void> {\n const exists = await this.hasTable(tableName);\n if (exists) {\n await this.drop(tableName);\n }\n }\n\n /**\n * Rename a table\n */\n static async rename(from: string, to: string): Promise<void> {\n // This would need to be implemented in the adapter\n throw new Error(\"Schema.rename() not yet implemented\");\n }\n\n /**\n * Check if a table exists\n */\n static async hasTable(tableName: string): Promise<boolean> {\n return await this.adapter.hasTable(tableName);\n }\n\n /**\n * Check if a column exists in a table\n */\n static async hasColumn(\n tableName: string,\n columnName: string\n ): Promise<boolean> {\n return await this.adapter.hasColumn(tableName, columnName);\n }\n\n /**\n * Get all tables\n */\n static async getTables(): Promise<string[]> {\n // This would need to be implemented in the adapter\n throw new Error(\"Schema.getTables() not yet implemented\");\n }\n\n /**\n * Get all columns for a table\n */\n static async getColumns(tableName: string): Promise<string[]> {\n // This would need to be implemented in the adapter\n throw new Error(\"Schema.getColumns() not yet implemented\");\n }\n}\n","import { dynamicRequire } from \"../../server/utils/dynamicRequire\";\nimport { Schema } from \"./Schema\";\n\n/**\n * Base Migration class\n * All migrations should extend this class and implement up() and down() methods\n */\nexport abstract class Migration {\n /**\n * Run the migration\n */\n abstract up(): Promise<void>;\n\n /**\n * Reverse the migration\n */\n abstract down(): Promise<void>;\n}\n\n/**\n * Migration status\n */\nexport interface MigrationStatus {\n name: string;\n batch: number;\n ranAt: Date;\n}\n\n/**\n * Migration record in database\n */\nexport interface MigrationRecord {\n id?: number;\n migration: string;\n batch: number;\n created_at?: Date;\n}\n\n/**\n * Migration Runner - executes migrations\n */\nexport class MigrationRunner {\n private adapter: any;\n private migrationsTable: string = \"migrations\";\n private migrationsPath: string;\n\n constructor(adapter: any, migrationsPath: string) {\n this.adapter = adapter;\n this.migrationsPath = migrationsPath;\n }\n\n /**\n * Ensure migrations table exists\n */\n private async ensureMigrationsTable(): Promise<void> {\n const exists = await Schema.hasTable(this.migrationsTable);\n if (!exists) {\n await Schema.create(this.migrationsTable, (table) => {\n table.id();\n table.string(\"migration\");\n table.integer(\"batch\");\n table.timestamp(\"created_at\").nullable();\n });\n }\n }\n\n /**\n * Get all ran migrations\n */\n private async getRanMigrations(): Promise<MigrationRecord[]> {\n await this.ensureMigrationsTable();\n return await this.adapter.select(this.migrationsTable, {\n orderBy: [{ column: \"batch\", direction: \"ASC\" }],\n });\n }\n\n /**\n * Get pending migrations\n */\n private async getPendingMigrations(): Promise<string[]> {\n const fs = await import(\"fs\");\n const path = await import(\"path\");\n\n const ranMigrations = await this.getRanMigrations();\n const ranNames = ranMigrations.map((m) => m.migration);\n\n const files = fs.readdirSync(this.migrationsPath);\n const migrationFiles = files\n .filter((f) => f.endsWith(\".ts\") || f.endsWith(\".js\"))\n .filter((f) => !ranNames.includes(f.replace(/\\.(ts|js)$/, \"\")))\n .sort();\n\n return migrationFiles;\n }\n\n /**\n * Run pending migrations\n */\n async run(): Promise<void> {\n const path = await import(\"path\");\n const pendingMigrations = await this.getPendingMigrations();\n\n if (pendingMigrations.length === 0) {\n console.log(\"No pending migrations\");\n return;\n }\n\n const ranMigrations = await this.getRanMigrations();\n const nextBatch =\n ranMigrations.length > 0\n ? Math.max(...ranMigrations.map((m) => m.batch)) + 1\n : 1;\n\n console.log(`Running ${pendingMigrations.length} migration(s)...`);\n\n for (const file of pendingMigrations) {\n const migrationPath = path.resolve(this.migrationsPath, file);\n const migrationName = file.replace(/\\.(ts|js)$/, \"\");\n\n try {\n // Dynamic import of migration\n const MigrationClass = await this.loadMigration(migrationPath);\n const migration = new MigrationClass();\n\n console.log(`Migrating: ${migrationName}`);\n await migration.up();\n\n // Record migration\n await this.adapter.insert(this.migrationsTable, {\n migration: migrationName,\n batch: nextBatch,\n created_at: new Date(),\n });\n\n console.log(`Migrated: ${migrationName}`);\n } catch (error) {\n console.error(`Failed to migrate ${migrationName}:`, error);\n throw error;\n }\n }\n\n console.log(\"Migrations completed successfully\");\n }\n\n /**\n * Rollback last batch of migrations\n */\n async rollback(steps: number = 1): Promise<void> {\n const ranMigrations = await this.getRanMigrations();\n\n if (ranMigrations.length === 0) {\n console.log(\"No migrations to rollback\");\n return;\n }\n\n const maxBatch = Math.max(...ranMigrations.map((m) => m.batch));\n const minBatch = maxBatch - steps + 1;\n\n const migrationsToRollback = ranMigrations\n .filter((m) => m.batch >= minBatch && m.batch <= maxBatch)\n .reverse();\n\n console.log(`Rolling back ${migrationsToRollback.length} migration(s)...`);\n\n const path = await import(\"path\");\n\n for (const record of migrationsToRollback) {\n const migrationPath = path.resolve(\n this.migrationsPath,\n `${record.migration}.ts`\n );\n\n try {\n const MigrationClass = await this.loadMigration(migrationPath);\n const migration = new MigrationClass();\n\n console.log(`Rolling back: ${record.migration}`);\n await migration.down();\n\n // Remove migration record\n await this.adapter.delete(this.migrationsTable, record.id);\n\n console.log(`Rolled back: ${record.migration}`);\n } catch (error) {\n console.error(`Failed to rollback ${record.migration}:`, error);\n throw error;\n }\n }\n\n console.log(\"Rollback completed successfully\");\n }\n\n /**\n * Reset all migrations\n */\n async reset(): Promise<void> {\n const ranMigrations = await this.getRanMigrations();\n const batches = Math.max(...ranMigrations.map((m) => m.batch));\n await this.rollback(batches);\n }\n\n /**\n * Reset and re-run all migrations\n */\n async fresh(): Promise<void> {\n await this.reset();\n await this.run();\n }\n\n /**\n * Get migration status\n */\n async status(): Promise<MigrationStatus[]> {\n const ranMigrations = await this.getRanMigrations();\n return ranMigrations.map((m) => ({\n name: m.migration,\n batch: m.batch,\n ranAt: m.created_at || new Date(),\n }));\n }\n\n /**\n * Load migration class from file\n */\n private async loadMigration(filePath: string): Promise<any> {\n // Use dynamic require to avoid webpack bundling\n const migrationModule = dynamicRequire(filePath);\n const MigrationClass = migrationModule.default || migrationModule;\n\n if (!MigrationClass || typeof MigrationClass !== \"function\") {\n throw new Error(\n `Migration file ${filePath} does not export a valid migration class`\n );\n }\n\n // Validate that it's a concrete class extending Migration\n // Check if the class has the required methods\n const instance = new MigrationClass();\n if (\n typeof instance.up !== \"function\" ||\n typeof instance.down !== \"function\"\n ) {\n throw new Error(\n `Migration class in ${filePath} must implement up() and down() methods`\n );\n }\n\n return MigrationClass;\n }\n}\n","import type { Faker } from \"@faker-js/faker\";\nimport { Model } from \"../Model\";\n\n/**\n * Base Factory class\n */\nexport abstract class Factory<T extends Model> {\n protected abstract model: new () => T;\n protected faker: Faker;\n\n constructor() {\n // We'll load faker dynamically to avoid bundling it if not used\n // But for type safety we declare it here\n this.faker = require(\"@faker-js/faker\").faker;\n }\n\n /**\n * Define the model's default state.\n */\n abstract definition(): Record<string, any>;\n\n /**\n * Create a new model instance with attributes.\n */\n make(attributes: Partial<T> = {}): T {\n const instance = new this.model();\n const defaults = this.definition();\n\n // Merge defaults with overrides\n const data = { ...defaults, ...attributes };\n\n // Fill model\n instance.fill(data);\n\n return instance;\n }\n\n /**\n * Create and save a new model instance.\n */\n async create(attributes: Partial<T> = {}): Promise<T> {\n const instance = this.make(attributes);\n await instance.save();\n return instance;\n }\n\n /**\n * Create multiple instances\n */\n async createMany(count: number, attributes: Partial<T> = {}): Promise<T[]> {\n const instances: T[] = [];\n for (let i = 0; i < count; i++) {\n instances.push(await this.create(attributes));\n }\n return instances;\n }\n}\n","/**\n * Base Seeder class\n */\nexport abstract class Seeder {\n /**\n * Run the database seeds.\n */\n abstract run(): Promise<void>;\n\n /**\n * Call another seeder\n */\n async call(SeederClass: new () => Seeder): Promise<void> {\n const seeder = new SeederClass();\n await seeder.run();\n }\n}\n"],"names":["dynamicRequire","id","__non_webpack_require__","eval","module","exports","require","__webpack_module_cache__","leafPrototypes","getProto","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","Object","getPrototypeOf","obj","t","value","mode","this","__esModule","then","ns","create","r","def","current","indexOf","getOwnPropertyNames","forEach","key","d","definition","o","defineProperty","enumerable","get","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","MongoAdapter","client","db","connect","config","MongoClient","url","host","port","auth","username","password","database","query","async","sql","params","Error","execute","close","disconnect","createTable","tableName","columns","createCollection","dropTable","collection","drop","hasTable","listCollections","name","toArray","length","hasColumn","columnName","select","table","options","filter","buildFilter","where","projection","buildProjection","cursor","find","project","orderBy","sort","order","column","direction","offset","skip","limit","map","doc","_id","rest","insert","data","result","insertOne","insertedId","update","normalizeId","$set","updateOne","updated","findOne","delete","deleteOne","deletedCount","beginTransaction","raw","command","JSON","parse","commit","rollback","clause","operator","$ne","$gt","$lt","$gte","$lte","$in","Array","isArray","$nin","$regex","RegExp","replace","includes","col","ObjectId","isValid","MySQLAdapter","pool","connection","_config$pool","mysql","createPool","user","waitForConnections","connectionLimit","max","queueLimit","bind","end","rows","mapType","type","unsigned","autoIncrement","nullable","default","formatValue","primary","unique","join","_result$","count","_result$2","_options$columns","joins","first","second","index","boolean","buildWhereCondition","push","keys","values","placeholders","k","insertId","affectedRows","getConnection","release","inPlaceholders","notInPlaceholders","string","text","integer","bigInteger","float","double","decimal","date","datetime","timestamp","json","uuid","toUpperCase","Date","toISOString","slice","String","PostgresAdapter","_config$pool2","Pool","ssl","min","exists","paramIndex","condition","_","i","rowCount","startIndex","Macroable","macro","macros","mixin","hasMacro","QueryBuilder","selectColumns","whereClauses","orderByClauses","joinClauses","constructor","adapter","super","orWhere","whereIn","whereNotIn","whereBetween","range","whereNull","whereNotNull","limitValue","offsetValue","leftJoin","rightJoin","eagerLoads","setModel","model","with","relations","results","eagerLoadRelations","models","hydrate","relationName","instance","relation","addEagerConstraints","relatedResults","match","pluck","row","sum","avg","paginate","page","perPage","total","currentPage","lastPage","Math","ceil","clone","cloned","Relation","parent","related","addConstraints","getQuery","BelongsTo","foreignKey","ownerKey","foreignValue","getAttribute","dictionary","setRelation","BelongsToMany","foreignPivotKey","relatedPivotKey","parentKey","relatedKey","performJoin","q","relatedTable","getTable","HasMany","localKey","localValue","HasOne","Model","attributes","original","fillable","guarded","hidden","visible","casts","dates","timestamps","createdAt","updatedAt","softDeletes","deletedAt","setAdapter","className","pluralize","snakeCase","all","primaryKey","findOrFail","fill","now","syncOriginal","destroy","firstOrCreate","entries","existing","updateOrCreate","isFillable","setAttribute","mutator","studly","castAttribute","accessor","isGetting","cast","parseInt","parseFloat","Boolean","stringify","save","forceDelete","restore","getDirty","dirty","isDirty","toJSON","hasOne","foreign","toLowerCase","local","newQuery","hasMany","belongsTo","owner","belongsToMany","pivotTable","guessPivotTable","foreignPivot","relatedPivot","relatedK","segments","getRelation","relationLoaded","str","endsWith","__","c","field","relatedCollection","from","localField","foreignField","as","pipeline","_this$adapter$buildFi","_this$adapter","$match","$lookup","let","localId","$expr","$eq","$project","$unwind","path","preserveNullAndEmptyArrays","$limit","aggregate","ColumnBuilder","getDefinition","ForeignKeyBuilder","references","referencedColumn","on","referencedTable","onDelete","action","onDeleteAction","onUpdate","onUpdateAction","toSQL","Blueprint","indexes","foreignKeys","primaryKeys","precision","scale","enum","fk","cols","getColumns","getTableName","getIndexes","getForeignKeys","Schema","callback","blueprint","console","warn","dropIfExists","rename","to","getTables","Migration","MigrationRunner","migrationsTable","migrationsPath","ensureMigrationsTable","getRanMigrations","getPendingMigrations","fs","ranNames","m","migration","readdirSync","f","run","pendingMigrations","log","ranMigrations","nextBatch","batch","file","migrationPath","resolve","migrationName","loadMigration","up","created_at","error","steps","maxBatch","minBatch","migrationsToRollback","reverse","record","down","reset","batches","fresh","status","ranAt","filePath","migrationModule","MigrationClass","Factory","faker","make","createMany","instances","Seeder","SeederClass","seeder"],"ignoreList":[],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"arcanox.js","mappings":"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","sources":["webpack://arcanajs/./src/lib/server/utils/dynamicRequire.ts","webpack://arcanajs/./src/lib/arcanox/adapters/PostgresAdapter.ts","webpack://arcanajs/./src/lib/arcanox/adapters/MongoAdapter.ts","webpack://arcanajs/./src/lib/arcanox/adapters/MySQLAdapter.ts","webpack://arcanajs/external node-commonjs \"fs\"","webpack://arcanajs/external node-commonjs \"path\"","webpack://arcanajs/external commonjs \"@faker-js/faker\"","webpack://arcanajs/webpack/bootstrap","webpack://arcanajs/webpack/runtime/create fake namespace object","webpack://arcanajs/webpack/runtime/define property getters","webpack://arcanajs/webpack/runtime/hasOwnProperty shorthand","webpack://arcanajs/webpack/runtime/make namespace object","webpack://arcanajs/./src/lib/arcanox/support/Macroable.ts","webpack://arcanajs/./src/lib/arcanox/QueryBuilder.ts","webpack://arcanajs/./src/lib/arcanox/relations/Relation.ts","webpack://arcanajs/./src/lib/arcanox/relations/BelongsTo.ts","webpack://arcanajs/./src/lib/arcanox/relations/BelongsToMany.ts","webpack://arcanajs/./src/lib/arcanox/relations/HasMany.ts","webpack://arcanajs/./src/lib/arcanox/relations/HasOne.ts","webpack://arcanajs/./src/lib/arcanox/Model.ts","webpack://arcanajs/./src/lib/arcanox/schema/Blueprint.ts","webpack://arcanajs/./src/lib/arcanox/schema/Schema.ts","webpack://arcanajs/./src/lib/arcanox/schema/Migration.ts","webpack://arcanajs/./src/lib/arcanox/factory/Factory.ts","webpack://arcanajs/./src/lib/arcanox/seeder/Seeder.ts","webpack://arcanajs/./src/lib/arcanox/extensions/MongoExtensions.ts","webpack://arcanajs/./src/lib/server/support/ServiceProvider.ts","webpack://arcanajs/./src/lib/arcanox/providers/DatabaseProvider.ts"],"sourcesContent":["declare const __non_webpack_require__: NodeJS.Require;\n\n/**\n * Helper to dynamically require modules at runtime, bypassing Webpack bundling.\n * This is necessary for loading user configuration files, migrations, and views\n * that are not part of the framework bundle but exist in the user's project.\n */\nexport const dynamicRequire = (id: string) => {\n // Use a string lookup to access the native require function via process.mainModule\n // This prevents Webpack from seeing \"require\" and warning about critical dependencies.\n // It also ensures we get the native Node require, not Webpack's internal require.\n try {\n const _global = global as any;\n const nativeRequire = _global[\"process\"]?.[\"mainModule\"]?.[\"require\"];\n if (nativeRequire) {\n return nativeRequire(id);\n }\n } catch (e) {\n // Ignore errors during lookup\n }\n\n // Fallback to eval(\"require\") if mainModule lookup fails.\n // This might return Webpack's require in some contexts, but it's a last resort.\n return eval(\"require\")(id);\n};\n","import type { Pool, PoolClient, QueryResult } from \"pg\";\nimport { dynamicRequire } from \"../../server/utils/dynamicRequire\";\nimport type {\n ColumnDefinition,\n Connection,\n DatabaseAdapter,\n DatabaseConfig,\n SelectOptions,\n WhereClause,\n} from \"../types\";\n\n/**\n * PostgreSQL Database Adapter\n */\nexport class PostgresAdapter implements DatabaseAdapter {\n private pool: Pool | null = null;\n private client: PoolClient | null = null;\n\n async connect(config: DatabaseConfig): Promise<Connection> {\n const { Pool } = dynamicRequire(\"pg\");\n\n this.pool = new Pool({\n host: config.host,\n port: config.port,\n database: config.database,\n user: config.username,\n password: config.password,\n ssl: config.ssl,\n min: config.pool?.min || 2,\n max: config.pool?.max || 10,\n });\n\n return {\n query: this.query.bind(this),\n execute: this.execute.bind(this),\n close: this.disconnect.bind(this),\n };\n }\n\n async disconnect(): Promise<void> {\n if (this.pool) {\n await this.pool.end();\n this.pool = null;\n }\n }\n\n async query(sql: string, params?: any[]): Promise<any> {\n if (!this.pool) throw new Error(\"Database not connected\");\n const result: QueryResult = await this.pool.query(sql, params);\n return result.rows;\n }\n\n async execute(sql: string, params?: any[]): Promise<any> {\n if (!this.pool) throw new Error(\"Database not connected\");\n const result: QueryResult = await this.pool.query(sql, params);\n return result;\n }\n\n async createTable(\n tableName: string,\n columns: ColumnDefinition[]\n ): Promise<void> {\n const columnDefs = columns\n .map((col) => {\n let def = `\"${col.name}\" ${this.mapType(col.type, col.length)}`;\n\n if (col.primary) def += \" PRIMARY KEY\";\n if (col.autoIncrement) def += \" GENERATED ALWAYS AS IDENTITY\";\n if (!col.nullable) def += \" NOT NULL\";\n if (col.unique) def += \" UNIQUE\";\n if (col.default !== undefined) {\n def += ` DEFAULT ${this.formatValue(col.default)}`;\n }\n\n return def;\n })\n .join(\", \");\n\n const sql = `CREATE TABLE IF NOT EXISTS \"${tableName}\" (${columnDefs})`;\n await this.execute(sql);\n }\n\n async dropTable(tableName: string): Promise<void> {\n await this.execute(`DROP TABLE IF EXISTS \"${tableName}\"`);\n }\n\n async hasTable(tableName: string): Promise<boolean> {\n const result = await this.query(\n `SELECT EXISTS (\n SELECT FROM information_schema.tables \n WHERE table_schema = 'public' \n AND table_name = $1\n )`,\n [tableName]\n );\n return result[0]?.exists || false;\n }\n\n async hasColumn(tableName: string, columnName: string): Promise<boolean> {\n const result = await this.query(\n `SELECT EXISTS (\n SELECT FROM information_schema.columns \n WHERE table_schema = 'public' \n AND table_name = $1 \n AND column_name = $2\n )`,\n [tableName, columnName]\n );\n return result[0]?.exists || false;\n }\n\n async select(table: string, options: SelectOptions): Promise<any[]> {\n const columns = options.columns?.join(\", \") || \"*\";\n let sql = `SELECT ${columns} FROM \"${table}\"`;\n const params: any[] = [];\n let paramIndex = 1;\n\n // Joins\n if (options.joins && options.joins.length > 0) {\n for (const join of options.joins) {\n sql += ` ${join.type} JOIN \"${join.table}\" ON ${join.first} ${join.operator} ${join.second}`;\n }\n }\n\n // Where clauses\n if (options.where && options.where.length > 0) {\n const whereParts = options.where.map((clause, index) => {\n const boolean = index === 0 ? \"WHERE\" : clause.boolean;\n const condition = this.buildWhereCondition(clause, params, paramIndex);\n paramIndex = params.length + 1;\n return `${boolean} ${condition}`;\n });\n sql += \" \" + whereParts.join(\" \");\n }\n\n // Order by\n if (options.orderBy && options.orderBy.length > 0) {\n const orderParts = options.orderBy.map(\n (o) => `\"${o.column}\" ${o.direction}`\n );\n sql += ` ORDER BY ${orderParts.join(\", \")}`;\n }\n\n // Limit and offset\n if (options.limit) {\n sql += ` LIMIT $${paramIndex++}`;\n params.push(options.limit);\n }\n if (options.offset) {\n sql += ` OFFSET $${paramIndex++}`;\n params.push(options.offset);\n }\n\n return await this.query(sql, params);\n }\n\n async insert(table: string, data: Record<string, any>): Promise<any> {\n const keys = Object.keys(data);\n const values = Object.values(data);\n const placeholders = values.map((_, i) => `$${i + 1}`).join(\", \");\n\n const sql = `INSERT INTO \"${table}\" (${keys\n .map((k) => `\"${k}\"`)\n .join(\", \")}) \n VALUES (${placeholders}) \n RETURNING *`;\n\n const result = await this.query(sql, values);\n return result[0];\n }\n\n async update(\n table: string,\n id: any,\n data: Record<string, any>\n ): Promise<any> {\n const keys = Object.keys(data);\n const values = Object.values(data);\n const setParts = keys.map((k, i) => `\"${k}\" = $${i + 1}`).join(\", \");\n\n const sql = `UPDATE \"${table}\" SET ${setParts} WHERE id = $${\n keys.length + 1\n } RETURNING *`;\n const result = await this.query(sql, [...values, id]);\n return result[0];\n }\n\n async delete(table: string, id: any): Promise<boolean> {\n const sql = `DELETE FROM \"${table}\" WHERE id = $1`;\n const result = await this.execute(sql, [id]);\n return result.rowCount > 0;\n }\n\n async beginTransaction(): Promise<void> {\n if (!this.pool) throw new Error(\"Database not connected\");\n this.client = await this.pool.connect();\n await this.client.query(\"BEGIN\");\n }\n\n async commit(): Promise<void> {\n if (!this.client) throw new Error(\"No active transaction\");\n await this.client.query(\"COMMIT\");\n this.client.release();\n this.client = null;\n }\n\n async rollback(): Promise<void> {\n if (!this.client) throw new Error(\"No active transaction\");\n await this.client.query(\"ROLLBACK\");\n this.client.release();\n this.client = null;\n }\n\n async raw(query: string, params: any[] = []): Promise<any> {\n if (!this.pool) throw new Error(\"Database not connected\");\n const result = await this.pool.query(query, params);\n return result.rows;\n }\n\n private buildWhereCondition(\n clause: WhereClause,\n params: any[],\n startIndex: number\n ): string {\n const column = `\"${clause.column}\"`;\n\n switch (clause.operator) {\n case \"IN\":\n const inPlaceholders = (clause.value as any[])\n .map((_, i) => `$${startIndex + i}`)\n .join(\", \");\n params.push(...clause.value);\n return `${column} IN (${inPlaceholders})`;\n\n case \"NOT IN\":\n const notInPlaceholders = (clause.value as any[])\n .map((_, i) => `$${startIndex + i}`)\n .join(\", \");\n params.push(...clause.value);\n return `${column} NOT IN (${notInPlaceholders})`;\n\n case \"BETWEEN\":\n params.push(clause.value[0], clause.value[1]);\n return `${column} BETWEEN $${startIndex} AND $${startIndex + 1}`;\n\n case \"IS NULL\":\n return `${column} IS NULL`;\n\n case \"IS NOT NULL\":\n return `${column} IS NOT NULL`;\n\n default:\n params.push(clause.value);\n return `${column} ${clause.operator} $${startIndex}`;\n }\n }\n\n private mapType(type: string, length?: number): string {\n const typeMap: Record<string, string> = {\n string: length ? `VARCHAR(${length})` : \"VARCHAR(255)\",\n text: \"TEXT\",\n integer: \"INTEGER\",\n bigInteger: \"BIGINT\",\n float: \"REAL\",\n double: \"DOUBLE PRECISION\",\n decimal: \"DECIMAL\",\n boolean: \"BOOLEAN\",\n date: \"DATE\",\n datetime: \"TIMESTAMP\",\n timestamp: \"TIMESTAMP\",\n json: \"JSONB\",\n uuid: \"UUID\",\n };\n return typeMap[type] || type.toUpperCase();\n }\n\n private formatValue(value: any): string {\n if (value === null) return \"NULL\";\n if (typeof value === \"string\") return `'${value.replace(/'/g, \"''\")}'`;\n if (typeof value === \"boolean\") return value ? \"TRUE\" : \"FALSE\";\n if (value instanceof Date) return `'${value.toISOString()}'`;\n return String(value);\n }\n}\n","import type { Db, MongoClient } from \"mongodb\";\nimport { dynamicRequire } from \"../../server/utils/dynamicRequire\";\nimport {\n ColumnDefinition,\n Connection,\n DatabaseAdapter,\n DatabaseConfig,\n SelectOptions,\n WhereClause,\n} from \"../types\";\n\nexport class MongoAdapter implements DatabaseAdapter {\n private client: MongoClient | null = null;\n private db: Db | null = null;\n\n async connect(config: DatabaseConfig): Promise<Connection> {\n const { MongoClient } = dynamicRequire(\"mongodb\");\n const url = `mongodb://${config.host}:${config.port}`;\n this.client = new MongoClient(url, {\n auth:\n config.username && config.password\n ? {\n username: config.username,\n password: config.password,\n }\n : undefined,\n });\n\n await this.client!.connect();\n this.db = this.client!.db(config.database);\n\n return {\n query: async (sql: string, params?: any[]) => {\n throw new Error(\"Raw SQL queries are not supported in MongoDB adapter\");\n },\n execute: async (sql: string, params?: any[]) => {\n throw new Error(\n \"Raw SQL execution is not supported in MongoDB adapter\"\n );\n },\n close: async () => {\n await this.disconnect();\n },\n };\n }\n\n async disconnect(): Promise<void> {\n if (this.client) {\n await this.client.close();\n this.client = null;\n this.db = null;\n }\n }\n\n // Schema operations\n async createTable(\n tableName: string,\n columns: ColumnDefinition[]\n ): Promise<void> {\n if (!this.db) throw new Error(\"Database not connected\");\n // MongoDB creates collections automatically, but we can create it explicitly\n // to apply validation rules if needed (not implemented here for simplicity)\n await this.db.createCollection(tableName);\n }\n\n async dropTable(tableName: string): Promise<void> {\n if (!this.db) throw new Error(\"Database not connected\");\n await this.db.collection(tableName).drop();\n }\n\n async hasTable(tableName: string): Promise<boolean> {\n if (!this.db) throw new Error(\"Database not connected\");\n const collections = await this.db\n .listCollections({ name: tableName })\n .toArray();\n return collections.length > 0;\n }\n\n async hasColumn(tableName: string, columnName: string): Promise<boolean> {\n // MongoDB is schemaless, so this is always true effectively,\n // or we could check if any document has this field.\n return true;\n }\n\n // Query operations\n async select(table: string, options: SelectOptions): Promise<any[]> {\n if (!this.db) throw new Error(\"Database not connected\");\n\n const collection = this.db.collection(table);\n const filter = this.buildFilter(options.where || []);\n const projection = this.buildProjection(options.columns);\n\n let cursor = collection.find(filter);\n\n if (projection) {\n cursor = cursor.project(projection);\n }\n\n if (options.orderBy) {\n const sort: any = {};\n options.orderBy.forEach((order) => {\n sort[order.column] = order.direction === \"ASC\" ? 1 : -1;\n });\n cursor = cursor.sort(sort);\n }\n\n if (options.offset) {\n cursor = cursor.skip(options.offset);\n }\n\n if (options.limit) {\n cursor = cursor.limit(options.limit);\n }\n\n const results = await cursor.toArray();\n\n // Map _id to id but keep _id\n return results.map((doc) => {\n const { _id, ...rest } = doc;\n return { id: _id, _id, ...rest };\n });\n }\n\n async insert(table: string, data: Record<string, any>): Promise<any> {\n if (!this.db) throw new Error(\"Database not connected\");\n const collection = this.db.collection(table);\n\n // Remove id if present and let Mongo generate _id, or map id to _id\n const doc = { ...data };\n if (doc.id) {\n doc._id = doc.id;\n delete doc.id;\n }\n\n const result = await collection.insertOne(doc);\n\n return {\n id: result.insertedId,\n _id: result.insertedId,\n ...data,\n };\n }\n\n async update(\n table: string,\n id: any,\n data: Record<string, any>\n ): Promise<any> {\n if (!this.db) throw new Error(\"Database not connected\");\n const collection = this.db.collection(table);\n\n const filter = { _id: this.normalizeId(id) };\n const update = { $set: data };\n\n await collection.updateOne(filter, update);\n\n // Return updated document (requires another query or findOneAndUpdate)\n const updated = await collection.findOne(filter);\n if (updated) {\n const { _id, ...rest } = updated;\n return { id: _id, _id, ...rest };\n }\n return null;\n }\n\n async delete(table: string, id: any): Promise<boolean> {\n if (!this.db) throw new Error(\"Database not connected\");\n const collection = this.db.collection(table);\n const result = await collection.deleteOne({ _id: this.normalizeId(id) });\n return result.deletedCount === 1;\n }\n\n // Transaction support\n async beginTransaction(): Promise<void> {\n // MongoDB transactions require replica set\n // Placeholder implementation\n }\n\n async raw(query: string, params: any[] = []): Promise<any> {\n if (!this.db) {\n throw new Error(\"Database not connected\");\n }\n // For MongoDB, raw query might interpret the string as a command\n // or return the raw db object for advanced usage if query is \"db\"\n if (query === \"db\") return this.db;\n\n // Simple command execution\n return await this.db.command(JSON.parse(query));\n }\n\n async commit(): Promise<void> {\n //\n }\n\n async rollback(): Promise<void> {\n //\n }\n\n // Helpers\n private buildFilter(where: WhereClause[]): any {\n const filter: any = {};\n\n where.forEach((clause) => {\n const column = clause.column === \"id\" ? \"_id\" : clause.column;\n let value = clause.value;\n\n if (column === \"_id\") {\n value = this.normalizeId(value);\n }\n\n switch (clause.operator) {\n case \"=\":\n filter[column] = value;\n break;\n case \"!=\":\n filter[column] = { $ne: value };\n break;\n case \">\":\n filter[column] = { $gt: value };\n break;\n case \"<\":\n filter[column] = { $lt: value };\n break;\n case \">=\":\n filter[column] = { $gte: value };\n break;\n case \"<=\":\n filter[column] = { $lte: value };\n break;\n case \"IN\":\n filter[column] = { $in: Array.isArray(value) ? value : [value] };\n break;\n case \"NOT IN\":\n filter[column] = { $nin: Array.isArray(value) ? value : [value] };\n break;\n case \"LIKE\":\n // Simple regex for LIKE\n filter[column] = {\n $regex: new RegExp(value.replace(/%/g, \".*\"), \"i\"),\n };\n break;\n case \"IS NULL\":\n filter[column] = null;\n break;\n case \"IS NOT NULL\":\n filter[column] = { $ne: null };\n break;\n }\n });\n\n return filter;\n }\n\n private buildProjection(columns?: string[]): any {\n if (!columns || columns.length === 0 || columns.includes(\"*\")) {\n return null;\n }\n const projection: any = {};\n columns.forEach((col) => {\n if (col === \"id\") {\n // _id is included by default, no need to project it explicitly unless we want to exclude others\n // But if we select specific columns, we need to ensure _id is handled\n } else {\n projection[col] = 1;\n }\n });\n return projection;\n }\n\n private normalizeId(id: any): any {\n const { ObjectId } = dynamicRequire(\"mongodb\");\n if (id instanceof ObjectId) return id;\n if (typeof id === \"string\" && ObjectId.isValid(id)) {\n return new ObjectId(id);\n }\n return id;\n }\n}\n","import type {\n Pool,\n PoolConnection,\n ResultSetHeader,\n RowDataPacket,\n} from \"mysql2/promise\";\nimport { dynamicRequire } from \"../../server/utils/dynamicRequire\";\nimport type {\n ColumnDefinition,\n Connection,\n DatabaseAdapter,\n DatabaseConfig,\n SelectOptions,\n WhereClause,\n} from \"../types\";\n\n/**\n * MySQL Database Adapter\n */\nexport class MySQLAdapter implements DatabaseAdapter {\n private pool: Pool | null = null;\n private connection: PoolConnection | null = null;\n\n async connect(config: DatabaseConfig): Promise<Connection> {\n const mysql = dynamicRequire(\"mysql2/promise\");\n\n this.pool = mysql.createPool({\n host: config.host,\n port: config.port,\n database: config.database,\n user: config.username,\n password: config.password,\n waitForConnections: true,\n connectionLimit: config.pool?.max || 10,\n queueLimit: 0,\n });\n\n return {\n query: this.query.bind(this),\n execute: this.execute.bind(this),\n close: this.disconnect.bind(this),\n };\n }\n\n async disconnect(): Promise<void> {\n if (this.pool) {\n await this.pool.end();\n this.pool = null;\n }\n }\n\n async query(sql: string, params?: any[]): Promise<any> {\n if (!this.pool) throw new Error(\"Database not connected\");\n const [rows] = await this.pool.query<RowDataPacket[]>(sql, params);\n return rows;\n }\n\n async execute(sql: string, params?: any[]): Promise<any> {\n if (!this.pool) throw new Error(\"Database not connected\");\n const [result] = await this.pool.execute<ResultSetHeader>(sql, params);\n return result;\n }\n\n async createTable(\n tableName: string,\n columns: ColumnDefinition[]\n ): Promise<void> {\n const columnDefs = columns\n .map((col) => {\n let def = `\\`${col.name}\\` ${this.mapType(col.type, col.length)}`;\n\n if (col.unsigned) def += \" UNSIGNED\";\n if (col.autoIncrement) def += \" AUTO_INCREMENT\";\n if (!col.nullable) def += \" NOT NULL\";\n if (col.default !== undefined) {\n def += ` DEFAULT ${this.formatValue(col.default)}`;\n }\n if (col.primary) def += \" PRIMARY KEY\";\n if (col.unique) def += \" UNIQUE\";\n\n return def;\n })\n .join(\", \");\n\n const sql = `CREATE TABLE IF NOT EXISTS \\`${tableName}\\` (${columnDefs}) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci`;\n await this.execute(sql);\n }\n\n async dropTable(tableName: string): Promise<void> {\n await this.execute(`DROP TABLE IF EXISTS \\`${tableName}\\``);\n }\n\n async hasTable(tableName: string): Promise<boolean> {\n const result = await this.query(\n `SELECT COUNT(*) as count FROM information_schema.tables \n WHERE table_schema = DATABASE() AND table_name = ?`,\n [tableName]\n );\n return result[0]?.count > 0;\n }\n\n async hasColumn(tableName: string, columnName: string): Promise<boolean> {\n const result = await this.query(\n `SELECT COUNT(*) as count FROM information_schema.columns \n WHERE table_schema = DATABASE() AND table_name = ? AND column_name = ?`,\n [tableName, columnName]\n );\n return result[0]?.count > 0;\n }\n\n async select(table: string, options: SelectOptions): Promise<any[]> {\n const columns = options.columns?.join(\", \") || \"*\";\n let sql = `SELECT ${columns} FROM \\`${table}\\``;\n const params: any[] = [];\n\n // Joins\n if (options.joins && options.joins.length > 0) {\n for (const join of options.joins) {\n sql += ` ${join.type} JOIN \\`${join.table}\\` ON ${join.first} ${join.operator} ${join.second}`;\n }\n }\n\n // Where clauses\n if (options.where && options.where.length > 0) {\n const whereParts = options.where.map((clause, index) => {\n const boolean = index === 0 ? \"WHERE\" : clause.boolean;\n const condition = this.buildWhereCondition(clause, params);\n return `${boolean} ${condition}`;\n });\n sql += \" \" + whereParts.join(\" \");\n }\n\n // Order by\n if (options.orderBy && options.orderBy.length > 0) {\n const orderParts = options.orderBy.map(\n (o) => `\\`${o.column}\\` ${o.direction}`\n );\n sql += ` ORDER BY ${orderParts.join(\", \")}`;\n }\n\n // Limit and offset\n if (options.limit) {\n sql += ` LIMIT ?`;\n params.push(options.limit);\n }\n if (options.offset) {\n sql += ` OFFSET ?`;\n params.push(options.offset);\n }\n\n return await this.query(sql, params);\n }\n\n async insert(table: string, data: Record<string, any>): Promise<any> {\n const keys = Object.keys(data);\n const values = Object.values(data);\n const placeholders = values.map(() => \"?\").join(\", \");\n\n const sql = `INSERT INTO \\`${table}\\` (${keys\n .map((k) => `\\`${k}\\``)\n .join(\", \")}) VALUES (${placeholders})`;\n const result = await this.execute(sql, values);\n\n return { id: result.insertId, ...data };\n }\n\n async update(\n table: string,\n id: any,\n data: Record<string, any>\n ): Promise<any> {\n const keys = Object.keys(data);\n const values = Object.values(data);\n const setParts = keys.map((k) => `\\`${k}\\` = ?`).join(\", \");\n\n const sql = `UPDATE \\`${table}\\` SET ${setParts} WHERE id = ?`;\n await this.execute(sql, [...values, id]);\n\n return { id, ...data };\n }\n\n async delete(table: string, id: any): Promise<boolean> {\n const sql = `DELETE FROM \\`${table}\\` WHERE id = ?`;\n const result = await this.execute(sql, [id]);\n return result.affectedRows > 0;\n }\n\n async beginTransaction(): Promise<void> {\n if (!this.pool) throw new Error(\"Database not connected\");\n this.connection = await this.pool.getConnection();\n await this.connection.beginTransaction();\n }\n\n async commit(): Promise<void> {\n if (!this.connection) throw new Error(\"No active transaction\");\n await this.connection.commit();\n this.connection.release();\n this.connection = null;\n }\n\n async rollback(): Promise<void> {\n if (!this.connection) throw new Error(\"No active transaction\");\n await this.connection.rollback();\n this.connection.release();\n this.connection = null;\n }\n\n async raw(query: string, params: any[] = []): Promise<any> {\n if (!this.pool) throw new Error(\"Database not connected\");\n const [result] = await this.pool.execute(query, params);\n return result;\n }\n\n private buildWhereCondition(clause: WhereClause, params: any[]): string {\n const column = `\\`${clause.column}\\``;\n\n switch (clause.operator) {\n case \"IN\":\n const inPlaceholders = (clause.value as any[])\n .map(() => \"?\")\n .join(\", \");\n params.push(...clause.value);\n return `${column} IN (${inPlaceholders})`;\n\n case \"NOT IN\":\n const notInPlaceholders = (clause.value as any[])\n .map(() => \"?\")\n .join(\", \");\n params.push(...clause.value);\n return `${column} NOT IN (${notInPlaceholders})`;\n\n case \"BETWEEN\":\n params.push(clause.value[0], clause.value[1]);\n return `${column} BETWEEN ? AND ?`;\n\n case \"IS NULL\":\n return `${column} IS NULL`;\n\n case \"IS NOT NULL\":\n return `${column} IS NOT NULL`;\n\n default:\n params.push(clause.value);\n return `${column} ${clause.operator} ?`;\n }\n }\n\n private mapType(type: string, length?: number): string {\n const typeMap: Record<string, string> = {\n string: length ? `VARCHAR(${length})` : \"VARCHAR(255)\",\n text: \"TEXT\",\n integer: \"INT\",\n bigInteger: \"BIGINT\",\n float: \"FLOAT\",\n double: \"DOUBLE\",\n decimal: \"DECIMAL(10,2)\",\n boolean: \"TINYINT(1)\",\n date: \"DATE\",\n datetime: \"DATETIME\",\n timestamp: \"TIMESTAMP\",\n json: \"JSON\",\n uuid: \"CHAR(36)\",\n };\n return typeMap[type] || type.toUpperCase();\n }\n\n private formatValue(value: any): string {\n if (value === null) return \"NULL\";\n if (typeof value === \"string\") return `'${value.replace(/'/g, \"''\")}'`;\n if (typeof value === \"boolean\") return value ? \"1\" : \"0\";\n if (value instanceof Date)\n return `'${value.toISOString().slice(0, 19).replace(\"T\", \" \")}'`;\n return String(value);\n }\n}\n","module.exports = require(\"fs\");","module.exports = require(\"path\");","module.exports = require(\"@faker-js/faker\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * Macroable trait\n * Allows adding custom methods to a class at runtime\n */\nexport class Macroable {\n protected static macros: Record<string, Function> = {};\n\n /**\n * Register a custom macro\n */\n static macro(name: string, macro: Function): void {\n this.macros[name] = macro;\n (this.prototype as any)[name] = macro;\n }\n\n /**\n * Mix another object into the class\n */\n static mixin(mixin: Record<string, Function>): void {\n Object.keys(mixin).forEach((key) => {\n this.macro(key, mixin[key]);\n });\n }\n\n /**\n * Check if macro exists\n */\n static hasMacro(name: string): boolean {\n return !!this.macros[name];\n }\n}\n","import type {\n JoinClause,\n OrderByClause,\n SelectOptions,\n WhereClause,\n} from \"./types\";\n\nimport { Macroable } from \"./support/Macroable\";\n\n/**\n * Query Builder - Fluent interface for building database queries\n * Arcanox Query Builder\n */\nexport class QueryBuilder<T = any> extends Macroable {\n protected tableName: string;\n protected selectColumns: string[] = [\"*\"];\n protected whereClauses: WhereClause[] = [];\n protected orderByClauses: OrderByClause[] = [];\n protected joinClauses: JoinClause[] = [];\n protected limitValue?: number;\n protected offsetValue?: number;\n protected adapter: any; // DatabaseAdapter\n\n constructor(table: string, adapter: any) {\n super();\n this.tableName = table;\n this.adapter = adapter;\n }\n\n /**\n * Select specific columns\n */\n select(...columns: string[]): this {\n this.selectColumns = columns;\n return this;\n }\n\n /**\n * Add a WHERE clause\n */\n where(column: string, operator: any, value?: any): this {\n // Support where(column, value) syntax\n if (value === undefined) {\n value = operator;\n operator = \"=\";\n }\n\n this.whereClauses.push({\n column,\n operator,\n value,\n boolean: \"AND\",\n });\n return this;\n }\n\n /**\n * Add an OR WHERE clause\n */\n orWhere(column: string, operator: any, value?: any): this {\n if (value === undefined) {\n value = operator;\n operator = \"=\";\n }\n\n this.whereClauses.push({\n column,\n operator,\n value,\n boolean: \"OR\",\n });\n return this;\n }\n\n /**\n * WHERE IN clause\n */\n whereIn(column: string, values: any[]): this {\n this.whereClauses.push({\n column,\n operator: \"IN\",\n value: values,\n boolean: \"AND\",\n });\n return this;\n }\n\n /**\n * WHERE NOT IN clause\n */\n whereNotIn(column: string, values: any[]): this {\n this.whereClauses.push({\n column,\n operator: \"NOT IN\",\n value: values,\n boolean: \"AND\",\n });\n return this;\n }\n\n /**\n * WHERE BETWEEN clause\n */\n whereBetween(column: string, range: [any, any]): this {\n this.whereClauses.push({\n column,\n operator: \"BETWEEN\",\n value: range,\n boolean: \"AND\",\n });\n return this;\n }\n\n /**\n * WHERE NULL clause\n */\n whereNull(column: string): this {\n this.whereClauses.push({\n column,\n operator: \"IS NULL\",\n value: null,\n boolean: \"AND\",\n });\n return this;\n }\n\n /**\n * WHERE NOT NULL clause\n */\n whereNotNull(column: string): this {\n this.whereClauses.push({\n column,\n operator: \"IS NOT NULL\",\n value: null,\n boolean: \"AND\",\n });\n return this;\n }\n\n /**\n * Add ORDER BY clause\n */\n orderBy(\n column: string,\n direction: \"ASC\" | \"DESC\" | \"asc\" | \"desc\" = \"ASC\"\n ): this {\n this.orderByClauses.push({\n column,\n direction: direction.toUpperCase() as \"ASC\" | \"DESC\",\n });\n return this;\n }\n\n /**\n * Add LIMIT clause\n */\n limit(count: number): this {\n this.limitValue = count;\n return this;\n }\n\n /**\n * Add OFFSET clause\n */\n offset(count: number): this {\n this.offsetValue = count;\n return this;\n }\n\n /**\n * Add JOIN clause\n */\n join(\n table: string,\n first: string,\n operator: string,\n second: string,\n type: \"INNER\" | \"LEFT\" | \"RIGHT\" = \"INNER\"\n ): this {\n this.joinClauses.push({\n type,\n table,\n first,\n operator,\n second,\n });\n return this;\n }\n\n /**\n * Add LEFT JOIN clause\n */\n leftJoin(\n table: string,\n first: string,\n operator: string,\n second: string\n ): this {\n return this.join(table, first, operator, second, \"LEFT\");\n }\n\n /**\n * Add RIGHT JOIN clause\n */\n rightJoin(\n table: string,\n first: string,\n operator: string,\n second: string\n ): this {\n return this.join(table, first, operator, second, \"RIGHT\");\n }\n\n protected eagerLoads: string[] = [];\n protected model: any; // Model class\n\n /**\n * Set the model class\n */\n setModel(model: any): this {\n this.model = model;\n return this;\n }\n\n /**\n * Eager load relationships\n */\n with(relations: string | string[]): this {\n if (Array.isArray(relations)) {\n this.eagerLoads.push(...relations);\n } else {\n this.eagerLoads.push(relations);\n }\n return this;\n }\n\n /**\n * Execute query and get all results\n */\n async get(): Promise<T[]> {\n const options: SelectOptions = {\n columns: this.selectColumns,\n where: this.whereClauses,\n orderBy: this.orderByClauses,\n limit: this.limitValue,\n offset: this.offsetValue,\n joins: this.joinClauses,\n };\n\n const results = await this.adapter.select(this.tableName, options);\n\n if (this.eagerLoads.length > 0 && this.model) {\n return await this.eagerLoadRelations(results);\n }\n\n return results;\n }\n\n /**\n * Eager load relations\n */\n protected async eagerLoadRelations(results: any[]): Promise<any[]> {\n if (results.length === 0) return results;\n\n // Hydrate models first\n const models = results.map((result) => this.model.hydrate(result));\n\n for (const relationName of this.eagerLoads) {\n // Check if relation exists on model\n const instance = new this.model();\n if (typeof instance[relationName] !== \"function\") {\n throw new Error(\n `Relation ${relationName} does not exist on ${this.model.name}`\n );\n }\n\n // Get relation instance\n const relation = instance[relationName]();\n\n // Add constraints for eager loading\n relation.addEagerConstraints(models);\n\n // Get related results\n const relatedResults = await relation.get();\n\n // Match results to models\n relation.match(models, relatedResults, relationName);\n }\n\n return models;\n }\n\n /**\n * Get first result\n */\n async first(): Promise<T | null> {\n this.limit(1);\n const results = await this.get();\n return results[0] || null;\n }\n\n /**\n * Find by ID\n */\n async find(id: any): Promise<T | null> {\n return this.where(\"id\", id).first();\n }\n\n /**\n * Count results\n */\n async count(): Promise<number> {\n this.selectColumns = [\"COUNT(*) as count\"];\n const result = await this.first();\n return result ? (result as any).count : 0;\n }\n\n /**\n * Get specific column values\n */\n async pluck(column: string): Promise<any[]> {\n this.select(column);\n const results = await this.get();\n return results.map((row) => (row as any)[column]);\n }\n\n /**\n * Sum of column\n */\n async sum(column: string): Promise<number> {\n this.selectColumns = [`SUM(${column}) as sum`];\n const result = await this.first();\n return result ? (result as any).sum || 0 : 0;\n }\n\n /**\n * Average of column\n */\n async avg(column: string): Promise<number> {\n this.selectColumns = [`AVG(${column}) as avg`];\n const result = await this.first();\n return result ? (result as any).avg || 0 : 0;\n }\n\n /**\n * Minimum value of column\n */\n async min(column: string): Promise<any> {\n this.selectColumns = [`MIN(${column}) as min`];\n const result = await this.first();\n return result ? (result as any).min : null;\n }\n\n /**\n * Maximum value of column\n */\n async max(column: string): Promise<any> {\n this.selectColumns = [`MAX(${column}) as max`];\n const result = await this.first();\n return result ? (result as any).max : null;\n }\n\n /**\n * Check if any records exist\n */\n async exists(): Promise<boolean> {\n const count = await this.count();\n return count > 0;\n }\n\n /**\n * Paginate results\n */\n async paginate(\n page: number = 1,\n perPage: number = 15\n ): Promise<{\n data: T[];\n total: number;\n perPage: number;\n currentPage: number;\n lastPage: number;\n }> {\n const total = await this.count();\n const offset = (page - 1) * perPage;\n\n this.limit(perPage).offset(offset);\n const data = await this.get();\n\n return {\n data,\n total,\n perPage,\n currentPage: page,\n lastPage: Math.ceil(total / perPage),\n };\n }\n\n /**\n * Clone the query builder\n */\n clone(): QueryBuilder<T> {\n const cloned = new QueryBuilder<T>(this.tableName, this.adapter);\n cloned.selectColumns = [...this.selectColumns];\n cloned.whereClauses = [...this.whereClauses];\n cloned.orderByClauses = [...this.orderByClauses];\n cloned.joinClauses = [...this.joinClauses];\n cloned.limitValue = this.limitValue;\n cloned.offsetValue = this.offsetValue;\n return cloned;\n }\n}\n","import { Model } from \"../Model\";\nimport { QueryBuilder } from \"../QueryBuilder\";\n\nexport abstract class Relation<R extends Model = any> {\n protected query: QueryBuilder<R>;\n protected parent: Model;\n protected related: new () => R;\n\n constructor(query: QueryBuilder<R>, parent: Model) {\n this.query = query;\n this.parent = parent;\n this.related = (query as any).model;\n this.addConstraints();\n }\n\n abstract addConstraints(): void;\n\n abstract addEagerConstraints(models: Model[]): void;\n\n abstract match(models: Model[], results: R[], relation: string): Model[];\n\n getQuery(): QueryBuilder<R> {\n return this.query;\n }\n\n async get(): Promise<R[]> {\n return this.query.get();\n }\n\n async first(): Promise<R | null> {\n return this.query.first();\n }\n}\n","import { Model } from \"../Model\";\nimport { QueryBuilder } from \"../QueryBuilder\";\nimport { Relation } from \"./Relation\";\n\nexport class BelongsTo<R extends Model = any> extends Relation<R> {\n protected foreignKey: string;\n protected ownerKey: string;\n\n constructor(\n query: QueryBuilder<R>,\n parent: Model,\n foreignKey: string,\n ownerKey: string\n ) {\n super(query, parent);\n this.foreignKey = foreignKey;\n this.ownerKey = ownerKey;\n }\n\n addConstraints(): void {\n const foreignValue = this.parent.getAttribute(this.foreignKey);\n this.query.where(this.ownerKey, \"=\", foreignValue);\n }\n\n addEagerConstraints(models: Model[]): void {\n const keys = models\n .map((model) => model.getAttribute(this.foreignKey))\n .filter((k) => k !== null);\n this.query.whereIn(this.ownerKey, keys);\n }\n\n match(models: Model[], results: R[], relation: string): Model[] {\n const dictionary: Record<string, R> = {};\n\n results.forEach((result) => {\n const key = result.getAttribute(this.ownerKey);\n dictionary[key] = result;\n });\n\n models.forEach((model) => {\n const key = model.getAttribute(this.foreignKey);\n if (dictionary[key]) {\n model.setRelation(relation, dictionary[key]);\n }\n });\n\n return models;\n }\n}\n","import { Model } from \"../Model\";\nimport { QueryBuilder } from \"../QueryBuilder\";\nimport { Relation } from \"./Relation\";\n\nexport class BelongsToMany<R extends Model = any> extends Relation<R> {\n protected table: string;\n protected foreignPivotKey: string;\n protected relatedPivotKey: string;\n protected parentKey: string;\n protected relatedKey: string;\n\n constructor(\n query: QueryBuilder<R>,\n parent: Model,\n table: string,\n foreignPivotKey: string,\n relatedPivotKey: string,\n parentKey: string,\n relatedKey: string\n ) {\n super(query, parent);\n this.table = table;\n this.foreignPivotKey = foreignPivotKey;\n this.relatedPivotKey = relatedPivotKey;\n this.parentKey = parentKey;\n this.relatedKey = relatedKey;\n }\n\n addConstraints(): void {\n this.performJoin();\n this.query.where(\n `${this.table}.${this.foreignPivotKey}`,\n \"=\",\n this.parent.getAttribute(this.parentKey)\n );\n }\n\n protected performJoin(query?: QueryBuilder<R>): this {\n const q = query || this.query;\n const relatedTable = this.related.prototype.getTable();\n\n q.join(\n this.table,\n `${relatedTable}.${this.relatedKey}`,\n \"=\",\n `${this.table}.${this.relatedPivotKey}`\n );\n\n return this;\n }\n\n addEagerConstraints(models: Model[]): void {\n this.performJoin();\n const keys = models\n .map((model) => model.getAttribute(this.parentKey))\n .filter((k) => k !== null);\n this.query.whereIn(`${this.table}.${this.foreignPivotKey}`, keys);\n }\n\n match(models: Model[], results: R[], relation: string): Model[] {\n const dictionary: Record<string, R[]> = {};\n\n // In a real implementation, we'd select the pivot fields to map correctly\n // For now, we'll assume the results contain the pivot data or we re-query\n // This is a simplified implementation\n\n // TODO: Implement proper pivot mapping\n // For now, we'll just map based on the assumption that results are correct\n\n return models;\n }\n}\n","import { Model } from \"../Model\";\nimport { QueryBuilder } from \"../QueryBuilder\";\nimport { Relation } from \"./Relation\";\n\nexport class HasMany<R extends Model = any> extends Relation<R> {\n protected foreignKey: string;\n protected localKey: string;\n\n constructor(\n query: QueryBuilder<R>,\n parent: Model,\n foreignKey: string,\n localKey: string\n ) {\n super(query, parent);\n this.foreignKey = foreignKey;\n this.localKey = localKey;\n }\n\n addConstraints(): void {\n const localValue = this.parent.getAttribute(this.localKey);\n this.query.where(this.foreignKey, \"=\", localValue);\n }\n\n addEagerConstraints(models: Model[]): void {\n const keys = models\n .map((model) => model.getAttribute(this.localKey))\n .filter((k) => k !== null);\n this.query.whereIn(this.foreignKey, keys);\n }\n\n match(models: Model[], results: R[], relation: string): Model[] {\n const dictionary: Record<string, R[]> = {};\n\n results.forEach((result) => {\n const key = result.getAttribute(this.foreignKey);\n if (!dictionary[key]) {\n dictionary[key] = [];\n }\n dictionary[key].push(result);\n });\n\n models.forEach((model) => {\n const key = model.getAttribute(this.localKey);\n if (dictionary[key]) {\n model.setRelation(relation, dictionary[key]);\n } else {\n model.setRelation(relation, []);\n }\n });\n\n return models;\n }\n}\n","import { Model } from \"../Model\";\nimport { QueryBuilder } from \"../QueryBuilder\";\nimport { Relation } from \"./Relation\";\n\nexport class HasOne<R extends Model = any> extends Relation<R> {\n protected foreignKey: string;\n protected localKey: string;\n\n constructor(\n query: QueryBuilder<R>,\n parent: Model,\n foreignKey: string,\n localKey: string\n ) {\n super(query, parent);\n this.foreignKey = foreignKey;\n this.localKey = localKey;\n }\n\n addConstraints(): void {\n const localValue = this.parent.getAttribute(this.localKey);\n this.query.where(this.foreignKey, \"=\", localValue);\n }\n\n addEagerConstraints(models: Model[]): void {\n const keys = models\n .map((model) => model.getAttribute(this.localKey))\n .filter((k) => k !== null);\n this.query.whereIn(this.foreignKey, keys);\n }\n\n match(models: Model[], results: R[], relation: string): Model[] {\n const dictionary: Record<string, R> = {};\n\n results.forEach((result) => {\n const key = result.getAttribute(this.foreignKey);\n dictionary[key] = result;\n });\n\n models.forEach((model) => {\n const key = model.getAttribute(this.localKey);\n if (dictionary[key]) {\n model.setRelation(relation, dictionary[key]);\n }\n });\n\n return models;\n }\n}\n","import { QueryBuilder } from \"./QueryBuilder\";\nimport { BelongsTo } from \"./relations/BelongsTo\";\nimport { BelongsToMany } from \"./relations/BelongsToMany\";\nimport { HasMany } from \"./relations/HasMany\";\nimport { HasOne } from \"./relations/HasOne\";\nimport type { DatabaseAdapter } from \"./types\";\n\n/**\n * Relation types for arcanox relationships\n */\nexport type RelationType = \"hasOne\" | \"hasMany\" | \"belongsTo\" | \"belongsToMany\";\n\nexport interface RelationConfig {\n type: RelationType;\n related: typeof Model;\n foreignKey?: string;\n localKey?: string;\n pivotTable?: string;\n}\n\nimport { Macroable } from \"./support/Macroable\";\n\n/**\n * Base Model class - Arcanox ORM\n */\nexport class Model<T = any> extends Macroable {\n // Static properties\n protected static adapter: DatabaseAdapter;\n protected static tableName: string;\n protected static primaryKey: string = \"id\";\n protected static connection: string = \"default\";\n\n // Instance properties\n protected attributes: Record<string, any> = {};\n protected original: Record<string, any> = {};\n protected relations: Record<string, any> = {};\n protected exists: boolean = false;\n\n // Configuration\n protected fillable: string[] = [];\n protected guarded: string[] = [\"id\"];\n protected hidden: string[] = [];\n protected visible: string[] = [];\n protected casts: Record<string, string> = {};\n protected dates: string[] = [];\n protected timestamps: boolean = true;\n protected createdAt: string = \"created_at\";\n protected updatedAt: string = \"updated_at\";\n protected softDeletes: boolean = false;\n protected deletedAt: string = \"deleted_at\";\n\n /**\n * Set the database adapter\n */\n static setAdapter(adapter: DatabaseAdapter): void {\n this.adapter = adapter;\n }\n\n /**\n * Get the table name\n */\n static getTable(): string {\n if (this.tableName) {\n return this.tableName;\n }\n // Auto-generate table name from class name (pluralize and snake_case)\n const className = this.name;\n return this.pluralize(this.snakeCase(className));\n }\n\n /**\n * Create a new query builder instance\n */\n static query<T>(): QueryBuilder<T> {\n return new QueryBuilder<T>(this.getTable(), this.adapter);\n }\n\n /**\n * Get all records\n */\n static async all<T>(): Promise<T[]> {\n const results = await this.query<T>().get();\n return results.map((data) => this.hydrate<T>(data));\n }\n\n /**\n * Find a record by ID\n */\n static async find<T>(id: any): Promise<T | null> {\n const data = await this.query<T>().where(this.primaryKey, id).first();\n return data ? this.hydrate<T>(data) : null;\n }\n\n /**\n * Find a record by ID or throw exception\n */\n static async findOrFail<T>(id: any): Promise<T> {\n const model = await this.find<T>(id);\n if (!model) {\n throw new Error(`Model not found with ${this.primaryKey}: ${id}`);\n }\n return model;\n }\n\n /**\n * Create a WHERE query\n */\n static where<T>(column: string, operator: any, value?: any): QueryBuilder<T> {\n return this.query<T>().where(column, operator, value);\n }\n\n /**\n * Create a new record\n */\n static async create<T>(data: Partial<T>): Promise<T> {\n const instance = new this() as any;\n instance.fill(data);\n\n if (instance.timestamps) {\n const now = new Date();\n instance.attributes[instance.createdAt] = now;\n instance.attributes[instance.updatedAt] = now;\n }\n\n const result = await this.adapter.insert(\n this.getTable(),\n instance.attributes\n );\n\n const id = result[this.primaryKey] || result.id || result.insertId;\n instance.attributes[this.primaryKey] = id;\n if (this.primaryKey !== \"id\") {\n instance.attributes.id = id;\n }\n\n instance.exists = true;\n instance.syncOriginal();\n\n return instance as T;\n }\n\n /**\n * Update a record\n */\n static async update<T>(id: any, data: Partial<T>): Promise<T> {\n const instance = await this.findOrFail<T>(id);\n await (instance as any).update(data);\n return instance;\n }\n\n /**\n * Delete a record\n */\n static async destroy(id: any): Promise<boolean> {\n const instance = await this.find(id);\n if (!instance) return false;\n return await (instance as any).delete();\n }\n\n /**\n * First or create\n */\n static async firstOrCreate<T>(\n attributes: Partial<T>,\n values: Partial<T> = {}\n ): Promise<T> {\n const query = this.query<T>();\n\n for (const [key, value] of Object.entries(attributes)) {\n query.where(key, value);\n }\n\n const existing = await query.first();\n if (existing) {\n return this.hydrate<T>(existing);\n }\n\n return await this.create<T>({ ...attributes, ...values });\n }\n\n /**\n * Update or create\n */\n static async updateOrCreate<T>(\n attributes: Partial<T>,\n values: Partial<T> = {}\n ): Promise<T> {\n const query = this.query<T>();\n\n for (const [key, value] of Object.entries(attributes)) {\n query.where(key, value);\n }\n\n const existing = await query.first();\n if (existing) {\n const instance = this.hydrate<T>(existing) as any;\n await instance.update(values);\n return instance;\n }\n\n return await this.create<T>({ ...attributes, ...values });\n }\n\n /**\n * Hydrate a model instance from data\n */\n protected static hydrate<T>(data: any): T {\n const instance = new this() as any;\n instance.attributes = { ...data };\n instance.original = { ...data };\n instance.exists = true;\n return instance as T;\n }\n\n /**\n * Fill model attributes\n */\n fill(attributes: Partial<T>): this {\n for (const [key, value] of Object.entries(attributes)) {\n if (this.isFillable(key)) {\n this.setAttribute(key, value);\n }\n }\n return this;\n }\n\n /**\n * Check if attribute is fillable\n */\n protected isFillable(key: string): boolean {\n if (this.fillable.length > 0) {\n return this.fillable.includes(key);\n }\n return !this.guarded.includes(key);\n }\n\n /**\n * Set an attribute\n */\n setAttribute(key: string, value: any): void {\n // Check for mutator\n const mutator = `set${this.studly(key)}Attribute`;\n if (typeof (this as any)[mutator] === \"function\") {\n value = (this as any)[mutator](value);\n }\n\n this.attributes[key] = this.castAttribute(key, value);\n }\n\n /**\n * Get an attribute\n */\n getAttribute(key: string): any {\n // Check for accessor\n const accessor = `get${this.studly(key)}Attribute`;\n if (typeof (this as any)[accessor] === \"function\") {\n return (this as any)[accessor]();\n }\n\n const value = this.attributes[key];\n return this.castAttribute(key, value, true);\n }\n\n /**\n * Cast attribute to specified type\n */\n protected castAttribute(\n key: string,\n value: any,\n isGetting: boolean = false\n ): any {\n if (value === null || value === undefined) return value;\n\n const cast = this.casts[key];\n if (!cast) return value;\n\n if (isGetting) {\n switch (cast) {\n case \"int\":\n case \"integer\":\n return parseInt(value);\n case \"float\":\n case \"double\":\n return parseFloat(value);\n case \"string\":\n return String(value);\n case \"bool\":\n case \"boolean\":\n return Boolean(value);\n case \"array\":\n case \"json\":\n return typeof value === \"string\" ? JSON.parse(value) : value;\n case \"date\":\n case \"datetime\":\n return value instanceof Date ? value : new Date(value);\n default:\n return value;\n }\n } else {\n switch (cast) {\n case \"array\":\n case \"json\":\n return typeof value === \"object\" ? JSON.stringify(value) : value;\n case \"date\":\n case \"datetime\":\n return value instanceof Date ? value : new Date(value);\n default:\n return value;\n }\n }\n }\n\n /**\n * Save the model\n */\n async save(): Promise<this> {\n const constructor = this.constructor as typeof Model;\n\n if (this.timestamps) {\n const now = new Date();\n if (!this.exists) {\n this.attributes[this.createdAt] = now;\n }\n this.attributes[this.updatedAt] = now;\n }\n\n if (this.exists) {\n // Update existing record\n const id = this.attributes[constructor.primaryKey];\n await constructor.adapter.update(\n constructor.getTable(),\n id,\n this.attributes\n );\n } else {\n // Insert new record\n const result = await constructor.adapter.insert(\n constructor.getTable(),\n this.attributes\n );\n\n const id = result[constructor.primaryKey] || result.id || result.insertId;\n this.attributes[constructor.primaryKey] = id;\n if (constructor.primaryKey !== \"id\") {\n this.attributes.id = id;\n }\n\n this.exists = true;\n }\n\n this.syncOriginal();\n return this;\n }\n\n /**\n * Update the model\n */\n async update(attributes: Partial<T>): Promise<this> {\n this.fill(attributes);\n return await this.save();\n }\n\n /**\n * Delete the model\n */\n async delete(): Promise<boolean> {\n const constructor = this.constructor as typeof Model;\n\n if (this.softDeletes) {\n this.attributes[this.deletedAt] = new Date();\n await this.save();\n return true;\n }\n\n const id = this.attributes[constructor.primaryKey];\n return await constructor.adapter.delete(constructor.getTable(), id);\n }\n\n /**\n * Force delete (ignore soft deletes)\n */\n async forceDelete(): Promise<boolean> {\n const constructor = this.constructor as typeof Model;\n const id = this.attributes[constructor.primaryKey];\n return await constructor.adapter.delete(constructor.getTable(), id);\n }\n\n /**\n * Restore soft deleted model\n */\n async restore(): Promise<this> {\n if (this.softDeletes) {\n this.attributes[this.deletedAt] = null;\n await this.save();\n }\n return this;\n }\n\n /**\n * Sync original attributes\n */\n protected syncOriginal(): void {\n this.original = { ...this.attributes };\n }\n\n /**\n * Get dirty attributes (changed since last sync)\n */\n getDirty(): Record<string, any> {\n const dirty: Record<string, any> = {};\n for (const [key, value] of Object.entries(this.attributes)) {\n if (this.original[key] !== value) {\n dirty[key] = value;\n }\n }\n return dirty;\n }\n\n /**\n * Check if model is dirty\n */\n isDirty(): boolean {\n return Object.keys(this.getDirty()).length > 0;\n }\n\n constructor(attributes: Partial<T> = {}) {\n super();\n this.fill(attributes);\n }\n\n /**\n * Convert model to JSON\n */\n toJSON(): Record<string, any> {\n const json: Record<string, any> = {};\n\n // Add attributes\n for (const [key, value] of Object.entries(this.attributes)) {\n if (this.hidden.includes(key)) continue;\n if (this.visible.length > 0 && !this.visible.includes(key)) continue;\n json[key] = this.getAttribute(key);\n }\n\n // Add relations\n for (const [key, value] of Object.entries(this.relations)) {\n json[key] = value;\n }\n\n return json;\n }\n\n /**\n * Define a one-to-one relationship\n */\n hasOne<R extends Model>(\n related: new () => R,\n foreignKey?: string,\n localKey?: string\n ): HasOne<R> {\n const instance = new related();\n const foreign = foreignKey || `${this.constructor.name.toLowerCase()}_id`;\n const local = localKey || \"id\";\n\n return new HasOne<R>(instance.newQuery(), this, foreign, local);\n }\n\n /**\n * Define a one-to-many relationship\n */\n hasMany<R extends Model>(\n related: new () => R,\n foreignKey?: string,\n localKey?: string\n ): HasMany<R> {\n const instance = new related();\n const foreign = foreignKey || `${this.constructor.name.toLowerCase()}_id`;\n const local = localKey || \"id\";\n\n return new HasMany<R>(instance.newQuery(), this, foreign, local);\n }\n\n /**\n * Define an inverse one-to-one or many relationship\n */\n belongsTo<R extends Model>(\n related: new () => R,\n foreignKey?: string,\n ownerKey?: string\n ): BelongsTo<R> {\n const instance = new related();\n const foreign =\n foreignKey || `${instance.constructor.name.toLowerCase()}_id`;\n const owner = ownerKey || \"id\";\n\n return new BelongsTo<R>(instance.newQuery(), this, foreign, owner);\n }\n\n /**\n * Define a many-to-many relationship\n */\n belongsToMany<R extends Model>(\n related: new () => R,\n table?: string,\n foreignPivotKey?: string,\n relatedPivotKey?: string,\n parentKey?: string,\n relatedKey?: string\n ): BelongsToMany<R> {\n const instance = new related();\n const pivotTable = table || this.guessPivotTable(instance);\n const foreignPivot =\n foreignPivotKey || `${this.constructor.name.toLowerCase()}_id`;\n const relatedPivot =\n relatedPivotKey || `${instance.constructor.name.toLowerCase()}_id`;\n const parent = parentKey || \"id\";\n const relatedK = relatedKey || \"id\";\n\n return new BelongsToMany<R>(\n instance.newQuery(),\n this,\n pivotTable,\n foreignPivot,\n relatedPivot,\n parent,\n relatedK\n );\n }\n\n /**\n * Guess the pivot table name (alphabetical order of model names)\n */\n protected guessPivotTable(related: Model): string {\n const segments = [\n this.constructor.name.toLowerCase(),\n related.constructor.name.toLowerCase(),\n ];\n segments.sort();\n return segments.join(\"_\");\n }\n\n /**\n * Eager load relationships\n */\n static with<T>(relations: string | string[]): QueryBuilder<T> {\n return this.query<T>().with(relations);\n }\n\n /**\n * Set a loaded relationship\n */\n setRelation(relation: string, value: any): this {\n this.relations[relation] = value;\n return this;\n }\n\n /**\n * Get a loaded relationship\n */\n getRelation(relation: string): any {\n return this.relations[relation];\n }\n\n /**\n * Check if a relationship is loaded\n */\n relationLoaded(relation: string): boolean {\n return this.relations[relation] !== undefined;\n }\n\n /**\n * Create a new query builder for the model\n */\n newQuery(): QueryBuilder<T> {\n return (this.constructor as typeof Model).query<T>();\n }\n\n /**\n * Helper: Convert string to snake_case\n */\n protected static snakeCase(str: string): string {\n return str\n .replace(/([A-Z])/g, \"_$1\")\n .toLowerCase()\n .replace(/^_/, \"\");\n }\n\n /**\n * Helper: Pluralize string (simple implementation)\n */\n protected static pluralize(str: string): string {\n if (str.endsWith(\"y\")) {\n return str.slice(0, -1) + \"ies\";\n }\n if (str.endsWith(\"s\")) {\n return str + \"es\";\n }\n return str + \"s\";\n }\n\n /**\n * Helper: Convert to StudlyCase\n */\n protected studly(str: string): string {\n return str.replace(/(^|_)(\\w)/g, (_, __, c) => c.toUpperCase());\n }\n}\n","import type { ColumnDefinition } from \"../types\";\n\n/**\n * Column definition builder - fluent interface for defining columns\n */\nexport class ColumnBuilder {\n private definition: ColumnDefinition;\n\n constructor(name: string, type: string, length?: number) {\n this.definition = {\n name,\n type,\n length,\n nullable: false,\n };\n }\n\n /**\n * Make column nullable\n */\n nullable(): this {\n this.definition.nullable = true;\n return this;\n }\n\n /**\n * Set default value\n */\n default(value: any): this {\n this.definition.default = value;\n return this;\n }\n\n /**\n * Make column unique\n */\n unique(): this {\n this.definition.unique = true;\n return this;\n }\n\n /**\n * Make column primary key\n */\n primary(): this {\n this.definition.primary = true;\n return this;\n }\n\n /**\n * Make column auto-increment\n */\n autoIncrement(): this {\n this.definition.autoIncrement = true;\n return this;\n }\n\n /**\n * Make column unsigned (for numbers)\n */\n unsigned(): this {\n this.definition.unsigned = true;\n return this;\n }\n\n /**\n * Get the column definition\n */\n getDefinition(): ColumnDefinition {\n return this.definition;\n }\n}\n\n/**\n * Foreign key definition builder\n */\nexport class ForeignKeyBuilder {\n private column: string;\n private referencedTable?: string;\n private referencedColumn?: string;\n private onDeleteAction?: string;\n private onUpdateAction?: string;\n\n constructor(column: string) {\n this.column = column;\n }\n\n /**\n * Set referenced table and column\n */\n references(column: string): this {\n this.referencedColumn = column;\n return this;\n }\n\n /**\n * Set referenced table\n */\n on(table: string): this {\n this.referencedTable = table;\n return this;\n }\n\n /**\n * Set ON DELETE action\n */\n onDelete(action: \"CASCADE\" | \"SET NULL\" | \"RESTRICT\" | \"NO ACTION\"): this {\n this.onDeleteAction = action;\n return this;\n }\n\n /**\n * Set ON UPDATE action\n */\n onUpdate(action: \"CASCADE\" | \"SET NULL\" | \"RESTRICT\" | \"NO ACTION\"): this {\n this.onUpdateAction = action;\n return this;\n }\n\n /**\n * Get foreign key SQL\n */\n toSQL(): string {\n if (!this.referencedTable || !this.referencedColumn) {\n throw new Error(\"Foreign key must reference a table and column\");\n }\n\n let sql = `FOREIGN KEY (${this.column}) REFERENCES ${this.referencedTable}(${this.referencedColumn})`;\n\n if (this.onDeleteAction) {\n sql += ` ON DELETE ${this.onDeleteAction}`;\n }\n if (this.onUpdateAction) {\n sql += ` ON UPDATE ${this.onUpdateAction}`;\n }\n\n return sql;\n }\n}\n\n/**\n * Blueprint - defines table structure\n * Arcanox's Schema Blueprint\n */\nexport class Blueprint {\n private tableName: string;\n private columns: ColumnDefinition[] = [];\n private indexes: Array<{\n columns: string[];\n unique: boolean;\n name?: string;\n }> = [];\n private foreignKeys: ForeignKeyBuilder[] = [];\n private primaryKeys: string[] = [];\n\n constructor(tableName: string) {\n this.tableName = tableName;\n }\n\n /**\n * Add auto-incrementing ID column\n */\n id(name: string = \"id\"): ColumnBuilder {\n const col = new ColumnBuilder(name, \"bigInteger\");\n col.primary().autoIncrement().unsigned();\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add UUID column\n */\n uuid(name: string = \"id\"): ColumnBuilder {\n const col = new ColumnBuilder(name, \"uuid\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add string column\n */\n string(name: string, length: number = 255): ColumnBuilder {\n const col = new ColumnBuilder(name, \"string\", length);\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add text column\n */\n text(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"text\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add integer column\n */\n integer(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"integer\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add big integer column\n */\n bigInteger(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"bigInteger\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add decimal column\n */\n decimal(\n name: string,\n precision: number = 10,\n scale: number = 2\n ): ColumnBuilder {\n const col = new ColumnBuilder(name, \"decimal\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add float column\n */\n float(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"float\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add double column\n */\n double(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"double\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add boolean column\n */\n boolean(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"boolean\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add date column\n */\n date(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"date\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add datetime column\n */\n datetime(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"datetime\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add timestamp column\n */\n timestamp(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"timestamp\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add created_at and updated_at timestamps\n */\n timestamps(): void {\n this.timestamp(\"created_at\").nullable();\n this.timestamp(\"updated_at\").nullable();\n }\n\n /**\n * Add deleted_at timestamp for soft deletes\n */\n softDeletes(name: string = \"deleted_at\"): ColumnBuilder {\n return this.timestamp(name).nullable();\n }\n\n /**\n * Add JSON column\n */\n json(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"json\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add enum column\n */\n enum(name: string, values: string[]): ColumnBuilder {\n const col = new ColumnBuilder(name, \"enum\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add foreign key constraint\n */\n foreign(column: string): ForeignKeyBuilder {\n const fk = new ForeignKeyBuilder(column);\n this.foreignKeys.push(fk);\n return fk;\n }\n\n /**\n * Add index\n */\n index(columns: string | string[], name?: string): void {\n const cols = Array.isArray(columns) ? columns : [columns];\n this.indexes.push({ columns: cols, unique: false, name });\n }\n\n /**\n * Add unique index\n */\n unique(columns: string | string[], name?: string): void {\n const cols = Array.isArray(columns) ? columns : [columns];\n this.indexes.push({ columns: cols, unique: true, name });\n }\n\n /**\n * Set primary key\n */\n primary(columns: string | string[]): void {\n this.primaryKeys = Array.isArray(columns) ? columns : [columns];\n }\n\n /**\n * Get all columns\n */\n getColumns(): ColumnDefinition[] {\n return this.columns;\n }\n\n /**\n * Get table name\n */\n getTableName(): string {\n return this.tableName;\n }\n\n /**\n * Get indexes\n */\n getIndexes() {\n return this.indexes;\n }\n\n /**\n * Get foreign keys\n */\n getForeignKeys() {\n return this.foreignKeys;\n }\n}\n","import type { DatabaseAdapter } from \"../types\";\nimport { Blueprint } from \"./Blueprint\";\n\n/**\n * Schema - ArcnanJS schema builder\n * Provides fluent interface for creating and modifying database tables\n */\nexport class Schema {\n private static adapter: DatabaseAdapter;\n\n /**\n * Set the database adapter\n */\n static setAdapter(adapter: DatabaseAdapter): void {\n this.adapter = adapter;\n }\n\n /**\n * Create a new table\n */\n static async create(\n tableName: string,\n callback: (table: Blueprint) => void\n ): Promise<void> {\n const blueprint = new Blueprint(tableName);\n callback(blueprint);\n\n await this.adapter.createTable(tableName, blueprint.getColumns());\n }\n\n /**\n * Modify an existing table\n */\n static async table(\n tableName: string,\n callback: (table: Blueprint) => void\n ): Promise<void> {\n const blueprint = new Blueprint(tableName);\n callback(blueprint);\n\n // For now, this is a simplified implementation\n // In a full implementation, this would generate ALTER TABLE statements\n console.warn(\n \"Schema.table() is not fully implemented yet. Use migrations for complex alterations.\"\n );\n }\n\n /**\n * Drop a table\n */\n static async drop(tableName: string): Promise<void> {\n await this.adapter.dropTable(tableName);\n }\n\n /**\n * Drop a table if it exists\n */\n static async dropIfExists(tableName: string): Promise<void> {\n const exists = await this.hasTable(tableName);\n if (exists) {\n await this.drop(tableName);\n }\n }\n\n /**\n * Rename a table\n */\n static async rename(from: string, to: string): Promise<void> {\n // This would need to be implemented in the adapter\n throw new Error(\"Schema.rename() not yet implemented\");\n }\n\n /**\n * Check if a table exists\n */\n static async hasTable(tableName: string): Promise<boolean> {\n return await this.adapter.hasTable(tableName);\n }\n\n /**\n * Check if a column exists in a table\n */\n static async hasColumn(\n tableName: string,\n columnName: string\n ): Promise<boolean> {\n return await this.adapter.hasColumn(tableName, columnName);\n }\n\n /**\n * Get all tables\n */\n static async getTables(): Promise<string[]> {\n // This would need to be implemented in the adapter\n throw new Error(\"Schema.getTables() not yet implemented\");\n }\n\n /**\n * Get all columns for a table\n */\n static async getColumns(tableName: string): Promise<string[]> {\n // This would need to be implemented in the adapter\n throw new Error(\"Schema.getColumns() not yet implemented\");\n }\n}\n","import { dynamicRequire } from \"../../server/utils/dynamicRequire\";\nimport { Schema } from \"./Schema\";\n\n/**\n * Base Migration class\n * All migrations should extend this class and implement up() and down() methods\n */\nexport abstract class Migration {\n /**\n * Run the migration\n */\n abstract up(): Promise<void>;\n\n /**\n * Reverse the migration\n */\n abstract down(): Promise<void>;\n}\n\n/**\n * Migration status\n */\nexport interface MigrationStatus {\n name: string;\n batch: number;\n ranAt: Date;\n}\n\n/**\n * Migration record in database\n */\nexport interface MigrationRecord {\n id?: number;\n migration: string;\n batch: number;\n created_at?: Date;\n}\n\n/**\n * Migration Runner - executes migrations\n */\nexport class MigrationRunner {\n private adapter: any;\n private migrationsTable: string = \"migrations\";\n private migrationsPath: string;\n\n constructor(adapter: any, migrationsPath: string) {\n this.adapter = adapter;\n this.migrationsPath = migrationsPath;\n }\n\n /**\n * Ensure migrations table exists\n */\n private async ensureMigrationsTable(): Promise<void> {\n const exists = await Schema.hasTable(this.migrationsTable);\n if (!exists) {\n await Schema.create(this.migrationsTable, (table) => {\n table.id();\n table.string(\"migration\");\n table.integer(\"batch\");\n table.timestamp(\"created_at\").nullable();\n });\n }\n }\n\n /**\n * Get all ran migrations\n */\n private async getRanMigrations(): Promise<MigrationRecord[]> {\n await this.ensureMigrationsTable();\n return await this.adapter.select(this.migrationsTable, {\n orderBy: [{ column: \"batch\", direction: \"ASC\" }],\n });\n }\n\n /**\n * Get pending migrations\n */\n private async getPendingMigrations(): Promise<string[]> {\n const fs = await import(\"fs\");\n const path = await import(\"path\");\n\n const ranMigrations = await this.getRanMigrations();\n const ranNames = ranMigrations.map((m) => m.migration);\n\n const files = fs.readdirSync(this.migrationsPath);\n const migrationFiles = files\n .filter((f) => f.endsWith(\".ts\") || f.endsWith(\".js\"))\n .filter((f) => !ranNames.includes(f.replace(/\\.(ts|js)$/, \"\")))\n .sort();\n\n return migrationFiles;\n }\n\n /**\n * Run pending migrations\n */\n async run(): Promise<void> {\n const path = await import(\"path\");\n const pendingMigrations = await this.getPendingMigrations();\n\n if (pendingMigrations.length === 0) {\n console.log(\"No pending migrations\");\n return;\n }\n\n const ranMigrations = await this.getRanMigrations();\n const nextBatch =\n ranMigrations.length > 0\n ? Math.max(...ranMigrations.map((m) => m.batch)) + 1\n : 1;\n\n console.log(`Running ${pendingMigrations.length} migration(s)...`);\n\n for (const file of pendingMigrations) {\n const migrationPath = path.resolve(this.migrationsPath, file);\n const migrationName = file.replace(/\\.(ts|js)$/, \"\");\n\n try {\n // Dynamic import of migration\n const MigrationClass = await this.loadMigration(migrationPath);\n const migration = new MigrationClass();\n\n console.log(`Migrating: ${migrationName}`);\n await migration.up();\n\n // Record migration\n await this.adapter.insert(this.migrationsTable, {\n migration: migrationName,\n batch: nextBatch,\n created_at: new Date(),\n });\n\n console.log(`Migrated: ${migrationName}`);\n } catch (error) {\n console.error(`Failed to migrate ${migrationName}:`, error);\n throw error;\n }\n }\n\n console.log(\"Migrations completed successfully\");\n }\n\n /**\n * Rollback last batch of migrations\n */\n async rollback(steps: number = 1): Promise<void> {\n const ranMigrations = await this.getRanMigrations();\n\n if (ranMigrations.length === 0) {\n console.log(\"No migrations to rollback\");\n return;\n }\n\n const maxBatch = Math.max(...ranMigrations.map((m) => m.batch));\n const minBatch = maxBatch - steps + 1;\n\n const migrationsToRollback = ranMigrations\n .filter((m) => m.batch >= minBatch && m.batch <= maxBatch)\n .reverse();\n\n console.log(`Rolling back ${migrationsToRollback.length} migration(s)...`);\n\n const path = await import(\"path\");\n\n for (const record of migrationsToRollback) {\n const migrationPath = path.resolve(\n this.migrationsPath,\n `${record.migration}.ts`\n );\n\n try {\n const MigrationClass = await this.loadMigration(migrationPath);\n const migration = new MigrationClass();\n\n console.log(`Rolling back: ${record.migration}`);\n await migration.down();\n\n // Remove migration record\n await this.adapter.delete(this.migrationsTable, record.id);\n\n console.log(`Rolled back: ${record.migration}`);\n } catch (error) {\n console.error(`Failed to rollback ${record.migration}:`, error);\n throw error;\n }\n }\n\n console.log(\"Rollback completed successfully\");\n }\n\n /**\n * Reset all migrations\n */\n async reset(): Promise<void> {\n const ranMigrations = await this.getRanMigrations();\n const batches = Math.max(...ranMigrations.map((m) => m.batch));\n await this.rollback(batches);\n }\n\n /**\n * Reset and re-run all migrations\n */\n async fresh(): Promise<void> {\n await this.reset();\n await this.run();\n }\n\n /**\n * Get migration status\n */\n async status(): Promise<MigrationStatus[]> {\n const ranMigrations = await this.getRanMigrations();\n return ranMigrations.map((m) => ({\n name: m.migration,\n batch: m.batch,\n ranAt: m.created_at || new Date(),\n }));\n }\n\n /**\n * Load migration class from file\n */\n private async loadMigration(filePath: string): Promise<any> {\n // Use dynamic require to avoid webpack bundling\n const migrationModule = dynamicRequire(filePath);\n const MigrationClass = migrationModule.default || migrationModule;\n\n if (!MigrationClass || typeof MigrationClass !== \"function\") {\n throw new Error(\n `Migration file ${filePath} does not export a valid migration class`\n );\n }\n\n // Validate that it's a concrete class extending Migration\n // Check if the class has the required methods\n const instance = new MigrationClass();\n if (\n typeof instance.up !== \"function\" ||\n typeof instance.down !== \"function\"\n ) {\n throw new Error(\n `Migration class in ${filePath} must implement up() and down() methods`\n );\n }\n\n return MigrationClass;\n }\n}\n","import type { Faker } from \"@faker-js/faker\";\nimport { Model } from \"../Model\";\n\n/**\n * Base Factory class\n */\nexport abstract class Factory<T extends Model> {\n protected abstract model: new () => T;\n protected faker: Faker;\n\n constructor() {\n // We'll load faker dynamically to avoid bundling it if not used\n // But for type safety we declare it here\n this.faker = require(\"@faker-js/faker\").faker;\n }\n\n /**\n * Define the model's default state.\n */\n abstract definition(): Record<string, any>;\n\n /**\n * Create a new model instance with attributes.\n */\n make(attributes: Partial<T> = {}): T {\n const instance = new this.model();\n const defaults = this.definition();\n\n // Merge defaults with overrides\n const data = { ...defaults, ...attributes };\n\n // Fill model\n instance.fill(data);\n\n return instance;\n }\n\n /**\n * Create and save a new model instance.\n */\n async create(attributes: Partial<T> = {}): Promise<T> {\n const instance = this.make(attributes);\n await instance.save();\n return instance;\n }\n\n /**\n * Create multiple instances\n */\n async createMany(count: number, attributes: Partial<T> = {}): Promise<T[]> {\n const instances: T[] = [];\n for (let i = 0; i < count; i++) {\n instances.push(await this.create(attributes));\n }\n return instances;\n }\n}\n","/**\n * Base Seeder class\n */\nexport abstract class Seeder {\n /**\n * Run the database seeds.\n */\n abstract run(): Promise<void>;\n\n /**\n * Call another seeder\n */\n async call(SeederClass: new () => Seeder): Promise<void> {\n const seeder = new SeederClass();\n await seeder.run();\n }\n}\n","import { QueryBuilder } from \"../QueryBuilder\";\n\n/**\n * MongoDB-specific extensions for QueryBuilder\n * These extensions provide Mongoose-style functionality for MongoDB\n */\n\nexport interface PopulateOptions {\n from?: string;\n localField?: string;\n foreignField?: string;\n as?: string;\n select?: string[];\n}\n\n/**\n * Populate (Mongoose-style relationships)\n * Uses MongoDB's $lookup aggregation to join collections\n */\nQueryBuilder.macro(\n \"populate\",\n async function (\n this: QueryBuilder<any>,\n field: string,\n options?: PopulateOptions\n ) {\n // Get the native DB instance\n const db = await this.adapter.raw(\"db\");\n const collection = db.collection(this.tableName);\n\n // Determine the related collection name\n // By convention: 'author' field -> 'authors' collection\n const relatedCollection = options?.from || `${field}s`;\n const localField = options?.localField || `${field}_id`;\n const foreignField = options?.foreignField || \"_id\";\n const as = options?.as || field;\n\n // Build the aggregation pipeline\n const pipeline: any[] = [];\n\n // Add existing where clauses as $match\n if ((this as any).whereClauses && (this as any).whereClauses.length > 0) {\n const filter =\n this.adapter.buildFilter?.((this as any).whereClauses) || {};\n if (Object.keys(filter).length > 0) {\n pipeline.push({ $match: filter });\n }\n }\n\n // Build $lookup with optional projection\n if (options?.select && options.select.length > 0) {\n // Use pipeline-based $lookup for field selection\n const projection: any = {};\n options.select.forEach((field) => {\n projection[field] = 1;\n });\n\n pipeline.push({\n $lookup: {\n from: relatedCollection,\n let: { localId: `$${localField}` },\n pipeline: [\n { $match: { $expr: { $eq: [`$${foreignField}`, \"$$localId\"] } } },\n { $project: projection },\n ],\n as: as,\n },\n });\n } else {\n // Standard $lookup\n pipeline.push({\n $lookup: {\n from: relatedCollection,\n localField: localField,\n foreignField: foreignField,\n as: as,\n },\n });\n }\n\n // Unwind to convert array to object (if you want single object instead of array)\n pipeline.push({\n $unwind: {\n path: `$${as}`,\n preserveNullAndEmptyArrays: true, // Keep documents even if no match\n },\n });\n\n // Add limit if specified\n if ((this as any).limitValue) {\n pipeline.push({ $limit: (this as any).limitValue });\n }\n\n // Execute aggregation\n const results = await collection.aggregate(pipeline).toArray();\n\n // Map _id to id\n return results.map((doc: any) => {\n const { _id, ...rest } = doc;\n return { id: _id, _id, ...rest };\n });\n }\n);\n\n/**\n * Execute query (alias for get())\n * Provides Mongoose-style exec() method\n */\nQueryBuilder.macro(\"exec\", async function (this: QueryBuilder<any>) {\n return await this.get();\n});\n\n/**\n * Direct aggregation pipeline access\n * Allows running custom MongoDB aggregation pipelines\n */\nQueryBuilder.macro(\n \"aggregate\",\n async function (this: QueryBuilder<any>, pipeline: any[]) {\n // Get the native DB instance\n const db = await this.adapter.raw(\"db\");\n const collection = db.collection(this.tableName);\n\n // Execute aggregation\n const results = await collection.aggregate(pipeline).toArray();\n\n // Map _id to id for consistency\n return results.map((doc: any) => {\n if (doc._id) {\n const { _id, ...rest } = doc;\n return { id: _id, _id, ...rest };\n }\n return doc;\n });\n }\n);\n\n/**\n * TypeScript type augmentation for better IDE support\n */\ndeclare module \"../QueryBuilder\" {\n interface QueryBuilder<T> {\n /**\n * Populate a relationship using MongoDB's $lookup\n * @param field - The field name to populate\n * @param options - Population options\n */\n populate(field: string, options?: PopulateOptions): Promise<T[]>;\n\n /**\n * Execute the query (alias for get())\n */\n exec(): Promise<T[]>;\n\n /**\n * Execute a MongoDB aggregation pipeline\n * @param pipeline - MongoDB aggregation pipeline stages\n */\n aggregate(pipeline: any[]): Promise<any[]>;\n }\n}\n","import ArcanaJSServer from \"../ArcanaJSServer\";\n\nexport abstract class ServiceProvider {\n protected app: ArcanaJSServer;\n\n constructor(app: ArcanaJSServer) {\n this.app = app;\n }\n\n /**\n * Register any application services.\n */\n register(): void {\n //\n }\n\n /**\n * Bootstrap any application services.\n */\n boot(): void {\n //\n }\n\n /**\n * Shutdown any application services.\n */\n async shutdown(): Promise<void> {\n //\n }\n}\n","import { ServiceProvider } from \"../../server/support/ServiceProvider\";\nimport { Model } from \"../Model\";\nimport { Schema } from \"../schema\";\nimport { DatabaseAdapter } from \"../types\";\n\n/**\n * Database Service Provider\n *\n * Registers and bootstraps the database system\n */\nexport class DatabaseProvider extends ServiceProvider {\n async register() {\n console.log(\"⚙️ DatabaseProvider: Initializing...\");\n\n // Get config from container (loaded by ArcanaJSServer)\n let databaseConfig: any;\n\n try {\n databaseConfig = this.app.container.resolve(\"DatabaseConfig\");\n console.log(\"✓ DatabaseProvider: Configuration loaded successfully\");\n } catch (err) {\n console.warn(\n \"⚠ DatabaseProvider: No configuration found - Skipping setup\"\n );\n return;\n }\n\n try {\n // Load appropriate adapter\n console.log(\n `⚙️ DatabaseProvider: Loading ${databaseConfig.type} adapter...`\n );\n let adapter: DatabaseAdapter;\n\n switch (databaseConfig.type) {\n case \"mysql\":\n const { MySQLAdapter } = await import(\"../adapters/MySQLAdapter\");\n adapter = new MySQLAdapter();\n break;\n case \"mongodb\":\n const { MongoAdapter } = await import(\"../adapters/MongoAdapter\");\n adapter = new MongoAdapter();\n break;\n case \"postgres\":\n const { PostgresAdapter } = await import(\n \"../adapters/PostgresAdapter\"\n );\n adapter = new PostgresAdapter();\n break;\n default:\n throw new Error(`Unsupported database type: ${databaseConfig.type}`);\n }\n\n console.log(`✓ DatabaseProvider: ${databaseConfig.type} adapter loaded`);\n\n // Register adapter in container\n this.app.container.singleton(\"DatabaseAdapter\", () => adapter);\n\n // Register connection factory\n this.app.container.singleton(\"DBConnection\", async () => {\n console.log(\n `⚙️ DatabaseProvider: Connecting to ${databaseConfig.type}...`\n );\n const conn = await adapter.connect(databaseConfig);\n Model.setAdapter(adapter);\n Schema.setAdapter(adapter);\n console.log(\n `✓ DatabaseProvider: Connected to ${databaseConfig.type} database '${databaseConfig.database}'`\n );\n return conn;\n });\n\n console.log(\"✅ DatabaseProvider: Ready\");\n } catch (error) {\n console.error(\"✗ DatabaseProvider: Initialization failed\", error);\n throw error;\n }\n }\n\n async shutdown() {\n try {\n console.log(\"⚙️ DatabaseProvider: Closing connection...\");\n const adapter = (await this.app.container.make(\n \"DatabaseAdapter\"\n )) as DatabaseAdapter;\n await adapter.disconnect();\n console.log(\"✓ DatabaseProvider: Connection closed\");\n } catch (err) {\n // No database configured or already closed\n }\n }\n}\n"],"names":["dynamicRequire","id","_global$process","_global","global","nativeRequire","e","eval","PostgresAdapter","pool","client","connect","config","_config$pool","_config$pool2","Pool","this","host","port","database","user","username","password","ssl","min","max","query","bind","execute","close","disconnect","end","sql","params","Error","rows","createTable","tableName","columns","map","col","def","name","mapType","type","length","primary","autoIncrement","nullable","unique","undefined","default","formatValue","join","dropTable","hasTable","_result$","exists","hasColumn","columnName","_result$2","select","table","options","_options$columns","paramIndex","joins","first","operator","second","where","clause","index","boolean","condition","buildWhereCondition","orderBy","o","column","direction","limit","push","offset","insert","data","keys","Object","values","placeholders","_","i","k","update","delete","rowCount","beginTransaction","commit","release","rollback","raw","startIndex","inPlaceholders","value","notInPlaceholders","string","text","integer","bigInteger","float","double","decimal","date","datetime","timestamp","json","uuid","toUpperCase","replace","Date","toISOString","String","MongoAdapter","db","MongoClient","url","auth","async","createCollection","collection","drop","listCollections","toArray","filter","buildFilter","projection","buildProjection","cursor","find","project","sort","forEach","order","skip","doc","_id","rest","result","insertOne","insertedId","normalizeId","$set","updateOne","updated","findOne","deleteOne","deletedCount","command","JSON","parse","$ne","$gt","$lt","$gte","$lte","$in","Array","isArray","$nin","$regex","RegExp","includes","ObjectId","isValid","MySQLAdapter","connection","mysql","createPool","waitForConnections","connectionLimit","queueLimit","unsigned","count","insertId","affectedRows","getConnection","slice","module","exports","require","__webpack_module_cache__","leafPrototypes","getProto","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getPrototypeOf","obj","t","mode","__esModule","then","ns","create","r","current","indexOf","getOwnPropertyNames","key","d","definition","defineProperty","enumerable","get","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","Macroable","macro","macros","mixin","hasMacro","QueryBuilder","selectColumns","whereClauses","orderByClauses","joinClauses","constructor","adapter","super","orWhere","whereIn","whereNotIn","whereBetween","range","whereNull","whereNotNull","limitValue","offsetValue","leftJoin","rightJoin","eagerLoads","setModel","model","with","relations","results","eagerLoadRelations","models","hydrate","relationName","instance","relation","addEagerConstraints","relatedResults","match","pluck","row","sum","avg","paginate","page","perPage","total","currentPage","lastPage","Math","ceil","clone","cloned","Relation","parent","related","addConstraints","getQuery","BelongsTo","foreignKey","ownerKey","foreignValue","getAttribute","dictionary","setRelation","BelongsToMany","foreignPivotKey","relatedPivotKey","parentKey","relatedKey","performJoin","q","relatedTable","getTable","HasMany","localKey","localValue","HasOne","Model","attributes","original","fillable","guarded","hidden","visible","casts","dates","timestamps","createdAt","updatedAt","softDeletes","deletedAt","setAdapter","className","pluralize","snakeCase","all","primaryKey","findOrFail","fill","now","syncOriginal","destroy","firstOrCreate","entries","existing","updateOrCreate","isFillable","setAttribute","mutator","studly","castAttribute","accessor","isGetting","cast","parseInt","parseFloat","Boolean","stringify","save","forceDelete","restore","getDirty","dirty","isDirty","toJSON","hasOne","foreign","toLowerCase","local","newQuery","hasMany","belongsTo","owner","belongsToMany","pivotTable","guessPivotTable","foreignPivot","relatedPivot","relatedK","segments","getRelation","relationLoaded","str","endsWith","__","c","ColumnBuilder","getDefinition","ForeignKeyBuilder","references","referencedColumn","on","referencedTable","onDelete","action","onDeleteAction","onUpdate","onUpdateAction","toSQL","Blueprint","indexes","foreignKeys","primaryKeys","precision","scale","enum","fk","cols","getColumns","getTableName","getIndexes","getForeignKeys","Schema","callback","blueprint","console","warn","dropIfExists","rename","from","to","getTables","Migration","MigrationRunner","migrationsTable","migrationsPath","ensureMigrationsTable","getRanMigrations","getPendingMigrations","fs","ranNames","m","migration","readdirSync","f","run","path","pendingMigrations","log","ranMigrations","nextBatch","batch","file","migrationPath","resolve","migrationName","loadMigration","up","created_at","error","steps","maxBatch","minBatch","migrationsToRollback","reverse","record","down","reset","batches","fresh","status","ranAt","filePath","migrationModule","MigrationClass","Factory","faker","make","createMany","instances","Seeder","SeederClass","seeder","field","relatedCollection","localField","foreignField","as","pipeline","_this$adapter$buildFi","_this$adapter","$match","$lookup","let","localId","$expr","$eq","$project","$unwind","preserveNullAndEmptyArrays","$limit","aggregate","ServiceProvider","app","register","boot","shutdown","DatabaseProvider","databaseConfig","container","err","singleton","conn"],"ignoreList":[],"sourceRoot":""}
|