feat: 新增electron打包

This commit is contained in:
wanglihui 2024-03-09 17:30:00 +08:00
parent 2cef85714b
commit 65afe3e269
22 changed files with 621 additions and 56 deletions

2
.gitignore vendored
View File

@ -35,6 +35,6 @@ lib/
out/
build
out-election/
output/
dist-ele/
icon.icns
icons.iconset

View File

@ -1,9 +1,9 @@
module.exports = {
productName: "唐僧叨叨", //项目名
productName: "tangsengdaodao", //项目名
appId: "com.tsdaodao.im",
copyright: "Copyright © tsdaodao", //版权
directories: {
output: "output/app", // 输出文件夹
output: "dist-ele", // 输出文件夹
},
npmRebuild: false,
asar: false,
@ -11,17 +11,19 @@ module.exports = {
electronDownload: {
mirror: "https://registry.npmmirror.com/-/binary/electron/",
},
files: ["out-election/**/*", "build/**/*"], // 需要打包的文件
files: ["resources/**/*","out-election/**/*", "build/**/*"], // 需要打包的文件
extraMetadata: {
main: "out-election/main/index.js",
},
mac: {
category: "public.app-category.utilities",
icon: "public/icon.icns",
category: "public.app-category.instant-messaging",
artifactName: "${productName}-${version}-${arch}.${ext}",
icon: "resources/icons/icon.icns",
target: ["dmg", "zip"]
},
dmg: {
// background: 'build/appdmg.png', // dmg安装窗口背景图
icon: "public/icon.icns", // 客户端图标
icon: "resources/icons/icon.icns", // 客户端图标
iconSize: 100, // 安装图标大小
// 安装窗口中包含的项目和配置
contents: [
@ -31,8 +33,10 @@ module.exports = {
window: { width: 500, height: 500 }, // 安装窗口大小
},
win: {
icon: "public/icon.icns",
icon: "resources/icons/icon.ico",
verifyUpdateCodeSignature: false,
target: ["nsis", "zip"],
artifactName: "${productName}-Setup-${version}.${ext}"
},
nsis: {
oneClick: false, // 是否一键安装
@ -43,10 +47,9 @@ module.exports = {
// installerHeaderIcon: "./build/icon.ico", // 安装时头部图标
createDesktopShortcut: true, // 创建桌面图标
createStartMenuShortcut: true, // 创建开始菜单图标
shortcutName: "唐僧叨叨", // 图标名称
},
linux: {
target: ["AppImage", "deb"],
icon: "public/icon.icns",
icon: "resources/icons/icon.icns",
},
};
};

View File

@ -3,6 +3,22 @@
"version": "1.0.0",
"private": true,
"main": "out-election/main/index.js",
"scripts": {
"start": "cross-env BROWSER=none REACT_APP_VERSION=$npm_package_version react-app-rewired start",
"dev": "cross-env MODE=dev BROWSER=none REACT_APP_VERSION=$npm_package_version react-app-rewired start",
"dev-ele": "kill-port 3000 && concurrently -k -n=web,ele -c=green,blue \"yarn dev\" \"wait-on tcp:3000 && npm-run-all watch\"",
"watch": "tsc-watch -p tsconfig.e.json --onSuccess \"npm-run-all start:electron\"",
"start:electron": "cross-env NODE_ENV=development electron .",
"build": "cross-env REACT_APP_VERSION=$npm_package_version react-app-rewired build",
"build:analyzer": "cross-env ANALYZER=true REACT_APP_VERSION=$npm_package_version react-app-rewired build",
"build-ele:mac": "tsc -p tsconfig.e.json && electron-builder --mac -c",
"build-ele:win": "tsc -p tsconfig.e.json && electron-builder --win -c",
"build-ele": "tsc -p tsconfig.e.json && electron-builder -mw -c",
"test": "react-app-rewired test",
"eject": "react-app-rewired eject",
"clean": "rimraf node_modules out-election build dist-ele .turbo",
"tauri": "tauri"
},
"dependencies": {
"@tauri-apps/api": "^1.1.0",
"@tsdaodao/base": "*",
@ -13,6 +29,8 @@
"@types/react-mentions": "^4.1.5",
"@types/react-virtualized": "^9.21.22",
"classnames": "^2.3.1",
"electron-log": "^5.1.1",
"electron-screenshots": "^0.5.26",
"howler": "^2.2.4",
"react": "^17.0.2",
"react-app-rewired": "^2.1.8",
@ -49,21 +67,6 @@
"wait-on": "^7.2.0",
"webpack-bundle-analyzer": "^4.5.0"
},
"scripts": {
"start": "cross-env BROWSER=none REACT_APP_VERSION=$npm_package_version react-app-rewired start",
"dev": "cross-env MODE=dev BROWSER=none REACT_APP_VERSION=$npm_package_version react-app-rewired start",
"dev-ele": "kill-port 3000 && concurrently -k -n=web,ele -c=green,blue \"yarn dev\" \"wait-on tcp:3000 && npm-run-all watch\"",
"watch": "tsc-watch -p tsconfig.e.json --onSuccess \"npm-run-all start:electron\"",
"start:electron": "cross-env NODE_ENV=development electron .",
"build": "cross-env REACT_APP_VERSION=$npm_package_version react-app-rewired build",
"build:analyzer": "cross-env ANALYZER=true REACT_APP_VERSION=$npm_package_version react-app-rewired build",
"build-ele:mac": "tsc -p tsconfig.e.json && electron-builder --mac -c",
"build-ele:win": "tsc -p tsconfig.e.json && electron-builder --win -c",
"build-ele": "tsc -p tsconfig.e.json && electron-builder -mw -c",
"test": "react-app-rewired test",
"eject": "react-app-rewired eject",
"tauri": "tauri"
},
"eslintConfig": {
"extends": "react-app"
},

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
apps/web/resources/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1 @@
declare module 'tmp';

View File

@ -0,0 +1,6 @@
const TSDD_FONFIG = {
appId: "com.tsdaodao.im",
name: "唐僧叨叨",
};
export default TSDD_FONFIG;

View File

@ -1,19 +1,441 @@
import { app, BrowserWindow, Menu } from "electron";
import {
app,
BrowserWindow,
screen,
globalShortcut,
ipcMain,
nativeImage as NativeImage,
Menu,
Tray,
} from "electron";
import fs from "fs";
import tmp from 'tmp';
import Screenshots from "electron-screenshots";
import { join } from "path";
import { createWindow } from "./utils/createWindow";
import logo, { getNoMessageTrayIcon } from "./logo";
import TSDD_FONFIG from "./confing";
let forceQuit = false;
let mainWindow: any;
let isMainWindowFocusedWhenStartScreenshot = false;
let screenshots: any;
let tray: any;
let trayIcon: any;
let settings: any = {};
let screenShotWindowId = 0;
let isFullScreen = false;
let isOsx = process.platform === "darwin";
let isWin = !isOsx;
const isDevelopment = process.env.NODE_ENV === "development";
let mainMenu: (Electron.MenuItemConstructorOptions | Electron.MenuItem)[] = [
{
label: "唐僧叨叨",
submenu: [
{
label: `关于唐僧叨叨`,
},
{ label: "服务", role: "services" },
{ type: "separator" },
{
label: "退出",
accelerator: "Command+Q",
click() {
forceQuit = true;
mainWindow = null;
setTimeout(() => {
app.exit(0);
}, 1000);
},
},
],
},
{
label: "编辑",
submenu: [
{
role: "undo",
label: "撤销",
},
{
role: "redo",
label: "重做",
},
{
type: "separator",
},
{
role: "cut",
label: "剪切",
},
{
role: "copy",
label: "复制",
},
{
role: "paste",
label: "粘贴",
},
{
role: "pasteAndMatchStyle",
label: "粘贴并匹配样式",
},
{
role: "delete",
label: "删除",
},
{
role: "selectAll",
label: "全选",
},
],
},
{
label: "显示",
submenu: [
{
label: isFullScreen ? "全屏" : "退出全屏",
accelerator: "Shift+Cmd+F",
click() {
isFullScreen = !isFullScreen;
mainWindow.show();
mainWindow.setFullScreen(isFullScreen);
},
},
{
label: "切换会话",
accelerator: "Shift+Cmd+M",
click() {
mainWindow.show();
mainWindow.webContents.send("show-conversations");
},
},
{
type: "separator",
},
{
type: "separator",
},
{
role: "toggleDevTools",
label: "切换开发者工具",
},
{
role: "togglefullscreen",
label: "切换全屏",
},
],
},
{
label: "窗口",
role: "window",
submenu: [
{
label: "最小化",
role: "minimize",
},
{
label: "关闭窗口",
role: "close",
},
],
},
{
label: "帮助",
role: "help",
submenu: [
{
type: "separator",
},
{
role: "reload",
label: "刷新",
},
{
role: "forceReload",
label: "强制刷新",
},
],
},
];
let trayMenu: Electron.MenuItemConstructorOptions[] = [
{
label: "显示窗口",
click() {
let isVisible = mainWindow.isVisible();
isVisible ? mainWindow.hide() : mainWindow.show();
},
},
{
type: "separator",
},
{
label: "退出",
accelerator: "Command+Q",
click() {
forceQuit = true;
mainWindow = null;
setTimeout(() => {
app.exit(0);
}, 1000);
},
},
];
function updateTray(unread = 0): any {
settings.showOnTray = true;
// linux 系统不支持 tray
if (process.platform === "linux") {
return;
}
if (settings.showOnTray) {
let contextmenu = Menu.buildFromTemplate(trayMenu);
if (!trayIcon) {
trayIcon = getNoMessageTrayIcon();
}
setTimeout(() => {
if (!tray) {
// Init tray icon
tray = new Tray(trayIcon);
if (process.platform === "linux") {
tray.setContextMenu(contextmenu);
}
tray.on("right-click", () => {
tray.popUpContextMenu(contextmenu);
});
tray.on("click", () => {
mainWindow.show();
});
}
if (isOsx) {
tray.setTitle(unread > 0 ? " " + unread : "");
}
tray.setImage(trayIcon);
});
} else {
if (!tray) return;
tray.destroy();
tray = null;
}
}
function createMenu() {
var menu = Menu.buildFromTemplate(mainMenu);
if (isOsx) {
Menu.setApplicationMenu(menu);
} else {
mainWindow.setMenu(null);
}
}
function regShortcut() {
globalShortcut.register("CommandOrControl+shift+a", () => {
isMainWindowFocusedWhenStartScreenshot = mainWindow.isFocused();
console.log(
"isMainWindowFocusedWhenStartScreenshot",
mainWindow.isFocused()
);
screenshots.startCapture();
});
globalShortcut.register("esc", () => {
if (screenshots.$win?.isFocused()) {
screenshots.endCapture();
}
});
// 打开所有窗口控制台
globalShortcut.register("ctrl+shift+i", () => {
let windows = BrowserWindow.getAllWindows();
windows.forEach((win: any) => win.openDevTools());
});
}
const createMainWindow = async () => {
const NODE_ENV = process.env.NODE_ENV;
const { width, height } = screen.getPrimaryDisplay().workAreaSize;
mainWindow = new BrowserWindow({
width: 960,
height: 600,
minWidth: 960,
minHeight: 600,
// frame: true, // * app边框(包括关闭,全屏,最小化按钮的导航栏) @false: 隐藏
// titleBarStyle: "hidden",
// transparent: true, // * app 背景透明
hasShadow: false, // * app 边框阴影
show: false, // 启动窗口时隐藏,直到渲染进程加载完成「ready-to-show 监听事件」 再显示窗口,防止加载时闪烁
resizable: true, // 禁止手动修改窗口尺寸
webPreferences: {
// 加载脚本
preload: join(__dirname, "..", "preload/index"),
nodeIntegration: true,
},
// frame: !isWin,
});
mainWindow.center();
mainWindow.once("ready-to-show", () => {
mainWindow.show(); // 显示窗口
mainWindow.focus();
});
mainWindow.on("close", (e: any) => {
if (forceQuit || !tray) {
mainWindow = null;
} else {
e.preventDefault();
if (mainWindow.isFullScreen()) {
mainWindow.setFullScreen(false);
mainWindow.once("leave-full-screen", () => mainWindow.hide());
} else {
mainWindow.hide();
}
}
});
if (NODE_ENV === "development") mainWindow.loadURL("http://localhost:3000");
if (NODE_ENV !== "development") {
process.env.DIST_ELECTRON = join(__dirname, "../");
const WEB_URL = join(process.env.DIST_ELECTRON, "../build/index.html");
mainWindow.loadFile(WEB_URL);
}
ipcMain.on("screenshots-start", (event, args) => {
console.log("main voip-message event", args);
screenShotWindowId = event.sender.id;
screenshots.startCapture();
});
createMenu();
};
function onDeepLink(url: string) {
console.log("onOpenDeepLink", url);
mainWindow.webContents.send("deep-link", url);
}
app.setName(TSDD_FONFIG.name);
isDevelopment && app.dock && app.dock.setIcon(logo);
app.on("open-url", (event, url) => {
onDeepLink(url);
});
// 单例模式启动
const gotTheLock = app.requestSingleInstanceLock();
if (!gotTheLock) {
app.quit();
} else {
app.on("second-instance", (event, argv) => {
if (mainWindow) {
mainWindow.show();
if (mainWindow.isMinimized()) {
mainWindow.restore();
}
mainWindow.focus();
}
});
}
app.on("ready", () => {
// 设置app菜单
// Menu.setApplicationMenu(createAppMenu());
createWindow(); // 创建窗口
// 通常在 macOS 上,当点击 dock 中的应用程序图标时,如果没有其他打开的窗口,那么程序会重新创建一个窗口。
app.on(
"activate",
() => BrowserWindow.getAllWindows().length === 0 && createWindow()
);
regShortcut();
createMainWindow(); // 创建窗口
screenshots = new Screenshots({
singleWindow: true,
});
const onScreenShotEnd = (result?: any) => {
console.log(
"onScreenShotEnd",
isMainWindowFocusedWhenStartScreenshot,
screenShotWindowId
);
if (isMainWindowFocusedWhenStartScreenshot) {
if (result) {
mainWindow.webContents.send("screenshots-ok", result);
}
mainWindow.show();
isMainWindowFocusedWhenStartScreenshot = false;
} else if (screenShotWindowId) {
let windows = BrowserWindow.getAllWindows();
let tms = windows.filter(
(win) => win.webContents.id === screenShotWindowId
);
if (tms.length > 0) {
if (result) {
tms[0].webContents.send("screenshots-ok", result);
}
tms[0].show();
}
screenShotWindowId = 0;
}
};
// 点击确定按钮回调事件
screenshots.on("ok", (e, buffer, bounds) => {
let filename = tmp.tmpNameSync() + '.png';
let image = NativeImage.createFromBuffer(buffer);
fs.writeFileSync(filename, image.toPNG());
console.log("screenshots ok", e);
onScreenShotEnd({ filePath: filename });
});
// 点击取消按钮回调事件
screenshots.on("cancel", (e: any) => {
// 执行了preventDefault
// 点击取消不会关闭截图窗口
// e.preventDefault()
// console.log('capture', 'cancel2')
console.log("screenshots cancel", e);
onScreenShotEnd();
});
// 点击保存按钮回调事件
screenshots.on("save", (e, { viewer }) => {
console.log("screenshots save", e);
onScreenShotEnd();
});
try {
updateTray();
} catch (e) {
// do nothing
console.log("==updateTray==", e);
}
});
app.on("activate", () => {
if (!mainWindow) {
return createMainWindow();
}
if (!mainWindow.isVisible()) {
mainWindow.show();
}
});
app.on("before-quit", () => {
forceQuit = true;
if (!tray) return;
tray.destroy();
tray = null;
});
// 除了 macOS 外,当所有窗口都被关闭的时候退出程序。 macOS窗口全部关闭时,dock中程序不会退出
app.on("window-all-closed", () => {
process.platform !== "darwin" && app.quit();
});
});

View File

@ -0,0 +1,16 @@
import path from "path";
import { app, screen } from "electron";
export default path.join(app.getAppPath(), "./resources/logo.png");
export function getNoMessageTrayIcon () {
if (process.platform === 'darwin') {
return path.join(app.getAppPath(), './resources/tray/30x30.png')
} else if (process.platform === 'win32') {
return path.join(app.getAppPath(), './resources/tray/128x128.png')
} else if (screen.getPrimaryDisplay().scaleFactor > 1) {
return path.join(app.getAppPath(), './resources/tray/128x128.png')
} else {
return path.join(app.getAppPath(), './resources/tray/128x128.png')
}
}

View File

@ -1,3 +1,21 @@
import { contextBridge, ipcRenderer } from "electron";
contextBridge.exposeInMainWorld("__POWERED_ELECTRON__", true);
contextBridge.exposeInMainWorld("__POWERED_ELECTRON__", true);
contextBridge.exposeInMainWorld("ipc", {
send: (channel: string, ...args: any[]) => ipcRenderer.send(channel, ...args),
invoke: (channel: string, ...args: any[]): Promise<any> =>
ipcRenderer.invoke(channel, ...args),
on: (
channel: string,
listener: (event: Electron.IpcRendererEvent, ...args: any[]) => void
) => {
ipcRenderer.on(channel, listener);
},
once: (
channel: string,
listener: (event: Electron.IpcRendererEvent, ...args: any[]) => void
) => {
ipcRenderer.once(channel, listener);
},
});

View File

@ -6,13 +6,15 @@
],
"resolutions": {
"//": "See https://github.com/facebook/create-react-app/issues/11773",
"react-error-overlay": "6.0.9"
"react-error-overlay": "6.0.11"
},
"scripts": {
"bootstrap": "yarn install",
"dev": "turbo run dev --parallel",
"dev-ele": "turbo run dev-ele --parallel",
"build": "turbo run build",
"build-ele": "turbo run build-ele",
"clean": "turbo run clean && rimraf node_modules",
"lint": "turbo run lint",
"format": "prettier --write \"**/*.{ts,tsx,md}\""
},
@ -20,8 +22,8 @@
"eslint": "^7.32.0",
"eslint-config-custom": "*",
"prettier": "^2.5.1",
"rimraf": "^5.0.5",
"turbo": "latest"
},
"dependencies": {},
"version": "0.0.0"
}

