karaoke-eternal 1.0.0 → 2.0.0-beta.5

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 (128) hide show
  1. package/README.md +10 -10
  2. package/build/client/447.a51d7d3f87c474adad54.js +1 -0
  3. package/build/client/715.a51d7d3f87c474adad54.js +1 -0
  4. package/build/client/718.a51d7d3f87c474adad54.js +1 -0
  5. package/build/client/851.a51d7d3f87c474adad54.js +1 -0
  6. package/build/{845.4be526e3a94d53aeceae.css → client/958.a51d7d3f87c474adad54.css} +53 -6
  7. package/build/client/958.a51d7d3f87c474adad54.js +1 -0
  8. package/build/{index.html → client/index.html} +1 -1
  9. package/build/{licenses.txt → client/licenses.txt} +208 -496
  10. package/build/client/main.a51d7d3f87c474adad54.css +2341 -0
  11. package/build/client/main.a51d7d3f87c474adad54.js +1 -0
  12. package/build/server/Library/Library.js +297 -0
  13. package/build/server/Library/ipc.js +13 -0
  14. package/build/server/Library/router.js +20 -0
  15. package/build/server/Library/socket.js +35 -0
  16. package/build/server/Media/Media.js +170 -0
  17. package/build/server/Media/fileTypes.js +8 -0
  18. package/build/server/Media/ipc.js +13 -0
  19. package/build/server/Media/router.js +97 -0
  20. package/build/server/Player/socket.js +66 -0
  21. package/build/server/Prefs/Prefs.js +181 -0
  22. package/build/server/Prefs/router.js +151 -0
  23. package/build/server/Prefs/socket.js +52 -0
  24. package/build/server/Queue/Queue.js +203 -0
  25. package/build/server/Queue/socket.js +83 -0
  26. package/build/server/Rooms/Rooms.js +171 -0
  27. package/build/server/Rooms/router.js +97 -0
  28. package/build/server/Rooms/socket.js +23 -0
  29. package/build/server/Scanner/FileScanner/FileScanner.js +166 -0
  30. package/build/server/Scanner/FileScanner/getConfig.js +32 -0
  31. package/build/server/Scanner/FileScanner/getFiles.js +61 -0
  32. package/build/server/Scanner/MetaParser/MetaParser.js +77 -0
  33. package/build/server/Scanner/MetaParser/defaultMiddleware.js +170 -0
  34. package/build/server/Scanner/Scanner.js +26 -0
  35. package/build/server/Scanner/ScannerQueue.js +62 -0
  36. package/build/server/User/User.js +206 -0
  37. package/build/server/User/router.js +366 -0
  38. package/build/server/lib/Database.js +39 -0
  39. package/build/server/lib/Errors.js +6 -0
  40. package/build/server/lib/IPCBridge.js +128 -0
  41. package/build/server/lib/Log.js +31 -0
  42. package/build/server/lib/accumulatedThrottle.js +16 -0
  43. package/build/server/lib/bcrypt.js +23 -0
  44. package/build/server/lib/cli.js +131 -0
  45. package/build/server/lib/getCdgName.js +18 -0
  46. package/build/server/lib/getFolders.js +8 -0
  47. package/build/server/lib/getHotMiddleware.js +22 -0
  48. package/build/server/lib/getIPAddress.js +14 -0
  49. package/build/server/lib/getPermutations.js +17 -0
  50. package/build/server/lib/getWindowsDrives.js +17 -0
  51. package/build/server/lib/parseCookie.js +13 -0
  52. package/build/server/lib/pushQueuesAndLibrary.js +22 -0
  53. package/{server → build/server}/lib/schemas/001-initial-schema.sql +26 -26
  54. package/build/server/lib/schemas/004-paths-rooms-data.sql +7 -0
  55. package/build/server/lib/schemas/005-roles.sql +32 -0
  56. package/build/server/lib/util.js +39 -0
  57. package/build/server/main.js +124 -0
  58. package/build/server/scannerWorker.js +59 -0
  59. package/build/server/serverWorker.js +219 -0
  60. package/build/server/socket.js +134 -0
  61. package/build/server/watcherWorker.js +51 -0
  62. package/build/shared/actionTypes.js +113 -0
  63. package/build/shared/types.js +1 -0
  64. package/package.json +111 -86
  65. package/build/267.4be526e3a94d53aeceae.js +0 -1
  66. package/build/591.4be526e3a94d53aeceae.js +0 -1
  67. package/build/598.4be526e3a94d53aeceae.js +0 -1
  68. package/build/799.4be526e3a94d53aeceae.js +0 -1
  69. package/build/845.4be526e3a94d53aeceae.js +0 -1
  70. package/build/main.4be526e3a94d53aeceae.css +0 -2034
  71. package/build/main.4be526e3a94d53aeceae.js +0 -1
  72. package/server/Library/Library.js +0 -340
  73. package/server/Library/index.js +0 -3
  74. package/server/Library/ipc.js +0 -18
  75. package/server/Library/router.js +0 -27
  76. package/server/Library/socket.js +0 -47
  77. package/server/Media/Media.js +0 -207
  78. package/server/Media/index.js +0 -3
  79. package/server/Media/ipc.js +0 -19
  80. package/server/Media/router.js +0 -99
  81. package/server/Player/socket.js +0 -78
  82. package/server/Prefs/Prefs.js +0 -165
  83. package/server/Prefs/index.js +0 -3
  84. package/server/Prefs/router.js +0 -124
  85. package/server/Prefs/socket.js +0 -68
  86. package/server/Queue/Queue.js +0 -208
  87. package/server/Queue/index.js +0 -3
  88. package/server/Queue/socket.js +0 -99
  89. package/server/Rooms/Rooms.js +0 -114
  90. package/server/Rooms/index.js +0 -3
  91. package/server/Rooms/router.js +0 -146
  92. package/server/Scanner/FileScanner/FileScanner.js +0 -225
  93. package/server/Scanner/FileScanner/getConfig.js +0 -35
  94. package/server/Scanner/FileScanner/getFiles.js +0 -63
  95. package/server/Scanner/FileScanner/index.js +0 -3
  96. package/server/Scanner/MetaParser/MetaParser.js +0 -49
  97. package/server/Scanner/MetaParser/defaultMiddleware.js +0 -197
  98. package/server/Scanner/MetaParser/index.js +0 -3
  99. package/server/Scanner/Scanner.js +0 -33
  100. package/server/User/User.js +0 -139
  101. package/server/User/index.js +0 -3
  102. package/server/User/router.js +0 -442
  103. package/server/lib/Database.js +0 -55
  104. package/server/lib/IPCBridge.js +0 -115
  105. package/server/lib/Log.js +0 -71
  106. package/server/lib/bcrypt.js +0 -24
  107. package/server/lib/cli.js +0 -136
  108. package/server/lib/electron.js +0 -81
  109. package/server/lib/getCdgName.js +0 -20
  110. package/server/lib/getDevMiddleware.js +0 -51
  111. package/server/lib/getFolders.js +0 -10
  112. package/server/lib/getHotMiddleware.js +0 -27
  113. package/server/lib/getIPAddress.js +0 -16
  114. package/server/lib/getPermutations.js +0 -21
  115. package/server/lib/getWindowsDrives.js +0 -30
  116. package/server/lib/parseCookie.js +0 -12
  117. package/server/lib/pushQueuesAndLibrary.js +0 -29
  118. package/server/main.js +0 -135
  119. package/server/scannerWorker.js +0 -58
  120. package/server/serverWorker.js +0 -242
  121. package/server/socket.js +0 -173
  122. package/shared/actionTypes.js +0 -103
  123. /package/build/{7ce9eb3fe454f54745a4.woff2 → client/7ce9eb3fe454f54745a4.woff2} +0 -0
  124. /package/build/{598.4be526e3a94d53aeceae.css → client/851.a51d7d3f87c474adad54.css} +0 -0
  125. /package/build/{a35814dd9eb496e3d7cc.woff2 → client/a35814dd9eb496e3d7cc.woff2} +0 -0
  126. /package/build/{e419b95dccb58b362811.woff2 → client/e419b95dccb58b362811.woff2} +0 -0
  127. /package/{server → build/server}/lib/schemas/002-replaygain.sql +0 -0
  128. /package/{server → build/server}/lib/schemas/003-queue-linked-list.sql +0 -0
