@sebbo2002/node-pyatv 6.0.0-develop.2 → 6.0.0-develop.3

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 (120) hide show
  1. package/dist/bin/check.cjs +10 -0
  2. package/dist/bin/check.cjs.map +1 -0
  3. package/dist/bin/check.d.ts +2 -1
  4. package/dist/bin/check.js +4 -45
  5. package/dist/bin/check.js.map +1 -1
  6. package/dist/chunk-TZSWUAOB.js +7 -0
  7. package/dist/chunk-TZSWUAOB.js.map +1 -0
  8. package/dist/lib/index.cjs +7 -0
  9. package/dist/lib/index.cjs.map +1 -0
  10. package/dist/lib/{device.d.ts → index.d.cts} +340 -4
  11. package/dist/lib/index.d.ts +806 -6
  12. package/dist/lib/index.js +1 -7
  13. package/dist/lib/index.js.map +1 -1
  14. package/package.json +18 -9
  15. package/.editorconfig +0 -12
  16. package/.eslintignore +0 -4
  17. package/.eslintrc +0 -60
  18. package/.mocharc.yml +0 -7
  19. package/.nycrc +0 -32
  20. package/CHANGELOG.md +0 -295
  21. package/check.sh +0 -5
  22. package/dist/examples/push.d.ts +0 -1
  23. package/dist/examples/push.js +0 -51
  24. package/dist/examples/push.js.map +0 -1
  25. package/dist/lib/device-event.d.ts +0 -44
  26. package/dist/lib/device-event.js +0 -47
  27. package/dist/lib/device-event.js.map +0 -1
  28. package/dist/lib/device-events.d.ts +0 -30
  29. package/dist/lib/device-events.js +0 -237
  30. package/dist/lib/device-events.js.map +0 -1
  31. package/dist/lib/device.js +0 -793
  32. package/dist/lib/device.js.map +0 -1
  33. package/dist/lib/fake-spawn.d.ts +0 -43
  34. package/dist/lib/fake-spawn.js +0 -85
  35. package/dist/lib/fake-spawn.js.map +0 -1
  36. package/dist/lib/instance.d.ts +0 -97
  37. package/dist/lib/instance.js +0 -208
  38. package/dist/lib/instance.js.map +0 -1
  39. package/dist/lib/tools.d.ts +0 -12
  40. package/dist/lib/tools.js +0 -319
  41. package/dist/lib/tools.js.map +0 -1
  42. package/dist/lib/types.d.ts +0 -204
  43. package/dist/lib/types.js +0 -108
  44. package/dist/lib/types.js.map +0 -1
  45. package/docs/coverage/base.css +0 -224
  46. package/docs/coverage/block-navigation.js +0 -87
  47. package/docs/coverage/cobertura-coverage.xml +0 -2889
  48. package/docs/coverage/device-event.ts.html +0 -256
  49. package/docs/coverage/device-events.ts.html +0 -970
  50. package/docs/coverage/device.ts.html +0 -2518
  51. package/docs/coverage/fake-spawn.ts.html +0 -448
  52. package/docs/coverage/favicon.png +0 -0
  53. package/docs/coverage/index.html +0 -221
  54. package/docs/coverage/index.ts.html +0 -172
  55. package/docs/coverage/instance.ts.html +0 -718
  56. package/docs/coverage/prettify.css +0 -1
  57. package/docs/coverage/prettify.js +0 -2
  58. package/docs/coverage/sort-arrow-sprite.png +0 -0
  59. package/docs/coverage/sorter.js +0 -196
  60. package/docs/coverage/tools.ts.html +0 -1222
  61. package/docs/coverage/types.ts.html +0 -775
  62. package/docs/reference/.nojekyll +0 -1
  63. package/docs/reference/assets/highlight.css +0 -99
  64. package/docs/reference/assets/main.js +0 -58
  65. package/docs/reference/assets/search.js +0 -1
  66. package/docs/reference/assets/style.css +0 -1280
  67. package/docs/reference/classes/NodePyATVDevice.html +0 -1266
  68. package/docs/reference/classes/NodePyATVDeviceEvent.html +0 -123
  69. package/docs/reference/classes/NodePyATVInstance.html +0 -240
  70. package/docs/reference/enums/NodePyATVDeviceState.html +0 -97
  71. package/docs/reference/enums/NodePyATVExecutableType.html +0 -69
  72. package/docs/reference/enums/NodePyATVKeys.html +0 -216
  73. package/docs/reference/enums/NodePyATVListenerState.html +0 -83
  74. package/docs/reference/enums/NodePyATVMediaType.html +0 -83
  75. package/docs/reference/enums/NodePyATVPowerState.html +0 -69
  76. package/docs/reference/enums/NodePyATVProtocol.html +0 -83
  77. package/docs/reference/enums/NodePyATVRepeatState.html +0 -76
  78. package/docs/reference/enums/NodePyATVShuffleState.html +0 -76
  79. package/docs/reference/index.html +0 -139
  80. package/docs/reference/interfaces/NodePyATVDeviceOptions.html +0 -232
  81. package/docs/reference/interfaces/NodePyATVFindAndInstanceOptions.html +0 -193
  82. package/docs/reference/interfaces/NodePyATVFindOptions.html +0 -124
  83. package/docs/reference/interfaces/NodePyATVGetStateOptions.html +0 -66
  84. package/docs/reference/interfaces/NodePyATVInstanceOptions.html +0 -113
  85. package/docs/reference/interfaces/NodePyATVService.html +0 -73
  86. package/docs/reference/interfaces/NodePyATVState.html +0 -164
  87. package/docs/reference/interfaces/NodePyATVVersionResponse.html +0 -73
  88. package/docs/reference/modules.html +0 -106
  89. package/docs/reference/types/NodePyATVEventValueType.html +0 -66
  90. package/docs/tests/assets/MaterialIcons-Regular.woff +0 -0
  91. package/docs/tests/assets/MaterialIcons-Regular.woff2 +0 -0
  92. package/docs/tests/assets/app.css +0 -14
  93. package/docs/tests/assets/app.js +0 -2
  94. package/docs/tests/assets/app.js.LICENSE.txt +0 -55
  95. package/docs/tests/assets/roboto-light-webfont.woff +0 -0
  96. package/docs/tests/assets/roboto-light-webfont.woff2 +0 -0
  97. package/docs/tests/assets/roboto-medium-webfont.woff +0 -0
  98. package/docs/tests/assets/roboto-medium-webfont.woff2 +0 -0
  99. package/docs/tests/assets/roboto-regular-webfont.woff +0 -0
  100. package/docs/tests/assets/roboto-regular-webfont.woff2 +0 -0
  101. package/docs/tests/index.html +0 -2
  102. package/docs/tests/mochawesome.json +0 -4823
  103. package/release.config.cjs +0 -51
  104. package/src/bin/check.ts +0 -41
  105. package/src/examples/push.ts +0 -46
  106. package/src/lib/device-event.ts +0 -57
  107. package/src/lib/device-events.ts +0 -295
  108. package/src/lib/device.ts +0 -811
  109. package/src/lib/fake-spawn.ts +0 -121
  110. package/src/lib/index.ts +0 -29
  111. package/src/lib/instance.ts +0 -211
  112. package/src/lib/tools.ts +0 -379
  113. package/src/lib/types.ts +0 -230
  114. package/test/device-event.ts +0 -88
  115. package/test/device-events.ts +0 -502
  116. package/test/device.ts +0 -826
  117. package/test/instance.ts +0 -428
  118. package/test/tools.ts +0 -301
  119. package/tsconfig.json +0 -19
  120. package/typedoc.json +0 -15
