@companion-module/base 1.14.1 → 1.99.0-1-nightly-feat-2-0-20260118-141645-897e0fe

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 (131) hide show
  1. package/README.md +12 -11
  2. package/dist/__mocks__/net.d.ts +31 -0
  3. package/dist/__mocks__/net.d.ts.map +1 -0
  4. package/dist/__mocks__/net.js +104 -0
  5. package/dist/__mocks__/net.js.map +1 -0
  6. package/dist/__mocks__/util.d.ts +9 -0
  7. package/dist/__mocks__/util.d.ts.map +1 -0
  8. package/dist/__mocks__/util.js +39 -0
  9. package/dist/__mocks__/util.js.map +1 -0
  10. package/dist/common/json-value.js +1 -2
  11. package/dist/common/json-value.js.map +1 -1
  12. package/dist/common/osc.js +1 -2
  13. package/dist/common/osc.js.map +1 -1
  14. package/dist/entrypoint.d.ts +9 -0
  15. package/dist/entrypoint.d.ts.map +1 -1
  16. package/dist/entrypoint.js +5 -126
  17. package/dist/entrypoint.js.map +1 -1
  18. package/dist/helpers/__tests__/tcp.spec.d.ts +2 -0
  19. package/dist/helpers/__tests__/tcp.spec.d.ts.map +1 -0
  20. package/dist/helpers/__tests__/tcp.spec.js +175 -0
  21. package/dist/helpers/__tests__/tcp.spec.js.map +1 -0
  22. package/dist/helpers/__tests__/udp.spec.d.ts +2 -0
  23. package/dist/helpers/__tests__/udp.spec.d.ts.map +1 -0
  24. package/dist/helpers/__tests__/udp.spec.js +197 -0
  25. package/dist/helpers/__tests__/udp.spec.js.map +1 -0
  26. package/dist/helpers/index.js +3 -6
  27. package/dist/helpers/index.js.map +1 -1
  28. package/dist/helpers/tcp.d.ts +1 -1
  29. package/dist/helpers/tcp.d.ts.map +1 -1
  30. package/dist/helpers/tcp.js +10 -15
  31. package/dist/helpers/tcp.js.map +1 -1
  32. package/dist/helpers/telnet.d.ts +1 -1
  33. package/dist/helpers/telnet.d.ts.map +1 -1
  34. package/dist/helpers/telnet.js +6 -11
  35. package/dist/helpers/telnet.js.map +1 -1
  36. package/dist/helpers/udp.d.ts +1 -1
  37. package/dist/helpers/udp.d.ts.map +1 -1
  38. package/dist/helpers/udp.js +7 -12
  39. package/dist/helpers/udp.js.map +1 -1
  40. package/dist/host-api/context.d.ts +60 -0
  41. package/dist/host-api/context.d.ts.map +1 -0
  42. package/dist/host-api/{api.js → context.js} +5 -3
  43. package/dist/host-api/context.js.map +1 -0
  44. package/dist/instance-base.js +1 -2
  45. package/dist/logging.d.ts +21 -0
  46. package/dist/logging.d.ts.map +1 -0
  47. package/dist/logging.js +22 -0
  48. package/dist/logging.js.map +1 -0
  49. package/dist/main.d.ts +9 -0
  50. package/dist/main.d.ts.map +1 -0
  51. package/dist/{index.d.ts → main.js} +3 -2
  52. package/dist/main.js.map +1 -0
  53. package/dist/manifest.js +4 -8
  54. package/dist/manifest.js.map +1 -1
  55. package/dist/module-api/__tests__/shared-udp-socket.spec.d.ts +2 -0
  56. package/dist/module-api/__tests__/shared-udp-socket.spec.d.ts.map +1 -0
  57. package/dist/module-api/__tests__/shared-udp-socket.spec.js +270 -0
  58. package/dist/module-api/__tests__/shared-udp-socket.spec.js.map +1 -0
  59. package/dist/module-api/action.js +1 -2
  60. package/dist/module-api/base.d.ts +3 -18
  61. package/dist/module-api/base.d.ts.map +1 -1
  62. package/dist/module-api/base.js +50 -331
  63. package/dist/module-api/base.js.map +1 -1
  64. package/dist/module-api/common.d.ts +2 -2
  65. package/dist/module-api/common.js +1 -2
  66. package/dist/module-api/config.d.ts +2 -8
  67. package/dist/module-api/config.d.ts.map +1 -1
  68. package/dist/module-api/config.js +1 -2
  69. package/dist/module-api/enums.d.ts +0 -1
  70. package/dist/module-api/enums.d.ts.map +1 -1
  71. package/dist/module-api/enums.js +4 -7
  72. package/dist/module-api/enums.js.map +1 -1
  73. package/dist/module-api/feedback.d.ts +2 -1
  74. package/dist/module-api/feedback.d.ts.map +1 -1
  75. package/dist/module-api/feedback.js +1 -2
  76. package/dist/module-api/http.js +1 -2
  77. package/dist/module-api/index.js +12 -15
  78. package/dist/module-api/index.js.map +1 -1
  79. package/dist/module-api/input.d.ts +0 -20
  80. package/dist/module-api/input.d.ts.map +1 -1
  81. package/dist/module-api/input.js +1 -2
  82. package/dist/module-api/preset.js +1 -2
  83. package/dist/module-api/shared-udp-socket.d.ts +3 -4
  84. package/dist/module-api/shared-udp-socket.d.ts.map +1 -1
  85. package/dist/module-api/shared-udp-socket.js +18 -25
  86. package/dist/module-api/shared-udp-socket.js.map +1 -1
  87. package/dist/module-api/style.js +1 -2
  88. package/dist/module-api/upgrade.d.ts +7 -3
  89. package/dist/module-api/upgrade.d.ts.map +1 -1
  90. package/dist/module-api/upgrade.js +11 -16
  91. package/dist/module-api/upgrade.js.map +1 -1
  92. package/dist/module-api/variable.js +1 -2
  93. package/dist/util.d.ts +10 -0
  94. package/dist/util.d.ts.map +1 -1
  95. package/dist/util.js +15 -26
  96. package/dist/util.js.map +1 -1
  97. package/package.json +8 -37
  98. package/dist/host-api/api.d.ts +0 -389
  99. package/dist/host-api/api.d.ts.map +0 -1
  100. package/dist/host-api/api.js.map +0 -1
  101. package/dist/host-api/ipc-wrapper.d.ts +0 -37
  102. package/dist/host-api/ipc-wrapper.d.ts.map +0 -1
  103. package/dist/host-api/ipc-wrapper.js +0 -128
  104. package/dist/host-api/ipc-wrapper.js.map +0 -1
  105. package/dist/host-api/versions.d.ts +0 -12
  106. package/dist/host-api/versions.d.ts.map +0 -1
  107. package/dist/host-api/versions.js +0 -5
  108. package/dist/host-api/versions.js.map +0 -1
  109. package/dist/index.d.ts.map +0 -1
  110. package/dist/index.js +0 -22
  111. package/dist/index.js.map +0 -1
  112. package/dist/internal/actions.d.ts +0 -16
  113. package/dist/internal/actions.d.ts.map +0 -1
  114. package/dist/internal/actions.js +0 -223
  115. package/dist/internal/actions.js.map +0 -1
  116. package/dist/internal/base.d.ts +0 -11
  117. package/dist/internal/base.d.ts.map +0 -1
  118. package/dist/internal/base.js +0 -39
  119. package/dist/internal/base.js.map +0 -1
  120. package/dist/internal/feedback.d.ts +0 -20
  121. package/dist/internal/feedback.d.ts.map +0 -1
  122. package/dist/internal/feedback.js +0 -307
  123. package/dist/internal/feedback.js.map +0 -1
  124. package/dist/internal/upgrade.d.ts +0 -15
  125. package/dist/internal/upgrade.d.ts.map +0 -1
  126. package/dist/internal/upgrade.js +0 -174
  127. package/dist/internal/upgrade.js.map +0 -1
  128. package/lib/debounce-fn/index.d.ts +0 -83
  129. package/lib/debounce-fn/index.js +0 -78
  130. package/lib/debounce-fn/license +0 -9
  131. package/lib/debounce-fn/readme.md +0 -64
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,31 @@
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;
31
+ //# sourceMappingURL=net.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"net.d.ts","sourceRoot":"","sources":["../../src/__mocks__/net.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAMrC,qBAAa,MAAO,SAAQ,YAAY;IAChC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IAC/D,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IAC7D,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAA;IAIxC,OAAO,CAAC,UAAU,CAAQ;IAEnB,SAAS,UAAQ;IAEjB,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAK;;WAarB,WAAW,IAAI,MAAM,EAAE;WAGvB,gBAAgB,IAAI,IAAI;WAGxB,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAOtD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAc,EAAE,EAAE,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IAYhE,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IACzC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IAUpE,GAAG,IAAI,IAAI;IAKX,SAAS,IAAI,IAAI;IAGjB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI5B,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI;IAKnC,WAAW,CAAC,QAAQ,CAAC,EAAE,cAAc,GAAG,IAAI;IAK5C,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAK3D,OAAO,IAAI,IAAI;IAItB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,MAAM;CAMd;;;;AAED,wBAAyB"}
@@ -0,0 +1,104 @@
1
+ import { EventEmitter } from 'events';
2
+ const sockets = [];
3
+ const onNextSocket = [];
4
+ const orgSetImmediate = setImmediate;
5
+ export class Socket extends EventEmitter {
6
+ onWrite;
7
+ onConnect;
8
+ onClose;
9
+ // private _port: number
10
+ // private _host: string
11
+ _connected = false;
12
+ destroyed = false;
13
+ configOps = [];
14
+ constructor() {
15
+ super();
16
+ const cb = onNextSocket.shift();
17
+ if (cb) {
18
+ cb(this);
19
+ }
20
+ sockets.push(this);
21
+ }
22
+ static mockSockets() {
23
+ return sockets;
24
+ }
25
+ static mockClearSockets() {
26
+ sockets.length = 0;
27
+ }
28
+ static mockOnNextSocket(cb) {
29
+ onNextSocket.push(cb);
30
+ }
31
+ // this.emit('connect')
32
+ // this.emit('close')
33
+ // this.emit('end')
34
+ connect(port, host = 'localhost', cb) {
35
+ // this._port = port
36
+ // this._host = host
37
+ if (this.onConnect)
38
+ this.onConnect(port, host);
39
+ orgSetImmediate(() => {
40
+ if (cb) {
41
+ cb();
42
+ }
43
+ this.setConnected();
44
+ });
45
+ }
46
+ write(buf, encodingOrCb, cb) {
47
+ const DEFAULT_ENCODING = 'utf-8';
48
+ cb = typeof encodingOrCb === 'function' ? encodingOrCb : cb;
49
+ const encoding = typeof encodingOrCb === 'function' ? DEFAULT_ENCODING : encodingOrCb;
50
+ if (this.onWrite) {
51
+ this.onWrite(buf, encoding ?? DEFAULT_ENCODING);
52
+ }
53
+ if (cb)
54
+ cb();
55
+ }
56
+ end() {
57
+ this.setEnd();
58
+ this.setClosed();
59
+ }
60
+ mockClose() {
61
+ this.setClosed();
62
+ }
63
+ mockData(data) {
64
+ this.emit('data', data);
65
+ }
66
+ setNoDelay(noDelay) {
67
+ // noop
68
+ this.configOps.push(['setNoDelay', noDelay]);
69
+ }
70
+ setEncoding(encoding) {
71
+ // noop
72
+ this.configOps.push(['setEncoding', encoding]);
73
+ }
74
+ setKeepAlive(enable, initialDelay) {
75
+ // noop
76
+ this.configOps.push(['setKeepAlive', enable, initialDelay]);
77
+ }
78
+ destroy() {
79
+ this.destroyed = true;
80
+ }
81
+ setConnected() {
82
+ if (this._connected !== true) {
83
+ this._connected = true;
84
+ }
85
+ this.emit('connect');
86
+ }
87
+ setClosed() {
88
+ if (this._connected !== false) {
89
+ this._connected = false;
90
+ }
91
+ this.destroyed = true;
92
+ this.emit('close');
93
+ if (this.onClose)
94
+ this.onClose();
95
+ }
96
+ setEnd() {
97
+ if (this._connected !== false) {
98
+ this._connected = false;
99
+ }
100
+ this.emit('end');
101
+ }
102
+ }
103
+ export default { Socket };
104
+ //# 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,9 @@
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>;
9
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/__mocks__/util.ts"],"names":[],"mappings":"AAGA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAOlD;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAOvD;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IACnD,UAAU,EAAE,OAAO,CAAA;IACnB,aAAa,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAA;IAC3B,YAAY,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAA;CAC5B;AAED,wBAAgB,mBAAmB,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,CAoBzD"}
@@ -0,0 +1,39 @@
1
+ import { vi } from 'vitest';
2
+ const orgSetTimeout = setTimeout;
3
+ export async function runAllTimers() {
4
+ // Run all timers, and wait, multiple times.
5
+ // This is to allow timers AND internal promises to resolve in inner functions
6
+ for (let i = 0; i < 50; i++) {
7
+ vi.runOnlyPendingTimers();
8
+ await new Promise((resolve) => orgSetTimeout(resolve, 0));
9
+ }
10
+ }
11
+ export async function runTimersUntilNow() {
12
+ // Run all timers, and wait, multiple times.
13
+ // This is to allow timers AND internal promises to resolve in inner functions
14
+ for (let i = 0; i < 50; i++) {
15
+ vi.advanceTimersByTime(0);
16
+ await new Promise((resolve) => orgSetTimeout(resolve, 0));
17
+ }
18
+ }
19
+ // eslint-disable-next-line @typescript-eslint/promise-function-async
20
+ export function createManualPromise() {
21
+ let resolve = () => null;
22
+ let reject = () => null;
23
+ const promise = new Promise((resolve0, reject0) => {
24
+ resolve = resolve0;
25
+ reject = reject0;
26
+ });
27
+ const manualPromise = promise;
28
+ manualPromise.isResolved = false;
29
+ manualPromise.manualReject = (err) => {
30
+ manualPromise.isResolved = true;
31
+ return reject(err);
32
+ };
33
+ manualPromise.manualResolve = (val) => {
34
+ manualPromise.isResolved = true;
35
+ return resolve(val);
36
+ };
37
+ return manualPromise;
38
+ }
39
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/__mocks__/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE3B,MAAM,aAAa,GAAG,UAAU,CAAA;AAChC,MAAM,CAAC,KAAK,UAAU,YAAY;IACjC,4CAA4C;IAC5C,8EAA8E;IAC9E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,EAAE,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;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACtC,4CAA4C;IAC5C,8EAA8E;IAC9E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,EAAE,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,MAAM,UAAU,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"}
@@ -1,5 +1,4 @@
1
- "use strict";
2
1
  // Copied from https://github.com/sindresorhus/type-fest/blob/main/source/json-value.d.ts