@@ -0,0 +1,113 @@
1
+ export const SOCKET_REQUEST_CONNECT = 'user/SOCKET_REQUEST_CONNECT';
2
+ export const SOCKET_AUTH_ERROR = 'user/SOCKET_AUTH_ERROR';
3
+ // Library
4
+ export const LIBRARY_FILTER_STRING = 'library/FILTER_KEYWORD';
5
+ export const LIBRARY_FILTER_STRING_RESET = 'library/FILTER_KEYWORD_CLEAR';
6
+ export const LIBRARY_FILTER_TOGGLE_STARRED = 'library/TOGGLE_FILTER_STARRED';
7
+ export const TOGGLE_ARTIST_EXPANDED = 'library/TOGGLE_ARTIST_EXPANDED';
8
+ export const TOGGLE_ARTIST_RESULT_EXPANDED = 'library/TOGGLE_ARTIST_RESULT_EXPANDED';
9
+ export const SCROLL_ARTISTS = 'library/SCROLL_ARTISTS';
10
+ export const SONG_STARRED = 'library/SONG_STARRED';
11
+ export const SONG_UNSTARRED = 'library/SONG_UNSTARRED';
12
+ export const STAR_COUNTS_PUSH = 'library/STAR_COUNTS_PUSH';
13
+ export const LIBRARY_PUSH = 'library/PUSH';
14
+ export const LIBRARY_PUSH_SONG = 'library/PUSH_SONG';
15
+ // Queue
16
+ export const QUEUE_ADD = 'server/QUEUE_ADD';
17
+ export const QUEUE_MOVE = 'server/QUEUE_MOVE';
18
+ export const QUEUE_PUSH = 'queue/PUSH';
19
+ export const QUEUE_REMOVE = 'server/QUEUE_REMOVE';
20
+ // Player internal
21
+ export const PLAYER_UPDATE = 'player/UPDATE';
22
+ // Player room commands
23
+ export const PLAYER_CMD_NEXT = 'player/CMD_NEXT';
24
+ export const PLAYER_CMD_OPTIONS = 'player/CMD_OPTIONS';
25
+ export const PLAYER_CMD_PAUSE = 'player/CMD_PAUSE';
26
+ export const PLAYER_CMD_PLAY = 'player/CMD_PLAY';
27
+ export const PLAYER_CMD_REPLAY = 'player/CMD_REPLAY';
28
+ export const PLAYER_CMD_VOLUME = 'player/CMD_VOLUME';
29
+ export const PLAYER_REQ_NEXT = 'server/PLAYER_REQ_NEXT';
30
+ export const PLAYER_REQ_OPTIONS = 'server/PLAYER_REQ_OPTIONS';
31
+ export const PLAYER_REQ_PAUSE = 'server/PLAYER_REQ_PAUSE';
32
+ export const PLAYER_REQ_PLAY = 'server/PLAYER_REQ_PLAY';
33
+ export const PLAYER_REQ_REPLAY = 'server/PLAYER_REQ_REPLAY';
34
+ export const PLAYER_REQ_VOLUME = 'server/PLAYER_REQ_VOLUME';
35
+ export const PLAYER_EMIT_STATUS = 'server/PLAYER_EMIT_STATUS';
36
+ export const PLAYER_EMIT_LEAVE = 'server/PLAYER_EMIT_LEAVE';
37
+ // Player events
38
+ export const PLAYER_STATUS = 'status/PLAYER_STATUS';
39
+ export const PLAYER_ERROR = 'status/PLAYER_ERROR';
40
+ export const PLAYER_LEAVE = 'status/PLAYER_LEAVE';
41
+ export const PLAYER_LOAD = 'status/PLAYER_LOAD';
42
+ export const PLAYER_PLAY = 'status/PLAYER_PLAY';
43
+ export const PLAYER_VISUALIZER_ERROR = 'status/PLAYER_VISUALIZER_ERROR';
44
+ // User
45
+ export const LOGIN = 'user/LOGIN';
46
+ export const LOGOUT = 'user/LOGOUT';
47
+ export const ACCOUNT_RECEIVE = 'user/ACCOUNT_RECEIVE';
48
+ export const ACCOUNT_CREATE = 'user/ACCOUNT_CREATE';
49
+ export const ACCOUNT_UPDATE = 'user/ACCOUNT_UPDATE';
50
+ export const ACCOUNT_REQUEST = 'user/ACCOUNT_REQUEST';
51
+ // Rooms
52
+ export const ROOMS_RECEIVE = 'rooms/RECEIVE';
53
+ export const ROOMS_REQUEST = 'rooms/REQUEST';
54
+ export const ROOM_UPDATE = 'rooms/UPDATE';
55
+ export const ROOM_CREATE = 'rooms/CREATE';
56
+ export const ROOM_REMOVE = 'rooms/REMOVE';
57
+ export const ROOM_EDITOR_OPEN = 'rooms/EDITOR_OPEN';
58
+ export const ROOM_EDITOR_CLOSE = 'rooms/EDITOR_CLOSE';
59
+ export const ROOM_FILTER_STATUS = 'rooms/TOGGLE_SHOW_ALL';
60
+ export const ROOM_PREFS_PUSH = 'rooms/ROOM_PREFS_PUSH';
61
+ export const ROOM_PREFS_PUSH_REQUEST = 'server/ROOM_PREFS_PUSH_REQUEST';
62
+ // Stars
63
+ export const STAR_SONG = 'server/STAR_SONG';
64
+ export const UNSTAR_SONG = 'server/UNSTAR_SONG';
65
+ export const STARS_PUSH = 'user/STARS_PUSH';
66
+ // Preferences
67
+ export const PREFS_RECEIVE = 'prefs/RECEIVE';
68
+ export const PREFS_REQUEST = 'prefs/REQUEST';
69
+ export const PREFS_SET = 'server/PREFS_SET';
70
+ export const PREFS_PATH_SET_PRIORITY = 'server/PREFS_PATH_SET_PRIORITY';
71
+ export const PREFS_PATH_UPDATE = 'prefs/PREFS_PATH_UPDATE';
72
+ export const PREFS_PUSH = 'prefs/PREFS_PUSH';
73
+ export const PREFS_REQ_SCANNER_START = 'prefs/REQ_SCANNER_START';
74
+ export const PREFS_REQ_SCANNER_STOP = 'prefs/REQ_SCANNER_STOP';
75
+ // User management
76
+ export const USERS_CREATE = 'users/CREATE';
77
+ export const USERS_EDITOR_OPEN = 'users/EDITOR_OPEN';
78
+ export const USERS_EDITOR_CLOSE = 'users/EDITOR_CLOSE';
79
+ export const USERS_FILTER_ONLINE = 'users/FILTER_ONLINE';
80
+ export const USERS_FILTER_ROOM_ID = 'users/FILTER_ROOM_ID';
81
+ export const USERS_REMOVE = 'users/REMOVE';
82
+ export const USERS_REQUEST = 'users/REQUEST';
83
+ export const USERS_UPDATE = 'users/UPDATE';
84
+ // UI
85
+ export const HEADER_HEIGHT_CHANGE = 'ui/HEADER_HEIGHT_CHANGE';
86
+ export const FOOTER_HEIGHT_CHANGE = 'ui/FOOTER_HEIGHT_CHANGE';
87
+ export const SHOW_ERROR_MESSAGE = 'ui/SHOW_ERROR_MESSAGE';
88
+ export const CLEAR_ERROR_MESSAGE = 'ui/CLEAR_ERROR_MESSAGE';
89
+ export const UI_WINDOW_RESIZE = 'ui/WINDOW_RESIZE';
90
+ // Song Info
91
+ export const SONG_INFO_REQUEST = 'songInfo/SONG_INFO_REQUEST';
92
+ export const SONG_INFO_SET_PREFERRED = 'songInfo/SET_PREFERRED';
93
+ export const SONG_INFO_CLOSE = 'songInfo/SONG_INFO_CLOSE';
94
+ // IPC Messages
95
+ export const REQUEST_SCAN = 'scannerWorker/REQUEST_SCAN';
96
+ export const REQUEST_SCAN_STOP = 'scannerWorker/REQUEST_SCAN_STOP';
97
+ export const SCANNER_WORKER_STATUS = 'scannerWorker/STATUS';
98
+ export const SERVER_WORKER_STATUS = 'serverWorker/STATUS';
99
+ export const SERVER_WORKER_ERROR = 'serverWorker/ERROR';
100
+ export const LIBRARY_MATCH_SONG = 'scannerWorker/LIBRARY_MATCH_SONG';
101
+ export const MEDIA_ADD = 'scannerWorker/MEDIA_ADD';
102
+ export const MEDIA_CLEANUP = 'scannerWorker/MEDIA_CLEANUP';
103
+ export const MEDIA_REMOVE = 'scannerWorker/MEDIA_REMOVE';
104
+ export const MEDIA_UPDATE = 'scannerWorker/MEDIA_UPDATE';
105
+ export const WATCHER_WORKER_EVENT = 'watcherWorker/EVENT';
106
+ export const WATCHER_WORKER_WATCH = 'watcherWorker/WATCH';
107
+ // Same-process messages via EventEmitter
108
+ export const SCANNER_WORKER_EXITED = 'scannerWorker/EXITED';
109
+ export const PREFS_PATHS_CHANGED = 'serverWorker/PREFS_PATHS_CHANGED';
110
+ // Misc
111
+ export const _SUCCESS = '_SUCCESS';
112
+ export const _ERROR = '_ERROR';
113
+ export const REDUX_SLICE_INJECT_NOOP = 'app/REDUX_SLICE_INJECT_NOOP';
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "karaoke-eternal",
3
- "version": "1.0.0",
3
+ "version": "2.0.0-beta.5",
4
4
  "description": "Open karaoke party system",
