@bzenky/spoti 0.2.0 → 0.4.0

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 (70) hide show
  1. package/README.md +122 -4
  2. package/dist/app.d.ts +23 -1
  3. package/dist/app.js +397 -36
  4. package/dist/app.js.map +1 -1
  5. package/dist/auth/config.d.ts +1 -1
  6. package/dist/auth/config.js +3 -3
  7. package/dist/auth/config.js.map +1 -1
  8. package/dist/cli.js +54 -0
  9. package/dist/cli.js.map +1 -1
  10. package/dist/services/auth.service.d.ts +1 -1
  11. package/dist/services/auth.service.js +9 -3
  12. package/dist/services/auth.service.js.map +1 -1
  13. package/dist/services/catalog.service.d.ts +9 -0
  14. package/dist/services/catalog.service.js +22 -0
  15. package/dist/services/catalog.service.js.map +1 -0
  16. package/dist/services/device.service.js +22 -2
  17. package/dist/services/device.service.js.map +1 -1
  18. package/dist/services/library.service.d.ts +13 -0
  19. package/dist/services/library.service.js +46 -0
  20. package/dist/services/library.service.js.map +1 -0
  21. package/dist/services/mappers.d.ts +10 -0
  22. package/dist/services/mappers.js +104 -0
  23. package/dist/services/mappers.js.map +1 -0
  24. package/dist/services/models.d.ts +45 -0
  25. package/dist/services/player.service.d.ts +4 -1
  26. package/dist/services/player.service.js +21 -14
  27. package/dist/services/player.service.js.map +1 -1
  28. package/dist/services/playlist.service.d.ts +9 -0
  29. package/dist/services/playlist.service.js +33 -0
  30. package/dist/services/playlist.service.js.map +1 -0
  31. package/dist/services/recent.service.d.ts +7 -0
  32. package/dist/services/recent.service.js +24 -0
  33. package/dist/services/recent.service.js.map +1 -0
  34. package/dist/services/search.service.d.ts +5 -1
  35. package/dist/services/search.service.js +32 -17
  36. package/dist/services/search.service.js.map +1 -1
  37. package/dist/services/update.service.d.ts +57 -0
  38. package/dist/services/update.service.js +313 -0
  39. package/dist/services/update.service.js.map +1 -0
  40. package/dist/spotify/client.js +14 -1
  41. package/dist/spotify/client.js.map +1 -1
  42. package/dist/spotify/scopes.d.ts +1 -1
  43. package/dist/spotify/scopes.js +4 -0
  44. package/dist/spotify/scopes.js.map +1 -1
  45. package/dist/spotify/types.d.ts +110 -8
  46. package/dist/storage/config.d.ts +5 -1
  47. package/dist/storage/config.js +21 -1
  48. package/dist/storage/config.js.map +1 -1
  49. package/dist/storage/update-cache.d.ts +29 -0
  50. package/dist/storage/update-cache.js +135 -0
  51. package/dist/storage/update-cache.js.map +1 -0
  52. package/dist/ui/completions.d.ts +3 -0
  53. package/dist/ui/completions.js +237 -0
  54. package/dist/ui/completions.js.map +1 -0
  55. package/dist/ui/interactive-search.d.ts +33 -0
  56. package/dist/ui/interactive-search.js +174 -0
  57. package/dist/ui/interactive-search.js.map +1 -0
  58. package/dist/ui/output.d.ts +10 -1
  59. package/dist/ui/output.js +60 -0
  60. package/dist/ui/output.js.map +1 -1
  61. package/dist/ui/progress.d.ts +6 -0
  62. package/dist/ui/progress.js +25 -0
  63. package/dist/ui/progress.js.map +1 -0
  64. package/dist/ui/prompts.d.ts +12 -1
  65. package/dist/ui/prompts.js +73 -6
  66. package/dist/ui/prompts.js.map +1 -1
  67. package/dist/update-worker.d.ts +9 -0
  68. package/dist/update-worker.js +91 -0
  69. package/dist/update-worker.js.map +1 -0
  70. package/package.json +1 -1