View File

@ -3,6 +3,7 @@ module.exports = {
rules: {
"@next/next/no-html-link-for-pages": "off",
"react/jsx-key": "off",
"@next/next/no-img-element": "off"
"@next/next/no-img-element": "off",
"no-template-curly-in-string": "off"
},
};

View File

@ -3,6 +3,9 @@
"version": "0.0.0",
"main": "index.js",
"license": "MIT",
"scripts": {
"clean": "rimraf node_modules out-election"
},
"dependencies": {
"@typescript-eslint/parser": "^6.16.0",
"eslint-config-next": "^12.0.8",

View File

@ -13,8 +13,9 @@
"axios": "^0.25.0",
"benz-amr-recorder": "^1.1.3",
"classnames": "^2.3.1",
"electron-log": "^5.1.1",
"electron-screenshots": "^0.5.26",
"hotkeys-js": "^3.8.7",
"wukongimjssdk": "^1.1.2",
"moment": "^2.29.3",
"qrcode.react": "^1.0.1",
"react": "^17.0.2",
@ -22,7 +23,8 @@
"react-mentions": "^4.3.1",
"react-scroll": "^1.8.4",
"react-spinners": "^0.11.0",
"react-viewer": "^3.2.2"
"react-viewer": "^3.2.2",
"wukongimjssdk": "^1.2.7"
},
"devDependencies": {
"@types/react-avatar-editor": "^13.0.0",

View File

@ -17,6 +17,9 @@
},
"lint": {
"outputs": []
},
"clean": {
"dependsOn": ["^clean"]
}
}
}