5
5
  "keywords": [
6
6
  "karaoke",
@@ -14,33 +14,30 @@
14
14
  "webgl"
15
15
  ],
16
16
  "homepage": "https://www.karaoke-eternal.com",
17
- "main": "./server/main.js",
17
+ "type": "module",
18
+ "main": "./build/server/main.js",
18
19
  "engines": {
19
- "node": ">=16.0.0",
20
- "npm": ">=8.0.0"
20
+ "node": ">=24",
21
+ "npm": ">=11"
21
22
  },
22
23
  "scripts": {
23
24
  "lint": "eslint .",
24
25
  "lint:fix": "npm run lint -- --fix",
25
26
  "test": "echo \"Error: no test specified\" && exit 1",
26
- "dev": "NODE_ENV=development nodemon --ignore build --ignore dist --ignore src -- -p3000",
27
- "build": "rimraf build && webpack --config config/webpack.config.js",
28
- "serve": "node server/main.js",
27
+ "dev": "NODE_ENV=development tsx watch server/main.ts -p 3000",
28
+ "build": "npm run build:server ; npm run build:client",
29
+ "build:client": "webpack --config config/webpack.config.js",
30
+ "build:server": "rm -rf build/server ; tsc -p config/tsconfig.server.json --noEmitOnError false ; mkdir -p build/server/lib ; cp -R server/lib/schemas build/server/lib/",
31
+ "serve": "node build/server/main.js",
29
32
  "serve:docs": "hugo serve --source docs -b http://$(hostname) --bind 0.0.0.0",
30
- "server": "npm run serve",
31
- "start": "electron . -p 3000",
32
- "dist": "DEBUG=electron-builder:* electron-builder -c config/electron-builder.config.js",
33
- "install-app-deps": "electron-builder install-app-deps"
33
+ "server": "npm run serve"
34
34
  },
