@involvex/youtube-music-cli 0.0.46 → 0.0.48

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 (118) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/cli.js.map +1004 -0
  3. package/dist/source/hooks/usePlayer.d.ts +1 -0
  4. package/dist/source/services/player-state/player-state.service.d.ts +1 -0
  5. package/dist/source/stores/player.store.d.ts +1 -0
  6. package/dist/source/types/actions.d.ts +4 -0
  7. package/dist/source/types/player.types.d.ts +3 -2
  8. package/dist/source/utils/constants.d.ts +1 -0
  9. package/dist/source/utils/icons.d.ts +1 -0
  10. package/dist/youtube-music-cli +0 -0
  11. package/package.json +1 -1
  12. package/dist/eslint.config.js +0 -55
  13. package/dist/package.json +0 -120
  14. package/dist/scripts/build-cli.js +0 -46
  15. package/dist/source/app.js +0 -17
  16. package/dist/source/cli.js +0 -504
  17. package/dist/source/components/common/ErrorBoundary.js +0 -22
  18. package/dist/source/components/common/Help.js +0 -18
  19. package/dist/source/components/common/ShortcutsBar.js +0 -80
  20. package/dist/source/components/config/ConfigLayout.js +0 -84
  21. package/dist/source/components/config/KeybindingsLayout.js +0 -107
  22. package/dist/source/components/export/ExportLayout.js +0 -111
  23. package/dist/source/components/import/ImportLayout.js +0 -119
  24. package/dist/source/components/import/ImportProgress.js +0 -73
  25. package/dist/source/components/layouts/ExploreLayout.js +0 -72
  26. package/dist/source/components/layouts/HistoryLayout.js +0 -37
  27. package/dist/source/components/layouts/LyricsLayout.js +0 -89
  28. package/dist/source/components/layouts/MainLayout.js +0 -190
  29. package/dist/source/components/layouts/MiniPlayerLayout.js +0 -20
  30. package/dist/source/components/layouts/PlayerLayout.js +0 -9
  31. package/dist/source/components/layouts/PluginsLayout.js +0 -77
  32. package/dist/source/components/layouts/SearchLayout.js +0 -193
  33. package/dist/source/components/layouts/TrendingLayout.js +0 -59
  34. package/dist/source/components/player/NowPlaying.js +0 -45
  35. package/dist/source/components/player/PlayerControls.js +0 -83
  36. package/dist/source/components/player/ProgressBar.js +0 -19
  37. package/dist/source/components/player/QueueList.js +0 -36
  38. package/dist/source/components/player/Suggestions.js +0 -50
  39. package/dist/source/components/playlist/PlaylistList.js +0 -138
  40. package/dist/source/components/plugins/PluginInstallDialog.js +0 -41
  41. package/dist/source/components/plugins/PluginsAvailable.js +0 -55
  42. package/dist/source/components/plugins/PluginsList.js +0 -18
  43. package/dist/source/components/search/SearchBar.js +0 -55
  44. package/dist/source/components/search/SearchHistory.js +0 -35
  45. package/dist/source/components/search/SearchResults.js +0 -280
  46. package/dist/source/components/settings/Settings.js +0 -211
  47. package/dist/source/components/theme/ThemeSwitcher.js +0 -11
  48. package/dist/source/config/themes.config.js +0 -123
  49. package/dist/source/contexts/theme.context.js +0 -29
  50. package/dist/source/hooks/useKeyboard.js +0 -188
  51. package/dist/source/hooks/useKeyboardBlocker.js +0 -45
  52. package/dist/source/hooks/useNavigation.js +0 -5
  53. package/dist/source/hooks/usePlayer.js +0 -43
  54. package/dist/source/hooks/usePlaylist.js +0 -65
  55. package/dist/source/hooks/useSearch.js +0 -76
  56. package/dist/source/hooks/useSleepTimer.js +0 -48
  57. package/dist/source/hooks/useTerminalSize.js +0 -24
  58. package/dist/source/hooks/useTheme.js +0 -5
  59. package/dist/source/hooks/useYouTubeMusic.js +0 -112
  60. package/dist/source/main.js +0 -127
  61. package/dist/source/services/cache/cache.service.js +0 -67
  62. package/dist/source/services/completions/completions.service.js +0 -313
  63. package/dist/source/services/config/config.service.js +0 -191
  64. package/dist/source/services/discord/discord-rpc.service.js +0 -95
  65. package/dist/source/services/download/download.service.js +0 -350
  66. package/dist/source/services/export/export.service.js +0 -131
  67. package/dist/source/services/history/history.service.js +0 -83
  68. package/dist/source/services/import/import.service.js +0 -272
  69. package/dist/source/services/import/spotify.service.js +0 -171
  70. package/dist/source/services/import/track-matcher.service.js +0 -271
  71. package/dist/source/services/import/youtube-import.service.js +0 -84
  72. package/dist/source/services/logger/logger.service.js +0 -52
  73. package/dist/source/services/lyrics/lyrics.service.js +0 -93
  74. package/dist/source/services/mpris/mpris.service.js +0 -78
  75. package/dist/source/services/notification/notification.service.js +0 -57
  76. package/dist/source/services/player/dependency-check.service.js +0 -140
  77. package/dist/source/services/player/player.service.js +0 -478
  78. package/dist/source/services/player-state/player-state.service.js +0 -122
  79. package/dist/source/services/plugin/plugin-audio-api.js +0 -36
  80. package/dist/source/services/plugin/plugin-context.js +0 -256
  81. package/dist/source/services/plugin/plugin-hooks.service.js +0 -135
  82. package/dist/source/services/plugin/plugin-installer.service.js +0 -248
  83. package/dist/source/services/plugin/plugin-loader.service.js +0 -161
  84. package/dist/source/services/plugin/plugin-permissions.service.js +0 -194
  85. package/dist/source/services/plugin/plugin-registry.service.js +0 -215
  86. package/dist/source/services/plugin/plugin-ui-api.js +0 -46
  87. package/dist/source/services/plugin/plugin-updater.service.js +0 -206
  88. package/dist/source/services/scrobbling/scrobbling.service.js +0 -115
  89. package/dist/source/services/sleep-timer/sleep-timer.service.js +0 -45
  90. package/dist/source/services/version-check/version-check.service.js +0 -121
  91. package/dist/source/services/web/static-file.service.js +0 -185
  92. package/dist/source/services/web/web-server-manager.js +0 -506
  93. package/dist/source/services/web/web-streaming.service.js +0 -290
  94. package/dist/source/services/web/websocket.server.js +0 -267
  95. package/dist/source/services/youtube-music/api.js +0 -649
  96. package/dist/source/services/youtube-music/search.service.js +0 -38
  97. package/dist/source/stores/history.store.js +0 -64
  98. package/dist/source/stores/navigation.store.js +0 -90
  99. package/dist/source/stores/player.store.js +0 -724
  100. package/dist/source/stores/plugins.store.js +0 -177
  101. package/dist/source/types/actions.js +0 -1
  102. package/dist/source/types/cli.types.js +0 -1
  103. package/dist/source/types/config.types.js +0 -1
  104. package/dist/source/types/history.types.js +0 -1
  105. package/dist/source/types/import.types.js +0 -2
  106. package/dist/source/types/keyboard.types.js +0 -1
  107. package/dist/source/types/navigation.types.js +0 -1
  108. package/dist/source/types/player.types.js +0 -1
  109. package/dist/source/types/playlist.types.js +0 -1
  110. package/dist/source/types/plugin.types.js +0 -1
  111. package/dist/source/types/theme.types.js +0 -1
  112. package/dist/source/types/web.types.js +0 -2
  113. package/dist/source/types/youtube-music.types.js +0 -1
  114. package/dist/source/types/youtubei.types.js +0 -3
  115. package/dist/source/utils/constants.js +0 -134
  116. package/dist/source/utils/format.js +0 -24
  117. package/dist/source/utils/icons.js +0 -26
  118. package/dist/source/utils/search-filters.js +0 -100