111
yarn.lock
View File

@ -6104,10 +6104,10 @@ electron-builder@^24.9.1:
simple-update-notifier "2.0.0"
yargs "^17.6.2"
electron-log@^5.0.1:
version "5.0.2"
resolved "https://registry.npmmirror.com/electron-log/-/electron-log-5.0.2.tgz#6dae26cb7fce9feaa4605d575e02fee75da7b085"
integrity sha512-uzUXpUGZ5lJeCEIn4Hrxt6zQWiURu+EbFyTul0Y81huc6UrvWXIOMx4WxNdaGJYWPk9YLWrz2dQf3894MoZKXw==
electron-log@^5.1.1:
version "5.1.1"
resolved "https://registry.npmmirror.com/electron-log/-/electron-log-5.1.1.tgz#3341c0265339c6c8285a91840cb7c872008103d6"
integrity sha512-If7HU4Slbh2xfjOXOLxifkbgu6HmWDNJyXPLW+XNTOHMfFKisg0trA3d/7syyu25S+lHosfsd0VMfDSjGn1+Pw==
electron-publish@24.8.1:
version "24.8.1"
@ -6122,6 +6122,16 @@ electron-publish@24.8.1:
lazy-val "^1.0.5"
mime "^2.5.2"
electron-screenshots@^0.5.26:
version "0.5.26"
resolved "https://registry.npmmirror.com/electron-screenshots/-/electron-screenshots-0.5.26.tgz#d5e14cf11271adbd0e7f961cbe926c139d87a5d2"
integrity sha512-btr1S8arUt+rqVjgiY4+hdi9DQJGCYHG9x0A3n3rrJvCaet7XnRRnEULXDLtY86CZHeg7JsQzeMdQ4Lj2Bu8lQ==
dependencies:
debug "^4.3.4"
fs-extra "^11.1.1"
node-screenshots "^0.1.9"
react-screenshots "^0.5.22"
electron-to-chromium@^1.4.251:
version "1.4.255"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.255.tgz#dc52d1095b876ed8acf25865db10265b02b1d6e1"
@ -7208,6 +7218,15 @@ fs-extra@^10.0.0, fs-extra@^10.1.0:
jsonfile "^6.0.1"
universalify "^2.0.0"
fs-extra@^11.1.1:
version "11.2.0"
resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b"
integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==
dependencies:
graceful-fs "^4.2.0"
jsonfile "^6.0.1"
universalify "^2.0.0"
fs-extra@^8.1.0:
version "8.1.0"
resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
@ -7386,7 +7405,7 @@ glob@7.1.7:
once "^1.3.0"
path-is-absolute "^1.0.0"
glob@^10.3.10:
glob@^10.3.10, glob@^10.3.7:
version "10.3.10"
resolved "https://registry.npmmirror.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b"
integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==
@ -9561,6 +9580,60 @@ node-releases@^2.0.6:
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503"
integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==
node-screenshots-darwin-arm64@0.1.9:
version "0.1.9"
resolved "https://registry.npmmirror.com/node-screenshots-darwin-arm64/-/node-screenshots-darwin-arm64-0.1.9.tgz#4413a62570eb662cb259fffcca504ab3cef2a0e5"
integrity sha512-zDhuui2hsgUA5FyL1wQQ9c2lPbvqmJzi45g7J+sxEmDDvRjmVv+92wTuiWuERiVAIkpjN2h+f2IR3HtOgHJHXw==
node-screenshots-darwin-universal@0.1.9:
version "0.1.9"
resolved "https://registry.npmmirror.com/node-screenshots-darwin-universal/-/node-screenshots-darwin-universal-0.1.9.tgz#2d0a5e9cf40dfca5ac9f734c816715db350e7ab5"
integrity sha512-4SbvokC/GvOTzYDQzcFa39c02mxWzvhIRT72J9ys82HcKgmeWWbVih2atLUvFONQrSnMt+pxrCUBqFiJVawcyQ==
node-screenshots-darwin-x64@0.1.9:
version "0.1.9"
resolved "https://registry.npmmirror.com/node-screenshots-darwin-x64/-/node-screenshots-darwin-x64-0.1.9.tgz#9883cfd35f5753913f05183dd653708977964717"
integrity sha512-/+VYlLVbsoYYmV/by+oPZY7aUfwF02dyl0rWUxM+xaGn80o55zht05B4UaIN8vcuBByunsGv2gybECT6Gk74PA==
node-screenshots-linux-x64-gnu@0.1.9:
version "0.1.9"
resolved "https://registry.npmmirror.com/node-screenshots-linux-x64-gnu/-/node-screenshots-linux-x64-gnu-0.1.9.tgz#21368912ce5234b428bcfb539f3140664130e0f1"
integrity sha512-n7uTdNJCMqJ3tEMRq0wAOsq8qiK8cbOV+fqDgaQnlFLY+5PTxH67r09r41CJdWwX5sGeDsKHguosh7ZcGte+TA==
node-screenshots-linux-x64-musl@0.1.9:
version "0.1.9"
resolved "https://registry.npmmirror.com/node-screenshots-linux-x64-musl/-/node-screenshots-linux-x64-musl-0.1.9.tgz#9eddb506a82f62ccbdf450d1b5ece2d414c1c718"
integrity sha512-zOIv5rIpL+ndWH0XWLrJOIELxh4P96WcE1omaql2oeWleS4EGwb0VqVJLhjadiMm1YROq8nvp8Vxz850nw5XPQ==
node-screenshots-win32-arm64-msvc@0.1.9:
version "0.1.9"
resolved "https://registry.npmmirror.com/node-screenshots-win32-arm64-msvc/-/node-screenshots-win32-arm64-msvc-0.1.9.tgz#c165c10230362cb5cdf3a106bc730965ef1b0382"
integrity sha512-wBw6SsRSKcLMyM3zTx38rzPJ1l5MjDvveWbacpkSkOXmlMMknhDr7wOsDM/VvbBV9RnEid6+AJ25gXc35HJrcA==
node-screenshots-win32-ia32-msvc@0.1.9:
version "0.1.9"
resolved "https://registry.npmmirror.com/node-screenshots-win32-ia32-msvc/-/node-screenshots-win32-ia32-msvc-0.1.9.tgz#5cfc18e4a667d350c52d019be0493908b5e844de"
integrity sha512-uZW5gbKV6Hrmk2tafoAyHnn48cJ0LWRsSh8HQjiOjyeYd2E29ubPczhlt7NhAxr7ZUCzDeOigEZYm+VV2HCTrg==
node-screenshots-win32-x64-msvc@0.1.9:
version "0.1.9"
resolved "https://registry.npmmirror.com/node-screenshots-win32-x64-msvc/-/node-screenshots-win32-x64-msvc-0.1.9.tgz#faacca9a952eef00ec51b061c62896d507958811"
integrity sha512-9HR/YaYwAImHeuptFtnQuP4/JI9OxfcqQlLiK1XgYwH18eTnv49ukG09MbDAiHvXXWYxQK3Q5w2H7da7FCoCWA==
node-screenshots@^0.1.9:
version "0.1.9"
resolved "https://registry.npmmirror.com/node-screenshots/-/node-screenshots-0.1.9.tgz#c6a17657def4dd12ffaa9fe9832ae0154d571196"
integrity sha512-9f6yV/e7LU0KWkOJAQNR6GTEtnbnSaZKf9ukkF1VDJk0qj3aIcedQqYtd92IdEK8chVg+YbMfSuchlhq8iHI0Q==
optionalDependencies:
node-screenshots-darwin-arm64 "0.1.9"
node-screenshots-darwin-universal "0.1.9"
node-screenshots-darwin-x64 "0.1.9"
node-screenshots-linux-x64-gnu "0.1.9"
node-screenshots-linux-x64-musl "0.1.9"
node-screenshots-win32-arm64-msvc "0.1.9"
node-screenshots-win32-ia32-msvc "0.1.9"
node-screenshots-win32-x64-msvc "0.1.9"
normalize-package-data@^2.3.2:
version "2.5.0"
resolved "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
@ -10929,10 +11002,10 @@ react-draggable@^4.0.3:
clsx "^1.1.1"
prop-types "^15.8.1"
react-error-overlay@6.0.9, react-error-overlay@^6.0.11:
version "6.0.9"
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a"
integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==
react-error-overlay@^6.0.11:
version "6.0.11"
resolved "https://registry.npmmirror.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb"
integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==
react-is@^16.12.0, react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.4:
version "16.13.1"
@ -10982,6 +11055,11 @@ react-resizable@^3.0.5:
prop-types "15.x"
react-draggable "^4.0.3"
react-screenshots@^0.5.22:
version "0.5.22"
resolved "https://registry.npmmirror.com/react-screenshots/-/react-screenshots-0.5.22.tgz#2d974189d2d2df74388a4a19482fd1c956641837"
integrity sha512-aooIlb1k6161BTqhhyADlMrlF0n1UdudjuhyvXaCQfwURXZNuUerMxFuOfwNCgSbPAHlxdHCWtYQ6iQT+RaF+w==
react-scripts@5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-5.0.0.tgz#6547a6d7f8b64364ef95273767466cc577cb4b60"
@ -11425,6 +11503,13 @@ rimraf@^3.0.0, rimraf@^3.0.2:
dependencies:
glob "^7.1.3"
rimraf@^5.0.5:
version "5.0.5"
resolved "https://registry.npmmirror.com/rimraf/-/rimraf-5.0.5.tgz#9be65d2d6e683447d2e9013da2bf451139a61ccf"
integrity sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==
dependencies:
glob "^10.3.7"
roarr@^2.15.3:
version "2.15.4"
resolved "https://registry.npmmirror.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd"
@ -13565,10 +13650,10 @@ ws@^8.13.0:
resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.1.tgz#4b9586b4f70f9e6534c7bb1d3dc0baa8b8cf01e0"
integrity sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==
wukongimjssdk@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/wukongimjssdk/-/wukongimjssdk-1.1.2.tgz#d1f781a1c5d4fb32217bba939b7000e09d04bf22"
integrity sha512-x1xAnn17jHZshZnt53eiccMOffYIaIy+6CHH9NWS6p2aefJibX3LfHODrQWQJkoJ4ppGtfGfuqukkYgwTIqxiw==
wukongimjssdk@^1.2.7:
version "1.2.7"
resolved "https://registry.npmmirror.com/wukongimjssdk/-/wukongimjssdk-1.2.7.tgz#db9af096efff467d6d1766c5ea50f16fe386662c"
integrity sha512-Okx+hTDLhMSDCicA2od9VBvSlfzNLtxMw4drbqaUx31hp09G5LSgthhWz9rfJl8AbmljhwPGo28B9bOZGjAgkw==
dependencies:
"@types/bignumber.js" "^5.0.0"
"@types/crypto-js" "^4.0.2"