hotstaq 0.5.3

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 (318) hide show
  1. package/.dockerignore +123 -0
  2. package/.eslintignore +17 -0
  3. package/.eslintrc.js +11 -0
  4. package/.vscode/launch.json +201 -0
  5. package/.vscode/settings.json +2 -0
  6. package/.vscode/tasks.json +88 -0
  7. package/CONTRIBUTING.md +157 -0
  8. package/LICENSE +21 -0
  9. package/README.md +128 -0
  10. package/bin/hotstaq +3 -0
  11. package/bin/hotstaq.cmd +1 -0
  12. package/build/src/Hot.d.ts +167 -0
  13. package/build/src/Hot.d.ts.map +1 -0
  14. package/build/src/Hot.js +365 -0
  15. package/build/src/Hot.js.map +1 -0
  16. package/build/src/HotAPI.d.ts +137 -0
  17. package/build/src/HotAPI.d.ts.map +1 -0
  18. package/build/src/HotAPI.js +353 -0
  19. package/build/src/HotAPI.js.map +1 -0
  20. package/build/src/HotAgentAPI.d.ts +22 -0
  21. package/build/src/HotAgentAPI.d.ts.map +1 -0
  22. package/build/src/HotAgentAPI.js +85 -0
  23. package/build/src/HotAgentAPI.js.map +1 -0
  24. package/build/src/HotAgentRoute.d.ts +17 -0
  25. package/build/src/HotAgentRoute.d.ts.map +1 -0
  26. package/build/src/HotAgentRoute.js +109 -0
  27. package/build/src/HotAgentRoute.js.map +1 -0
  28. package/build/src/HotBuilder.d.ts +52 -0
  29. package/build/src/HotBuilder.d.ts.map +1 -0
  30. package/build/src/HotBuilder.js +242 -0
  31. package/build/src/HotBuilder.js.map +1 -0
  32. package/build/src/HotClient.d.ts +31 -0
  33. package/build/src/HotClient.d.ts.map +1 -0
  34. package/build/src/HotClient.js +19 -0
  35. package/build/src/HotClient.js.map +1 -0
  36. package/build/src/HotComponent.d.ts +118 -0
  37. package/build/src/HotComponent.d.ts.map +1 -0
  38. package/build/src/HotComponent.js +89 -0
  39. package/build/src/HotComponent.js.map +1 -0
  40. package/build/src/HotCreator.d.ts +88 -0
  41. package/build/src/HotCreator.d.ts.map +1 -0
  42. package/build/src/HotCreator.js +445 -0
  43. package/build/src/HotCreator.js.map +1 -0
  44. package/build/src/HotDB.d.ts +69 -0
  45. package/build/src/HotDB.d.ts.map +1 -0
  46. package/build/src/HotDB.js +29 -0
  47. package/build/src/HotDB.js.map +1 -0
  48. package/build/src/HotDBConnectionInterface.d.ts +40 -0
  49. package/build/src/HotDBConnectionInterface.d.ts.map +1 -0
  50. package/build/src/HotDBConnectionInterface.js +3 -0
  51. package/build/src/HotDBConnectionInterface.js.map +1 -0
  52. package/build/src/HotFile.d.ts +134 -0
  53. package/build/src/HotFile.d.ts.map +1 -0
  54. package/build/src/HotFile.js +454 -0
  55. package/build/src/HotFile.js.map +1 -0
  56. package/build/src/HotGenerator.d.ts +80 -0
  57. package/build/src/HotGenerator.d.ts.map +1 -0
  58. package/build/src/HotGenerator.js +342 -0
  59. package/build/src/HotGenerator.js.map +1 -0
  60. package/build/src/HotHTTPServer.d.ts +162 -0
  61. package/build/src/HotHTTPServer.d.ts.map +1 -0
  62. package/build/src/HotHTTPServer.js +863 -0
  63. package/build/src/HotHTTPServer.js.map +1 -0
  64. package/build/src/HotIO.d.ts +47 -0
  65. package/build/src/HotIO.d.ts.map +1 -0
  66. package/build/src/HotIO.js +232 -0
  67. package/build/src/HotIO.js.map +1 -0
  68. package/build/src/HotLog.d.ts +60 -0
  69. package/build/src/HotLog.d.ts.map +1 -0
  70. package/build/src/HotLog.js +126 -0
  71. package/build/src/HotLog.js.map +1 -0
  72. package/build/src/HotPage.d.ts +125 -0
  73. package/build/src/HotPage.d.ts.map +1 -0
  74. package/build/src/HotPage.js +178 -0
  75. package/build/src/HotPage.js.map +1 -0
  76. package/build/src/HotRoute.d.ts +82 -0
  77. package/build/src/HotRoute.d.ts.map +1 -0
  78. package/build/src/HotRoute.js +83 -0
  79. package/build/src/HotRoute.js.map +1 -0
  80. package/build/src/HotRouteMethod.d.ts +129 -0
  81. package/build/src/HotRouteMethod.d.ts.map +1 -0
  82. package/build/src/HotRouteMethod.js +84 -0
  83. package/build/src/HotRouteMethod.js.map +1 -0
  84. package/build/src/HotServer.d.ts +152 -0
  85. package/build/src/HotServer.d.ts.map +1 -0
  86. package/build/src/HotServer.js +109 -0
  87. package/build/src/HotServer.js.map +1 -0
  88. package/build/src/HotSetAsWeb.d.ts +2 -0
  89. package/build/src/HotSetAsWeb.d.ts.map +1 -0
  90. package/build/src/HotSetAsWeb.js +5 -0
  91. package/build/src/HotSetAsWeb.js.map +1 -0
  92. package/build/src/HotStaq.d.ts +603 -0
  93. package/build/src/HotStaq.d.ts.map +1 -0
  94. package/build/src/HotStaq.js +1260 -0
  95. package/build/src/HotStaq.js.map +1 -0
  96. package/build/src/HotStaqWeb.d.ts +18 -0
  97. package/build/src/HotStaqWeb.d.ts.map +1 -0
  98. package/build/src/HotStaqWeb.js +44 -0
  99. package/build/src/HotStaqWeb.js.map +1 -0
  100. package/build/src/HotTestDriver.d.ts +63 -0
  101. package/build/src/HotTestDriver.d.ts.map +1 -0
  102. package/build/src/HotTestDriver.js +187 -0
  103. package/build/src/HotTestDriver.js.map +1 -0
  104. package/build/src/HotTestElement.d.ts +71 -0
  105. package/build/src/HotTestElement.d.ts.map +1 -0
  106. package/build/src/HotTestElement.js +37 -0
  107. package/build/src/HotTestElement.js.map +1 -0
  108. package/build/src/HotTestMap.d.ts +83 -0
  109. package/build/src/HotTestMap.d.ts.map +1 -0
  110. package/build/src/HotTestMap.js +58 -0
  111. package/build/src/HotTestMap.js.map +1 -0
  112. package/build/src/HotTestSeleniumDriver.d.ts +86 -0
  113. package/build/src/HotTestSeleniumDriver.d.ts.map +1 -0
  114. package/build/src/HotTestSeleniumDriver.js +400 -0
  115. package/build/src/HotTestSeleniumDriver.js.map +1 -0
  116. package/build/src/HotTester.d.ts +188 -0
  117. package/build/src/HotTester.d.ts.map +1 -0
  118. package/build/src/HotTester.js +622 -0
  119. package/build/src/HotTester.js.map +1 -0
  120. package/build/src/HotTesterAPI.d.ts +15 -0
  121. package/build/src/HotTesterAPI.d.ts.map +1 -0
  122. package/build/src/HotTesterAPI.js +161 -0
  123. package/build/src/HotTesterAPI.js.map +1 -0
  124. package/build/src/HotTesterMocha.d.ts +50 -0
  125. package/build/src/HotTesterMocha.d.ts.map +1 -0
  126. package/build/src/HotTesterMocha.js +205 -0
  127. package/build/src/HotTesterMocha.js.map +1 -0
  128. package/build/src/HotTesterMochaSelenium.d.ts +70 -0
  129. package/build/src/HotTesterMochaSelenium.d.ts.map +1 -0
  130. package/build/src/HotTesterMochaSelenium.js +257 -0
  131. package/build/src/HotTesterMochaSelenium.js.map +1 -0
  132. package/build/src/HotTesterServer.d.ts +114 -0
  133. package/build/src/HotTesterServer.d.ts.map +1 -0
  134. package/build/src/HotTesterServer.js +575 -0
  135. package/build/src/HotTesterServer.js.map +1 -0
  136. package/build/src/api copy.d.ts +2 -0
  137. package/build/src/api copy.d.ts.map +1 -0
  138. package/build/src/api copy.js +153 -0
  139. package/build/src/api copy.js.map +1 -0
  140. package/build/src/api-web.d.ts +2 -0
  141. package/build/src/api-web.d.ts.map +1 -0
  142. package/build/src/api-web.js +45 -0
  143. package/build/src/api-web.js.map +1 -0
  144. package/build/src/api.d.ts +33 -0
  145. package/build/src/api.d.ts.map +1 -0
  146. package/build/src/api.js +78 -0
  147. package/build/src/api.js.map +1 -0
  148. package/build/src/cli.d.ts +2 -0
  149. package/build/src/cli.d.ts.map +1 -0
  150. package/build/src/cli.js +1040 -0
  151. package/build/src/cli.js.map +1 -0
  152. package/build/src/schemas/HotDBInflux.d.ts +63 -0
  153. package/build/src/schemas/HotDBInflux.d.ts.map +1 -0
  154. package/build/src/schemas/HotDBInflux.js +239 -0
  155. package/build/src/schemas/HotDBInflux.js.map +1 -0
  156. package/build/src/schemas/HotDBMigration.d.ts +19 -0
  157. package/build/src/schemas/HotDBMigration.d.ts.map +1 -0
  158. package/build/src/schemas/HotDBMigration.js +15 -0
  159. package/build/src/schemas/HotDBMigration.js.map +1 -0
  160. package/build/src/schemas/HotDBMySQL.d.ts +65 -0
  161. package/build/src/schemas/HotDBMySQL.d.ts.map +1 -0
  162. package/build/src/schemas/HotDBMySQL.js +387 -0
  163. package/build/src/schemas/HotDBMySQL.js.map +1 -0
  164. package/build/src/schemas/HotDBSchema.d.ts +15 -0
  165. package/build/src/schemas/HotDBSchema.d.ts.map +1 -0
  166. package/build/src/schemas/HotDBSchema.js +19 -0
  167. package/build/src/schemas/HotDBSchema.js.map +1 -0
  168. package/build/src/schemas/influx/InfluxSchema.d.ts +14 -0
  169. package/build/src/schemas/influx/InfluxSchema.d.ts.map +1 -0
  170. package/build/src/schemas/influx/InfluxSchema.js +33 -0
  171. package/build/src/schemas/influx/InfluxSchema.js.map +1 -0
  172. package/build/src/schemas/mysql/MySQLSchema.d.ts +39 -0
  173. package/build/src/schemas/mysql/MySQLSchema.d.ts.map +1 -0
  174. package/build/src/schemas/mysql/MySQLSchema.js +151 -0
  175. package/build/src/schemas/mysql/MySQLSchema.js.map +1 -0
  176. package/build/src/schemas/mysql/MySQLSchemaField.d.ts +168 -0
  177. package/build/src/schemas/mysql/MySQLSchemaField.d.ts.map +1 -0
  178. package/build/src/schemas/mysql/MySQLSchemaField.js +260 -0
  179. package/build/src/schemas/mysql/MySQLSchemaField.js.map +1 -0
  180. package/build/src/schemas/mysql/MySQLSchemaTable.d.ts +49 -0
  181. package/build/src/schemas/mysql/MySQLSchemaTable.d.ts.map +1 -0
  182. package/build/src/schemas/mysql/MySQLSchemaTable.js +310 -0
  183. package/build/src/schemas/mysql/MySQLSchemaTable.js.map +1 -0
  184. package/build-web/HotStaq.js +2 -0
  185. package/build-web/HotStaq.min.js +119 -0
  186. package/build-web/HotStaqTests_HelloWorldAPI.js +133 -0
  187. package/builder/docker/Dockerfile.linux.gen +42 -0
  188. package/builder/docker/README.md +36 -0
  189. package/builder/docker/app/start.sh +8 -0
  190. package/builder/docker/dockerignore +3 -0
  191. package/builder/docker/scripts/build.bat +11 -0
  192. package/builder/docker/scripts/build.sh +11 -0
  193. package/builder/docker/scripts/start-app.bat +7 -0
  194. package/builder/docker/scripts/start-app.sh +7 -0
  195. package/builder/docker/scripts/stop-app.bat +5 -0
  196. package/builder/docker/scripts/stop-app.sh +5 -0
  197. package/builder/docker-compose/docker-compose.gen.yaml +41 -0
  198. package/builder/docker-compose/env-skeleton +4 -0
  199. package/creator/project/.vscode/launch.json +59 -0
  200. package/creator/project/README.md +20 -0
  201. package/creator/project/gitignore +118 -0
  202. package/creator/project/npmignore +118 -0
  203. package/creator/public/api-test.hott +28 -0
  204. package/creator/public/index.hott +12 -0
  205. package/creator/ts/src/AppAPI.ts +30 -0
  206. package/creator/ts/src/HelloWorld.ts +39 -0
  207. package/creator/ts/src/WebExport.ts +7 -0
  208. package/creator/ts/tsconfig-web.json +73 -0
  209. package/creator/ts/tsconfig.json +73 -0
  210. package/creator/ts/webpack-api.config.js +57 -0
  211. package/dbstart.sh +19 -0
  212. package/dbstop.sh +4 -0
  213. package/docs/.nojekyll +1 -0
  214. package/docs/README.md +130 -0
  215. package/docs/classes/Hot.md +477 -0
  216. package/docs/classes/HotAPI.md +369 -0
  217. package/docs/classes/HotClient.md +95 -0
  218. package/docs/classes/HotComponent.md +279 -0
  219. package/docs/classes/HotDB.md +247 -0
  220. package/docs/classes/HotDBInflux.md +404 -0
  221. package/docs/classes/HotDBMigration.md +80 -0
  222. package/docs/classes/HotDBMySQL.md +310 -0
  223. package/docs/classes/HotDBSchema.md +51 -0
  224. package/docs/classes/HotFile.md +353 -0
  225. package/docs/classes/HotHTTPServer.md +700 -0
  226. package/docs/classes/HotLog.md +162 -0
  227. package/docs/classes/HotPage.md +357 -0
  228. package/docs/classes/HotRoute.md +312 -0
  229. package/docs/classes/HotRouteMethod.md +271 -0
  230. package/docs/classes/HotServer.md +311 -0
  231. package/docs/classes/HotStaq.md +1155 -0
  232. package/docs/classes/HotTestDestination.md +58 -0
  233. package/docs/classes/HotTestDriver.md +332 -0
  234. package/docs/classes/HotTestElement.md +88 -0
  235. package/docs/classes/HotTestElementOptions.md +71 -0
  236. package/docs/classes/HotTestMap.md +92 -0
  237. package/docs/classes/HotTestSeleniumDriver.md +542 -0
  238. package/docs/classes/HotTester.md +653 -0
  239. package/docs/classes/HotTesterAPI.md +493 -0
  240. package/docs/classes/HotTesterMocha.md +843 -0
  241. package/docs/classes/HotTesterMochaSelenium.md +896 -0
  242. package/docs/classes/HotTesterServer.md +633 -0
  243. package/docs/classes/InfluxSchema.md +74 -0
  244. package/docs/classes/MySQLSchema.md +199 -0
  245. package/docs/classes/MySQLSchemaField.md +330 -0
  246. package/docs/classes/MySQLSchemaTable.md +176 -0
  247. package/docs/enums/ConnectionStatus.md +43 -0
  248. package/docs/enums/DeveloperMode.md +38 -0
  249. package/docs/enums/EventExecutionType.md +43 -0
  250. package/docs/enums/HTTPMethod.md +32 -0
  251. package/docs/enums/HotDBGenerationType.md +30 -0
  252. package/docs/enums/HotLogLevel.md +88 -0
  253. package/docs/interfaces/HotDBConnectionInterface.md +116 -0
  254. package/docs/interfaces/HotDestination.md +62 -0
  255. package/docs/interfaces/HotSite.md +187 -0
  256. package/docs/interfaces/HotSiteMapPath.md +37 -0
  257. package/docs/interfaces/HotSiteRoute.md +79 -0
  258. package/docs/interfaces/HotStartOptions.md +115 -0
  259. package/docs/interfaces/HotTestPage.md +44 -0
  260. package/docs/interfaces/HotTestStop.md +62 -0
  261. package/docs/interfaces/IHotComponent.md +135 -0
  262. package/docs/interfaces/IHotStaq.md +118 -0
  263. package/docs/interfaces/IHotTestElement.md +54 -0
  264. package/docs/interfaces/IHotTestElementOptions.md +43 -0
  265. package/docs/interfaces/MySQLResults.md +43 -0
  266. package/docs/interfaces/MySQLSchemaFieldResult.md +75 -0
  267. package/docs/modules.md +182 -0
  268. package/package.json +65 -0
  269. package/selenium-start.sh +7 -0
  270. package/selenium-stop.sh +3 -0
  271. package/src/Hot.ts +319 -0
  272. package/src/HotAPI.ts +386 -0
  273. package/src/HotAgentAPI.ts +43 -0
  274. package/src/HotAgentRoute.ts +44 -0
  275. package/src/HotBuilder.ts +221 -0
  276. package/src/HotClient.ts +40 -0
  277. package/src/HotComponent.ts +158 -0
  278. package/src/HotCreator.ts +470 -0
  279. package/src/HotDB.ts +79 -0
  280. package/src/HotDBConnectionInterface.ts +40 -0
  281. package/src/HotFile.ts +617 -0
  282. package/src/HotGenerator.ts +446 -0
  283. package/src/HotHTTPServer.ts +954 -0
  284. package/src/HotIO.ts +160 -0
  285. package/src/HotLog.ts +158 -0
  286. package/src/HotPage.ts +206 -0
  287. package/src/HotRoute.ts +137 -0
  288. package/src/HotRouteMethod.ts +216 -0
  289. package/src/HotServer.ts +211 -0
  290. package/src/HotSetAsWeb.ts +3 -0
  291. package/src/HotStaq.ts +1881 -0
  292. package/src/HotTestDriver.ts +171 -0
  293. package/src/HotTestElement.ts +97 -0
  294. package/src/HotTestMap.ts +130 -0
  295. package/src/HotTestSeleniumDriver.ts +381 -0
  296. package/src/HotTester.ts +696 -0
  297. package/src/HotTesterAPI.ts +126 -0
  298. package/src/HotTesterMocha.ts +133 -0
  299. package/src/HotTesterMochaSelenium.ts +189 -0
  300. package/src/HotTesterServer.ts +551 -0
  301. package/src/api-web.ts +48 -0
  302. package/src/api.ts +103 -0
  303. package/src/cli.ts +1225 -0
  304. package/src/schemas/HotDBInflux.ts +211 -0
  305. package/src/schemas/HotDBMigration.ts +24 -0
  306. package/src/schemas/HotDBMySQL.ts +312 -0
  307. package/src/schemas/HotDBSchema.ts +21 -0
  308. package/src/schemas/influx/InfluxSchema.ts +19 -0
  309. package/src/schemas/mysql/MySQLSchema.ts +90 -0
  310. package/src/schemas/mysql/MySQLSchemaField.ts +408 -0
  311. package/src/schemas/mysql/MySQLSchemaTable.ts +353 -0
  312. package/temp/HotStaqWeb.ts +59 -0
  313. package/tsconfig-generator.json +17 -0
  314. package/tsconfig-web.json +74 -0
  315. package/tsconfig.json +73 -0
  316. package/webpack.config.generator.js +41 -0
  317. package/webpack.config.js +53 -0
  318. package/webpack.config.tests.js +56 -0
