@3fv/electron-utility-process-manager 1.0.1

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 (97) hide show
  1. package/.prettierrc.js +14 -0
  2. package/README.md +166 -0
  3. package/examples/lib-examples/complex/complex-main.d.ts +1 -0
  4. package/examples/lib-examples/complex/complex-main.js +108 -0
  5. package/examples/lib-examples/complex/complex-main.js.map +1 -0
  6. package/examples/lib-examples/complex/complex-node.d.ts +1 -0
  7. package/examples/lib-examples/complex/complex-node.js +17 -0
  8. package/examples/lib-examples/complex/complex-node.js.map +1 -0
  9. package/examples/lib-examples/complex/complex-renderer.d.ts +1 -0
  10. package/examples/lib-examples/complex/complex-renderer.js +18 -0
  11. package/examples/lib-examples/complex/complex-renderer.js.map +1 -0
  12. package/examples/lib-examples/complex/complex-types.d.ts +3 -0
  13. package/examples/lib-examples/complex/complex-types.js +3 -0
  14. package/examples/lib-examples/complex/complex-types.js.map +1 -0
  15. package/examples/lib-examples/simple/simple-main.d.ts +1 -0
  16. package/examples/lib-examples/simple/simple-main.js +106 -0
  17. package/examples/lib-examples/simple/simple-main.js.map +1 -0
  18. package/examples/lib-examples/simple/simple-node.d.ts +1 -0
  19. package/examples/lib-examples/simple/simple-node.js +17 -0
  20. package/examples/lib-examples/simple/simple-node.js.map +1 -0
  21. package/examples/lib-examples/simple/simple-renderer.d.ts +1 -0
  22. package/examples/lib-examples/simple/simple-renderer.js +17 -0
  23. package/examples/lib-examples/simple/simple-renderer.js.map +1 -0
  24. package/jest.config.js +20 -0
  25. package/lib/cjs/common/clients.d.ts +103 -0
  26. package/lib/cjs/common/clients.js +180 -0
  27. package/lib/cjs/common/clients.js.map +1 -0
  28. package/lib/cjs/common/guards.d.ts +4 -0
  29. package/lib/cjs/common/guards.js +12 -0
  30. package/lib/cjs/common/guards.js.map +1 -0
  31. package/lib/cjs/common/index.d.ts +3 -0
  32. package/lib/cjs/common/index.js +20 -0
  33. package/lib/cjs/common/index.js.map +1 -0
  34. package/lib/cjs/common/types.d.ts +49 -0
  35. package/lib/cjs/common/types.js +21 -0
  36. package/lib/cjs/common/types.js.map +1 -0
  37. package/lib/cjs/index.d.ts +4 -0
  38. package/lib/cjs/index.js +34 -0
  39. package/lib/cjs/index.js.map +1 -0
  40. package/lib/cjs/main/UPMMainService.d.ts +69 -0
  41. package/lib/cjs/main/UPMMainService.js +292 -0
  42. package/lib/cjs/main/UPMMainService.js.map +1 -0
  43. package/lib/cjs/main/UPMMainServiceManager.d.ts +58 -0
  44. package/lib/cjs/main/UPMMainServiceManager.js +168 -0
  45. package/lib/cjs/main/UPMMainServiceManager.js.map +1 -0
  46. package/lib/cjs/main/index.d.ts +2 -0
  47. package/lib/cjs/main/index.js +19 -0
  48. package/lib/cjs/main/index.js.map +1 -0
  49. package/lib/cjs/node/UPMNodeProcess.d.ts +25 -0
  50. package/lib/cjs/node/UPMNodeProcess.js +155 -0
  51. package/lib/cjs/node/UPMNodeProcess.js.map +1 -0
  52. package/lib/cjs/node/index.d.ts +3 -0
  53. package/lib/cjs/node/index.js +23 -0
  54. package/lib/cjs/node/index.js.map +1 -0
  55. package/lib/cjs/renderer/UPMRendererClientFactory.d.ts +5 -0
  56. package/lib/cjs/renderer/UPMRendererClientFactory.js +77 -0
  57. package/lib/cjs/renderer/UPMRendererClientFactory.js.map +1 -0
  58. package/lib/cjs/renderer/index.d.ts +3 -0
  59. package/lib/cjs/renderer/index.js +23 -0
  60. package/lib/cjs/renderer/index.js.map +1 -0
  61. package/lib/mjs/common/clients.d.ts +103 -0
  62. package/lib/mjs/common/clients.js +173 -0
  63. package/lib/mjs/common/clients.js.map +1 -0
  64. package/lib/mjs/common/guards.d.ts +4 -0
  65. package/lib/mjs/common/guards.js +8 -0
  66. package/lib/mjs/common/guards.js.map +1 -0
  67. package/lib/mjs/common/index.d.ts +3 -0
  68. package/lib/mjs/common/index.js +4 -0
  69. package/lib/mjs/common/index.js.map +1 -0
  70. package/lib/mjs/common/types.d.ts +49 -0
  71. package/lib/mjs/common/types.js +18 -0
  72. package/lib/mjs/common/types.js.map +1 -0
  73. package/lib/mjs/index.d.ts +4 -0
  74. package/lib/mjs/index.js +5 -0
  75. package/lib/mjs/index.js.map +1 -0
  76. package/lib/mjs/main/UPMMainService.d.ts +69 -0
  77. package/lib/mjs/main/UPMMainService.js +262 -0
  78. package/lib/mjs/main/UPMMainService.js.map +1 -0
  79. package/lib/mjs/main/UPMMainServiceManager.d.ts +58 -0
  80. package/lib/mjs/main/UPMMainServiceManager.js +138 -0
  81. package/lib/mjs/main/UPMMainServiceManager.js.map +1 -0
  82. package/lib/mjs/main/index.d.ts +2 -0
  83. package/lib/mjs/main/index.js +3 -0
  84. package/lib/mjs/main/index.js.map +1 -0
  85. package/lib/mjs/node/UPMNodeProcess.d.ts +25 -0
  86. package/lib/mjs/node/UPMNodeProcess.js +125 -0
  87. package/lib/mjs/node/UPMNodeProcess.js.map +1 -0
  88. package/lib/mjs/node/index.d.ts +3 -0
  89. package/lib/mjs/node/index.js +4 -0
  90. package/lib/mjs/node/index.js.map +1 -0
  91. package/lib/mjs/renderer/UPMRendererClientFactory.d.ts +5 -0
  92. package/lib/mjs/renderer/UPMRendererClientFactory.js +47 -0
  93. package/lib/mjs/renderer/UPMRendererClientFactory.js.map +1 -0
  94. package/lib/mjs/renderer/index.d.ts +3 -0
  95. package/lib/mjs/renderer/index.js +4 -0
  96. package/lib/mjs/renderer/index.js.map +1 -0
  97. package/package.json +104 -0
