chore: 用esbuild代替vite来打包main

This commit is contained in:
qier222 2022-03-29 16:52:53 +08:00
parent b4590c3c34
commit c4219afd3d
No known key found for this signature in database
GPG Key ID: 9C85007ED905F14D
152 changed files with 669 additions and 747 deletions

View File

@ -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',

4
.vscode/task.json vendored
View File

@ -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"
}
]
}
}

View File

@ -8,12 +8,15 @@
"license": "MIT",
"author": "qier222 <qier222@outlook.com>",
"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"
}
}

View File

@ -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',
}),
],
},
},
})

View File

@ -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<string, any>) {
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
}

View File

@ -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 = `<div class="${className}"><div></div></div>`
return {
appendLoading() {
document.head.appendChild(oStyle)
document.body.appendChild(oDiv)
},
removeLoading() {
document.head.removeChild(oStyle)
document.body.removeChild(oDiv)
},
}
}

View File

@ -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)
}
})
}
})
}

View File

@ -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',
}),
],
},
},
})

View File

@ -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<typeof resolve>[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), {})
}
}

View File

@ -1,9 +0,0 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"compilerOptions": {
"baseUrl": "./",
"paths": {
"@/*": ["packages/renderer/src/*"]
}
}
}

416
pnpm-lock.yaml generated
View File

@ -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'}

99
scripts/build.main.mjs Normal file
View File

@ -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()
})
}

View File

@ -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' })

View File

@ -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<typeof resolve>[0]),
{}
),
},
{ dir: '.vite-plugin-resolve-esm' }
)
}

View File

@ -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<import('rollup').RollupWatcher>}
*/
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<import('rollup').RollupWatcher>}
*/
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)

View File

@ -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()
})

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,4 @@
const { contextBridge, ipcRenderer } = require('electron')
contextBridge.exposeInMainWorld('ipcRenderer', ipcRenderer)
contextBridge.exposeInMainWorld('isElectron', true)

View File

@ -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.

View File

@ -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}`)
})

View File

Before

Width:  |  Height:  |  Size: 259 B

After

Width:  |  Height:  |  Size: 259 B

View File

Before

Width:  |  Height:  |  Size: 523 B

After

Width:  |  Height:  |  Size: 523 B

View File

Before

Width:  |  Height:  |  Size: 946 B

After

Width:  |  Height:  |  Size: 946 B

View File

Before

Width:  |  Height:  |  Size: 261 B

After

Width:  |  Height:  |  Size: 261 B

View File

Before

Width:  |  Height:  |  Size: 542 B

After

Width:  |  Height:  |  Size: 542 B

View File

Before

Width:  |  Height:  |  Size: 494 B

After

Width:  |  Height:  |  Size: 494 B

View File

Before

Width:  |  Height:  |  Size: 429 B

After

Width:  |  Height:  |  Size: 429 B

View File

Before

Width:  |  Height:  |  Size: 540 B

After

Width:  |  Height:  |  Size: 540 B

View File

Before

Width:  |  Height:  |  Size: 257 B

After

Width:  |  Height:  |  Size: 257 B

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 550 B

After

Width:  |  Height:  |  Size: 550 B

View File

Before

Width:  |  Height:  |  Size: 535 B

After

Width:  |  Height:  |  Size: 535 B

View File

Before

Width:  |  Height:  |  Size: 258 B

After

Width:  |  Height:  |  Size: 258 B

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 557 B

After

Width:  |  Height:  |  Size: 557 B

View File

Before

Width:  |  Height:  |  Size: 367 B

After

Width:  |  Height:  |  Size: 367 B

View File

Before

Width:  |  Height:  |  Size: 284 B

After

Width:  |  Height:  |  Size: 284 B

View File

Before

Width:  |  Height:  |  Size: 254 B

After

Width:  |  Height:  |  Size: 254 B

View File

Before

Width:  |  Height:  |  Size: 369 B

After

Width:  |  Height:  |  Size: 369 B

View File

Before

Width:  |  Height:  |  Size: 349 B

After

Width:  |  Height:  |  Size: 349 B

View File

Before

Width:  |  Height:  |  Size: 741 B

After

Width:  |  Height:  |  Size: 741 B

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 371 B

After

Width:  |  Height:  |  Size: 371 B

View File

Before

Width:  |  Height:  |  Size: 708 B

After

Width:  |  Height:  |  Size: 708 B

View File

Before

Width:  |  Height:  |  Size: 1018 B

After

Width:  |  Height:  |  Size: 1018 B

View File

Before

Width:  |  Height:  |  Size: 841 B

After

Width:  |  Height:  |  Size: 841 B

View File

Before

Width:  |  Height:  |  Size: 496 B

After

Width:  |  Height:  |  Size: 496 B

View File

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB

View File

Before

Width:  |  Height:  |  Size: 1023 B

After

Width:  |  Height:  |  Size: 1023 B

View File

Before

Width:  |  Height:  |  Size: 341 B

After

Width:  |  Height:  |  Size: 341 B

View File

Before

Width:  |  Height:  |  Size: 525 B

After

Width:  |  Height:  |  Size: 525 B

View File

Before

Width:  |  Height:  |  Size: 702 B

After

Width:  |  Height:  |  Size: 702 B

View File

Before

Width:  |  Height:  |  Size: 572 B

After

Width:  |  Height:  |  Size: 572 B

View File

Before

Width:  |  Height:  |  Size: 222 B

After

Width:  |  Height:  |  Size: 222 B

View File

@ -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
}
}

View File

@ -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,
// },
// }),
}
)
}

View File

@ -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,
// },
// }),
}
)
}

View File

@ -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,
// },
// }),
}
)
}

View File

@ -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,
// },
// }),
}
)
}

View File

@ -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(','),
// },
// }),
}
)
}

View File

@ -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',
// }),
})
}

View File

@ -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,
// },
// }),
}
)
}

View File

@ -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,
// },
// }),
}
)
}

View File

@ -11,7 +11,7 @@
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
<script type="module" src="/main.tsx"></script>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More