@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.
Files changed (44) hide show
  1. package/dist/_internal/worker.cjs +186 -169
  2. package/dist/_internal/worker.d.cts.map +1 -1
  3. package/dist/_internal/worker.d.mts.map +1 -1
  4. package/dist/_internal/worker.mjs +187 -170
  5. package/dist/_internal/worker.mjs.map +1 -1
  6. package/dist/api.cjs +7 -7
  7. package/dist/api.mjs +5 -5
  8. package/dist/api.mjs.map +1 -1
  9. package/dist/{base-context-5_AZZYFu.cjs → base-context-CAA1druQ.cjs} +62 -33
  10. package/dist/{base-context-D_ZidDDm.mjs → base-context-fOM4ZWUo.mjs} +67 -38
  11. package/dist/base-context-fOM4ZWUo.mjs.map +1 -0
  12. package/dist/context/index.cjs +3 -3
  13. package/dist/context/index.d.cts +38 -52
  14. package/dist/context/index.d.cts.map +1 -1
  15. package/dist/context/index.d.mts +38 -52
  16. package/dist/context/index.d.mts.map +1 -1
  17. package/dist/context/index.mjs +3 -3
  18. package/dist/{engine-context-PQ3BgcgR.mjs → engine-context-BWGxMU_n.mjs} +2 -2
  19. package/dist/{engine-context-PQ3BgcgR.mjs.map → engine-context-BWGxMU_n.mjs.map} +1 -1
  20. package/dist/{engine-context-w4fts28j.cjs → engine-context-CUPubmrM.cjs} +1 -1
  21. package/dist/{execution-context-0GmpbWbs.cjs → execution-context-BoJhCK0d.cjs} +125 -117
  22. package/dist/{execution-context-zedP0h4Z.mjs → execution-context-CFJst4Fz.mjs} +127 -119
  23. package/dist/execution-context-CFJst4Fz.mjs.map +1 -0
  24. package/dist/index.cjs +114 -53
  25. package/dist/index.d.cts +8 -0
  26. package/dist/index.d.cts.map +1 -1
  27. package/dist/index.d.mts +8 -0
  28. package/dist/index.d.mts.map +1 -1
  29. package/dist/index.mjs +114 -53
  30. package/dist/index.mjs.map +1 -1
  31. package/dist/storage/index.cjs +1 -1
  32. package/dist/storage/index.mjs +1 -1
  33. package/dist/{tsconfig-Cstsoprg.mjs → tsconfig-CI6bla4E.mjs} +2 -2
  34. package/dist/{tsconfig-Cstsoprg.mjs.map → tsconfig-CI6bla4E.mjs.map} +1 -1
  35. package/dist/{tsconfig-DeyWQC2N.cjs → tsconfig-QMSxSwBD.cjs} +1 -1
  36. package/dist/typescript/index.cjs +1 -1
  37. package/dist/typescript/index.mjs +1 -1
  38. package/dist/{virtual-CUgOdyIa.mjs → virtual-CYGZHTDd.mjs} +5 -5
  39. package/dist/virtual-CYGZHTDd.mjs.map +1 -0
  40. package/dist/{virtual-1hYa9zCy.cjs → virtual-Ct3ZqPeN.cjs} +2 -2
  41. package/package.json +3 -3
  42. package/dist/base-context-D_ZidDDm.mjs.map +0 -1
  43. package/dist/execution-context-zedP0h4Z.mjs.map +0 -1
  44. 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-w4fts28j.cjs');
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/helpers.ts
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?.level) && data?.args) return {
31
- level: data.level,
32
- source: (0, _stryke_type_checks_is_set.isSet)(data.source) ? String(data.source) : void 0,
33
- environment: (0, _stryke_type_checks_is_set.isSet)(data.environment) ? String(data.environment) : void 0,
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("Invalid \"write-log\" message payload.");
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("Invalid \"update-command\" message payload.");
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("Invalid \"update-hook\" message payload.");
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("Invalid \"update-plugin\" message payload.");
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, log: _log, ...rest } = this.options;
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
- log("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.`);
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
- log("error", `Worker exited with code: ${code} and signal: ${signal}`);
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
- log("trace", `Received IPC message from worker: ${JSON.stringify(message)}`);
322
- switch (message.type) {
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
- log: api.context.createLog()
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 };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;AAgDA;;;;;;cAAa,gBAAA,YAA4B,MAAA,EAAQ,eAAA;EAAA;EAkEtC;;;;;;EAAA,OAjDW,WAAA,CAClB,OAAA,EAAS,aAAA,GACR,OAAA,CAAQ,gBAAA;EAyFY;;;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;EAnPoC;;;;;;;;;EA+Q1B,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;EAAA,CAUd,MAAA,CAAO,YAAA,KAAa,OAAA;AAAA"}
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 };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;AAgDA;;;;;;cAAa,gBAAA,YAA4B,MAAA,EAAQ,eAAA;EAAA;EAkEtC;;;;;;EAAA,OAjDW,WAAA,CAClB,OAAA,EAAS,aAAA,GACR,OAAA,CAAQ,gBAAA;EAyFY;;;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;EAnPoC;;;;;;;;;EA+Q1B,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;EAAA,CAUd,MAAA,CAAO,YAAA,KAAa,OAAA;AAAA"}
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-PQ3BgcgR.mjs";
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/helpers.ts
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?.level) && data?.args) return {
29
- level: data.level,
30
- source: isSet(data.source) ? String(data.source) : void 0,
31
- environment: isSet(data.environment) ? String(data.environment) : void 0,
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("Invalid \"write-log\" message payload.");
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("Invalid \"update-command\" message payload.");
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("Invalid \"update-hook\" message payload.");
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("Invalid \"update-plugin\" message payload.");
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, log: _log, ...rest } = this.options;
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
- log("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.`);
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
- log("error", `Worker exited with code: ${code} and signal: ${signal}`);
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
- log("trace", `Received IPC message from worker: ${JSON.stringify(message)}`);
320
- switch (message.type) {
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
- log: api.context.createLog()
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