@taon-dev/cloud 21.0.207

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 (261) hide show
  1. package/VERIFIED-BUILD-DATA.jsonc +5 -0
  2. package/assets/shared/shared_folder_info.txt +7 -0
  3. package/browser/README.md +24 -0
  4. package/browser/fesm2022/cloud-browser.mjs +3290 -0
  5. package/browser/fesm2022/cloud-browser.mjs.map +1 -0
  6. package/browser/package.json +23 -0
  7. package/browser/types/cloud-browser.d.ts +793 -0
  8. package/browser-prod/README.md +24 -0
  9. package/browser-prod/fesm2022/cloud-browser-prod.mjs +3289 -0
  10. package/browser-prod/fesm2022/cloud-browser-prod.mjs.map +1 -0
  11. package/browser-prod/package.json +23 -0
  12. package/browser-prod/types/cloud-browser-prod.d.ts +791 -0
  13. package/browser-prod.re-export.json +1 -0
  14. package/browser-prod.split-namespaces.json +10 -0
  15. package/cli.d.ts +1 -0
  16. package/cli.js +8 -0
  17. package/cli.js.map +1 -0
  18. package/index.d.ts +1 -0
  19. package/index.js +18 -0
  20. package/index.js.map +1 -0
  21. package/lib/build-info._auto-generated_.d.ts +24 -0
  22. package/lib/build-info._auto-generated_.js +30 -0
  23. package/lib/build-info._auto-generated_.js.map +1 -0
  24. package/lib/constants.d.ts +1 -0
  25. package/lib/constants.js +6 -0
  26. package/lib/constants.js.map +1 -0
  27. package/lib/env/env.angular-node-app.d.ts +67 -0
  28. package/lib/env/env.angular-node-app.js +141 -0
  29. package/lib/env/env.angular-node-app.js.map +1 -0
  30. package/lib/env/env.docs-webapp.d.ts +67 -0
  31. package/lib/env/env.docs-webapp.js +141 -0
  32. package/lib/env/env.docs-webapp.js.map +1 -0
  33. package/lib/env/env.electron-app.d.ts +67 -0
  34. package/lib/env/env.electron-app.js +141 -0
  35. package/lib/env/env.electron-app.js.map +1 -0
  36. package/lib/env/env.mobile-app.d.ts +67 -0
  37. package/lib/env/env.mobile-app.js +141 -0
  38. package/lib/env/env.mobile-app.js.map +1 -0
  39. package/lib/env/env.npm-lib-and-cli-tool.d.ts +67 -0
  40. package/lib/env/env.npm-lib-and-cli-tool.js +141 -0
  41. package/lib/env/env.npm-lib-and-cli-tool.js.map +1 -0
  42. package/lib/env/env.vscode-plugin.d.ts +67 -0
  43. package/lib/env/env.vscode-plugin.js +141 -0
  44. package/lib/env/env.vscode-plugin.js.map +1 -0
  45. package/lib/env/index.d.ts +6 -0
  46. package/lib/env/index.js +23 -0
  47. package/lib/env/index.js.map +1 -0
  48. package/lib/index._auto-generated_.d.ts +27 -0
  49. package/lib/index._auto-generated_.js +49 -0
  50. package/lib/index._auto-generated_.js.map +1 -0
  51. package/lib/index.d.ts +4 -0
  52. package/lib/index.js +21 -0
  53. package/lib/index.js.map +1 -0
  54. package/lib/instances/index.d.ts +5 -0
  55. package/lib/instances/index.js +22 -0
  56. package/lib/instances/index.js.map +1 -0
  57. package/lib/instances/instances-api.service.d.ts +7 -0
  58. package/lib/instances/instances.context.d.ts +19 -0
  59. package/lib/instances/instances.context.js +73 -0
  60. package/lib/instances/instances.context.js.map +1 -0
  61. package/lib/instances/instances.controller.d.ts +10 -0
  62. package/lib/instances/instances.controller.js +76 -0
  63. package/lib/instances/instances.controller.js.map +1 -0
  64. package/lib/instances/instances.d.ts +9 -0
  65. package/lib/instances/instances.defaults-values.d.ts +2 -0
  66. package/lib/instances/instances.defaults-values.js +8 -0
  67. package/lib/instances/instances.defaults-values.js.map +1 -0
  68. package/lib/instances/instances.js +52 -0
  69. package/lib/instances/instances.js.map +1 -0
  70. package/lib/instances/instances.repository.d.ts +6 -0
  71. package/lib/instances/instances.repository.js +26 -0
  72. package/lib/instances/instances.repository.js.map +1 -0
  73. package/lib/instances/instances.terminal-ui.d.ts +11 -0
  74. package/lib/instances/instances.terminal-ui.js +158 -0
  75. package/lib/instances/instances.terminal-ui.js.map +1 -0
  76. package/lib/instances/instances.worker.d.ts +18 -0
  77. package/lib/instances/instances.worker.js +46 -0
  78. package/lib/instances/instances.worker.js.map +1 -0
  79. package/lib/models.d.ts +8 -0
  80. package/lib/models.js +13 -0
  81. package/lib/models.js.map +1 -0
  82. package/lib/my-organization-proj.d.ts +1 -0
  83. package/lib/my-organization-proj.js +6 -0
  84. package/lib/my-organization-proj.js.map +1 -0
  85. package/lib/package.json +4 -0
  86. package/lib/processes/index.d.ts +5 -0
  87. package/lib/processes/index.js +22 -0
  88. package/lib/processes/index.js.map +1 -0
  89. package/lib/processes/processes-api.service.d.ts +5 -0
  90. package/lib/processes/processes.context.d.ts +19 -0
  91. package/lib/processes/processes.context.js +24 -0
  92. package/lib/processes/processes.context.js.map +1 -0
  93. package/lib/processes/processes.controller.d.ts +13 -0
  94. package/lib/processes/processes.controller.js +183 -0
  95. package/lib/processes/processes.controller.js.map +1 -0
  96. package/lib/processes/processes.d.ts +24 -0
  97. package/lib/processes/processes.defaults-values.d.ts +2 -0
  98. package/lib/processes/processes.defaults-values.js +9 -0
  99. package/lib/processes/processes.defaults-values.js.map +1 -0
  100. package/lib/processes/processes.js +171 -0
  101. package/lib/processes/processes.js.map +1 -0
  102. package/lib/processes/processes.models.d.ts +33 -0
  103. package/lib/processes/processes.models.js +46 -0
  104. package/lib/processes/processes.models.js.map +1 -0
  105. package/lib/processes/processes.repository.d.ts +18 -0
  106. package/lib/processes/processes.repository.js +203 -0
  107. package/lib/processes/processes.repository.js.map +1 -0
  108. package/lib/processes/processes.terminal-ui.d.ts +19 -0
  109. package/lib/processes/processes.terminal-ui.js +382 -0
  110. package/lib/processes/processes.terminal-ui.js.map +1 -0
  111. package/lib/processes/processes.utils.d.ts +6 -0
  112. package/lib/processes/processes.utils.js +86 -0
  113. package/lib/processes/processes.utils.js.map +1 -0
  114. package/lib/processes/processes.worker.controller.d.ts +3 -0
  115. package/lib/processes/processes.worker.controller.js +22 -0
  116. package/lib/processes/processes.worker.controller.js.map +1 -0
  117. package/lib/processes/processes.worker.d.ts +18 -0
  118. package/lib/processes/processes.worker.js +56 -0
  119. package/lib/processes/processes.worker.js.map +1 -0
  120. package/lib/start-cli.d.ts +7 -0
  121. package/lib/start-cli.js +46 -0
  122. package/lib/start-cli.js.map +1 -0
  123. package/lib/traefik/traefik.models.d.ts +20 -0
  124. package/lib/traefik/traefik.models.js +3 -0
  125. package/lib/traefik/traefik.models.js.map +1 -0
  126. package/lib/traefik/traefik.provider.d.ts +42 -0
  127. package/lib/traefik/traefik.provider.js +579 -0
  128. package/lib/traefik/traefik.provider.js.map +1 -0
  129. package/lib/traefik/treafik-service.provider.d.ts +41 -0
  130. package/lib/traefik/treafik-service.provider.js +215 -0
  131. package/lib/traefik/treafik-service.provider.js.map +1 -0
  132. package/lib-prod/build-info._auto-generated_.d.ts +24 -0
  133. package/lib-prod/build-info._auto-generated_.js +27 -0
  134. package/lib-prod/build-info._auto-generated_.js.map +1 -0
  135. package/lib-prod/constants.d.ts +1 -0
  136. package/lib-prod/constants.js +3 -0
  137. package/lib-prod/constants.js.map +1 -0
  138. package/lib-prod/env/env.angular-node-app.d.ts +67 -0
  139. package/lib-prod/env/env.angular-node-app.js +137 -0
  140. package/lib-prod/env/env.angular-node-app.js.map +1 -0
  141. package/lib-prod/env/env.docs-webapp.d.ts +67 -0
  142. package/lib-prod/env/env.docs-webapp.js +137 -0
  143. package/lib-prod/env/env.docs-webapp.js.map +1 -0
  144. package/lib-prod/env/env.electron-app.d.ts +67 -0
  145. package/lib-prod/env/env.electron-app.js +137 -0
  146. package/lib-prod/env/env.electron-app.js.map +1 -0
  147. package/lib-prod/env/env.mobile-app.d.ts +67 -0
  148. package/lib-prod/env/env.mobile-app.js +137 -0
  149. package/lib-prod/env/env.mobile-app.js.map +1 -0
  150. package/lib-prod/env/env.npm-lib-and-cli-tool.d.ts +67 -0
  151. package/lib-prod/env/env.npm-lib-and-cli-tool.js +137 -0
  152. package/lib-prod/env/env.npm-lib-and-cli-tool.js.map +1 -0
  153. package/lib-prod/env/env.vscode-plugin.d.ts +67 -0
  154. package/lib-prod/env/env.vscode-plugin.js +137 -0
  155. package/lib-prod/env/env.vscode-plugin.js.map +1 -0
  156. package/lib-prod/env/index.d.ts +6 -0
  157. package/lib-prod/env/index.js +7 -0
  158. package/lib-prod/env/index.js.map +1 -0
  159. package/lib-prod/index._auto-generated_.d.ts +25 -0
  160. package/lib-prod/index._auto-generated_.js +33 -0
  161. package/lib-prod/index._auto-generated_.js.map +1 -0
  162. package/lib-prod/index.d.ts +4 -0
  163. package/lib-prod/index.js +5 -0
  164. package/lib-prod/index.js.map +1 -0
  165. package/lib-prod/instances/index.d.ts +4 -0
  166. package/lib-prod/instances/index.js +6 -0
  167. package/lib-prod/instances/index.js.map +1 -0
  168. package/lib-prod/instances/instances.context.d.ts +19 -0
  169. package/lib-prod/instances/instances.context.js +64 -0
  170. package/lib-prod/instances/instances.context.js.map +1 -0
  171. package/lib-prod/instances/instances.controller.d.ts +10 -0
  172. package/lib-prod/instances/instances.controller.js +61 -0
  173. package/lib-prod/instances/instances.controller.js.map +1 -0
  174. package/lib-prod/instances/instances.d.ts +9 -0
  175. package/lib-prod/instances/instances.defaults-values.d.ts +2 -0
  176. package/lib-prod/instances/instances.defaults-values.js +5 -0
  177. package/lib-prod/instances/instances.defaults-values.js.map +1 -0
  178. package/lib-prod/instances/instances.js +40 -0
  179. package/lib-prod/instances/instances.js.map +1 -0
  180. package/lib-prod/instances/instances.repository.d.ts +6 -0
  181. package/lib-prod/instances/instances.repository.js +17 -0
  182. package/lib-prod/instances/instances.repository.js.map +1 -0
  183. package/lib-prod/instances/instances.terminal-ui.d.ts +11 -0
  184. package/lib-prod/instances/instances.terminal-ui.js +154 -0
  185. package/lib-prod/instances/instances.terminal-ui.js.map +1 -0
  186. package/lib-prod/instances/instances.worker.d.ts +18 -0
  187. package/lib-prod/instances/instances.worker.js +42 -0
  188. package/lib-prod/instances/instances.worker.js.map +1 -0
  189. package/lib-prod/models.d.ts +8 -0
  190. package/lib-prod/models.js +10 -0
  191. package/lib-prod/models.js.map +1 -0
  192. package/lib-prod/my-organization-proj.d.ts +1 -0
  193. package/lib-prod/my-organization-proj.js +3 -0
  194. package/lib-prod/my-organization-proj.js.map +1 -0
  195. package/lib-prod/package.json +4 -0
  196. package/lib-prod/processes/index.d.ts +4 -0
  197. package/lib-prod/processes/index.js +6 -0
  198. package/lib-prod/processes/index.js.map +1 -0
  199. package/lib-prod/processes/processes.context.d.ts +19 -0
  200. package/lib-prod/processes/processes.context.js +21 -0
  201. package/lib-prod/processes/processes.context.js.map +1 -0
  202. package/lib-prod/processes/processes.controller.d.ts +13 -0
  203. package/lib-prod/processes/processes.controller.js +168 -0
  204. package/lib-prod/processes/processes.controller.js.map +1 -0
  205. package/lib-prod/processes/processes.d.ts +24 -0
  206. package/lib-prod/processes/processes.defaults-values.d.ts +2 -0
  207. package/lib-prod/processes/processes.defaults-values.js +6 -0
  208. package/lib-prod/processes/processes.defaults-values.js.map +1 -0
  209. package/lib-prod/processes/processes.js +159 -0
  210. package/lib-prod/processes/processes.js.map +1 -0
  211. package/lib-prod/processes/processes.models.d.ts +33 -0
  212. package/lib-prod/processes/processes.models.js +43 -0
  213. package/lib-prod/processes/processes.models.js.map +1 -0
  214. package/lib-prod/processes/processes.repository.d.ts +18 -0
  215. package/lib-prod/processes/processes.repository.js +194 -0
  216. package/lib-prod/processes/processes.repository.js.map +1 -0
  217. package/lib-prod/processes/processes.terminal-ui.d.ts +19 -0
  218. package/lib-prod/processes/processes.terminal-ui.js +378 -0
  219. package/lib-prod/processes/processes.terminal-ui.js.map +1 -0
  220. package/lib-prod/processes/processes.utils.d.ts +4 -0
  221. package/lib-prod/processes/processes.utils.js +82 -0
  222. package/lib-prod/processes/processes.utils.js.map +1 -0
  223. package/lib-prod/processes/processes.worker.controller.d.ts +3 -0
  224. package/lib-prod/processes/processes.worker.controller.js +13 -0
  225. package/lib-prod/processes/processes.worker.controller.js.map +1 -0
  226. package/lib-prod/processes/processes.worker.d.ts +18 -0
  227. package/lib-prod/processes/processes.worker.js +52 -0
  228. package/lib-prod/processes/processes.worker.js.map +1 -0
  229. package/lib-prod/start-cli.d.ts +7 -0
  230. package/lib-prod/start-cli.js +43 -0
  231. package/lib-prod/start-cli.js.map +1 -0
  232. package/lib-prod/traefik/traefik.models.d.ts +20 -0
  233. package/lib-prod/traefik/traefik.models.js +2 -0
  234. package/lib-prod/traefik/traefik.models.js.map +1 -0
  235. package/lib-prod/traefik/traefik.provider.d.ts +42 -0
  236. package/lib-prod/traefik/traefik.provider.js +575 -0
  237. package/lib-prod/traefik/traefik.provider.js.map +1 -0
  238. package/lib-prod/traefik/treafik-service.provider.d.ts +41 -0
  239. package/lib-prod/traefik/treafik-service.provider.js +211 -0
  240. package/lib-prod/traefik/treafik-service.provider.js.map +1 -0
  241. package/lib-prod.re-export.json +1 -0
  242. package/lib-prod.split-namespaces.json +10 -0
  243. package/package.json +36 -0
  244. package/scss/global.scss +93 -0
  245. package/scss/index.scss +2 -0
  246. package/scss/lib/index.scss +1 -0
  247. package/scss/vars.scss +7 -0
  248. package/src.d.ts +6 -0
  249. package/src.js +20 -0
  250. package/websql/README.md +24 -0
  251. package/websql/fesm2022/cloud-websql.mjs +3385 -0
  252. package/websql/fesm2022/cloud-websql.mjs.map +1 -0
  253. package/websql/package.json +23 -0
  254. package/websql/types/cloud-websql.d.ts +793 -0
  255. package/websql-prod/README.md +24 -0
  256. package/websql-prod/fesm2022/cloud-websql-prod.mjs +3384 -0
  257. package/websql-prod/fesm2022/cloud-websql-prod.mjs.map +1 -0
  258. package/websql-prod/package.json +23 -0
  259. package/websql-prod/types/cloud-websql-prod.d.ts +791 -0
  260. package/websql-prod.re-export.json +1 -0
  261. package/websql-prod.split-namespaces.json +10 -0
