xansql 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/Types/fields/Array.d.ts +7 -0
  2. package/Types/fields/Array.js +6 -0
  3. package/Types/fields/Array.js.map +1 -0
  4. package/Types/fields/Array.mjs +6 -0
  5. package/Types/fields/Array.mjs.map +1 -0
  6. package/Types/fields/Boolean.d.ts +8 -0
  7. package/Types/fields/Boolean.js +11 -0
  8. package/Types/fields/Boolean.js.map +1 -0
  9. package/Types/fields/Boolean.mjs +11 -0
  10. package/Types/fields/Boolean.mjs.map +1 -0
  11. package/Types/fields/Date.d.ts +10 -0
  12. package/Types/fields/Date.js +22 -0
  13. package/Types/fields/Date.js.map +1 -0
  14. package/Types/fields/Date.mjs +22 -0
  15. package/Types/fields/Date.mjs.map +1 -0
  16. package/Types/fields/Enum.d.ts +8 -0
  17. package/Types/fields/Enum.js +10 -0
  18. package/Types/fields/Enum.js.map +1 -0
  19. package/Types/fields/Enum.mjs +10 -0
  20. package/Types/fields/Enum.mjs.map +1 -0
  21. package/Types/fields/File.d.ts +7 -0
  22. package/Types/fields/File.js +6 -0
  23. package/Types/fields/File.js.map +1 -0
  24. package/Types/fields/File.mjs +6 -0
  25. package/Types/fields/File.mjs.map +1 -0
  26. package/Types/fields/IDField.d.ts +6 -0
  27. package/Types/fields/IDField.js +2 -0
  28. package/Types/fields/IDField.js.map +1 -0
  29. package/Types/fields/IDField.mjs +2 -0
  30. package/Types/fields/IDField.mjs.map +1 -0
  31. package/Types/fields/Number.d.ts +8 -0
  32. package/Types/fields/Number.js +11 -0
  33. package/Types/fields/Number.js.map +1 -0
  34. package/Types/fields/Number.mjs +11 -0
  35. package/Types/fields/Number.mjs.map +1 -0
  36. package/Types/fields/Object.d.ts +8 -0
  37. package/Types/fields/Object.js +11 -0
  38. package/Types/fields/Object.js.map +1 -0
  39. package/Types/fields/Object.mjs +11 -0
  40. package/Types/fields/Object.mjs.map +1 -0
  41. package/Types/fields/Record.d.ts +8 -0
  42. package/Types/fields/Record.js +11 -0
  43. package/Types/fields/Record.js.map +1 -0
  44. package/Types/fields/Record.mjs +11 -0
  45. package/Types/fields/Record.mjs.map +1 -0
  46. package/Types/fields/Schema.d.ts +16 -0
  47. package/Types/fields/Schema.js +34 -0
  48. package/Types/fields/Schema.js.map +1 -0
  49. package/Types/fields/Schema.mjs +34 -0
  50. package/Types/fields/Schema.mjs.map +1 -0
  51. package/Types/fields/String.d.ts +10 -0
  52. package/Types/fields/String.js +20 -0
  53. package/Types/fields/String.js.map +1 -0
  54. package/Types/fields/String.mjs +20 -0
  55. package/Types/fields/String.mjs.map +1 -0
  56. package/Types/fields/Tuple.d.ts +8 -0
  57. package/Types/fields/Tuple.js +11 -0
  58. package/Types/fields/Tuple.js.map +1 -0
  59. package/Types/fields/Tuple.mjs +11 -0
  60. package/Types/fields/Tuple.mjs.map +1 -0
  61. package/Types/fields/Union.d.ts +8 -0
  62. package/Types/fields/Union.js +11 -0
  63. package/Types/fields/Union.js.map +1 -0
  64. package/Types/fields/Union.mjs +11 -0
  65. package/Types/fields/Union.mjs.map +1 -0
  66. package/Types/index.d.ts +56 -0
  67. package/Types/index.js +129 -0
  68. package/Types/index.js.map +1 -0
  69. package/Types/index.mjs +129 -0
  70. package/Types/index.mjs.map +1 -0
  71. package/Types/types.d.ts +20 -0
  72. package/core/ExcuteMeta.d.ts +11 -0
  73. package/core/ExcuteMeta.js +22 -0
  74. package/core/ExcuteMeta.js.map +1 -0
  75. package/core/ExcuteMeta.mjs +22 -0
  76. package/core/ExcuteMeta.mjs.map +1 -0
  77. package/core/Xansql.d.ts +46 -0
  78. package/core/Xansql.js +132 -0
  79. package/core/Xansql.js.map +1 -0
  80. package/core/Xansql.mjs +132 -0
  81. package/core/Xansql.mjs.map +1 -0
  82. package/core/XansqlError.js +11 -0
  83. package/core/XansqlError.js.map +1 -0
  84. package/core/XansqlError.mjs +11 -0
  85. package/core/XansqlError.mjs.map +1 -0
  86. package/core/XansqlResult.d.ts +12 -0
  87. package/core/XansqlResult.js +32 -0
  88. package/core/XansqlResult.js.map +1 -0
  89. package/core/XansqlResult.mjs +32 -0
  90. package/core/XansqlResult.mjs.map +1 -0
  91. package/core/classes/EventManager.d.ts +72 -0
  92. package/core/classes/EventManager.js +21 -0
  93. package/core/classes/EventManager.js.map +1 -0
  94. package/core/classes/EventManager.mjs +21 -0
  95. package/core/classes/EventManager.mjs.map +1 -0
  96. package/core/classes/ForeignInfo.js +51 -0
  97. package/core/classes/ForeignInfo.js.map +1 -0
  98. package/core/classes/ForeignInfo.mjs +51 -0
  99. package/core/classes/ForeignInfo.mjs.map +1 -0
  100. package/core/classes/Migration/ForeingMigration.d.ts +12 -0
  101. package/core/classes/Migration/ForeingMigration.js +52 -0
  102. package/core/classes/Migration/ForeingMigration.js.map +1 -0
  103. package/core/classes/Migration/ForeingMigration.mjs +52 -0
  104. package/core/classes/Migration/ForeingMigration.mjs.map +1 -0
  105. package/core/classes/Migration/IndexMigration.d.ts +12 -0
  106. package/core/classes/Migration/IndexMigration.js +49 -0
  107. package/core/classes/Migration/IndexMigration.js.map +1 -0
  108. package/core/classes/Migration/IndexMigration.mjs +49 -0
  109. package/core/classes/Migration/IndexMigration.mjs.map +1 -0
  110. package/core/classes/Migration/TableMigration.d.ts +33 -0
  111. package/core/classes/Migration/TableMigration.js +215 -0
  112. package/core/classes/Migration/TableMigration.js.map +1 -0
  113. package/core/classes/Migration/TableMigration.mjs +215 -0
  114. package/core/classes/Migration/TableMigration.mjs.map +1 -0
  115. package/core/classes/Migration/index.d.ts +12 -0
  116. package/core/classes/Migration/index.js +189 -0
  117. package/core/classes/Migration/index.js.map +1 -0
  118. package/core/classes/Migration/index.mjs +189 -0
  119. package/core/classes/Migration/index.mjs.map +1 -0
  120. package/core/classes/ModelFormatter.js +166 -0
  121. package/core/classes/ModelFormatter.js.map +1 -0
  122. package/core/classes/ModelFormatter.mjs +166 -0
  123. package/core/classes/ModelFormatter.mjs.map +1 -0
  124. package/core/classes/TypesGenerator.d.ts +13 -0
  125. package/core/classes/TypesGenerator.js +170 -0
  126. package/core/classes/TypesGenerator.js.map +1 -0
  127. package/core/classes/TypesGenerator.mjs +170 -0
  128. package/core/classes/TypesGenerator.mjs.map +1 -0
  129. package/core/classes/XansqlConfig.js +33 -0
  130. package/core/classes/XansqlConfig.js.map +1 -0
  131. package/core/classes/XansqlConfig.mjs +33 -0
  132. package/core/classes/XansqlConfig.mjs.map +1 -0
  133. package/core/classes/XansqlFetch.js +304 -0
  134. package/core/classes/XansqlFetch.js.map +1 -0
  135. package/core/classes/XansqlFetch.mjs +304 -0
  136. package/core/classes/XansqlFetch.mjs.map +1 -0
  137. package/core/classes/XansqlTransaction.d.ts +13 -0
  138. package/core/classes/XansqlTransaction.js +46 -0
  139. package/core/classes/XansqlTransaction.js.map +1 -0
  140. package/core/classes/XansqlTransaction.mjs +46 -0
  141. package/core/classes/XansqlTransaction.mjs.map +1 -0
  142. package/core/type.d.ts +117 -0
  143. package/index.d.ts +3 -0
  144. package/index.js +1 -0
  145. package/index.js.map +1 -0
  146. package/index.mjs +1 -0
  147. package/index.mjs.map +1 -0
  148. package/model/Args/RelationExcuteArgs.js +5 -0
  149. package/model/Args/RelationExcuteArgs.js.map +1 -0
  150. package/model/Args/RelationExcuteArgs.mjs +5 -0
  151. package/model/Args/RelationExcuteArgs.mjs.map +1 -0
  152. package/model/Args/WhereArgs.js +226 -0
  153. package/model/Args/WhereArgs.js.map +1 -0
  154. package/model/Args/WhereArgs.mjs +226 -0
  155. package/model/Args/WhereArgs.mjs.map +1 -0
  156. package/model/Base.d.ts +26 -0
  157. package/model/Base.js +64 -0
  158. package/model/Base.js.map +1 -0
  159. package/model/Base.mjs +64 -0
  160. package/model/Base.mjs.map +1 -0
  161. package/model/Executer/Aggregate/SelectArgs.js +59 -0
  162. package/model/Executer/Aggregate/SelectArgs.js.map +1 -0
  163. package/model/Executer/Aggregate/SelectArgs.mjs +59 -0
  164. package/model/Executer/Aggregate/SelectArgs.mjs.map +1 -0
  165. package/model/Executer/Aggregate/index.js +59 -0
  166. package/model/Executer/Aggregate/index.js.map +1 -0
  167. package/model/Executer/Aggregate/index.mjs +59 -0
  168. package/model/Executer/Aggregate/index.mjs.map +1 -0
  169. package/model/Executer/Create/CreateDataArgs.js +145 -0
  170. package/model/Executer/Create/CreateDataArgs.js.map +1 -0
  171. package/model/Executer/Create/CreateDataArgs.mjs +145 -0
  172. package/model/Executer/Create/CreateDataArgs.mjs.map +1 -0
  173. package/model/Executer/Create/index.js +101 -0
  174. package/model/Executer/Create/index.js.map +1 -0
  175. package/model/Executer/Create/index.mjs +101 -0
  176. package/model/Executer/Create/index.mjs.map +1 -0
  177. package/model/Executer/Delete/index.js +112 -0
  178. package/model/Executer/Delete/index.js.map +1 -0
  179. package/model/Executer/Delete/index.mjs +112 -0
  180. package/model/Executer/Delete/index.mjs.map +1 -0
  181. package/model/Executer/Find/DistinctArgs.js +32 -0
  182. package/model/Executer/Find/DistinctArgs.js.map +1 -0
  183. package/model/Executer/Find/DistinctArgs.mjs +32 -0
  184. package/model/Executer/Find/DistinctArgs.mjs.map +1 -0
  185. package/model/Executer/Find/LimitArgs.js +31 -0
  186. package/model/Executer/Find/LimitArgs.js.map +1 -0
  187. package/model/Executer/Find/LimitArgs.mjs +31 -0
  188. package/model/Executer/Find/LimitArgs.mjs.map +1 -0
  189. package/model/Executer/Find/OrderByArgs.js +29 -0
  190. package/model/Executer/Find/OrderByArgs.js.map +1 -0
  191. package/model/Executer/Find/OrderByArgs.mjs +29 -0
  192. package/model/Executer/Find/OrderByArgs.mjs.map +1 -0
  193. package/model/Executer/Find/SelectArgs.js +119 -0
  194. package/model/Executer/Find/SelectArgs.js.map +1 -0
  195. package/model/Executer/Find/SelectArgs.mjs +119 -0
  196. package/model/Executer/Find/SelectArgs.mjs.map +1 -0
  197. package/model/Executer/Find/index.js +338 -0
  198. package/model/Executer/Find/index.js.map +1 -0
  199. package/model/Executer/Find/index.mjs +338 -0
  200. package/model/Executer/Find/index.mjs.map +1 -0
  201. package/model/Executer/Update/UpdateDataArgs.js +124 -0
  202. package/model/Executer/Update/UpdateDataArgs.js.map +1 -0
  203. package/model/Executer/Update/UpdateDataArgs.mjs +124 -0
  204. package/model/Executer/Update/UpdateDataArgs.mjs.map +1 -0
  205. package/model/Executer/Update/index.js +207 -0
  206. package/model/Executer/Update/index.js.map +1 -0
  207. package/model/Executer/Update/index.mjs +207 -0
  208. package/model/Executer/Update/index.mjs.map +1 -0
  209. package/model/include/ValueFormatter.js +99 -0
  210. package/model/include/ValueFormatter.js.map +1 -0
  211. package/model/include/ValueFormatter.mjs +99 -0
  212. package/model/include/ValueFormatter.mjs.map +1 -0
  213. package/model/index.d.ts +29 -0
  214. package/model/index.js +236 -0
  215. package/model/index.js.map +1 -0
  216. package/model/index.mjs +236 -0
  217. package/model/index.mjs.map +1 -0
  218. package/model/type.d.ts +106 -0
  219. package/package.json +32 -0
  220. package/readme.md +359 -0
  221. package/utils/chunker.js +53 -0
  222. package/utils/chunker.js.map +1 -0
  223. package/utils/chunker.mjs +53 -0
  224. package/utils/chunker.mjs.map +1 -0
  225. package/utils/index.js +49 -0
  226. package/utils/index.js.map +1 -0
  227. package/utils/index.mjs +49 -0
  228. package/utils/index.mjs.map +1 -0
  229. package/utils/sha256.js +66 -0
  230. package/utils/sha256.js.map +1 -0
  231. package/utils/sha256.mjs +66 -0
  232. package/utils/sha256.mjs.map +1 -0
