diff --git a/.electron-builder.config.js b/.electron-builder.config.js index 1c90705..8296eab 100644 --- a/.electron-builder.config.js +++ b/.electron-builder.config.js @@ -6,11 +6,13 @@ module.exports = { appId: 'com.qier222.yesplaymusic', productName: 'YesPlayMusic', copyright: 'Copyright Ā© 2022 ${author}', - asar: true, + asar: false, directories: { output: 'release/${version}', buildResources: 'build', }, + npmRebuild: false, + buildDependenciesFromSource: true, files: ['dist'], win: { target: [ @@ -44,7 +46,9 @@ module.exports = { artifactName: '${productName}-${version}-Installer.${ext}', }, files: [ - '**/*', + 'dist/main/**/*', + 'dist/renderer/**/*', + 'node_modules/NeteaseCloudMusicApi', '!**/node_modules/*/{CHANGELOG.md,README.md,README,readme.md,readme}', '!**/node_modules/*/{test,__tests__,tests,powered-test,example,examples}', '!**/node_modules/*.d.ts', diff --git a/.vscode/task.json b/.vscode/task.json index 69dcaa7..105e143 100644 --- a/.vscode/task.json +++ b/.vscode/task.json @@ -6,8 +6,8 @@ "script": "debug", "problemMatcher": [], "label": "npm: debug", - "detail": "cross-env-shell NODE_ENV=debug \"npm run typecheck && node scripts/build.mjs && vite ./packages/renderer\"", + "detail": "cross-env-shell NODE_ENV=debug \"npm run typecheck && node scripts/build.main.mjs && vite ./src/renderer\"", "group": "build" } ] -} \ No newline at end of file +} diff --git a/package.json b/package.json index 12850bf..fb0211c 100644 --- a/package.json +++ b/package.json @@ -8,12 +8,15 @@ "license": "MIT", "author": "qier222 ", "repository": "github:qier222/YesPlayMusic", - "main": "dist/main/index.cjs", + "main": "dist/main/index.js", "scripts": { - "dev": "node scripts/watch.mjs", - "build": "npm run typecheck && node scripts/build.mjs && electron-builder --config .electron-builder.config.js --dir", - "typecheck": "tsc --noEmit --project packages/renderer/tsconfig.json", - "debug": "cross-env-shell NODE_ENV=debug \"npm run typecheck && node scripts/build.mjs && vite ./packages/renderer\"", + "dev": "concurrently -n=vite,main -c=#646cff,#74b1be \"npm run dev:renderer\" \"node scripts/build.main.mjs --watch\"", + "dev:renderer": "vite dev", + "build:main": "node scripts/build.main.mjs", + "build:renderer": "vite build", + "build": "npm run typecheck && npm run build:renderer && npm run build:main && electron-builder --config .electron-builder.config.js --dir", + "typecheck": "tsc --noEmit --project src/renderer/tsconfig.json", + "debug": "cross-env-shell NODE_ENV=debug \"npm run typecheck && node scripts/build.mjs && vite ./src/renderer\"", "eslint": "eslint --ext .ts,.js ./", "prettier": "prettier --write './**/*.{ts,js,tsx,jsx}'" }, @@ -46,13 +49,12 @@ "@typescript-eslint/eslint-plugin": "^5.15.0", "@typescript-eslint/parser": "^5.15.0", "@vitejs/plugin-react": "^1.2.0", - "ahooks": "^3.1.13", - "ansi-styles": "^6.1.0", "autoprefixer": "^10.4.4", "axios": "^0.26.1", "classnames": "^2.3.1", "color.js": "^1.2.0", "colord": "^2.9.2", + "concurrently": "^7.0.0", "cross-env": "^7.0.3", "csstype": "^3.0.11", "dayjs": "^1.11.0", @@ -60,6 +62,7 @@ "electron": "^17.1.2", "electron-builder": "^22.14.13", "electron-devtools-installer": "^3.2.0", + "esbuild": "^0.14.28", "eslint": "^8.11.0", "eslint-plugin-react": "^7.29.4", "eslint-plugin-react-hooks": "^4.3.0", @@ -69,7 +72,10 @@ "js-cookie": "^3.0.1", "lodash-es": "^4.17.21", "md5": "^2.3.0", + "minimist": "^1.2.6", "music-metadata": "^7.12.2", + "ora": "^6.1.0", + "picocolors": "^1.0.0", "postcss": "^8.4.12", "prettier": "2.5.1", "prettier-plugin-tailwindcss": "^0.1.8", @@ -90,6 +96,7 @@ "valtio-persist": "^1.0.2", "vite": "^2.8.6", "vite-plugin-resolve": "^1.8.0", - "vite-plugin-svg-icons": "^2.0.1" + "vite-plugin-svg-icons": "^2.0.1", + "wait-on": "^6.0.1" } } diff --git a/packages/main/vite.config.ts b/packages/main/vite.config.ts deleted file mode 100644 index 278470d..0000000 --- a/packages/main/vite.config.ts +++ /dev/null @@ -1,39 +0,0 @@ -import dotenv from 'dotenv' -import { builtinModules } from 'module' -import path from 'path' -import { visualizer } from 'rollup-plugin-visualizer' -import { defineConfig } from 'vite' -import pkg from '../../package.json' - -dotenv.config({ - path: path.resolve(process.cwd(), '.env'), -}) - -export default defineConfig({ - root: __dirname, - build: { - outDir: '../../dist/main', - emptyOutDir: true, - lib: { - entry: 'index.ts', - formats: ['cjs'], - fileName: () => '[name].cjs', - }, - minify: process.env./* from mode option */ NODE_ENV === 'production', - sourcemap: process.env./* from mode option */ NODE_ENV === 'debug', - rollupOptions: { - external: [ - 'electron', - ...builtinModules, - ...Object.keys(pkg.dependencies || {}), - ], - plugins: [ - visualizer({ - filename: './bundle-stats-main.html', - gzipSize: true, - projectRoot: 'packages/main', - }), - ], - }, - }, -}) diff --git a/packages/preload/index.ts b/packages/preload/index.ts deleted file mode 100644 index ec41276..0000000 --- a/packages/preload/index.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { contextBridge, ipcRenderer } from 'electron' -import fs from 'fs' -import { useLoading } from './loading' -import { domReady } from './utils' - -const { appendLoading, removeLoading } = useLoading() - -;(async () => { - await domReady() - - appendLoading() -})() - -// --------- Expose some API to the Renderer process. --------- -contextBridge.exposeInMainWorld('fs', fs) -contextBridge.exposeInMainWorld('removeLoading', removeLoading) -contextBridge.exposeInMainWorld('ipcRenderer', withPrototype(ipcRenderer)) - -// `exposeInMainWorld` can't detect attributes and methods of `prototype`, manually patching it. -function withPrototype(obj: Record) { - const protos = Object.getPrototypeOf(obj) - - for (const [key, value] of Object.entries(protos)) { - if (Object.prototype.hasOwnProperty.call(obj, key)) continue - - if (typeof value === 'function') { - // Some native APIs, like `NodeJS.EventEmitter['on']`, don't work in the Renderer process. Wrapping them into a function. - obj[key] = function (...args: any) { - return value.call(obj, ...args) - } - } else { - obj[key] = value - } - } - return obj -} diff --git a/packages/preload/loading.ts b/packages/preload/loading.ts deleted file mode 100644 index e4babed..0000000 --- a/packages/preload/loading.ts +++ /dev/null @@ -1,54 +0,0 @@ -/** - * https://tobiasahlin.com/spinkit - * https://connoratherton.com/loaders - * https://projects.lukehaas.me/css-loaders - * https://matejkustec.github.io/SpinThatShit - */ -export function useLoading() { - const className = `loaders-css__square-spin` - const styleContent = ` -@keyframes square-spin { - 25% { transform: perspective(100px) rotateX(180deg) rotateY(0); } - 50% { transform: perspective(100px) rotateX(180deg) rotateY(180deg); } - 75% { transform: perspective(100px) rotateX(0) rotateY(180deg); } - 100% { transform: perspective(100px) rotateX(0) rotateY(0); } -} -.${className} > div { - animation-fill-mode: both; - width: 50px; - height: 50px; - background: #fff; - animation: square-spin 3s 0s cubic-bezier(0.09, 0.57, 0.49, 0.9) infinite; -} -.app-loading-wrap { - position: fixed; - top: 0; - left: 0; - width: 100vw; - height: 100vh; - display: flex; - align-items: center; - justify-content: center; - background: #282c34; - z-index: 9; -} - ` - const oStyle = document.createElement('style') - const oDiv = document.createElement('div') - - oStyle.id = 'app-loading-style' - oStyle.innerHTML = styleContent - oDiv.className = 'app-loading-wrap' - oDiv.innerHTML = `
` - - return { - appendLoading() { - document.head.appendChild(oStyle) - document.body.appendChild(oDiv) - }, - removeLoading() { - document.head.removeChild(oStyle) - document.body.removeChild(oDiv) - }, - } -} diff --git a/packages/preload/utils.ts b/packages/preload/utils.ts deleted file mode 100644 index 7cdda98..0000000 --- a/packages/preload/utils.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** Document ready */ -export const domReady = ( - condition: DocumentReadyState[] = ['complete', 'interactive'] -) => { - return new Promise(resolve => { - if (condition.includes(document.readyState)) { - resolve(true) - } else { - document.addEventListener('readystatechange', () => { - if (condition.includes(document.readyState)) { - resolve(true) - } - }) - } - }) -} diff --git a/packages/preload/vite.config.ts b/packages/preload/vite.config.ts deleted file mode 100644 index 58a821a..0000000 --- a/packages/preload/vite.config.ts +++ /dev/null @@ -1,38 +0,0 @@ -import dotenv from 'dotenv' -import { builtinModules } from 'module' -import path from 'path' -import { defineConfig } from 'vite' -import pkg from '../../package.json' -import { visualizer } from 'rollup-plugin-visualizer' - -dotenv.config({ - path: path.resolve(process.cwd(), '.env'), -}) - -export default defineConfig({ - root: __dirname, - build: { - outDir: '../../dist/preload', - emptyOutDir: true, - lib: { - entry: 'index.ts', - formats: ['cjs'], - fileName: () => '[name].cjs', - }, - minify: process.env./* from mode option */ NODE_ENV === 'production', - rollupOptions: { - external: [ - 'electron', - ...builtinModules, - ...Object.keys(pkg.dependencies || {}), - ], - plugins: [ - visualizer({ - filename: './bundle-stats-preload.html', - gzipSize: true, - projectRoot: 'packages/preload', - }), - ], - }, - }, -}) diff --git a/packages/renderer/vite.config.ts b/packages/renderer/vite.config.ts deleted file mode 100644 index fe4ad61..0000000 --- a/packages/renderer/vite.config.ts +++ /dev/null @@ -1,169 +0,0 @@ -import react from '@vitejs/plugin-react' -import dotenv from 'dotenv' -import { builtinModules } from 'module' -import path, { join } from 'path' -import AutoImport from 'unplugin-auto-import/vite' -import { defineConfig, Plugin } from 'vite' -import resolve from 'vite-plugin-resolve' -import { createSvgIconsPlugin } from 'vite-plugin-svg-icons' -import { visualizer } from 'rollup-plugin-visualizer' - -dotenv.config({ path: path.resolve(process.cwd(), '.env') }) - -/** - * @see https://vitejs.dev/config/ - */ -export default defineConfig({ - mode: process.env.NODE_ENV, - root: __dirname, - plugins: [ - react(), - - /** - * Here you can specify other modules - * 🚧 You have to make sure that your module is in `dependencies` and not in the` devDependencies`, - * which will ensure that the electron-builder can package it correctly - * @example - * { - * 'electron-store': 'const Store = require("electron-store"); export default Store;', - * } - */ - resolveElectron(), - - /** - * @see https://github.com/vbenjs/vite-plugin-svg-icons - */ - createSvgIconsPlugin({ - iconDirs: [ - path.resolve(process.cwd(), 'packages/renderer/src/assets/icons'), - ], - symbolId: 'icon-[name]', - }), - - /** - * @see https://github.com/antfu/unplugin-auto-import - */ - AutoImport({ - dts: './src/auto-imports.d.ts', - imports: [ - 'react', - { classnames: [['default', 'classNames']] }, - { 'react-query': ['useQuery', 'useMutation', 'useInfiniteQuery'] }, - { 'react-router-dom': ['useNavigate', 'useParams'] }, - { 'react-hot-toast': ['toast'] }, - { valtio: ['useSnapshot'] }, - ], - }), - ], - base: './', - build: { - sourcemap: process.env.NODE_ENV === 'debug', - outDir: '../../dist/renderer', - rollupOptions: { - plugins: [ - visualizer({ - filename: './bundle-stats-renderer.html', - gzipSize: true, - projectRoot: 'packages/renderer', - template: 'treemap', - }), - ], - }, - }, - resolve: { - alias: { - '@': join(__dirname, 'src'), - }, - }, - clearScreen: false, - server: { - port: Number(process.env['ELECTRON_WEB_SERVER_PORT'] ?? 42710), - proxy: { - '/netease/': { - target: `http://127.0.0.1:${process.env.ELECTRON_DEV_NETEASE_API_PORT}/netease`, - changeOrigin: true, - rewrite: path => path.replace(/^\/netease/, ''), - }, - '/yesplaymusic/': { - target: `http://127.0.0.1:${process.env.ELECTRON_DEV_NETEASE_API_PORT}/yesplaymusic`, - changeOrigin: true, - rewrite: path => path.replace(/^\/yesplaymusic/, ''), - }, - }, - }, -}) - -/** - * For usage of Electron and NodeJS APIs in the Renderer process - * @see https://github.com/caoxiemeihao/electron-vue-vite/issues/52 - */ -export function resolveElectron( - resolves: Parameters[0] = {} -): Plugin { - const builtins = builtinModules.filter(t => !t.startsWith('_')) - - /** - * @see https://github.com/caoxiemeihao/vite-plugins/tree/main/packages/resolve#readme - */ - return resolve({ - electron: electronExport(), - ...builtinModulesExport(builtins), - ...resolves, - }) - - function electronExport() { - return ` -/** - * For all exported modules see https://www.electronjs.org/docs/latest/api/clipboard -> Renderer Process Modules - */ -const electron = require("electron"); -const { - clipboard, - nativeImage, - shell, - contextBridge, - crashReporter, - ipcRenderer, - webFrame, - desktopCapturer, - deprecate, -} = electron; - -export { - electron as default, - clipboard, - nativeImage, - shell, - contextBridge, - crashReporter, - ipcRenderer, - webFrame, - desktopCapturer, - deprecate, -} -` - } - - function builtinModulesExport(modules: string[]) { - return modules - .map(moduleId => { - const nodeModule = require(moduleId) - const requireModule = `const M = require("${moduleId}");` - const exportDefault = `export default M;` - const exportMembers = - Object.keys(nodeModule) - .map(attr => `export const ${attr} = M.${attr}`) - .join(';\n') + ';' - const nodeModuleCode = ` -${requireModule} - -${exportDefault} - -${exportMembers} -` - - return { [moduleId]: nodeModuleCode } - }) - .reduce((memo, item) => Object.assign(memo, item), {}) - } -} diff --git a/paths.json b/paths.json deleted file mode 100644 index d643910..0000000 --- a/paths.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "baseUrl": "./", - "paths": { - "@/*": ["packages/renderer/src/*"] - } - } -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 19c1e90..dab5f32 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,13 +19,13 @@ specifiers: '@vitejs/plugin-react': ^1.2.0 NeteaseCloudMusicApi: ^4.5.8 ahooks: ^3.1.13 - ansi-styles: ^6.1.0 autoprefixer: ^10.4.4 axios: ^0.26.1 change-case: ^4.1.2 classnames: ^2.3.1 color.js: ^1.2.0 colord: ^2.9.2 + concurrently: ^7.0.0 cookie-parser: ^1.4.6 cross-env: ^7.0.3 csstype: ^3.0.11 @@ -36,6 +36,7 @@ specifiers: electron-devtools-installer: ^3.2.0 electron-log: ^4.4.6 electron-store: ^8.0.1 + esbuild: ^0.14.28 eslint: ^8.11.0 eslint-plugin-react: ^7.29.4 eslint-plugin-react-hooks: ^4.3.0 @@ -46,7 +47,10 @@ specifiers: js-cookie: ^3.0.1 lodash-es: ^4.17.21 md5: ^2.3.0 + minimist: ^1.2.6 music-metadata: ^7.12.2 + ora: ^6.1.0 + picocolors: ^1.0.0 postcss: ^8.4.12 prettier: 2.5.1 prettier-plugin-tailwindcss: ^0.1.8 @@ -69,10 +73,10 @@ specifiers: vite: ^2.8.6 vite-plugin-resolve: ^1.8.0 vite-plugin-svg-icons: ^2.0.1 + wait-on: ^6.0.1 dependencies: '@sentry/node': 6.19.2 - '@sentry/react': 6.19.2_react@17.0.2 '@sentry/tracing': 6.19.2 NeteaseCloudMusicApi: 4.5.8 change-case: 4.1.2 @@ -83,6 +87,7 @@ dependencies: realm: 10.13.0 devDependencies: + '@sentry/react': 6.19.2_react@17.0.2 '@types/cookie-parser': 1.4.2 '@types/express': 4.17.13 '@types/express-fileupload': 1.2.2 @@ -97,12 +102,12 @@ devDependencies: '@typescript-eslint/parser': 5.15.0_eslint@8.11.0+typescript@4.6.2 '@vitejs/plugin-react': 1.2.0 ahooks: 3.1.13_react@17.0.2 - ansi-styles: 6.1.0 autoprefixer: 10.4.4_postcss@8.4.12 axios: 0.26.1 classnames: 2.3.1 color.js: 1.2.0 colord: 2.9.2 + concurrently: 7.0.0 cross-env: 7.0.3 csstype: 3.0.11 dayjs: 1.11.0 @@ -110,6 +115,7 @@ devDependencies: electron: 17.1.2 electron-builder: 22.14.13 electron-devtools-installer: 3.2.0 + esbuild: 0.14.28 eslint: 8.11.0 eslint-plugin-react: 7.29.4_eslint@8.11.0 eslint-plugin-react-hooks: 4.3.0_eslint@8.11.0 @@ -119,7 +125,10 @@ devDependencies: js-cookie: 3.0.1 lodash-es: 4.17.21 md5: 2.3.0 + minimist: 1.2.6 music-metadata: 7.12.2 + ora: 6.1.0 + picocolors: 1.0.0 postcss: 8.4.12 prettier: 2.5.1 prettier-plugin-tailwindcss: 0.1.8_prettier@2.5.1 @@ -135,12 +144,13 @@ devDependencies: sass: 1.49.9 tailwindcss: 3.0.23_autoprefixer@10.4.4 typescript: 4.6.2 - unplugin-auto-import: 0.6.6_rollup@2.70.1+vite@2.8.6 + unplugin-auto-import: 0.6.6_30793d9d6b24634df96d91984952e36a valtio: 1.4.0_react@17.0.2+vite@2.8.6 valtio-persist: 1.0.2_valtio@1.4.0 vite: 2.8.6_sass@1.49.9 vite-plugin-resolve: 1.8.0 vite-plugin-svg-icons: 2.0.1_vite@2.8.6 + wait-on: 6.0.1 packages: @@ -483,6 +493,16 @@ packages: - supports-color dev: true + /@hapi/hoek/9.2.1: + resolution: {integrity: sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==} + dev: true + + /@hapi/topo/5.1.0: + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + dependencies: + '@hapi/hoek': 9.2.1 + dev: true + /@humanwhocodes/config-array/0.9.5: resolution: {integrity: sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==} engines: {node: '>=10.10.0'} @@ -574,7 +594,7 @@ packages: '@sentry/types': 6.19.2 '@sentry/utils': 6.19.2 tslib: 1.14.1 - dev: false + dev: true /@sentry/core/6.19.2: resolution: {integrity: sha512-yu1R3ewBT4udmB4v7sc4biQZ0Z0rfB9+TzB5ZKoCftbe6kqXjFMMaFRYNUF9HicVldKAsBktgkWw3+yfqGkw/A==} @@ -585,7 +605,6 @@ packages: '@sentry/types': 6.19.2 '@sentry/utils': 6.19.2 tslib: 1.14.1 - dev: false /@sentry/hub/6.19.2: resolution: {integrity: sha512-W7KCgNBgdBIMagOxy5J5KQPe+maYxSqfE8a5ncQ3R8BcZDQEKnkW/1FplNbfRLZqA/tL/ndKb7pTPqVtzsbARw==} @@ -594,7 +613,6 @@ packages: '@sentry/types': 6.19.2 '@sentry/utils': 6.19.2 tslib: 1.14.1 - dev: false /@sentry/minimal/6.19.2: resolution: {integrity: sha512-ClwxKm77iDHET7kpzv1JvzDx1er5DoNu+EUjst0kQzARIrXvu9xuZuE2/CnBWycQWqw8o3HoGoKz65uIhsUCzQ==} @@ -603,7 +621,6 @@ packages: '@sentry/hub': 6.19.2 '@sentry/types': 6.19.2 tslib: 1.14.1 - dev: false /@sentry/node/6.19.2: resolution: {integrity: sha512-Z1qREpTpYHxaeWjc1zMUk8ZTAp1WbxMiI2TVNc+a14DVT19Z2xNXb06MiRfeLgNc9lVGdmzR62dPmMBjVgPJYg==} @@ -634,7 +651,7 @@ packages: hoist-non-react-statics: 3.3.2 react: 17.0.2 tslib: 1.14.1 - dev: false + dev: true /@sentry/tracing/6.19.2: resolution: {integrity: sha512-rGoPpP1JIAxdq5bzrww0XuNVr6yn7RN6/wUcaxf6CAvklKvDx+q28WTGlZLGTZ/3un8Rv6i1FZFZOXizgnVnrg==} @@ -650,7 +667,6 @@ packages: /@sentry/types/6.19.2: resolution: {integrity: sha512-XO5qmVBdTs+7PdCz7fAwn1afWxSnRE2KLBFg5/vOdKosPSSHsSHUURSkxiEZc2QsR+JpRB4AeQ26AkIRX38qTg==} engines: {node: '>=6'} - dev: false /@sentry/utils/6.19.2: resolution: {integrity: sha512-2DQQ2OJaxjtyxGq5FmMlqb6hptsqMs2xoBiVRMkTS/rvyTrk1oQdKZ8ePwjtgX3nJ728ni3IXIyXV+vfGp4EBw==} @@ -658,7 +674,20 @@ packages: dependencies: '@sentry/types': 6.19.2 tslib: 1.14.1 - dev: false + + /@sideway/address/4.1.4: + resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==} + dependencies: + '@hapi/hoek': 9.2.1 + dev: true + + /@sideway/formula/3.0.0: + resolution: {integrity: sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==} + dev: true + + /@sideway/pinpoint/2.0.0: + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + dev: true /@sindresorhus/is/0.14.0: resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} @@ -1185,6 +1214,11 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + /ansi-regex/6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: true + /ansi-styles/2.2.1: resolution: {integrity: sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=} engines: {node: '>=0.10.0'} @@ -1203,11 +1237,6 @@ packages: dependencies: color-convert: 2.0.1 - /ansi-styles/6.1.0: - resolution: {integrity: sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==} - engines: {node: '>=12'} - dev: true - /anymatch/3.1.2: resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} engines: {node: '>= 8'} @@ -1435,6 +1464,14 @@ packages: - debug dev: false + /axios/0.25.0: + resolution: {integrity: sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==} + dependencies: + follow-redirects: 1.14.9 + transitivePeerDependencies: + - debug + dev: true + /axios/0.26.1: resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} dependencies: @@ -1503,6 +1540,14 @@ packages: readable-stream: 3.6.0 dev: false + /bl/5.0.0: + resolution: {integrity: sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ==} + dependencies: + buffer: 6.0.3 + inherits: 2.0.4 + readable-stream: 3.6.0 + dev: true + /bluebird-lst/1.0.9: resolution: {integrity: sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==} dependencies: @@ -1667,6 +1712,13 @@ packages: base64-js: 1.5.1 ieee754: 1.2.1 + /buffer/6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + /buffers/0.1.1: resolution: {integrity: sha1-skV5w77U1tOWru5tmorn9Ugqt7s=} engines: {node: '>=0.2.0'} @@ -1831,6 +1883,11 @@ packages: supports-color: 7.2.0 dev: true + /chalk/5.0.1: + resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + /change-case/4.1.2: resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} dependencies: @@ -1915,6 +1972,18 @@ packages: engines: {node: '>=6'} dev: true + /cli-cursor/4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + restore-cursor: 4.0.0 + dev: true + + /cli-spinners/2.6.1: + resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==} + engines: {node: '>=6'} + dev: true + /cli-truncate/2.1.0: resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} engines: {node: '>=8'} @@ -1944,6 +2013,11 @@ packages: mimic-response: 1.0.1 dev: true + /clone/1.0.4: + resolution: {integrity: sha1-2jCcwmPfFZlMaIypAheco8fNfH4=} + engines: {node: '>=0.8'} + dev: true + /clone/2.1.2: resolution: {integrity: sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=} engines: {node: '>=0.8'} @@ -2048,6 +2122,21 @@ packages: readable-stream: 2.3.7 typedarray: 0.0.6 + /concurrently/7.0.0: + resolution: {integrity: sha512-WKM7PUsI8wyXpF80H+zjHP32fsgsHNQfPLw/e70Z5dYkV7hF+rf8q3D+ScWJIEr57CpkO3OWBko6hwhQLPR8Pw==} + engines: {node: ^12.20.0 || ^14.13.0 || >=16.0.0} + hasBin: true + dependencies: + chalk: 4.1.2 + date-fns: 2.28.0 + lodash: 4.17.21 + rxjs: 6.6.7 + spawn-command: 0.0.2-1 + supports-color: 8.1.1 + tree-kill: 1.2.2 + yargs: 16.2.0 + dev: true + /conf/10.1.1: resolution: {integrity: sha512-z2civwq/k8TMYtcn3SVP0Peso4otIWnHtcTuHhQ0zDZDdP4NTxqEc8owfkz4zBsdMYdn/LFcE+ZhbCeqkhtq3Q==} engines: {node: '>=12'} @@ -2262,6 +2351,11 @@ packages: engines: {node: '>= 6'} dev: false + /date-fns/2.28.0: + resolution: {integrity: sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==} + engines: {node: '>=0.11'} + dev: true + /dayjs/1.11.0: resolution: {integrity: sha512-JLC809s6Y948/FuCZPm5IX8rRhQwOiyMb2TfVVQEixG7P8Lm/gt5S7yoQZmC8x1UehI9Pb7sksEt4xx14m+7Ug==} dev: true @@ -2330,6 +2424,12 @@ packages: engines: {node: '>=0.10.0'} dev: false + /defaults/1.0.3: + resolution: {integrity: sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=} + dependencies: + clone: 1.0.4 + dev: true + /defer-to-connect/1.1.3: resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} dev: true @@ -2415,7 +2515,7 @@ packages: dependencies: acorn-node: 1.8.2 defined: 1.0.0 - minimist: 1.2.5 + minimist: 1.2.6 dev: true /dicer/0.3.0: @@ -2658,7 +2758,7 @@ packages: compare-version: 0.1.2 debug: 2.6.9 isbinaryfile: 3.0.3 - minimist: 1.2.5 + minimist: 1.2.6 plist: 3.0.4 dev: true @@ -2798,8 +2898,17 @@ packages: es6-promise: 4.2.8 dev: false - /esbuild-android-arm64/0.14.21: - resolution: {integrity: sha512-Bqgld1TY0wZv8TqiQmVxQFgYzz8ZmyzT7clXBDZFkOOdRybzsnj8AZuK1pwcLVA7Ya6XncHgJqIao7NFd3s0RQ==} + /esbuild-android-64/0.14.28: + resolution: {integrity: sha512-A52C3zq+9tNwCqZ+4kVLBxnk/WnrYM8P2+QNvNE9B6d2OVPs214lp3g6UyO+dKDhUdefhfPCuwkP8j2A/+szNA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.14.28: + resolution: {integrity: sha512-sm0fDEGElZhMC3HLZeECI2juE4aG7uPfMBMqNUhy9CeX399Pz8rC6e78OXMXInGjSdEAwQmCOHmfsP7uv3Q8rA==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -2807,8 +2916,8 @@ packages: dev: true optional: true - /esbuild-darwin-64/0.14.21: - resolution: {integrity: sha512-j+Eg+e13djzyYINVvAbOo2/zvZ2DivuJJTaBrJnJHSD7kUNuGHRkHoSfFjbI80KHkn091w350wdmXDNSgRjfYQ==} + /esbuild-darwin-64/0.14.28: + resolution: {integrity: sha512-nzDd7mQ44FvsFHtOafZdBgn3Li5SMsnMnoz1J2MM37xJmR3wGNTFph88KypjHgWqwbxCI7MXS1U+sN4qDeeW6Q==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -2816,8 +2925,8 @@ packages: dev: true optional: true - /esbuild-darwin-arm64/0.14.21: - resolution: {integrity: sha512-nDNTKWDPI0RuoPj5BhcSB2z5EmZJJAyRtZLIjyXSqSpAyoB8eyAKXl4lB8U2P78Fnh4Lh1le/fmpewXE04JhBQ==} + /esbuild-darwin-arm64/0.14.28: + resolution: {integrity: sha512-XEq/bLR/glsUl+uGrBimQzOVs/CmwI833fXUhP9xrLI3IJ+rKyrZ5IA8u+1crOEf1LoTn8tV+hInmX6rGjbScw==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -2825,8 +2934,8 @@ packages: dev: true optional: true - /esbuild-freebsd-64/0.14.21: - resolution: {integrity: sha512-zIurkCHXhxELiDZtLGiexi8t8onQc2LtuE+S7457H/pP0g0MLRKMrsn/IN4LDkNe6lvBjuoZZi2OfelOHn831g==} + /esbuild-freebsd-64/0.14.28: + resolution: {integrity: sha512-rTKLgUj/HEcPeE5XZ7IZwWpFx7IWMfprN7QRk/TUJE1s1Ipb58esboIesUpjirJz/BwrgHq+FDG9ChAI8dZAtQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -2834,8 +2943,8 @@ packages: dev: true optional: true - /esbuild-freebsd-arm64/0.14.21: - resolution: {integrity: sha512-wdxMmkJfbwcN+q85MpeUEamVZ40FNsBa9mPq8tAszDn8TRT2HoJvVRADPIIBa9SWWwlDChIMjkDKAnS3KS/sPA==} + /esbuild-freebsd-arm64/0.14.28: + resolution: {integrity: sha512-sBffxD1UMOsB7aWMoExmipycjcy3HJGwmqE4GQZUTZvdiH4GhjgUiVdtPyt7kSCdL40JqnWQJ4b1l8Y51oCF4Q==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -2843,8 +2952,8 @@ packages: dev: true optional: true - /esbuild-linux-32/0.14.21: - resolution: {integrity: sha512-fmxvyzOPPh2xiEHojpCeIQP6pXcoKsWbz3ryDDIKLOsk4xp3GbpHIEAWP0xTeuhEbendmvBDVKbAVv3PnODXLg==} + /esbuild-linux-32/0.14.28: + resolution: {integrity: sha512-+Wxidh3fBEQ9kHcCsD4etlBTMb1n6QY2uXv3rFhVn88CY/JP782MhA57/ipLMY4kOLeSKEuFGN4rtjHuhmRMig==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -2852,8 +2961,8 @@ packages: dev: true optional: true - /esbuild-linux-64/0.14.21: - resolution: {integrity: sha512-edZyNOv1ql+kpmlzdqzzDjRQYls+tSyi4QFi+PdBhATJFUqHsnNELWA9vMSzAaInPOEaVUTA5Ml28XFChcy4DA==} + /esbuild-linux-64/0.14.28: + resolution: {integrity: sha512-7+xgsC4LvR6cnzaBdiljNnPDjbkwzahogN+S9uy9AoYw7ZjPnnXc6sjQAVCbqGb7MEgrWdpa6u/Tao79i4lWxg==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -2861,8 +2970,8 @@ packages: dev: true optional: true - /esbuild-linux-arm/0.14.21: - resolution: {integrity: sha512-aSU5pUueK6afqmLQsbU+QcFBT62L+4G9hHMJDHWfxgid6hzhSmfRH9U/f+ymvxsSTr/HFRU4y7ox8ZyhlVl98w==} + /esbuild-linux-arm/0.14.28: + resolution: {integrity: sha512-L5isjmlLbh9E0WVllXiVETbScgMbth/+XkXQii1WwgO1RvLIfaGrVFz8d2n6EH/ImtgYxPYGx+OcvIKQBc91Rg==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -2870,8 +2979,8 @@ packages: dev: true optional: true - /esbuild-linux-arm64/0.14.21: - resolution: {integrity: sha512-t5qxRkq4zdQC0zXpzSB2bTtfLgOvR0C6BXYaRE/6/k8/4SrkZcTZBeNu+xGvwCU4b5dU9ST9pwIWkK6T1grS8g==} + /esbuild-linux-arm64/0.14.28: + resolution: {integrity: sha512-EjRHgwg+kgXABzyoPGPOPg4d5wZqRnZ/ZAxBDzLY+i6DS8OUfTSlZHWIOZzU4XF7125WxRBg9ULbrFJBl+57Eg==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -2879,8 +2988,8 @@ packages: dev: true optional: true - /esbuild-linux-mips64le/0.14.21: - resolution: {integrity: sha512-jLZLQGCNlUsmIHtGqNvBs3zN+7a4D9ckf0JZ+jQTwHdZJ1SgV9mAjbB980OFo66LoY+WeM7t3WEnq3FjI1zw4A==} + /esbuild-linux-mips64le/0.14.28: + resolution: {integrity: sha512-krx9SSg7yfiUKk64EmjefOyiEF6nv2bRE4um/LiTaQ6Y/6FP4UF3/Ou/AxZVyR154uSRq63xejcAsmswXAYRsw==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -2888,8 +2997,8 @@ packages: dev: true optional: true - /esbuild-linux-ppc64le/0.14.21: - resolution: {integrity: sha512-4TWxpK391en2UBUw6GSrukToTDu6lL9vkm3Ll40HrI08WG3qcnJu7bl8e1+GzelDsiw1QmfAY/nNvJ6iaHRpCQ==} + /esbuild-linux-ppc64le/0.14.28: + resolution: {integrity: sha512-LD0Xxu9g+DNuhsEBV5QuVZ4uKVBMup0xPIruLweuAf9/mHXFnaCuNXUBF5t0DxKl7GQ5MSioKtnb92oMo+QXEw==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -2897,8 +3006,8 @@ packages: dev: true optional: true - /esbuild-linux-riscv64/0.14.21: - resolution: {integrity: sha512-fElngqOaOfTsF+u+oetDLHsPG74vB2ZaGZUqmGefAJn3a5z9Z2pNa4WpVbbKgHpaAAy5tWM1m1sbGohj6Ki6+Q==} + /esbuild-linux-riscv64/0.14.28: + resolution: {integrity: sha512-L/DWfRh2P0vxq4Y+qieSNXKGdMg+e9Qe8jkbN2/8XSGYDTPzO2OcAxSujob4qIh7iSl+cknbXV+BvH0YFR0jbg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -2906,8 +3015,8 @@ packages: dev: true optional: true - /esbuild-linux-s390x/0.14.21: - resolution: {integrity: sha512-brleZ6R5fYv0qQ7ZBwenQmP6i9TdvJCB092c/3D3pTLQHBGHJb5zWgKxOeS7bdHzmLy6a6W7GbFk6QKpjyD6QA==} + /esbuild-linux-s390x/0.14.28: + resolution: {integrity: sha512-rrgxmsbmL8QQknWGnAL9bGJRQYLOi2AzXy5OTwfhxnj9eqjo5mSVbJXjgiq5LPUAMQZGdPH5yaNK0obAXS81Zw==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -2915,8 +3024,8 @@ packages: dev: true optional: true - /esbuild-netbsd-64/0.14.21: - resolution: {integrity: sha512-nCEgsLCQ8RoFWVV8pVI+kX66ICwbPP/M9vEa0NJGIEB/Vs5sVGMqkf67oln90XNSkbc0bPBDuo4G6FxlF7PN8g==} + /esbuild-netbsd-64/0.14.28: + resolution: {integrity: sha512-h8wntIyOR8/xMVVM6TvJxxWKh4AjmLK87IPKpuVi8Pq0kyk0RMA+eo4PFGk5j2XK0D7dj8PcSF5NSlP9kN/j0A==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -2924,8 +3033,8 @@ packages: dev: true optional: true - /esbuild-openbsd-64/0.14.21: - resolution: {integrity: sha512-h9zLMyVD0T73MDTVYIb/qUTokwI6EJH9O6wESuTNq6+XpMSr6C5aYZ4fvFKdNELW+Xsod+yDS2hV2JTUAbFrLA==} + /esbuild-openbsd-64/0.14.28: + resolution: {integrity: sha512-HBv18rVapbuDx52/fhZ/c/w6TXyaQAvRxiDDn5Hz/pBcwOs3cdd2WxeIKlWmDoqm2JMx5EVlq4IWgoaRX9mVkw==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -2933,8 +3042,8 @@ packages: dev: true optional: true - /esbuild-sunos-64/0.14.21: - resolution: {integrity: sha512-Kl+7Cot32qd9oqpLdB1tEGXEkjBlijrIxMJ0+vlDFaqsODutif25on0IZlFxEBtL2Gosd4p5WCV1U7UskNQfXA==} + /esbuild-sunos-64/0.14.28: + resolution: {integrity: sha512-zlIxePhZxKYheR2vBCgPVvTixgo/ozOfOMoP6RZj8dxzquU1NgeyhjkcRXucbLCtmoNJ+i4PtWwPZTLuDd3bGg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -2942,8 +3051,8 @@ packages: dev: true optional: true - /esbuild-windows-32/0.14.21: - resolution: {integrity: sha512-V7vnTq67xPBUCk/9UtlolmQ798Ecjdr1ZoI1vcSgw7M82aSSt0eZdP6bh5KAFZU8pxDcx3qoHyWQfHYr11f22A==} + /esbuild-windows-32/0.14.28: + resolution: {integrity: sha512-am9DIJxXlld1BOAY/VlvBQHMUCPL7S3gB/lnXIY3M4ys0gfuRqPf4EvMwZMzYUbFKBY+/Qb8SRgPRRGhwnJ8Kg==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -2951,8 +3060,8 @@ packages: dev: true optional: true - /esbuild-windows-64/0.14.21: - resolution: {integrity: sha512-kDgHjKOHwjfJDCyRGELzVxiP/RBJBTA+wyspf78MTTJQkyPuxH2vChReNdWc+dU2S4gIZFHMdP1Qrl/k22ZmaA==} + /esbuild-windows-64/0.14.28: + resolution: {integrity: sha512-78PhySDnmRZlsPNp/W/5Fim8iivlBQQxfhBFIqR7xwvfDmCFUSByyMKP7LCHgNtb04yNdop8nJJkJaQ8Xnwgiw==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -2960,8 +3069,8 @@ packages: dev: true optional: true - /esbuild-windows-arm64/0.14.21: - resolution: {integrity: sha512-8Sbo0zpzgwWrwjQYLmHF78f7E2xg5Ve63bjB2ng3V2aManilnnTGaliq2snYg+NOX60+hEvJHRdVnuIAHW0lVw==} + /esbuild-windows-arm64/0.14.28: + resolution: {integrity: sha512-VhXGBTo6HELD8zyHXynV6+L2jWx0zkKnGx4TmEdSBK7UVFACtOyfUqpToG0EtnYyRZ0HESBhzPSVpP781ovmvA==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -2969,31 +3078,32 @@ packages: dev: true optional: true - /esbuild/0.14.21: - resolution: {integrity: sha512-7WEoNMBJdLN993dr9h0CpFHPRc3yFZD+EAVY9lg6syJJ12gc5fHq8d75QRExuhnMkT2DaRiIKFThRvDWP+fO+A==} + /esbuild/0.14.28: + resolution: {integrity: sha512-YLNprkCcMVKQ5sekmCKEQ3Obu/L7s6+iij38xNKyBeSmSsTWur4Ky/9zB3XIGT8SCJITG/bZwAR2l7YOAXch4Q==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - esbuild-android-arm64: 0.14.21 - esbuild-darwin-64: 0.14.21 - esbuild-darwin-arm64: 0.14.21 - esbuild-freebsd-64: 0.14.21 - esbuild-freebsd-arm64: 0.14.21 - esbuild-linux-32: 0.14.21 - esbuild-linux-64: 0.14.21 - esbuild-linux-arm: 0.14.21 - esbuild-linux-arm64: 0.14.21 - esbuild-linux-mips64le: 0.14.21 - esbuild-linux-ppc64le: 0.14.21 - esbuild-linux-riscv64: 0.14.21 - esbuild-linux-s390x: 0.14.21 - esbuild-netbsd-64: 0.14.21 - esbuild-openbsd-64: 0.14.21 - esbuild-sunos-64: 0.14.21 - esbuild-windows-32: 0.14.21 - esbuild-windows-64: 0.14.21 - esbuild-windows-arm64: 0.14.21 + esbuild-android-64: 0.14.28 + esbuild-android-arm64: 0.14.28 + esbuild-darwin-64: 0.14.28 + esbuild-darwin-arm64: 0.14.28 + esbuild-freebsd-64: 0.14.28 + esbuild-freebsd-arm64: 0.14.28 + esbuild-linux-32: 0.14.28 + esbuild-linux-64: 0.14.28 + esbuild-linux-arm: 0.14.28 + esbuild-linux-arm64: 0.14.28 + esbuild-linux-mips64le: 0.14.28 + esbuild-linux-ppc64le: 0.14.28 + esbuild-linux-riscv64: 0.14.28 + esbuild-linux-s390x: 0.14.28 + esbuild-netbsd-64: 0.14.28 + esbuild-openbsd-64: 0.14.28 + esbuild-sunos-64: 0.14.28 + esbuild-windows-32: 0.14.28 + esbuild-windows-64: 0.14.28 + esbuild-windows-arm64: 0.14.28 dev: true /escalade/3.1.1: @@ -3911,7 +4021,7 @@ packages: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} dependencies: react-is: 16.13.1 - dev: false + dev: true /hosted-git-info/4.1.0: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} @@ -4277,6 +4387,11 @@ packages: is-path-inside: 3.0.3 dev: true + /is-interactive/2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + dev: true + /is-negative-zero/2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} @@ -4356,6 +4471,11 @@ packages: /is-typedarray/1.0.0: resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=} + /is-unicode-supported/1.2.0: + resolution: {integrity: sha512-wH+U77omcRzevfIG8dDhTS0V9zZyweakfD01FULl97+0EHiJTTZtJqxPSkIIo/SDPv/i07k/C9jAPY+jwLLeUQ==} + engines: {node: '>=12'} + dev: true + /is-weakref/1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: @@ -4427,6 +4547,16 @@ packages: minimatch: 3.1.2 dev: true + /joi/17.6.0: + resolution: {integrity: sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==} + dependencies: + '@hapi/hoek': 9.2.1 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.4 + '@sideway/formula': 3.0.0 + '@sideway/pinpoint': 2.0.0 + dev: true + /js-base64/2.6.4: resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} dev: true @@ -4498,7 +4628,7 @@ packages: resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} hasBin: true dependencies: - minimist: 1.2.5 + minimist: 1.2.6 dev: true /json5/2.2.0: @@ -4506,7 +4636,7 @@ packages: engines: {node: '>=6'} hasBin: true dependencies: - minimist: 1.2.5 + minimist: 1.2.6 dev: true /jsonfile/4.0.0: @@ -4669,6 +4799,14 @@ packages: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true + /log-symbols/5.1.0: + resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} + engines: {node: '>=12'} + dependencies: + chalk: 5.0.1 + is-unicode-supported: 1.2.0 + dev: true + /loose-envify/1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -4839,7 +4977,6 @@ packages: /mimic-fn/2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - dev: false /mimic-fn/3.1.0: resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} @@ -4867,8 +5004,8 @@ packages: dependencies: brace-expansion: 1.1.11 - /minimist/1.2.5: - resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} + /minimist/1.2.6: + resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} /minipass/3.1.6: resolution: {integrity: sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==} @@ -4901,7 +5038,7 @@ packages: resolution: {integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==} hasBin: true dependencies: - minimist: 1.2.5 + minimist: 1.2.6 dev: true /mkdirp/1.0.4: @@ -5195,7 +5332,6 @@ packages: engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 - dev: false /open/8.4.0: resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==} @@ -5230,6 +5366,21 @@ packages: word-wrap: 1.2.3 dev: true + /ora/6.1.0: + resolution: {integrity: sha512-CxEP6845hLK+NHFWZ+LplGO4zfw4QSfxTlqMfvlJ988GoiUeZDMzCvqsZkFHv69sPICmJH1MDxZoQFOKXerAVw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + bl: 5.0.0 + chalk: 5.0.1 + cli-cursor: 4.0.0 + cli-spinners: 2.6.1 + is-interactive: 2.0.0 + is-unicode-supported: 1.2.0 + log-symbols: 5.1.0 + strip-ansi: 7.0.1 + wcwidth: 1.0.1 + dev: true + /p-cancelable/1.1.0: resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} engines: {node: '>=6'} @@ -5546,7 +5697,7 @@ packages: detect-libc: 2.0.1 expand-template: 2.0.3 github-from-package: 0.0.0 - minimist: 1.2.5 + minimist: 1.2.6 mkdirp-classic: 0.5.3 napi-build-utils: 1.0.2 node-abi: 3.8.0 @@ -5715,7 +5866,7 @@ packages: dependencies: deep-extend: 0.6.0 ini: 1.3.8 - minimist: 1.2.5 + minimist: 1.2.6 strip-json-comments: 2.0.1 /react-dom/17.0.2_react@17.0.2: @@ -6060,6 +6211,14 @@ packages: lowercase-keys: 1.0.1 dev: true + /restore-cursor/4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + /ret/0.1.15: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} engines: {node: '>=0.12'} @@ -6131,6 +6290,19 @@ packages: queue-microtask: 1.2.3 dev: true + /rxjs/6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + dependencies: + tslib: 1.14.1 + dev: true + + /rxjs/7.5.5: + resolution: {integrity: sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==} + dependencies: + tslib: 2.3.1 + dev: true + /safe-buffer/5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -6443,6 +6615,10 @@ packages: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} dev: true + /spawn-command/0.0.2-1: + resolution: {integrity: sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=} + dev: true + /split-string/3.1.0: resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} engines: {node: '>=0.10.0'} @@ -6597,6 +6773,13 @@ packages: dependencies: ansi-regex: 5.0.1 + /strip-ansi/7.0.1: + resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: true + /strip-json-comments/2.0.1: resolution: {integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=} engines: {node: '>=0.10.0'} @@ -6652,6 +6835,13 @@ packages: has-flag: 4.0.0 dev: true + /supports-color/8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + dev: true + /supports-preserve-symlinks-flag/1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -6879,6 +7069,11 @@ packages: resolution: {integrity: sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=} dev: true + /tree-kill/1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + dev: true + /truncate-utf8-bytes/1.0.2: resolution: {integrity: sha1-QFkjkJWS1W94pYGENLC3hInKXys=} dependencies: @@ -7024,7 +7219,7 @@ packages: engines: {node: '>= 0.8'} dev: false - /unplugin-auto-import/0.6.6_rollup@2.70.1+vite@2.8.6: + /unplugin-auto-import/0.6.6_30793d9d6b24634df96d91984952e36a: resolution: {integrity: sha512-x3YxAI9ePoumXOakuS5YJlFkSyAkl5vJlaFZSJhSp75nH5gg8LpqQ/0Gz1/CG/JRRv+xaE1CZpEV161AqFGjEg==} engines: {node: '>=14'} peerDependencies: @@ -7038,7 +7233,7 @@ packages: local-pkg: 0.4.1 magic-string: 0.26.1 resolve: 1.22.0 - unplugin: 0.4.0_rollup@2.70.1+vite@2.8.6 + unplugin: 0.4.0_30793d9d6b24634df96d91984952e36a transitivePeerDependencies: - esbuild - rollup @@ -7046,7 +7241,7 @@ packages: - webpack dev: true - /unplugin/0.4.0_rollup@2.70.1+vite@2.8.6: + /unplugin/0.4.0_30793d9d6b24634df96d91984952e36a: resolution: {integrity: sha512-4ScITEmzlz1iZW3tkz+3L1V5k/xMQ6kjgm4lEXKxH0ozd8/OUWfiSA7RMRyrawsvq/t50JIzPpp1UyuSL/AXkA==} peerDependencies: esbuild: '>=0.13' @@ -7064,6 +7259,7 @@ packages: optional: true dependencies: chokidar: 3.5.3 + esbuild: 0.14.28 rollup: 2.70.1 vite: 2.8.6_sass@1.49.9 webpack-virtual-modules: 0.4.3 @@ -7282,7 +7478,7 @@ packages: stylus: optional: true dependencies: - esbuild: 0.14.21 + esbuild: 0.14.28 postcss: 8.4.12 resolve: 1.22.0 rollup: 2.70.1 @@ -7300,6 +7496,26 @@ packages: acorn-walk: 8.2.0 dev: false + /wait-on/6.0.1: + resolution: {integrity: sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==} + engines: {node: '>=10.0.0'} + hasBin: true + dependencies: + axios: 0.25.0 + joi: 17.6.0 + lodash: 4.17.21 + minimist: 1.2.6 + rxjs: 7.5.5 + transitivePeerDependencies: + - debug + dev: true + + /wcwidth/1.0.1: + resolution: {integrity: sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=} + dependencies: + defaults: 1.0.3 + dev: true + /webidl-conversions/3.0.1: resolution: {integrity: sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=} dev: false @@ -7432,6 +7648,11 @@ packages: camelcase: 5.3.1 decamelize: 1.2.0 + /yargs-parser/20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + dev: true + /yargs-parser/21.0.0: resolution: {integrity: sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==} engines: {node: '>=12'} @@ -7452,6 +7673,19 @@ packages: y18n: 4.0.3 yargs-parser: 18.1.3 + /yargs/16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + dev: true + /yargs/17.3.1: resolution: {integrity: sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==} engines: {node: '>=12'} diff --git a/scripts/build.main.mjs b/scripts/build.main.mjs new file mode 100644 index 0000000..b284698 --- /dev/null +++ b/scripts/build.main.mjs @@ -0,0 +1,99 @@ +import { build } from 'esbuild' +import ora from 'ora' +import { builtinModules } from 'module' +import electron from 'electron' +import { spawn } from 'child_process' +import path from 'path' +import waitOn from 'wait-on' +import 'dotenv/config' +import pc from 'picocolors' +import minimist from 'minimist' + +const argv = minimist(process.argv.slice(2)) +const TAG = '[script/build.main.ts]' +const spinner = ora(`${TAG} Main Process Building...`) + +const options = { + entryPoints: ['./src/main/index.ts', './src/main/rendererPreload.ts'], + outdir: './dist/main/', + platform: 'node', + format: 'cjs', + bundle: true, + external: [ + ...builtinModules.filter( + x => !/^_|^(internal|v8|node-inspect)\/|\//.test(x) + ), + 'electron', + 'NeteaseCloudMusicApi', + ], +} + +const runApp = () => { + return spawn( + electron, + [path.resolve(process.cwd(), './dist/main/index.js')], + { + stdio: 'inherit', + env: { + ...process.env, + NODE_ENV: 'development', + }, + } + ) +} + +if (argv.watch) { + waitOn( + { + resources: [ + `http://127.0.0.1:${process.env.ELECTRON_WEB_SERVER_PORT}/index.html`, + ], + timeout: 5000, + }, + err => { + if (err) { + console.log(err) + process.exit(1) + } else { + let child + build({ + ...options, + watch: { + onRebuild(error) { + if (error) { + console.error(pc.red('Rebuild Failed:'), error) + } else { + console.log(pc.green('Rebuild Succeeded')) + if (child) child.kill() + child = runApp() + } + }, + }, + }).then(() => { + console.log(pc.yellow(`⚔ Run App`)) + if (child) child.kill() + child = runApp() + }) + } + } + ) +} else { + spinner.start() + build({ + ...options, + minify: true, + }) + .then(() => { + console.log(TAG, pc.green('Main Process Build Succeeded.')) + }) + .catch(error => { + console.log( + `\n${TAG} ${pc.red('Main Process Build Failed')}\n`, + error, + '\n' + ) + }) + .finally(() => { + spinner.stop() + }) +} diff --git a/scripts/build.mjs b/scripts/build.mjs deleted file mode 100644 index 8e79f72..0000000 --- a/scripts/build.mjs +++ /dev/null @@ -1,8 +0,0 @@ -import { build } from 'vite' - -await build({ - configFile: 'packages/main/vite.config.ts', - mode: process.env.NODE_ENV === 'debug' ? 'debug' : 'production' -}) -await build({ configFile: 'packages/preload/vite.config.ts' }) -await build({ configFile: 'packages/renderer/vite.config.ts' }) diff --git a/scripts/vite-plugin-esm2cjs.ts b/scripts/vite-plugin-esm2cjs.ts deleted file mode 100644 index 0974bee..0000000 --- a/scripts/vite-plugin-esm2cjs.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { builtinModules } from 'module' -import { Plugin, build } from 'vite' -import resolve from 'vite-plugin-resolve' - -export default function esm2cjs(modules: string[]): Plugin { - return resolve( - { - ...modules.reduce( - (memo, moduleId) => - Object.assign(memo, { - async [moduleId](args) { - await build({ - plugins: [ - { - name: 'vite-plugin[node:mod-to-mod]', - enforce: 'pre', - resolveId(source) { - if (source.startsWith('node:')) { - return source.replace('node:', '') - } - }, - }, - ], - build: { - outDir: args.dir, - minify: false, - emptyOutDir: false, - lib: { - entry: require.resolve(moduleId), - formats: ['cjs'], - fileName: () => `${moduleId}.js`, - }, - rollupOptions: { - external: [...builtinModules], - }, - }, - }) - }, - } as Parameters[0]), - {} - ), - }, - { dir: '.vite-plugin-resolve-esm' } - ) -} diff --git a/scripts/watch.mjs b/scripts/watch.mjs deleted file mode 100644 index 9352e86..0000000 --- a/scripts/watch.mjs +++ /dev/null @@ -1,99 +0,0 @@ -import { spawn } from 'child_process' -import { createServer, build } from 'vite' -import electron from 'electron' -import util from 'util' -import styles from 'ansi-styles' - -/** - * @type {(server: import('vite').ViteDevServer) => Promise} - */ -function watchMain(server) { - /** - * @type {import('child_process').ChildProcessWithoutNullStreams | null} - */ - let electronProcess = null - const address = server.httpServer.address() - const env = Object.assign(process.env, { - VITE_DEV_SERVER_HOST: address.address, - VITE_DEV_SERVER_PORT: address.port, - }) - - return build({ - configFile: 'packages/main/vite.config.ts', - mode: 'development', - plugins: [ - { - name: 'electron-main-watcher', - writeBundle() { - electronProcess && electronProcess.kill() - electronProcess = spawn(electron, ['.'], { stdio: 'inherit', env }) - }, - }, - ], - build: { - watch: true, - }, - }) -} - -/** - * @type {(server: import('vite').ViteDevServer) => Promise} - */ -function watchPreload(server) { - return build({ - configFile: 'packages/preload/vite.config.ts', - mode: 'development', - plugins: [ - { - name: 'electron-preload-watcher', - writeBundle() { - server.ws.send({ type: 'full-reload' }) - }, - }, - ], - build: { - watch: true, - }, - }) -} - -// log prefix -function logPrefix(fn) { - const funcs = { - log: console.log.bind(console), - info: console.info.bind(console), - warn: console.warn.bind(console), - error: console.error.bind(console), - debug: (console.debug || console.log).bind(console), - } - const processLogText = (text, prefix) => { - return text.replaceAll('\n', '\n' + prefix) - } - Object.keys(funcs).forEach(function (k) { - console[k] = function () { - const string = typeof fn === 'function' ? fn() : fn - arguments[0] = util.format(string, processLogText(arguments[0], string)) - funcs[k].apply(console, arguments) - } - }) -} - -const color = (hex, text) => { - return `${styles.color.ansi(styles.hexToAnsi(hex))}${text}${ - styles.color.close - }` -} - -// bootstrap -logPrefix(color('#eab308', '[vite] ')) -console.log('building renderer') -const server = await createServer({ - configFile: 'packages/renderer/vite.config.ts', -}) -await server.listen() - -console.log('building preload') -await watchPreload(server) - -console.log('building main') -await watchMain(server) diff --git a/packages/main/cache.ts b/src/main/cache.ts similarity index 100% rename from packages/main/cache.ts rename to src/main/cache.ts diff --git a/packages/main/database.ts b/src/main/database.ts similarity index 72% rename from packages/main/database.ts rename to src/main/database.ts index 58d4d8d..0b5d9d7 100644 --- a/packages/main/database.ts +++ b/src/main/database.ts @@ -1,6 +1,7 @@ import Realm from 'realm' import path from 'path' -import { app } from 'electron' +import { app, ipcMain } from 'electron' +import fs from 'fs' export enum ModelNames { ACCOUNT_DATA = 'AccountData', @@ -43,6 +44,10 @@ const RegularSchemas = [ export const realm = new Realm({ path: path.resolve(app.getPath('userData'), './api_cache/db.realm'), + shouldCompactOnLaunch: (totalSize, usedSize) => { + console.log(totalSize, usedSize) + return true + }, schema: [ ...RegularSchemas, { @@ -96,3 +101,31 @@ export const db = { realm.delete(realm.objectForPrimaryKey(model, key)) }, } + +ipcMain.on('test', () => { + ;[ + ModelNames.USER_PLAYLISTS, + ModelNames.ARTIST_ALBUMS, + ModelNames.PLAYLIST, + ModelNames.ALBUM, + ModelNames.TRACK, + ModelNames.ARTIST, + ModelNames.AUDIO, + ModelNames.ACCOUNT_DATA, + ].forEach(name => { + const data = realm.objects(name) + + fs.writeFile(`./tmp/${name}.json`, JSON.stringify(data), function (err) { + if (err) { + return console.log(err) + } + console.log('The file was saved!') + }) + }) + + // realm.write(() => { + // realm.deleteAll() + // }) + + realm.compact() +}) diff --git a/packages/main/index.ts b/src/main/index.ts similarity index 90% rename from packages/main/index.ts rename to src/main/index.ts index f680eb2..cb53d4f 100644 --- a/packages/main/index.ts +++ b/src/main/index.ts @@ -11,12 +11,12 @@ import { release } from 'os' import path, { join } from 'path' import logger from './logger' import './server' -import './database' +// import './database' const isWindows = process.platform === 'win32' const isMac = process.platform === 'darwin' const isLinux = process.platform === 'linux' -const isDev = !app.isPackaged +const isDev = process.env.NODE_ENV === 'development' // Disable GPU Acceleration for Windows 7 if (release().startsWith('6.1')) app.disableHardwareAcceleration() @@ -51,10 +51,11 @@ let win: BrowserWindow | null = null async function createWindow() { // Create window + const options: BrowserWindowConstructorOptions = { title: 'Main window', webPreferences: { - preload: join(__dirname, '../preload/index.cjs'), + preload: join(__dirname, '../main/rendererPreload.js'), }, width: store.get('window.width'), height: store.get('window.height'), @@ -70,14 +71,12 @@ async function createWindow() { win = new BrowserWindow(options) // Web server - if (app.isPackaged || process.env['DEBUG']) { - win.loadFile(join(__dirname, '../renderer/index.html')) - } else { - const url = `http://${process.env['VITE_DEV_SERVER_HOST']}:${process.env['VITE_DEV_SERVER_PORT']}` - logger.info(`[index] Vite dev server running at: ${url}`) - + if (isDev) { + const url = `http://127.0.0.1:${process.env.ELECTRON_WEB_SERVER_PORT}` win.loadURL(url) win.webContents.openDevTools() + } else { + win.loadFile(join(__dirname, '../renderer/index.html')) } // Make all links open with the browser, not with the application diff --git a/packages/main/logger.ts b/src/main/logger.ts similarity index 71% rename from packages/main/logger.ts rename to src/main/logger.ts index 90ec5ba..065674e 100644 --- a/packages/main/logger.ts +++ b/src/main/logger.ts @@ -1,29 +1,17 @@ -import styles from 'ansi-styles' import { app } from 'electron' import logger from 'electron-log' +import pc from 'picocolors' -const color = (hex: string, text: string) => { - return `${styles.color.ansi(styles.hexToAnsi(hex))}${text}${ - styles.color.close - }` -} - -logger.transports.console.format = `${color( - '38bdf8', - '[main]' -)} {h}:{i}:{s}.{ms}{scope} › {text}` +logger.transports.console.format = `${pc.dim('{h}:{i}:{s}{scope}')} › {text}` logger.transports.file.level = app.isPackaged ? 'info' : 'debug' logger.info( - color( - '335eea', - `\n\nā–ˆā–ˆā•— ā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā•— ā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā•— ā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•— + `\n\nā–ˆā–ˆā•— ā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā•— ā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā•— ā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā•šā–ˆā–ˆā•— ā–ˆā–ˆā•”ā•ā–ˆā–ˆā•”ā•ā•ā•ā•ā•ā–ˆā–ˆā•”ā•ā•ā•ā•ā•ā–ˆā–ˆā•”ā•ā•ā–ˆā–ˆā•—ā–ˆā–ˆā•‘ ā–ˆā–ˆā•”ā•ā•ā–ˆā–ˆā•—ā•šā–ˆā–ˆā•— ā–ˆā–ˆā•”ā•ā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā•‘ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ā–ˆā–ˆā•”ā•ā•ā•ā•ā•ā–ˆā–ˆā•‘ā–ˆā–ˆā•”ā•ā•ā•ā•ā• ā•šā–ˆā–ˆā–ˆā–ˆā•”ā• ā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•”ā•ā–ˆā–ˆā•‘ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•‘ ā•šā–ˆā–ˆā–ˆā–ˆā•”ā• ā–ˆā–ˆā•”ā–ˆā–ˆā–ˆā–ˆā•”ā–ˆā–ˆā•‘ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā•‘ā–ˆā–ˆā•‘ ā•šā–ˆā–ˆā•”ā• ā–ˆā–ˆā•”ā•ā•ā• ā•šā•ā•ā•ā•ā–ˆā–ˆā•‘ā–ˆā–ˆā•”ā•ā•ā•ā• ā–ˆā–ˆā•‘ ā–ˆā–ˆā•”ā•ā•ā–ˆā–ˆā•‘ ā•šā–ˆā–ˆā•”ā• ā–ˆā–ˆā•‘ā•šā–ˆā–ˆā•”ā•ā–ˆā–ˆā•‘ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ā•šā•ā•ā•ā•ā–ˆā–ˆā•‘ā–ˆā–ˆā•‘ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•‘ā–ˆā–ˆā•‘ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ ā•šā•ā• ā–ˆā–ˆā•‘ā•šā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•”ā•ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•‘ā–ˆā–ˆā•‘ā•šā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā•šā•ā• ā•šā•ā•ā•ā•ā•ā•ā•ā•šā•ā•ā•ā•ā•ā•ā•ā•šā•ā• ā•šā•ā•ā•ā•ā•ā•ā•ā•šā•ā• ā•šā•ā• ā•šā•ā• ā•šā•ā• ā•šā•ā• ā•šā•ā•ā•ā•ā•ā• ā•šā•ā•ā•ā•ā•ā•ā•ā•šā•ā• ā•šā•ā•ā•ā•ā•ā•\n` - ) ) export default logger diff --git a/packages/main/preload.ts b/src/main/preload.ts similarity index 100% rename from packages/main/preload.ts rename to src/main/preload.ts diff --git a/src/main/rendererPreload.ts b/src/main/rendererPreload.ts new file mode 100644 index 0000000..274a1bc --- /dev/null +++ b/src/main/rendererPreload.ts @@ -0,0 +1,4 @@ +const { contextBridge, ipcRenderer } = require('electron') + +contextBridge.exposeInMainWorld('ipcRenderer', ipcRenderer) +contextBridge.exposeInMainWorld('isElectron', true) diff --git a/packages/main/sentry.ts b/src/main/sentry.ts similarity index 80% rename from packages/main/sentry.ts rename to src/main/sentry.ts index 28c7a2f..22a542a 100644 --- a/packages/main/sentry.ts +++ b/src/main/sentry.ts @@ -1,11 +1,14 @@ import * as Sentry from '@sentry/node' import * as Tracing from '@sentry/tracing' import pkg from '../../package.json' +import logger from './logger' + +logger.info(`[sentry] init sentry`) Sentry.init({ dsn: 'https://2aaaa67f1c3d4d6baefafa5d58fcf340@o436528.ingest.sentry.io/6274637', release: `yesplaymusic@${pkg.version}`, - environment: import.meta.env.MODE, + // environment: import.meta.env.MODE, // Set tracesSampleRate to 1.0 to capture 100% // of transactions for performance monitoring. diff --git a/packages/main/server.ts b/src/main/server.ts similarity index 80% rename from packages/main/server.ts rename to src/main/server.ts index 5e3eaac..3a109e8 100644 --- a/packages/main/server.ts +++ b/src/main/server.ts @@ -2,12 +2,12 @@ import { pathCase } from 'change-case' import cookieParser from 'cookie-parser' import express, { Request, Response } from 'express' import logger from './logger' -import { - setCache, - getCacheForExpress, - cacheAudio, - getAudioCache, -} from './cache' +// import { +// setCache, +// getCacheForExpress, +// cacheAudio, +// getAudioCache, +// } from './cache' import fileUpload from 'express-fileupload' // eslint-disable-next-line @typescript-eslint/no-var-requires @@ -26,8 +26,8 @@ Object.entries(neteaseApi).forEach(([name, handler]) => { logger.info(`[server] Handling request: ${req.path}`) // Get from cache - const cache = await getCacheForExpress(name, req) - if (cache) return res.json(cache) + // const cache = await getCacheForExpress(name, req) + // if (cache) return res.json(cache) // Request netease api try { @@ -36,7 +36,7 @@ Object.entries(neteaseApi).forEach(([name, handler]) => { cookie: `MUSIC_U=${req.cookies['MUSIC_U']}`, }) - setCache(name, result.body, req.query) + // setCache(name, result.body, req.query) return res.send(result.body) } catch (error) { return res.status(500).send(error) @@ -51,7 +51,7 @@ Object.entries(neteaseApi).forEach(([name, handler]) => { app.get( '/yesplaymusic/audio/:filename', async (req: Request, res: Response) => { - getAudioCache(req.params.filename, res) + // getAudioCache(req.params.filename, res) } ) app.post('/yesplaymusic/audio/:id', async (req: Request, res: Response) => { @@ -72,17 +72,17 @@ app.post('/yesplaymusic/audio/:id', async (req: Request, res: Response) => { } try { - await cacheAudio(req.files.file.data, { - id: id, - source: 'netease', - }) + // await cacheAudio(req.files.file.data, { + // id: id, + // source: 'netease', + // }) res.status(200).send('Audio cached!') } catch (error) { res.status(500).send({ error }) } }) -const port = Number(process.env['ELECTRON_DEV_NETEASE_API_PORT'] ?? 3000) +const port = Number(process.env.ELECTRON_DEV_NETEASE_API_PORT ?? 3000) app.listen(port, () => { logger.info(`[server] API server listening on port ${port}`) }) diff --git a/packages/renderer/src/App.tsx b/src/renderer/App.tsx similarity index 100% rename from packages/renderer/src/App.tsx rename to src/renderer/App.tsx diff --git a/packages/renderer/src/api/album.ts b/src/renderer/api/album.ts similarity index 100% rename from packages/renderer/src/api/album.ts rename to src/renderer/api/album.ts diff --git a/packages/renderer/src/api/artist.ts b/src/renderer/api/artist.ts similarity index 100% rename from packages/renderer/src/api/artist.ts rename to src/renderer/api/artist.ts diff --git a/packages/renderer/src/api/auth.ts b/src/renderer/api/auth.ts similarity index 100% rename from packages/renderer/src/api/auth.ts rename to src/renderer/api/auth.ts diff --git a/packages/renderer/src/api/playlist.ts b/src/renderer/api/playlist.ts similarity index 100% rename from packages/renderer/src/api/playlist.ts rename to src/renderer/api/playlist.ts diff --git a/packages/renderer/src/api/search.ts b/src/renderer/api/search.ts similarity index 100% rename from packages/renderer/src/api/search.ts rename to src/renderer/api/search.ts diff --git a/packages/renderer/src/api/track.ts b/src/renderer/api/track.ts similarity index 100% rename from packages/renderer/src/api/track.ts rename to src/renderer/api/track.ts diff --git a/packages/renderer/src/api/user.ts b/src/renderer/api/user.ts similarity index 100% rename from packages/renderer/src/api/user.ts rename to src/renderer/api/user.ts diff --git a/packages/renderer/src/api/yesplaymusic.ts b/src/renderer/api/yesplaymusic.ts similarity index 100% rename from packages/renderer/src/api/yesplaymusic.ts rename to src/renderer/api/yesplaymusic.ts diff --git a/packages/renderer/src/assets/icons/back.svg b/src/renderer/assets/icons/back.svg similarity index 100% rename from packages/renderer/src/assets/icons/back.svg rename to src/renderer/assets/icons/back.svg diff --git a/packages/renderer/src/assets/icons/dislike.svg b/src/renderer/assets/icons/dislike.svg similarity index 100% rename from packages/renderer/src/assets/icons/dislike.svg rename to src/renderer/assets/icons/dislike.svg diff --git a/packages/renderer/src/assets/icons/dj.svg b/src/renderer/assets/icons/dj.svg similarity index 100% rename from packages/renderer/src/assets/icons/dj.svg rename to src/renderer/assets/icons/dj.svg diff --git a/packages/renderer/src/assets/icons/email.svg b/src/renderer/assets/icons/email.svg similarity index 100% rename from packages/renderer/src/assets/icons/email.svg rename to src/renderer/assets/icons/email.svg diff --git a/packages/renderer/src/assets/icons/explicit.svg b/src/renderer/assets/icons/explicit.svg similarity index 100% rename from packages/renderer/src/assets/icons/explicit.svg rename to src/renderer/assets/icons/explicit.svg diff --git a/packages/renderer/src/assets/icons/eye-off.svg b/src/renderer/assets/icons/eye-off.svg similarity index 100% rename from packages/renderer/src/assets/icons/eye-off.svg rename to src/renderer/assets/icons/eye-off.svg diff --git a/packages/renderer/src/assets/icons/eye.svg b/src/renderer/assets/icons/eye.svg similarity index 100% rename from packages/renderer/src/assets/icons/eye.svg rename to src/renderer/assets/icons/eye.svg diff --git a/packages/renderer/src/assets/icons/fm.svg b/src/renderer/assets/icons/fm.svg similarity index 100% rename from packages/renderer/src/assets/icons/fm.svg rename to src/renderer/assets/icons/fm.svg diff --git a/packages/renderer/src/assets/icons/forward.svg b/src/renderer/assets/icons/forward.svg similarity index 100% rename from packages/renderer/src/assets/icons/forward.svg rename to src/renderer/assets/icons/forward.svg diff --git a/packages/renderer/src/assets/icons/heart-outline.svg b/src/renderer/assets/icons/heart-outline.svg similarity index 100% rename from packages/renderer/src/assets/icons/heart-outline.svg rename to src/renderer/assets/icons/heart-outline.svg diff --git a/packages/renderer/src/assets/icons/heart.svg b/src/renderer/assets/icons/heart.svg similarity index 100% rename from packages/renderer/src/assets/icons/heart.svg rename to src/renderer/assets/icons/heart.svg diff --git a/packages/renderer/src/assets/icons/home.svg b/src/renderer/assets/icons/home.svg similarity index 100% rename from packages/renderer/src/assets/icons/home.svg rename to src/renderer/assets/icons/home.svg diff --git a/packages/renderer/src/assets/icons/lock.svg b/src/renderer/assets/icons/lock.svg similarity index 100% rename from packages/renderer/src/assets/icons/lock.svg rename to src/renderer/assets/icons/lock.svg diff --git a/packages/renderer/src/assets/icons/lyrics.svg b/src/renderer/assets/icons/lyrics.svg similarity index 100% rename from packages/renderer/src/assets/icons/lyrics.svg rename to src/renderer/assets/icons/lyrics.svg diff --git a/packages/renderer/src/assets/icons/more.svg b/src/renderer/assets/icons/more.svg similarity index 100% rename from packages/renderer/src/assets/icons/more.svg rename to src/renderer/assets/icons/more.svg diff --git a/packages/renderer/src/assets/icons/music-library.svg b/src/renderer/assets/icons/music-library.svg similarity index 100% rename from packages/renderer/src/assets/icons/music-library.svg rename to src/renderer/assets/icons/music-library.svg diff --git a/packages/renderer/src/assets/icons/music-note.svg b/src/renderer/assets/icons/music-note.svg similarity index 100% rename from packages/renderer/src/assets/icons/music-note.svg rename to src/renderer/assets/icons/music-note.svg diff --git a/packages/renderer/src/assets/icons/next.svg b/src/renderer/assets/icons/next.svg similarity index 100% rename from packages/renderer/src/assets/icons/next.svg rename to src/renderer/assets/icons/next.svg diff --git a/packages/renderer/src/assets/icons/pause.svg b/src/renderer/assets/icons/pause.svg similarity index 100% rename from packages/renderer/src/assets/icons/pause.svg rename to src/renderer/assets/icons/pause.svg diff --git a/packages/renderer/src/assets/icons/phone.svg b/src/renderer/assets/icons/phone.svg similarity index 100% rename from packages/renderer/src/assets/icons/phone.svg rename to src/renderer/assets/icons/phone.svg diff --git a/packages/renderer/src/assets/icons/play-fill.svg b/src/renderer/assets/icons/play-fill.svg similarity index 100% rename from packages/renderer/src/assets/icons/play-fill.svg rename to src/renderer/assets/icons/play-fill.svg diff --git a/packages/renderer/src/assets/icons/play.svg b/src/renderer/assets/icons/play.svg similarity index 100% rename from packages/renderer/src/assets/icons/play.svg rename to src/renderer/assets/icons/play.svg diff --git a/packages/renderer/src/assets/icons/playlist.svg b/src/renderer/assets/icons/playlist.svg similarity index 100% rename from packages/renderer/src/assets/icons/playlist.svg rename to src/renderer/assets/icons/playlist.svg diff --git a/packages/renderer/src/assets/icons/podcast.svg b/src/renderer/assets/icons/podcast.svg similarity index 100% rename from packages/renderer/src/assets/icons/podcast.svg rename to src/renderer/assets/icons/podcast.svg diff --git a/packages/renderer/src/assets/icons/previous.svg b/src/renderer/assets/icons/previous.svg similarity index 100% rename from packages/renderer/src/assets/icons/previous.svg rename to src/renderer/assets/icons/previous.svg diff --git a/packages/renderer/src/assets/icons/qrcode.svg b/src/renderer/assets/icons/qrcode.svg similarity index 100% rename from packages/renderer/src/assets/icons/qrcode.svg rename to src/renderer/assets/icons/qrcode.svg diff --git a/packages/renderer/src/assets/icons/repeat-1.svg b/src/renderer/assets/icons/repeat-1.svg similarity index 100% rename from packages/renderer/src/assets/icons/repeat-1.svg rename to src/renderer/assets/icons/repeat-1.svg diff --git a/packages/renderer/src/assets/icons/repeat.svg b/src/renderer/assets/icons/repeat.svg similarity index 100% rename from packages/renderer/src/assets/icons/repeat.svg rename to src/renderer/assets/icons/repeat.svg diff --git a/packages/renderer/src/assets/icons/search.svg b/src/renderer/assets/icons/search.svg similarity index 100% rename from packages/renderer/src/assets/icons/search.svg rename to src/renderer/assets/icons/search.svg diff --git a/packages/renderer/src/assets/icons/settings.svg b/src/renderer/assets/icons/settings.svg similarity index 100% rename from packages/renderer/src/assets/icons/settings.svg rename to src/renderer/assets/icons/settings.svg diff --git a/packages/renderer/src/assets/icons/shuffle.svg b/src/renderer/assets/icons/shuffle.svg similarity index 100% rename from packages/renderer/src/assets/icons/shuffle.svg rename to src/renderer/assets/icons/shuffle.svg diff --git a/packages/renderer/src/assets/icons/user.svg b/src/renderer/assets/icons/user.svg similarity index 100% rename from packages/renderer/src/assets/icons/user.svg rename to src/renderer/assets/icons/user.svg diff --git a/packages/renderer/src/assets/icons/volume-half.svg b/src/renderer/assets/icons/volume-half.svg similarity index 100% rename from packages/renderer/src/assets/icons/volume-half.svg rename to src/renderer/assets/icons/volume-half.svg diff --git a/packages/renderer/src/assets/icons/volume-mute.svg b/src/renderer/assets/icons/volume-mute.svg similarity index 100% rename from packages/renderer/src/assets/icons/volume-mute.svg rename to src/renderer/assets/icons/volume-mute.svg diff --git a/packages/renderer/src/assets/icons/volume.svg b/src/renderer/assets/icons/volume.svg similarity index 100% rename from packages/renderer/src/assets/icons/volume.svg rename to src/renderer/assets/icons/volume.svg diff --git a/packages/renderer/src/assets/icons/x.svg b/src/renderer/assets/icons/x.svg similarity index 100% rename from packages/renderer/src/assets/icons/x.svg rename to src/renderer/assets/icons/x.svg diff --git a/packages/renderer/src/auto-imports.d.ts b/src/renderer/auto-imports.d.ts similarity index 100% rename from packages/renderer/src/auto-imports.d.ts rename to src/renderer/auto-imports.d.ts diff --git a/packages/renderer/src/components/ArtistsInline.tsx b/src/renderer/components/ArtistsInline.tsx similarity index 100% rename from packages/renderer/src/components/ArtistsInline.tsx rename to src/renderer/components/ArtistsInline.tsx diff --git a/packages/renderer/src/components/Button.tsx b/src/renderer/components/Button.tsx similarity index 100% rename from packages/renderer/src/components/Button.tsx rename to src/renderer/components/Button.tsx diff --git a/packages/renderer/src/components/Cover.tsx b/src/renderer/components/Cover.tsx similarity index 100% rename from packages/renderer/src/components/Cover.tsx rename to src/renderer/components/Cover.tsx diff --git a/packages/renderer/src/components/CoverRow.tsx b/src/renderer/components/CoverRow.tsx similarity index 100% rename from packages/renderer/src/components/CoverRow.tsx rename to src/renderer/components/CoverRow.tsx diff --git a/packages/renderer/src/components/DailyTracksCard.module.scss b/src/renderer/components/DailyTracksCard.module.scss similarity index 100% rename from packages/renderer/src/components/DailyTracksCard.module.scss rename to src/renderer/components/DailyTracksCard.module.scss diff --git a/packages/renderer/src/components/DailyTracksCard.tsx b/src/renderer/components/DailyTracksCard.tsx similarity index 100% rename from packages/renderer/src/components/DailyTracksCard.tsx rename to src/renderer/components/DailyTracksCard.tsx diff --git a/packages/renderer/src/components/FMCard.tsx b/src/renderer/components/FMCard.tsx similarity index 100% rename from packages/renderer/src/components/FMCard.tsx rename to src/renderer/components/FMCard.tsx diff --git a/packages/renderer/src/components/IconButton.tsx b/src/renderer/components/IconButton.tsx similarity index 100% rename from packages/renderer/src/components/IconButton.tsx rename to src/renderer/components/IconButton.tsx diff --git a/packages/renderer/src/components/Main.tsx b/src/renderer/components/Main.tsx similarity index 100% rename from packages/renderer/src/components/Main.tsx rename to src/renderer/components/Main.tsx diff --git a/packages/renderer/src/components/Player.tsx b/src/renderer/components/Player.tsx similarity index 100% rename from packages/renderer/src/components/Player.tsx rename to src/renderer/components/Player.tsx diff --git a/packages/renderer/src/components/Router.tsx b/src/renderer/components/Router.tsx similarity index 100% rename from packages/renderer/src/components/Router.tsx rename to src/renderer/components/Router.tsx diff --git a/packages/renderer/src/components/Sidebar.tsx b/src/renderer/components/Sidebar.tsx similarity index 100% rename from packages/renderer/src/components/Sidebar.tsx rename to src/renderer/components/Sidebar.tsx diff --git a/packages/renderer/src/components/Skeleton.tsx b/src/renderer/components/Skeleton.tsx similarity index 100% rename from packages/renderer/src/components/Skeleton.tsx rename to src/renderer/components/Skeleton.tsx diff --git a/packages/renderer/src/components/Slider.tsx b/src/renderer/components/Slider.tsx similarity index 100% rename from packages/renderer/src/components/Slider.tsx rename to src/renderer/components/Slider.tsx diff --git a/packages/renderer/src/components/SvgIcon.tsx b/src/renderer/components/SvgIcon.tsx similarity index 100% rename from packages/renderer/src/components/SvgIcon.tsx rename to src/renderer/components/SvgIcon.tsx diff --git a/packages/renderer/src/components/Topbar.tsx b/src/renderer/components/Topbar.tsx similarity index 100% rename from packages/renderer/src/components/Topbar.tsx rename to src/renderer/components/Topbar.tsx diff --git a/packages/renderer/src/components/TracksAlbum.tsx b/src/renderer/components/TracksAlbum.tsx similarity index 100% rename from packages/renderer/src/components/TracksAlbum.tsx rename to src/renderer/components/TracksAlbum.tsx diff --git a/packages/renderer/src/components/TracksGrid.tsx b/src/renderer/components/TracksGrid.tsx similarity index 100% rename from packages/renderer/src/components/TracksGrid.tsx rename to src/renderer/components/TracksGrid.tsx diff --git a/packages/renderer/src/components/TracksList.tsx b/src/renderer/components/TracksList.tsx similarity index 100% rename from packages/renderer/src/components/TracksList.tsx rename to src/renderer/components/TracksList.tsx diff --git a/packages/renderer/src/global.d.ts b/src/renderer/global.d.ts similarity index 62% rename from packages/renderer/src/global.d.ts rename to src/renderer/global.d.ts index bc390d3..78350dd 100644 --- a/packages/renderer/src/global.d.ts +++ b/src/renderer/global.d.ts @@ -3,9 +3,8 @@ export {} declare global { interface Window { // Expose some Api through preload script - fs: typeof import('fs') - ipcRenderer: import('electron').IpcRenderer - removeLoading: () => void + ipcRenderer?: import('electron').IpcRenderer + isElectron?: boolean } } diff --git a/packages/renderer/src/hooks/useAlbum.ts b/src/renderer/hooks/useAlbum.ts similarity index 80% rename from packages/renderer/src/hooks/useAlbum.ts rename to src/renderer/hooks/useAlbum.ts index 7b70ba5..b1d7118 100644 --- a/packages/renderer/src/hooks/useAlbum.ts +++ b/src/renderer/hooks/useAlbum.ts @@ -18,13 +18,13 @@ export default function useAlbum(params: FetchAlbumParams, noCache?: boolean) { { enabled: !!params.id, staleTime: 24 * 60 * 60 * 1000, // 24 hours - placeholderData: (): FetchAlbumResponse => - window.ipcRenderer.sendSync('getApiCacheSync', { - api: 'album', - query: { - id: params.id, - }, - }), + // placeholderData: (): FetchAlbumResponse => + // window.ipcRenderer.sendSync('getApiCacheSync', { + // api: 'album', + // query: { + // id: params.id, + // }, + // }), } ) } diff --git a/packages/renderer/src/hooks/useArtist.ts b/src/renderer/hooks/useArtist.ts similarity index 68% rename from packages/renderer/src/hooks/useArtist.ts rename to src/renderer/hooks/useArtist.ts index d49ef1e..71bd06c 100644 --- a/packages/renderer/src/hooks/useArtist.ts +++ b/src/renderer/hooks/useArtist.ts @@ -12,13 +12,13 @@ export default function useArtist( { enabled: !!params.id && params.id > 0 && !isNaN(Number(params.id)), staleTime: 5 * 60 * 1000, // 5 mins - placeholderData: (): FetchArtistResponse => - window.ipcRenderer.sendSync('getApiCacheSync', { - api: 'artists', - query: { - id: params.id, - }, - }), + // placeholderData: (): FetchArtistResponse => + // window.ipcRenderer.sendSync('getApiCacheSync', { + // api: 'artists', + // query: { + // id: params.id, + // }, + // }), } ) } diff --git a/packages/renderer/src/hooks/useArtistAlbums.ts b/src/renderer/hooks/useArtistAlbums.ts similarity index 68% rename from packages/renderer/src/hooks/useArtistAlbums.ts rename to src/renderer/hooks/useArtistAlbums.ts index 15bf1be..e550157 100644 --- a/packages/renderer/src/hooks/useArtistAlbums.ts +++ b/src/renderer/hooks/useArtistAlbums.ts @@ -15,13 +15,13 @@ export default function useUserAlbums(params: FetchArtistAlbumsParams) { { enabled: !!params.id && params.id !== 0, staleTime: 3600000, - placeholderData: (): FetchArtistAlbumsResponse => - window.ipcRenderer.sendSync('getApiCacheSync', { - api: 'artist/album', - query: { - id: params.id, - }, - }), + // placeholderData: (): FetchArtistAlbumsResponse => + // window.ipcRenderer.sendSync('getApiCacheSync', { + // api: 'artist/album', + // query: { + // id: params.id, + // }, + // }), } ) } diff --git a/packages/renderer/src/hooks/usePlaylist.ts b/src/renderer/hooks/usePlaylist.ts similarity index 78% rename from packages/renderer/src/hooks/usePlaylist.ts rename to src/renderer/hooks/usePlaylist.ts index 83cf3c7..ed14298 100644 --- a/packages/renderer/src/hooks/usePlaylist.ts +++ b/src/renderer/hooks/usePlaylist.ts @@ -17,13 +17,13 @@ export default function usePlaylist( { enabled: !!(params.id && params.id > 0 && !isNaN(Number(params.id))), refetchOnWindowFocus: true, - placeholderData: (): FetchPlaylistResponse | undefined => - window.ipcRenderer.sendSync('getApiCacheSync', { - api: 'playlist/detail', - query: { - id: params.id, - }, - }), + // placeholderData: (): FetchPlaylistResponse | undefined => + // window.ipcRenderer.sendSync('getApiCacheSync', { + // api: 'playlist/detail', + // query: { + // id: params.id, + // }, + // }), } ) } diff --git a/packages/renderer/src/hooks/useScroll.ts b/src/renderer/hooks/useScroll.ts similarity index 100% rename from packages/renderer/src/hooks/useScroll.ts rename to src/renderer/hooks/useScroll.ts diff --git a/packages/renderer/src/hooks/useTracks.ts b/src/renderer/hooks/useTracks.ts similarity index 81% rename from packages/renderer/src/hooks/useTracks.ts rename to src/renderer/hooks/useTracks.ts index c5fee77..46d7ca2 100644 --- a/packages/renderer/src/hooks/useTracks.ts +++ b/src/renderer/hooks/useTracks.ts @@ -16,13 +16,13 @@ export default function useTracks(params: FetchTracksParams) { enabled: params.ids.length !== 0, refetchInterval: false, staleTime: Infinity, - initialData: (): FetchTracksResponse | undefined => - window.ipcRenderer.sendSync('getApiCacheSync', { - api: 'song/detail', - query: { - ids: params.ids.join(','), - }, - }), + // initialData: (): FetchTracksResponse | undefined => + // window.ipcRenderer.sendSync('getApiCacheSync', { + // api: 'song/detail', + // query: { + // ids: params.ids.join(','), + // }, + // }), } ) } diff --git a/packages/renderer/src/hooks/useTracksInfinite.ts b/src/renderer/hooks/useTracksInfinite.ts similarity index 100% rename from packages/renderer/src/hooks/useTracksInfinite.ts rename to src/renderer/hooks/useTracksInfinite.ts diff --git a/packages/renderer/src/hooks/useUser.ts b/src/renderer/hooks/useUser.ts similarity index 60% rename from packages/renderer/src/hooks/useUser.ts rename to src/renderer/hooks/useUser.ts index c07138d..1c33e5e 100644 --- a/packages/renderer/src/hooks/useUser.ts +++ b/src/renderer/hooks/useUser.ts @@ -4,9 +4,9 @@ import { UserApiNames } from '@/api/user' export default function useUser() { return useQuery(UserApiNames.FETCH_USER_ACCOUNT, fetchUserAccount, { refetchOnWindowFocus: true, - placeholderData: (): fetchUserAccountResponse | undefined => - window.ipcRenderer.sendSync('getApiCacheSync', { - api: 'user/account', - }), + // placeholderData: (): fetchUserAccountResponse | undefined => + // window.ipcRenderer.sendSync('getApiCacheSync', { + // api: 'user/account', + // }), }) } diff --git a/packages/renderer/src/hooks/useUserLikedSongsIDs.ts b/src/renderer/hooks/useUserLikedSongsIDs.ts similarity index 65% rename from packages/renderer/src/hooks/useUserLikedSongsIDs.ts rename to src/renderer/hooks/useUserLikedSongsIDs.ts index 479bf09..1af5a59 100644 --- a/packages/renderer/src/hooks/useUserLikedSongsIDs.ts +++ b/src/renderer/hooks/useUserLikedSongsIDs.ts @@ -13,13 +13,13 @@ export default function useUserLikedSongsIDs( { enabled: !!(params.uid && params.uid !== 0), refetchOnWindowFocus: true, - placeholderData: (): FetchUserLikedSongsIDsResponse | undefined => - window.ipcRenderer.sendSync('getApiCacheSync', { - api: 'likelist', - query: { - uid: params.uid, - }, - }), + // placeholderData: (): FetchUserLikedSongsIDsResponse | undefined => + // window.ipcRenderer.sendSync('getApiCacheSync', { + // api: 'likelist', + // query: { + // uid: params.uid, + // }, + // }), } ) } diff --git a/packages/renderer/src/hooks/useUserPlaylists.ts b/src/renderer/hooks/useUserPlaylists.ts similarity index 68% rename from packages/renderer/src/hooks/useUserPlaylists.ts rename to src/renderer/hooks/useUserPlaylists.ts index 1a60e6e..2e24fbb 100644 --- a/packages/renderer/src/hooks/useUserPlaylists.ts +++ b/src/renderer/hooks/useUserPlaylists.ts @@ -17,13 +17,13 @@ export default function useUserPlaylists(params: FetchUserPlaylistsParams) { params.uid !== 0 && params.offset !== undefined ), - placeholderData: (): FetchUserPlaylistsResponse => - window.ipcRenderer.sendSync('getApiCacheSync', { - api: 'user/playlist', - query: { - uid: params.uid, - }, - }), + // placeholderData: (): FetchUserPlaylistsResponse => + // window.ipcRenderer.sendSync('getApiCacheSync', { + // api: 'user/playlist', + // query: { + // uid: params.uid, + // }, + // }), } ) } diff --git a/packages/renderer/index.html b/src/renderer/index.html similarity index 88% rename from packages/renderer/index.html rename to src/renderer/index.html index 185f862..8b25d39 100644 --- a/packages/renderer/index.html +++ b/src/renderer/index.html @@ -11,7 +11,7 @@
- + diff --git a/packages/renderer/src/interface.d.ts b/src/renderer/interface.d.ts similarity index 100% rename from packages/renderer/src/interface.d.ts rename to src/renderer/interface.d.ts diff --git a/packages/renderer/src/main.tsx b/src/renderer/main.tsx similarity index 67% rename from packages/renderer/src/main.tsx rename to src/renderer/main.tsx index a30606e..2548ff8 100644 --- a/packages/renderer/src/main.tsx +++ b/src/renderer/main.tsx @@ -6,13 +6,13 @@ import { BrowserTracing } from '@sentry/tracing' import 'virtual:svg-icons-register' import '@/styles/global.scss' import App from './App' -import pkg from '../../../package.json' +import pkg from '../../package.json' Sentry.init({ dsn: 'https://7cc7879b42ba4bed9f66fb6752558475@o436528.ingest.sentry.io/6274630', integrations: [new BrowserTracing()], release: `yesplaymusic@${pkg.version}`, - environment: import.meta.env.MODE, + // environment: import.meta.env.MODE, // Set tracesSampleRate to 1.0 to capture 100% // of transactions for performance monitoring. @@ -26,14 +26,5 @@ render( , - document.getElementById('root'), - window.removeLoading + document.getElementById('root') ) - -console.log('fs', window.fs) -console.log('ipcRenderer', window.ipcRenderer) - -// Usage of ipcRenderer.on -window.ipcRenderer.on('main-process-message', (_event, ...args) => { - console.log('[Receive Main-process message]:', ...args) -}) diff --git a/packages/renderer/src/pages/Album.tsx b/src/renderer/pages/Album.tsx similarity index 100% rename from packages/renderer/src/pages/Album.tsx rename to src/renderer/pages/Album.tsx diff --git a/packages/renderer/src/pages/Artist.tsx b/src/renderer/pages/Artist.tsx similarity index 100% rename from packages/renderer/src/pages/Artist.tsx rename to src/renderer/pages/Artist.tsx diff --git a/packages/renderer/src/pages/Home.tsx b/src/renderer/pages/Home.tsx similarity index 91% rename from packages/renderer/src/pages/Home.tsx rename to src/renderer/pages/Home.tsx index 0ea958b..c9435a6 100644 --- a/packages/renderer/src/pages/Home.tsx +++ b/src/renderer/pages/Home.tsx @@ -17,8 +17,8 @@ export default function Home() { return fetchRecommendedPlaylists({}) }, { - placeholderData: () => - window.ipcRenderer.sendSync('getApiCacheSync', { api: 'personalized' }), + // placeholderData: () => + // window.ipcRenderer.sendSync('getApiCacheSync', { api: 'personalized' }), } ) diff --git a/packages/renderer/src/pages/Login.tsx b/src/renderer/pages/Login.tsx similarity index 100% rename from packages/renderer/src/pages/Login.tsx rename to src/renderer/pages/Login.tsx diff --git a/packages/renderer/src/pages/Playlist.tsx b/src/renderer/pages/Playlist.tsx similarity index 100% rename from packages/renderer/src/pages/Playlist.tsx rename to src/renderer/pages/Playlist.tsx diff --git a/packages/renderer/src/pages/Search/Search.tsx b/src/renderer/pages/Search/Search.tsx similarity index 100% rename from packages/renderer/src/pages/Search/Search.tsx rename to src/renderer/pages/Search/Search.tsx diff --git a/packages/renderer/src/pages/Search/index.ts b/src/renderer/pages/Search/index.ts similarity index 100% rename from packages/renderer/src/pages/Search/index.ts rename to src/renderer/pages/Search/index.ts diff --git a/packages/renderer/public/fonts/Barlow-Black.ttf b/src/renderer/public/fonts/Barlow-Black.ttf similarity index 100% rename from packages/renderer/public/fonts/Barlow-Black.ttf rename to src/renderer/public/fonts/Barlow-Black.ttf diff --git a/packages/renderer/public/fonts/Barlow-Black.woff2 b/src/renderer/public/fonts/Barlow-Black.woff2 similarity index 100% rename from packages/renderer/public/fonts/Barlow-Black.woff2 rename to src/renderer/public/fonts/Barlow-Black.woff2 diff --git a/packages/renderer/public/fonts/Barlow-Bold.ttf b/src/renderer/public/fonts/Barlow-Bold.ttf similarity index 100% rename from packages/renderer/public/fonts/Barlow-Bold.ttf rename to src/renderer/public/fonts/Barlow-Bold.ttf diff --git a/packages/renderer/public/fonts/Barlow-Bold.woff2 b/src/renderer/public/fonts/Barlow-Bold.woff2 similarity index 100% rename from packages/renderer/public/fonts/Barlow-Bold.woff2 rename to src/renderer/public/fonts/Barlow-Bold.woff2 diff --git a/packages/renderer/public/fonts/Barlow-ExtraBold.ttf b/src/renderer/public/fonts/Barlow-ExtraBold.ttf similarity index 100% rename from packages/renderer/public/fonts/Barlow-ExtraBold.ttf rename to src/renderer/public/fonts/Barlow-ExtraBold.ttf diff --git a/packages/renderer/public/fonts/Barlow-ExtraBold.woff2 b/src/renderer/public/fonts/Barlow-ExtraBold.woff2 similarity index 100% rename from packages/renderer/public/fonts/Barlow-ExtraBold.woff2 rename to src/renderer/public/fonts/Barlow-ExtraBold.woff2 diff --git a/packages/renderer/public/fonts/Barlow-Medium.ttf b/src/renderer/public/fonts/Barlow-Medium.ttf similarity index 100% rename from packages/renderer/public/fonts/Barlow-Medium.ttf rename to src/renderer/public/fonts/Barlow-Medium.ttf diff --git a/packages/renderer/public/fonts/Barlow-Medium.woff2 b/src/renderer/public/fonts/Barlow-Medium.woff2 similarity index 100% rename from packages/renderer/public/fonts/Barlow-Medium.woff2 rename to src/renderer/public/fonts/Barlow-Medium.woff2 diff --git a/packages/renderer/public/fonts/Barlow-Regular.ttf b/src/renderer/public/fonts/Barlow-Regular.ttf similarity index 100% rename from packages/renderer/public/fonts/Barlow-Regular.ttf rename to src/renderer/public/fonts/Barlow-Regular.ttf diff --git a/packages/renderer/public/fonts/Barlow-Regular.woff2 b/src/renderer/public/fonts/Barlow-Regular.woff2 similarity index 100% rename from packages/renderer/public/fonts/Barlow-Regular.woff2 rename to src/renderer/public/fonts/Barlow-Regular.woff2 diff --git a/packages/renderer/public/fonts/Barlow-SemiBold.ttf b/src/renderer/public/fonts/Barlow-SemiBold.ttf similarity index 100% rename from packages/renderer/public/fonts/Barlow-SemiBold.ttf rename to src/renderer/public/fonts/Barlow-SemiBold.ttf diff --git a/packages/renderer/public/fonts/Barlow-SemiBold.woff2 b/src/renderer/public/fonts/Barlow-SemiBold.woff2 similarity index 100% rename from packages/renderer/public/fonts/Barlow-SemiBold.woff2 rename to src/renderer/public/fonts/Barlow-SemiBold.woff2 diff --git a/packages/renderer/public/fonts/Manrope-Bold.ttf b/src/renderer/public/fonts/Manrope-Bold.ttf similarity index 100% rename from packages/renderer/public/fonts/Manrope-Bold.ttf rename to src/renderer/public/fonts/Manrope-Bold.ttf diff --git a/packages/renderer/public/fonts/Manrope-ExtraBold.ttf b/src/renderer/public/fonts/Manrope-ExtraBold.ttf similarity index 100% rename from packages/renderer/public/fonts/Manrope-ExtraBold.ttf rename to src/renderer/public/fonts/Manrope-ExtraBold.ttf diff --git a/packages/renderer/public/fonts/Manrope-ExtraLight.ttf b/src/renderer/public/fonts/Manrope-ExtraLight.ttf similarity index 100% rename from packages/renderer/public/fonts/Manrope-ExtraLight.ttf rename to src/renderer/public/fonts/Manrope-ExtraLight.ttf diff --git a/packages/renderer/public/fonts/Manrope-Light.ttf b/src/renderer/public/fonts/Manrope-Light.ttf similarity index 100% rename from packages/renderer/public/fonts/Manrope-Light.ttf rename to src/renderer/public/fonts/Manrope-Light.ttf diff --git a/packages/renderer/public/fonts/Manrope-Medium.ttf b/src/renderer/public/fonts/Manrope-Medium.ttf similarity index 100% rename from packages/renderer/public/fonts/Manrope-Medium.ttf rename to src/renderer/public/fonts/Manrope-Medium.ttf diff --git a/packages/renderer/public/fonts/Manrope-Regular.ttf b/src/renderer/public/fonts/Manrope-Regular.ttf similarity index 100% rename from packages/renderer/public/fonts/Manrope-Regular.ttf rename to src/renderer/public/fonts/Manrope-Regular.ttf diff --git a/packages/renderer/public/fonts/Manrope-SemiBold.ttf b/src/renderer/public/fonts/Manrope-SemiBold.ttf similarity index 100% rename from packages/renderer/public/fonts/Manrope-SemiBold.ttf rename to src/renderer/public/fonts/Manrope-SemiBold.ttf diff --git a/packages/renderer/public/fonts/PlusJakartaSans-Bold.woff2 b/src/renderer/public/fonts/PlusJakartaSans-Bold.woff2 similarity index 100% rename from packages/renderer/public/fonts/PlusJakartaSans-Bold.woff2 rename to src/renderer/public/fonts/PlusJakartaSans-Bold.woff2 diff --git a/packages/renderer/public/fonts/PlusJakartaSans-BoldItalic.woff2 b/src/renderer/public/fonts/PlusJakartaSans-BoldItalic.woff2 similarity index 100% rename from packages/renderer/public/fonts/PlusJakartaSans-BoldItalic.woff2 rename to src/renderer/public/fonts/PlusJakartaSans-BoldItalic.woff2 diff --git a/packages/renderer/public/fonts/PlusJakartaSans-ExtraBold.woff2 b/src/renderer/public/fonts/PlusJakartaSans-ExtraBold.woff2 similarity index 100% rename from packages/renderer/public/fonts/PlusJakartaSans-ExtraBold.woff2 rename to src/renderer/public/fonts/PlusJakartaSans-ExtraBold.woff2 diff --git a/packages/renderer/public/fonts/PlusJakartaSans-ExtraBoldItalic.woff2 b/src/renderer/public/fonts/PlusJakartaSans-ExtraBoldItalic.woff2 similarity index 100% rename from packages/renderer/public/fonts/PlusJakartaSans-ExtraBoldItalic.woff2 rename to src/renderer/public/fonts/PlusJakartaSans-ExtraBoldItalic.woff2 diff --git a/packages/renderer/public/fonts/PlusJakartaSans-ExtraLight.woff2 b/src/renderer/public/fonts/PlusJakartaSans-ExtraLight.woff2 similarity index 100% rename from packages/renderer/public/fonts/PlusJakartaSans-ExtraLight.woff2 rename to src/renderer/public/fonts/PlusJakartaSans-ExtraLight.woff2 diff --git a/packages/renderer/public/fonts/PlusJakartaSans-ExtraLightItalic.woff2 b/src/renderer/public/fonts/PlusJakartaSans-ExtraLightItalic.woff2 similarity index 100% rename from packages/renderer/public/fonts/PlusJakartaSans-ExtraLightItalic.woff2 rename to src/renderer/public/fonts/PlusJakartaSans-ExtraLightItalic.woff2 diff --git a/packages/renderer/public/fonts/PlusJakartaSans-Italic.woff2 b/src/renderer/public/fonts/PlusJakartaSans-Italic.woff2 similarity index 100% rename from packages/renderer/public/fonts/PlusJakartaSans-Italic.woff2 rename to src/renderer/public/fonts/PlusJakartaSans-Italic.woff2 diff --git a/packages/renderer/public/fonts/PlusJakartaSans-Light.woff2 b/src/renderer/public/fonts/PlusJakartaSans-Light.woff2 similarity index 100% rename from packages/renderer/public/fonts/PlusJakartaSans-Light.woff2 rename to src/renderer/public/fonts/PlusJakartaSans-Light.woff2 diff --git a/packages/renderer/public/fonts/PlusJakartaSans-LightItalic.woff2 b/src/renderer/public/fonts/PlusJakartaSans-LightItalic.woff2 similarity index 100% rename from packages/renderer/public/fonts/PlusJakartaSans-LightItalic.woff2 rename to src/renderer/public/fonts/PlusJakartaSans-LightItalic.woff2 diff --git a/packages/renderer/public/fonts/PlusJakartaSans-Medium.woff2 b/src/renderer/public/fonts/PlusJakartaSans-Medium.woff2 similarity index 100% rename from packages/renderer/public/fonts/PlusJakartaSans-Medium.woff2 rename to src/renderer/public/fonts/PlusJakartaSans-Medium.woff2 diff --git a/packages/renderer/public/fonts/PlusJakartaSans-MediumItalic.woff2 b/src/renderer/public/fonts/PlusJakartaSans-MediumItalic.woff2 similarity index 100% rename from packages/renderer/public/fonts/PlusJakartaSans-MediumItalic.woff2 rename to src/renderer/public/fonts/PlusJakartaSans-MediumItalic.woff2 diff --git a/packages/renderer/public/fonts/PlusJakartaSans-Regular.woff2 b/src/renderer/public/fonts/PlusJakartaSans-Regular.woff2 similarity index 100% rename from packages/renderer/public/fonts/PlusJakartaSans-Regular.woff2 rename to src/renderer/public/fonts/PlusJakartaSans-Regular.woff2 diff --git a/packages/renderer/src/store.ts b/src/renderer/store.ts similarity index 100% rename from packages/renderer/src/store.ts rename to src/renderer/store.ts diff --git a/packages/renderer/src/styles/global.scss b/src/renderer/styles/global.scss similarity index 100% rename from packages/renderer/src/styles/global.scss rename to src/renderer/styles/global.scss diff --git a/packages/renderer/tsconfig.json b/src/renderer/tsconfig.json similarity index 78% rename from packages/renderer/tsconfig.json rename to src/renderer/tsconfig.json index 6c79141..a245b51 100644 --- a/packages/renderer/tsconfig.json +++ b/src/renderer/tsconfig.json @@ -1,5 +1,4 @@ { - "extends": "../../paths.json", "compilerOptions": { "target": "ESNext", "useDefineForClassFields": true, @@ -15,7 +14,11 @@ "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, - "jsx": "react-jsx" + "jsx": "react-jsx", + "baseUrl": "./", + "paths": { + "@/*": ["*"] + } }, - "include": ["src"] + "include": ["./**/*.ts", "./**/*.tsx"] } diff --git a/packages/renderer/src/utils/common.ts b/src/renderer/utils/common.ts similarity index 100% rename from packages/renderer/src/utils/common.ts rename to src/renderer/utils/common.ts diff --git a/packages/renderer/src/utils/cookie.ts b/src/renderer/utils/cookie.ts similarity index 100% rename from packages/renderer/src/utils/cookie.ts rename to src/renderer/utils/cookie.ts diff --git a/packages/renderer/src/utils/player.ts b/src/renderer/utils/player.ts similarity index 100% rename from packages/renderer/src/utils/player.ts rename to src/renderer/utils/player.ts diff --git a/packages/renderer/src/utils/reactQueryClient.ts b/src/renderer/utils/reactQueryClient.ts similarity index 100% rename from packages/renderer/src/utils/reactQueryClient.ts rename to src/renderer/utils/reactQueryClient.ts diff --git a/packages/renderer/src/utils/request.ts b/src/renderer/utils/request.ts similarity index 100% rename from packages/renderer/src/utils/request.ts rename to src/renderer/utils/request.ts diff --git a/packages/renderer/src/vite-env.d.ts b/src/renderer/vite-env.d.ts similarity index 100% rename from packages/renderer/src/vite-env.d.ts rename to src/renderer/vite-env.d.ts diff --git a/tailwind.config.js b/tailwind.config.js index dcc4d56..9cb771c 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -3,25 +3,13 @@ const colors = require('tailwindcss/colors') module.exports = { content: [ - './packages/renderer/index.html', - './packages/renderer/src/**/*.{vue,js,ts,jsx,tsx}', + './src/renderer/index.html', + './src/renderer/**/*.{vue,js,ts,jsx,tsx}', ], darkMode: 'media', theme: { extend: { colors: { - // brand: { - // 50: '#f5f7fe', - // 100: '#ebeffd', - // 200: '#ccd7fa', - // 300: '#adbff7', - // 400: '#708ef0', - // 500: '#335eea', - // 600: '#2e55d3', - // 700: '#2647b0', - // 800: '#1f388c', - // 900: '#192e73', - // }, brand: colors.blue, gray: colors.neutral, }, diff --git a/tsconfig.json b/tsconfig.json index a2f0e6f..1d1f208 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,4 @@ { - "extends": "./paths.json", "compilerOptions": { "target": "ESNext", "module": "ESNext", @@ -10,7 +9,11 @@ "moduleResolution": "Node", "resolveJsonModule": true, "strict": true, - "jsx": "react-jsx" + "jsx": "react-jsx", + "baseUrl": "./", + "paths": { + "@/*": ["src/renderer/*"] + } }, "exclude": ["node_modules", "./dist"] } diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..2e92917 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,80 @@ +import react from '@vitejs/plugin-react' +import dotenv from 'dotenv' +import path, { join } from 'path' +import AutoImport from 'unplugin-auto-import/vite' +import { defineConfig } from 'vite' +import { createSvgIconsPlugin } from 'vite-plugin-svg-icons' +import { visualizer } from 'rollup-plugin-visualizer' + +dotenv.config({ path: path.resolve(process.cwd(), '.env') }) + +/** + * @see https://vitejs.dev/config/ + */ +export default defineConfig({ + mode: process.env.NODE_ENV, + root: './src/renderer', + plugins: [ + react(), + + /** + * @see https://github.com/vbenjs/vite-plugin-svg-icons + */ + createSvgIconsPlugin({ + iconDirs: [path.resolve(process.cwd(), 'src/renderer/assets/icons')], + symbolId: 'icon-[name]', + }), + + /** + * @see https://github.com/antfu/unplugin-auto-import + */ + AutoImport({ + dts: 'auto-imports.d.ts', + imports: [ + 'react', + { classnames: [['default', 'classNames']] }, + { 'react-query': ['useQuery', 'useMutation', 'useInfiniteQuery'] }, + { 'react-router-dom': ['useNavigate', 'useParams'] }, + { 'react-hot-toast': ['toast'] }, + { valtio: ['useSnapshot'] }, + ], + }), + ], + base: './', + build: { + sourcemap: process.env.NODE_ENV === 'debug', + outDir: './dist/renderer', + emptyOutDir: true, + rollupOptions: { + plugins: [ + visualizer({ + filename: './bundle-stats-renderer.html', + gzipSize: true, + projectRoot: 'src/renderer', + template: 'treemap', + }), + ], + }, + }, + resolve: { + alias: { + '@': join(__dirname, './src/renderer'), + }, + }, + clearScreen: false, + server: { + port: Number(process.env['ELECTRON_WEB_SERVER_PORT'] ?? 42710), + proxy: { + '/netease/': { + target: `http://127.0.0.1:${process.env.ELECTRON_DEV_NETEASE_API_PORT}/netease`, + changeOrigin: true, + rewrite: path => path.replace(/^\/netease/, ''), + }, + '/yesplaymusic/': { + target: `http://127.0.0.1:${process.env.ELECTRON_DEV_NETEASE_API_PORT}/yesplaymusic`, + changeOrigin: true, + rewrite: path => path.replace(/^\/yesplaymusic/, ''), + }, + }, + }, +})