@@ -0,0 +1,168 @@
1
+ //#region imports
2
+ import { TaonController, Taon__NS__error } from 'taon/lib-prod';
3
+ import { GET, Query, TaonBaseCrudController } from 'taon/lib-prod';
4
+ import { ERR_MESSAGE_PROCESS_NOT_FOUND } from '../constants';
5
+ import { Processes } from './processes';
6
+ import { ProcessesStatesAllowedStart, } from './processes.models';
7
+ import { ProcessesRepository } from './processes.repository';
8
+ //#endregion
9
+ let ProcessesController = class ProcessesController extends TaonBaseCrudController {
10
+ entityClassResolveFn = () => Processes;
11
+ // @ts-ignore
12
+ processesRepository = this.injectCustomRepo(ProcessesRepository);
13
+ //#region get by process id
14
+ getByProcessID(processId) {
15
+ //#region @websqlFunc
16
+ return async (req, res) => {
17
+ if (!processId) {
18
+ throw new Error(`No processId query param provided!`);
19
+ }
20
+ const proc = await this.processesRepository.getByProcessID(processId);
21
+ if (!proc) {
22
+ throw Taon__NS__error({
23
+ code: ERR_MESSAGE_PROCESS_NOT_FOUND,
24
+ message: `No process found by given processId: ${processId}`,
25
+ status: 404,
26
+ });
27
+ }
28
+ return proc;
29
+ };
30
+ //#endregion
31
+ }
32
+ //#endregion
33
+ //#region get by unique params
34
+ getByUniqueParams(cwd, command) {
35
+ //#region @websqlFunc
36
+ return async (req, res) => {
37
+ if (!cwd) {
38
+ throw new Error(`No cwd query param provided!`);
39
+ }
40
+ if (!command) {
41
+ throw new Error(`No command query param provided!`);
42
+ }
43
+ const proc = await this.processesRepository.getByUniqueParams({
44
+ cwd,
45
+ command,
46
+ });
47
+ if (!proc) {
48
+ throw new Error(`No process found by given unique params!
49
+ cwd: ${cwd}
50
+ command: ${command}
51
+ `);
52
+ }
53
+ return proc;
54
+ };
55
+ //#endregion
56
+ }
57
+ //#endregion
58
+ //#region trigger start process
59
+ triggerStart(processId, processName) {
60
+ //#region @websqlFunc
61
+ return async (req, res) => {
62
+ if (!processId) {
63
+ throw new Error(`No processId queryParm provided!`);
64
+ }
65
+ await this.processesRepository.triggerStart(processId, {
66
+ processName,
67
+ });
68
+ };
69
+ //#endregion
70
+ }
71
+ //#endregion
72
+ //#region trigger stop process
73
+ triggerStop(processId, deleteAfterKill) {
74
+ //#region @websqlFunc
75
+ return async (req, res) => {
76
+ if (!processId) {
77
+ throw new Error(`No processId queryParm provided!`);
78
+ }
79
+ await this.processesRepository.triggerStop(processId, {
80
+ deleteAfterKill,
81
+ });
82
+ };
83
+ //#endregion
84
+ }
85
+ //#endregion
86
+ //#region wait until deployment removed
87
+ async waitUntilProcessDeleted(processId) {
88
+ //#region @backendFunc
89
+ await this._waitForProperStatusChange({
90
+ actionName: `Waiting until process ${processId} is removed`,
91
+ request: () => {
92
+ // console.log(`Checking if process ${processId} deleted...`);
93
+ return this.getByProcessID(processId).request({
94
+ timeout: 1000,
95
+ });
96
+ },
97
+ loopRequestsOnBackendError: opt => {
98
+ // console.log(opt);
99
+ if (opt.taonError &&
100
+ opt.taonError.body.json.code === ERR_MESSAGE_PROCESS_NOT_FOUND) {
101
+ return false;
102
+ }
103
+ return true;
104
+ },
105
+ });
106
+ //#endregion
107
+ }
108
+ //#endregion
109
+ //#region wait until deployment removed
110
+ async waitUntilProcessStopped(processId) {
111
+ //#region @backendFunc
112
+ await this._waitForProperStatusChange({
113
+ actionName: `Waiting until process ${processId} stopped`,
114
+ request: () => {
115
+ return this.getByProcessID(processId).request({
116
+ timeout: 1000,
117
+ });
118
+ },
119
+ poolingInterval: 1000,
120
+ statusCheck: resp => {
121
+ return ProcessesStatesAllowedStart.includes(resp.body.json.state);
122
+ },
123
+ loopRequestsOnBackendError: opt => {
124
+ // console.log(opt);
125
+ return true;
126
+ },
127
+ });
128
+ //#endregion
129
+ }
130
+ };
131
+ __decorate([
132
+ GET(),
133
+ __param(0, Query('processId')),
134
+ __metadata("design:type", Function),
135
+ __metadata("design:paramtypes", [Object]),
136
+ __metadata("design:returntype", Object)
137
+ ], ProcessesController.prototype, "getByProcessID", null);
138
+ __decorate([
139
+ GET(),
140
+ __param(0, Query('cwd')),
141
+ __param(1, Query('command')),
142
+ __metadata("design:type", Function),
143
+ __metadata("design:paramtypes", [String, String]),
144
+ __metadata("design:returntype", Object)
145
+ ], ProcessesController.prototype, "getByUniqueParams", null);
146
+ __decorate([
147
+ GET(),
148
+ __param(0, Query('processId')),
149
+ __param(1, Query('processName')),
150
+ __metadata("design:type", Function),
151
+ __metadata("design:paramtypes", [Object, String]),
152
+ __metadata("design:returntype", Object)
153
+ ], ProcessesController.prototype, "triggerStart", null);
154
+ __decorate([
155
+ GET(),
156
+ __param(0, Query('processId')),
157
+ __param(1, Query('deleteAfterKill')),
158
+ __metadata("design:type", Function),
159
+ __metadata("design:paramtypes", [Object, Boolean]),
160
+ __metadata("design:returntype", Object)
161
+ ], ProcessesController.prototype, "triggerStop", null);
162
+ ProcessesController = __decorate([
163
+ TaonController({
164
+ className: 'ProcessesController',
165
+ })
166
+ ], ProcessesController);
167
+ export { ProcessesController };
168
+ //# sourceMappingURL=processes.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processes.controller.js","sourceRoot":"","sources":[""],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { TaonBaseAbstractEntity } from 'taon/lib-prod';
2
+ import { ProcessesState } from './processes.models';
3
+ export declare class Processes extends TaonBaseAbstractEntity<Processes> {
4
+ command: string;
5
+ cwd: string;
6
+ state: ProcessesState;
7
+ pid: number;
8
+ ppid: number;
9
+ conditionProcessActiveStdout: string[];
10
+ conditionProcessActiveStderr: string[];
11
+ /**
12
+ * last 40 lines of output
13
+ * (combined stdout + stderr)
14
+ */
15
+ outputLast40lines: string;
16
+ /**
17
+ * absolute path to file where stdout + stderr is logged
18
+ */
19
+ fileLogAbsPath: string;
20
+ get previewString(): string;
21
+ fullPreviewString(options?: {
22
+ boldValues?: boolean;
23
+ }): string;
24
+ }
@@ -0,0 +1,2 @@
1
+ import type { Processes } from './processes';
2
+ export declare const ProcessesDefaultsValues: Partial<Processes>;
@@ -0,0 +1,6 @@
1
+ export const ProcessesDefaultsValues = {
2
+ description: '',
3
+ version: 0,
4
+ id: void 0,
5
+ };
6
+ //# sourceMappingURL=processes.defaults-values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processes.defaults-values.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,WAAW,EAAE,EAAE;IACf,OAAO,EAAE,CAAC;IACV,EAAE,EAAE,KAAK,CAAC;CACW,CAAC"}
@@ -0,0 +1,159 @@
1
+ //#region imports
2
+ import { CustomColumn, TaonEntity } from 'taon/lib-prod';
3
+ import { TaonBaseAbstractEntity, String500Column, SimpleJsonColumn, } from 'taon/lib-prod';
4
+ import { chalk } from 'tnp-core/lib-prod';
5
+ import { ProcessesState } from './processes.models';
6
+ //#endregion
7
+ let Processes = class Processes extends TaonBaseAbstractEntity {
8
+ //#region @websql
9
+ //#endregion
10
+ command;
11
+ //#region @websql
12
+ //#endregion
13
+ cwd;
14
+ //#region @websql
15
+ //#endregion
16
+ state;
17
+ //#region @websql
18
+ //#endregion
19
+ pid;
20
+ //#region @websql
21
+ //#endregion
22
+ ppid;
23
+ //#region @websql
24
+ //#endregion
25
+ conditionProcessActiveStdout;
26
+ //#region @websql
27
+ //#endregion
28
+ conditionProcessActiveStderr;
29
+ //#region @websql
30
+ //#endregion
31
+ /**
32
+ * last 40 lines of output
33
+ * (combined stdout + stderr)
34
+ */
35
+ outputLast40lines;
36
+ //#region @websql
37
+ //#endregion
38
+ /**
39
+ * absolute path to file where stdout + stderr is logged
40
+ */
41
+ fileLogAbsPath;
42
+ //#region getters / preview string
43
+ get previewString() {
44
+ return `${this.id} ${this.command} in ${this.cwd} `;
45
+ }
46
+ //#endregion
47
+ fullPreviewString(options) {
48
+ //#region @websqlFunc
49
+ options = options || {};
50
+ const boldValues = !!options.boldValues;
51
+ const boldFn = (str) => boldValues ? chalk.bold(str?.toString()) : str;
52
+ const processFromDB = this;
53
+ return `
54
+ > id: ${boldFn(processFromDB.id)}
55
+ > cwd: ${boldFn(processFromDB.cwd)}
56
+ > command: ${boldFn(processFromDB.command)}
57
+ > state: ${boldFn(processFromDB.state)}
58
+ > pid: ${boldFn(processFromDB.pid)}
59
+ > ppid: ${boldFn(processFromDB.ppid)}
60
+ > log path: ${boldFn(processFromDB.fileLogAbsPath)}
61
+ > conditionProcessActiveStdout: ${boldFn((processFromDB.conditionProcessActiveStdout || []).join(', ') || '<empty>')}
62
+ > conditionProcessActiveStderr: ${boldFn((processFromDB.conditionProcessActiveStderr || []).join(', ') || '<empty>')}
63
+ `;
64
+ //#endregion
65
+ }
66
+ };
67
+ __decorate([
68
+ CustomColumn({
69
+ type: 'varchar',
70
+ length: 1500,
71
+ nullable: false,
72
+ })
73
+ //#endregion
74
+ ,
75
+ __metadata("design:type", String)
76
+ ], Processes.prototype, "command", void 0);
77
+ __decorate([
78
+ CustomColumn({
79
+ type: 'varchar',
80
+ length: 500,
81
+ default: process.cwd(),
82
+ })
83
+ //#endregion
84
+ ,
85
+ __metadata("design:type", String)
86
+ ], Processes.prototype, "cwd", void 0);
87
+ __decorate([
88
+ CustomColumn({
89
+ type: 'varchar',
90
+ length: 20,
91
+ default: ProcessesState.NOT_STARTED,
92
+ nullable: false,
93
+ })
94
+ //#endregion
95
+ ,
96
+ __metadata("design:type", String)
97
+ ], Processes.prototype, "state", void 0);
98
+ __decorate([
99
+ CustomColumn({
100
+ type: 'int',
101
+ default: null,
102
+ nullable: true,
103
+ })
104
+ //#endregion
105
+ ,
106
+ __metadata("design:type", Number)
107
+ ], Processes.prototype, "pid", void 0);
108
+ __decorate([
109
+ CustomColumn({
110
+ type: 'int',
111
+ default: null,
112
+ nullable: true,
113
+ })
114
+ //#endregion
115
+ ,
116
+ __metadata("design:type", Number)
117
+ ], Processes.prototype, "ppid", void 0);
118
+ __decorate([
119
+ SimpleJsonColumn()
120
+ //#endregion
121
+ ,
122
+ __metadata("design:type", Array)
123
+ ], Processes.prototype, "conditionProcessActiveStdout", void 0);
124
+ __decorate([
125
+ SimpleJsonColumn()
126
+ //#endregion
127
+ ,
128
+ __metadata("design:type", Array)
129
+ ], Processes.prototype, "conditionProcessActiveStderr", void 0);
130
+ __decorate([
131
+ CustomColumn({
132
+ type: 'text',
133
+ default: '',
134
+ })
135
+ //#endregion
136
+ /**
137
+ * last 40 lines of output
138
+ * (combined stdout + stderr)
139
+ */
140
+ ,
141
+ __metadata("design:type", String)
142
+ ], Processes.prototype, "outputLast40lines", void 0);
143
+ __decorate([
144
+ String500Column()
145
+ //#endregion
146
+ /**
147
+ * absolute path to file where stdout + stderr is logged
148
+ */
149
+ ,
150
+ __metadata("design:type", String)
151
+ ], Processes.prototype, "fileLogAbsPath", void 0);
152
+ Processes = __decorate([
153
+ TaonEntity({
154
+ className: 'Processes',
155
+ createTable: true,
156
+ })
157
+ ], Processes);
158
+ export { Processes };
159
+ //# sourceMappingURL=processes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processes.js","sourceRoot":"","sources":[""],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ export declare enum ProcessesState {
2
+ /**
3
+ * Process has not been started yet, only entity exists in the DB
4
+ */
5
+ NOT_STARTED = "not-started",
6
+ /**
7
+ * child_process is being started
8
+ */
9
+ STARTING = "starting",
10
+ /**
11
+ * Process is running and proper processActiveMessages displayed in
12
+ * output (stdout / stderr)
13
+ */
14
+ ACTIVE = "active",
15
+ /**
16
+ * Process is being killed
17
+ */
18
+ KILLING = "killing",
19
+ /**
20
+ * Process killed after being active
21
+ */
22
+ KILLED = "killed",
23
+ /**
24
+ * Process ended with error (exit code different than 0)
25
+ */
26
+ ENDED_WITH_ERROR = "ended-with-error",
27
+ /**
28
+ * Process ended ok (exit code 0)
29
+ */
30
+ ENDED_OK = "ended-ok"
31
+ }
32
+ export declare const ProcessesStatesAllowedStart: ProcessesState[];
33
+ export declare const ProcessesStatesAllowedStop: ProcessesState[];
@@ -0,0 +1,43 @@
1
+ export var ProcessesState;
2
+ (function (ProcessesState) {
3
+ /**
4
+ * Process has not been started yet, only entity exists in the DB
5
+ */
6
+ ProcessesState["NOT_STARTED"] = "not-started";
7
+ /**
8
+ * child_process is being started
9
+ */
10
+ ProcessesState["STARTING"] = "starting";
11
+ /**
12
+ * Process is running and proper processActiveMessages displayed in
13
+ * output (stdout / stderr)
14
+ */
15
+ ProcessesState["ACTIVE"] = "active";
16
+ /**
17
+ * Process is being killed
18
+ */
19
+ ProcessesState["KILLING"] = "killing";
20
+ /**
21
+ * Process killed after being active
22
+ */
23
+ ProcessesState["KILLED"] = "killed";
24
+ /**
25
+ * Process ended with error (exit code different than 0)
26
+ */
27
+ ProcessesState["ENDED_WITH_ERROR"] = "ended-with-error";
28
+ /**
29
+ * Process ended ok (exit code 0)
30
+ */
31
+ ProcessesState["ENDED_OK"] = "ended-ok";
32
+ })(ProcessesState || (ProcessesState = {}));
33
+ export const ProcessesStatesAllowedStart = [
34
+ ProcessesState.NOT_STARTED,
35
+ ProcessesState.KILLED,
36
+ ProcessesState.ENDED_OK,
37
+ ProcessesState.ENDED_WITH_ERROR,
38
+ ];
39
+ export const ProcessesStatesAllowedStop = [
40
+ ProcessesState.STARTING,
41
+ ProcessesState.ACTIVE,
42
+ ];
43
+ //# sourceMappingURL=processes.models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processes.models.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,cA8BX;AA9BD,WAAY,cAAc;IACxB;;OAEG;IACH,6CAA2B,CAAA;IAC3B;;OAEG;IACH,uCAAqB,CAAA;IACrB;;;OAGG;IACH,mCAAiB,CAAA;IACjB;;OAEG;IACH,qCAAmB,CAAA;IACnB;;OAEG;IACH,mCAAiB,CAAA;IACjB;;OAEG;IACH,uDAAqC,CAAA;IACrC;;OAEG;IACH,uCAAqB,CAAA;AACvB,CAAC,EA9BW,cAAc,KAAd,cAAc,QA8BzB;AAED,MAAM,CAAC,MAAM,2BAA2B,GAAqB;IAC3D,cAAc,CAAC,WAAW;IAC1B,cAAc,CAAC,MAAM;IACrB,cAAc,CAAC,QAAQ;IACvB,cAAc,CAAC,gBAAgB;CAChC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAqB;IAC1D,cAAc,CAAC,QAAQ;IACvB,cAAc,CAAC,MAAM;CACtB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { Processes } from './processes';
2
+ import { TaonBaseRepository } from 'taon/lib-prod';
3
+ export declare class ProcessesRepository extends TaonBaseRepository<Processes> {
4
+ entityClassResolveFn: () => typeof Processes;
5
+ private processFileLoggers;
6
+ getByProcessID(processId: number | string): Promise<Processes | null>;
7
+ getByUniqueParams({ cwd, command, }: {
8
+ cwd: string;
9
+ command: string;
10
+ }): Promise<Processes | null>;
11
+ triggerStart(processId: string | number, options?: {
12
+ processName?: string;
13
+ }): Promise<void>;
14
+ triggerStop(processId: string | number, options?: {
15
+ deleteAfterKill?: boolean;
16
+ }): Promise<void>;
17
+ private getAndUpdateProcess;
18
+ }
@@ -0,0 +1,194 @@
1
+ import { TaonRepository } from 'taon/lib-prod';
2
+ import { child_process, dateformat, UtilsProcess__NS__killProcess } from 'tnp-core/lib-prod';
3
+ import { UtilsProcessLogger__NS__ProcessFileLogger } from 'tnp-core/lib-prod';
4
+ import { Processes } from './processes';
5
+ import { TaonBaseRepository } from 'taon/lib-prod';
6
+ import { ProcessesState, ProcessesStatesAllowedStart, ProcessesStatesAllowedStop, } from './processes.models';
7
+ //#endregion
8
+ let ProcessesRepository = class ProcessesRepository extends TaonBaseRepository {
9
+ //#region fields and getters
10
+ entityClassResolveFn = () => Processes;
11
+ processFileLoggers = {};
12
+ //#endregion
13
+ //#region get by process id
14
+ async getByProcessID(processId) {
15
+ //#region @websqlFunc
16
+ const proc = await this.findOne({
17
+ where: {
18
+ id: processId?.toString(),
19
+ },
20
+ });
21
+ return proc;
22
+ //#endregion
23
+ }
24
+ //#endregion
25
+ //#region get by uniquer params
26
+ async getByUniqueParams({ cwd, command, }) {
27
+ //#region @websqlFunc
28
+ const proc = await this.findOne({
29
+ where: {
30
+ cwd,
31
+ command,
32
+ },
33
+ });
34
+ return proc;
35
+ //#endregion
36
+ }
37
+ //#endregion
38
+ //#region start process
39
+ async triggerStart(processId, options) {
40
+ //#region @backendFunc
41
+ options = options || {};
42
+ await this.getAndUpdateProcess(processId, async (proc) => {
43
+ if (!ProcessesStatesAllowedStart.includes(proc.state)) {
44
+ throw new Error(`Process not allowed to start with state: ${proc.state}`);
45
+ }
46
+ //#region prepare process for start
47
+ proc.state = ProcessesState.STARTING;
48
+ proc.outputLast40lines =
49
+ `${proc.outputLast40lines}` +
50
+ `\n----- new session ${dateformat(new Date(), 'dd-mm-yyyy_HH:MM:ss')} -----\n`;
51
+ const [cmd, ...commandArgs] = proc.command.split(' '); // safer: parse properly
52
+ const realProcess = child_process.spawn(cmd, commandArgs, {
53
+ env: { ...process.env, FORCE_COLOR: '1' },
54
+ stdio: ['ignore', 'pipe', 'pipe'], // don't inherit console
55
+ shell: true, // use shell if command has operators (&&, |, etc.)
56
+ });
57
+ proc.pid = realProcess.pid;
58
+ proc.ppid = process.pid;
59
+ //#endregion
60
+ //#region prepare logging
61
+ const processFileLogger = new UtilsProcessLogger__NS__ProcessFileLogger({
62
+ name: options.processName || `unknow-proc-name__id-${proc.id}`,
63
+ id: proc.id,
64
+ }, {
65
+ specialEvent: {
66
+ stderr: (proc.conditionProcessActiveStderr || []).map(stringInStream => ({
67
+ stringInStream,
68
+ callback: async () => {
69
+ await this.getAndUpdateProcess(proc.id, proc1 => {
70
+ proc1.state = ProcessesState.ACTIVE;
71
+ });
72
+ },
73
+ })),
74
+ stdout: (proc.conditionProcessActiveStdout || []).map(stringInStream => ({
75
+ stringInStream,
76
+ callback: async () => {
77
+ await this.getAndUpdateProcess(proc.id, proc1 => {
78
+ proc1.state = ProcessesState.ACTIVE;
79
+ });
80
+ },
81
+ })),
82
+ },
83
+ });
84
+ this.processFileLoggers[proc.id] = processFileLogger;
85
+ processFileLogger.startLogging(realProcess, {
86
+ cacheLinesMax: 40,
87
+ update: async ({ outputLines, stderrLines, stdoutLines }) => {
88
+ await this.getAndUpdateProcess(proc.id, proc1 => {
89
+ proc1.outputLast40lines = outputLines;
90
+ });
91
+ },
92
+ });
93
+ proc.fileLogAbsPath = processFileLogger.processLogAbsFilePath;
94
+ //#endregion
95
+ //#region handle process exit
96
+ /**
97
+ * 15 - soft kill
98
+ * 9 - hard kill
99
+ * 1 - from code exit
100
+ * 0 - process done
101
+ */
102
+ realProcess.on('exit', async (code, data) => {
103
+ await this.getAndUpdateProcess(proc.id, proc1 => {
104
+ if (proc1) {
105
+ if (proc1.state === ProcessesState.KILLING) {
106
+ proc1.state = ProcessesState.KILLED;
107
+ }
108
+ else {
109
+ proc1.state =
110
+ code === 0
111
+ ? ProcessesState.ENDED_OK
112
+ : ProcessesState.ENDED_WITH_ERROR;
113
+ }
114
+ proc1.pid = null;
115
+ }
116
+ delete this.processFileLoggers[proc.id];
117
+ }, {
118
+ skipThrowingErrorWhenNoProcess: true,
119
+ executeCallbackWhenNoProcess: true,
120
+ });
121
+ });
122
+ //#endregion
123
+ });
124
+ //#endregion
125
+ }
126
+ //#endregion
127
+ //#region stop/remove process
128
+ async triggerStop(processId, options) {
129
+ //#region @websqlFunc
130
+ options = options || {};
131
+ await this.getAndUpdateProcess(processId, proc => {
132
+ const alreadyStopped = ProcessesStatesAllowedStart.includes(proc.state);
133
+ if (!alreadyStopped) {
134
+ if (!ProcessesStatesAllowedStop.includes(proc.state)) {
135
+ throw new Error(`Process not allowed to stop with state: ${proc.state}`);
136
+ }
137
+ }
138
+ if (!alreadyStopped) {
139
+ proc.state = ProcessesState.KILLING;
140
+ }
141
+ setTimeout(async () => {
142
+ try {
143
+ await UtilsProcess__NS__killProcess(proc.pid);
144
+ console.info(`Process killed successfully (by pid = ${proc.pid})`);
145
+ }
146
+ catch (error) {
147
+ console.error(`Not able to kill process by pid ${proc.pid}`);
148
+ }
149
+ if (options.deleteAfterKill) {
150
+ try {
151
+ await this.remove(proc);
152
+ }
153
+ catch (error) { }
154
+ }
155
+ }, 1000);
156
+ });
157
+ //#endregion
158
+ }
159
+ //#endregion
160
+ //#region private methods
161
+ //#region private methods / get and update process
162
+ async getAndUpdateProcess(processId,
163
+ /**
164
+ * Callback with process to update
165
+ * (any modifications done in callback will be saved after its end)
166
+ */
167
+ callback, options) {
168
+ //#region @backendFunc
169
+ options = options || {};
170
+ const proc = await this.findOne({
171
+ where: { id: processId?.toString() },
172
+ });
173
+ if (!proc) {
174
+ if (options.skipThrowingErrorWhenNoProcess) {
175
+ if (options.executeCallbackWhenNoProcess) {
176
+ await callback();
177
+ }
178
+ return;
179
+ }
180
+ throw new Error(`No process with id ${processId}`);
181
+ }
182
+ await callback(proc);
183
+ await this.update(proc);
184
+ this.ctx.realtimeServer.triggerEntityPropertyChanges(proc, 'outputLast40lines');
185
+ //#endregion
186
+ }
187
+ };
188
+ ProcessesRepository = __decorate([
189
+ TaonRepository({
190
+ className: 'ProcessesRepository',
191
+ })
192
+ ], ProcessesRepository);
193
+ export { ProcessesRepository };
194
+ //# sourceMappingURL=processes.repository.js.map