xansql 1.0.7 → 1.0.9

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.
Files changed (212) hide show
  1. package/core/Xansql.cjs +7 -8
  2. package/core/Xansql.cjs.map +1 -1
  3. package/core/Xansql.d.ts +2 -3
  4. package/core/Xansql.mjs +7 -8
  5. package/core/Xansql.mjs.map +1 -1
  6. package/core/classes/ForeignInfo.cjs +3 -2
  7. package/core/classes/ForeignInfo.cjs.map +1 -1
  8. package/core/classes/ForeignInfo.d.ts +1 -2
  9. package/core/classes/ForeignInfo.mjs +3 -2
  10. package/core/classes/ForeignInfo.mjs.map +1 -1
  11. package/core/classes/Migration/TableMigration.cjs +24 -15
  12. package/core/classes/Migration/TableMigration.cjs.map +1 -1
  13. package/core/classes/Migration/TableMigration.mjs +25 -16
  14. package/core/classes/Migration/TableMigration.mjs.map +1 -1
  15. package/core/classes/Migration/index.cjs +13 -10
  16. package/core/classes/Migration/index.cjs.map +1 -1
  17. package/core/classes/Migration/index.mjs +14 -11
  18. package/core/classes/Migration/index.mjs.map +1 -1
  19. package/core/classes/{ModelFormatter.cjs → ModelFactory.cjs} +82 -56
  20. package/core/classes/ModelFactory.cjs.map +1 -0
  21. package/core/classes/{ModelFormatter.d.ts → ModelFactory.d.ts} +7 -2
  22. package/core/classes/{ModelFormatter.mjs → ModelFactory.mjs} +82 -56
  23. package/core/classes/ModelFactory.mjs.map +1 -0
  24. package/core/types.d.ts +1 -1
  25. package/dialect/MysqlDialect.cjs +7 -4
  26. package/dialect/MysqlDialect.cjs.map +1 -1
  27. package/dialect/MysqlDialect.d.ts +7 -4
  28. package/dialect/MysqlDialect.mjs +7 -4
  29. package/dialect/MysqlDialect.mjs.map +1 -1
  30. package/dialect/PostgresDialect.cjs +5 -2
  31. package/dialect/PostgresDialect.cjs.map +1 -1
  32. package/dialect/PostgresDialect.d.ts +5 -2
  33. package/dialect/PostgresDialect.mjs +5 -2
  34. package/dialect/PostgresDialect.mjs.map +1 -1
  35. package/dialect/SqliteDialect.cjs +3 -2
  36. package/dialect/SqliteDialect.cjs.map +1 -1
  37. package/dialect/SqliteDialect.d.ts +3 -2
  38. package/dialect/SqliteDialect.mjs +3 -2
  39. package/dialect/SqliteDialect.mjs.map +1 -1
  40. package/dialect/XansqlBridge/XansqlBridgeServer.cjs.map +1 -1
  41. package/dialect/XansqlBridge/XansqlBridgeServer.mjs.map +1 -1
  42. package/dialect/XansqlBridge/base.cjs +10 -5
  43. package/dialect/XansqlBridge/base.cjs.map +1 -1
  44. package/dialect/XansqlBridge/base.mjs +10 -5
  45. package/dialect/XansqlBridge/base.mjs.map +1 -1
  46. package/model/Args/WhereArgs.cjs +5 -8
  47. package/model/Args/WhereArgs.cjs.map +1 -1
  48. package/model/Args/WhereArgs.mjs +6 -9
  49. package/model/Args/WhereArgs.mjs.map +1 -1
  50. package/model/Base.cjs +2 -1
  51. package/model/Base.cjs.map +1 -1
  52. package/model/Base.mjs +2 -1
  53. package/model/Base.mjs.map +1 -1
  54. package/model/Executer/Aggregate/SelectArgs.cjs +2 -1
  55. package/model/Executer/Aggregate/SelectArgs.cjs.map +1 -1
  56. package/model/Executer/Aggregate/SelectArgs.mjs +2 -1
  57. package/model/Executer/Aggregate/SelectArgs.mjs.map +1 -1
  58. package/model/Executer/Aggregate/index.cjs +4 -4
  59. package/model/Executer/Aggregate/index.cjs.map +1 -1
  60. package/model/Executer/Aggregate/index.mjs +4 -4
  61. package/model/Executer/Aggregate/index.mjs.map +1 -1
  62. package/model/Executer/Create/CreateDataArgs.cjs +9 -5
  63. package/model/Executer/Create/CreateDataArgs.cjs.map +1 -1
  64. package/model/Executer/Create/CreateDataArgs.mjs +10 -6
  65. package/model/Executer/Create/CreateDataArgs.mjs.map +1 -1
  66. package/model/Executer/Create/index.cjs +1 -1
  67. package/model/Executer/Create/index.cjs.map +1 -1
  68. package/model/Executer/Create/index.mjs +1 -1
  69. package/model/Executer/Create/index.mjs.map +1 -1
  70. package/model/Executer/Delete/index.cjs +2 -1
  71. package/model/Executer/Delete/index.cjs.map +1 -1
  72. package/model/Executer/Delete/index.mjs +2 -1
  73. package/model/Executer/Delete/index.mjs.map +1 -1
  74. package/model/Executer/Find/SelectArgs.cjs +3 -3
  75. package/model/Executer/Find/SelectArgs.cjs.map +1 -1
  76. package/model/Executer/Find/SelectArgs.mjs +3 -3
  77. package/model/Executer/Find/SelectArgs.mjs.map +1 -1
  78. package/model/Executer/Update/UpdateDataArgs.cjs +4 -4
  79. package/model/Executer/Update/UpdateDataArgs.cjs.map +1 -1
  80. package/model/Executer/Update/UpdateDataArgs.mjs +5 -5
  81. package/model/Executer/Update/UpdateDataArgs.mjs.map +1 -1
  82. package/model/Executer/Update/index.cjs +1 -1
  83. package/model/Executer/Update/index.cjs.map +1 -1
  84. package/model/Executer/Update/index.mjs +1 -1
  85. package/model/Executer/Update/index.mjs.map +1 -1
  86. package/model/include/ValueFormatter.cjs +72 -17
  87. package/model/include/ValueFormatter.cjs.map +1 -1
  88. package/model/include/ValueFormatter.d.ts +1 -1
  89. package/model/include/ValueFormatter.mjs +72 -17
  90. package/model/include/ValueFormatter.mjs.map +1 -1
  91. package/model/index.cjs +8 -7
  92. package/model/index.cjs.map +1 -1
  93. package/model/index.mjs +8 -7
  94. package/model/index.mjs.map +1 -1
  95. package/package.json +12 -7
  96. package/utils/index.cjs +5 -2
  97. package/utils/index.cjs.map +1 -1
  98. package/utils/index.d.ts +2 -1
  99. package/utils/index.mjs +5 -3
  100. package/utils/index.mjs.map +1 -1
  101. package/xt/additional/IP.cjs +22 -0
  102. package/xt/additional/IP.cjs.map +1 -0
  103. package/xt/additional/IP.d.ts +6 -0
  104. package/xt/additional/IP.mjs +20 -0
  105. package/xt/additional/IP.mjs.map +1 -0
  106. package/xt/additional/Name.cjs +21 -0
  107. package/xt/additional/Name.cjs.map +1 -0
  108. package/xt/additional/Name.d.ts +6 -0
  109. package/xt/additional/Name.mjs +19 -0
  110. package/xt/additional/Name.mjs.map +1 -0
  111. package/xt/additional/Password.cjs +25 -0
  112. package/xt/additional/Password.cjs.map +1 -0
  113. package/xt/additional/Password.d.ts +6 -0
  114. package/xt/additional/Password.mjs +23 -0
  115. package/xt/additional/Password.mjs.map +1 -0
  116. package/xt/additional/Phone.cjs +21 -0
  117. package/xt/additional/Phone.cjs.map +1 -0
  118. package/xt/additional/Phone.d.ts +6 -0
  119. package/xt/additional/Phone.mjs +19 -0
  120. package/xt/additional/Phone.mjs.map +1 -0
  121. package/xt/additional/Photo.cjs +21 -0
  122. package/xt/additional/Photo.cjs.map +1 -0
  123. package/xt/additional/Photo.d.ts +6 -0
  124. package/xt/additional/Photo.mjs +19 -0
  125. package/xt/additional/Photo.mjs.map +1 -0
  126. package/xt/additional/Slug.cjs +21 -0
  127. package/xt/additional/Slug.cjs.map +1 -0
  128. package/xt/additional/Slug.d.ts +6 -0
  129. package/xt/additional/Slug.mjs +19 -0
  130. package/xt/additional/Slug.mjs.map +1 -0
  131. package/xt/additional/Url.cjs +26 -0
  132. package/xt/additional/Url.cjs.map +1 -0
  133. package/xt/additional/Url.d.ts +6 -0
  134. package/xt/additional/Url.mjs +24 -0
  135. package/xt/additional/Url.mjs.map +1 -0
  136. package/xt/additional/Username.cjs +21 -0
  137. package/xt/additional/Username.cjs.map +1 -0
  138. package/xt/additional/Username.d.ts +6 -0
  139. package/xt/additional/Username.mjs +19 -0
  140. package/xt/additional/Username.mjs.map +1 -0
  141. package/xt/fields/Array.cjs +9 -2
  142. package/xt/fields/Array.cjs.map +1 -1
  143. package/xt/fields/Array.d.ts +2 -0
  144. package/xt/fields/Array.mjs +9 -2
  145. package/xt/fields/Array.mjs.map +1 -1
  146. package/xt/fields/Boolean.cjs +10 -5
  147. package/xt/fields/Boolean.cjs.map +1 -1
  148. package/xt/fields/Boolean.d.ts +2 -0
  149. package/xt/fields/Boolean.mjs +10 -5
  150. package/xt/fields/Boolean.mjs.map +1 -1
  151. package/xt/fields/Date.cjs +12 -12
  152. package/xt/fields/Date.cjs.map +1 -1
  153. package/xt/fields/Date.d.ts +2 -0
  154. package/xt/fields/Date.mjs +12 -12
  155. package/xt/fields/Date.mjs.map +1 -1
  156. package/xt/fields/Enum.cjs +10 -4
  157. package/xt/fields/Enum.cjs.map +1 -1
  158. package/xt/fields/Enum.d.ts +2 -0
  159. package/xt/fields/Enum.mjs +10 -4
  160. package/xt/fields/Enum.mjs.map +1 -1
  161. package/xt/fields/File.cjs +9 -2
  162. package/xt/fields/File.cjs.map +1 -1
  163. package/xt/fields/File.d.ts +2 -0
  164. package/xt/fields/File.mjs +9 -2
  165. package/xt/fields/File.mjs.map +1 -1
  166. package/xt/fields/IDField.cjs +8 -0
  167. package/xt/fields/IDField.cjs.map +1 -1
  168. package/xt/fields/IDField.d.ts +2 -0
  169. package/xt/fields/IDField.mjs +8 -0
  170. package/xt/fields/IDField.mjs.map +1 -1
  171. package/xt/fields/Number.cjs +10 -5
  172. package/xt/fields/Number.cjs.map +1 -1
  173. package/xt/fields/Number.d.ts +2 -0
  174. package/xt/fields/Number.mjs +10 -5
  175. package/xt/fields/Number.mjs.map +1 -1
  176. package/xt/fields/Object.cjs +10 -5
  177. package/xt/fields/Object.cjs.map +1 -1
  178. package/xt/fields/Object.d.ts +2 -0
  179. package/xt/fields/Object.mjs +10 -5
  180. package/xt/fields/Object.mjs.map +1 -1
  181. package/xt/fields/Record.cjs +10 -5
  182. package/xt/fields/Record.cjs.map +1 -1
  183. package/xt/fields/Record.d.ts +2 -0
  184. package/xt/fields/Record.mjs +10 -5
  185. package/xt/fields/Record.mjs.map +1 -1
  186. package/xt/fields/Schema.cjs +12 -1
  187. package/xt/fields/Schema.cjs.map +1 -1
  188. package/xt/fields/Schema.d.ts +4 -1
  189. package/xt/fields/Schema.mjs +12 -1
  190. package/xt/fields/Schema.mjs.map +1 -1
  191. package/xt/fields/String.cjs +12 -9
  192. package/xt/fields/String.cjs.map +1 -1
  193. package/xt/fields/String.d.ts +2 -0
  194. package/xt/fields/String.mjs +12 -9
  195. package/xt/fields/String.mjs.map +1 -1
  196. package/xt/fields/Tuple.cjs +10 -5
  197. package/xt/fields/Tuple.cjs.map +1 -1
  198. package/xt/fields/Tuple.d.ts +2 -0
  199. package/xt/fields/Tuple.mjs +10 -5
  200. package/xt/fields/Tuple.mjs.map +1 -1
  201. package/xt/fields/Union.cjs +10 -5
  202. package/xt/fields/Union.cjs.map +1 -1
  203. package/xt/fields/Union.d.ts +2 -0
  204. package/xt/fields/Union.mjs +10 -5
  205. package/xt/fields/Union.mjs.map +1 -1
  206. package/xt/index.cjs +17 -101
  207. package/xt/index.cjs.map +1 -1
  208. package/xt/index.d.ts +16 -9
  209. package/xt/index.mjs +17 -101
  210. package/xt/index.mjs.map +1 -1
  211. package/core/classes/ModelFormatter.cjs.map +0 -1
  212. package/core/classes/ModelFormatter.mjs.map +0 -1