35
35
  "files": [
36
36
  "assets/**",
37
- "build/**",
38
- "server/**",
39
- "shared/**",
40
- "project.config.js"
37
+ "build/**"
41
38
  ],
42
39
  "bin": {
43
- "karaoke-eternal-server": "./server/main.js"
40
+ "karaoke-eternal-server": "build/server/main.js"
44
41
  },
45
42
  "repository": {
46
43
  "type": "git",
@@ -49,96 +46,124 @@
49
46
  "productName": "Karaoke Eternal Server",
50
47
  "author": "RadRoot LLC",
51
48
  "license": "ISC",
49
+ "overrides": {
50
+ "is-generator-function": "1.0.10",
51
+ "get-generator-function": "1.0.10"
52
+ },
52
53
  "dependencies": {
53
- "@babel/runtime": "^7.17.9",
54
- "@jcoreio/async-throttle": "^1.4.3",
55
- "bcrypt": "^5.0.1",
54
+ "@babel/runtime": "^7.28.4",
55
+ "@jcoreio/async-throttle": "^1.7.0",
56
+ "@koa/router": "^13.1.1",
57
+ "bcrypt": "^5.1.1",
56
58
  "ctx-compose": "^3.0.0",
57
- "electron-log": "^4.4.7",
58
- "fs-extra": "^10.1.0",
59
- "jsonwebtoken": "^8.5.1",
60
- "koa": "^2.13.4",
61
- "koa-body": "^5.0.0",
59
+ "electron-log": "^5.4.3",
60
+ "fs-extra": "^11.3.2",
61
+ "json-e": "^4.8.0",
62
+ "json5": "^2.2.3",
63
+ "jsonwebtoken": "^9.0.3",
64
+ "koa": "^2.16.3",
65
+ "koa-body": "^6.0.1",
62
66
  "koa-favicon": "^2.1.0",
63
67
  "koa-logger": "^3.2.1",
64
- "koa-mount": "^4.0.0",
68
+ "koa-mount": "^4.2.0",
65
69
  "koa-range": "^0.3.0",
66
- "koa-router": "^10.1.1",
67
70
  "koa-static": "^5.0.0",
68
- "music-metadata": "^7.12.3",
69
- "rimraf": "^3.0.2",
70
- "socket.io": "^4.5.0",
71
+ "music-metadata": "^11.10.3",
72
+ "socket.io": "^4.8.1",
71
73
  "sqlate": "^2.2.0",
72
- "sqlite": "^4.1.1",
73
- "sqlite3": "^5.0.8",
74
- "vm2": "^3.9.9",
75
- "yargs": "^17.5.0"
74
+ "sqlite": "^5.1.1",
75
+ "sqlite3": "^5.1.7",
76
+ "unzipit": "^1.4.3",
77
+ "yargs": "^18.0.0"
76
78
  },
77
79
  "devDependencies": {
78
- "@babel/core": "^7.17.10",
79
- "@babel/eslint-parser": "^7.17.0",
80
- "@babel/eslint-plugin": "^7.17.7",
81
- "@babel/plugin-proposal-class-properties": "^7.16.7",
82
- "@babel/plugin-proposal-object-rest-spread": "^7.17.3",
83
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
84
- "@babel/plugin-transform-runtime": "^7.17.10",
85
- "@babel/preset-env": "^7.17.10",
86
- "@babel/preset-react": "^7.16.7",
87
- "@pmmmwh/react-refresh-webpack-plugin": "^0.5.6",
88
- "babel-loader": "^8.2.5",
80
+ "@babel/core": "^7.28.5",
81
+ "@babel/eslint-parser": "^7.28.5",
82
+ "@babel/eslint-plugin": "^7.27.1",
83
+ "@babel/plugin-transform-runtime": "^7.28.5",
84
+ "@babel/preset-env": "^7.28.5",
85
+ "@babel/preset-react": "^7.28.5",
86
+ "@babel/preset-typescript": "^7.28.5",
87
+ "@hello-pangea/dnd": "^18.0.1",
88
+ "@pmmmwh/react-refresh-webpack-plugin": "^0.6.2",
89
+ "@reduxjs/toolkit": "^2.11.0",
90
+ "@stylistic/eslint-plugin": "^5.6.1",
91
+ "@types/bcrypt": "^6.0.0",
92
+ "@types/blueimp-load-image": "^5.16.6",
93
+ "@types/fs-extra": "^11.0.4",
94
+ "@types/jsonwebtoken": "^9.0.10",
95
+ "@types/koa__router": "^12.0.5",
96
+ "@types/koa-favicon": "^2.1.4",
97
+ "@types/koa-logger": "^3.1.5",
98
+ "@types/koa-mount": "^4.0.5",
99
+ "@types/koa-range": "^0.3.6",
100
+ "@types/koa-static": "^4.0.4",
101
+ "@types/react": "^19.2.7",
102
+ "@types/react-dom": "^19.2.3",
103
+ "@types/react-highlight-words": "^0.20.0",
104
+ "@types/react-transition-group": "^4.4.12",
105
+ "@types/react-window": "^1.8.8",
106
+ "@types/redux-optimistic-ui": "^0.4.14",
107
+ "@types/webpack-env": "^1.18.8",
108
+ "@types/webpack-hot-middleware": "^2.25.12",
109
+ "@types/yargs": "^17.0.35",
110
+ "@typescript-eslint/eslint-plugin": "^8.18.2",
111
+ "@typescript-eslint/parser": "^8.18.2",
112
+ "babel-loader": "^10.0.0",
89
113
  "blueimp-load-image": "^5.16.0",
90
114
  "butterchurn": "^3.0.0-beta.4",
91
115
  "butterchurn-presets": "^3.0.0-beta.4",
92
116
  "case-sensitive-paths-webpack-plugin": "^2.4.0",
93
- "cdgraphics": "^6.0.0",
94
- "css-loader": "^6.7.1",
95
- "electron": "^18.2.3",
96
- "electron-builder": "^23.0.3",
97
- "eslint": "^8.15.0",
98
- "eslint-config-standard": "^17.0.0",
99
- "eslint-plugin-import": "^2.26.0",
100
- "eslint-plugin-n": "^15.2.0",
101
- "eslint-plugin-promise": "^6.0.0",
102
- "eslint-plugin-react": "^7.29.4",
103
- "eslint-plugin-react-hooks": "^4.5.0",
104
- "fast-fuzzy": "^1.11.1",
117
+ "cdgraphics": "^7.0.0",
118
+ "clsx": "^2.1.1",
119
+ "css-loader": "^7.1.2",
120
+ "eslint": "^9.39.1",
121
+ "eslint-plugin-import": "^2.32.0",
122
+ "eslint-plugin-n": "^17.23.1",
123
+ "eslint-plugin-promise": "^7.2.1",
124
+ "eslint-plugin-react": "^7.37.5",
125
+ "eslint-plugin-react-hooks": "^7.0.1",
126
+ "eslint-plugin-react-refresh": "^0.4.24",
127
+ "fast-fuzzy": "^1.12.0",
105
128
  "file-loader": "^6.2.0",
129
+ "gl-chromakey": "^2.0.0",
130
+ "globals": "^16.5.0",
106
131
  "history": "^5.3.0",
107
- "html-loader": "^3.1.0",
108
- "html-webpack-plugin": "^5.5.0",
132
+ "html-loader": "^5.1.0",
133
+ "html-webpack-plugin": "^5.6.5",
109
134
  "license-webpack-plugin": "^4.0.2",
110
135
  "markdown-loader": "^8.0.0",
111
- "mini-css-extract-plugin": "^2.6.0",
112
- "modern-normalize": "^1.1.0",
113
- "nodemon": "^2.0.16",
136
+ "mini-css-extract-plugin": "^2.9.4",
137
+ "modern-normalize": "^3.0.1",
138
+ "nodemon": "^3.1.11",
114
139
  "prop-types": "^15.8.1",
115
- "rc-slider": "^10.0.0",
116
- "react": "^17.0.2",
117
- "react-beautiful-dnd": "^13.1.0",
118
- "react-dom": "^17.0.2",
119
- "react-flip-toolkit": "^7.0.14",
120
- "react-github-btn": "^1.2.2",
121
- "react-highlight-words": "^0.18.0",
122
- "react-redux": "^8.0.1",
123
- "react-refresh": "^0.13.0",
124
- "react-responsive-modal": "^6.2.0",
125
- "react-router-dom": "^6.3.0",
126
- "react-swipeable": "^7.0.0",
127
- "react-transition-group": "^4.4.2",
128
- "react-window": "^1.8.7",
129
- "redux": "^4.2.0",
140
+ "rc-slider": "^11.1.9",
141
+ "react": "^18.3.1",
142
+ "react-dom": "^18.3.1",
143
+ "react-flip-toolkit": "^7.2.4",
144
+ "react-highlight-words": "^0.21.0",
145
+ "react-qrcode-logo": "^4.0.0",
146
+ "react-redux": "^9.2.0",
147
+ "react-refresh": "^0.18.0",
148
+ "react-router": "^7.10.1",
149
+ "react-swipeable": "^7.0.2",
150
+ "react-transition-group": "^4.4.5",
151
+ "react-window": "^2.2.3",
130
152
  "redux-optimistic-ui": "^3.1.0",
131
153
  "redux-persist": "^6.0.0",
132
154
  "redux-throttle": "^0.1.1",
133
- "redux-thunk": "^2.4.1",
134
- "reselect": "^4.1.5",
135
- "screenfull": "^6.0.1",
136
- "socket.io-client": "^4.5.0",
137
- "use-resize-observer": "^9.0.0",
138
- "webpack": "^5.72.1",
139
- "webpack-cli": "^4.9.2",
140
- "webpack-dev-middleware": "^5.3.1",
141
- "webpack-hot-middleware": "^2.25.1",
155
+ "screenfull": "^6.0.2",
156
+ "socket.io-client": "^4.8.1",
157
+ "tsx": "^4.21.0",
158
+ "typescript": "^5.9.3",
159
+ "typescript-eslint": "^8.48.1",
160
+ "typescript-plugin-css-modules": "^5.2.0",
161
+ "use-long-press": "^3.3.0",
162
+ "use-resize-observer": "^9.1.0",
163
+ "webpack": "^5.103.0",
164
+ "webpack-cli": "^6.0.1",
165
+ "webpack-dev-middleware": "^7.4.5",
166
+ "webpack-hot-middleware": "^2.26.1",
142
167
  "webpack-node-externals": "^3.0.0"
143
168
  }
144
- }
169
+ }