3
2
  // Under MIT License - Sindre Sorhus <sindresorhus@gmail.com>
4
- Object.defineProperty(exports, "__esModule", { value: true });
3
+ export {};
5
4
  //# sourceMappingURL=json-value.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"json-value.js","sourceRoot":"","sources":["../../src/common/json-value.ts"],"names":[],"mappings":";AAAA,yFAAyF;AACzF,6DAA6D"}
1
+ {"version":3,"file":"json-value.js","sourceRoot":"","sources":["../../src/common/json-value.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,6DAA6D"}
@@ -1,7 +1,6 @@
1
- "use strict";
2
1
  /**
3
2
  * Warning: these types are used in various stable apis.
4
3
  * BE VERY CAREFUL WHEN MAKING CHANGES
5
4
  */
6
- Object.defineProperty(exports, "__esModule", { value: true });
5
+ export {};
7
6
  //# sourceMappingURL=osc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"osc.js","sourceRoot":"","sources":["../../src/common/osc.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
1
+ {"version":3,"file":"osc.js","sourceRoot":"","sources":["../../src/common/osc.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"entrypoint.d.ts","sourceRoot":"","sources":["../src/entrypoint.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAA;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAUxD,MAAM,MAAM,mBAAmB,CAAC,OAAO,EAAE,QAAQ,IAAI,KAAK,QAAQ,EAAE,OAAO,KAAK,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AAe/G;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,QAAQ,EAC9C,OAAO,EAAE,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,EAC/C,cAAc,EAAE,4BAA4B,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,GAC/D,IAAI,CAuHN"}
1
+ {"version":3,"file":"entrypoint.d.ts","sourceRoot":"","sources":["../src/entrypoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAA;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExD,OAAO,CAAC,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,yBAAyB,EAC1B;QACA,OAAO,EAAE,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QACtC,cAAc,EAAE,4BAA4B,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAA;KACvD,GACD,SAAS,CAAA;CACZ;AAED,MAAM,MAAM,mBAAmB,CAAC,OAAO,EAAE,QAAQ,IAAI,KAAK,QAAQ,EAAE,OAAO,KAAK,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AAE/G;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,QAAQ,EAC9C,OAAO,EAAE,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,EAC/C,cAAc,EAAE,4BAA4B,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,GAC/D,IAAI,CAKN"}
@@ -1,134 +1,13 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
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
1
  /**
26
2
  * Setup the module for execution
27
3
  * This should be called once per-module, to register the class that should be executed
28
4
  * @param factory The class for the module
29
5
  * @param upgradeScripts Upgrade scripts
30
6
  */
31
- 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
- });
7
+ export function runEntrypoint(factory, upgradeScripts) {
8
+ if (global.COMPANION_ENTRYPOINT_INFO)
9
+ throw new Error(`runEntrypoint can only be called once`);
10
+ // Future: In v2.0 of the api, this method should be removed and replaced with the module exporting a default class
11
+ global.COMPANION_ENTRYPOINT_INFO = { factory, upgradeScripts };
133
12
  }
134
13
  //# 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":"AAiBA;;;;;GAKG;AACH,MAAM,UAAU,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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tcp.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tcp.spec.d.ts","sourceRoot":"","sources":["../../../src/helpers/__tests__/tcp.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,175 @@
1
+ import { describe, it, expect, vi, afterEach } from 'vitest';
2
+ import { TCPHelper } from '../tcp.js';
3
+ import { Socket } from 'net';
4
+ const MockSocket = Socket;
5
+ vi.mock('net', async () => import('../../__mocks__/net.js'));
6
+ // async function sleepImmediate() {
7
+ // return new Promise((resolve) => setImmediate(resolve))
8
+ // }
9
+ describe('TCP', () => {
10
+ // beforeEach(() => {
11
+ // createSocketMock.mockClear()
12
+ // })
13
+ afterEach(() => {
14
+ MockSocket.mockClearSockets();
15
+ });
16
+ // it('call fail before open', () => {
17
+ // const { mockIpcWrapper, moduleTcpSockets } = createDeps()
18
+ // const socket = new TCPHelper(mockIpcWrapper, moduleTcpSockets, { type: 'tcp4' })
19
+ // expect(() => socket.destroy()).toThrow(/Socket is not open/)
20
+ // expect(() => socket.send('', 12, '')).toThrow(/Socket is not open/)
21
+ // })
22
+ describe('construct', () => {
23
+ it('ok', () => {
24
+ const socket = new TCPHelper('1.2.3.4', 852);
25
+ try {
26
+ expect(socket).toBeTruthy();
27
+ expect(MockSocket.mockSockets()).toHaveLength(1);
28
+ const rawSocket = MockSocket.mockSockets()[0];
29
+ expect(rawSocket.configOps).toHaveLength(2);
30
+ expect(rawSocket.configOps).toEqual([
31
+ ['setKeepAlive', true, undefined],
32
+ ['setNoDelay', true],
33
+ ]);
34
+ }
35
+ finally {
36
+ socket.destroy();
37
+ }
38
+ });
39
+ // it('bad bind', async () => {
40
+ // const rawSocket = new MinimalSocket()
41
+ // createSocketMock.mockReturnValueOnce(rawSocket as any)
42
+ // expect(() => new TCPHelper('1.2.3.4', 852)).toThrow('Unable to bind')
43
+ // expect(createSocketMock).toHaveBeenCalledTimes(1)
44
+ // expect(rawSocket.bind).toHaveBeenCalledTimes(1)
45
+ // expect(rawSocket.bind).toHaveBeenCalledWith(0, undefined)
46
+ // })
47
+ // it('ok', async () => {
48
+ // const rawSocket = new MinimalSocket()
49
+ // createSocketMock.mockReturnValueOnce(rawSocket as any)
50
+ // rawSocket.bind.mockImplementationOnce(() => {
51
+ // // No op
52
+ // return rawSocket as any
53
+ // })
54
+ // const socket = new TCPHelper('1.2.3.4', 852)
55
+ // try {
56
+ // expect(socket).toBeTruthy()
57
+ // expect(createSocketMock).toHaveBeenCalledTimes(1)
58
+ // expect(rawSocket.bind).toHaveBeenCalledTimes(1)
59
+ // expect(rawSocket.bind).toHaveBeenCalledWith(0, undefined)
60
+ // } finally {
61
+ // socket.destroy()
62
+ // }
63
+ // })
64
+ // TODO - options
65
+ });
66
+ // it('error propogation', async () => {
67
+ // const rawSocket = new MinimalSocket()
68
+ // createSocketMock.mockReturnValueOnce(rawSocket as any)
69
+ // rawSocket.bind.mockImplementationOnce(() => rawSocket as any)
70
+ // const socket = new TCPHelper('1.2.3.4', 852)
71
+ // try {
72
+ // expect(socket).toBeTruthy()
73
+ // const errorHandler = vi.fn(() => {})
74
+ // const statusHandler = vi.fn(() => {})
75
+ // socket.on('error', errorHandler)
76
+ // socket.on('status_change', statusHandler)
77
+ // expect(createSocketMock).toHaveBeenCalledTimes(1)
78
+ // rawSocket.emit('error', new Error('My fake error'))
79
+ // expect(errorHandler).toHaveBeenCalledTimes(1)
80
+ // expect(errorHandler).toHaveBeenCalledWith(new Error('My fake error'))
81
+ // expect(statusHandler).toHaveBeenCalledTimes(1)
82
+ // expect(statusHandler).toHaveBeenCalledWith(InstanceStatus.UnknownError, 'My fake error')
83
+ // } finally {
84
+ // socket.destroy()
85
+ // }
86
+ // })
87
+ // describe('listening', () => {
88
+ // it('ok', async () => {
89
+ // const rawSocket = new MinimalSocket()
90
+ // createSocketMock.mockReturnValueOnce(rawSocket as any)
91
+ // rawSocket.bind.mockImplementationOnce(() => rawSocket as any)
92
+ // const socket = new TCPHelper('1.2.3.4', 852)
93
+ // try {
94
+ // expect(socket).toBeTruthy()
95
+ // const listeningHandler = vi.fn(() => {})
96
+ // const statusHandler = vi.fn(() => {})
97
+ // socket.on('connect', listeningHandler)
98
+ // socket.on('status_change', statusHandler)
99
+ // expect(createSocketMock).toHaveBeenCalledTimes(1)
100
+ // rawSocket.emit('listening')
101
+ // expect(listeningHandler).toHaveBeenCalledTimes(1)
102
+ // expect(statusHandler).toHaveBeenCalledTimes(1)
103
+ // expect(statusHandler).toHaveBeenCalledWith(InstanceStatus.Ok, undefined)
104
+ // } finally {
105
+ // socket.destroy()
106
+ // }
107
+ // })
108
+ // // TODO - options
109
+ // })
110
+ // it('no error handler timeout', () => {
111
+ // const rawSocket = new MinimalSocket()
112
+ // createSocketMock.mockReturnValueOnce(rawSocket as any)
113
+ // rawSocket.bind.mockImplementationOnce(() => rawSocket as any)
114
+ // vi.advanceTimersByTimeAsync(10000)
115
+ // })
116
+ // describe('send', () => {
117
+ // const rawSocket = new MinimalSocket()
118
+ // rawSocket.bind.mockImplementation(() => rawSocket as any)
119
+ // let socket: TCPHelper
120
+ // beforeAll(() => {
121
+ // createSocketMock.mockReturnValueOnce(rawSocket as any)
122
+ // socket = new TCPHelper('1.2.3.4', 852)
123
+ // expect(socket).toBeTruthy()
124
+ // })
125
+ // beforeEach(() => {
126
+ // rawSocket.close.mockClear()
127
+ // rawSocket.send.mockClear()
128
+ // })
129
+ // afterAll(() => {
130
+ // if (socket) socket.destroy()
131
+ // })
132
+ // it('destroyed', async () => {
133
+ // createSocketMock.mockReturnValueOnce(rawSocket as any)
134
+ // const mySocket = new TCPHelper('1.2.3.4', 852)
135
+ // expect(mySocket).toBeTruthy()
136
+ // mySocket.destroy()
137
+ // expect(rawSocket.close).toHaveBeenCalledTimes(1)
138
+ // await expect(mySocket.send('test')).rejects.toThrow('Cannot write to destroyed socket')
139
+ // })
140
+ // it('no message', async () => {
141
+ // await expect(socket.send(undefined as any)).rejects.toThrow('No message to send')
142
+ // expect(rawSocket.send).toHaveBeenCalledTimes(0)
143
+ // })
144
+ // it('ok: string', async () => {
145
+ // rawSocket.send.mockImplementation((msg, offset, length, cb) => {
146
+ // if (!cb) return
147
+ // cb(null, length)
148
+ // })
149
+ // await expect(socket.send('test 123')).resolves.toBeUndefined()
150
+ // expect(rawSocket.send).toHaveBeenCalledTimes(1)
151
+ // expect(rawSocket.send).toHaveBeenCalledWith('test 123', 852, '1.2.3.4', expect.any(Function))
152
+ // })
153
+ // it('ok: buffer', async () => {
154
+ // rawSocket.send.mockImplementation((msg, offset, length, cb) => {
155
+ // if (!cb) return
156
+ // cb(null, length)
157
+ // })
158
+ // const msg = Buffer.from('test 123')
159
+ // await expect(socket.send(msg)).resolves.toBeUndefined()
160
+ // expect(rawSocket.send).toHaveBeenCalledTimes(1)
161
+ // expect(rawSocket.send).toHaveBeenCalledWith(msg, 852, '1.2.3.4', expect.any(Function))
162
+ // })
163
+ // it('send error', async () => {
164
+ // rawSocket.send.mockImplementation((msg, offset, length, cb) => {
165
+ // if (!cb) return
166
+ // cb(new Error('buffer overflow'), 0)
167
+ // })
168
+ // const msg = Buffer.from('test 123')
169
+ // await expect(socket.send(msg)).rejects.toThrow('buffer overflow')
170
+ // expect(rawSocket.send).toHaveBeenCalledTimes(1)
171
+ // expect(rawSocket.send).toHaveBeenCalledWith(msg, 852, '1.2.3.4', expect.any(Function))
172
+ // })
173
+ // })
174
+ });
175
+ //# sourceMappingURL=tcp.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tcp.spec.js","sourceRoot":"","sources":["../../../src/helpers/__tests__/tcp.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=udp.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"udp.spec.d.ts","sourceRoot":"","sources":["../../../src/helpers/__tests__/udp.spec.ts"],"names":[],"mappings":""}