xansql 1.0.8 → 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 +16 -100
  207. package/xt/index.cjs.map +1 -1
  208. package/xt/index.d.ts +16 -9
  209. package/xt/index.mjs +16 -100
  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
@@ -1,4 +1,5 @@
1
1
  import XansqlError from '../../core/XansqlError.mjs';
2
+ import { iof } from '../../utils/index.mjs';
2
3
  import XqlArray from '../../xt/fields/Array.mjs';
3
4
  import XqlBoolean from '../../xt/fields/Boolean.mjs';
4
5
  import XqlDate from '../../xt/fields/Date.mjs';
@@ -14,10 +15,6 @@ import XqlTuple from '../../xt/fields/Tuple.mjs';
14
15
  import XqlUnion from '../../xt/fields/Union.mjs';
15
16
 
16
17
  class ValueFormatter {
17
- static iof(model, column, ...instances) {
18
- const field = model.schema[column];
19
- return instances.some(instance => field instanceof instance);
20
- }
21
18
  static escape(value) {
22
19
  if (value == null)
23
20
  return '';
@@ -45,27 +42,31 @@ class ValueFormatter {
45
42
  });
46
43
  try {
47
44
  value = field.parse(value);
45
+ const meta = field.meta || {};
48
46
  if (value === undefined || value === null) {
47
+ if (meta.unique) {
48
+ return '';
49
+ }
49
50
  return 'NULL';
50
51
  }
51
- else if (this.iof(model, column, XqlIDField, XqlNumber, XqlSchema)) {
52
+ else if (iof(field, XqlIDField, XqlNumber, XqlSchema)) {
52
53
  return value;
53
54
  }
54
- else if (this.iof(model, column, XqlFile)) {
55
+ else if (iof(field, XqlFile)) {
55
56
  return `'${value.name}'`;
56
57
  }
57
- else if (this.iof(model, column, XqlString, XqlEnum)) {
58
+ else if (iof(field, XqlString, XqlEnum)) {
58
59
  return `'${this.escape(value)}'`;
59
60
  }
60
- else if (this.iof(model, column, XqlObject, XqlRecord, XqlArray, XqlTuple, XqlUnion)) {
61
+ else if (iof(field, XqlObject, XqlRecord, XqlArray, XqlTuple, XqlUnion)) {
61
62
  value = JSON.stringify(value);
62
63
  return `'${this.escape(value)}'`;
63
64
  }
64
- else if (this.iof(model, column, XqlDate)) {
65
- if (value instanceof String) {
65
+ else if (iof(field, XqlDate)) {
66
+ if (iof(value, String)) {
66
67
  value = new Date(value);
67
68
  }
68
- if (!(value instanceof Date) || isNaN(value.getTime())) {
69
+ if (!iof(value, Date) || isNaN(value.getTime())) {
69
70
  throw new Error(`Invalid date value for column ${column}: ${value}`);
70
71
  }
71
72
  const pad = (n) => n.toString().padStart(2, '0');
@@ -79,13 +80,13 @@ class ValueFormatter {
79
80
  value = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
80
81
  return `'${value}'`;
81
82
  }
82
- else if (this.iof(model, column, XqlBoolean)) {
83
+ else if (iof(model, column, XqlBoolean)) {
83
84
  return value ? 1 : 0;
84
85
  }
85
86
  }
86
87
  catch (error) {
87
88
  throw new XansqlError({
88
- message: `${error.message} (in column ${model.table}.${column})`,
89
+ message: `${model.table}.${column}: ${error.message.toLowerCase()}`,
89
90
  model: model.table,
90
91
  column: column
91
92
  });
@@ -97,20 +98,74 @@ class ValueFormatter {
97
98
  throw new Error(`Column ${column} does not exist in model ${model.table}`);
98
99
  if (value === null || value === undefined)
99
100
  return null;
100
- if (this.iof(model, column, XqlIDField, XqlNumber, XqlString, XqlFile, XqlEnum)) {
101
+ if (iof(model, column, XqlIDField, XqlNumber, XqlString, XqlFile, XqlEnum)) {
101
102
  return value;
102
103
  }
103
- else if (this.iof(model, column, XqlObject, XqlRecord, XqlArray, XqlTuple, XqlUnion)) {
104
+ else if (iof(model, column, XqlObject, XqlRecord, XqlArray, XqlTuple, XqlUnion)) {
104
105
  return JSON.parse(value);
105
106
  }
106
- else if (this.iof(model, column, XqlDate)) {
107
+ else if (iof(model, column, XqlDate)) {
107
108
  return new Date(value);
108
109
  }
109
- else if (this.iof(model, column, XqlBoolean)) {
110
+ else if (iof(model, column, XqlBoolean)) {
110
111
  return Boolean(value);
111
112
  }
112
113
  return value;
113
114
  }
115
+ static getDefaultSql(model, column) {
116
+ const field = model.schema[column];
117
+ if (!field)
118
+ throw new XansqlError({
119
+ message: `Column ${column} does not exist in model ${model.table}`,
120
+ model: model.table,
121
+ column
122
+ });
123
+ try {
124
+ let value = field.parse(undefined);
125
+ const meta = field.meta || {};
126
+ if (!meta.optional) {
127
+ return '';
128
+ }
129
+ if (value === undefined || value === null) {
130
+ return 'DEFAULT NULL';
131
+ }
132
+ else if (iof(field, XqlIDField, XqlNumber, XqlSchema)) {
133
+ return `DEFAULT ${value}`;
134
+ }
135
+ else if (iof(field, XqlString, XqlEnum, XqlFile)) {
136
+ return `DEFAULT '${this.escape(value)}'`;
137
+ }
138
+ else if (iof(field, XqlObject, XqlRecord, XqlArray, XqlTuple, XqlUnion)) {
139
+ value = JSON.stringify(value);
140
+ return `DEFAULT '${this.escape(value)}'`;
141
+ }
142
+ else if (iof(field, XqlDate)) {
143
+ const c = new Date();
144
+ let v;
145
+ if (c.toISOString() === value.toISOString()) {
146
+ v = `DEFAULT CURRENT_TIMESTAMP`;
147
+ }
148
+ else {
149
+ v = `DEFAULT '${value}'`;
150
+ }
151
+ if (meta.update) {
152
+ v = ` ${v} ON UPDATE CURRENT_TIMESTAMP`;
153
+ }
154
+ return v;
155
+ }
156
+ else if (iof(field, XqlBoolean)) {
157
+ return value ? 'DEFAULT 1' : 'DEFAULT 0';
158
+ }
159
+ }
160
+ catch (error) {
161
+ throw new XansqlError({
162
+ message: `Failed to generate default SQL for ${model.table}.${column}: ${error.message}`,
163
+ model: model.table,
164
+ column
165
+ });
166
+ }
167
+ return ''; // fallback: no default
168
+ }
114
169
  }
115
170
 
116
171
  export { ValueFormatter as default };
@@ -1 +1 @@
1
- {"version":3,"file":"ValueFormatter.mjs","sources":["../../../src/model/include/ValueFormatter.ts"],"sourcesContent":["import Model from \"..\";\nimport XansqlError from \"../../core/XansqlError\";\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\";\n\nclass ValueFormatter {\n static iof(model: Model, column: string, ...instances: any[]) {\n const field = model.schema[column];\n return instances.some(instance => field instanceof instance);\n }\n\n private static escape(value: string) {\n if (value == null) return ''\n let s = String(value)\n\n // Standard SQL: escape single quotes by doubling them\n s = s.replace(/'/g, \"''\")\n\n // Guard against control chars and backslashes (safer across engines)\n s = s\n .replace(/\\\\/g, '\\\\\\\\') // backslash\n .replace(/\\x00/g, '\\\\0') // null byte\n .replace(/\\n/g, '\\\\n') // newline\n .replace(/\\r/g, '\\\\r') // carriage return\n .replace(/\\t/g, '\\\\t') // tab\n .replace(/\\x08/g, '\\\\b') // backspace\n .replace(/\\x1a/g, '\\\\Z') // Ctrl+Z (notably MySQL)\n\n return s\n }\n\n static toSql(model: Model, column: string, value: any) {\n const field = model.schema[column];\n if (!field) throw new XansqlError({\n message: `Column ${column} does not exist in model ${model.table}`,\n model: model.table,\n column: column\n });\n try {\n value = field.parse(value);\n if (value === undefined || value === null) {\n return 'NULL';\n } else if (this.iof(model, column, XqlIDField, XqlNumber, XqlSchema)) {\n return value\n } else if (this.iof(model, column, XqlFile)) {\n return `'${value.name}'`;\n } else if (this.iof(model, column, XqlString, XqlEnum)) {\n return `'${this.escape(value)}'`;\n } else if (this.iof(model, column, XqlObject, XqlRecord, XqlArray, XqlTuple, XqlUnion)) {\n value = JSON.stringify(value);\n return `'${this.escape(value)}'`;\n } else if (this.iof(model, column, XqlDate)) {\n if (value instanceof String) {\n value = new Date(value as any)\n }\n if (!(value instanceof Date) || isNaN(value.getTime())) {\n throw new Error(`Invalid date value for column ${column}: ${value}`);\n }\n\n const pad = (n: number) => n.toString().padStart(2, '0');\n let date = value as Date;\n const year = date.getUTCFullYear();\n const month = pad(date.getUTCMonth() + 1); // months are 0-indexed\n const day = pad(date.getUTCDate());\n const hours = pad(date.getUTCHours());\n const minutes = pad(date.getUTCMinutes());\n const seconds = pad(date.getUTCSeconds());\n value = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n return `'${value}'`;\n } else if (this.iof(model, column, XqlBoolean)) {\n return value ? 1 : 0;\n }\n } catch (error: any) {\n throw new XansqlError({\n message: `${error.message} (in column ${model.table}.${column})`,\n model: model.table,\n column: column\n });\n }\n }\n\n static fromSql(model: Model, column: string, value: any) {\n const field = model.schema[column];\n if (!field) throw new Error(`Column ${column} does not exist in model ${model.table}`);\n if (value === null || value === undefined) return null\n\n if (this.iof(model, column, XqlIDField, XqlNumber, XqlString, XqlFile, XqlEnum)) {\n return value\n } else if (this.iof(model, column, XqlObject, XqlRecord, XqlArray, XqlTuple, XqlUnion)) {\n return JSON.parse(value);\n } else if (this.iof(model, column, XqlDate)) {\n return new Date(value);\n } else if (this.iof(model, column, XqlBoolean)) {\n return Boolean(value);\n }\n\n return value;\n }\n\n}\n\nexport default ValueFormatter;"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ValueFormatter.mjs","sources":["../../../src/model/include/ValueFormatter.ts"],"sourcesContent":["import Model from \"..\";\nimport XansqlError from \"../../core/XansqlError\";\nimport { iof } from \"../../utils\";\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\";\n\nclass ValueFormatter {\n\n private static escape(value: string) {\n if (value == null) return ''\n let s = String(value)\n\n // Standard SQL: escape single quotes by doubling them\n s = s.replace(/'/g, \"''\")\n\n // Guard against control chars and backslashes (safer across engines)\n s = s\n .replace(/\\\\/g, '\\\\\\\\') // backslash\n .replace(/\\x00/g, '\\\\0') // null byte\n .replace(/\\n/g, '\\\\n') // newline\n .replace(/\\r/g, '\\\\r') // carriage return\n .replace(/\\t/g, '\\\\t') // tab\n .replace(/\\x08/g, '\\\\b') // backspace\n .replace(/\\x1a/g, '\\\\Z') // Ctrl+Z (notably MySQL)\n\n return s\n }\n\n static toSql(model: Model, column: string, value: any) {\n const field = model.schema[column];\n if (!field) throw new XansqlError({\n message: `Column ${column} does not exist in model ${model.table}`,\n model: model.table,\n column: column\n });\n try {\n value = field.parse(value);\n const meta = field.meta || {};\n if (value === undefined || value === null) {\n if (meta.unique) {\n return ''\n }\n return 'NULL';\n } else if (iof(field, XqlIDField, XqlNumber, XqlSchema)) {\n return value\n } else if (iof(field, XqlFile)) {\n return `'${value.name}'`;\n } else if (iof(field, XqlString, XqlEnum)) {\n return `'${this.escape(value)}'`;\n } else if (iof(field, XqlObject, XqlRecord, XqlArray, XqlTuple, XqlUnion)) {\n value = JSON.stringify(value);\n return `'${this.escape(value)}'`;\n } else if (iof(field, XqlDate)) {\n if (iof(value, String)) {\n value = new Date(value as any)\n }\n if (!iof(value, Date) || isNaN(value.getTime())) {\n throw new Error(`Invalid date value for column ${column}: ${value}`);\n }\n\n const pad = (n: number) => n.toString().padStart(2, '0');\n let date = value as Date;\n const year = date.getUTCFullYear();\n const month = pad(date.getUTCMonth() + 1); // months are 0-indexed\n const day = pad(date.getUTCDate());\n const hours = pad(date.getUTCHours());\n const minutes = pad(date.getUTCMinutes());\n const seconds = pad(date.getUTCSeconds());\n value = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n return `'${value}'`;\n } else if (iof(model, column, XqlBoolean)) {\n return value ? 1 : 0;\n }\n } catch (error: any) {\n throw new XansqlError({\n message: `${model.table}.${column}: ${error.message.toLowerCase()}`,\n model: model.table,\n column: column\n });\n }\n }\n\n static fromSql(model: Model, column: string, value: any) {\n const field = model.schema[column];\n if (!field) throw new Error(`Column ${column} does not exist in model ${model.table}`);\n if (value === null || value === undefined) return null\n\n if (iof(model, column, XqlIDField, XqlNumber, XqlString, XqlFile, XqlEnum)) {\n return value\n } else if (iof(model, column, XqlObject, XqlRecord, XqlArray, XqlTuple, XqlUnion)) {\n return JSON.parse(value);\n } else if (iof(model, column, XqlDate)) {\n return new Date(value);\n } else if (iof(model, column, XqlBoolean)) {\n return Boolean(value);\n }\n\n return value;\n }\n\n static getDefaultSql(model: Model, column: string) {\n const field = model.schema[column];\n if (!field) throw new XansqlError({\n message: `Column ${column} does not exist in model ${model.table}`,\n model: model.table,\n column\n });\n\n try {\n let value = field.parse(undefined);\n const meta = field.meta || {};\n if (!meta.optional) {\n return '';\n }\n\n if (value === undefined || value === null) {\n return 'DEFAULT NULL';\n } else if (iof(field, XqlIDField, XqlNumber, XqlSchema)) {\n return `DEFAULT ${value}`;\n } else if (iof(field, XqlString, XqlEnum, XqlFile)) {\n return `DEFAULT '${this.escape(value)}'`;\n } else if (iof(field, XqlObject, XqlRecord, XqlArray, XqlTuple, XqlUnion)) {\n value = JSON.stringify(value);\n return `DEFAULT '${this.escape(value)}'`;\n } else if (iof(field, XqlDate)) {\n const c = new Date()\n let v\n if (c.toISOString() === value.toISOString()) {\n v = `DEFAULT CURRENT_TIMESTAMP`;\n } else {\n v = `DEFAULT '${value}'`;\n }\n if (meta.update) {\n v = ` ${v} ON UPDATE CURRENT_TIMESTAMP`;\n }\n return v\n } else if (iof(field, XqlBoolean)) {\n return value ? 'DEFAULT 1' : 'DEFAULT 0';\n }\n } catch (error: any) {\n throw new XansqlError({\n message: `Failed to generate default SQL for ${model.table}.${column}: ${error.message}`,\n model: model.table,\n column\n });\n }\n\n return ''; // fallback: no default\n }\n\n\n}\n\nexport default ValueFormatter;"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAiBA,MAAM,cAAc,CAAA;IAET,OAAO,MAAM,CAAC,KAAa,EAAA;QAChC,IAAI,KAAK,IAAI,IAAI;AAAE,YAAA,OAAO,EAAE;AAC5B,QAAA,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;;QAGrB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;;AAGzB,QAAA,CAAC,GAAG;AACA,aAAA,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;AACtB,aAAA,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;AACvB,aAAA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;AACrB,aAAA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;AACrB,aAAA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;AACrB,aAAA,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;AACvB,aAAA,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;AAE3B,QAAA,OAAO,CAAC;IACX;AAEA,IAAA,OAAO,KAAK,CAAC,KAAY,EAAE,MAAc,EAAE,KAAU,EAAA;QAClD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AAClC,QAAA,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,WAAW,CAAC;AAC/B,gBAAA,OAAO,EAAE,CAAA,OAAA,EAAU,MAAM,4BAA4B,KAAK,CAAC,KAAK,CAAA,CAAE;gBAClE,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,gBAAA,MAAM,EAAE;AACV,aAAA,CAAC;AACF,QAAA,IAAI;AACD,YAAA,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;AAC1B,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE;YAC7B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;AACxC,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACd,oBAAA,OAAO,EAAE;gBACZ;AACA,gBAAA,OAAO,MAAM;YAChB;iBAAO,IAAI,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;AACtD,gBAAA,OAAO,KAAK;YACf;AAAO,iBAAA,IAAI,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;AAC7B,gBAAA,OAAO,CAAA,CAAA,EAAI,KAAK,CAAC,IAAI,GAAG;YAC3B;iBAAO,IAAI,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE;gBACxC,OAAO,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG;YACnC;AAAO,iBAAA,IAAI,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE;AACxE,gBAAA,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;gBAC7B,OAAO,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG;YACnC;AAAO,iBAAA,IAAI,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;AAC7B,gBAAA,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;AACrB,oBAAA,KAAK,GAAG,IAAI,IAAI,CAAC,KAAY,CAAC;gBACjC;AACA,gBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;oBAC9C,MAAM,IAAI,KAAK,CAAC,CAAA,8BAAA,EAAiC,MAAM,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAC;gBACvE;AAEA,gBAAA,MAAM,GAAG,GAAG,CAAC,CAAS,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;gBACxD,IAAI,IAAI,GAAG,KAAa;AACxB,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE;AAClC,gBAAA,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC1C,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClC,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACzC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AACzC,gBAAA,KAAK,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,OAAO,EAAE;gBAChE,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG;YACtB;iBAAO,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE;gBACxC,OAAO,KAAK,GAAG,CAAC,GAAG,CAAC;YACvB;QACH;QAAE,OAAO,KAAU,EAAE;YAClB,MAAM,IAAI,WAAW,CAAC;AACnB,gBAAA,OAAO,EAAE,CAAA,EAAG,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,EAAA,EAAK,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA,CAAE;gBACnE,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,gBAAA,MAAM,EAAE;AACV,aAAA,CAAC;QACL;IACH;AAEA,IAAA,OAAO,OAAO,CAAC,KAAY,EAAE,MAAc,EAAE,KAAU,EAAA;QACpD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AAClC,QAAA,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,CAAA,OAAA,EAAU,MAAM,CAAA,yBAAA,EAA4B,KAAK,CAAC,KAAK,CAAA,CAAE,CAAC;AACtF,QAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,IAAI;AAEtD,QAAA,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;AACzE,YAAA,OAAO,KAAK;QACf;AAAO,aAAA,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE;AAChF,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC3B;aAAO,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;AACrC,YAAA,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC;QACzB;aAAO,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE;AACxC,YAAA,OAAO,OAAO,CAAC,KAAK,CAAC;QACxB;AAEA,QAAA,OAAO,KAAK;IACf;AAEA,IAAA,OAAO,aAAa,CAAC,KAAY,EAAE,MAAc,EAAA;QAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AAClC,QAAA,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,WAAW,CAAC;AAC/B,gBAAA,OAAO,EAAE,CAAA,OAAA,EAAU,MAAM,4BAA4B,KAAK,CAAC,KAAK,CAAA,CAAE;gBAClE,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB;AACF,aAAA,CAAC;AAEF,QAAA,IAAI;YACD,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;AAClC,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE;AAC7B,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,OAAO,EAAE;YACZ;YAEA,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;AACxC,gBAAA,OAAO,cAAc;YACxB;iBAAO,IAAI,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;gBACtD,OAAO,CAAA,QAAA,EAAW,KAAK,CAAA,CAAE;YAC5B;iBAAO,IAAI,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;gBACjD,OAAO,CAAA,SAAA,EAAY,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG;YAC3C;AAAO,iBAAA,IAAI,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE;AACxE,gBAAA,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;gBAC7B,OAAO,CAAA,SAAA,EAAY,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG;YAC3C;AAAO,iBAAA,IAAI,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;AAC7B,gBAAA,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE;AACpB,gBAAA,IAAI,CAAC;gBACL,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,EAAE;oBAC1C,CAAC,GAAG,2BAA2B;gBAClC;qBAAO;AACJ,oBAAA,CAAC,GAAG,CAAA,SAAA,EAAY,KAAK,CAAA,CAAA,CAAG;gBAC3B;AACA,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACd,oBAAA,CAAC,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,4BAAA,CAA8B;gBAC1C;AACA,gBAAA,OAAO,CAAC;YACX;AAAO,iBAAA,IAAI,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;gBAChC,OAAO,KAAK,GAAG,WAAW,GAAG,WAAW;YAC3C;QACH;QAAE,OAAO,KAAU,EAAE;YAClB,MAAM,IAAI,WAAW,CAAC;gBACnB,OAAO,EAAE,CAAA,mCAAA,EAAsC,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,EAAA,EAAK,KAAK,CAAC,OAAO,CAAA,CAAE;gBACxF,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB;AACF,aAAA,CAAC;QACL;QAEA,OAAO,EAAE,CAAC;IACb;AAGF;;;;"}
package/model/index.cjs CHANGED
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var core_XansqlError = require('../core/XansqlError.cjs');
4
+ var utils_index = require('../utils/index.cjs');
4
5
  var model_Args_RelationExcuteArgs = require('./Args/RelationExcuteArgs.cjs');
5
6
  var model_Base = require('./Base.cjs');
6
7
  var model_Executer_Aggregate_index = require('./Executer/Aggregate/index.cjs');
@@ -12,7 +13,7 @@ var model_Executer_Update_index = require('./Executer/Update/index.cjs');
12
13
  class Model extends model_Base {
13
14
  async create(args) {
14
15
  const xansql = this.xansql;
15
- const isRelArgs = args instanceof model_Args_RelationExcuteArgs;
16
+ const isRelArgs = utils_index.iof(args, model_Args_RelationExcuteArgs);
16
17
  if (isRelArgs)
17
18
  args = args.args;
18
19
  try {
@@ -33,7 +34,7 @@ class Model extends model_Base {
33
34
  if (!isRelArgs)
34
35
  await xansql.XansqlTransaction.rollback();
35
36
  let errors = {};
36
- if (error instanceof Array && error[0] instanceof core_XansqlError) {
37
+ if (utils_index.iof(error, Array) && utils_index.iof(error[0], core_XansqlError)) {
37
38
  for (let err of error) {
38
39
  errors[err.column] = err.message;
39
40
  }
@@ -46,7 +47,7 @@ class Model extends model_Base {
46
47
  }
47
48
  async update(args) {
48
49
  const xansql = this.xansql;
49
- const isRelArgs = args instanceof model_Args_RelationExcuteArgs;
50
+ const isRelArgs = utils_index.iof(args, model_Args_RelationExcuteArgs);
50
51
  if (isRelArgs)
51
52
  args = args.args;
52
53
  try {
@@ -66,7 +67,7 @@ class Model extends model_Base {
66
67
  if (!isRelArgs)
67
68
  await xansql.XansqlTransaction.rollback();
68
69
  let errors = {};
69
- if (error instanceof Array && error[0] instanceof core_XansqlError) {
70
+ if (utils_index.iof(error, Array) && utils_index.iof(error[0], core_XansqlError)) {
70
71
  for (let err of error) {
71
72
  errors[err.column] = err.message;
72
73
  }
@@ -79,7 +80,7 @@ class Model extends model_Base {
79
80
  }
80
81
  async delete(args) {
81
82
  const xansql = this.xansql;
82
- const isRelArgs = args instanceof model_Args_RelationExcuteArgs;
83
+ const isRelArgs = utils_index.iof(args, model_Args_RelationExcuteArgs);
83
84
  if (isRelArgs)
84
85
  args = args.args;
85
86
  try {
@@ -102,7 +103,7 @@ class Model extends model_Base {
102
103
  }
103
104
  }
104
105
  async find(args) {
105
- const isRelArgs = args instanceof model_Args_RelationExcuteArgs;
106
+ const isRelArgs = utils_index.iof(args, model_Args_RelationExcuteArgs);
106
107
  if (isRelArgs)
107
108
  args = args.args;
108
109
  args = await this.callHook("beforeFind", args) || args;
@@ -136,7 +137,7 @@ class Model extends model_Base {
136
137
  }
137
138
  // Helpers Methods
138
139
  async aggregate(args) {
139
- const isRelArgs = args instanceof model_Args_RelationExcuteArgs;
140
+ const isRelArgs = utils_index.iof(args, model_Args_RelationExcuteArgs);
140
141
  if (isRelArgs)
141
142
  args = args.args;
142
143
  args = await this.callHook("beforeAggregate", args) || args;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/model/index.ts"],"sourcesContent":["import XansqlError from \"../core/XansqlError\";\nimport RelationExecuteArgs from \"./Args/RelationExcuteArgs\";\nimport ModelBase from \"./Base\";\nimport AggregateExecuter from \"./Executer/Aggregate\";\nimport CreateExecuter from \"./Executer/Create\";\nimport DeleteExecuter from \"./Executer/Delete\";\nimport FindExecuter from \"./Executer/Find\";\nimport UpdateExecuter from \"./Executer/Update\";\nimport { AggregateArgsType, CreateArgsType, DeleteArgsType, FindArgsType, UpdateArgsType, WhereArgsType } from \"./types\";\n\nclass Model extends ModelBase {\n\n async create(args: CreateArgsType): Promise<any[]> {\n const xansql = this.xansql;\n const isRelArgs = args instanceof RelationExecuteArgs\n if (isRelArgs) args = (args as any).args\n\n try {\n if (!isRelArgs) await xansql.XansqlTransaction.begin()\n args = await this.callHook(\"beforeCreate\", args) || args\n\n // event emit BEFORE_CREATE\n const executer = new CreateExecuter(this);\n await xansql.EventManager.emit(\"BEFORE_CREATE\", { model: this, args });\n let results: any = await executer.execute(args);\n await xansql.EventManager.emit(\"CREATE\", { model: this, results, args });\n\n results = await this.callHook(\"afterCreate\", results, args) || results\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return results\n } catch (error: any) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n let errors: { [key: string]: string } = {}\n if (error instanceof Array && error[0] instanceof XansqlError) {\n for (let err of error) {\n errors[err.column] = err.message;\n }\n } else {\n errors[\"create\"] = error.message;\n }\n throw error\n }\n }\n\n async update(args: UpdateArgsType): Promise<any[]> {\n const xansql = this.xansql;\n const isRelArgs = args instanceof RelationExecuteArgs\n if (isRelArgs) args = (args as any).args\n\n try {\n if (!isRelArgs) await xansql.XansqlTransaction.begin()\n\n args = await this.callHook(\"beforeUpdate\", args) || args\n const executer = new UpdateExecuter(this);\n await xansql.EventManager.emit(\"BEFORE_UPDATE\", { model: this, args });\n let results: any = await executer.execute(args);\n await xansql.EventManager.emit(\"UPDATE\", { model: this, results, args });\n results = await this.callHook(\"afterUpdate\", results, args) || results\n\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return results\n } catch (error: any) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n let errors: { [key: string]: string } = {}\n if (error instanceof Array && error[0] instanceof XansqlError) {\n for (let err of error) {\n errors[err.column] = err.message;\n }\n } else {\n errors[\"update\"] = error.message;\n }\n throw errors\n }\n }\n\n async delete(args: DeleteArgsType): Promise<any[]> {\n const xansql = this.xansql;\n const isRelArgs = args instanceof RelationExecuteArgs\n if (isRelArgs) args = (args as any).args\n\n try {\n if (!isRelArgs) await xansql.XansqlTransaction.begin()\n\n args = await this.callHook(\"beforeDelete\", args) || args\n const executer = new DeleteExecuter(this);\n await xansql.EventManager.emit(\"BEFORE_DELETE\", { model: this, args });\n let results: any = await executer.execute(args);\n await xansql.EventManager.emit(\"DELETE\", { model: this, results, args });\n results = await this.callHook(\"afterDelete\", results, args) || results\n\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return results\n } catch (error) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n async find(args: FindArgsType): Promise<any[]> {\n const isRelArgs = args instanceof RelationExecuteArgs\n if (isRelArgs) args = (args as any).args\n\n args = await this.callHook(\"beforeFind\", args) || args\n const executer = new FindExecuter(this, async (row: any) => {\n return await this.callHook('transform', row) || row\n });\n await this.xansql.EventManager.emit(\"BEFORE_FIND\", { model: this, args });\n let results = await executer.execute(args);\n await this.xansql.EventManager.emit(\"FIND\", { model: this, results: results, args });\n results = await this.callHook(\"afterFind\", results, args) || results\n return results\n }\n\n async findOne(args: FindArgsType): Promise<any | null> {\n const results = await this.find({\n ...args,\n limit: {\n take: 1,\n skip: 0\n }\n })\n return results.length ? results[0] : null\n }\n\n async findByID(id: number | string): Promise<any | null> {\n const results = await this.find({\n where: {\n [this.IDColumn]: id\n },\n limit: {\n take: 1,\n skip: 0\n }\n })\n return results.length ? results[0] : null\n }\n\n // Helpers Methods\n\n async aggregate(args: AggregateArgsType): Promise<any[]> {\n const isRelArgs = args instanceof RelationExecuteArgs\n if (isRelArgs) args = (args as any).args\n args = await this.callHook(\"beforeAggregate\", args) || args\n const executer = new AggregateExecuter(this);\n await this.xansql.EventManager.emit(\"BEFORE_AGGREGATE\", { model: this, args });\n let results = await executer.execute(args);\n await this.xansql.EventManager.emit(\"AGGREGATE\", { model: this, results, args });\n\n results = await this.callHook(\"afterAggregate\", results, args) || results\n return results\n }\n\n\n async paginate(page: number, args?: Omit<FindArgsType, \"limit\"> & { perpage?: number }) {\n const perpage = args?.perpage || 20;\n const skip = (page - 1) * perpage;\n const results = await this.find({\n ...args,\n limit: {\n take: perpage,\n skip\n }\n })\n const total = await this.count(args?.where || {})\n return {\n page,\n perpage,\n pagecount: Math.ceil(total / perpage),\n rowcount: total,\n results\n }\n }\n\n async count(where: WhereArgsType): Promise<number> {\n const res: any[] = await this.aggregate({\n where,\n select: {\n [this.IDColumn]: {\n count: true\n }\n }\n })\n return res.length ? res[0][`count_${this.IDColumn}`] : 0\n }\n\n async min(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n min: true\n }\n }\n })\n return res.length ? res[0][`min_${column}`] : 0\n }\n\n async max(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n max: true\n }\n }\n })\n return res.length ? res[0][`max_${column}`] : 0\n }\n\n async sum(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n sum: true\n }\n }\n })\n return res.length ? res[0][`sum_${column}`] : 0\n }\n\n async avg(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n avg: true\n }\n }\n })\n return res.length ? res[0][`avg_${column}`] : 0\n }\n\n async exists(where: WhereArgsType): Promise<boolean> {\n return !!(await this.count({ where }))\n }\n\n async truncate() {\n await this.execute(`TRUNCATE TABLE ${this.table}`);\n }\n\n\n // end Helpers Methods\n // async createIndex(column: string) {\n // const { IndexMigration } = this.xansql.XansqlMigration.TableMigration;\n // const indexsql = IndexMigration.buildCreate(this.table, column);\n // try {\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"CREATE_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexsql, executeId);\n // } catch (error) {\n // throw new Error(\"Index already exists\");\n // }\n // }\n\n // async dropIndex(column: string) {\n // const { IndexMigration } = this.xansql.XansqlMigration.TableMigration;\n // const indexsql = IndexMigration.buildDrop(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexsql, executeId);\n // }\n\n // async addColumn(column: string) {\n // const { TableMigration } = this.xansql.XansqlMigration;\n // if (!(column in this.schema)) {\n // throw new Error(`Column ${column} already exists in table ${this.table}`);\n // }\n\n // const field = this.schema[column] as XqlFields;\n // if (!field) {\n // throw new Error(`Field definition for column ${column} is missing in schema for table ${this.table}`);\n // }\n // const sqlColumn = TableMigration.buildColumn(this.table, column);\n // let sql = `ALTER TABLE ${this.table} ADD COLUMN ${sqlColumn};`;\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"ADD_COLUMN\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(sql, executeId);\n // this.schema[column] = field;\n\n // // add foreign key if exists\n // const meta = field.meta || {};\n // if (Foreign.isSchema(field)) {\n // const info = Foreign.get(this, column)\n // const fkSql = TableMigration.ForeignKeyMigration.buildCreate(this.table, column, info.table, info.relation.main);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"ADD_FOREIGN_KEY\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(`ALTER TABLE ${this.table} ADD ${fkSql};`, executeId);\n // }\n\n // // add index if exists\n // if (meta.index) {\n // const indexSql = TableMigration.IndexMigration.buildCreate(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"CREATE_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexSql, executeId);\n // }\n\n // }\n\n // async renameColumn(oldColumn: string, newColumn: string) {\n // if (!(oldColumn in this.schema)) {\n // throw new Error(`Column ${oldColumn} does not exist in table ${this.table}`);\n // }\n // if (newColumn in this.schema) {\n // throw new Error(`Column ${newColumn} already exists in table ${this.table}`);\n // }\n // const engine = this.xansql.config.dialect.engine;\n // let sql = ``;\n\n // if (engine === 'mysql') {\n // sql = `ALTER TABLE ${this.table} CHANGE COLUMN ${oldColumn} ${newColumn} ${this.xansql.XansqlMigration.TableMigration.buildColumn(this.table, oldColumn)};`;\n // } else if (engine === 'postgresql') {\n // sql = `ALTER TABLE ${this.table} RENAME COLUMN ${oldColumn} TO ${newColumn};`;\n // } else if (engine === 'sqlite') {\n // throw new Error(`Renaming columns is not supported in SQLite`);\n // }\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"RENAME_COLUMN\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(sql, executeId);\n // const field = this.schema[oldColumn];\n // delete this.schema[oldColumn];\n // this.schema[newColumn] = field;\n\n // // rename foreign key if exists\n // const fieldMeta = field.meta || {};\n // if (Foreign.isSchema(field)) {\n // const fkOld = this.xansql.XansqlMigration.TableMigration.ForeignKeyMigration.identifier(this.table, oldColumn);\n // const fkNew = this.xansql.XansqlMigration.TableMigration.ForeignKeyMigration.identifier(this.table, newColumn);\n // let fsql = ``;\n // if (engine === 'mysql') {\n // fsql = `ALTER TABLE ${this.table} DROP FOREIGN KEY ${fkOld}, ADD CONSTRAINT ${fkNew} FOREIGN KEY (${newColumn}) REFERENCES ${Foreign.get(this, newColumn).table}(${Foreign.get(this, newColumn).relation.main});`;\n // } else if (engine === 'postgresql') {\n // fsql = `ALTER TABLE ${this.table} RENAME CONSTRAINT ${fkOld} TO ${fkNew};`;\n // } else if (engine === 'sqlite') {\n // throw new Error(`Renaming foreign keys is not supported in SQLite`);\n // }\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_FOREIGN_KEY\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(fsql, executeId);\n // }\n\n // // rename index if exists\n // if (fieldMeta.index) {\n // const indexOld = this.xansql.XansqlMigration.TableMigration.IndexMigration.identifier(this.table, oldColumn);\n // const indexNew = this.xansql.XansqlMigration.TableMigration.IndexMigration.identifier(this.table, newColumn);\n // let isql = ``;\n // if (engine === 'mysql') {\n // isql = `ALTER TABLE ${this.table} DROP INDEX ${indexOld}, ADD INDEX ${indexNew} (${newColumn});`;\n // } else if (engine === 'postgresql') {\n // isql = `ALTER INDEX ${indexOld} RENAME TO ${indexNew};`;\n // } else if (engine === 'sqlite') {\n // throw new Error(`Renaming indexes is not supported in SQLite`);\n // }\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(isql, executeId);\n // }\n // }\n\n // async dropColumn(column: string) {\n\n // let sql = `ALTER TABLE ${this.table} DROP COLUMN ${column};`;\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_COLUMN\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(sql, executeId);\n // const field = this.schema[column];\n // delete this.schema[column];\n // const fieldMeta = field.meta || {};\n\n // // drop foreign key if exists\n // if (Foreign.isSchema(field)) {\n // const fkSql = this.xansql.XansqlMigration.TableMigration.ForeignKeyMigration.buildDrop(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"ADD_FOREIGN_KEY\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(fkSql, executeId);\n // }\n\n // // drop index if exists\n // if (fieldMeta.index) {\n // const indexSql = this.xansql.XansqlMigration.TableMigration.IndexMigration.buildDrop(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"CREATE_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexSql, executeId);\n // }\n // }\n\n}\n\nexport default Model;\n"],"names":["ModelBase","RelationExecuteArgs","CreateExecuter","XansqlError","UpdateExecuter","DeleteExecuter","FindExecuter","AggregateExecuter"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/model/index.ts"],"sourcesContent":["import XansqlError from \"../core/XansqlError\";\nimport { iof } from \"../utils\";\nimport RelationExecuteArgs from \"./Args/RelationExcuteArgs\";\nimport ModelBase from \"./Base\";\nimport AggregateExecuter from \"./Executer/Aggregate\";\nimport CreateExecuter from \"./Executer/Create\";\nimport DeleteExecuter from \"./Executer/Delete\";\nimport FindExecuter from \"./Executer/Find\";\nimport UpdateExecuter from \"./Executer/Update\";\nimport { AggregateArgsType, CreateArgsType, DeleteArgsType, FindArgsType, UpdateArgsType, WhereArgsType } from \"./types\";\n\nclass Model extends ModelBase {\n\n async create(args: CreateArgsType): Promise<any[]> {\n const xansql = this.xansql;\n const isRelArgs = iof(args, RelationExecuteArgs)\n if (isRelArgs) args = (args as any).args\n\n try {\n if (!isRelArgs) await xansql.XansqlTransaction.begin()\n args = await this.callHook(\"beforeCreate\", args) || args\n\n // event emit BEFORE_CREATE\n const executer = new CreateExecuter(this);\n await xansql.EventManager.emit(\"BEFORE_CREATE\", { model: this, args });\n let results: any = await executer.execute(args);\n await xansql.EventManager.emit(\"CREATE\", { model: this, results, args });\n\n results = await this.callHook(\"afterCreate\", results, args) || results\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return results\n } catch (error: any) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n let errors: { [key: string]: string } = {}\n if (iof(error, Array) && iof(error[0], XansqlError)) {\n for (let err of error) {\n errors[err.column] = err.message;\n }\n } else {\n errors[\"create\"] = error.message;\n }\n throw error\n }\n }\n\n async update(args: UpdateArgsType): Promise<any[]> {\n const xansql = this.xansql;\n const isRelArgs = iof(args, RelationExecuteArgs)\n if (isRelArgs) args = (args as any).args\n\n try {\n if (!isRelArgs) await xansql.XansqlTransaction.begin()\n\n args = await this.callHook(\"beforeUpdate\", args) || args\n const executer = new UpdateExecuter(this);\n await xansql.EventManager.emit(\"BEFORE_UPDATE\", { model: this, args });\n let results: any = await executer.execute(args);\n await xansql.EventManager.emit(\"UPDATE\", { model: this, results, args });\n results = await this.callHook(\"afterUpdate\", results, args) || results\n\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return results\n } catch (error: any) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n let errors: { [key: string]: string } = {}\n if (iof(error, Array) && iof(error[0], XansqlError)) {\n for (let err of error) {\n errors[err.column] = err.message;\n }\n } else {\n errors[\"update\"] = error.message;\n }\n throw errors\n }\n }\n\n async delete(args: DeleteArgsType): Promise<any[]> {\n const xansql = this.xansql;\n const isRelArgs = iof(args, RelationExecuteArgs)\n if (isRelArgs) args = (args as any).args\n\n try {\n if (!isRelArgs) await xansql.XansqlTransaction.begin()\n\n args = await this.callHook(\"beforeDelete\", args) || args\n const executer = new DeleteExecuter(this);\n await xansql.EventManager.emit(\"BEFORE_DELETE\", { model: this, args });\n let results: any = await executer.execute(args);\n await xansql.EventManager.emit(\"DELETE\", { model: this, results, args });\n results = await this.callHook(\"afterDelete\", results, args) || results\n\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return results\n } catch (error) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n async find(args: FindArgsType): Promise<any[]> {\n const isRelArgs = iof(args, RelationExecuteArgs)\n if (isRelArgs) args = (args as any).args\n\n args = await this.callHook(\"beforeFind\", args) || args\n const executer = new FindExecuter(this, async (row: any) => {\n return await this.callHook('transform', row) || row\n });\n await this.xansql.EventManager.emit(\"BEFORE_FIND\", { model: this, args });\n let results = await executer.execute(args);\n await this.xansql.EventManager.emit(\"FIND\", { model: this, results: results, args });\n results = await this.callHook(\"afterFind\", results, args) || results\n return results\n }\n\n async findOne(args: FindArgsType): Promise<any | null> {\n const results = await this.find({\n ...args,\n limit: {\n take: 1,\n skip: 0\n }\n })\n return results.length ? results[0] : null\n }\n\n async findByID(id: number | string): Promise<any | null> {\n const results = await this.find({\n where: {\n [this.IDColumn]: id\n },\n limit: {\n take: 1,\n skip: 0\n }\n })\n return results.length ? results[0] : null\n }\n\n // Helpers Methods\n\n async aggregate(args: AggregateArgsType): Promise<any[]> {\n const isRelArgs = iof(args, RelationExecuteArgs)\n if (isRelArgs) args = (args as any).args\n args = await this.callHook(\"beforeAggregate\", args) || args\n const executer = new AggregateExecuter(this);\n await this.xansql.EventManager.emit(\"BEFORE_AGGREGATE\", { model: this, args });\n let results = await executer.execute(args);\n await this.xansql.EventManager.emit(\"AGGREGATE\", { model: this, results, args });\n\n results = await this.callHook(\"afterAggregate\", results, args) || results\n return results\n }\n\n\n async paginate(page: number, args?: Omit<FindArgsType, \"limit\"> & { perpage?: number }) {\n const perpage = args?.perpage || 20;\n const skip = (page - 1) * perpage;\n const results = await this.find({\n ...args,\n limit: {\n take: perpage,\n skip\n }\n })\n const total = await this.count(args?.where || {})\n return {\n page,\n perpage,\n pagecount: Math.ceil(total / perpage),\n rowcount: total,\n results\n }\n }\n\n async count(where: WhereArgsType): Promise<number> {\n const res: any[] = await this.aggregate({\n where,\n select: {\n [this.IDColumn]: {\n count: true\n }\n }\n })\n return res.length ? res[0][`count_${this.IDColumn}`] : 0\n }\n\n async min(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n min: true\n }\n }\n })\n return res.length ? res[0][`min_${column}`] : 0\n }\n\n async max(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n max: true\n }\n }\n })\n return res.length ? res[0][`max_${column}`] : 0\n }\n\n async sum(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n sum: true\n }\n }\n })\n return res.length ? res[0][`sum_${column}`] : 0\n }\n\n async avg(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n avg: true\n }\n }\n })\n return res.length ? res[0][`avg_${column}`] : 0\n }\n\n async exists(where: WhereArgsType): Promise<boolean> {\n return !!(await this.count({ where }))\n }\n\n async truncate() {\n await this.execute(`TRUNCATE TABLE ${this.table}`);\n }\n\n\n // end Helpers Methods\n // async createIndex(column: string) {\n // const { IndexMigration } = this.xansql.XansqlMigration.TableMigration;\n // const indexsql = IndexMigration.buildCreate(this.table, column);\n // try {\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"CREATE_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexsql, executeId);\n // } catch (error) {\n // throw new Error(\"Index already exists\");\n // }\n // }\n\n // async dropIndex(column: string) {\n // const { IndexMigration } = this.xansql.XansqlMigration.TableMigration;\n // const indexsql = IndexMigration.buildDrop(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexsql, executeId);\n // }\n\n // async addColumn(column: string) {\n // const { TableMigration } = this.xansql.XansqlMigration;\n // if (!(column in this.schema)) {\n // throw new Error(`Column ${column} already exists in table ${this.table}`);\n // }\n\n // const field = this.schema[column] as XqlFields;\n // if (!field) {\n // throw new Error(`Field definition for column ${column} is missing in schema for table ${this.table}`);\n // }\n // const sqlColumn = TableMigration.buildColumn(this.table, column);\n // let sql = `ALTER TABLE ${this.table} ADD COLUMN ${sqlColumn};`;\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"ADD_COLUMN\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(sql, executeId);\n // this.schema[column] = field;\n\n // // add foreign key if exists\n // const meta = field.meta || {};\n // if (Foreign.isSchema(field)) {\n // const info = Foreign.get(this, column)\n // const fkSql = TableMigration.ForeignKeyMigration.buildCreate(this.table, column, info.table, info.relation.main);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"ADD_FOREIGN_KEY\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(`ALTER TABLE ${this.table} ADD ${fkSql};`, executeId);\n // }\n\n // // add index if exists\n // if (meta.index) {\n // const indexSql = TableMigration.IndexMigration.buildCreate(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"CREATE_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexSql, executeId);\n // }\n\n // }\n\n // async renameColumn(oldColumn: string, newColumn: string) {\n // if (!(oldColumn in this.schema)) {\n // throw new Error(`Column ${oldColumn} does not exist in table ${this.table}`);\n // }\n // if (newColumn in this.schema) {\n // throw new Error(`Column ${newColumn} already exists in table ${this.table}`);\n // }\n // const engine = this.xansql.config.dialect.engine;\n // let sql = ``;\n\n // if (engine === 'mysql') {\n // sql = `ALTER TABLE ${this.table} CHANGE COLUMN ${oldColumn} ${newColumn} ${this.xansql.XansqlMigration.TableMigration.buildColumn(this.table, oldColumn)};`;\n // } else if (engine === 'postgresql') {\n // sql = `ALTER TABLE ${this.table} RENAME COLUMN ${oldColumn} TO ${newColumn};`;\n // } else if (engine === 'sqlite') {\n // throw new Error(`Renaming columns is not supported in SQLite`);\n // }\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"RENAME_COLUMN\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(sql, executeId);\n // const field = this.schema[oldColumn];\n // delete this.schema[oldColumn];\n // this.schema[newColumn] = field;\n\n // // rename foreign key if exists\n // const fieldMeta = field.meta || {};\n // if (Foreign.isSchema(field)) {\n // const fkOld = this.xansql.XansqlMigration.TableMigration.ForeignKeyMigration.identifier(this.table, oldColumn);\n // const fkNew = this.xansql.XansqlMigration.TableMigration.ForeignKeyMigration.identifier(this.table, newColumn);\n // let fsql = ``;\n // if (engine === 'mysql') {\n // fsql = `ALTER TABLE ${this.table} DROP FOREIGN KEY ${fkOld}, ADD CONSTRAINT ${fkNew} FOREIGN KEY (${newColumn}) REFERENCES ${Foreign.get(this, newColumn).table}(${Foreign.get(this, newColumn).relation.main});`;\n // } else if (engine === 'postgresql') {\n // fsql = `ALTER TABLE ${this.table} RENAME CONSTRAINT ${fkOld} TO ${fkNew};`;\n // } else if (engine === 'sqlite') {\n // throw new Error(`Renaming foreign keys is not supported in SQLite`);\n // }\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_FOREIGN_KEY\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(fsql, executeId);\n // }\n\n // // rename index if exists\n // if (fieldMeta.index) {\n // const indexOld = this.xansql.XansqlMigration.TableMigration.IndexMigration.identifier(this.table, oldColumn);\n // const indexNew = this.xansql.XansqlMigration.TableMigration.IndexMigration.identifier(this.table, newColumn);\n // let isql = ``;\n // if (engine === 'mysql') {\n // isql = `ALTER TABLE ${this.table} DROP INDEX ${indexOld}, ADD INDEX ${indexNew} (${newColumn});`;\n // } else if (engine === 'postgresql') {\n // isql = `ALTER INDEX ${indexOld} RENAME TO ${indexNew};`;\n // } else if (engine === 'sqlite') {\n // throw new Error(`Renaming indexes is not supported in SQLite`);\n // }\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(isql, executeId);\n // }\n // }\n\n // async dropColumn(column: string) {\n\n // let sql = `ALTER TABLE ${this.table} DROP COLUMN ${column};`;\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_COLUMN\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(sql, executeId);\n // const field = this.schema[column];\n // delete this.schema[column];\n // const fieldMeta = field.meta || {};\n\n // // drop foreign key if exists\n // if (Foreign.isSchema(field)) {\n // const fkSql = this.xansql.XansqlMigration.TableMigration.ForeignKeyMigration.buildDrop(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"ADD_FOREIGN_KEY\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(fkSql, executeId);\n // }\n\n // // drop index if exists\n // if (fieldMeta.index) {\n // const indexSql = this.xansql.XansqlMigration.TableMigration.IndexMigration.buildDrop(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"CREATE_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexSql, executeId);\n // }\n // }\n\n}\n\nexport default Model;\n"],"names":["ModelBase","iof","RelationExecuteArgs","CreateExecuter","XansqlError","UpdateExecuter","DeleteExecuter","FindExecuter","AggregateExecuter"],"mappings":"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"}
package/model/index.mjs CHANGED
@@ -1,4 +1,5 @@
1
1
  import XansqlError from '../core/XansqlError.mjs';
2
+ import { iof } from '../utils/index.mjs';
2
3
  import RelationExecuteArgs from './Args/RelationExcuteArgs.mjs';
3
4
  import ModelBase from './Base.mjs';
4
5
  import AggregateExecuter from './Executer/Aggregate/index.mjs';
@@ -10,7 +11,7 @@ import UpdateExecuter from './Executer/Update/index.mjs';
10
11
  class Model extends ModelBase {
11
12
  async create(args) {
12
13
  const xansql = this.xansql;
13
- const isRelArgs = args instanceof RelationExecuteArgs;
14
+ const isRelArgs = iof(args, RelationExecuteArgs);
14
15
  if (isRelArgs)
15
16
  args = args.args;
16
17
  try {
@@ -31,7 +32,7 @@ class Model extends ModelBase {
31
32
  if (!isRelArgs)
32
33
  await xansql.XansqlTransaction.rollback();
33
34
  let errors = {};
34
- if (error instanceof Array && error[0] instanceof XansqlError) {
35
+ if (iof(error, Array) && iof(error[0], XansqlError)) {
35
36
  for (let err of error) {
36
37
  errors[err.column] = err.message;
37
38
  }
@@ -44,7 +45,7 @@ class Model extends ModelBase {
44
45
  }
45
46
  async update(args) {
46
47
  const xansql = this.xansql;
47
- const isRelArgs = args instanceof RelationExecuteArgs;
48
+ const isRelArgs = iof(args, RelationExecuteArgs);
48
49
  if (isRelArgs)
49
50
  args = args.args;
50
51
  try {
@@ -64,7 +65,7 @@ class Model extends ModelBase {
64
65
  if (!isRelArgs)
65
66
  await xansql.XansqlTransaction.rollback();
66
67
  let errors = {};
67
- if (error instanceof Array && error[0] instanceof XansqlError) {
68
+ if (iof(error, Array) && iof(error[0], XansqlError)) {
68
69
  for (let err of error) {
69
70
  errors[err.column] = err.message;
70
71
  }
@@ -77,7 +78,7 @@ class Model extends ModelBase {
77
78
  }
78
79
  async delete(args) {
79
80
  const xansql = this.xansql;
80
- const isRelArgs = args instanceof RelationExecuteArgs;
81
+ const isRelArgs = iof(args, RelationExecuteArgs);
81
82
  if (isRelArgs)
82
83
  args = args.args;
83
84
  try {
@@ -100,7 +101,7 @@ class Model extends ModelBase {
100
101
  }
101
102
  }
102
103
  async find(args) {
103
- const isRelArgs = args instanceof RelationExecuteArgs;
104
+ const isRelArgs = iof(args, RelationExecuteArgs);
104
105
  if (isRelArgs)
105
106
  args = args.args;
106
107
  args = await this.callHook("beforeFind", args) || args;
@@ -134,7 +135,7 @@ class Model extends ModelBase {
134
135
  }
135
136
  // Helpers Methods
136
137
  async aggregate(args) {
137
- const isRelArgs = args instanceof RelationExecuteArgs;
138
+ const isRelArgs = iof(args, RelationExecuteArgs);
138
139
  if (isRelArgs)
139
140
  args = args.args;
140
141
  args = await this.callHook("beforeAggregate", args) || args;
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/model/index.ts"],"sourcesContent":["import XansqlError from \"../core/XansqlError\";\nimport RelationExecuteArgs from \"./Args/RelationExcuteArgs\";\nimport ModelBase from \"./Base\";\nimport AggregateExecuter from \"./Executer/Aggregate\";\nimport CreateExecuter from \"./Executer/Create\";\nimport DeleteExecuter from \"./Executer/Delete\";\nimport FindExecuter from \"./Executer/Find\";\nimport UpdateExecuter from \"./Executer/Update\";\nimport { AggregateArgsType, CreateArgsType, DeleteArgsType, FindArgsType, UpdateArgsType, WhereArgsType } from \"./types\";\n\nclass Model extends ModelBase {\n\n async create(args: CreateArgsType): Promise<any[]> {\n const xansql = this.xansql;\n const isRelArgs = args instanceof RelationExecuteArgs\n if (isRelArgs) args = (args as any).args\n\n try {\n if (!isRelArgs) await xansql.XansqlTransaction.begin()\n args = await this.callHook(\"beforeCreate\", args) || args\n\n // event emit BEFORE_CREATE\n const executer = new CreateExecuter(this);\n await xansql.EventManager.emit(\"BEFORE_CREATE\", { model: this, args });\n let results: any = await executer.execute(args);\n await xansql.EventManager.emit(\"CREATE\", { model: this, results, args });\n\n results = await this.callHook(\"afterCreate\", results, args) || results\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return results\n } catch (error: any) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n let errors: { [key: string]: string } = {}\n if (error instanceof Array && error[0] instanceof XansqlError) {\n for (let err of error) {\n errors[err.column] = err.message;\n }\n } else {\n errors[\"create\"] = error.message;\n }\n throw error\n }\n }\n\n async update(args: UpdateArgsType): Promise<any[]> {\n const xansql = this.xansql;\n const isRelArgs = args instanceof RelationExecuteArgs\n if (isRelArgs) args = (args as any).args\n\n try {\n if (!isRelArgs) await xansql.XansqlTransaction.begin()\n\n args = await this.callHook(\"beforeUpdate\", args) || args\n const executer = new UpdateExecuter(this);\n await xansql.EventManager.emit(\"BEFORE_UPDATE\", { model: this, args });\n let results: any = await executer.execute(args);\n await xansql.EventManager.emit(\"UPDATE\", { model: this, results, args });\n results = await this.callHook(\"afterUpdate\", results, args) || results\n\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return results\n } catch (error: any) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n let errors: { [key: string]: string } = {}\n if (error instanceof Array && error[0] instanceof XansqlError) {\n for (let err of error) {\n errors[err.column] = err.message;\n }\n } else {\n errors[\"update\"] = error.message;\n }\n throw errors\n }\n }\n\n async delete(args: DeleteArgsType): Promise<any[]> {\n const xansql = this.xansql;\n const isRelArgs = args instanceof RelationExecuteArgs\n if (isRelArgs) args = (args as any).args\n\n try {\n if (!isRelArgs) await xansql.XansqlTransaction.begin()\n\n args = await this.callHook(\"beforeDelete\", args) || args\n const executer = new DeleteExecuter(this);\n await xansql.EventManager.emit(\"BEFORE_DELETE\", { model: this, args });\n let results: any = await executer.execute(args);\n await xansql.EventManager.emit(\"DELETE\", { model: this, results, args });\n results = await this.callHook(\"afterDelete\", results, args) || results\n\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return results\n } catch (error) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n async find(args: FindArgsType): Promise<any[]> {\n const isRelArgs = args instanceof RelationExecuteArgs\n if (isRelArgs) args = (args as any).args\n\n args = await this.callHook(\"beforeFind\", args) || args\n const executer = new FindExecuter(this, async (row: any) => {\n return await this.callHook('transform', row) || row\n });\n await this.xansql.EventManager.emit(\"BEFORE_FIND\", { model: this, args });\n let results = await executer.execute(args);\n await this.xansql.EventManager.emit(\"FIND\", { model: this, results: results, args });\n results = await this.callHook(\"afterFind\", results, args) || results\n return results\n }\n\n async findOne(args: FindArgsType): Promise<any | null> {\n const results = await this.find({\n ...args,\n limit: {\n take: 1,\n skip: 0\n }\n })\n return results.length ? results[0] : null\n }\n\n async findByID(id: number | string): Promise<any | null> {\n const results = await this.find({\n where: {\n [this.IDColumn]: id\n },\n limit: {\n take: 1,\n skip: 0\n }\n })\n return results.length ? results[0] : null\n }\n\n // Helpers Methods\n\n async aggregate(args: AggregateArgsType): Promise<any[]> {\n const isRelArgs = args instanceof RelationExecuteArgs\n if (isRelArgs) args = (args as any).args\n args = await this.callHook(\"beforeAggregate\", args) || args\n const executer = new AggregateExecuter(this);\n await this.xansql.EventManager.emit(\"BEFORE_AGGREGATE\", { model: this, args });\n let results = await executer.execute(args);\n await this.xansql.EventManager.emit(\"AGGREGATE\", { model: this, results, args });\n\n results = await this.callHook(\"afterAggregate\", results, args) || results\n return results\n }\n\n\n async paginate(page: number, args?: Omit<FindArgsType, \"limit\"> & { perpage?: number }) {\n const perpage = args?.perpage || 20;\n const skip = (page - 1) * perpage;\n const results = await this.find({\n ...args,\n limit: {\n take: perpage,\n skip\n }\n })\n const total = await this.count(args?.where || {})\n return {\n page,\n perpage,\n pagecount: Math.ceil(total / perpage),\n rowcount: total,\n results\n }\n }\n\n async count(where: WhereArgsType): Promise<number> {\n const res: any[] = await this.aggregate({\n where,\n select: {\n [this.IDColumn]: {\n count: true\n }\n }\n })\n return res.length ? res[0][`count_${this.IDColumn}`] : 0\n }\n\n async min(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n min: true\n }\n }\n })\n return res.length ? res[0][`min_${column}`] : 0\n }\n\n async max(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n max: true\n }\n }\n })\n return res.length ? res[0][`max_${column}`] : 0\n }\n\n async sum(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n sum: true\n }\n }\n })\n return res.length ? res[0][`sum_${column}`] : 0\n }\n\n async avg(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n avg: true\n }\n }\n })\n return res.length ? res[0][`avg_${column}`] : 0\n }\n\n async exists(where: WhereArgsType): Promise<boolean> {\n return !!(await this.count({ where }))\n }\n\n async truncate() {\n await this.execute(`TRUNCATE TABLE ${this.table}`);\n }\n\n\n // end Helpers Methods\n // async createIndex(column: string) {\n // const { IndexMigration } = this.xansql.XansqlMigration.TableMigration;\n // const indexsql = IndexMigration.buildCreate(this.table, column);\n // try {\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"CREATE_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexsql, executeId);\n // } catch (error) {\n // throw new Error(\"Index already exists\");\n // }\n // }\n\n // async dropIndex(column: string) {\n // const { IndexMigration } = this.xansql.XansqlMigration.TableMigration;\n // const indexsql = IndexMigration.buildDrop(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexsql, executeId);\n // }\n\n // async addColumn(column: string) {\n // const { TableMigration } = this.xansql.XansqlMigration;\n // if (!(column in this.schema)) {\n // throw new Error(`Column ${column} already exists in table ${this.table}`);\n // }\n\n // const field = this.schema[column] as XqlFields;\n // if (!field) {\n // throw new Error(`Field definition for column ${column} is missing in schema for table ${this.table}`);\n // }\n // const sqlColumn = TableMigration.buildColumn(this.table, column);\n // let sql = `ALTER TABLE ${this.table} ADD COLUMN ${sqlColumn};`;\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"ADD_COLUMN\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(sql, executeId);\n // this.schema[column] = field;\n\n // // add foreign key if exists\n // const meta = field.meta || {};\n // if (Foreign.isSchema(field)) {\n // const info = Foreign.get(this, column)\n // const fkSql = TableMigration.ForeignKeyMigration.buildCreate(this.table, column, info.table, info.relation.main);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"ADD_FOREIGN_KEY\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(`ALTER TABLE ${this.table} ADD ${fkSql};`, executeId);\n // }\n\n // // add index if exists\n // if (meta.index) {\n // const indexSql = TableMigration.IndexMigration.buildCreate(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"CREATE_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexSql, executeId);\n // }\n\n // }\n\n // async renameColumn(oldColumn: string, newColumn: string) {\n // if (!(oldColumn in this.schema)) {\n // throw new Error(`Column ${oldColumn} does not exist in table ${this.table}`);\n // }\n // if (newColumn in this.schema) {\n // throw new Error(`Column ${newColumn} already exists in table ${this.table}`);\n // }\n // const engine = this.xansql.config.dialect.engine;\n // let sql = ``;\n\n // if (engine === 'mysql') {\n // sql = `ALTER TABLE ${this.table} CHANGE COLUMN ${oldColumn} ${newColumn} ${this.xansql.XansqlMigration.TableMigration.buildColumn(this.table, oldColumn)};`;\n // } else if (engine === 'postgresql') {\n // sql = `ALTER TABLE ${this.table} RENAME COLUMN ${oldColumn} TO ${newColumn};`;\n // } else if (engine === 'sqlite') {\n // throw new Error(`Renaming columns is not supported in SQLite`);\n // }\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"RENAME_COLUMN\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(sql, executeId);\n // const field = this.schema[oldColumn];\n // delete this.schema[oldColumn];\n // this.schema[newColumn] = field;\n\n // // rename foreign key if exists\n // const fieldMeta = field.meta || {};\n // if (Foreign.isSchema(field)) {\n // const fkOld = this.xansql.XansqlMigration.TableMigration.ForeignKeyMigration.identifier(this.table, oldColumn);\n // const fkNew = this.xansql.XansqlMigration.TableMigration.ForeignKeyMigration.identifier(this.table, newColumn);\n // let fsql = ``;\n // if (engine === 'mysql') {\n // fsql = `ALTER TABLE ${this.table} DROP FOREIGN KEY ${fkOld}, ADD CONSTRAINT ${fkNew} FOREIGN KEY (${newColumn}) REFERENCES ${Foreign.get(this, newColumn).table}(${Foreign.get(this, newColumn).relation.main});`;\n // } else if (engine === 'postgresql') {\n // fsql = `ALTER TABLE ${this.table} RENAME CONSTRAINT ${fkOld} TO ${fkNew};`;\n // } else if (engine === 'sqlite') {\n // throw new Error(`Renaming foreign keys is not supported in SQLite`);\n // }\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_FOREIGN_KEY\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(fsql, executeId);\n // }\n\n // // rename index if exists\n // if (fieldMeta.index) {\n // const indexOld = this.xansql.XansqlMigration.TableMigration.IndexMigration.identifier(this.table, oldColumn);\n // const indexNew = this.xansql.XansqlMigration.TableMigration.IndexMigration.identifier(this.table, newColumn);\n // let isql = ``;\n // if (engine === 'mysql') {\n // isql = `ALTER TABLE ${this.table} DROP INDEX ${indexOld}, ADD INDEX ${indexNew} (${newColumn});`;\n // } else if (engine === 'postgresql') {\n // isql = `ALTER INDEX ${indexOld} RENAME TO ${indexNew};`;\n // } else if (engine === 'sqlite') {\n // throw new Error(`Renaming indexes is not supported in SQLite`);\n // }\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(isql, executeId);\n // }\n // }\n\n // async dropColumn(column: string) {\n\n // let sql = `ALTER TABLE ${this.table} DROP COLUMN ${column};`;\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_COLUMN\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(sql, executeId);\n // const field = this.schema[column];\n // delete this.schema[column];\n // const fieldMeta = field.meta || {};\n\n // // drop foreign key if exists\n // if (Foreign.isSchema(field)) {\n // const fkSql = this.xansql.XansqlMigration.TableMigration.ForeignKeyMigration.buildDrop(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"ADD_FOREIGN_KEY\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(fkSql, executeId);\n // }\n\n // // drop index if exists\n // if (fieldMeta.index) {\n // const indexSql = this.xansql.XansqlMigration.TableMigration.IndexMigration.buildDrop(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"CREATE_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexSql, executeId);\n // }\n // }\n\n}\n\nexport default Model;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/model/index.ts"],"sourcesContent":["import XansqlError from \"../core/XansqlError\";\nimport { iof } from \"../utils\";\nimport RelationExecuteArgs from \"./Args/RelationExcuteArgs\";\nimport ModelBase from \"./Base\";\nimport AggregateExecuter from \"./Executer/Aggregate\";\nimport CreateExecuter from \"./Executer/Create\";\nimport DeleteExecuter from \"./Executer/Delete\";\nimport FindExecuter from \"./Executer/Find\";\nimport UpdateExecuter from \"./Executer/Update\";\nimport { AggregateArgsType, CreateArgsType, DeleteArgsType, FindArgsType, UpdateArgsType, WhereArgsType } from \"./types\";\n\nclass Model extends ModelBase {\n\n async create(args: CreateArgsType): Promise<any[]> {\n const xansql = this.xansql;\n const isRelArgs = iof(args, RelationExecuteArgs)\n if (isRelArgs) args = (args as any).args\n\n try {\n if (!isRelArgs) await xansql.XansqlTransaction.begin()\n args = await this.callHook(\"beforeCreate\", args) || args\n\n // event emit BEFORE_CREATE\n const executer = new CreateExecuter(this);\n await xansql.EventManager.emit(\"BEFORE_CREATE\", { model: this, args });\n let results: any = await executer.execute(args);\n await xansql.EventManager.emit(\"CREATE\", { model: this, results, args });\n\n results = await this.callHook(\"afterCreate\", results, args) || results\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return results\n } catch (error: any) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n let errors: { [key: string]: string } = {}\n if (iof(error, Array) && iof(error[0], XansqlError)) {\n for (let err of error) {\n errors[err.column] = err.message;\n }\n } else {\n errors[\"create\"] = error.message;\n }\n throw error\n }\n }\n\n async update(args: UpdateArgsType): Promise<any[]> {\n const xansql = this.xansql;\n const isRelArgs = iof(args, RelationExecuteArgs)\n if (isRelArgs) args = (args as any).args\n\n try {\n if (!isRelArgs) await xansql.XansqlTransaction.begin()\n\n args = await this.callHook(\"beforeUpdate\", args) || args\n const executer = new UpdateExecuter(this);\n await xansql.EventManager.emit(\"BEFORE_UPDATE\", { model: this, args });\n let results: any = await executer.execute(args);\n await xansql.EventManager.emit(\"UPDATE\", { model: this, results, args });\n results = await this.callHook(\"afterUpdate\", results, args) || results\n\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return results\n } catch (error: any) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n let errors: { [key: string]: string } = {}\n if (iof(error, Array) && iof(error[0], XansqlError)) {\n for (let err of error) {\n errors[err.column] = err.message;\n }\n } else {\n errors[\"update\"] = error.message;\n }\n throw errors\n }\n }\n\n async delete(args: DeleteArgsType): Promise<any[]> {\n const xansql = this.xansql;\n const isRelArgs = iof(args, RelationExecuteArgs)\n if (isRelArgs) args = (args as any).args\n\n try {\n if (!isRelArgs) await xansql.XansqlTransaction.begin()\n\n args = await this.callHook(\"beforeDelete\", args) || args\n const executer = new DeleteExecuter(this);\n await xansql.EventManager.emit(\"BEFORE_DELETE\", { model: this, args });\n let results: any = await executer.execute(args);\n await xansql.EventManager.emit(\"DELETE\", { model: this, results, args });\n results = await this.callHook(\"afterDelete\", results, args) || results\n\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return results\n } catch (error) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n async find(args: FindArgsType): Promise<any[]> {\n const isRelArgs = iof(args, RelationExecuteArgs)\n if (isRelArgs) args = (args as any).args\n\n args = await this.callHook(\"beforeFind\", args) || args\n const executer = new FindExecuter(this, async (row: any) => {\n return await this.callHook('transform', row) || row\n });\n await this.xansql.EventManager.emit(\"BEFORE_FIND\", { model: this, args });\n let results = await executer.execute(args);\n await this.xansql.EventManager.emit(\"FIND\", { model: this, results: results, args });\n results = await this.callHook(\"afterFind\", results, args) || results\n return results\n }\n\n async findOne(args: FindArgsType): Promise<any | null> {\n const results = await this.find({\n ...args,\n limit: {\n take: 1,\n skip: 0\n }\n })\n return results.length ? results[0] : null\n }\n\n async findByID(id: number | string): Promise<any | null> {\n const results = await this.find({\n where: {\n [this.IDColumn]: id\n },\n limit: {\n take: 1,\n skip: 0\n }\n })\n return results.length ? results[0] : null\n }\n\n // Helpers Methods\n\n async aggregate(args: AggregateArgsType): Promise<any[]> {\n const isRelArgs = iof(args, RelationExecuteArgs)\n if (isRelArgs) args = (args as any).args\n args = await this.callHook(\"beforeAggregate\", args) || args\n const executer = new AggregateExecuter(this);\n await this.xansql.EventManager.emit(\"BEFORE_AGGREGATE\", { model: this, args });\n let results = await executer.execute(args);\n await this.xansql.EventManager.emit(\"AGGREGATE\", { model: this, results, args });\n\n results = await this.callHook(\"afterAggregate\", results, args) || results\n return results\n }\n\n\n async paginate(page: number, args?: Omit<FindArgsType, \"limit\"> & { perpage?: number }) {\n const perpage = args?.perpage || 20;\n const skip = (page - 1) * perpage;\n const results = await this.find({\n ...args,\n limit: {\n take: perpage,\n skip\n }\n })\n const total = await this.count(args?.where || {})\n return {\n page,\n perpage,\n pagecount: Math.ceil(total / perpage),\n rowcount: total,\n results\n }\n }\n\n async count(where: WhereArgsType): Promise<number> {\n const res: any[] = await this.aggregate({\n where,\n select: {\n [this.IDColumn]: {\n count: true\n }\n }\n })\n return res.length ? res[0][`count_${this.IDColumn}`] : 0\n }\n\n async min(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n min: true\n }\n }\n })\n return res.length ? res[0][`min_${column}`] : 0\n }\n\n async max(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n max: true\n }\n }\n })\n return res.length ? res[0][`max_${column}`] : 0\n }\n\n async sum(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n sum: true\n }\n }\n })\n return res.length ? res[0][`sum_${column}`] : 0\n }\n\n async avg(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n avg: true\n }\n }\n })\n return res.length ? res[0][`avg_${column}`] : 0\n }\n\n async exists(where: WhereArgsType): Promise<boolean> {\n return !!(await this.count({ where }))\n }\n\n async truncate() {\n await this.execute(`TRUNCATE TABLE ${this.table}`);\n }\n\n\n // end Helpers Methods\n // async createIndex(column: string) {\n // const { IndexMigration } = this.xansql.XansqlMigration.TableMigration;\n // const indexsql = IndexMigration.buildCreate(this.table, column);\n // try {\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"CREATE_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexsql, executeId);\n // } catch (error) {\n // throw new Error(\"Index already exists\");\n // }\n // }\n\n // async dropIndex(column: string) {\n // const { IndexMigration } = this.xansql.XansqlMigration.TableMigration;\n // const indexsql = IndexMigration.buildDrop(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexsql, executeId);\n // }\n\n // async addColumn(column: string) {\n // const { TableMigration } = this.xansql.XansqlMigration;\n // if (!(column in this.schema)) {\n // throw new Error(`Column ${column} already exists in table ${this.table}`);\n // }\n\n // const field = this.schema[column] as XqlFields;\n // if (!field) {\n // throw new Error(`Field definition for column ${column} is missing in schema for table ${this.table}`);\n // }\n // const sqlColumn = TableMigration.buildColumn(this.table, column);\n // let sql = `ALTER TABLE ${this.table} ADD COLUMN ${sqlColumn};`;\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"ADD_COLUMN\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(sql, executeId);\n // this.schema[column] = field;\n\n // // add foreign key if exists\n // const meta = field.meta || {};\n // if (Foreign.isSchema(field)) {\n // const info = Foreign.get(this, column)\n // const fkSql = TableMigration.ForeignKeyMigration.buildCreate(this.table, column, info.table, info.relation.main);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"ADD_FOREIGN_KEY\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(`ALTER TABLE ${this.table} ADD ${fkSql};`, executeId);\n // }\n\n // // add index if exists\n // if (meta.index) {\n // const indexSql = TableMigration.IndexMigration.buildCreate(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"CREATE_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexSql, executeId);\n // }\n\n // }\n\n // async renameColumn(oldColumn: string, newColumn: string) {\n // if (!(oldColumn in this.schema)) {\n // throw new Error(`Column ${oldColumn} does not exist in table ${this.table}`);\n // }\n // if (newColumn in this.schema) {\n // throw new Error(`Column ${newColumn} already exists in table ${this.table}`);\n // }\n // const engine = this.xansql.config.dialect.engine;\n // let sql = ``;\n\n // if (engine === 'mysql') {\n // sql = `ALTER TABLE ${this.table} CHANGE COLUMN ${oldColumn} ${newColumn} ${this.xansql.XansqlMigration.TableMigration.buildColumn(this.table, oldColumn)};`;\n // } else if (engine === 'postgresql') {\n // sql = `ALTER TABLE ${this.table} RENAME COLUMN ${oldColumn} TO ${newColumn};`;\n // } else if (engine === 'sqlite') {\n // throw new Error(`Renaming columns is not supported in SQLite`);\n // }\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"RENAME_COLUMN\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(sql, executeId);\n // const field = this.schema[oldColumn];\n // delete this.schema[oldColumn];\n // this.schema[newColumn] = field;\n\n // // rename foreign key if exists\n // const fieldMeta = field.meta || {};\n // if (Foreign.isSchema(field)) {\n // const fkOld = this.xansql.XansqlMigration.TableMigration.ForeignKeyMigration.identifier(this.table, oldColumn);\n // const fkNew = this.xansql.XansqlMigration.TableMigration.ForeignKeyMigration.identifier(this.table, newColumn);\n // let fsql = ``;\n // if (engine === 'mysql') {\n // fsql = `ALTER TABLE ${this.table} DROP FOREIGN KEY ${fkOld}, ADD CONSTRAINT ${fkNew} FOREIGN KEY (${newColumn}) REFERENCES ${Foreign.get(this, newColumn).table}(${Foreign.get(this, newColumn).relation.main});`;\n // } else if (engine === 'postgresql') {\n // fsql = `ALTER TABLE ${this.table} RENAME CONSTRAINT ${fkOld} TO ${fkNew};`;\n // } else if (engine === 'sqlite') {\n // throw new Error(`Renaming foreign keys is not supported in SQLite`);\n // }\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_FOREIGN_KEY\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(fsql, executeId);\n // }\n\n // // rename index if exists\n // if (fieldMeta.index) {\n // const indexOld = this.xansql.XansqlMigration.TableMigration.IndexMigration.identifier(this.table, oldColumn);\n // const indexNew = this.xansql.XansqlMigration.TableMigration.IndexMigration.identifier(this.table, newColumn);\n // let isql = ``;\n // if (engine === 'mysql') {\n // isql = `ALTER TABLE ${this.table} DROP INDEX ${indexOld}, ADD INDEX ${indexNew} (${newColumn});`;\n // } else if (engine === 'postgresql') {\n // isql = `ALTER INDEX ${indexOld} RENAME TO ${indexNew};`;\n // } else if (engine === 'sqlite') {\n // throw new Error(`Renaming indexes is not supported in SQLite`);\n // }\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(isql, executeId);\n // }\n // }\n\n // async dropColumn(column: string) {\n\n // let sql = `ALTER TABLE ${this.table} DROP COLUMN ${column};`;\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_COLUMN\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(sql, executeId);\n // const field = this.schema[column];\n // delete this.schema[column];\n // const fieldMeta = field.meta || {};\n\n // // drop foreign key if exists\n // if (Foreign.isSchema(field)) {\n // const fkSql = this.xansql.XansqlMigration.TableMigration.ForeignKeyMigration.buildDrop(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"ADD_FOREIGN_KEY\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(fkSql, executeId);\n // }\n\n // // drop index if exists\n // if (fieldMeta.index) {\n // const indexSql = this.xansql.XansqlMigration.TableMigration.IndexMigration.buildDrop(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"CREATE_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexSql, executeId);\n // }\n // }\n\n}\n\nexport default Model;\n"],"names":[],"mappings":";;;;;;;;;;AAWA,MAAM,KAAM,SAAQ,SAAS,CAAA;IAE1B,MAAM,MAAM,CAAC,IAAoB,EAAA;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;QAC1B,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,mBAAmB,CAAC;AAChD,QAAA,IAAI,SAAS;AAAE,YAAA,IAAI,GAAI,IAAY,CAAC,IAAI;AAExC,QAAA,IAAI;AACD,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,MAAM,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE;AACtD,YAAA,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,IAAI;;AAGxD,YAAA,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC;AACzC,YAAA,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACtE,IAAI,OAAO,GAAQ,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AAC/C,YAAA,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAExE,YAAA,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,OAAO;AACtE,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE;AACvD,YAAA,OAAO,OAAO;QACjB;QAAE,OAAO,KAAU,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,MAAM,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE;YACzD,IAAI,MAAM,GAA8B,EAAE;AAC1C,YAAA,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE;AAClD,gBAAA,KAAK,IAAI,GAAG,IAAI,KAAK,EAAE;oBACpB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO;gBACnC;YACH;iBAAO;AACJ,gBAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,OAAO;YACnC;AACA,YAAA,MAAM,KAAK;QACd;IACH;IAEA,MAAM,MAAM,CAAC,IAAoB,EAAA;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;QAC1B,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,mBAAmB,CAAC;AAChD,QAAA,IAAI,SAAS;AAAE,YAAA,IAAI,GAAI,IAAY,CAAC,IAAI;AAExC,QAAA,IAAI;AACD,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,MAAM,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE;AAEtD,YAAA,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,IAAI;AACxD,YAAA,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC;AACzC,YAAA,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACtE,IAAI,OAAO,GAAQ,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AAC/C,YAAA,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxE,YAAA,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,OAAO;AAEtE,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE;AACvD,YAAA,OAAO,OAAO;QACjB;QAAE,OAAO,KAAU,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,MAAM,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE;YACzD,IAAI,MAAM,GAA8B,EAAE;AAC1C,YAAA,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE;AAClD,gBAAA,KAAK,IAAI,GAAG,IAAI,KAAK,EAAE;oBACpB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO;gBACnC;YACH;iBAAO;AACJ,gBAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,OAAO;YACnC;AACA,YAAA,MAAM,MAAM;QACf;IACH;IAEA,MAAM,MAAM,CAAC,IAAoB,EAAA;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;QAC1B,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,mBAAmB,CAAC;AAChD,QAAA,IAAI,SAAS;AAAE,YAAA,IAAI,GAAI,IAAY,CAAC,IAAI;AAExC,QAAA,IAAI;AACD,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,MAAM,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE;AAEtD,YAAA,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,IAAI;AACxD,YAAA,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC;AACzC,YAAA,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACtE,IAAI,OAAO,GAAQ,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AAC/C,YAAA,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxE,YAAA,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,OAAO;AAEtE,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE;AACvD,YAAA,OAAO,OAAO;QACjB;QAAE,OAAO,KAAK,EAAE;AACb,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,MAAM,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE;AACzD,YAAA,MAAM,KAAK;QACd;IACH;IAEA,MAAM,IAAI,CAAC,IAAkB,EAAA;QAC1B,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,mBAAmB,CAAC;AAChD,QAAA,IAAI,SAAS;AAAE,YAAA,IAAI,GAAI,IAAY,CAAC,IAAI;AAExC,QAAA,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,IAAI;QACtD,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,OAAO,GAAQ,KAAI;YACxD,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,GAAG;AACtD,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACzE,IAAI,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;QAC1C,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACpF,QAAA,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,OAAO;AACpE,QAAA,OAAO,OAAO;IACjB;IAEA,MAAM,OAAO,CAAC,IAAkB,EAAA;QAC7B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACzB,IAAI,CAAA,EAAA,EACP,KAAK,EAAE;AACJ,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,IAAI,EAAE;AACR,aAAA,EAAA,CAAA,CACF;AACF,QAAA,OAAO,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;IAC5C;IAEA,MAAM,QAAQ,CAAC,EAAmB,EAAA;AAC/B,QAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;AAC7B,YAAA,KAAK,EAAE;AACJ,gBAAA,CAAC,IAAI,CAAC,QAAQ,GAAG;AACnB,aAAA;AACD,YAAA,KAAK,EAAE;AACJ,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,IAAI,EAAE;AACR;AACH,SAAA,CAAC;AACF,QAAA,OAAO,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;IAC5C;;IAIA,MAAM,SAAS,CAAC,IAAuB,EAAA;QACpC,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,mBAAmB,CAAC;AAChD,QAAA,IAAI,SAAS;AAAE,YAAA,IAAI,GAAI,IAAY,CAAC,IAAI;AACxC,QAAA,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,IAAI;AAC3D,QAAA,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC;AAC5C,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC9E,IAAI,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;QAC1C,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAEhF,QAAA,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,OAAO;AACzE,QAAA,OAAO,OAAO;IACjB;AAGA,IAAA,MAAM,QAAQ,CAAC,IAAY,EAAE,IAAyD,EAAA;AACnF,QAAA,MAAM,OAAO,GAAG,CAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,MAAA,GAAA,MAAA,GAAJ,IAAI,CAAE,OAAO,KAAI,EAAE;QACnC,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,OAAO;QACjC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACzB,IAAI,CAAA,EAAA,EACP,KAAK,EAAE;AACJ,gBAAA,IAAI,EAAE,OAAO;gBACb;AACF,aAAA,EAAA,CAAA,CACF;AACF,QAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,KAAI,EAAE,CAAC;QACjD,OAAO;YACJ,IAAI;YACJ,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;AACrC,YAAA,QAAQ,EAAE,KAAK;YACf;SACF;IACJ;IAEA,MAAM,KAAK,CAAC,KAAoB,EAAA;AAC7B,QAAA,MAAM,GAAG,GAAU,MAAM,IAAI,CAAC,SAAS,CAAC;YACrC,KAAK;AACL,YAAA,MAAM,EAAE;AACL,gBAAA,CAAC,IAAI,CAAC,QAAQ,GAAG;AACd,oBAAA,KAAK,EAAE;AACT;AACH;AACH,SAAA,CAAC;QACF,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA,MAAA,EAAS,IAAI,CAAC,QAAQ,CAAA,CAAE,CAAC,GAAG,CAAC;IAC3D;AAEA,IAAA,MAAM,GAAG,CAAC,MAAc,EAAE,KAAoB,EAAA;QAC3C,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE;YAC3B,MAAM,IAAI,WAAW,CAAC;AACnB,gBAAA,OAAO,EAAE,CAAA,QAAA,EAAW,MAAM,8BAA8B,IAAI,CAAC,KAAK,CAAA,CAAA,CAAG;gBACrE,KAAK,EAAE,IAAI,CAAC,KAAK;AACnB,aAAA,CAAC;QACL;AACA,QAAA,MAAM,GAAG,GAAU,MAAM,IAAI,CAAC,SAAS,CAAC;YACrC,KAAK;AACL,YAAA,MAAM,EAAE;gBACL,CAAC,MAAM,GAAG;AACP,oBAAA,GAAG,EAAE;AACP;AACH;AACH,SAAA,CAAC;AACF,QAAA,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA,IAAA,EAAO,MAAM,CAAA,CAAE,CAAC,GAAG,CAAC;IAClD;AAEA,IAAA,MAAM,GAAG,CAAC,MAAc,EAAE,KAAoB,EAAA;QAC3C,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE;YAC3B,MAAM,IAAI,WAAW,CAAC;AACnB,gBAAA,OAAO,EAAE,CAAA,QAAA,EAAW,MAAM,8BAA8B,IAAI,CAAC,KAAK,CAAA,CAAA,CAAG;gBACrE,KAAK,EAAE,IAAI,CAAC,KAAK;AACnB,aAAA,CAAC;QACL;AACA,QAAA,MAAM,GAAG,GAAU,MAAM,IAAI,CAAC,SAAS,CAAC;YACrC,KAAK;AACL,YAAA,MAAM,EAAE;gBACL,CAAC,MAAM,GAAG;AACP,oBAAA,GAAG,EAAE;AACP;AACH;AACH,SAAA,CAAC;AACF,QAAA,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA,IAAA,EAAO,MAAM,CAAA,CAAE,CAAC,GAAG,CAAC;IAClD;AAEA,IAAA,MAAM,GAAG,CAAC,MAAc,EAAE,KAAoB,EAAA;QAC3C,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE;YAC3B,MAAM,IAAI,WAAW,CAAC;AACnB,gBAAA,OAAO,EAAE,CAAA,QAAA,EAAW,MAAM,8BAA8B,IAAI,CAAC,KAAK,CAAA,CAAA,CAAG;gBACrE,KAAK,EAAE,IAAI,CAAC,KAAK;AACnB,aAAA,CAAC;QACL;AACA,QAAA,MAAM,GAAG,GAAU,MAAM,IAAI,CAAC,SAAS,CAAC;YACrC,KAAK;AACL,YAAA,MAAM,EAAE;gBACL,CAAC,MAAM,GAAG;AACP,oBAAA,GAAG,EAAE;AACP;AACH;AACH,SAAA,CAAC;AACF,QAAA,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA,IAAA,EAAO,MAAM,CAAA,CAAE,CAAC,GAAG,CAAC;IAClD;AAEA,IAAA,MAAM,GAAG,CAAC,MAAc,EAAE,KAAoB,EAAA;QAC3C,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE;YAC3B,MAAM,IAAI,WAAW,CAAC;AACnB,gBAAA,OAAO,EAAE,CAAA,QAAA,EAAW,MAAM,8BAA8B,IAAI,CAAC,KAAK,CAAA,CAAA,CAAG;gBACrE,KAAK,EAAE,IAAI,CAAC,KAAK;AACnB,aAAA,CAAC;QACL;AACA,QAAA,MAAM,GAAG,GAAU,MAAM,IAAI,CAAC,SAAS,CAAC;YACrC,KAAK;AACL,YAAA,MAAM,EAAE;gBACL,CAAC,MAAM,GAAG;AACP,oBAAA,GAAG,EAAE;AACP;AACH;AACH,SAAA,CAAC;AACF,QAAA,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA,IAAA,EAAO,MAAM,CAAA,CAAE,CAAC,GAAG,CAAC;IAClD;IAEA,MAAM,MAAM,CAAC,KAAoB,EAAA;AAC9B,QAAA,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACzC;AAEA,IAAA,MAAM,QAAQ,GAAA;QACX,MAAM,IAAI,CAAC,OAAO,CAAC,CAAA,eAAA,EAAkB,IAAI,CAAC,KAAK,CAAA,CAAE,CAAC;IACrD;AAiOF;;;;"}