@nsshunt/stsappframework 3.1.234 → 3.1.236

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 (51) hide show
  1. package/.github/workflows/npm-publish.yml +18 -29
  2. package/build.sh +12 -6
  3. package/eslint.config.mjs +7 -0
  4. package/package.json +11 -14
  5. package/.eslintrc.json +0 -27
  6. package/babel.config.json +0 -6
  7. package/dist/commonTypes.js +0 -69
  8. package/dist/commonTypes.js.map +0 -1
  9. package/dist/controller/stscontrollerbase.js +0 -14
  10. package/dist/controller/stscontrollerbase.js.map +0 -1
  11. package/dist/controller/stslatencycontroller.js +0 -28
  12. package/dist/controller/stslatencycontroller.js.map +0 -1
  13. package/dist/index.js.map +0 -1
  14. package/dist/logger/stsTransportLoggerWinston.js +0 -22
  15. package/dist/logger/stsTransportLoggerWinston.js.map +0 -1
  16. package/dist/logger/stsTransportWinston.js +0 -43
  17. package/dist/logger/stsTransportWinston.js.map +0 -1
  18. package/dist/middleware/serverNetworkMiddleware.js +0 -199
  19. package/dist/middleware/serverNetworkMiddleware.js.map +0 -1
  20. package/dist/network.js +0 -38
  21. package/dist/network.js.map +0 -1
  22. package/dist/process/masterprocessbase.js +0 -558
  23. package/dist/process/masterprocessbase.js.map +0 -1
  24. package/dist/process/processbase.js +0 -411
  25. package/dist/process/processbase.js.map +0 -1
  26. package/dist/process/serverprocessbase.js +0 -401
  27. package/dist/process/serverprocessbase.js.map +0 -1
  28. package/dist/process/singleprocessbase.js +0 -55
  29. package/dist/process/singleprocessbase.js.map +0 -1
  30. package/dist/process/workerprocessbase.js +0 -210
  31. package/dist/process/workerprocessbase.js.map +0 -1
  32. package/dist/publishertransports/publishTransportUtils.js +0 -47
  33. package/dist/publishertransports/publishTransportUtils.js.map +0 -1
  34. package/dist/route/stslatencyroute.js +0 -15
  35. package/dist/route/stslatencyroute.js.map +0 -1
  36. package/dist/route/stsrouterbase.js +0 -21
  37. package/dist/route/stsrouterbase.js.map +0 -1
  38. package/dist/stsexpressserver.js +0 -115
  39. package/dist/stsexpressserver.js.map +0 -1
  40. package/dist/validation/errors.js +0 -10
  41. package/dist/validation/errors.js.map +0 -1
  42. package/dist/vitesttesting/appConfig.js +0 -93
  43. package/dist/vitesttesting/appConfig.js.map +0 -1
  44. package/dist/vitesttesting/appSingleWSS.js +0 -122
  45. package/dist/vitesttesting/appSingleWSS.js.map +0 -1
  46. package/dist/vitesttesting/server.js +0 -15
  47. package/dist/vitesttesting/server.js.map +0 -1
  48. package/dist/vitesttesting/singleservertest.test.js +0 -286
  49. package/dist/vitesttesting/singleservertest.test.js.map +0 -1
  50. package/dist/vitesttesting/wsevents.js +0 -3
  51. package/dist/vitesttesting/wsevents.js.map +0 -1
