@companion-module/base 1.14.0-0-nightly-main-20251113-203236-30c5c0c → 1.99.0-0-nightly-feat-split-api-20251221-153951-fa12995

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 (122) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +12 -11
  3. package/dist/__mocks__/net.d.ts +30 -0
  4. package/dist/__mocks__/net.js +108 -0
  5. package/dist/__mocks__/net.js.map +1 -0
  6. package/dist/__mocks__/util.d.ts +8 -0
  7. package/dist/__mocks__/util.js +44 -0
  8. package/dist/__mocks__/util.js.map +1 -0
  9. package/dist/common/json-value.d.ts +0 -1
  10. package/dist/common/osc.d.ts +0 -1
  11. package/dist/entrypoint.d.ts +9 -1
  12. package/dist/entrypoint.js +4 -122
  13. package/dist/entrypoint.js.map +1 -1
  14. package/dist/helpers/__tests__/tcp.spec.d.ts +1 -0
  15. package/dist/helpers/__tests__/tcp.spec.js +210 -0
  16. package/dist/helpers/__tests__/tcp.spec.js.map +1 -0
  17. package/dist/helpers/__tests__/udp.spec.d.ts +1 -0
  18. package/dist/helpers/__tests__/udp.spec.js +200 -0
  19. package/dist/helpers/__tests__/udp.spec.js.map +1 -0
  20. package/dist/helpers/index.d.ts +3 -4
  21. package/dist/helpers/index.js +4 -7
  22. package/dist/helpers/index.js.map +1 -1
  23. package/dist/helpers/tcp.d.ts +1 -3
  24. package/dist/helpers/telnet.d.ts +0 -1
  25. package/dist/helpers/udp.d.ts +1 -3
  26. package/dist/host-api/context.d.ts +59 -0
  27. package/dist/host-api/{api.js → context.js} +6 -1
  28. package/dist/host-api/context.js.map +1 -0
  29. package/dist/instance-base.d.ts +0 -1
  30. package/dist/logging.d.ts +20 -0
  31. package/dist/logging.js +25 -0
  32. package/dist/logging.js.map +1 -0
  33. package/dist/main.d.ts +8 -0
  34. package/dist/main.js +14 -0
  35. package/dist/main.js.map +1 -0
  36. package/dist/manifest.d.ts +2 -3
  37. package/dist/manifest.js.map +1 -1
  38. package/dist/module-api/__tests__/shared-udp-socket.spec.d.ts +1 -0
  39. package/dist/module-api/__tests__/shared-udp-socket.spec.js +272 -0
  40. package/dist/module-api/__tests__/shared-udp-socket.spec.js.map +1 -0
  41. package/dist/module-api/action.d.ts +0 -1
  42. package/dist/module-api/base.d.ts +3 -17
  43. package/dist/module-api/base.js +47 -320
  44. package/dist/module-api/base.js.map +1 -1
  45. package/dist/module-api/common.d.ts +0 -1
  46. package/dist/module-api/config.d.ts +0 -1
  47. package/dist/module-api/enums.d.ts +0 -2
  48. package/dist/module-api/enums.js.map +1 -1
  49. package/dist/module-api/feedback.d.ts +0 -1
  50. package/dist/module-api/http.d.ts +0 -1
  51. package/dist/module-api/index.d.ts +2 -2
  52. package/dist/module-api/index.js +1 -0
  53. package/dist/module-api/index.js.map +1 -1
  54. package/dist/module-api/input.d.ts +0 -1
  55. package/dist/module-api/preset.d.ts +0 -1
  56. package/dist/module-api/shared-udp-socket.d.ts +3 -5
  57. package/dist/module-api/shared-udp-socket.js +13 -15
  58. package/dist/module-api/shared-udp-socket.js.map +1 -1
  59. package/dist/module-api/style.d.ts +0 -1
  60. package/dist/module-api/upgrade.d.ts +0 -1
  61. package/dist/module-api/variable.d.ts +0 -1
  62. package/dist/util.d.ts +0 -1
  63. package/package.json +7 -36
  64. package/dist/common/json-value.d.ts.map +0 -1
  65. package/dist/common/osc.d.ts.map +0 -1
  66. package/dist/entrypoint.d.ts.map +0 -1
  67. package/dist/helpers/index.d.ts.map +0 -1
  68. package/dist/helpers/tcp.d.ts.map +0 -1
  69. package/dist/helpers/telnet.d.ts.map +0 -1
  70. package/dist/helpers/udp.d.ts.map +0 -1
  71. package/dist/host-api/api.d.ts +0 -389
  72. package/dist/host-api/api.d.ts.map +0 -1
  73. package/dist/host-api/api.js.map +0 -1
  74. package/dist/host-api/ipc-wrapper.d.ts +0 -37
  75. package/dist/host-api/ipc-wrapper.d.ts.map +0 -1
  76. package/dist/host-api/ipc-wrapper.js +0 -129
  77. package/dist/host-api/ipc-wrapper.js.map +0 -1
  78. package/dist/host-api/versions.d.ts +0 -12
  79. package/dist/host-api/versions.d.ts.map +0 -1
  80. package/dist/host-api/versions.js +0 -5
  81. package/dist/host-api/versions.js.map +0 -1
  82. package/dist/index.d.ts +0 -8
  83. package/dist/index.d.ts.map +0 -1
  84. package/dist/index.js +0 -22
  85. package/dist/index.js.map +0 -1
  86. package/dist/instance-base.d.ts.map +0 -1
  87. package/dist/internal/actions.d.ts +0 -16
  88. package/dist/internal/actions.d.ts.map +0 -1
  89. package/dist/internal/actions.js +0 -223
  90. package/dist/internal/actions.js.map +0 -1
  91. package/dist/internal/base.d.ts +0 -11
  92. package/dist/internal/base.d.ts.map +0 -1
  93. package/dist/internal/base.js +0 -39
  94. package/dist/internal/base.js.map +0 -1
  95. package/dist/internal/feedback.d.ts +0 -20
  96. package/dist/internal/feedback.d.ts.map +0 -1
  97. package/dist/internal/feedback.js +0 -307
  98. package/dist/internal/feedback.js.map +0 -1
  99. package/dist/internal/upgrade.d.ts +0 -15
  100. package/dist/internal/upgrade.d.ts.map +0 -1
  101. package/dist/internal/upgrade.js +0 -174
  102. package/dist/internal/upgrade.js.map +0 -1
  103. package/dist/manifest.d.ts.map +0 -1
  104. package/dist/module-api/action.d.ts.map +0 -1
  105. package/dist/module-api/base.d.ts.map +0 -1
  106. package/dist/module-api/common.d.ts.map +0 -1
  107. package/dist/module-api/config.d.ts.map +0 -1
  108. package/dist/module-api/enums.d.ts.map +0 -1
  109. package/dist/module-api/feedback.d.ts.map +0 -1
  110. package/dist/module-api/http.d.ts.map +0 -1
  111. package/dist/module-api/index.d.ts.map +0 -1
  112. package/dist/module-api/input.d.ts.map +0 -1
  113. package/dist/module-api/preset.d.ts.map +0 -1
  114. package/dist/module-api/shared-udp-socket.d.ts.map +0 -1
  115. package/dist/module-api/style.d.ts.map +0 -1
  116. package/dist/module-api/upgrade.d.ts.map +0 -1
  117. package/dist/module-api/variable.d.ts.map +0 -1
  118. package/dist/util.d.ts.map +0 -1
  119. package/lib/debounce-fn/index.d.ts +0 -83
  120. package/lib/debounce-fn/index.js +0 -78
  121. package/lib/debounce-fn/license +0 -9
  122. package/lib/debounce-fn/readme.md +0 -64
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.14.0](https://github.com/bitfocus/companion-module-base/compare/v1.13.4...v1.14.0) (2025-12-09)
4
+
5
+
6
+ ### Features
7
+
8
+ * add disableNewConfigLayout option ([36da934](https://github.com/bitfocus/companion-module-base/commit/36da9346c9b02d0040ddd13ac4cfba7cbf6258ff))
9
+ * add return value to `executeAction`, to let the host application identify action failure from other errors ([#160](https://github.com/bitfocus/companion-module-base/issues/160)) ([c67b18c](https://github.com/bitfocus/companion-module-base/commit/c67b18c350f910e1be3052942f9941986f2afe75))
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * secrets not updating in configUpdated ([623a575](https://github.com/bitfocus/companion-module-base/commit/623a5754b53f69a8b9b493020437495e0766a8b8))
15
+
16
+ ## [1.13.5](https://github.com/bitfocus/companion-module-base/compare/v1.13.4...v1.13.5) (2025-11-29)
17
+
18
+
19
+ ### Bug Fixes
20
+
21
+ * secrets not updating in configUpdated ([8d867a2](https://github.com/bitfocus/companion-module-base/commit/8d867a2c0b9b8d83a3481237a9fc558c91328db7))
22
+
3
23
  ## [1.13.4](https://github.com/bitfocus/companion-module-base/compare/v1.13.3...v1.13.4) (2025-10-18)
4
24
 
5
25
 
package/README.md CHANGED
@@ -8,17 +8,18 @@ In the future it will be possible to write modules in other languages, but it is
8
8
 
9
9
  Each version of Companion supports a limited range of versions of this library listed below. Any patch version (the third number) are not relevant for the compatibility check, so are not listed here
10
10
 
11
- | Companion | Module-base |
12
- | --------- | ------------------------- |
13
- | v3.0 | v1.0 - v1.4 |
14
- | v3.1 | v1.0 - v1.5 |
15
- | v3.2 | v1.0 - v1.7 |
16
- | v3.3 | v1.0 - v1.8 |
17
- | v3.4 | v1.0 - v1.10 |
18
- | v3.5 | v1.0 - v1.11 |
19
- | v4.0 | v1.0 - v1.12 |
20
- | v4.1 | v1.0 - v1.13 |
21
- | v4.2 | v1.0 - v1.13 (unconfirmed) |
11
+ | Companion | Module-base |
12
+ | --------- | -------------------------- |
13
+ | v3.0 | v1.0 - v1.4 |
14
+ | v3.1 | v1.0 - v1.5 |
15
+ | v3.2 | v1.0 - v1.7 |
16
+ | v3.3 | v1.0 - v1.8 |
17
+ | v3.4 | v1.0 - v1.10 |
18
+ | v3.5 | v1.0 - v1.11 |
19
+ | v4.0 | v1.0 - v1.12 |
20
+ | v4.1 | v1.0 - v1.13 |
21
+ | v4.2 | v1.0 - v1.14 |
22
+ | v4.3 | v1.0 - v1.15 (unconfirmed) |
22
23
 
23
24
  ## Getting started with a new module
24
25
 
@@ -0,0 +1,30 @@
1
+ import { EventEmitter } from 'events';
2
+ export declare class Socket extends EventEmitter {
3
+ onWrite: ((buff: Buffer, encoding: string) => void) | undefined;
4
+ onConnect: ((port: number, host: string) => void) | undefined;
5
+ onClose: (() => void) | undefined;
6
+ private _connected;
7
+ destroyed: boolean;
8
+ configOps: Array<any[]>;
9
+ constructor();
10
+ static mockSockets(): Socket[];
11
+ static mockClearSockets(): void;
12
+ static mockOnNextSocket(cb: (s: Socket) => void): void;
13
+ connect(port: number, host?: string, cb?: () => void): void;
14
+ write(buf: Buffer, cb?: () => void): void;
15
+ write(buf: Buffer, encoding?: BufferEncoding, cb?: () => void): void;
16
+ end(): void;
17
+ mockClose(): void;
18
+ mockData(data: string): void;
19
+ setNoDelay(noDelay?: boolean): void;
20
+ setEncoding(encoding?: BufferEncoding): void;
21
+ setKeepAlive(enable?: boolean, initialDelay?: number): void;
22
+ destroy(): void;
23
+ private setConnected;
24
+ private setClosed;
25
+ private setEnd;
26
+ }
27
+ declare const _default: {
28
+ Socket: typeof Socket;
29
+ };
30
+ export default _default;
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Socket = void 0;
4
+ const events_1 = require("events");
5
+ const sockets = [];
6
+ const onNextSocket = [];
7
+ const orgSetImmediate = setImmediate;
8
+ class Socket extends events_1.EventEmitter {
9
+ onWrite;
10
+ onConnect;
11
+ onClose;
12
+ // private _port: number
13
+ // private _host: string
14
+ _connected = false;
15
+ destroyed = false;
16
+ configOps = [];
17
+ constructor() {
18
+ super();
19
+ const cb = onNextSocket.shift();
20
+ if (cb) {
21
+ cb(this);
22
+ }
23
+ sockets.push(this);
24
+ }
25
+ static mockSockets() {
26
+ return sockets;
27
+ }
28
+ static mockClearSockets() {
29
+ sockets.length = 0;
30
+ }
31
+ static mockOnNextSocket(cb) {
32
+ onNextSocket.push(cb);
33
+ }
34
+ // this.emit('connect')
35
+ // this.emit('close')
36
+ // this.emit('end')
37
+ connect(port, host = 'localhost', cb) {
38
+ // this._port = port
39
+ // this._host = host
40
+ if (this.onConnect)
41
+ this.onConnect(port, host);
42
+ orgSetImmediate(() => {
43
+ if (cb) {
44
+ cb();
45
+ }
46
+ this.setConnected();
47
+ });
48
+ }
49
+ write(buf, encodingOrCb, cb) {
50
+ const DEFAULT_ENCODING = 'utf-8';
51
+ cb = typeof encodingOrCb === 'function' ? encodingOrCb : cb;
52
+ const encoding = typeof encodingOrCb === 'function' ? DEFAULT_ENCODING : encodingOrCb;
53
+ if (this.onWrite) {
54
+ this.onWrite(buf, encoding ?? DEFAULT_ENCODING);
55
+ }
56
+ if (cb)
57
+ cb();
58
+ }
59
+ end() {
60
+ this.setEnd();
61
+ this.setClosed();
62
+ }
63
+ mockClose() {
64
+ this.setClosed();
65
+ }
66
+ mockData(data) {
67
+ this.emit('data', data);
68
+ }
69
+ setNoDelay(noDelay) {
70
+ // noop
71
+ this.configOps.push(['setNoDelay', noDelay]);
72
+ }
73
+ setEncoding(encoding) {
74
+ // noop
75
+ this.configOps.push(['setEncoding', encoding]);
76
+ }
77
+ setKeepAlive(enable, initialDelay) {
78
+ // noop
79
+ this.configOps.push(['setKeepAlive', enable, initialDelay]);
80
+ }
81
+ destroy() {
82
+ this.destroyed = true;
83
+ }
84
+ setConnected() {
85
+ if (this._connected !== true) {
86
+ this._connected = true;
87
+ }
88
+ this.emit('connect');
89
+ }
90
+ setClosed() {
91
+ if (this._connected !== false) {
92
+ this._connected = false;
93
+ }
94
+ this.destroyed = true;
95
+ this.emit('close');
96
+ if (this.onClose)
97
+ this.onClose();
98
+ }
99
+ setEnd() {
100
+ if (this._connected !== false) {
101
+ this._connected = false;
102
+ }
103
+ this.emit('end');
104
+ }
105
+ }
106
+ exports.Socket = Socket;
107
+ exports.default = { Socket };
108
+ //# sourceMappingURL=net.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"net.js","sourceRoot":"","sources":["../../src/__mocks__/net.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare function runAllTimers(): Promise<void>;
2
+ export declare function runTimersUntilNow(): Promise<void>;
3
+ export interface ManualPromise<T> extends Promise<T> {
4
+ isResolved: boolean;
5
+ manualResolve(res: T): void;
6
+ manualReject(e: Error): void;
7
+ }
8
+ export declare function createManualPromise<T>(): ManualPromise<T>;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runAllTimers = runAllTimers;
4
+ exports.runTimersUntilNow = runTimersUntilNow;
5
+ exports.createManualPromise = createManualPromise;
6
+ const vitest_1 = require("vitest");
7
+ const orgSetTimeout = setTimeout;
8
+ async function runAllTimers() {
9
+ // Run all timers, and wait, multiple times.
10
+ // This is to allow timers AND internal promises to resolve in inner functions
11
+ for (let i = 0; i < 50; i++) {
12
+ vitest_1.vi.runOnlyPendingTimers();
13
+ await new Promise((resolve) => orgSetTimeout(resolve, 0));
14
+ }
15
+ }
16
+ async function runTimersUntilNow() {
17
+ // Run all timers, and wait, multiple times.
18
+ // This is to allow timers AND internal promises to resolve in inner functions
19
+ for (let i = 0; i < 50; i++) {
20
+ vitest_1.vi.advanceTimersByTime(0);
21
+ await new Promise((resolve) => orgSetTimeout(resolve, 0));
22
+ }
23
+ }
24
+ // eslint-disable-next-line @typescript-eslint/promise-function-async
25
+ function createManualPromise() {
26
+ let resolve = () => null;
27
+ let reject = () => null;
28
+ const promise = new Promise((resolve0, reject0) => {
29
+ resolve = resolve0;
30
+ reject = reject0;
31
+ });
32
+ const manualPromise = promise;
33
+ manualPromise.isResolved = false;
34
+ manualPromise.manualReject = (err) => {
35
+ manualPromise.isResolved = true;
36
+ return reject(err);
37
+ };
38
+ manualPromise.manualResolve = (val) => {
39
+ manualPromise.isResolved = true;
40
+ return resolve(val);
41
+ };
42
+ return manualPromise;
43
+ }
44
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/__mocks__/util.ts"],"names":[],"mappings":";;AAGA,oCAOC;AAED,8CAOC;AAQD,kDAoBC;AA/CD,mCAA2B;AAE3B,MAAM,aAAa,GAAG,UAAU,CAAA;AACzB,KAAK,UAAU,YAAY;IACjC,4CAA4C;IAC5C,8EAA8E;IAC9E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,WAAE,CAAC,oBAAoB,EAAE,CAAA;QACzB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;IAC1D,CAAC;AACF,CAAC;AAEM,KAAK,UAAU,iBAAiB;IACtC,4CAA4C;IAC5C,8EAA8E;IAC9E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,WAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAA;QACzB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;IAC1D,CAAC;AACF,CAAC;AAOD,qEAAqE;AACrE,SAAgB,mBAAmB;IAClC,IAAI,OAAO,GAAqB,GAAG,EAAE,CAAC,IAAI,CAAA;IAC1C,IAAI,MAAM,GAAyB,GAAG,EAAE,CAAC,IAAI,CAAA;IAC7C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;QACpD,OAAO,GAAG,QAAQ,CAAA;QAClB,MAAM,GAAG,OAAO,CAAA;IACjB,CAAC,CAAC,CAAA;IAEF,MAAM,aAAa,GAAqB,OAAc,CAAA;IACtD,aAAa,CAAC,UAAU,GAAG,KAAK,CAAA;IAChC,aAAa,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,EAAE;QACpC,aAAa,CAAC,UAAU,GAAG,IAAI,CAAA;QAC/B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;IACnB,CAAC,CAAA;IACD,aAAa,CAAC,aAAa,GAAG,CAAC,GAAG,EAAE,EAAE;QACrC,aAAa,CAAC,UAAU,GAAG,IAAI,CAAA;QAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,CAAA;IACpB,CAAC,CAAA;IAED,OAAO,aAAa,CAAA;AACrB,CAAC"}
@@ -30,4 +30,3 @@ Matches any valid JSON value.
30
30
  @category JSON
31
31
  */
32
32
  export type JsonValue = JsonPrimitive | JsonObject | JsonArray;
33
- //# sourceMappingURL=json-value.d.ts.map
@@ -14,4 +14,3 @@ export type OSCMetaArgument = {
14
14
  value: Uint8Array;
15
15
  };
16
16
  export type OSCSomeArguments = OSCArgument | Array<OSCArgument> | OSCMetaArgument | Array<OSCMetaArgument>;
17
- //# sourceMappingURL=osc.d.ts.map
@@ -1,5 +1,14 @@
1
1
  import type { CompanionStaticUpgradeScript } from './module-api/upgrade.js';
2
2
  import type { InstanceBase } from './module-api/base.js';
3
+ declare global {
4
+ /**
5
+ * INTERNAL USE ONLY
6
+ */
7
+ var COMPANION_ENTRYPOINT_INFO: {
8
+ factory: InstanceConstructor<any, any>;
9
+ upgradeScripts: CompanionStaticUpgradeScript<any, any>[];
10
+ } | undefined;
11
+ }
3
12
  export type InstanceConstructor<TConfig, TSecrets> = new (internal: unknown) => InstanceBase<TConfig, TSecrets>;
4
13
  /**
5
14
  * Setup the module for execution
@@ -8,4 +17,3 @@ export type InstanceConstructor<TConfig, TSecrets> = new (internal: unknown) =>
8
17
  * @param upgradeScripts Upgrade scripts
9
18
  */
10
19
  export declare function runEntrypoint<TConfig, TSecrets>(factory: InstanceConstructor<TConfig, TSecrets>, upgradeScripts: CompanionStaticUpgradeScript<TConfig, TSecrets>[]): void;
11
- //# sourceMappingURL=entrypoint.d.ts.map
@@ -1,27 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.runEntrypoint = runEntrypoint;
4
- const tslib_1 = require("tslib");
5
- /* eslint-disable n/no-process-exit */
6
- const versions_js_1 = require("./host-api/versions.js");
7
- const promises_1 = tslib_1.__importDefault(require("fs/promises"));
8
- const util_js_1 = require("./util.js");
9
- const ipc_wrapper_js_1 = require("./host-api/ipc-wrapper.js");
10
- const path_1 = tslib_1.__importDefault(require("path"));
11
- let hasEntrypoint = false;
12
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
13
- let moduleInstance;
14
- // async function readFileUrl(url: URL): Promise<string> {
15
- // // Hack to make json files be loadable after being inlined by webpack
16
- // const prefix = 'application/json;base64,'
17
- // if (url.pathname.startsWith(prefix)) {
18
- // const base64 = url.pathname.substring(prefix.length)
19
- // return Buffer.from(base64, 'base64').toString()
20
- // }
21
- // // Fallback to reading from disk
22
- // const buf = await fs.readFile(url)
23
- // return buf.toString()
24
- // }
25
4
  /**
26
5
  * Setup the module for execution
27
6
  * This should be called once per-module, to register the class that should be executed
@@ -29,106 +8,9 @@ let moduleInstance;
29
8
  * @param upgradeScripts Upgrade scripts
30
9
  */
31
10
  function runEntrypoint(factory, upgradeScripts) {
32
- Promise.resolve()
33
- .then(async () => {
34
- // const pkgJsonStr = (await fs.readFile(path.join(__dirname, '../package.json'))).toString()
35
- // const pkgJson = JSON.parse(pkgJsonStr)
36
- // if (!pkgJson || pkgJson.name !== '@companion-module/base')
37
- // throw new Error('Failed to find the package.json for @companion-module/base')
38
- // if (!pkgJson.version) throw new Error('Missing version field in the package.json for @companion-module/base')
39
- // Ensure only called once per module
40
- if (hasEntrypoint)
41
- throw new Error(`runEntrypoint can only be called once`);
42
- hasEntrypoint = true;
43
- // Validate that the upgrade scripts look sane
44
- if (!upgradeScripts)
45
- upgradeScripts = [];
46
- if (!Array.isArray(upgradeScripts))
47
- throw new Error('upgradeScripts must be an array');
48
- for (const upgradeScript of upgradeScripts) {
49
- if (typeof upgradeScript !== 'function')
50
- throw new Error('upgradeScripts must be an array of functions');
51
- }
52
- const manifestPath = process.env.MODULE_MANIFEST;
53
- if (!manifestPath)
54
- throw new Error('Module initialise is missing MODULE_MANIFEST');
55
- // check manifest api field against apiVersion
56
- const manifestBlob = await promises_1.default.readFile(manifestPath);
57
- const manifestJson = JSON.parse(manifestBlob.toString());
58
- if (manifestJson.runtime?.api !== versions_js_1.HostApiNodeJsIpc)
59
- throw new Error(`Module manifest 'api' mismatch`);
60
- if (!manifestJson.runtime.apiVersion)
61
- throw new Error(`Module manifest 'apiVersion' missing`);
62
- let apiVersion = manifestJson.runtime.apiVersion;
63
- if (apiVersion === '0.0.0') {
64
- // It looks like the module is in dev mode. lets attempt to load the package.json from this module instead
65
- try {
66
- const baseJsonStr = await promises_1.default.readFile(path_1.default.join(__dirname, '../package.json'));
67
- const baseJson = JSON.parse(baseJsonStr.toString());
68
- if (baseJson.name === '@companion-module/base') {
69
- apiVersion = baseJson.version;
70
- }
71
- }
72
- catch (_e) {
73
- throw new Error('Failed to determine module api version');
74
- }
75
- }
76
- if (!process.send)
77
- throw new Error('Module is not being run with ipc');
78
- console.log(`Starting up module class: ${factory.name}`);
79
- const connectionId = process.env.CONNECTION_ID;
80
- if (typeof connectionId !== 'string' || !connectionId)
81
- throw new Error('Module initialise is missing CONNECTION_ID');
82
- const verificationToken = process.env.VERIFICATION_TOKEN;
83
- if (typeof verificationToken !== 'string' || !verificationToken)
84
- throw new Error('Module initialise is missing VERIFICATION_TOKEN');
85
- // Allow the DSN to be provided as an env variable
86
- // const sentryDsn = process.env.SENTRY_DSN
87
- // const sentryUserId = process.env.SENTRY_USERID
88
- // const sentryCompanionVersion = process.env.SENTRY_COMPANION_VERSION
89
- // if (sentryDsn && sentryUserId && sentryDsn.substring(0, 8) == 'https://') {
90
- // console.log('Sentry enabled')
91
- // init({
92
- // dsn: sentryDsn,
93
- // release: `${manifestJson.name}@${manifestJson.version}`,
94
- // beforeSend(event) {
95
- // if (event.exception) {
96
- // console.log('sentry', 'error', event.exception)
97
- // }
98
- // return event
99
- // },
100
- // })
101
- // {
102
- // const scope = getCurrentScope()
103
- // scope.setUser({ id: sentryUserId })
104
- // scope.setTag('companion', sentryCompanionVersion)
105
- // }
106
- // } else {
107
- // console.log('Sentry disabled')
108
- // }
109
- const ipcWrapper = new ipc_wrapper_js_1.IpcWrapper({}, (msg) => {
110
- process.send(msg);
111
- }, 5000);
112
- process.once('message', (msg) => {
113
- ipcWrapper.receivedMessage(msg);
114
- });
115
- moduleInstance = new factory((0, util_js_1.literal)({
116
- id: connectionId,
117
- upgradeScripts,
118
- _isInstanceBaseProps: true,
119
- }));
120
- ipcWrapper.sendWithCb('register', { apiVersion, connectionId, verificationToken }).then(() => {
121
- console.log(`Module-host accepted registration`);
122
- }, (err) => {
123
- console.error('Module registration failed', err);
124
- // Kill the process
125
- process.exit(11);
126
- });
127
- })
128
- .catch((e) => {
129
- console.error(`Failed to startup module:`);
130
- console.error(e.stack || e.message);
131
- process.exit(1);
132
- });
11
+ if (global.COMPANION_ENTRYPOINT_INFO)
12
+ throw new Error(`runEntrypoint can only be called once`);
13
+ // Future: In v2.0 of the api, this method should be removed and replaced with the module exporting a default class
14
+ global.COMPANION_ENTRYPOINT_INFO = { factory, upgradeScripts };
133
15
  }
134
16
  //# sourceMappingURL=entrypoint.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"entrypoint.js","sourceRoot":"","sources":["../src/entrypoint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entrypoint.js","sourceRoot":"","sources":["../src/entrypoint.ts"],"names":[],"mappings":";;AAuBA,sCAQC;AAdD;;;;;GAKG;AACH,SAAgB,aAAa,CAC5B,OAA+C,EAC/C,cAAiE;IAEjE,IAAI,MAAM,CAAC,yBAAyB;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;IAE9F,mHAAmH;IACnH,MAAM,CAAC,yBAAyB,GAAG,EAAE,OAAO,EAAE,cAAc,EAAE,CAAA;AAC/D,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const vitest_1 = require("vitest");
37
+ const tcp_js_1 = require("../tcp.js");
38
+ const net_1 = require("net");
39
+ const MockSocket = net_1.Socket;
40
+ vitest_1.vi.mock('net', async () => Promise.resolve().then(() => __importStar(require('../../__mocks__/net.js'))));
41
+ // async function sleepImmediate() {
42
+ // return new Promise((resolve) => setImmediate(resolve))
43
+ // }
44
+ (0, vitest_1.describe)('TCP', () => {
45
+ // beforeEach(() => {
46
+ // createSocketMock.mockClear()
47
+ // })
48
+ (0, vitest_1.afterEach)(() => {
49
+ MockSocket.mockClearSockets();
50
+ });
51
+ // it('call fail before open', () => {
52
+ // const { mockIpcWrapper, moduleTcpSockets } = createDeps()
53
+ // const socket = new TCPHelper(mockIpcWrapper, moduleTcpSockets, { type: 'tcp4' })
54
+ // expect(() => socket.destroy()).toThrow(/Socket is not open/)
55
+ // expect(() => socket.send('', 12, '')).toThrow(/Socket is not open/)
56
+ // })
57
+ (0, vitest_1.describe)('construct', () => {
58
+ (0, vitest_1.it)('ok', () => {
59
+ const socket = new tcp_js_1.TCPHelper('1.2.3.4', 852);
60
+ try {
61
+ (0, vitest_1.expect)(socket).toBeTruthy();
62
+ (0, vitest_1.expect)(MockSocket.mockSockets()).toHaveLength(1);
63
+ const rawSocket = MockSocket.mockSockets()[0];
64
+ (0, vitest_1.expect)(rawSocket.configOps).toHaveLength(2);
65
+ (0, vitest_1.expect)(rawSocket.configOps).toEqual([
66
+ ['setKeepAlive', true, undefined],
67
+ ['setNoDelay', true],
68
+ ]);
69
+ }
70
+ finally {
71
+ socket.destroy();
72
+ }
73
+ });
74
+ // it('bad bind', async () => {
75
+ // const rawSocket = new MinimalSocket()
76
+ // createSocketMock.mockReturnValueOnce(rawSocket as any)
77
+ // expect(() => new TCPHelper('1.2.3.4', 852)).toThrow('Unable to bind')
78
+ // expect(createSocketMock).toHaveBeenCalledTimes(1)
79
+ // expect(rawSocket.bind).toHaveBeenCalledTimes(1)
80
+ // expect(rawSocket.bind).toHaveBeenCalledWith(0, undefined)
81
+ // })
82
+ // it('ok', async () => {
83
+ // const rawSocket = new MinimalSocket()
84
+ // createSocketMock.mockReturnValueOnce(rawSocket as any)
85
+ // rawSocket.bind.mockImplementationOnce(() => {
86
+ // // No op
87
+ // return rawSocket as any
88
+ // })
89
+ // const socket = new TCPHelper('1.2.3.4', 852)
90
+ // try {
91
+ // expect(socket).toBeTruthy()
92
+ // expect(createSocketMock).toHaveBeenCalledTimes(1)
93
+ // expect(rawSocket.bind).toHaveBeenCalledTimes(1)
94
+ // expect(rawSocket.bind).toHaveBeenCalledWith(0, undefined)
95
+ // } finally {
96
+ // socket.destroy()
97
+ // }
98
+ // })
99
+ // TODO - options
100
+ });
101
+ // it('error propogation', async () => {
102
+ // const rawSocket = new MinimalSocket()
103
+ // createSocketMock.mockReturnValueOnce(rawSocket as any)
104
+ // rawSocket.bind.mockImplementationOnce(() => rawSocket as any)
105
+ // const socket = new TCPHelper('1.2.3.4', 852)
106
+ // try {
107
+ // expect(socket).toBeTruthy()
108
+ // const errorHandler = vi.fn(() => {})
109
+ // const statusHandler = vi.fn(() => {})
110
+ // socket.on('error', errorHandler)
111
+ // socket.on('status_change', statusHandler)
112
+ // expect(createSocketMock).toHaveBeenCalledTimes(1)
113
+ // rawSocket.emit('error', new Error('My fake error'))
114
+ // expect(errorHandler).toHaveBeenCalledTimes(1)
115
+ // expect(errorHandler).toHaveBeenCalledWith(new Error('My fake error'))
116
+ // expect(statusHandler).toHaveBeenCalledTimes(1)
117
+ // expect(statusHandler).toHaveBeenCalledWith(InstanceStatus.UnknownError, 'My fake error')
118
+ // } finally {
119
+ // socket.destroy()
120
+ // }
121
+ // })
122
+ // describe('listening', () => {
123
+ // it('ok', async () => {
124
+ // const rawSocket = new MinimalSocket()
125
+ // createSocketMock.mockReturnValueOnce(rawSocket as any)
126
+ // rawSocket.bind.mockImplementationOnce(() => rawSocket as any)
127
+ // const socket = new TCPHelper('1.2.3.4', 852)
128
+ // try {
129
+ // expect(socket).toBeTruthy()
130
+ // const listeningHandler = vi.fn(() => {})
131
+ // const statusHandler = vi.fn(() => {})
132
+ // socket.on('connect', listeningHandler)
133
+ // socket.on('status_change', statusHandler)
134
+ // expect(createSocketMock).toHaveBeenCalledTimes(1)
135
+ // rawSocket.emit('listening')
136
+ // expect(listeningHandler).toHaveBeenCalledTimes(1)
137
+ // expect(statusHandler).toHaveBeenCalledTimes(1)
138
+ // expect(statusHandler).toHaveBeenCalledWith(InstanceStatus.Ok, undefined)
139
+ // } finally {
140
+ // socket.destroy()
141
+ // }
142
+ // })
143
+ // // TODO - options
144
+ // })
145
+ // it('no error handler timeout', () => {
146
+ // const rawSocket = new MinimalSocket()
147
+ // createSocketMock.mockReturnValueOnce(rawSocket as any)
148
+ // rawSocket.bind.mockImplementationOnce(() => rawSocket as any)
149
+ // vi.advanceTimersByTimeAsync(10000)
150
+ // })
151
+ // describe('send', () => {
152
+ // const rawSocket = new MinimalSocket()
153
+ // rawSocket.bind.mockImplementation(() => rawSocket as any)
154
+ // let socket: TCPHelper
155
+ // beforeAll(() => {
156
+ // createSocketMock.mockReturnValueOnce(rawSocket as any)
157
+ // socket = new TCPHelper('1.2.3.4', 852)
158
+ // expect(socket).toBeTruthy()
159
+ // })
160
+ // beforeEach(() => {
161
+ // rawSocket.close.mockClear()
162
+ // rawSocket.send.mockClear()
163
+ // })
164
+ // afterAll(() => {
165
+ // if (socket) socket.destroy()
166
+ // })
167
+ // it('destroyed', async () => {
168
+ // createSocketMock.mockReturnValueOnce(rawSocket as any)
169
+ // const mySocket = new TCPHelper('1.2.3.4', 852)
170
+ // expect(mySocket).toBeTruthy()
171
+ // mySocket.destroy()
172
+ // expect(rawSocket.close).toHaveBeenCalledTimes(1)
173
+ // await expect(mySocket.send('test')).rejects.toThrow('Cannot write to destroyed socket')
174
+ // })
175
+ // it('no message', async () => {
176
+ // await expect(socket.send(undefined as any)).rejects.toThrow('No message to send')
177
+ // expect(rawSocket.send).toHaveBeenCalledTimes(0)
178
+ // })
179
+ // it('ok: string', async () => {
180
+ // rawSocket.send.mockImplementation((msg, offset, length, cb) => {
181
+ // if (!cb) return
182
+ // cb(null, length)
183
+ // })
184
+ // await expect(socket.send('test 123')).resolves.toBeUndefined()
185
+ // expect(rawSocket.send).toHaveBeenCalledTimes(1)
186
+ // expect(rawSocket.send).toHaveBeenCalledWith('test 123', 852, '1.2.3.4', expect.any(Function))
187
+ // })
188
+ // it('ok: buffer', async () => {
189
+ // rawSocket.send.mockImplementation((msg, offset, length, cb) => {
190
+ // if (!cb) return
191
+ // cb(null, length)
192
+ // })
193
+ // const msg = Buffer.from('test 123')
194
+ // await expect(socket.send(msg)).resolves.toBeUndefined()
195
+ // expect(rawSocket.send).toHaveBeenCalledTimes(1)
196
+ // expect(rawSocket.send).toHaveBeenCalledWith(msg, 852, '1.2.3.4', expect.any(Function))
197
+ // })
198
+ // it('send error', async () => {
199
+ // rawSocket.send.mockImplementation((msg, offset, length, cb) => {
200
+ // if (!cb) return
201
+ // cb(new Error('buffer overflow'), 0)
202
+ // })
203
+ // const msg = Buffer.from('test 123')
204
+ // await expect(socket.send(msg)).rejects.toThrow('buffer overflow')
205
+ // expect(rawSocket.send).toHaveBeenCalledTimes(1)
206
+ // expect(rawSocket.send).toHaveBeenCalledWith(msg, 852, '1.2.3.4', expect.any(Function))
207
+ // })
208
+ // })
209
+ });
210
+ //# sourceMappingURL=tcp.spec.js.map