@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.
- package/VERIFIED-BUILD-DATA.jsonc +5 -0
- package/assets/shared/shared_folder_info.txt +7 -0
- package/browser/README.md +24 -0
- package/browser/fesm2022/cloud-browser.mjs +3290 -0
- package/browser/fesm2022/cloud-browser.mjs.map +1 -0
- package/browser/package.json +23 -0
- package/browser/types/cloud-browser.d.ts +793 -0
- package/browser-prod/README.md +24 -0
- package/browser-prod/fesm2022/cloud-browser-prod.mjs +3289 -0
- package/browser-prod/fesm2022/cloud-browser-prod.mjs.map +1 -0
- package/browser-prod/package.json +23 -0
- package/browser-prod/types/cloud-browser-prod.d.ts +791 -0
- package/browser-prod.re-export.json +1 -0
- package/browser-prod.split-namespaces.json +10 -0
- package/cli.d.ts +1 -0
- package/cli.js +8 -0
- package/cli.js.map +1 -0
- package/index.d.ts +1 -0
- package/index.js +18 -0
- package/index.js.map +1 -0
- package/lib/build-info._auto-generated_.d.ts +24 -0
- package/lib/build-info._auto-generated_.js +30 -0
- package/lib/build-info._auto-generated_.js.map +1 -0
- package/lib/constants.d.ts +1 -0
- package/lib/constants.js +6 -0
- package/lib/constants.js.map +1 -0
- package/lib/env/env.angular-node-app.d.ts +67 -0
- package/lib/env/env.angular-node-app.js +141 -0
- package/lib/env/env.angular-node-app.js.map +1 -0
- package/lib/env/env.docs-webapp.d.ts +67 -0
- package/lib/env/env.docs-webapp.js +141 -0
- package/lib/env/env.docs-webapp.js.map +1 -0
- package/lib/env/env.electron-app.d.ts +67 -0
- package/lib/env/env.electron-app.js +141 -0
- package/lib/env/env.electron-app.js.map +1 -0
- package/lib/env/env.mobile-app.d.ts +67 -0
- package/lib/env/env.mobile-app.js +141 -0
- package/lib/env/env.mobile-app.js.map +1 -0
- package/lib/env/env.npm-lib-and-cli-tool.d.ts +67 -0
- package/lib/env/env.npm-lib-and-cli-tool.js +141 -0
- package/lib/env/env.npm-lib-and-cli-tool.js.map +1 -0
- package/lib/env/env.vscode-plugin.d.ts +67 -0
- package/lib/env/env.vscode-plugin.js +141 -0
- package/lib/env/env.vscode-plugin.js.map +1 -0
- package/lib/env/index.d.ts +6 -0
- package/lib/env/index.js +23 -0
- package/lib/env/index.js.map +1 -0
- package/lib/index._auto-generated_.d.ts +27 -0
- package/lib/index._auto-generated_.js +49 -0
- package/lib/index._auto-generated_.js.map +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.js +21 -0
- package/lib/index.js.map +1 -0
- package/lib/instances/index.d.ts +5 -0
- package/lib/instances/index.js +22 -0
- package/lib/instances/index.js.map +1 -0
- package/lib/instances/instances-api.service.d.ts +7 -0
- package/lib/instances/instances.context.d.ts +19 -0
- package/lib/instances/instances.context.js +73 -0
- package/lib/instances/instances.context.js.map +1 -0
- package/lib/instances/instances.controller.d.ts +10 -0
- package/lib/instances/instances.controller.js +76 -0
- package/lib/instances/instances.controller.js.map +1 -0
- package/lib/instances/instances.d.ts +9 -0
- package/lib/instances/instances.defaults-values.d.ts +2 -0
- package/lib/instances/instances.defaults-values.js +8 -0
- package/lib/instances/instances.defaults-values.js.map +1 -0
- package/lib/instances/instances.js +52 -0
- package/lib/instances/instances.js.map +1 -0
- package/lib/instances/instances.repository.d.ts +6 -0
- package/lib/instances/instances.repository.js +26 -0
- package/lib/instances/instances.repository.js.map +1 -0
- package/lib/instances/instances.terminal-ui.d.ts +11 -0
- package/lib/instances/instances.terminal-ui.js +158 -0
- package/lib/instances/instances.terminal-ui.js.map +1 -0
- package/lib/instances/instances.worker.d.ts +18 -0
- package/lib/instances/instances.worker.js +46 -0
- package/lib/instances/instances.worker.js.map +1 -0
- package/lib/models.d.ts +8 -0
- package/lib/models.js +13 -0
- package/lib/models.js.map +1 -0
- package/lib/my-organization-proj.d.ts +1 -0
- package/lib/my-organization-proj.js +6 -0
- package/lib/my-organization-proj.js.map +1 -0
- package/lib/package.json +4 -0
- package/lib/processes/index.d.ts +5 -0
- package/lib/processes/index.js +22 -0
- package/lib/processes/index.js.map +1 -0
- package/lib/processes/processes-api.service.d.ts +5 -0
- package/lib/processes/processes.context.d.ts +19 -0
- package/lib/processes/processes.context.js +24 -0
- package/lib/processes/processes.context.js.map +1 -0
- package/lib/processes/processes.controller.d.ts +13 -0
- package/lib/processes/processes.controller.js +183 -0
- package/lib/processes/processes.controller.js.map +1 -0
- package/lib/processes/processes.d.ts +24 -0
- package/lib/processes/processes.defaults-values.d.ts +2 -0
- package/lib/processes/processes.defaults-values.js +9 -0
- package/lib/processes/processes.defaults-values.js.map +1 -0
- package/lib/processes/processes.js +171 -0
- package/lib/processes/processes.js.map +1 -0
- package/lib/processes/processes.models.d.ts +33 -0
- package/lib/processes/processes.models.js +46 -0
- package/lib/processes/processes.models.js.map +1 -0
- package/lib/processes/processes.repository.d.ts +18 -0
- package/lib/processes/processes.repository.js +203 -0
- package/lib/processes/processes.repository.js.map +1 -0
- package/lib/processes/processes.terminal-ui.d.ts +19 -0
- package/lib/processes/processes.terminal-ui.js +382 -0
- package/lib/processes/processes.terminal-ui.js.map +1 -0
- package/lib/processes/processes.utils.d.ts +6 -0
- package/lib/processes/processes.utils.js +86 -0
- package/lib/processes/processes.utils.js.map +1 -0
- package/lib/processes/processes.worker.controller.d.ts +3 -0
- package/lib/processes/processes.worker.controller.js +22 -0
- package/lib/processes/processes.worker.controller.js.map +1 -0
- package/lib/processes/processes.worker.d.ts +18 -0
- package/lib/processes/processes.worker.js +56 -0
- package/lib/processes/processes.worker.js.map +1 -0
- package/lib/start-cli.d.ts +7 -0
- package/lib/start-cli.js +46 -0
- package/lib/start-cli.js.map +1 -0
- package/lib/traefik/traefik.models.d.ts +20 -0
- package/lib/traefik/traefik.models.js +3 -0
- package/lib/traefik/traefik.models.js.map +1 -0
- package/lib/traefik/traefik.provider.d.ts +42 -0
- package/lib/traefik/traefik.provider.js +579 -0
- package/lib/traefik/traefik.provider.js.map +1 -0
- package/lib/traefik/treafik-service.provider.d.ts +41 -0
- package/lib/traefik/treafik-service.provider.js +215 -0
- package/lib/traefik/treafik-service.provider.js.map +1 -0
- package/lib-prod/build-info._auto-generated_.d.ts +24 -0
- package/lib-prod/build-info._auto-generated_.js +27 -0
- package/lib-prod/build-info._auto-generated_.js.map +1 -0
- package/lib-prod/constants.d.ts +1 -0
- package/lib-prod/constants.js +3 -0
- package/lib-prod/constants.js.map +1 -0
- package/lib-prod/env/env.angular-node-app.d.ts +67 -0
- package/lib-prod/env/env.angular-node-app.js +137 -0
- package/lib-prod/env/env.angular-node-app.js.map +1 -0
- package/lib-prod/env/env.docs-webapp.d.ts +67 -0
- package/lib-prod/env/env.docs-webapp.js +137 -0
- package/lib-prod/env/env.docs-webapp.js.map +1 -0
- package/lib-prod/env/env.electron-app.d.ts +67 -0
- package/lib-prod/env/env.electron-app.js +137 -0
- package/lib-prod/env/env.electron-app.js.map +1 -0
- package/lib-prod/env/env.mobile-app.d.ts +67 -0
- package/lib-prod/env/env.mobile-app.js +137 -0
- package/lib-prod/env/env.mobile-app.js.map +1 -0
- package/lib-prod/env/env.npm-lib-and-cli-tool.d.ts +67 -0
- package/lib-prod/env/env.npm-lib-and-cli-tool.js +137 -0
- package/lib-prod/env/env.npm-lib-and-cli-tool.js.map +1 -0
- package/lib-prod/env/env.vscode-plugin.d.ts +67 -0
- package/lib-prod/env/env.vscode-plugin.js +137 -0
- package/lib-prod/env/env.vscode-plugin.js.map +1 -0
- package/lib-prod/env/index.d.ts +6 -0
- package/lib-prod/env/index.js +7 -0
- package/lib-prod/env/index.js.map +1 -0
- package/lib-prod/index._auto-generated_.d.ts +25 -0
- package/lib-prod/index._auto-generated_.js +33 -0
- package/lib-prod/index._auto-generated_.js.map +1 -0
- package/lib-prod/index.d.ts +4 -0
- package/lib-prod/index.js +5 -0
- package/lib-prod/index.js.map +1 -0
- package/lib-prod/instances/index.d.ts +4 -0
- package/lib-prod/instances/index.js +6 -0
- package/lib-prod/instances/index.js.map +1 -0
- package/lib-prod/instances/instances.context.d.ts +19 -0
- package/lib-prod/instances/instances.context.js +64 -0
- package/lib-prod/instances/instances.context.js.map +1 -0
- package/lib-prod/instances/instances.controller.d.ts +10 -0
- package/lib-prod/instances/instances.controller.js +61 -0
- package/lib-prod/instances/instances.controller.js.map +1 -0
- package/lib-prod/instances/instances.d.ts +9 -0
- package/lib-prod/instances/instances.defaults-values.d.ts +2 -0
- package/lib-prod/instances/instances.defaults-values.js +5 -0
- package/lib-prod/instances/instances.defaults-values.js.map +1 -0
- package/lib-prod/instances/instances.js +40 -0
- package/lib-prod/instances/instances.js.map +1 -0
- package/lib-prod/instances/instances.repository.d.ts +6 -0
- package/lib-prod/instances/instances.repository.js +17 -0
- package/lib-prod/instances/instances.repository.js.map +1 -0
- package/lib-prod/instances/instances.terminal-ui.d.ts +11 -0
- package/lib-prod/instances/instances.terminal-ui.js +154 -0
- package/lib-prod/instances/instances.terminal-ui.js.map +1 -0
- package/lib-prod/instances/instances.worker.d.ts +18 -0
- package/lib-prod/instances/instances.worker.js +42 -0
- package/lib-prod/instances/instances.worker.js.map +1 -0
- package/lib-prod/models.d.ts +8 -0
- package/lib-prod/models.js +10 -0
- package/lib-prod/models.js.map +1 -0
- package/lib-prod/my-organization-proj.d.ts +1 -0
- package/lib-prod/my-organization-proj.js +3 -0
- package/lib-prod/my-organization-proj.js.map +1 -0
- package/lib-prod/package.json +4 -0
- package/lib-prod/processes/index.d.ts +4 -0
- package/lib-prod/processes/index.js +6 -0
- package/lib-prod/processes/index.js.map +1 -0
- package/lib-prod/processes/processes.context.d.ts +19 -0
- package/lib-prod/processes/processes.context.js +21 -0
- package/lib-prod/processes/processes.context.js.map +1 -0
- package/lib-prod/processes/processes.controller.d.ts +13 -0
- package/lib-prod/processes/processes.controller.js +168 -0
- package/lib-prod/processes/processes.controller.js.map +1 -0
- package/lib-prod/processes/processes.d.ts +24 -0
- package/lib-prod/processes/processes.defaults-values.d.ts +2 -0
- package/lib-prod/processes/processes.defaults-values.js +6 -0
- package/lib-prod/processes/processes.defaults-values.js.map +1 -0
- package/lib-prod/processes/processes.js +159 -0
- package/lib-prod/processes/processes.js.map +1 -0
- package/lib-prod/processes/processes.models.d.ts +33 -0
- package/lib-prod/processes/processes.models.js +43 -0
- package/lib-prod/processes/processes.models.js.map +1 -0
- package/lib-prod/processes/processes.repository.d.ts +18 -0
- package/lib-prod/processes/processes.repository.js +194 -0
- package/lib-prod/processes/processes.repository.js.map +1 -0
- package/lib-prod/processes/processes.terminal-ui.d.ts +19 -0
- package/lib-prod/processes/processes.terminal-ui.js +378 -0
- package/lib-prod/processes/processes.terminal-ui.js.map +1 -0
- package/lib-prod/processes/processes.utils.d.ts +4 -0
- package/lib-prod/processes/processes.utils.js +82 -0
- package/lib-prod/processes/processes.utils.js.map +1 -0
- package/lib-prod/processes/processes.worker.controller.d.ts +3 -0
- package/lib-prod/processes/processes.worker.controller.js +13 -0
- package/lib-prod/processes/processes.worker.controller.js.map +1 -0
- package/lib-prod/processes/processes.worker.d.ts +18 -0
- package/lib-prod/processes/processes.worker.js +52 -0
- package/lib-prod/processes/processes.worker.js.map +1 -0
- package/lib-prod/start-cli.d.ts +7 -0
- package/lib-prod/start-cli.js +43 -0
- package/lib-prod/start-cli.js.map +1 -0
- package/lib-prod/traefik/traefik.models.d.ts +20 -0
- package/lib-prod/traefik/traefik.models.js +2 -0
- package/lib-prod/traefik/traefik.models.js.map +1 -0
- package/lib-prod/traefik/traefik.provider.d.ts +42 -0
- package/lib-prod/traefik/traefik.provider.js +575 -0
- package/lib-prod/traefik/traefik.provider.js.map +1 -0
- package/lib-prod/traefik/treafik-service.provider.d.ts +41 -0
- package/lib-prod/traefik/treafik-service.provider.js +211 -0
- package/lib-prod/traefik/treafik-service.provider.js.map +1 -0
- package/lib-prod.re-export.json +1 -0
- package/lib-prod.split-namespaces.json +10 -0
- package/package.json +36 -0
- package/scss/global.scss +93 -0
- package/scss/index.scss +2 -0
- package/scss/lib/index.scss +1 -0
- package/scss/vars.scss +7 -0
- package/src.d.ts +6 -0
- package/src.js +20 -0
- package/websql/README.md +24 -0
- package/websql/fesm2022/cloud-websql.mjs +3385 -0
- package/websql/fesm2022/cloud-websql.mjs.map +1 -0
- package/websql/package.json +23 -0
- package/websql/types/cloud-websql.d.ts +793 -0
- package/websql-prod/README.md +24 -0
- package/websql-prod/fesm2022/cloud-websql-prod.mjs +3384 -0
- package/websql-prod/fesm2022/cloud-websql-prod.mjs.map +1 -0
- package/websql-prod/package.json +23 -0
- package/websql-prod/types/cloud-websql-prod.d.ts +791 -0
- package/websql-prod.re-export.json +1 -0
- 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 @@
|
|
|
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
|