@@ -0,0 +1,25 @@
1
+ import * as UPM from "../common";
2
+ export declare class UPMNodeProcess<ReqMap extends UPM.MessageRequestMap = any, MType extends UPM.MessageRequestNames<ReqMap> = UPM.MessageRequestNames<ReqMap>> {
3
+ readonly processPort: Electron.ParentPort;
4
+ private readonly clientPorts_;
5
+ private readonly requestHandlers_;
6
+ private readonly eventHandlers_;
7
+ private onServiceClientPort;
8
+ private onServiceMessage;
9
+ private onMessage;
10
+ private constructor();
11
+ addRequestHandler<Type extends MType>(type: Type, handler: UPM.RequestHandler<ReqMap, Type>): void;
12
+ addEventHandler(handler: UPM.EventHandler): void;
13
+ /**
14
+ * Singleton instance
15
+ *
16
+ * @private
17
+ */
18
+ private static sInstance_;
19
+ /**
20
+ * Get singleton instance
21
+ */
22
+ static get(): UPMNodeProcess;
23
+ }
24
+ declare const upmNodeProcess: UPMNodeProcess<any, string | number | symbol>;
25
+ export default upmNodeProcess;
@@ -0,0 +1,125 @@
1
+ import { assert, isPromise } from "@3fv/guard";
2
+ import { match } from "ts-pattern";
3
+ import * as UPM from "../common";
4
+ import Tracer from "tracer";
5
+ import { Future } from "@3fv/prelude-ts";
6
+ const log = Tracer.colorConsole();
7
+ export class UPMNodeProcess {
8
+ onServiceClientPort(clientId, port) {
9
+ log.info(`Received new client port for clientId (${clientId})`);
10
+ assert(!this.clientPorts_.has(clientId), `port already registered for clientId(${clientId})`);
11
+ port.on("message", (ev) => {
12
+ var _a, _b;
13
+ const envelope = ((_b = (_a = ev.data) === null || _a === void 0 ? void 0 : _a.message) !== null && _b !== void 0 ? _b : ev.data), { channel, payload } = envelope;
14
+ log.info(`Message received on client port (${clientId})`, envelope);
15
+ assert(channel === UPM.IPCChannel.UPMServiceMessage, `Only IPCChannel.UPMServiceMessage are allowed on client ports: ${channel}`);
16
+ Future.of(this.onServiceMessage(clientId, port, payload))
17
+ .onFailure(err => log.error(`Unable to handle message`, err));
18
+ });
19
+ port.on("close", () => {
20
+ this.clientPorts_.delete(clientId);
21
+ });
22
+ port.start();
23
+ }
24
+ async onServiceMessage(clientId, port, payload) {
25
+ log.info(`onServiceMessage from (clientId=${clientId})`, payload);
26
+ const { messageId, kind, args, eventData, type } = payload;
27
+ await match(kind)
28
+ .with(UPM.MessageKind.Request, async () => {
29
+ var _a;
30
+ try {
31
+ assert(this.requestHandlers_.has(type), `Unknown request handler (${type})`);
32
+ const handler = this.requestHandlers_.get(type);
33
+ const result = await handler(type, messageId, ...args), msg = {
34
+ channel: UPM.IPCChannel.UPMServiceMessage,
35
+ payload: {
36
+ type,
37
+ kind: UPM.MessageKind.Response,
38
+ messageId,
39
+ result
40
+ }
41
+ };
42
+ port.postMessage(msg);
43
+ }
44
+ catch (err) {
45
+ log.error(`Unable to handle message`, err);
46
+ const msg = {
47
+ channel: UPM.IPCChannel.UPMServiceMessage,
48
+ payload: {
49
+ type,
50
+ kind: UPM.MessageKind.Response,
51
+ messageId,
52
+ result: null,
53
+ error: (_a = err.message) !== null && _a !== void 0 ? _a : err.toString()
54
+ }
55
+ };
56
+ port.postMessage(msg);
57
+ }
58
+ })
59
+ .with(UPM.MessageKind.Event, async () => {
60
+ try {
61
+ for (const handler of this.eventHandlers_) {
62
+ let res = handler(clientId, port, eventData);
63
+ if (isPromise(res)) {
64
+ const resPromise = res;
65
+ res = await resPromise;
66
+ }
67
+ if (res === true) {
68
+ log.info(`Successfully handled (${messageId}) event`);
69
+ return;
70
+ }
71
+ }
72
+ }
73
+ catch (err) {
74
+ log.error(`Unable to handle event (${messageId})`, err);
75
+ }
76
+ })
77
+ .otherwise(async (kind) => {
78
+ log.error(`Message kind (${kind}) is invalid here`);
79
+ });
80
+ }
81
+ onMessage(port, message) {
82
+ var _a, _b;
83
+ log.info(`Message received on utilityProcess`, message.data);
84
+ const { channel, payload } = ((_b = (_a = message.data) === null || _a === void 0 ? void 0 : _a.message) !== null && _b !== void 0 ? _b : message.data);
85
+ match(channel)
86
+ .when(c => c === UPM.IPCChannel.UPMServiceMessage, () => this.onServiceMessage("main", port, payload))
87
+ .when(c => c === UPM.IPCChannel.UPMServiceNewClient, () => this.onServiceClientPort(payload.clientId, message.ports[0]))
88
+ .otherwise(c => {
89
+ log.error(`Unknown channel (${c})`);
90
+ });
91
+ }
92
+ constructor() {
93
+ this.processPort = process.parentPort;
94
+ this.clientPorts_ = new Map();
95
+ this.requestHandlers_ = new Map();
96
+ this.eventHandlers_ = Array();
97
+ this.processPort.on("message", (message) => this.onMessage(this.processPort, message));
98
+ }
99
+ addRequestHandler(type, handler) {
100
+ log.info(`Registering request handler for type (${type.toString()})`);
101
+ this.requestHandlers_.set(type, handler);
102
+ }
103
+ addEventHandler(handler) {
104
+ log.info(`Registering event handler`);
105
+ this.eventHandlers_.push(handler);
106
+ }
107
+ /**
108
+ * Get singleton instance
109
+ */
110
+ static get() {
111
+ if (!this.sInstance_) {
112
+ this.sInstance_ = new UPMNodeProcess();
113
+ }
114
+ return this.sInstance_;
115
+ }
116
+ }
117
+ /**
118
+ * Singleton instance
119
+ *
120
+ * @private
121
+ */
122
+ UPMNodeProcess.sInstance_ = null;
123
+ const upmNodeProcess = UPMNodeProcess.get();
124
+ export default upmNodeProcess;
125
+ //# sourceMappingURL=UPMNodeProcess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UPMNodeProcess.js","sourceRoot":"","sources":["../../../src/node/UPMNodeProcess.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import UPMNodeProcess from "./UPMNodeProcess";
2
+ export * from "./UPMNodeProcess";
3
+ export default UPMNodeProcess;
@@ -0,0 +1,4 @@
1
+ import UPMNodeProcess from "./UPMNodeProcess";
2
+ export * from "./UPMNodeProcess";
3
+ export default UPMNodeProcess;
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/node/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAC7C,cAAc,kBAAkB,CAAA;AAChC,eAAe,cAAc,CAAA"}
@@ -0,0 +1,5 @@
1
+ import * as UPM from "../common";
2
+ export declare class UPMRendererClientFactory {
3
+ static createClient<ReqMap extends UPM.MessageRequestMap = any, MType extends UPM.MessageRequestNames<ReqMap> = UPM.MessageRequestNames<ReqMap>>(serviceName: string, clientId?: string): Promise<UPM.MessagePortClient<ReqMap, MType>>;
4
+ }
5
+ export default UPMRendererClientFactory;
@@ -0,0 +1,47 @@
1
+ import * as UPM from "../common";
2
+ import { Deferred } from "@3fv/deferred";
3
+ import { ipcRenderer } from "electron";
4
+ import { assert } from "@3fv/guard";
5
+ import Tracer from "tracer";
6
+ const log = Tracer.colorConsole();
7
+ export class UPMRendererClientFactory {
8
+ static async createClient(serviceName, clientId = "renderer") {
9
+ const deferred = new Deferred();
10
+ const onNewClient = (ev, data) => {
11
+ try {
12
+ const { serviceName: portServiceName, clientId: portClientId } = data;
13
+ log.info(`Received new client & port for (service=${serviceName},portServiceName=${portServiceName},clientId=${clientId},portClientId=${portClientId})`);
14
+ if (serviceName === portServiceName && clientId === portClientId) {
15
+ log.info(`Matched client & service`);
16
+ if (ev.ports.length !== 1) {
17
+ deferred.reject(Error("A least 1 port must be transferred"));
18
+ }
19
+ else {
20
+ const port = ev.ports[0];
21
+ deferred.resolve(new UPM.MessagePortClient(clientId, port));
22
+ }
23
+ }
24
+ }
25
+ catch (err) {
26
+ log.error(`OnNewClient error`, err);
27
+ deferred.reject(err);
28
+ }
29
+ };
30
+ try {
31
+ ipcRenderer.on(UPM.IPCChannel.UPMServiceNewClient, onNewClient);
32
+ ipcRenderer.send(UPM.IPCChannel.UPMServiceNewClient, serviceName, clientId);
33
+ const serviceClient = await deferred.promise;
34
+ assert(!!serviceClient.port, "Port should be valid after new client resolve");
35
+ }
36
+ catch (err) {
37
+ deferred.reject(err);
38
+ throw err;
39
+ }
40
+ finally {
41
+ ipcRenderer.off(UPM.IPCChannel.UPMServiceNewClient, onNewClient);
42
+ }
43
+ return deferred.promise;
44
+ }
45
+ }
46
+ export default UPMRendererClientFactory;
47
+ //# sourceMappingURL=UPMRendererClientFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UPMRendererClientFactory.js","sourceRoot":"","sources":["../../../src/renderer/UPMRendererClientFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,EAAE,CAAA;AAEjC,MAAM,OAAO,wBAAwB;IAEnC,MAAM,CAAC,KAAK,CAAC,YAAY,CAGvB,WAAmB,EAAE,WAAmB,UAAU;QAClD,MAAM,QAAQ,GAAI,IAAI,QAAQ,EAAuC,CAAA;QAErE,MAAM,WAAW,GAAG,CAAC,EAA6B,EAAE,IAA4C,EAAE,EAAE;YAClG,IAAI,CAAC;gBACH,MAAM,EAAC,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAC,GAAG,IAAI,CAAA;gBAEnE,GAAG,CAAC,IAAI,CAAC,2CAA2C,WAAW,oBAAoB,eAAe,aAAa,QAAQ,iBAAiB,YAAY,GAAG,CAAC,CAAA;gBAGxJ,IAAI,WAAW,KAAK,eAAe,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;oBACjE,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;oBACpC,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC1B,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAA;oBAC9D,CAAC;yBAAM,CAAC;wBACN,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;wBACxB,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAA;oBAC7D,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAA;gBACnC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACtB,CAAC;QACH,CAAC,CAAA;QAED,IAAI,CAAC;YACH,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAA;YAC/D,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,mBAAmB,EAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;YAE1E,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAA;YAC5C,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,+CAA+C,CAAC,CAAA;QAC/E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACpB,MAAM,GAAG,CAAA;QACX,CAAC;gBAAS,CAAC;YACT,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAA;QAClE,CAAC;QAED,OAAO,QAAQ,CAAC,OAAO,CAAA;IACzB,CAAC;CAEF;AAED,eAAe,wBAAwB,CAAA"}
@@ -0,0 +1,3 @@
1
+ import UPMRendererClientFactory from "./UPMRendererClientFactory";
2
+ export * from "./UPMRendererClientFactory";
3
+ export default UPMRendererClientFactory;
@@ -0,0 +1,4 @@
1
+ import UPMRendererClientFactory from "./UPMRendererClientFactory";
2
+ export * from "./UPMRendererClientFactory";
3
+ export default UPMRendererClientFactory;
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/renderer/index.ts"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,MAAM,4BAA4B,CAAA;AAEjE,cAAc,4BAA4B,CAAA;AAC1C,eAAe,wBAAwB,CAAA"}
package/package.json ADDED
@@ -0,0 +1,104 @@
1
+ {
2
+ "name": "@3fv/electron-utility-process-manager",
3
+ "version": "1.0.1",
4
+ "description": "electron-utility-process-manager",
5
+ "author": "Jonathan Glanz",
6
+ "license": "MIT",
7
+ "bugs": {
8
+ "url": "https://github.com/3fv/electron-utility-process-manager/issues"
9
+ },
10
+ "homepage": "https://github.com/3fv/electron-utility-process-manager#readme",
11
+ "main": "./lib/cjs/index.js",
12
+ "module": "./lib/mjs/index.js",
13
+ "types": "./lib/mjs/index.d.ts",
14
+ "exports": {
15
+ ".": {
16
+ "import": "./lib/mjs/index.js",
17
+ "require": "./lib/cjs/index.js"
18
+ },
19
+ "./main": {
20
+ "types": "./lib/mjs/main/index.d.ts",
21
+ "node": "./lib/cjs/main/index.js",
22
+ "import": "./lib/mjs/main/index.js",
23
+ "require": "./lib/cjs/main/index.js"
24
+ },
25
+ "./renderer": {
26
+ "types": "./lib/mjs/renderer/index.d.ts",
27
+ "import": "./lib/mjs/renderer/index.js",
28
+ "require": "./lib/cjs/renderer/index.js"
29
+ },
30
+ "./node": {
31
+ "types": "./lib/mjs/node/index.d.ts",
32
+ "import": "./lib/mjs/node/index.js",
33
+ "require": "./lib/cjs/node/index.js"
34
+ }
35
+ },
36
+ "scripts": {
37
+ "build": "node ./scripts/build.mjs",
38
+ "build:link": "yarn run build && yarn unlink;yarn link",
39
+ "build:watch": "run-s build:link && yarn run build --watch",
40
+ "test": "yarn run build && jest",
41
+ "test:watch": "yarn run build && jest --watchAll --no-cache",
42
+ "test:dev": "run-s build && run-p test:watch build:watch",
43
+ "preversion": "yarn build",
44
+ "preversion::with-tests": "yarn build && yarn test",
45
+ "clean": "./scripts/clean.sh",
46
+ "postversion": "node ./scripts/release.mjs latest",
47
+ "release": "yarn build && yarn version --patch --non-interactive"
48
+ },
49
+ "publishConfig": {
50
+ "access": "public"
51
+ },
52
+ "repository": {
53
+ "type": "git",
54
+ "url": "https://github.com/3fv/electron-utility-process-manager.git"
55
+ },
56
+ "keywords": [
57
+ "typescript",
58
+ "logger",
59
+ "proxy"
60
+ ],
61
+ "files": [
62
+ "**/*.d.ts",
63
+ "**/*.js",
64
+ "**/*.map",
65
+ "package.json"
66
+ ],
67
+ "dependencies": {
68
+ "@3fv/deferred": "latest",
69
+ "@3fv/guard": "latest",
70
+ "@3fv/prelude-ts": "latest",
71
+ "chalk": "^5.3.0",
72
+ "debug": "^4.3.6",
73
+ "lodash": "^4.17.21",
74
+ "tracer": "^1.3.0",
75
+ "ts-pattern": "^5.5.0"
76
+ },
77
+ "peerDependencies": {
78
+ "electron": "^30"
79
+ },
80
+ "devDependencies": {
81
+ "@faker-js/faker": "^8.4.1",
82
+ "@types/chalk": "^2.2.0",
83
+ "@types/debug": "^4.1.12",
84
+ "@types/jest": "^29.5.12",
85
+ "@types/lodash": "^4.17.7",
86
+ "@types/node": "^22.9.0",
87
+ "@types/shelljs": "^0.8.15",
88
+ "cross-env": "^7.0.3",
89
+ "electron": "^33.2.0",
90
+ "electronmon": "^2.0.3",
91
+ "jest": "^29.7.0",
92
+ "lodash": "^4.17.21",
93
+ "npm-run-all": "^4.1.5",
94
+ "prettier": "^3.3.3",
95
+ "semver": "^7.6.3",
96
+ "shelljs": "^0.8.5",
97
+ "source-map-support": "^0.5.21",
98
+ "supports-color": "^9.4.0",
99
+ "ts-jest": "^29.2.4",
100
+ "ts-node": "^10.9.2",
101
+ "typescript": "^5.5.4",
102
+ "zx": "^8.1.4"
103
+ }
104
+ }