hotstaq 0.5.24

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 (299) hide show
  1. package/.eslintignore +17 -0
  2. package/.eslintrc.js +11 -0
  3. package/.vscode/launch.json +199 -0
  4. package/.vscode/settings.json +2 -0
  5. package/.vscode/tasks.json +78 -0
  6. package/CONTRIBUTING.md +157 -0
  7. package/README.md +126 -0
  8. package/bin/hotstaq +3 -0
  9. package/bin/hotstaq.cmd +1 -0
  10. package/build/src/Hot.d.ts +167 -0
  11. package/build/src/Hot.d.ts.map +1 -0
  12. package/build/src/Hot.js +365 -0
  13. package/build/src/Hot.js.map +1 -0
  14. package/build/src/HotAPI.d.ts +130 -0
  15. package/build/src/HotAPI.d.ts.map +1 -0
  16. package/build/src/HotAPI.js +353 -0
  17. package/build/src/HotAPI.js.map +1 -0
  18. package/build/src/HotAgentAPI.d.ts +22 -0
  19. package/build/src/HotAgentAPI.d.ts.map +1 -0
  20. package/build/src/HotAgentAPI.js +85 -0
  21. package/build/src/HotAgentAPI.js.map +1 -0
  22. package/build/src/HotAgentRoute.d.ts +17 -0
  23. package/build/src/HotAgentRoute.d.ts.map +1 -0
  24. package/build/src/HotAgentRoute.js +109 -0
  25. package/build/src/HotAgentRoute.js.map +1 -0
  26. package/build/src/HotBuilder.d.ts +52 -0
  27. package/build/src/HotBuilder.d.ts.map +1 -0
  28. package/build/src/HotBuilder.js +239 -0
  29. package/build/src/HotBuilder.js.map +1 -0
  30. package/build/src/HotClient.d.ts +31 -0
  31. package/build/src/HotClient.d.ts.map +1 -0
  32. package/build/src/HotClient.js +19 -0
  33. package/build/src/HotClient.js.map +1 -0
  34. package/build/src/HotComponent.d.ts +118 -0
  35. package/build/src/HotComponent.d.ts.map +1 -0
  36. package/build/src/HotComponent.js +89 -0
  37. package/build/src/HotComponent.js.map +1 -0
  38. package/build/src/HotCreator.d.ts +92 -0
  39. package/build/src/HotCreator.d.ts.map +1 -0
  40. package/build/src/HotCreator.js +465 -0
  41. package/build/src/HotCreator.js.map +1 -0
  42. package/build/src/HotDB.d.ts +69 -0
  43. package/build/src/HotDB.d.ts.map +1 -0
  44. package/build/src/HotDB.js +29 -0
  45. package/build/src/HotDB.js.map +1 -0
  46. package/build/src/HotDBConnectionInterface.d.ts +40 -0
  47. package/build/src/HotDBConnectionInterface.d.ts.map +1 -0
  48. package/build/src/HotDBConnectionInterface.js +3 -0
  49. package/build/src/HotDBConnectionInterface.js.map +1 -0
  50. package/build/src/HotFile.d.ts +134 -0
  51. package/build/src/HotFile.d.ts.map +1 -0
  52. package/build/src/HotFile.js +454 -0
  53. package/build/src/HotFile.js.map +1 -0
  54. package/build/src/HotHTTPServer.d.ts +162 -0
  55. package/build/src/HotHTTPServer.d.ts.map +1 -0
  56. package/build/src/HotHTTPServer.js +863 -0
  57. package/build/src/HotHTTPServer.js.map +1 -0
  58. package/build/src/HotIO.d.ts +39 -0
  59. package/build/src/HotIO.d.ts.map +1 -0
  60. package/build/src/HotIO.js +195 -0
  61. package/build/src/HotIO.js.map +1 -0
  62. package/build/src/HotLog.d.ts +60 -0
  63. package/build/src/HotLog.d.ts.map +1 -0
  64. package/build/src/HotLog.js +126 -0
  65. package/build/src/HotLog.js.map +1 -0
  66. package/build/src/HotPage.d.ts +125 -0
  67. package/build/src/HotPage.d.ts.map +1 -0
  68. package/build/src/HotPage.js +178 -0
  69. package/build/src/HotPage.js.map +1 -0
  70. package/build/src/HotRoute.d.ts +82 -0
  71. package/build/src/HotRoute.d.ts.map +1 -0
  72. package/build/src/HotRoute.js +83 -0
  73. package/build/src/HotRoute.js.map +1 -0
  74. package/build/src/HotRouteMethod.d.ts +129 -0
  75. package/build/src/HotRouteMethod.d.ts.map +1 -0
  76. package/build/src/HotRouteMethod.js +84 -0
  77. package/build/src/HotRouteMethod.js.map +1 -0
  78. package/build/src/HotServer.d.ts +152 -0
  79. package/build/src/HotServer.d.ts.map +1 -0
  80. package/build/src/HotServer.js +109 -0
  81. package/build/src/HotServer.js.map +1 -0
  82. package/build/src/HotSetAsWeb.d.ts +2 -0
  83. package/build/src/HotSetAsWeb.d.ts.map +1 -0
  84. package/build/src/HotSetAsWeb.js +5 -0
  85. package/build/src/HotSetAsWeb.js.map +1 -0
  86. package/build/src/HotStaq.d.ts +601 -0
  87. package/build/src/HotStaq.d.ts.map +1 -0
  88. package/build/src/HotStaq.js +1258 -0
  89. package/build/src/HotStaq.js.map +1 -0
  90. package/build/src/HotStaqWeb.d.ts +18 -0
  91. package/build/src/HotStaqWeb.d.ts.map +1 -0
  92. package/build/src/HotStaqWeb.js +44 -0
  93. package/build/src/HotStaqWeb.js.map +1 -0
  94. package/build/src/HotTestDriver.d.ts +63 -0
  95. package/build/src/HotTestDriver.d.ts.map +1 -0
  96. package/build/src/HotTestDriver.js +187 -0
  97. package/build/src/HotTestDriver.js.map +1 -0
  98. package/build/src/HotTestElement.d.ts +71 -0
  99. package/build/src/HotTestElement.d.ts.map +1 -0
  100. package/build/src/HotTestElement.js +37 -0
  101. package/build/src/HotTestElement.js.map +1 -0
  102. package/build/src/HotTestMap.d.ts +83 -0
  103. package/build/src/HotTestMap.d.ts.map +1 -0
  104. package/build/src/HotTestMap.js +58 -0
  105. package/build/src/HotTestMap.js.map +1 -0
  106. package/build/src/HotTestSeleniumDriver.d.ts +82 -0
  107. package/build/src/HotTestSeleniumDriver.d.ts.map +1 -0
  108. package/build/src/HotTestSeleniumDriver.js +398 -0
  109. package/build/src/HotTestSeleniumDriver.js.map +1 -0
  110. package/build/src/HotTester.d.ts +188 -0
  111. package/build/src/HotTester.d.ts.map +1 -0
  112. package/build/src/HotTester.js +623 -0
  113. package/build/src/HotTester.js.map +1 -0
  114. package/build/src/HotTesterAPI.d.ts +15 -0
  115. package/build/src/HotTesterAPI.d.ts.map +1 -0
  116. package/build/src/HotTesterAPI.js +161 -0
  117. package/build/src/HotTesterAPI.js.map +1 -0
  118. package/build/src/HotTesterMocha.d.ts +50 -0
  119. package/build/src/HotTesterMocha.d.ts.map +1 -0
  120. package/build/src/HotTesterMocha.js +205 -0
  121. package/build/src/HotTesterMocha.js.map +1 -0
  122. package/build/src/HotTesterMochaSelenium.d.ts +70 -0
  123. package/build/src/HotTesterMochaSelenium.d.ts.map +1 -0
  124. package/build/src/HotTesterMochaSelenium.js +257 -0
  125. package/build/src/HotTesterMochaSelenium.js.map +1 -0
  126. package/build/src/HotTesterServer.d.ts +114 -0
  127. package/build/src/HotTesterServer.d.ts.map +1 -0
  128. package/build/src/HotTesterServer.js +575 -0
  129. package/build/src/HotTesterServer.js.map +1 -0
  130. package/build/src/api.d.ts +33 -0
  131. package/build/src/api.d.ts.map +1 -0
  132. package/build/src/api.js +78 -0
  133. package/build/src/api.js.map +1 -0
  134. package/build/src/cli.d.ts +2 -0
  135. package/build/src/cli.d.ts.map +1 -0
  136. package/build/src/cli.js +935 -0
  137. package/build/src/cli.js.map +1 -0
  138. package/build/src/schemas/HotDBInflux.d.ts +63 -0
  139. package/build/src/schemas/HotDBInflux.d.ts.map +1 -0
  140. package/build/src/schemas/HotDBInflux.js +239 -0
  141. package/build/src/schemas/HotDBInflux.js.map +1 -0
  142. package/build/src/schemas/HotDBMigration.d.ts +19 -0
  143. package/build/src/schemas/HotDBMigration.d.ts.map +1 -0
  144. package/build/src/schemas/HotDBMigration.js +15 -0
  145. package/build/src/schemas/HotDBMigration.js.map +1 -0
  146. package/build/src/schemas/HotDBMySQL.d.ts +65 -0
  147. package/build/src/schemas/HotDBMySQL.d.ts.map +1 -0
  148. package/build/src/schemas/HotDBMySQL.js +387 -0
  149. package/build/src/schemas/HotDBMySQL.js.map +1 -0
  150. package/build/src/schemas/HotDBSchema.d.ts +15 -0
  151. package/build/src/schemas/HotDBSchema.d.ts.map +1 -0
  152. package/build/src/schemas/HotDBSchema.js +19 -0
  153. package/build/src/schemas/HotDBSchema.js.map +1 -0
  154. package/build/src/schemas/influx/InfluxSchema.d.ts +14 -0
  155. package/build/src/schemas/influx/InfluxSchema.d.ts.map +1 -0
  156. package/build/src/schemas/influx/InfluxSchema.js +33 -0
  157. package/build/src/schemas/influx/InfluxSchema.js.map +1 -0
  158. package/build/src/schemas/mysql/MySQLSchema.d.ts +39 -0
  159. package/build/src/schemas/mysql/MySQLSchema.d.ts.map +1 -0
  160. package/build/src/schemas/mysql/MySQLSchema.js +151 -0
  161. package/build/src/schemas/mysql/MySQLSchema.js.map +1 -0
  162. package/build/src/schemas/mysql/MySQLSchemaField.d.ts +168 -0
  163. package/build/src/schemas/mysql/MySQLSchemaField.d.ts.map +1 -0
  164. package/build/src/schemas/mysql/MySQLSchemaField.js +260 -0
  165. package/build/src/schemas/mysql/MySQLSchemaField.js.map +1 -0
  166. package/build/src/schemas/mysql/MySQLSchemaTable.d.ts +49 -0
  167. package/build/src/schemas/mysql/MySQLSchemaTable.d.ts.map +1 -0
  168. package/build/src/schemas/mysql/MySQLSchemaTable.js +310 -0
  169. package/build/src/schemas/mysql/MySQLSchemaTable.js.map +1 -0
  170. package/build-web/HotStaq.js +2 -0
  171. package/build-web/HotStaq.min.js +125 -0
  172. package/builder/docker/Dockerfile.linux.gen +42 -0
  173. package/builder/docker/README.md +36 -0
  174. package/builder/docker/app/start.sh +8 -0
  175. package/builder/docker/dockerignore +3 -0
  176. package/builder/docker/scripts/build.bat +11 -0
  177. package/builder/docker/scripts/build.sh +11 -0
  178. package/builder/docker/scripts/start-app.bat +7 -0
  179. package/builder/docker/scripts/start-app.sh +7 -0
  180. package/builder/docker/scripts/stop-app.bat +5 -0
  181. package/builder/docker/scripts/stop-app.sh +5 -0
  182. package/builder/docker-compose/docker-compose.gen.yaml +41 -0
  183. package/builder/docker-compose/env-skeleton +4 -0
  184. package/creator/project/.vscode/launch.json +59 -0
  185. package/creator/project/README.md +20 -0
  186. package/creator/project/gitignore +118 -0
  187. package/creator/project/npmignore +118 -0
  188. package/creator/public/api-test.hott +28 -0
  189. package/creator/public/index.hott +12 -0
  190. package/creator/ts/src/AppAPI.ts +30 -0
  191. package/creator/ts/src/HelloWorld.ts +39 -0
  192. package/creator/ts/src/WebExport.ts +7 -0
  193. package/creator/ts/tsconfig-web.json +73 -0
  194. package/creator/ts/tsconfig.json +73 -0
  195. package/creator/ts/webpack-api.config.js +57 -0
  196. package/dbstart.sh +19 -0
  197. package/dbstop.sh +4 -0
  198. package/docs/.nojekyll +1 -0
  199. package/docs/README.md +128 -0
  200. package/docs/classes/Hot.md +477 -0
  201. package/docs/classes/HotAPI.md +369 -0
  202. package/docs/classes/HotClient.md +95 -0
  203. package/docs/classes/HotComponent.md +279 -0
  204. package/docs/classes/HotDB.md +247 -0
  205. package/docs/classes/HotDBInflux.md +404 -0
  206. package/docs/classes/HotDBMigration.md +80 -0
  207. package/docs/classes/HotDBMySQL.md +310 -0
  208. package/docs/classes/HotDBSchema.md +51 -0
  209. package/docs/classes/HotFile.md +353 -0
  210. package/docs/classes/HotHTTPServer.md +700 -0
  211. package/docs/classes/HotLog.md +162 -0
  212. package/docs/classes/HotPage.md +357 -0
  213. package/docs/classes/HotRoute.md +312 -0
  214. package/docs/classes/HotRouteMethod.md +271 -0
  215. package/docs/classes/HotServer.md +311 -0
  216. package/docs/classes/HotStaq.md +1153 -0
  217. package/docs/classes/HotTestDestination.md +58 -0
  218. package/docs/classes/HotTestDriver.md +332 -0
  219. package/docs/classes/HotTestElement.md +88 -0
  220. package/docs/classes/HotTestElementOptions.md +71 -0
  221. package/docs/classes/HotTestMap.md +92 -0
  222. package/docs/classes/HotTestSeleniumDriver.md +529 -0
  223. package/docs/classes/HotTester.md +653 -0
  224. package/docs/classes/HotTesterAPI.md +493 -0
  225. package/docs/classes/HotTesterMocha.md +843 -0
  226. package/docs/classes/HotTesterMochaSelenium.md +896 -0
  227. package/docs/classes/HotTesterServer.md +633 -0
  228. package/docs/classes/InfluxSchema.md +74 -0
  229. package/docs/classes/MySQLSchema.md +199 -0
  230. package/docs/classes/MySQLSchemaField.md +330 -0
  231. package/docs/classes/MySQLSchemaTable.md +176 -0
  232. package/docs/enums/ConnectionStatus.md +43 -0
  233. package/docs/enums/DeveloperMode.md +38 -0
  234. package/docs/enums/EventExecutionType.md +43 -0
  235. package/docs/enums/HTTPMethod.md +32 -0
  236. package/docs/enums/HotDBGenerationType.md +30 -0
  237. package/docs/enums/HotLogLevel.md +88 -0
  238. package/docs/interfaces/HotDBConnectionInterface.md +116 -0
  239. package/docs/interfaces/HotDestination.md +62 -0
  240. package/docs/interfaces/HotSite.md +187 -0
  241. package/docs/interfaces/HotSiteMapPath.md +37 -0
  242. package/docs/interfaces/HotSiteRoute.md +79 -0
  243. package/docs/interfaces/HotStartOptions.md +115 -0
  244. package/docs/interfaces/HotTestPage.md +44 -0
  245. package/docs/interfaces/HotTestStop.md +62 -0
  246. package/docs/interfaces/IHotComponent.md +135 -0
  247. package/docs/interfaces/IHotStaq.md +118 -0
  248. package/docs/interfaces/IHotTestElement.md +54 -0
  249. package/docs/interfaces/IHotTestElementOptions.md +43 -0
  250. package/docs/interfaces/MySQLResults.md +43 -0
  251. package/docs/interfaces/MySQLSchemaFieldResult.md +75 -0
  252. package/docs/modules.md +162 -0
  253. package/package.json +65 -0
  254. package/selenium-start.sh +7 -0
  255. package/selenium-stop.sh +3 -0
  256. package/src/Hot.ts +319 -0
  257. package/src/HotAPI.ts +378 -0
  258. package/src/HotAgentAPI.ts +43 -0
  259. package/src/HotAgentRoute.ts +44 -0
  260. package/src/HotBuilder.ts +221 -0
  261. package/src/HotClient.ts +40 -0
  262. package/src/HotComponent.ts +158 -0
  263. package/src/HotCreator.ts +482 -0
  264. package/src/HotDB.ts +79 -0
  265. package/src/HotDBConnectionInterface.ts +40 -0
  266. package/src/HotFile.ts +617 -0
  267. package/src/HotHTTPServer.ts +954 -0
  268. package/src/HotIO.ts +128 -0
  269. package/src/HotLog.ts +158 -0
  270. package/src/HotPage.ts +206 -0
  271. package/src/HotRoute.ts +137 -0
  272. package/src/HotRouteMethod.ts +216 -0
  273. package/src/HotServer.ts +211 -0
  274. package/src/HotSetAsWeb.ts +3 -0
  275. package/src/HotStaq.ts +1877 -0
  276. package/src/HotStaqWeb.ts +59 -0
  277. package/src/HotTestDriver.ts +172 -0
  278. package/src/HotTestElement.ts +97 -0
  279. package/src/HotTestMap.ts +130 -0
  280. package/src/HotTestSeleniumDriver.ts +374 -0
  281. package/src/HotTester.ts +697 -0
  282. package/src/HotTesterAPI.ts +126 -0
  283. package/src/HotTesterMocha.ts +133 -0
  284. package/src/HotTesterMochaSelenium.ts +189 -0
  285. package/src/HotTesterServer.ts +551 -0
  286. package/src/api.ts +102 -0
  287. package/src/cli.ts +1147 -0
  288. package/src/schemas/HotDBInflux.ts +211 -0
  289. package/src/schemas/HotDBMigration.ts +24 -0
  290. package/src/schemas/HotDBMySQL.ts +312 -0
  291. package/src/schemas/HotDBSchema.ts +21 -0
  292. package/src/schemas/influx/InfluxSchema.ts +19 -0
  293. package/src/schemas/mysql/MySQLSchema.ts +90 -0
  294. package/src/schemas/mysql/MySQLSchemaField.ts +408 -0
  295. package/src/schemas/mysql/MySQLSchemaTable.ts +353 -0
  296. package/tsconfig-web.json +74 -0
  297. package/tsconfig.json +73 -0
  298. package/webpack.config.js +51 -0
  299. package/webpack.config.tests.js +56 -0
