xansql 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/Types/fields/Array.d.ts +7 -0
  2. package/Types/fields/Array.js +6 -0
  3. package/Types/fields/Array.js.map +1 -0
  4. package/Types/fields/Array.mjs +6 -0
  5. package/Types/fields/Array.mjs.map +1 -0
  6. package/Types/fields/Boolean.d.ts +8 -0
  7. package/Types/fields/Boolean.js +11 -0
  8. package/Types/fields/Boolean.js.map +1 -0
  9. package/Types/fields/Boolean.mjs +11 -0
  10. package/Types/fields/Boolean.mjs.map +1 -0
  11. package/Types/fields/Date.d.ts +10 -0
  12. package/Types/fields/Date.js +22 -0
  13. package/Types/fields/Date.js.map +1 -0
  14. package/Types/fields/Date.mjs +22 -0
  15. package/Types/fields/Date.mjs.map +1 -0
  16. package/Types/fields/Enum.d.ts +8 -0
  17. package/Types/fields/Enum.js +10 -0
  18. package/Types/fields/Enum.js.map +1 -0
  19. package/Types/fields/Enum.mjs +10 -0
  20. package/Types/fields/Enum.mjs.map +1 -0
  21. package/Types/fields/File.d.ts +7 -0
  22. package/Types/fields/File.js +6 -0
  23. package/Types/fields/File.js.map +1 -0
  24. package/Types/fields/File.mjs +6 -0
  25. package/Types/fields/File.mjs.map +1 -0
  26. package/Types/fields/IDField.d.ts +6 -0
  27. package/Types/fields/IDField.js +2 -0
  28. package/Types/fields/IDField.js.map +1 -0
  29. package/Types/fields/IDField.mjs +2 -0
  30. package/Types/fields/IDField.mjs.map +1 -0
  31. package/Types/fields/Number.d.ts +8 -0
  32. package/Types/fields/Number.js +11 -0
  33. package/Types/fields/Number.js.map +1 -0
  34. package/Types/fields/Number.mjs +11 -0
  35. package/Types/fields/Number.mjs.map +1 -0
  36. package/Types/fields/Object.d.ts +8 -0
  37. package/Types/fields/Object.js +11 -0
  38. package/Types/fields/Object.js.map +1 -0
  39. package/Types/fields/Object.mjs +11 -0
  40. package/Types/fields/Object.mjs.map +1 -0
  41. package/Types/fields/Record.d.ts +8 -0
  42. package/Types/fields/Record.js +11 -0
  43. package/Types/fields/Record.js.map +1 -0
  44. package/Types/fields/Record.mjs +11 -0
  45. package/Types/fields/Record.mjs.map +1 -0
  46. package/Types/fields/Schema.d.ts +16 -0
  47. package/Types/fields/Schema.js +34 -0
  48. package/Types/fields/Schema.js.map +1 -0
  49. package/Types/fields/Schema.mjs +34 -0
  50. package/Types/fields/Schema.mjs.map +1 -0
  51. package/Types/fields/String.d.ts +10 -0
  52. package/Types/fields/String.js +20 -0
  53. package/Types/fields/String.js.map +1 -0
  54. package/Types/fields/String.mjs +20 -0
  55. package/Types/fields/String.mjs.map +1 -0
  56. package/Types/fields/Tuple.d.ts +8 -0
  57. package/Types/fields/Tuple.js +11 -0
  58. package/Types/fields/Tuple.js.map +1 -0
  59. package/Types/fields/Tuple.mjs +11 -0
  60. package/Types/fields/Tuple.mjs.map +1 -0
  61. package/Types/fields/Union.d.ts +8 -0
  62. package/Types/fields/Union.js +11 -0
  63. package/Types/fields/Union.js.map +1 -0
  64. package/Types/fields/Union.mjs +11 -0
  65. package/Types/fields/Union.mjs.map +1 -0
  66. package/Types/index.d.ts +56 -0
  67. package/Types/index.js +129 -0
  68. package/Types/index.js.map +1 -0
  69. package/Types/index.mjs +129 -0
  70. package/Types/index.mjs.map +1 -0
  71. package/Types/types.d.ts +20 -0
  72. package/core/ExcuteMeta.d.ts +11 -0
  73. package/core/ExcuteMeta.js +22 -0
  74. package/core/ExcuteMeta.js.map +1 -0
  75. package/core/ExcuteMeta.mjs +22 -0
  76. package/core/ExcuteMeta.mjs.map +1 -0
  77. package/core/Xansql.d.ts +46 -0
  78. package/core/Xansql.js +132 -0
  79. package/core/Xansql.js.map +1 -0
  80. package/core/Xansql.mjs +132 -0
  81. package/core/Xansql.mjs.map +1 -0
  82. package/core/XansqlError.js +11 -0
  83. package/core/XansqlError.js.map +1 -0
  84. package/core/XansqlError.mjs +11 -0
  85. package/core/XansqlError.mjs.map +1 -0
  86. package/core/XansqlResult.d.ts +12 -0
  87. package/core/XansqlResult.js +32 -0
  88. package/core/XansqlResult.js.map +1 -0
  89. package/core/XansqlResult.mjs +32 -0
  90. package/core/XansqlResult.mjs.map +1 -0
  91. package/core/classes/EventManager.d.ts +72 -0
  92. package/core/classes/EventManager.js +21 -0
  93. package/core/classes/EventManager.js.map +1 -0
  94. package/core/classes/EventManager.mjs +21 -0
  95. package/core/classes/EventManager.mjs.map +1 -0
  96. package/core/classes/ForeignInfo.js +51 -0
  97. package/core/classes/ForeignInfo.js.map +1 -0
  98. package/core/classes/ForeignInfo.mjs +51 -0
  99. package/core/classes/ForeignInfo.mjs.map +1 -0
  100. package/core/classes/Migration/ForeingMigration.d.ts +12 -0
  101. package/core/classes/Migration/ForeingMigration.js +52 -0
  102. package/core/classes/Migration/ForeingMigration.js.map +1 -0
  103. package/core/classes/Migration/ForeingMigration.mjs +52 -0
  104. package/core/classes/Migration/ForeingMigration.mjs.map +1 -0
  105. package/core/classes/Migration/IndexMigration.d.ts +12 -0
  106. package/core/classes/Migration/IndexMigration.js +49 -0
  107. package/core/classes/Migration/IndexMigration.js.map +1 -0
  108. package/core/classes/Migration/IndexMigration.mjs +49 -0
  109. package/core/classes/Migration/IndexMigration.mjs.map +1 -0
  110. package/core/classes/Migration/TableMigration.d.ts +33 -0
  111. package/core/classes/Migration/TableMigration.js +215 -0
  112. package/core/classes/Migration/TableMigration.js.map +1 -0
  113. package/core/classes/Migration/TableMigration.mjs +215 -0
  114. package/core/classes/Migration/TableMigration.mjs.map +1 -0
  115. package/core/classes/Migration/index.d.ts +12 -0
  116. package/core/classes/Migration/index.js +189 -0
  117. package/core/classes/Migration/index.js.map +1 -0
  118. package/core/classes/Migration/index.mjs +189 -0
  119. package/core/classes/Migration/index.mjs.map +1 -0
  120. package/core/classes/ModelFormatter.js +166 -0
  121. package/core/classes/ModelFormatter.js.map +1 -0
  122. package/core/classes/ModelFormatter.mjs +166 -0
  123. package/core/classes/ModelFormatter.mjs.map +1 -0
  124. package/core/classes/TypesGenerator.d.ts +13 -0
  125. package/core/classes/TypesGenerator.js +170 -0
  126. package/core/classes/TypesGenerator.js.map +1 -0
  127. package/core/classes/TypesGenerator.mjs +170 -0
  128. package/core/classes/TypesGenerator.mjs.map +1 -0
  129. package/core/classes/XansqlConfig.js +33 -0
  130. package/core/classes/XansqlConfig.js.map +1 -0
  131. package/core/classes/XansqlConfig.mjs +33 -0
  132. package/core/classes/XansqlConfig.mjs.map +1 -0
  133. package/core/classes/XansqlFetch.js +304 -0
  134. package/core/classes/XansqlFetch.js.map +1 -0
  135. package/core/classes/XansqlFetch.mjs +304 -0
  136. package/core/classes/XansqlFetch.mjs.map +1 -0
  137. package/core/classes/XansqlTransaction.d.ts +13 -0
  138. package/core/classes/XansqlTransaction.js +46 -0
  139. package/core/classes/XansqlTransaction.js.map +1 -0
  140. package/core/classes/XansqlTransaction.mjs +46 -0
  141. package/core/classes/XansqlTransaction.mjs.map +1 -0
  142. package/core/type.d.ts +117 -0
  143. package/index.d.ts +3 -0
  144. package/index.js +1 -0
  145. package/index.js.map +1 -0
  146. package/index.mjs +1 -0
  147. package/index.mjs.map +1 -0
  148. package/model/Args/RelationExcuteArgs.js +5 -0
  149. package/model/Args/RelationExcuteArgs.js.map +1 -0
  150. package/model/Args/RelationExcuteArgs.mjs +5 -0
  151. package/model/Args/RelationExcuteArgs.mjs.map +1 -0
  152. package/model/Args/WhereArgs.js +226 -0
  153. package/model/Args/WhereArgs.js.map +1 -0
  154. package/model/Args/WhereArgs.mjs +226 -0
  155. package/model/Args/WhereArgs.mjs.map +1 -0
  156. package/model/Base.d.ts +26 -0
  157. package/model/Base.js +64 -0
  158. package/model/Base.js.map +1 -0
  159. package/model/Base.mjs +64 -0
  160. package/model/Base.mjs.map +1 -0
  161. package/model/Executer/Aggregate/SelectArgs.js +59 -0
  162. package/model/Executer/Aggregate/SelectArgs.js.map +1 -0
  163. package/model/Executer/Aggregate/SelectArgs.mjs +59 -0
  164. package/model/Executer/Aggregate/SelectArgs.mjs.map +1 -0
  165. package/model/Executer/Aggregate/index.js +59 -0
  166. package/model/Executer/Aggregate/index.js.map +1 -0
  167. package/model/Executer/Aggregate/index.mjs +59 -0
  168. package/model/Executer/Aggregate/index.mjs.map +1 -0
  169. package/model/Executer/Create/CreateDataArgs.js +145 -0
  170. package/model/Executer/Create/CreateDataArgs.js.map +1 -0
  171. package/model/Executer/Create/CreateDataArgs.mjs +145 -0
  172. package/model/Executer/Create/CreateDataArgs.mjs.map +1 -0
  173. package/model/Executer/Create/index.js +101 -0
  174. package/model/Executer/Create/index.js.map +1 -0
  175. package/model/Executer/Create/index.mjs +101 -0
  176. package/model/Executer/Create/index.mjs.map +1 -0
  177. package/model/Executer/Delete/index.js +112 -0
  178. package/model/Executer/Delete/index.js.map +1 -0
  179. package/model/Executer/Delete/index.mjs +112 -0
  180. package/model/Executer/Delete/index.mjs.map +1 -0
  181. package/model/Executer/Find/DistinctArgs.js +32 -0
  182. package/model/Executer/Find/DistinctArgs.js.map +1 -0
  183. package/model/Executer/Find/DistinctArgs.mjs +32 -0
  184. package/model/Executer/Find/DistinctArgs.mjs.map +1 -0
  185. package/model/Executer/Find/LimitArgs.js +31 -0
  186. package/model/Executer/Find/LimitArgs.js.map +1 -0
  187. package/model/Executer/Find/LimitArgs.mjs +31 -0
  188. package/model/Executer/Find/LimitArgs.mjs.map +1 -0
  189. package/model/Executer/Find/OrderByArgs.js +29 -0
  190. package/model/Executer/Find/OrderByArgs.js.map +1 -0
  191. package/model/Executer/Find/OrderByArgs.mjs +29 -0
  192. package/model/Executer/Find/OrderByArgs.mjs.map +1 -0
  193. package/model/Executer/Find/SelectArgs.js +119 -0
  194. package/model/Executer/Find/SelectArgs.js.map +1 -0
  195. package/model/Executer/Find/SelectArgs.mjs +119 -0
  196. package/model/Executer/Find/SelectArgs.mjs.map +1 -0
  197. package/model/Executer/Find/index.js +338 -0
  198. package/model/Executer/Find/index.js.map +1 -0
  199. package/model/Executer/Find/index.mjs +338 -0
  200. package/model/Executer/Find/index.mjs.map +1 -0
  201. package/model/Executer/Update/UpdateDataArgs.js +124 -0
  202. package/model/Executer/Update/UpdateDataArgs.js.map +1 -0
  203. package/model/Executer/Update/UpdateDataArgs.mjs +124 -0
  204. package/model/Executer/Update/UpdateDataArgs.mjs.map +1 -0
  205. package/model/Executer/Update/index.js +207 -0
  206. package/model/Executer/Update/index.js.map +1 -0
  207. package/model/Executer/Update/index.mjs +207 -0
  208. package/model/Executer/Update/index.mjs.map +1 -0
  209. package/model/include/ValueFormatter.js +99 -0
  210. package/model/include/ValueFormatter.js.map +1 -0
  211. package/model/include/ValueFormatter.mjs +99 -0
  212. package/model/include/ValueFormatter.mjs.map +1 -0
  213. package/model/index.d.ts +29 -0
  214. package/model/index.js +236 -0
  215. package/model/index.js.map +1 -0
  216. package/model/index.mjs +236 -0
  217. package/model/index.mjs.map +1 -0
  218. package/model/type.d.ts +106 -0
  219. package/package.json +32 -0
  220. package/readme.md +359 -0
  221. package/utils/chunker.js +53 -0
  222. package/utils/chunker.js.map +1 -0
  223. package/utils/chunker.mjs +53 -0
  224. package/utils/chunker.mjs.map +1 -0
  225. package/utils/index.js +49 -0
  226. package/utils/index.js.map +1 -0
  227. package/utils/index.mjs +49 -0
  228. package/utils/index.mjs.map +1 -0
  229. package/utils/sha256.js +66 -0
  230. package/utils/sha256.js.map +1 -0
  231. package/utils/sha256.mjs +66 -0
  232. package/utils/sha256.mjs.map +1 -0