@@ -17,6 +17,7 @@ export declare function usePlayer(): {
17
17
  volumeFineDown: () => void;
18
18
  toggleShuffle: () => void;
19
19
  toggleRepeat: () => void;
20
+ toggleAutoplay: () => void;
20
21
  setQueue: (queue: Track[]) => void;
21
22
  addToQueue: (track: Track) => void;
22
23
  removeFromQueue: (index: number) => void;
@@ -8,6 +8,7 @@ export interface PersistedPlayerState {
8
8
  volume: number;
9
9
  shuffle: boolean;
10
10
  repeat: 'off' | 'all' | 'one';
11
+ autoplay?: boolean;
11
12
  lastUpdated: string;
12
13
  }
13
14
  /**
@@ -18,6 +18,7 @@ type PlayerContextValue = {
18
18
  volumeFineDown: () => void;
19
19
  toggleShuffle: () => void;
20
20
  toggleRepeat: () => void;
21
+ toggleAutoplay: () => void;
21
22
  setQueue: (queue: Track[]) => void;
22
23
  addToQueue: (track: Track) => void;
23
24
  removeFromQueue: (index: number) => void;
@@ -44,6 +44,9 @@ export interface ToggleShuffleAction {
44
44
  export interface ToggleRepeatAction {
45
45
  readonly category: 'TOGGLE_REPEAT';
46
46
  }
47
+ export interface ToggleAutoplayAction {
48
+ readonly category: 'TOGGLE_AUTOPLAY';
49
+ }
47
50
  export interface SetQueueAction {
48
51
  readonly category: 'SET_QUEUE';
49
52
  queue: Track[];
@@ -91,6 +94,7 @@ export interface RestoreStateAction {
91
94
  volume: number;
92
95
  shuffle: boolean;
93
96
  repeat: 'off' | 'all' | 'one';
97
+ autoplay?: boolean;
94
98
  }
95
99
  export interface SetSpeedAction {
96
100
  readonly category: 'SET_SPEED';
@@ -1,4 +1,4 @@
1
- import type { PlayAction, PauseAction, ResumeAction, StopAction, NextAction, PreviousAction, SeekAction, SetVolumeAction, VolumeUpAction, VolumeDownAction, VolumeFineUpAction, VolumeFineDownAction, ToggleShuffleAction, ToggleRepeatAction, SetQueueAction, AddToQueueAction, RemoveFromQueueAction, ClearQueueAction, SetQueuePositionAction, UpdateProgressAction, SetDurationAction, TickAction, SetLoadingAction, SetErrorAction, RestoreStateAction, SetSpeedAction } from './actions.ts';
1
+ import type { PlayAction, PauseAction, ResumeAction, StopAction, NextAction, PreviousAction, SeekAction, SetVolumeAction, VolumeUpAction, VolumeDownAction, VolumeFineUpAction, VolumeFineDownAction, ToggleShuffleAction, ToggleRepeatAction, ToggleAutoplayAction, SetQueueAction, AddToQueueAction, RemoveFromQueueAction, ClearQueueAction, SetQueuePositionAction, UpdateProgressAction, SetDurationAction, TickAction, SetLoadingAction, SetErrorAction, RestoreStateAction, SetSpeedAction } from './actions.ts';
2
2
  import type { Track } from './youtube-music.types.ts';
3
3
  export interface PlayerState {
4
4
  currentTrack: Track | null;
@@ -11,8 +11,9 @@ export interface PlayerState {
11
11
  queuePosition: number;
12
12
  repeat: 'off' | 'all' | 'one';
13
13
  shuffle: boolean;
14
+ autoplay: boolean;
14
15
  isLoading: boolean;
15
16
  error: string | null;
16
17
  playRequestId: number;
17
18
  }
18
- export type PlayerAction = PlayAction | PauseAction | ResumeAction | StopAction | NextAction | PreviousAction | SeekAction | SetVolumeAction | VolumeUpAction | VolumeDownAction | VolumeFineUpAction | VolumeFineDownAction | ToggleShuffleAction | ToggleRepeatAction | SetQueueAction | AddToQueueAction | RemoveFromQueueAction | ClearQueueAction | SetQueuePositionAction | UpdateProgressAction | SetDurationAction | TickAction | SetLoadingAction | SetErrorAction | RestoreStateAction | SetSpeedAction;
19
+ export type PlayerAction = PlayAction | PauseAction | ResumeAction | StopAction | NextAction | PreviousAction | SeekAction | SetVolumeAction | VolumeUpAction | VolumeDownAction | VolumeFineUpAction | VolumeFineDownAction | ToggleShuffleAction | ToggleRepeatAction | ToggleAutoplayAction | SetQueueAction | AddToQueueAction | RemoveFromQueueAction | ClearQueueAction | SetQueuePositionAction | UpdateProgressAction | SetDurationAction | TickAction | SetLoadingAction | SetErrorAction | RestoreStateAction | SetSpeedAction;
@@ -49,6 +49,7 @@ export declare const KEYBINDINGS: {
49
49
  readonly VOLUME_FINE_DOWN: readonly ["shift+-"];
50
50
  readonly SHUFFLE: readonly ["shift+s"];
51
51
  readonly REPEAT: readonly ["r"];
52
+ readonly AUTOPLAY_TOGGLE: readonly ["shift+a"];
52
53
  readonly GAPLESS_TOGGLE: readonly ["shift+g"];
53
54
  readonly CROSSFADE_CYCLE: readonly ["shift+c"];
54
55
  readonly EQUALIZER_CYCLE: readonly ["shift+e"];
@@ -16,4 +16,5 @@ export declare const ICONS: {
16
16
  readonly RESUME: "⟳";
17
17
  readonly BG_PLAY: "○";
18
18
  readonly VOLUME: "♪";
19
+ readonly AUTOPLAY: "∞";
19
20
  };
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@involvex/youtube-music-cli",
3
- "version": "0.0.46",
3
+ "version": "0.0.48",
4
4
  "description": "- A Commandline music player for youtube-music",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,55 +0,0 @@
1
- import pluginReact from 'eslint-plugin-react';
2
- import hooksPlugin from 'eslint-plugin-react-hooks';
3
- import { defineConfig } from 'eslint/config';
4
- import tseslint from 'typescript-eslint';
5
- import globals from 'globals';
6
- import js from '@eslint/js';
7
- export default defineConfig([
8
- {
9
- ignores: ['templates/**/*', 'plugins/**/*'],
10
- },
11
- {
12
- files: ['**/*.{js,mjs,cjs}'],
13
- plugins: { js },
14
- extends: ['js/recommended'],
15
- languageOptions: { globals: { ...globals.node } },
16
- },
17
- ...tseslint.configs.recommended,
18
- {
19
- files: ['**/*.{ts,mts,cts,jsx,tsx}'],
20
- languageOptions: {
21
- globals: { ...globals.node },
22
- ecmaVersion: 'latest',
23
- sourceType: 'module',
24
- parserOptions: {
25
- projectService: true,
26
- tsconfigRootDir: import.meta.dirname,
27
- },
28
- },
29
- },
30
- {
31
- files: ['**/*.jsx', '**/*.tsx'],
32
- ...pluginReact.configs.flat['recommended'],
33
- plugins: {
34
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
35
- 'react-hooks': hooksPlugin,
36
- },
37
- settings: {
38
- react: { version: 'detect' },
39
- jsxRuntime: 'automatic',
40
- },
41
- rules: {
42
- ...hooksPlugin.configs.recommended.rules,
43
- 'react/react-in-jsx-scope': 'off',
44
- 'react/jsx-uses-react': 'off',
45
- '@typescript-eslint/no-unused-vars': [
46
- 'error',
47
- {
48
- argsIgnorePattern: '^_',
49
- varsIgnorePattern: '^_',
50
- caughtErrorsIgnorePattern: '^_',
51
- },
52
- ],
53
- },
54
- },
55
- ]);
package/dist/package.json DELETED
@@ -1,120 +0,0 @@
1
- {
2
- "name": "@involvex/youtube-music-cli",
3
- "version": "0.0.46",
4
- "description": "- A Commandline music player for youtube-music",
5
- "repository": {
6
- "type": "git",
7
- "url": "git+https://github.com/involvex/youtube-music-cli.git"
8
- },
9
- "funding": "https://github.com/sponsors/involvex",
10
- "license": "MIT",
11
- "author": "involvex",
12
- "type": "module",
13
- "bin": {
14
- "youtube-music-cli": "dist/source/cli.js",
15
- "ymc": "dist/source/cli.js"
16
- },
17
- "files": [
18
- "dist",
19
- "README.md",
20
- "CHANGELOG.md",
21
- "LICENSE",
22
- ".github/FUNDING.yml"
23
- ],
24
- "icon": "assets/icon2.PNG",
25
- "sponsor": {
26
- "url": "https://github.com/sponsors/involvex"
27
- },
28
- "homepage": "https://involvex.github.io/youtube-music-cli/",
29
- "keywords": [
30
- "cli",
31
- "youtube",
32
- "youtube-music",
33
- "youtube-cli",
34
- "youtube-music-cli",
35
- "ink",
36
- "cli-music"
37
- ],
38
- "scripts": {
39
- "prebuild": "bun run format && bun run lint:fix && bun run typecheck",
40
- "build": "tsc",
41
- "bun:build": "bun build source/cli.tsx --outfile dist/index.js --target node --footer \"//Copyright (c) 2026 involvex\"",
42
- "compile": "bun scripts/build-cli.ts",
43
- "dev": "bun run --bun source/cli.tsx",
44
- "dev:watch": "bun run --bun --watch source/cli.tsx",
45
- "format": "prettier --write .",
46
- "format:check": "prettier --check .",
47
- "lint": "eslint . --ext .js,.jsx,.ts,.tsx --ignore-pattern dist",
48
- "lint:fix": "eslint . --ext .js,.jsx,.ts,.tsx --fix --ignore-pattern dist",
49
- "start": "bun run dist/source/cli.js",
50
- "test": "bun run build && ava",
51
- "typecheck": "tsc --noEmit",
52
- "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0",
53
- "clean": "rimraf dist",
54
- "release": "powershell -File scripts/release.ps1",
55
- "build:web": "cd web && bun run build",
56
- "dev:web": "cd web && bun run dev",
57
- "build:all": "bun run build && bun run build:web",
58
- "msix": "bun run compile && msix-packager-cli package --config ./msix-config.json --skip-build"
59
- },
60
- "prettier": "@vdemedes/prettier-config",
61
- "ava": {
62
- "files": [
63
- "tests/**/*.js"
64
- ]
65
- },
66
- "dependencies": {
67
- "@distube/ytdl-core": "^4.16.12",
68
- "@types/bun": "^1.3.9",
69
- "ansi-escapes": "^7.3.0",
70
- "discord-rpc": "^4.0.1",
71
- "ink": "^6.8.0",
72
- "ink-table": "^3.1.0",
73
- "ink-text-input": "^6.0.0",
74
- "jiti": "^2.6.1",
75
- "meow": "^14.1.0",
76
- "node-notifier": "^10.0.1",
77
- "node-youtube-music": "^0.10.3",
78
- "play-sound": "^1.1.6",
79
- "react": "^19.2.4",
80
- "ws": "^8.19.0",
81
- "youtube-ext": "^1.1.25",
82
- "youtubei.js": "^16.0.1"
83
- },
84
- "devDependencies": {
85
- "@eslint/js": "^10.0.1",
86
- "@sindresorhus/tsconfig": "^8.1.0",
87
- "@types/node": "^25.3.0",
88
- "@types/node-notifier": "^8.0.5",
89
- "@types/react": "^19.2.14",
90
- "@types/ws": "^8.18.1",
91
- "@vdemedes/prettier-config": "^2.0.1",
92
- "ava": "^6.4.1",
93
- "chalk": "^5.6.2",
94
- "conventional-changelog-cli": "^5.0.0",
95
- "eslint": "^10.0.1",
96
- "eslint-plugin-react": "^7.37.5",
97
- "eslint-plugin-react-hooks": "^7.0.1",
98
- "globals": "^17.3.0",
99
- "ink-testing-library": "^4.0.0",
100
- "prettier": "^3.8.1",
101
- "prettier-plugin-organize-imports": "^4.3.0",
102
- "prettier-plugin-packagejson": "^3.0.0",
103
- "prettier-plugin-sort-imports": "^1.8.11",
104
- "react-devtools-core": "^7.0.1",
105
- "rimraf": "^6.1.3",
106
- "ts-node": "^10.9.2",
107
- "typescript": "^5.9.3",
108
- "typescript-eslint": "^8.56.0"
109
- },
110
- "engines": {
111
- "node": ">=16"
112
- },
113
- "sponsors": "https://github.com/sponsors/involvex",
114
- "overrides": {
115
- "minimatch": "^10.2.1"
116
- },
117
- "trustedDependencies": [
118
- "unrs-resolver"
119
- ]
120
- }
@@ -1,46 +0,0 @@
1
- import path from 'node:path';
2
- import pkg from '../package.json' with { type: 'json' };
3
- const rootDir = process.cwd();
4
- const isWindows = process.platform === 'win32';
5
- const outputName = isWindows ? 'youtube-music-cli.exe' : 'youtube-music-cli';
6
- const outfile = path.join(rootDir, 'dist', outputName);
7
- const banner = '//Copyright (c) 2026 involvex';
8
- const iconPath = path.join(rootDir, 'assets', 'icon.ico');
9
- const platformTarget = isWindows
10
- ? 'bun-windows-x64'
11
- : process.platform === 'darwin'
12
- ? 'bun-darwin-x64'
13
- : 'bun-linux-x64';
14
- const compileOptions = isWindows
15
- ? {
16
- target: platformTarget,
17
- outfile,
18
- footer: banner,
19
- windowsTitle: 'YouTube Music CLI',
20
- windowsPublisher: 'involvex',
21
- windowsIcon: iconPath,
22
- windowsCopyright: 'Copyright (c) 2026 involvex',
23
- windowsDescription: 'A Commandline music player for youtube-music',
24
- }
25
- : {
26
- target: platformTarget,
27
- outfile,
28
- };
29
- const buildOptions = {
30
- entrypoints: [path.join(rootDir, 'source', 'cli.tsx')],
31
- compile: compileOptions,
32
- footer: banner,
33
- minify: true,
34
- sourcemap: 'linked',
35
- bytecode: false,
36
- define: {
37
- 'process.env.NODE_ENV': JSON.stringify('production'),
38
- VERSION: JSON.stringify(pkg.version ?? '0.0.0'),
39
- },
40
- };
41
- const result = await Bun.build(buildOptions);
42
- if (!result.success) {
43
- console.error('Build failed', result.logs ?? result);
44
- process.exit(1);
45
- }
46
- console.log('Build succeeded:', result.outputs.map(output => output.path));
@@ -1,17 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- // Root application component
3
- import { useApp } from 'ink';
4
- import Main from "./main.js";
5
- import { useEffect } from 'react';
6
- // Handle unmounting
7
- let unmount = null;
8
- export default function App({ flags }) {
9
- const { exit } = useApp();
10
- // Store unmount function globally
11
- useEffect(() => {
12
- if (!unmount) {
13
- unmount = exit;
14
- }
15
- }, [exit]);
16
- return _jsx(Main, { flags: flags });
17
- }