@@ -0,0 +1,310 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.MySQLSchemaTable = void 0;
40
+ var MySQLSchemaField_1 = require("./MySQLSchemaField");
41
+ var HotDBSchema_1 = require("../HotDBSchema");
42
+ /**
43
+ * The database table.
44
+ */
45
+ var MySQLSchemaTable = /** @class */ (function () {
46
+ function MySQLSchemaTable(name, fields) {
47
+ if (name === void 0) { name = ""; }
48
+ if (fields === void 0) { fields = []; }
49
+ this.name = name;
50
+ this.description = "";
51
+ this.fields = fields;
52
+ this.engine = "InnoDB";
53
+ this.charset = "utf8";
54
+ }
55
+ /**
56
+ * Add a field.
57
+ */
58
+ MySQLSchemaTable.prototype.addField = function (field) {
59
+ this.fields.push(field);
60
+ };
61
+ /**
62
+ * Add a field.
63
+ */
64
+ MySQLSchemaTable.prototype.addFields = function (fields) {
65
+ for (var iIdx = 0; iIdx < this.fields.length; iIdx++) {
66
+ var field = this.fields[iIdx];
67
+ this.fields.push(field);
68
+ }
69
+ };
70
+ /**
71
+ * Generate the db command. If type is set to modify, you must pass a db with an
72
+ * active connection. Since field parsing isn't completely implemented yet, not all
73
+ * fields will be modified correctly. Use modifiying with caution. This will
74
+ * skip checking for:
75
+ * * Binary columnexistingFields
76
+ * * unique
77
+ * * zero-filled
78
+ * * generated column
79
+ */
80
+ MySQLSchemaTable.prototype.generate = function (type, db) {
81
+ if (type === void 0) { type = HotDBSchema_1.HotDBGenerationType.Create; }
82
+ if (db === void 0) { db = null; }
83
+ return __awaiter(this, void 0, void 0, function () {
84
+ var output, primaryKeys, keys, result, iIdx, field, fieldResult, iIdx, primaryKey, iIdx, key, dbresult, existingFields, existingFieldsNames, thisFieldsNames, iIdx, thisField, iIdx, jsonField, dbfield, ignoreFields, iIdx, existingField, pos, tempAlter, result, iIdx, thisField, pos, generatedField, position, prevName, tempAlter, result, iIdx, existingField, pos, tempAlter, generatedField, position, result, checkKeysInFields, iIdx, existingField, existingFieldName, existingFieldDataType, newField, newFieldName, newFieldDataType, tempAlter, result;
85
+ return __generator(this, function (_a) {
86
+ switch (_a.label) {
87
+ case 0:
88
+ output = [];
89
+ if (!(type === HotDBSchema_1.HotDBGenerationType.Create)) return [3 /*break*/, 5];
90
+ primaryKeys = [];
91
+ keys = [];
92
+ result = "CREATE TABLE IF NOT EXISTS ".concat(this.name, " (\n");
93
+ iIdx = 0;
94
+ _a.label = 1;
95
+ case 1:
96
+ if (!(iIdx < this.fields.length)) return [3 /*break*/, 4];
97
+ field = this.fields[iIdx];
98
+ return [4 /*yield*/, field.generate()];
99
+ case 2:
100
+ fieldResult = _a.sent();
101
+ if (fieldResult.primaryKey !== "")
102
+ primaryKeys.push(fieldResult.primaryKey);
103
+ if (fieldResult.key !== "")
104
+ keys.push(fieldResult.key);
105
+ result += "".concat(fieldResult.field, ",\n");
106
+ _a.label = 3;
107
+ case 3:
108
+ iIdx++;
109
+ return [3 /*break*/, 1];
110
+ case 4:
111
+ // Generate the primary keys.
112
+ if (primaryKeys.length > 0) {
113
+ result += "PRIMARY KEY (";
114
+ for (iIdx = 0; iIdx < primaryKeys.length; iIdx++) {
115
+ primaryKey = primaryKeys[iIdx];
116
+ result += "`".concat(primaryKey, "`,");
117
+ }
118
+ result = result.substr(0, (result.length - 1));
119
+ result += "),\n";
120
+ }
121
+ // Generate the keys.
122
+ if (keys.length > 0) {
123
+ for (iIdx = 0; iIdx < keys.length; iIdx++) {
124
+ key = keys[iIdx];
125
+ result += "".concat(key, ",\n");
126
+ }
127
+ }
128
+ result = result.substr(0, (result.length - 2));
129
+ result += ") ENGINE=".concat(this.engine, " DEFAULT CHARSET=").concat(this.charset, ";\n\n");
130
+ output.push(result);
131
+ _a.label = 5;
132
+ case 5:
133
+ if (!(type === HotDBSchema_1.HotDBGenerationType.Modify)) return [3 /*break*/, 15];
134
+ if (db == null)
135
+ throw new Error("Cannot modify a database structure when db is null.");
136
+ return [4 /*yield*/, db.query("describe ".concat(this.name, ";"))];
137
+ case 6:
138
+ dbresult = _a.sent();
139
+ existingFields = [];
140
+ existingFieldsNames = [];
141
+ thisFieldsNames = [];
142
+ if (dbresult.error != null)
143
+ throw new Error("Error while modifying structure ".concat(this.name, ", error: ").concat(dbresult.error));
144
+ // Get this fields names.
145
+ for (iIdx = 0; iIdx < this.fields.length; iIdx++) {
146
+ thisField = this.fields[iIdx];
147
+ thisFieldsNames.push(thisField.name);
148
+ }
149
+ // Get the fields.
150
+ for (iIdx = 0; iIdx < dbresult.results.length; iIdx++) {
151
+ jsonField = dbresult.results[iIdx];
152
+ dbfield = MySQLSchemaField_1.MySQLSchemaField.parse(jsonField);
153
+ existingFieldsNames.push(dbfield.name);
154
+ existingFields.push(dbfield);
155
+ }
156
+ ignoreFields = [];
157
+ // Delete any fields missing from this.fields
158
+ for (iIdx = 0; iIdx < existingFields.length; iIdx++) {
159
+ existingField = existingFields[iIdx];
160
+ pos = thisFieldsNames.indexOf(existingField.name);
161
+ if (pos < 0) {
162
+ tempAlter = "ALTER TABLE ".concat(this.name, " DROP COLUMN `").concat(existingField.name, "`;");
163
+ ignoreFields.push(existingField.name);
164
+ result = tempAlter;
165
+ output.push(result);
166
+ }
167
+ }
168
+ iIdx = 0;
169
+ _a.label = 7;
170
+ case 7:
171
+ if (!(iIdx < this.fields.length)) return [3 /*break*/, 10];
172
+ thisField = this.fields[iIdx];
173
+ pos = existingFieldsNames.indexOf(thisField.name);
174
+ if (!(pos < 0)) return [3 /*break*/, 9];
175
+ return [4 /*yield*/, thisField.generate()];
176
+ case 8:
177
+ generatedField = _a.sent();
178
+ position = "";
179
+ if (iIdx === 0)
180
+ position = "FIRST";
181
+ else {
182
+ prevName = existingFieldsNames[(iIdx - 1)];
183
+ if (prevName == null) {
184
+ // Is this correct? Since the previous name doesn't exist. Then
185
+ // the previous name must be the previous this.fields name?
186
+ // Basically the previous newly added field name?
187
+ if (this.fields[(iIdx - 1)] != null)
188
+ prevName = this.fields[(iIdx - 1)].name;
189
+ else {
190
+ /// @fixme Gotta fix this someday...
191
+ debugger;
192
+ }
193
+ }
194
+ position = "AFTER `".concat(prevName, "`");
195
+ }
196
+ tempAlter = "ALTER TABLE ".concat(this.name, " ADD COLUMN ").concat(generatedField.field, " ").concat(position, ";");
197
+ ignoreFields.push(thisField.name);
198
+ result = tempAlter;
199
+ output.push(result);
200
+ _a.label = 9;
201
+ case 9:
202
+ iIdx++;
203
+ return [3 /*break*/, 7];
204
+ case 10:
205
+ iIdx = 0;
206
+ _a.label = 11;
207
+ case 11:
208
+ if (!(iIdx < existingFields.length)) return [3 /*break*/, 14];
209
+ existingField = existingFields[iIdx];
210
+ pos = thisFieldsNames.indexOf(existingField.name);
211
+ // This field has been added/deleted, ignore it.
212
+ if (ignoreFields.indexOf(existingField.name) > -1)
213
+ return [3 /*break*/, 13];
214
+ if (!(pos > -1)) return [3 /*break*/, 13];
215
+ if (!(iIdx !== pos)) return [3 /*break*/, 13];
216
+ tempAlter = "ALTER TABLE ".concat(this.name, " CHANGE COLUMN `").concat(existingField.name, "` `").concat(existingField.name, "` ");
217
+ return [4 /*yield*/, existingField.generate()];
218
+ case 12:
219
+ generatedField = _a.sent();
220
+ position = "";
221
+ if (pos === 0)
222
+ position = "FIRST";
223
+ else
224
+ position = "AFTER `".concat(existingFields[iIdx].name, "`");
225
+ tempAlter += "".concat(generatedField.field, " ").concat(position, ";\n");
226
+ result = tempAlter;
227
+ output.push(result);
228
+ _a.label = 13;
229
+ case 13:
230
+ iIdx++;
231
+ return [3 /*break*/, 11];
232
+ case 14:
233
+ checkKeysInFields = ["name", "dataType", "primaryKey", "notNull",
234
+ "unsignedDataType", "autoIncrement", "defaultValue"];
235
+ /**
236
+ * Check for any differences between the two tables.
237
+ * Since MySQLSchemaField.parse is missing some fields, this will
238
+ * skip checking for:
239
+ * * Binary column
240
+ * * unique
241
+ * * zero-filled
242
+ * * generated column
243
+ */
244
+ for (iIdx = 0; iIdx < existingFields.length; iIdx++) {
245
+ existingField = existingFields[iIdx];
246
+ existingFieldName = existingField.name.toLowerCase();
247
+ existingFieldDataType = existingField.dataType.toLowerCase();
248
+ // This field has been added/deleted, ignore it.
249
+ if (ignoreFields.indexOf(existingField.name) > -1)
250
+ continue;
251
+ if (this.fields[iIdx] != null) {
252
+ newField = this.fields[iIdx];
253
+ newFieldName = newField.name.toLowerCase();
254
+ newFieldDataType = newField.dataType.toLowerCase();
255
+ // Check to see if both are exactly the same. If they are, skip.
256
+ if (MySQLSchemaField_1.MySQLSchemaField.compare(existingField, newField, checkKeysInFields) === true)
257
+ continue;
258
+ tempAlter = "ALTER TABLE ".concat(this.name, " CHANGE COLUMN `").concat(existingField.name, "` ");
259
+ if (newFieldName !== existingFieldName)
260
+ tempAlter += "`".concat(newField.name, "` ");
261
+ else
262
+ tempAlter += "`".concat(existingField.name, "` ");
263
+ if (newField.autoIncrement === true)
264
+ tempAlter += "AUTO_INCREMENT ";
265
+ if (newFieldDataType !== existingFieldDataType)
266
+ tempAlter += "`".concat(newField.dataType, "` ");
267
+ else
268
+ tempAlter += "`".concat(existingField.dataType, "` ");
269
+ if (newField.unsignedDataType === true)
270
+ tempAlter += "UNSIGNED ";
271
+ if (newField.notNull === true)
272
+ tempAlter += "NOT NULL ";
273
+ else
274
+ tempAlter += "NULL ";
275
+ if (newField.defaultValue !== existingField.defaultValue)
276
+ tempAlter += "DEFAULT ".concat(newField.defaultValue, " ");
277
+ if (newField.primaryKey !== existingField.primaryKey) {
278
+ tempAlter += "\n";
279
+ if (existingField.primaryKey === true) {
280
+ if (newField.primaryKey === true) {
281
+ // Do nothing.
282
+ }
283
+ else {
284
+ tempAlter += "DROP PRIMARY KEY ";
285
+ }
286
+ }
287
+ else {
288
+ if (newField.primaryKey === true) {
289
+ tempAlter += "ADD PRIMARY KEY (`".concat(newField.name, "`)");
290
+ }
291
+ else {
292
+ // Do nothing.
293
+ }
294
+ }
295
+ }
296
+ tempAlter += ';\n';
297
+ result = tempAlter;
298
+ output.push(result);
299
+ }
300
+ }
301
+ _a.label = 15;
302
+ case 15: return [2 /*return*/, (output)];
303
+ }
304
+ });
305
+ });
306
+ };
307
+ return MySQLSchemaTable;
308
+ }());
309
+ exports.MySQLSchemaTable = MySQLSchemaTable;
310
+ //# sourceMappingURL=MySQLSchemaTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MySQLSchemaTable.js","sourceRoot":"","sources":["../../../../src/schemas/mysql/MySQLSchemaTable.ts"],"names":[],"mappings":"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"}