@@ -1,401 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ServerProcessBase = void 0;
7
- /* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF
8
- const chalk_1 = __importDefault(require("chalk"));
9
- const stsconfig_1 = require("@nsshunt/stsconfig");
10
- const node_fs_1 = __importDefault(require("node:fs"));
11
- const stsutils_1 = require("@nsshunt/stsutils");
12
- const processbase_1 = require("./processbase");
13
- const prom_client_1 = require("prom-client");
14
- const node_https_1 = require("node:https");
15
- const node_http_1 = require("node:http");
16
- const node_tls_1 = __importDefault(require("node:tls"));
17
- const socket_io_1 = require("socket.io");
18
- const stsexpressserver_1 = require("./../stsexpressserver");
19
- const cluster_adapter_1 = require("@socket.io/cluster-adapter");
20
- const redis_streams_adapter_1 = require("@socket.io/redis-streams-adapter");
21
- //import { ClusterAdapterWithHeartbeat } from 'socket.io-adaptor';
22
- //import { createAdapter } from "@socket.io/redis-adapter";
23
- const redis_1 = require("redis");
24
- const jayson_1 = __importDefault(require("jayson"));
25
- const stsTransportLoggerWinston_1 = require("./../logger/stsTransportLoggerWinston");
26
- /**
27
- * todo
28
- * @typedef {Object} options - todo
29
- * @property {boolean} [wssServer=false] - Create a web socket server on this worker instance
30
- */
31
- class ServerProcessBase extends processbase_1.ProcessBase {
32
- #masterProcessExitTime = stsconfig_1.goptions.masterProcessExitTime;
33
- #io = null;
34
- #redisClient = null;
35
- #httpServer = null;
36
- #expressServer = null;
37
- #sockets = [];
38
- #shuttingDown = false;
39
- constructor(options) {
40
- super(options);
41
- }
42
- get httpServer() {
43
- return this.#httpServer;
44
- }
45
- get io() {
46
- return this.#io;
47
- }
48
- get expressServer() {
49
- return this.#expressServer;
50
- }
51
- set expressServer(val) {
52
- this.#expressServer = val;
53
- }
54
- // Setup server to Prometheus scrapes:
55
- #SetupPrometheusEndPoints = (expressServer) => {
56
- // AggregatorRegistry is required here in the worker as well as the master in order for prom-client to work correctly.
57
- new prom_client_1.AggregatorRegistry();
58
- const prefix = 'sts_';
59
- (0, prom_client_1.collectDefaultMetrics)({
60
- labels: { NODE_APP_INSTANCE: process.pid },
61
- prefix: prefix
62
- });
63
- const c = new prom_client_1.Counter({
64
- name: 'sts_test_counter',
65
- help: 'Example of a counter',
66
- labelNames: ['code'],
67
- });
68
- setInterval(() => {
69
- c.inc({ code: 200 });
70
- }, 1000).unref();
71
- setInterval(() => {
72
- c.inc({ code: 400 });
73
- c.inc({ code: 'worker_' + process.pid });
74
- }, 500).unref();
75
- expressServer.get('/metrics', async (req, res) => {
76
- try {
77
- res.set('Content-Type', prom_client_1.register.contentType);
78
- res.end(await prom_client_1.register.metrics());
79
- }
80
- catch (ex) {
81
- res.status(500).end(ex);
82
- }
83
- });
84
- expressServer.get('/metrics/counter', async (req, res) => {
85
- try {
86
- res.set('Content-Type', prom_client_1.register.contentType);
87
- res.end(await prom_client_1.register.getSingleMetricAsString('test_counter'));
88
- }
89
- catch (ex) {
90
- res.status(500).end(ex);
91
- }
92
- });
93
- };
94
- #SetupTLSServer = async (socket) => {
95
- // Add a 'close' event handler to this instance of socket
96
- this.LogInfoMessage('CONNECTED: ' + socket.remoteAddress + ':' + socket.remotePort + ' ' + process.pid);
97
- this.#sockets.push(socket);
98
- //const self = this;
99
- socket.on('close', (data) => {
100
- const index = this.#sockets.findIndex(function (o) {
101
- return o.remoteAddress === socket.remoteAddress && o.remotePort === socket.remotePort;
102
- });
103
- if (index !== -1)
104
- this.#sockets.splice(index, 1);
105
- this.LogInfoMessage('CLOSED: ' + socket.remoteAddress + ' ' + socket.remotePort + ' ' + process.pid);
106
- });
107
- socket.on('data', (data) => {
108
- this.LogInfoMessage('DATA ' + socket.remoteAddress + ': ' + socket.remotePort + ': ' + data);
109
- socket.write(socket.remoteAddress + ':' + socket.remotePort + " said " + data + '\n');
110
- // Write the data back to all the connected, the client will receive it as data from the server
111
- /*
112
- self.#sockets.forEach(function(socket, index, array) {
113
- socket.write(socket.remoteAddress + ':' + socket.remotePort + " said " + data + '\n');
114
- });
115
-
116
- */
117
- });
118
- };
119
- #SetupRPCServer = async (socket) => {
120
- this.LogInfoMessage('CONNECTED: ' + socket.remoteAddress + ':' + socket.remotePort + ' ' + process.pid);
121
- socket.on('close', (data) => {
122
- this.LogInfoMessage('CLOSED: ' + socket.remoteAddress + ' ' + socket.remotePort + ' ' + process.pid);
123
- });
124
- socket.on('data', (data) => {
125
- this.LogInfoMessage('DATA ' + socket.remoteAddress + ': ' + data);
126
- });
127
- };
128
- #SetupWSSServer = async () => {
129
- // socket.io
130
- // WebSocket
131
- const options = {
132
- transports: ["websocket"] // or [ "websocket", "polling" ] (to use long-poolling. Note that the order matters)
133
- // The default path is /socket.io
134
- // This can be changed with the path option as shown below
135
- //,path: '/zzz'
136
- };
137
- //this.#io = require("socket.io")(this.#httpServer, options);
138
- this.#io = new socket_io_1.Server(this.#httpServer, options);
139
- if (this.options.useSocketIoRedisAdaptor) {
140
- this.LogInfoMessage(`Using Redis for socket.io cluster management (worker)`);
141
- if (this.options.socketIoRedisAdaptorUrl) {
142
- this.LogInfoMessage(`Redis url: [${this.options.socketIoRedisAdaptorUrl}]`);
143
- this.#redisClient = (0, redis_1.createClient)({ url: this.options.socketIoRedisAdaptorUrl });
144
- }
145
- else {
146
- this.LogInfoMessage(`Redis url: [localhost]`);
147
- this.#redisClient = (0, redis_1.createClient)();
148
- }
149
- await this.#redisClient.connect();
150
- //this.#redisClient = new Redis(this.options.socketIoRedisAdaptorUrl as string);
151
- this.#io.adapter((0, redis_streams_adapter_1.createAdapter)(this.#redisClient));
152
- this.LogInfoMessage(`Redis successfully connected.`);
153
- }
154
- else {
155
- if (this.options.clusterMode) {
156
- this.#io.adapter((0, cluster_adapter_1.createAdapter)());
157
- this.LogInfoMessage(`Using nodejs cluster mode for socket.io cluster management`);
158
- }
159
- else {
160
- this.LogInfoMessage(`Not using any adaptors for socket.io cluster management.}`);
161
- }
162
- }
163
- // To use a seperate socket server, the code below can be applied.
164
- // this.#io = require("socket.io")(options);
165
- // this.#io.adapter(createAdapter());
166
- // this.#io.listen(3006);
167
- this.#io.engine.on("connection_error", (err) => {
168
- this.LogInfoMessage(err.req); // the request object
169
- this.LogInfoMessage(err.code); // the error code, for example 1
170
- this.LogInfoMessage(err.message); // the error message, for example "Session ID unknown"
171
- this.LogInfoMessage(err.context); // some additional error context
172
- });
173
- };
174
- #GetTLSOptions = () => {
175
- return {
176
- key: node_fs_1.default.readFileSync(this.options.httpsServerKeyPath),
177
- cert: node_fs_1.default.readFileSync(this.options.httpsServerCertificatePath)
178
- };
179
- };
180
- #SetupExpressServer = async (useTls) => {
181
- if (useTls) {
182
- this.#httpServer = (0, node_https_1.createServer)(this.#GetTLSOptions(), this.#expressServer.App);
183
- }
184
- else {
185
- this.#httpServer = (0, node_http_1.createServer)(this.#expressServer.App);
186
- }
187
- if (this.options.prometheusSupport === true) {
188
- this.#SetupPrometheusEndPoints(this.#expressServer.App);
189
- }
190
- if (this.options.wssServer === true) {
191
- await this.#SetupWSSServer();
192
- }
193
- // https://stackoverflow.com/questions/21342828/node-express-unix-domain-socket-permissions
194
- //@@httpServer.listen('/tmp/stsrest01.sock').on('listening', () =>
195
- //@@httpServer.listen('/var/run/sts/stsrest01.sock').on('listening', () =>
196
- this.#httpServer.listen(this.options.listenPort, () => {
197
- //@@chmodSync(this.options.port, 511);
198
- }).on('listening', () => {
199
- this.LogInfoMessage(`live on ${this.options.endpoint}:${this.options.listenPort}${this.options.apiRoot}`);
200
- });
201
- };
202
- #SetupTCPRawServer = async () => {
203
- // The second parameter is the automatic listener for the secureConnection event from the tls.Server class
204
- this.#httpServer = node_tls_1.default.createServer(this.#GetTLSOptions(), this.#SetupTLSServer);
205
- this.#httpServer.listen(this.options.listenPort, 'stscore.stsmda.org', () => {
206
- this.LogInfoMessage('TCP Server is running on port ' + this.options.listenPort + '.');
207
- }).on('listening', () => {
208
- this.LogInfoMessage(`TCP live on ${this.options.endpoint}:${this.options.listenPort}${this.options.apiRoot}`);
209
- });
210
- };
211
- #SetupJSONRPCServer = async () => {
212
- const jaysonServer = new jayson_1.default.server();
213
- // Supported methods here - move somewhere else ...
214
- jaysonServer.method("add", function (args, callback) {
215
- callback(null, args[0] + args[1]);
216
- });
217
- this.#httpServer = jaysonServer.tls(this.#GetTLSOptions());
218
- this.#httpServer.on('secureConnection', this.#SetupRPCServer);
219
- this.#httpServer.listen(this.options.listenPort, 'stscore.stsmda.org', () => {
220
- this.LogInfoMessage('JSON RPC 2.0 Server is running on port ' + this.options.listenPort + '.');
221
- }).on('listening', () => {
222
- this.LogInfoMessage(`JSON RPC 2.0 live on ${this.options.endpoint}:${this.options.listenPort}${this.options.apiRoot}`);
223
- });
224
- };
225
- get shuttingDown() {
226
- return this.#shuttingDown;
227
- }
228
- TerminateSocketIO = async () => {
229
- if (this.options.wssServer === true && this.#io !== null) {
230
- const logPrefix = `ServerProcessBase:TerminateSockets():${process.pid}:`;
231
- this.LogInfoMessage(`${logPrefix} Disconnect SocketIO Sockets.`);
232
- await (0, stsutils_1.Sleep)(250);
233
- await this.#io?.of('/').adapter.close();
234
- if (this.socketIoServerHelper !== null) {
235
- await this.socketIoServerHelper.CloseAdaptors();
236
- await (0, stsutils_1.Sleep)(50);
237
- if (this.#redisClient) {
238
- this.#redisClient.disconnect();
239
- await (0, stsutils_1.Sleep)(50);
240
- }
241
- this.LogInfoMessage(`${logPrefix} this.socketIoServerHelper.DisconnectSockets()`);
242
- await this.socketIoServerHelper.DisconnectSockets();
243
- }
244
- else {
245
- this.LogInfoMessage(`${logPrefix} this.#io.disconnectSockets()`);
246
- if (this.#redisClient) {
247
- this.#redisClient.disconnect();
248
- await (0, stsutils_1.Sleep)(50);
249
- }
250
- this.#io.disconnectSockets();
251
- }
252
- this.socketIoServerHelper = null;
253
- this.#io = null;
254
- }
255
- };
256
- TerminateHTTPServer = async () => {
257
- const logPrefix = `ServerProcessBase:TerminateHTTPServer():${process.pid}:`;
258
- if (this.#httpServer !== null) {
259
- if (stsconfig_1.goptions.STSServerType.localeCompare('TCPRAW_TLS') === 0) {
260
- this.#sockets.forEach((socket, index, array) => {
261
- this.LogInfoMessage(chalk_1.default.yellow(`${logPrefix} TCP Socket destroy, remote address: [${socket.remoteAddress}], remote port: [${socket.remotePort}]`));
262
- socket.destroy();
263
- //socket.end();
264
- });
265
- }
266
- this.LogInfoMessage(`${logPrefix} Closing httpServer.`);
267
- await this.#httpServer.close();
268
- this.#httpServer = null;
269
- }
270
- };
271
- // Terminate in order;
272
- // forked worker threads (send signal)
273
- // De-Register service
274
- // systeminformation observers
275
- // instrument timers (gauge etc.)
276
- // publisher
277
- // terminate UI (if loaded)
278
- Terminate = async (clusterPerformExit, signal) => {
279
- const logPrefix = `ServerProcessBase:Terminate():${process.pid}:`;
280
- if (this.#shuttingDown === false) {
281
- this.#shuttingDown = true;
282
- if (signal) {
283
- this.LogInfoMessage(this.GetSignalColour(signal)(`${logPrefix} Received signal: ${signal}`));
284
- }
285
- else {
286
- this.LogInfoMessage(this.GetSignalColour(null)(`${logPrefix} Received Terminate without signal.`));
287
- }
288
- await this.ProcessTerminate();
289
- this.TerminateUIController();
290
- await this.TerminateSocketIO();
291
- await this.TerminateHTTPServer();
292
- await this.TerminateDatabase();
293
- // Output final messages here (before TerminateInstrumentController)
294
- if (this.options.clusterMode) {
295
- this.LogInfoMessage(`${logPrefix} clusterPerformExit value: [${clusterPerformExit}]`);
296
- if (clusterPerformExit) {
297
- this.LogInfoMessage(`${logPrefix} Process will self terminate with process.exit(0).`);
298
- }
299
- else {
300
- this.LogInfoMessage(`${logPrefix} Child process will not self terminate. Terminate will be handled by master process.`);
301
- }
302
- }
303
- this.TerminateInstrumentController();
304
- //@@ always return here appears to always cleanly exit
305
- // and cleanly exit from socket.io cluster adaptor
306
- // without return here, socket.io cluster adaptor terminates in an error state
307
- // as the implementation relies on cluster.on to send messages to worker threads
308
- // but these have already been closed from the process.exit(0) below.
309
- await (0, stsutils_1.Sleep)(1000); // Allow socket.io time to clean-up
310
- if (this.options.clusterMode === true) {
311
- if (clusterPerformExit === true) {
312
- setTimeout(() => {
313
- process.exit(0);
314
- }, 0);
315
- }
316
- }
317
- else {
318
- this.ProcessExit(this.#masterProcessExitTime);
319
- }
320
- }
321
- else {
322
- this.LogInfoMessage(`${logPrefix} Process already terminating.`);
323
- }
324
- };
325
- async SetupServer() {
326
- return new Promise((resolve, reject) => {
327
- try {
328
- this.SetupInstrumentation();
329
- setTimeout(async () => {
330
- try {
331
- await this.SetupServerEx();
332
- resolve(true);
333
- }
334
- catch (error) {
335
- reject(error);
336
- }
337
- }, 100);
338
- }
339
- catch (error) {
340
- reject(error);
341
- }
342
- });
343
- }
344
- ProcessStarted() {
345
- const transport = new stsTransportLoggerWinston_1.STSTransportLoggerWinston({
346
- stsApp: this
347
- });
348
- setTimeout(() => {
349
- this.options.logger.add(transport);
350
- }, 0);
351
- }
352
- async SetupServerEx() {
353
- this.LogInfoMessage(chalk_1.default.green(`ServerProcessBase:SetupServerEx(): Main Process:${process.pid} Starting ...`));
354
- this.ProcessStartup();
355
- if (this.options.expressServerRouteFactory || this.options.expressServerRouteStaticFactory) {
356
- this.expressServer = new stsexpressserver_1.STSExpressServer(this.options, this);
357
- }
358
- this.LogInfoMessage(`ServerProcessBase:SetupServerEx(): Worker instance starting. Service instance Id: [${this.options.serviceInstanceId}]`);
359
- // Signal Codes
360
- // https://en.wikipedia.org/wiki/Signal_(IPC)
361
- process.on('SIGTERM', async () => {
362
- this.LogInfoMessage(`ServerProcessBase:SetupServerEx(): SIGTERM signal received for worker: ${process.pid}`);
363
- await this.Terminate(true, true);
364
- });
365
- process.on('SIGINT', async () => {
366
- this.LogInfoMessage(`ServerProcessBase:SetupServerEx(): SIGINT signal received for worker: ${process.pid}`);
367
- await this.Terminate(true, true);
368
- });
369
- process.on('exit', (code) => {
370
- if (code === 0) {
371
- this.LogInfoMessage(chalk_1.default.green(`ServerProcessBase:SetupServerEx(): Process: ${process.pid} terminated gracefully with code: ${code}`));
372
- }
373
- else {
374
- this.LogInfoMessage(chalk_1.default.red(`ServerProcessBase:SetupServerEx(): Process: ${process.pid} terminated with code: ${code}`));
375
- }
376
- });
377
- await this.SetupSTSServer();
378
- this.ProcessStarted();
379
- this.LogInfoMessage(chalk_1.default.green(`ServerProcessBase:SetupServerEx(): Main Process:${process.pid} Started`));
380
- return true;
381
- }
382
- ;
383
- SetupSTSServer = async () => {
384
- switch (stsconfig_1.goptions.STSServerType) {
385
- case 'EXPRESS':
386
- await this.#SetupExpressServer(false);
387
- break;
388
- case 'EXPRESS_TLS':
389
- await this.#SetupExpressServer(true);
390
- break;
391
- case 'TCPRAW_TLS':
392
- await this.#SetupTCPRawServer();
393
- break;
394
- case 'JSONRPC2_TLS':
395
- await this.#SetupJSONRPCServer();
396
- break;
397
- }
398
- };
399
- }
400
- exports.ServerProcessBase = ServerProcessBase;
401
- //# sourceMappingURL=serverprocessbase.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serverprocessbase.js","sourceRoot":"","sources":["../../src/process/serverprocessbase.ts"],"names":[],"mappings":"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"}
@@ -1,55 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.SingleProcessBase = void 0;
7
- /* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF
8
- const stsconfig_1 = require("@nsshunt/stsconfig");
9
- const stsobservability_1 = require("@nsshunt/stsobservability");
10
- const serverprocessbase_1 = require("./serverprocessbase");
11
- const systeminformation_1 = __importDefault(require("systeminformation")); // https://systeminformation.io/
12
- class SingleProcessBase extends serverprocessbase_1.ServerProcessBase {
13
- /**
14
- *
15
- * @param {SingleProcessBaseOptions} options
16
- */
17
- constructor(options) {
18
- super(options);
19
- }
20
- CollectAdditionalTelemetry() {
21
- const siValueObject = {
22
- currentLoad: 'currentLoad'
23
- };
24
- systeminformation_1.default.get(siValueObject).then(data => {
25
- this.UpdateInstrument(stsobservability_1.Gauge.CPU_SYSTEM_LOAD_GAUGE, {
26
- val: data.currentLoad.currentLoad
27
- });
28
- });
29
- }
30
- GetAdditionalInstruments() {
31
- return [
32
- [stsobservability_1.Gauge.CPU_SYSTEM_LOAD_GAUGE, stsobservability_1.GaugeTypes.INSTRUMENT_GAUGE, {
33
- interval: stsconfig_1.goptions.instrumentationObservationInterval,
34
- sampleSize: stsconfig_1.goptions.instrumentationTimeWindow
35
- }]
36
- ];
37
- }
38
- /**
39
- * UIController (instance of UIController) to manage a console based user interface associated for this node application.
40
- * @returns UIController instance to manage a console based user interface associated for this node application. Null for no capability.
41
- */
42
- GetUIController() {
43
- return null;
44
- }
45
- SetupServerEx = async () => {
46
- await super.SetupServerEx();
47
- this.LogSystemTelemetry();
48
- return true;
49
- };
50
- async TerminateApplication() {
51
- await this.Terminate(false, 'SIGINT');
52
- }
53
- }
54
- exports.SingleProcessBase = SingleProcessBase;
55
- //# sourceMappingURL=singleprocessbase.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"singleprocessbase.js","sourceRoot":"","sources":["../../src/process/singleprocessbase.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAkD,CAAE,UAAU;AAC9D,kDAA6C;AAE7C,gEAA+G;AAI/G,2DAAuD;AAEvD,0EAAkC,CAAC,gCAAgC;AAInE,MAAa,iBAAkB,SAAQ,qCAAiB;IAEpD;;;OAGA;IACA,YAAY,OAAuB;QAC/B,KAAK,CAAC,OAAO,CAAC,CAAA;IAClB,CAAC;IAEQ,0BAA0B;QAC/B,MAAM,aAAa,GAAG;YAClB,WAAW,EAAE,aAAa;SAC7B,CAAA;QACD,2BAAE,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC9B,IAAI,CAAC,gBAAgB,CAAC,wBAAK,CAAC,qBAAqB,EAAE;gBAC/C,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW;aACR,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACP,CAAC;IAEQ,wBAAwB;QAC7B,OAAO;YACH,CAAE,wBAAK,CAAC,qBAAqB,EAAE,6BAAU,CAAC,gBAAgB,EAAE;oBACxD,QAAQ,EAAE,oBAAQ,CAAC,kCAAkC;oBACrD,UAAU,EAAE,oBAAQ,CAAC,yBAAyB;iBACvB,CAAC;SAC/B,CAAA;IACL,CAAC;IAED;;;OAGA;IACS,eAAe;QACpB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEQ,aAAa,GAAG,KAAK,IAAsB,EAAE;QAClD,MAAM,KAAK,CAAC,aAAa,EAAE,CAAC;QAE5B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,OAAO,IAAI,CAAC;IAChB,CAAC,CAAA;IAED,KAAK,CAAC,oBAAoB;QACtB,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC1C,CAAC;CACJ;AAjDD,8CAiDC"}