diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index fe250eb..0000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,11 +0,0 @@ -# To get started with Dependabot version updates, you'll need to specify which -# package ecosystems to update and where the package manifests are located. -# Please see the documentation for all configuration options: -# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates - -version: 2 -updates: - - package-ecosystem: "npm" # See documentation for possible values - directory: "/" # Location of package manifests - schedule: - interval: "monthly" diff --git a/.github/workflows/main-mac.yml b/.github/workflows/main-mac.yml new file mode 100644 index 0000000..13c59d5 --- /dev/null +++ b/.github/workflows/main-mac.yml @@ -0,0 +1,51 @@ +name: Build + +on: + push: + branches: [main] + paths-ignore: + - "**.md" + - "**.spec.js" + - ".idea" + - ".vscode" + - ".dockerignore" + - "Dockerfile" + - ".gitignore" + - ".github/**" + - "!.github/workflows/main.yml" + workflow_dispatch: + +jobs: + build: + runs-on: ${{ matrix.os }} + + strategy: + matrix: + # [macos-latest, ubuntu-latest, windows-latest] + os: [macos-latest] + + steps: + - name: Checkout Code + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: 14 + + - name: Install Dependencies + run: npm install + + - name: Build Release Files + run: npm run build + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Upload Artifact + uses: actions/upload-artifact@v3 + with: + name: tts-vue-${{ matrix. os }} + path: release/*/*.dmg + retention-days: 30 diff --git a/.github/workflows/main-win.yml b/.github/workflows/main-win.yml new file mode 100644 index 0000000..0fd40f6 --- /dev/null +++ b/.github/workflows/main-win.yml @@ -0,0 +1,51 @@ +name: Build + +on: + push: + branches: [main] + paths-ignore: + - "**.md" + - "**.spec.js" + - ".idea" + - ".vscode" + - ".dockerignore" + - "Dockerfile" + - ".gitignore" + - ".github/**" + - "!.github/workflows/main.yml" + workflow_dispatch: + +jobs: + build: + runs-on: ${{ matrix.os }} + + strategy: + matrix: + # [macos-latest, ubuntu-latest, windows-latest] + os: [windows-latest] + + steps: + - name: Checkout Code + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: 14 + + - name: Install Dependencies + run: npm install + + - name: Build Release Files + run: npm run build + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Upload Artifact + uses: actions/upload-artifact@v3 + with: + name: tts-vue-${{ matrix. os }} + path: release/*/*.exe + retention-days: 30 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 69fec8e..0000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: Build Pack -on: - push: - branches: - - master # master 分支 push 时触发工作流 -jobs: - pack: # 打包任务 - runs-on: windows-latest # 在 windows 系统中运行 - steps: - - uses: actions/checkout@v2 # 下载仓库代码到工作流机器中 - - name: Install and Pack # 安装依赖并且进行构建 - run: | - npm install - npm run build - - name: Upload file # 将构建产物进行上传 - uses: actions/upload-artifact@v2 - with: - name: vue-tts - # 打包的路径以及文件过滤,此为仅打包dist目录下的exe文件 - path: release/1.0.0/*exe diff --git a/.gitignore b/.gitignore index b4fa623..f01b450 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ dist-ssr *.local # Editor directories and files +.vscode .idea .DS_Store *.suo @@ -22,4 +23,4 @@ dist-ssr *.sw? release -.vscode/.debug.env + diff --git a/.vscode/.debug.script.mjs b/.vscode/.debug.script.mjs deleted file mode 100644 index 1d68c8f..0000000 --- a/.vscode/.debug.script.mjs +++ /dev/null @@ -1,23 +0,0 @@ -import fs from 'fs' -import path from 'path' -import { fileURLToPath } from 'url' -import { createRequire } from 'module' -import { spawn } from 'child_process' - -const pkg = createRequire(import.meta.url)('../package.json') -const __dirname = path.dirname(fileURLToPath(import.meta.url)) - -// write .debug.env -const envContent = Object.entries(pkg.env).map(([key, val]) => `${key}=${val}`) -fs.writeFileSync(path.join(__dirname, '.debug.env'), envContent.join('\n')) - -// bootstrap -spawn( - // TODO: terminate `npm run dev` when Debug exits. - process.platform === 'win32' ? 'npm.cmd' : 'npm', - ['run', 'dev'], - { - stdio: 'inherit', - env: Object.assign(process.env, { VSCODE_DEBUG: 'true' }), - }, -) diff --git a/.vscode/extensions.json b/.vscode/extensions.json deleted file mode 100644 index 232ead7..0000000 --- a/.vscode/extensions.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "recommendations": [ - "Vue.volar", - "Vue.vscode-typescript-vue-plugin" - ] -} diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 52ac762..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "compounds": [ - { - "name": "Debug App", - "preLaunchTask": "Before Debug", - "configurations": [ - "Debug Main Process", - "Debug Renderer Process" - ], - "presentation": { - "hidden": false, - "group": "", - "order": 1 - }, - "stopAll": true - } - ], - "configurations": [ - { - "name": "Debug Main Process", - "type": "pwa-node", - "request": "launch", - "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron", - "windows": { - "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron.cmd" - }, - "runtimeArgs": [ - "--remote-debugging-port=9229", - "." - ], - "envFile": "${workspaceFolder}/.vscode/.debug.env" - }, - { - "name": "Debug Renderer Process", - "port": 9229, - "request": "attach", - "type": "pwa-chrome" - }, - ] -} diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 894b714..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "typescript.tsdk": "node_modules/typescript/lib", - "typescript.enablePromptUseWorkspaceTsdk": true, -} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json deleted file mode 100644 index a1bf353..0000000 --- a/.vscode/tasks.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - // See https://go.microsoft.com/fwlink/?LinkId=733558 - // for the documentation about the tasks.json format - "version": "2.0.0", - "tasks": [ - { - "label": "Before Debug", - "type": "shell", - "command": "node .vscode/.debug.script.mjs", - "isBackground": true, - "problemMatcher": { - "owner": "typescript", - "fileLocation": "relative", - "pattern": { - "regexp": "^([a-zA-Z]\\:\/?([\\w\\-]\/?)+\\.\\w+):(\\d+):(\\d+): (ERROR|WARNING)\\: (.*)$", - "file": 1, - "line": 3, - "column": 4, - "code": 5, - "message": 6 - }, - "background": { - "activeOnStart": true, - "beginsPattern": "^.*building for development.*$", - "endsPattern": "built in [0-9]*ms.*$", - } - } - } - ] -} diff --git a/README.md b/README.md index 26a1a30..384c21c 100644 --- a/README.md +++ b/README.md @@ -1,65 +1,37 @@ -# electron-vite-vue +# TTS-Vue -🥳 Really simple `Electron` + `Vue` + `Vite` boilerplate. +🎤 微软语音合成工具,使用 `Electron` + `Vue` + `ElementPlus` + `Vite` 构建. -[![awesome-vite](https://awesome.re/mentioned-badge.svg)](https://github.com/vitejs/awesome-vite) -[![Netlify Status](https://api.netlify.com/api/v1/badges/ae3863e3-1aec-4eb1-8f9f-1890af56929d/deploy-status)](https://app.netlify.com/sites/electron-vite/deploys) -![GitHub license](https://img.shields.io/github/license/caoxiemeihao/electron-vite-vue?style=flat) -![GitHub stars](https://img.shields.io/github/stars/caoxiemeihao/electron-vite-vue?color=fa6470&style=flat) -![GitHub forks](https://img.shields.io/github/forks/caoxiemeihao/electron-vite-vue?style=flat) +## 开始使用 -## Features +- [项目简介](https://loker-page.lgwawork.com/guide/intro.html) -📦 Out of the box -🎯 Based on the official [vue-ts](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-vue-ts) template, less invasive -🌱 Extensible, really simple directory structure -💪 Support using Node.js API in Electron-Renderer -🔩 Support C/C++ native addons -🖥 It's easy to implement multiple windows +- [安装运行](https://loker-page.lgwawork.com/guide/install.html) -## Quick Start +- [功能介绍](https://loker-page.lgwawork.com/guide/features.html) -```sh -npm create electron-vite -``` +- [常见问题](https://loker-page.lgwawork.com/guide/qa.html) - +- [更新日志](https://loker-page.lgwawork.com/guide/update.html) -![electron-vite-vue.gif](https://github.com/electron-vite/electron-vite-vue/blob/main/public/electron-vite-vue.gif?raw=true) +## 注意 -## Debug +该软件以及代码仅为个人学习测试使用,请在下载后24小时内删除,不得用于商业用途,否则后果自负。任何违规使用造成的法律后果与本人无关。该软件也永远不会收费,如果您使用该软件前支付了额外费用,或付费获得源码或成品软件,那么你一定被骗了! -![electron-vite-react-debug.gif](https://github.com/electron-vite/electron-vite-react/blob/main/public/electron-vite-react-debug.gif?raw=true) +**搬运请注明出处。禁止诱导他人以加群、私信等方式获取软件的仓库、下载地址和安装包。** -## Directory +### 意见问题反馈,版本发布企鹅群: -```diff -+ ├─┬ electron -+ │ ├─┬ main -+ │ │ └── index.ts entry of Electron-Main -+ │ └─┬ preload -+ │ └── index.ts entry of Preload-Scripts - ├─┬ src - │ └── main.ts entry of Electron-Renderer - ├── index.html - ├── package.json - └── vite.config.ts -``` +`【tts-vue问题反馈群⑤】439382846` -## 🚨 Be aware +`【tts-vue问题反馈群④】781659118(满)` -By default, this template integrates Node.js in the Renderer process. If you don't need it, you just remove the option below. [Because it will modify the default config of Vite](https://github.com/electron-vite/vite-plugin-electron/tree/main/packages/electron-renderer#config-presets-opinionated). +`【tts-vue问题反馈群③】474128303(满)` -```diff -# vite.config.ts +`【tts-vue问题反馈群②】702034846(满)` -electron({ -- renderer: {} -}) -``` +`【tts-vue问题反馈群①】752801820(满)` -## FAQ +## Star History -- [dependencies vs devDependencies](https://github.com/electron-vite/vite-plugin-electron/tree/main/packages/electron-renderer#dependencies-vs-devdependencies) -- [Using C/C++ native addons in Electron-Renderer](https://github.com/electron-vite/vite-plugin-electron/tree/main/packages/electron-renderer#load-nodejs-cc-native-modules) -- [Node.js ESM packages](https://github.com/electron-vite/vite-plugin-electron/tree/main/packages/electron-renderer#nodejs-esm-packages) (e.g. `execa` `node-fetch`) +[![Star History Chart](https://api.star-history.com/svg?repos=LokerL/tts-vue&type=Date)](https://star-history.com/#LokerL/tts-vue&Date) diff --git a/electron-builder.json5 b/electron-builder.json5 index af6e609..5fc9e81 100644 --- a/electron-builder.json5 +++ b/electron-builder.json5 @@ -2,7 +2,7 @@ * @see https://www.electron.build/configuration/configuration */ { - "appId": "YourAppID", + "appId": "vip.loker.tts-vue", "asar": true, "directories": { "output": "release/${version}" @@ -11,7 +11,7 @@ "dist" ], "mac": { - "artifactName": "${productName}_${version}.${ext}", + "artifactName": "${productName}-${version}.${ext}", "target": [ "dmg" ] @@ -25,7 +25,7 @@ ] } ], - "artifactName": "${productName}_${version}.${ext}" + "artifactName": "${productName}-${version}.${ext}" }, "nsis": { "oneClick": false, diff --git a/electron/main/index.ts b/electron/main/index.ts index 840a7c4..d44b7f4 100644 --- a/electron/main/index.ts +++ b/electron/main/index.ts @@ -1,6 +1,11 @@ -import { app, BrowserWindow, shell, ipcMain } from "electron"; +import { app, BrowserWindow, shell, ipcMain, dialog } from "electron"; import { release } from "os"; import { join } from "path"; +import api from "../utils/api"; +import edgeApi from "../utils/edge-api"; +import azureApi from "../utils/azure-api"; +import logger from "../utils/log"; +import { gptApi } from "../utils/gpt-api"; // Disable GPU Acceleration for Windows 7 //if (release().startsWith("6.1")) app.disableHardwareAcceleration(); @@ -35,19 +40,21 @@ const indexHtml = join(ROOT_PATH.dist, "index.html"); async function createWindow() { win = new BrowserWindow({ - width: 900, - // height: 600, + width: 1200, + minWidth: 900, + minHeight: 650, + height: 650, title: "Main window", icon: join(ROOT_PATH.public, "favicon.ico"), - useContentSize: true, + // useContentSize: true, frame: false, - maximizable: false, - minimizable: false, - fullscreenable: false, + // maximizable: false, + // minimizable: false, + // fullscreenable: false, transparent: true, hasShadow: false, - resizable: false, + // resizable: false, webPreferences: { preload, webSecurity: false, @@ -103,7 +110,15 @@ app.on("activate", () => { }); ipcMain.on("min", (e) => win.minimize()); -ipcMain.on("max", (e) => win.maximize()); +ipcMain.on("window-maximize", function () { + if (win.isFullScreen()) { + win.setFullScreen(false); + } else if (win.isMaximized()) { + win.unmaximize(); + } else { + win.maximize(); + } +}); ipcMain.on("close", (e) => win.close()); ipcMain.on("reload", (e) => win.reload()); @@ -124,3 +139,65 @@ ipcMain.handle("open-win", (event, arg) => { }); const ElectronStore = require("electron-store"); ElectronStore.initRenderer(); + +ipcMain.on("log.info", async (event, arg) => { + logger.info(arg); +}); +ipcMain.on("log.error", async (event, arg) => { + logger.error(arg); +}); + +ipcMain.on("openLogs", async (event, arg) => { + shell.openPath(logger.logger.transports.file.getFile().path); +}); +ipcMain.on("openLogFolder", async (event, arg) => { + shell.openPath(logger.logFolder); +}); +ipcMain.on("showItemInFolder", async (event, arg) => { + shell.showItemInFolder(arg); +}); +ipcMain.on("openDevTools", async (event, arg) => { + if (win.webContents.isDevToolsOpened()) { + win.webContents.closeDevTools(); + } else { + win.webContents.openDevTools({ mode: "undocked", activate: true }); + } +}); + +// Get desktop path +ipcMain.on("getDesktopPath", async (event) => { + event.returnValue = app.getPath("desktop"); +}); + +ipcMain.handle("speech", async (event, ssml) => { + const res = api.speechApi(ssml); + return res; +}); + +ipcMain.handle("voices", async (event) => { + const res = api.voicesApi(); + return res; +}); + +ipcMain.handle("edgeApi", async (event, ssml) => { + const res = edgeApi(ssml) + return res; +}); + +ipcMain.handle("azureApi", async (event, ssml, key, region) => { + const res = azureApi(ssml, key, region) + return res; +}); +// const result = await ipcRenderer.invoke("promptGPT", promptGPT, model, key); +ipcMain.handle("promptGPT", async (event, promptGPT, model, key) => { + const res = gptApi(promptGPT, model, key); + return res; +}); + +ipcMain.handle("openFolderSelector", async (event) => { + const path = dialog.showOpenDialogSync(win, { + defaultPath: app.getPath("desktop"), + properties: ["openDirectory"], + }); + return path; +}); diff --git a/electron/utils/api.ts b/electron/utils/api.ts new file mode 100644 index 0000000..4eea741 --- /dev/null +++ b/electron/utils/api.ts @@ -0,0 +1,105 @@ +const axios = require("axios"); +const fs = require("fs"); +const { v4: uuidv4 } = require("uuid"); + +const speechApi = (ssml: string) => { + var data = JSON.stringify({ + ssml, + ttsAudioFormat: "audio-24khz-160kbitrate-mono-mp3", + offsetInPlainText: 0, + properties: { + SpeakTriggerSource: "AccTuningPagePlayButton", + }, + }); + + var config = { + method: "post", + url: "https://southeastasia.api.speech.microsoft.com/accfreetrial/texttospeech/acc/v3.0-beta1/vcg/speak", + responseType: "arraybuffer", + headers: { + authority: "southeastasia.api.speech.microsoft.com", + accept: "*/*", + "accept-language": "zh-CN,zh;q=0.9", + customvoiceconnectionid: uuidv4(), + origin: "https://speech.microsoft.com", + "sec-ch-ua": + '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": '"Windows"', + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "same-site", + "user-agent": + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36", + "content-type": "application/json", + }, + + data: data, + }; + + return new Promise((resolve, reject) => { + axios(config) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + console.error(error); + reject(error); + }); + }); +}; + +const voicesApi = () => { + + const data = JSON.stringify({ + "queryCondition": { + "items": [ + { + "name": "VoiceTypeList", + "value": "StandardVoice", + "operatorKind": "Contains" + } + ] + } + }); + + const config = { + method: 'post', + url: 'https://southeastasia.api.speech.microsoft.com/accfreetrial/texttospeech/acc/v3.0-beta1/vcg/voices', + headers: { + 'authority': 'southeastasia.api.speech.microsoft.com', + 'accept': 'application/json, text/plain, */*', + 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6', + 'customvoiceconnectionid': '97130be0-f304-11ed-b81e-274ad6e5de17', + 'origin': 'https://speech.microsoft.com', + 'sec-ch-ua': '"Microsoft Edge";v="113", "Chromium";v="113", "Not-A.Brand";v="24"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"Windows"', + 'sec-fetch-dest': 'empty', + 'sec-fetch-mode': 'cors', + 'sec-fetch-site': 'same-site', + 'speechstudio-session-id': '951910a0-f304-11ed-b81e-274ad6e5de17', + 'speechstudio-subscriptionsession-id': 'undefined', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.42', + 'x-ms-useragent': 'SpeechStudio/2021.05.001', + 'content-type': 'application/json' + }, + data : data, + timeout: 1500, + }; + return new Promise((resolve, reject) => { + axios(config) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + console.error(error); + reject(error); + }); + }); +} + +export default { + speechApi, + voicesApi, +}; diff --git a/electron/utils/azure-api.ts b/electron/utils/azure-api.ts new file mode 100644 index 0000000..0706372 --- /dev/null +++ b/electron/utils/azure-api.ts @@ -0,0 +1,33 @@ +import logger from "../utils/log"; +import * as sdk from "microsoft-cognitiveservices-speech-sdk"; + +const azureApi = (ssml: string, key: string, region: string) => { + const speechConfig = sdk.SpeechConfig.fromSubscription(key, region); + speechConfig.setProperty(sdk.PropertyId.SpeechServiceResponse_RequestSentenceBoundary, "true"); + var audio_config = sdk.AudioConfig.fromDefaultSpeakerOutput(); + var speechSynthesizer = new sdk.SpeechSynthesizer(speechConfig, audio_config); + return new Promise((resolve, reject) => { + speechSynthesizer.speakSsmlAsync( + ssml, + (result: any) => { + if (result.reason === sdk.ResultReason.SynthesizingAudioCompleted) { + logger.info(`Speech synthesized to speaker for text [${ssml}]`); + resolve(Buffer.from(result.audioData)); + } else { + logger.info("Speech synthesis canceled, " + result.errorDetails + "\nDid you update the subscription info?"); + reject(result); + } + speechSynthesizer.close(); + speechSynthesizer = null; + }, + (err: any) => { + logger.info("Error synthesizing. " + err); + speechSynthesizer.close(); + speechSynthesizer = null; + } + ); + } + ); +} + +export default azureApi; \ No newline at end of file diff --git a/electron/utils/edge-api.ts b/electron/utils/edge-api.ts new file mode 100644 index 0000000..7685cf7 --- /dev/null +++ b/electron/utils/edge-api.ts @@ -0,0 +1,271 @@ +const { randomBytes } = require("crypto"); +const { WebSocket } = require("ws"); +import logger from "../utils/log"; + +const FORMAT_CONTENT_TYPE = new Map([ + ["raw-16khz-16bit-mono-pcm", "audio/basic"], + ["raw-48khz-16bit-mono-pcm", "audio/basic"], + ["raw-8khz-8bit-mono-mulaw", "audio/basic"], + ["raw-8khz-8bit-mono-alaw", "audio/basic"], + + ["raw-16khz-16bit-mono-truesilk", "audio/SILK"], + ["raw-24khz-16bit-mono-truesilk", "audio/SILK"], + + ["riff-16khz-16bit-mono-pcm", "audio/x-wav"], + ["riff-24khz-16bit-mono-pcm", "audio/x-wav"], + ["riff-48khz-16bit-mono-pcm", "audio/x-wav"], + ["riff-8khz-8bit-mono-mulaw", "audio/x-wav"], + ["riff-8khz-8bit-mono-alaw", "audio/x-wav"], + + ["audio-16khz-32kbitrate-mono-mp3", "audio/mpeg"], + ["audio-16khz-64kbitrate-mono-mp3", "audio/mpeg"], + ["audio-16khz-128kbitrate-mono-mp3", "audio/mpeg"], + ["audio-24khz-48kbitrate-mono-mp3", "audio/mpeg"], + ["audio-24khz-96kbitrate-mono-mp3", "audio/mpeg"], + ["audio-24khz-160kbitrate-mono-mp3", "audio/mpeg"], + ["audio-48khz-96kbitrate-mono-mp3", "audio/mpeg"], + ["audio-48khz-192kbitrate-mono-mp3", "audio/mpeg"], + + ["webm-16khz-16bit-mono-opus", "audio/webm; codec=opus"], + ["webm-24khz-16bit-mono-opus", "audio/webm; codec=opus"], + + ["ogg-16khz-16bit-mono-opus", "audio/ogg; codecs=opus; rate=16000"], + ["ogg-24khz-16bit-mono-opus", "audio/ogg; codecs=opus; rate=24000"], + ["ogg-48khz-16bit-mono-opus", "audio/ogg; codecs=opus; rate=48000"], +]); + +class Service { + ws = null; + + executorMap; + bufferMap; + + timer = null; + + constructor() { + this.executorMap = new Map(); + this.bufferMap = new Map(); + } + + async connect() { + const connectionId = randomBytes(16).toString("hex").toLowerCase(); + let url = `wss://speech.platform.bing.com/consumer/speech/synthesize/readaloud/edge/v1?TrustedClientToken=6A5AA1D4EAFF4E9FB37E23D68491D6F4&ConnectionId=${connectionId}`; + let ws = new WebSocket(url, { + host: "speech.platform.bing.com", + origin: "chrome-extension://jdiccldimpdaibmpdkjnbmckianbfold", + headers: { + "User-Agent": + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.66 Safari/537.36 Edg/103.0.1264.44", + }, + }); + return new Promise((resolve, reject) => { + ws.on("open", () => { + resolve(ws); + }); + ws.on("close", (code, reason) => { + // 服务器会自动断开空闲超过30秒的连接 + this.ws = null; + if (this.timer) { + clearTimeout(this.timer); + this.timer = null; + } + for (let [key, value] of this.executorMap) { + value.reject(`连接已关闭: ${reason} ${code}`); + } + this.executorMap.clear(); + this.bufferMap.clear(); + logger.info(`连接已关闭: ${reason} ${code}`); + }); + + ws.on("message", (message, isBinary) => { + let pattern = /X-RequestId:(?[a-z|0-9]*)/; + if (!isBinary) { + let data = message.toString(); + if (data.includes("Path:turn.start")) { + // 开始传输 + let matches = data.match(pattern); + let requestId = matches.groups.id; + this.bufferMap.set(requestId, Buffer.from([])); + } else if (data.includes("Path:turn.end")) { + // 结束传输 + let matches = data.match(pattern); + let requestId = matches.groups.id; + + let executor = this.executorMap.get(requestId); + if (executor) { + this.executorMap.delete(matches.groups.id); + let result = this.bufferMap.get(requestId); + executor.resolve(result); + logger.info(`传输完成:${requestId}……`); + } else { + logger.info(`请求已被丢弃:${requestId}`); + } + } + } else if (isBinary) { + let separator = "Path:audio\r\n"; + let data = message; + let contentIndex = data.indexOf(separator) + separator.length; + + let headers = data.slice(2, contentIndex).toString(); + let matches = headers.match(pattern); + let requestId = matches.groups.id; + + let content = data.slice(contentIndex); + let buffer = this.bufferMap.get(requestId); + if (buffer) { + buffer = Buffer.concat([buffer, content], buffer.length+content.length); + this.bufferMap.set(requestId, buffer); + } else { + logger.info(`请求已被丢弃:${requestId}`); + } + } + }); + ws.on("error", (error) => { + logger.error(`连接失败: ${error}`); + reject(`连接失败: ${error}`); + }); + }); + } + + async convert(ssml, format) { + if (this.ws == null || this.ws.readyState != WebSocket.OPEN) { + logger.info("准备连接服务器……"); + let connection = await this.connect(); + this.ws = connection; + logger.info("连接成功!"); + } + const requestId = randomBytes(16).toString("hex").toLowerCase(); + let result = new Promise((resolve, reject) => { + // 等待服务器返回后这个方法才会返回结果 + this.executorMap.set(requestId, { + resolve, + reject, + }); + // 发送配置消息 + let configData = { + context: { + synthesis: { + audio: { + metadataoptions: { + sentenceBoundaryEnabled: "false", + wordBoundaryEnabled: "false", + }, + outputFormat: format, + }, + }, + }, + }; + let configMessage = + `X-Timestamp:${Date()}\r\n` + + "Content-Type:application/json; charset=utf-8\r\n" + + "Path:speech.config\r\n\r\n" + + JSON.stringify(configData); + this.ws.send(configMessage, (configError) => { + if (configError) { + logger.error(`配置请求发送失败:${requestId}\n`); + } + + // 发送SSML消息 + let ssmlMessage = + `X-Timestamp:${Date()}\r\n` + + `X-RequestId:${requestId}\r\n` + + `Content-Type:application/ssml+xml\r\n` + + `Path:ssml\r\n\r\n` + + ssml; + this.ws.send(ssmlMessage, (ssmlError) => { + if (ssmlError) { + logger.error(`SSML消息发送失败:${requestId}\n`); + } + }); + }); + }); + + // 收到请求,清除超时定时器 + if (this.timer) { + logger.info("收到新的请求,清除超时定时器"); + clearTimeout(this.timer); + } + // 设置定时器,超过10秒没有收到请求,主动断开连接 + this.timer = setTimeout(() => { + if (this.ws && this.ws.readyState == WebSocket.OPEN) { + this.ws.close(1000); + this.timer = null; + } + }, 10000); + + let data = await Promise.race([ + result, + new Promise((resolve, reject) => { + // 如果超过 20 秒没有返回结果,则清除请求并返回超时 + setTimeout(() => { + this.executorMap.delete(requestId); + this.bufferMap.delete(requestId); + reject("转换超时"); + }, 10000); + }), + ]); + return data; + } +} + +const service = new Service(); +const retry = async function (fn, times, errorFn, failedMessage) { + let reason = { + message: failedMessage ?? "多次尝试后失败", + errors: [], + }; + for (let i = 0; i < times; i++) { + try { + return await fn(); + } catch (error) { + if (errorFn) { + errorFn(i, error); + } + reason.errors.push(error); + } + } + throw reason; +}; + +const ra = async (text) => { + try { + // let format = "webm-24khz-16bit-mono-opus"; + let format = "audio-24khz-48kbitrate-mono-mp3"; + if (Array.isArray(format)) { + throw `无效的音频格式:${format}`; + } + if (!FORMAT_CONTENT_TYPE.has(format)) { + throw `无效的音频格式:${format}`; + } + + let ssml = text; + if (ssml == null) { + throw `转换参数无效`; + } + let result = await retry( + async () => { + let result = await service.convert(ssml, format); + return result; + }, + 3, + (index, error) => { + logger.error(`第${index}次转换失败:${error}`); + }, + "服务器多次尝试后转换失败" + ); + return result; + // response.sendDate = true; + // response + // .status(200) + // .setHeader("Content-Type", FORMAT_CONTENT_TYPE.get(format)); + // response.end(result); + } catch (error) { + logger.error(`发生错误, ${error.message}`); + // response.status(503).json(error); + } +}; + +// ra( +// ` 如果喜欢这个项目的话请点个 Star 吧。 ` +// ); +export default ra; \ No newline at end of file diff --git a/electron/utils/gpt-api.ts b/electron/utils/gpt-api.ts new file mode 100644 index 0000000..87012a4 --- /dev/null +++ b/electron/utils/gpt-api.ts @@ -0,0 +1,19 @@ +import OpenAI from 'openai'; +import logger from "../utils/log"; + +const gptApi = async (promptGPT: string, model: string, key: string) => { + logger.info(`promptGPT: ${promptGPT}`); + const openai = new OpenAI({ + apiKey: key, + }); + logger.info(`model: ${model}`); + const chatCompletion = await openai.chat.completions.create({ + messages: [{ role: 'user', content: promptGPT }], + model: model, + }); + logger.info(`chatCompletion: ${JSON.stringify(chatCompletion)}`); + + return chatCompletion.choices[0].message.content; +} + +export { gptApi }; \ No newline at end of file diff --git a/electron/utils/log.ts b/electron/utils/log.ts new file mode 100644 index 0000000..1240fc6 --- /dev/null +++ b/electron/utils/log.ts @@ -0,0 +1,26 @@ +import logger from "electron-log"; +import { app } from "electron"; + +logger.transports.file.level = "debug"; +logger.transports.file.maxSize = 1002430; // 10M +logger.transports.file.format = + "[{y}-{m}-{d} {h}:{i}:{s}.{ms}] [{level}]{scope} {text}"; +const date = new Date(); +const now_date = + date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate(); +const logFolder = app.getPath("userData") + "\\logs\\"; +logger.transports.file.file = logFolder + now_date + ".log"; +logger.transports.console.level = false; +export default { + logger, + logFolder, + info(param) { + logger.info(param); + }, + warn(param) { + logger.warn(param); + }, + error(param) { + logger.error(param); + }, +}; diff --git a/index.html b/index.html index 275b440..18c7e48 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,9 @@ - + + + Vite App diff --git a/package-lock.json b/package-lock.json index 4811f59..b1ad00b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,30 +1,38 @@ { - "name": "electron-vue-vite", - "version": "2.0.0", + "name": "tts-vue", + "version": "1.9.15", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "electron-vue-vite", - "version": "2.0.0", + "name": "tts-vue", + "version": "1.9.15", "license": "MIT", "dependencies": { - "axios": "^0.27.2", - "electron-store": "^8.0.2", - "element-plus": "^2.2.10", - "mitt": "^3.0.0", - "nodejs-websocket": "^1.7.2", - "uuid": "^8.3.2" + "@ffmpeg-installer/ffmpeg": "1.1.0", + "@types/ws": "8.5.4", + "axios": "0.27.2", + "electron-log": "4.4.8", + "electron-store": "8.0.2", + "element-plus": "2.2.9", + "fluent-ffmpeg": "2.1.2", + "microsoft-cognitiveservices-speech-sdk": "1.30.1", + "nodejs-websocket": "1.7.2", + "openai": "^4.0.0", + "pinia": "2.0.17", + "uuid": "8.3.2", + "vue-i18n": "9.6.5", + "ws": "8.13.0" }, "devDependencies": { - "@vitejs/plugin-vue": "^2.3.3", - "electron": "^19.0.8", - "electron-builder": "^23.1.0", - "typescript": "^4.7.4", - "vite": "^2.9.13", - "vite-plugin-electron": "^0.8.1", - "vue": "^3.2.37", - "vue-tsc": "^0.38.3" + "@vitejs/plugin-vue": "2.3.3", + "electron": "19.1.9", + "electron-builder": "23.1.0", + "typescript": "4.7.4", + "vite": "2.9.13", + "vite-plugin-electron": "0.8.1", + "vue": "3.2.37", + "vue-tsc": "0.38.3" }, "engines": { "node": ">=14.17.0" @@ -150,6 +158,123 @@ "vue": "^3.2.0" } }, + "node_modules/@ffmpeg-installer/darwin-arm64": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@ffmpeg-installer/darwin-arm64/-/darwin-arm64-4.1.5.tgz", + "integrity": "sha512-hYqTiP63mXz7wSQfuqfFwfLOfwwFChUedeCVKkBtl/cliaTM7/ePI9bVzfZ2c+dWu3TqCwLDRWNSJ5pqZl8otA==", + "cpu": [ + "arm64" + ], + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@ffmpeg-installer/darwin-x64": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@ffmpeg-installer/darwin-x64/-/darwin-x64-4.1.0.tgz", + "integrity": "sha512-Z4EyG3cIFjdhlY8wI9aLUXuH8nVt7E9SlMVZtWvSPnm2sm37/yC2CwjUzyCQbJbySnef1tQwGG2Sx+uWhd9IAw==", + "cpu": [ + "x64" + ], + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@ffmpeg-installer/ffmpeg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@ffmpeg-installer/ffmpeg/-/ffmpeg-1.1.0.tgz", + "integrity": "sha512-Uq4rmwkdGxIa9A6Bd/VqqYbT7zqh1GrT5/rFwCwKM70b42W5gIjWeVETq6SdcL0zXqDtY081Ws/iJWhr1+xvQg==", + "optionalDependencies": { + "@ffmpeg-installer/darwin-arm64": "4.1.5", + "@ffmpeg-installer/darwin-x64": "4.1.0", + "@ffmpeg-installer/linux-arm": "4.1.3", + "@ffmpeg-installer/linux-arm64": "4.1.4", + "@ffmpeg-installer/linux-ia32": "4.1.0", + "@ffmpeg-installer/linux-x64": "4.1.0", + "@ffmpeg-installer/win32-ia32": "4.1.0", + "@ffmpeg-installer/win32-x64": "4.1.0" + } + }, + "node_modules/@ffmpeg-installer/linux-arm": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-arm/-/linux-arm-4.1.3.tgz", + "integrity": "sha512-NDf5V6l8AfzZ8WzUGZ5mV8O/xMzRag2ETR6+TlGIsMHp81agx51cqpPItXPib/nAZYmo55Bl2L6/WOMI3A5YRg==", + "cpu": [ + "arm" + ], + "hasInstallScript": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@ffmpeg-installer/linux-arm64": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-arm64/-/linux-arm64-4.1.4.tgz", + "integrity": "sha512-dljEqAOD0oIM6O6DxBW9US/FkvqvQwgJ2lGHOwHDDwu/pX8+V0YsDL1xqHbj1DMX/+nP9rxw7G7gcUvGspSoKg==", + "cpu": [ + "arm64" + ], + "hasInstallScript": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@ffmpeg-installer/linux-ia32": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-ia32/-/linux-ia32-4.1.0.tgz", + "integrity": "sha512-0LWyFQnPf+Ij9GQGD034hS6A90URNu9HCtQ5cTqo5MxOEc7Rd8gLXrJvn++UmxhU0J5RyRE9KRYstdCVUjkNOQ==", + "cpu": [ + "ia32" + ], + "hasInstallScript": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@ffmpeg-installer/linux-x64": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-x64/-/linux-x64-4.1.0.tgz", + "integrity": "sha512-Y5BWhGLU/WpQjOArNIgXD3z5mxxdV8c41C+U15nsE5yF8tVcdCGet5zPs5Zy3Ta6bU7haGpIzryutqCGQA/W8A==", + "cpu": [ + "x64" + ], + "hasInstallScript": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@ffmpeg-installer/win32-ia32": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@ffmpeg-installer/win32-ia32/-/win32-ia32-4.1.0.tgz", + "integrity": "sha512-FV2D7RlaZv/lrtdhaQ4oETwoFUsUjlUiasiZLDxhEUPdNDWcH1OU9K1xTvqz+OXLdsmYelUDuBS/zkMOTtlUAw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@ffmpeg-installer/win32-x64": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@ffmpeg-installer/win32-x64/-/win32-x64-4.1.0.tgz", + "integrity": "sha512-Drt5u2vzDnIONf4ZEkKtFlbvwj6rI3kxw1Ck9fpudmtgaZIHD4ucsWB2lCZBXRxJgXR+2IMSti+4rtM4C4rXgg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@floating-ui/core": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-0.7.3.tgz", @@ -163,6 +288,47 @@ "@floating-ui/core": "^0.7.3" } }, + "node_modules/@intlify/core-base": { + "version": "9.6.5", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.6.5.tgz", + "integrity": "sha512-LzbGXiZkMWPIHnHI0g6q554S87Cmh2mmCmjytK/3pDQfjI84l+dgGoeQuKj02q7EbULRuUUgYVZVqAwEUawXGg==", + "dependencies": { + "@intlify/message-compiler": "9.6.5", + "@intlify/shared": "9.6.5" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "9.6.5", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.6.5.tgz", + "integrity": "sha512-WeJ499thIj0p7JaIO1V3JaJbqdqfBykS5R8fElFs5hNeotHtPAMBs4IiA+8/KGFkAbjJusgFefCq6ajP7F7+4Q==", + "dependencies": { + "@intlify/shared": "9.6.5", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/shared": { + "version": "9.6.5", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.6.5.tgz", + "integrity": "sha512-gD7Ey47Xi4h/t6P+S04ymMSoA3wVRxGqjxuIMglwRO8POki9h164Epu2N8wk/GHXM/hR6ZGcsx2HArCCENjqSQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, "node_modules/@malept/cross-spawn-promise": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", @@ -334,8 +500,16 @@ "node_modules/@types/node": { "version": "16.11.45", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.45.tgz", - "integrity": "sha512-3rKg/L5x0rofKuuUt5zlXzOnKyIHXmIu5R8A0TuNDMF2062/AOIDBciFIjToLEJ/9F9DzkHNot+BpNsMI1OLdQ==", - "dev": true + "integrity": "sha512-3rKg/L5x0rofKuuUt5zlXzOnKyIHXmIu5R8A0TuNDMF2062/AOIDBciFIjToLEJ/9F9DzkHNot+BpNsMI1OLdQ==" + }, + "node_modules/@types/node-fetch": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.0" + } }, "node_modules/@types/plist": { "version": "3.0.2", @@ -360,6 +534,14 @@ "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.14.tgz", "integrity": "sha512-5d2RhCard1nQUC3aHcq/gHzWYO6K0WJmAbjO7mQJgCQKtZpgXxv1rOM6O/dBDhDYYVutk1sciOgNSe+5YyfM8A==" }, + "node_modules/@types/ws": { + "version": "8.5.4", + "resolved": "https://registry.npmmirror.com/@types/ws/-/ws-8.5.4.tgz", + "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/yargs": { "version": "17.0.10", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", @@ -389,42 +571,44 @@ } }, "node_modules/@volar/code-gen": { - "version": "0.38.9", - "resolved": "https://registry.npmjs.org/@volar/code-gen/-/code-gen-0.38.9.tgz", - "integrity": "sha512-n6LClucfA+37rQeskvh9vDoZV1VvCVNy++MAPKj2dT4FT+Fbmty/SDQqnsEBtdEe6E3OQctFvA/IcKsx3Mns0A==", + "version": "0.38.3", + "resolved": "https://registry.npmjs.org/@volar/code-gen/-/code-gen-0.38.3.tgz", + "integrity": "sha512-0yCkDtaxffyfC9e2dSLGXJmG3b0rCfTa6vqxjr70ZFTtcf/VytmMBwboFicnm+Zoen9EI8wUNfw4upw9Slz5RQ==", "dev": true, "dependencies": { - "@volar/source-map": "0.38.9" + "@volar/source-map": "0.38.3" } }, "node_modules/@volar/source-map": { - "version": "0.38.9", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-0.38.9.tgz", - "integrity": "sha512-ba0UFoHDYry+vwKdgkWJ6xlQT+8TFtZg1zj9tSjj4PykW1JZDuM0xplMotLun4h3YOoYfY9K1huY5gvxmrNLIw==", + "version": "0.38.3", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-0.38.3.tgz", + "integrity": "sha512-8aVM+r4lsHnLjhvnjQ6kn4J++3I6VXtJblcGzWuIOn9M8pJmRGW6Si/eOVjayLWfvPCxXUM7e3sg4Nm2tufTmg==", "dev": true }, "node_modules/@volar/vue-code-gen": { - "version": "0.38.9", - "resolved": "https://registry.npmjs.org/@volar/vue-code-gen/-/vue-code-gen-0.38.9.tgz", - "integrity": "sha512-tzj7AoarFBKl7e41MR006ncrEmNPHALuk8aG4WdDIaG387X5//5KhWC5Ff3ZfB2InGSeNT+CVUd74M0gS20rjA==", + "version": "0.38.3", + "resolved": "https://registry.npmjs.org/@volar/vue-code-gen/-/vue-code-gen-0.38.3.tgz", + "integrity": "sha512-euVuKtwV/KurRSVwNz5bZbCBJLwVOE56+Uh2PhsHcAM5Wzlt82cwLj07FbFagCftoC3IC/bsn43yuLc2I+ZjAQ==", + "deprecated": "WARNING: This project has been renamed to @vue/language-core. Install using @vue/language-core instead.", "dev": true, "dependencies": { - "@volar/code-gen": "0.38.9", - "@volar/source-map": "0.38.9", + "@volar/code-gen": "0.38.3", + "@volar/source-map": "0.38.3", "@vue/compiler-core": "^3.2.37", "@vue/compiler-dom": "^3.2.37", "@vue/shared": "^3.2.37" } }, "node_modules/@volar/vue-typescript": { - "version": "0.38.9", - "resolved": "https://registry.npmjs.org/@volar/vue-typescript/-/vue-typescript-0.38.9.tgz", - "integrity": "sha512-iJMQGU91ADi98u8V1vXd2UBmELDAaeSP0ZJaFjwosClQdKlJQYc6MlxxKfXBZisHqfbhdtrGRyaryulnYtliZw==", + "version": "0.38.3", + "resolved": "https://registry.npmjs.org/@volar/vue-typescript/-/vue-typescript-0.38.3.tgz", + "integrity": "sha512-rXh4RQBZrNfkiSnpBYbHrsxg7vBbZeYsGFgE/n8FVLcZfGlelsdXFIINsr/aZGUCJre9I15wQ44eEmXnc4+qww==", + "deprecated": "WARNING: This project has been renamed to @vue/typescript. Install using @vue/typescript instead.", "dev": true, "dependencies": { - "@volar/code-gen": "0.38.9", - "@volar/source-map": "0.38.9", - "@volar/vue-code-gen": "0.38.9", + "@volar/code-gen": "0.38.3", + "@volar/source-map": "0.38.3", + "@volar/vue-code-gen": "0.38.3", "@vue/compiler-sfc": "^3.2.37", "@vue/reactivity": "^3.2.37" } @@ -475,6 +659,11 @@ "@vue/shared": "3.2.37" } }, + "node_modules/@vue/devtools-api": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.1.tgz", + "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==" + }, "node_modules/@vue/reactivity": { "version": "3.2.37", "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.37.tgz", @@ -619,11 +808,21 @@ "integrity": "sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==", "dev": true }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, "dependencies": { "debug": "4" }, @@ -631,6 +830,17 @@ "node": ">= 6.0.0" } }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -868,8 +1078,7 @@ "node_modules/async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, "node_modules/async-exit-hook": { "version": "2.0.1", @@ -922,6 +1131,11 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base-64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", + "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==" + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -942,6 +1156,16 @@ } ] }, + "node_modules/bent": { + "version": "7.3.12", + "resolved": "https://registry.npmjs.org/bent/-/bent-7.3.12.tgz", + "integrity": "sha512-T3yrKnVGB63zRuoco/7Ybl7BwwGZR0lceoVG5XmQyMIH9s19SV5m+a8qam4if0zQuAmOQTyPTPmsQBdAorGK3w==", + "dependencies": { + "bytesish": "^0.4.1", + "caseless": "~0.12.0", + "is-stream": "^2.0.0" + } + }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -1152,6 +1376,11 @@ "node": ">= 10.0.0" } }, + "node_modules/bytesish": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/bytesish/-/bytesish-0.4.4.tgz", + "integrity": "sha512-i4uu6M4zuMUiyfZN4RU2+i9+peJh//pXhd9x1oSe1LBkZ3LEbCoygu8W0bXTukU1Jme2txKuotpCZRaC3FLxcQ==" + }, "node_modules/cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -1206,6 +1435,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1222,6 +1456,14 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "engines": { + "node": "*" + } + }, "node_modules/chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", @@ -1501,6 +1743,14 @@ "node": ">= 8" } }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "engines": { + "node": "*" + } + }, "node_modules/crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", @@ -1538,7 +1788,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -1610,6 +1859,15 @@ "dev": true, "optional": true }, + "node_modules/digest-fetch": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/digest-fetch/-/digest-fetch-1.3.0.tgz", + "integrity": "sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==", + "dependencies": { + "base-64": "^0.1.0", + "md5": "^2.3.0" + } + }, "node_modules/dir-compare": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz", @@ -1776,9 +2034,9 @@ } }, "node_modules/electron": { - "version": "19.0.9", - "resolved": "https://registry.npmjs.org/electron/-/electron-19.0.9.tgz", - "integrity": "sha512-ooEwrv8Y7NSzdhKcl6kPCYecnzcg5nFWuS5ryG+VFH3MMBR8zXh9nW2wLsZrBz6OGUxXrcc5BKBC7dA8C6RhGQ==", + "version": "19.1.9", + "resolved": "https://registry.npmjs.org/electron/-/electron-19.1.9.tgz", + "integrity": "sha512-XT5LkTzIHB+ZtD3dTmNnKjVBWrDWReCKt9G1uAFLz6uJMEVcIUiYO+fph5pLXETiBw/QZBx8egduMEfIccLx+g==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -1855,6 +2113,11 @@ "node": ">= 10.0.0" } }, + "node_modules/electron-log": { + "version": "4.4.8", + "resolved": "https://registry.npmmirror.com/electron-log/-/electron-log-4.4.8.tgz", + "integrity": "sha512-QQ4GvrXO+HkgqqEOYbi+DHL7hj5JM+nHi/j+qrN9zeeXVKy8ZABgbu4CnG+BBqDZ2+tbeq9tUC4DZfIWFU5AZA==" + }, "node_modules/electron-osx-sign": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.6.0.tgz", @@ -1977,9 +2240,9 @@ } }, "node_modules/element-plus": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.2.10.tgz", - "integrity": "sha512-hJ+LlbRN3POu4Idl1LXB+SHSWdi+wwmdsoDXdQT2ynGuwzZsMYiusOooYXyEsPlrizeLibdnNGNDx4TIjXQvUg==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.2.9.tgz", + "integrity": "sha512-jYbL0JkCdv95rkT6trZJjCAizLPySa0qcd2cgq+57SKQnCZAcNDDq4GbTuFRnNavdoeCJnuM3HIficTIUpsMOQ==", "dependencies": { "@ctrl/tinycolor": "^3.4.1", "@element-plus/icons-vue": "^2.0.6", @@ -2437,6 +2700,14 @@ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/extract-zip": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", @@ -2538,6 +2809,29 @@ "node": ">=6" } }, + "node_modules/fluent-ffmpeg": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fluent-ffmpeg/-/fluent-ffmpeg-2.1.2.tgz", + "integrity": "sha512-IZTB4kq5GK0DPp7sGQ0q/BWurGHffRtQQwVkiqDgeO6wYJLLV5ZhgNOQ65loZxxuPMKZKZcICCUnaGtlxBiR0Q==", + "dependencies": { + "async": ">=0.2.9", + "which": "^1.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fluent-ffmpeg/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/follow-redirects": { "version": "1.15.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", @@ -2570,6 +2864,23 @@ "node": ">= 6" } }, + "node_modules/form-data-encoder": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", + "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==" + }, + "node_modules/formdata-node": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", + "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "dependencies": { + "node-domexception": "1.0.0", + "web-streams-polyfill": "4.0.0-beta.3" + }, + "engines": { + "node": ">= 12.20" + } + }, "node_modules/fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -2903,6 +3214,14 @@ "node": ">= 6" } }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dependencies": { + "ms": "^2.0.0" + } + }, "node_modules/iconv-corefoundation": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", @@ -2993,6 +3312,11 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "node_modules/is-ci": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", @@ -3071,6 +3395,17 @@ "node": ">=8" } }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -3104,8 +3439,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/jake": { "version": "10.8.5", @@ -3297,11 +3631,85 @@ "node": ">=10" } }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, "node_modules/memoize-one": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" }, + "node_modules/microsoft-cognitiveservices-speech-sdk": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/microsoft-cognitiveservices-speech-sdk/-/microsoft-cognitiveservices-speech-sdk-1.30.1.tgz", + "integrity": "sha512-pR/abkc55hvUOG1TSmJ79Mt+A+/9R5TVeuvMaJCcvHYroIPVdG5eXqzIiZNxuy5P0x+YICYnPSOQMoHyPgtN1Q==", + "dependencies": { + "agent-base": "^6.0.1", + "bent": "^7.3.12", + "https-proxy-agent": "^4.0.0", + "uuid": "^9.0.0", + "ws": "^7.5.6" + } + }, + "node_modules/microsoft-cognitiveservices-speech-sdk/node_modules/https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "dependencies": { + "agent-base": "5", + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/microsoft-cognitiveservices-speech-sdk/node_modules/https-proxy-agent/node_modules/agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/microsoft-cognitiveservices-speech-sdk/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/microsoft-cognitiveservices-speech-sdk/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", @@ -3393,11 +3801,6 @@ "node": ">= 8" } }, - "node_modules/mitt": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", - "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==" - }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -3413,8 +3816,7 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/nanoid": { "version": "3.3.4", @@ -3434,6 +3836,43 @@ "dev": true, "optional": true }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/nodejs-websocket": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/nodejs-websocket/-/nodejs-websocket-1.7.2.tgz", @@ -3511,6 +3950,32 @@ "node": ">=6" } }, + "node_modules/openai": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.0.0.tgz", + "integrity": "sha512-UHv70gIw20pxu9tiUueE9iS+4U4eTGiTgQr+zlJ5aX4oj6LUUp+7mBn0xAqilawftwUB/biohPth2vcZFmoNYw==", + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "digest-fetch": "^1.3.0", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7" + }, + "bin": { + "openai": "bin/cli" + } + }, + "node_modules/openai/node_modules/@types/node": { + "version": "18.18.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.9.tgz", + "integrity": "sha512-0f5klcuImLnG4Qreu9hPj/rEfFq6YRc5n2mAjSsH+ec/mJL+3voBH0+8T7o8RpFjH7ovc+TRsL/c7OYIQsPTfQ==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -3621,6 +4086,56 @@ "node": ">=4" } }, + "node_modules/pinia": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.0.17.tgz", + "integrity": "sha512-AtwLwEWQgIjofjgeFT+nxbnK5lT2QwQjaHNEDqpsi2AiCwf/NY78uWTeHUyEhiiJy8+sBmw0ujgQMoQbWiZDfA==", + "dependencies": { + "@vue/devtools-api": "^6.2.1", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@vue/composition-api": "^1.4.0", + "typescript": ">=4.4.4", + "vue": "^2.6.14 || ^3.2.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia/node_modules/vue-demi": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.6.tgz", + "integrity": "sha512-02NYpxgyGE2kKGegRPYlNQSL1UWfA/+JqvzhGCOYjhfbLWXU5QQX0+9pAm/R2sCOPKr5NBxVIab7fvFU0B1RxQ==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, "node_modules/pkg-up": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", @@ -4245,6 +4760,11 @@ "node": ">=6" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, "node_modules/truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", @@ -4296,7 +4816,7 @@ "version": "4.7.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true, + "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -4305,6 +4825,11 @@ "node": ">=4.2.0" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -4450,9 +4975,9 @@ "optional": true }, "node_modules/vite": { - "version": "2.9.14", - "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.14.tgz", - "integrity": "sha512-P/UCjSpSMcE54r4mPak55hWAZPlyfS369svib/gpmz8/01L822lMPOJ/RYW6tLCe1RPvMvOsJ17erf55bKp4Hw==", + "version": "2.9.13", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.13.tgz", + "integrity": "sha512-AsOBAaT0AD7Mhe8DuK+/kE4aWYFMx/i0ZNi98hJclxb4e0OhQcZYUrvLjIaQ8e59Ui7txcvKMiJC1yftqpQoDw==", "dev": true, "dependencies": { "esbuild": "^0.14.27", @@ -4487,9 +5012,9 @@ } }, "node_modules/vite-plugin-electron": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/vite-plugin-electron/-/vite-plugin-electron-0.8.3.tgz", - "integrity": "sha512-yBYGyJfSL4Sx98SgoAJC46LhLYCukN2nYfU+tWPDz7CkfAMFeeaoeyJ7h1Vozs6VGz9Dbx7QZ4AyfniVLt2aAg==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/vite-plugin-electron/-/vite-plugin-electron-0.8.1.tgz", + "integrity": "sha512-so13n0ytqaeWxK7bCza8G/qMxJSKYSunyAv4sNlPV9ahxyKmZMNaflWZ5mKBhTp2p7j3VJ0SapTzUDrHN/TjJQ==", "dev": true, "dependencies": { "vite-plugin-electron-renderer": "0.8.1" @@ -4513,13 +5038,32 @@ "@vue/shared": "3.2.37" } }, + "node_modules/vue-i18n": { + "version": "9.6.5", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.6.5.tgz", + "integrity": "sha512-dpUEjKHg7pEsaS7ZPPxp1CflaR7bGmsvZJEhnszHPKl9OTNyno5j/DvMtMSo41kpddq4felLA7GK2prjpnXVlw==", + "dependencies": { + "@intlify/core-base": "9.6.5", + "@intlify/shared": "9.6.5", + "@vue/devtools-api": "^6.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, "node_modules/vue-tsc": { - "version": "0.38.9", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-0.38.9.tgz", - "integrity": "sha512-Yoy5phgvGqyF98Fb4mYqboR4Q149jrdcGv5kSmufXJUq++RZJ2iMVG0g6zl+v3t4ORVWkQmRpsV4x2szufZ0LQ==", + "version": "0.38.3", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-0.38.3.tgz", + "integrity": "sha512-mWlneSF+PG2kXYGJI12N4XEAG4ljAkae7IcB93fspqSkEt/oKwDbWy3DzcPSgUm0LsXqOUprTMaZkwDVSRBIvw==", "dev": true, "dependencies": { - "@volar/vue-typescript": "0.38.9" + "@volar/vue-typescript": "0.38.3" }, "bin": { "vue-tsc": "bin/vue-tsc.js" @@ -4528,6 +5072,28 @@ "typescript": "*" } }, + "node_modules/web-streams-polyfill": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4590,6 +5156,26 @@ "typedarray-to-buffer": "^3.1.5" } }, + "node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmmirror.com/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", @@ -4749,6 +5335,69 @@ "integrity": "sha512-lPpG8hYkjL/Z97DH5Ei6w6o22Z4YdNglWCNYOPcB33JCF2A4wye6HFgSI7hEt9zdLyxlSpiqtgf9XcYU+m5mew==", "requires": {} }, + "@ffmpeg-installer/darwin-arm64": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@ffmpeg-installer/darwin-arm64/-/darwin-arm64-4.1.5.tgz", + "integrity": "sha512-hYqTiP63mXz7wSQfuqfFwfLOfwwFChUedeCVKkBtl/cliaTM7/ePI9bVzfZ2c+dWu3TqCwLDRWNSJ5pqZl8otA==", + "optional": true + }, + "@ffmpeg-installer/darwin-x64": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@ffmpeg-installer/darwin-x64/-/darwin-x64-4.1.0.tgz", + "integrity": "sha512-Z4EyG3cIFjdhlY8wI9aLUXuH8nVt7E9SlMVZtWvSPnm2sm37/yC2CwjUzyCQbJbySnef1tQwGG2Sx+uWhd9IAw==", + "optional": true + }, + "@ffmpeg-installer/ffmpeg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@ffmpeg-installer/ffmpeg/-/ffmpeg-1.1.0.tgz", + "integrity": "sha512-Uq4rmwkdGxIa9A6Bd/VqqYbT7zqh1GrT5/rFwCwKM70b42W5gIjWeVETq6SdcL0zXqDtY081Ws/iJWhr1+xvQg==", + "requires": { + "@ffmpeg-installer/darwin-arm64": "4.1.5", + "@ffmpeg-installer/darwin-x64": "4.1.0", + "@ffmpeg-installer/linux-arm": "4.1.3", + "@ffmpeg-installer/linux-arm64": "4.1.4", + "@ffmpeg-installer/linux-ia32": "4.1.0", + "@ffmpeg-installer/linux-x64": "4.1.0", + "@ffmpeg-installer/win32-ia32": "4.1.0", + "@ffmpeg-installer/win32-x64": "4.1.0" + } + }, + "@ffmpeg-installer/linux-arm": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-arm/-/linux-arm-4.1.3.tgz", + "integrity": "sha512-NDf5V6l8AfzZ8WzUGZ5mV8O/xMzRag2ETR6+TlGIsMHp81agx51cqpPItXPib/nAZYmo55Bl2L6/WOMI3A5YRg==", + "optional": true + }, + "@ffmpeg-installer/linux-arm64": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-arm64/-/linux-arm64-4.1.4.tgz", + "integrity": "sha512-dljEqAOD0oIM6O6DxBW9US/FkvqvQwgJ2lGHOwHDDwu/pX8+V0YsDL1xqHbj1DMX/+nP9rxw7G7gcUvGspSoKg==", + "optional": true + }, + "@ffmpeg-installer/linux-ia32": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-ia32/-/linux-ia32-4.1.0.tgz", + "integrity": "sha512-0LWyFQnPf+Ij9GQGD034hS6A90URNu9HCtQ5cTqo5MxOEc7Rd8gLXrJvn++UmxhU0J5RyRE9KRYstdCVUjkNOQ==", + "optional": true + }, + "@ffmpeg-installer/linux-x64": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-x64/-/linux-x64-4.1.0.tgz", + "integrity": "sha512-Y5BWhGLU/WpQjOArNIgXD3z5mxxdV8c41C+U15nsE5yF8tVcdCGet5zPs5Zy3Ta6bU7haGpIzryutqCGQA/W8A==", + "optional": true + }, + "@ffmpeg-installer/win32-ia32": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@ffmpeg-installer/win32-ia32/-/win32-ia32-4.1.0.tgz", + "integrity": "sha512-FV2D7RlaZv/lrtdhaQ4oETwoFUsUjlUiasiZLDxhEUPdNDWcH1OU9K1xTvqz+OXLdsmYelUDuBS/zkMOTtlUAw==", + "optional": true + }, + "@ffmpeg-installer/win32-x64": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@ffmpeg-installer/win32-x64/-/win32-x64-4.1.0.tgz", + "integrity": "sha512-Drt5u2vzDnIONf4ZEkKtFlbvwj6rI3kxw1Ck9fpudmtgaZIHD4ucsWB2lCZBXRxJgXR+2IMSti+4rtM4C4rXgg==", + "optional": true + }, "@floating-ui/core": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-0.7.3.tgz", @@ -4762,6 +5411,29 @@ "@floating-ui/core": "^0.7.3" } }, + "@intlify/core-base": { + "version": "9.6.5", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.6.5.tgz", + "integrity": "sha512-LzbGXiZkMWPIHnHI0g6q554S87Cmh2mmCmjytK/3pDQfjI84l+dgGoeQuKj02q7EbULRuUUgYVZVqAwEUawXGg==", + "requires": { + "@intlify/message-compiler": "9.6.5", + "@intlify/shared": "9.6.5" + } + }, + "@intlify/message-compiler": { + "version": "9.6.5", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.6.5.tgz", + "integrity": "sha512-WeJ499thIj0p7JaIO1V3JaJbqdqfBykS5R8fElFs5hNeotHtPAMBs4IiA+8/KGFkAbjJusgFefCq6ajP7F7+4Q==", + "requires": { + "@intlify/shared": "9.6.5", + "source-map-js": "^1.0.2" + } + }, + "@intlify/shared": { + "version": "9.6.5", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.6.5.tgz", + "integrity": "sha512-gD7Ey47Xi4h/t6P+S04ymMSoA3wVRxGqjxuIMglwRO8POki9h164Epu2N8wk/GHXM/hR6ZGcsx2HArCCENjqSQ==" + }, "@malept/cross-spawn-promise": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", @@ -4897,8 +5569,16 @@ "@types/node": { "version": "16.11.45", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.45.tgz", - "integrity": "sha512-3rKg/L5x0rofKuuUt5zlXzOnKyIHXmIu5R8A0TuNDMF2062/AOIDBciFIjToLEJ/9F9DzkHNot+BpNsMI1OLdQ==", - "dev": true + "integrity": "sha512-3rKg/L5x0rofKuuUt5zlXzOnKyIHXmIu5R8A0TuNDMF2062/AOIDBciFIjToLEJ/9F9DzkHNot+BpNsMI1OLdQ==" + }, + "@types/node-fetch": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==", + "requires": { + "@types/node": "*", + "form-data": "^4.0.0" + } }, "@types/plist": { "version": "3.0.2", @@ -4923,6 +5603,14 @@ "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.14.tgz", "integrity": "sha512-5d2RhCard1nQUC3aHcq/gHzWYO6K0WJmAbjO7mQJgCQKtZpgXxv1rOM6O/dBDhDYYVutk1sciOgNSe+5YyfM8A==" }, + "@types/ws": { + "version": "8.5.4", + "resolved": "https://registry.npmmirror.com/@types/ws/-/ws-8.5.4.tgz", + "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", + "requires": { + "@types/node": "*" + } + }, "@types/yargs": { "version": "17.0.10", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", @@ -4946,42 +5634,42 @@ "requires": {} }, "@volar/code-gen": { - "version": "0.38.9", - "resolved": "https://registry.npmjs.org/@volar/code-gen/-/code-gen-0.38.9.tgz", - "integrity": "sha512-n6LClucfA+37rQeskvh9vDoZV1VvCVNy++MAPKj2dT4FT+Fbmty/SDQqnsEBtdEe6E3OQctFvA/IcKsx3Mns0A==", + "version": "0.38.3", + "resolved": "https://registry.npmjs.org/@volar/code-gen/-/code-gen-0.38.3.tgz", + "integrity": "sha512-0yCkDtaxffyfC9e2dSLGXJmG3b0rCfTa6vqxjr70ZFTtcf/VytmMBwboFicnm+Zoen9EI8wUNfw4upw9Slz5RQ==", "dev": true, "requires": { - "@volar/source-map": "0.38.9" + "@volar/source-map": "0.38.3" } }, "@volar/source-map": { - "version": "0.38.9", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-0.38.9.tgz", - "integrity": "sha512-ba0UFoHDYry+vwKdgkWJ6xlQT+8TFtZg1zj9tSjj4PykW1JZDuM0xplMotLun4h3YOoYfY9K1huY5gvxmrNLIw==", + "version": "0.38.3", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-0.38.3.tgz", + "integrity": "sha512-8aVM+r4lsHnLjhvnjQ6kn4J++3I6VXtJblcGzWuIOn9M8pJmRGW6Si/eOVjayLWfvPCxXUM7e3sg4Nm2tufTmg==", "dev": true }, "@volar/vue-code-gen": { - "version": "0.38.9", - "resolved": "https://registry.npmjs.org/@volar/vue-code-gen/-/vue-code-gen-0.38.9.tgz", - "integrity": "sha512-tzj7AoarFBKl7e41MR006ncrEmNPHALuk8aG4WdDIaG387X5//5KhWC5Ff3ZfB2InGSeNT+CVUd74M0gS20rjA==", + "version": "0.38.3", + "resolved": "https://registry.npmjs.org/@volar/vue-code-gen/-/vue-code-gen-0.38.3.tgz", + "integrity": "sha512-euVuKtwV/KurRSVwNz5bZbCBJLwVOE56+Uh2PhsHcAM5Wzlt82cwLj07FbFagCftoC3IC/bsn43yuLc2I+ZjAQ==", "dev": true, "requires": { - "@volar/code-gen": "0.38.9", - "@volar/source-map": "0.38.9", + "@volar/code-gen": "0.38.3", + "@volar/source-map": "0.38.3", "@vue/compiler-core": "^3.2.37", "@vue/compiler-dom": "^3.2.37", "@vue/shared": "^3.2.37" } }, "@volar/vue-typescript": { - "version": "0.38.9", - "resolved": "https://registry.npmjs.org/@volar/vue-typescript/-/vue-typescript-0.38.9.tgz", - "integrity": "sha512-iJMQGU91ADi98u8V1vXd2UBmELDAaeSP0ZJaFjwosClQdKlJQYc6MlxxKfXBZisHqfbhdtrGRyaryulnYtliZw==", + "version": "0.38.3", + "resolved": "https://registry.npmjs.org/@volar/vue-typescript/-/vue-typescript-0.38.3.tgz", + "integrity": "sha512-rXh4RQBZrNfkiSnpBYbHrsxg7vBbZeYsGFgE/n8FVLcZfGlelsdXFIINsr/aZGUCJre9I15wQ44eEmXnc4+qww==", "dev": true, "requires": { - "@volar/code-gen": "0.38.9", - "@volar/source-map": "0.38.9", - "@volar/vue-code-gen": "0.38.9", + "@volar/code-gen": "0.38.3", + "@volar/source-map": "0.38.3", + "@volar/vue-code-gen": "0.38.3", "@vue/compiler-sfc": "^3.2.37", "@vue/reactivity": "^3.2.37" } @@ -5032,6 +5720,11 @@ "@vue/shared": "3.2.37" } }, + "@vue/devtools-api": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.1.tgz", + "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==" + }, "@vue/reactivity": { "version": "3.2.37", "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.37.tgz", @@ -5123,15 +5816,30 @@ "integrity": "sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==", "dev": true }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, "requires": { "debug": "4" } }, + "agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "requires": { + "humanize-ms": "^1.2.1" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -5315,8 +6023,7 @@ "async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, "async-exit-hook": { "version": "2.0.1", @@ -5360,12 +6067,27 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "base-64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", + "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==" + }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, + "bent": { + "version": "7.3.12", + "resolved": "https://registry.npmjs.org/bent/-/bent-7.3.12.tgz", + "integrity": "sha512-T3yrKnVGB63zRuoco/7Ybl7BwwGZR0lceoVG5XmQyMIH9s19SV5m+a8qam4if0zQuAmOQTyPTPmsQBdAorGK3w==", + "requires": { + "bytesish": "^0.4.1", + "caseless": "~0.12.0", + "is-stream": "^2.0.0" + } + }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -5537,6 +6259,11 @@ "sax": "^1.2.4" } }, + "bytesish": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/bytesish/-/bytesish-0.4.4.tgz", + "integrity": "sha512-i4uu6M4zuMUiyfZN4RU2+i9+peJh//pXhd9x1oSe1LBkZ3LEbCoygu8W0bXTukU1Jme2txKuotpCZRaC3FLxcQ==" + }, "cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -5575,6 +6302,11 @@ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -5585,6 +6317,11 @@ "supports-color": "^7.1.0" } }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==" + }, "chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", @@ -5802,6 +6539,11 @@ "which": "^2.0.1" } }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==" + }, "crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", @@ -5830,7 +6572,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "requires": { "ms": "2.1.2" } @@ -5879,6 +6620,15 @@ "dev": true, "optional": true }, + "digest-fetch": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/digest-fetch/-/digest-fetch-1.3.0.tgz", + "integrity": "sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==", + "requires": { + "base-64": "^0.1.0", + "md5": "^2.3.0" + } + }, "dir-compare": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz", @@ -6009,9 +6759,9 @@ } }, "electron": { - "version": "19.0.9", - "resolved": "https://registry.npmjs.org/electron/-/electron-19.0.9.tgz", - "integrity": "sha512-ooEwrv8Y7NSzdhKcl6kPCYecnzcg5nFWuS5ryG+VFH3MMBR8zXh9nW2wLsZrBz6OGUxXrcc5BKBC7dA8C6RhGQ==", + "version": "19.1.9", + "resolved": "https://registry.npmjs.org/electron/-/electron-19.1.9.tgz", + "integrity": "sha512-XT5LkTzIHB+ZtD3dTmNnKjVBWrDWReCKt9G1uAFLz6uJMEVcIUiYO+fph5pLXETiBw/QZBx8egduMEfIccLx+g==", "dev": true, "requires": { "@electron/get": "^1.14.1", @@ -6068,6 +6818,11 @@ } } }, + "electron-log": { + "version": "4.4.8", + "resolved": "https://registry.npmmirror.com/electron-log/-/electron-log-4.4.8.tgz", + "integrity": "sha512-QQ4GvrXO+HkgqqEOYbi+DHL7hj5JM+nHi/j+qrN9zeeXVKy8ZABgbu4CnG+BBqDZ2+tbeq9tUC4DZfIWFU5AZA==" + }, "electron-osx-sign": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.6.0.tgz", @@ -6169,9 +6924,9 @@ } }, "element-plus": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.2.10.tgz", - "integrity": "sha512-hJ+LlbRN3POu4Idl1LXB+SHSWdi+wwmdsoDXdQT2ynGuwzZsMYiusOooYXyEsPlrizeLibdnNGNDx4TIjXQvUg==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.2.9.tgz", + "integrity": "sha512-jYbL0JkCdv95rkT6trZJjCAizLPySa0qcd2cgq+57SKQnCZAcNDDq4GbTuFRnNavdoeCJnuM3HIficTIUpsMOQ==", "requires": { "@ctrl/tinycolor": "^3.4.1", "@element-plus/icons-vue": "^2.0.6", @@ -6421,6 +7176,11 @@ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, "extract-zip": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", @@ -6514,6 +7274,25 @@ "locate-path": "^3.0.0" } }, + "fluent-ffmpeg": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fluent-ffmpeg/-/fluent-ffmpeg-2.1.2.tgz", + "integrity": "sha512-IZTB4kq5GK0DPp7sGQ0q/BWurGHffRtQQwVkiqDgeO6wYJLLV5ZhgNOQ65loZxxuPMKZKZcICCUnaGtlxBiR0Q==", + "requires": { + "async": ">=0.2.9", + "which": "^1.1.1" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "follow-redirects": { "version": "1.15.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", @@ -6529,6 +7308,20 @@ "mime-types": "^2.1.12" } }, + "form-data-encoder": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", + "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==" + }, + "formdata-node": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", + "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "requires": { + "node-domexception": "1.0.0", + "web-streams-polyfill": "4.0.0-beta.3" + } + }, "fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -6781,6 +7574,14 @@ "debug": "4" } }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "requires": { + "ms": "^2.0.0" + } + }, "iconv-corefoundation": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", @@ -6842,6 +7643,11 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "is-ci": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", @@ -6893,6 +7699,11 @@ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -6920,8 +7731,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "jake": { "version": "10.8.5", @@ -7073,11 +7883,62 @@ "escape-string-regexp": "^4.0.0" } }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, "memoize-one": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" }, + "microsoft-cognitiveservices-speech-sdk": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/microsoft-cognitiveservices-speech-sdk/-/microsoft-cognitiveservices-speech-sdk-1.30.1.tgz", + "integrity": "sha512-pR/abkc55hvUOG1TSmJ79Mt+A+/9R5TVeuvMaJCcvHYroIPVdG5eXqzIiZNxuy5P0x+YICYnPSOQMoHyPgtN1Q==", + "requires": { + "agent-base": "^6.0.1", + "bent": "^7.3.12", + "https-proxy-agent": "^4.0.0", + "uuid": "^9.0.0", + "ws": "^7.5.6" + }, + "dependencies": { + "https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "requires": { + "agent-base": "5", + "debug": "4" + }, + "dependencies": { + "agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==" + } + } + }, + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" + }, + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "requires": {} + } + } + }, "mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", @@ -7142,11 +8003,6 @@ "yallist": "^4.0.0" } }, - "mitt": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", - "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==" - }, "mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -7159,8 +8015,7 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "nanoid": { "version": "3.3.4", @@ -7174,6 +8029,19 @@ "dev": true, "optional": true }, + "node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" + }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, "nodejs-websocket": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/nodejs-websocket/-/nodejs-websocket-1.7.2.tgz", @@ -7232,6 +8100,31 @@ } } }, + "openai": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.0.0.tgz", + "integrity": "sha512-UHv70gIw20pxu9tiUueE9iS+4U4eTGiTgQr+zlJ5aX4oj6LUUp+7mBn0xAqilawftwUB/biohPth2vcZFmoNYw==", + "requires": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "digest-fetch": "^1.3.0", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7" + }, + "dependencies": { + "@types/node": { + "version": "18.18.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.9.tgz", + "integrity": "sha512-0f5klcuImLnG4Qreu9hPj/rEfFq6YRc5n2mAjSsH+ec/mJL+3voBH0+8T7o8RpFjH7ovc+TRsL/c7OYIQsPTfQ==", + "requires": { + "undici-types": "~5.26.4" + } + } + } + }, "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -7312,6 +8205,23 @@ "dev": true, "optional": true }, + "pinia": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.0.17.tgz", + "integrity": "sha512-AtwLwEWQgIjofjgeFT+nxbnK5lT2QwQjaHNEDqpsi2AiCwf/NY78uWTeHUyEhiiJy8+sBmw0ujgQMoQbWiZDfA==", + "requires": { + "@vue/devtools-api": "^6.2.1", + "vue-demi": "*" + }, + "dependencies": { + "vue-demi": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.6.tgz", + "integrity": "sha512-02NYpxgyGE2kKGegRPYlNQSL1UWfA/+JqvzhGCOYjhfbLWXU5QQX0+9pAm/R2sCOPKr5NBxVIab7fvFU0B1RxQ==", + "requires": {} + } + } + }, "pkg-up": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", @@ -7792,6 +8702,11 @@ "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", "dev": true }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, "truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", @@ -7834,7 +8749,12 @@ "version": "4.7.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true + "devOptional": true + }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "unique-string": { "version": "2.0.0", @@ -7955,9 +8875,9 @@ } }, "vite": { - "version": "2.9.14", - "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.14.tgz", - "integrity": "sha512-P/UCjSpSMcE54r4mPak55hWAZPlyfS369svib/gpmz8/01L822lMPOJ/RYW6tLCe1RPvMvOsJ17erf55bKp4Hw==", + "version": "2.9.13", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.13.tgz", + "integrity": "sha512-AsOBAaT0AD7Mhe8DuK+/kE4aWYFMx/i0ZNi98hJclxb4e0OhQcZYUrvLjIaQ8e59Ui7txcvKMiJC1yftqpQoDw==", "dev": true, "requires": { "esbuild": "^0.14.27", @@ -7968,9 +8888,9 @@ } }, "vite-plugin-electron": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/vite-plugin-electron/-/vite-plugin-electron-0.8.3.tgz", - "integrity": "sha512-yBYGyJfSL4Sx98SgoAJC46LhLYCukN2nYfU+tWPDz7CkfAMFeeaoeyJ7h1Vozs6VGz9Dbx7QZ4AyfniVLt2aAg==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/vite-plugin-electron/-/vite-plugin-electron-0.8.1.tgz", + "integrity": "sha512-so13n0ytqaeWxK7bCza8G/qMxJSKYSunyAv4sNlPV9ahxyKmZMNaflWZ5mKBhTp2p7j3VJ0SapTzUDrHN/TjJQ==", "dev": true, "requires": { "vite-plugin-electron-renderer": "0.8.1" @@ -7994,13 +8914,42 @@ "@vue/shared": "3.2.37" } }, + "vue-i18n": { + "version": "9.6.5", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.6.5.tgz", + "integrity": "sha512-dpUEjKHg7pEsaS7ZPPxp1CflaR7bGmsvZJEhnszHPKl9OTNyno5j/DvMtMSo41kpddq4felLA7GK2prjpnXVlw==", + "requires": { + "@intlify/core-base": "9.6.5", + "@intlify/shared": "9.6.5", + "@vue/devtools-api": "^6.5.0" + } + }, "vue-tsc": { - "version": "0.38.9", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-0.38.9.tgz", - "integrity": "sha512-Yoy5phgvGqyF98Fb4mYqboR4Q149jrdcGv5kSmufXJUq++RZJ2iMVG0g6zl+v3t4ORVWkQmRpsV4x2szufZ0LQ==", + "version": "0.38.3", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-0.38.3.tgz", + "integrity": "sha512-mWlneSF+PG2kXYGJI12N4XEAG4ljAkae7IcB93fspqSkEt/oKwDbWy3DzcPSgUm0LsXqOUprTMaZkwDVSRBIvw==", "dev": true, "requires": { - "@volar/vue-typescript": "0.38.9" + "@volar/vue-typescript": "0.38.3" + } + }, + "web-streams-polyfill": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, "which": { @@ -8050,6 +8999,12 @@ "typedarray-to-buffer": "^3.1.5" } }, + "ws": { + "version": "8.13.0", + "resolved": "https://registry.npmmirror.com/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "requires": {} + }, "xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", diff --git a/package.json b/package.json index 3f90a97..efeb648 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { "name": "tts-vue", - "version": "1.0.0", + "version": "1.9.15", "main": "dist/electron/main/index.js", - "description": "Really simple Electron + Vue + Vite boilerplate.", - "author": "沫離Loker <806076693@qq.com>", + "description": "🎤 微软语音合成工具,使用 Electron + Vue + ElementPlus + Vite 构建。", + "author": "沫離Loker ", "license": "MIT", "private": true, "scripts": { @@ -14,14 +14,14 @@ "node": ">=14.17.0" }, "devDependencies": { - "@vitejs/plugin-vue": "^2.3.3", - "electron": "^19.0.8", - "electron-builder": "^23.1.0", - "typescript": "^4.7.4", - "vite": "^2.9.13", - "vite-plugin-electron": "^0.8.1", - "vue": "^3.2.37", - "vue-tsc": "^0.38.3" + "@vitejs/plugin-vue": "2.3.3", + "electron": "19.1.9", + "electron-builder": "23.1.0", + "typescript": "4.7.4", + "vite": "2.9.13", + "vite-plugin-electron": "0.8.1", + "vue": "3.2.37", + "vue-tsc": "0.38.3" }, "env": { "VITE_DEV_SERVER_HOST": "127.0.0.1", @@ -35,11 +35,19 @@ "vue" ], "dependencies": { - "axios": "^0.27.2", - "electron-store": "^8.0.2", + "@ffmpeg-installer/ffmpeg": "1.1.0", + "@types/ws": "8.5.4", + "axios": "0.27.2", + "electron-log": "4.4.8", + "electron-store": "8.0.2", "element-plus": "2.2.9", - "mitt": "^3.0.0", - "nodejs-websocket": "^1.7.2", - "uuid": "^8.3.2" + "fluent-ffmpeg": "2.1.2", + "microsoft-cognitiveservices-speech-sdk": "1.30.1", + "nodejs-websocket": "1.7.2", + "openai": "^4.0.0", + "pinia": "2.0.17", + "uuid": "8.3.2", + "vue-i18n": "9.6.5", + "ws": "8.13.0" } -} \ No newline at end of file +} diff --git a/src/App.vue b/src/App.vue index b1129b9..a000193 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,10 +1,15 @@ diff --git a/src/components/configpage/Donate.vue b/src/components/configpage/Donate.vue new file mode 100644 index 0000000..b0f94ab --- /dev/null +++ b/src/components/configpage/Donate.vue @@ -0,0 +1,144 @@ + + + + + diff --git a/src/components/configpage/GiteeBtn.vue b/src/components/configpage/GiteeBtn.vue new file mode 100644 index 0000000..36bde00 --- /dev/null +++ b/src/components/configpage/GiteeBtn.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/configpage/GithubBtn.vue b/src/components/configpage/GithubBtn.vue index 1e081e3..339b7d8 100644 --- a/src/components/configpage/GithubBtn.vue +++ b/src/components/configpage/GithubBtn.vue @@ -2,8 +2,8 @@