@@ -0,0 +1,236 @@
1
+ import XansqlError from'../core/XansqlError.mjs';import {XansqlResult}from'../core/XansqlResult.mjs';import RelationExecuteArgs from'./Args/RelationExcuteArgs.mjs';import ModelBase from'./Base.mjs';import AggregateExecuter from'./Executer/Aggregate/index.mjs';import CreateExecuter from'./Executer/Create/index.mjs';import DeleteExecuter from'./Executer/Delete/index.mjs';import FindExecuter from'./Executer/Find/index.mjs';import UpdateExecuter from'./Executer/Update/index.mjs';class Model extends ModelBase {
2
+ async create(args) {
3
+ const xansql = this.xansql;
4
+ const isRelArgs = args instanceof RelationExecuteArgs;
5
+ if (isRelArgs)
6
+ args = args.args;
7
+ try {
8
+ if (!isRelArgs)
9
+ await xansql.XansqlTransaction.begin();
10
+ args = await this.callHook("beforeCreate", args) || args;
11
+ // event emit BEFORE_CREATE
12
+ const executer = new CreateExecuter(this);
13
+ await xansql.EventManager.emit("BEFORE_CREATE", { model: this, args });
14
+ let results = await executer.execute(args);
15
+ await xansql.EventManager.emit("CREATE", { model: this, results, args });
16
+ results = await this.callHook("afterCreate", results, args) || results;
17
+ if (!isRelArgs)
18
+ await xansql.XansqlTransaction.commit();
19
+ return XansqlResult(results);
20
+ }
21
+ catch (error) {
22
+ if (!isRelArgs)
23
+ await xansql.XansqlTransaction.rollback();
24
+ const r = XansqlResult([]);
25
+ if (error instanceof Array && error[0] instanceof XansqlError) {
26
+ for (let err of error) {
27
+ r.setError(err.column, err.message);
28
+ }
29
+ }
30
+ else {
31
+ r.setError("create", error.message);
32
+ }
33
+ return r;
34
+ }
35
+ }
36
+ async update(args) {
37
+ const xansql = this.xansql;
38
+ const isRelArgs = args instanceof RelationExecuteArgs;
39
+ if (isRelArgs)
40
+ args = args.args;
41
+ try {
42
+ if (!isRelArgs)
43
+ await xansql.XansqlTransaction.begin();
44
+ args = await this.callHook("beforeUpdate", args) || args;
45
+ const executer = new UpdateExecuter(this);
46
+ await xansql.EventManager.emit("BEFORE_UPDATE", { model: this, args });
47
+ let result = await executer.execute(args);
48
+ await xansql.EventManager.emit("UPDATE", { model: this, results: result, args });
49
+ result = await this.callHook("afterUpdate", result, args) || result;
50
+ if (!isRelArgs)
51
+ await xansql.XansqlTransaction.commit();
52
+ return XansqlResult(result);
53
+ }
54
+ catch (error) {
55
+ if (!isRelArgs)
56
+ await xansql.XansqlTransaction.rollback();
57
+ const r = XansqlResult([]);
58
+ if (error instanceof Array && error[0] instanceof XansqlError) {
59
+ for (let err of error) {
60
+ r.setError(err.column, err.message);
61
+ }
62
+ }
63
+ else {
64
+ r.setError("create", error.message);
65
+ }
66
+ return r;
67
+ }
68
+ }
69
+ async delete(args) {
70
+ const xansql = this.xansql;
71
+ const isRelArgs = args instanceof RelationExecuteArgs;
72
+ if (isRelArgs)
73
+ args = args.args;
74
+ try {
75
+ if (!isRelArgs)
76
+ await xansql.XansqlTransaction.begin();
77
+ args = await this.callHook("beforeDelete", args) || args;
78
+ const executer = new DeleteExecuter(this);
79
+ await xansql.EventManager.emit("BEFORE_DELETE", { model: this, args });
80
+ let result = await executer.execute(args);
81
+ await xansql.EventManager.emit("DELETE", { model: this, results: result, args });
82
+ result = await this.callHook("afterDelete", result, args) || result;
83
+ if (!isRelArgs)
84
+ await xansql.XansqlTransaction.commit();
85
+ return XansqlResult(result);
86
+ }
87
+ catch (error) {
88
+ if (!isRelArgs)
89
+ await xansql.XansqlTransaction.rollback();
90
+ const r = XansqlResult([]);
91
+ r.setError("delete", error.message);
92
+ return r;
93
+ }
94
+ }
95
+ async find(args) {
96
+ const isRelArgs = args instanceof RelationExecuteArgs;
97
+ if (isRelArgs)
98
+ args = args.args;
99
+ try {
100
+ args = await this.callHook("beforeFind", args) || args;
101
+ const executer = new FindExecuter(this, async (row) => {
102
+ return await this.callHook('transform', row) || row;
103
+ });
104
+ await this.xansql.EventManager.emit("BEFORE_FIND", { model: this, args });
105
+ let result = await executer.execute(args);
106
+ await this.xansql.EventManager.emit("FIND", { model: this, results: result, args });
107
+ result = await this.callHook("afterFind", result, args) || result;
108
+ return XansqlResult(result);
109
+ }
110
+ catch (error) {
111
+ const r = XansqlResult([]);
112
+ r.setError("find", error.message);
113
+ return r;
114
+ }
115
+ }
116
+ async aggregate(args) {
117
+ const isRelArgs = args instanceof RelationExecuteArgs;
118
+ if (isRelArgs)
119
+ args = args.args;
120
+ try {
121
+ args = await this.callHook("beforeAggregate", args) || args;
122
+ const executer = new AggregateExecuter(this);
123
+ await this.xansql.EventManager.emit("BEFORE_AGGREGATE", { model: this, args });
124
+ let result = await executer.execute(args);
125
+ await this.xansql.EventManager.emit("AGGREGATE", { model: this, results: result, args });
126
+ result = await this.callHook("afterAggregate", result, args) || result;
127
+ return XansqlResult(result);
128
+ }
129
+ catch (error) {
130
+ const r = XansqlResult([]);
131
+ r.setError("aggregate", error.message);
132
+ return r;
133
+ }
134
+ }
135
+ async truncate() {
136
+ await this.xansql.execute(`TRUNCATE TABLE ${this.table}`);
137
+ }
138
+ async paginate(page, args) {
139
+ const perpage = (args === null || args === void 0 ? void 0 : args.perpage) || 20;
140
+ const skip = (page - 1) * perpage;
141
+ const results = await this.find(Object.assign(Object.assign({}, args), { limit: {
142
+ take: perpage,
143
+ skip
144
+ } }));
145
+ const total = await this.count((args === null || args === void 0 ? void 0 : args.where) || {});
146
+ return {
147
+ page,
148
+ perpage,
149
+ pagecount: Math.ceil(total / perpage),
150
+ rowcount: total,
151
+ results
152
+ };
153
+ }
154
+ async count(where) {
155
+ const res = await this.aggregate({
156
+ where,
157
+ select: {
158
+ [this.IDColumn]: {
159
+ count: true
160
+ }
161
+ }
162
+ });
163
+ return res.length ? res[0][`count_${this.IDColumn}`] : 0;
164
+ }
165
+ async min(column, where) {
166
+ if (!(column in this.schema)) {
167
+ throw new XansqlError({
168
+ message: `Column "${column}" does not exist in table "${this.table}"`,
169
+ model: this.table,
170
+ });
171
+ }
172
+ const res = await this.aggregate({
173
+ where,
174
+ select: {
175
+ [column]: {
176
+ min: true
177
+ }
178
+ }
179
+ });
180
+ return res.length ? res[0][`min_${column}`] : 0;
181
+ }
182
+ async max(column, where) {
183
+ if (!(column in this.schema)) {
184
+ throw new XansqlError({
185
+ message: `Column "${column}" does not exist in table "${this.table}"`,
186
+ model: this.table,
187
+ });
188
+ }
189
+ const res = await this.aggregate({
190
+ where,
191
+ select: {
192
+ [column]: {
193
+ max: true
194
+ }
195
+ }
196
+ });
197
+ return res.length ? res[0][`max_${column}`] : 0;
198
+ }
199
+ async sum(column, where) {
200
+ if (!(column in this.schema)) {
201
+ throw new XansqlError({
202
+ message: `Column "${column}" does not exist in table "${this.table}"`,
203
+ model: this.table,
204
+ });
205
+ }
206
+ const res = await this.aggregate({
207
+ where,
208
+ select: {
209
+ [column]: {
210
+ sum: true
211
+ }
212
+ }
213
+ });
214
+ return res.length ? res[0][`sum_${column}`] : 0;
215
+ }
216
+ async avg(column, where) {
217
+ if (!(column in this.schema)) {
218
+ throw new XansqlError({
219
+ message: `Column "${column}" does not exist in table "${this.table}"`,
220
+ model: this.table,
221
+ });
222
+ }
223
+ const res = await this.aggregate({
224
+ where,
225
+ select: {
226
+ [column]: {
227
+ avg: true
228
+ }
229
+ }
230
+ });
231
+ return res.length ? res[0][`avg_${column}`] : 0;
232
+ }
233
+ async exists(where) {
234
+ return !!(await this.count({ where }));
235
+ }
236
+ }export{Model as default};//# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../src/model/index.ts"],"sourcesContent":["import XansqlError from \"../core/XansqlError\";\nimport { XansqlResult, XansqlResultArray } from \"../core/XansqlResult\";\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 \"./type\";\n\nclass Model extends ModelBase {\n\n async create(args: CreateArgsType): Promise<XansqlResultArray<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 XansqlResult(results)\n } catch (error: any) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n const r = XansqlResult([])\n if (error instanceof Array && error[0] instanceof XansqlError) {\n for (let err of error) {\n r.setError(err.column, err.message);\n }\n } else {\n r.setError(\"create\", error.message);\n }\n return r\n }\n }\n\n async update(args: UpdateArgsType): Promise<XansqlResultArray<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 result: any = await executer.execute(args);\n await xansql.EventManager.emit(\"UPDATE\", { model: this, results: result, args });\n result = await this.callHook(\"afterUpdate\", result, args) || result\n\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return XansqlResult(result)\n } catch (error: any) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n const r = XansqlResult([])\n if (error instanceof Array && error[0] instanceof XansqlError) {\n for (let err of error) {\n r.setError(err.column, err.message);\n }\n } else {\n r.setError(\"create\", error.message);\n }\n return r\n }\n }\n\n async delete(args: DeleteArgsType): Promise<XansqlResultArray<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 result: any = await executer.execute(args);\n await xansql.EventManager.emit(\"DELETE\", { model: this, results: result, args });\n result = await this.callHook(\"afterDelete\", result, args) || result\n\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return XansqlResult(result)\n } catch (error) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n const r = XansqlResult([])\n r.setError(\"delete\", (error as Error).message);\n return r\n }\n }\n\n async find(args: FindArgsType): Promise<XansqlResultArray<any>> {\n const isRelArgs = args instanceof RelationExecuteArgs\n if (isRelArgs) args = (args as any).args\n\n try {\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 result = await executer.execute(args);\n await this.xansql.EventManager.emit(\"FIND\", { model: this, results: result, args });\n result = await this.callHook(\"afterFind\", result, args) || result\n return XansqlResult(result)\n } catch (error) {\n const r = XansqlResult([])\n r.setError(\"find\", (error as Error).message);\n return r\n }\n }\n\n async aggregate(args: AggregateArgsType): Promise<XansqlResultArray<any>> {\n const isRelArgs = args instanceof RelationExecuteArgs\n if (isRelArgs) args = (args as any).args\n try {\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 result = await executer.execute(args);\n await this.xansql.EventManager.emit(\"AGGREGATE\", { model: this, results: result, args });\n\n result = await this.callHook(\"afterAggregate\", result, args) || result\n return XansqlResult(result)\n } catch (error) {\n const r = XansqlResult([])\n r.setError(\"aggregate\", (error as Error).message);\n return r\n }\n }\n\n async truncate() {\n await this.xansql.execute(`TRUNCATE TABLE ${this.table}`);\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 // 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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"}
@@ -0,0 +1,106 @@
1
+ interface WhereSubCondition {
2
+ equals?: string | number | boolean;
3
+ not?: string | number | boolean;
4
+ lt?: string | number;
5
+ lte?: string | number;
6
+ gt?: string | number;
7
+ gte?: string | number;
8
+ in?: (string | number)[];
9
+ notIn?: (string | number)[];
10
+ between?: [string | number, string | number];
11
+ notBetween?: [string | number, string | number];
12
+ contains?: string;
13
+ notContains?: string;
14
+ startsWith?: string;
15
+ endsWith?: string;
16
+ isNull?: boolean;
17
+ isNotNull?: boolean;
18
+ isEmpty?: boolean;
19
+ isNotEmpty?: boolean;
20
+ isTrue?: boolean;
21
+ isFalse?: boolean;
22
+ }
23
+ type WhereArgsTypeValue = string | number | boolean | WhereSubCondition | null | Date | WhereArgsType;
24
+ type WhereArgsType = {
25
+ [column: string]: WhereArgsTypeValue | WhereArgsTypeValue[];
26
+ } | WhereArgsType[];
27
+ type LimitArgsType = "all" | {
28
+ take?: number;
29
+ skip?: number;
30
+ sql?: string;
31
+ };
32
+ type OrderByArgsType = {
33
+ [column: string]: "asc" | "desc";
34
+ };
35
+ type DataValue = string | number | boolean | Date | null | Map<any, any> | Set<any> | File | Record<string | number, any>;
36
+ type DataArgsType = {
37
+ [column: string]: DataValue | DataArgsType[] | DataArgsType;
38
+ };
39
+ type AggregateFunctions = "count" | "sum" | "avg" | "min" | "max";
40
+ type AggregateSelectArgsColumnType = {
41
+ [func in AggregateFunctions]?: boolean | {
42
+ alias?: string;
43
+ orderBy?: "asc" | "desc";
44
+ round?: number;
45
+ distinct?: boolean;
46
+ };
47
+ };
48
+ type AggregateSelectArgsType = {
49
+ [column: string]: AggregateSelectArgsColumnType | AggregateArgsType;
50
+ };
51
+ type AggregateArgsType = {
52
+ groupBy?: string[];
53
+ orderBy?: OrderByArgsType;
54
+ limit?: LimitArgsType;
55
+ where?: WhereArgsType;
56
+ select: AggregateSelectArgsType;
57
+ };
58
+ type FindArgsAggregate = {
59
+ [foreign: string]: AggregateSelectArgsType;
60
+ };
61
+ type DistinctArgsType = string[];
62
+ type SelectArgsType = {
63
+ [column: string]: boolean | FindArgsType;
64
+ };
65
+ type FindArgsType = {
66
+ distinct?: DistinctArgsType;
67
+ where?: WhereArgsType;
68
+ select?: SelectArgsType;
69
+ limit?: LimitArgsType;
70
+ orderBy?: OrderByArgsType;
71
+ aggregate?: FindArgsAggregate;
72
+ };
73
+ type CreateArgsType = {
74
+ data: DataArgsType | DataArgsType[];
75
+ select?: SelectArgsType;
76
+ };
77
+ type UpdateDataRelationArgs = {
78
+ create?: {
79
+ data: DataArgsType | DataArgsType[];
80
+ };
81
+ update?: {
82
+ data: DataArgsType;
83
+ where: WhereArgsType;
84
+ };
85
+ delete?: {
86
+ where: WhereArgsType;
87
+ };
88
+ upsert?: {
89
+ where: WhereArgsType;
90
+ create: DataArgsType;
91
+ update: DataArgsType;
92
+ };
93
+ };
94
+ type UpdateDataArgsType = {
95
+ [column: string]: DataValue | UpdateDataRelationArgs;
96
+ };
97
+ type UpdateArgsType = FindArgsType & {
98
+ data: UpdateDataArgsType;
99
+ where: WhereArgsType;
100
+ };
101
+ type DeleteArgsType = {
102
+ where: WhereArgsType;
103
+ select?: SelectArgsType;
104
+ };
105
+
106
+ export type { AggregateArgsType, AggregateFunctions, AggregateSelectArgsColumnType, AggregateSelectArgsType, CreateArgsType, DataArgsType, DataValue, DeleteArgsType, DistinctArgsType, FindArgsAggregate, FindArgsType, LimitArgsType, OrderByArgsType, SelectArgsType, UpdateArgsType, UpdateDataArgsType, UpdateDataRelationArgs, WhereArgsType, WhereArgsTypeValue, WhereSubCondition };
package/package.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "xansql",
3
+ "version": "1.0.0",
4
+ "main": "./index.js",
5
+ "module": "./index.js",
6
+ "types": "./index.d.ts",
7
+ "description": "",
8
+ "keywords": [],
9
+ "dependencies": {
10
+ "securequ": "^1.1.6",
11
+ "xanv": "^1.1.2"
12
+ },
13
+ "devDependencies": {
14
+ "@faker-js/faker": "^9.7.0",
15
+ "@types/better-sqlite3": "^7.6.13",
16
+ "@types/express": "^5.0.5",
17
+ "@types/pg": "^8.15.5",
18
+ "@types/react": "^19.0.2",
19
+ "@types/react-dom": "^19.0.2",
20
+ "better-sqlite3": "^12.4.1",
21
+ "dotenv": "^16.5.0",
22
+ "express": "^5.1.0",
23
+ "faker": "^6.6.6",
24
+ "makepack": "^1.7.15",
25
+ "mysql2": "^3.14.0",
26
+ "pg": "^8.16.3",
27
+ "react": "^19.1.0",
28
+ "react-dom": "^19.1.0",
29
+ "tslib": "^2.8.1",
30
+ "typescript": "^5.9.3"
31
+ }
32
+ }