package/dist/app.js CHANGED
@@ -1,7 +1,11 @@
1
1
  import { Command } from 'commander';
2
+ import { UPDATE_COMMAND, } from './services/update.service.js';
2
3
  import { CONFIG_KEYS, parseConfigValue, } from './storage/config.js';
3
- import { formatPlayback, formatTrack } from './ui/output.js';
4
- import { selectTrack } from './ui/prompts.js';
4
+ import { formatAlbumDetail, formatArtistDetail, formatPlayback, formatPlaylist, formatPlaylistOverview, formatRecentlyPlayed, formatSavedTrack, formatTrack, } from './ui/output.js';
5
+ import { confirmUpdate, promptSpotifyClientId, selectAlbum, selectAlbumAction, selectArtist, selectArtistAction, selectPlaylist, selectPlaylistAction, selectTrack, } from './ui/prompts.js';
6
+ import { generateCompletionScript } from './ui/completions.js';
7
+ import { withProgress } from './ui/progress.js';
8
+ import { runInteractiveSearch, } from './ui/interactive-search.js';
5
9
  import { watchPlayback } from './ui/watch.js';
6
10
  import { ConfigurationError } from './utils/errors.js';
7
11
  import { formatDuration } from './utils/time.js';
@@ -9,11 +13,66 @@ import { VERSION } from './version.js';
9
13
  export function createProgram(dependencies) {
10
14
  const program = new Command();
11
15
  const chooseTrack = dependencies.chooseTrack ?? selectTrack;
16
+ const chooseAlbum = dependencies.chooseAlbum ?? selectAlbum;
17
+ const chooseArtist = dependencies.chooseArtist ?? selectArtist;
18
+ const choosePlaylist = dependencies.choosePlaylist ?? selectPlaylist;
19
+ const chooseAlbumAction = dependencies.chooseAlbumAction ?? selectAlbumAction;
20
+ const chooseArtistAction = dependencies.chooseArtistAction ?? selectArtistAction;
21
+ const choosePlaylistAction = dependencies.choosePlaylistAction ?? selectPlaylistAction;
22
+ const requestClientId = dependencies.requestSpotifyClientId ?? promptSpotifyClientId;
23
+ const requestUpdateConfirmation = dependencies.confirmUpdate ?? confirmUpdate;
24
+ const startInteractiveSearch = dependencies.interactiveSearch ??
25
+ (() => runInteractiveSearch({
26
+ search: dependencies.search,
27
+ player: dependencies.player,
28
+ }));
29
+ const showProgress = dependencies.progress ?? withProgress;
30
+ const runTask = (label, task) => showProgress(label, task);
12
31
  const startWatching = dependencies.watchPlayback ?? watchPlayback;
32
+ const runAlbumAction = async (album) => {
33
+ const detail = await runTask('Loading album…', () => dependencies.catalog.getAlbum(album.id));
34
+ dependencies.output.log(formatAlbumDetail(detail));
35
+ const action = await chooseAlbumAction();
36
+ if (action === 'play-album') {
37
+ await dependencies.player.playContext(detail.uri);
38
+ dependencies.output.log(`▶ Playing album ${detail.name}`);
39
+ return;
40
+ }
41
+ if (action === 'play-track') {
42
+ const track = await chooseTrack(detail.tracks);
43
+ if (!track)
44
+ return;
45
+ await dependencies.player.playTrack(track.uri);
46
+ dependencies.output.log(`▶ Playing ${track.name} — ${track.artists.join(', ')}`);
47
+ }
48
+ };
13
49
  program
14
50
  .name('spoti')
15
51
  .description('Control Spotify from your terminal')
16
- .version(VERSION);
52
+ .version(VERSION)
53
+ .action(() => program.outputHelp());
54
+ const interactiveCommand = program
55
+ .command('interactive')
56
+ .alias('i')
57
+ .description('Open the keyboard-driven Spotify search')
58
+ .action(async () => {
59
+ const result = await startInteractiveSearch();
60
+ if (result.status === 'not-interactive')
61
+ interactiveCommand.outputHelp();
62
+ });
63
+ program
64
+ .command('setup')
65
+ .description('Save your Spotify application client ID')
66
+ .argument('[client-id]', 'Spotify application client ID')
67
+ .action(async (providedClientId) => {
68
+ const clientId = providedClientId ?? (await requestClientId());
69
+ if (!clientId) {
70
+ throw new ConfigurationError('A Spotify client ID is required.\n\nRun: spoti setup <client-id>');
71
+ }
72
+ const validatedClientId = parseConfigValue('spotifyClientId', clientId);
73
+ await dependencies.config.set('spotifyClientId', validatedClientId);
74
+ dependencies.output.log('✓ Spotify client ID saved.\n\nNext: spoti login');
75
+ });
17
76
  program
18
77
  .command('login')
19
78
  .description('Log in to Spotify')
@@ -44,7 +103,8 @@ export function createProgram(dependencies) {
44
103
  .command('config')
45
104
  .description('View and update spoti configuration')
46
105
  .action(async () => {
47
- dependencies.output.log(formatConfig(await dependencies.config.read()));
106
+ const config = await dependencies.config.read();
107
+ dependencies.output.log(formatConfig(config));
48
108
  });
49
109
  configCommand
50
110
  .command('get')
@@ -66,6 +126,24 @@ export function createProgram(dependencies) {
66
126
  await dependencies.config.set(key, value);
67
127
  dependencies.output.log(`✓ ${key} = ${String(value)}`);
68
128
  });
129
+ configCommand
130
+ .command('unset')
131
+ .description('Reset one configuration value to its default')
132
+ .argument('<key>', 'configuration key')
133
+ .action(async (keyName) => {
134
+ const key = parseConfigKey(keyName);
135
+ await dependencies.config.resetKey(key);
136
+ dependencies.output.log(`✓ ${key} reset`);
137
+ });
138
+ configCommand
139
+ .command('path')
140
+ .description('Print the configuration file path')
141
+ .action(() => {
142
+ if (!dependencies.config.path) {
143
+ throw new ConfigurationError('The active configuration store has no file path.');
144
+ }
145
+ dependencies.output.log(dependencies.config.path);
146
+ });
69
147
  configCommand
70
148
  .command('reset')
71
149
  .description('Reset configuration to defaults')
@@ -75,6 +153,7 @@ export function createProgram(dependencies) {
75
153
  });