@@ -1,30 +0,0 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- import { NodePyATVDeviceOptions, NodePyATVState } from './types.js';
3
- import { EventEmitter } from 'events';
4
- import { NodePyATVDevice, NodePyATVDeviceEvent } from '../lib/index.js';
5
- /**
6
- * @internal
7
- */
8
- export default class NodePyATVDeviceEvents extends EventEmitter {
9
- private readonly options;
10
- private readonly state;
11
- private readonly device;
12
- private pyatv;
13
- private timeout;
14
- private listenerState;
15
- constructor(state: NodePyATVState, device: NodePyATVDevice, options: NodePyATVDeviceOptions);
16
- applyStateAndEmitEvents(newState: NodePyATVState): void;
17
- private parsePushUpdate;
18
- private applyPushUpdate;
19
- private checkListener;
20
- private startListening;
21
- protected stopListening(reqId: string): Promise<void>;
22
- addListener(event: string | symbol, listener: (event: NodePyATVDeviceEvent) => void): this;
23
- on(event: string | symbol, listener: (event: NodePyATVDeviceEvent) => void): this;
24
- once(event: string | symbol, listener: (event: NodePyATVDeviceEvent) => void): this;
25
- prependListener(event: string | symbol, listener: (event: NodePyATVDeviceEvent) => void): this;
26
- off(event: string | symbol, listener: (event: NodePyATVDeviceEvent) => void): this;
27
- removeAllListeners(event?: string | symbol): this;
28
- removeListener(event: string | symbol, listener: (event: NodePyATVDeviceEvent) => void): this;
29
- listenerCount(event?: string | symbol): number;
30
- }
@@ -1,237 +0,0 @@
1
- 'use strict';
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- import { NodePyATVExecutableType, NodePyATVListenerState } from './types.js';
12
- import { EventEmitter } from 'events';
13
- import { NodePyATVDeviceEvent } from '../lib/index.js';
14
- import { addRequestId, debug, execute, getParamters, parseState, removeRequestId } from './tools.js';
15
- /**
16
- * @internal
17
- */
18
- export default class NodePyATVDeviceEvents extends EventEmitter {
19
- constructor(state, device, options) {
20
- super();
21
- this.state = state;
22
- this.device = device;
23
- this.options = Object.assign({}, options);
24
- this.listenerState = NodePyATVListenerState.stopped;
25
- }
26
- applyStateAndEmitEvents(newState) {
27
- Object.keys(this.state).forEach((key) => {
28
- // @ts-ignore
29
- const oldValue = this.state[key];
30
- // @ts-ignore
31
- const newValue = newState[key];
32
- if (oldValue === undefined || newValue === undefined || oldValue === newValue) {
33
- return;
34
- }
35
- const event = new NodePyATVDeviceEvent({
36
- key: key,
37
- old: oldValue,
38
- new: newValue,
39
- device: this.device
40
- });
41
- // @ts-ignore
42
- this.state[key] = newState[key];
43
- try {
44
- this.emit('update:' + key, event);
45
- this.emit('update', event);
46
- }
47
- catch (error) {
48
- this.emit('error', error);
49
- }
50
- });
51
- }
52
- parsePushUpdate(reqId, data) {
53
- let json;
54
- try {
55
- json = JSON.parse(data);
56
- }
57
- catch (error) {
58
- const msg = `Unable to parse stdout json: ${error}`;
59
- debug(reqId, msg, this.options);
60
- this.emit('error', new Error(msg));
61
- return;
62
- }
63
- this.applyPushUpdate(json, reqId);
64
- if (this.listenerState === NodePyATVListenerState.starting) {
65
- this.listenerState = NodePyATVListenerState.started;
66
- this.checkListener();
67
- }
68
- }
69
- applyPushUpdate(update, reqId) {
70
- try {
71
- const newState = parseState(update, reqId, this.options);
72
- this.applyStateAndEmitEvents(newState);
73
- }
74
- catch (error) {
75
- this.emit('error', error);
76
- }
77
- }
78
- checkListener() {
79
- if (this.listenerState === NodePyATVListenerState.stopped && this.listenerCount() === 0 && this.timeout) {
80
- clearTimeout(this.timeout);
81
- this.timeout = undefined;
82
- }
83
- else if (this.listenerState === NodePyATVListenerState.stopped && this.listenerCount() > 0) {
84
- const id = addRequestId();
85
- debug(id, `Start listeing to events from device ${this.options.name}`, this.options);
86
- this.startListening(id);
87
- removeRequestId(id);
88
- }
89
- else if ([NodePyATVListenerState.starting, NodePyATVListenerState.started].includes(this.listenerState) &&
90
- this.listenerCount() === 0) {
91
- const id = addRequestId();
92
- debug(id, `Stop listening to events from device ${this.options.name}`, this.options);
93
- this.stopListening(id)
94
- .catch(error => debug(id, `Unable to stop listeing: ${error}`, this.options))
95
- .finally(() => removeRequestId(id));
96
- }
97
- }
98
- startListening(reqId) {
99
- if (this.listenerState !== NodePyATVListenerState.stopped) {
100
- return;
101
- }
102
- this.listenerState = NodePyATVListenerState.starting;
103
- const listenStart = new Date().getTime();
104
- const parameters = getParamters(this.options);
105
- this.pyatv = execute(reqId, NodePyATVExecutableType.atvscript, [...parameters, 'push_updates'], this.options);
106
- if (!this.pyatv) {
107
- throw new Error('Unable to start listener: Unable to start atvscript');
108
- }
109
- const onError = (error) => {
110
- debug(reqId, `Got error from child process: ${error}`, this.options);
111
- this.emit('error', error);
112
- };
113
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
114
- const onStdErr = (data) => {
115
- const error = new Error(`Got stderr output from pyatv: ${data}`);
116
- debug(reqId, data.toString(), this.options);
117
- this.emit('error', error);
118
- };
119
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
120
- const onStdOut = (data) => {
121
- String(data)
122
- .split('\n')
123
- .map(s => s.trim())
124
- .filter(Boolean)
125
- .forEach(s => this.parsePushUpdate(reqId, s));
126
- };
127
- const onClose = (code) => {
128
- if (this.pyatv === undefined) {
129
- // this should never happen… :/
130
- return;
131
- }
132
- this.listenerState = NodePyATVListenerState.stopped;
133
- debug(reqId, `Listening with atvscript exited with code ${code}`, this.options);
134
- if (this.timeout !== undefined) {
135
- clearTimeout(this.timeout);
136
- this.timeout = undefined;
137
- }
138
- if (this.pyatv.stdout) {
139
- this.pyatv.stdout.off('data', onStdOut);
140
- }
141
- if (this.pyatv.stderr) {
142
- this.pyatv.stderr.off('data', onStdErr);
143
- }
144
- this.pyatv.off('error', onError);
145
- this.pyatv.off('close', onClose);
146
- if (this.listenerCount() > 0 && new Date().getTime() - listenStart < 30000) {
147
- debug(reqId, `Wait 15s and restart listeing to events from device ${this.options.name}`, this.options);
148
- this.timeout = setTimeout(() => {
149
- this.checkListener();
150
- }, 15000);
151
- }
152
- else if (this.listenerCount() > 0) {
153
- debug(reqId, `Restart listeing to events from device ${this.options.name}`, this.options);
154
- this.checkListener();
155
- }
156
- removeRequestId(reqId);
157
- };
158
- this.pyatv.on('error', onError);
159
- this.pyatv.on('close', onClose);
160
- if (this.pyatv.stdout) {
161
- this.pyatv.stdout.on('data', onStdOut);
162
- }
163
- if (this.pyatv.stderr) {
164
- this.pyatv.stderr.on('data', onStdErr);
165
- }
166
- }
167
- stopListening(reqId) {
168
- return __awaiter(this, void 0, void 0, function* () {
169
- if (this.listenerState !== NodePyATVListenerState.starting &&
170
- this.listenerState !== NodePyATVListenerState.started) {
171
- return;
172
- }
173
- this.listenerState = NodePyATVListenerState.stopping;
174
- if (this.pyatv === undefined) {
175
- throw new Error('Unable to stop listening due to internal error: state is stopping, but there\'s no child process. ' +
176
- 'This should never happen, please report this.');
177
- }
178
- if (this.pyatv.stdin) {
179
- debug(reqId, 'Pressing enter to close atvscript…', this.options);
180
- this.pyatv.stdin.write('\n');
181
- yield new Promise(cb => this.timeout = setTimeout(cb, 250));
182
- }
183
- if (this.listenerState === NodePyATVListenerState.stopping && this.pyatv) {
184
- this.pyatv.kill();
185
- }
186
- this.listenerState = NodePyATVListenerState.stopped;
187
- return;
188
- });
189
- }
190
- addListener(event, listener) {
191
- super.addListener(event, listener);
192
- this.checkListener();
193
- return this;
194
- }
195
- on(event, listener) {
196
- super.on(event, listener);
197
- this.checkListener();
198
- return this;
199
- }
200
- once(event, listener) {
201
- super.once(event, (event) => {
202
- listener(event);
203
- setTimeout(() => this.checkListener(), 0);
204
- });
205
- this.checkListener();
206
- return this;
207
- }
208
- prependListener(event, listener) {
209
- super.prependListener(event, listener);
210
- this.checkListener();
211
- return this;
212
- }
213
- off(event, listener) {
214
- super.off(event, listener);
215
- this.checkListener();
216
- return this;
217
- }
218
- removeAllListeners(event) {
219
- super.removeAllListeners(event);
220
- this.checkListener();
221
- return this;
222
- }
223
- removeListener(event, listener) {
224
- super.removeListener(event, listener);
225
- this.checkListener();
226
- return this;
227
- }
228
- listenerCount(event) {
229
- if (event !== undefined) {
230
- return super.listenerCount(event);
231
- }
232
- return this.eventNames()
233
- .map(event => this.listenerCount(event))
234
- .reduce((a, b) => a + b, 0);
235
- }
236
- }
237
- //# sourceMappingURL=device-events.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"device-events.js","sourceRoot":"","sources":["../../src/lib/device-events.ts"],"names":[],"mappings":"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"}