@@ -0,0 +1,189 @@
1
+ import XqlFile from'../../../Types/fields/File.mjs';import ExecuteMeta from'../../ExcuteMeta.mjs';import Migration from'./TableMigration.mjs';import Foreign from'../ForeignInfo.mjs';import {quote}from'../../../utils/index.mjs';import XqlIDField from'../../../Types/fields/IDField.mjs';class XansqlMigration {
2
+ constructor(xansql) {
3
+ this.xansql = xansql;
4
+ this.TableMigration = new Migration(xansql);
5
+ }
6
+ async migrate(force) {
7
+ const xansql = this.xansql;
8
+ const engine = xansql.config.dialect.engine;
9
+ const { options, tables, indexes } = this.TableMigration.statements();
10
+ if (force) {
11
+ const models = Array.from(xansql.ModelFactory.values()).reverse();
12
+ for (let model of models) {
13
+ const fileWhere = [];
14
+ for (let column in model.schema) {
15
+ const field = model.schema[column];
16
+ if (field instanceof XqlFile) {
17
+ fileWhere.push({ [column]: { isNotNull: true } });
18
+ }
19
+ }
20
+ if (Object.keys(fileWhere).length > 0) {
21
+ try {
22
+ await model.delete({
23
+ where: fileWhere,
24
+ select: { [model.IDColumn]: true }
25
+ });
26
+ }
27
+ catch (error) { }
28
+ }
29
+ }
30
+ for (let model of models) {
31
+ const dsql = this.TableMigration.buildDrop(model);
32
+ let executeId = undefined;
33
+ if (typeof window !== "undefined") {
34
+ executeId = ExecuteMeta.set({
35
+ model,
36
+ action: "DROP_TABLE",
37
+ modelType: "main",
38
+ args: {}
39
+ });
40
+ }
41
+ await xansql.execute(dsql, executeId);
42
+ }
43
+ }
44
+ for (let option of options) {
45
+ await xansql.dialect.execute(option);
46
+ }
47
+ for (let { table, sql } of tables) {
48
+ let executeId = undefined;
49
+ if (typeof window !== "undefined") {
50
+ executeId = ExecuteMeta.set({
51
+ model: xansql.getModel(table),
52
+ action: "CREATE_TABLE",
53
+ modelType: "main",
54
+ args: {}
55
+ });
56
+ }
57
+ await xansql.execute(sql, executeId);
58
+ }
59
+ for (let { sql, table } of indexes) {
60
+ try {
61
+ let executeId = undefined;
62
+ if (typeof window !== "undefined") {
63
+ executeId = ExecuteMeta.set({
64
+ model: xansql.getModel(table),
65
+ action: "CREATE_INDEX",
66
+ modelType: "main",
67
+ args: {}
68
+ });
69
+ }
70
+ await xansql.execute(sql, executeId);
71
+ }
72
+ catch (error) { }
73
+ }
74
+ if (!force) {
75
+ const raw_schema = await xansql.getRawSchema();
76
+ for (let { table } of tables) {
77
+ const model = xansql.getModel(table);
78
+ const model_columns = model.schema;
79
+ const raw_columns = raw_schema[table] || [];
80
+ for (let column in model_columns) {
81
+ if (model_columns[column] instanceof XqlIDField)
82
+ continue;
83
+ const has_column = raw_columns.find((rc) => rc.name === column);
84
+ if (!has_column && !Foreign.isArray(model_columns[column])) {
85
+ let executeId = undefined;
86
+ if (typeof window !== "undefined") {
87
+ executeId = ExecuteMeta.set({
88
+ model,
89
+ action: "ADD_COLUMN",
90
+ modelType: "main",
91
+ args: { column }
92
+ });
93
+ }
94
+ const buildColumn = this.TableMigration.buildColumn(table, column);
95
+ const sql = `ALTER TABLE ${quote(engine, table)} ADD COLUMN ${buildColumn};`;
96
+ await xansql.execute(sql, executeId);
97
+ }
98
+ }
99
+ for (let rc of raw_columns) {
100
+ if (!(rc.name in model_columns)) {
101
+ let executeId = undefined;
102
+ if (typeof window !== "undefined") {
103
+ executeId = ExecuteMeta.set({
104
+ model,
105
+ action: "DROP_COLUMN",
106
+ modelType: "main",
107
+ args: { column: rc.name }
108
+ });
109
+ }
110
+ const sql = `ALTER TABLE ${quote(engine, table)} DROP COLUMN ${quote(engine, rc.name)};`;
111
+ await xansql.execute(sql, executeId);
112
+ }
113
+ }
114
+ for (let column in model_columns) {
115
+ if (model_columns[column] instanceof XqlIDField || Foreign.isArray(model_columns[column]))
116
+ continue;
117
+ const has_column = raw_columns.find((rc) => rc.name === column);
118
+ if (has_column) {
119
+ const buildColumnSql = this.TableMigration.buildColumn(table, column).split(' ').slice(1).join(' ');
120
+ 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();
121
+ if (buildColumnSql !== raw_column_sql) {
122
+ let executeId = undefined;
123
+ if (typeof window !== "undefined") {
124
+ executeId = ExecuteMeta.set({
125
+ model,
126
+ action: "MODIFY_COLUMN",
127
+ modelType: "main",
128
+ args: { column }
129
+ });
130
+ }
131
+ const buildColumn = this.TableMigration.buildColumn(table, column);
132
+ const sql = `ALTER TABLE ${quote(engine, table)} ALTER COLUMN ${buildColumn};`;
133
+ await xansql.execute(sql, executeId);
134
+ }
135
+ }
136
+ }
137
+ }
138
+ }
139
+ return true;
140
+ }
141
+ async generate() {
142
+ const xansql = this.xansql;
143
+ const models = Array.from(xansql.ModelFactory.values());
144
+ const raw_schema = await xansql.getRawSchema();
145
+ const tables = Object.keys(raw_schema);
146
+ const migration_sql = [];
147
+ for (let model of models) {
148
+ if (!tables.includes(model.table)) {
149
+ const { sql } = this.TableMigration.buildCreate(model);
150
+ migration_sql.push(sql);
151
+ }
152
+ else {
153
+ const model_columns = model.schema;
154
+ const raw_columns = raw_schema[model.table] || [];
155
+ for (let column in model_columns) {
156
+ if (model_columns[column] instanceof XqlIDField)
157
+ continue;
158
+ const has_column = raw_columns.find((rc) => rc.name === column);
159
+ if (!has_column && !Foreign.isArray(model_columns[column])) {
160
+ const buildColumn = this.TableMigration.buildColumn(model.table, column);
161
+ const sql = `ALTER TABLE ${quote(xansql.config.dialect.engine, model.table)} ADD COLUMN ${buildColumn};`;
162
+ migration_sql.push(sql);
163
+ }
164
+ }
165
+ for (let rc of raw_columns) {
166
+ if (!(rc.name in model_columns)) {
167
+ const sql = `ALTER TABLE ${quote(xansql.config.dialect.engine, model.table)} DROP COLUMN ${quote(xansql.config.dialect.engine, rc.name)};`;
168
+ migration_sql.push(sql);
169
+ }
170
+ }
171
+ for (let column in model_columns) {
172
+ if (model_columns[column] instanceof XqlIDField || Foreign.isArray(model_columns[column]))
173
+ continue;
174
+ const has_column = raw_columns.find((rc) => rc.name === column);
175
+ if (has_column) {
176
+ const buildColumnSql = this.TableMigration.buildColumn(model.table, column).split(' ').slice(1).join(' ');
177
+ 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();
178
+ if (buildColumnSql !== raw_column_sql) {
179
+ const buildColumn = this.TableMigration.buildColumn(model.table, column);
180
+ const sql = `ALTER TABLE ${quote(xansql.config.dialect.engine, model.table)} ALTER COLUMN ${buildColumn};`;
181
+ migration_sql.push(sql);
182
+ }
183
+ }
184
+ }
185
+ }
186
+ }
187
+ return migration_sql;
188
+ }
189
+ }export{XansqlMigration as default};//# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/core/classes/Migration/index.ts"],"sourcesContent":["import XqlFile from \"../../../Types/fields/File\";\nimport ExecuteMeta from \"../../ExcuteMeta\";\nimport Xansql from \"../../Xansql\";\nimport TableMigration from \"./TableMigration\";\nimport Foreign from \"../ForeignInfo\";\nimport { XansqlDialectSchemaType } from \"../../type\";\nimport { quote } from \"../../../utils\";\nimport XqlIDField from \"../../../Types/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 if (force) {\n const models = Array.from(xansql.ModelFactory.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 (field instanceof 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 let executeId = undefined;\n if (typeof window !== \"undefined\") {\n executeId = ExecuteMeta.set({\n model,\n action: \"DROP_TABLE\",\n modelType: \"main\",\n args: {}\n });\n }\n await xansql.execute(dsql, executeId);\n }\n }\n\n for (let option of options) {\n await xansql.dialect.execute(option);\n }\n\n for (let { table, sql } of tables) {\n let executeId = undefined;\n if (typeof window !== \"undefined\") {\n executeId = ExecuteMeta.set({\n model: xansql.getModel(table),\n action: \"CREATE_TABLE\",\n modelType: \"main\",\n args: {}\n });\n }\n\n await xansql.execute(sql, executeId);\n }\n\n for (let { sql, table } of indexes) {\n try {\n let executeId = undefined;\n if (typeof window !== \"undefined\") {\n executeId = ExecuteMeta.set({\n model: xansql.getModel(table),\n action: \"CREATE_INDEX\",\n modelType: \"main\",\n args: {}\n });\n }\n await xansql.execute(sql, executeId);\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 (model_columns[column] instanceof XqlIDField) continue;\n const has_column = raw_columns.find((rc: any) => rc.name === column);\n if (!has_column && !Foreign.isArray(model_columns[column])) {\n let executeId = undefined;\n if (typeof window !== \"undefined\") {\n executeId = ExecuteMeta.set({\n model,\n action: \"ADD_COLUMN\",\n modelType: \"main\",\n args: { column }\n });\n }\n\n const buildColumn = this.TableMigration.buildColumn(table, column);\n const sql = `ALTER TABLE ${quote(engine, table)} ADD COLUMN ${buildColumn};`;\n await xansql.execute(sql, executeId);\n }\n }\n\n for (let rc of raw_columns) {\n if (!(rc.name in model_columns)) {\n let executeId = undefined;\n if (typeof window !== \"undefined\") {\n executeId = ExecuteMeta.set({\n model,\n action: \"DROP_COLUMN\",\n modelType: \"main\",\n args: { column: rc.name }\n });\n }\n\n const sql = `ALTER TABLE ${quote(engine, table)} DROP COLUMN ${quote(engine, rc.name)};`;\n await xansql.execute(sql, executeId);\n }\n }\n\n for (let column in model_columns) {\n if (model_columns[column] instanceof 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 let executeId = undefined;\n if (typeof window !== \"undefined\") {\n executeId = ExecuteMeta.set({\n model,\n action: \"MODIFY_COLUMN\",\n modelType: \"main\",\n args: { column }\n });\n }\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, executeId);\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.ModelFactory.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 (model_columns[column] instanceof 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 (model_columns[column] instanceof 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"],"mappings":"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"}
@@ -0,0 +1,166 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var index=require('../../Types/index.js'),ForeignInfo=require('./ForeignInfo.js'),XansqlError=require('../XansqlError.js');/**
2
+ * this class will format the models and assign relationships
3
+ */
4
+ class ModelFormatter {
5
+ constructor(xansql) {
6
+ this.isFormated = false;
7
+ this.restricted_columns = [
8
+ "ADD", "ALL", "ALTER", "AND", "ANY", "AS", "ASC", "BETWEEN", "BY",
9
+ "CASE", "CAST", "CHECK", "COLUMN", "CONSTRAINT", "CREATE", "CROSS",
10
+ "CURRENT", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP",
11
+ "DEFAULT", "DELETE", "DESC", "DISTINCT", "DROP", "ELSE", "EXISTS",
12
+ "FALSE", "FETCH", "FOR", "FOREIGN", "FROM", "FULL", "GRANT", "GROUP",
13
+ "HAVING", "INNER", "INSERT", "INTERSECT", "INTO", "IS", "JOIN",
14
+ "KEY", "LEFT", "LIKE", "LIMIT", "NOT", "NULL", "ON", "OR", "ORDER",
15
+ "OUTER", "PRIMARY", "REFERENCES", "RIGHT", "ROLLBACK", "SELECT", "SET",
16
+ "TABLE", "THEN", "TO", "TRUE", "UNION", "UNIQUE", "UPDATE",
17
+ "USING", "VALUES", "VIEW", "WHEN", "WHERE", "WITH", "SECTION",
18
+ // custom
19
+ "INDEX", "OPTIONAL", "NULLABLE", "META", "METAARRAY", "SCHEMA", "ARRAY",
20
+ "EQUALS", "NOT", "LT", "LTE", "GT", "GTE", "IN", "NOTIN", "BETWEEN", "NOTBETWEEN", "CONTAINS", "NOTCONTAINS", "STARTSWITH", "ENDSWITH", "ISNULL", "ISNOTNULL", "ISEMPTY", "ISNOTEMPTY", "ISTRUE", "ISFALSE",
21
+ "AGGREGATE",
22
+ ];
23
+ this.xansql = xansql;
24
+ }
25
+ restrictedColumn(column) {
26
+ return this.restricted_columns.includes(column.toUpperCase());
27
+ }
28
+ format() {
29
+ if (this.isFormated)
30
+ return this.xansql.ModelFactory;
31
+ this.isFormated = true;
32
+ const models = this.xansql.ModelFactory;
33
+ // sort models by foreign key dependencies
34
+ const sortedTables = [];
35
+ for (let table of models.keys()) {
36
+ const model = models.get(table);
37
+ const schema = model.schema;
38
+ for (let column in schema) {
39
+ let field = schema[column];
40
+ if (ForeignInfo.default.isSchema(field)) {
41
+ const foreignInfo = ForeignInfo.default.get(model, column);
42
+ const foreignTable = foreignInfo.table;
43
+ const indexOfMainTable = sortedTables.indexOf(table);
44
+ const indexOfForeignTable = sortedTables.indexOf(foreignTable);
45
+ if (indexOfForeignTable === -1) {
46
+ // foreign table not in sorted list, add it before main table
47
+ sortedTables.splice(indexOfMainTable, 0, foreignTable);
48
+ }
49
+ else if (indexOfForeignTable > indexOfMainTable) {
50
+ // foreign table is after main table, move it before
51
+ sortedTables.splice(indexOfForeignTable, 1);
52
+ sortedTables.splice(indexOfMainTable, 0, foreignTable);
53
+ }
54
+ }
55
+ }
56
+ if (!sortedTables.includes(table)) {
57
+ sortedTables.push(table);
58
+ }
59
+ }
60
+ // update models based with sorted tables
61
+ const sortedModels = new Map();
62
+ for (let table of sortedTables) {
63
+ const model = models.get(table);
64
+ sortedModels.set(table, model);
65
+ }
66
+ // assign relationships
67
+ models.clear();
68
+ for (let [table, model] of sortedModels) {
69
+ models.set(table, model);
70
+ }
71
+ for (let model of models.values()) {
72
+ for (let column in model.schema) {
73
+ if (this.restrictedColumn(column)) {
74
+ throw new XansqlError.default({
75
+ message: `Column name "${column}" in model "${model.table}" is restricted and cannot be used.`,
76
+ model: model.table,
77
+ column,
78
+ });
79
+ }
80
+ let field = model.schema[column];
81
+ if (ForeignInfo.default.isSchema(field)) {
82
+ this.formatIsSchema(model, column);
83
+ }
84
+ else if (ForeignInfo.default.isArray(field)) {
85
+ this.formatIsArray(model, column);
86
+ }
87
+ }
88
+ }
89
+ return models;
90
+ }
91
+ formatIsSchema(model, column) {
92
+ const models = this.xansql.ModelFactory;
93
+ let field = model.schema[column];
94
+ const FModel = models.get(field.table);
95
+ if (!FModel) {
96
+ throw new XansqlError.default({
97
+ message: `Foreign model ${field.table} not found for ${model.table}.${column}`,
98
+ model: model.table,
99
+ column
100
+ });
101
+ }
102
+ if (field.column in FModel.schema) {
103
+ const foreignCol = FModel.schema[field.column];
104
+ if (ForeignInfo.default.isArray(foreignCol)) {
105
+ const foreignType = foreignCol.type;
106
+ if (foreignType.table !== model.table || foreignType.column !== column) {
107
+ throw new XansqlError.default({
108
+ message: `Foreign column ${field.table}.${field.column} does not reference back to ${model.table}.${column}`,
109
+ model: model.table,
110
+ column
111
+ });
112
+ }
113
+ }
114
+ else {
115
+ throw new XansqlError.default({
116
+ message: `Foreign column ${field.table}.${field.column} is not an array referencing back to ${model.table}.${column}`,
117
+ model: model.table,
118
+ column
119
+ });
120
+ }
121
+ }
122
+ else {
123
+ const n = index.xt.schema(model.table, column).nullable();
124
+ n.dynamic = true; // to identify that this is a dynamically added field
125
+ FModel.schema[field.column] = index.xt.array(n);
126
+ models.set(FModel.table, FModel);
127
+ }
128
+ }
129
+ formatIsArray(model, column) {
130
+ const models = this.xansql.ModelFactory;
131
+ let field = model.schema[column];
132
+ const FSchemaField = field.type;
133
+ const FModel = models.get(FSchemaField.table);
134
+ if (!FModel) {
135
+ throw new XansqlError.default({
136
+ message: `Foreign model ${FSchemaField.table} not found for ${model.table}.${column}`,
137
+ model: model.table,
138
+ column
139
+ });
140
+ }
141
+ if (FSchemaField.column in FModel.schema) {
142
+ const foreignCol = FModel.schema[FSchemaField.column];
143
+ if (!ForeignInfo.default.isSchema(foreignCol) || foreignCol.table !== model.table || foreignCol.column !== column) {
144
+ throw new XansqlError.default({
145
+ message: `Foreign column ${FSchemaField.table}.${FSchemaField.column} does not reference back to ${model.table}.${column}`,
146
+ model: model.table,
147
+ column
148
+ });
149
+ }
150
+ }
151
+ else {
152
+ const n = index.xt.schema(model.table, column);
153
+ if (FSchemaField.meta.nullable)
154
+ n.nullable();
155
+ if (FSchemaField.meta.optional)
156
+ n.optional();
157
+ if (FSchemaField.meta.default !== undefined)
158
+ n.default(FSchemaField.meta.default);
159
+ if (FSchemaField.meta.transform)
160
+ n.transform(FSchemaField.meta.transform);
161
+ n.dynamic = true; // to identify that this is a dynamically added field
162
+ FModel.schema[FSchemaField.column] = n;
163
+ models.set(FModel.table, FModel);
164
+ }
165
+ }
166
+ }exports.default=ModelFormatter;//# sourceMappingURL=ModelFormatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelFormatter.js","sources":["../../../src/core/classes/ModelFormatter.ts"],"sourcesContent":["import xt from \"../../Types\";\nimport Model from \"../../model\";\nimport XqlSchema from \"../../Types/fields/Schema\";\nimport Xansql from \"../Xansql\";\nimport Foreign from \"./ForeignInfo\";\nimport XansqlError from \"../XansqlError\";\n\n/**\n * this class will format the models and assign relationships\n */\n\nclass ModelFormatter {\n private xansql: Xansql\n private isFormated: boolean = false;\n private restricted_columns = [\n \"ADD\", \"ALL\", \"ALTER\", \"AND\", \"ANY\", \"AS\", \"ASC\", \"BETWEEN\", \"BY\",\n \"CASE\", \"CAST\", \"CHECK\", \"COLUMN\", \"CONSTRAINT\", \"CREATE\", \"CROSS\",\n \"CURRENT\", \"CURRENT_DATE\", \"CURRENT_TIME\", \"CURRENT_TIMESTAMP\",\n \"DEFAULT\", \"DELETE\", \"DESC\", \"DISTINCT\", \"DROP\", \"ELSE\", \"EXISTS\",\n \"FALSE\", \"FETCH\", \"FOR\", \"FOREIGN\", \"FROM\", \"FULL\", \"GRANT\", \"GROUP\",\n \"HAVING\", \"INNER\", \"INSERT\", \"INTERSECT\", \"INTO\", \"IS\", \"JOIN\",\n \"KEY\", \"LEFT\", \"LIKE\", \"LIMIT\", \"NOT\", \"NULL\", \"ON\", \"OR\", \"ORDER\",\n \"OUTER\", \"PRIMARY\", \"REFERENCES\", \"RIGHT\", \"ROLLBACK\", \"SELECT\", \"SET\",\n \"TABLE\", \"THEN\", \"TO\", \"TRUE\", \"UNION\", \"UNIQUE\", \"UPDATE\",\n \"USING\", \"VALUES\", \"VIEW\", \"WHEN\", \"WHERE\", \"WITH\", \"SECTION\",\n\n // custom\n \"INDEX\", \"OPTIONAL\", \"NULLABLE\", \"META\", \"METAARRAY\", \"SCHEMA\", \"ARRAY\",\n \"EQUALS\", \"NOT\", \"LT\", \"LTE\", \"GT\", \"GTE\", \"IN\", \"NOTIN\", \"BETWEEN\", \"NOTBETWEEN\", \"CONTAINS\", \"NOTCONTAINS\", \"STARTSWITH\", \"ENDSWITH\", \"ISNULL\", \"ISNOTNULL\", \"ISEMPTY\", \"ISNOTEMPTY\", \"ISTRUE\", \"ISFALSE\",\n \"AGGREGATE\",\n ];\n\n\n constructor(xansql: Xansql) {\n this.xansql = xansql\n }\n\n private restrictedColumn(column: string): boolean {\n return this.restricted_columns.includes(column.toUpperCase());\n }\n\n format() {\n if (this.isFormated) return this.xansql.ModelFactory;\n this.isFormated = true;\n const models = this.xansql.ModelFactory;\n\n // sort models by foreign key dependencies\n const sortedTables: string[] = [];\n for (let table of models.keys()) {\n const model = models.get(table) as Model\n const schema = model.schema\n for (let column in schema) {\n let field: any = schema[column]\n if (Foreign.isSchema(field)) {\n const foreignInfo = Foreign.get(model, column);\n const foreignTable = foreignInfo.table;\n const indexOfMainTable = sortedTables.indexOf(table);\n const indexOfForeignTable = sortedTables.indexOf(foreignTable);\n\n if (indexOfForeignTable === -1) {\n // foreign table not in sorted list, add it before main table\n sortedTables.splice(indexOfMainTable, 0, foreignTable);\n } else if (indexOfForeignTable > indexOfMainTable) {\n // foreign table is after main table, move it before\n sortedTables.splice(indexOfForeignTable, 1);\n sortedTables.splice(indexOfMainTable, 0, foreignTable);\n }\n }\n }\n if (!sortedTables.includes(table)) {\n sortedTables.push(table);\n }\n }\n\n // update models based with sorted tables\n const sortedModels: Map<string, Model> = new Map();\n for (let table of sortedTables) {\n const model = models.get(table) as Model\n sortedModels.set(table, model);\n }\n\n // assign relationships\n models.clear();\n for (let [table, model] of sortedModels) {\n models.set(table, model);\n }\n\n for (let model of models.values()) {\n for (let column in model.schema) {\n if (this.restrictedColumn(column)) {\n throw new XansqlError({\n message: `Column name \"${column}\" in model \"${model.table}\" is restricted and cannot be used.`,\n model: model.table,\n column,\n });\n }\n let field: any = model.schema[column]\n if (Foreign.isSchema(field)) {\n this.formatIsSchema(model, column)\n } else if (Foreign.isArray(field)) {\n this.formatIsArray(model, column)\n }\n }\n }\n\n return models\n }\n\n private formatIsSchema(model: Model, column: string) {\n const models = this.xansql.ModelFactory;\n let field: any = model.schema[column]\n const FModel = models.get(field.table);\n if (!FModel) {\n throw new XansqlError({\n message: `Foreign model ${field.table} not found for ${model.table}.${column}`,\n model: model.table,\n column\n });\n }\n\n if (field.column in FModel.schema) {\n const foreignCol = FModel.schema[field.column];\n if (Foreign.isArray(foreignCol)) {\n const foreignType = (foreignCol as any).type as XqlSchema;\n if (foreignType.table !== model.table || foreignType.column !== column) {\n throw new XansqlError({\n message: `Foreign column ${field.table}.${field.column} does not reference back to ${model.table}.${column}`,\n model: model.table,\n column\n });\n }\n } else {\n throw new XansqlError({\n message: `Foreign column ${field.table}.${field.column} is not an array referencing back to ${model.table}.${column}`,\n model: model.table,\n column\n });\n }\n } else {\n const n = xt.schema(model.table, column).nullable()\n n.dynamic = true // to identify that this is a dynamically added field\n FModel.schema[field.column] = xt.array(n)\n models.set(FModel.table, FModel);\n }\n }\n\n private formatIsArray(model: Model, column: string) {\n const models = this.xansql.ModelFactory;\n let field: any = model.schema[column];\n const FSchemaField = (field as any).type as XqlSchema;\n const FModel = models.get(FSchemaField.table);\n if (!FModel) {\n throw new XansqlError({\n message: `Foreign model ${FSchemaField.table} not found for ${model.table}.${column}`,\n model: model.table,\n column\n });\n }\n\n if (FSchemaField.column in FModel.schema) {\n const foreignCol = FModel.schema[FSchemaField.column] as XqlSchema;\n if (!Foreign.isSchema(foreignCol) || foreignCol.table !== model.table || foreignCol.column !== column) {\n throw new XansqlError({\n message: `Foreign column ${FSchemaField.table}.${FSchemaField.column} does not reference back to ${model.table}.${column}`,\n model: model.table,\n column\n });\n }\n } else {\n const n = xt.schema(model.table, column)\n if (FSchemaField.meta.nullable) n.nullable()\n if (FSchemaField.meta.optional) n.optional()\n if (FSchemaField.meta.default !== undefined) n.default(FSchemaField.meta.default)\n if (FSchemaField.meta.transform) n.transform(FSchemaField.meta.transform)\n\n n.dynamic = true // to identify that this is a dynamically added field\n FModel.schema[FSchemaField.column] = n\n models.set(FModel.table, FModel);\n }\n }\n}\n\nexport default ModelFormatter"],"names":["Foreign","XansqlError","xt"],"mappings":"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"}
@@ -0,0 +1,166 @@
1
+ import {xt}from'../../Types/index.mjs';import Foreign from'./ForeignInfo.mjs';import XansqlError from'../XansqlError.mjs';/**
2
+ * this class will format the models and assign relationships
3
+ */
4
+ class ModelFormatter {
5
+ constructor(xansql) {
6
+ this.isFormated = false;
7
+ this.restricted_columns = [
8
+ "ADD", "ALL", "ALTER", "AND", "ANY", "AS", "ASC", "BETWEEN", "BY",
9
+ "CASE", "CAST", "CHECK", "COLUMN", "CONSTRAINT", "CREATE", "CROSS",
10
+ "CURRENT", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP",
11
+ "DEFAULT", "DELETE", "DESC", "DISTINCT", "DROP", "ELSE", "EXISTS",
12
+ "FALSE", "FETCH", "FOR", "FOREIGN", "FROM", "FULL", "GRANT", "GROUP",
13
+ "HAVING", "INNER", "INSERT", "INTERSECT", "INTO", "IS", "JOIN",
14
+ "KEY", "LEFT", "LIKE", "LIMIT", "NOT", "NULL", "ON", "OR", "ORDER",
15
+ "OUTER", "PRIMARY", "REFERENCES", "RIGHT", "ROLLBACK", "SELECT", "SET",
16
+ "TABLE", "THEN", "TO", "TRUE", "UNION", "UNIQUE", "UPDATE",
17
+ "USING", "VALUES", "VIEW", "WHEN", "WHERE", "WITH", "SECTION",
18
+ // custom
19
+ "INDEX", "OPTIONAL", "NULLABLE", "META", "METAARRAY", "SCHEMA", "ARRAY",
20
+ "EQUALS", "NOT", "LT", "LTE", "GT", "GTE", "IN", "NOTIN", "BETWEEN", "NOTBETWEEN", "CONTAINS", "NOTCONTAINS", "STARTSWITH", "ENDSWITH", "ISNULL", "ISNOTNULL", "ISEMPTY", "ISNOTEMPTY", "ISTRUE", "ISFALSE",
21
+ "AGGREGATE",
22
+ ];
23
+ this.xansql = xansql;
24
+ }
25
+ restrictedColumn(column) {
26
+ return this.restricted_columns.includes(column.toUpperCase());
27
+ }
28
+ format() {
29
+ if (this.isFormated)
30
+ return this.xansql.ModelFactory;
31
+ this.isFormated = true;
32
+ const models = this.xansql.ModelFactory;
33
+ // sort models by foreign key dependencies
34
+ const sortedTables = [];
35
+ for (let table of models.keys()) {
36
+ const model = models.get(table);
37
+ const schema = model.schema;
38
+ for (let column in schema) {
39
+ let field = schema[column];
40
+ if (Foreign.isSchema(field)) {
41
+ const foreignInfo = Foreign.get(model, column);
42
+ const foreignTable = foreignInfo.table;
43
+ const indexOfMainTable = sortedTables.indexOf(table);
44
+ const indexOfForeignTable = sortedTables.indexOf(foreignTable);
45
+ if (indexOfForeignTable === -1) {
46
+ // foreign table not in sorted list, add it before main table
47
+ sortedTables.splice(indexOfMainTable, 0, foreignTable);
48
+ }
49
+ else if (indexOfForeignTable > indexOfMainTable) {
50
+ // foreign table is after main table, move it before
51
+ sortedTables.splice(indexOfForeignTable, 1);
52
+ sortedTables.splice(indexOfMainTable, 0, foreignTable);
53
+ }
54
+ }
55
+ }
56
+ if (!sortedTables.includes(table)) {
57
+ sortedTables.push(table);
58
+ }
59
+ }
60
+ // update models based with sorted tables
61
+ const sortedModels = new Map();
62
+ for (let table of sortedTables) {
63
+ const model = models.get(table);
64
+ sortedModels.set(table, model);
65
+ }
66
+ // assign relationships
67
+ models.clear();
68
+ for (let [table, model] of sortedModels) {
69
+ models.set(table, model);
70
+ }
71
+ for (let model of models.values()) {
72
+ for (let column in model.schema) {
73
+ if (this.restrictedColumn(column)) {
74
+ throw new XansqlError({
75
+ message: `Column name "${column}" in model "${model.table}" is restricted and cannot be used.`,
76
+ model: model.table,
77
+ column,
78
+ });
79
+ }
80
+ let field = model.schema[column];
81
+ if (Foreign.isSchema(field)) {
82
+ this.formatIsSchema(model, column);
83
+ }
84
+ else if (Foreign.isArray(field)) {
85
+ this.formatIsArray(model, column);
86
+ }
87
+ }
88
+ }
89
+ return models;
90
+ }
91
+ formatIsSchema(model, column) {
92
+ const models = this.xansql.ModelFactory;
93
+ let field = model.schema[column];
94
+ const FModel = models.get(field.table);
95
+ if (!FModel) {
96
+ throw new XansqlError({
97
+ message: `Foreign model ${field.table} not found for ${model.table}.${column}`,
98
+ model: model.table,
99
+ column
100
+ });
101
+ }
102
+ if (field.column in FModel.schema) {
103
+ const foreignCol = FModel.schema[field.column];
104
+ if (Foreign.isArray(foreignCol)) {
105
+ const foreignType = foreignCol.type;
106
+ if (foreignType.table !== model.table || foreignType.column !== column) {
107
+ throw new XansqlError({
108
+ message: `Foreign column ${field.table}.${field.column} does not reference back to ${model.table}.${column}`,
109
+ model: model.table,
110
+ column
111
+ });
112
+ }
113
+ }
114
+ else {
115
+ throw new XansqlError({
116
+ message: `Foreign column ${field.table}.${field.column} is not an array referencing back to ${model.table}.${column}`,
117
+ model: model.table,
118
+ column
119
+ });
120
+ }
121
+ }
122
+ else {
123
+ const n = xt.schema(model.table, column).nullable();
124
+ n.dynamic = true; // to identify that this is a dynamically added field
125
+ FModel.schema[field.column] = xt.array(n);
126
+ models.set(FModel.table, FModel);
127
+ }
128
+ }
129
+ formatIsArray(model, column) {
130
+ const models = this.xansql.ModelFactory;
131
+ let field = model.schema[column];
132
+ const FSchemaField = field.type;
133
+ const FModel = models.get(FSchemaField.table);
134
+ if (!FModel) {
135
+ throw new XansqlError({
136
+ message: `Foreign model ${FSchemaField.table} not found for ${model.table}.${column}`,
137
+ model: model.table,
138
+ column
139
+ });
140
+ }
141
+ if (FSchemaField.column in FModel.schema) {
142
+ const foreignCol = FModel.schema[FSchemaField.column];
143
+ if (!Foreign.isSchema(foreignCol) || foreignCol.table !== model.table || foreignCol.column !== column) {
144
+ throw new XansqlError({
145
+ message: `Foreign column ${FSchemaField.table}.${FSchemaField.column} does not reference back to ${model.table}.${column}`,
146
+ model: model.table,
147
+ column
148
+ });
149
+ }
150
+ }
151
+ else {
152
+ const n = xt.schema(model.table, column);
153
+ if (FSchemaField.meta.nullable)
154
+ n.nullable();
155
+ if (FSchemaField.meta.optional)
156
+ n.optional();
157
+ if (FSchemaField.meta.default !== undefined)
158
+ n.default(FSchemaField.meta.default);
159
+ if (FSchemaField.meta.transform)
160
+ n.transform(FSchemaField.meta.transform);
161
+ n.dynamic = true; // to identify that this is a dynamically added field
162
+ FModel.schema[FSchemaField.column] = n;
163
+ models.set(FModel.table, FModel);
164
+ }
165
+ }
166
+ }export{ModelFormatter as default};//# sourceMappingURL=ModelFormatter.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelFormatter.mjs","sources":["../../../src/core/classes/ModelFormatter.ts"],"sourcesContent":["import xt from \"../../Types\";\nimport Model from \"../../model\";\nimport XqlSchema from \"../../Types/fields/Schema\";\nimport Xansql from \"../Xansql\";\nimport Foreign from \"./ForeignInfo\";\nimport XansqlError from \"../XansqlError\";\n\n/**\n * this class will format the models and assign relationships\n */\n\nclass ModelFormatter {\n private xansql: Xansql\n private isFormated: boolean = false;\n private restricted_columns = [\n \"ADD\", \"ALL\", \"ALTER\", \"AND\", \"ANY\", \"AS\", \"ASC\", \"BETWEEN\", \"BY\",\n \"CASE\", \"CAST\", \"CHECK\", \"COLUMN\", \"CONSTRAINT\", \"CREATE\", \"CROSS\",\n \"CURRENT\", \"CURRENT_DATE\", \"CURRENT_TIME\", \"CURRENT_TIMESTAMP\",\n \"DEFAULT\", \"DELETE\", \"DESC\", \"DISTINCT\", \"DROP\", \"ELSE\", \"EXISTS\",\n \"FALSE\", \"FETCH\", \"FOR\", \"FOREIGN\", \"FROM\", \"FULL\", \"GRANT\", \"GROUP\",\n \"HAVING\", \"INNER\", \"INSERT\", \"INTERSECT\", \"INTO\", \"IS\", \"JOIN\",\n \"KEY\", \"LEFT\", \"LIKE\", \"LIMIT\", \"NOT\", \"NULL\", \"ON\", \"OR\", \"ORDER\",\n \"OUTER\", \"PRIMARY\", \"REFERENCES\", \"RIGHT\", \"ROLLBACK\", \"SELECT\", \"SET\",\n \"TABLE\", \"THEN\", \"TO\", \"TRUE\", \"UNION\", \"UNIQUE\", \"UPDATE\",\n \"USING\", \"VALUES\", \"VIEW\", \"WHEN\", \"WHERE\", \"WITH\", \"SECTION\",\n\n // custom\n \"INDEX\", \"OPTIONAL\", \"NULLABLE\", \"META\", \"METAARRAY\", \"SCHEMA\", \"ARRAY\",\n \"EQUALS\", \"NOT\", \"LT\", \"LTE\", \"GT\", \"GTE\", \"IN\", \"NOTIN\", \"BETWEEN\", \"NOTBETWEEN\", \"CONTAINS\", \"NOTCONTAINS\", \"STARTSWITH\", \"ENDSWITH\", \"ISNULL\", \"ISNOTNULL\", \"ISEMPTY\", \"ISNOTEMPTY\", \"ISTRUE\", \"ISFALSE\",\n \"AGGREGATE\",\n ];\n\n\n constructor(xansql: Xansql) {\n this.xansql = xansql\n }\n\n private restrictedColumn(column: string): boolean {\n return this.restricted_columns.includes(column.toUpperCase());\n }\n\n format() {\n if (this.isFormated) return this.xansql.ModelFactory;\n this.isFormated = true;\n const models = this.xansql.ModelFactory;\n\n // sort models by foreign key dependencies\n const sortedTables: string[] = [];\n for (let table of models.keys()) {\n const model = models.get(table) as Model\n const schema = model.schema\n for (let column in schema) {\n let field: any = schema[column]\n if (Foreign.isSchema(field)) {\n const foreignInfo = Foreign.get(model, column);\n const foreignTable = foreignInfo.table;\n const indexOfMainTable = sortedTables.indexOf(table);\n const indexOfForeignTable = sortedTables.indexOf(foreignTable);\n\n if (indexOfForeignTable === -1) {\n // foreign table not in sorted list, add it before main table\n sortedTables.splice(indexOfMainTable, 0, foreignTable);\n } else if (indexOfForeignTable > indexOfMainTable) {\n // foreign table is after main table, move it before\n sortedTables.splice(indexOfForeignTable, 1);\n sortedTables.splice(indexOfMainTable, 0, foreignTable);\n }\n }\n }\n if (!sortedTables.includes(table)) {\n sortedTables.push(table);\n }\n }\n\n // update models based with sorted tables\n const sortedModels: Map<string, Model> = new Map();\n for (let table of sortedTables) {\n const model = models.get(table) as Model\n sortedModels.set(table, model);\n }\n\n // assign relationships\n models.clear();\n for (let [table, model] of sortedModels) {\n models.set(table, model);\n }\n\n for (let model of models.values()) {\n for (let column in model.schema) {\n if (this.restrictedColumn(column)) {\n throw new XansqlError({\n message: `Column name \"${column}\" in model \"${model.table}\" is restricted and cannot be used.`,\n model: model.table,\n column,\n });\n }\n let field: any = model.schema[column]\n if (Foreign.isSchema(field)) {\n this.formatIsSchema(model, column)\n } else if (Foreign.isArray(field)) {\n this.formatIsArray(model, column)\n }\n }\n }\n\n return models\n }\n\n private formatIsSchema(model: Model, column: string) {\n const models = this.xansql.ModelFactory;\n let field: any = model.schema[column]\n const FModel = models.get(field.table);\n if (!FModel) {\n throw new XansqlError({\n message: `Foreign model ${field.table} not found for ${model.table}.${column}`,\n model: model.table,\n column\n });\n }\n\n if (field.column in FModel.schema) {\n const foreignCol = FModel.schema[field.column];\n if (Foreign.isArray(foreignCol)) {\n const foreignType = (foreignCol as any).type as XqlSchema;\n if (foreignType.table !== model.table || foreignType.column !== column) {\n throw new XansqlError({\n message: `Foreign column ${field.table}.${field.column} does not reference back to ${model.table}.${column}`,\n model: model.table,\n column\n });\n }\n } else {\n throw new XansqlError({\n message: `Foreign column ${field.table}.${field.column} is not an array referencing back to ${model.table}.${column}`,\n model: model.table,\n column\n });\n }\n } else {\n const n = xt.schema(model.table, column).nullable()\n n.dynamic = true // to identify that this is a dynamically added field\n FModel.schema[field.column] = xt.array(n)\n models.set(FModel.table, FModel);\n }\n }\n\n private formatIsArray(model: Model, column: string) {\n const models = this.xansql.ModelFactory;\n let field: any = model.schema[column];\n const FSchemaField = (field as any).type as XqlSchema;\n const FModel = models.get(FSchemaField.table);\n if (!FModel) {\n throw new XansqlError({\n message: `Foreign model ${FSchemaField.table} not found for ${model.table}.${column}`,\n model: model.table,\n column\n });\n }\n\n if (FSchemaField.column in FModel.schema) {\n const foreignCol = FModel.schema[FSchemaField.column] as XqlSchema;\n if (!Foreign.isSchema(foreignCol) || foreignCol.table !== model.table || foreignCol.column !== column) {\n throw new XansqlError({\n message: `Foreign column ${FSchemaField.table}.${FSchemaField.column} does not reference back to ${model.table}.${column}`,\n model: model.table,\n column\n });\n }\n } else {\n const n = xt.schema(model.table, column)\n if (FSchemaField.meta.nullable) n.nullable()\n if (FSchemaField.meta.optional) n.optional()\n if (FSchemaField.meta.default !== undefined) n.default(FSchemaField.meta.default)\n if (FSchemaField.meta.transform) n.transform(FSchemaField.meta.transform)\n\n n.dynamic = true // to identify that this is a dynamically added field\n FModel.schema[FSchemaField.column] = n\n models.set(FModel.table, FModel);\n }\n }\n}\n\nexport default ModelFormatter"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import Model from '../../model/index.js';
2
+ import { XqlFields } from '../../Types/types.js';
3
+ import Xansql from '../Xansql.js';
4
+
5
+ declare class TypesGenerator {
6
+ xansql: Xansql;
7
+ constructor(xansql: Xansql);
8
+ generate(model?: Model): Promise<string>;
9
+ iof(field: XqlFields, ...instances: any[]): boolean;
10
+ getType(field: XqlFields): any;
11
+ }
12
+
13
+ export { TypesGenerator as default };