package/core/Xansql.cjs CHANGED
@@ -3,7 +3,7 @@
3
3
  var model_index = require('../model/index.cjs');
4
4
  var core_classes_XansqlTransaction = require('./classes/XansqlTransaction.cjs');
5
5
  var core_classes_XansqlConfig = require('./classes/XansqlConfig.cjs');
6
- var core_classes_ModelFormatter = require('./classes/ModelFormatter.cjs');
6
+ var core_classes_ModelFactory = require('./classes/ModelFactory.cjs');
7
7
  var core_classes_Migration_index = require('./classes/Migration/index.cjs');
8
8
  var core_classes_EventManager = require('./classes/EventManager.cjs');
9
9
  var core_XansqlError = require('./XansqlError.cjs');
@@ -11,13 +11,12 @@ var model_Schema = require('../model/Schema.cjs');
11
11
 
12
12
  class Xansql {
13
13
  constructor(config) {
14
- this.ModelFactory = new Map();
15
14
  this._aliases = new Map();
16
15
  this._timer = null;
17
16
  this.XansqlConfig = new core_classes_XansqlConfig(this, config);
18
17
  this.config = this.XansqlConfig.parse();
19
18
  this.XansqlTransaction = new core_classes_XansqlTransaction(this);
20
- this.ModelFormatter = new core_classes_ModelFormatter(this);
19
+ this.ModelFactory = new core_classes_ModelFactory(this);
21
20
  this.XansqlMigration = new core_classes_Migration_index(this);
22
21
  this.EventManager = new core_classes_EventManager();
23
22
  }
@@ -25,11 +24,11 @@ class Xansql {
25
24
  return this.config.dialect;
26
25
  }
27
26
  get models() {
28
- return this.ModelFormatter.format();
27
+ return this.ModelFactory.models;
29
28
  }
30
29
  clone(config) {
31
30
  const self = new XansqlClone(Object.assign(Object.assign({}, this.config), (config || {})));
32
- for (let [table, model] of this.ModelFactory) {
31
+ for (let [table, model] of this.models) {
33
32
  const schema = new model_Schema(table, model.schema);
34
33
  for (let hook in model.hooks) {
35
34
  schema.addHook(hook, model.hooks[hook]);
@@ -65,7 +64,7 @@ class Xansql {
65
64
  model: schema.table,
66
65
  });
67
66
  }
68
- if (this.ModelFactory.has(schema.table)) {
67
+ if (this.ModelFactory.models.has(schema.table)) {
69
68
  throw new core_XansqlError({
70
69
  message: `Model for table ${schema.table} already exists.`,
71
70
  model: schema.table,
@@ -74,11 +73,11 @@ class Xansql {
74
73
  model.alias = this.makeAlias(schema.table);
75
74
  model.xansql = this;
76
75
  model.hooks = schema.hooks;
77
- this.ModelFactory.set(schema.table, model);
76
+ this.ModelFactory.models.set(schema.table, model);
78
77
  // this will delay the model formatting to allow multiple models to be added before formatting
79
78
  clearTimeout(this._timer);
80
79
  this._timer = setTimeout(() => {
81
- this.ModelFormatter.format();
80
+ this.ModelFactory.format();
82
81
  }, 5);
83
82
  return model;
84
83
  }
@@ -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 ModelFormatter from \"./classes/ModelFormatter\";\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 readonly config: XansqlConfigTypeRequired;\n readonly ModelFactory = new Map<string, Model>()\n\n private _aliases = new Map<string, string>();\n private ModelFormatter: ModelFormatter;\n private XansqlConfig: XansqlConfig;\n readonly XansqlTransaction: XansqlTransaction;\n readonly EventManager: EventManager\n\n // SQL Generator Instances can be added here\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.ModelFormatter = new ModelFormatter(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.ModelFormatter.format()\n }\n\n clone(config?: Partial<XansqlConfigType>) {\n const self = new XansqlClone({ ...this.config, ...(config || {}) });\n for (let [table, model] of this.ModelFactory) {\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.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.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.ModelFormatter.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","ModelFormatter","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\";\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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"}
package/core/Xansql.d.ts CHANGED
@@ -5,11 +5,10 @@ import XansqlMigration from "./classes/Migration";
5
5
  import EventManager, { EventHandler, EventPayloads } from "./classes/EventManager";
6
6
  import Schema from "../model/Schema";
7
7
  declare class Xansql {
8
- readonly config: XansqlConfigTypeRequired;
9
- readonly ModelFactory: Map<string, Model>;
10
8
  private _aliases;
11
- private ModelFormatter;
9
+ private ModelFactory;
12
10
  private XansqlConfig;
11
+ readonly config: XansqlConfigTypeRequired;
13
12
  readonly XansqlTransaction: XansqlTransaction;
14
13
  readonly EventManager: EventManager;
15
14
  readonly XansqlMigration: XansqlMigration;
package/core/Xansql.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import Model from '../model/index.mjs';
2
2
  import XansqlTransection from './classes/XansqlTransaction.mjs';
3
3
  import XansqlConfig from './classes/XansqlConfig.mjs';
4
- import ModelFormatter from './classes/ModelFormatter.mjs';
4
+ import ModelFactgory from './classes/ModelFactory.mjs';
5
5
  import XansqlMigration from './classes/Migration/index.mjs';
6
6
  import EventManager from './classes/EventManager.mjs';
7
7
  import XansqlError from './XansqlError.mjs';
@@ -9,13 +9,12 @@ import Schema from '../model/Schema.mjs';
9
9
 
10
10
  class Xansql {
11
11
  constructor(config) {
12
- this.ModelFactory = new Map();
13
12
  this._aliases = new Map();
14
13
  this._timer = null;
15
14
  this.XansqlConfig = new XansqlConfig(this, config);
16
15
  this.config = this.XansqlConfig.parse();
17
16
  this.XansqlTransaction = new XansqlTransection(this);
18
- this.ModelFormatter = new ModelFormatter(this);
17
+ this.ModelFactory = new ModelFactgory(this);
19
18
  this.XansqlMigration = new XansqlMigration(this);
20
19
  this.EventManager = new EventManager();
21
20
  }
@@ -23,11 +22,11 @@ class Xansql {
23
22
  return this.config.dialect;
24
23
  }
25
24
  get models() {
26
- return this.ModelFormatter.format();
25
+ return this.ModelFactory.models;
27
26
  }
28
27
  clone(config) {
29
28
  const self = new XansqlClone(Object.assign(Object.assign({}, this.config), (config || {})));
30
- for (let [table, model] of this.ModelFactory) {
29
+ for (let [table, model] of this.models) {
31
30
  const schema = new Schema(table, model.schema);
32
31
  for (let hook in model.hooks) {
33
32
  schema.addHook(hook, model.hooks[hook]);
@@ -63,7 +62,7 @@ class Xansql {
63
62
  model: schema.table,
64
63
  });
65
64
  }
66
- if (this.ModelFactory.has(schema.table)) {
65
+ if (this.ModelFactory.models.has(schema.table)) {
67
66
  throw new XansqlError({
68
67
  message: `Model for table ${schema.table} already exists.`,
69
68
  model: schema.table,
@@ -72,11 +71,11 @@ class Xansql {
72
71
  model.alias = this.makeAlias(schema.table);
73
72
  model.xansql = this;
74
73
  model.hooks = schema.hooks;
75
- this.ModelFactory.set(schema.table, model);
74
+ this.ModelFactory.models.set(schema.table, model);
76
75
  // this will delay the model formatting to allow multiple models to be added before formatting
77
76
  clearTimeout(this._timer);
78
77
  this._timer = setTimeout(() => {
79
- this.ModelFormatter.format();
78
+ this.ModelFactory.format();
80
79
  }, 5);
81
80
  return model;
82
81
  }
@@ -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 ModelFormatter from \"./classes/ModelFormatter\";\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 readonly config: XansqlConfigTypeRequired;\n readonly ModelFactory = new Map<string, Model>()\n\n private _aliases = new Map<string, string>();\n private ModelFormatter: ModelFormatter;\n private XansqlConfig: XansqlConfig;\n readonly XansqlTransaction: XansqlTransaction;\n readonly EventManager: EventManager\n\n // SQL Generator Instances can be added here\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.ModelFormatter = new ModelFormatter(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.ModelFormatter.format()\n }\n\n clone(config?: Partial<XansqlConfigType>) {\n const self = new XansqlClone({ ...this.config, ...(config || {}) });\n for (let [table, model] of this.ModelFactory) {\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.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.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.ModelFormatter.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"],"mappings":"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"}
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,5 +1,6 @@
1
1
  'use strict';
2
2
 
3
+ var utils_index = require('../../utils/index.cjs');
3
4
  var xt_fields_Array = require('../../xt/fields/Array.cjs');
4
5
  var xt_fields_Schema = require('../../xt/fields/Schema.cjs');
5
6
  var core_XansqlError = require('../XansqlError.cjs');
@@ -16,10 +17,10 @@ class Foreign {
16
17
  return this.isArray(field) || this.isSchema(field);
17
18
  }
18
19
  static isArray(field) {
19
- return field instanceof xt_fields_Array && this.isSchema(field.type);
20
+ return utils_index.iof(field, xt_fields_Array) && this.isSchema(field.type);
20
21
  }
21
22
  static isSchema(field) {
22
- return field instanceof xt_fields_Schema;
23
+ return utils_index.iof(field, xt_fields_Schema);
23
24
  }
24
25
  static get(model, column) {
25
26
  model.table;
@@ -1 +1 @@
1
- {"version":3,"file":"ForeignInfo.cjs","sources":["../../../src/core/classes/ForeignInfo.ts"],"sourcesContent":["import Model from \"../../model\";\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 field instanceof XqlArray && this.isSchema((field as any).type)\n }\n\n static isSchema(field: XqlFields) {\n return field instanceof 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":["XqlArray","XqlSchema","XansqlError"],"mappings":";;;;;;AAgBA;;;;;;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,KAAK,YAAYA,eAAQ,IAAI,IAAI,CAAC,QAAQ,CAAE,KAAa,CAAC,IAAI,CAAC;IACzE;IAEA,OAAO,QAAQ,CAAC,KAAgB,EAAA;QAC7B,OAAO,KAAK,YAAYC,gBAAS;IACpC;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\";\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,5 +1,4 @@
1
1
  import Model from "../../model";
2
- import XqlSchema from "../../xt/fields/Schema";
3
2
  import { XqlFields } from "../../xt/types";
4
3
  export type ForeignInfoType = {
5
4
  table: string;
@@ -20,7 +19,7 @@ export type ForeignInfoType = {
20
19
  declare class Foreign {
21
20
  static is(field: XqlFields): boolean;
22
21
  static isArray(field: XqlFields): boolean;
23
- static isSchema(field: XqlFields): field is XqlSchema;
22
+ static isSchema(field: XqlFields): boolean;
24
23
  static get(model: Model, column: string): ForeignInfoType;
25
24
  }
26
25
  export default Foreign;
@@ -1,3 +1,4 @@
1
+ import { iof } from '../../utils/index.mjs';
1
2
  import XqlArray from '../../xt/fields/Array.mjs';
2
3
  import XqlSchema from '../../xt/fields/Schema.mjs';
3
4
  import XansqlError from '../XansqlError.mjs';
@@ -14,10 +15,10 @@ class Foreign {
14
15
  return this.isArray(field) || this.isSchema(field);
15
16
  }
16
17
  static isArray(field) {
17
- return field instanceof XqlArray && this.isSchema(field.type);
18
+ return iof(field, XqlArray) && this.isSchema(field.type);
18
19
  }
19
20
  static isSchema(field) {
20
- return field instanceof XqlSchema;
21
+ return iof(field, XqlSchema);
21
22
  }
22
23
  static get(model, column) {
23
24
  model.table;
@@ -1 +1 @@
1
- {"version":3,"file":"ForeignInfo.mjs","sources":["../../../src/core/classes/ForeignInfo.ts"],"sourcesContent":["import Model from \"../../model\";\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 field instanceof XqlArray && this.isSchema((field as any).type)\n }\n\n static isSchema(field: XqlFields) {\n return field instanceof 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":";;;;AAgBA;;;;;;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,KAAK,YAAY,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAE,KAAa,CAAC,IAAI,CAAC;IACzE;IAEA,OAAO,QAAQ,CAAC,KAAgB,EAAA;QAC7B,OAAO,KAAK,YAAY,SAAS;IACpC;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\";\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;;;;"}
@@ -18,6 +18,7 @@ var core_XansqlError = require('../../XansqlError.cjs');
18
18
  var core_classes_ForeignInfo = require('../ForeignInfo.cjs');
19
19
  var core_classes_Migration_ForeingMigration = require('./ForeingMigration.cjs');
20
20
  var core_classes_Migration_IndexMigration = require('./IndexMigration.cjs');
21
+ var model_include_ValueFormatter = require('../../../model/include/ValueFormatter.cjs');
21
22
 
22
23
  class Migration {
23
24
  constructor(xansql) {
@@ -67,6 +68,7 @@ class Migration {
67
68
  const table = model.table;
68
69
  const schema = (model === null || model === void 0 ? void 0 : model.schema) || {};
69
70
  let sqls = [];
71
+ let footers = [];
70
72
  for (const column in schema) {
71
73
  const field = schema[column];
72
74
  const meta = field.meta || {};
@@ -76,7 +78,7 @@ class Migration {
76
78
  const info = core_classes_ForeignInfo.get(model, column);
77
79
  const fk = this.ForeignKeyMigration.buildCreate(table, column, info.table, info.relation.main);
78
80
  if (fk) {
79
- sqls.push(fk);
81
+ footers.push(fk);
80
82
  }
81
83
  }
82
84
  if (meta.index && !meta.unique) {
@@ -84,6 +86,9 @@ class Migration {
84
86
  indexes.push({ table, sql: indexSql });
85
87
  }
86
88
  }
89
+ if (footers.length > 0) {
90
+ sqls.push(footers.join(','));
91
+ }
87
92
  let sql = `CREATE TABLE IF NOT EXISTS ${utils_index.quote(engine, table)} (${sqls.join(',')})`;
88
93
  if (engine === 'mysql') {
89
94
  sql += ` ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`;
@@ -105,15 +110,19 @@ class Migration {
105
110
  buildColumn(table, column) {
106
111
  const engine = this.xansql.config.dialect.engine;
107
112
  const model = this.xansql.models.get(table);
108
- const field = model === null || model === void 0 ? void 0 : model.schema[column];
109
- const meta = (field === null || field === void 0 ? void 0 : field.meta) || {};
113
+ const field = model.schema[column];
114
+ const meta = field.meta || {};
110
115
  const nullable = meta.nullable || meta.optional ? 'NULL' : 'NOT NULL';
111
116
  const unique = meta.unique ? 'UNIQUE' : '';
117
+ let default_value = '';
118
+ if (meta.default !== undefined) {
119
+ default_value = model_include_ValueFormatter.getDefaultSql(model, column);
120
+ }
112
121
  const col = (column, sqlType) => {
113
- return ` ${utils_index.quote(engine, column)} ${sqlType} ${nullable} ${unique}`.trim();
122
+ return ` ${utils_index.quote(engine, column)} ${sqlType} ${nullable} ${default_value} ${unique}`.trim().replace(/ +/g, ' ');
114
123
  };
115
124
  let sql = '';
116
- if (field instanceof xt_fields_IDField) {
125
+ if (utils_index.iof(field, xt_fields_IDField)) {
117
126
  if (engine === 'mysql') {
118
127
  sql += col(column, "INT AUTO_INCREMENT PRIMARY KEY");
119
128
  }
@@ -124,7 +133,7 @@ class Migration {
124
133
  sql += col(column, "INTEGER PRIMARY KEY AUTOINCREMENT");
125
134
  }
126
135
  }
127
- else if (field instanceof xt_fields_Schema) {
136
+ else if (utils_index.iof(field, xt_fields_Schema)) {
128
137
  if (engine === 'mysql') {
129
138
  sql += col(column, "INT");
130
139
  }
@@ -132,7 +141,7 @@ class Migration {
132
141
  sql += col(column, "INTEGER");
133
142
  }
134
143
  }
135
- else if (field instanceof xt_fields_String) {
144
+ else if (utils_index.iof(field, xt_fields_String)) {
136
145
  let length = meta.length || meta.max;
137
146
  if (meta.text || length > 65535 || engine === 'sqlite') {
138
147
  sql += col(column, "TEXT");
@@ -141,10 +150,10 @@ class Migration {
141
150
  sql += col(column, `VARCHAR(${length || 255})`);
142
151
  }
143
152
  }
144
- else if (field instanceof xt_fields_File) {
153
+ else if (utils_index.iof(field, xt_fields_File)) {
145
154
  sql += col(column, "VARCHAR(255)");
146
155
  }
147
- else if (field instanceof xt_fields_Number) {
156
+ else if (utils_index.iof(field, xt_fields_Number)) {
148
157
  if (engine === "mysql") {
149
158
  if (meta.integer) {
150
159
  sql += col(column, "INT");
@@ -168,7 +177,7 @@ class Migration {
168
177
  }
169
178
  }
170
179
  }
171
- else if (field instanceof xt_fields_Boolean) {
180
+ else if (utils_index.iof(field, xt_fields_Boolean)) {
172
181
  if (engine === "mysql" || engine === "postgresql") {
173
182
  sql += col(column, "BOOLEAN");
174
183
  }
@@ -176,7 +185,7 @@ class Migration {
176
185
  sql += col(column, "INTEGER"); // SQLite has no BOOLEAN → use INTEGER (0/1)
177
186
  }
178
187
  }
179
- else if (field instanceof xt_fields_Date) {
188
+ else if (utils_index.iof(field, xt_fields_Date)) {
180
189
  if (engine === "mysql") {
181
190
  sql += col(column, "DATETIME");
182
191
  }
@@ -187,7 +196,7 @@ class Migration {
187
196
  sql += col(column, "TEXT"); // store ISO string (SQLite has no native DATETIME)
188
197
  }
189
198
  }
190
- else if (field instanceof xt_fields_Enum) {
199
+ else if (utils_index.iof(field, xt_fields_Enum)) {
191
200
  if (engine === "mysql") {
192
201
  sql += col(column, `ENUM(${field.values.map((v) => `'${utils_index.escapeSqlValue(v)}'`).join(', ')})`);
193
202
  }
@@ -201,12 +210,12 @@ class Migration {
201
210
  sql += `"${column}" TEXT CHECK("${column}" IN (${values})) ${nullable} ${unique}, `;
202
211
  }
203
212
  }
204
- else if (field instanceof xt_fields_Object || field instanceof xt_fields_Record || field instanceof xt_fields_Tuple || field instanceof xt_fields_Union) {
213
+ else if (utils_index.iof(field, xt_fields_Object, xt_fields_Record, xt_fields_Tuple, xt_fields_Union)) {
205
214
  sql += col(column, "TEXT");
206
215
  }
207
- else if (field instanceof xt_fields_Array) {
216
+ else if (utils_index.iof(field, xt_fields_Array)) {
208
217
  const arrayType = field.type;
209
- const isSchemaArray = arrayType instanceof xt_fields_Schema;
218
+ const isSchemaArray = utils_index.iof(arrayType, xt_fields_Schema);
210
219
  if (!isSchemaArray) {
211
220
  sql += col(column, "TEXT");
212
221
  }
@@ -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, quote } from \"../../../utils\";\nimport Xansql from \"../../Xansql\";\nimport XansqlError from \"../../XansqlError\";\nimport Foreign from \"../ForeignInfo\";\nimport ForeignKeyMigration from \"./ForeingMigration\";\nimport IndexMigration from \"./IndexMigration\";\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\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 sqls.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\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);\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 const col = (column: string, sqlType: string) => {\n return ` ${quote(engine, column)} ${sqlType} ${nullable} ${unique}`.trim()\n };\n let sql = ''\n if (field instanceof 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 (field instanceof 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 (field instanceof 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 (field instanceof XqlFile) {\n sql += col(column, \"VARCHAR(255)\")\n } else if (field instanceof 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 (field instanceof 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 (field instanceof 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 (field instanceof 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 (field instanceof XqlObject || field instanceof XqlRecord || field instanceof XqlTuple || field instanceof XqlUnion) {\n sql += col(column, \"TEXT\")\n } else if (field instanceof XqlArray) {\n const arrayType = (field as any).type;\n const isSchemaArray = arrayType instanceof 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","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\";\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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"}