ziplayer 0.2.7 → 0.3.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.
- package/AI-Guide.md +624 -956
- package/README.md +277 -10
- package/dist/extensions/BaseExtension.d.ts +1 -0
- package/dist/extensions/BaseExtension.d.ts.map +1 -1
- package/dist/extensions/BaseExtension.js.map +1 -1
- package/dist/extensions/index.d.ts +38 -3
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/extensions/index.js +259 -41
- package/dist/extensions/index.js.map +1 -1
- package/dist/persistence/PersistenceManager.d.ts +95 -0
- package/dist/persistence/PersistenceManager.d.ts.map +1 -0
- package/dist/persistence/PersistenceManager.js +975 -0
- package/dist/persistence/PersistenceManager.js.map +1 -0
- package/dist/plugins/BasePlugin.js +1 -1
- package/dist/plugins/BasePlugin.js.map +1 -1
- package/dist/plugins/index.d.ts +74 -8
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js +657 -116
- package/dist/plugins/index.js.map +1 -1
- package/dist/structures/FilterManager.js +3 -3
- package/dist/structures/FilterManager.js.map +1 -1
- package/dist/structures/PersistenceManager.d.ts +96 -0
- package/dist/structures/PersistenceManager.d.ts.map +1 -0
- package/dist/structures/PersistenceManager.js +1008 -0
- package/dist/structures/PersistenceManager.js.map +1 -0
- package/dist/structures/Player.d.ts +158 -14
- package/dist/structures/Player.d.ts.map +1 -1
- package/dist/structures/Player.js +1175 -188
- package/dist/structures/Player.js.map +1 -1
- package/dist/structures/PlayerManager.d.ts +106 -91
- package/dist/structures/PlayerManager.d.ts.map +1 -1
- package/dist/structures/PlayerManager.js +365 -124
- package/dist/structures/PlayerManager.js.map +1 -1
- package/dist/structures/Queue.d.ts +136 -31
- package/dist/structures/Queue.d.ts.map +1 -1
- package/dist/structures/Queue.js +265 -46
- package/dist/structures/Queue.js.map +1 -1
- package/dist/structures/StreamManager.d.ts +137 -0
- package/dist/structures/StreamManager.d.ts.map +1 -0
- package/dist/structures/StreamManager.js +420 -0
- package/dist/structures/StreamManager.js.map +1 -0
- package/dist/types/index.d.ts +181 -8
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/persistence.d.ts +77 -0
- package/dist/types/persistence.d.ts.map +1 -0
- package/dist/types/persistence.js +3 -0
- package/dist/types/persistence.js.map +1 -0
- package/package.json +3 -2
- package/src/extensions/BaseExtension.ts +1 -0
- package/src/extensions/index.ts +320 -37
- package/src/plugins/BasePlugin.ts +1 -1
- package/src/plugins/index.ts +809 -139
- package/src/structures/FilterManager.ts +3 -3
- package/src/structures/Player.ts +2810 -1693
- package/src/structures/PlayerManager.ts +438 -129
- package/src/structures/Queue.ts +300 -55
- package/src/structures/StreamManager.ts +524 -0
- package/src/types/extension.ts +129 -129
- package/src/types/fillter.ts +264 -264
- package/src/types/index.ts +187 -12
- package/src/types/plugin.ts +59 -59
- package/tsconfig.json +0 -1
package/dist/structures/Queue.js
CHANGED
|
@@ -45,77 +45,100 @@ class Queue {
|
|
|
45
45
|
this._autoPlay = false;
|
|
46
46
|
this._loop = "off";
|
|
47
47
|
this.willnext = null;
|
|
48
|
+
// Configuration
|
|
49
|
+
this.MAX_HISTORY_SIZE = 200;
|
|
50
|
+
this.MAX_QUEUE_SIZE = 1000; // Prevent memory issues
|
|
48
51
|
}
|
|
49
52
|
/**
|
|
50
53
|
* Add track(s) to the queue
|
|
51
54
|
*
|
|
52
55
|
* @param {Track | Track[]} track - Track or array of tracks to add
|
|
56
|
+
* @returns {number} New queue size
|
|
53
57
|
* @example
|
|
54
58
|
* queue.add(track);
|
|
55
59
|
* queue.add([track1, track2, track3]);
|
|
56
60
|
*/
|
|
57
61
|
add(track) {
|
|
62
|
+
if (this.tracks.length >= this.MAX_QUEUE_SIZE) {
|
|
63
|
+
throw new Error(`Queue size limit reached (${this.MAX_QUEUE_SIZE})`);
|
|
64
|
+
}
|
|
58
65
|
this.tracks.push(track);
|
|
66
|
+
return this.tracks.length;
|
|
59
67
|
}
|
|
60
68
|
/**
|
|
61
69
|
* Add multiple tracks to the queue
|
|
62
70
|
*
|
|
63
71
|
* @param {Track[]} tracks - Tracks to add
|
|
72
|
+
* @returns {number} New queue size
|
|
64
73
|
* @example
|
|
65
74
|
* queue.addMultiple([track1, track2, track3]);
|
|
66
75
|
*/
|
|
67
76
|
addMultiple(tracks) {
|
|
77
|
+
if (this.tracks.length + tracks.length > this.MAX_QUEUE_SIZE) {
|
|
78
|
+
throw new Error(`Adding ${tracks.length} tracks would exceed queue size limit (${this.MAX_QUEUE_SIZE})`);
|
|
79
|
+
}
|
|
68
80
|
this.tracks.push(...tracks);
|
|
81
|
+
return this.tracks.length;
|
|
69
82
|
}
|
|
70
83
|
/**
|
|
71
84
|
* Insert a track at a specific upcoming position (0 = next)
|
|
72
85
|
*
|
|
73
86
|
* @param {Track} track - Track to insert
|
|
74
87
|
* @param {number} index - Index to insert the track at
|
|
88
|
+
* @returns {number} New queue size
|
|
75
89
|
* @example
|
|
76
90
|
* queue.insert(track, 0);
|
|
77
91
|
*/
|
|
78
92
|
insert(track, index) {
|
|
93
|
+
if (this.tracks.length >= this.MAX_QUEUE_SIZE) {
|
|
94
|
+
throw new Error(`Queue size limit reached (${this.MAX_QUEUE_SIZE})`);
|
|
95
|
+
}
|
|
79
96
|
if (!Number.isFinite(index)) {
|
|
80
97
|
this.tracks.push(track);
|
|
81
|
-
return;
|
|
98
|
+
return this.tracks.length;
|
|
82
99
|
}
|
|
83
100
|
const i = Math.max(0, Math.min(Math.floor(index), this.tracks.length));
|
|
84
101
|
if (i === this.tracks.length) {
|
|
85
102
|
this.tracks.push(track);
|
|
86
|
-
return;
|
|
87
103
|
}
|
|
88
|
-
if (i <= 0) {
|
|
104
|
+
else if (i <= 0) {
|
|
89
105
|
this.tracks.unshift(track);
|
|
90
|
-
return;
|
|
91
106
|
}
|
|
92
|
-
|
|
107
|
+
else {
|
|
108
|
+
this.tracks.splice(i, 0, track);
|
|
109
|
+
}
|
|
110
|
+
return this.tracks.length;
|
|
93
111
|
}
|
|
94
112
|
/**
|
|
95
113
|
* Insert multiple tracks at a specific upcoming position, preserving order
|
|
96
114
|
*
|
|
97
115
|
* @param {Track[]} tracks - Tracks to insert
|
|
98
116
|
* @param {number} index - Index to insert the tracks at
|
|
117
|
+
* @returns {number} New queue size
|
|
99
118
|
* @example
|
|
100
119
|
* queue.insertMultiple([track1, track2, track3], 0);
|
|
101
120
|
*/
|
|
102
121
|
insertMultiple(tracks, index) {
|
|
103
122
|
if (!Array.isArray(tracks) || tracks.length === 0)
|
|
104
|
-
return;
|
|
123
|
+
return this.tracks.length;
|
|
124
|
+
if (this.tracks.length + tracks.length > this.MAX_QUEUE_SIZE) {
|
|
125
|
+
throw new Error(`Inserting ${tracks.length} tracks would exceed queue size limit (${this.MAX_QUEUE_SIZE})`);
|
|
126
|
+
}
|
|
105
127
|
if (!Number.isFinite(index)) {
|
|
106
128
|
this.tracks.push(...tracks);
|
|
107
|
-
return;
|
|
129
|
+
return this.tracks.length;
|
|
108
130
|
}
|
|
109
131
|
const i = Math.max(0, Math.min(Math.floor(index), this.tracks.length));
|
|
110
132
|
if (i === 0) {
|
|
111
133
|
this.tracks = [...tracks, ...this.tracks];
|
|
112
|
-
return;
|
|
113
134
|
}
|
|
114
|
-
if (i === this.tracks.length) {
|
|
135
|
+
else if (i === this.tracks.length) {
|
|
115
136
|
this.tracks.push(...tracks);
|
|
116
|
-
return;
|
|
117
137
|
}
|
|
118
|
-
|
|
138
|
+
else {
|
|
139
|
+
this.tracks.splice(i, 0, ...tracks);
|
|
140
|
+
}
|
|
141
|
+
return this.tracks.length;
|
|
119
142
|
}
|
|
120
143
|
/**
|
|
121
144
|
* Remove a track from the queue
|
|
@@ -129,7 +152,43 @@ class Queue {
|
|
|
129
152
|
remove(index) {
|
|
130
153
|
if (index < 0 || index >= this.tracks.length)
|
|
131
154
|
return null;
|
|
132
|
-
|
|
155
|
+
const removed = this.tracks.splice(index, 1)[0];
|
|
156
|
+
return removed;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Remove multiple tracks by indices
|
|
160
|
+
*
|
|
161
|
+
* @param {number[]} indices - Array of indices to remove
|
|
162
|
+
* @returns {Track[]} Removed tracks
|
|
163
|
+
* @example
|
|
164
|
+
* const removed = queue.removeMultiple([0, 2, 5]);
|
|
165
|
+
*/
|
|
166
|
+
removeMultiple(indices) {
|
|
167
|
+
const sorted = [...new Set(indices)].sort((a, b) => b - a);
|
|
168
|
+
const removed = [];
|
|
169
|
+
for (const index of sorted) {
|
|
170
|
+
if (index >= 0 && index < this.tracks.length) {
|
|
171
|
+
removed.unshift(this.tracks.splice(index, 1)[0]);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return removed;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Remove tracks by predicate
|
|
178
|
+
*
|
|
179
|
+
* @param {(track: Track, index: number) => boolean} predicate - Filter function
|
|
180
|
+
* @returns {Track[]} Removed tracks
|
|
181
|
+
* @example
|
|
182
|
+
* const removed = queue.removeWhere(track => track.source === "youtube");
|
|
183
|
+
*/
|
|
184
|
+
removeWhere(predicate) {
|
|
185
|
+
const removed = [];
|
|
186
|
+
for (let i = this.tracks.length - 1; i >= 0; i--) {
|
|
187
|
+
if (predicate(this.tracks[i], i)) {
|
|
188
|
+
removed.unshift(this.tracks.splice(i, 1)[0]);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return removed;
|
|
133
192
|
}
|
|
134
193
|
/**
|
|
135
194
|
* Get the next track in the queue
|
|
@@ -141,16 +200,17 @@ class Queue {
|
|
|
141
200
|
* console.log(`Next track: ${nextTrack?.title}`);
|
|
142
201
|
*/
|
|
143
202
|
next(ignoreLoop = false) {
|
|
203
|
+
// Handle track loop
|
|
204
|
+
if (this.current && this._loop === "track" && !ignoreLoop) {
|
|
205
|
+
return this.current;
|
|
206
|
+
}
|
|
207
|
+
// Save current to history before moving to next
|
|
144
208
|
if (this.current) {
|
|
145
|
-
|
|
146
|
-
return this.current;
|
|
147
|
-
}
|
|
148
|
-
this.history.push(this.current);
|
|
149
|
-
if (this.history.length > 200) {
|
|
150
|
-
this.history.shift();
|
|
151
|
-
}
|
|
209
|
+
this.addToHistory(this.current);
|
|
152
210
|
}
|
|
211
|
+
// Get next track
|
|
153
212
|
this.current = this.tracks.shift() || null;
|
|
213
|
+
// Handle queue loop
|
|
154
214
|
if (!this.current && this._loop === "queue" && this.history.length > 0 && !ignoreLoop) {
|
|
155
215
|
this.tracks = [...this.history];
|
|
156
216
|
this.history = [];
|
|
@@ -158,6 +218,15 @@ class Queue {
|
|
|
158
218
|
}
|
|
159
219
|
return this.current;
|
|
160
220
|
}
|
|
221
|
+
/**
|
|
222
|
+
* Add track to history with size limit
|
|
223
|
+
*/
|
|
224
|
+
addToHistory(track) {
|
|
225
|
+
this.history.push(track);
|
|
226
|
+
if (this.history.length > this.MAX_HISTORY_SIZE) {
|
|
227
|
+
this.history.shift();
|
|
228
|
+
}
|
|
229
|
+
}
|
|
161
230
|
/**
|
|
162
231
|
* Clear all tracks from the queue
|
|
163
232
|
*
|
|
@@ -166,6 +235,29 @@ class Queue {
|
|
|
166
235
|
*/
|
|
167
236
|
clear() {
|
|
168
237
|
this.tracks = [];
|
|
238
|
+
// Optionally reset current track? Usually not, but provide option
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Clear history
|
|
242
|
+
*
|
|
243
|
+
* @example
|
|
244
|
+
* queue.clearHistory();
|
|
245
|
+
*/
|
|
246
|
+
clearHistory() {
|
|
247
|
+
this.history = [];
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Reset entire queue (current, history, tracks)
|
|
251
|
+
*
|
|
252
|
+
* @example
|
|
253
|
+
* queue.reset();
|
|
254
|
+
*/
|
|
255
|
+
reset() {
|
|
256
|
+
this.tracks = [];
|
|
257
|
+
this.current = null;
|
|
258
|
+
this.history = [];
|
|
259
|
+
this.related = [];
|
|
260
|
+
this.willnext = null;
|
|
169
261
|
}
|
|
170
262
|
/**
|
|
171
263
|
* Enable or disable auto-play
|
|
@@ -196,6 +288,22 @@ class Queue {
|
|
|
196
288
|
}
|
|
197
289
|
return this._loop;
|
|
198
290
|
}
|
|
291
|
+
/**
|
|
292
|
+
* Check if queue is currently looping
|
|
293
|
+
*
|
|
294
|
+
* @returns {boolean} True if looping
|
|
295
|
+
*/
|
|
296
|
+
isLooping() {
|
|
297
|
+
return this._loop !== "off";
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Get current loop mode
|
|
301
|
+
*
|
|
302
|
+
* @returns {LoopMode} Current loop mode
|
|
303
|
+
*/
|
|
304
|
+
getLoopMode() {
|
|
305
|
+
return this._loop;
|
|
306
|
+
}
|
|
199
307
|
/**
|
|
200
308
|
* Shuffle the queue
|
|
201
309
|
*
|
|
@@ -203,66 +311,93 @@ class Queue {
|
|
|
203
311
|
* queue.shuffle();
|
|
204
312
|
*/
|
|
205
313
|
shuffle() {
|
|
314
|
+
// Fisher-Yates shuffle
|
|
206
315
|
for (let i = this.tracks.length - 1; i > 0; i--) {
|
|
207
316
|
const j = Math.floor(Math.random() * (i + 1));
|
|
208
317
|
[this.tracks[i], this.tracks[j]] = [this.tracks[j], this.tracks[i]];
|
|
209
318
|
}
|
|
210
319
|
}
|
|
211
320
|
/**
|
|
212
|
-
*
|
|
321
|
+
* Move a track from one position to another
|
|
322
|
+
*
|
|
323
|
+
* @param {number} fromIndex - Current index
|
|
324
|
+
* @param {number} toIndex - Target index
|
|
325
|
+
* @returns {boolean} True if move was successful
|
|
326
|
+
* @example
|
|
327
|
+
* queue.move(3, 0); // Move track at index 3 to position 0
|
|
328
|
+
*/
|
|
329
|
+
move(fromIndex, toIndex) {
|
|
330
|
+
if (fromIndex < 0 || fromIndex >= this.tracks.length)
|
|
331
|
+
return false;
|
|
332
|
+
if (toIndex < 0 || toIndex >= this.tracks.length)
|
|
333
|
+
return false;
|
|
334
|
+
if (fromIndex === toIndex)
|
|
335
|
+
return true;
|
|
336
|
+
const [track] = this.tracks.splice(fromIndex, 1);
|
|
337
|
+
this.tracks.splice(toIndex, 0, track);
|
|
338
|
+
return true;
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Swap two tracks in the queue
|
|
213
342
|
*
|
|
214
|
-
* @
|
|
343
|
+
* @param {number} indexA - First track index
|
|
344
|
+
* @param {number} indexB - Second track index
|
|
345
|
+
* @returns {boolean} True if swap was successful
|
|
215
346
|
* @example
|
|
216
|
-
*
|
|
217
|
-
|
|
347
|
+
* queue.swap(0, 3);
|
|
348
|
+
*/
|
|
349
|
+
swap(indexA, indexB) {
|
|
350
|
+
if (indexA < 0 || indexA >= this.tracks.length)
|
|
351
|
+
return false;
|
|
352
|
+
if (indexB < 0 || indexB >= this.tracks.length)
|
|
353
|
+
return false;
|
|
354
|
+
if (indexA === indexB)
|
|
355
|
+
return true;
|
|
356
|
+
[this.tracks[indexA], this.tracks[indexB]] = [this.tracks[indexB], this.tracks[indexA]];
|
|
357
|
+
return true;
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Get the size of the queue
|
|
218
361
|
*/
|
|
219
362
|
get size() {
|
|
220
363
|
return this.tracks.length;
|
|
221
364
|
}
|
|
222
365
|
/**
|
|
223
366
|
* Check if the queue is empty
|
|
224
|
-
*
|
|
225
|
-
* @returns {boolean} True if the queue is empty
|
|
226
|
-
* @example
|
|
227
|
-
* const empty = queue.isEmpty;
|
|
228
|
-
* console.log(`Queue is empty: ${empty}`);
|
|
229
367
|
*/
|
|
230
368
|
get isEmpty() {
|
|
231
369
|
return this.tracks.length === 0;
|
|
232
370
|
}
|
|
233
371
|
/**
|
|
234
372
|
* Get the current track
|
|
235
|
-
*
|
|
236
|
-
* @returns {Track | null} The current track or null
|
|
237
|
-
* @example
|
|
238
|
-
* const currentTrack = queue.currentTrack;
|
|
239
|
-
* console.log(`Current track: ${currentTrack?.title}`);
|
|
240
373
|
*/
|
|
241
374
|
get currentTrack() {
|
|
242
375
|
return this.current;
|
|
243
376
|
}
|
|
244
377
|
/**
|
|
245
378
|
* Get the previous tracks
|
|
246
|
-
*
|
|
247
|
-
* @returns {Track[]} The previous tracks
|
|
248
|
-
* @example
|
|
249
|
-
* const previousTracks = queue.previousTracks;
|
|
250
|
-
* console.log(`Previous tracks: ${previousTracks.length}`);
|
|
251
379
|
*/
|
|
252
380
|
get previousTracks() {
|
|
253
381
|
return [...this.history];
|
|
254
382
|
}
|
|
383
|
+
/**
|
|
384
|
+
* Get the number of previous tracks
|
|
385
|
+
*/
|
|
386
|
+
get previousTracksCount() {
|
|
387
|
+
return this.history.length;
|
|
388
|
+
}
|
|
255
389
|
/**
|
|
256
390
|
* Get the next track
|
|
257
|
-
*
|
|
258
|
-
* @returns {Track | null} The next track or null
|
|
259
|
-
* @example
|
|
260
|
-
* const nextTrack = queue.nextTrack;
|
|
261
|
-
* console.log(`Next track: ${nextTrack?.title}`);
|
|
262
391
|
*/
|
|
263
392
|
get nextTrack() {
|
|
264
393
|
return this.tracks[0] || null;
|
|
265
394
|
}
|
|
395
|
+
/**
|
|
396
|
+
* Get the last track in the queue
|
|
397
|
+
*/
|
|
398
|
+
get lastTrack() {
|
|
399
|
+
return this.tracks[this.tracks.length - 1] || null;
|
|
400
|
+
}
|
|
266
401
|
/**
|
|
267
402
|
* Move back to the previously played track.
|
|
268
403
|
* Makes the current track the next upcoming track, then sets previous as current.
|
|
@@ -282,7 +417,34 @@ class Queue {
|
|
|
282
417
|
return this.current;
|
|
283
418
|
}
|
|
284
419
|
/**
|
|
285
|
-
*
|
|
420
|
+
* Jump to a specific track in history
|
|
421
|
+
*
|
|
422
|
+
* @param {number} stepsBack - Number of steps back in history (1 = previous)
|
|
423
|
+
* @returns {Track | null} The jumped-to track or null
|
|
424
|
+
* @example
|
|
425
|
+
* queue.jumpToHistory(2); // Go back 2 tracks
|
|
426
|
+
*/
|
|
427
|
+
jumpToHistory(stepsBack) {
|
|
428
|
+
if (stepsBack <= 0 || stepsBack > this.history.length)
|
|
429
|
+
return null;
|
|
430
|
+
const targetIndex = this.history.length - stepsBack;
|
|
431
|
+
if (targetIndex < 0)
|
|
432
|
+
return null;
|
|
433
|
+
// Save current track to queue if exists
|
|
434
|
+
if (this.current) {
|
|
435
|
+
this.tracks.unshift(this.current);
|
|
436
|
+
}
|
|
437
|
+
// Get tracks after target to push back to queue
|
|
438
|
+
const tracksAfterTarget = this.history.splice(targetIndex + 1);
|
|
439
|
+
this.current = this.history.pop() || null;
|
|
440
|
+
// Push tracks after target back to queue (in reverse order to maintain sequence)
|
|
441
|
+
for (let i = tracksAfterTarget.length - 1; i >= 0; i--) {
|
|
442
|
+
this.tracks.unshift(tracksAfterTarget[i]);
|
|
443
|
+
}
|
|
444
|
+
return this.current;
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* Get the next track (for auto-play)
|
|
286
448
|
*
|
|
287
449
|
* @param {Track} track - The next track
|
|
288
450
|
* @returns {Track | null} The next track or null
|
|
@@ -312,9 +474,9 @@ class Queue {
|
|
|
312
474
|
return this.related;
|
|
313
475
|
}
|
|
314
476
|
/**
|
|
315
|
-
* Get the
|
|
477
|
+
* Get all tracks in the queue
|
|
316
478
|
*
|
|
317
|
-
* @returns {Track[]}
|
|
479
|
+
* @returns {Track[]} Copy of tracks array
|
|
318
480
|
* @example
|
|
319
481
|
* const tracks = queue.getTracks();
|
|
320
482
|
* console.log(`Tracks: ${tracks.length}`);
|
|
@@ -322,6 +484,29 @@ class Queue {
|
|
|
322
484
|
getTracks() {
|
|
323
485
|
return [...this.tracks];
|
|
324
486
|
}
|
|
487
|
+
/**
|
|
488
|
+
* Get serializable queue data
|
|
489
|
+
*/
|
|
490
|
+
toJSON() {
|
|
491
|
+
return {
|
|
492
|
+
tracks: this.tracks,
|
|
493
|
+
current: this.current,
|
|
494
|
+
history: this.history,
|
|
495
|
+
size: this.size,
|
|
496
|
+
loopMode: this._loop,
|
|
497
|
+
autoPlay: this._autoPlay,
|
|
498
|
+
};
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* Restore queue from serialized data
|
|
502
|
+
*/
|
|
503
|
+
fromJSON(data) {
|
|
504
|
+
this.tracks = [...data.tracks];
|
|
505
|
+
this.current = data.current;
|
|
506
|
+
this.history = [...data.history];
|
|
507
|
+
this._loop = data.loopMode;
|
|
508
|
+
this._autoPlay = data.autoPlay;
|
|
509
|
+
}
|
|
325
510
|
/**
|
|
326
511
|
* Get a track at a specific index
|
|
327
512
|
*
|
|
@@ -334,6 +519,40 @@ class Queue {
|
|
|
334
519
|
getTrack(index) {
|
|
335
520
|
return this.tracks[index] || null;
|
|
336
521
|
}
|
|
522
|
+
/**
|
|
523
|
+
* Find tracks by predicate
|
|
524
|
+
*
|
|
525
|
+
* @param {(track: Track) => boolean} predicate - Search function
|
|
526
|
+
* @returns {Track[]} Matching tracks
|
|
527
|
+
* @example
|
|
528
|
+
* const youtubeTracks = queue.findTracks(track => track.source === "youtube");
|
|
529
|
+
*/
|
|
530
|
+
findTracks(predicate) {
|
|
531
|
+
return this.tracks.filter(predicate);
|
|
532
|
+
}
|
|
533
|
+
/**
|
|
534
|
+
* Get the index of a track in the queue
|
|
535
|
+
*
|
|
536
|
+
* @param {string | Track} identifier - Track ID, URL, or Track object
|
|
537
|
+
* @returns {number} Index of the track, -1 if not found
|
|
538
|
+
* @example
|
|
539
|
+
* const index = queue.indexOf(track);
|
|
540
|
+
*/
|
|
541
|
+
indexOf(identifier) {
|
|
542
|
+
if (typeof identifier === "string") {
|
|
543
|
+
return this.tracks.findIndex((t) => t.id === identifier || t.url === identifier);
|
|
544
|
+
}
|
|
545
|
+
return this.tracks.findIndex((t) => t.id === identifier.id);
|
|
546
|
+
}
|
|
547
|
+
/**
|
|
548
|
+
* Check if a track exists in the queue
|
|
549
|
+
*
|
|
550
|
+
* @param {string | Track} identifier - Track ID, URL, or Track object
|
|
551
|
+
* @returns {boolean} True if track exists
|
|
552
|
+
*/
|
|
553
|
+
has(identifier) {
|
|
554
|
+
return this.indexOf(identifier) !== -1;
|
|
555
|
+
}
|
|
337
556
|
}
|
|
338
557
|
exports.Queue = Queue;
|
|
339
558
|
//# sourceMappingURL=Queue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Queue.js","sourceRoot":"","sources":["../../src/structures/Queue.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Queue.js","sourceRoot":"","sources":["../../src/structures/Queue.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAa,KAAK;IAAlB;QACS,WAAM,GAAY,EAAE,CAAC;QACrB,YAAO,GAAiB,IAAI,CAAC;QAC7B,YAAO,GAAY,EAAE,CAAC;QACtB,YAAO,GAAY,EAAE,CAAC;QACtB,cAAS,GAAG,KAAK,CAAC;QAClB,UAAK,GAAa,KAAK,CAAC;QACxB,aAAQ,GAAiB,IAAI,CAAC;QAEtC,gBAAgB;QACC,qBAAgB,GAAG,GAAG,CAAC;QACvB,mBAAc,GAAG,IAAI,CAAC,CAAC,wBAAwB;IAsiBjE,CAAC;IApiBA;;;;;;;;OAQG;IACH,GAAG,CAAC,KAAY;QACf,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED;;;;;;;OAOG;IACH,WAAW,CAAC,MAAe;QAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,UAAU,MAAM,CAAC,MAAM,0CAA0C,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAC1G,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,KAAY,EAAE,KAAa;QACjC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3B,CAAC;QAED,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAEvE,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED;;;;;;;;OAQG;IACH,cAAc,CAAC,MAAe,EAAE,KAAa;QAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAE7E,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,aAAa,MAAM,CAAC,MAAM,0CAA0C,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAC7G,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3B,CAAC;QAED,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAEvE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;aAAM,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,KAAa;QACnB,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,OAAO,OAAO,CAAC;IAChB,CAAC;IAED;;;;;;;OAOG;IACH,cAAc,CAAC,OAAiB;QAC/B,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAY,EAAE,CAAC;QAE5B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC9C,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,CAAC;QACF,CAAC;QAED,OAAO,OAAO,CAAC;IAChB,CAAC;IAED;;;;;;;OAOG;IACH,WAAW,CAAC,SAAmD;QAC9D,MAAM,OAAO,GAAY,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAClC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,CAAC;QACF,CAAC;QACD,OAAO,OAAO,CAAC;IAChB,CAAC;IAED;;;;;;;;OAQG;IACH,IAAI,CAAC,UAAU,GAAG,KAAK;QACtB,oBAAoB;QACpB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;YAC3D,OAAO,IAAI,CAAC,OAAO,CAAC;QACrB,CAAC;QAED,gDAAgD;QAChD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QAED,iBAAiB;QACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC;QAE3C,oBAAoB;QACpB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACvF,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC;QAC5C,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,KAAY;QAChC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACjD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACH,KAAK;QACJ,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,kEAAkE;IACnE,CAAC;IAED;;;;;OAKG;IACH,YAAY;QACX,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACH,KAAK;QACJ,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACtB,CAAC;IAED;;;;;;;;OAQG;IACH,QAAQ,CAAC,KAAe;QACvB,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE,CAAC;YAClC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACxB,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,CAAC,IAAe;QACnB,IAAI,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACH,SAAS;QACR,OAAO,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,WAAW;QACV,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACH,OAAO;QACN,uBAAuB;QACvB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACjD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9C,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;IACF,CAAC;IAED;;;;;;;;OAQG;IACH,IAAI,CAAC,SAAiB,EAAE,OAAe;QACtC,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QACnE,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC/D,IAAI,SAAS,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC;QAEvC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;;;;;OAQG;IACH,IAAI,CAAC,MAAc,EAAE,MAAc;QAClC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC7D,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC7D,IAAI,MAAM,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QAEnC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACxF,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,IAAI,YAAY;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,IAAI,cAAc;QACjB,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,IAAI,mBAAmB;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;IACpD,CAAC;IAED;;;;;;;;OAQG;IACH,QAAQ;QACP,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAE3C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAED;;;;;;;OAOG;IACH,aAAa,CAAC,SAAiB;QAC9B,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEnE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;QACpD,IAAI,WAAW,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAEjC,wCAAwC;QACxC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QAED,gDAAgD;QAChD,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;QAE1C,iFAAiF;QACjF,KAAK,IAAI,CAAC,GAAG,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACxD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAED;;;;;;;;OAQG;IACH,aAAa,CAAC,KAAa;QAC1B,IAAI,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACvB,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IAED;;;;;;;;OAQG;IACH,aAAa,CAAC,KAAe;QAC5B,IAAI,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACtB,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAED;;;;;;;OAOG;IACH,SAAS;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,MAAM;QACL,OAAO;YACN,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,KAAK;YACpB,QAAQ,EAAE,IAAI,CAAC,SAAS;SACxB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,IAAyG;QACjH,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;IAChC,CAAC;IACD;;;;;;;;OAQG;IACH,QAAQ,CAAC,KAAa;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IACnC,CAAC;IAED;;;;;;;OAOG;IACH,UAAU,CAAC,SAAoC;QAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED;;;;;;;OAOG;IACH,OAAO,CAAC,UAA0B;QACjC,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,IAAI,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,UAA0B;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IACxC,CAAC;CACD;AAjjBD,sBAijBC"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { Readable } from "stream";
|
|
2
|
+
import { EventEmitter } from "events";
|
|
3
|
+
import type { Track } from "../types";
|
|
4
|
+
export interface ManagedStream {
|
|
5
|
+
id: string;
|
|
6
|
+
stream: Readable;
|
|
7
|
+
track: Track;
|
|
8
|
+
createdAt: number;
|
|
9
|
+
lastAccessed: number;
|
|
10
|
+
metadata: {
|
|
11
|
+
source: string;
|
|
12
|
+
isPreload: boolean;
|
|
13
|
+
priority: number;
|
|
14
|
+
};
|
|
15
|
+
listeners: {
|
|
16
|
+
error: (err: Error) => void;
|
|
17
|
+
close: () => void;
|
|
18
|
+
end: () => void;
|
|
19
|
+
drain?: () => void;
|
|
20
|
+
pause?: () => void;
|
|
21
|
+
resume?: () => void;
|
|
22
|
+
};
|
|
23
|
+
status: "active" | "paused" | "ended" | "error" | "destroyed";
|
|
24
|
+
byteCount: number;
|
|
25
|
+
}
|
|
26
|
+
export interface StreamManagerOptions {
|
|
27
|
+
maxConcurrentStreams?: number;
|
|
28
|
+
streamTimeout?: number;
|
|
29
|
+
maxListenersPerStream?: number;
|
|
30
|
+
cleanupInterval?: number;
|
|
31
|
+
enableMetrics?: boolean;
|
|
32
|
+
autoDestroy?: boolean;
|
|
33
|
+
}
|
|
34
|
+
export declare class StreamManager extends EventEmitter {
|
|
35
|
+
private streams;
|
|
36
|
+
private options;
|
|
37
|
+
private cleanupTimer;
|
|
38
|
+
private metrics;
|
|
39
|
+
constructor(options?: StreamManagerOptions);
|
|
40
|
+
/**
|
|
41
|
+
* Register a new stream
|
|
42
|
+
*/
|
|
43
|
+
registerStream(stream: Readable, track: Track, metadata?: Partial<ManagedStream["metadata"]>): string;
|
|
44
|
+
/**
|
|
45
|
+
* Create stream listeners
|
|
46
|
+
*/
|
|
47
|
+
private createStreamListeners;
|
|
48
|
+
/**
|
|
49
|
+
* Setup data counter for stream
|
|
50
|
+
*/
|
|
51
|
+
private setupDataCounter;
|
|
52
|
+
/**
|
|
53
|
+
* Unregister a stream
|
|
54
|
+
*/
|
|
55
|
+
unregisterStream(streamId: string, forceDestroy?: boolean): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Get a stream by ID
|
|
58
|
+
*/
|
|
59
|
+
getStream(streamId: string): Readable | null;
|
|
60
|
+
/**
|
|
61
|
+
* Update stream metadata
|
|
62
|
+
*/
|
|
63
|
+
updateMetadata(streamId: string, metadata: Partial<ManagedStream["metadata"]>): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Pause a stream
|
|
66
|
+
*/
|
|
67
|
+
pauseStream(streamId: string): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Resume a stream
|
|
70
|
+
*/
|
|
71
|
+
resumeStream(streamId: string): boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Evict oldest stream when limit reached
|
|
74
|
+
*/
|
|
75
|
+
private evictOldestStream;
|
|
76
|
+
/**
|
|
77
|
+
* Cleanup expired streams
|
|
78
|
+
*/
|
|
79
|
+
private cleanupExpiredStreams;
|
|
80
|
+
/**
|
|
81
|
+
* Start automatic cleanup interval
|
|
82
|
+
*/
|
|
83
|
+
private startCleanupInterval;
|
|
84
|
+
/**
|
|
85
|
+
* Stop cleanup interval
|
|
86
|
+
*/
|
|
87
|
+
stopCleanupInterval(): void;
|
|
88
|
+
/**
|
|
89
|
+
* Get all active streams
|
|
90
|
+
*/
|
|
91
|
+
getAllStreams(): ManagedStream[];
|
|
92
|
+
/**
|
|
93
|
+
* Get streams by status
|
|
94
|
+
*/
|
|
95
|
+
getStreamsByStatus(status: ManagedStream["status"]): ManagedStream[];
|
|
96
|
+
/**
|
|
97
|
+
* Get stream by track ID (using track.id, track.url, or track.title as identifier)
|
|
98
|
+
*/
|
|
99
|
+
getStreamByTrack(trackId: string): Readable | null;
|
|
100
|
+
/**
|
|
101
|
+
* Check if a stream exists for a given track ID
|
|
102
|
+
*/
|
|
103
|
+
hasStream(trackId: string): boolean;
|
|
104
|
+
/**
|
|
105
|
+
* Get stream count
|
|
106
|
+
*/
|
|
107
|
+
getStreamCount(): number;
|
|
108
|
+
/**
|
|
109
|
+
* Get metrics
|
|
110
|
+
*/
|
|
111
|
+
getMetrics(): typeof this.metrics;
|
|
112
|
+
/**
|
|
113
|
+
* Get statistics
|
|
114
|
+
*/
|
|
115
|
+
getStats(): {
|
|
116
|
+
active: number;
|
|
117
|
+
paused: number;
|
|
118
|
+
ended: number;
|
|
119
|
+
error: number;
|
|
120
|
+
destroyed: number;
|
|
121
|
+
total: number;
|
|
122
|
+
bySource: Record<string, number>;
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Destroy all streams
|
|
126
|
+
*/
|
|
127
|
+
destroyAll(force?: boolean): void;
|
|
128
|
+
/**
|
|
129
|
+
* Generate unique stream ID
|
|
130
|
+
*/
|
|
131
|
+
private generateStreamId;
|
|
132
|
+
/**
|
|
133
|
+
* Debug logging
|
|
134
|
+
*/
|
|
135
|
+
private debug;
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=StreamManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StreamManager.d.ts","sourceRoot":"","sources":["../../src/structures/StreamManager.ts"],"names":[],"mappings":"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"}
|