76
154
  program
77
155
  .command('now')
156
+ .alias('np')
78
157
  .description('Show the current Spotify playback')
79
158
  .option('-w, --watch', 'continuously refresh playback information')
80
159
  .action(async (options) => {
@@ -91,6 +170,7 @@ export function createProgram(dependencies) {
91
170
  });
92
171
  program
93
172
  .command('pause')
173
+ .alias('pa')
94
174
  .description('Pause playback')
95
175
  .action(async () => {
96
176
  await dependencies.player.pause();
@@ -98,6 +178,7 @@ export function createProgram(dependencies) {
98
178
  });
99
179
  program
100
180
  .command('resume')
181
+ .alias('r')
101
182
  .description('Resume playback')
102
183
  .action(async () => {
103
184
  await dependencies.player.resume();
@@ -121,29 +202,30 @@ export function createProgram(dependencies) {
121
202
  });
122
203
  program
123
204
  .command('devices')
205
+ .alias('devs')
124
206
  .description('List available Spotify Connect devices')
125
207
  .action(async () => {
126
- const devices = await dependencies.device.getDevices();
127
- if (devices.length === 0) {
128
- dependencies.output.log('No Spotify devices are available. Open Spotify on a device and try again.');
129
- return;
130
- }
131
- dependencies.output.log(devices
132
- .map((device, index) => {
133
- const state = device.isActive
134
- ? 'active'
135
- : device.isRestricted
136
- ? 'restricted'
137
- : 'available';
138
- const volume = device.volumePercent === null ? '' : ` · ${device.volumePercent}%`;
139
- return `${index + 1}. ${device.name} · ${device.type} · ${state}${volume}`;
140
- })
141
- .join('\n'));
208
+ const devices = await runTask('Loading devices…', () => dependencies.device.getDevices());
209
+ const formatted = devices.length === 0
210
+ ? 'No Spotify devices are available. Open Spotify on a device and try again.'
211
+ : devices
212
+ .map((device, index) => {
213
+ const state = device.isActive
214
+ ? 'active'
215
+ : device.isRestricted
216
+ ? 'restricted'
217
+ : 'available';
218
+ const volume = device.volumePercent === null ? '' : ` · ${device.volumePercent}%`;
219
+ return `${index + 1}. ${device.name} · ${device.type} · ${state}${volume}`;
220
+ })
221
+ .join('\n');
222
+ dependencies.output.log(formatted);
142
223
  });
143
224
  program
144
225
  .command('device')
226
+ .alias('dev')
145
227
  .description('Transfer playback to a Spotify Connect device')
146
- .argument('<name-or-id...>', 'exact device name or ID')
228
+ .argument('<number-name-or-id...>', 'displayed number, exact device name, or ID')
147
229
  .action(async (nameOrIdParts) => {
148
230
  const device = await dependencies.device.findDevice(nameOrIdParts.join(' '));
149
231
  if (!device.id)
@@ -165,6 +247,7 @@ export function createProgram(dependencies) {
165
247
  });
166
248
  program
167
249
  .command('volume')
250
+ .alias('vol')
168
251
  .description('Set or adjust the active device volume')
169
252
  .argument('<value>', 'volume from 0-100, or a relative change such as +10 or -10')
170
253
  .allowUnknownOption()
@@ -177,13 +260,14 @@ export function createProgram(dependencies) {
177
260
  });
178
261
  program
179
262
  .command('queue')
263
+ .alias('q')
180
264
  .description('Show the playback queue or add a searched track')
181
265
  .argument('[query...]', 'track name to add')
182
266
  .option('--first', 'queue the first search result without prompting')
183
267
  .action(async (queryParts, options) => {
184
268
  const query = queryParts.join(' ').trim();
185
269
  if (!query) {
186
- const playbackQueue = await dependencies.queue.getQueue();
270
+ const playbackQueue = await runTask('Loading queue…', () => dependencies.queue.getQueue());
187
271
  const lines = playbackQueue.currentlyPlaying
188
272
  ? [
189
273
  `Now: ${formatQueueItem(playbackQueue.currentlyPlaying)}`,
@@ -212,14 +296,204 @@ export function createProgram(dependencies) {
212
296
  await dependencies.queue.addItem(track.uri);
213
297
  dependencies.output.log(`✓ Queued ${track.name} — ${track.artists.join(', ')}`);
214
298
  });
299
+ program
300
+ .command('shuffle')
301
+ .description('Turn playback shuffle on or off')
302
+ .argument('<state>', 'on or off')
303
+ .action(async (state) => {
304
+ if (state !== 'on' && state !== 'off') {
305
+ throw new ConfigurationError('Shuffle state must be either "on" or "off".');
306
+ }
307
+ await dependencies.player.setShuffle(state === 'on');
308
+ dependencies.output.log(`✓ Shuffle ${state}`);
309
+ });
310
+ program
311
+ .command('repeat')
312
+ .alias('rep')
313
+ .description('Set the playback repeat mode')
314
+ .argument('<mode>', 'off, track, or context')
315
+ .action(async (mode) => {
316
+ if (mode !== 'off' && mode !== 'track' && mode !== 'context') {
317
+ throw new ConfigurationError('Repeat mode must be "off", "track", or "context".');
318
+ }
319
+ await dependencies.player.setRepeat(mode);
320
+ dependencies.output.log(`✓ Repeat: ${mode}`);
321
+ });
322
+ program
323
+ .command('album')
324
+ .description('Search for and show an album')
325
+ .argument('<query...>', 'album name')
326
+ .option('--first', 'select the first result without prompting')
327
+ .action(async (queryParts, options) => {
328
+ const query = queryParts.join(' ').trim();
329
+ const albums = await runTask('Searching albums…', () => dependencies.search.searchAlbums(query));
330
+ if (albums.length === 0) {
331
+ dependencies.output.log(`No albums found for "${query}".`);
332
+ return;
333
+ }
334
+ const album = options.first ? albums[0] : await chooseAlbum(albums);
335
+ if (!album) {
336
+ dependencies.output.log('Selection cancelled.');
337
+ return;
338
+ }
339
+ await runAlbumAction(album);
340
+ });
341
+ program
342
+ .command('artist')
343
+ .description('Search for and show an artist')
344
+ .argument('<query...>', 'artist name')
345
+ .option('--first', 'select the first result without prompting')
346
+ .action(async (queryParts, options) => {
347
+ const query = queryParts.join(' ').trim();
348
+ const artists = await runTask('Searching artists…', () => dependencies.search.searchArtists(query));
349
+ if (artists.length === 0) {
350
+ dependencies.output.log(`No artists found for "${query}".`);
351
+ return;
352
+ }
353
+ const artist = options.first ? artists[0] : await chooseArtist(artists);
354
+ if (!artist) {
355
+ dependencies.output.log('Selection cancelled.');
356
+ return;
357
+ }
358
+ const detail = await runTask('Loading artist…', () => dependencies.catalog.getArtist(artist.id));
359
+ dependencies.output.log(formatArtistDetail(detail));
360
+ const action = await chooseArtistAction();
361
+ if (action === 'play-artist') {
362
+ await dependencies.player.playContext(detail.uri);
363
+ dependencies.output.log(`▶ Playing artist ${detail.name}`);
364
+ return;
365
+ }
366
+ if (action === 'select-album') {
367
+ const albums = await runTask('Loading artist albums…', () => dependencies.catalog.getArtistAlbums(detail.id));
368
+ if (albums.length === 0) {
369
+ dependencies.output.log(`No albums found for ${detail.name}.`);
370
+ return;
371
+ }
372
+ const album = await chooseAlbum(albums);
373
+ if (album)
374
+ await runAlbumAction(album);
375
+ }
376
+ });
377
+ program
378
+ .command('playlists')
379
+ .alias('pls')
380
+ .description('List your Spotify playlists')
381
+ .option('-l, --limit <number>', 'maximum number of playlists', parseCollectionLimit, 50)
382
+ .action(async (options) => {
383
+ const playlists = await runTask('Loading playlists…', () => dependencies.playlist.listPlaylists(options.limit));
384
+ dependencies.output.log(playlists.length === 0
385
+ ? 'No playlists found.'
386
+ : playlists.map((playlist, index) => formatPlaylist(playlist, index)).join('\n'));
387
+ });
388
+ program
389
+ .command('playlist')
390
+ .alias('pl')
391
+ .description('Show one of your Spotify playlists')
392
+ .argument('<query...>', 'playlist name')
393
+ .option('--first', 'select the first match without prompting')
394
+ .action(async (queryParts, options) => {
395
+ const query = queryParts.join(' ').trim();
396
+ const allPlaylists = await runTask('Loading playlists…', () => dependencies.playlist.listPlaylists(50));
397
+ let playlist;
398
+ if (/^\d+$/.test(query)) {
399
+ playlist = findNumberedPlaylist(allPlaylists, query);
400
+ }
401
+ else {
402
+ const matches = allPlaylists.filter((playlist) => playlist.name.toLocaleLowerCase().includes(query.toLocaleLowerCase()));
403
+ if (matches.length === 0) {
404
+ dependencies.output.log(`No playlists found for "${query}".`);
405
+ return;
406
+ }
407
+ playlist = options.first ? matches[0] : await choosePlaylist(matches);
408
+ }
409
+ if (!playlist) {
410
+ dependencies.output.log('Selection cancelled.');
411
+ return;
412
+ }
413
+ dependencies.output.log(formatPlaylistOverview(playlist));
414
+ if ((await choosePlaylistAction()) === 'play-playlist') {
415
+ await dependencies.player.playContext(playlist.uri);
416
+ dependencies.output.log(`▶ Playing playlist ${playlist.name}`);
417
+ }
418
+ });
419
+ program
420
+ .command('liked')
421
+ .description('List your liked tracks')
422
+ .option('-l, --limit <number>', 'maximum number of tracks', parseCollectionLimit, 20)
423
+ .action(async (options) => {
424
+ const tracks = await runTask('Loading liked tracks…', () => dependencies.library.getLikedTracks(options.limit));
425
+ dependencies.output.log(tracks.length === 0
426
+ ? 'No liked tracks found.'
427
+ : tracks.map((item, index) => formatSavedTrack(item, index)).join('\n'));
428
+ });
429
+ program
430
+ .command('like')
431
+ .description('Add the current track to your Spotify library')
432
+ .action(async () => {
433
+ const track = await dependencies.library.likeCurrentTrack();
434
+ dependencies.output.log(track
435
+ ? `♥ Liked ${track.name} — ${track.artists.join(', ')}`
436
+ : 'No playable track is currently selected.');
437
+ });
438
+ program
439
+ .command('unlike')
440
+ .description('Remove the current track from your Spotify library')
441
+ .action(async () => {
442
+ const track = await dependencies.library.unlikeCurrentTrack();
443
+ dependencies.output.log(track
444
+ ? `♡ Unliked ${track.name} — ${track.artists.join(', ')}`
445
+ : 'No playable track is currently selected.');
446
+ });
447
+ program
448
+ .command('recent')
449
+ .alias('rec')
450
+ .description('Show recently played tracks')
451
+ .option('-l, --limit <number>', 'maximum number of tracks', parseCollectionLimit, 20)
452
+ .action(async (options) => {
453
+ const tracks = await runTask('Loading recent tracks…', () => dependencies.recent.getRecentlyPlayed(options.limit));
454
+ dependencies.output.log(tracks.length === 0
455
+ ? 'No recently played tracks found.'
456
+ : tracks.map((item, index) => formatRecentlyPlayed(item, index)).join('\n'));
457
+ });
458
+ program
459
+ .command('update')
460
+ .description('Check for or install the latest spoti version')
461
+ .option('--check', 'check without installing')
462
+ .action(async (options) => {
463
+ const result = await dependencies.update.checkForeground();
464
+ if (result.status === 'current') {
465
+ dependencies.output.log(`✓ spoti ${result.currentVersion} is up to date.`);
466
+ return;
467
+ }
468
+ dependencies.output.log(`Update available: ${result.currentVersion} → ${result.latestVersion}`);
469
+ if (options.check) {
470
+ dependencies.output.log(`Run: ${UPDATE_COMMAND}`);
471
+ return;
472
+ }
473
+ const confirmed = await requestUpdateConfirmation(result.currentVersion, result.latestVersion);
474
+ if (!confirmed) {
475
+ dependencies.output.log(`Update cancelled.\nRun manually: ${UPDATE_COMMAND}`);
476
+ return;
477
+ }
478
+ await dependencies.update.installLatest(true, result.latestVersion);
479
+ dependencies.output.log(`✓ Updated spoti to ${result.latestVersion}.`);
480
+ });
481
+ program
482
+ .command('completion')
483
+ .description('Generate a shell completion script')
484
+ .argument('<shell>', 'bash, zsh, or fish')
485
+ .action((shellName) => {
486
+ dependencies.output.log(generateCompletionScript(parseCompletionShell(shellName)));
487
+ });
215
488
  program
216
489
  .command('search')
490
+ .alias('s')
217
491
  .description('Search Spotify tracks')
218
492
  .argument('<query...>', 'track name to search for')
219
493
  .option('-l, --limit <number>', 'maximum number of results', parseLimit, 10)
220
494
  .action(async (queryParts, options) => {
221
495
  const query = queryParts.join(' ');
222
- const tracks = await dependencies.search.searchTracks(query, options.limit);
496
+ const tracks = await runTask('Searching tracks…', () => dependencies.search.searchTracks(query, options.limit));
223
497
  if (tracks.length === 0) {
224
498
  dependencies.output.log(`No tracks found for "${query}".`);
225
499
  return;
@@ -228,8 +502,9 @@ export function createProgram(dependencies) {
228
502
  });
229
503
  program
230
504
  .command('play')
231
- .description('Search for and play a track, or resume with no query')
232
- .argument('[query...]', 'track name to search for')
505
+ .alias('p')
506
+ .description('Play a track or an explicit album, artist, or playlist context')
507
+ .argument('[query...]', 'track query, or: track|album|artist|playlist <query>')
233
508
  .option('--first', 'play the first search result without prompting')
234
509
  .option('--watch', 'continuously refresh playback information')
235
510
  .option('--no-watch', 'return to the shell after starting playback')
@@ -248,20 +523,29 @@ export function createProgram(dependencies) {
248
523
  }
249
524
  return;
250
525
  }
251
- const tracks = await dependencies.search.searchTracks(query);
252
- if (tracks.length === 0) {
253
- dependencies.output.log(`No tracks found for "${query}".`);
254
- return;
255
- }
256
- const track = options.first ? tracks[0] : await chooseTrack(tracks);
257
- if (!track) {
258
- dependencies.output.log('Selection cancelled.');
526
+ const firstPart = queryParts[0];
527
+ const hasExplicitType = queryParts.length > 1 && isSpotifyPlayableType(firstPart);
528
+ const explicitType = hasExplicitType ? firstPart : 'track';
529
+ const searchQuery = hasExplicitType ? queryParts.slice(1).join(' ').trim() : query;
530
+ const selection = await selectPlaybackItem({
531
+ type: explicitType,
532
+ query: searchQuery,
533
+ first: options.first ?? false,
534
+ dependencies,
535
+ chooseTrack,
536
+ chooseAlbum,
537
+ chooseArtist,
538
+ choosePlaylist,
539
+ });
540
+ if (!selection)
259
541
  return;
260
- }
261
542
  const config = await dependencies.config.read();
262
543
  const shouldWatch = options.watch ?? config.watchAfterPlay;
263
- await dependencies.player.playTrack(track.uri);
264
- dependencies.output.log(`▶ Playing ${track.name} — ${track.artists.join(', ')}`);
544
+ if (selection.type === 'track')
545
+ await dependencies.player.playTrack(selection.uri);
546
+ else
547
+ await dependencies.player.playContext(selection.uri);
548
+ dependencies.output.log(`▶ Playing ${selection.label}`);
265
549
  if (shouldWatch) {
266
550
  await startWatching({
267
551
  player: dependencies.player,
@@ -271,6 +555,71 @@ export function createProgram(dependencies) {
271
555
  });
272
556
  return program;
273
557
  }
558
+ async function selectPlaybackItem(options) {
559
+ const { dependencies, first, query } = options;
560
+ let selected;
561
+ if (options.type === 'track') {
562
+ const items = await dependencies.search.searchTracks(query);
563
+ if (items.length === 0) {
564
+ return reportNoResults(dependencies.output, 'tracks', query);
565
+ }
566
+ selected = first ? items[0] : await options.chooseTrack(items);
567
+ }
568
+ else if (options.type === 'album') {
569
+ const items = await dependencies.search.searchAlbums(query);
570
+ if (items.length === 0) {
571
+ return reportNoResults(dependencies.output, 'albums', query);
572
+ }
573
+ selected = first ? items[0] : await options.chooseAlbum(items);
574
+ }
575
+ else if (options.type === 'artist') {
576
+ const items = await dependencies.search.searchArtists(query);
577
+ if (items.length === 0) {
578
+ return reportNoResults(dependencies.output, 'artists', query);
579
+ }
580
+ selected = first ? items[0] : await options.chooseArtist(items);
581
+ }
582
+ else {
583
+ if (/^\d+$/.test(query)) {
584
+ selected = findNumberedPlaylist(await dependencies.playlist.listPlaylists(50), query);
585
+ }
586
+ else {
587
+ const items = await dependencies.search.searchPlaylists(query);
588
+ if (items.length === 0) {
589
+ return reportNoResults(dependencies.output, 'playlists', query);
590
+ }
591
+ selected = first ? items[0] : await options.choosePlaylist(items);
592
+ }
593
+ }
594
+ if (!selected) {
595
+ dependencies.output.log('Selection cancelled.');
596
+ return null;
597
+ }
598
+ if (options.type === 'track') {
599
+ const track = selected;
600
+ return {
601
+ type: 'track',
602
+ uri: track.uri,
603
+ label: `${track.name} — ${track.artists.join(', ')}`,
604
+ };
605
+ }
606
+ return { type: options.type, uri: selected.uri, label: selected.name };
607
+ }
608
+ function findNumberedPlaylist(playlists, number) {
609
+ const index = Number(number) - 1;
610
+ const playlist = Number.isSafeInteger(index) ? playlists[index] : undefined;
611
+ if (!playlist) {
612
+ throw new ConfigurationError(`Playlist number ${number} is out of range. Run: spoti playlists`);
613
+ }
614
+ return playlist;
615
+ }
616
+ function reportNoResults(output, type, query) {
617
+ output.log(`No ${type} found for "${query}".`);
618
+ return null;
619
+ }
620
+ function isSpotifyPlayableType(value) {
621
+ return value === 'track' || value === 'album' || value === 'artist' || value === 'playlist';
622
+ }
274
623
  function parseSeekInput(value) {
275
624
  const relative = value.startsWith('+') || value.startsWith('-');
276
625
  const sign = value.startsWith('-') ? -1 : 1;
@@ -316,6 +665,11 @@ function parseConfigKey(value) {
316
665
  function formatConfig(config) {
317
666
  return CONFIG_KEYS.map((key) => `${key}: ${String(config[key])}`).join('\n');
318
667
  }
668
+ function parseCompletionShell(value) {
669
+ if (value === 'bash' || value === 'zsh' || value === 'fish')
670
+ return value;
671
+ throw new ConfigurationError('Completion shell must be "bash", "zsh", or "fish".');
672
+ }
319
673
  function parseLimit(value) {
320
674
  const limit = /^\d+$/.test(value) ? Number(value) : Number.NaN;
321
675
  if (!Number.isInteger(limit) || limit < 1 || limit > 10) {
@@ -323,4 +677,11 @@ function parseLimit(value) {
323
677
  }
324
678
  return limit;
325
679
  }
680
+ function parseCollectionLimit(value) {
681
+ const limit = /^\d+$/.test(value) ? Number(value) : Number.NaN;
682
+ if (!Number.isInteger(limit) || limit < 1 || limit > 50) {
683
+ throw new Error('Limit must be an integer between 1 and 50.');
684
+ }
685
+ return limit;
686
+ }
326
687
  //# sourceMappingURL=app.js.map
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}