@powerlines/engine 0.44.0 → 0.44.2
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/dist/_internal/worker.cjs +186 -169
- package/dist/_internal/worker.d.cts.map +1 -1
- package/dist/_internal/worker.d.mts.map +1 -1
- package/dist/_internal/worker.mjs +187 -170
- package/dist/_internal/worker.mjs.map +1 -1
- package/dist/api.cjs +7 -7
- package/dist/api.mjs +5 -5
- package/dist/api.mjs.map +1 -1
- package/dist/{base-context-5_AZZYFu.cjs → base-context-CAA1druQ.cjs} +62 -33
- package/dist/{base-context-D_ZidDDm.mjs → base-context-fOM4ZWUo.mjs} +67 -38
- package/dist/base-context-fOM4ZWUo.mjs.map +1 -0
- package/dist/context/index.cjs +3 -3
- package/dist/context/index.d.cts +38 -52
- package/dist/context/index.d.cts.map +1 -1
- package/dist/context/index.d.mts +38 -52
- package/dist/context/index.d.mts.map +1 -1
- package/dist/context/index.mjs +3 -3
- package/dist/{engine-context-PQ3BgcgR.mjs → engine-context-BWGxMU_n.mjs} +2 -2
- package/dist/{engine-context-PQ3BgcgR.mjs.map → engine-context-BWGxMU_n.mjs.map} +1 -1
- package/dist/{engine-context-w4fts28j.cjs → engine-context-CUPubmrM.cjs} +1 -1
- package/dist/{execution-context-0GmpbWbs.cjs → execution-context-BoJhCK0d.cjs} +125 -117
- package/dist/{execution-context-zedP0h4Z.mjs → execution-context-CFJst4Fz.mjs} +127 -119
- package/dist/execution-context-CFJst4Fz.mjs.map +1 -0
- package/dist/index.cjs +114 -53
- package/dist/index.d.cts +8 -0
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +8 -0
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +114 -53
- package/dist/index.mjs.map +1 -1
- package/dist/storage/index.cjs +1 -1
- package/dist/storage/index.mjs +1 -1
- package/dist/{tsconfig-Cstsoprg.mjs → tsconfig-CI6bla4E.mjs} +2 -2
- package/dist/{tsconfig-Cstsoprg.mjs.map → tsconfig-CI6bla4E.mjs.map} +1 -1
- package/dist/{tsconfig-DeyWQC2N.cjs → tsconfig-QMSxSwBD.cjs} +1 -1
- package/dist/typescript/index.cjs +1 -1
- package/dist/typescript/index.mjs +1 -1
- package/dist/{virtual-CUgOdyIa.mjs → virtual-CYGZHTDd.mjs} +5 -5
- package/dist/virtual-CYGZHTDd.mjs.map +1 -0
- package/dist/{virtual-1hYa9zCy.cjs → virtual-Ct3ZqPeN.cjs} +2 -2
- package/package.json +3 -3
- package/dist/base-context-D_ZidDDm.mjs.map +0 -1
- package/dist/execution-context-zedP0h4Z.mjs.map +0 -1
- package/dist/virtual-CUgOdyIa.mjs.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
const require_chunk = require('./chunk-C0xms8kb.cjs');
|
|
3
|
-
const require_engine_context = require('./engine-context-
|
|
3
|
+
const require_engine_context = require('./engine-context-CUPubmrM.cjs');
|
|
4
4
|
let _powerlines_core_constants = require("@powerlines/core/constants");
|
|
5
|
+
let _stryke_convert_to_array = require("@stryke/convert/to-array");
|
|
5
6
|
let _stryke_fs_resolve = require("@stryke/fs/resolve");
|
|
6
7
|
let _stryke_path_join = require("@stryke/path/join");
|
|
7
|
-
let _powerlines_core = require("@powerlines/core");
|
|
8
8
|
let _stryke_type_checks_is_set = require("@stryke/type-checks/is-set");
|
|
9
9
|
let _stryke_type_checks_is_set_object = require("@stryke/type-checks/is-set-object");
|
|
10
10
|
let _stryke_type_checks_is_string = require("@stryke/type-checks/is-string");
|
|
@@ -13,10 +13,9 @@ let jest_worker = require("jest-worker");
|
|
|
13
13
|
let node_os = require("node:os");
|
|
14
14
|
let node_stream = require("node:stream");
|
|
15
15
|
let node_util = require("node:util");
|
|
16
|
-
let _stryke_convert_to_array = require("@stryke/convert/to-array");
|
|
17
16
|
let _stryke_type_checks_is_set_string = require("@stryke/type-checks/is-set-string");
|
|
18
17
|
|
|
19
|
-
//#region src/_internal/ipc/
|
|
18
|
+
//#region src/_internal/ipc/parse.ts
|
|
20
19
|
function parseIpcMessage(data) {
|
|
21
20
|
let message;
|
|
22
21
|
if ((0, _stryke_type_checks_is_set_object.isSetObject)(data)) message = data;
|
|
@@ -27,18 +26,16 @@ function parseIpcMessage(data) {
|
|
|
27
26
|
if (message && (0, _stryke_type_checks_is_set_string.isSetString)(message.id) && (0, _stryke_type_checks_is_set_string.isSetString)(message.type) && (0, _stryke_type_checks_is_set_string.isSetString)(message.executionId) && Number.isInteger(message.executionIndex) && !Number.isNaN(message.timestamp)) return message;
|
|
28
27
|
}
|
|
29
28
|
function parseWriteLogMessagePayload(data) {
|
|
30
|
-
if ((0, _stryke_type_checks_is_set_string.isSetString)(data
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
plugin: (0, _stryke_type_checks_is_set.isSet)(data.plugin) ? String(data.plugin) : void 0,
|
|
35
|
-
args: (0, _stryke_convert_to_array.toArray)(data.args).filter(Boolean)
|
|
29
|
+
if ((0, _stryke_type_checks_is_set_object.isSetObject)(data) && (0, _stryke_type_checks_is_set_object.isSetObject)(data.meta) && (0, _stryke_type_checks_is_set_string.isSetString)(data.meta.type) && ((0, _stryke_type_checks_is_set_string.isSetString)(data.message) || Array.isArray(data.message))) return {
|
|
30
|
+
...data,
|
|
31
|
+
meta: data.meta,
|
|
32
|
+
message: (0, _stryke_convert_to_array.toArray)(data.message).filter(Boolean)
|
|
36
33
|
};
|
|
37
|
-
throw new Error(
|
|
34
|
+
throw new Error(`Invalid "write-log" message payload: ${JSON.stringify(data)}`);
|
|
38
35
|
}
|
|
39
36
|
function parseUpdateCommandMessagePayload(data) {
|
|
40
37
|
if ((0, _stryke_type_checks_is_set_string.isSetString)(data?.command)) return { command: data.command };
|
|
41
|
-
throw new Error(
|
|
38
|
+
throw new Error(`Invalid "update-command" message payload: ${JSON.stringify(data)}`);
|
|
42
39
|
}
|
|
43
40
|
function parseUpdateHookMessagePayload(data) {
|
|
44
41
|
if ((0, _stryke_type_checks_is_set_string.isSetString)(data?.hook) && [
|
|
@@ -49,11 +46,11 @@ function parseUpdateHookMessagePayload(data) {
|
|
|
49
46
|
hook: data.hook,
|
|
50
47
|
order: data.order
|
|
51
48
|
};
|
|
52
|
-
throw new Error(
|
|
49
|
+
throw new Error(`Invalid "update-hook" message payload: ${JSON.stringify(data)}`);
|
|
53
50
|
}
|
|
54
51
|
function parseUpdatePluginMessagePayload(data) {
|
|
55
52
|
if ((0, _stryke_type_checks_is_set_string.isSetString)(data?.plugin)) return { plugin: data.plugin };
|
|
56
|
-
throw new Error(
|
|
53
|
+
throw new Error(`Invalid "update-plugin" message payload: ${JSON.stringify(data)}`);
|
|
57
54
|
}
|
|
58
55
|
|
|
59
56
|
//#endregion
|
|
@@ -228,8 +225,7 @@ var Worker = class {
|
|
|
228
225
|
constructor(workerPath, options) {
|
|
229
226
|
this.workerPath = workerPath;
|
|
230
227
|
this.options = options;
|
|
231
|
-
const { timeout, onRestart, debuggerPortOffset = -1, enableSourceMaps = false, isolatedMemory = false,
|
|
232
|
-
const log = (0, _powerlines_core.extendLogFn)(_log, { category: "ipc" });
|
|
228
|
+
const { timeout, onRestart, debuggerPortOffset = -1, enableSourceMaps = false, isolatedMemory = false, logger, ...rest } = this.options;
|
|
233
229
|
let restartPromise;
|
|
234
230
|
let resolveRestartPromise;
|
|
235
231
|
let activeTasks = 0;
|
|
@@ -263,7 +259,7 @@ var Worker = class {
|
|
|
263
259
|
if (!worker) return;
|
|
264
260
|
const resolve = resolveRestartPromise;
|
|
265
261
|
createWorker();
|
|
266
|
-
|
|
262
|
+
logger.warn(`Sending SIGTERM signal to static worker due to timeout${timeout ? ` of ${(0, date_fns_formatDuration.formatDuration)({ seconds: timeout / 1e3 })}` : ""}. Subsequent errors may be a result of the worker exiting.`);
|
|
267
263
|
worker.end().then(() => {
|
|
268
264
|
resolve(RESTARTED);
|
|
269
265
|
});
|
|
@@ -309,7 +305,7 @@ var Worker = class {
|
|
|
309
305
|
if (!rest.enableWorkerThreads) for (const worker of this.#worker._workerPool?._workers || []) {
|
|
310
306
|
worker._child?.on("exit", (code, signal) => {
|
|
311
307
|
if ((code || signal && signal !== "SIGINT") && this.#worker) {
|
|
312
|
-
|
|
308
|
+
logger.error(`Worker exited with code: ${code} and signal: ${signal}`);
|
|
313
309
|
process.exit(code ?? 1);
|
|
314
310
|
}
|
|
315
311
|
});
|
|
@@ -318,40 +314,8 @@ var Worker = class {
|
|
|
318
314
|
else {
|
|
319
315
|
const message = parseIpcMessage(data);
|
|
320
316
|
if (message) {
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
case "write-log":
|
|
324
|
-
if (options.onWriteLog) Promise.resolve(options.onWriteLog({
|
|
325
|
-
...message,
|
|
326
|
-
type: "write-log",
|
|
327
|
-
payload: parseWriteLogMessagePayload(message.payload)
|
|
328
|
-
}));
|
|
329
|
-
break;
|
|
330
|
-
case "update-command":
|
|
331
|
-
if (options.onUpdateCommand) Promise.resolve(options.onUpdateCommand({
|
|
332
|
-
...message,
|
|
333
|
-
type: "update-command",
|
|
334
|
-
payload: parseUpdateCommandMessagePayload(message.payload)
|
|
335
|
-
}));
|
|
336
|
-
break;
|
|
337
|
-
case "update-hook":
|
|
338
|
-
if (options.onUpdateHook) Promise.resolve(options.onUpdateHook({
|
|
339
|
-
...message,
|
|
340
|
-
type: "update-hook",
|
|
341
|
-
payload: parseUpdateHookMessagePayload(message.payload)
|
|
342
|
-
}));
|
|
343
|
-
break;
|
|
344
|
-
case "update-plugin":
|
|
345
|
-
if (options.onUpdatePlugin) Promise.resolve(options.onUpdatePlugin({
|
|
346
|
-
...message,
|
|
347
|
-
type: "update-plugin",
|
|
348
|
-
payload: parseUpdatePluginMessagePayload(message.payload)
|
|
349
|
-
}));
|
|
350
|
-
break;
|
|
351
|
-
case "activity":
|
|
352
|
-
case void 0:
|
|
353
|
-
default: break;
|
|
354
|
-
}
|
|
317
|
+
logger.trace(`Received IPC message from worker: ${JSON.stringify(message)}`);
|
|
318
|
+
Promise.resolve(this.options.onIpcMessage?.(message));
|
|
355
319
|
}
|
|
356
320
|
}
|
|
357
321
|
});
|
|
@@ -440,9 +404,10 @@ var PowerlinesEngine = class PowerlinesEngine {
|
|
|
440
404
|
const packagePath = await (0, _stryke_fs_resolve.resolvePackage)("@powerlines/engine");
|
|
441
405
|
if (!packagePath) throw new Error("Could not resolve `@powerlines/engine` package location.");
|
|
442
406
|
api.#worker = new Worker((0, _stryke_path_join.joinPaths)(packagePath, "./_internal/worker.mjs"), {
|
|
407
|
+
onIpcMessage: api.handleIpcMessage.bind(api),
|
|
443
408
|
enableSourceMaps: options.mode === "development",
|
|
444
409
|
exposedMethods: _powerlines_core_constants.POWERLINES_API_FUNCTIONS,
|
|
445
|
-
|
|
410
|
+
logger: api.context.extendLogger({ category: "ipc" })
|
|
446
411
|
});
|
|
447
412
|
return api;
|
|
448
413
|
}
|
|
@@ -647,9 +612,105 @@ var PowerlinesEngine = class PowerlinesEngine {
|
|
|
647
612
|
this.context.debug("✔ Powerlines finalization completed successfully");
|
|
648
613
|
timer();
|
|
649
614
|
}
|
|
615
|
+
/**
|
|
616
|
+
* Asynchronous disposal method for the Powerlines Engine, which will call the finalize method to perform any necessary cleanup when the engine is disposed of.
|
|
617
|
+
*/
|
|
650
618
|
async [Symbol.asyncDispose]() {
|
|
651
619
|
return this.finalize();
|
|
652
620
|
}
|
|
621
|
+
async handleIpcMessage(message) {
|
|
622
|
+
switch (message.type) {
|
|
623
|
+
case "write-log":
|
|
624
|
+
this.context.logger.debug({
|
|
625
|
+
meta: {
|
|
626
|
+
category: "ipc",
|
|
627
|
+
executionId: message.executionId,
|
|
628
|
+
executionIndex: message.executionIndex,
|
|
629
|
+
environment: message.environment
|
|
630
|
+
},
|
|
631
|
+
message: "Received a \"write-log\" IPC message from worker"
|
|
632
|
+
});
|
|
633
|
+
await this.handleWriteLog({
|
|
634
|
+
...message,
|
|
635
|
+
type: "write-log",
|
|
636
|
+
payload: parseWriteLogMessagePayload(message.payload)
|
|
637
|
+
});
|
|
638
|
+
break;
|
|
639
|
+
case "update-command":
|
|
640
|
+
this.context.logger.debug({
|
|
641
|
+
meta: {
|
|
642
|
+
category: "ipc",
|
|
643
|
+
executionId: message.executionId,
|
|
644
|
+
executionIndex: message.executionIndex,
|
|
645
|
+
environment: message.environment
|
|
646
|
+
},
|
|
647
|
+
message: "Received an \"update-command\" IPC message from worker"
|
|
648
|
+
});
|
|
649
|
+
await this.handleUpdateCommand({
|
|
650
|
+
...message,
|
|
651
|
+
type: "update-command",
|
|
652
|
+
payload: parseUpdateCommandMessagePayload(message.payload)
|
|
653
|
+
});
|
|
654
|
+
break;
|
|
655
|
+
case "update-hook":
|
|
656
|
+
this.context.logger.debug({
|
|
657
|
+
meta: {
|
|
658
|
+
category: "ipc",
|
|
659
|
+
executionId: message.executionId,
|
|
660
|
+
executionIndex: message.executionIndex,
|
|
661
|
+
environment: message.environment
|
|
662
|
+
},
|
|
663
|
+
message: "Received an \"update-hook\" IPC message from worker"
|
|
664
|
+
});
|
|
665
|
+
await this.handleUpdateHook({
|
|
666
|
+
...message,
|
|
667
|
+
type: "update-hook",
|
|
668
|
+
payload: parseUpdateHookMessagePayload(message.payload)
|
|
669
|
+
});
|
|
670
|
+
break;
|
|
671
|
+
case "update-plugin":
|
|
672
|
+
this.context.logger.debug({
|
|
673
|
+
meta: {
|
|
674
|
+
category: "ipc",
|
|
675
|
+
executionId: message.executionId,
|
|
676
|
+
executionIndex: message.executionIndex,
|
|
677
|
+
environment: message.environment
|
|
678
|
+
},
|
|
679
|
+
message: "Received an \"update-plugin\" IPC message from worker"
|
|
680
|
+
});
|
|
681
|
+
await this.handleUpdatePlugin({
|
|
682
|
+
...message,
|
|
683
|
+
type: "update-plugin",
|
|
684
|
+
payload: parseUpdatePluginMessagePayload(message.payload)
|
|
685
|
+
});
|
|
686
|
+
break;
|
|
687
|
+
case "activity":
|
|
688
|
+
case void 0:
|
|
689
|
+
default: break;
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
async handleWriteLog(message) {
|
|
693
|
+
const { payload } = message;
|
|
694
|
+
this.context.logger.log(payload.meta.type, {
|
|
695
|
+
message: (0, _stryke_convert_to_array.toArray)(payload.message).filter(Boolean).join("\n"),
|
|
696
|
+
meta: {
|
|
697
|
+
category: payload.meta.category,
|
|
698
|
+
logId: payload.meta.logId,
|
|
699
|
+
name: payload.meta.name,
|
|
700
|
+
executionId: message.executionId,
|
|
701
|
+
executionIndex: message.executionIndex,
|
|
702
|
+
command: payload.meta.command,
|
|
703
|
+
hook: payload.meta.hook,
|
|
704
|
+
environment: message.environment,
|
|
705
|
+
plugin: payload.meta.plugin,
|
|
706
|
+
source: payload.meta.source,
|
|
707
|
+
timestamp: message.timestamp
|
|
708
|
+
}
|
|
709
|
+
});
|
|
710
|
+
}
|
|
711
|
+
async handleUpdatePlugin(_) {}
|
|
712
|
+
async handleUpdateHook(_) {}
|
|
713
|
+
async handleUpdateCommand(_) {}
|
|
653
714
|
};
|
|
654
715
|
|
|
655
716
|
//#endregion
|
package/dist/index.d.cts
CHANGED
|
@@ -119,7 +119,15 @@ declare class PowerlinesEngine implements Engine, AsyncDisposable {
|
|
|
119
119
|
* @returns A promise that resolves when the finalization process has completed
|
|
120
120
|
*/
|
|
121
121
|
finalize(): Promise<void>;
|
|
122
|
+
/**
|
|
123
|
+
* Asynchronous disposal method for the Powerlines Engine, which will call the finalize method to perform any necessary cleanup when the engine is disposed of.
|
|
124
|
+
*/
|
|
122
125
|
[Symbol.asyncDispose](): Promise<void>;
|
|
126
|
+
private handleIpcMessage;
|
|
127
|
+
private handleWriteLog;
|
|
128
|
+
private handleUpdatePlugin;
|
|
129
|
+
private handleUpdateHook;
|
|
130
|
+
private handleUpdateCommand;
|
|
123
131
|
}
|
|
124
132
|
//#endregion
|
|
125
133
|
export { PowerlinesEngine };
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;AA+DA;;;;;;cAAa,gBAAA,YAA4B,MAAA,EAAQ,eAAA;EAAA;EAmEtC;;;;;;EAAA,OAlDW,WAAA,CAClB,OAAA,EAAS,aAAA,GACR,OAAA,CAAQ,gBAAA;EA0FY;;;EAAA,IAjEZ,OAAA,CAAA,GAAW,aAAA;EAkEJ;;;;;EAAA,UAzDT,WAAA,CAAa,OAAA,EAAS,aAAA;EA2Db;;;;;;;;EA/CL,KAAA,CACX,YAAA,GAAc,WAAA,CACZ,IAAA,CAAK,iBAAA,8BAIN,OAAA;EA4Ce;;;;;;;;EATL,OAAA,CACX,YAAA,GACI,WAAA,CAAY,IAAA,CAAK,mBAAA,8BACjB,WAAA,CAAY,IAAA,CAAK,iBAAA,8BACjB,WAAA,CAAY,IAAA,CAAK,eAAA,8BACjB,WAAA,CAAY,IAAA,CAAK,iBAAA,8BACjB,WAAA,CAAY,IAAA,CAAK,iBAAA,8BACjB,WAAA,CAAY,IAAA,CAAK,gBAAA,8BACjB,WAAA,CAAY,IAAA,CAAK,gBAAA,8BACjB,WAAA,CAAY,IAAA,CAAK,kBAAA,8BAEpB,OAAA;EA8DoB;;;;;;;;;EA9BV,GAAA,CAAI,YAAA,EAAc,WAAA,CAAY,eAAA,eAA2B,OAAA;EA8DnE;;;;;;;;;EAnCU,KAAA,CACX,YAAA,GACI,WAAA,CAAY,IAAA,CAAK,iBAAA,8BACjB,WAAA,CAAY,IAAA,CAAK,mBAAA,8BAEpB,OAAA;EA4Fa;;;;;;EAnEH,IAAA,CACX,YAAA,GACI,WAAA,CAAY,IAAA,CAAK,gBAAA,8BACjB,WAAA,CAAY,IAAA,CAAK,iBAAA,8BAEpB,OAAA;EAmIC;;;;;;;;;EAvGS,IAAA,CACX,YAAA,GACI,WAAA,CAAY,IAAA,CAAK,gBAAA,8BACjB,WAAA,CAAY,IAAA,CAAK,iBAAA,8BAEpB,OAAA;EApPoC;;;;;;;;;EAgR1B,KAAA,CACX,YAAA,GAAc,WAAA,CACZ,IAAA,CAAK,iBAAA,8BAIN,OAAA;EAjOM;;;;;;EAyPI,IAAA,CACX,YAAA,GAAc,WAAA,CACZ,IAAA,CAAK,gBAAA,8BAIN,OAAA;EAlPD;;;;;;;;EAkRW,MAAA,CACX,YAAA,GAAc,WAAA,CACZ,IAAA,CAAK,kBAAA,8BAIN,OAAA;EA5OG;;;;;;;;EAwQO,QAAA,CAAA,GAAQ,OAAA;EArQf;;;EAAA,CAkRQ,MAAA,CAAO,YAAA,KAAa,OAAA;EAAA,QAIpB,gBAAA;EAAA,QAsFA,cAAA;EAAA,QAqBA,kBAAA;EAAA,QAEA,gBAAA;EAAA,QAEA,mBAAA;AAAA"}
|
package/dist/index.d.mts
CHANGED
|
@@ -119,7 +119,15 @@ declare class PowerlinesEngine implements Engine, AsyncDisposable {
|
|
|
119
119
|
* @returns A promise that resolves when the finalization process has completed
|
|
120
120
|
*/
|
|
121
121
|
finalize(): Promise<void>;
|
|
122
|
+
/**
|
|
123
|
+
* Asynchronous disposal method for the Powerlines Engine, which will call the finalize method to perform any necessary cleanup when the engine is disposed of.
|
|
124
|
+
*/
|
|
122
125
|
[Symbol.asyncDispose](): Promise<void>;
|
|
126
|
+
private handleIpcMessage;
|
|
127
|
+
private handleWriteLog;
|
|
128
|
+
private handleUpdatePlugin;
|
|
129
|
+
private handleUpdateHook;
|
|
130
|
+
private handleUpdateCommand;
|
|
123
131
|
}
|
|
124
132
|
//#endregion
|
|
125
133
|
export { PowerlinesEngine };
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;AA+DA;;;;;;cAAa,gBAAA,YAA4B,MAAA,EAAQ,eAAA;EAAA;EAmEtC;;;;;;EAAA,OAlDW,WAAA,CAClB,OAAA,EAAS,aAAA,GACR,OAAA,CAAQ,gBAAA;EA0FY;;;EAAA,IAjEZ,OAAA,CAAA,GAAW,aAAA;EAkEJ;;;;;EAAA,UAzDT,WAAA,CAAa,OAAA,EAAS,aAAA;EA2Db;;;;;;;;EA/CL,KAAA,CACX,YAAA,GAAc,WAAA,CACZ,IAAA,CAAK,iBAAA,8BAIN,OAAA;EA4Ce;;;;;;;;EATL,OAAA,CACX,YAAA,GACI,WAAA,CAAY,IAAA,CAAK,mBAAA,8BACjB,WAAA,CAAY,IAAA,CAAK,iBAAA,8BACjB,WAAA,CAAY,IAAA,CAAK,eAAA,8BACjB,WAAA,CAAY,IAAA,CAAK,iBAAA,8BACjB,WAAA,CAAY,IAAA,CAAK,iBAAA,8BACjB,WAAA,CAAY,IAAA,CAAK,gBAAA,8BACjB,WAAA,CAAY,IAAA,CAAK,gBAAA,8BACjB,WAAA,CAAY,IAAA,CAAK,kBAAA,8BAEpB,OAAA;EA8DoB;;;;;;;;;EA9BV,GAAA,CAAI,YAAA,EAAc,WAAA,CAAY,eAAA,eAA2B,OAAA;EA8DnE;;;;;;;;;EAnCU,KAAA,CACX,YAAA,GACI,WAAA,CAAY,IAAA,CAAK,iBAAA,8BACjB,WAAA,CAAY,IAAA,CAAK,mBAAA,8BAEpB,OAAA;EA4Fa;;;;;;EAnEH,IAAA,CACX,YAAA,GACI,WAAA,CAAY,IAAA,CAAK,gBAAA,8BACjB,WAAA,CAAY,IAAA,CAAK,iBAAA,8BAEpB,OAAA;EAmIC;;;;;;;;;EAvGS,IAAA,CACX,YAAA,GACI,WAAA,CAAY,IAAA,CAAK,gBAAA,8BACjB,WAAA,CAAY,IAAA,CAAK,iBAAA,8BAEpB,OAAA;EApPoC;;;;;;;;;EAgR1B,KAAA,CACX,YAAA,GAAc,WAAA,CACZ,IAAA,CAAK,iBAAA,8BAIN,OAAA;EAjOM;;;;;;EAyPI,IAAA,CACX,YAAA,GAAc,WAAA,CACZ,IAAA,CAAK,gBAAA,8BAIN,OAAA;EAlPD;;;;;;;;EAkRW,MAAA,CACX,YAAA,GAAc,WAAA,CACZ,IAAA,CAAK,kBAAA,8BAIN,OAAA;EA5OG;;;;;;;;EAwQO,QAAA,CAAA,GAAQ,OAAA;EArQf;;;EAAA,CAkRQ,MAAA,CAAO,YAAA,KAAa,OAAA;EAAA,QAIpB,gBAAA;EAAA,QAsFA,cAAA;EAAA,QAqBA,kBAAA;EAAA,QAEA,gBAAA;EAAA,QAEA,mBAAA;AAAA"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { t as PowerlinesEngineContext } from "./engine-context-
|
|
1
|
+
import { t as PowerlinesEngineContext } from "./engine-context-BWGxMU_n.mjs";
|
|
2
2
|
import { POWERLINES_API_FUNCTIONS } from "@powerlines/core/constants";
|
|
3
|
+
import { toArray } from "@stryke/convert/to-array";
|
|
3
4
|
import { resolvePackage } from "@stryke/fs/resolve";
|
|
4
5
|
import { joinPaths } from "@stryke/path/join";
|
|
5
|
-
import { extendLogFn } from "@powerlines/core";
|
|
6
6
|
import { isSet } from "@stryke/type-checks/is-set";
|
|
7
7
|
import { isSetObject } from "@stryke/type-checks/is-set-object";
|
|
8
8
|
import { isString } from "@stryke/type-checks/is-string";
|
|
@@ -11,10 +11,9 @@ import { Worker } from "jest-worker";
|
|
|
11
11
|
import { cpus } from "node:os";
|
|
12
12
|
import { Transform } from "node:stream";
|
|
13
13
|
import { parseArgs } from "node:util";
|
|
14
|
-
import { toArray } from "@stryke/convert/to-array";
|
|
15
14
|
import { isSetString } from "@stryke/type-checks/is-set-string";
|
|
16
15
|
|
|
17
|
-
//#region src/_internal/ipc/
|
|
16
|
+
//#region src/_internal/ipc/parse.ts
|
|
18
17
|
function parseIpcMessage(data) {
|
|
19
18
|
let message;
|
|
20
19
|
if (isSetObject(data)) message = data;
|
|
@@ -25,18 +24,16 @@ function parseIpcMessage(data) {
|
|
|
25
24
|
if (message && isSetString(message.id) && isSetString(message.type) && isSetString(message.executionId) && Number.isInteger(message.executionIndex) && !Number.isNaN(message.timestamp)) return message;
|
|
26
25
|
}
|
|
27
26
|
function parseWriteLogMessagePayload(data) {
|
|
28
|
-
if (isSetString(data
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
plugin: isSet(data.plugin) ? String(data.plugin) : void 0,
|
|
33
|
-
args: toArray(data.args).filter(Boolean)
|
|
27
|
+
if (isSetObject(data) && isSetObject(data.meta) && isSetString(data.meta.type) && (isSetString(data.message) || Array.isArray(data.message))) return {
|
|
28
|
+
...data,
|
|
29
|
+
meta: data.meta,
|
|
30
|
+
message: toArray(data.message).filter(Boolean)
|
|
34
31
|
};
|
|
35
|
-
throw new Error(
|
|
32
|
+
throw new Error(`Invalid "write-log" message payload: ${JSON.stringify(data)}`);
|
|
36
33
|
}
|
|
37
34
|
function parseUpdateCommandMessagePayload(data) {
|
|
38
35
|
if (isSetString(data?.command)) return { command: data.command };
|
|
39
|
-
throw new Error(
|
|
36
|
+
throw new Error(`Invalid "update-command" message payload: ${JSON.stringify(data)}`);
|
|
40
37
|
}
|
|
41
38
|
function parseUpdateHookMessagePayload(data) {
|
|
42
39
|
if (isSetString(data?.hook) && [
|
|
@@ -47,11 +44,11 @@ function parseUpdateHookMessagePayload(data) {
|
|
|
47
44
|
hook: data.hook,
|
|
48
45
|
order: data.order
|
|
49
46
|
};
|
|
50
|
-
throw new Error(
|
|
47
|
+
throw new Error(`Invalid "update-hook" message payload: ${JSON.stringify(data)}`);
|
|
51
48
|
}
|
|
52
49
|
function parseUpdatePluginMessagePayload(data) {
|
|
53
50
|
if (isSetString(data?.plugin)) return { plugin: data.plugin };
|
|
54
|
-
throw new Error(
|
|
51
|
+
throw new Error(`Invalid "update-plugin" message payload: ${JSON.stringify(data)}`);
|
|
55
52
|
}
|
|
56
53
|
|
|
57
54
|
//#endregion
|
|
@@ -226,8 +223,7 @@ var Worker$1 = class {
|
|
|
226
223
|
constructor(workerPath, options) {
|
|
227
224
|
this.workerPath = workerPath;
|
|
228
225
|
this.options = options;
|
|
229
|
-
const { timeout, onRestart, debuggerPortOffset = -1, enableSourceMaps = false, isolatedMemory = false,
|
|
230
|
-
const log = extendLogFn(_log, { category: "ipc" });
|
|
226
|
+
const { timeout, onRestart, debuggerPortOffset = -1, enableSourceMaps = false, isolatedMemory = false, logger, ...rest } = this.options;
|
|
231
227
|
let restartPromise;
|
|
232
228
|
let resolveRestartPromise;
|
|
233
229
|
let activeTasks = 0;
|
|
@@ -261,7 +257,7 @@ var Worker$1 = class {
|
|
|
261
257
|
if (!worker) return;
|
|
262
258
|
const resolve = resolveRestartPromise;
|
|
263
259
|
createWorker();
|
|
264
|
-
|
|
260
|
+
logger.warn(`Sending SIGTERM signal to static worker due to timeout${timeout ? ` of ${formatDuration({ seconds: timeout / 1e3 })}` : ""}. Subsequent errors may be a result of the worker exiting.`);
|
|
265
261
|
worker.end().then(() => {
|
|
266
262
|
resolve(RESTARTED);
|
|
267
263
|
});
|
|
@@ -307,7 +303,7 @@ var Worker$1 = class {
|
|
|
307
303
|
if (!rest.enableWorkerThreads) for (const worker of this.#worker._workerPool?._workers || []) {
|
|
308
304
|
worker._child?.on("exit", (code, signal) => {
|
|
309
305
|
if ((code || signal && signal !== "SIGINT") && this.#worker) {
|
|
310
|
-
|
|
306
|
+
logger.error(`Worker exited with code: ${code} and signal: ${signal}`);
|
|
311
307
|
process.exit(code ?? 1);
|
|
312
308
|
}
|
|
313
309
|
});
|
|
@@ -316,40 +312,8 @@ var Worker$1 = class {
|
|
|
316
312
|
else {
|
|
317
313
|
const message = parseIpcMessage(data);
|
|
318
314
|
if (message) {
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
case "write-log":
|
|
322
|
-
if (options.onWriteLog) Promise.resolve(options.onWriteLog({
|
|
323
|
-
...message,
|
|
324
|
-
type: "write-log",
|
|
325
|
-
payload: parseWriteLogMessagePayload(message.payload)
|
|
326
|
-
}));
|
|
327
|
-
break;
|
|
328
|
-
case "update-command":
|
|
329
|
-
if (options.onUpdateCommand) Promise.resolve(options.onUpdateCommand({
|
|
330
|
-
...message,
|
|
331
|
-
type: "update-command",
|
|
332
|
-
payload: parseUpdateCommandMessagePayload(message.payload)
|
|
333
|
-
}));
|
|
334
|
-
break;
|
|
335
|
-
case "update-hook":
|
|
336
|
-
if (options.onUpdateHook) Promise.resolve(options.onUpdateHook({
|
|
337
|
-
...message,
|
|
338
|
-
type: "update-hook",
|
|
339
|
-
payload: parseUpdateHookMessagePayload(message.payload)
|
|
340
|
-
}));
|
|
341
|
-
break;
|
|
342
|
-
case "update-plugin":
|
|
343
|
-
if (options.onUpdatePlugin) Promise.resolve(options.onUpdatePlugin({
|
|
344
|
-
...message,
|
|
345
|
-
type: "update-plugin",
|
|
346
|
-
payload: parseUpdatePluginMessagePayload(message.payload)
|
|
347
|
-
}));
|
|
348
|
-
break;
|
|
349
|
-
case "activity":
|
|
350
|
-
case void 0:
|
|
351
|
-
default: break;
|
|
352
|
-
}
|
|
315
|
+
logger.trace(`Received IPC message from worker: ${JSON.stringify(message)}`);
|
|
316
|
+
Promise.resolve(this.options.onIpcMessage?.(message));
|
|
353
317
|
}
|
|
354
318
|
}
|
|
355
319
|
});
|
|
@@ -438,9 +402,10 @@ var PowerlinesEngine = class PowerlinesEngine {
|
|
|
438
402
|
const packagePath = await resolvePackage("@powerlines/engine");
|
|
439
403
|
if (!packagePath) throw new Error("Could not resolve `@powerlines/engine` package location.");
|
|
440
404
|
api.#worker = new Worker$1(joinPaths(packagePath, "./_internal/worker.mjs"), {
|
|
405
|
+
onIpcMessage: api.handleIpcMessage.bind(api),
|
|
441
406
|
enableSourceMaps: options.mode === "development",
|
|
442
407
|
exposedMethods: POWERLINES_API_FUNCTIONS,
|
|
443
|
-
|
|
408
|
+
logger: api.context.extendLogger({ category: "ipc" })
|
|
444
409
|
});
|
|
445
410
|
return api;
|
|
446
411
|
}
|
|
@@ -645,9 +610,105 @@ var PowerlinesEngine = class PowerlinesEngine {
|
|
|
645
610
|
this.context.debug("✔ Powerlines finalization completed successfully");
|
|
646
611
|
timer();
|
|
647
612
|
}
|
|
613
|
+
/**
|
|
614
|
+
* Asynchronous disposal method for the Powerlines Engine, which will call the finalize method to perform any necessary cleanup when the engine is disposed of.
|
|
615
|
+
*/
|
|
648
616
|
async [Symbol.asyncDispose]() {
|
|
649
617
|
return this.finalize();
|
|
650
618
|
}
|
|
619
|
+
async handleIpcMessage(message) {
|
|
620
|
+
switch (message.type) {
|
|
621
|
+
case "write-log":
|
|
622
|
+
this.context.logger.debug({
|
|
623
|
+
meta: {
|
|
624
|
+
category: "ipc",
|
|
625
|
+
executionId: message.executionId,
|
|
626
|
+
executionIndex: message.executionIndex,
|
|
627
|
+
environment: message.environment
|
|
628
|
+
},
|
|
629
|
+
message: "Received a \"write-log\" IPC message from worker"
|
|
630
|
+
});
|
|
631
|
+
await this.handleWriteLog({
|
|
632
|
+
...message,
|
|
633
|
+
type: "write-log",
|
|
634
|
+
payload: parseWriteLogMessagePayload(message.payload)
|
|
635
|
+
});
|
|
636
|
+
break;
|
|
637
|
+
case "update-command":
|
|
638
|
+
this.context.logger.debug({
|
|
639
|
+
meta: {
|
|
640
|
+
category: "ipc",
|
|
641
|
+
executionId: message.executionId,
|
|
642
|
+
executionIndex: message.executionIndex,
|
|
643
|
+
environment: message.environment
|
|
644
|
+
},
|
|
645
|
+
message: "Received an \"update-command\" IPC message from worker"
|
|
646
|
+
});
|
|
647
|
+
await this.handleUpdateCommand({
|
|
648
|
+
...message,
|
|
649
|
+
type: "update-command",
|
|
650
|
+
payload: parseUpdateCommandMessagePayload(message.payload)
|
|
651
|
+
});
|
|
652
|
+
break;
|
|
653
|
+
case "update-hook":
|
|
654
|
+
this.context.logger.debug({
|
|
655
|
+
meta: {
|
|
656
|
+
category: "ipc",
|
|
657
|
+
executionId: message.executionId,
|
|
658
|
+
executionIndex: message.executionIndex,
|
|
659
|
+
environment: message.environment
|
|
660
|
+
},
|
|
661
|
+
message: "Received an \"update-hook\" IPC message from worker"
|
|
662
|
+
});
|
|
663
|
+
await this.handleUpdateHook({
|
|
664
|
+
...message,
|
|
665
|
+
type: "update-hook",
|
|
666
|
+
payload: parseUpdateHookMessagePayload(message.payload)
|
|
667
|
+
});
|
|
668
|
+
break;
|
|
669
|
+
case "update-plugin":
|
|
670
|
+
this.context.logger.debug({
|
|
671
|
+
meta: {
|
|
672
|
+
category: "ipc",
|
|
673
|
+
executionId: message.executionId,
|
|
674
|
+
executionIndex: message.executionIndex,
|
|
675
|
+
environment: message.environment
|
|
676
|
+
},
|
|
677
|
+
message: "Received an \"update-plugin\" IPC message from worker"
|
|
678
|
+
});
|
|
679
|
+
await this.handleUpdatePlugin({
|
|
680
|
+
...message,
|
|
681
|
+
type: "update-plugin",
|
|
682
|
+
payload: parseUpdatePluginMessagePayload(message.payload)
|
|
683
|
+
});
|
|
684
|
+
break;
|
|
685
|
+
case "activity":
|
|
686
|
+
case void 0:
|
|
687
|
+
default: break;
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
async handleWriteLog(message) {
|
|
691
|
+
const { payload } = message;
|
|
692
|
+
this.context.logger.log(payload.meta.type, {
|
|
693
|
+
message: toArray(payload.message).filter(Boolean).join("\n"),
|
|
694
|
+
meta: {
|
|
695
|
+
category: payload.meta.category,
|
|
696
|
+
logId: payload.meta.logId,
|
|
697
|
+
name: payload.meta.name,
|
|
698
|
+
executionId: message.executionId,
|
|
699
|
+
executionIndex: message.executionIndex,
|
|
700
|
+
command: payload.meta.command,
|
|
701
|
+
hook: payload.meta.hook,
|
|
702
|
+
environment: message.environment,
|
|
703
|
+
plugin: payload.meta.plugin,
|
|
704
|
+
source: payload.meta.source,
|
|
705
|
+
timestamp: message.timestamp
|
|
706
|
+
}
|
|
707
|
+
});
|
|
708
|
+
}
|
|
709
|
+
async handleUpdatePlugin(_) {}
|
|
710
|
+
async handleUpdateHook(_) {}
|
|
711
|
+
async handleUpdateCommand(_) {}
|
|
651
712
|
};
|
|
652
713
|
|
|
653
714
|
//#endregion
|