xansql 1.0.9 → 1.0.12
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/core/Xansql.cjs.map +1 -1
- package/core/Xansql.mjs.map +1 -1
- package/core/XansqlError.cjs.map +1 -1
- package/core/XansqlError.mjs.map +1 -1
- package/core/classes/EventManager.cjs.map +1 -1
- package/core/classes/EventManager.mjs.map +1 -1
- package/core/classes/ForeignInfo.cjs.map +1 -1
- package/core/classes/ForeignInfo.mjs.map +1 -1
- package/core/classes/Migration/ForeingMigration.cjs.map +1 -1
- package/core/classes/Migration/ForeingMigration.mjs.map +1 -1
- package/core/classes/Migration/IndexMigration.cjs.map +1 -1
- package/core/classes/Migration/IndexMigration.mjs.map +1 -1
- package/core/classes/Migration/TableMigration.cjs.map +1 -1
- package/core/classes/Migration/TableMigration.mjs.map +1 -1
- package/core/classes/Migration/index.cjs.map +1 -1
- package/core/classes/Migration/index.mjs.map +1 -1
- package/core/classes/ModelFactory.cjs.map +1 -1
- package/core/classes/ModelFactory.mjs.map +1 -1
- package/core/classes/XansqlConfig.cjs.map +1 -1
- package/core/classes/XansqlConfig.mjs.map +1 -1
- package/core/classes/XansqlTransaction.cjs.map +1 -1
- package/core/classes/XansqlTransaction.mjs.map +1 -1
- package/dialect/MysqlDialect.cjs +10 -10
- package/dialect/MysqlDialect.cjs.map +1 -1
- package/dialect/MysqlDialect.mjs +10 -10
- package/dialect/MysqlDialect.mjs.map +1 -1
- package/dialect/PostgresDialect.cjs +41 -41
- package/dialect/PostgresDialect.cjs.map +1 -1
- package/dialect/PostgresDialect.mjs +41 -41
- package/dialect/PostgresDialect.mjs.map +1 -1
- package/dialect/SqliteDialect.cjs.map +1 -1
- package/dialect/SqliteDialect.mjs.map +1 -1
- package/dialect/XansqlBridge/FileInDirectory.cjs.map +1 -1
- package/dialect/XansqlBridge/FileInDirectory.mjs.map +1 -1
- package/dialect/XansqlBridge/XansqlBridgeServer.cjs.map +1 -1
- package/dialect/XansqlBridge/XansqlBridgeServer.mjs.map +1 -1
- package/dialect/XansqlBridge/base.cjs +10 -6
- package/dialect/XansqlBridge/base.cjs.map +1 -1
- package/dialect/XansqlBridge/base.mjs +10 -6
- package/dialect/XansqlBridge/base.mjs.map +1 -1
- package/dialect/XansqlBridge/index.cjs +15 -5
- package/dialect/XansqlBridge/index.cjs.map +1 -1
- package/dialect/XansqlBridge/index.mjs +15 -5
- package/dialect/XansqlBridge/index.mjs.map +1 -1
- package/model/Args/RelationExcuteArgs.cjs.map +1 -1
- package/model/Args/RelationExcuteArgs.mjs.map +1 -1
- package/model/Args/WhereArgs.cjs.map +1 -1
- package/model/Args/WhereArgs.mjs.map +1 -1
- package/model/Base.cjs.map +1 -1
- package/model/Base.mjs.map +1 -1
- package/model/Executer/Aggregate/SelectArgs.cjs.map +1 -1
- package/model/Executer/Aggregate/SelectArgs.mjs.map +1 -1
- package/model/Executer/Aggregate/index.cjs.map +1 -1
- package/model/Executer/Aggregate/index.mjs.map +1 -1
- package/model/Executer/Create/CreateDataArgs.cjs.map +1 -1
- package/model/Executer/Create/CreateDataArgs.mjs.map +1 -1
- package/model/Executer/Create/index.cjs +5 -7
- package/model/Executer/Create/index.cjs.map +1 -1
- package/model/Executer/Create/index.mjs +5 -7
- package/model/Executer/Create/index.mjs.map +1 -1
- package/model/Executer/Delete/index.cjs.map +1 -1
- package/model/Executer/Delete/index.mjs.map +1 -1
- package/model/Executer/Find/DistinctArgs.cjs +5 -5
- package/model/Executer/Find/DistinctArgs.cjs.map +1 -1
- package/model/Executer/Find/DistinctArgs.mjs +5 -5
- package/model/Executer/Find/DistinctArgs.mjs.map +1 -1
- package/model/Executer/Find/LimitArgs.cjs.map +1 -1
- package/model/Executer/Find/LimitArgs.mjs.map +1 -1
- package/model/Executer/Find/OrderByArgs.cjs.map +1 -1
- package/model/Executer/Find/OrderByArgs.mjs.map +1 -1
- package/model/Executer/Find/SelectArgs.cjs.map +1 -1
- package/model/Executer/Find/SelectArgs.mjs.map +1 -1
- package/model/Executer/Find/index.cjs +15 -9
- package/model/Executer/Find/index.cjs.map +1 -1
- package/model/Executer/Find/index.mjs +15 -9
- package/model/Executer/Find/index.mjs.map +1 -1
- package/model/Executer/Update/UpdateDataArgs.cjs.map +1 -1
- package/model/Executer/Update/UpdateDataArgs.mjs.map +1 -1
- package/model/Executer/Update/index.cjs.map +1 -1
- package/model/Executer/Update/index.mjs.map +1 -1
- package/model/Schema.cjs.map +1 -1
- package/model/Schema.mjs.map +1 -1
- package/model/include/ValueFormatter.cjs +0 -4
- package/model/include/ValueFormatter.cjs.map +1 -1
- package/model/include/ValueFormatter.mjs +0 -4
- package/model/include/ValueFormatter.mjs.map +1 -1
- package/model/index.cjs.map +1 -1
- package/model/index.mjs.map +1 -1
- package/package.json +8 -13
- package/readme.md +359 -359
- package/utils/chunker.cjs.map +1 -1
- package/utils/chunker.mjs.map +1 -1
- package/utils/file.cjs.map +1 -1
- package/utils/file.mjs.map +1 -1
- package/utils/index.cjs.map +1 -1
- package/utils/index.mjs.map +1 -1
- package/utils/sha256.cjs.map +1 -1
- package/utils/sha256.mjs.map +1 -1
- package/xt/additional/IP.cjs.map +1 -1
- package/xt/additional/IP.mjs.map +1 -1
- package/xt/additional/Name.cjs.map +1 -1
- package/xt/additional/Name.mjs.map +1 -1
- package/xt/additional/Password.cjs.map +1 -1
- package/xt/additional/Password.mjs.map +1 -1
- package/xt/additional/Phone.cjs.map +1 -1
- package/xt/additional/Phone.mjs.map +1 -1
- package/xt/additional/Photo.cjs.map +1 -1
- package/xt/additional/Photo.mjs.map +1 -1
- package/xt/additional/Slug.cjs.map +1 -1
- package/xt/additional/Slug.mjs.map +1 -1
- package/xt/additional/Url.cjs.map +1 -1
- package/xt/additional/Url.mjs.map +1 -1
- package/xt/additional/Username.cjs.map +1 -1
- package/xt/additional/Username.mjs.map +1 -1
- package/xt/fields/Array.cjs.map +1 -1
- package/xt/fields/Array.mjs.map +1 -1
- package/xt/fields/Boolean.cjs.map +1 -1
- package/xt/fields/Boolean.mjs.map +1 -1
- package/xt/fields/Date.cjs.map +1 -1
- package/xt/fields/Date.mjs.map +1 -1
- package/xt/fields/Enum.cjs.map +1 -1
- package/xt/fields/Enum.mjs.map +1 -1
- package/xt/fields/File.cjs.map +1 -1
- package/xt/fields/File.mjs.map +1 -1
- package/xt/fields/IDField.cjs.map +1 -1
- package/xt/fields/IDField.mjs.map +1 -1
- package/xt/fields/Number.cjs.map +1 -1
- package/xt/fields/Number.mjs.map +1 -1
- package/xt/fields/Object.cjs.map +1 -1
- package/xt/fields/Object.mjs.map +1 -1
- package/xt/fields/Record.cjs.map +1 -1
- package/xt/fields/Record.mjs.map +1 -1
- package/xt/fields/Schema.cjs.map +1 -1
- package/xt/fields/Schema.mjs.map +1 -1
- package/xt/fields/String.cjs.map +1 -1
- package/xt/fields/String.mjs.map +1 -1
- package/xt/fields/Tuple.cjs.map +1 -1
- package/xt/fields/Tuple.mjs.map +1 -1
- package/xt/fields/Union.cjs.map +1 -1
- package/xt/fields/Union.mjs.map +1 -1
- package/xt/index.cjs.map +1 -1
- package/xt/index.mjs.map +1 -1
package/core/Xansql.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Xansql.cjs","sources":["../../src/core/Xansql.ts"],"sourcesContent":["import Model from \"../model\";\nimport { ExecuterResult, XansqlConfigType, XansqlConfigTypeRequired } from \"./types\";\nimport XansqlTransaction from \"./classes/XansqlTransaction\";\nimport XansqlConfig from \"./classes/XansqlConfig\";\nimport ModelFactory from \"./classes/ModelFactory\";\nimport XansqlMigration from \"./classes/Migration\";\nimport EventManager, { EventHandler, EventPayloads } from \"./classes/EventManager\";\nimport XansqlError from \"./XansqlError\";\nimport Schema from \"../model/Schema\";\nimport { XansqlModelHooks } from \"../model/types\";\n\nclass Xansql {\n private _aliases = new Map<string, string>();\n private ModelFactory: ModelFactory;\n private XansqlConfig: XansqlConfig;\n readonly config: XansqlConfigTypeRequired;\n readonly XansqlTransaction: XansqlTransaction;\n readonly EventManager: EventManager\n readonly XansqlMigration: XansqlMigration\n\n constructor(config: XansqlConfigType) {\n this.XansqlConfig = new XansqlConfig(this, config);\n this.config = this.XansqlConfig.parse()\n this.XansqlTransaction = new XansqlTransaction(this);\n this.ModelFactory = new ModelFactory(this);\n\n this.XansqlMigration = new XansqlMigration(this);\n this.EventManager = new EventManager();\n }\n\n get dialect() {\n return this.config.dialect;\n }\n\n get models() {\n return this.ModelFactory.models\n }\n\n clone(config?: Partial<XansqlConfigType>) {\n const self = new XansqlClone({ ...this.config, ...(config || {}) });\n for (let [table, model] of this.models) {\n const schema = new Schema(table, model.schema)\n for (let hook in model.hooks) {\n schema.addHook(hook as any, model.hooks[hook as keyof XansqlModelHooks] as any)\n }\n self.model(schema);\n }\n return self;\n }\n\n private makeAlias(table: string) {\n let wordLength = 1;\n table = table.toLowerCase().replace(/[^a-z0-9_]/g, '_')\n let alias = table.slice(0, wordLength)\n while (true) {\n if (!this._aliases.has(alias) || wordLength > table.length) break;\n wordLength++;\n alias = table.slice(0, wordLength);\n }\n if (this._aliases.has(alias)) {\n throw new XansqlError({\n message: `Cannot create alias for table ${table}, please rename the table to avoid conflicts.`,\n model: table,\n });\n }\n this._aliases.set(table, alias);\n return alias;\n }\n\n _timer: any = null;\n model(schema: Schema): Model {\n const model = new Model(schema.table, schema.schema);\n if (!model.IDColumn) {\n throw new XansqlError({\n message: `Model ${schema.table} must have an ID column.`,\n model: schema.table,\n });\n }\n if (this.ModelFactory.models.has(schema.table)) {\n throw new XansqlError({\n message: `Model for table ${schema.table} already exists.`,\n model: schema.table,\n });\n }\n model.alias = this.makeAlias(schema.table);\n model.xansql = this;\n model.hooks = schema.hooks;\n this.ModelFactory.models.set(schema.table, model);\n\n // this will delay the model formatting to allow multiple models to be added before formatting\n clearTimeout(this._timer);\n this._timer = setTimeout(() => {\n this.ModelFactory.format()\n }, 5);\n return model\n }\n\n getModel(table: string): Model {\n if (!this.models.has(table)) {\n throw new XansqlError({\n message: `Model for table ${table} does not exist.`,\n model: table,\n });\n }\n return this.models.get(table) as Model;\n }\n\n async execute(sql: string): Promise<ExecuterResult> {\n sql = sql.trim().replace(/\\s+/g, ' ');\n return await this.dialect.execute(sql, this) as any\n }\n\n async getRawSchema() {\n return await this.dialect.getSchema(this);\n }\n\n async uploadFile(file: File) {\n if (!this.dialect.file?.upload) {\n throw new XansqlError(`File upload is not supported by the current dialect.`);\n }\n return await this.dialect.file.upload(file, this);\n }\n\n async deleteFile(filename: string) {\n if (!this.dialect.file?.delete) {\n throw new XansqlError(`File delete is not supported by the current dialect.`);\n }\n return await this.dialect.file.delete(filename, this);\n }\n\n async transaction(callback: () => Promise<any>) {\n return await this.XansqlTransaction.transaction(callback);\n }\n\n async migrate(force?: boolean) {\n return await this.XansqlMigration.migrate(force);\n }\n\n async generateMigration() {\n return await this.XansqlMigration.generate();\n }\n\n on<K extends keyof EventPayloads>(event: K, handler: EventHandler<K>) {\n this.EventManager.on(event, handler);\n }\n\n}\n\nclass XansqlClone extends Xansql { }\n\n\nexport default Xansql"],"names":["XansqlConfig","XansqlTransaction","ModelFactory","XansqlMigration","EventManager","Schema","XansqlError","Model"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Xansql.cjs","sources":["../../src/core/Xansql.ts"],"sourcesContent":["import Model from \"../model\";\r\nimport { ExecuterResult, XansqlConfigType, XansqlConfigTypeRequired } from \"./types\";\r\nimport XansqlTransaction from \"./classes/XansqlTransaction\";\r\nimport XansqlConfig from \"./classes/XansqlConfig\";\r\nimport ModelFactory from \"./classes/ModelFactory\";\r\nimport XansqlMigration from \"./classes/Migration\";\r\nimport EventManager, { EventHandler, EventPayloads } from \"./classes/EventManager\";\r\nimport XansqlError from \"./XansqlError\";\r\nimport Schema from \"../model/Schema\";\r\nimport { XansqlModelHooks } from \"../model/types\";\r\n\r\nclass Xansql {\r\n private _aliases = new Map<string, string>();\r\n private ModelFactory: ModelFactory;\r\n private XansqlConfig: XansqlConfig;\r\n readonly config: XansqlConfigTypeRequired;\r\n readonly XansqlTransaction: XansqlTransaction;\r\n readonly EventManager: EventManager\r\n readonly XansqlMigration: XansqlMigration\r\n\r\n constructor(config: XansqlConfigType) {\r\n this.XansqlConfig = new XansqlConfig(this, config);\r\n this.config = this.XansqlConfig.parse()\r\n this.XansqlTransaction = new XansqlTransaction(this);\r\n this.ModelFactory = new ModelFactory(this);\r\n\r\n this.XansqlMigration = new XansqlMigration(this);\r\n this.EventManager = new EventManager();\r\n }\r\n\r\n get dialect() {\r\n return this.config.dialect;\r\n }\r\n\r\n get models() {\r\n return this.ModelFactory.models\r\n }\r\n\r\n clone(config?: Partial<XansqlConfigType>) {\r\n const self = new XansqlClone({ ...this.config, ...(config || {}) });\r\n for (let [table, model] of this.models) {\r\n const schema = new Schema(table, model.schema)\r\n for (let hook in model.hooks) {\r\n schema.addHook(hook as any, model.hooks[hook as keyof XansqlModelHooks] as any)\r\n }\r\n self.model(schema);\r\n }\r\n return self;\r\n }\r\n\r\n private makeAlias(table: string) {\r\n let wordLength = 1;\r\n table = table.toLowerCase().replace(/[^a-z0-9_]/g, '_')\r\n let alias = table.slice(0, wordLength)\r\n while (true) {\r\n if (!this._aliases.has(alias) || wordLength > table.length) break;\r\n wordLength++;\r\n alias = table.slice(0, wordLength);\r\n }\r\n if (this._aliases.has(alias)) {\r\n throw new XansqlError({\r\n message: `Cannot create alias for table ${table}, please rename the table to avoid conflicts.`,\r\n model: table,\r\n });\r\n }\r\n this._aliases.set(table, alias);\r\n return alias;\r\n }\r\n\r\n _timer: any = null;\r\n model(schema: Schema): Model {\r\n const model = new Model(schema.table, schema.schema);\r\n if (!model.IDColumn) {\r\n throw new XansqlError({\r\n message: `Model ${schema.table} must have an ID column.`,\r\n model: schema.table,\r\n });\r\n }\r\n if (this.ModelFactory.models.has(schema.table)) {\r\n throw new XansqlError({\r\n message: `Model for table ${schema.table} already exists.`,\r\n model: schema.table,\r\n });\r\n }\r\n model.alias = this.makeAlias(schema.table);\r\n model.xansql = this;\r\n model.hooks = schema.hooks;\r\n this.ModelFactory.models.set(schema.table, model);\r\n\r\n // this will delay the model formatting to allow multiple models to be added before formatting\r\n clearTimeout(this._timer);\r\n this._timer = setTimeout(() => {\r\n this.ModelFactory.format()\r\n }, 5);\r\n return model\r\n }\r\n\r\n getModel(table: string): Model {\r\n if (!this.models.has(table)) {\r\n throw new XansqlError({\r\n message: `Model for table ${table} does not exist.`,\r\n model: table,\r\n });\r\n }\r\n return this.models.get(table) as Model;\r\n }\r\n\r\n async execute(sql: string): Promise<ExecuterResult> {\r\n sql = sql.trim().replace(/\\s+/g, ' ');\r\n return await this.dialect.execute(sql, this) as any\r\n }\r\n\r\n async getRawSchema() {\r\n return await this.dialect.getSchema(this);\r\n }\r\n\r\n async uploadFile(file: File) {\r\n if (!this.dialect.file?.upload) {\r\n throw new XansqlError(`File upload is not supported by the current dialect.`);\r\n }\r\n return await this.dialect.file.upload(file, this);\r\n }\r\n\r\n async deleteFile(filename: string) {\r\n if (!this.dialect.file?.delete) {\r\n throw new XansqlError(`File delete is not supported by the current dialect.`);\r\n }\r\n return await this.dialect.file.delete(filename, this);\r\n }\r\n\r\n async transaction(callback: () => Promise<any>) {\r\n return await this.XansqlTransaction.transaction(callback);\r\n }\r\n\r\n async migrate(force?: boolean) {\r\n return await this.XansqlMigration.migrate(force);\r\n }\r\n\r\n async generateMigration() {\r\n return await this.XansqlMigration.generate();\r\n }\r\n\r\n on<K extends keyof EventPayloads>(event: K, handler: EventHandler<K>) {\r\n this.EventManager.on(event, handler);\r\n }\r\n\r\n}\r\n\r\nclass XansqlClone extends Xansql { }\r\n\r\n\r\nexport default Xansql"],"names":["XansqlConfig","XansqlTransaction","ModelFactory","XansqlMigration","EventManager","Schema","XansqlError","Model"],"mappings":"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"}
|
package/core/Xansql.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Xansql.mjs","sources":["../../src/core/Xansql.ts"],"sourcesContent":["import Model from \"../model\";\nimport { ExecuterResult, XansqlConfigType, XansqlConfigTypeRequired } from \"./types\";\nimport XansqlTransaction from \"./classes/XansqlTransaction\";\nimport XansqlConfig from \"./classes/XansqlConfig\";\nimport ModelFactory from \"./classes/ModelFactory\";\nimport XansqlMigration from \"./classes/Migration\";\nimport EventManager, { EventHandler, EventPayloads } from \"./classes/EventManager\";\nimport XansqlError from \"./XansqlError\";\nimport Schema from \"../model/Schema\";\nimport { XansqlModelHooks } from \"../model/types\";\n\nclass Xansql {\n private _aliases = new Map<string, string>();\n private ModelFactory: ModelFactory;\n private XansqlConfig: XansqlConfig;\n readonly config: XansqlConfigTypeRequired;\n readonly XansqlTransaction: XansqlTransaction;\n readonly EventManager: EventManager\n readonly XansqlMigration: XansqlMigration\n\n constructor(config: XansqlConfigType) {\n this.XansqlConfig = new XansqlConfig(this, config);\n this.config = this.XansqlConfig.parse()\n this.XansqlTransaction = new XansqlTransaction(this);\n this.ModelFactory = new ModelFactory(this);\n\n this.XansqlMigration = new XansqlMigration(this);\n this.EventManager = new EventManager();\n }\n\n get dialect() {\n return this.config.dialect;\n }\n\n get models() {\n return this.ModelFactory.models\n }\n\n clone(config?: Partial<XansqlConfigType>) {\n const self = new XansqlClone({ ...this.config, ...(config || {}) });\n for (let [table, model] of this.models) {\n const schema = new Schema(table, model.schema)\n for (let hook in model.hooks) {\n schema.addHook(hook as any, model.hooks[hook as keyof XansqlModelHooks] as any)\n }\n self.model(schema);\n }\n return self;\n }\n\n private makeAlias(table: string) {\n let wordLength = 1;\n table = table.toLowerCase().replace(/[^a-z0-9_]/g, '_')\n let alias = table.slice(0, wordLength)\n while (true) {\n if (!this._aliases.has(alias) || wordLength > table.length) break;\n wordLength++;\n alias = table.slice(0, wordLength);\n }\n if (this._aliases.has(alias)) {\n throw new XansqlError({\n message: `Cannot create alias for table ${table}, please rename the table to avoid conflicts.`,\n model: table,\n });\n }\n this._aliases.set(table, alias);\n return alias;\n }\n\n _timer: any = null;\n model(schema: Schema): Model {\n const model = new Model(schema.table, schema.schema);\n if (!model.IDColumn) {\n throw new XansqlError({\n message: `Model ${schema.table} must have an ID column.`,\n model: schema.table,\n });\n }\n if (this.ModelFactory.models.has(schema.table)) {\n throw new XansqlError({\n message: `Model for table ${schema.table} already exists.`,\n model: schema.table,\n });\n }\n model.alias = this.makeAlias(schema.table);\n model.xansql = this;\n model.hooks = schema.hooks;\n this.ModelFactory.models.set(schema.table, model);\n\n // this will delay the model formatting to allow multiple models to be added before formatting\n clearTimeout(this._timer);\n this._timer = setTimeout(() => {\n this.ModelFactory.format()\n }, 5);\n return model\n }\n\n getModel(table: string): Model {\n if (!this.models.has(table)) {\n throw new XansqlError({\n message: `Model for table ${table} does not exist.`,\n model: table,\n });\n }\n return this.models.get(table) as Model;\n }\n\n async execute(sql: string): Promise<ExecuterResult> {\n sql = sql.trim().replace(/\\s+/g, ' ');\n return await this.dialect.execute(sql, this) as any\n }\n\n async getRawSchema() {\n return await this.dialect.getSchema(this);\n }\n\n async uploadFile(file: File) {\n if (!this.dialect.file?.upload) {\n throw new XansqlError(`File upload is not supported by the current dialect.`);\n }\n return await this.dialect.file.upload(file, this);\n }\n\n async deleteFile(filename: string) {\n if (!this.dialect.file?.delete) {\n throw new XansqlError(`File delete is not supported by the current dialect.`);\n }\n return await this.dialect.file.delete(filename, this);\n }\n\n async transaction(callback: () => Promise<any>) {\n return await this.XansqlTransaction.transaction(callback);\n }\n\n async migrate(force?: boolean) {\n return await this.XansqlMigration.migrate(force);\n }\n\n async generateMigration() {\n return await this.XansqlMigration.generate();\n }\n\n on<K extends keyof EventPayloads>(event: K, handler: EventHandler<K>) {\n this.EventManager.on(event, handler);\n }\n\n}\n\nclass XansqlClone extends Xansql { }\n\n\nexport default Xansql"],"names":["XansqlTransaction","ModelFactory"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Xansql.mjs","sources":["../../src/core/Xansql.ts"],"sourcesContent":["import Model from \"../model\";\r\nimport { ExecuterResult, XansqlConfigType, XansqlConfigTypeRequired } from \"./types\";\r\nimport XansqlTransaction from \"./classes/XansqlTransaction\";\r\nimport XansqlConfig from \"./classes/XansqlConfig\";\r\nimport ModelFactory from \"./classes/ModelFactory\";\r\nimport XansqlMigration from \"./classes/Migration\";\r\nimport EventManager, { EventHandler, EventPayloads } from \"./classes/EventManager\";\r\nimport XansqlError from \"./XansqlError\";\r\nimport Schema from \"../model/Schema\";\r\nimport { XansqlModelHooks } from \"../model/types\";\r\n\r\nclass Xansql {\r\n private _aliases = new Map<string, string>();\r\n private ModelFactory: ModelFactory;\r\n private XansqlConfig: XansqlConfig;\r\n readonly config: XansqlConfigTypeRequired;\r\n readonly XansqlTransaction: XansqlTransaction;\r\n readonly EventManager: EventManager\r\n readonly XansqlMigration: XansqlMigration\r\n\r\n constructor(config: XansqlConfigType) {\r\n this.XansqlConfig = new XansqlConfig(this, config);\r\n this.config = this.XansqlConfig.parse()\r\n this.XansqlTransaction = new XansqlTransaction(this);\r\n this.ModelFactory = new ModelFactory(this);\r\n\r\n this.XansqlMigration = new XansqlMigration(this);\r\n this.EventManager = new EventManager();\r\n }\r\n\r\n get dialect() {\r\n return this.config.dialect;\r\n }\r\n\r\n get models() {\r\n return this.ModelFactory.models\r\n }\r\n\r\n clone(config?: Partial<XansqlConfigType>) {\r\n const self = new XansqlClone({ ...this.config, ...(config || {}) });\r\n for (let [table, model] of this.models) {\r\n const schema = new Schema(table, model.schema)\r\n for (let hook in model.hooks) {\r\n schema.addHook(hook as any, model.hooks[hook as keyof XansqlModelHooks] as any)\r\n }\r\n self.model(schema);\r\n }\r\n return self;\r\n }\r\n\r\n private makeAlias(table: string) {\r\n let wordLength = 1;\r\n table = table.toLowerCase().replace(/[^a-z0-9_]/g, '_')\r\n let alias = table.slice(0, wordLength)\r\n while (true) {\r\n if (!this._aliases.has(alias) || wordLength > table.length) break;\r\n wordLength++;\r\n alias = table.slice(0, wordLength);\r\n }\r\n if (this._aliases.has(alias)) {\r\n throw new XansqlError({\r\n message: `Cannot create alias for table ${table}, please rename the table to avoid conflicts.`,\r\n model: table,\r\n });\r\n }\r\n this._aliases.set(table, alias);\r\n return alias;\r\n }\r\n\r\n _timer: any = null;\r\n model(schema: Schema): Model {\r\n const model = new Model(schema.table, schema.schema);\r\n if (!model.IDColumn) {\r\n throw new XansqlError({\r\n message: `Model ${schema.table} must have an ID column.`,\r\n model: schema.table,\r\n });\r\n }\r\n if (this.ModelFactory.models.has(schema.table)) {\r\n throw new XansqlError({\r\n message: `Model for table ${schema.table} already exists.`,\r\n model: schema.table,\r\n });\r\n }\r\n model.alias = this.makeAlias(schema.table);\r\n model.xansql = this;\r\n model.hooks = schema.hooks;\r\n this.ModelFactory.models.set(schema.table, model);\r\n\r\n // this will delay the model formatting to allow multiple models to be added before formatting\r\n clearTimeout(this._timer);\r\n this._timer = setTimeout(() => {\r\n this.ModelFactory.format()\r\n }, 5);\r\n return model\r\n }\r\n\r\n getModel(table: string): Model {\r\n if (!this.models.has(table)) {\r\n throw new XansqlError({\r\n message: `Model for table ${table} does not exist.`,\r\n model: table,\r\n });\r\n }\r\n return this.models.get(table) as Model;\r\n }\r\n\r\n async execute(sql: string): Promise<ExecuterResult> {\r\n sql = sql.trim().replace(/\\s+/g, ' ');\r\n return await this.dialect.execute(sql, this) as any\r\n }\r\n\r\n async getRawSchema() {\r\n return await this.dialect.getSchema(this);\r\n }\r\n\r\n async uploadFile(file: File) {\r\n if (!this.dialect.file?.upload) {\r\n throw new XansqlError(`File upload is not supported by the current dialect.`);\r\n }\r\n return await this.dialect.file.upload(file, this);\r\n }\r\n\r\n async deleteFile(filename: string) {\r\n if (!this.dialect.file?.delete) {\r\n throw new XansqlError(`File delete is not supported by the current dialect.`);\r\n }\r\n return await this.dialect.file.delete(filename, this);\r\n }\r\n\r\n async transaction(callback: () => Promise<any>) {\r\n return await this.XansqlTransaction.transaction(callback);\r\n }\r\n\r\n async migrate(force?: boolean) {\r\n return await this.XansqlMigration.migrate(force);\r\n }\r\n\r\n async generateMigration() {\r\n return await this.XansqlMigration.generate();\r\n }\r\n\r\n on<K extends keyof EventPayloads>(event: K, handler: EventHandler<K>) {\r\n this.EventManager.on(event, handler);\r\n }\r\n\r\n}\r\n\r\nclass XansqlClone extends Xansql { }\r\n\r\n\r\nexport default Xansql"],"names":["XansqlTransaction","ModelFactory"],"mappings":"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"}
|
package/core/XansqlError.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XansqlError.cjs","sources":["../../src/core/XansqlError.ts"],"sourcesContent":["type XanErrorOption = {\n model?: string;\n column?: string;\n message: string;\n}\n\n\nclass XansqlError extends Error {\n model?: string\n column?: string\n\n constructor(opt: XanErrorOption | string) {\n let model = typeof opt === 'string' ? undefined : opt.model;\n let column = typeof opt === 'string' ? undefined : opt.column;\n let message = typeof opt === 'string' ? (opt as string) : opt.message;\n super(message);\n this.name = \"XansqlError\";\n this.model = model;\n this.column = column;\n }\n}\n\nexport default XansqlError;"],"names":[],"mappings":";;AAOA,MAAM,WAAY,SAAQ,KAAK,CAAA;AAI5B,IAAA,WAAA,CAAY,GAA4B,EAAA;AACrC,QAAA,IAAI,KAAK,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,KAAK;AAC3D,QAAA,IAAI,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM;AAC7D,QAAA,IAAI,OAAO,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAI,GAAc,GAAG,GAAG,CAAC,OAAO;QACrE,KAAK,CAAC,OAAO,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,aAAa;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACvB;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"XansqlError.cjs","sources":["../../src/core/XansqlError.ts"],"sourcesContent":["type XanErrorOption = {\r\n model?: string;\r\n column?: string;\r\n message: string;\r\n}\r\n\r\n\r\nclass XansqlError extends Error {\r\n model?: string\r\n column?: string\r\n\r\n constructor(opt: XanErrorOption | string) {\r\n let model = typeof opt === 'string' ? undefined : opt.model;\r\n let column = typeof opt === 'string' ? undefined : opt.column;\r\n let message = typeof opt === 'string' ? (opt as string) : opt.message;\r\n super(message);\r\n this.name = \"XansqlError\";\r\n this.model = model;\r\n this.column = column;\r\n }\r\n}\r\n\r\nexport default XansqlError;"],"names":[],"mappings":";;AAOA,MAAM,WAAY,SAAQ,KAAK,CAAA;AAI5B,IAAA,WAAA,CAAY,GAA4B,EAAA;AACrC,QAAA,IAAI,KAAK,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,KAAK;AAC3D,QAAA,IAAI,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM;AAC7D,QAAA,IAAI,OAAO,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAI,GAAc,GAAG,GAAG,CAAC,OAAO;QACrE,KAAK,CAAC,OAAO,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,aAAa;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACvB;AACF;;;;"}
|
package/core/XansqlError.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XansqlError.mjs","sources":["../../src/core/XansqlError.ts"],"sourcesContent":["type XanErrorOption = {\n model?: string;\n column?: string;\n message: string;\n}\n\n\nclass XansqlError extends Error {\n model?: string\n column?: string\n\n constructor(opt: XanErrorOption | string) {\n let model = typeof opt === 'string' ? undefined : opt.model;\n let column = typeof opt === 'string' ? undefined : opt.column;\n let message = typeof opt === 'string' ? (opt as string) : opt.message;\n super(message);\n this.name = \"XansqlError\";\n this.model = model;\n this.column = column;\n }\n}\n\nexport default XansqlError;"],"names":[],"mappings":"AAOA,MAAM,WAAY,SAAQ,KAAK,CAAA;AAI5B,IAAA,WAAA,CAAY,GAA4B,EAAA;AACrC,QAAA,IAAI,KAAK,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,KAAK;AAC3D,QAAA,IAAI,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM;AAC7D,QAAA,IAAI,OAAO,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAI,GAAc,GAAG,GAAG,CAAC,OAAO;QACrE,KAAK,CAAC,OAAO,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,aAAa;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACvB;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"XansqlError.mjs","sources":["../../src/core/XansqlError.ts"],"sourcesContent":["type XanErrorOption = {\r\n model?: string;\r\n column?: string;\r\n message: string;\r\n}\r\n\r\n\r\nclass XansqlError extends Error {\r\n model?: string\r\n column?: string\r\n\r\n constructor(opt: XanErrorOption | string) {\r\n let model = typeof opt === 'string' ? undefined : opt.model;\r\n let column = typeof opt === 'string' ? undefined : opt.column;\r\n let message = typeof opt === 'string' ? (opt as string) : opt.message;\r\n super(message);\r\n this.name = \"XansqlError\";\r\n this.model = model;\r\n this.column = column;\r\n }\r\n}\r\n\r\nexport default XansqlError;"],"names":[],"mappings":"AAOA,MAAM,WAAY,SAAQ,KAAK,CAAA;AAI5B,IAAA,WAAA,CAAY,GAA4B,EAAA;AACrC,QAAA,IAAI,KAAK,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,KAAK;AAC3D,QAAA,IAAI,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM;AAC7D,QAAA,IAAI,OAAO,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAI,GAAc,GAAG,GAAG,CAAC,OAAO;QACrE,KAAK,CAAC,OAAO,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,aAAa;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACvB;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventManager.cjs","sources":["../../../src/core/classes/EventManager.ts"],"sourcesContent":["import Model from \"../../model\";\nimport { CreateArgsType, DeleteArgsType, FindArgsType, UpdateArgsType } from \"../../model/types\";\n\ntype Result = { [key: string]: any };\n\nexport type EventPayloads = {\n BEFORE_CREATE: { model: Model; args: CreateArgsType };\n BEFORE_UPDATE: { model: Model; args: UpdateArgsType };\n BEFORE_DELETE: { model: Model; args: DeleteArgsType };\n BEFORE_FIND: { model: Model; args: FindArgsType };\n BEFORE_AGGREGATE: { model: Model; args: any };\n\n CREATE: { model: Model; results: Result[]; args: CreateArgsType };\n UPDATE: { model: Model; results: Result[], args: UpdateArgsType };\n DELETE: { model: Model; results: Result[], args: DeleteArgsType };\n FIND: { model: Model; results: Result[], args: FindArgsType };\n AGGREGATE: { model: Model; results: any; args: any };\n\n};\n\n// correct type: handler only gets its OWN event payload\nexport type EventHandler<K extends keyof EventPayloads> = (payload: EventPayloads[K]) => void | Promise<void>;\n\nclass EventManager {\n private events: {\n [K in keyof EventPayloads]?: EventHandler<K>[];\n } = {};\n\n on<K extends keyof EventPayloads>(event: K, handler: EventHandler<K>) {\n if (!this.events[event]) {\n this.events[event] = [];\n }\n this.events[event]!.push(handler);\n return this;\n }\n\n async emit<K extends keyof EventPayloads>(event: K, payload: EventPayloads[K]) {\n const handlers = this.events[event];\n if (!handlers) return this;\n for (const handler of handlers) {\n await handler(payload);\n }\n return this;\n }\n}\n\nexport default EventManager;\n"],"names":[],"mappings":";;AAuBA,MAAM,YAAY,CAAA;AAAlB,IAAA,WAAA,GAAA;QACW,IAAA,CAAA,MAAM,GAEV,EAAE;IAkBT;IAhBG,EAAE,CAAgC,KAAQ,EAAE,OAAwB,EAAA;QACjE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QAC1B;QACA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC;AACjC,QAAA,OAAO,IAAI;IACd;AAEA,IAAA,MAAM,IAAI,CAAgC,KAAQ,EAAE,OAAyB,EAAA;QAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACnC,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI;AAC1B,QAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC7B,YAAA,MAAM,OAAO,CAAC,OAAO,CAAC;QACzB;AACA,QAAA,OAAO,IAAI;IACd;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"EventManager.cjs","sources":["../../../src/core/classes/EventManager.ts"],"sourcesContent":["import Model from \"../../model\";\r\nimport { CreateArgsType, DeleteArgsType, FindArgsType, UpdateArgsType } from \"../../model/types\";\r\n\r\ntype Result = { [key: string]: any };\r\n\r\nexport type EventPayloads = {\r\n BEFORE_CREATE: { model: Model; args: CreateArgsType };\r\n BEFORE_UPDATE: { model: Model; args: UpdateArgsType };\r\n BEFORE_DELETE: { model: Model; args: DeleteArgsType };\r\n BEFORE_FIND: { model: Model; args: FindArgsType };\r\n BEFORE_AGGREGATE: { model: Model; args: any };\r\n\r\n CREATE: { model: Model; results: Result[]; args: CreateArgsType };\r\n UPDATE: { model: Model; results: Result[], args: UpdateArgsType };\r\n DELETE: { model: Model; results: Result[], args: DeleteArgsType };\r\n FIND: { model: Model; results: Result[], args: FindArgsType };\r\n AGGREGATE: { model: Model; results: any; args: any };\r\n\r\n};\r\n\r\n// correct type: handler only gets its OWN event payload\r\nexport type EventHandler<K extends keyof EventPayloads> = (payload: EventPayloads[K]) => void | Promise<void>;\r\n\r\nclass EventManager {\r\n private events: {\r\n [K in keyof EventPayloads]?: EventHandler<K>[];\r\n } = {};\r\n\r\n on<K extends keyof EventPayloads>(event: K, handler: EventHandler<K>) {\r\n if (!this.events[event]) {\r\n this.events[event] = [];\r\n }\r\n this.events[event]!.push(handler);\r\n return this;\r\n }\r\n\r\n async emit<K extends keyof EventPayloads>(event: K, payload: EventPayloads[K]) {\r\n const handlers = this.events[event];\r\n if (!handlers) return this;\r\n for (const handler of handlers) {\r\n await handler(payload);\r\n }\r\n return this;\r\n }\r\n}\r\n\r\nexport default EventManager;\r\n"],"names":[],"mappings":";;AAuBA,MAAM,YAAY,CAAA;AAAlB,IAAA,WAAA,GAAA;QACW,IAAA,CAAA,MAAM,GAEV,EAAE;IAkBT;IAhBG,EAAE,CAAgC,KAAQ,EAAE,OAAwB,EAAA;QACjE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QAC1B;QACA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC;AACjC,QAAA,OAAO,IAAI;IACd;AAEA,IAAA,MAAM,IAAI,CAAgC,KAAQ,EAAE,OAAyB,EAAA;QAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACnC,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI;AAC1B,QAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC7B,YAAA,MAAM,OAAO,CAAC,OAAO,CAAC;QACzB;AACA,QAAA,OAAO,IAAI;IACd;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventManager.mjs","sources":["../../../src/core/classes/EventManager.ts"],"sourcesContent":["import Model from \"../../model\";\nimport { CreateArgsType, DeleteArgsType, FindArgsType, UpdateArgsType } from \"../../model/types\";\n\ntype Result = { [key: string]: any };\n\nexport type EventPayloads = {\n BEFORE_CREATE: { model: Model; args: CreateArgsType };\n BEFORE_UPDATE: { model: Model; args: UpdateArgsType };\n BEFORE_DELETE: { model: Model; args: DeleteArgsType };\n BEFORE_FIND: { model: Model; args: FindArgsType };\n BEFORE_AGGREGATE: { model: Model; args: any };\n\n CREATE: { model: Model; results: Result[]; args: CreateArgsType };\n UPDATE: { model: Model; results: Result[], args: UpdateArgsType };\n DELETE: { model: Model; results: Result[], args: DeleteArgsType };\n FIND: { model: Model; results: Result[], args: FindArgsType };\n AGGREGATE: { model: Model; results: any; args: any };\n\n};\n\n// correct type: handler only gets its OWN event payload\nexport type EventHandler<K extends keyof EventPayloads> = (payload: EventPayloads[K]) => void | Promise<void>;\n\nclass EventManager {\n private events: {\n [K in keyof EventPayloads]?: EventHandler<K>[];\n } = {};\n\n on<K extends keyof EventPayloads>(event: K, handler: EventHandler<K>) {\n if (!this.events[event]) {\n this.events[event] = [];\n }\n this.events[event]!.push(handler);\n return this;\n }\n\n async emit<K extends keyof EventPayloads>(event: K, payload: EventPayloads[K]) {\n const handlers = this.events[event];\n if (!handlers) return this;\n for (const handler of handlers) {\n await handler(payload);\n }\n return this;\n }\n}\n\nexport default EventManager;\n"],"names":[],"mappings":"AAuBA,MAAM,YAAY,CAAA;AAAlB,IAAA,WAAA,GAAA;QACW,IAAA,CAAA,MAAM,GAEV,EAAE;IAkBT;IAhBG,EAAE,CAAgC,KAAQ,EAAE,OAAwB,EAAA;QACjE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QAC1B;QACA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC;AACjC,QAAA,OAAO,IAAI;IACd;AAEA,IAAA,MAAM,IAAI,CAAgC,KAAQ,EAAE,OAAyB,EAAA;QAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACnC,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI;AAC1B,QAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC7B,YAAA,MAAM,OAAO,CAAC,OAAO,CAAC;QACzB;AACA,QAAA,OAAO,IAAI;IACd;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"EventManager.mjs","sources":["../../../src/core/classes/EventManager.ts"],"sourcesContent":["import Model from \"../../model\";\r\nimport { CreateArgsType, DeleteArgsType, FindArgsType, UpdateArgsType } from \"../../model/types\";\r\n\r\ntype Result = { [key: string]: any };\r\n\r\nexport type EventPayloads = {\r\n BEFORE_CREATE: { model: Model; args: CreateArgsType };\r\n BEFORE_UPDATE: { model: Model; args: UpdateArgsType };\r\n BEFORE_DELETE: { model: Model; args: DeleteArgsType };\r\n BEFORE_FIND: { model: Model; args: FindArgsType };\r\n BEFORE_AGGREGATE: { model: Model; args: any };\r\n\r\n CREATE: { model: Model; results: Result[]; args: CreateArgsType };\r\n UPDATE: { model: Model; results: Result[], args: UpdateArgsType };\r\n DELETE: { model: Model; results: Result[], args: DeleteArgsType };\r\n FIND: { model: Model; results: Result[], args: FindArgsType };\r\n AGGREGATE: { model: Model; results: any; args: any };\r\n\r\n};\r\n\r\n// correct type: handler only gets its OWN event payload\r\nexport type EventHandler<K extends keyof EventPayloads> = (payload: EventPayloads[K]) => void | Promise<void>;\r\n\r\nclass EventManager {\r\n private events: {\r\n [K in keyof EventPayloads]?: EventHandler<K>[];\r\n } = {};\r\n\r\n on<K extends keyof EventPayloads>(event: K, handler: EventHandler<K>) {\r\n if (!this.events[event]) {\r\n this.events[event] = [];\r\n }\r\n this.events[event]!.push(handler);\r\n return this;\r\n }\r\n\r\n async emit<K extends keyof EventPayloads>(event: K, payload: EventPayloads[K]) {\r\n const handlers = this.events[event];\r\n if (!handlers) return this;\r\n for (const handler of handlers) {\r\n await handler(payload);\r\n }\r\n return this;\r\n }\r\n}\r\n\r\nexport default EventManager;\r\n"],"names":[],"mappings":"AAuBA,MAAM,YAAY,CAAA;AAAlB,IAAA,WAAA,GAAA;QACW,IAAA,CAAA,MAAM,GAEV,EAAE;IAkBT;IAhBG,EAAE,CAAgC,KAAQ,EAAE,OAAwB,EAAA;QACjE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QAC1B;QACA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC;AACjC,QAAA,OAAO,IAAI;IACd;AAEA,IAAA,MAAM,IAAI,CAAgC,KAAQ,EAAE,OAAyB,EAAA;QAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACnC,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI;AAC1B,QAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC7B,YAAA,MAAM,OAAO,CAAC,OAAO,CAAC;QACzB;AACA,QAAA,OAAO,IAAI;IACd;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ForeignInfo.cjs","sources":["../../../src/core/classes/ForeignInfo.ts"],"sourcesContent":["import Model from \"../../model\";\nimport { iof } from \"../../utils\";\nimport XqlArray from \"../../xt/fields/Array\";\nimport XqlSchema from \"../../xt/fields/Schema\";\nimport { XqlFields } from \"../../xt/types\";\nimport XansqlError from \"../XansqlError\";\n\n\nexport type ForeignInfoType = {\n table: string\n column: string\n relation: {\n main: string\n target: string\n }\n sql: string\n}\n/**\n * Foreign Key Class\n * @description This class is used to handle foreign key relationships between models\n * @example\n * const foreignInfo = Foreign.info(model, column);\n * console.log(foreignInfo);\n */\nclass Foreign {\n\n static is(field: XqlFields) {\n return this.isArray(field) || this.isSchema(field)\n }\n\n static isArray(field: XqlFields) {\n return iof(field, XqlArray) && this.isSchema((field as any).type)\n }\n\n static isSchema(field: XqlFields) {\n return iof(field, XqlSchema)\n }\n\n static get(model: Model, column: string): ForeignInfoType {\n let table = model.table\n let schema = model.schema\n let field: any = schema[column]\n\n if (this.isArray(field)) {\n const foreignType = field.type as XqlSchema;\n return {\n table: foreignType.table,\n column: foreignType.column,\n relation: {\n main: foreignType.column,\n target: model.IDColumn,\n },\n sql: `${foreignType.table}.${foreignType.column} = ${model.table}.${model.IDColumn}`\n }\n } else if (this.isSchema(field)) {\n const FModel = model.xansql.getModel(field.table)\n return {\n table: field.table,\n column: field.column,\n relation: {\n main: FModel.IDColumn,\n target: column\n },\n sql: `${field.table}.${FModel.IDColumn} = ${model.table}.${column}`\n }\n }\n throw new XansqlError({\n message: `Field ${column} in model ${model.table} is not a foreign key.`,\n model: model.table,\n });\n }\n\n}\n\nexport default Foreign"],"names":["iof","XqlArray","XqlSchema","XansqlError"],"mappings":";;;;;;;AAiBA;;;;;;AAMG;AACH,MAAM,OAAO,CAAA;IAEV,OAAO,EAAE,CAAC,KAAgB,EAAA;AACvB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACrD;IAEA,OAAO,OAAO,CAAC,KAAgB,EAAA;AAC5B,QAAA,OAAOA,eAAG,CAAC,KAAK,EAAEC,eAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAE,KAAa,CAAC,IAAI,CAAC;IACpE;IAEA,OAAO,QAAQ,CAAC,KAAgB,EAAA;AAC7B,QAAA,OAAOD,eAAG,CAAC,KAAK,EAAEE,gBAAS,CAAC;IAC/B;AAEA,IAAA,OAAO,GAAG,CAAC,KAAY,EAAE,MAAc,EAAA;AACpC,QAAY,KAAK,CAAC;AAClB,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;AACzB,QAAA,IAAI,KAAK,GAAQ,MAAM,CAAC,MAAM,CAAC;AAE/B,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,MAAM,WAAW,GAAG,KAAK,CAAC,IAAiB;YAC3C,OAAO;gBACJ,KAAK,EAAE,WAAW,CAAC,KAAK;gBACxB,MAAM,EAAE,WAAW,CAAC,MAAM;AAC1B,gBAAA,QAAQ,EAAE;oBACP,IAAI,EAAE,WAAW,CAAC,MAAM;oBACxB,MAAM,EAAE,KAAK,CAAC,QAAQ;AACxB,iBAAA;AACD,gBAAA,GAAG,EAAE,CAAA,EAAG,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,MAAM,CAAA,GAAA,EAAM,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAA;aACpF;QACJ;AAAO,aAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC9B,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;YACjD,OAAO;gBACJ,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;AACpB,gBAAA,QAAQ,EAAE;oBACP,IAAI,EAAE,MAAM,CAAC,QAAQ;AACrB,oBAAA,MAAM,EAAE;AACV,iBAAA;AACD,gBAAA,GAAG,EAAE,CAAA,EAAG,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAC,QAAQ,MAAM,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA;aACnE;QACJ;QACA,MAAM,IAAIC,gBAAW,CAAC;AACnB,YAAA,OAAO,EAAE,CAAA,MAAA,EAAS,MAAM,aAAa,KAAK,CAAC,KAAK,CAAA,sBAAA,CAAwB;YACxE,KAAK,EAAE,KAAK,CAAC,KAAK;AACpB,SAAA,CAAC;IACL;AAEF;;;;"}
|
|
1
|
+
{"version":3,"file":"ForeignInfo.cjs","sources":["../../../src/core/classes/ForeignInfo.ts"],"sourcesContent":["import Model from \"../../model\";\r\nimport { iof } from \"../../utils\";\r\nimport XqlArray from \"../../xt/fields/Array\";\r\nimport XqlSchema from \"../../xt/fields/Schema\";\r\nimport { XqlFields } from \"../../xt/types\";\r\nimport XansqlError from \"../XansqlError\";\r\n\r\n\r\nexport type ForeignInfoType = {\r\n table: string\r\n column: string\r\n relation: {\r\n main: string\r\n target: string\r\n }\r\n sql: string\r\n}\r\n/**\r\n * Foreign Key Class\r\n * @description This class is used to handle foreign key relationships between models\r\n * @example\r\n * const foreignInfo = Foreign.info(model, column);\r\n * console.log(foreignInfo);\r\n */\r\nclass Foreign {\r\n\r\n static is(field: XqlFields) {\r\n return this.isArray(field) || this.isSchema(field)\r\n }\r\n\r\n static isArray(field: XqlFields) {\r\n return iof(field, XqlArray) && this.isSchema((field as any).type)\r\n }\r\n\r\n static isSchema(field: XqlFields) {\r\n return iof(field, XqlSchema)\r\n }\r\n\r\n static get(model: Model, column: string): ForeignInfoType {\r\n let table = model.table\r\n let schema = model.schema\r\n let field: any = schema[column]\r\n\r\n if (this.isArray(field)) {\r\n const foreignType = field.type as XqlSchema;\r\n return {\r\n table: foreignType.table,\r\n column: foreignType.column,\r\n relation: {\r\n main: foreignType.column,\r\n target: model.IDColumn,\r\n },\r\n sql: `${foreignType.table}.${foreignType.column} = ${model.table}.${model.IDColumn}`\r\n }\r\n } else if (this.isSchema(field)) {\r\n const FModel = model.xansql.getModel(field.table)\r\n return {\r\n table: field.table,\r\n column: field.column,\r\n relation: {\r\n main: FModel.IDColumn,\r\n target: column\r\n },\r\n sql: `${field.table}.${FModel.IDColumn} = ${model.table}.${column}`\r\n }\r\n }\r\n throw new XansqlError({\r\n message: `Field ${column} in model ${model.table} is not a foreign key.`,\r\n model: model.table,\r\n });\r\n }\r\n\r\n}\r\n\r\nexport default Foreign"],"names":["iof","XqlArray","XqlSchema","XansqlError"],"mappings":";;;;;;;AAiBA;;;;;;AAMG;AACH,MAAM,OAAO,CAAA;IAEV,OAAO,EAAE,CAAC,KAAgB,EAAA;AACvB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACrD;IAEA,OAAO,OAAO,CAAC,KAAgB,EAAA;AAC5B,QAAA,OAAOA,eAAG,CAAC,KAAK,EAAEC,eAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAE,KAAa,CAAC,IAAI,CAAC;IACpE;IAEA,OAAO,QAAQ,CAAC,KAAgB,EAAA;AAC7B,QAAA,OAAOD,eAAG,CAAC,KAAK,EAAEE,gBAAS,CAAC;IAC/B;AAEA,IAAA,OAAO,GAAG,CAAC,KAAY,EAAE,MAAc,EAAA;AACpC,QAAY,KAAK,CAAC;AAClB,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;AACzB,QAAA,IAAI,KAAK,GAAQ,MAAM,CAAC,MAAM,CAAC;AAE/B,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,MAAM,WAAW,GAAG,KAAK,CAAC,IAAiB;YAC3C,OAAO;gBACJ,KAAK,EAAE,WAAW,CAAC,KAAK;gBACxB,MAAM,EAAE,WAAW,CAAC,MAAM;AAC1B,gBAAA,QAAQ,EAAE;oBACP,IAAI,EAAE,WAAW,CAAC,MAAM;oBACxB,MAAM,EAAE,KAAK,CAAC,QAAQ;AACxB,iBAAA;AACD,gBAAA,GAAG,EAAE,CAAA,EAAG,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,MAAM,CAAA,GAAA,EAAM,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAA;aACpF;QACJ;AAAO,aAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC9B,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;YACjD,OAAO;gBACJ,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;AACpB,gBAAA,QAAQ,EAAE;oBACP,IAAI,EAAE,MAAM,CAAC,QAAQ;AACrB,oBAAA,MAAM,EAAE;AACV,iBAAA;AACD,gBAAA,GAAG,EAAE,CAAA,EAAG,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAC,QAAQ,MAAM,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA;aACnE;QACJ;QACA,MAAM,IAAIC,gBAAW,CAAC;AACnB,YAAA,OAAO,EAAE,CAAA,MAAA,EAAS,MAAM,aAAa,KAAK,CAAC,KAAK,CAAA,sBAAA,CAAwB;YACxE,KAAK,EAAE,KAAK,CAAC,KAAK;AACpB,SAAA,CAAC;IACL;AAEF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ForeignInfo.mjs","sources":["../../../src/core/classes/ForeignInfo.ts"],"sourcesContent":["import Model from \"../../model\";\nimport { iof } from \"../../utils\";\nimport XqlArray from \"../../xt/fields/Array\";\nimport XqlSchema from \"../../xt/fields/Schema\";\nimport { XqlFields } from \"../../xt/types\";\nimport XansqlError from \"../XansqlError\";\n\n\nexport type ForeignInfoType = {\n table: string\n column: string\n relation: {\n main: string\n target: string\n }\n sql: string\n}\n/**\n * Foreign Key Class\n * @description This class is used to handle foreign key relationships between models\n * @example\n * const foreignInfo = Foreign.info(model, column);\n * console.log(foreignInfo);\n */\nclass Foreign {\n\n static is(field: XqlFields) {\n return this.isArray(field) || this.isSchema(field)\n }\n\n static isArray(field: XqlFields) {\n return iof(field, XqlArray) && this.isSchema((field as any).type)\n }\n\n static isSchema(field: XqlFields) {\n return iof(field, XqlSchema)\n }\n\n static get(model: Model, column: string): ForeignInfoType {\n let table = model.table\n let schema = model.schema\n let field: any = schema[column]\n\n if (this.isArray(field)) {\n const foreignType = field.type as XqlSchema;\n return {\n table: foreignType.table,\n column: foreignType.column,\n relation: {\n main: foreignType.column,\n target: model.IDColumn,\n },\n sql: `${foreignType.table}.${foreignType.column} = ${model.table}.${model.IDColumn}`\n }\n } else if (this.isSchema(field)) {\n const FModel = model.xansql.getModel(field.table)\n return {\n table: field.table,\n column: field.column,\n relation: {\n main: FModel.IDColumn,\n target: column\n },\n sql: `${field.table}.${FModel.IDColumn} = ${model.table}.${column}`\n }\n }\n throw new XansqlError({\n message: `Field ${column} in model ${model.table} is not a foreign key.`,\n model: model.table,\n });\n }\n\n}\n\nexport default Foreign"],"names":[],"mappings":";;;;;AAiBA;;;;;;AAMG;AACH,MAAM,OAAO,CAAA;IAEV,OAAO,EAAE,CAAC,KAAgB,EAAA;AACvB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACrD;IAEA,OAAO,OAAO,CAAC,KAAgB,EAAA;AAC5B,QAAA,OAAO,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAE,KAAa,CAAC,IAAI,CAAC;IACpE;IAEA,OAAO,QAAQ,CAAC,KAAgB,EAAA;AAC7B,QAAA,OAAO,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC;IAC/B;AAEA,IAAA,OAAO,GAAG,CAAC,KAAY,EAAE,MAAc,EAAA;AACpC,QAAY,KAAK,CAAC;AAClB,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;AACzB,QAAA,IAAI,KAAK,GAAQ,MAAM,CAAC,MAAM,CAAC;AAE/B,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,MAAM,WAAW,GAAG,KAAK,CAAC,IAAiB;YAC3C,OAAO;gBACJ,KAAK,EAAE,WAAW,CAAC,KAAK;gBACxB,MAAM,EAAE,WAAW,CAAC,MAAM;AAC1B,gBAAA,QAAQ,EAAE;oBACP,IAAI,EAAE,WAAW,CAAC,MAAM;oBACxB,MAAM,EAAE,KAAK,CAAC,QAAQ;AACxB,iBAAA;AACD,gBAAA,GAAG,EAAE,CAAA,EAAG,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,MAAM,CAAA,GAAA,EAAM,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAA;aACpF;QACJ;AAAO,aAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC9B,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;YACjD,OAAO;gBACJ,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;AACpB,gBAAA,QAAQ,EAAE;oBACP,IAAI,EAAE,MAAM,CAAC,QAAQ;AACrB,oBAAA,MAAM,EAAE;AACV,iBAAA;AACD,gBAAA,GAAG,EAAE,CAAA,EAAG,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAC,QAAQ,MAAM,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA;aACnE;QACJ;QACA,MAAM,IAAI,WAAW,CAAC;AACnB,YAAA,OAAO,EAAE,CAAA,MAAA,EAAS,MAAM,aAAa,KAAK,CAAC,KAAK,CAAA,sBAAA,CAAwB;YACxE,KAAK,EAAE,KAAK,CAAC,KAAK;AACpB,SAAA,CAAC;IACL;AAEF;;;;"}
|
|
1
|
+
{"version":3,"file":"ForeignInfo.mjs","sources":["../../../src/core/classes/ForeignInfo.ts"],"sourcesContent":["import Model from \"../../model\";\r\nimport { iof } from \"../../utils\";\r\nimport XqlArray from \"../../xt/fields/Array\";\r\nimport XqlSchema from \"../../xt/fields/Schema\";\r\nimport { XqlFields } from \"../../xt/types\";\r\nimport XansqlError from \"../XansqlError\";\r\n\r\n\r\nexport type ForeignInfoType = {\r\n table: string\r\n column: string\r\n relation: {\r\n main: string\r\n target: string\r\n }\r\n sql: string\r\n}\r\n/**\r\n * Foreign Key Class\r\n * @description This class is used to handle foreign key relationships between models\r\n * @example\r\n * const foreignInfo = Foreign.info(model, column);\r\n * console.log(foreignInfo);\r\n */\r\nclass Foreign {\r\n\r\n static is(field: XqlFields) {\r\n return this.isArray(field) || this.isSchema(field)\r\n }\r\n\r\n static isArray(field: XqlFields) {\r\n return iof(field, XqlArray) && this.isSchema((field as any).type)\r\n }\r\n\r\n static isSchema(field: XqlFields) {\r\n return iof(field, XqlSchema)\r\n }\r\n\r\n static get(model: Model, column: string): ForeignInfoType {\r\n let table = model.table\r\n let schema = model.schema\r\n let field: any = schema[column]\r\n\r\n if (this.isArray(field)) {\r\n const foreignType = field.type as XqlSchema;\r\n return {\r\n table: foreignType.table,\r\n column: foreignType.column,\r\n relation: {\r\n main: foreignType.column,\r\n target: model.IDColumn,\r\n },\r\n sql: `${foreignType.table}.${foreignType.column} = ${model.table}.${model.IDColumn}`\r\n }\r\n } else if (this.isSchema(field)) {\r\n const FModel = model.xansql.getModel(field.table)\r\n return {\r\n table: field.table,\r\n column: field.column,\r\n relation: {\r\n main: FModel.IDColumn,\r\n target: column\r\n },\r\n sql: `${field.table}.${FModel.IDColumn} = ${model.table}.${column}`\r\n }\r\n }\r\n throw new XansqlError({\r\n message: `Field ${column} in model ${model.table} is not a foreign key.`,\r\n model: model.table,\r\n });\r\n }\r\n\r\n}\r\n\r\nexport default Foreign"],"names":[],"mappings":";;;;;AAiBA;;;;;;AAMG;AACH,MAAM,OAAO,CAAA;IAEV,OAAO,EAAE,CAAC,KAAgB,EAAA;AACvB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACrD;IAEA,OAAO,OAAO,CAAC,KAAgB,EAAA;AAC5B,QAAA,OAAO,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAE,KAAa,CAAC,IAAI,CAAC;IACpE;IAEA,OAAO,QAAQ,CAAC,KAAgB,EAAA;AAC7B,QAAA,OAAO,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC;IAC/B;AAEA,IAAA,OAAO,GAAG,CAAC,KAAY,EAAE,MAAc,EAAA;AACpC,QAAY,KAAK,CAAC;AAClB,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;AACzB,QAAA,IAAI,KAAK,GAAQ,MAAM,CAAC,MAAM,CAAC;AAE/B,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,MAAM,WAAW,GAAG,KAAK,CAAC,IAAiB;YAC3C,OAAO;gBACJ,KAAK,EAAE,WAAW,CAAC,KAAK;gBACxB,MAAM,EAAE,WAAW,CAAC,MAAM;AAC1B,gBAAA,QAAQ,EAAE;oBACP,IAAI,EAAE,WAAW,CAAC,MAAM;oBACxB,MAAM,EAAE,KAAK,CAAC,QAAQ;AACxB,iBAAA;AACD,gBAAA,GAAG,EAAE,CAAA,EAAG,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,MAAM,CAAA,GAAA,EAAM,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAA;aACpF;QACJ;AAAO,aAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC9B,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;YACjD,OAAO;gBACJ,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;AACpB,gBAAA,QAAQ,EAAE;oBACP,IAAI,EAAE,MAAM,CAAC,QAAQ;AACrB,oBAAA,MAAM,EAAE;AACV,iBAAA;AACD,gBAAA,GAAG,EAAE,CAAA,EAAG,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAC,QAAQ,MAAM,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA;aACnE;QACJ;QACA,MAAM,IAAI,WAAW,CAAC;AACnB,YAAA,OAAO,EAAE,CAAA,MAAA,EAAS,MAAM,aAAa,KAAK,CAAC,KAAK,CAAA,sBAAA,CAAwB;YACxE,KAAK,EAAE,KAAK,CAAC,KAAK;AACpB,SAAA,CAAC;IACL;AAEF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ForeingMigration.cjs","sources":["../../../../src/core/classes/Migration/ForeingMigration.ts"],"sourcesContent":["import { quote } from \"../../../utils\";\nimport Foreign from \"../ForeignInfo\";\nimport Xansql from \"../../Xansql\";\n\n\nclass ForeignKeyMigration {\n xansql: Xansql;\n\n constructor(xansql: Xansql) {\n this.xansql = xansql;\n }\n\n identifier(table: string, column: string) {\n return `fk_${table}_${column}`;\n }\n\n foreigns() {\n const models = this.xansql.models;\n let statements: string[] = [];\n\n for (const model of models.values()) {\n const schema = model?.schema || {};\n for (const column in schema) {\n const field = schema[column];\n if (Foreign.isSchema(field)) {\n const fkSql = this.buildCreate(model.table, column);\n statements.push(fkSql);\n }\n }\n }\n\n return statements;\n }\n\n buildCreate(table: string, column: string, refTable: string = '', refColumn: string = '') {\n const engine = this.xansql.config.dialect.engine;\n const model = this.xansql.models.get(table);\n const schema = model?.schema || {};\n const field = schema[column];\n const meta = field.meta || {};\n const isOptional = meta.nullable || meta.optional;\n const fk = this.identifier(table, column);\n\n let sql = `CONSTRAINT ${fk} FOREIGN KEY (${quote(engine, column)}) REFERENCES ${quote(engine, refTable)}(${quote(engine, refColumn)})`;\n if (isOptional) {\n sql += ` ON DELETE SET NULL ON UPDATE CASCADE`;\n } else {\n sql += ` ON DELETE CASCADE ON UPDATE CASCADE`;\n }\n\n return sql;\n }\n\n buildDrop(table: string, column: string) {\n const engine = this.xansql.config.dialect.engine;\n const fkName = this.identifier(table, column);\n let sql = '';\n if (engine === 'postgresql' || engine === 'sqlite') {\n sql += `ALTER TABLE ${table} DROP CONSTRAINT IF EXISTS ${fkName};`;\n } else {\n sql += `ALTER TABLE ${table} DROP FOREIGN KEY IF EXISTS ${fkName};`;\n }\n return sql;\n }\n}\n\nexport default ForeignKeyMigration;"],"names":["Foreign","quote"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ForeingMigration.cjs","sources":["../../../../src/core/classes/Migration/ForeingMigration.ts"],"sourcesContent":["import { quote } from \"../../../utils\";\r\nimport Foreign from \"../ForeignInfo\";\r\nimport Xansql from \"../../Xansql\";\r\n\r\n\r\nclass ForeignKeyMigration {\r\n xansql: Xansql;\r\n\r\n constructor(xansql: Xansql) {\r\n this.xansql = xansql;\r\n }\r\n\r\n identifier(table: string, column: string) {\r\n return `fk_${table}_${column}`;\r\n }\r\n\r\n foreigns() {\r\n const models = this.xansql.models;\r\n let statements: string[] = [];\r\n\r\n for (const model of models.values()) {\r\n const schema = model?.schema || {};\r\n for (const column in schema) {\r\n const field = schema[column];\r\n if (Foreign.isSchema(field)) {\r\n const fkSql = this.buildCreate(model.table, column);\r\n statements.push(fkSql);\r\n }\r\n }\r\n }\r\n\r\n return statements;\r\n }\r\n\r\n buildCreate(table: string, column: string, refTable: string = '', refColumn: string = '') {\r\n const engine = this.xansql.config.dialect.engine;\r\n const model = this.xansql.models.get(table);\r\n const schema = model?.schema || {};\r\n const field = schema[column];\r\n const meta = field.meta || {};\r\n const isOptional = meta.nullable || meta.optional;\r\n const fk = this.identifier(table, column);\r\n\r\n let sql = `CONSTRAINT ${fk} FOREIGN KEY (${quote(engine, column)}) REFERENCES ${quote(engine, refTable)}(${quote(engine, refColumn)})`;\r\n if (isOptional) {\r\n sql += ` ON DELETE SET NULL ON UPDATE CASCADE`;\r\n } else {\r\n sql += ` ON DELETE CASCADE ON UPDATE CASCADE`;\r\n }\r\n\r\n return sql;\r\n }\r\n\r\n buildDrop(table: string, column: string) {\r\n const engine = this.xansql.config.dialect.engine;\r\n const fkName = this.identifier(table, column);\r\n let sql = '';\r\n if (engine === 'postgresql' || engine === 'sqlite') {\r\n sql += `ALTER TABLE ${table} DROP CONSTRAINT IF EXISTS ${fkName};`;\r\n } else {\r\n sql += `ALTER TABLE ${table} DROP FOREIGN KEY IF EXISTS ${fkName};`;\r\n }\r\n return sql;\r\n }\r\n}\r\n\r\nexport default ForeignKeyMigration;"],"names":["Foreign","quote"],"mappings":";;;;;AAKA,MAAM,mBAAmB,CAAA;AAGtB,IAAA,WAAA,CAAY,MAAc,EAAA;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACvB;IAEA,UAAU,CAAC,KAAa,EAAE,MAAc,EAAA;AACrC,QAAA,OAAO,CAAA,GAAA,EAAM,KAAK,CAAA,CAAA,EAAI,MAAM,EAAE;IACjC;IAEA,QAAQ,GAAA;AACL,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;QACjC,IAAI,UAAU,GAAa,EAAE;QAE7B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE;AAClC,YAAA,MAAM,MAAM,GAAG,CAAA,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,MAAA,GAAA,MAAA,GAAL,KAAK,CAAE,MAAM,KAAI,EAAE;AAClC,YAAA,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE;AAC1B,gBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;AAC5B,gBAAA,IAAIA,wBAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC1B,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC;AACnD,oBAAA,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;gBACzB;YACH;QACH;AAEA,QAAA,OAAO,UAAU;IACpB;IAEA,WAAW,CAAC,KAAa,EAAE,MAAc,EAAE,QAAA,GAAmB,EAAE,EAAE,SAAA,GAAoB,EAAE,EAAA;QACrF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM;AAChD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3C,QAAA,MAAM,MAAM,GAAG,CAAA,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,MAAA,GAAA,MAAA,GAAL,KAAK,CAAE,MAAM,KAAI,EAAE;AAClC,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;AAC5B,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;QACjD,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC;QAEzC,IAAI,GAAG,GAAG,CAAA,WAAA,EAAc,EAAE,CAAA,cAAA,EAAiBC,iBAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA,aAAA,EAAgBA,iBAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA,CAAA,EAAIA,iBAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA,CAAA,CAAG;QACtI,IAAI,UAAU,EAAE;YACb,GAAG,IAAI,uCAAuC;QACjD;aAAO;YACJ,GAAG,IAAI,sCAAsC;QAChD;AAEA,QAAA,OAAO,GAAG;IACb;IAEA,SAAS,CAAC,KAAa,EAAE,MAAc,EAAA;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC;QAC7C,IAAI,GAAG,GAAG,EAAE;QACZ,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,QAAQ,EAAE;AACjD,YAAA,GAAG,IAAI,CAAA,YAAA,EAAe,KAAK,CAAA,2BAAA,EAA8B,MAAM,GAAG;QACrE;aAAO;AACJ,YAAA,GAAG,IAAI,CAAA,YAAA,EAAe,KAAK,CAAA,4BAAA,EAA+B,MAAM,GAAG;QACtE;AACA,QAAA,OAAO,GAAG;IACb;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ForeingMigration.mjs","sources":["../../../../src/core/classes/Migration/ForeingMigration.ts"],"sourcesContent":["import { quote } from \"../../../utils\";\nimport Foreign from \"../ForeignInfo\";\nimport Xansql from \"../../Xansql\";\n\n\nclass ForeignKeyMigration {\n xansql: Xansql;\n\n constructor(xansql: Xansql) {\n this.xansql = xansql;\n }\n\n identifier(table: string, column: string) {\n return `fk_${table}_${column}`;\n }\n\n foreigns() {\n const models = this.xansql.models;\n let statements: string[] = [];\n\n for (const model of models.values()) {\n const schema = model?.schema || {};\n for (const column in schema) {\n const field = schema[column];\n if (Foreign.isSchema(field)) {\n const fkSql = this.buildCreate(model.table, column);\n statements.push(fkSql);\n }\n }\n }\n\n return statements;\n }\n\n buildCreate(table: string, column: string, refTable: string = '', refColumn: string = '') {\n const engine = this.xansql.config.dialect.engine;\n const model = this.xansql.models.get(table);\n const schema = model?.schema || {};\n const field = schema[column];\n const meta = field.meta || {};\n const isOptional = meta.nullable || meta.optional;\n const fk = this.identifier(table, column);\n\n let sql = `CONSTRAINT ${fk} FOREIGN KEY (${quote(engine, column)}) REFERENCES ${quote(engine, refTable)}(${quote(engine, refColumn)})`;\n if (isOptional) {\n sql += ` ON DELETE SET NULL ON UPDATE CASCADE`;\n } else {\n sql += ` ON DELETE CASCADE ON UPDATE CASCADE`;\n }\n\n return sql;\n }\n\n buildDrop(table: string, column: string) {\n const engine = this.xansql.config.dialect.engine;\n const fkName = this.identifier(table, column);\n let sql = '';\n if (engine === 'postgresql' || engine === 'sqlite') {\n sql += `ALTER TABLE ${table} DROP CONSTRAINT IF EXISTS ${fkName};`;\n } else {\n sql += `ALTER TABLE ${table} DROP FOREIGN KEY IF EXISTS ${fkName};`;\n }\n return sql;\n }\n}\n\nexport default ForeignKeyMigration;"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ForeingMigration.mjs","sources":["../../../../src/core/classes/Migration/ForeingMigration.ts"],"sourcesContent":["import { quote } from \"../../../utils\";\r\nimport Foreign from \"../ForeignInfo\";\r\nimport Xansql from \"../../Xansql\";\r\n\r\n\r\nclass ForeignKeyMigration {\r\n xansql: Xansql;\r\n\r\n constructor(xansql: Xansql) {\r\n this.xansql = xansql;\r\n }\r\n\r\n identifier(table: string, column: string) {\r\n return `fk_${table}_${column}`;\r\n }\r\n\r\n foreigns() {\r\n const models = this.xansql.models;\r\n let statements: string[] = [];\r\n\r\n for (const model of models.values()) {\r\n const schema = model?.schema || {};\r\n for (const column in schema) {\r\n const field = schema[column];\r\n if (Foreign.isSchema(field)) {\r\n const fkSql = this.buildCreate(model.table, column);\r\n statements.push(fkSql);\r\n }\r\n }\r\n }\r\n\r\n return statements;\r\n }\r\n\r\n buildCreate(table: string, column: string, refTable: string = '', refColumn: string = '') {\r\n const engine = this.xansql.config.dialect.engine;\r\n const model = this.xansql.models.get(table);\r\n const schema = model?.schema || {};\r\n const field = schema[column];\r\n const meta = field.meta || {};\r\n const isOptional = meta.nullable || meta.optional;\r\n const fk = this.identifier(table, column);\r\n\r\n let sql = `CONSTRAINT ${fk} FOREIGN KEY (${quote(engine, column)}) REFERENCES ${quote(engine, refTable)}(${quote(engine, refColumn)})`;\r\n if (isOptional) {\r\n sql += ` ON DELETE SET NULL ON UPDATE CASCADE`;\r\n } else {\r\n sql += ` ON DELETE CASCADE ON UPDATE CASCADE`;\r\n }\r\n\r\n return sql;\r\n }\r\n\r\n buildDrop(table: string, column: string) {\r\n const engine = this.xansql.config.dialect.engine;\r\n const fkName = this.identifier(table, column);\r\n let sql = '';\r\n if (engine === 'postgresql' || engine === 'sqlite') {\r\n sql += `ALTER TABLE ${table} DROP CONSTRAINT IF EXISTS ${fkName};`;\r\n } else {\r\n sql += `ALTER TABLE ${table} DROP FOREIGN KEY IF EXISTS ${fkName};`;\r\n }\r\n return sql;\r\n }\r\n}\r\n\r\nexport default ForeignKeyMigration;"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndexMigration.cjs","sources":["../../../../src/core/classes/Migration/IndexMigration.ts"],"sourcesContent":["import { quote } from \"../../../utils\";\nimport Xansql from \"../../Xansql\";\n\n\nclass IndexMigration {\n xansql: Xansql;\n constructor(xansql: Xansql) {\n this.xansql = xansql;\n }\n\n identifier(table: string, column: string) {\n const model = this.xansql.models.get(table);\n const field = model?.schema[column];\n const meta = field?.meta || {};\n return `${table}_${column}${meta.unique ? '_unique_index' : '_index'}`;\n }\n\n indexes() {\n const models = this.xansql.models;\n let statements: string[] = [];\n\n for (const model of models.values()) {\n const schema = model?.schema || {};\n for (const column in schema) {\n const field = schema[column];\n const meta = field.meta || {};\n if (meta.index) {\n const indexSql = this.buildCreate(model.table, column);\n statements.push(indexSql);\n }\n }\n }\n\n return statements\n }\n\n buildCreate(table: string, column: string) {\n const engine = this.xansql.config.dialect.engine;\n const model = this.xansql.models.get(table);\n const field = model?.schema[column];\n const meta = field?.meta || {};\n const unique = meta.unique ? 'UNIQUE' : '';\n const indexName = this.identifier(table, column);\n let sql = `CREATE ${unique} INDEX ${indexName} ON ${quote(engine, table)} (${quote(engine, column)});`\n return sql;\n }\n\n buildDrop(table: string, column: string) {\n const engine = this.xansql.config.dialect.engine;\n const indexName = this.identifier(table, column);\n let sql = '';\n if (engine === 'postgresql' || engine === 'sqlite') {\n sql += `DROP INDEX IF EXISTS ${indexName};`;\n } else {\n sql += `DROP INDEX IF EXISTS ${indexName} ON ${table};`;\n }\n return sql;\n }\n}\n\nexport default IndexMigration;"],"names":["quote"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IndexMigration.cjs","sources":["../../../../src/core/classes/Migration/IndexMigration.ts"],"sourcesContent":["import { quote } from \"../../../utils\";\r\nimport Xansql from \"../../Xansql\";\r\n\r\n\r\nclass IndexMigration {\r\n xansql: Xansql;\r\n constructor(xansql: Xansql) {\r\n this.xansql = xansql;\r\n }\r\n\r\n identifier(table: string, column: string) {\r\n const model = this.xansql.models.get(table);\r\n const field = model?.schema[column];\r\n const meta = field?.meta || {};\r\n return `${table}_${column}${meta.unique ? '_unique_index' : '_index'}`;\r\n }\r\n\r\n indexes() {\r\n const models = this.xansql.models;\r\n let statements: string[] = [];\r\n\r\n for (const model of models.values()) {\r\n const schema = model?.schema || {};\r\n for (const column in schema) {\r\n const field = schema[column];\r\n const meta = field.meta || {};\r\n if (meta.index) {\r\n const indexSql = this.buildCreate(model.table, column);\r\n statements.push(indexSql);\r\n }\r\n }\r\n }\r\n\r\n return statements\r\n }\r\n\r\n buildCreate(table: string, column: string) {\r\n const engine = this.xansql.config.dialect.engine;\r\n const model = this.xansql.models.get(table);\r\n const field = model?.schema[column];\r\n const meta = field?.meta || {};\r\n const unique = meta.unique ? 'UNIQUE' : '';\r\n const indexName = this.identifier(table, column);\r\n let sql = `CREATE ${unique} INDEX ${indexName} ON ${quote(engine, table)} (${quote(engine, column)});`\r\n return sql;\r\n }\r\n\r\n buildDrop(table: string, column: string) {\r\n const engine = this.xansql.config.dialect.engine;\r\n const indexName = this.identifier(table, column);\r\n let sql = '';\r\n if (engine === 'postgresql' || engine === 'sqlite') {\r\n sql += `DROP INDEX IF EXISTS ${indexName};`;\r\n } else {\r\n sql += `DROP INDEX IF EXISTS ${indexName} ON ${table};`;\r\n }\r\n return sql;\r\n }\r\n}\r\n\r\nexport default IndexMigration;"],"names":["quote"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndexMigration.mjs","sources":["../../../../src/core/classes/Migration/IndexMigration.ts"],"sourcesContent":["import { quote } from \"../../../utils\";\nimport Xansql from \"../../Xansql\";\n\n\nclass IndexMigration {\n xansql: Xansql;\n constructor(xansql: Xansql) {\n this.xansql = xansql;\n }\n\n identifier(table: string, column: string) {\n const model = this.xansql.models.get(table);\n const field = model?.schema[column];\n const meta = field?.meta || {};\n return `${table}_${column}${meta.unique ? '_unique_index' : '_index'}`;\n }\n\n indexes() {\n const models = this.xansql.models;\n let statements: string[] = [];\n\n for (const model of models.values()) {\n const schema = model?.schema || {};\n for (const column in schema) {\n const field = schema[column];\n const meta = field.meta || {};\n if (meta.index) {\n const indexSql = this.buildCreate(model.table, column);\n statements.push(indexSql);\n }\n }\n }\n\n return statements\n }\n\n buildCreate(table: string, column: string) {\n const engine = this.xansql.config.dialect.engine;\n const model = this.xansql.models.get(table);\n const field = model?.schema[column];\n const meta = field?.meta || {};\n const unique = meta.unique ? 'UNIQUE' : '';\n const indexName = this.identifier(table, column);\n let sql = `CREATE ${unique} INDEX ${indexName} ON ${quote(engine, table)} (${quote(engine, column)});`\n return sql;\n }\n\n buildDrop(table: string, column: string) {\n const engine = this.xansql.config.dialect.engine;\n const indexName = this.identifier(table, column);\n let sql = '';\n if (engine === 'postgresql' || engine === 'sqlite') {\n sql += `DROP INDEX IF EXISTS ${indexName};`;\n } else {\n sql += `DROP INDEX IF EXISTS ${indexName} ON ${table};`;\n }\n return sql;\n }\n}\n\nexport default IndexMigration;"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IndexMigration.mjs","sources":["../../../../src/core/classes/Migration/IndexMigration.ts"],"sourcesContent":["import { quote } from \"../../../utils\";\r\nimport Xansql from \"../../Xansql\";\r\n\r\n\r\nclass IndexMigration {\r\n xansql: Xansql;\r\n constructor(xansql: Xansql) {\r\n this.xansql = xansql;\r\n }\r\n\r\n identifier(table: string, column: string) {\r\n const model = this.xansql.models.get(table);\r\n const field = model?.schema[column];\r\n const meta = field?.meta || {};\r\n return `${table}_${column}${meta.unique ? '_unique_index' : '_index'}`;\r\n }\r\n\r\n indexes() {\r\n const models = this.xansql.models;\r\n let statements: string[] = [];\r\n\r\n for (const model of models.values()) {\r\n const schema = model?.schema || {};\r\n for (const column in schema) {\r\n const field = schema[column];\r\n const meta = field.meta || {};\r\n if (meta.index) {\r\n const indexSql = this.buildCreate(model.table, column);\r\n statements.push(indexSql);\r\n }\r\n }\r\n }\r\n\r\n return statements\r\n }\r\n\r\n buildCreate(table: string, column: string) {\r\n const engine = this.xansql.config.dialect.engine;\r\n const model = this.xansql.models.get(table);\r\n const field = model?.schema[column];\r\n const meta = field?.meta || {};\r\n const unique = meta.unique ? 'UNIQUE' : '';\r\n const indexName = this.identifier(table, column);\r\n let sql = `CREATE ${unique} INDEX ${indexName} ON ${quote(engine, table)} (${quote(engine, column)});`\r\n return sql;\r\n }\r\n\r\n buildDrop(table: string, column: string) {\r\n const engine = this.xansql.config.dialect.engine;\r\n const indexName = this.identifier(table, column);\r\n let sql = '';\r\n if (engine === 'postgresql' || engine === 'sqlite') {\r\n sql += `DROP INDEX IF EXISTS ${indexName};`;\r\n } else {\r\n sql += `DROP INDEX IF EXISTS ${indexName} ON ${table};`;\r\n }\r\n return sql;\r\n }\r\n}\r\n\r\nexport default IndexMigration;"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableMigration.cjs","sources":["../../../../src/core/classes/Migration/TableMigration.ts"],"sourcesContent":["import Model from \"../../../model\";\nimport XqlArray from \"../../../xt/fields/Array\";\nimport XqlBoolean from \"../../../xt/fields/Boolean\";\nimport XqlDate from \"../../../xt/fields/Date\";\nimport XqlEnum from \"../../../xt/fields/Enum\";\nimport XqlFile from \"../../../xt/fields/File\";\nimport XqlIDField from \"../../../xt/fields/IDField\";\nimport XqlNumber from \"../../../xt/fields/Number\";\nimport XqlObject from \"../../../xt/fields/Object\";\nimport XqlRecord from \"../../../xt/fields/Record\";\nimport XqlSchema from \"../../../xt/fields/Schema\";\nimport XqlString from \"../../../xt/fields/String\";\nimport XqlTuple from \"../../../xt/fields/Tuple\";\nimport XqlUnion from \"../../../xt/fields/Union\";\nimport { escapeSqlValue, iof, quote } from \"../../../utils\";\nimport Xansql from \"../../Xansql\";\nimport XansqlError from \"../../XansqlError\";\nimport Foreign from \"../ForeignInfo\";\nimport ForeignKeyMigration from \"./ForeingMigration\";\nimport IndexMigration from \"./IndexMigration\";\nimport ValueFormatter from \"../../../model/include/ValueFormatter\";\n\nclass Migration {\n xansql: Xansql;\n readonly ForeignKeyMigration: ForeignKeyMigration\n readonly IndexMigration: IndexMigration\n constructor(xansql: Xansql) {\n this.xansql = xansql;\n this.ForeignKeyMigration = new ForeignKeyMigration(xansql);\n this.IndexMigration = new IndexMigration(xansql);\n }\n\n statements() {\n const engine = this.xansql.config.dialect.engine;\n const models = this.xansql.models;\n\n const options: string[] = []\n const tables: ({ table: string, sql: string })[] = [];\n const indexes: ({ table: string, sql: string })[] = [];\n\n if (engine === 'sqlite') {\n options.push(`PRAGMA foreign_keys = ON;`);\n options.push(`PRAGMA journal_mode = WAL;`);\n options.push(`PRAGMA wal_autocheckpoint = 1000;`);\n options.push(`PRAGMA synchronous = NORMAL;`);\n } else if (engine === 'postgresql') {\n options.push(`SET client_min_messages TO WARNING;`);\n options.push(`SET standard_conforming_strings = ON;`);\n } else if (engine === 'mysql') {\n options.push(`SET sql_mode = 'STRICT_ALL_TABLES';`);\n options.push(`SET FOREIGN_KEY_CHECKS = 1;`);\n options.push(`SET sql_safe_updates = 1;`);\n }\n\n for (const table of models.keys()) {\n const model = models.get(table);\n const { sql, indexes: modelIndexes } = this.buildCreate(model!);\n indexes.push(...modelIndexes);\n tables.push({\n table,\n sql\n });\n }\n\n return {\n options,\n tables,\n indexes\n }\n }\n\n buildCreate(model: Model) {\n const engine = this.xansql.config.dialect.engine;\n let indexes: ({ table: string, sql: string })[] = [];\n const table = model.table;\n const schema = model?.schema || {};\n let sqls: string[] = [];\n let footers: string[] = [];\n\n for (const column in schema) {\n const field = schema[column];\n const meta = field.meta || {};\n const sql = this.buildColumn(table, column);\n sql && sqls.push(sql);\n\n if (Foreign.isSchema(field)) {\n const info = Foreign.get(model!, column)\n const fk = this.ForeignKeyMigration.buildCreate(table, column, info.table, info.relation.main);\n if (fk) {\n footers.push(fk);\n }\n }\n\n if (meta.index && !meta.unique) {\n const indexSql = this.IndexMigration.buildCreate(table, column);\n indexes.push({ table, sql: indexSql });\n }\n }\n if (footers.length > 0) {\n sqls.push(footers.join(','));\n }\n\n let sql = `CREATE TABLE IF NOT EXISTS ${quote(engine, table)} (${sqls.join(',')})`;\n if (engine === 'mysql') {\n sql += ` ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`;\n } else {\n sql += ` ;`;\n }\n\n return {\n sql,\n indexes\n }\n }\n\n buildDrop(model: any) {\n const engine = this.xansql.config.dialect.engine;\n const table = model.table;\n let sql = `DROP TABLE IF EXISTS ${quote(engine, table)};`;\n return sql;\n }\n\n buildColumn(table: string, column: string) {\n const engine = this.xansql.config.dialect.engine;\n const model = this.xansql.models.get(table) as Model;\n const field = model.schema[column];\n const meta = field.meta || {};\n const nullable = meta.nullable || meta.optional ? 'NULL' : 'NOT NULL';\n const unique = meta.unique ? 'UNIQUE' : '';\n let default_value = ''\n if (meta.default !== undefined) {\n default_value = ValueFormatter.getDefaultSql(model, column);\n }\n const col = (column: string, sqlType: string) => {\n return ` ${quote(engine, column)} ${sqlType} ${nullable} ${default_value} ${unique}`.trim().replace(/ +/g, ' ');\n };\n let sql = ''\n if (iof(field, XqlIDField)) {\n if (engine === 'mysql') {\n sql += col(column, \"INT AUTO_INCREMENT PRIMARY KEY\");\n } else if (engine === 'postgresql') {\n sql += col(column, \"SERIAL PRIMARY KEY\")\n } else if (engine === 'sqlite') {\n sql += col(column, \"INTEGER PRIMARY KEY AUTOINCREMENT\")\n }\n } else if (iof(field, XqlSchema)) {\n if (engine === 'mysql') {\n sql += col(column, \"INT\")\n } else if (engine === 'postgresql' || engine === 'sqlite') {\n sql += col(column, \"INTEGER\")\n }\n } else if (iof(field, XqlString)) {\n let length = meta.length || meta.max\n if (meta.text || length > 65535 || engine === 'sqlite') {\n sql += col(column, \"TEXT\")\n } else {\n sql += col(column, `VARCHAR(${length || 255})`)\n }\n } else if (iof(field, XqlFile)) {\n sql += col(column, \"VARCHAR(255)\")\n } else if (iof(field, XqlNumber)) {\n if (engine === \"mysql\") {\n if (meta.integer) {\n sql += col(column, \"INT\")\n } else if (meta.float) {\n sql += col(column, \"FLOAT\")\n } else {\n sql += col(column, \"DECIMAL(10, 2)\")\n }\n } else if (engine === \"postgresql\" || engine === \"sqlite\") {\n if (meta.integer) {\n sql += col(column, \"INTEGER\")\n } else if (meta.float) {\n sql += col(column, \"REAL\")\n } else {\n sql += col(column, engine === \"sqlite\" ? \"NUMERIC\" : \"NUMERIC(10, 2)\")\n }\n }\n } else if (iof(field, XqlBoolean)) {\n if (engine === \"mysql\" || engine === \"postgresql\") {\n sql += col(column, \"BOOLEAN\")\n } else if (engine === \"sqlite\") {\n sql += col(column, \"INTEGER\") // SQLite has no BOOLEAN → use INTEGER (0/1)\n }\n } else if (iof(field, XqlDate)) {\n if (engine === \"mysql\") {\n sql += col(column, \"DATETIME\")\n } else if (engine === \"postgresql\") {\n sql += col(column, \"TIMESTAMP\")\n } else if (engine === \"sqlite\") {\n sql += col(column, \"TEXT\") // store ISO string (SQLite has no native DATETIME)\n }\n } else if (iof(field, XqlEnum)) {\n if (engine === \"mysql\") {\n sql += col(column, `ENUM(${(field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(', ')})`)\n } else if (engine === \"postgresql\") {\n const enumName = `${table}_${column}_enum`;\n sql += `CREATE TYPE ${enumName} AS ENUM (${(field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(', ')}); `\n sql += col(column, enumName)\n } else if (engine === \"sqlite\") {\n const values = (field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(\", \");\n sql += `\"${column}\" TEXT CHECK(\"${column}\" IN (${values})) ${nullable} ${unique}, `\n }\n } else if (iof(field, XqlObject, XqlRecord, XqlTuple, XqlUnion)) {\n sql += col(column, \"TEXT\")\n } else if (iof(field, XqlArray)) {\n const arrayType = (field as any).type;\n const isSchemaArray = iof(arrayType, XqlSchema)\n if (!isSchemaArray) {\n sql += col(column, \"TEXT\")\n }\n } else {\n throw new XansqlError({\n message: `Unsupported field type for column \"${column}\" in table \"${table}\".`,\n model: table,\n column\n });\n }\n return sql;\n }\n}\n\nexport default Migration"],"names":["ForeignKeyMigration","IndexMigration","Foreign","quote","ValueFormatter","iof","XqlIDField","XqlSchema","XqlString","XqlFile","XqlNumber","XqlBoolean","XqlDate","XqlEnum","escapeSqlValue","XqlObject","XqlRecord","XqlTuple","XqlUnion","XqlArray","XansqlError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TableMigration.cjs","sources":["../../../../src/core/classes/Migration/TableMigration.ts"],"sourcesContent":["import Model from \"../../../model\";\r\nimport XqlArray from \"../../../xt/fields/Array\";\r\nimport XqlBoolean from \"../../../xt/fields/Boolean\";\r\nimport XqlDate from \"../../../xt/fields/Date\";\r\nimport XqlEnum from \"../../../xt/fields/Enum\";\r\nimport XqlFile from \"../../../xt/fields/File\";\r\nimport XqlIDField from \"../../../xt/fields/IDField\";\r\nimport XqlNumber from \"../../../xt/fields/Number\";\r\nimport XqlObject from \"../../../xt/fields/Object\";\r\nimport XqlRecord from \"../../../xt/fields/Record\";\r\nimport XqlSchema from \"../../../xt/fields/Schema\";\r\nimport XqlString from \"../../../xt/fields/String\";\r\nimport XqlTuple from \"../../../xt/fields/Tuple\";\r\nimport XqlUnion from \"../../../xt/fields/Union\";\r\nimport { escapeSqlValue, iof, quote } from \"../../../utils\";\r\nimport Xansql from \"../../Xansql\";\r\nimport XansqlError from \"../../XansqlError\";\r\nimport Foreign from \"../ForeignInfo\";\r\nimport ForeignKeyMigration from \"./ForeingMigration\";\r\nimport IndexMigration from \"./IndexMigration\";\r\nimport ValueFormatter from \"../../../model/include/ValueFormatter\";\r\n\r\nclass Migration {\r\n xansql: Xansql;\r\n readonly ForeignKeyMigration: ForeignKeyMigration\r\n readonly IndexMigration: IndexMigration\r\n constructor(xansql: Xansql) {\r\n this.xansql = xansql;\r\n this.ForeignKeyMigration = new ForeignKeyMigration(xansql);\r\n this.IndexMigration = new IndexMigration(xansql);\r\n }\r\n\r\n statements() {\r\n const engine = this.xansql.config.dialect.engine;\r\n const models = this.xansql.models;\r\n\r\n const options: string[] = []\r\n const tables: ({ table: string, sql: string })[] = [];\r\n const indexes: ({ table: string, sql: string })[] = [];\r\n\r\n if (engine === 'sqlite') {\r\n options.push(`PRAGMA foreign_keys = ON;`);\r\n options.push(`PRAGMA journal_mode = WAL;`);\r\n options.push(`PRAGMA wal_autocheckpoint = 1000;`);\r\n options.push(`PRAGMA synchronous = NORMAL;`);\r\n } else if (engine === 'postgresql') {\r\n options.push(`SET client_min_messages TO WARNING;`);\r\n options.push(`SET standard_conforming_strings = ON;`);\r\n } else if (engine === 'mysql') {\r\n options.push(`SET sql_mode = 'STRICT_ALL_TABLES';`);\r\n options.push(`SET FOREIGN_KEY_CHECKS = 1;`);\r\n options.push(`SET sql_safe_updates = 1;`);\r\n }\r\n\r\n for (const table of models.keys()) {\r\n const model = models.get(table);\r\n const { sql, indexes: modelIndexes } = this.buildCreate(model!);\r\n indexes.push(...modelIndexes);\r\n tables.push({\r\n table,\r\n sql\r\n });\r\n }\r\n\r\n return {\r\n options,\r\n tables,\r\n indexes\r\n }\r\n }\r\n\r\n buildCreate(model: Model) {\r\n const engine = this.xansql.config.dialect.engine;\r\n let indexes: ({ table: string, sql: string })[] = [];\r\n const table = model.table;\r\n const schema = model?.schema || {};\r\n let sqls: string[] = [];\r\n let footers: string[] = [];\r\n\r\n for (const column in schema) {\r\n const field = schema[column];\r\n const meta = field.meta || {};\r\n const sql = this.buildColumn(table, column);\r\n sql && sqls.push(sql);\r\n\r\n if (Foreign.isSchema(field)) {\r\n const info = Foreign.get(model!, column)\r\n const fk = this.ForeignKeyMigration.buildCreate(table, column, info.table, info.relation.main);\r\n if (fk) {\r\n footers.push(fk);\r\n }\r\n }\r\n\r\n if (meta.index && !meta.unique) {\r\n const indexSql = this.IndexMigration.buildCreate(table, column);\r\n indexes.push({ table, sql: indexSql });\r\n }\r\n }\r\n if (footers.length > 0) {\r\n sqls.push(footers.join(','));\r\n }\r\n\r\n let sql = `CREATE TABLE IF NOT EXISTS ${quote(engine, table)} (${sqls.join(',')})`;\r\n if (engine === 'mysql') {\r\n sql += ` ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`;\r\n } else {\r\n sql += ` ;`;\r\n }\r\n\r\n return {\r\n sql,\r\n indexes\r\n }\r\n }\r\n\r\n buildDrop(model: any) {\r\n const engine = this.xansql.config.dialect.engine;\r\n const table = model.table;\r\n let sql = `DROP TABLE IF EXISTS ${quote(engine, table)};`;\r\n return sql;\r\n }\r\n\r\n buildColumn(table: string, column: string) {\r\n const engine = this.xansql.config.dialect.engine;\r\n const model = this.xansql.models.get(table) as Model;\r\n const field = model.schema[column];\r\n const meta = field.meta || {};\r\n const nullable = meta.nullable || meta.optional ? 'NULL' : 'NOT NULL';\r\n const unique = meta.unique ? 'UNIQUE' : '';\r\n let default_value = ''\r\n if (meta.default !== undefined) {\r\n default_value = ValueFormatter.getDefaultSql(model, column);\r\n }\r\n const col = (column: string, sqlType: string) => {\r\n return ` ${quote(engine, column)} ${sqlType} ${nullable} ${default_value} ${unique}`.trim().replace(/ +/g, ' ');\r\n };\r\n let sql = ''\r\n if (iof(field, XqlIDField)) {\r\n if (engine === 'mysql') {\r\n sql += col(column, \"INT AUTO_INCREMENT PRIMARY KEY\");\r\n } else if (engine === 'postgresql') {\r\n sql += col(column, \"SERIAL PRIMARY KEY\")\r\n } else if (engine === 'sqlite') {\r\n sql += col(column, \"INTEGER PRIMARY KEY AUTOINCREMENT\")\r\n }\r\n } else if (iof(field, XqlSchema)) {\r\n if (engine === 'mysql') {\r\n sql += col(column, \"INT\")\r\n } else if (engine === 'postgresql' || engine === 'sqlite') {\r\n sql += col(column, \"INTEGER\")\r\n }\r\n } else if (iof(field, XqlString)) {\r\n let length = meta.length || meta.max\r\n if (meta.text || length > 65535 || engine === 'sqlite') {\r\n sql += col(column, \"TEXT\")\r\n } else {\r\n sql += col(column, `VARCHAR(${length || 255})`)\r\n }\r\n } else if (iof(field, XqlFile)) {\r\n sql += col(column, \"VARCHAR(255)\")\r\n } else if (iof(field, XqlNumber)) {\r\n if (engine === \"mysql\") {\r\n if (meta.integer) {\r\n sql += col(column, \"INT\")\r\n } else if (meta.float) {\r\n sql += col(column, \"FLOAT\")\r\n } else {\r\n sql += col(column, \"DECIMAL(10, 2)\")\r\n }\r\n } else if (engine === \"postgresql\" || engine === \"sqlite\") {\r\n if (meta.integer) {\r\n sql += col(column, \"INTEGER\")\r\n } else if (meta.float) {\r\n sql += col(column, \"REAL\")\r\n } else {\r\n sql += col(column, engine === \"sqlite\" ? \"NUMERIC\" : \"NUMERIC(10, 2)\")\r\n }\r\n }\r\n } else if (iof(field, XqlBoolean)) {\r\n if (engine === \"mysql\" || engine === \"postgresql\") {\r\n sql += col(column, \"BOOLEAN\")\r\n } else if (engine === \"sqlite\") {\r\n sql += col(column, \"INTEGER\") // SQLite has no BOOLEAN → use INTEGER (0/1)\r\n }\r\n } else if (iof(field, XqlDate)) {\r\n if (engine === \"mysql\") {\r\n sql += col(column, \"DATETIME\")\r\n } else if (engine === \"postgresql\") {\r\n sql += col(column, \"TIMESTAMP\")\r\n } else if (engine === \"sqlite\") {\r\n sql += col(column, \"TEXT\") // store ISO string (SQLite has no native DATETIME)\r\n }\r\n } else if (iof(field, XqlEnum)) {\r\n if (engine === \"mysql\") {\r\n sql += col(column, `ENUM(${(field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(', ')})`)\r\n } else if (engine === \"postgresql\") {\r\n const enumName = `${table}_${column}_enum`;\r\n sql += `CREATE TYPE ${enumName} AS ENUM (${(field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(', ')}); `\r\n sql += col(column, enumName)\r\n } else if (engine === \"sqlite\") {\r\n const values = (field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(\", \");\r\n sql += `\"${column}\" TEXT CHECK(\"${column}\" IN (${values})) ${nullable} ${unique}, `\r\n }\r\n } else if (iof(field, XqlObject, XqlRecord, XqlTuple, XqlUnion)) {\r\n sql += col(column, \"TEXT\")\r\n } else if (iof(field, XqlArray)) {\r\n const arrayType = (field as any).type;\r\n const isSchemaArray = iof(arrayType, XqlSchema)\r\n if (!isSchemaArray) {\r\n sql += col(column, \"TEXT\")\r\n }\r\n } else {\r\n throw new XansqlError({\r\n message: `Unsupported field type for column \"${column}\" in table \"${table}\".`,\r\n model: table,\r\n column\r\n });\r\n }\r\n return sql;\r\n }\r\n}\r\n\r\nexport default Migration"],"names":["ForeignKeyMigration","IndexMigration","Foreign","quote","ValueFormatter","iof","XqlIDField","XqlSchema","XqlString","XqlFile","XqlNumber","XqlBoolean","XqlDate","XqlEnum","escapeSqlValue","XqlObject","XqlRecord","XqlTuple","XqlUnion","XqlArray","XansqlError"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableMigration.mjs","sources":["../../../../src/core/classes/Migration/TableMigration.ts"],"sourcesContent":["import Model from \"../../../model\";\nimport XqlArray from \"../../../xt/fields/Array\";\nimport XqlBoolean from \"../../../xt/fields/Boolean\";\nimport XqlDate from \"../../../xt/fields/Date\";\nimport XqlEnum from \"../../../xt/fields/Enum\";\nimport XqlFile from \"../../../xt/fields/File\";\nimport XqlIDField from \"../../../xt/fields/IDField\";\nimport XqlNumber from \"../../../xt/fields/Number\";\nimport XqlObject from \"../../../xt/fields/Object\";\nimport XqlRecord from \"../../../xt/fields/Record\";\nimport XqlSchema from \"../../../xt/fields/Schema\";\nimport XqlString from \"../../../xt/fields/String\";\nimport XqlTuple from \"../../../xt/fields/Tuple\";\nimport XqlUnion from \"../../../xt/fields/Union\";\nimport { escapeSqlValue, iof, quote } from \"../../../utils\";\nimport Xansql from \"../../Xansql\";\nimport XansqlError from \"../../XansqlError\";\nimport Foreign from \"../ForeignInfo\";\nimport ForeignKeyMigration from \"./ForeingMigration\";\nimport IndexMigration from \"./IndexMigration\";\nimport ValueFormatter from \"../../../model/include/ValueFormatter\";\n\nclass Migration {\n xansql: Xansql;\n readonly ForeignKeyMigration: ForeignKeyMigration\n readonly IndexMigration: IndexMigration\n constructor(xansql: Xansql) {\n this.xansql = xansql;\n this.ForeignKeyMigration = new ForeignKeyMigration(xansql);\n this.IndexMigration = new IndexMigration(xansql);\n }\n\n statements() {\n const engine = this.xansql.config.dialect.engine;\n const models = this.xansql.models;\n\n const options: string[] = []\n const tables: ({ table: string, sql: string })[] = [];\n const indexes: ({ table: string, sql: string })[] = [];\n\n if (engine === 'sqlite') {\n options.push(`PRAGMA foreign_keys = ON;`);\n options.push(`PRAGMA journal_mode = WAL;`);\n options.push(`PRAGMA wal_autocheckpoint = 1000;`);\n options.push(`PRAGMA synchronous = NORMAL;`);\n } else if (engine === 'postgresql') {\n options.push(`SET client_min_messages TO WARNING;`);\n options.push(`SET standard_conforming_strings = ON;`);\n } else if (engine === 'mysql') {\n options.push(`SET sql_mode = 'STRICT_ALL_TABLES';`);\n options.push(`SET FOREIGN_KEY_CHECKS = 1;`);\n options.push(`SET sql_safe_updates = 1;`);\n }\n\n for (const table of models.keys()) {\n const model = models.get(table);\n const { sql, indexes: modelIndexes } = this.buildCreate(model!);\n indexes.push(...modelIndexes);\n tables.push({\n table,\n sql\n });\n }\n\n return {\n options,\n tables,\n indexes\n }\n }\n\n buildCreate(model: Model) {\n const engine = this.xansql.config.dialect.engine;\n let indexes: ({ table: string, sql: string })[] = [];\n const table = model.table;\n const schema = model?.schema || {};\n let sqls: string[] = [];\n let footers: string[] = [];\n\n for (const column in schema) {\n const field = schema[column];\n const meta = field.meta || {};\n const sql = this.buildColumn(table, column);\n sql && sqls.push(sql);\n\n if (Foreign.isSchema(field)) {\n const info = Foreign.get(model!, column)\n const fk = this.ForeignKeyMigration.buildCreate(table, column, info.table, info.relation.main);\n if (fk) {\n footers.push(fk);\n }\n }\n\n if (meta.index && !meta.unique) {\n const indexSql = this.IndexMigration.buildCreate(table, column);\n indexes.push({ table, sql: indexSql });\n }\n }\n if (footers.length > 0) {\n sqls.push(footers.join(','));\n }\n\n let sql = `CREATE TABLE IF NOT EXISTS ${quote(engine, table)} (${sqls.join(',')})`;\n if (engine === 'mysql') {\n sql += ` ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`;\n } else {\n sql += ` ;`;\n }\n\n return {\n sql,\n indexes\n }\n }\n\n buildDrop(model: any) {\n const engine = this.xansql.config.dialect.engine;\n const table = model.table;\n let sql = `DROP TABLE IF EXISTS ${quote(engine, table)};`;\n return sql;\n }\n\n buildColumn(table: string, column: string) {\n const engine = this.xansql.config.dialect.engine;\n const model = this.xansql.models.get(table) as Model;\n const field = model.schema[column];\n const meta = field.meta || {};\n const nullable = meta.nullable || meta.optional ? 'NULL' : 'NOT NULL';\n const unique = meta.unique ? 'UNIQUE' : '';\n let default_value = ''\n if (meta.default !== undefined) {\n default_value = ValueFormatter.getDefaultSql(model, column);\n }\n const col = (column: string, sqlType: string) => {\n return ` ${quote(engine, column)} ${sqlType} ${nullable} ${default_value} ${unique}`.trim().replace(/ +/g, ' ');\n };\n let sql = ''\n if (iof(field, XqlIDField)) {\n if (engine === 'mysql') {\n sql += col(column, \"INT AUTO_INCREMENT PRIMARY KEY\");\n } else if (engine === 'postgresql') {\n sql += col(column, \"SERIAL PRIMARY KEY\")\n } else if (engine === 'sqlite') {\n sql += col(column, \"INTEGER PRIMARY KEY AUTOINCREMENT\")\n }\n } else if (iof(field, XqlSchema)) {\n if (engine === 'mysql') {\n sql += col(column, \"INT\")\n } else if (engine === 'postgresql' || engine === 'sqlite') {\n sql += col(column, \"INTEGER\")\n }\n } else if (iof(field, XqlString)) {\n let length = meta.length || meta.max\n if (meta.text || length > 65535 || engine === 'sqlite') {\n sql += col(column, \"TEXT\")\n } else {\n sql += col(column, `VARCHAR(${length || 255})`)\n }\n } else if (iof(field, XqlFile)) {\n sql += col(column, \"VARCHAR(255)\")\n } else if (iof(field, XqlNumber)) {\n if (engine === \"mysql\") {\n if (meta.integer) {\n sql += col(column, \"INT\")\n } else if (meta.float) {\n sql += col(column, \"FLOAT\")\n } else {\n sql += col(column, \"DECIMAL(10, 2)\")\n }\n } else if (engine === \"postgresql\" || engine === \"sqlite\") {\n if (meta.integer) {\n sql += col(column, \"INTEGER\")\n } else if (meta.float) {\n sql += col(column, \"REAL\")\n } else {\n sql += col(column, engine === \"sqlite\" ? \"NUMERIC\" : \"NUMERIC(10, 2)\")\n }\n }\n } else if (iof(field, XqlBoolean)) {\n if (engine === \"mysql\" || engine === \"postgresql\") {\n sql += col(column, \"BOOLEAN\")\n } else if (engine === \"sqlite\") {\n sql += col(column, \"INTEGER\") // SQLite has no BOOLEAN → use INTEGER (0/1)\n }\n } else if (iof(field, XqlDate)) {\n if (engine === \"mysql\") {\n sql += col(column, \"DATETIME\")\n } else if (engine === \"postgresql\") {\n sql += col(column, \"TIMESTAMP\")\n } else if (engine === \"sqlite\") {\n sql += col(column, \"TEXT\") // store ISO string (SQLite has no native DATETIME)\n }\n } else if (iof(field, XqlEnum)) {\n if (engine === \"mysql\") {\n sql += col(column, `ENUM(${(field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(', ')})`)\n } else if (engine === \"postgresql\") {\n const enumName = `${table}_${column}_enum`;\n sql += `CREATE TYPE ${enumName} AS ENUM (${(field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(', ')}); `\n sql += col(column, enumName)\n } else if (engine === \"sqlite\") {\n const values = (field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(\", \");\n sql += `\"${column}\" TEXT CHECK(\"${column}\" IN (${values})) ${nullable} ${unique}, `\n }\n } else if (iof(field, XqlObject, XqlRecord, XqlTuple, XqlUnion)) {\n sql += col(column, \"TEXT\")\n } else if (iof(field, XqlArray)) {\n const arrayType = (field as any).type;\n const isSchemaArray = iof(arrayType, XqlSchema)\n if (!isSchemaArray) {\n sql += col(column, \"TEXT\")\n }\n } else {\n throw new XansqlError({\n message: `Unsupported field type for column \"${column}\" in table \"${table}\".`,\n model: table,\n column\n });\n }\n return sql;\n }\n}\n\nexport default Migration"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TableMigration.mjs","sources":["../../../../src/core/classes/Migration/TableMigration.ts"],"sourcesContent":["import Model from \"../../../model\";\r\nimport XqlArray from \"../../../xt/fields/Array\";\r\nimport XqlBoolean from \"../../../xt/fields/Boolean\";\r\nimport XqlDate from \"../../../xt/fields/Date\";\r\nimport XqlEnum from \"../../../xt/fields/Enum\";\r\nimport XqlFile from \"../../../xt/fields/File\";\r\nimport XqlIDField from \"../../../xt/fields/IDField\";\r\nimport XqlNumber from \"../../../xt/fields/Number\";\r\nimport XqlObject from \"../../../xt/fields/Object\";\r\nimport XqlRecord from \"../../../xt/fields/Record\";\r\nimport XqlSchema from \"../../../xt/fields/Schema\";\r\nimport XqlString from \"../../../xt/fields/String\";\r\nimport XqlTuple from \"../../../xt/fields/Tuple\";\r\nimport XqlUnion from \"../../../xt/fields/Union\";\r\nimport { escapeSqlValue, iof, quote } from \"../../../utils\";\r\nimport Xansql from \"../../Xansql\";\r\nimport XansqlError from \"../../XansqlError\";\r\nimport Foreign from \"../ForeignInfo\";\r\nimport ForeignKeyMigration from \"./ForeingMigration\";\r\nimport IndexMigration from \"./IndexMigration\";\r\nimport ValueFormatter from \"../../../model/include/ValueFormatter\";\r\n\r\nclass Migration {\r\n xansql: Xansql;\r\n readonly ForeignKeyMigration: ForeignKeyMigration\r\n readonly IndexMigration: IndexMigration\r\n constructor(xansql: Xansql) {\r\n this.xansql = xansql;\r\n this.ForeignKeyMigration = new ForeignKeyMigration(xansql);\r\n this.IndexMigration = new IndexMigration(xansql);\r\n }\r\n\r\n statements() {\r\n const engine = this.xansql.config.dialect.engine;\r\n const models = this.xansql.models;\r\n\r\n const options: string[] = []\r\n const tables: ({ table: string, sql: string })[] = [];\r\n const indexes: ({ table: string, sql: string })[] = [];\r\n\r\n if (engine === 'sqlite') {\r\n options.push(`PRAGMA foreign_keys = ON;`);\r\n options.push(`PRAGMA journal_mode = WAL;`);\r\n options.push(`PRAGMA wal_autocheckpoint = 1000;`);\r\n options.push(`PRAGMA synchronous = NORMAL;`);\r\n } else if (engine === 'postgresql') {\r\n options.push(`SET client_min_messages TO WARNING;`);\r\n options.push(`SET standard_conforming_strings = ON;`);\r\n } else if (engine === 'mysql') {\r\n options.push(`SET sql_mode = 'STRICT_ALL_TABLES';`);\r\n options.push(`SET FOREIGN_KEY_CHECKS = 1;`);\r\n options.push(`SET sql_safe_updates = 1;`);\r\n }\r\n\r\n for (const table of models.keys()) {\r\n const model = models.get(table);\r\n const { sql, indexes: modelIndexes } = this.buildCreate(model!);\r\n indexes.push(...modelIndexes);\r\n tables.push({\r\n table,\r\n sql\r\n });\r\n }\r\n\r\n return {\r\n options,\r\n tables,\r\n indexes\r\n }\r\n }\r\n\r\n buildCreate(model: Model) {\r\n const engine = this.xansql.config.dialect.engine;\r\n let indexes: ({ table: string, sql: string })[] = [];\r\n const table = model.table;\r\n const schema = model?.schema || {};\r\n let sqls: string[] = [];\r\n let footers: string[] = [];\r\n\r\n for (const column in schema) {\r\n const field = schema[column];\r\n const meta = field.meta || {};\r\n const sql = this.buildColumn(table, column);\r\n sql && sqls.push(sql);\r\n\r\n if (Foreign.isSchema(field)) {\r\n const info = Foreign.get(model!, column)\r\n const fk = this.ForeignKeyMigration.buildCreate(table, column, info.table, info.relation.main);\r\n if (fk) {\r\n footers.push(fk);\r\n }\r\n }\r\n\r\n if (meta.index && !meta.unique) {\r\n const indexSql = this.IndexMigration.buildCreate(table, column);\r\n indexes.push({ table, sql: indexSql });\r\n }\r\n }\r\n if (footers.length > 0) {\r\n sqls.push(footers.join(','));\r\n }\r\n\r\n let sql = `CREATE TABLE IF NOT EXISTS ${quote(engine, table)} (${sqls.join(',')})`;\r\n if (engine === 'mysql') {\r\n sql += ` ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`;\r\n } else {\r\n sql += ` ;`;\r\n }\r\n\r\n return {\r\n sql,\r\n indexes\r\n }\r\n }\r\n\r\n buildDrop(model: any) {\r\n const engine = this.xansql.config.dialect.engine;\r\n const table = model.table;\r\n let sql = `DROP TABLE IF EXISTS ${quote(engine, table)};`;\r\n return sql;\r\n }\r\n\r\n buildColumn(table: string, column: string) {\r\n const engine = this.xansql.config.dialect.engine;\r\n const model = this.xansql.models.get(table) as Model;\r\n const field = model.schema[column];\r\n const meta = field.meta || {};\r\n const nullable = meta.nullable || meta.optional ? 'NULL' : 'NOT NULL';\r\n const unique = meta.unique ? 'UNIQUE' : '';\r\n let default_value = ''\r\n if (meta.default !== undefined) {\r\n default_value = ValueFormatter.getDefaultSql(model, column);\r\n }\r\n const col = (column: string, sqlType: string) => {\r\n return ` ${quote(engine, column)} ${sqlType} ${nullable} ${default_value} ${unique}`.trim().replace(/ +/g, ' ');\r\n };\r\n let sql = ''\r\n if (iof(field, XqlIDField)) {\r\n if (engine === 'mysql') {\r\n sql += col(column, \"INT AUTO_INCREMENT PRIMARY KEY\");\r\n } else if (engine === 'postgresql') {\r\n sql += col(column, \"SERIAL PRIMARY KEY\")\r\n } else if (engine === 'sqlite') {\r\n sql += col(column, \"INTEGER PRIMARY KEY AUTOINCREMENT\")\r\n }\r\n } else if (iof(field, XqlSchema)) {\r\n if (engine === 'mysql') {\r\n sql += col(column, \"INT\")\r\n } else if (engine === 'postgresql' || engine === 'sqlite') {\r\n sql += col(column, \"INTEGER\")\r\n }\r\n } else if (iof(field, XqlString)) {\r\n let length = meta.length || meta.max\r\n if (meta.text || length > 65535 || engine === 'sqlite') {\r\n sql += col(column, \"TEXT\")\r\n } else {\r\n sql += col(column, `VARCHAR(${length || 255})`)\r\n }\r\n } else if (iof(field, XqlFile)) {\r\n sql += col(column, \"VARCHAR(255)\")\r\n } else if (iof(field, XqlNumber)) {\r\n if (engine === \"mysql\") {\r\n if (meta.integer) {\r\n sql += col(column, \"INT\")\r\n } else if (meta.float) {\r\n sql += col(column, \"FLOAT\")\r\n } else {\r\n sql += col(column, \"DECIMAL(10, 2)\")\r\n }\r\n } else if (engine === \"postgresql\" || engine === \"sqlite\") {\r\n if (meta.integer) {\r\n sql += col(column, \"INTEGER\")\r\n } else if (meta.float) {\r\n sql += col(column, \"REAL\")\r\n } else {\r\n sql += col(column, engine === \"sqlite\" ? \"NUMERIC\" : \"NUMERIC(10, 2)\")\r\n }\r\n }\r\n } else if (iof(field, XqlBoolean)) {\r\n if (engine === \"mysql\" || engine === \"postgresql\") {\r\n sql += col(column, \"BOOLEAN\")\r\n } else if (engine === \"sqlite\") {\r\n sql += col(column, \"INTEGER\") // SQLite has no BOOLEAN → use INTEGER (0/1)\r\n }\r\n } else if (iof(field, XqlDate)) {\r\n if (engine === \"mysql\") {\r\n sql += col(column, \"DATETIME\")\r\n } else if (engine === \"postgresql\") {\r\n sql += col(column, \"TIMESTAMP\")\r\n } else if (engine === \"sqlite\") {\r\n sql += col(column, \"TEXT\") // store ISO string (SQLite has no native DATETIME)\r\n }\r\n } else if (iof(field, XqlEnum)) {\r\n if (engine === \"mysql\") {\r\n sql += col(column, `ENUM(${(field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(', ')})`)\r\n } else if (engine === \"postgresql\") {\r\n const enumName = `${table}_${column}_enum`;\r\n sql += `CREATE TYPE ${enumName} AS ENUM (${(field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(', ')}); `\r\n sql += col(column, enumName)\r\n } else if (engine === \"sqlite\") {\r\n const values = (field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(\", \");\r\n sql += `\"${column}\" TEXT CHECK(\"${column}\" IN (${values})) ${nullable} ${unique}, `\r\n }\r\n } else if (iof(field, XqlObject, XqlRecord, XqlTuple, XqlUnion)) {\r\n sql += col(column, \"TEXT\")\r\n } else if (iof(field, XqlArray)) {\r\n const arrayType = (field as any).type;\r\n const isSchemaArray = iof(arrayType, XqlSchema)\r\n if (!isSchemaArray) {\r\n sql += col(column, \"TEXT\")\r\n }\r\n } else {\r\n throw new XansqlError({\r\n message: `Unsupported field type for column \"${column}\" in table \"${table}\".`,\r\n model: table,\r\n column\r\n });\r\n }\r\n return sql;\r\n }\r\n}\r\n\r\nexport default Migration"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/core/classes/Migration/index.ts"],"sourcesContent":["import XqlFile from \"../../../xt/fields/File\";\nimport Xansql from \"../../Xansql\";\nimport TableMigration from \"./TableMigration\";\nimport Foreign from \"../ForeignInfo\";\nimport { XansqlDialectSchemaType } from \"../../types\";\nimport { iof, quote } from \"../../../utils\";\nimport XqlIDField from \"../../../xt/fields/IDField\";\n\nclass XansqlMigration {\n readonly xansql: Xansql\n readonly TableMigration: TableMigration\n\n constructor(xansql: Xansql) {\n this.xansql = xansql;\n this.TableMigration = new TableMigration(xansql);\n }\n\n async migrate(force?: boolean) {\n const xansql = this.xansql;\n const engine = xansql.config.dialect.engine;\n const { options, tables, indexes } = this.TableMigration.statements();\n\n if (force) {\n const models = Array.from(xansql.models.values()).reverse();\n\n for (let model of models) {\n const fileWhere: any[] = [];\n for (let column in model.schema) {\n const field = model.schema[column];\n if (iof(field, XqlFile)) {\n fileWhere.push({ [column]: { isNotNull: true } });\n }\n }\n\n if (Object.keys(fileWhere).length > 0) {\n try {\n await model.delete({\n where: fileWhere,\n select: { [model.IDColumn]: true }\n });\n } catch (error) { }\n }\n }\n\n for (let model of models) {\n const dsql = this.TableMigration.buildDrop(model);\n try {\n await xansql.execute(dsql);\n } catch (error) { }\n }\n }\n\n for (let option of options) {\n await xansql.execute(option);\n }\n\n for (let { sql } of tables) {\n await xansql.execute(sql);\n }\n\n for (let { sql } of indexes) {\n try {\n await xansql.execute(sql);\n } catch (error) { }\n }\n\n if (!force) {\n const raw_schema: XansqlDialectSchemaType = await xansql.getRawSchema() as any\n\n for (let { table } of tables) {\n const model = xansql.getModel(table);\n const model_columns = model.schema;\n const raw_columns = raw_schema[table] || [];\n\n for (let column in model_columns) {\n if (iof(model_columns[column], XqlIDField)) continue;\n const has_column = raw_columns.find((rc: any) => rc.name === column);\n if (!has_column && !Foreign.isArray(model_columns[column])) {\n const buildColumn = this.TableMigration.buildColumn(table, column);\n const sql = `ALTER TABLE ${quote(engine, table)} ADD COLUMN ${buildColumn};`;\n await xansql.execute(sql);\n }\n }\n\n for (let rc of raw_columns) {\n if (!(rc.name in model_columns)) {\n const sql = `ALTER TABLE ${quote(engine, table)} DROP COLUMN ${quote(engine, rc.name)};`;\n await xansql.execute(sql);\n }\n }\n\n for (let column in model_columns) {\n if (iof(model_columns[column], XqlIDField) || Foreign.isArray(model_columns[column])) continue;\n\n const has_column = raw_columns.find((rc: any) => rc.name === column);\n if (has_column) {\n const buildColumnSql = this.TableMigration.buildColumn(table, column).split(' ').slice(1).join(' ');\n const raw_column_sql = `${has_column.type.toUpperCase()} ${has_column.notnull ? 'NOT NULL' : 'NULL'}${has_column.default_value ? ' DEFAULT ' + has_column.default_value : ''}${has_column.unique ? \" UNIQUE\" : \"\"}`.trim();\n if (buildColumnSql !== raw_column_sql) {\n\n const buildColumn = this.TableMigration.buildColumn(table, column);\n const sql = `ALTER TABLE ${quote(engine, table)} ALTER COLUMN ${buildColumn};`;\n await xansql.execute(sql);\n }\n }\n }\n }\n }\n\n return true;\n }\n\n async generate() {\n const xansql = this.xansql;\n const models = Array.from(xansql.models.values());\n const raw_schema: XansqlDialectSchemaType = await xansql.getRawSchema() as any\n const tables = Object.keys(raw_schema);\n const migration_sql: string[] = [];\n\n for (let model of models) {\n if (!tables.includes(model.table)) {\n const { sql } = this.TableMigration.buildCreate(model);\n migration_sql.push(sql);\n } else {\n const model_columns = model.schema;\n const raw_columns = raw_schema[model.table] || [];\n\n for (let column in model_columns) {\n if (iof(model_columns[column], XqlIDField)) continue;\n const has_column = raw_columns.find((rc: any) => rc.name === column);\n if (!has_column && !Foreign.isArray(model_columns[column])) {\n const buildColumn = this.TableMigration.buildColumn(model.table, column);\n const sql = `ALTER TABLE ${quote(xansql.config.dialect.engine, model.table)} ADD COLUMN ${buildColumn};`;\n migration_sql.push(sql);\n }\n }\n\n for (let rc of raw_columns) {\n if (!(rc.name in model_columns)) {\n const sql = `ALTER TABLE ${quote(xansql.config.dialect.engine, model.table)} DROP COLUMN ${quote(xansql.config.dialect.engine, rc.name)};`;\n migration_sql.push(sql);\n }\n }\n\n for (let column in model_columns) {\n if (iof(model_columns[column], XqlIDField) || Foreign.isArray(model_columns[column])) continue;\n\n const has_column = raw_columns.find((rc: any) => rc.name === column);\n if (has_column) {\n const buildColumnSql = this.TableMigration.buildColumn(model.table, column).split(' ').slice(1).join(' ');\n const raw_column_sql = `${has_column.type.toUpperCase()} ${has_column.notnull ? 'NOT NULL' : 'NULL'}${has_column.default_value ? ' DEFAULT ' + has_column.default_value : ''}${has_column.unique ? \" UNIQUE\" : \"\"}`.trim();\n if (buildColumnSql !== raw_column_sql) {\n const buildColumn = this.TableMigration.buildColumn(model.table, column);\n const sql = `ALTER TABLE ${quote(xansql.config.dialect.engine, model.table)} ALTER COLUMN ${buildColumn};`;\n migration_sql.push(sql);\n }\n }\n }\n }\n }\n\n return migration_sql;\n\n }\n}\n\nexport default XansqlMigration;"],"names":["TableMigration","iof","XqlFile","XqlIDField","Foreign","quote"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/core/classes/Migration/index.ts"],"sourcesContent":["import XqlFile from \"../../../xt/fields/File\";\r\nimport Xansql from \"../../Xansql\";\r\nimport TableMigration from \"./TableMigration\";\r\nimport Foreign from \"../ForeignInfo\";\r\nimport { XansqlDialectSchemaType } from \"../../types\";\r\nimport { iof, quote } from \"../../../utils\";\r\nimport XqlIDField from \"../../../xt/fields/IDField\";\r\n\r\nclass XansqlMigration {\r\n readonly xansql: Xansql\r\n readonly TableMigration: TableMigration\r\n\r\n constructor(xansql: Xansql) {\r\n this.xansql = xansql;\r\n this.TableMigration = new TableMigration(xansql);\r\n }\r\n\r\n async migrate(force?: boolean) {\r\n const xansql = this.xansql;\r\n const engine = xansql.config.dialect.engine;\r\n const { options, tables, indexes } = this.TableMigration.statements();\r\n\r\n if (force) {\r\n const models = Array.from(xansql.models.values()).reverse();\r\n\r\n for (let model of models) {\r\n const fileWhere: any[] = [];\r\n for (let column in model.schema) {\r\n const field = model.schema[column];\r\n if (iof(field, XqlFile)) {\r\n fileWhere.push({ [column]: { isNotNull: true } });\r\n }\r\n }\r\n\r\n if (Object.keys(fileWhere).length > 0) {\r\n try {\r\n await model.delete({\r\n where: fileWhere,\r\n select: { [model.IDColumn]: true }\r\n });\r\n } catch (error) { }\r\n }\r\n }\r\n\r\n for (let model of models) {\r\n const dsql = this.TableMigration.buildDrop(model);\r\n try {\r\n await xansql.execute(dsql);\r\n } catch (error) { }\r\n }\r\n }\r\n\r\n for (let option of options) {\r\n await xansql.execute(option);\r\n }\r\n\r\n for (let { sql } of tables) {\r\n await xansql.execute(sql);\r\n }\r\n\r\n for (let { sql } of indexes) {\r\n try {\r\n await xansql.execute(sql);\r\n } catch (error) { }\r\n }\r\n\r\n if (!force) {\r\n const raw_schema: XansqlDialectSchemaType = await xansql.getRawSchema() as any\r\n\r\n for (let { table } of tables) {\r\n const model = xansql.getModel(table);\r\n const model_columns = model.schema;\r\n const raw_columns = raw_schema[table] || [];\r\n\r\n for (let column in model_columns) {\r\n if (iof(model_columns[column], XqlIDField)) continue;\r\n const has_column = raw_columns.find((rc: any) => rc.name === column);\r\n if (!has_column && !Foreign.isArray(model_columns[column])) {\r\n const buildColumn = this.TableMigration.buildColumn(table, column);\r\n const sql = `ALTER TABLE ${quote(engine, table)} ADD COLUMN ${buildColumn};`;\r\n await xansql.execute(sql);\r\n }\r\n }\r\n\r\n for (let rc of raw_columns) {\r\n if (!(rc.name in model_columns)) {\r\n const sql = `ALTER TABLE ${quote(engine, table)} DROP COLUMN ${quote(engine, rc.name)};`;\r\n await xansql.execute(sql);\r\n }\r\n }\r\n\r\n for (let column in model_columns) {\r\n if (iof(model_columns[column], XqlIDField) || Foreign.isArray(model_columns[column])) continue;\r\n\r\n const has_column = raw_columns.find((rc: any) => rc.name === column);\r\n if (has_column) {\r\n const buildColumnSql = this.TableMigration.buildColumn(table, column).split(' ').slice(1).join(' ');\r\n const raw_column_sql = `${has_column.type.toUpperCase()} ${has_column.notnull ? 'NOT NULL' : 'NULL'}${has_column.default_value ? ' DEFAULT ' + has_column.default_value : ''}${has_column.unique ? \" UNIQUE\" : \"\"}`.trim();\r\n if (buildColumnSql !== raw_column_sql) {\r\n\r\n const buildColumn = this.TableMigration.buildColumn(table, column);\r\n const sql = `ALTER TABLE ${quote(engine, table)} ALTER COLUMN ${buildColumn};`;\r\n await xansql.execute(sql);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n async generate() {\r\n const xansql = this.xansql;\r\n const models = Array.from(xansql.models.values());\r\n const raw_schema: XansqlDialectSchemaType = await xansql.getRawSchema() as any\r\n const tables = Object.keys(raw_schema);\r\n const migration_sql: string[] = [];\r\n\r\n for (let model of models) {\r\n if (!tables.includes(model.table)) {\r\n const { sql } = this.TableMigration.buildCreate(model);\r\n migration_sql.push(sql);\r\n } else {\r\n const model_columns = model.schema;\r\n const raw_columns = raw_schema[model.table] || [];\r\n\r\n for (let column in model_columns) {\r\n if (iof(model_columns[column], XqlIDField)) continue;\r\n const has_column = raw_columns.find((rc: any) => rc.name === column);\r\n if (!has_column && !Foreign.isArray(model_columns[column])) {\r\n const buildColumn = this.TableMigration.buildColumn(model.table, column);\r\n const sql = `ALTER TABLE ${quote(xansql.config.dialect.engine, model.table)} ADD COLUMN ${buildColumn};`;\r\n migration_sql.push(sql);\r\n }\r\n }\r\n\r\n for (let rc of raw_columns) {\r\n if (!(rc.name in model_columns)) {\r\n const sql = `ALTER TABLE ${quote(xansql.config.dialect.engine, model.table)} DROP COLUMN ${quote(xansql.config.dialect.engine, rc.name)};`;\r\n migration_sql.push(sql);\r\n }\r\n }\r\n\r\n for (let column in model_columns) {\r\n if (iof(model_columns[column], XqlIDField) || Foreign.isArray(model_columns[column])) continue;\r\n\r\n const has_column = raw_columns.find((rc: any) => rc.name === column);\r\n if (has_column) {\r\n const buildColumnSql = this.TableMigration.buildColumn(model.table, column).split(' ').slice(1).join(' ');\r\n const raw_column_sql = `${has_column.type.toUpperCase()} ${has_column.notnull ? 'NOT NULL' : 'NULL'}${has_column.default_value ? ' DEFAULT ' + has_column.default_value : ''}${has_column.unique ? \" UNIQUE\" : \"\"}`.trim();\r\n if (buildColumnSql !== raw_column_sql) {\r\n const buildColumn = this.TableMigration.buildColumn(model.table, column);\r\n const sql = `ALTER TABLE ${quote(xansql.config.dialect.engine, model.table)} ALTER COLUMN ${buildColumn};`;\r\n migration_sql.push(sql);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return migration_sql;\r\n\r\n }\r\n}\r\n\r\nexport default XansqlMigration;"],"names":["TableMigration","iof","XqlFile","XqlIDField","Foreign","quote"],"mappings":"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"}
|