@@ -0,0 +1,216 @@
1
+ import { DeveloperMode } from "./Hot";
2
+ import { HotTestDriver } from "./HotTestDriver";
3
+ import { HotRoute } from "./HotRoute";
4
+ import { HotServer } from "./HotServer";
5
+
6
+ /**
7
+ * Available HTTP methods.
8
+ */
9
+ export enum HTTPMethod
10
+ {
11
+ GET = "get",
12
+ POST = "post"
13
+ }
14
+
15
+ /**
16
+ * A function that will be executed by the server when first registering with Express.
17
+ * If this returns false, this route method will not be registered.
18
+ */
19
+ export type ServerRegistrationFunction = () => Promise<boolean>;
20
+ /**
21
+ * A function that will be executed by the server.
22
+ */
23
+ export type ServerExecutionFunction =
24
+ (req: any, res: any, authorizedValue: any, jsonObj: any, queryObj: any) => Promise<any>;
25
+ /**
26
+ * A function that will be executed by the client.
27
+ */
28
+ export type ClientExecutionFunction = (...args: any[]) => Promise<any>;
29
+ /**
30
+ * A function that will be executed by the server for authorization. Any value
31
+ * returned from this function will be passed to the ServerExecutionFunction.
32
+ * If an undefined value is returned, this indicates the server was not able
33
+ * to authenticate the user, so the ServerExecutionFunction will not be
34
+ * executed.
35
+ */
36
+ export type ServerAuthorizationFunction = (req: any, res: any, jsonObj: any, queryObj: any) => Promise<any>;
37
+ /**
38
+ * The test case function to execute.
39
+ */
40
+ export type TestCaseFunction = ((driver: HotTestDriver) => Promise<any>) | ((driver: HotTestDriver) => any);
41
+ /**
42
+ * The test case object to pass.
43
+ */
44
+ export interface TestCaseObject
45
+ {
46
+ /**
47
+ * The name of the test case.
48
+ */
49
+ name: string;
50
+ /**
51
+ * The function to execute.
52
+ */
53
+ func: TestCaseFunction;
54
+ }
55
+
56
+ /**
57
+ * An API method to make.
58
+ */
59
+ export class HotRouteMethod
60
+ {
61
+ /**
62
+ * The parent route.
63
+ */
64
+ parentRoute: HotRoute;
65
+ /**
66
+ * The api call name.
67
+ */
68
+ name: string;
69
+ /**
70
+ * The api call name.
71
+ */
72
+ type: HTTPMethod;
73
+ /**
74
+ * Has this method been registered with the server? This
75
+ * prevents the method from being reregistered.
76
+ */
77
+ isRegistered: boolean;
78
+ /**
79
+ * Has this method been registered with the server? This
80
+ * prevents the method from being reregistered.
81
+ */
82
+ executeSetup: boolean;
83
+ /**
84
+ * The authorization credentials to be used by the client
85
+ * when connecting to the server.
86
+ */
87
+ authCredentials: any;
88
+ /**
89
+ * The test case objects to execute during tests.
90
+ */
91
+ testCases: {
92
+ [name: string]: TestCaseObject;
93
+ };
94
+
95
+ constructor (route: HotRoute, name: string,
96
+ onExecute: ServerExecutionFunction | ClientExecutionFunction = null,
97
+ type: HTTPMethod = HTTPMethod.POST, onServerAuthorize: ServerAuthorizationFunction = null,
98
+ onRegister: ServerRegistrationFunction = null, authCredentials: any = null,
99
+ testCases: (string | TestCaseFunction)[] | TestCaseFunction[] | TestCaseObject[] = null)
100
+ {
101
+ this.parentRoute = route;
102
+ this.name = name;
103
+ this.type = type;
104
+ this.isRegistered = false;
105
+ this.executeSetup = false;
106
+ this.authCredentials = authCredentials;
107
+ this.onServerAuthorize = onServerAuthorize;
108
+ this.onRegister = onRegister;
109
+ this.testCases = {};
110
+
111
+ if (this.parentRoute.connection.processor.mode === DeveloperMode.Development)
112
+ {
113
+ if (testCases != null)
114
+ {
115
+ for (let iIdx = 0; iIdx < testCases.length; iIdx++)
116
+ {
117
+ let obj = testCases[iIdx];
118
+
119
+ if (typeof (obj) === "string")
120
+ {
121
+ const name: string = obj;
122
+ const func: TestCaseFunction = (<TestCaseFunction>testCases[iIdx + 1]);
123
+
124
+ this.addTestCase (name, func);
125
+ iIdx++;
126
+ }
127
+ else
128
+ this.addTestCase (obj);
129
+ }
130
+ }
131
+ }
132
+
133
+ if (this.parentRoute.connection instanceof HotServer)
134
+ this.onServerExecute = onExecute;
135
+ //else
136
+ //this.onClientExecute = onExecute;
137
+ }
138
+
139
+ /**
140
+ * Executes before all routes have been registered.
141
+ */
142
+ onPreRegister?: () => Promise<void>;
143
+ /**
144
+ * Executes when first registering this method with Express. If
145
+ * this returns false, the method will not be registered.
146
+ */
147
+ onRegister?: ServerRegistrationFunction;
148
+ /**
149
+ * Executes after all routes have been registered.
150
+ */
151
+ onPostRegister?: () => Promise<void>;
152
+
153
+ /**
154
+ * Executes when authorizing a called method. If this method
155
+ * is set, this will not call onAuthorize for the parent HotRoute.
156
+ * The value returned from here will be passed to onExecute.
157
+ * Undefined returning from here will mean the authorization failed.
158
+ * If any exceptions are thrown from this function, they will be sent
159
+ * to the server as an { error: string; } object with the exception
160
+ * message as the error.
161
+ */
162
+ onServerAuthorize?: ServerAuthorizationFunction;
163
+
164
+ /**
165
+ * Executes when executing a called method from the server side.
166
+ * This will stringify any JSON object and send it as a JSON response.
167
+ * If undefined is returned no response will be sent to the server.
168
+ * So the developer would have to send a response using "res".
169
+ * If any exceptions are thrown from this function, they will be sent
170
+ * to the server as an { error: string; } object with the exception
171
+ * message as the error.
172
+ */
173
+ onServerExecute?: ServerExecutionFunction;
174
+ /**
175
+ * Executes when executing a called method from the client side.
176
+ * @fixme Is this necessary?
177
+ */
178
+ onClientExecute?: ClientExecutionFunction;
179
+
180
+ /**
181
+ * Add a new test case.
182
+ */
183
+ addTestCase (newTestCase: TestCaseObject | string | TestCaseFunction,
184
+ testCaseFunction: TestCaseFunction = null): void
185
+ {
186
+ if (typeof (newTestCase) === "string")
187
+ {
188
+ const name: string = newTestCase;
189
+ const func: TestCaseFunction = testCaseFunction;
190
+
191
+ this.testCases[name] = {
192
+ name: name,
193
+ func: func
194
+ };
195
+
196
+ return;
197
+ }
198
+
199
+ if (typeof (newTestCase) === "function")
200
+ {
201
+ const testCaseId: number = Object.keys (this.testCases).length;
202
+ const name: string = `${this.parentRoute.route}/${this.name} test case ${testCaseId}`;
203
+ const func: TestCaseFunction = (<TestCaseFunction>newTestCase);
204
+
205
+ this.testCases[name] = {
206
+ name: name,
207
+ func: func
208
+ };
209
+
210
+ return;
211
+ }
212
+
213
+ const testCase: TestCaseObject = (<TestCaseObject>newTestCase);
214
+ this.testCases[testCase.name] = testCase;
215
+ }
216
+ }
@@ -0,0 +1,211 @@
1
+ import { HotStaq } from "./HotStaq";
2
+ import { HotLog } from "./HotLog";
3
+ import { HotAPI } from "./HotAPI";
4
+ import { HotRoute } from "./HotRoute";
5
+
6
+ /**
7
+ * The type of server.
8
+ */
9
+ export enum HotServerType
10
+ {
11
+ HTTP,
12
+ WebSockets
13
+ }
14
+
15
+ /**
16
+ * The server.
17
+ */
18
+ export interface IHotServer
19
+ {
20
+ /**
21
+ * The processor to use.
22
+ */
23
+ processor: HotStaq;
24
+ /**
25
+ * The server type.
26
+ */
27
+ serverType: string;
28
+ /**
29
+ * The API to use.
30
+ */
31
+ api: HotAPI;
32
+ /**
33
+ * The network address to listen on.
34
+ */
35
+ listenAddress: string;
36
+ /**
37
+ * The ports to use.
38
+ */
39
+ ports: {
40
+ http: number;
41
+ https: number;
42
+ };
43
+ /**
44
+ * SSL settings.
45
+ */
46
+ ssl: {
47
+ /**
48
+ * The SSL certificate to use.
49
+ */
50
+ cert: string;
51
+ /**
52
+ * The SSL certificate key to use.
53
+ */
54
+ key: string;
55
+ /**
56
+ * The SSL certificate CA to use.
57
+ */
58
+ ca: string;
59
+ };
60
+ /**
61
+ * Redirect HTTP traffic to HTTPS.
62
+ */
63
+ redirectHTTPtoHTTPS: boolean;
64
+ /**
65
+ * The type of server.
66
+ */
67
+ type: HotServerType;
68
+ /**
69
+ * The logger.
70
+ */
71
+ logger: HotLog;
72
+ /**
73
+ * Any secrets associated with this server.
74
+ */
75
+ secrets: any;
76
+ }
77
+
78
+ /**
79
+ * The server.
80
+ */
81
+ export class HotServer implements IHotServer
82
+ {
83
+ /**
84
+ * The processor to use.
85
+ */
86
+ processor: HotStaq;
87
+ /**
88
+ * The server type.
89
+ */
90
+ serverType: string;
91
+ /**
92
+ * The API to use.
93
+ */
94
+ api: HotAPI;
95
+ /**
96
+ * The network address to listen on.
97
+ */
98
+ listenAddress: string;
99
+ /**
100
+ * The ports to use.
101
+ */
102
+ ports: {
103
+ http: number;
104
+ https: number;
105
+ };
106
+ /**
107
+ * SSL settings.
108
+ */
109
+ ssl: {
110
+ /**
111
+ * The SSL certificate to use.
112
+ */
113
+ cert: string;
114
+ /**
115
+ * The SSL certificate key to use.
116
+ */
117
+ key: string;
118
+ /**
119
+ * The SSL certificate CA to use.
120
+ */
121
+ ca: string;
122
+ };
123
+ /**
124
+ * Redirect HTTP traffic to HTTPS.
125
+ */
126
+ redirectHTTPtoHTTPS: boolean;
127
+ /**
128
+ * The type of server.
129
+ */
130
+ type: HotServerType;
131
+ /**
132
+ * The logger.
133
+ */
134
+ logger: HotLog;
135
+ /**
136
+ * Any secrets associated with this server.
137
+ */
138
+ secrets: any;
139
+
140
+ constructor (processor: HotStaq | HotServer)
141
+ {
142
+ if (processor instanceof HotStaq)
143
+ {
144
+ this.processor = processor;
145
+ this.serverType = "Server";
146
+ this.api = null;
147
+ this.listenAddress = "0.0.0.0";
148
+ this.ports = {
149
+ http: 80,
150
+ https: 443
151
+ };
152
+ this.ssl = {
153
+ cert: "",
154
+ key: "",
155
+ ca: ""
156
+ };
157
+ this.redirectHTTPtoHTTPS = true;
158
+ this.type = HotServerType.HTTP;
159
+ this.logger = processor.logger;
160
+ this.secrets = {};
161
+ }
162
+ else
163
+ {
164
+ this.processor = processor.processor;
165
+ this.serverType = processor.serverType || "Server";
166
+ this.api = processor.api || null;
167
+ this.listenAddress = processor.listenAddress || "0.0.0.0";
168
+ this.ports = processor.ports || {
169
+ http: 80,
170
+ https: 443
171
+ };
172
+ this.ssl = processor.ssl || {
173
+ cert: "",
174
+ key: "",
175
+ ca: ""
176
+ };
177
+ this.redirectHTTPtoHTTPS = processor.redirectHTTPtoHTTPS != null ? processor.redirectHTTPtoHTTPS : true;
178
+ this.type = processor.type || HotServerType.HTTP;
179
+ this.logger = processor.logger;
180
+ this.secrets = processor.secrets || {};
181
+ }
182
+ }
183
+
184
+ /**
185
+ * Set an API to this server. This will also set the associated
186
+ * processor to this API as well.
187
+ */
188
+ async setAPI (api: HotAPI): Promise<void>
189
+ {
190
+ this.processor.api = api;
191
+ this.api = api;
192
+
193
+ //if (registerRoutes === true)
194
+ //await this.api.registerRoutes ();
195
+ }
196
+
197
+ /**
198
+ * Register a route with the server.
199
+ */
200
+ async registerRoute? (route: HotRoute): Promise<void>;
201
+
202
+ /**
203
+ * Start listening for requests.
204
+ */
205
+ async listen? (): Promise<void>;
206
+
207
+ /**
208
+ * Shutdown the server.
209
+ */
210
+ async shutdown? (): Promise<void>;
211
+ }
@@ -0,0 +1,3 @@
1
+ import { HotStaq } from "./HotStaq";
2
+
3
+ HotStaq.isWeb = true;