From 9712050e84c92b406a53c7cf1f624b251dda1ef2 Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Tue, 3 Dec 2024 15:31:11 +0800 Subject: [PATCH 001/175] [optimize] debug or dev open 5432 pg port --- src/main/core/db/common/client.ts | 14 ++++++++++++-- src/main/core/db/common/index.ts | 4 ++-- src/main/core/db/index.ts | 4 ++-- src/main/index.ts | 5 +++-- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/main/core/db/common/client.ts b/src/main/core/db/common/client.ts index 22ee0dd96..e40729cc6 100644 --- a/src/main/core/db/common/client.ts +++ b/src/main/core/db/common/client.ts @@ -2,7 +2,7 @@ import { PGlite } from '@electric-sql/pglite'; import { drizzle } from 'drizzle-orm/pglite'; // import { migrate } from 'drizzle-orm/pglite/migrator'; import { app } from 'electron'; -import { join, resolve } from 'path'; +import { join } from 'path'; import * as schema from './schema'; const DB_PATH = join(app.getPath('userData'), 'database'); @@ -19,4 +19,14 @@ const db = drizzle({ client, schema }); // }); // }; // migrateAfterClientReady(); -export { client, db }; + +const server = async () => { + // @ts-ignore + const { createServer } = await import('pglite-server'); + await client.waitReady; + const PORT = 5432; + const pgServer = createServer(client); + pgServer.listen(PORT, () => {}); +}; + +export { client, db, server }; diff --git a/src/main/core/db/common/index.ts b/src/main/core/db/common/index.ts index 144bdeff2..ec1f362c7 100644 --- a/src/main/core/db/common/index.ts +++ b/src/main/core/db/common/index.ts @@ -1,5 +1,5 @@ -import { client, db } from './client'; +import { client, db, server } from './client'; import * as schema from './schema'; import * as webdev from './webdev'; -export { client, db, schema, webdev }; +export { client, db, schema, server, webdev }; diff --git a/src/main/core/db/index.ts b/src/main/core/db/index.ts index f5949eba0..35b5bb051 100644 --- a/src/main/core/db/index.ts +++ b/src/main/core/db/index.ts @@ -2,7 +2,7 @@ import { compare } from 'compare-versions'; import { eq } from 'drizzle-orm'; import { app } from 'electron'; import { join } from 'path'; -import { db, schema, webdev } from './common'; +import { db, schema, server, webdev } from './common'; import migration from './migration'; import * as service from './service'; import logger from '@main/core/logger'; @@ -55,4 +55,4 @@ const setup = async () => { logger.info(`[db][init] path:${DB_PATH}`); }; -export { db, schema, setup, magrite, service, webdev }; +export { db, schema, setup, magrite, server, service, webdev }; diff --git a/src/main/index.ts b/src/main/index.ts index 7063f5c02..63ab3c5b8 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -1,10 +1,10 @@ import { initialize as remoteInit } from '@electron/remote/main'; -import { electronApp, platform, optimizer } from '@electron-toolkit/utils'; +import { electronApp, is, optimizer, platform } from '@electron-toolkit/utils'; import { registerContextMenuListener } from '@electron-uikit/contextmenu'; import { registerTitleBarListener } from '@electron-uikit/titlebar'; import { app, BrowserWindow, globalShortcut, nativeTheme, session } from 'electron'; import fixPath from 'fix-path'; -import { setup as dbInit, webdev } from './core/db'; +import { setup as dbInit, server as dbServer, webdev } from './core/db'; import createMenu from './core/menu'; import { ipcListen } from './core/ipc'; import logger from './core/logger'; @@ -48,6 +48,7 @@ const setup = async () => { remoteInit(); // 主进程初始化 await dbInit(); // 初始化数据库 await globalVariable(); // 全局变量 + if (globalThis.variable.debug || is.dev) await dbServer(); // 初始化数据库服务 await serverInit(); // 后端服务 }; From f1d001b66c6204225f1bbd3712592314bb41f590 Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Tue, 3 Dec 2024 15:31:32 +0800 Subject: [PATCH 002/175] [optimize] fastify route ready --- src/main/core/server/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/core/server/index.ts b/src/main/core/server/index.ts index 5f42cff89..8dfe4e0ac 100644 --- a/src/main/core/server/index.ts +++ b/src/main/core/server/index.ts @@ -63,6 +63,7 @@ const setup = async () => { server.register(routesV1Modules[key]); }); + await server.ready(); await server.listen({ port: 9978, host: '0.0.0.0' }); logger.info('[server][init] listen: http://0.0.0.0:9978'); } catch (err) { From aa6bfe7c7e52d734701e48075cb429555c9313bd Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Tue, 3 Dec 2024 16:44:38 +0800 Subject: [PATCH 003/175] [change] server route --- src/main/core/server/routes/v1/file/index.ts | 3 +++ .../routes/v1/{file.ts => file/work.ts} | 0 .../core/server/routes/v1/history/index.ts | 3 +++ .../routes/v1/{history.ts => history/work.ts} | 0 src/main/core/server/routes/v1/index.ts | 24 +++++++++---------- src/main/core/server/routes/v1/proxy/index.ts | 3 +++ .../routes/v1/{proxy.ts => proxy/work.ts} | 0 .../core/server/routes/v1/setting/index.ts | 3 +++ .../routes/v1/{setting.ts => setting/work.ts} | 0 src/main/core/server/routes/v1/star/index.ts | 3 +++ .../routes/v1/{star.ts => star/work.ts} | 0 .../core/server/routes/v1/system/index.ts | 3 +++ .../routes/v1/{system.ts => system/work.ts} | 0 13 files changed, 30 insertions(+), 12 deletions(-) create mode 100644 src/main/core/server/routes/v1/file/index.ts rename src/main/core/server/routes/v1/{file.ts => file/work.ts} (100%) create mode 100644 src/main/core/server/routes/v1/history/index.ts rename src/main/core/server/routes/v1/{history.ts => history/work.ts} (100%) create mode 100644 src/main/core/server/routes/v1/proxy/index.ts rename src/main/core/server/routes/v1/{proxy.ts => proxy/work.ts} (100%) create mode 100644 src/main/core/server/routes/v1/setting/index.ts rename src/main/core/server/routes/v1/{setting.ts => setting/work.ts} (100%) create mode 100644 src/main/core/server/routes/v1/star/index.ts rename src/main/core/server/routes/v1/{star.ts => star/work.ts} (100%) create mode 100644 src/main/core/server/routes/v1/system/index.ts rename src/main/core/server/routes/v1/{system.ts => system/work.ts} (100%) diff --git a/src/main/core/server/routes/v1/file/index.ts b/src/main/core/server/routes/v1/file/index.ts new file mode 100644 index 000000000..191370dfe --- /dev/null +++ b/src/main/core/server/routes/v1/file/index.ts @@ -0,0 +1,3 @@ +import work from './work'; + +export { work }; diff --git a/src/main/core/server/routes/v1/file.ts b/src/main/core/server/routes/v1/file/work.ts similarity index 100% rename from src/main/core/server/routes/v1/file.ts rename to src/main/core/server/routes/v1/file/work.ts diff --git a/src/main/core/server/routes/v1/history/index.ts b/src/main/core/server/routes/v1/history/index.ts new file mode 100644 index 000000000..191370dfe --- /dev/null +++ b/src/main/core/server/routes/v1/history/index.ts @@ -0,0 +1,3 @@ +import work from './work'; + +export { work }; diff --git a/src/main/core/server/routes/v1/history.ts b/src/main/core/server/routes/v1/history/work.ts similarity index 100% rename from src/main/core/server/routes/v1/history.ts rename to src/main/core/server/routes/v1/history/work.ts diff --git a/src/main/core/server/routes/v1/index.ts b/src/main/core/server/routes/v1/index.ts index b8c1a9357..2f12eec80 100644 --- a/src/main/core/server/routes/v1/index.ts +++ b/src/main/core/server/routes/v1/index.ts @@ -1,12 +1,12 @@ -import star from './star'; -import history from './history'; -import setting from './setting'; +import { work as starWork } from './star'; +import { work as historyWork } from './history'; +import { work as settingWork } from './setting'; import { db } from './db'; -import proxy from './proxy'; +import { work as proxyWork } from './proxy'; import { ad, ai, jsEdit, staticFilter } from './lab'; -import file from './file'; +import { work as fileWork } from './file'; import { barrage } from './player'; -import system from './system'; +import { work as systemWork } from './system'; import { db as driveDb, work as driveWork } from './drive'; import { channel, iptv } from './live'; @@ -18,24 +18,24 @@ const routesModules = { analyzeWork, cms, sietDb, - star, - history, + starWork, + historyWork, hot, recomm, driveDb, driveWork, - setting, + settingWork, iptv, channel, db, - proxy, + proxyWork, ad, ai, jsEdit, staticFilter, - file, + fileWork, barrage, - system, + systemWork, }; export default routesModules; diff --git a/src/main/core/server/routes/v1/proxy/index.ts b/src/main/core/server/routes/v1/proxy/index.ts new file mode 100644 index 000000000..191370dfe --- /dev/null +++ b/src/main/core/server/routes/v1/proxy/index.ts @@ -0,0 +1,3 @@ +import work from './work'; + +export { work }; diff --git a/src/main/core/server/routes/v1/proxy.ts b/src/main/core/server/routes/v1/proxy/work.ts similarity index 100% rename from src/main/core/server/routes/v1/proxy.ts rename to src/main/core/server/routes/v1/proxy/work.ts diff --git a/src/main/core/server/routes/v1/setting/index.ts b/src/main/core/server/routes/v1/setting/index.ts new file mode 100644 index 000000000..191370dfe --- /dev/null +++ b/src/main/core/server/routes/v1/setting/index.ts @@ -0,0 +1,3 @@ +import work from './work'; + +export { work }; diff --git a/src/main/core/server/routes/v1/setting.ts b/src/main/core/server/routes/v1/setting/work.ts similarity index 100% rename from src/main/core/server/routes/v1/setting.ts rename to src/main/core/server/routes/v1/setting/work.ts diff --git a/src/main/core/server/routes/v1/star/index.ts b/src/main/core/server/routes/v1/star/index.ts new file mode 100644 index 000000000..191370dfe --- /dev/null +++ b/src/main/core/server/routes/v1/star/index.ts @@ -0,0 +1,3 @@ +import work from './work'; + +export { work }; diff --git a/src/main/core/server/routes/v1/star.ts b/src/main/core/server/routes/v1/star/work.ts similarity index 100% rename from src/main/core/server/routes/v1/star.ts rename to src/main/core/server/routes/v1/star/work.ts diff --git a/src/main/core/server/routes/v1/system/index.ts b/src/main/core/server/routes/v1/system/index.ts new file mode 100644 index 000000000..191370dfe --- /dev/null +++ b/src/main/core/server/routes/v1/system/index.ts @@ -0,0 +1,3 @@ +import work from './work'; + +export { work }; diff --git a/src/main/core/server/routes/v1/system.ts b/src/main/core/server/routes/v1/system/work.ts similarity index 100% rename from src/main/core/server/routes/v1/system.ts rename to src/main/core/server/routes/v1/system/work.ts From 41df9320f20987df5ece345e9c6eb1f2da647a79 Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Tue, 3 Dec 2024 18:27:40 +0800 Subject: [PATCH 004/175] [bug] fix call system play(issue #363) --- .../pages/chase/components/binge/index.vue | 39 ++++++++--------- .../pages/chase/components/history/index.vue | 43 +++++++++---------- 2 files changed, 40 insertions(+), 42 deletions(-) diff --git a/src/renderer/src/pages/chase/components/binge/index.vue b/src/renderer/src/pages/chase/components/binge/index.vue index 8dc4a63d8..950504439 100644 --- a/src/renderer/src/pages/chase/components/binge/index.vue +++ b/src/renderer/src/pages/chase/components/binge/index.vue @@ -52,7 +52,7 @@ - + @@ -79,7 +79,7 @@ import emitter from '@/utils/emitter'; import DetailView from '@/pages/film/components/Detail.vue'; -const store = usePlayStore(); +const storePlayer = usePlayStore(); const renderError = () => { return ( @@ -103,12 +103,10 @@ const pagination = ref({ pageSize: 32, count: 0, }); -const formDetailData = ref({ - neme: '', - key: '', - type: 1, +const detailFormData = ref({ + info: {}, + ext: { site: {}, setting: {} }, }); // 详情组件源传参 -const siteData = ref(); const isVisible = reactive({ detail: false, loading: false @@ -166,33 +164,34 @@ const playEvent = async (item) => { isVisible.loading = true; try { - const { videoName, videoId, relateSite } = item; - siteData.value = relateSite; + const { videoName, videoImage, videoId, relateSite } = item; + await fetchCmsInit({ sourceId: relateSite.id }) if (!('vod_play_from' in item && 'vod_play_url' in item)) { const res = await fetchCmsDetail({ sourceId: relateSite.id, id: videoId }); const detailItem = res?.list[0]; - if (relateSite.type === 9) { - detailItem.vod_name = item.vod_name; - detailItem.vod_pic = item.vod_pic; - }; + detailItem.vod_name = videoName; + detailItem.vod_pic = videoImage; item = detailItem; }; + console.log('[binge][playEvent]', item); - const playerMode = store.getSetting.playerMode; + const playerMode = storePlayer.getSetting.playerMode; + const doc = { + info: item, + ext: { site: relateSite, setting: storePlayer.setting }, + } if (playerMode.type === 'custom') { - formDetailData.value = item; + detailFormData.value = doc; isVisible.detail = true; } else { - store.updateConfig({ + storePlayer.updateConfig({ type: 'film', status: true, - data: { - info: item, - ext: { site: relateSite, setting: store.setting }, - } + data: doc }); + window.electron.ipcRenderer.send('open-play-win', videoName); } } catch (err) { diff --git a/src/renderer/src/pages/chase/components/history/index.vue b/src/renderer/src/pages/chase/components/history/index.vue index dabd1ca78..f8cb39b2d 100644 --- a/src/renderer/src/pages/chase/components/history/index.vue +++ b/src/renderer/src/pages/chase/components/history/index.vue @@ -55,7 +55,7 @@ - + @@ -85,7 +85,8 @@ import emitter from '@/utils/emitter'; import DetailView from '@/pages/film/components/Detail.vue'; -const store = usePlayStore(); +const storePlayer = usePlayStore(); + const renderError = () => { return (
@@ -119,12 +120,10 @@ const pagination = ref({ pageSize: 32, count: 0, }); -const formDetailData = ref({ - neme: '', - key: '', - type: 1, +const detailFormData = ref({ + info: {}, + ext: { site: {}, setting: {} }, }); // 详情组件源传参 -const siteData = ref(); const isVisible = reactive({ detail: false, loading: false @@ -183,34 +182,34 @@ const playEvent = async (item) => { isVisible.loading = true; try { - const { videoName, videoId, relateSite } = item; - siteData.value = relateSite; - await fetchCmsInit({ sourceId: relateSite.id }) + const { videoName, videoImage, videoId, relateSite } = item; + + await fetchCmsInit({ sourceId: relateSite.id }); if (!('vod_play_from' in item && 'vod_play_url' in item)) { const res = await fetchCmsDetail({ sourceId: relateSite.id, id: videoId }); const detailItem = res?.list[0]; - if (relateSite.type === 9) { - detailItem.vod_name = item.vod_name; - detailItem.vod_pic = item.vod_pic; - }; + detailItem.vod_name = videoName; + detailItem.vod_pic = videoImage; item = detailItem; }; - console.log('[film][playEvent]', item); + console.log('[history][playEvent]', item); - const playerMode = store.getSetting.playerMode; + const playerMode = storePlayer.getSetting.playerMode; + const doc = { + info: item, + ext: { site: relateSite, setting: storePlayer.setting }, + } if (playerMode.type === 'custom') { - formDetailData.value = item; + detailFormData.value = doc; isVisible.detail = true; } else { - store.updateConfig({ + storePlayer.updateConfig({ type: 'film', status: true, - data: { - info: item, - ext: { site: relateSite, setting: store.setting }, - } + data: doc }); + window.electron.ipcRenderer.send('open-play-win', videoName); } } catch (err) { From 5518d39a8cebd047577214fafc770c7fff1815e4 Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Tue, 3 Dec 2024 23:43:50 +0800 Subject: [PATCH 005/175] [bug] fix chase return length --- .../pages/chase/components/binge/index.vue | 18 +++++------ .../pages/chase/components/history/index.vue | 30 +++++++++---------- 2 files changed, 23 insertions(+), 25 deletions(-) diff --git a/src/renderer/src/pages/chase/components/binge/index.vue b/src/renderer/src/pages/chase/components/binge/index.vue index 950504439..605b6b204 100644 --- a/src/renderer/src/pages/chase/components/binge/index.vue +++ b/src/renderer/src/pages/chase/components/binge/index.vue @@ -127,17 +127,15 @@ onActivated(() => { const getBingeList = async () => { let length = 0; + const { pageIndex, pageSize } = pagination.value; try { - const { pageIndex, pageSize } = pagination.value; - - const star_res = await fetchStarPage({ page: pageIndex, pageSize }); - - bingeConfig.value.data = _.unionWith(bingeConfig.value.data, star_res.list, _.isEqual) as any; - - pagination.value.count = star_res.total; - pagination.value.pageIndex++; - - length = star_res.data.length; + const res = await fetchStarPage({ page: pageIndex, pageSize }); + if (res?.list && Array.isArray(res?.list) && res?.list?.length > 0) { + bingeConfig.value.data = bingeConfig.value.data.concat(res.list); + pagination.value.count = res.total; + pagination.value.pageIndex++; + length = res.list.length; + } return length; } catch (err) { console.error(err); diff --git a/src/renderer/src/pages/chase/components/history/index.vue b/src/renderer/src/pages/chase/components/history/index.vue index f8cb39b2d..8b7d3ff0a 100644 --- a/src/renderer/src/pages/chase/components/history/index.vue +++ b/src/renderer/src/pages/chase/components/history/index.vue @@ -137,23 +137,23 @@ onActivated(() => { const getHistoryList = async () => { let length = 0; + const { pageIndex, pageSize } = pagination.value; try { - const { pageIndex, pageSize } = pagination.value; - const history_res = await fetchHistoryPage({ page: pageIndex, pageSize, type: 'film' }); - - for (const item of history_res?.list) { - const timeDiff = filterDate(item.date); - let timeKey; - if (timeDiff === 0) timeKey = 'today'; - else if (timeDiff < 7) timeKey = 'week'; - else timeKey = 'ago'; - options.value[timeKey].push(item); + const res = await fetchHistoryPage({ page: pageIndex, pageSize, type: 'film' }); + + if (res?.list && Array.isArray(res?.list) && res?.list?.length > 0) { + for (const item of res.list) { + const timeDiff = filterDate(item.date); + let timeKey; + if (timeDiff === 0) timeKey = 'today'; + else if (timeDiff < 7) timeKey = 'week'; + else timeKey = 'ago'; + options.value[timeKey].push(item); + }; + pagination.value.count = res.total; + pagination.value.pageIndex++; + length = res.list.length || 0; } - - pagination.value.count = history_res.total; - pagination.value.pageIndex++; - - length = history_res.list.length; return length; } catch (err) { console.error(err); From e99a61386860a172efee0278ab60ecfb0a1b6320 Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Fri, 6 Dec 2024 13:58:11 +0800 Subject: [PATCH 006/175] [feat] plugin --- .../core/server/routes/v1/plugin/index.ts | 3 + .../server/routes/v1/plugin/utils/adapter.ts | 418 ++++++++++++++++ .../server/routes/v1/plugin/utils/types.ts | 42 ++ src/main/utils/plugin/index.ts | 14 +- src/renderer/src/api/plugin.ts | 48 ++ .../src/locales/lang/en_US/pages/lab.ts | 46 +- .../src/locales/lang/zh_CN/pages/lab.ts | 46 +- .../lab/components/pluginCenter/index.vue | 462 ++++++++++++++++++ src/renderer/src/pages/lab/index.vue | 5 + 9 files changed, 1047 insertions(+), 37 deletions(-) create mode 100644 src/main/core/server/routes/v1/plugin/index.ts create mode 100644 src/main/core/server/routes/v1/plugin/utils/adapter.ts create mode 100644 src/main/core/server/routes/v1/plugin/utils/types.ts create mode 100644 src/renderer/src/api/plugin.ts create mode 100644 src/renderer/src/pages/lab/components/pluginCenter/index.vue diff --git a/src/main/core/server/routes/v1/plugin/index.ts b/src/main/core/server/routes/v1/plugin/index.ts new file mode 100644 index 000000000..191370dfe --- /dev/null +++ b/src/main/core/server/routes/v1/plugin/index.ts @@ -0,0 +1,3 @@ +import work from './work'; + +export { work }; diff --git a/src/main/core/server/routes/v1/plugin/utils/adapter.ts b/src/main/core/server/routes/v1/plugin/utils/adapter.ts new file mode 100644 index 000000000..8e7ccf3f4 --- /dev/null +++ b/src/main/core/server/routes/v1/plugin/utils/adapter.ts @@ -0,0 +1,418 @@ +import npm from 'npm'; +import JSON5 from 'json5'; +import { join, resolve } from 'path'; +import workerpool from 'workerpool'; +import request from '@main/utils/request'; +import logger from '@main/core/logger'; +import { fileExist, fileState, readJson, readFile, saveJson, createDir } from '@main/utils/hiker/file'; + +import { AdapterHandlerOptions, AdapterInfo } from './types'; + +const runModule = async (modulePath: string, method: 'stop' | 'start') => { + try { + const entry = await import(modulePath); + const res = await entry?.[method](); + return { code: 0, msg: 'ok', data: res }; + } catch (err: any) { + throw err; + } +}; + +/** + * 系统插件管理器 + * @class AdapterHandler + */ +class AdapterHandler { + public baseDir: string; // 插件安装地址 + public pkgPath: string; // pkg配置文件路径 + public pluginPath: string; // 插件信息配置文件路径 + public pluginList: any[] = []; // 插件列表 + public syncModules = new Map(); + private pluginCaches: Record = {}; // 缓存插件版本 + readonly registry: string; // 插件源地址 + + /** + * Creates an instance of AdapterHandler. + * @param {AdapterHandlerOptions} options + * @memberof AdapterHandler + */ + constructor(options: AdapterHandlerOptions) { + this.baseDir = options.baseDir; + this.pkgPath = join(this.baseDir, 'package.json'); + this.pluginPath = join(this.baseDir, 'plugin.json'); + this.registry = options.registry || 'https://registry.npmmirror.com/'; + + // 初始化插件目录 + if (!fileExist(this.baseDir)) createDir(this.baseDir); + if (!fileExist(this.pkgPath) || fileState(this.pkgPath) !== 'file') + saveJson(this.pkgPath, { dependencies: {}, devDependencies: {} }); + if (!fileExist(this.pluginPath) || fileState(this.pluginPath) !== 'file') saveJson(this.pluginPath, []); + + // 初始化插件列表 + this.pluginList = this.readJsonFile(this.pluginPath) || []; + + (async () => { + let plugins = this.fetchList(); + plugins = plugins.filter((p) => p.status === 'RUNNING'); + try { + await this.start(plugins); + } catch {} + })(); + } + + /** + * 读取JSON文件 + * @private + * @param {string} filePath 文件路径 + * @returns {json} JSON对象 + */ + private readJsonFile(filePath: string) { + try { + const content = readJson(filePath); + return content; + } catch (err: any) { + logger.error(`[plugin][readJsonFile][error] ${err.message}`); + throw new Error(`Failed to read JSON file: ${filePath}`); + } + } + + /** + * 写入JSON文件 + * @private + * @param {string} filePath 文件路径 + * @param {json} content JSON对象 + */ + private writeJsonFile(filePath: string, content: object) { + try { + saveJson(filePath, content); + } catch (err: any) { + logger.error(`[plugin][writeJsonFile][error] ${err.message}`); + throw new Error(`Failed to write JSON file: ${filePath}`); + } + } + + /** + * 深度克隆对象 + * @private + * @param {*} obj + * @returns {*} + */ + private deepClone(obj: T): T { + try { + return JSON5.parse(JSON5.stringify(obj)); + } catch (err: any) { + logger.error(`[plugin][deepClone][error] ${err.message}`); + throw new Error(`Failed to deepClone`); + } + } + + fetchList(plugins: any[] = []) { + const infoList: AdapterInfo[] = []; + const currentPlugins = this.pluginList; + const namePlugins = plugins.map((plugin) => plugin.name); + + for (let plugin of currentPlugins) { + const readmePath = join(this.baseDir, 'node_modules', plugin.name, 'README.md'); + if (fileExist(readmePath) && fileState(readmePath) === 'file') plugin.readme = readFile(readmePath); + const pluginInfo: AdapterInfo = { + type: plugin?.pluginType || 'system', + name: plugin?.name || '', + pluginName: plugin?.pluginName || '', + author: plugin?.author || '', + description: plugin?.description || '', + readme: plugin?.readme || '', + main: plugin?.main || '', + version: plugin?.version || '0.0.0', + logo: plugin?.logo || '', + status: plugin?.status || 'STOPED', + }; + + if (plugins.length > 0) { + if (namePlugins.includes(plugin.name)) { + infoList.push(pluginInfo); + } + } else infoList.push(pluginInfo); + } + + return infoList; + } + + /** + * 获取插件信息 + * @param {plugins} + * @memberof PluginHandler + */ + async info(plugins: any[]) { + let infoList: AdapterInfo[] = []; + try { + infoList = this.fetchList(plugins); + } catch (err: any) { + logger.error(`[plugin][getAdapterInfo][error] ${err.message}`); + } finally { + return infoList; + } + } + + /** + * 安装插件 + * @param plugins + * @memberof AdapterHandler + */ + async install(plugins: any[]) { + const currentPlugins = this.deepClone(this.pluginList); + + for (let plugin of plugins) { + try { + const cmd = plugin.isDev ? 'link' : 'install'; + const module = resolve(this.baseDir, 'modules', plugin.name); + if (!fileExist(module) || fileState(module) !== 'dir') continue; + await this.execCommand(cmd, [module]); + + const pkg = this.readJsonFile(join(this.baseDir, 'modules', plugin.name, 'package.json')); + let info; + if (plugin.isDev) { + const pluginPath = resolve(this.baseDir, 'node_modules', pkg.name); + const pluginInfo = this.readJsonFile(join(pluginPath, 'package.json')); + info = { ...plugin, ...pluginInfo, pluginName: pkg.name }; + } + + const pluginIndex1 = plugins.findIndex((p) => p.name === plugin.name); + plugins[pluginIndex1].name = pkg.name; + const pluginIndex2 = currentPlugins.findIndex((p) => p.name === pkg.name); + if (pluginIndex2 === -1) currentPlugins.unshift(info); + } catch (err: any) { + logger.error(`[plugin][install][error] ${err.message}`); + } + } + + this.pluginList = currentPlugins; + this.writeJsonFile(this.pluginPath, this.pluginList); + + return this.fetchList(plugins); + } + + /** + * 卸载插件 + * @param plugins + * @memberof AdapterHandler + */ + async uninstall(plugins: any[]) { + const currentPlugins = this.deepClone(this.pluginList); + + for (const plugin of plugins) { + try { + const cmd = plugin.isDev ? 'unlink' : 'uninstall'; + const module = join(this.baseDir, 'node_modules', plugin.name); + if (!fileExist(module) || fileState(module) !== 'dir') continue; + + await this.stop([plugin]); + await this.execCommand(cmd, [module]); + + const index = currentPlugins.findIndex((p) => p.name === plugin.name); + if (index > -1) currentPlugins.splice(index, 1); + } catch (err: any) { + logger.error(`[plugin][uninstall][error] ${err.message}`); + } + } + + this.pluginList = currentPlugins; + this.writeJsonFile(this.pluginPath, this.pluginList); + + return this.fetchList(plugins); + } + + /** + * 更新指定插件 + * @param plugins 插件名称 + * @memberof AdapterHandler + */ + async update(plugins: any[]) { + const currentPlugins = this.deepClone(this.pluginList); + + for (const plugin of plugins) { + const module = join(this.baseDir, 'node_modules', plugin.name); + if (!fileExist(module) || fileState(module) !== 'dir') continue; + await this.execCommand('update', [module]); + + const pluginPath = resolve(this.baseDir, 'node_modules', plugin.name); + const pluginInfo = this.readJsonFile(join(pluginPath, 'package.json')); + const pluginIndex = currentPlugins.findIndex((p) => `${p.name}` === `${plugin.name}`); + if (pluginIndex !== -1) currentPlugins[pluginIndex].version = pluginInfo.version || '0.0.0'; + } + + this.pluginList = currentPlugins; + this.writeJsonFile(this.pluginPath, this.pluginList); + + return this.fetchList(plugins); + } + + /** + * 升级插件 + * @param plugins + * @memberof AdapterHandler + */ + async upgrade(plugins: any[]) { + for (let plugin of plugins) { + try { + const pkg = await this.readJsonFile(join(this.baseDir, 'package.json')); + if (Object.keys(pkg.dependencies).length === 0 || !pkg.dependencies?.[plugin.name]) break; + const installedVersion = pkg.dependencies[plugin.name].replace('^', ''); + let latestVersion = this.pluginCaches[plugin.name]; + if (!latestVersion) { + const registryUrl = `${this.registry}${plugin.name}`; + const data = await request({ + method: 'GET', + url: registryUrl, + timeout: 2000, + }); + latestVersion = data['dist-tags'].latest; + this.pluginCaches[plugin.name] = latestVersion; + } + if (latestVersion > installedVersion) { + await this.install(plugin); + } + } catch (err: any) { + logger.error(`[plugin][upgrade][error] ${err.message}`); + } + } + + return this.fetchList(plugins); + } + + /** + * 列出所有已安装插件 + * @memberof AdapterHandler + */ + list() { + try { + if (!this.pluginList.length) this.pluginList = this.readJsonFile(this.pluginPath) || []; + return this.fetchList(); + } catch (err: any) { + logger.error(`[plugin][list][error] ${err.message}`); + return []; + } + } + + async start(plugins: any[]) { + const currentPlugins = this.deepClone(this.pluginList); + + for (const plugin of plugins) { + const module = join(this.baseDir, 'node_modules', plugin.name); + if (!fileExist(module) || fileState(module) !== 'dir') continue; + + const pluginIndex = currentPlugins.findIndex((p) => `${p.name}` === `${plugin.name}`); + if (pluginIndex === -1) continue; + + const pluginInfo = currentPlugins[pluginIndex]; + + if (pluginInfo?.main && pluginInfo?.main.endsWith('.js')) { + try { + let pool = this.syncModules.get(`${plugin.name}`); + if (!pool) { + pool = workerpool.pool(); + this.syncModules.set(`${plugin.name}`, pool); + } + try { + let entryModule = resolve(module, pluginInfo.main); + if (process.platform === 'win32') entryModule = `file:///${entryModule}`; + const res = await pool.exec(runModule, [entryModule, 'start']); + if (res.code === 0) currentPlugins[pluginIndex].status = 'RUNNING'; + } catch (err: any) { + currentPlugins[pluginIndex].status = 'STOPED'; + this.syncModules.delete(`${plugin.name}`); + await pool.terminate(); + logger.error(`[plugin][run][error] ${err.message}`); + } + } catch (err: any) { + logger.error(`[plugin][run][pool] ${err.message}`); + } + } + } + + this.pluginList = currentPlugins; + this.writeJsonFile(this.pluginPath, this.pluginList); + + return this.fetchList(plugins); + } + + async stop(plugins: any[]) { + const currentPlugins = this.deepClone(this.pluginList); + + for (const plugin of plugins) { + const module = join(this.baseDir, 'node_modules', plugin.name); + if (!fileExist(module) || fileState(module) !== 'dir') continue; + + const pluginIndex = currentPlugins.findIndex((p) => `${p.name}` === `${plugin.name}`); + if (pluginIndex === -1) continue; + + const pluginInfo = currentPlugins[pluginIndex]; + + if (pluginInfo?.main && pluginInfo?.main.endsWith('.js')) { + try { + let pool = this.syncModules.get(`${plugin.name}`); + try { + if (pool) { + // let entryModule = resolve(module, pluginInfo.main); + // if (process.platform === 'win32') entryModule = `file:///${entryModule}`; + // const res = await pool.exec(runModule, [entryModule, 'stop']); + // if (res.code === 0) currentPlugins[pluginIndex].status = 'STOPED'; + await pool.terminate(); + this.syncModules.delete(`${plugin.name}`); + currentPlugins[pluginIndex].status = 'STOPED'; + } + } catch (err: any) { + currentPlugins[pluginIndex].status = 'STOPED'; + this.syncModules.delete(`${plugin.name}`); + if (pool) await pool.terminate(); + logger.error(`[plugin][stop][error] ${err.message}`); + } + } catch (err: any) { + logger.error(`[plugin][stop][pool] ${err.message}`); + } + } + } + + this.pluginList = currentPlugins; + this.writeJsonFile(this.pluginPath, this.pluginList); + + return this.fetchList(plugins); + } + + /** + * 执行包管理器命令 + * @memberof AdapterHandler + */ + private async execCommand(cmd: string, modules: string[]): Promise { + return new Promise((resolve: any, reject: any) => { + const module = cmd !== 'uninstall' && cmd !== 'link' ? modules.map((m) => `${m}@latest`) : modules; + const config: { [key: string]: any } = { + prefix: this.baseDir, + save: true, + cache: join(this.baseDir, 'cache'), + registry: this.registry, + }; + + npm.load(config, (loadErr: any) => { + if (loadErr) { + logger.error(`[plugin][execCommand][error] ${loadErr.message}`); + reject({ code: -1, msg: loadErr.message, data: null }); + } + + npm.commands[cmd](module, function (cmdErr: any, data: any[]) { + if (cmdErr) { + logger.error(`[plugin][execCommand][error] ${cmdErr.message}`); + // reject({ code: -1, msg: cmdErr.message, data: null }); + } + logger.info(`[plugin][execCommand][data]`, data); + resolve({ code: 0, msg: 'ok', data }); + }); + + npm.on('log', (message) => { + logger.info(`[plugin][execCommand][log] ${message}`); + }); + }); + }); + } +} + +export default AdapterHandler; diff --git a/src/main/core/server/routes/v1/plugin/utils/types.ts b/src/main/core/server/routes/v1/plugin/utils/types.ts new file mode 100644 index 000000000..42e1f24df --- /dev/null +++ b/src/main/core/server/routes/v1/plugin/utils/types.ts @@ -0,0 +1,42 @@ +/** + * 插件管理器配置 + * @param baseDir 插件安装目录 + * @param registry 插件下载源 即 npm 源 + * @export + * @interface AdapterHandlerOptions + */ +export interface AdapterHandlerOptions { + baseDir: string; + registry?: string; +} + +/** + * 插件信息, 对应 plugin.json + * @export + * @interface AdapterInfo + */ +export interface AdapterInfo { + // 插件类型 + type: 'adapter'; + // 插件名称 zy-adapter-xxx + name: string; + // 可读插件名称 + pluginName: string; + // 作者 + author: string; + // 描述 + description: string; + // 插件使用文档 + readme: string; + // 入口文件 + main: string; + // 版本 + version: string; + // logo地址 + logo: string; + // 插件状态 + status: AdapterStatus; +} + +// 插件运行状态 +export type AdapterStatus = 'RUNNING' | 'STOPED' | 'ERROR'; diff --git a/src/main/utils/plugin/index.ts b/src/main/utils/plugin/index.ts index 871959923..538e35708 100644 --- a/src/main/utils/plugin/index.ts +++ b/src/main/utils/plugin/index.ts @@ -1,5 +1,4 @@ import axios from 'axios'; -import { ipcRenderer } from 'electron'; import fixPath from 'fix-path'; import fs from 'fs-extra'; import npm from 'npm'; @@ -33,18 +32,7 @@ class AdapterHandler { } this.baseDir = options.baseDir; - let register = options.registry || 'https://registry.npmmirror.com/'; - - try { - const dbdata = ipcRenderer.sendSync('msg-trigger', { - type: 'dbGet', - data: { id: 'rubick-localhost-config' }, - }); - register = dbdata.data.register; - } catch (e) { - // ignore - } - this.registry = register || 'https://registry.npmmirror.com/'; + this.registry = options.registry || 'https://registry.npmmirror.com/'; } async upgrade(name: string): Promise { diff --git a/src/renderer/src/api/plugin.ts b/src/renderer/src/api/plugin.ts new file mode 100644 index 000000000..123557930 --- /dev/null +++ b/src/renderer/src/api/plugin.ts @@ -0,0 +1,48 @@ +import request from '@/utils/request'; + +export function info(doc: object) { + return request({ + url: `/v1/plugin/info`, + method: 'post', + data: doc, + }); +} + +export function start(doc: object) { + return request({ + url: `/v1/plugin/start`, + method: 'post', + data: doc, + }); +} + +export function stop(doc: object) { + return request({ + url: `/v1/plugin/stop`, + method: 'post', + data: doc, + }); +} + +export function install(doc: object) { + return request({ + url: `/v1/plugin/install`, + method: 'post', + data: doc, + }); +} + +export function uninstall(doc: object) { + return request({ + url: `/v1/plugin/uninstall`, + method: 'post', + data: doc, + }); +} + +export function list() { + return request({ + url: `/v1/plugin/list`, + method: 'get', + }); +} diff --git a/src/renderer/src/locales/lang/en_US/pages/lab.ts b/src/renderer/src/locales/lang/en_US/pages/lab.ts index 32989933f..9c48bee59 100644 --- a/src/renderer/src/locales/lang/en_US/pages/lab.ts +++ b/src/renderer/src/locales/lang/en_US/pages/lab.ts @@ -360,17 +360,39 @@ export default { }, pluginCenter: { title: 'PluginCenter', - search: 'Search', - install: 'Install', - uninstall: 'Uninstall', - update: 'Update', - detail: 'Detail', - author: 'Author', - version: 'Version', - size: 'Size', - download: 'Download', - installed: 'Installed', - uninstalled: 'Uninstalled', - updateAvailable: 'Update Available', + server: 'Server', + file: 'File', + empty: 'Empty', + info: { + title: 'Info', + author: 'Author', + desc: 'Desc', + status: 'Status', + stop: 'Stop', + start: 'Start', + error: 'Error', + }, + control: { + title: 'Control', + start: 'Start', + stop: 'Stop', + upgrade: 'Upgrade', + update: 'Update', + install: 'Install', + uninstall: 'UnInstall', + cancelTip: 'There is unfinished history. Please wait until it is finished', + }, + content: { + title: 'README', + }, + installDialog: { + tip: { + tip1: 'Put the project into the specified directory, the file name must not have any special characters (if it is already in the directory, it will be ignored).', + tip2: 'Enter the project name to install (project file name)', + }, + step: 'Step', + goDir: 'Go to Specified Directory', + confirm: 'Install', + }, }, }; diff --git a/src/renderer/src/locales/lang/zh_CN/pages/lab.ts b/src/renderer/src/locales/lang/zh_CN/pages/lab.ts index e1e17d186..0fe9800fd 100644 --- a/src/renderer/src/locales/lang/zh_CN/pages/lab.ts +++ b/src/renderer/src/locales/lang/zh_CN/pages/lab.ts @@ -360,17 +360,39 @@ export default { }, pluginCenter: { title: '插件中心', - search: '搜索', - install: '安装', - uninstall: '卸载', - update: '更新', - detail: '详情', - installed: '已安装', - uninstalled: '未安装', - updateAll: '全部更新', - updateSuccess: '更新成功', - updateFail: '更新失败', - installSuccess: '安装成功', - installFail: '安装失败', + server: '服务', + file: '目录', + empty: '空空如也', + info: { + title: '应用信息', + author: '作者', + desc: '描述', + status: '状态', + stop: '停止', + start: '启动', + error: '出错', + }, + control: { + title: '控制中心', + start: '启动', + stop: '停止', + upgrade: '升级', + update: '更新', + install: '安装', + uninstall: '卸载', + cancelTip: '历史存在未执行完内容, 请等完成后执行', + }, + content: { + title: 'README', + }, + installDialog: { + tip: { + tip1: '将项目放入指定目录中, 文件名不可有特殊字符(如已放入则忽略)', + tip2: '输入项目名进行安装(项目文件名)', + }, + step: '步骤', + goDir: '前往指定目录', + confirm: '安装', + }, }, }; diff --git a/src/renderer/src/pages/lab/components/pluginCenter/index.vue b/src/renderer/src/pages/lab/components/pluginCenter/index.vue new file mode 100644 index 000000000..6c1d35aaf --- /dev/null +++ b/src/renderer/src/pages/lab/components/pluginCenter/index.vue @@ -0,0 +1,462 @@ + + + + + diff --git a/src/renderer/src/pages/lab/index.vue b/src/renderer/src/pages/lab/index.vue index fc58f566f..ca3669b73 100644 --- a/src/renderer/src/pages/lab/index.vue +++ b/src/renderer/src/pages/lab/index.vue @@ -23,6 +23,7 @@ const componentMap = { 'jsEdit': defineAsyncComponent(() => import('./components/jsEdit/index.vue')), 'staticFilter': defineAsyncComponent(() => import('./components/staticFilter/index.vue')), 'snifferPlay': defineAsyncComponent(() => import('./components/snifferPlay/index.vue')), + 'pluginCenter': defineAsyncComponent(() => import('./components/pluginCenter/index.vue')), }; const currentComponent = shallowRef(componentMap['dataCrypto']); @@ -45,6 +46,10 @@ const settingNav = computed(() => { }, { id: 'snifferPlay', name: t('pages.lab.nav.snifferPlay') + }, + { + id: 'pluginCenter', + name: t('pages.lab.nav.pluginCenter') } ] }); From bdfcc664777ad292573d40ad88ca27bd738db8dd Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Fri, 6 Dec 2024 13:58:28 +0800 Subject: [PATCH 007/175] [optimize] route --- src/main/core/server/routes/v1/file/work.ts | 11 +-- src/main/core/server/routes/v1/index.ts | 19 +++-- src/main/core/server/routes/v1/plugin/work.ts | 85 +++++++++++++++++++ src/main/core/server/routes/v1/proxy/work.ts | 32 +------ src/main/utils/hiker/file.ts | 58 ++++++++++--- 5 files changed, 147 insertions(+), 58 deletions(-) create mode 100644 src/main/core/server/routes/v1/plugin/work.ts diff --git a/src/main/core/server/routes/v1/file/work.ts b/src/main/core/server/routes/v1/file/work.ts index 0dec639c5..2c0b4170c 100644 --- a/src/main/core/server/routes/v1/file/work.ts +++ b/src/main/core/server/routes/v1/file/work.ts @@ -14,6 +14,7 @@ import { } from '@main/utils/hiker/file'; const API_PREFIX = 'api/v1/file'; +const APP_FILE_PATH = join(APP_STORE_PATH, 'file'); const api: FastifyPluginAsync = async (fastify): Promise => { fastify.delete(`/${API_PREFIX}/*`, async (req: FastifyRequest<{ Params: { [key: string]: string } }>) => { @@ -47,13 +48,13 @@ const api: FastifyPluginAsync = async (fastify): Promise => { }; // 注入给index.js文件main函数里使用 const fileName = req.params['*']; - const exists = await fileExist(fileName); + const exists = await fileExist(join(APP_FILE_PATH, fileName)); let response: any = ''; if (exists) { - const stats = await fileState(fileName); + const stats = await fileState(join(APP_FILE_PATH, fileName)); if (stats === 'dir') { - const indexPath = join(fileName, './index.js'); + const indexPath = join(APP_FILE_PATH, fileName, './index.js'); const indexStats = await fileState(indexPath); if (indexStats === 'file') { @@ -79,7 +80,7 @@ const api: FastifyPluginAsync = async (fastify): Promise => { }; } } else if (stats === 'file') { - response = await readFile(fileName); + response = await readFile(join(APP_FILE_PATH, fileName)); } return response; } else { @@ -128,7 +129,7 @@ const api: FastifyPluginAsync = async (fastify): Promise => { } }; - await walk(APP_STORE_PATH, APP_STORE_PATH); + await walk(APP_FILE_PATH, APP_FILE_PATH); return doc; }); diff --git a/src/main/core/server/routes/v1/index.ts b/src/main/core/server/routes/v1/index.ts index 2f12eec80..7a9ae5596 100644 --- a/src/main/core/server/routes/v1/index.ts +++ b/src/main/core/server/routes/v1/index.ts @@ -1,17 +1,17 @@ -import { work as starWork } from './star'; -import { work as historyWork } from './history'; -import { work as settingWork } from './setting'; import { db } from './db'; -import { work as proxyWork } from './proxy'; -import { ad, ai, jsEdit, staticFilter } from './lab'; -import { work as fileWork } from './file'; -import { barrage } from './player'; -import { work as systemWork } from './system'; - import { db as driveDb, work as driveWork } from './drive'; +import { work as fileWork } from './file'; +import { work as historyWork } from './history'; +import { ad, ai, jsEdit, staticFilter } from './lab'; import { channel, iptv } from './live'; import { db as analyzeDb, work as analyzeWork } from './parse'; +import { barrage } from './player'; +import { work as pluginWork } from './plugin'; +import { work as proxyWork } from './proxy'; +import { work as settingWork } from './setting'; import { cms, hot, db as sietDb, recomm } from './site'; +import { work as systemWork } from './system'; +import { work as starWork } from './star'; const routesModules = { analyzeDb, @@ -36,6 +36,7 @@ const routesModules = { fileWork, barrage, systemWork, + pluginWork, }; export default routesModules; diff --git a/src/main/core/server/routes/v1/plugin/work.ts b/src/main/core/server/routes/v1/plugin/work.ts new file mode 100644 index 000000000..1ba31be98 --- /dev/null +++ b/src/main/core/server/routes/v1/plugin/work.ts @@ -0,0 +1,85 @@ +import { FastifyPluginAsync, FastifyRequest } from 'fastify'; +import { join } from 'path'; +import { APP_STORE_PATH } from '@main/utils/hiker/file'; +import adapter from './utils/adapter'; + +const API_PREFIX = 'api/v1/plugin'; +const APP_PLUGIN_PATH = join(APP_STORE_PATH, 'plugin'); + +const pluginAdapter = new adapter({ baseDir: APP_PLUGIN_PATH }); + +const api: FastifyPluginAsync = async (fastify): Promise => { + fastify.get(`/${API_PREFIX}/list`, async () => { + const res = await pluginAdapter.list(); + return { + code: 0, + msg: 'ok', + data: res, + }; + }); + fastify.post(`/${API_PREFIX}/info`, async (req: FastifyRequest<{ Body: any[] }>) => { + const plugins = req.body; + const res = await pluginAdapter.info(plugins); + return { + code: 0, + msg: 'ok', + data: res, + }; + }); + fastify.post(`/${API_PREFIX}/install`, async (req: FastifyRequest<{ Body: any[] }>) => { + const plugins = req.body; + const res = await pluginAdapter.install(plugins); + return { + code: 0, + msg: 'ok', + data: res, + }; + }); + fastify.post(`/${API_PREFIX}/uninstall`, async (req: FastifyRequest<{ Body: any[] }>) => { + const plugins = req.body; + const res = await pluginAdapter.uninstall(plugins); + return { + code: 0, + msg: 'ok', + data: res, + }; + }); + fastify.post(`/${API_PREFIX}/update`, async (req: FastifyRequest<{ Body: any[] }>) => { + const plugins = req.body; + const res = await pluginAdapter.update(plugins); + return { + code: 0, + msg: 'ok', + data: res, + }; + }); + fastify.post(`/${API_PREFIX}/upgrade`, async (req: FastifyRequest<{ Body: any[] }>) => { + const plugins = req.body; + const res = await pluginAdapter.upgrade(plugins); + return { + code: 0, + msg: 'ok', + data: res, + }; + }); + fastify.post(`/${API_PREFIX}/start`, async (req: FastifyRequest<{ Body: any[] }>) => { + const plugins = req.body; + const res = await pluginAdapter.start(plugins); + return { + code: 0, + msg: 'ok', + data: res, + }; + }); + fastify.post(`/${API_PREFIX}/stop`, async (req: FastifyRequest<{ Body: any[] }>) => { + const plugins = req.body; + const res = await pluginAdapter.stop(plugins); + return { + code: 0, + msg: 'ok', + data: res, + }; + }); +}; + +export default api; diff --git a/src/main/core/server/routes/v1/proxy/work.ts b/src/main/core/server/routes/v1/proxy/work.ts index 7239e6bf1..d8f0bdcf2 100644 --- a/src/main/core/server/routes/v1/proxy/work.ts +++ b/src/main/core/server/routes/v1/proxy/work.ts @@ -1,7 +1,6 @@ import { FastifyReply, FastifyPluginAsync, FastifyRequest } from 'fastify'; -import { pipeline } from 'stream'; import { hash, base64 } from '@main/utils/crypto'; -import request, { completeRequest } from '@main/utils/request'; +import request from '@main/utils/request'; const API_PREFIX = 'proxy'; const api: FastifyPluginAsync = async (fastify): Promise => { @@ -68,35 +67,6 @@ const api: FastifyPluginAsync = async (fastify): Promise => { data: `http://127.0.0.1:9978/proxy?do=js&url=${url}`, }; }); - fastify.get( - `/${API_PREFIX}/video`, - async (req: FastifyRequest<{ Querystring: { [key: string]: string } }>, reply: FastifyReply) => { - const { url, headers } = req.query; - const response = await completeRequest({ - method: 'get', - url: url, - responseType: 'stream', // 重要:设置响应类型为流 - // headers: { 'Custom-Header': 'Custom Value' } - }); - reply.raw.on('close', () => { - console.log('Client disconnected, stopping stream.'); - response.data.destroy(); // 销毁目标流 - }); - reply.status(response.code); - for (const [key, value] of Object.entries(response.headers)) { - reply.header(key, value); - } - // response.pipe(reply.raw); - pipeline(response.data, reply.raw, (err) => { - if (err) { - console.error('Pipeline error:', err); - if (!reply.raw.headersSent) { - reply.code(500).send({ error: 'Streaming error' }); - } - } - }); - }, - ); }; export default api; diff --git a/src/main/utils/hiker/file.ts b/src/main/utils/hiker/file.ts index 4b8e40b94..5c437fff4 100644 --- a/src/main/utils/hiker/file.ts +++ b/src/main/utils/hiker/file.ts @@ -5,7 +5,7 @@ import { gzip } from '@main/utils/crypto'; const APP_MARK = 'zy'; const APP_MARK_PATH = `${APP_MARK}://`; -const APP_STORE_PATH = join(app.getPath('userData'), 'file'); +const APP_STORE_PATH = app.getPath('userData'); const isCheckAppMark = (url: string) => url.startsWith(APP_MARK_PATH); const isCheckAppStore = (url: string) => url.startsWith(APP_STORE_PATH); const relative2absolute = (path: string) => { @@ -34,9 +34,7 @@ const joinPath = (path: string) => { const saveFile = (fileName: string, content: string, crypto: number = 0) => { try { if (!content || !fileName) return false; - if (crypto !== 0) { - content = gzip.encode(content); - } + if (crypto !== 0) content = gzip.encode(content); fs.writeFileSync(joinPath(fileName), content, 'utf8'); return true; } catch { @@ -44,18 +42,39 @@ const saveFile = (fileName: string, content: string, crypto: number = 0) => { } }; +const saveJson = (fileName: string, content: object, crypto: number = 0) => { + try { + if (!content || !fileName) return false; + fs.writeJsonSync(joinPath(fileName), content, 'utf8'); + return true; + } catch { + return false; + } +}; + const readFile = (fileName: string, crypto: number = 0) => { try { - if (!fileName) return false; + if (!fileName) return ''; let content = fs.readFileSync(joinPath(fileName), 'utf8'); - if (crypto !== 0) { - content = gzip.decode(content); - } + if (crypto !== 0) content = gzip.encode(content); return content; } catch { return ''; } }; + +const readJson = (fileName: string, crypto: number = 0) => { + const defaultData = JSON.parse(JSON.stringify('')); + try { + if (!fileName) return defaultData; + let content = fs.readJSONSync(joinPath(fileName), 'utf8'); + if (crypto !== 0) content = gzip.encode(content); + return content; + } catch { + return defaultData; + } +}; + const deleteFile = (fileName: string) => { try { if (!fileName) return false; @@ -69,8 +88,7 @@ const deleteFile = (fileName: string) => { const fileExist = (fileName: string) => { try { if (!fileName) return false; - fs.existsSync(joinPath(fileName)); - return true; + return fs.existsSync(joinPath(fileName)); } catch { return false; } @@ -98,10 +116,21 @@ const readDir = (path: string) => { const deleteDir = (path: string) => { try { - if (!path) return []; - return fs.rmdirSync(joinPath(path), { recursive: true }); + if (!path) return false; + fs.rmdirSync(joinPath(path), { recursive: true }); + return true; } catch { - return []; + return false; + } +}; + +const createDir = (path: string) => { + try { + if (!path) return false; + fs.mkdirSync(joinPath(path), { recursive: true }); + return true; + } catch { + return false; } }; @@ -112,8 +141,11 @@ export { deleteFile, readFile, saveFile, + saveJson, readDir, + readJson, deleteDir, + createDir, relative2absolute, absolute2relative, }; From dca5c6b217e98364cee93268d7db7366f85a99d0 Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Fri, 6 Dec 2024 13:58:42 +0800 Subject: [PATCH 008/175] [change] code wordWrap on --- src/renderer/src/pages/lab/components/jsEdit/index.vue | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/renderer/src/pages/lab/components/jsEdit/index.vue b/src/renderer/src/pages/lab/components/jsEdit/index.vue index 9ec82bc16..26a41f45a 100644 --- a/src/renderer/src/pages/lab/components/jsEdit/index.vue +++ b/src/renderer/src/pages/lab/components/jsEdit/index.vue @@ -328,6 +328,7 @@ const codeEditConf = ref({ language: 'javascript', readOnly: false, theme: store.displayMode === 'light' ? 'vs' : 'vs-dark', + wordWrap: 'on', automaticLayout: true, folding: true, roundedSelection: false, @@ -339,6 +340,7 @@ const logEditConf = ref({ language: 'javascript', readOnly: true, theme: store.displayMode === 'light' ? 'vs' : 'vs-dark', + wordWrap: 'on', automaticLayout: true, folding: true, roundedSelection: false, From 64b5dc1846a6c5414490a7f9582cfca01c5a810e Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Fri, 6 Dec 2024 14:00:23 +0800 Subject: [PATCH 009/175] [change] npm packages --- package.json | 34 +- yarn.lock | 4043 +++++++++++++++++++++++++++++++++++--------------- 2 files changed, 2887 insertions(+), 1190 deletions(-) diff --git a/package.json b/package.json index a8d38ffce..c01259454 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zyfun", - "version": "3.3.9", + "version": "3.3.10-beta1206", "description": "zyfun client", "main": "./out/main/index.js", "repository": { @@ -47,10 +47,13 @@ "dependencies": { "@electric-sql/pglite": "^0.2.14", "@electron/remote": "^2.1.2", - "puppeteer-core": "^23.9.0", + "npm": "6.14.18", + "pglite-server": "^0.1.4", + "puppeteer-core": "^23.10.1", "puppeteer-in-electron": "^3.0.5", "sync-fetch": "^0.6.0-2", - "sync-request": "^6.1.0" + "sync-request": "^6.1.0", + "workerpool": "^9.2.0" }, "devDependencies": { "@electron-toolkit/eslint-config": "^1.0.2", @@ -65,7 +68,7 @@ "@imengyu/vue3-context-menu": "^1.4.3", "@nplayer/danmaku": "^1.0.12", "@rushstack/eslint-patch": "^1.10.4", - "@swc/core": "^1.9.3", + "@swc/core": "^1.10.0", "@tdesign-vue-next/chat": "^0.1.4", "@types/cheerio": "^0.22.35", "@types/electron-localshortcut": "^3.1.3", @@ -73,25 +76,25 @@ "@types/lodash": "^4.17.13", "@types/node": "^22.10.1", "@types/uuid": "^10.0.0", - "@types/web": "^0.0.185", + "@types/web": "^0.0.186", "@vitejs/plugin-vue": "^5.2.1", "@vitejs/plugin-vue-jsx": "^4.1.1", "@vueuse/core": "12.0.0", - "@xmldom/xmldom": "^0.9.5", + "@xmldom/xmldom": "^0.9.6", "artplayer": "^5.2.1", "artplayer-plugin-danmuku": "^5.1.4", - "axios": "^1.7.8", + "axios": "^1.7.9", "cheerio": "1.0.0", "compare-versions": "^6.1.1", "crypto-js": "^4.2.0", "depcheck": "^1.4.7", "dplayer": "^1.27.1", - "drizzle-kit": "^0.28.1", - "drizzle-orm": "^0.36.4", + "drizzle-kit": "^0.29.1", + "drizzle-orm": "^0.37.0", "electron": "^33.2.1", "electron-builder": "^25.1.8", "electron-localshortcut": "^3.2.1", - "electron-log": "^5.2.3", + "electron-log": "^5.2.4", "electron-notarize": "^1.2.2", "electron-updater": "^6.3.9", "electron-vite": "^2.3.0", @@ -126,18 +129,17 @@ "node-json-db": "^2.3.0", "node-rsa": "^1.1.1", "nplayer": "^1.0.15", - "npm": "^10.9.1", "npm-check-updates": "^17.1.11", - "openai": "^4.73.1", + "openai": "^4.76.0", "ora": "^8.1.1", "p-queue": "^8.0.1", "pako": "^2.1.0", - "pinia": "^2.2.8", + "pinia": "^2.3.0", "pinia-plugin-persistedstate": "^4.1.3", - "prettier": "^3.4.1", + "prettier": "^3.4.2", "qrcode.vue": "^3.6.0", "querystring": "^0.2.1", - "shaka-player": "^4.12.3", + "shaka-player": "^4.12.4", "sm-crypto": "^0.3.13", "smooth-scrollbar": "^8.8.4", "stylelint": "^16.11.0", @@ -149,7 +151,7 @@ "unplugin-vue-components": "^0.27.5", "uuid": "^11.0.3", "v3-infinite-loading": "^1.3.2", - "vite": "^6.0.1", + "vite": "^6.0.3", "vite-plugin-vue-devtools": "^7.6.7", "vite-svg-loader": "^5.1.0", "vue": "^3.5.13", diff --git a/yarn.lock b/yarn.lock index d246070af..3fa797c94 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1080,6 +1080,14 @@ resolved "https://registry.npmmirror.com/@humanwhocodes/retry/-/retry-0.4.1.tgz#9a96ce501bc62df46c4031fbd970e3cc6b10f07b" integrity sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA== +"@iarna/cli@^2.1.0": + version "2.2.0" + resolved "https://registry.npmmirror.com/@iarna/cli/-/cli-2.2.0.tgz#02807c8902fa1b515647c304c9c4d6db8aa9783f" + integrity sha512-fn1dwhQuWD/OuM/XZhaEy2GOL5Hta/Dis1ZtER/FAe/BKXTHohD4sxPcYQePHUYmrknD+iV+3uic0M8zH/9sJQ== + dependencies: + glob "^7.1.2" + signal-exit "^3.0.2" + "@imengyu/vue3-context-menu@^1.4.3": version "1.4.3" resolved "https://registry.npmmirror.com/@imengyu/vue3-context-menu/-/vue3-context-menu-1.4.3.tgz#9c4e634eccdc0c9fe5b87e8f7f5e5d5917539c43" @@ -1118,18 +1126,6 @@ wrap-ansi "^8.1.0" wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" -"@isaacs/fs-minipass@^4.0.0": - version "4.0.1" - resolved "https://registry.npmmirror.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32" - integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w== - dependencies: - minipass "^7.0.4" - -"@isaacs/string-locale-compare@^1.1.0": - version "1.1.0" - resolved "https://registry.npmmirror.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" - integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== - "@jridgewell/gen-mapping@^0.3.5": version "0.3.5" resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" @@ -1215,83 +1211,6 @@ resolved "https://registry.npmmirror.com/@nplayer/danmaku/-/danmaku-1.0.12.tgz#f1ff238644730c19da4b8de2dab6ee406620d104" integrity sha512-VebpoFddFv5Rcf1u2g2q49/Ri/v21mRDDfhSfIZy5xmo4w0Ig8zG8N44r/YQe6F5ratciN5F7VvlqKqFbOjxog== -"@npmcli/agent@^2.0.0": - version "2.2.2" - resolved "https://registry.npmmirror.com/@npmcli/agent/-/agent-2.2.2.tgz#967604918e62f620a648c7975461c9c9e74fc5d5" - integrity sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og== - dependencies: - agent-base "^7.1.0" - http-proxy-agent "^7.0.0" - https-proxy-agent "^7.0.1" - lru-cache "^10.0.1" - socks-proxy-agent "^8.0.3" - -"@npmcli/agent@^3.0.0": - version "3.0.0" - resolved "https://registry.npmmirror.com/@npmcli/agent/-/agent-3.0.0.tgz#1685b1fbd4a1b7bb4f930cbb68ce801edfe7aa44" - integrity sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q== - dependencies: - agent-base "^7.1.0" - http-proxy-agent "^7.0.0" - https-proxy-agent "^7.0.1" - lru-cache "^10.0.1" - socks-proxy-agent "^8.0.3" - -"@npmcli/arborist@^8.0.0": - version "8.0.0" - resolved "https://registry.npmmirror.com/@npmcli/arborist/-/arborist-8.0.0.tgz#681af823ac8ca067404dee57e0f91a3d27d6ef0a" - integrity sha512-APDXxtXGSftyXibl0dZ3CuZYmmVnkiN3+gkqwXshY4GKC2rof2+Lg0sGuj6H1p2YfBAKd7PRwuMVhu6Pf/nQ/A== - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/fs" "^4.0.0" - "@npmcli/installed-package-contents" "^3.0.0" - "@npmcli/map-workspaces" "^4.0.1" - "@npmcli/metavuln-calculator" "^8.0.0" - "@npmcli/name-from-folder" "^3.0.0" - "@npmcli/node-gyp" "^4.0.0" - "@npmcli/package-json" "^6.0.1" - "@npmcli/query" "^4.0.0" - "@npmcli/redact" "^3.0.0" - "@npmcli/run-script" "^9.0.1" - bin-links "^5.0.0" - cacache "^19.0.1" - common-ancestor-path "^1.0.1" - hosted-git-info "^8.0.0" - json-parse-even-better-errors "^4.0.0" - json-stringify-nice "^1.1.4" - lru-cache "^10.2.2" - minimatch "^9.0.4" - nopt "^8.0.0" - npm-install-checks "^7.1.0" - npm-package-arg "^12.0.0" - npm-pick-manifest "^10.0.0" - npm-registry-fetch "^18.0.1" - pacote "^19.0.0" - parse-conflict-json "^4.0.0" - proc-log "^5.0.0" - proggy "^3.0.0" - promise-all-reject-late "^1.0.0" - promise-call-limit "^3.0.1" - read-package-json-fast "^4.0.0" - semver "^7.3.7" - ssri "^12.0.0" - treeverse "^3.0.0" - walk-up-path "^3.0.1" - -"@npmcli/config@^9.0.0": - version "9.0.0" - resolved "https://registry.npmmirror.com/@npmcli/config/-/config-9.0.0.tgz#bd810a1e9e23fcfad800e40d6c2c8b8f4f4318e1" - integrity sha512-P5Vi16Y+c8E0prGIzX112ug7XxqfaPFUVW/oXAV+2VsxplKZEnJozqZ0xnK8V8w/SEsBf+TXhUihrEIAU4CA5Q== - dependencies: - "@npmcli/map-workspaces" "^4.0.1" - "@npmcli/package-json" "^6.0.1" - ci-info "^4.0.0" - ini "^5.0.0" - nopt "^8.0.0" - proc-log "^5.0.0" - semver "^7.3.5" - walk-up-path "^3.0.1" - "@npmcli/fs@^2.1.0": version "2.1.2" resolved "https://registry.npmmirror.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" @@ -1300,64 +1219,6 @@ "@gar/promisify" "^1.1.3" semver "^7.3.5" -"@npmcli/fs@^3.1.0": - version "3.1.1" - resolved "https://registry.npmmirror.com/@npmcli/fs/-/fs-3.1.1.tgz#59cdaa5adca95d135fc00f2bb53f5771575ce726" - integrity sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg== - dependencies: - semver "^7.3.5" - -"@npmcli/fs@^4.0.0": - version "4.0.0" - resolved "https://registry.npmmirror.com/@npmcli/fs/-/fs-4.0.0.tgz#a1eb1aeddefd2a4a347eca0fab30bc62c0e1c0f2" - integrity sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q== - dependencies: - semver "^7.3.5" - -"@npmcli/git@^6.0.0", "@npmcli/git@^6.0.1": - version "6.0.1" - resolved "https://registry.npmmirror.com/@npmcli/git/-/git-6.0.1.tgz#9ee894a35c2082d0b41883e267ff140aece457d5" - integrity sha512-BBWMMxeQzalmKadyimwb2/VVQyJB01PH0HhVSNLHNBDZN/M/h/02P6f8fxedIiFhpMj11SO9Ep5tKTBE7zL2nw== - dependencies: - "@npmcli/promise-spawn" "^8.0.0" - ini "^5.0.0" - lru-cache "^10.0.1" - npm-pick-manifest "^10.0.0" - proc-log "^5.0.0" - promise-inflight "^1.0.1" - promise-retry "^2.0.1" - semver "^7.3.5" - which "^5.0.0" - -"@npmcli/installed-package-contents@^3.0.0": - version "3.0.0" - resolved "https://registry.npmmirror.com/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz#2c1170ff4f70f68af125e2842e1853a93223e4d1" - integrity sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q== - dependencies: - npm-bundled "^4.0.0" - npm-normalize-package-bin "^4.0.0" - -"@npmcli/map-workspaces@^4.0.1": - version "4.0.2" - resolved "https://registry.npmmirror.com/@npmcli/map-workspaces/-/map-workspaces-4.0.2.tgz#d02c5508bf55624f60aaa58fe413748a5c773802" - integrity sha512-mnuMuibEbkaBTYj9HQ3dMe6L0ylYW+s/gfz7tBDMFY/la0w9Kf44P9aLn4/+/t3aTR3YUHKoT6XQL9rlicIe3Q== - dependencies: - "@npmcli/name-from-folder" "^3.0.0" - "@npmcli/package-json" "^6.0.0" - glob "^10.2.2" - minimatch "^9.0.0" - -"@npmcli/metavuln-calculator@^8.0.0": - version "8.0.1" - resolved "https://registry.npmmirror.com/@npmcli/metavuln-calculator/-/metavuln-calculator-8.0.1.tgz#c14307a1f0e43524e7ae833d1787c2e0425a9f44" - integrity sha512-WXlJx9cz3CfHSt9W9Opi1PTFc4WZLFomm5O8wekxQZmkyljrBRwATwDxfC9iOXJwYVmfiW1C1dUe0W2aN0UrSg== - dependencies: - cacache "^19.0.0" - json-parse-even-better-errors "^4.0.0" - pacote "^20.0.0" - proc-log "^5.0.0" - semver "^7.3.5" - "@npmcli/move-file@^2.0.0": version "2.0.1" resolved "https://registry.npmmirror.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" @@ -1366,60 +1227,6 @@ mkdirp "^1.0.4" rimraf "^3.0.2" -"@npmcli/name-from-folder@^3.0.0": - version "3.0.0" - resolved "https://registry.npmmirror.com/@npmcli/name-from-folder/-/name-from-folder-3.0.0.tgz#ed49b18d16b954149f31240e16630cfec511cd57" - integrity sha512-61cDL8LUc9y80fXn+lir+iVt8IS0xHqEKwPu/5jCjxQTVoSCmkXvw4vbMrzAMtmghz3/AkiBjhHkDKUH+kf7kA== - -"@npmcli/node-gyp@^4.0.0": - version "4.0.0" - resolved "https://registry.npmmirror.com/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz#01f900bae62f0f27f9a5a127b40d443ddfb9d4c6" - integrity sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA== - -"@npmcli/package-json@^6.0.0", "@npmcli/package-json@^6.0.1": - version "6.0.1" - resolved "https://registry.npmmirror.com/@npmcli/package-json/-/package-json-6.0.1.tgz#550a8eb3e0ae9ad8577cb7a3f2d677a04a3bcee9" - integrity sha512-YW6PZ99sc1Q4DINEY2td5z9Z3rwbbsx7CyCnOc7UXUUdePXh5gPi1UeaoQVmKQMVbIU7aOwX2l1OG5ZfjgGi5g== - dependencies: - "@npmcli/git" "^6.0.0" - glob "^10.2.2" - hosted-git-info "^8.0.0" - json-parse-even-better-errors "^4.0.0" - normalize-package-data "^7.0.0" - proc-log "^5.0.0" - semver "^7.5.3" - -"@npmcli/promise-spawn@^8.0.0", "@npmcli/promise-spawn@^8.0.2": - version "8.0.2" - resolved "https://registry.npmmirror.com/@npmcli/promise-spawn/-/promise-spawn-8.0.2.tgz#053688f8bc2b4ecc036d2d52c691fd82af58ea5e" - integrity sha512-/bNJhjc+o6qL+Dwz/bqfTQClkEO5nTQ1ZEcdCkAQjhkZMHIh22LPG7fNh1enJP1NKWDqYiiABnjFCY7E0zHYtQ== - dependencies: - which "^5.0.0" - -"@npmcli/query@^4.0.0": - version "4.0.0" - resolved "https://registry.npmmirror.com/@npmcli/query/-/query-4.0.0.tgz#7a2470254f5a12a1499d2296a7343043c7847568" - integrity sha512-3pPbese0fbCiFJ/7/X1GBgxAKYFE8sxBddA7GtuRmOgNseH4YbGsXJ807Ig3AEwNITjDUISHglvy89cyDJnAwA== - dependencies: - postcss-selector-parser "^6.1.2" - -"@npmcli/redact@^3.0.0": - version "3.0.0" - resolved "https://registry.npmmirror.com/@npmcli/redact/-/redact-3.0.0.tgz#ab3b6413355be7f3c02e87c36c2b0c2f9773fce4" - integrity sha512-/1uFzjVcfzqrgCeGW7+SZ4hv0qLWmKXVzFahZGJ6QuJBj6Myt9s17+JL86i76NV9YSnJRcGXJYQbAU0rn1YTCQ== - -"@npmcli/run-script@^9.0.0", "@npmcli/run-script@^9.0.1": - version "9.0.1" - resolved "https://registry.npmmirror.com/@npmcli/run-script/-/run-script-9.0.1.tgz#f90a0cf4f4e8f42d66669d3af568c5036859b654" - integrity sha512-q9C0uHrb6B6cm3qXVM32UmpqTKuFGbtP23O2K5sLvPMz2hilKd0ptqGXSpuunOuOmPQb/aT5F/kCXFc1P2gO/A== - dependencies: - "@npmcli/node-gyp" "^4.0.0" - "@npmcli/package-json" "^6.0.0" - "@npmcli/promise-spawn" "^8.0.0" - node-gyp "^10.0.0" - proc-log "^5.0.0" - which "^5.0.0" - "@nuxt/kit@^3.13.2": version "3.14.1592" resolved "https://registry.npmmirror.com/@nuxt/kit/-/kit-3.14.1592.tgz#f959a269424c1ee313585a46112e474b6ccab3bc" @@ -1485,10 +1292,10 @@ resolved "https://registry.npmmirror.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== -"@puppeteer/browsers@2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@puppeteer/browsers/-/browsers-2.4.1.tgz#7afd271199cc920ece2ff25109278be0a3e8a225" - integrity sha512-0kdAbmic3J09I6dT8e9vE2JOCSt13wHCW5x/ly8TSt2bDtuIWe2TgLZZDHdcziw9AVCzflMAXCrVyRIhIs44Ng== +"@puppeteer/browsers@2.5.0": + version "2.5.0" + resolved "https://registry.npmmirror.com/@puppeteer/browsers/-/browsers-2.5.0.tgz#7e4f7ba8f04e54f11501b78dc7bcc4033de935d4" + integrity sha512-6TQAc/5uRILE6deixJ1CR8rXyTbzXIXNgO1D0Woi9Bqicz2FV5iKP3BHYEg6o4UATCMcbQQ0jbmeaOkn/HQk2w== dependencies: debug "^4.3.7" extract-zip "^2.0.1" @@ -1608,52 +1415,6 @@ resolved "https://registry.npmmirror.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz#60de891bb126abfdc5410fdc6166aca065f10a0c" integrity sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg== -"@sigstore/bundle@^3.0.0": - version "3.0.0" - resolved "https://registry.npmmirror.com/@sigstore/bundle/-/bundle-3.0.0.tgz#ffffc750436c6eb8330ead1ca65bc892f893a7c5" - integrity sha512-XDUYX56iMPAn/cdgh/DTJxz5RWmqKV4pwvUAEKEWJl+HzKdCd/24wUa9JYNMlDSCb7SUHAdtksxYX779Nne/Zg== - dependencies: - "@sigstore/protobuf-specs" "^0.3.2" - -"@sigstore/core@^2.0.0": - version "2.0.0" - resolved "https://registry.npmmirror.com/@sigstore/core/-/core-2.0.0.tgz#f888a8e4c8fdaa27848514a281920b6fd8eca955" - integrity sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg== - -"@sigstore/protobuf-specs@^0.3.2": - version "0.3.2" - resolved "https://registry.npmmirror.com/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz#5becf88e494a920f548d0163e2978f81b44b7d6f" - integrity sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw== - -"@sigstore/sign@^3.0.0": - version "3.0.0" - resolved "https://registry.npmmirror.com/@sigstore/sign/-/sign-3.0.0.tgz#70752aaa54dfeafa0b0fbe1f58ebe9fe3d621f8f" - integrity sha512-UjhDMQOkyDoktpXoc5YPJpJK6IooF2gayAr5LvXI4EL7O0vd58okgfRcxuaH+YTdhvb5aa1Q9f+WJ0c2sVuYIw== - dependencies: - "@sigstore/bundle" "^3.0.0" - "@sigstore/core" "^2.0.0" - "@sigstore/protobuf-specs" "^0.3.2" - make-fetch-happen "^14.0.1" - proc-log "^5.0.0" - promise-retry "^2.0.1" - -"@sigstore/tuf@^3.0.0": - version "3.0.0" - resolved "https://registry.npmmirror.com/@sigstore/tuf/-/tuf-3.0.0.tgz#5f657e3052e93cb09e1735ee7f52b7938351278d" - integrity sha512-9Xxy/8U5OFJu7s+OsHzI96IX/OzjF/zj0BSSaWhgJgTqtlBhQIV2xdrQI5qxLD7+CWWDepadnXAxzaZ3u9cvRw== - dependencies: - "@sigstore/protobuf-specs" "^0.3.2" - tuf-js "^3.0.1" - -"@sigstore/verify@^2.0.0": - version "2.0.0" - resolved "https://registry.npmmirror.com/@sigstore/verify/-/verify-2.0.0.tgz#4ad96e9234b71b57622c3c446b63bad805351030" - integrity sha512-Ggtq2GsJuxFNUvQzLoXqRwS4ceRfLAJnrIHUDrzAD0GgnOhwujJkKkxM/s5Bako07c3WtAs/sZo5PJq7VHjeDg== - dependencies: - "@sigstore/bundle" "^3.0.0" - "@sigstore/core" "^2.0.0" - "@sigstore/protobuf-specs" "^0.3.2" - "@sindresorhus/is@^4.0.0": version "4.6.0" resolved "https://registry.npmmirror.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" @@ -1669,74 +1430,74 @@ resolved "https://registry.npmmirror.com/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz#abb11d99aeb6d27f1b563c38147a72d50058e339" integrity sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ== -"@swc/core-darwin-arm64@1.9.3": - version "1.9.3" - resolved "https://registry.npmmirror.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.9.3.tgz#cca13f7ce6e1099612a7ba017f4923857d3a4d5f" - integrity sha512-hGfl/KTic/QY4tB9DkTbNuxy5cV4IeejpPD4zo+Lzt4iLlDWIeANL4Fkg67FiVceNJboqg48CUX+APhDHO5G1w== - -"@swc/core-darwin-x64@1.9.3": - version "1.9.3" - resolved "https://registry.npmmirror.com/@swc/core-darwin-x64/-/core-darwin-x64-1.9.3.tgz#01376c6c2caea5dd0c235f21ebc7e41238153c86" - integrity sha512-IaRq05ZLdtgF5h9CzlcgaNHyg4VXuiStnOFpfNEMuI5fm5afP2S0FHq8WdakUz5WppsbddTdplL+vpeApt/WCQ== - -"@swc/core-linux-arm-gnueabihf@1.9.3": - version "1.9.3" - resolved "https://registry.npmmirror.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.9.3.tgz#4a9705903cebfc8e3e2bee71a42f7c88896e61df" - integrity sha512-Pbwe7xYprj/nEnZrNBvZfjnTxlBIcfApAGdz2EROhjpPj+FBqBa3wOogqbsuGGBdCphf8S+KPprL1z+oDWkmSQ== - -"@swc/core-linux-arm64-gnu@1.9.3": - version "1.9.3" - resolved "https://registry.npmmirror.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.9.3.tgz#722aefc00a7abfb031fae7539226c7d7683f5c8d" - integrity sha512-AQ5JZiwNGVV/2K2TVulg0mw/3LYfqpjZO6jDPtR2evNbk9Yt57YsVzS+3vHSlUBQDRV9/jqMuZYVU3P13xrk+g== - -"@swc/core-linux-arm64-musl@1.9.3": - version "1.9.3" - resolved "https://registry.npmmirror.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.9.3.tgz#6643f683311cc1dcee00970e3d6b4872225bdbd8" - integrity sha512-tzVH480RY6RbMl/QRgh5HK3zn1ZTFsThuxDGo6Iuk1MdwIbdFYUY034heWUTI4u3Db97ArKh0hNL0xhO3+PZdg== - -"@swc/core-linux-x64-gnu@1.9.3": - version "1.9.3" - resolved "https://registry.npmmirror.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.9.3.tgz#e6f5cefa244409abe1451fbb4575696a870cbd7a" - integrity sha512-ivXXBRDXDc9k4cdv10R21ccBmGebVOwKXT/UdH1PhxUn9m/h8erAWjz5pcELwjiMf27WokqPgaWVfaclDbgE+w== - -"@swc/core-linux-x64-musl@1.9.3": - version "1.9.3" - resolved "https://registry.npmmirror.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.9.3.tgz#4d45399f7a01389add61febd02da9b12f16abc81" - integrity sha512-ILsGMgfnOz1HwdDz+ZgEuomIwkP1PHT6maigZxaCIuC6OPEhKE8uYna22uU63XvYcLQvZYDzpR3ms47WQPuNEg== - -"@swc/core-win32-arm64-msvc@1.9.3": - version "1.9.3" - resolved "https://registry.npmmirror.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.9.3.tgz#8c352bcea558b9a950877cd724f132d7d51a4d80" - integrity sha512-e+XmltDVIHieUnNJHtspn6B+PCcFOMYXNJB1GqoCcyinkEIQNwC8KtWgMqUucUbEWJkPc35NHy9k8aCXRmw9Kg== - -"@swc/core-win32-ia32-msvc@1.9.3": - version "1.9.3" - resolved "https://registry.npmmirror.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.9.3.tgz#656f78b9c56413dbd590ac259dbe0d563cd8e166" - integrity sha512-rqpzNfpAooSL4UfQnHhkW8aL+oyjqJniDP0qwZfGnjDoJSbtPysHg2LpcOBEdSnEH+uIZq6J96qf0ZFD8AGfXA== - -"@swc/core-win32-x64-msvc@1.9.3": - version "1.9.3" - resolved "https://registry.npmmirror.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.9.3.tgz#9595c177d2c11909558da93b18f37e7c5ae1909c" - integrity sha512-3YJJLQ5suIEHEKc1GHtqVq475guiyqisKSoUnoaRtxkDaW5g1yvPt9IoSLOe2mRs7+FFhGGU693RsBUSwOXSdQ== - -"@swc/core@^1.9.3": - version "1.9.3" - resolved "https://registry.npmmirror.com/@swc/core/-/core-1.9.3.tgz#e5bc9b35df2f4a60026c6759c1a6575070339d4f" - integrity sha512-oRj0AFePUhtatX+BscVhnzaAmWjpfAeySpM1TCbxA1rtBDeH/JDhi5yYzAKneDYtVtBvA7ApfeuzhMC9ye4xSg== +"@swc/core-darwin-arm64@1.10.0": + version "1.10.0" + resolved "https://registry.npmmirror.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.10.0.tgz#39fd894356f8e858535e96111d34602da0a730c5" + integrity sha512-wCeUpanqZyzvgqWRtXIyhcFK3CqukAlYyP+fJpY2gWc/+ekdrenNIfZMwY7tyTFDkXDYEKzvn3BN/zDYNJFowQ== + +"@swc/core-darwin-x64@1.10.0": + version "1.10.0" + resolved "https://registry.npmmirror.com/@swc/core-darwin-x64/-/core-darwin-x64-1.10.0.tgz#d1b95c1db67ac328a96324b800843bc410d17f05" + integrity sha512-0CZPzqTynUBO+SHEl/qKsFSahp2Jv/P2ZRjFG0gwZY5qIcr1+B/v+o74/GyNMBGz9rft+F2WpU31gz2sJwyF4A== + +"@swc/core-linux-arm-gnueabihf@1.10.0": + version "1.10.0" + resolved "https://registry.npmmirror.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.10.0.tgz#e10510bb028bc3836948cb7345312269cd22295d" + integrity sha512-oq+DdMu5uJOFPtRkeiITc4kxmd+QSmK+v+OBzlhdGkSgoH3yRWZP+H2ao0cBXo93ZgCr2LfjiER0CqSKhjGuNA== + +"@swc/core-linux-arm64-gnu@1.10.0": + version "1.10.0" + resolved "https://registry.npmmirror.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.10.0.tgz#a4826c0b44db5b5a02826a0c47307f5969bcc353" + integrity sha512-Y6+PC8knchEViRxiCUj3j8wsGXaIhuvU+WqrFqV834eiItEMEI9+Vh3FovqJMBE3L7d4E4ZQtgImHCXjrHfxbw== + +"@swc/core-linux-arm64-musl@1.10.0": + version "1.10.0" + resolved "https://registry.npmmirror.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.10.0.tgz#d4adab4a646be095e3c64226a0150ebe4b874c1a" + integrity sha512-EbrX9A5U4cECCQQfky7945AW9GYnTXtCUXElWTkTYmmyQK87yCyFfY8hmZ9qMFIwxPOH6I3I2JwMhzdi8Qoz7g== + +"@swc/core-linux-x64-gnu@1.10.0": + version "1.10.0" + resolved "https://registry.npmmirror.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.10.0.tgz#278655c2b2abcb2e7ada031e75e6853777ebce4c" + integrity sha512-TaxpO6snTjjfLXFYh5EjZ78se69j2gDcqEM8yB9gguPYwkCHi2Ylfmh7iVaNADnDJFtjoAQp0L41bTV/Pfq9Cg== + +"@swc/core-linux-x64-musl@1.10.0": + version "1.10.0" + resolved "https://registry.npmmirror.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.10.0.tgz#7df236de40a685c1723a904d6dead99eea36a30f" + integrity sha512-IEGvDd6aEEKEyZFZ8oCKuik05G5BS7qwG5hO5PEMzdGeh8JyFZXxsfFXbfeAqjue4UaUUrhnoX+Ze3M2jBVMHw== + +"@swc/core-win32-arm64-msvc@1.10.0": + version "1.10.0" + resolved "https://registry.npmmirror.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.10.0.tgz#99278f8f02c79e03caeeb6d64941d0487e58d7e1" + integrity sha512-UkQ952GSpY+Z6XONj9GSW8xGSkF53jrCsuLj0nrcuw7Dvr1a816U/9WYZmmcYS8tnG2vHylhpm6csQkyS8lpCw== + +"@swc/core-win32-ia32-msvc@1.10.0": + version "1.10.0" + resolved "https://registry.npmmirror.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.10.0.tgz#a5cf2cfa3e31e8e01a3692d7e053aaa788d3cf3e" + integrity sha512-a2QpIZmTiT885u/mUInpeN2W9ClCnqrV2LnMqJR1/Fgx1Afw/hAtiDZPtQ0SqS8yDJ2VR5gfNZo3gpxWMrqdVA== + +"@swc/core-win32-x64-msvc@1.10.0": + version "1.10.0" + resolved "https://registry.npmmirror.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.10.0.tgz#ee1fdf8e6a627de33501b5a404465a7e676c8689" + integrity sha512-tZcCmMwf483nwsEBfUk5w9e046kMa1iSik4bP9Kwi2FGtOfHuDfIcwW4jek3hdcgF5SaBW1ktnK/lgQLDi5AtA== + +"@swc/core@^1.10.0": + version "1.10.0" + resolved "https://registry.npmmirror.com/@swc/core/-/core-1.10.0.tgz#9584465f7c5feaf34098466c7063c0044fa08bd8" + integrity sha512-+CuuTCmQFfzaNGg1JmcZvdUVITQXJk9sMnl1C2TiDLzOSVOJRwVD4dNo5dljX/qxpMAN+2BIYlwjlSkoGi6grg== dependencies: "@swc/counter" "^0.1.3" "@swc/types" "^0.1.17" optionalDependencies: - "@swc/core-darwin-arm64" "1.9.3" - "@swc/core-darwin-x64" "1.9.3" - "@swc/core-linux-arm-gnueabihf" "1.9.3" - "@swc/core-linux-arm64-gnu" "1.9.3" - "@swc/core-linux-arm64-musl" "1.9.3" - "@swc/core-linux-x64-gnu" "1.9.3" - "@swc/core-linux-x64-musl" "1.9.3" - "@swc/core-win32-arm64-msvc" "1.9.3" - "@swc/core-win32-ia32-msvc" "1.9.3" - "@swc/core-win32-x64-msvc" "1.9.3" + "@swc/core-darwin-arm64" "1.10.0" + "@swc/core-darwin-x64" "1.10.0" + "@swc/core-linux-arm-gnueabihf" "1.10.0" + "@swc/core-linux-arm64-gnu" "1.10.0" + "@swc/core-linux-arm64-musl" "1.10.0" + "@swc/core-linux-x64-gnu" "1.10.0" + "@swc/core-linux-x64-musl" "1.10.0" + "@swc/core-win32-arm64-msvc" "1.10.0" + "@swc/core-win32-ia32-msvc" "1.10.0" + "@swc/core-win32-x64-msvc" "1.10.0" "@swc/counter@^0.1.3": version "0.1.3" @@ -1786,19 +1547,6 @@ resolved "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== -"@tufjs/canonical-json@2.0.0": - version "2.0.0" - resolved "https://registry.npmmirror.com/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz#a52f61a3d7374833fca945b2549bc30a2dd40d0a" - integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA== - -"@tufjs/models@3.0.1": - version "3.0.1" - resolved "https://registry.npmmirror.com/@tufjs/models/-/models-3.0.1.tgz#5aebb782ebb9e06f071ae7831c1f35b462b0319c" - integrity sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA== - dependencies: - "@tufjs/canonical-json" "2.0.0" - minimatch "^9.0.5" - "@types/async-retry@^1.4.1": version "1.4.9" resolved "https://registry.npmmirror.com/@types/async-retry/-/async-retry-1.4.9.tgz#47d118e835864d633b5208a78a6907b1b44e50bc" @@ -2040,10 +1788,10 @@ resolved "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz#f066abfcd1cbe66267cdbbf0de010d8a41b41597" integrity sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow== -"@types/web@^0.0.185": - version "0.0.185" - resolved "https://registry.npmmirror.com/@types/web/-/web-0.0.185.tgz#def32eec50056cafa8218d1a625750822795c2c9" - integrity sha512-jxXqkf4sBn/WV9YsOlB5fFzWo9kGafMDF62VmVC1mFF367BuRn/2txr0ZaEchPsNIvyiLckMpxO6Xz3knpC6Nw== +"@types/web@^0.0.186": + version "0.0.186" + resolved "https://registry.npmmirror.com/@types/web/-/web-0.0.186.tgz#f34ebe66f022c4336cc298aeafb30817acf5c126" + integrity sha512-KKlMHVNDOzs9yfwCB93ur4ogZww5FOsh/RFoYYjkNDIAuUCLjHwGDD1lj7StPmnM5KfX41N41BiqL+Ui7LQEPw== "@types/yauzl@^2.9.1": version "2.10.3" @@ -2366,12 +2114,20 @@ resolved "https://registry.npmmirror.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99" integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw== -"@xmldom/xmldom@^0.9.5": - version "0.9.5" - resolved "https://registry.npmmirror.com/@xmldom/xmldom/-/xmldom-0.9.5.tgz#a2c08c3a0c5931daae67dd0385edf2f464d1fee4" - integrity sha512-6g1EwSs8cr8JhP1iBxzyVAWM6BIDvx9Y3FZRIQiMDzgG43Pxi8YkWOZ0nQj2NHgNzgXDZbJewFx/n+YAvMZrfg== +"@xmldom/xmldom@^0.9.6": + version "0.9.6" + resolved "https://registry.npmmirror.com/@xmldom/xmldom/-/xmldom-0.9.6.tgz#3eaefb585c1f920e06fb35e6dcb8d505445621c0" + integrity sha512-Su4xcxR0CPGwlDHNmVP09fqET9YxbyDXHaSob6JlBH7L6reTYaeim6zbk9o08UarO0L5GTRo3uzl0D+9lSxmvw== + +JSONStream@^1.3.4, JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.npmmirror.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" -abbrev@^1.0.0: +abbrev@1, abbrev@^1.0.0, abbrev@~1.1.1: version "1.1.1" resolved "https://registry.npmmirror.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -2381,11 +2137,6 @@ abbrev@^2.0.0: resolved "https://registry.npmmirror.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== -abbrev@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/abbrev/-/abbrev-3.0.0.tgz#c29a6337e167ac61a84b41b80461b29c5c271a27" - integrity sha512-+/kfrslGQ7TNV2ecmQwMJj/B65g5KVq1/L3SGVZ3tCYGqlzFuFCGBZJtMP99wH3NpEUyAjn0zPdPUg0D+DwrOA== - abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -2408,6 +2159,13 @@ acorn@^8.14.0, acorn@^8.8.2: resolved "https://registry.npmmirror.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== +agent-base@4, agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + dependencies: + es6-promisify "^5.0.0" + agent-base@6, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -2422,6 +2180,20 @@ agent-base@^7.0.2, agent-base@^7.1.0, agent-base@^7.1.1: dependencies: debug "^4.3.4" +agent-base@~4.2.1: + version "4.2.1" + resolved "https://registry.npmmirror.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== + dependencies: + es6-promisify "^5.0.0" + +agentkeepalive@^3.4.1: + version "3.5.3" + resolved "https://registry.npmmirror.com/agentkeepalive/-/agentkeepalive-3.5.3.tgz#c210afce942b4287e2df2fbfe6c0d57eda2ce634" + integrity sha512-yqXL+k5rr8+ZRpOAntkaaRgWgE5o8ESAj5DyRmVTCSoZxXmqemb9Dd7T4i5UzwuERdLAJUy6XzR9zFVuf0kzkw== + dependencies: + humanize-ms "^1.2.1" + agentkeepalive@^4.2.1: version "4.5.0" resolved "https://registry.npmmirror.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" @@ -2449,7 +2221,7 @@ ajv-keywords@^3.4.1: resolved "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.4: +ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.3, ajv@^6.12.4: version "6.12.6" resolved "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2474,11 +2246,33 @@ alien-signals@^0.2.0: resolved "https://registry.npmmirror.com/alien-signals/-/alien-signals-0.2.2.tgz#439d09b363dc4d609c0f6ce69362dce068d23197" integrity sha512-cZIRkbERILsBOXTQmMrxc9hgpxglstn69zm+F1ARf4aPAzdAFYd6sBq87ErO0Fj3DV94tglcyHG5kQz9nDC/8A== +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + integrity sha512-TdlOggdA/zURfMYa7ABC66j+oqfMew58KpJMbUlH3bcZP1b+cBHIHDDn5uH9INsxrHBPjsqM0tDB4jPTF/vgJA== + dependencies: + string-width "^2.0.0" + ansi-colors@^4.1.1: version "4.1.3" resolved "https://registry.npmmirror.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + +ansi-regex@^4.1.0: + version "4.1.1" + resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -2489,7 +2283,7 @@ ansi-regex@^6.0.1: resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== -ansi-styles@^3.2.1: +ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -2508,6 +2302,16 @@ ansi-styles@^6.1.0: resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== +ansicolors@~0.3.2: + version "0.3.2" + resolved "https://registry.npmmirror.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" + integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== + +ansistyles@~0.1.3: + version "0.1.3" + resolved "https://registry.npmmirror.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" + integrity sha512-6QWEyvMgIXX0eO972y7YPBLSBsq7UWKFAoNNTLGaOJ9bstcEL9sCbcjf96dVfNDdUsRoGOK82vWFJlKApXds7g== + anymatch@~3.1.2: version "3.1.3" resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" @@ -2559,7 +2363,12 @@ app-builder-lib@25.1.8: tar "^6.1.12" temp-file "^3.4.0" -"aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: +aproba@^1.0.3, aproba@^1.1.1, aproba@^1.1.2: + version "1.2.0" + resolved "https://registry.npmmirror.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +"aproba@^1.0.3 || ^2.0.0", "aproba@^1.1.2 || 2", aproba@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== @@ -2577,6 +2386,14 @@ are-we-there-yet@^3.0.0: delegates "^1.0.0" readable-stream "^3.6.0" +are-we-there-yet@~1.1.2: + version "1.1.7" + resolved "https://registry.npmmirror.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" + integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + argparse@^1.0.7: version "1.0.10" resolved "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -2589,6 +2406,14 @@ argparse@^2.0.1: resolved "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + array-differ@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" @@ -2599,6 +2424,33 @@ array-union@^2.1.0: resolved "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array.prototype.reduce@^1.0.6: + version "1.0.7" + resolved "https://registry.npmmirror.com/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz#6aadc2f995af29cb887eb866d981dc85ab6f7dc7" + integrity sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-array-method-boxes-properly "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + is-string "^1.0.7" + +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + is-shared-array-buffer "^1.0.2" + arrify@^2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" @@ -2616,19 +2468,19 @@ artplayer@^5.2.1: dependencies: option-validator "^2.0.6" -asap@~2.0.6: +asap@^2.0.0, asap@~2.0.6: version "2.0.6" resolved "https://registry.npmmirror.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== -asn1@^0.2.4: +asn1@^0.2.4, asn1@~0.2.3: version "0.2.6" resolved "https://registry.npmmirror.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== dependencies: safer-buffer "~2.1.0" -assert-plus@^1.0.0: +assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== @@ -2677,6 +2529,13 @@ atomic-sleep@^1.0.0: resolved "https://registry.npmmirror.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + avvio@^9.0.0: version "9.1.0" resolved "https://registry.npmmirror.com/avvio/-/avvio-9.1.0.tgz#0ff80ed211682441d8aa39ff21a4b9d022109c44" @@ -2685,6 +2544,16 @@ avvio@^9.0.0: "@fastify/error" "^4.0.0" fastq "^1.17.1" +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.npmmirror.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.13.2" + resolved "https://registry.npmmirror.com/aws4/-/aws4-1.13.2.tgz#0aa167216965ac9474ccfa83892cfb6b3e1e52ef" + integrity sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw== + axios@1.2.3: version "1.2.3" resolved "https://registry.npmmirror.com/axios/-/axios-1.2.3.tgz#31a3d824c0ebf754a004b585e5f04a5f87e6c4ff" @@ -2694,10 +2563,10 @@ axios@1.2.3: form-data "^4.0.0" proxy-from-env "^1.1.0" -axios@^1.7.8: - version "1.7.8" - resolved "https://registry.npmmirror.com/axios/-/axios-1.7.8.tgz#1997b1496b394c21953e68c14aaa51b7b5de3d6e" - integrity sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw== +axios@^1.7.9: + version "1.7.9" + resolved "https://registry.npmmirror.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a" + integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" @@ -2771,18 +2640,26 @@ basic-ftp@^5.0.2: resolved "https://registry.npmmirror.com/basic-ftp/-/basic-ftp-5.0.5.tgz#14a474f5fffecca1f4f406f1c26b18f800225ac0" integrity sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg== -bin-links@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/bin-links/-/bin-links-5.0.0.tgz#2b0605b62dd5e1ddab3b92a3c4e24221cae06cca" - integrity sha512-sdleLVfCjBtgO5cNjA2HVRvWBJAHs4zwenaCPMNJAJU0yNxpzj80IpjOIimkpkr+mhlA+how5poQtt53PygbHA== +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + +bin-links@^1.1.2, bin-links@^1.1.8: + version "1.1.8" + resolved "https://registry.npmmirror.com/bin-links/-/bin-links-1.1.8.tgz#bd39aadab5dc4bdac222a07df5baf1af745b2228" + integrity sha512-KgmVfx+QqggqP9dA3iIc5pA4T1qEEEL+hOhOhNPaUm77OTrJoOXE/C05SJLNJe6m/2wUK7F1tDSou7n5TfCDzQ== dependencies: - cmd-shim "^7.0.0" - npm-normalize-package-bin "^4.0.0" - proc-log "^5.0.0" - read-cmd-shim "^5.0.0" - write-file-atomic "^6.0.0" + bluebird "^3.5.3" + cmd-shim "^3.0.0" + gentle-fs "^2.3.0" + graceful-fs "^4.1.15" + npm-normalize-package-bin "^1.0.0" + write-file-atomic "^2.3.0" -binary-extensions@^2.0.0, binary-extensions@^2.3.0: +binary-extensions@^2.0.0: version "2.3.0" resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== @@ -2808,7 +2685,7 @@ bluebird-lst@^1.0.9: dependencies: bluebird "^3.5.5" -bluebird@^3.5.5: +bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5, bluebird@^3.7.2: version "3.7.2" resolved "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -2823,6 +2700,19 @@ boolean@^3.0.1: resolved "https://registry.npmmirror.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b" integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw== +boxen@^1.2.1: + version "1.3.0" + resolved "https://registry.npmmirror.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2903,6 +2793,11 @@ builder-util@25.1.7: stat-mode "^1.0.0" temp-file "^3.4.0" +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== + bundle-name@^4.1.0: version "4.1.0" resolved "https://registry.npmmirror.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" @@ -2910,11 +2805,21 @@ bundle-name@^4.1.0: dependencies: run-applescript "^7.0.0" +byline@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" + integrity sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q== + byte-length@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/byte-length/-/byte-length-1.0.2.tgz#ba5a5909240b0121c079b7f7b15248d6f08223cc" integrity sha512-ovBpjmsgd/teRmgcPh23d4gJvxDoXtAzEL9xTfMU8Yc2kqCDb7L9jAG0XHl1nzuGl+h3ebCIF1i62UFyA9V/2Q== +byte-size@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" + integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw== + c12@^2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/c12/-/c12-2.0.1.tgz#5702d280b31a08abba39833494c9b1202f0f5aec" @@ -2938,6 +2843,27 @@ cac@^6.7.14: resolved "https://registry.npmmirror.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== +cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.4: + version "12.0.4" + resolved "https://registry.npmmirror.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + cacache@^16.1.0: version "16.1.3" resolved "https://registry.npmmirror.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" @@ -2962,42 +2888,6 @@ cacache@^16.1.0: tar "^6.1.11" unique-filename "^2.0.0" -cacache@^18.0.0: - version "18.0.4" - resolved "https://registry.npmmirror.com/cacache/-/cacache-18.0.4.tgz#4601d7578dadb59c66044e157d02a3314682d6a5" - integrity sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ== - dependencies: - "@npmcli/fs" "^3.1.0" - fs-minipass "^3.0.0" - glob "^10.2.2" - lru-cache "^10.0.1" - minipass "^7.0.3" - minipass-collect "^2.0.1" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - p-map "^4.0.0" - ssri "^10.0.0" - tar "^6.1.11" - unique-filename "^3.0.0" - -cacache@^19.0.0, cacache@^19.0.1: - version "19.0.1" - resolved "https://registry.npmmirror.com/cacache/-/cacache-19.0.1.tgz#3370cc28a758434c85c2585008bd5bdcff17d6cd" - integrity sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ== - dependencies: - "@npmcli/fs" "^4.0.0" - fs-minipass "^3.0.0" - glob "^10.2.2" - lru-cache "^10.0.1" - minipass "^7.0.3" - minipass-collect "^2.0.1" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - p-map "^7.0.2" - ssri "^12.0.0" - tar "^7.4.3" - unique-filename "^4.0.0" - cacheable-lookup@^5.0.3: version "5.0.4" resolved "https://registry.npmmirror.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" @@ -3016,7 +2906,7 @@ cacheable-request@^7.0.2: normalize-url "^6.0.1" responselike "^2.0.0" -call-bind@^1.0.7: +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: version "1.0.7" resolved "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== @@ -3027,6 +2917,11 @@ call-bind@^1.0.7: get-intrinsic "^1.2.4" set-function-length "^1.2.1" +call-limit@^1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/call-limit/-/call-limit-1.1.1.tgz#ef15f2670db3f1992557e2d965abc459e6e358d4" + integrity sha512-5twvci5b9eRBw2wCfPtN0GmlR2/gadZqyFpPhOK6CvMFoFgA+USnZ6Jpu1lhG9h85pQ3Ouil3PfXWRD4EUaRiQ== + callsite@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" @@ -3037,6 +2932,16 @@ callsites@^3.0.0: resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +camelcase@^4.0.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw== + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + camelcase@^6.3.0: version "6.3.0" resolved "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" @@ -3047,12 +2952,17 @@ caniuse-lite@^1.0.30001669: resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz#0eca437bab7d5f03452ff0ef9de8299be6b08e16" integrity sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ== +capture-stack-trace@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/capture-stack-trace/-/capture-stack-trace-1.0.2.tgz#1c43f6b059d4249e7f3f8724f15f048b927d3a8a" + integrity sha512-X/WM2UQs6VMHUtjUDnZTRI+i1crWteJySFzr9UpGoQa4WQffXVTTXuekjl7TjZRlcF2XfjgITT0HxZ9RnxeT0w== + caseless@^0.12.0, caseless@~0.12.0: version "0.12.0" resolved "https://registry.npmmirror.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== -chalk@^2.3.2, chalk@^2.4.1: +chalk@^2.0.1, chalk@^2.3.2, chalk@^2.4.1: version "2.4.2" resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3154,16 +3064,16 @@ chokidar@^4.0.1: dependencies: readdirp "^4.0.1" +chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.4: + version "1.1.4" + resolved "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + chownr@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== -chownr@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4" - integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== - chromium-bidi@0.8.0: version "0.8.0" resolved "https://registry.npmmirror.com/chromium-bidi/-/chromium-bidi-0.8.0.tgz#ffd79dad7db1fcc874f1c55fcf46ded05a884269" @@ -3178,22 +3088,27 @@ chromium-pickle-js@^0.2.0: resolved "https://registry.npmmirror.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" integrity sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw== +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.npmmirror.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + ci-info@^3.2.0: version "3.9.0" resolved "https://registry.npmmirror.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== -ci-info@^4.0.0, ci-info@^4.1.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/ci-info/-/ci-info-4.1.0.tgz#92319d2fa29d2620180ea5afed31f589bc98cf83" - integrity sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A== - -cidr-regex@^4.1.1: - version "4.1.1" - resolved "https://registry.npmmirror.com/cidr-regex/-/cidr-regex-4.1.1.tgz#acbe7ba9f10d658710bddd25baa900509e90125a" - integrity sha512-ekKcVp+iRB9zlKFXyx7io7nINgb0oRjgRdXNEodp1OuxRui8FXr/CA40Tz1voWUp9DPPrMyQKy01vJhDo4N1lw== +cidr-regex@^2.0.10: + version "2.0.10" + resolved "https://registry.npmmirror.com/cidr-regex/-/cidr-regex-2.0.10.tgz#af13878bd4ad704de77d6dc800799358b3afa70d" + integrity sha512-sB3ogMQXWvreNPbJUZMRApxuRYd+KoIo4RGQ81VatjmMW6WJPo+IJZ2846FGItr9VzKo5w7DXzijPLGtSd0N3Q== dependencies: - ip-regex "^5.0.0" + ip-regex "^2.1.0" citty@^0.1.6: version "0.1.6" @@ -3207,13 +3122,18 @@ clean-stack@^2.0.0: resolved "https://registry.npmmirror.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-columns@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/cli-columns/-/cli-columns-4.0.0.tgz#9fe4d65975238d55218c41bd2ed296a7fa555646" - integrity sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ== +cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + integrity sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg== + +cli-columns@^3.1.2: + version "3.1.2" + resolved "https://registry.npmmirror.com/cli-columns/-/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e" + integrity sha512-iQYpDgpPPmCjn534ikQOhi+ydP6uMar+DtJ6a0In4aGL/PKqWfao75s6eF81quQQaz7isGz+goNECLARRZswdg== dependencies: - string-width "^4.2.3" - strip-ansi "^6.0.1" + string-width "^2.0.0" + strip-ansi "^3.0.1" cli-cursor@^3.1.0: version "3.1.0" @@ -3234,6 +3154,16 @@ cli-spinners@^2.5.0, cli-spinners@^2.9.2: resolved "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== +cli-table3@^0.5.0, cli-table3@^0.5.1: + version "0.5.1" + resolved "https://registry.npmmirror.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + cli-truncate@^2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" @@ -3251,6 +3181,15 @@ clipboard@^2.0.11: select "^1.1.2" tiny-emitter "^2.0.0" +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + cliui@^7.0.2: version "7.0.4" resolved "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -3288,10 +3227,18 @@ clone@^1.0.2: resolved "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== -cmd-shim@^7.0.0: - version "7.0.0" - resolved "https://registry.npmmirror.com/cmd-shim/-/cmd-shim-7.0.0.tgz#23bcbf69fff52172f7e7c02374e18fb215826d95" - integrity sha512-rtpaCbr164TPPh+zFdkWpCyZuKkjpAzODfaZCf/SVJZzJN+4bHQb/LP3Jzq5/+84um3XXY8r548XiWKSborwVw== +cmd-shim@^3.0.0, cmd-shim@^3.0.3: + version "3.0.3" + resolved "https://registry.npmmirror.com/cmd-shim/-/cmd-shim-3.0.3.tgz#2c35238d3df37d98ecdd7d5f6b8dc6b21cadc7cb" + integrity sha512-DtGg+0xiFhQIntSBRzL2fRQBnmtAVwXIDo4Qq46HPpObYquxMaZS4sb82U9nH91qJrlosC1wa9gwr0QyL/HypA== + dependencies: + graceful-fs "^4.1.2" + mkdirp "~0.5.0" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== color-convert@^1.9.0: version "1.9.3" @@ -3327,7 +3274,20 @@ colord@^2.9.3: resolved "https://registry.npmmirror.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== -combined-stream@^1.0.6, combined-stream@^1.0.8: +colors@^1.1.2: + version "1.4.0" + resolved "https://registry.npmmirror.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +columnify@~1.5.4: + version "1.5.4" + resolved "https://registry.npmmirror.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" + integrity sha512-rFl+iXVT1nhLQPfGDw+3WcS8rmm7XsLKUmhsGE3ihzzpIikeGrTaZPIRKYWeLsLBypsHzjXIvYEltVUZS84XxQ== + dependencies: + strip-ansi "^3.0.0" + wcwidth "^1.0.0" + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -3359,11 +3319,6 @@ commander@^7.2.0: resolved "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== -common-ancestor-path@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" - integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== - compare-version@^0.1.2: version "0.1.2" resolved "https://registry.npmmirror.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080" @@ -3384,7 +3339,7 @@ concat-map@0.0.1: resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -concat-stream@^1.6.0, concat-stream@^1.6.2: +concat-stream@^1.5.0, concat-stream@^1.6.0, concat-stream@^1.6.2: version "1.6.2" resolved "https://registry.npmmirror.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -3420,12 +3375,24 @@ config-file-ts@0.2.8-rc1: glob "^10.3.12" typescript "^5.4.3" +configstore@^3.0.0: + version "3.1.5" + resolved "https://registry.npmmirror.com/configstore/-/configstore-3.1.5.tgz#e9af331fadc14dabd544d3e7e76dc446a09a530f" + integrity sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA== + dependencies: + dot-prop "^4.2.1" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + consola@^3.2.3: version "3.2.3" resolved "https://registry.npmmirror.com/consola/-/consola-3.2.3.tgz#0741857aa88cfa0d6fd53f1cff0375136e98502f" integrity sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ== -console-control-strings@^1.1.0: +console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.npmmirror.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== @@ -3459,6 +3426,18 @@ copy-anything@^3.0.2: dependencies: is-what "^4.1.8" +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.npmmirror.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + core-js@^3.6.4: version "3.39.0" resolved "https://registry.npmmirror.com/core-js/-/core-js-3.39.0.tgz#57f7647f4d2d030c32a72ea23a0555b2eaa30f83" @@ -3502,6 +3481,22 @@ crc@^3.8.0: dependencies: buffer "^5.1.0" +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.npmmirror.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + integrity sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw== + dependencies: + capture-stack-trace "^1.0.0" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.3, cross-spawn@^7.0.5: version "7.0.6" resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" @@ -3526,6 +3521,11 @@ crypto-js@^4.2.0: resolved "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + integrity sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg== + css-functions-list@^3.2.3: version "3.2.3" resolved "https://registry.npmmirror.com/css-functions-list/-/css-functions-list-3.2.3.tgz#95652b0c24f0f59b291a9fc386041a19d4f40dbe" @@ -3599,6 +3599,11 @@ csstype@^3.1.3: resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== +cyclist@^1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/cyclist/-/cyclist-1.0.2.tgz#673b5f233bf34d8e602b949429f8171d9121bea3" + integrity sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA== + d@1, d@^1.0.1, d@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/d/-/d-1.0.2.tgz#2aefd554b81981e7dccf72d6842ae725cb17e5de" @@ -3614,6 +3619,13 @@ danmu.js@>=1.1.6: dependencies: event-emitter "^0.3.5" +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.npmmirror.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + data-uri-to-buffer@^4.0.0: version "4.0.1" resolved "https://registry.npmmirror.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" @@ -3624,8 +3636,35 @@ data-uri-to-buffer@^6.0.2: resolved "https://registry.npmmirror.com/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz#8a58bb67384b261a38ef18bea1810cb01badd28b" integrity sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw== -dayjs@1.11.10: - version "1.11.10" +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +dayjs@1.11.10: + version "1.11.10" resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== @@ -3634,13 +3673,42 @@ de-indent@^1.0.2: resolved "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@^4.3.6, debug@^4.3.7: +debug@3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@^4.3.7: version "4.3.7" resolved "https://registry.npmmirror.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== dependencies: ms "^2.1.3" +debug@^3.1.0: + version "3.2.7" + resolved "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +decode-uri-component@^0.2.0: + version "0.2.2" + resolved "https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== + decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.npmmirror.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -3648,6 +3716,11 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.npmmirror.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + deep-is@^0.1.3: version "0.1.4" resolved "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -3712,7 +3785,7 @@ define-lazy-prop@^3.0.0: resolved "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== -define-properties@^1.2.1: +define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -3794,11 +3867,21 @@ detect-file@^1.0.0: resolved "https://registry.npmmirror.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== +detect-indent@~5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== + detect-libc@^2.0.1: version "2.0.3" resolved "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== +detect-newline@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + integrity sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg== + detect-node@^2.0.4: version "2.1.0" resolved "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" @@ -3809,10 +3892,13 @@ devtools-protocol@0.0.1367902: resolved "https://registry.npmmirror.com/devtools-protocol/-/devtools-protocol-0.0.1367902.tgz#7333bfc4466c5a54a4c6de48a9dfbcb4b811660c" integrity sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg== -diff@^5.1.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" - integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== +dezalgo@^1.0.0, dezalgo@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" + integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== + dependencies: + asap "^2.0.0" + wrappy "1" dir-compare@^4.2.0: version "4.2.0" @@ -3919,6 +4005,13 @@ domutils@^3.0.1, domutils@^3.1.0: domelementtype "^2.3.0" domhandler "^5.0.3" +dot-prop@^4.2.1: + version "4.2.1" + resolved "https://registry.npmmirror.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" + integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ== + dependencies: + is-obj "^1.0.0" + dotenv-expand@^11.0.6: version "11.0.7" resolved "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-11.0.7.tgz#af695aea007d6fdc84c86cd8d0ad7beb40a0bd08" @@ -3931,6 +4024,11 @@ dotenv@^16.4.5: resolved "https://registry.npmmirror.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== +dotenv@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" + integrity sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow== + downloadjs@1.4.7: version "1.4.7" resolved "https://registry.npmmirror.com/downloadjs/-/downloadjs-1.4.7.tgz#f69f96f940e0d0553dac291139865a3cd0101e3c" @@ -3945,26 +4043,54 @@ dplayer@^1.27.1: balloon-css "^1.0.3" promise-polyfill "8.3.0" -drizzle-kit@^0.28.1: - version "0.28.1" - resolved "https://registry.npmmirror.com/drizzle-kit/-/drizzle-kit-0.28.1.tgz#8bb92aa99319446b7158769ec605788f8fa23504" - integrity sha512-JimOV+ystXTWMgZkLHYHf2w3oS28hxiH1FR0dkmJLc7GHzdGJoJAQtQS5DRppnabsRZwE2U1F6CuezVBgmsBBQ== +drizzle-kit@^0.29.1: + version "0.29.1" + resolved "https://registry.npmmirror.com/drizzle-kit/-/drizzle-kit-0.29.1.tgz#71c83908d089d7bcbf7ce7a442827ccd75e1c915" + integrity sha512-OvHL8RVyYiPR3LLRE3SHdcON8xGXl+qMfR9uTTnFWBPIqVk/3NWYZPb7nfpM1Bhix3H+BsxqPyyagG7YZ+Z63A== dependencies: "@drizzle-team/brocli" "^0.10.2" "@esbuild-kit/esm-loader" "^2.5.5" esbuild "^0.19.7" esbuild-register "^3.5.0" -drizzle-orm@^0.36.4: - version "0.36.4" - resolved "https://registry.npmmirror.com/drizzle-orm/-/drizzle-orm-0.36.4.tgz#f296848e94534f318cba4cfa56634694c14742ca" - integrity sha512-1OZY3PXD7BR00Gl61UUOFihslDldfH4NFRH2MbP54Yxi0G/PKn4HfO65JYZ7c16DeP3SpM3Aw+VXVG9j6CRSXA== +drizzle-orm@^0.37.0: + version "0.37.0" + resolved "https://registry.npmmirror.com/drizzle-orm/-/drizzle-orm-0.37.0.tgz#313c508164922cf99cee5fa17381c503035538fa" + integrity sha512-AsCNACQ/T2CyZUkrBRUqFT2ibHJ9ZHz3+lzYJFFn3hnj7ylIeItMz5kacRG89uSE74nXYShqehr6u+6ks4JR1A== + +duplexer3@^0.1.4: + version "0.1.5" + resolved "https://registry.npmmirror.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.npmmirror.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.npmmirror.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +editor@~1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/editor/-/editor-1.0.0.tgz#60c7f87bd62bcc6a894fa8ccd6afb7823a24f742" + integrity sha512-SoRmbGStwNYHgKfjOrX2L0mUvp9bUVv0uPppZSOMAntEbcFtoC3MKF5b3T6HQPXKIV+QGY3xPO3JK5it5lVkuw== + editorconfig@^1.0.4: version "1.0.4" resolved "https://registry.npmmirror.com/editorconfig/-/editorconfig-1.0.4.tgz#040c9a8e9a6c5288388b87c2db07028aa89f53a3" @@ -4013,10 +4139,10 @@ electron-localshortcut@^3.2.1: keyboardevent-from-electron-accelerator "^2.0.0" keyboardevents-areequal "^0.2.1" -electron-log@^5.2.3: - version "5.2.3" - resolved "https://registry.npmmirror.com/electron-log/-/electron-log-5.2.3.tgz#b58447b2158b9aa5faa07c4d15340113069d3f15" - integrity sha512-BabCiEV+p362LzY0EFE8hyzeGknzKDWSbhS0VFfRYQGA4FHWXWSfaKJlvTR9LFepNoORXxc/BWvqBXIPgsVFgA== +electron-log@^5.2.4: + version "5.2.4" + resolved "https://registry.npmmirror.com/electron-log/-/electron-log-5.2.4.tgz#6b488d9db80aa3c6f3dc39bcd635fc9d1f79c8af" + integrity sha512-iX12WXc5XAaKeHg2QpiFjVwL+S1NVHPFd3V5RXtCmKhpAzXsVQnR3UEc0LovM6p6NkUQxDWnkdkaam9FNUVmCA== electron-notarize@^1.2.2: version "1.2.2" @@ -4098,6 +4224,11 @@ emoji-regex@^10.3.0: resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-10.4.0.tgz#03553afea80b3975749cfcb36f776ca268e413d4" integrity sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw== +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -4116,14 +4247,14 @@ encoding-sniffer@^0.2.0: iconv-lite "^0.6.3" whatwg-encoding "^3.1.1" -encoding@^0.1.13: +encoding@^0.1.11, encoding@^0.1.13: version "0.1.13" resolved "https://registry.npmmirror.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.1.0: +end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -4150,12 +4281,17 @@ env-paths@^2.2.0, env-paths@^2.2.1: resolved "https://registry.npmmirror.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== +err-code@^1.0.0: + version "1.1.2" + resolved "https://registry.npmmirror.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + integrity sha512-CJAN+O0/yA1CKfRn9SXOGctSpEM7DCon/r/5r2eXFMY2zCCJBasFhcM5I+1kh3Ap11FsQCX+vGHceNPvpWKhoA== + err-code@^2.0.2: version "2.0.3" resolved "https://registry.npmmirror.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== -errno@^0.1.1: +errno@^0.1.1, errno@~0.1.7: version "0.1.8" resolved "https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== @@ -4174,6 +4310,63 @@ error-stack-parser-es@^0.1.5: resolved "https://registry.npmmirror.com/error-stack-parser-es/-/error-stack-parser-es-0.1.5.tgz#15b50b67bea4b6ed6596976ee07c7867ae25bb1c" integrity sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg== +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2, es-abstract@^1.23.5: + version "1.23.5" + resolved "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.23.5.tgz#f4599a4946d57ed467515ed10e4f157289cd52fb" + integrity sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.3" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.3" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.3" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.6" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.15" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + es-define-property@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" @@ -4181,11 +4374,36 @@ es-define-property@^1.0.0: dependencies: get-intrinsic "^1.2.4" -es-errors@^1.3.0: +es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + +es-to-primitive@^1.2.1: + version "1.3.0" + resolved "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== + dependencies: + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" + es5-ext@^0.10.35, es5-ext@^0.10.62, es5-ext@^0.10.64, es5-ext@~0.10.14: version "0.10.64" resolved "https://registry.npmmirror.com/es5-ext/-/es5-ext-0.10.64.tgz#12e4ffb48f1ba2ea777f1fcdd1918ef73ea21714" @@ -4210,11 +4428,18 @@ es6-iterator@^2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" -es6-promise@^4.2.4, es6-promise@^4.2.5, es6-promise@^4.2.8: +es6-promise@^4.0.3, es6-promise@^4.2.4, es6-promise@^4.2.5, es6-promise@^4.2.8: version "4.2.8" resolved "https://registry.npmmirror.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== + dependencies: + es6-promise "^4.0.3" + es6-symbol@^3.1.1, es6-symbol@^3.1.3: version "3.1.4" resolved "https://registry.npmmirror.com/es6-symbol/-/es6-symbol-3.1.4.tgz#f4e7d28013770b4208ecbf3e0bf14d3bcb557b8c" @@ -4528,6 +4753,19 @@ eventemitter3@^5.0.1: resolved "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.npmmirror.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw== + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + execa@^5.1.1: version "5.1.1" resolved "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -4595,6 +4833,11 @@ ext@^1.7.0: dependencies: type "^2.7.2" +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + extract-zip@^2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" @@ -4606,6 +4849,11 @@ extract-zip@^2.0.1: optionalDependencies: "@types/yauzl" "^2.9.1" +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + extsprintf@^1.2.0: version "1.4.1" resolved "https://registry.npmmirror.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" @@ -4764,6 +5012,11 @@ fetch-blob@^3.1.2, fetch-blob@^3.1.4: node-domexception "^1.0.0" web-streams-polyfill "^3.0.3" +figgy-pudding@^3.4.1, figgy-pudding@^3.5.1, figgy-pudding@^3.5.2: + version "3.5.2" + resolved "https://registry.npmmirror.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + figures@^6.1.0: version "6.1.0" resolved "https://registry.npmmirror.com/figures/-/figures-6.1.0.tgz#935479f51865fa7479f6fa94fc6fc7ac14e62c4a" @@ -4799,6 +5052,11 @@ fill-range@^7.1.1: dependencies: to-regex-range "^5.0.1" +filter-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" + integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== + find-my-way@^9.0.0: version "9.1.0" resolved "https://registry.npmmirror.com/find-my-way/-/find-my-way-9.1.0.tgz#df941d61198b6380bc962250652c2dff43468880" @@ -4808,6 +5066,18 @@ find-my-way@^9.0.0: fast-querystring "^1.0.0" safe-regex2 "^4.0.0" +find-npm-prefix@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz#8d8ce2c78b3b4b9e66c8acc6a37c231eb841cfdf" + integrity sha512-KEftzJ+H90x6pcKtdXZEPsQse8/y/UnvzRKrOSQFprnrGaFuJ62fVkP34Iu2IYuMvyauCyoLTNkJZgrrGA2wkA== + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + find-up@^5.0.0: version "5.0.0" resolved "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" @@ -4859,6 +5129,14 @@ flatted@^3.2.9, flatted@^3.3.1: resolved "https://registry.npmmirror.com/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27" integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.npmmirror.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + flv.js@^1.6.2: version "1.6.2" resolved "https://registry.npmmirror.com/flv.js/-/flv.js-1.6.2.tgz#fa3340fe3f7ee01d3977f7876aee66b8436e5922" @@ -4872,6 +5150,13 @@ follow-redirects@^1.15.0, follow-redirects@^1.15.6: resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.npmmirror.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + foreground-child@^3.1.0: version "3.3.0" resolved "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" @@ -4880,6 +5165,11 @@ foreground-child@^3.1.0: cross-spawn "^7.0.0" signal-exit "^4.0.1" +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.npmmirror.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + form-data-encoder@1.7.2: version "1.7.2" resolved "https://registry.npmmirror.com/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040" @@ -4904,6 +5194,15 @@ form-data@^4.0.0, form-data@^4.0.1: combined-stream "^1.0.8" mime-types "^2.1.12" +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.npmmirror.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + formdata-node@^4.3.2: version "4.4.1" resolved "https://registry.npmmirror.com/formdata-node/-/formdata-node-4.4.1.tgz#23f6a5cb9cb55315912cbec4ff7b0f59bbd191e2" @@ -4924,6 +5223,22 @@ forwarded@0.2.0: resolved "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== +from2@^1.3.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/from2/-/from2-1.3.0.tgz#88413baaa5f9a597cfde9221d86986cd3c061dfd" + integrity sha512-1eKYoECvhpM4IT70THQV8XNfmZoIlnROymbwOSazfmQO3kK+zCV+LSqUDzl7gDo3MZddCFeVa9Zg3Hi6FXqcgg== + dependencies: + inherits "~2.0.1" + readable-stream "~1.1.10" + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + fs-extra@^10.0.0, fs-extra@^10.1.0: version "10.1.0" resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" @@ -4961,6 +5276,13 @@ fs-extra@^9.0.0, fs-extra@^9.0.1: jsonfile "^6.0.1" universalify "^2.0.0" +fs-minipass@^1.2.7: + version "1.2.7" + resolved "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" @@ -4968,12 +5290,24 @@ fs-minipass@^2.0.0, fs-minipass@^2.1.0: dependencies: minipass "^3.0.0" -fs-minipass@^3.0.0, fs-minipass@^3.0.3: - version "3.0.3" - resolved "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" - integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== +fs-vacuum@^1.2.10, fs-vacuum@~1.2.10: + version "1.2.10" + resolved "https://registry.npmmirror.com/fs-vacuum/-/fs-vacuum-1.2.10.tgz#b7629bec07a4031a2548fdf99f5ecf1cc8b31e36" + integrity sha512-bwbv1FcWYwxN1F08I1THN8nS4Qe/pGq0gM8dy1J34vpxxp3qgZKJPPaqex36RyZO0sD2J+2ocnbwC2d/OjYICQ== + dependencies: + graceful-fs "^4.1.2" + path-is-inside "^1.0.1" + rimraf "^2.5.2" + +fs-write-stream-atomic@^1.0.8, fs-write-stream-atomic@~1.0.10: + version "1.0.10" + resolved "https://registry.npmmirror.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA== dependencies: - minipass "^7.0.3" + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" fs.realpath@^1.0.0: version "1.0.0" @@ -4995,6 +5329,21 @@ function-timeout@^0.1.0: resolved "https://registry.npmmirror.com/function-timeout/-/function-timeout-0.1.1.tgz#6bf71d3d24c894d43b2bec312cabb8c5add2e9da" integrity sha512-0NVVC0TaP7dSTvn1yMiy6d6Q8gifzbvQafO46RtLG/kHJUBNd+pVRGOBoK44wNBvtSPUJRfdVvkFdD3p0xvyZg== +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + gauge@^4.0.3: version "4.0.4" resolved "https://registry.npmmirror.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" @@ -5009,6 +5358,20 @@ gauge@^4.0.3: strip-ansi "^6.0.1" wide-align "^1.1.5" +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.npmmirror.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + generate-function@^2.0.0: version "2.3.1" resolved "https://registry.npmmirror.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" @@ -5023,12 +5386,34 @@ generate-object-property@^1.2.0: dependencies: is-property "^1.0.0" +genfun@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" + integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== + gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.5: +gentle-fs@^2.3.0, gentle-fs@^2.3.1: + version "2.3.1" + resolved "https://registry.npmmirror.com/gentle-fs/-/gentle-fs-2.3.1.tgz#11201bf66c18f930ddca72cf69460bdfa05727b1" + integrity sha512-OlwBBwqCFPcjm33rF2BjW+Pr6/ll2741l+xooiwTCeaX2CA1ZuclavyMBe0/KlR21/XGsgY6hzEQZ15BdNa13Q== + dependencies: + aproba "^1.1.2" + chownr "^1.1.2" + cmd-shim "^3.0.3" + fs-vacuum "^1.2.10" + graceful-fs "^4.1.11" + iferr "^0.1.5" + infer-owner "^1.0.4" + mkdirp "^0.5.1" + path-is-inside "^1.0.2" + read-cmd-shim "^1.0.1" + slide "^1.1.6" + +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -5038,7 +5423,7 @@ get-east-asian-width@^1.0.0: resolved "https://registry.npmmirror.com/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz#21b4071ee58ed04ee0db653371b55b4299875389" integrity sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ== -get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: version "1.2.4" resolved "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== @@ -5059,6 +5444,18 @@ get-port@^5.1.1: resolved "https://registry.npmmirror.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== + +get-stream@^4.0.0, get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + get-stream@^5.1.0: version "5.2.0" resolved "https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" @@ -5084,6 +5481,15 @@ get-stream@^9.0.0: "@sec-ant/readable-stream" "^0.4.1" is-stream "^4.0.1" +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== + dependencies: + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + get-tsconfig@^4.7.0: version "4.8.1" resolved "https://registry.npmmirror.com/get-tsconfig/-/get-tsconfig-4.8.1.tgz#8995eb391ae6e1638d251118c7b56de7eb425471" @@ -5101,6 +5507,13 @@ get-uri@^6.0.1: debug "^4.3.4" fs-extra "^11.2.0" +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.npmmirror.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + giget@^1.2.3: version "1.2.3" resolved "https://registry.npmmirror.com/giget/-/giget-1.2.3.tgz#ef6845d1140e89adad595f7f3bb60aa31c672cb6" @@ -5134,7 +5547,7 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob@^10.2.2, glob@^10.3.10, glob@^10.3.12, glob@^10.3.3, glob@^10.3.7, glob@^10.4.5: +glob@^10.3.12, glob@^10.3.3: version "10.4.5" resolved "https://registry.npmmirror.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== @@ -5146,7 +5559,7 @@ glob@^10.2.2, glob@^10.3.10, glob@^10.3.12, glob@^10.3.3, glob@^10.3.7, glob@^10 package-json-from-dist "^1.0.0" path-scurry "^1.11.1" -glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.3: version "7.2.3" resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -5181,6 +5594,13 @@ global-agent@^3.0.0: semver "^7.3.2" serialize-error "^7.0.1" +global-dirs@^0.1.0: + version "0.1.1" + resolved "https://registry.npmmirror.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg== + dependencies: + ini "^1.3.4" + global-modules@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" @@ -5227,7 +5647,7 @@ globals@^14.0.0: resolved "https://registry.npmmirror.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== -globalthis@^1.0.1: +globalthis@^1.0.1, globalthis@^1.0.4: version "1.0.4" resolved "https://registry.npmmirror.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== @@ -5278,6 +5698,13 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" +gopd@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/gopd/-/gopd-1.1.0.tgz#df8f0839c2d48caefc32a025a49294d39606c912" + integrity sha512-FQoVQnqcdk4hVM4JN1eromaun4iuS34oStkdlLENLdpULsuQcTyXj8w7ayhuUfPwEYZ1ZOooOTT6fdA9Vmx/RA== + dependencies: + get-intrinsic "^1.2.4" + got@^11.7.0, got@^11.8.5: version "11.8.6" resolved "https://registry.npmmirror.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" @@ -5295,7 +5722,24 @@ got@^11.7.0, got@^11.8.5: p-cancelable "^2.0.0" responselike "^2.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.6: +got@^6.7.1: + version "6.7.1" + resolved "https://registry.npmmirror.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + integrity sha512-Y/K3EDuiQN9rTZhBvPRWMLXIKdeD1Rj0nzunfoi0Yyn5WBEbzxXKU9Ub2X41oZBagVWOBU3MuDonFMgPWQFnwg== + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.2, graceful-fs@^4.2.6: version "4.2.11" resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -5305,6 +5749,24 @@ graphemer@^1.4.0: resolved "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.npmmirror.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -5327,12 +5789,26 @@ has-proto@^1.0.1: resolved "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== +has-proto@^1.0.3: + version "1.1.0" + resolved "https://registry.npmmirror.com/has-proto/-/has-proto-1.1.0.tgz#deb10494cbbe8809bce168a3b961f42969f5ed43" + integrity sha512-QLdzI9IIO1Jg7f9GT1gXpPpXArAn6cS31R1eEZqz08Gc+uQ8/XiqHWt17Fiw+2p6oTTIq5GXEpQkAlA88YRl/Q== + dependencies: + call-bind "^1.0.7" + has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-unicode@^2.0.1: +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +has-unicode@^2.0.0, has-unicode@^2.0.1, has-unicode@~2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== @@ -5342,7 +5818,7 @@ hash-sum@^2.0.0: resolved "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a" integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== -hasown@^2.0.0, hasown@^2.0.2: +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: version "2.0.2" resolved "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== @@ -5376,6 +5852,11 @@ hookable@^5.5.3: resolved "https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz#6cfc358984a1ef991e2518cb9ed4a778bbd3215d" integrity sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ== +hosted-git-info@^2.1.4, hosted-git-info@^2.7.1, hosted-git-info@^2.8.9: + version "2.8.9" + resolved "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + hosted-git-info@^4.1.0: version "4.1.0" resolved "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" @@ -5383,13 +5864,6 @@ hosted-git-info@^4.1.0: dependencies: lru-cache "^6.0.0" -hosted-git-info@^8.0.0, hosted-git-info@^8.0.2: - version "8.0.2" - resolved "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-8.0.2.tgz#5bd7d8b5395616e41cc0d6578381a32f669b14b2" - integrity sha512-sYKnA7eGln5ov8T8gnYlkSOxFJvywzEx9BueN6xo/GKO8PGiI6uK6xx+DIGe45T3bdVjLAQDQW1aicT8z8JwQg== - dependencies: - lru-cache "^10.0.1" - hot-patcher@^2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/hot-patcher/-/hot-patcher-2.0.1.tgz#1473b799a3b756460ef226e10cf2cea4d79b435e" @@ -5440,11 +5914,24 @@ http-basic@^8.1.1: http-response-object "^3.0.1" parse-cache-control "^1.0.1" -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: +http-cache-semantics@^3.8.1: + version "3.8.1" + resolved "https://registry.npmmirror.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== + +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: version "4.1.1" resolved "https://registry.npmmirror.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== + dependencies: + agent-base "4" + debug "3.1.0" + http-proxy-agent@^5.0.0: version "5.0.0" resolved "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" @@ -5469,6 +5956,15 @@ http-response-object@^3.0.1: dependencies: "@types/node" "^10.0.3" +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + http2-wrapper@^1.0.0-beta.5.2: version "1.0.3" resolved "https://registry.npmmirror.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" @@ -5477,6 +5973,14 @@ http2-wrapper@^1.0.0-beta.5.2: quick-lru "^5.1.1" resolve-alpn "^1.0.0" +https-proxy-agent@^2.2.3: + version "2.2.4" + resolved "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + https-proxy-agent@^5.0.0: version "5.0.1" resolved "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" @@ -5485,7 +5989,7 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" -https-proxy-agent@^7.0.0, https-proxy-agent@^7.0.1, https-proxy-agent@^7.0.3, https-proxy-agent@^7.0.5: +https-proxy-agent@^7.0.0, https-proxy-agent@^7.0.3, https-proxy-agent@^7.0.5: version "7.0.5" resolved "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz#9e8b5013873299e11fab6fd548405da2d6c602b2" integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw== @@ -5535,12 +6039,22 @@ ieee754@^1.1.13: resolved "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore-walk@^7.0.0: - version "7.0.0" - resolved "https://registry.npmmirror.com/ignore-walk/-/ignore-walk-7.0.0.tgz#8350e475cf4375969c12eb49618b3fd9cca6704f" - integrity sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ== +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.npmmirror.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA== + +iferr@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/iferr/-/iferr-1.0.2.tgz#e9fde49a9da06dc4a4194c6c9ed6d08305037a6d" + integrity sha512-9AfeLfji44r5TKInjhz3W9DyZI1zR1JAf2hVBMGhddAKPqBsupb89jGfbCTHIGZd6fGZl9WlHdn4AObygyMKwg== + +ignore-walk@^3.0.1: + version "3.0.4" + resolved "https://registry.npmmirror.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335" + integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ== dependencies: - minimatch "^9.0.0" + minimatch "^3.0.4" ignore@^5.2.0, ignore@^5.2.4, ignore@^5.3.1: version "5.3.2" @@ -5565,6 +6079,11 @@ import-fresh@^3.2.1, import-fresh@^3.3.0: parent-module "^1.0.0" resolve-from "^4.0.0" +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -5575,12 +6094,12 @@ indent-string@^4.0.0: resolved "https://registry.npmmirror.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -infer-owner@^1.0.4: +infer-owner@^1.0.3, infer-owner@^1.0.4: version "1.0.4" resolved "https://registry.npmmirror.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== -inflight@^1.0.4: +inflight@^1.0.4, inflight@~1.0.6: version "1.0.6" resolved "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== @@ -5588,33 +6107,38 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@^1.3.4, ini@^1.3.5: +ini@^1.3.4, ini@^1.3.5, ini@^1.3.8, ini@~1.3.0: version "1.3.8" resolved "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -ini@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/ini/-/ini-5.0.0.tgz#a7a4615339843d9a8ccc2d85c9d81cf93ffbc638" - integrity sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw== - -init-package-json@^7.0.1: - version "7.0.1" - resolved "https://registry.npmmirror.com/init-package-json/-/init-package-json-7.0.1.tgz#8f4580bbf427f015348727f215a39f42547ee208" - integrity sha512-8KZtk/53ReI2T2f6z2hl5ql6xKLjDexNw7DUqTdR8f+Mo8WZmBjjkH6DrTfBjmW0j3Tqx+j3t8creN0O890+0A== +init-package-json@^1.10.3: + version "1.10.3" + resolved "https://registry.npmmirror.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" + integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw== + dependencies: + glob "^7.1.1" + npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" + promzard "^0.3.0" + read "~1.0.1" + read-package-json "1 || 2" + semver "2.x || 3.x || 4 || 5" + validate-npm-package-license "^3.0.1" + validate-npm-package-name "^3.0.0" + +internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== dependencies: - "@npmcli/package-json" "^6.0.0" - npm-package-arg "^12.0.0" - promzard "^2.0.0" - read "^4.0.0" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^6.0.0" + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.0.4" ip-address@^9.0.5: version "9.0.5" @@ -5624,11 +6148,21 @@ ip-address@^9.0.5: jsbn "1.1.0" sprintf-js "^1.1.3" +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw== + ip-regex@^5.0.0: version "5.0.0" resolved "https://registry.npmmirror.com/ip-regex/-/ip-regex-5.0.0.tgz#cd313b2ae9c80c07bd3851e12bf4fa4dc5480632" integrity sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw== +ip@1.1.5: + version "1.1.5" + resolved "https://registry.npmmirror.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha512-rBtCAQAJm8A110nbwn6YdveUnuZH3WrC36IwkRXxDnq53JvXA2NVQvB7IHyKomxK1MJ4VDNw3UtFDdXQ+AvLYA== + ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" @@ -5639,11 +6173,33 @@ ipaddr.js@^2.2.0: resolved "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== +is-async-function@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" + integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + dependencies: + has-tostringtag "^1.0.0" + +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== + dependencies: + has-bigints "^1.0.2" + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -5651,11 +6207,31 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-boolean-object@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.2.0.tgz#9743641e80a62c094b5941c5bb791d66a88e497a" + integrity sha512-kR5g0+dXf/+kXnqI+lu0URKYPKgICtHGGNCDSB10AaUFj3o/HkB3u7WfpRBJGFopxxY0oH3ux7ZsDjLtK7xqvw== + dependencies: + call-bind "^1.0.7" + has-tostringtag "^1.0.2" + is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-callable@^1.1.3, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.npmmirror.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + is-ci@^3.0.0: version "3.0.1" resolved "https://registry.npmmirror.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" @@ -5663,12 +6239,12 @@ is-ci@^3.0.0: dependencies: ci-info "^3.2.0" -is-cidr@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/is-cidr/-/is-cidr-5.1.0.tgz#36f2d059f43f9b14f132745a2eec18c996df2f35" - integrity sha512-OkVS+Ht2ssF27d48gZdB+ho1yND1VbkJRKKS6Pc1/Cw7uqkd9IOJg8/bTwBDQL6tfBhSdguPRnlGiE8pU/X5NQ== +is-cidr@^3.1.1: + version "3.1.1" + resolved "https://registry.npmmirror.com/is-cidr/-/is-cidr-3.1.1.tgz#e92ef121bdec2782271a77ce487a8b8df3718ab7" + integrity sha512-Gx+oErgq1j2jAKCR2Kbq0b3wbH0vQKqZ0wOlHxm0o56nq51Cs/DZA8oz9dMDhbHyHEGgJ86eTeVudtgMMOx3Mw== dependencies: - cidr-regex "^4.1.1" + cidr-regex "^2.0.10" is-core-module@^2.12.0, is-core-module@^2.13.0: version "2.15.1" @@ -5677,6 +6253,20 @@ is-core-module@^2.12.0, is-core-module@^2.13.0: dependencies: hasown "^2.0.2" +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" + +is-date-object@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + is-docker@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" @@ -5687,11 +6277,37 @@ is-extglob@^2.1.1: resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-finalizationregistry@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz#d74a7d0c5f3578e34a20729e69202e578d495dc2" + integrity sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA== + dependencies: + call-bind "^1.0.7" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-generator-function@^1.0.10: + version "1.0.10" + resolved "https://registry.npmmirror.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -5706,6 +6322,14 @@ is-inside-container@^1.0.0: dependencies: is-docker "^3.0.0" +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + integrity sha512-ERNhMg+i/XgDwPIPF3u24qpajVreaiSuvpb1Uu0jugw7KKcxGyCX8cgp8P5fwTmAuXku6beDHHECdKArjlg7tw== + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + is-interactive@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" @@ -5729,13 +6353,48 @@ is-lambda@^1.0.1: resolved "https://registry.npmmirror.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.npmmirror.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== -is-plain-obj@^4.1.0: - version "4.1.0" +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +is-npm@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + integrity sha512-9r39FIr3d+KD9SbX0sfMsHzb5PP3uimOiwr3YupUaUFG4W0l1U57Rx3utpttV7qz5U3jmrO5auUa04LU9pyHsg== + +is-number-object@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/is-number-object/-/is-number-object-1.1.0.tgz#5a867e9ecc3d294dda740d9f127835857af7eb05" + integrity sha512-KVSZV0Dunv9DTPkhXwcZ3Q+tUc9TsaE1ZwX5J2WMvsSGS6Md8TFPun5uwh0yRdrNerI6vf/tbJxqSx4c1ZI1Lw== + dependencies: + call-bind "^1.0.7" + has-tostringtag "^1.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g== + dependencies: + path-is-inside "^1.0.1" + +is-plain-obj@^4.1.0: + version "4.1.0" resolved "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== @@ -5749,11 +6408,48 @@ is-property@^1.0.0, is-property@^1.0.2: resolved "https://registry.npmmirror.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g== +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + integrity sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw== + +is-regex@^1.1.4: + version "1.2.0" + resolved "https://registry.npmmirror.com/is-regex/-/is-regex-1.2.0.tgz#41b9d266e7eb7451312c64efc37e8a7d453077cf" + integrity sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA== + dependencies: + call-bind "^1.0.7" + gopd "^1.1.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + is-regexp@^3.0.0: version "3.1.0" resolved "https://registry.npmmirror.com/is-regexp/-/is-regexp-3.1.0.tgz#0235eab9cda5b83f96ac4a263d8c32c9d5ad7422" integrity sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA== +is-retry-allowed@^1.0.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.npmmirror.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== + dependencies: + call-bind "^1.0.7" + +is-stream@^1.0.0, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + is-stream@^2.0.0: version "2.0.1" resolved "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" @@ -5769,6 +6465,35 @@ is-stream@^4.0.1: resolved "https://registry.npmmirror.com/is-stream/-/is-stream-4.0.1.tgz#375cf891e16d2e4baec250b85926cffc14720d9b" integrity sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A== +is-string@^1.0.7, is-string@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/is-string/-/is-string-1.1.0.tgz#8cb83c5d57311bf8058bc6c8db294711641da45d" + integrity sha512-PlfzajuF9vSo5wErv3MJAKD/nqf9ngAs1NFQYm16nUYFO2IzxJ2hcm+IOCg+EEopdykNNUhVq5cz35cAUxU8+g== + dependencies: + call-bind "^1.0.7" + has-tostringtag "^1.0.2" + +is-symbol@^1.0.4, is-symbol@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.1.0.tgz#ae993830a56d4781886d39f9f0a46b3e89b7b60b" + integrity sha512-qS8KkNNXUZ/I+nX6QT8ZS1/Yx0A444yhzdTKxCzKkNjQ9sHErBxJnJAgh+f5YhusYECEcjo4XcyH87hn6+ks0A== + dependencies: + call-bind "^1.0.7" + has-symbols "^1.0.3" + safe-regex-test "^1.0.3" + +is-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.npmmirror.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" @@ -5784,6 +6509,26 @@ is-unicode-supported@^2.0.0: resolved "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz#09f0ab0de6d3744d48d265ebb98f65d11f2a9b3a" integrity sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ== +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-weakset@^2.0.3: + version "2.0.3" + resolved "https://registry.npmmirror.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" + integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + is-what@^3.14.1: version "3.14.1" resolved "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" @@ -5806,6 +6551,16 @@ is-wsl@^3.1.0: dependencies: is-inside-container "^1.0.0" +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.npmmirror.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isarray@~1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -5826,10 +6581,10 @@ isexe@^2.0.0: resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -isexe@^3.1.1: - version "3.1.1" - resolved "https://registry.npmmirror.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" - integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.npmmirror.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== jackspeak@^3.1.2: version "3.4.3" @@ -5901,6 +6656,11 @@ jsbn@1.1.0, jsbn@^1.1.0: resolved "https://registry.npmmirror.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.npmmirror.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + jsep@^1.4.0: version "1.4.0" resolved "https://registry.npmmirror.com/jsep/-/jsep-1.4.0.tgz#19feccbfa51d8a79f72480b4b8e40ce2e17152f0" @@ -5916,16 +6676,16 @@ json-buffer@3.0.1: resolved "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== +json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -json-parse-even-better-errors@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz#d3f67bd5925e81d3e31aa466acc821c8375cec43" - integrity sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA== - json-schema-ref-resolver@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz#6586f483b76254784fc1d2120f717bdc9f0a99bf" @@ -5943,17 +6703,17 @@ json-schema-traverse@^1.0.0: resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json-stringify-nice@^1.1.4: - version "1.1.4" - resolved "https://registry.npmmirror.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" - integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== - -json-stringify-safe@^5.0.1: +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== @@ -5979,7 +6739,7 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonparse@^1.3.1: +jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.npmmirror.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== @@ -5993,6 +6753,16 @@ jsonpath-plus@^10.2.0: "@jsep-plugin/regex" "^1.0.4" jsep "^1.4.0" +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.npmmirror.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + juice@^8.0.0: version "8.1.0" resolved "https://registry.npmmirror.com/juice/-/juice-8.1.0.tgz#4ea23362522fe06418229943237ee3751a4fca70" @@ -6004,16 +6774,6 @@ juice@^8.0.0: slick "^1.12.2" web-resource-inliner "^6.0.1" -just-diff-apply@^5.2.0: - version "5.5.0" - resolved "https://registry.npmmirror.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" - integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== - -just-diff@^6.0.0: - version "6.0.2" - resolved "https://registry.npmmirror.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" - integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== - keyboardevent-from-electron-accelerator@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/keyboardevent-from-electron-accelerator/-/keyboardevent-from-electron-accelerator-2.0.0.tgz#ace21b1aa4e47148815d160057f9edb66567c50c" @@ -6056,11 +6816,23 @@ kolorist@^1.8.0: resolved "https://registry.npmmirror.com/kolorist/-/kolorist-1.8.0.tgz#edddbbbc7894bc13302cdf740af6374d4a04743c" integrity sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ== +latest-version@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + integrity sha512-Be1YRHWWlZaSsrz2U+VInk+tO0EwLIyV+23RhWLINJYwg/UIikxjlj3MhH37/6/EDCAusjajvMkMMUXRaMWl/w== + dependencies: + package-json "^4.0.0" + layerr@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/layerr/-/layerr-3.0.0.tgz#bc4e0e5986ffd3ab8c3c88b458f53be8dceea29e" integrity sha512-tv754Ki2dXpPVApOrjTyRo4/QegVb9eVFq4mjqp4+NM5NaX7syQvN5BBNfV/ZpAHCEHV24XdUVrBAoka4jt3pA== +lazy-property@~1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/lazy-property/-/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147" + integrity sha512-O52TK7FHpBPzdtvc5GoF0EPLQIBMqrAupANPGBidPkrDpl9IXlzuma3T+m0o0OpkRVPmTu3SDoT7985lw4KbNQ== + lazy-val@^1.0.5: version "1.0.5" resolved "https://registry.npmmirror.com/lazy-val/-/lazy-val-1.0.5.tgz#6cf3b9f5bc31cee7ee3e369c0832b7583dcd923d" @@ -6091,116 +6863,139 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -libnpmaccess@^9.0.0: - version "9.0.0" - resolved "https://registry.npmmirror.com/libnpmaccess/-/libnpmaccess-9.0.0.tgz#47ac12dcd358c2c2f2c9ecb0f081a65ef2cc68bc" - integrity sha512-mTCFoxyevNgXRrvgdOhghKJnCWByBc9yp7zX4u9RBsmZjwOYdUDEBfL5DdgD1/8gahsYnauqIWFbq0iK6tO6CQ== - dependencies: - npm-package-arg "^12.0.0" - npm-registry-fetch "^18.0.1" - -libnpmdiff@^7.0.0: - version "7.0.0" - resolved "https://registry.npmmirror.com/libnpmdiff/-/libnpmdiff-7.0.0.tgz#808893a36d673e46c927e4a0a836b3742191d307" - integrity sha512-MjvsBJL1AT4ofsSsBRse5clxv7gfPbdgzT0VE+xmVTxE8M92T22laeX9vqFhaQKInSeKiZ2L9w/FVhoCCGPdUg== +libcipm@^4.0.8: + version "4.0.8" + resolved "https://registry.npmmirror.com/libcipm/-/libcipm-4.0.8.tgz#dcea4919e10dfbce420327e63901613b9141bc89" + integrity sha512-IN3hh2yDJQtZZ5paSV4fbvJg4aHxCCg5tcZID/dSVlTuUiWktsgaldVljJv6Z5OUlYspx6xQkbR0efNodnIrOA== + dependencies: + bin-links "^1.1.2" + bluebird "^3.5.1" + figgy-pudding "^3.5.1" + find-npm-prefix "^1.0.2" + graceful-fs "^4.1.11" + ini "^1.3.5" + lock-verify "^2.1.0" + mkdirp "^0.5.1" + npm-lifecycle "^3.0.0" + npm-logical-tree "^1.2.1" + npm-package-arg "^6.1.0" + pacote "^9.1.0" + read-package-json "^2.0.13" + rimraf "^2.6.2" + worker-farm "^1.6.0" + +libnpm@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/libnpm/-/libnpm-3.0.1.tgz#0be11b4c9dd4d1ffd7d95c786e92e55d65be77a2" + integrity sha512-d7jU5ZcMiTfBqTUJVZ3xid44fE5ERBm9vBnmhp2ECD2Ls+FNXWxHSkO7gtvrnbLO78gwPdNPz1HpsF3W4rjkBQ== + dependencies: + bin-links "^1.1.2" + bluebird "^3.5.3" + find-npm-prefix "^1.0.2" + libnpmaccess "^3.0.2" + libnpmconfig "^1.2.1" + libnpmhook "^5.0.3" + libnpmorg "^1.0.1" + libnpmpublish "^1.1.2" + libnpmsearch "^2.0.2" + libnpmteam "^1.0.2" + lock-verify "^2.0.2" + npm-lifecycle "^3.0.0" + npm-logical-tree "^1.2.1" + npm-package-arg "^6.1.0" + npm-profile "^4.0.2" + npm-registry-fetch "^4.0.0" + npmlog "^4.1.2" + pacote "^9.5.3" + read-package-json "^2.0.13" + stringify-package "^1.0.0" + +libnpmaccess@^3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/libnpmaccess/-/libnpmaccess-3.0.2.tgz#8b2d72345ba3bef90d3b4f694edd5c0417f58923" + integrity sha512-01512AK7MqByrI2mfC7h5j8N9V4I7MHJuk9buo8Gv+5QgThpOgpjB7sQBDDkeZqRteFb1QM/6YNdHfG7cDvfAQ== dependencies: - "@npmcli/arborist" "^8.0.0" - "@npmcli/installed-package-contents" "^3.0.0" - binary-extensions "^2.3.0" - diff "^5.1.0" - minimatch "^9.0.4" - npm-package-arg "^12.0.0" - pacote "^19.0.0" - tar "^6.2.1" + aproba "^2.0.0" + get-stream "^4.0.0" + npm-package-arg "^6.1.0" + npm-registry-fetch "^4.0.0" -libnpmexec@^9.0.0: - version "9.0.0" - resolved "https://registry.npmmirror.com/libnpmexec/-/libnpmexec-9.0.0.tgz#4bb43ec4ba88bd33750480fcf73935837af061bf" - integrity sha512-5dOwgvt0srgrOkwsjNWokx23BvQXEaUo87HWIY+9lymvAto2VSunNS+Ih7WXVwvkJk7cZ0jhS2H3rNK8G9Anxw== - dependencies: - "@npmcli/arborist" "^8.0.0" - "@npmcli/run-script" "^9.0.1" - ci-info "^4.0.0" - npm-package-arg "^12.0.0" - pacote "^19.0.0" - proc-log "^5.0.0" - read "^4.0.0" - read-package-json-fast "^4.0.0" - semver "^7.3.7" - walk-up-path "^3.0.1" - -libnpmfund@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/libnpmfund/-/libnpmfund-6.0.0.tgz#5f324e9b9fb440af9c197f3f147943362758b49b" - integrity sha512-+7ZTxPyJ0O/Y0xKoEd1CxPCUQ4ldn6EZ2qUMI/E1gJkfzcwb3AdFlSWk1WEXaGBu2+EqMrPf4Xu5lXFWw2Jd3w== +libnpmconfig@^1.2.1: + version "1.2.1" + resolved "https://registry.npmmirror.com/libnpmconfig/-/libnpmconfig-1.2.1.tgz#c0c2f793a74e67d4825e5039e7a02a0044dfcbc0" + integrity sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA== dependencies: - "@npmcli/arborist" "^8.0.0" + figgy-pudding "^3.5.1" + find-up "^3.0.0" + ini "^1.3.5" -libnpmhook@^11.0.0: - version "11.0.0" - resolved "https://registry.npmmirror.com/libnpmhook/-/libnpmhook-11.0.0.tgz#b8caf6fe31666d7b18cbf61ce8b722dca1600943" - integrity sha512-Xc18rD9NFbRwZbYCQ+UCF5imPsiHSyuQA8RaCA2KmOUo8q4kmBX4JjGWzmZnxZCT8s6vwzmY1BvHNqBGdg9oBQ== +libnpmhook@^5.0.3: + version "5.0.3" + resolved "https://registry.npmmirror.com/libnpmhook/-/libnpmhook-5.0.3.tgz#4020c0f5edbf08ebe395325caa5ea01885b928f7" + integrity sha512-UdNLMuefVZra/wbnBXECZPefHMGsVDTq5zaM/LgKNE9Keyl5YXQTnGAzEo+nFOpdRqTWI9LYi4ApqF9uVCCtuA== dependencies: aproba "^2.0.0" - npm-registry-fetch "^18.0.1" + figgy-pudding "^3.4.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" -libnpmorg@^7.0.0: - version "7.0.0" - resolved "https://registry.npmmirror.com/libnpmorg/-/libnpmorg-7.0.0.tgz#055dfdba32ac5e8757dd4b264f805b64cbd6980b" - integrity sha512-DcTodX31gDEiFrlIHurBQiBlBO6Var2KCqMVCk+HqZhfQXqUfhKGmFOp0UHr6HR1lkTVM0MzXOOYtUObk0r6Dg== +libnpmorg@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/libnpmorg/-/libnpmorg-1.0.1.tgz#5d2503f6ceb57f33dbdcc718e6698fea6d5ad087" + integrity sha512-0sRUXLh+PLBgZmARvthhYXQAWn0fOsa6T5l3JSe2n9vKG/lCVK4nuG7pDsa7uMq+uTt2epdPK+a2g6btcY11Ww== dependencies: aproba "^2.0.0" - npm-registry-fetch "^18.0.1" + figgy-pudding "^3.4.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" -libnpmpack@^8.0.0: - version "8.0.0" - resolved "https://registry.npmmirror.com/libnpmpack/-/libnpmpack-8.0.0.tgz#83cb6333861f8a0fe991420feaf0aa48a67d94bf" - integrity sha512-Z5zqR+j8PNOki97D4XnKlekLQjqJYkqCFZeac07XCJYA3aq6O7wYIpn7RqLcNfFm+u3ZsdblY2VQENMoiHA+FQ== +libnpmpublish@^1.1.2: + version "1.1.3" + resolved "https://registry.npmmirror.com/libnpmpublish/-/libnpmpublish-1.1.3.tgz#e3782796722d79eef1a0a22944c117e0c4ca4280" + integrity sha512-/3LsYqVc52cHXBmu26+J8Ed7sLs/hgGVFMH1mwYpL7Qaynb9RenpKqIKu0sJ130FB9PMkpMlWjlbtU8A4m7CQw== dependencies: - "@npmcli/arborist" "^8.0.0" - "@npmcli/run-script" "^9.0.1" - npm-package-arg "^12.0.0" - pacote "^19.0.0" - -libnpmpublish@^10.0.1: - version "10.0.1" - resolved "https://registry.npmmirror.com/libnpmpublish/-/libnpmpublish-10.0.1.tgz#7a284565be164c2f8605225213316a0c1d0a9827" - integrity sha512-xNa1DQs9a8dZetNRV0ky686MNzv1MTqB3szgOlRR3Fr24x1gWRu7aB9OpLZsml0YekmtppgHBkyZ+8QZlzmEyw== - dependencies: - ci-info "^4.0.0" - normalize-package-data "^7.0.0" - npm-package-arg "^12.0.0" - npm-registry-fetch "^18.0.1" - proc-log "^5.0.0" - semver "^7.3.7" - sigstore "^3.0.0" - ssri "^12.0.0" - -libnpmsearch@^8.0.0: - version "8.0.0" - resolved "https://registry.npmmirror.com/libnpmsearch/-/libnpmsearch-8.0.0.tgz#ce2e28ad05a152c736d5ae86356aedd5a52406a5" - integrity sha512-W8FWB78RS3Nkl1gPSHOlF024qQvcoU/e3m9BGDuBfVZGfL4MJ91GXXb04w3zJCGOW9dRQUyWVEqupFjCrgltDg== + aproba "^2.0.0" + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + lodash.clonedeep "^4.5.0" + normalize-package-data "^2.4.0" + npm-package-arg "^6.1.0" + npm-registry-fetch "^4.0.0" + semver "^5.5.1" + ssri "^6.0.1" + +libnpmsearch@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/libnpmsearch/-/libnpmsearch-2.0.2.tgz#9a4f059102d38e3dd44085bdbfe5095f2a5044cf" + integrity sha512-VTBbV55Q6fRzTdzziYCr64+f8AopQ1YZ+BdPOv16UegIEaE8C0Kch01wo4s3kRTFV64P121WZJwgmBwrq68zYg== dependencies: - npm-registry-fetch "^18.0.1" + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" -libnpmteam@^7.0.0: - version "7.0.0" - resolved "https://registry.npmmirror.com/libnpmteam/-/libnpmteam-7.0.0.tgz#e8f40c4bc543b720da2cdd4385e2fafcd06c92c0" - integrity sha512-PKLOoVukN34qyJjgEm5DEOnDwZkeVMUHRx8NhcKDiCNJGPl7G/pF1cfBw8yicMwRlHaHkld1FdujOzKzy4AlwA== +libnpmteam@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/libnpmteam/-/libnpmteam-1.0.2.tgz#8b48bcbb6ce70dd8150c950fcbdbf3feb6eec820" + integrity sha512-p420vM28Us04NAcg1rzgGW63LMM6rwe+6rtZpfDxCcXxM0zUTLl7nPFEnRF3JfFBF5skF/yuZDUthTsHgde8QA== dependencies: aproba "^2.0.0" - npm-registry-fetch "^18.0.1" - -libnpmversion@^7.0.0: - version "7.0.0" - resolved "https://registry.npmmirror.com/libnpmversion/-/libnpmversion-7.0.0.tgz#b264a07662b31b78822ba870171088eca6466f38" - integrity sha512-0xle91R6F8r/Q/4tHOnyKko+ZSquEXNdxwRdKCPv4kC1cOVBMFXRsKKrVtRKtXcFn362U8ZlJefk4Apu00424g== - dependencies: - "@npmcli/git" "^6.0.1" - "@npmcli/run-script" "^9.0.1" - json-parse-even-better-errors "^4.0.0" - proc-log "^5.0.0" - semver "^7.3.7" + figgy-pudding "^3.4.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpx@^10.2.4: + version "10.2.4" + resolved "https://registry.npmmirror.com/libnpx/-/libnpx-10.2.4.tgz#ef0e3258e29aef2ec7ee3276115e20e67f67d4ee" + integrity sha512-BPc0D1cOjBeS8VIBKUu5F80s6njm0wbVt7CsGMrIcJ+SI7pi7V0uVPGpEMH9H5L8csOcclTxAXFE2VAsJXUhfA== + dependencies: + dotenv "^5.0.1" + npm-package-arg "^6.0.0" + rimraf "^2.6.2" + safe-buffer "^5.1.0" + update-notifier "^2.3.0" + which "^1.3.0" + y18n "^4.0.0" + yargs "^14.2.3" light-my-request@^6.0.0: version "6.3.0" @@ -6231,6 +7026,14 @@ local-pkg@^0.5.1: mlly "^1.7.3" pkg-types "^1.2.1" +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + locate-path@^6.0.0: version "6.0.0" resolved "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -6238,6 +7041,45 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lock-verify@^2.0.2, lock-verify@^2.1.0, lock-verify@^2.2.2: + version "2.2.2" + resolved "https://registry.npmmirror.com/lock-verify/-/lock-verify-2.2.2.tgz#9e93c0999dc3cbbede4f16f9cfdaa93ead8c76ef" + integrity sha512-2CUNtr1ZSVKJHcYP8uEzafmmuyauCB5zZimj8TvQd/Lflt9kXVZs+8S+EbAzZLaVUDn8CYGmeC3DFGdYfnCzeQ== + dependencies: + "@iarna/cli" "^2.1.0" + npm-package-arg "^6.1.0" + semver "^5.4.1" + +lockfile@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" + integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA== + dependencies: + signal-exit "^3.0.2" + +lodash._baseuniq@~4.6.0: + version "4.6.0" + resolved "https://registry.npmmirror.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" + integrity sha512-Ja1YevpHZctlI5beLA7oc5KNDhGcPixFhcqSiORHNsp/1QTv7amAXzw+gu4YOvErqVlMVyIJGgtzeepCnnur0A== + dependencies: + lodash._createset "~4.0.0" + lodash._root "~3.0.0" + +lodash._createset@~4.0.0: + version "4.0.3" + resolved "https://registry.npmmirror.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" + integrity sha512-GTkC6YMprrJZCYU3zcqZj+jkXkrXzq3IPBcF/fIPpNEAB4hZEtXU8zp/RwKOvZl43NUmwDbyRk3+ZTbeRdEBXA== + +lodash._root@~3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + integrity sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ== + +lodash.clonedeep@^4.5.0, lodash.clonedeep@~4.5.0: + version "4.5.0" + resolved "https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + lodash.escaperegexp@^4.1.2: version "4.1.2" resolved "https://registry.npmmirror.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" @@ -6258,6 +7100,21 @@ lodash.truncate@^4.4.2: resolved "https://registry.npmmirror.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== +lodash.union@~4.6.0: + version "4.6.0" + resolved "https://registry.npmmirror.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw== + +lodash.uniq@~4.5.0: + version "4.5.0" + resolved "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lodash.without@~4.4.0: + version "4.4.0" + resolved "https://registry.npmmirror.com/lodash.without/-/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" + integrity sha512-M3MefBwfDhgKgINVuBJCO1YR3+gf6s9HNJsIiZ/Ru77Ws6uTb9eBuvrkpzO+9iLoAaRodGuq7tyrPCx+74QYGQ== + lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -6279,16 +7136,29 @@ log-symbols@^6.0.0: chalk "^5.3.0" is-unicode-supported "^1.3.0" +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + lowercase-keys@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== -lru-cache@^10.0.1, lru-cache@^10.2.0, lru-cache@^10.2.2: +lru-cache@^10.2.0: version "10.4.3" resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -6322,6 +7192,13 @@ magic-string@^0.30.14: dependencies: "@jridgewell/sourcemap-codec" "^1.5.0" +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + make-dir@^2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -6352,40 +7229,22 @@ make-fetch-happen@^10.0.3: socks-proxy-agent "^7.0.0" ssri "^9.0.0" -make-fetch-happen@^13.0.0: - version "13.0.1" - resolved "https://registry.npmmirror.com/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz#273ba2f78f45e1f3a6dca91cede87d9fa4821e36" - integrity sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA== - dependencies: - "@npmcli/agent" "^2.0.0" - cacache "^18.0.0" - http-cache-semantics "^4.1.1" - is-lambda "^1.0.1" - minipass "^7.0.2" - minipass-fetch "^3.0.0" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - proc-log "^4.2.0" - promise-retry "^2.0.1" - ssri "^10.0.0" - -make-fetch-happen@^14.0.0, make-fetch-happen@^14.0.1, make-fetch-happen@^14.0.3: - version "14.0.3" - resolved "https://registry.npmmirror.com/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz#d74c3ecb0028f08ab604011e0bc6baed483fcdcd" - integrity sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ== - dependencies: - "@npmcli/agent" "^3.0.0" - cacache "^19.0.1" - http-cache-semantics "^4.1.1" - minipass "^7.0.2" - minipass-fetch "^4.0.0" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^1.0.0" - proc-log "^5.0.0" - promise-retry "^2.0.1" - ssri "^12.0.0" +make-fetch-happen@^5.0.0: + version "5.0.2" + resolved "https://registry.npmmirror.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" + integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag== + dependencies: + agentkeepalive "^3.4.1" + cacache "^12.0.0" + http-cache-semantics "^3.8.1" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + node-fetch-npm "^2.0.2" + promise-retry "^1.1.1" + socks-proxy-agent "^4.0.0" + ssri "^6.0.0" markdown-it-highlightjs@^4.2.0: version "4.2.0" @@ -6475,6 +7334,11 @@ mdurl@^2.0.0: resolved "https://registry.npmmirror.com/mdurl/-/mdurl-2.0.0.tgz#80676ec0433025dd3e17ee983d0fe8de5a2237e0" integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w== +meant@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/meant/-/meant-1.0.3.tgz#67769af9de1d158773e928ae82c456114903554c" + integrity sha512-88ZRGcNxAq4EH38cQ4D85PM57pikCwS8Z99EWHODxN7KBY+UuPiqzRTtZzS8KTXO/ywSWbdjjJST2Hly/EQxLw== + mensch@^0.3.4: version "0.3.4" resolved "https://registry.npmmirror.com/mensch/-/mensch-0.3.4.tgz#770f91b46cb16ea5b204ee735768c3f0c491fecd" @@ -6513,7 +7377,7 @@ mime-db@1.52.0: resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@^2.1.35: +mime-types@^2.1.12, mime-types@^2.1.35, mime-types@~2.1.19: version "2.1.35" resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -6590,14 +7454,14 @@ minimatch@^7.4.6: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.0, minimatch@^9.0.3, minimatch@^9.0.4, minimatch@^9.0.5: +minimatch@^9.0.3, minimatch@^9.0.4, minimatch@^9.0.5: version "9.0.5" resolved "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" -minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.6: version "1.2.8" resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -6609,13 +7473,6 @@ minipass-collect@^1.0.2: dependencies: minipass "^3.0.0" -minipass-collect@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" - integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== - dependencies: - minipass "^7.0.3" - minipass-fetch@^2.0.3: version "2.1.2" resolved "https://registry.npmmirror.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" @@ -6627,28 +7484,6 @@ minipass-fetch@^2.0.3: optionalDependencies: encoding "^0.1.13" -minipass-fetch@^3.0.0: - version "3.0.5" - resolved "https://registry.npmmirror.com/minipass-fetch/-/minipass-fetch-3.0.5.tgz#f0f97e40580affc4a35cc4a1349f05ae36cb1e4c" - integrity sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg== - dependencies: - minipass "^7.0.3" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" - -minipass-fetch@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/minipass-fetch/-/minipass-fetch-4.0.0.tgz#b8ea716464747aeafb7edf2e110114c38089a09c" - integrity sha512-2v6aXUXwLP1Epd/gc32HAMIWoczx+fZwEPRHm/VwtrJzRGwR1qGZXEYV3Zp8ZjjbwaZhMrM6uHV4KVkk+XCc2w== - dependencies: - minipass "^7.0.3" - minipass-sized "^1.0.3" - minizlib "^3.0.1" - optionalDependencies: - encoding "^0.1.13" - minipass-flush@^1.0.5: version "1.0.5" resolved "https://registry.npmmirror.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" @@ -6670,6 +7505,14 @@ minipass-sized@^1.0.3: dependencies: minipass "^3.0.0" +minipass@^2.3.5, minipass@^2.6.0, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.npmmirror.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: version "3.3.6" resolved "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" @@ -6682,11 +7525,18 @@ minipass@^5.0.0: resolved "https://registry.npmmirror.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.0.4, minipass@^7.1.1, minipass@^7.1.2: +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: version "7.1.2" resolved "https://registry.npmmirror.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== +minizlib@^1.3.3: + version "1.3.3" + resolved "https://registry.npmmirror.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" resolved "https://registry.npmmirror.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" @@ -6695,13 +7545,21 @@ minizlib@^2.1.1, minizlib@^2.1.2: minipass "^3.0.0" yallist "^4.0.0" -minizlib@^3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/minizlib/-/minizlib-3.0.1.tgz#46d5329d1eb3c83924eff1d3b858ca0a31581012" - integrity sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg== +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== dependencies: - minipass "^7.0.4" - rimraf "^5.0.5" + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" mitt@3.0.1, mitt@^3.0.1: version "3.0.1" @@ -6713,7 +7571,7 @@ mj-context-menu@^0.6.1: resolved "https://registry.npmmirror.com/mj-context-menu/-/mj-context-menu-0.6.1.tgz#a043c5282bf7e1cf3821de07b13525ca6f85aa69" integrity sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA== -mkdirp@^0.5.1: +mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@^0.5.6, mkdirp@~0.5.0: version "0.5.6" resolved "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== @@ -6725,11 +7583,6 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@^3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" - integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== - mlly@^1.7.1, mlly@^1.7.2, mlly@^1.7.3: version "1.7.3" resolved "https://registry.npmmirror.com/mlly/-/mlly-1.7.3.tgz#d86c0fcd8ad8e16395eb764a5f4b831590cee48c" @@ -6757,6 +7610,18 @@ monaco-editor@^0.52.0: resolved "https://registry.npmmirror.com/monaco-editor/-/monaco-editor-0.52.0.tgz#d47c02b191eae208d68878d679b3ee7456031be7" integrity sha512-OeWhNpABLCeTqubfqLMXGsqf6OmPU6pHM85kF3dhy6kq5hnhuVS1p3VrEW/XhWHc71P2tHyS5JFySD8mgs1crw== +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ== + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + mpegts.js@^1.7.3: version "1.7.3" resolved "https://registry.npmmirror.com/mpegts.js/-/mpegts.js-1.7.3.tgz#a422ed501d778fa86f9eef98d71fd62fc013f262" @@ -6775,7 +7640,12 @@ mrmime@^2.0.0: resolved "https://registry.npmmirror.com/mrmime/-/mrmime-2.0.0.tgz#151082a6e06e59a9a39b46b3e14d5cfe92b3abb4" integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== -ms@^2.0.0, ms@^2.1.2, ms@^2.1.3: +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -6796,10 +7666,10 @@ multimatch@^5.0.0: arrify "^2.0.1" minimatch "^3.0.4" -mute-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/mute-stream/-/mute-stream-2.0.0.tgz#a5446fc0c512b71c83c44d908d5c7b7b4c493b2b" - integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== +mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== nanoid@^3.3.7: version "3.3.7" @@ -6829,11 +7699,6 @@ negotiator@^0.6.3: resolved "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== -negotiator@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a" - integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== - nested-property@^4.0.0: version "4.0.0" resolved "https://registry.npmmirror.com/nested-property/-/nested-property-4.0.0.tgz#a67b5a31991e701e03cdbaa6453bc5b1011bb88d" @@ -6878,6 +7743,15 @@ node-fetch-native@^1.6.3: resolved "https://registry.npmmirror.com/node-fetch-native/-/node-fetch-native-1.6.4.tgz#679fc8fd8111266d47d7e72c379f1bed9acff06e" integrity sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ== +node-fetch-npm@^2.0.2: + version "2.0.4" + resolved "https://registry.npmmirror.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4" + integrity sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg== + dependencies: + encoding "^0.1.11" + json-parse-better-errors "^1.0.0" + safe-buffer "^5.1.1" + node-fetch@^2.6.0, node-fetch@^2.6.7: version "2.7.0" resolved "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" @@ -6894,21 +7768,22 @@ node-fetch@^3.3.0, node-fetch@^3.3.2: fetch-blob "^3.1.4" formdata-polyfill "^4.0.10" -node-gyp@^10.0.0, node-gyp@^10.2.0: - version "10.2.0" - resolved "https://registry.npmmirror.com/node-gyp/-/node-gyp-10.2.0.tgz#80101c4aa4f7ab225f13fcc8daaaac4eb1a8dd86" - integrity sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw== +node-gyp@^5.0.2, node-gyp@^5.1.1: + version "5.1.1" + resolved "https://registry.npmmirror.com/node-gyp/-/node-gyp-5.1.1.tgz#eb915f7b631c937d282e33aed44cb7a025f62a3e" + integrity sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw== dependencies: env-paths "^2.2.0" - exponential-backoff "^3.1.1" - glob "^10.3.10" - graceful-fs "^4.2.6" - make-fetch-happen "^13.0.0" - nopt "^7.0.0" - proc-log "^4.1.0" - semver "^7.3.5" - tar "^6.2.1" - which "^4.0.0" + glob "^7.1.4" + graceful-fs "^4.2.2" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.1.2" + request "^2.88.0" + rimraf "^2.6.3" + semver "^5.7.1" + tar "^4.4.12" + which "^1.3.1" node-gyp@^9.0.0: version "9.4.1" @@ -6946,6 +7821,14 @@ node-rsa@^1.1.1: dependencies: asn1 "^0.2.4" +nopt@^4.0.1, nopt@^4.0.3: + version "4.0.3" + resolved "https://registry.npmmirror.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== + dependencies: + abbrev "1" + osenv "^0.1.4" + nopt@^6.0.0: version "6.0.0" resolved "https://registry.npmmirror.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" @@ -6953,28 +7836,22 @@ nopt@^6.0.0: dependencies: abbrev "^1.0.0" -nopt@^7.0.0, nopt@^7.2.0: +nopt@^7.2.0: version "7.2.1" resolved "https://registry.npmmirror.com/nopt/-/nopt-7.2.1.tgz#1cac0eab9b8e97c9093338446eddd40b2c8ca1e7" integrity sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w== dependencies: abbrev "^2.0.0" -nopt@^8.0.0: - version "8.0.0" - resolved "https://registry.npmmirror.com/nopt/-/nopt-8.0.0.tgz#644f1e78da564b70e3606ab8db4836b0e32e198a" - integrity sha512-1L/fTJ4UmV/lUxT2Uf006pfZKTvAgCF+chz+0OgBHO8u2Z67pE7AaAUUj7CJy0lXqHmymUvGFt6NE9R3HER0yw== - dependencies: - abbrev "^2.0.0" - -normalize-package-data@^7.0.0: - version "7.0.0" - resolved "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-7.0.0.tgz#ab4f49d02f2e25108d3f4326f3c13f0de6fa6a0a" - integrity sha512-k6U0gKRIuNCTkwHGZqblCfLfBRh+w1vI6tBo+IeJwq2M8FUiOqhX7GH+GArQGScA7azd1WfyRCvxoXDO3hQDIA== +normalize-package-data@^2.0.0, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: - hosted-git-info "^8.0.0" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -6991,83 +7868,118 @@ nplayer@^1.0.15: resolved "https://registry.npmmirror.com/nplayer/-/nplayer-1.0.15.tgz#cbce94efcab64510b25d9eae035db3c1ae297ad6" integrity sha512-QONvD0+ZvorQNOghe55FY10ebNv6yDnr2QgHs8JdessOex+vVNSKZz88Rl9RBMflb4+MRpeMVJpkTpji0XzVCg== -npm-audit-report@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/npm-audit-report/-/npm-audit-report-6.0.0.tgz#0262e5e2b674fabf0ea47e900fc7384b83de0fbb" - integrity sha512-Ag6Y1irw/+CdSLqEEAn69T8JBgBThj5mw0vuFIKeP7hATYuQuS5jkMjK6xmVB8pr7U4g5Audbun0lHhBDMIBRA== +npm-audit-report@^1.3.3: + version "1.3.3" + resolved "https://registry.npmmirror.com/npm-audit-report/-/npm-audit-report-1.3.3.tgz#8226deeb253b55176ed147592a3995442f2179ed" + integrity sha512-8nH/JjsFfAWMvn474HB9mpmMjrnKb1Hx/oTAdjv4PT9iZBvBxiZ+wtDUapHCJwLqYGQVPaAfs+vL5+5k9QndXw== + dependencies: + cli-table3 "^0.5.0" + console-control-strings "^1.1.0" -npm-bundled@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/npm-bundled/-/npm-bundled-4.0.0.tgz#f5b983f053fe7c61566cf07241fab2d4e9d513d3" - integrity sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA== +npm-bundled@^1.0.1: + version "1.1.2" + resolved "https://registry.npmmirror.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" + integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== dependencies: - npm-normalize-package-bin "^4.0.0" + npm-normalize-package-bin "^1.0.1" + +npm-cache-filename@~1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz#ded306c5b0bfc870a9e9faf823bc5f283e05ae11" + integrity sha512-5v2y1KG06izpGvZJDSBR5q1Ej+NaPDO05yAAWBJE6+3eiId0R176Gz3Qc2vEmJnE+VGul84g6Qpq8fXzD82/JA== npm-check-updates@^17.1.11: version "17.1.11" resolved "https://registry.npmmirror.com/npm-check-updates/-/npm-check-updates-17.1.11.tgz#f6d48ca6a9adc0df990f6cd11de3bcd1e48e5c54" integrity sha512-TR2RuGIH7P3Qrb0jfdC/nT7JWqXPKjDlxuNQt3kx4oNVf1Pn5SBRB7KLypgYZhruivJthgTtfkkyK4mz342VjA== -npm-install-checks@^7.1.0, npm-install-checks@^7.1.1: - version "7.1.1" - resolved "https://registry.npmmirror.com/npm-install-checks/-/npm-install-checks-7.1.1.tgz#e9d679fc8a1944c75cdcc96478a22f9d0f763632" - integrity sha512-u6DCwbow5ynAX5BdiHQ9qvexme4U3qHW3MWe5NqH+NeBm0LbiH6zvGjNNew1fY+AZZUtVHbOPF3j7mJxbUzpXg== +npm-install-checks@^3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/npm-install-checks/-/npm-install-checks-3.0.2.tgz#ab2e32ad27baa46720706908e5b14c1852de44d9" + integrity sha512-E4kzkyZDIWoin6uT5howP8VDvkM+E8IQDcHAycaAxMbwkqhIg5eEYALnXOl3Hq9MrkdQB/2/g1xwBINXdKSRkg== dependencies: - semver "^7.1.1" + semver "^2.3.0 || 3.x || 4 || 5" -npm-normalize-package-bin@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz#df79e70cd0a113b77c02d1fe243c96b8e618acb1" - integrity sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w== +npm-lifecycle@^3.0.0, npm-lifecycle@^3.1.5: + version "3.1.5" + resolved "https://registry.npmmirror.com/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz#9882d3642b8c82c815782a12e6a1bfeed0026309" + integrity sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g== + dependencies: + byline "^5.0.0" + graceful-fs "^4.1.15" + node-gyp "^5.0.2" + resolve-from "^4.0.0" + slide "^1.1.6" + uid-number "0.0.6" + umask "^1.1.0" + which "^1.3.1" -npm-package-arg@^12.0.0: - version "12.0.0" - resolved "https://registry.npmmirror.com/npm-package-arg/-/npm-package-arg-12.0.0.tgz#c2a6631c09d244c6bc35a46c38cbd94d53e9829a" - integrity sha512-ZTE0hbwSdTNL+Stx2zxSqdu2KZfNDcrtrLdIk7XGnQFYBWYDho/ORvXtn5XEePcL3tFpGjHCV3X3xrtDh7eZ+A== +npm-logical-tree@^1.2.1: + version "1.2.1" + resolved "https://registry.npmmirror.com/npm-logical-tree/-/npm-logical-tree-1.2.1.tgz#44610141ca24664cad35d1e607176193fd8f5b88" + integrity sha512-AJI/qxDB2PWI4LG1CYN579AY1vCiNyWfkiquCsJWqntRu/WwimVrC8yXeILBFHDwxfOejxewlmnvW9XXjMlYIg== + +npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0, npm-package-arg@^6.1.1: + version "6.1.1" + resolved "https://registry.npmmirror.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" + integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== dependencies: - hosted-git-info "^8.0.0" - proc-log "^5.0.0" - semver "^7.3.5" - validate-npm-package-name "^6.0.0" + hosted-git-info "^2.7.1" + osenv "^0.1.5" + semver "^5.6.0" + validate-npm-package-name "^3.0.0" -npm-packlist@^9.0.0: - version "9.0.0" - resolved "https://registry.npmmirror.com/npm-packlist/-/npm-packlist-9.0.0.tgz#8e9b061bab940de639dd93d65adc95c34412c7d0" - integrity sha512-8qSayfmHJQTx3nJWYbbUmflpyarbLMBc6LCAjYsiGtXxDB68HaZpb8re6zeaLGxZzDuMdhsg70jryJe+RrItVQ== +npm-packlist@^1.1.12, npm-packlist@^1.4.8: + version "1.4.8" + resolved "https://registry.npmmirror.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== dependencies: - ignore-walk "^7.0.0" + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" -npm-pick-manifest@^10.0.0: - version "10.0.0" - resolved "https://registry.npmmirror.com/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz#6cc120c6473ceea56dfead500f00735b2b892851" - integrity sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ== +npm-pick-manifest@^3.0.0, npm-pick-manifest@^3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" + integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== dependencies: - npm-install-checks "^7.1.0" - npm-normalize-package-bin "^4.0.0" - npm-package-arg "^12.0.0" - semver "^7.3.5" + figgy-pudding "^3.5.1" + npm-package-arg "^6.0.0" + semver "^5.4.1" -npm-profile@^11.0.1: - version "11.0.1" - resolved "https://registry.npmmirror.com/npm-profile/-/npm-profile-11.0.1.tgz#6ffac43f3d186316d37e80986d84aef2470269a2" - integrity sha512-HP5Cw9WHwFS9vb4fxVlkNAQBUhVL5BmW6rAR+/JWkpwqcFJid7TihKUdYDWqHl0NDfLd0mpucheGySqo8ysyfw== +npm-profile@^4.0.2, npm-profile@^4.0.4: + version "4.0.4" + resolved "https://registry.npmmirror.com/npm-profile/-/npm-profile-4.0.4.tgz#28ee94390e936df6d084263ee2061336a6a1581b" + integrity sha512-Ta8xq8TLMpqssF0H60BXS1A90iMoM6GeKwsmravJ6wYjWwSzcYBTdyWa3DZCYqPutacBMEm7cxiOkiIeCUAHDQ== + dependencies: + aproba "^1.1.2 || 2" + figgy-pudding "^3.4.1" + npm-registry-fetch "^4.0.0" + +npm-registry-fetch@^4.0.0, npm-registry-fetch@^4.0.7: + version "4.0.7" + resolved "https://registry.npmmirror.com/npm-registry-fetch/-/npm-registry-fetch-4.0.7.tgz#57951bf6541e0246b34c9f9a38ab73607c9449d7" + integrity sha512-cny9v0+Mq6Tjz+e0erFAB+RYJ/AVGzkjnISiobqP8OWj9c9FLoZZu8/SPSKJWE17F1tk4018wfjV+ZbIbqC7fQ== dependencies: - npm-registry-fetch "^18.0.0" - proc-log "^5.0.0" + JSONStream "^1.3.4" + bluebird "^3.5.1" + figgy-pudding "^3.4.1" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + npm-package-arg "^6.1.0" + safe-buffer "^5.2.0" -npm-registry-fetch@^18.0.0, npm-registry-fetch@^18.0.1, npm-registry-fetch@^18.0.2: - version "18.0.2" - resolved "https://registry.npmmirror.com/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz#340432f56b5a8b1af068df91aae0435d2de646b5" - integrity sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ== +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== dependencies: - "@npmcli/redact" "^3.0.0" - jsonparse "^1.3.1" - make-fetch-happen "^14.0.0" - minipass "^7.0.2" - minipass-fetch "^4.0.0" - minizlib "^3.0.1" - npm-package-arg "^12.0.0" - proc-log "^5.0.0" + path-key "^2.0.0" npm-run-path@^4.0.1: version "4.0.1" @@ -7091,84 +8003,141 @@ npm-run-path@^6.0.0: path-key "^4.0.0" unicorn-magic "^0.3.0" -npm-user-validate@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/npm-user-validate/-/npm-user-validate-3.0.0.tgz#9b1410796bf1f1d78297a8096328c55d3083f233" - integrity sha512-9xi0RdSmJ4mPYTC393VJPz1Sp8LyCx9cUnm/L9Qcb3cFO8gjT4mN20P9FAsea8qDHdQ7LtcN8VLh2UT47SdKCw== - -npm@^10.9.1: - version "10.9.1" - resolved "https://registry.npmmirror.com/npm/-/npm-10.9.1.tgz#ab141c1229765c11c8c59060fc9cf450a2207bd6" - integrity sha512-yJUw03xLqjiv1D52oHeoS5qmOEC5hkJlhP1cWlSrCgshuxWVyFEEK3M3hLC0NwbTaklLTYrhoIanYsuNP5WUKg== - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/arborist" "^8.0.0" - "@npmcli/config" "^9.0.0" - "@npmcli/fs" "^4.0.0" - "@npmcli/map-workspaces" "^4.0.1" - "@npmcli/package-json" "^6.0.1" - "@npmcli/promise-spawn" "^8.0.2" - "@npmcli/redact" "^3.0.0" - "@npmcli/run-script" "^9.0.1" - "@sigstore/tuf" "^3.0.0" - abbrev "^3.0.0" +npm-user-validate@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/npm-user-validate/-/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561" + integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== + +npm@6.14.18: + version "6.14.18" + resolved "https://registry.npmmirror.com/npm/-/npm-6.14.18.tgz#5cd431567f0961e1fe63d46738cf37f74f7999eb" + integrity sha512-p3SjqSchSuNQUqbJBgwdv0L3O6bKkaSfQrQzJsskNpNKLg0g37c5xTXFV0SqTlX9GWvoGxBELVJMRWq0J8oaLA== + dependencies: + JSONStream "^1.3.5" + abbrev "~1.1.1" + ansicolors "~0.3.2" + ansistyles "~0.1.3" + aproba "^2.0.0" archy "~1.0.0" - cacache "^19.0.1" - chalk "^5.3.0" - ci-info "^4.1.0" - cli-columns "^4.0.0" - fastest-levenshtein "^1.0.16" - fs-minipass "^3.0.3" - glob "^10.4.5" - graceful-fs "^4.2.11" - hosted-git-info "^8.0.2" - ini "^5.0.0" - init-package-json "^7.0.1" - is-cidr "^5.1.0" - json-parse-even-better-errors "^4.0.0" - libnpmaccess "^9.0.0" - libnpmdiff "^7.0.0" - libnpmexec "^9.0.0" - libnpmfund "^6.0.0" - libnpmhook "^11.0.0" - libnpmorg "^7.0.0" - libnpmpack "^8.0.0" - libnpmpublish "^10.0.1" - libnpmsearch "^8.0.0" - libnpmteam "^7.0.0" - libnpmversion "^7.0.0" - make-fetch-happen "^14.0.3" - minimatch "^9.0.5" - minipass "^7.1.1" - minipass-pipeline "^1.2.4" - ms "^2.1.2" - node-gyp "^10.2.0" - nopt "^8.0.0" - normalize-package-data "^7.0.0" - npm-audit-report "^6.0.0" - npm-install-checks "^7.1.1" - npm-package-arg "^12.0.0" - npm-pick-manifest "^10.0.0" - npm-profile "^11.0.1" - npm-registry-fetch "^18.0.2" - npm-user-validate "^3.0.0" - p-map "^4.0.0" - pacote "^19.0.1" - parse-conflict-json "^4.0.0" - proc-log "^5.0.0" + bin-links "^1.1.8" + bluebird "^3.7.2" + byte-size "^5.0.1" + cacache "^12.0.4" + call-limit "^1.1.1" + chownr "^1.1.4" + ci-info "^2.0.0" + cli-columns "^3.1.2" + cli-table3 "^0.5.1" + cmd-shim "^3.0.3" + columnify "~1.5.4" + config-chain "^1.1.13" + detect-indent "~5.0.0" + detect-newline "^2.1.0" + dezalgo "^1.0.4" + editor "~1.0.0" + figgy-pudding "^3.5.2" + find-npm-prefix "^1.0.2" + fs-vacuum "~1.2.10" + fs-write-stream-atomic "~1.0.10" + gentle-fs "^2.3.1" + glob "^7.2.3" + graceful-fs "^4.2.10" + has-unicode "~2.0.1" + hosted-git-info "^2.8.9" + iferr "^1.0.2" + infer-owner "^1.0.4" + inflight "~1.0.6" + inherits "^2.0.4" + ini "^1.3.8" + init-package-json "^1.10.3" + is-cidr "^3.1.1" + json-parse-better-errors "^1.0.2" + lazy-property "~1.0.0" + libcipm "^4.0.8" + libnpm "^3.0.1" + libnpmaccess "^3.0.2" + libnpmhook "^5.0.3" + libnpmorg "^1.0.1" + libnpmsearch "^2.0.2" + libnpmteam "^1.0.2" + libnpx "^10.2.4" + lock-verify "^2.2.2" + lockfile "^1.0.4" + lodash._baseuniq "~4.6.0" + lodash.clonedeep "~4.5.0" + lodash.union "~4.6.0" + lodash.uniq "~4.5.0" + lodash.without "~4.4.0" + lru-cache "^5.1.1" + meant "^1.0.3" + mississippi "^3.0.0" + mkdirp "^0.5.6" + move-concurrently "^1.0.1" + node-gyp "^5.1.1" + nopt "^4.0.3" + normalize-package-data "^2.5.0" + npm-audit-report "^1.3.3" + npm-cache-filename "~1.0.2" + npm-install-checks "^3.0.2" + npm-lifecycle "^3.1.5" + npm-package-arg "^6.1.1" + npm-packlist "^1.4.8" + npm-pick-manifest "^3.0.2" + npm-profile "^4.0.4" + npm-registry-fetch "^4.0.7" + npm-user-validate "^1.0.1" + npmlog "~4.1.2" + once "~1.4.0" + opener "^1.5.2" + osenv "^0.1.5" + pacote "^9.5.12" + path-is-inside "~1.0.2" + promise-inflight "~1.0.1" qrcode-terminal "^0.12.0" - read "^4.0.0" - semver "^7.6.3" - spdx-expression-parse "^4.0.0" - ssri "^12.0.0" - supports-color "^9.4.0" - tar "^6.2.1" + query-string "^6.14.1" + qw "^1.0.2" + read "~1.0.7" + read-cmd-shim "^1.0.5" + read-installed "~4.0.3" + read-package-json "^2.1.2" + read-package-tree "^5.3.1" + readable-stream "^3.6.0" + readdir-scoped-modules "^1.1.0" + request "^2.88.2" + retry "^0.12.0" + rimraf "^2.7.1" + safe-buffer "^5.2.1" + semver "^5.7.1" + sha "^3.0.0" + slide "~1.1.6" + sorted-object "~2.0.1" + sorted-union-stream "~2.1.3" + ssri "^6.0.2" + stringify-package "^1.0.1" + tar "^4.4.19" text-table "~0.2.0" tiny-relative-date "^1.3.0" - treeverse "^3.0.0" - validate-npm-package-name "^6.0.0" - which "^5.0.0" - write-file-atomic "^6.0.0" + uid-number "0.0.6" + umask "~1.1.0" + unique-filename "^1.1.1" + unpipe "~1.0.0" + update-notifier "^2.5.0" + uuid "^3.4.0" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "~3.0.0" + which "^1.3.1" + worker-farm "^1.7.0" + write-file-atomic "^2.4.3" + +npmlog@^4.1.2, npmlog@~4.1.2: + version "4.1.2" + resolved "https://registry.npmmirror.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" npmlog@^6.0.0: version "6.0.2" @@ -7187,6 +8156,11 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== + nypm@^0.3.8: version "0.3.12" resolved "https://registry.npmmirror.com/nypm/-/nypm-0.3.12.tgz#37541bec0af3a37d3acd81d6662c6666e650b22e" @@ -7199,7 +8173,17 @@ nypm@^0.3.8: pkg-types "^1.2.0" ufo "^1.5.4" -object-inspect@^1.13.1: +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.npmmirror.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.1, object-inspect@^1.13.3: version "1.13.3" resolved "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a" integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== @@ -7209,6 +8193,29 @@ object-keys@^1.1.1: resolved "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== +object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.getownpropertydescriptors@^2.0.3: + version "2.1.8" + resolved "https://registry.npmmirror.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz#2f1fe0606ec1a7658154ccd4f728504f69667923" + integrity sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A== + dependencies: + array.prototype.reduce "^1.0.6" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + gopd "^1.0.1" + safe-array-concat "^1.1.2" + obliterator@^2.0.1: version "2.0.4" resolved "https://registry.npmmirror.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" @@ -7224,7 +8231,7 @@ on-exit-leak-free@^2.1.0: resolved "https://registry.npmmirror.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz#fed195c9ebddb7d9e4c3842f93f281ac8dadd3b8" integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0, once@~1.4.0: version "1.4.0" resolved "https://registry.npmmirror.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== @@ -7262,10 +8269,10 @@ open@^10.1.0: is-inside-container "^1.0.0" is-wsl "^3.1.0" -openai@^4.73.1: - version "4.73.1" - resolved "https://registry.npmmirror.com/openai/-/openai-4.73.1.tgz#532bd000d5f1a558e4fff1119da6749992ac41e4" - integrity sha512-nWImDJBcUsqrhy7yJScXB4+iqjzbUEgzfA3un/6UnHFdwWhjX24oztj69Ped/njABfOdLcO/F7CeWTI5dt8Xmg== +openai@^4.76.0: + version "4.76.0" + resolved "https://registry.npmmirror.com/openai/-/openai-4.76.0.tgz#0ba135ff6452eadbce980c604f98799dfa239325" + integrity sha512-QBGIetjX1C9xDp5XGa/3mPnfKI9BgAe2xHQX6PmO98wuW9qQaurBaumcYptQWc9LHZZq7cH/Y1Rjnsr6uUDdVw== dependencies: "@types/node" "^18.11.18" "@types/node-fetch" "^2.6.4" @@ -7275,6 +8282,11 @@ openai@^4.73.1: formdata-node "^4.3.2" node-fetch "^2.6.7" +opener@^1.5.2: + version "1.5.2" + resolved "https://registry.npmmirror.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + option-validator@^2.0.6: version "2.0.6" resolved "https://registry.npmmirror.com/option-validator/-/option-validator-2.0.6.tgz#a314dae65e26db5f948ef0ff96fc88f18bb76ed6" @@ -7324,11 +8336,41 @@ ora@^8.1.1: string-width "^7.2.0" strip-ansi "^7.1.0" +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +osenv@^0.1.4, osenv@^0.1.5: + version "0.1.5" + resolved "https://registry.npmmirror.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + p-cancelable@^2.0.0: version "2.1.1" resolved "https://registry.npmmirror.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-limit@^2.0.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + p-limit@^3.0.2, "p-limit@^3.1.0 ": version "3.1.0" resolved "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" @@ -7336,6 +8378,13 @@ p-limit@^3.0.2, "p-limit@^3.1.0 ": dependencies: yocto-queue "^0.1.0" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + p-locate@^5.0.0: version "5.0.0" resolved "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" @@ -7350,11 +8399,6 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" -p-map@^7.0.2: - version "7.0.2" - resolved "https://registry.npmmirror.com/p-map/-/p-map-7.0.2.tgz#7c5119fada4755660f70199a66aa3fe2f85a1fe8" - integrity sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q== - p-queue@^8.0.1: version "8.0.1" resolved "https://registry.npmmirror.com/p-queue/-/p-queue-8.0.1.tgz#718b7f83836922ef213ddec263ff4223ce70bef8" @@ -7368,6 +8412,11 @@ p-timeout@^6.1.2: resolved "https://registry.npmmirror.com/p-timeout/-/p-timeout-6.1.3.tgz#9635160c4e10c7b4c3db45b7d5d26f911d9fd853" integrity sha512-UJUyfKbwvr/uZSV6btANfb+0t/mOhKV/KXcCUTp8FcQI+v/0d+wXqH4htrW0E4rR6WiEO/EPvUFiV9D5OI4vlw== +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + pac-proxy-agent@^7.0.1: version "7.0.2" resolved "https://registry.npmmirror.com/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz#0fb02496bd9fb8ae7eb11cfd98386daaac442f58" @@ -7395,57 +8444,66 @@ package-json-from-dist@^1.0.0: resolved "https://registry.npmmirror.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== -pacote@^19.0.0, pacote@^19.0.1: - version "19.0.1" - resolved "https://registry.npmmirror.com/pacote/-/pacote-19.0.1.tgz#66d22dbd274ed8a7c30029d70eb8030f5151e6fc" - integrity sha512-zIpxWAsr/BvhrkSruspG8aqCQUUrWtpwx0GjiRZQhEM/pZXrigA32ElN3vTcCPUDOFmHr6SFxwYrvVUs5NTEUg== - dependencies: - "@npmcli/git" "^6.0.0" - "@npmcli/installed-package-contents" "^3.0.0" - "@npmcli/package-json" "^6.0.0" - "@npmcli/promise-spawn" "^8.0.0" - "@npmcli/run-script" "^9.0.0" - cacache "^19.0.0" - fs-minipass "^3.0.0" - minipass "^7.0.2" - npm-package-arg "^12.0.0" - npm-packlist "^9.0.0" - npm-pick-manifest "^10.0.0" - npm-registry-fetch "^18.0.0" - proc-log "^5.0.0" - promise-retry "^2.0.1" - sigstore "^3.0.0" - ssri "^12.0.0" - tar "^6.1.11" - -pacote@^20.0.0: - version "20.0.0" - resolved "https://registry.npmmirror.com/pacote/-/pacote-20.0.0.tgz#c974373d8e0859d00e8f9158574350f8c1b168e5" - integrity sha512-pRjC5UFwZCgx9kUFDVM9YEahv4guZ1nSLqwmWiLUnDbGsjs+U5w7z6Uc8HNR1a6x8qnu5y9xtGE6D1uAuYz+0A== - dependencies: - "@npmcli/git" "^6.0.0" - "@npmcli/installed-package-contents" "^3.0.0" - "@npmcli/package-json" "^6.0.0" - "@npmcli/promise-spawn" "^8.0.0" - "@npmcli/run-script" "^9.0.0" - cacache "^19.0.0" - fs-minipass "^3.0.0" - minipass "^7.0.2" - npm-package-arg "^12.0.0" - npm-packlist "^9.0.0" - npm-pick-manifest "^10.0.0" - npm-registry-fetch "^18.0.0" - proc-log "^5.0.0" - promise-retry "^2.0.1" - sigstore "^3.0.0" - ssri "^12.0.0" - tar "^6.1.11" +package-json@^4.0.0: + version "4.0.1" + resolved "https://registry.npmmirror.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + integrity sha512-q/R5GrMek0vzgoomq6rm9OX+3PQve8sLwTirmK30YB3Cu0Bbt9OX9M/SIUnroN5BGJkzwGsFwDaRGD9EwBOlCA== + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + +pacote@^9.1.0, pacote@^9.5.12, pacote@^9.5.3: + version "9.5.12" + resolved "https://registry.npmmirror.com/pacote/-/pacote-9.5.12.tgz#1e11dd7a8d736bcc36b375a9804d41bb0377bf66" + integrity sha512-BUIj/4kKbwWg4RtnBncXPJd15piFSVNpTzY0rysSr3VnMowTYgkGKcaHrbReepAkjTr8lH2CVWRi58Spg2CicQ== + dependencies: + bluebird "^3.5.3" + cacache "^12.0.2" + chownr "^1.1.2" + figgy-pudding "^3.5.1" + get-stream "^4.1.0" + glob "^7.1.3" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + minimatch "^3.0.4" + minipass "^2.3.5" + mississippi "^3.0.0" + mkdirp "^0.5.1" + normalize-package-data "^2.4.0" + npm-normalize-package-bin "^1.0.0" + npm-package-arg "^6.1.0" + npm-packlist "^1.1.12" + npm-pick-manifest "^3.0.0" + npm-registry-fetch "^4.0.0" + osenv "^0.1.5" + promise-inflight "^1.0.1" + promise-retry "^1.1.1" + protoduck "^5.0.1" + rimraf "^2.6.2" + safe-buffer "^5.1.2" + semver "^5.6.0" + ssri "^6.0.1" + tar "^4.4.10" + unique-filename "^1.1.1" + which "^1.3.1" pako@^2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -7458,15 +8516,6 @@ parse-cache-control@^1.0.1: resolved "https://registry.npmmirror.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== -parse-conflict-json@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/parse-conflict-json/-/parse-conflict-json-4.0.0.tgz#996b1edfc0c727583b56c7644dbb3258fc9e9e4b" - integrity sha512-37CN2VtcuvKgHUs8+0b1uJeEsbGn61GRHz469C94P5xiOoqpDYJYwjg4RY9Vmz39WyZAVkR5++nbJwLMIgOCnQ== - dependencies: - json-parse-even-better-errors "^4.0.0" - just-diff "^6.0.0" - just-diff-apply "^5.2.0" - parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" resolved "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" @@ -7531,6 +8580,11 @@ path-browserify@^1.0.1: resolved "https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + path-exists@^4.0.0: version "4.0.0" resolved "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -7541,6 +8595,16 @@ path-is-absolute@^1.0.0: resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== +path-is-inside@^1.0.1, path-is-inside@^1.0.2, path-is-inside@~1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== + +path-key@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" @@ -7599,6 +8663,16 @@ perfect-debounce@^1.0.0: resolved "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz#9c2e8bc30b169cc984a58b7d5b28049839591d2a" integrity sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA== +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +pglite-server@^0.1.4: + version "0.1.4" + resolved "https://registry.npmmirror.com/pglite-server/-/pglite-server-0.1.4.tgz#da16cc6670dcf2de3dfe02212f7ebc4d5d5b963e" + integrity sha512-qcZZ5mu+UiLBHa6cHsFYqT6U6wvodg3HNO+kMFCLYlWWG7s1zm1BfO5MWb0yS0OZPgthJklzYz8NQJRujrZKZQ== + picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.0, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" @@ -7614,6 +8688,11 @@ picomatch@^4.0.2: resolved "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + pify@^4.0.1: version "4.0.1" resolved "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" @@ -7629,10 +8708,10 @@ pinia-plugin-persistedstate@^4.1.3: defu "^6.1.4" destr "^2.0.3" -pinia@^2.2.8: - version "2.2.8" - resolved "https://registry.npmmirror.com/pinia/-/pinia-2.2.8.tgz#78bccede31f39e0119188fdaf705c31a93da6d5f" - integrity sha512-NRTYy2g+kju5tBRe0oNlriZIbMNvma8ZJrpHsp3qudyiMEA8jMmPPKQ2QMHg0Oc4BkUyQYWagACabrwriCK9HQ== +pinia@^2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/pinia/-/pinia-2.3.0.tgz#b81f4ac7da1031af8d8f7007686c4b2799a55b9f" + integrity sha512-ohZj3jla0LL0OH5PlLTDMzqKiVw2XARmC1XYLdLWIPBMdhDW/123ZWr4zVAhtJm+aoSkFa13pYXskAvAscIkhQ== dependencies: "@vue/devtools-api" "^6.6.3" vue-demi "^0.14.10" @@ -7717,6 +8796,11 @@ plist@^3.0.4, plist@^3.0.5, plist@^3.1.0: base64-js "^1.5.1" xmlbuilder "^15.1.1" +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + postcss-resolve-nested-selector@^0.1.6: version "0.1.6" resolved "https://registry.npmmirror.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz#3d84dec809f34de020372c41b039956966896686" @@ -7727,14 +8811,6 @@ postcss-safe-parser@^7.0.1: resolved "https://registry.npmmirror.com/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz#36e4f7e608111a0ca940fd9712ce034718c40ec0" integrity sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A== -postcss-selector-parser@^6.1.2: - version "6.1.2" - resolved "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" - integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - postcss-selector-parser@^7.0.0: version "7.0.0" resolved "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz#41bd8b56f177c093ca49435f65731befe25d6b9c" @@ -7762,10 +8838,15 @@ prelude-ls@^1.2.1: resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prettier@^3.4.1: - version "3.4.1" - resolved "https://registry.npmmirror.com/prettier/-/prettier-3.4.1.tgz#e211d451d6452db0a291672ca9154bc8c2579f7b" - integrity sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg== +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.npmmirror.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg== + +prettier@^3.4.2: + version "3.4.2" + resolved "https://registry.npmmirror.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f" + integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ== pretty-ms@^9.0.0: version "9.2.0" @@ -7774,16 +8855,6 @@ pretty-ms@^9.0.0: dependencies: parse-ms "^4.0.0" -proc-log@^4.1.0, proc-log@^4.2.0: - version "4.2.0" - resolved "https://registry.npmmirror.com/proc-log/-/proc-log-4.2.0.tgz#b6f461e4026e75fdfe228b265e9f7a00779d7034" - integrity sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA== - -proc-log@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/proc-log/-/proc-log-5.0.0.tgz#e6c93cf37aef33f835c53485f314f50ea906a9d8" - integrity sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ== - process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -7794,27 +8865,12 @@ process-warning@^4.0.0: resolved "https://registry.npmmirror.com/process-warning/-/process-warning-4.0.0.tgz#581e3a7a1fb456c5f4fd239f76bce75897682d5a" integrity sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw== -proggy@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/proggy/-/proggy-3.0.0.tgz#874e91fed27fe00a511758e83216a6b65148bd6c" - integrity sha512-QE8RApCM3IaRRxVzxrjbgNMpQEX6Wu0p0KBeoSiSEw5/bsGwZHsshF4LCxH2jp/r6BU+bqA3LrMDEYNfJnpD8Q== - progress@^2.0.3: version "2.0.3" resolved "https://registry.npmmirror.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -promise-all-reject-late@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" - integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== - -promise-call-limit@^3.0.1: - version "3.0.2" - resolved "https://registry.npmmirror.com/promise-call-limit/-/promise-call-limit-3.0.2.tgz#524b7f4b97729ff70417d93d24f46f0265efa4f9" - integrity sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw== - -promise-inflight@^1.0.1: +promise-inflight@^1.0.1, promise-inflight@~1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== @@ -7824,6 +8880,14 @@ promise-polyfill@8.3.0: resolved "https://registry.npmmirror.com/promise-polyfill/-/promise-polyfill-8.3.0.tgz#9284810268138d103807b11f4e23d5e945a4db63" integrity sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg== +promise-retry@^1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" + integrity sha512-StEy2osPr28o17bIW776GtwO6+Q+M9zPiZkYfosciUUMYqjhU/ffwRAH0zN2+uvGyUsn8/YICIHRzLbPacpZGw== + dependencies: + err-code "^1.0.0" + retry "^0.10.0" + promise-retry@^2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" @@ -7839,12 +8903,12 @@ promise@^8.0.0: dependencies: asap "~2.0.6" -promzard@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/promzard/-/promzard-2.0.0.tgz#03ad0e4db706544dfdd4f459281f13484fc10c49" - integrity sha512-Ncd0vyS2eXGOjchIRg6PVCYKetJYrW1BSbbIo+bKdig61TB6nH2RQNF2uP+qMpsI73L/jURLWojcw8JNIKZ3gg== +promzard@^0.3.0: + version "0.3.0" + resolved "https://registry.npmmirror.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + integrity sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw== dependencies: - read "^4.0.0" + read "1" proto-list@~1.2.1: version "1.2.4" @@ -7877,6 +8941,13 @@ protocol-buffers@^4.0.4: signed-varint "^2.0.0" varint "^5.0.0" +protoduck@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" + integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg== + dependencies: + genfun "^5.0.0" + proxy-addr@^2.0.7: version "2.0.7" resolved "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" @@ -7909,6 +8980,26 @@ prr@~1.0.1: resolved "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== + +psl@^1.1.28: + version "1.15.0" + resolved "https://registry.npmmirror.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6" + integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== + dependencies: + punycode "^2.3.1" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + pump@^3.0.0: version "3.0.2" resolved "https://registry.npmmirror.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" @@ -7917,22 +9008,31 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.npmmirror.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + punycode.js@^2.3.1: version "2.3.1" resolved "https://registry.npmmirror.com/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7" integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA== -punycode@^2.1.0: +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: version "2.3.1" resolved "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -puppeteer-core@^23.9.0: - version "23.9.0" - resolved "https://registry.npmmirror.com/puppeteer-core/-/puppeteer-core-23.9.0.tgz#24add69fb58dde4ac49d165872b44a30d2bf5b32" - integrity sha512-hLVrav2HYMVdK0YILtfJwtnkBAwNOztUdR4aJ5YKDvgsbtagNr6urUJk9HyjRA9e+PaLI3jzJ0wM7A4jSZ7Qxw== +puppeteer-core@^23.10.1: + version "23.10.1" + resolved "https://registry.npmmirror.com/puppeteer-core/-/puppeteer-core-23.10.1.tgz#46feb3150454e799f1364c8e91d207dce3adbcb9" + integrity sha512-ey6NwixHYEUnhCA/uYi7uQQ4a0CZw4k+MatbHXGl5GEzaiRQziYUxc2HGpdQZ/gnh4KQWAKkocyIg1/dIm5d0g== dependencies: - "@puppeteer/browsers" "2.4.1" + "@puppeteer/browsers" "2.5.0" chromium-bidi "0.8.0" debug "^4.3.7" devtools-protocol "0.0.1367902" @@ -7969,6 +9069,21 @@ qs@^6.4.0: dependencies: side-channel "^1.0.6" +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + +query-string@^6.14.1: + version "6.14.1" + resolved "https://registry.npmmirror.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a" + integrity sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw== + dependencies: + decode-uri-component "^0.2.0" + filter-obj "^1.1.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + querystring@^0.2.1: version "0.2.1" resolved "https://registry.npmmirror.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" @@ -8006,6 +9121,11 @@ quick-lru@^5.1.1: resolved "https://registry.npmmirror.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== +qw@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/qw/-/qw-1.0.2.tgz#0c31a6f810320a91c58b05198679427103b03c4a" + integrity sha512-1PhZ/iLKwlVNq45dnerTMKFjMof49uqli7/0QsvPNbX5OJ3IZ8msa9lUpvPheVdP+IYYPrf6cOaVil7S35joVA== + rc9@^2.1.2: version "2.1.2" resolved "https://registry.npmmirror.com/rc9/-/rc9-2.1.2.tgz#6282ff638a50caa0a91a31d76af4a0b9cbd1080d" @@ -8014,6 +9134,16 @@ rc9@^2.1.2: defu "^6.1.4" destr "^2.0.3" +rc@^1.0.1, rc@^1.1.6: + version "1.2.8" + resolved "https://registry.npmmirror.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + read-binary-file-arch@^1.0.6: version "1.0.6" resolved "https://registry.npmmirror.com/read-binary-file-arch/-/read-binary-file-arch-1.0.6.tgz#959c4637daa932280a9b911b1a6766a7e44288fc" @@ -8021,27 +9151,54 @@ read-binary-file-arch@^1.0.6: dependencies: debug "^4.3.4" -read-cmd-shim@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/read-cmd-shim/-/read-cmd-shim-5.0.0.tgz#6e5450492187a0749f6c80dcbef0debc1117acca" - integrity sha512-SEbJV7tohp3DAAILbEMPXavBjAnMN0tVnh4+9G8ihV4Pq3HYF9h8QNez9zkJ1ILkv9G2BjdzwctznGZXgu/HGw== +read-cmd-shim@^1.0.1, read-cmd-shim@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" + integrity sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA== + dependencies: + graceful-fs "^4.1.2" -read-package-json-fast@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/read-package-json-fast/-/read-package-json-fast-4.0.0.tgz#8ccbc05740bb9f58264f400acc0b4b4eee8d1b39" - integrity sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg== +read-installed@~4.0.3: + version "4.0.3" + resolved "https://registry.npmmirror.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" + integrity sha512-O03wg/IYuV/VtnK2h/KXEt9VIbMUFbk3ERG0Iu4FhLZw0EP0T9znqrYDGn6ncbEsXUFaUjiVAWXHzxwt3lhRPQ== + dependencies: + debuglog "^1.0.1" + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + semver "2 || 3 || 4 || 5" + slide "~1.1.3" + util-extend "^1.0.1" + optionalDependencies: + graceful-fs "^4.1.2" + +"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13, read-package-json@^2.1.2: + version "2.1.2" + resolved "https://registry.npmmirror.com/read-package-json/-/read-package-json-2.1.2.tgz#6992b2b66c7177259feb8eaac73c3acd28b9222a" + integrity sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA== dependencies: - json-parse-even-better-errors "^4.0.0" - npm-normalize-package-bin "^4.0.0" + glob "^7.1.1" + json-parse-even-better-errors "^2.3.0" + normalize-package-data "^2.0.0" + npm-normalize-package-bin "^1.0.0" -read@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/read/-/read-4.0.0.tgz#46a989a22dfefe4eab2327e40e40b05eca727370" - integrity sha512-nbYGT3cec3J5NPUeJia7l72I3oIzMIB6yeNyDqi8CVHr3WftwjrCUqR0j13daoHEMVaZ/rxCpmHKrbods3hI2g== +read-package-tree@^5.3.1: + version "5.3.1" + resolved "https://registry.npmmirror.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" + integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== + dependencies: + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + util-promisify "^2.1.0" + +read@1, read@~1.0.1, read@~1.0.7: + version "1.0.7" + resolved "https://registry.npmmirror.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ== dependencies: - mute-stream "^2.0.0" + mute-stream "~0.0.4" -readable-stream@^2.2.2, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -8063,6 +9220,26 @@ readable-stream@^3.4.0, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readable-stream@~1.1.10: + version "1.1.14" + resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readdir-scoped-modules@^1.0.0, readdir-scoped-modules@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + readdirp@^3.6.0, readdirp@~3.6.0: version "3.6.0" resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -8080,11 +9257,75 @@ real-require@^0.2.0: resolved "https://registry.npmmirror.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== +reflect.getprototypeof@^1.0.6: + version "1.0.7" + resolved "https://registry.npmmirror.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.7.tgz#04311b33a1b713ca5eb7b5aed9950a86481858e5" + integrity sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + which-builtin-type "^1.1.4" + regenerator-runtime@^0.14.0: version "0.14.1" resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== +regexp.prototype.flags@^1.5.3: + version "1.5.3" + resolved "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz#b3ae40b1d2499b8350ab2c3fe6ef3845d3a96f42" + integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.2" + +registry-auth-token@^3.0.1: + version "3.4.0" + resolved "https://registry.npmmirror.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" + integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + +registry-url@^3.0.3: + version "3.1.0" + resolved "https://registry.npmmirror.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + integrity sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA== + dependencies: + rc "^1.0.1" + +request@^2.88.0, request@^2.88.2: + version "2.88.2" + resolved "https://registry.npmmirror.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -8095,6 +9336,11 @@ require-from-string@^2.0.2: resolved "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + require-package-name@^2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/require-package-name/-/require-package-name-2.0.1.tgz#c11e97276b65b8e2923f75dabf5fb2ef0c3841b9" @@ -8140,7 +9386,7 @@ resolve-pkg-maps@^1.0.0: resolved "https://registry.npmmirror.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== -resolve@^1.22.3: +resolve@^1.10.0, resolve@^1.22.3: version "1.22.8" resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -8182,6 +9428,11 @@ retry@0.13.1: resolved "https://registry.npmmirror.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== +retry@^0.10.0: + version "0.10.1" + resolved "https://registry.npmmirror.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha512-ZXUSQYTHdl3uS7IuCehYfMzKyIDBNoAuUblvy5oGO5UJSUTmStUUVPXbA9Qxd173Bgre53yCQczQuHgRWAdvJQ== + retry@^0.12.0: version "0.12.0" resolved "https://registry.npmmirror.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" @@ -8197,6 +9448,13 @@ rfdc@^1.2.0, rfdc@^1.3.1, rfdc@^1.4.1: resolved "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== +rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: + version "2.7.1" + resolved "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + rimraf@^3.0.2: version "3.0.2" resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -8204,13 +9462,6 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -rimraf@^5.0.5: - version "5.0.10" - resolved "https://registry.npmmirror.com/rimraf/-/rimraf-5.0.10.tgz#23b9843d3dc92db71f96e1a2ce92e39fd2a8221c" - integrity sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ== - dependencies: - glob "^10.3.7" - roarr@^2.15.3: version "2.15.4" resolved "https://registry.npmmirror.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd" @@ -8262,12 +9513,29 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg== + dependencies: + aproba "^1.1.1" + rwlock@^5.0.0: version "5.0.0" resolved "https://registry.npmmirror.com/rwlock/-/rwlock-5.0.0.tgz#888d6a77a3351cc1a209204ef2ee1722093836cf" integrity sha512-XgzRqLMfCcm9QfZuPav9cV3Xin5TRcIlp4X/SH3CvB+x5D2AakdlEepfJKDd8ByncvfpcxNWdRZVUl38PS6ZJg== -safe-buffer@^5.2.1, safe-buffer@~5.2.0: +safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.npmmirror.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -8277,6 +9545,15 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-regex "^1.1.4" + safe-regex2@^4.0.0: version "4.0.0" resolved "https://registry.npmmirror.com/safe-regex2/-/safe-regex2-4.0.0.tgz#5e04d8362cd4884753c8bce9715d4759a5239c0a" @@ -8289,7 +9566,7 @@ safe-stable-stringify@^2.3.1: resolved "https://registry.npmmirror.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== -"safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -8331,7 +9608,14 @@ semver-compare@^1.0.0: resolved "https://registry.npmmirror.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== -semver@^5.6.0: +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + integrity sha512-gL8F8L4ORwsS0+iQ34yCYv///jsOq0ZL7WP55d1HnJ32o7tyFYEFQZQA22mrLIacZdU6xecaBBZ+uEiffGNyXw== + dependencies: + semver "^5.0.3" + +"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.4.1, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: version "5.7.2" resolved "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== @@ -8341,7 +9625,7 @@ semver@^6.2.0, semver@^6.3.1: resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.1.1, semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3: +semver@^7.3.2, semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3: version "7.6.3" resolved "https://registry.npmmirror.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== @@ -8353,7 +9637,7 @@ serialize-error@^7.0.1: dependencies: type-fest "^0.13.1" -set-blocking@^2.0.0: +set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== @@ -8375,6 +9659,23 @@ set-function-length@^1.2.1: gopd "^1.0.1" has-property-descriptors "^1.0.2" +set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +sha@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/sha/-/sha-3.0.0.tgz#b2f2f90af690c16a3a839a6a6c680ea51fedd1ae" + integrity sha512-DOYnM37cNsLNSGIG/zZWch5CKIRNoLdYUQTQlcgkRkoYIUwDYjqDyye16YcDZg/OPdcbUgTKMjc4SY6TB7ZAPw== + dependencies: + graceful-fs "^4.1.2" + shaka-player@^2.4.0: version "2.5.23" resolved "https://registry.npmmirror.com/shaka-player/-/shaka-player-2.5.23.tgz#db92d1c6cf2314f0180a2cec11b0e2f2560336f5" @@ -8382,13 +9683,20 @@ shaka-player@^2.4.0: dependencies: eme-encryption-scheme-polyfill "^2.0.1" -shaka-player@^4.12.3: - version "4.12.3" - resolved "https://registry.npmmirror.com/shaka-player/-/shaka-player-4.12.3.tgz#f807e75d4ea699ea4e2d476962c13fc56d76bca3" - integrity sha512-7lmRM/5YOCXP5SLm2y49D/7t59mM8kSmkqjIrhqi0BQWjEnZCZVvhicz/akJvJAvgNG+WCF1zkLuiKo8YtNdGw== +shaka-player@^4.12.4: + version "4.12.4" + resolved "https://registry.npmmirror.com/shaka-player/-/shaka-player-4.12.4.tgz#a22810763f36c7c3313545d4329420b520e6bda2" + integrity sha512-r3008gwhjgVZwLCpY8mT/OxLZQcJoqUKptKw7drsB8hV4lf1NhbTXxoNcM83lTS90iNMw2SXvk7vCLxyV/Uscw== dependencies: eme-encryption-scheme-polyfill "^2.1.6" +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -8396,6 +9704,11 @@ shebang-command@^2.0.0: dependencies: shebang-regex "^3.0.0" +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" @@ -8417,7 +9730,7 @@ shell-path@^3.0.0: dependencies: shell-env "^4.0.0" -side-channel@^1.0.6: +side-channel@^1.0.4, side-channel@^1.0.6: version "1.0.6" resolved "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== @@ -8427,7 +9740,7 @@ side-channel@^1.0.6: get-intrinsic "^1.2.4" object-inspect "^1.13.1" -signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -8444,18 +9757,6 @@ signed-varint@^2.0.0, signed-varint@^2.0.1: dependencies: varint "~5.0.0" -sigstore@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/sigstore/-/sigstore-3.0.0.tgz#d6eadcc6590185a7f1c16184078ce8a9ef6db937" - integrity sha512-PHMifhh3EN4loMcHCz6l3v/luzgT3za+9f8subGgeMNjbJjzH4Ij/YoX3Gvu+kaouJRIlVdTHHCREADYf+ZteA== - dependencies: - "@sigstore/bundle" "^3.0.0" - "@sigstore/core" "^2.0.0" - "@sigstore/protobuf-specs" "^0.3.2" - "@sigstore/sign" "^3.0.0" - "@sigstore/tuf" "^3.0.0" - "@sigstore/verify" "^2.0.0" - simple-update-notifier@2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" @@ -8505,6 +9806,11 @@ slick@^1.12.2: resolved "https://registry.npmmirror.com/slick/-/slick-1.12.2.tgz#bd048ddb74de7d1ca6915faa4a57570b3550c2d7" integrity sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A== +slide@^1.1.6, slide@~1.1.3, slide@~1.1.6: + version "1.1.6" + resolved "https://registry.npmmirror.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw== + sm-crypto@^0.3.13: version "0.3.13" resolved "https://registry.npmmirror.com/sm-crypto/-/sm-crypto-0.3.13.tgz#9615d67f9f2280970c353122e5901ae87d64899a" @@ -8512,7 +9818,7 @@ sm-crypto@^0.3.13: dependencies: jsbn "^1.1.0" -smart-buffer@^4.0.2, smart-buffer@^4.2.0: +smart-buffer@^4.0.2, smart-buffer@^4.1.0, smart-buffer@^4.2.0: version "4.2.0" resolved "https://registry.npmmirror.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== @@ -8525,6 +9831,14 @@ smooth-scrollbar@^8.8.4: core-js "^3.6.4" tslib "^1.10.0" +socks-proxy-agent@^4.0.0: + version "4.0.2" + resolved "https://registry.npmmirror.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" + integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== + dependencies: + agent-base "~4.2.1" + socks "~2.3.2" + socks-proxy-agent@^7.0.0: version "7.0.0" resolved "https://registry.npmmirror.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" @@ -8534,7 +9848,7 @@ socks-proxy-agent@^7.0.0: debug "^4.3.3" socks "^2.6.2" -socks-proxy-agent@^8.0.2, socks-proxy-agent@^8.0.3, socks-proxy-agent@^8.0.4: +socks-proxy-agent@^8.0.2, socks-proxy-agent@^8.0.4: version "8.0.4" resolved "https://registry.npmmirror.com/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz#9071dca17af95f483300316f4b063578fa0db08c" integrity sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw== @@ -8551,6 +9865,14 @@ socks@^2.6.2, socks@^2.8.3: ip-address "^9.0.5" smart-buffer "^4.2.0" +socks@~2.3.2: + version "2.3.3" + resolved "https://registry.npmmirror.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== + dependencies: + ip "1.1.5" + smart-buffer "^4.1.0" + sonic-boom@^4.0.1: version "4.2.0" resolved "https://registry.npmmirror.com/sonic-boom/-/sonic-boom-4.2.0.tgz#e59a525f831210fa4ef1896428338641ac1c124d" @@ -8563,6 +9885,19 @@ sortablejs@^1.15.0: resolved "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.15.3.tgz#033668db5ebfb11167d1249ab88e748f27959e29" integrity sha512-zdK3/kwwAK1cJgy1rwl1YtNTbRmc8qW/+vgXf75A7NHag5of4pyI6uK86ktmQETyWRH7IGaE73uZOOBcGxgqZg== +sorted-object@~2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/sorted-object/-/sorted-object-2.0.1.tgz#7d631f4bd3a798a24af1dffcfbfe83337a5df5fc" + integrity sha512-oKAAs26HeTu3qbawzUGCkTOBv/5MRrcuJyRWwbfEnWdpXnXsj+WEM3HTvarV73tMcf9uBEZNZoNDVRL62VLxzA== + +sorted-union-stream@~2.1.3: + version "2.1.3" + resolved "https://registry.npmmirror.com/sorted-union-stream/-/sorted-union-stream-2.1.3.tgz#c7794c7e077880052ff71a8d4a2dbb4a9a638ac7" + integrity sha512-RaKskQJZkmVREIwyAFho1RRU+sKjDdg51Crvxg2VxmIyiIrNhPNoJD/by5/pklWBXAZoO6LfAAGv8xd47p9TnQ== + dependencies: + from2 "^1.3.0" + stream-iterate "^1.1.0" + source-map-js@^1.0.1, source-map-js@^1.0.2, source-map-js@^1.2.0, source-map-js@^1.2.1: version "1.2.1" resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" @@ -8602,14 +9937,6 @@ spdx-expression-parse@^3.0.0: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" -spdx-expression-parse@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz#a23af9f3132115465dac215c099303e4ceac5794" - integrity sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - spdx-license-ids@^3.0.0: version "3.0.20" resolved "https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz#e44ed19ed318dd1e5888f93325cee800f0f51b89" @@ -8629,6 +9956,11 @@ speech-rule-engine@^4.0.6: wicked-good-xpath "1.3.0" xmldom-sre "0.1.31" +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + split2@^2.2.0: version "2.2.0" resolved "https://registry.npmmirror.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" @@ -8651,19 +9983,27 @@ sprintf-js@~1.0.2: resolved "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -ssri@^10.0.0: - version "10.0.6" - resolved "https://registry.npmmirror.com/ssri/-/ssri-10.0.6.tgz#a8aade2de60ba2bce8688e3fa349bad05c7dc1e5" - integrity sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ== +sshpk@^1.7.0: + version "1.18.0" + resolved "https://registry.npmmirror.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== dependencies: - minipass "^7.0.3" - -ssri@^12.0.0: - version "12.0.0" - resolved "https://registry.npmmirror.com/ssri/-/ssri-12.0.0.tgz#bcb4258417c702472f8191981d3c8a771fee6832" - integrity sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ== + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.0, ssri@^6.0.1, ssri@^6.0.2: + version "6.0.2" + resolved "https://registry.npmmirror.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" + integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== dependencies: - minipass "^7.0.3" + figgy-pudding "^3.5.1" ssri@^9.0.0: version "9.0.1" @@ -8687,6 +10027,27 @@ stdin-discarder@^0.2.2: resolved "https://registry.npmmirror.com/stdin-discarder/-/stdin-discarder-0.2.2.tgz#390037f44c4ae1a1ae535c5fe38dc3aba8d997be" integrity sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ== +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.npmmirror.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-iterate@^1.1.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/stream-iterate/-/stream-iterate-1.2.0.tgz#2bd7c77296c1702a46488b8ad41f79865eecd4e1" + integrity sha512-QVfGkdBQ8NzsSIiL3rV6AoFFWwMvlg1qpTwVQaMGY5XYThDUuNM4hYSzi8pbKlimTsWyQdaWRZE+jwlPsMiiZw== + dependencies: + readable-stream "^2.1.5" + stream-shift "^1.0.0" + +stream-shift@^1.0.0: + version "1.0.3" + resolved "https://registry.npmmirror.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" + integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== + streamx@^2.15.0, streamx@^2.20.0: version "2.20.2" resolved "https://registry.npmmirror.com/streamx/-/streamx-2.20.2.tgz#6a8911959d6f307c19781a1d19ecd94b5f042d78" @@ -8698,6 +10059,11 @@ streamx@^2.15.0, streamx@^2.20.0: optionalDependencies: bare-events "^2.2.0" +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== + "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -8707,6 +10073,15 @@ streamx@^2.15.0, streamx@^2.20.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -8716,6 +10091,23 @@ streamx@^2.15.0, streamx@^2.20.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string-width@^2.0.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -8734,6 +10126,34 @@ string-width@^7.2.0: get-east-asian-width "^1.0.0" strip-ansi "^7.1.0" +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.npmmirror.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" + +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -8741,6 +10161,11 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -8748,6 +10173,11 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +stringify-package@^1.0.0, stringify-package@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/stringify-package/-/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85" + integrity sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg== + "strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -8755,6 +10185,27 @@ string_decoder@~1.1.1: dependencies: ansi-regex "^5.0.1" +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -8769,6 +10220,11 @@ strip-ansi@^7.0.1, strip-ansi@^7.1.0: dependencies: ansi-regex "^6.0.1" +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== + strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" @@ -8789,6 +10245,11 @@ strip-json-comments@^3.1.1: resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + strip-literal@^2.1.0, strip-literal@^2.1.1: version "2.1.1" resolved "https://registry.npmmirror.com/strip-literal/-/strip-literal-2.1.1.tgz#26906e65f606d49f748454a08084e94190c2e5ad" @@ -8882,11 +10343,6 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^9.4.0: - version "9.4.0" - resolved "https://registry.npmmirror.com/supports-color/-/supports-color-9.4.0.tgz#17bfcf686288f531db3dea3215510621ccb55954" - integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== - supports-hyperlinks@^3.1.0: version "3.1.0" resolved "https://registry.npmmirror.com/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz#b56150ff0173baacc15f21956450b61f2b18d3ac" @@ -8974,7 +10430,20 @@ tar-stream@^3.1.5: fast-fifo "^1.2.0" streamx "^2.15.0" -tar@^6.0.5, tar@^6.1.11, tar@^6.1.12, tar@^6.1.2, tar@^6.2.0, tar@^6.2.1: +tar@^4.4.10, tar@^4.4.12, tar@^4.4.19: + version "4.4.19" + resolved "https://registry.npmmirror.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" + integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== + dependencies: + chownr "^1.1.4" + fs-minipass "^1.2.7" + minipass "^2.9.0" + minizlib "^1.3.3" + mkdirp "^0.5.5" + safe-buffer "^5.2.1" + yallist "^3.1.1" + +tar@^6.0.5, tar@^6.1.11, tar@^6.1.12, tar@^6.1.2, tar@^6.2.0: version "6.2.1" resolved "https://registry.npmmirror.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== @@ -8986,18 +10455,6 @@ tar@^6.0.5, tar@^6.1.11, tar@^6.1.12, tar@^6.1.2, tar@^6.2.0, tar@^6.2.1: mkdirp "^1.0.3" yallist "^4.0.0" -tar@^7.4.3: - version "7.4.3" - resolved "https://registry.npmmirror.com/tar/-/tar-7.4.3.tgz#88bbe9286a3fcd900e94592cda7a22b192e80571" - integrity sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw== - dependencies: - "@isaacs/fs-minipass" "^4.0.0" - chownr "^3.0.0" - minipass "^7.1.2" - minizlib "^3.0.1" - mkdirp "^3.0.1" - yallist "^5.0.0" - tdesign-icons-vue-next@^0.2.2, tdesign-icons-vue-next@^0.2.4: version "0.2.6" resolved "https://registry.npmmirror.com/tdesign-icons-vue-next/-/tdesign-icons-vue-next-0.2.6.tgz#964be958cf8145271bf033f7f11093ee8baf5ff0" @@ -9039,6 +10496,13 @@ temp-file@^3.4.0: async-exit-hook "^2.0.1" fs-extra "^10.0.0" +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + integrity sha512-7dPUZQGy/+m3/wjVz3ZW5dobSoD/02NxJpoXUX0WIyjfVS3l0c+b/+9phIDFA7FHzkYtwtMFgeGZ/Y8jVTeqQQ== + dependencies: + execa "^0.7.0" + text-decoder@^1.1.0: version "1.2.1" resolved "https://registry.npmmirror.com/text-decoder/-/text-decoder-1.2.1.tgz#e173f5121d97bfa3ff8723429ad5ba92e1ead67e" @@ -9073,7 +10537,7 @@ thread-stream@^3.0.0: dependencies: real-require "^0.2.0" -through2@^2.0.2: +through2@^2.0.0, through2@^2.0.2: version "2.0.5" resolved "https://registry.npmmirror.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -9081,7 +10545,7 @@ through2@^2.0.2: readable-stream "~2.3.6" xtend "~4.0.1" -through@^2.3.8: +"through@>=2.2.7 <3", through@^2.3.8: version "2.3.8" resolved "https://registry.npmmirror.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== @@ -9093,6 +10557,11 @@ time-span@^5.1.0: dependencies: convert-hrtime "^5.0.0" +timed-out@^4.0.0: + version "4.0.1" + resolved "https://registry.npmmirror.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== + timeout-signal@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/timeout-signal/-/timeout-signal-2.0.0.tgz#23207ea448d50258bb0defe3beea4a467643abba" @@ -9147,6 +10616,14 @@ totalist@^3.0.0: resolved "https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + tr46@~0.0.3: version "0.0.3" resolved "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -9157,11 +10634,6 @@ tree-kill@^1.2.2: resolved "https://registry.npmmirror.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== -treeverse@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/treeverse/-/treeverse-3.0.0.tgz#dd82de9eb602115c6ebd77a574aae67003cb48c8" - integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ== - truncate-utf8-bytes@^1.0.0: version "1.0.2" resolved "https://registry.npmmirror.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" @@ -9184,14 +10656,17 @@ tslib@^2.0.1, tslib@^2.2.0, tslib@^2.3.0: resolved "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== -tuf-js@^3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/tuf-js/-/tuf-js-3.0.1.tgz#e3f07ed3d8e87afaa70607bd1ef801d5c1f57177" - integrity sha512-+68OP1ZzSF84rTckf3FA95vJ1Zlx/uaXyiiKyPd1pA4rZNkpEvDAKmsu1xUSmbF/chCRYgZ6UZkDwC7PmzmAyA== +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: - "@tufjs/models" "3.0.1" - debug "^4.3.6" - make-fetch-happen "^14.0.1" + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.npmmirror.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -9210,6 +10685,51 @@ type@^2.7.2: resolved "https://registry.npmmirror.com/type/-/type-2.7.3.tgz#436981652129285cc3ba94f392886c2637ea0486" integrity sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ== +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-byte-offset@^1.0.2: + version "1.0.3" + resolved "https://registry.npmmirror.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz#3fa9f22567700cc86aaf86a1e7176f74b59600f2" + integrity sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + reflect.getprototypeof "^1.0.6" + +typed-array-length@^1.0.6: + version "1.0.7" + resolved "https://registry.npmmirror.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" + typed-query-selector@^2.12.0: version "2.12.0" resolved "https://registry.npmmirror.com/typed-query-selector/-/typed-query-selector-2.12.0.tgz#92b65dbc0a42655fccf4aeb1a08b1dddce8af5f2" @@ -9235,6 +10755,26 @@ ufo@^1.5.4: resolved "https://registry.npmmirror.com/ufo/-/ufo-1.5.4.tgz#16d6949674ca0c9e0fbbae1fa20a71d7b1ded754" integrity sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ== +uid-number@0.0.6: + version "0.0.6" + resolved "https://registry.npmmirror.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + integrity sha512-c461FXIljswCuscZn67xq9PpszkPT6RjheWFQTgCyabJrTUozElanb0YEqv2UGgk247YpcJkFBuSGNvBlpXM9w== + +umask@^1.1.0, umask@~1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" + integrity sha512-lE/rxOhmiScJu9L6RTNVgB/zZbF+vGC0/p6D3xnkAePI2o0sMyFG966iR5Ki50OI/0mNi2yaRnxfLsPmEZF/JA== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + unbzip2-stream@^1.4.3: version "1.4.3" resolved "https://registry.npmmirror.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" @@ -9326,6 +10866,13 @@ unimport@^3.13.4: strip-literal "^2.1.1" unplugin "^1.16.0" +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + unique-filename@^2.0.0: version "2.0.1" resolved "https://registry.npmmirror.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" @@ -9333,19 +10880,12 @@ unique-filename@^2.0.0: dependencies: unique-slug "^3.0.0" -unique-filename@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" - integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== - dependencies: - unique-slug "^4.0.0" - -unique-filename@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/unique-filename/-/unique-filename-4.0.0.tgz#a06534d370e7c977a939cd1d11f7f0ab8f1fed13" - integrity sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ== +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.npmmirror.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== dependencies: - unique-slug "^5.0.0" + imurmurhash "^0.1.4" unique-slug@^3.0.0: version "3.0.0" @@ -9354,19 +10894,12 @@ unique-slug@^3.0.0: dependencies: imurmurhash "^0.1.4" -unique-slug@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" - integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== - dependencies: - imurmurhash "^0.1.4" - -unique-slug@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/unique-slug/-/unique-slug-5.0.0.tgz#ca72af03ad0dbab4dad8aa683f633878b1accda8" - integrity sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg== +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + integrity sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg== dependencies: - imurmurhash "^0.1.4" + crypto-random-string "^1.0.0" universalify@^0.1.0: version "0.1.2" @@ -9378,6 +10911,11 @@ universalify@^2.0.0: resolved "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== +unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + unplugin-auto-import@^0.18.6: version "0.18.6" resolved "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.18.6.tgz#6848bef1742bc457f42cf67a13e824f69debc889" @@ -9429,6 +10967,11 @@ untyped@^1.5.1: mri "^1.2.0" scule "^1.3.0" +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + integrity sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw== + update-browserslist-db@^1.1.1: version "1.1.1" resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" @@ -9437,6 +10980,22 @@ update-browserslist-db@^1.1.1: escalade "^3.2.0" picocolors "^1.1.0" +update-notifier@^2.3.0, update-notifier@^2.5.0: + version "2.5.0" + resolved "https://registry.npmmirror.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" + integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== + dependencies: + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-ci "^1.0.10" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -9449,6 +11008,13 @@ url-join@^5.0.0: resolved "https://registry.npmmirror.com/url-join/-/url-join-5.0.0.tgz#c2f1e5cbd95fa91082a93b58a1f42fecb4bdbcf1" integrity sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA== +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA== + dependencies: + prepend-http "^1.0.1" + url-parse@^1.5.10: version "1.5.10" resolved "https://registry.npmmirror.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" @@ -9472,11 +11038,28 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== +util-extend@^1.0.1: + version "1.0.3" + resolved "https://registry.npmmirror.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" + integrity sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA== + +util-promisify@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" + integrity sha512-K+5eQPYs14b3+E+hmE2J6gCZ4JmMl9DbYS6BeP2CHq6WMuNxErxf5B/n0fz85L8zUuoO6rIzNNmIQDu/j+1OcA== + dependencies: + object.getownpropertydescriptors "^2.0.3" + uuid@^11.0.3: version "11.0.3" resolved "https://registry.npmmirror.com/uuid/-/uuid-11.0.3.tgz#248451cac9d1a4a4128033e765d137e2b2c49a3d" integrity sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg== +uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + uuid@^8.3.2: version "8.3.2" resolved "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" @@ -9492,7 +11075,7 @@ valid-data-url@^3.0.0: resolved "https://registry.npmmirror.com/valid-data-url/-/valid-data-url-3.0.1.tgz#826c1744e71b5632e847dd15dbd45b9fb38aa34f" integrity sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA== -validate-npm-package-license@^3.0.4: +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" resolved "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== @@ -9500,10 +11083,12 @@ validate-npm-package-license@^3.0.4: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate-npm-package-name@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/validate-npm-package-name/-/validate-npm-package-name-6.0.0.tgz#3add966c853cfe36e0e8e6a762edd72ae6f1d6ac" - integrity sha512-d7KLgL1LD3U3fgnvWEY1cQXoO/q6EQ1BSz48Sa149V/5zVTAbgmZIpyI8TRi6U9/JNyeYLlTKsEMPtLC27RFUg== +validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== + dependencies: + builtins "^1.0.3" validator@^13.9.0: version "13.12.0" @@ -9520,6 +11105,15 @@ varint@^5.0.0, varint@~5.0.0: resolved "https://registry.npmmirror.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== +verror@1.10.0: + version "1.10.0" + resolved "https://registry.npmmirror.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + verror@^1.10.0: version "1.10.1" resolved "https://registry.npmmirror.com/verror/-/verror-1.10.1.tgz#4bf09eeccf4563b109ed4b3d458380c972b0cdeb" @@ -9584,10 +11178,10 @@ vite-svg-loader@^5.1.0: dependencies: svgo "^3.0.2" -vite@^6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/vite/-/vite-6.0.1.tgz#24c9caf24998f0598de37bed67e50ec5b9dfeaf0" - integrity sha512-Ldn6gorLGr4mCdFnmeAOLweJxZ34HjKnDm4HGo6P66IEqTxQb36VEdFJQENKxWjupNfoIjvRUnswjn1hpYEpjQ== +vite@^6.0.3: + version "6.0.3" + resolved "https://registry.npmmirror.com/vite/-/vite-6.0.3.tgz#cc01f403e326a9fc1e064235df8a6de084c8a491" + integrity sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw== dependencies: esbuild "^0.24.0" postcss "^8.4.49" @@ -9641,12 +11235,7 @@ vue@^3.5.13: "@vue/server-renderer" "3.5.13" "@vue/shared" "3.5.13" -walk-up-path@^3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/walk-up-path/-/walk-up-path-3.0.1.tgz#c8d78d5375b4966c717eb17ada73dbd41490e886" - integrity sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA== - -wcwidth@^1.0.1: +wcwidth@^1.0.0, wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== @@ -9735,7 +11324,63 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -which@^1.2.14, which@^1.3.1: +which-boxed-primitive@^1.0.2: + version "1.1.0" + resolved "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.1.0.tgz#2d850d6c4ac37b95441a67890e19f3fda8b6c6d9" + integrity sha512-Ei7Miu/AXe2JJ4iNF5j/UphAgRoma4trE6PtisM09bPygb3egMH3YLW/befsWb1A1AxvNSFidOFTB18XtnIIng== + dependencies: + is-bigint "^1.1.0" + is-boolean-object "^1.2.0" + is-number-object "^1.1.0" + is-string "^1.1.0" + is-symbol "^1.1.0" + +which-builtin-type@^1.1.4: + version "1.2.0" + resolved "https://registry.npmmirror.com/which-builtin-type/-/which-builtin-type-1.2.0.tgz#58042ac9602d78a6d117c7e811349df1268ba63c" + integrity sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA== + dependencies: + call-bind "^1.0.7" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.0.5" + is-finalizationregistry "^1.1.0" + is-generator-function "^1.0.10" + is-regex "^1.1.4" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.2" + which-typed-array "^1.1.15" + +which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-module@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== + +which-typed-array@^1.1.14, which-typed-array@^1.1.15: + version "1.1.16" + resolved "https://registry.npmmirror.com/which-typed-array/-/which-typed-array-1.1.16.tgz#db4db429c4706feca2f01677a144278e4a8c216b" + integrity sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.2" + +which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: version "1.3.1" resolved "https://registry.npmmirror.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -9749,37 +11394,42 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -which@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" - integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== - dependencies: - isexe "^3.1.1" - -which@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/which/-/which-5.0.0.tgz#d93f2d93f79834d4363c7d0c23e00d07c466c8d6" - integrity sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ== - dependencies: - isexe "^3.1.1" - wicked-good-xpath@1.3.0: version "1.3.0" resolved "https://registry.npmmirror.com/wicked-good-xpath/-/wicked-good-xpath-1.3.0.tgz#81b0e95e8650e49c94b22298fff8686b5553cf6c" integrity sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw== -wide-align@^1.1.5: +wide-align@^1.1.0, wide-align@^1.1.5: version "1.1.5" resolved "https://registry.npmmirror.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: string-width "^1.0.2 || 2 || 3 || 4" +widest-line@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" + integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== + dependencies: + string-width "^2.1.1" + word-wrap@^1.2.5: version "1.2.5" resolved "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== +worker-farm@^1.6.0, worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.npmmirror.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +workerpool@^9.2.0: + version "9.2.0" + resolved "https://registry.npmmirror.com/workerpool/-/workerpool-9.2.0.tgz#f74427cbb61234708332ed8ab9cbf56dcb1c4371" + integrity sha512-PKZqBOCo6CYkVOwAxWxQaSF2Fvb5Iv2fCeTP7buyWI2GiynWr46NcXSgK/idoV6e60dgCBfgYc+Un3HMvmqP8w== + "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -9789,6 +11439,15 @@ word-wrap@^1.2.5: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -9812,6 +11471,15 @@ wrappy@1: resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.3: + version "2.4.3" + resolved "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + write-file-atomic@^5.0.1: version "5.0.1" resolved "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" @@ -9820,14 +11488,6 @@ write-file-atomic@^5.0.1: imurmurhash "^0.1.4" signal-exit "^4.0.1" -write-file-atomic@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-6.0.0.tgz#e9c89c8191b3ef0606bc79fb92681aa1aa16fa93" - integrity sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^4.0.1" - ws@^8.18.0: version "8.18.0" resolved "https://registry.npmmirror.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" @@ -9838,6 +11498,11 @@ wxmp-rsa@^2.1.0: resolved "https://registry.npmmirror.com/wxmp-rsa/-/wxmp-rsa-2.1.0.tgz#3c6603e1ded2587506ef273527a8d04aaa96da51" integrity sha512-VbWMJ+vf8t7G93sjkqjCn5yGy/Si3M8uD6OFebqjJWJ1R0WCyle7X6SNia7WWG6Qe1F2/OWxhbcSGA6ebUBwIA== +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + integrity sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ== + xgplayer-dash@^3.0.20: version "3.0.20" resolved "https://registry.npmmirror.com/xgplayer-dash/-/xgplayer-dash-3.0.20.tgz#2ae67223c8230bb071dbe0aa48f24c0b79120b51" @@ -9964,12 +11629,22 @@ xtend@~4.0.1: resolved "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + y18n@^5.0.5: version "5.0.8" resolved "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@^3.0.2: +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: version "3.1.1" resolved "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -9979,16 +11654,19 @@ yallist@^4.0.0: resolved "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yallist@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533" - integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== - yaml@^1.10.0: version "1.10.2" resolved "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yargs-parser@^15.0.1: + version "15.0.3" + resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-15.0.3.tgz#316e263d5febe8b38eef61ac092b33dfcc9b1115" + integrity sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs-parser@^20.2.2: version "20.2.9" resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" @@ -9999,6 +11677,23 @@ yargs-parser@^21.1.1: resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== +yargs@^14.2.3: + version "14.2.3" + resolved "https://registry.npmmirror.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" + integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg== + dependencies: + cliui "^5.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^15.0.1" + yargs@^16.2.0: version "16.2.0" resolved "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" From 3c7df482a470dffdd9c200a93175354ef9b99b65 Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Fri, 6 Dec 2024 18:22:38 +0800 Subject: [PATCH 010/175] [bug] fix hiker req res not standard --- src/main/utils/hiker/syncFetch.ts | 4 ++-- src/main/utils/hiker/syncRequest.ts | 12 +++++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/utils/hiker/syncFetch.ts b/src/main/utils/hiker/syncFetch.ts index d4c9d9e13..34720f9d0 100644 --- a/src/main/utils/hiker/syncFetch.ts +++ b/src/main/utils/hiker/syncFetch.ts @@ -59,10 +59,10 @@ const toString = (val: any): string => { } }; -const serialize2dict = (headers) => { +const serialize2dict = (headers: { [key: string]: any } = {}) => { const headersDict = {}; for (const [key, value] of headers.entries()) { - headersDict[key] = value; + headersDict[key] = value.split(';'); } return headersDict; }; diff --git a/src/main/utils/hiker/syncRequest.ts b/src/main/utils/hiker/syncRequest.ts index 48fc9e418..bdefead72 100644 --- a/src/main/utils/hiker/syncRequest.ts +++ b/src/main/utils/hiker/syncRequest.ts @@ -21,7 +21,7 @@ const getTimeout = (timeout: number | undefined | null) => { return baseTimeout; }; -const toTitleCase = (str) => { +const toTitleCase = (str: string) => { return str .split('-') .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()) @@ -58,6 +58,14 @@ const toString = (val: any): string => { } }; +const serialize2dict = (headers: { [key: string]: any } = {}) => { + const headersDict = {}; + for (const [key, value] of Object.entries(headers)) { + headersDict[key] = value.split(';'); + } + return headersDict; +}; + type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'HEAD'; interface RequestOptions { @@ -143,6 +151,8 @@ const fetch = (url: string, options: RequestOptions = {}) => { res.getBody = function (encoding: BufferEncoding | undefined) { return encoding ? this.body.toString(encoding) : this.body; }; + // @ts-ignore 重写请求头 + res.headers = serialize2dict(res.headers); if (options?.onlyHeaders) { return toString(res.headers); From 7920401dcb4fcee2ef616d881e6599d918d86e7d Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Fri, 6 Dec 2024 20:49:53 +0800 Subject: [PATCH 011/175] [bug] fix hiker req not stanard --- .../site/cms/adapter/drpy/worker-test-case.ts | 67 +++++++++---------- src/main/utils/hiker/syncFetch.ts | 26 +++---- src/main/utils/hiker/syncRequest.ts | 20 +++--- 3 files changed, 51 insertions(+), 62 deletions(-) diff --git a/src/main/core/server/routes/v1/site/cms/adapter/drpy/worker-test-case.ts b/src/main/core/server/routes/v1/site/cms/adapter/drpy/worker-test-case.ts index e4d77ac7b..e162d0c23 100644 --- a/src/main/core/server/routes/v1/site/cms/adapter/drpy/worker-test-case.ts +++ b/src/main/core/server/routes/v1/site/cms/adapter/drpy/worker-test-case.ts @@ -11,22 +11,36 @@ import syncFetch from 'sync-fetch'; import syncRequest from 'sync-request'; process.on('message', (message: { [key: string]: any }) => { - // const r1 = fetch('http://localhost:5173/api/v1/system/status', { onlyHeaders: true }); - // console.log('fetch-onlyHeaders', r1); - // const r2 = fetch('http://localhost:5173/api/v1/system/status', { withHeaders: true }); - // console.log('fetch-withHeaders', r2); - // const r3 = fetch('https://www.sourcepower.top/api/v1/user/login', { - // withStatusCode: true, - // timeout: 50000, - // method: 'POST', - // body: { email: 'hiram@catni.cn', password: '994200' }, - // }); - // console.log('fetch-withStatusCode+post', r3); - // console.log( - // JSON.stringify({ - // 'content-type': 'application/json', - // }), - // ); + const r1 = fetch('http://localhost:5173/api/v1/system/status', { onlyHeaders: true }); + console.log('fetch-onlyHeaders', r1); + const r2 = fetch('http://localhost:5173/api/v1/system/status', { withHeaders: true }); + console.log('fetch-withHeaders', JSON.parse(r2)); + const r3 = fetch('https://www.sourcepower.top/api/v1/user/login', { + withStatusCode: true, + timeout: 50000, + method: 'POST', + body: { email: 'hiram@catni.cn', password: 'xxxxxx' }, + }); + console.log('fetch-withStatusCode+post', JSON.parse(r3)); + const r4 = fetch('http://localhost:5173/api/v1/system/status', { toHex: true }); + console.log('fetch-toHex', JSON.parse(r4)); + const r5 = fetchPC('http://localhost:5173/api/v1/system/status'); + console.log('fetchPC', JSON.parse(r5)); + const r6 = postPC('https://www.sourcepower.top/api/v1/user/login', { + withStatusCode: true, + body: { email: 'hiram@catni.cn', password: 'xxxxxx' }, + }); + console.log('postPC', JSON.parse(r6)); + const r7 = fetchCookie('https://x.mbd.pub/api/new_count'); + console.log('fetchCookie', JSON.parse(r7)); + const r8 = convertBase64Image('https://static-o.oss-cn-shenzhen.aliyuncs.com/sukoutu/icon/sukoutuVip.png'); + console.log('convertBase64Image', r8); + const r9 = batchFetch([ + { url: 'http://localhost:5173/api/v1/system/status' }, + { url: 'http://localhost:5173/api/v1/system/status' }, + ]); + console.log('batchFetch', r9); + // const test = syncFetch('https://www.sourcepower.top/api/v1/user/login', { // method: 'POST', // headers: { @@ -35,26 +49,7 @@ process.on('message', (message: { [key: string]: any }) => { // body: JSON.stringify({ email: 'hiram@catni.cn', password: '994200' }), // }); // console.log(test.json()); - // const r4 = fetch('http://localhost:5173/api/v1/system/status', { toHex: true }); - // console.log('fetch-toHex', r4); - // const r5 = fetchPC('http://localhost:5173/api/v1/system/status'); - // console.log('fetchPC', r5); - // const r6 = postPC('https://www.sourcepower.top/api/v1/user/login', { - // withStatusCode: true, - // body: { email: 'hiram@catni.cn', password: '994200' }, - // }); - // console.log('postPC', r6); - // const r7 = fetchCookie('https://x.mbd.pub/api/new_count'); - // console.log('fetchCookie', r7); - // const r8 = convertBase64Image('https://static-o.oss-cn-shenzhen.aliyuncs.com/sukoutu/icon/sukoutuVip.png'); - // console.log('convertBase64Image', r8); - // const r9 = batchFetch([ - // { url: 'http://localhost:5173/api/v1/system/status' }, - // { - // url: 'http://localhost:5173/api/v1/system/status', - // }, - // ]); - // console.log('batchFetch', r9); + // let url = 'https://www.sourcepower.top/api/v1/system/info?' + Math.random(); // let t1 = new Date().getTime(); // syncFetch(url, {}); diff --git a/src/main/utils/hiker/syncFetch.ts b/src/main/utils/hiker/syncFetch.ts index 34720f9d0..840095fed 100644 --- a/src/main/utils/hiker/syncFetch.ts +++ b/src/main/utils/hiker/syncFetch.ts @@ -59,14 +59,6 @@ const toString = (val: any): string => { } }; -const serialize2dict = (headers: { [key: string]: any } = {}) => { - const headersDict = {}; - for (const [key, value] of headers.entries()) { - headersDict[key] = value.split(';'); - } - return headersDict; -}; - type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'HEAD'; interface RequestOptions { @@ -144,23 +136,22 @@ const fetch = (url: string, options: RequestOptions = {}) => { console.warn(`[request] url: ${url} | method: ${method} | options: ${JSON.stringify(config)}`); let res = syncFetch(url, config); - res.formatHeaders = serialize2dict(res.headers); res.getBody = function (encoding: BufferEncoding | undefined) { return encoding ? Buffer.from(res.buffer()).toString(encoding) : res.buffer(); }; if (options?.onlyHeaders) { - return toString(res.formatHeaders); + return res.headers.raw(); } if (options?.withHeaders) { - return toString({ headers: res.formatHeaders, body: res.getBody(charset) }); + return toString({ headers: res.headers.raw(), body: res.getBody(charset) }); } if (options?.withStatusCode) { - return toString({ headers: res.formatHeaders, body: res.getBody(charset), statusCode: res.status }); + return toString({ headers: res.headers.raw(), body: res.getBody(charset), statusCode: res.status }); } if (options?.toHex) { return toString({ - headers: res.formatHeaders, + headers: res.headers.raw(), body: Buffer.from(res.getBody()).toString('hex'), statusCode: res.status, }); @@ -179,11 +170,10 @@ const fetchCookie = (url: string, options: RequestOptions = {}) => { if (options?.withStatusCode) delete options.withStatusCode; if (options?.toHex) delete options.toHex; options = Object.assign(options, { onlyHeaders: true }); - let header = fetch(url, options) || '{}'; - const formatHeader = JSON.parse(header); - const setCk = Object.keys(formatHeader).find((it) => it.toLowerCase() === 'set-cookie'); - const cookie = setCk ? formatHeader[setCk] : ''; - return cookie; + const header = fetch(url, options) || {}; + const setCk = Object.keys(header).find((it) => it.toLowerCase() === 'set-cookie'); + const cookie = setCk ? header[setCk] : '[]'; + return toString(cookie); }; const post = (url: string, options: RequestOptions = {}) => { diff --git a/src/main/utils/hiker/syncRequest.ts b/src/main/utils/hiker/syncRequest.ts index bdefead72..dfb3d8d9f 100644 --- a/src/main/utils/hiker/syncRequest.ts +++ b/src/main/utils/hiker/syncRequest.ts @@ -60,8 +60,13 @@ const toString = (val: any): string => { const serialize2dict = (headers: { [key: string]: any } = {}) => { const headersDict = {}; + for (const [key, value] of Object.entries(headers)) { - headersDict[key] = value.split(';'); + if (key.toLowerCase() === 'set-cookie') { + headersDict[key] = Array.isArray(value) ? value : [value]; + } else { + headersDict[key] = [value]; + } } return headersDict; }; @@ -155,7 +160,7 @@ const fetch = (url: string, options: RequestOptions = {}) => { res.headers = serialize2dict(res.headers); if (options?.onlyHeaders) { - return toString(res.headers); + return res.headers; } if (options?.withHeaders) { return toString({ headers: res.headers, body: res.getBody(charset) }); @@ -184,11 +189,10 @@ const fetchCookie = (url: string, options: RequestOptions = {}) => { if (options?.withStatusCode) delete options.withStatusCode; if (options?.toHex) delete options.toHex; options = Object.assign(options, { onlyHeaders: true }); - let header = fetch(url, options) || '{}'; - const formatHeader = JSON.parse(header); - const setCk = Object.keys(formatHeader).find((it) => it.toLowerCase() === 'set-cookie'); - const cookie = setCk ? formatHeader[setCk] : ''; - return cookie; + const header = fetch(url, options) || '{}'; + const setCk = Object.keys(header).find((it) => it.toLowerCase() === 'set-cookie'); + const cookie = setCk ? header[setCk] : '[]'; + return toString(cookie); }; const post = (url: string, options: RequestOptions = {}) => { @@ -221,7 +225,7 @@ const convertBase64Image = (url: string, options: RequestOptions = {}) => { if (options?.toHex) delete options.toHex; if (options?.onlyHeaders) delete options.onlyHeaders; options = Object.assign(options, { toHex: true }); - const res = fetch(url, options) || '{"body":""}'; + const res = (fetch(url, options) as string) || '{"body":""}'; const formatRes = JSON.parse(res); const hexStr = formatRes.body; const base64String = Buffer.from(hexStr, 'hex').toString('base64'); From 4d4d7489ee0a34e37d41d566b90e97102f134896 Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Sat, 7 Dec 2024 00:41:17 +0800 Subject: [PATCH 012/175] [optimize] plugin --- .../server/routes/v1/plugin/utils/adapter.ts | 273 ++++++++---------- src/main/core/server/routes/v1/plugin/work.ts | 9 - .../lab/components/pluginCenter/index.vue | 2 +- 3 files changed, 123 insertions(+), 161 deletions(-) diff --git a/src/main/core/server/routes/v1/plugin/utils/adapter.ts b/src/main/core/server/routes/v1/plugin/utils/adapter.ts index 8e7ccf3f4..7ee1bb4d0 100644 --- a/src/main/core/server/routes/v1/plugin/utils/adapter.ts +++ b/src/main/core/server/routes/v1/plugin/utils/adapter.ts @@ -1,8 +1,7 @@ import npm from 'npm'; -import JSON5 from 'json5'; import { join, resolve } from 'path'; import workerpool from 'workerpool'; -import request from '@main/utils/request'; +import { JsonDB, Config } from 'node-json-db'; import logger from '@main/core/logger'; import { fileExist, fileState, readJson, readFile, saveJson, createDir } from '@main/utils/hiker/file'; @@ -28,6 +27,8 @@ class AdapterHandler { public pluginPath: string; // 插件信息配置文件路径 public pluginList: any[] = []; // 插件列表 public syncModules = new Map(); + public dbTable: string = '/plugin'; + public db: JsonDB; private pluginCaches: Record = {}; // 缓存插件版本 readonly registry: string; // 插件源地址 @@ -40,19 +41,19 @@ class AdapterHandler { this.baseDir = options.baseDir; this.pkgPath = join(this.baseDir, 'package.json'); this.pluginPath = join(this.baseDir, 'plugin.json'); - this.registry = options.registry || 'https://registry.npmmirror.com/'; + this.registry = options?.registry || 'https://registry.npmmirror.com/'; // 初始化插件目录 if (!fileExist(this.baseDir)) createDir(this.baseDir); - if (!fileExist(this.pkgPath) || fileState(this.pkgPath) !== 'file') - saveJson(this.pkgPath, { dependencies: {}, devDependencies: {} }); - if (!fileExist(this.pluginPath) || fileState(this.pluginPath) !== 'file') saveJson(this.pluginPath, []); + if (!fileExist(this.pkgPath) || fileState(this.pkgPath) !== 'file') saveJson(this.pkgPath, { dependencies: {} }); + if (!fileExist(this.pluginPath) || fileState(this.pluginPath) !== 'file') saveJson(this.pluginPath, { plugin: [] }); // 初始化插件列表 - this.pluginList = this.readJsonFile(this.pluginPath) || []; + this.db = new JsonDB(new Config(this.pluginPath, true, true, '/')); + // 启动插件程序 (async () => { - let plugins = this.fetchList(); + let plugins = await this.fetchList(); plugins = plugins.filter((p) => p.status === 'RUNNING'); try { await this.start(plugins); @@ -91,47 +92,24 @@ class AdapterHandler { } } - /** - * 深度克隆对象 - * @private - * @param {*} obj - * @returns {*} - */ - private deepClone(obj: T): T { - try { - return JSON5.parse(JSON5.stringify(obj)); - } catch (err: any) { - logger.error(`[plugin][deepClone][error] ${err.message}`); - throw new Error(`Failed to deepClone`); - } - } - - fetchList(plugins: any[] = []) { - const infoList: AdapterInfo[] = []; - const currentPlugins = this.pluginList; - const namePlugins = plugins.map((plugin) => plugin.name); - - for (let plugin of currentPlugins) { - const readmePath = join(this.baseDir, 'node_modules', plugin.name, 'README.md'); - if (fileExist(readmePath) && fileState(readmePath) === 'file') plugin.readme = readFile(readmePath); - const pluginInfo: AdapterInfo = { - type: plugin?.pluginType || 'system', - name: plugin?.name || '', - pluginName: plugin?.pluginName || '', - author: plugin?.author || '', - description: plugin?.description || '', - readme: plugin?.readme || '', - main: plugin?.main || '', - version: plugin?.version || '0.0.0', - logo: plugin?.logo || '', - status: plugin?.status || 'STOPED', - }; + async fetchList(plugins: any[] = []) { + let infoList: AdapterInfo[] = []; - if (plugins.length > 0) { - if (namePlugins.includes(plugin.name)) { + try { + if (plugins.length === 0) { + infoList = await this.db.getData(`${this.dbTable}`); + } else { + for (let plugin of plugins) { + const index = await this.db.getIndex(`${this.dbTable}`, plugin, 'name'); + if (index === -1) continue; + + const pluginInfo = await this.db.getData(`${this.dbTable}[${index}]`); infoList.push(pluginInfo); } - } else infoList.push(pluginInfo); + } + } catch (err: any) { + infoList = []; + logger.error(`[plugin][fetchList][error] ${err.message}`); } return infoList; @@ -143,13 +121,13 @@ class AdapterHandler { * @memberof PluginHandler */ async info(plugins: any[]) { - let infoList: AdapterInfo[] = []; try { - infoList = this.fetchList(plugins); + const res = await this.fetchList([...new Set(plugins.map((p) => p.name))]); + return res; } catch (err: any) { logger.error(`[plugin][getAdapterInfo][error] ${err.message}`); } finally { - return infoList; + return []; } } @@ -159,36 +137,61 @@ class AdapterHandler { * @memberof AdapterHandler */ async install(plugins: any[]) { - const currentPlugins = this.deepClone(this.pluginList); + plugins = plugins.map((plugin) => { + const updatedPlugin = { ...plugin }; + updatedPlugin.pluginName = plugin.name; + return updatedPlugin; + }); for (let plugin of plugins) { try { - const cmd = plugin.isDev ? 'link' : 'install'; - const module = resolve(this.baseDir, 'modules', plugin.name); + // 1.默认参数 + const pkgInfo = this.readJsonFile(join(this.baseDir, 'modules', plugin.pluginName, 'package.json')); + if (!pkgInfo) continue; + plugin.name = pkgInfo.name; + + // 2.停止插件 + const index = await this.db.getIndex(`${this.dbTable}`, plugin.name, 'name'); + if (index > -1) await this.stop([plugin]); + + // 3.安装插件 + const module = resolve(this.baseDir, 'modules', plugin.pluginName); if (!fileExist(module) || fileState(module) !== 'dir') continue; + const cmd = plugin.isDev ? 'link' : 'install'; await this.execCommand(cmd, [module]); - const pkg = this.readJsonFile(join(this.baseDir, 'modules', plugin.name, 'package.json')); - let info; + // 4.插件参数 if (plugin.isDev) { - const pluginPath = resolve(this.baseDir, 'node_modules', pkg.name); + const pluginPath = join(this.baseDir, 'node_modules', plugin.name); const pluginInfo = this.readJsonFile(join(pluginPath, 'package.json')); - info = { ...plugin, ...pluginInfo, pluginName: pkg.name }; + const readmePath = join(this.baseDir, 'node_modules', plugin.name, 'README.md'); + if (fileExist(readmePath) && fileState(readmePath) === 'file') plugin.readme = readFile(readmePath); + + plugin = { ...plugin, ...pluginInfo }; } - const pluginIndex1 = plugins.findIndex((p) => p.name === plugin.name); - plugins[pluginIndex1].name = pkg.name; - const pluginIndex2 = currentPlugins.findIndex((p) => p.name === pkg.name); - if (pluginIndex2 === -1) currentPlugins.unshift(info); + const data = { + type: plugin?.pluginType || 'system', + name: plugin?.name || '', + pluginName: plugin?.pluginName || '', + author: plugin?.author || '', + description: plugin?.description || '', + readme: plugin?.readme || '', + main: plugin?.main || '', + version: plugin?.version || '0.0.0', + logo: plugin?.logo || '', + status: plugin?.status || 'STOPED', + }; + + if (index > -1) await this.db.push(`${this.dbTable}[${index}]`, data, true); + else await this.db.push(`${this.dbTable}[]`, data); } catch (err: any) { logger.error(`[plugin][install][error] ${err.message}`); } } - this.pluginList = currentPlugins; - this.writeJsonFile(this.pluginPath, this.pluginList); - - return this.fetchList(plugins); + const res = await this.fetchList([...new Set(plugins.map((p) => p.name))]); + return res; } /** @@ -197,96 +200,73 @@ class AdapterHandler { * @memberof AdapterHandler */ async uninstall(plugins: any[]) { - const currentPlugins = this.deepClone(this.pluginList); - for (const plugin of plugins) { try { - const cmd = plugin.isDev ? 'unlink' : 'uninstall'; - const module = join(this.baseDir, 'node_modules', plugin.name); - if (!fileExist(module) || fileState(module) !== 'dir') continue; + const index = await this.db.getIndex(`${this.dbTable}`, plugin.name, 'name'); + if (index === -1) continue; + // 停止插件 await this.stop([plugin]); + + // 卸载插件 + const module = join(this.baseDir, 'node_modules', plugin.name); + if (!fileExist(module) || fileState(module) !== 'dir') continue; + const cmd = plugin.isDev ? 'unlink' : 'uninstall'; await this.execCommand(cmd, [module]); - const index = currentPlugins.findIndex((p) => p.name === plugin.name); - if (index > -1) currentPlugins.splice(index, 1); + // 插件参数 + await this.db.delete(`${this.dbTable}[${index}]`); } catch (err: any) { logger.error(`[plugin][uninstall][error] ${err.message}`); } } - this.pluginList = currentPlugins; - this.writeJsonFile(this.pluginPath, this.pluginList); - - return this.fetchList(plugins); + const res = await this.fetchList([...new Set(plugins.map((p) => p.name))]); + return res; } /** - * 更新指定插件 + * 升级插件 * @param plugins 插件名称 * @memberof AdapterHandler */ async update(plugins: any[]) { - const currentPlugins = this.deepClone(this.pluginList); - for (const plugin of plugins) { - const module = join(this.baseDir, 'node_modules', plugin.name); - if (!fileExist(module) || fileState(module) !== 'dir') continue; - await this.execCommand('update', [module]); + try { + const module = join(this.baseDir, 'node_modules', plugin.name); + if (!fileExist(module) || fileState(module) !== 'dir') continue; - const pluginPath = resolve(this.baseDir, 'node_modules', plugin.name); - const pluginInfo = this.readJsonFile(join(pluginPath, 'package.json')); - const pluginIndex = currentPlugins.findIndex((p) => `${p.name}` === `${plugin.name}`); - if (pluginIndex !== -1) currentPlugins[pluginIndex].version = pluginInfo.version || '0.0.0'; - } + // await this.execCommand('update', [module]); - this.pluginList = currentPlugins; - this.writeJsonFile(this.pluginPath, this.pluginList); + const index = await this.db.getIndex(`${this.dbTable}`, plugin.name, 'name'); + if (index === -1) continue; + const pluginInfo = await this.db.getData(`${this.dbTable}[${index}]`); - return this.fetchList(plugins); - } + const pkgPath = join(this.baseDir, 'node_modules', plugin.name); + const pkgInfo = this.readJsonFile(join(pkgPath, 'package.json')); + if (!pkgInfo) continue; - /** - * 升级插件 - * @param plugins - * @memberof AdapterHandler - */ - async upgrade(plugins: any[]) { - for (let plugin of plugins) { - try { - const pkg = await this.readJsonFile(join(this.baseDir, 'package.json')); - if (Object.keys(pkg.dependencies).length === 0 || !pkg.dependencies?.[plugin.name]) break; - const installedVersion = pkg.dependencies[plugin.name].replace('^', ''); - let latestVersion = this.pluginCaches[plugin.name]; - if (!latestVersion) { - const registryUrl = `${this.registry}${plugin.name}`; - const data = await request({ - method: 'GET', - url: registryUrl, - timeout: 2000, - }); - latestVersion = data['dist-tags'].latest; - this.pluginCaches[plugin.name] = latestVersion; - } - if (latestVersion > installedVersion) { - await this.install(plugin); + if (index > -1 && pkgInfo) { + const latestVersion = pkgInfo?.version || '0.0.0'; + const installedVersion = pluginInfo?.version || '0.0.0'; + if (latestVersion > installedVersion) await this.install([plugin]); } } catch (err: any) { - logger.error(`[plugin][upgrade][error] ${err.message}`); + logger.error(`[plugin][update][error] ${err.message}`); } } - return this.fetchList(plugins); + const res = await this.fetchList([...new Set(plugins.map((p) => p.name))]); + return res; } /** * 列出所有已安装插件 * @memberof AdapterHandler */ - list() { + async list() { try { - if (!this.pluginList.length) this.pluginList = this.readJsonFile(this.pluginPath) || []; - return this.fetchList(); + return await this.fetchList(); } catch (err: any) { logger.error(`[plugin][list][error] ${err.message}`); return []; @@ -294,88 +274,79 @@ class AdapterHandler { } async start(plugins: any[]) { - const currentPlugins = this.deepClone(this.pluginList); - for (const plugin of plugins) { const module = join(this.baseDir, 'node_modules', plugin.name); if (!fileExist(module) || fileState(module) !== 'dir') continue; - const pluginIndex = currentPlugins.findIndex((p) => `${p.name}` === `${plugin.name}`); - if (pluginIndex === -1) continue; - - const pluginInfo = currentPlugins[pluginIndex]; + const index = await this.db.getIndex(`${this.dbTable}`, plugin.name, 'name'); + if (index === -1) continue; + const pluginInfo = await this.db.getData(`${this.dbTable}[${index}]`); if (pluginInfo?.main && pluginInfo?.main.endsWith('.js')) { + let status = pluginInfo?.status || 'STOPED'; try { let pool = this.syncModules.get(`${plugin.name}`); if (!pool) { pool = workerpool.pool(); this.syncModules.set(`${plugin.name}`, pool); } + try { let entryModule = resolve(module, pluginInfo.main); if (process.platform === 'win32') entryModule = `file:///${entryModule}`; const res = await pool.exec(runModule, [entryModule, 'start']); - if (res.code === 0) currentPlugins[pluginIndex].status = 'RUNNING'; + if (res.code === 0) status = 'RUNNING'; } catch (err: any) { - currentPlugins[pluginIndex].status = 'STOPED'; + status = 'STOPED'; this.syncModules.delete(`${plugin.name}`); await pool.terminate(); logger.error(`[plugin][run][error] ${err.message}`); } } catch (err: any) { logger.error(`[plugin][run][pool] ${err.message}`); + } finally { + await this.db.push(`${this.dbTable}[${index}]`, Object.assign({}, pluginInfo, { status }), true); } } } - this.pluginList = currentPlugins; - this.writeJsonFile(this.pluginPath, this.pluginList); - - return this.fetchList(plugins); + const res = await this.fetchList([...new Set(plugins.map((p) => p.name))]); + return res; } async stop(plugins: any[]) { - const currentPlugins = this.deepClone(this.pluginList); - for (const plugin of plugins) { const module = join(this.baseDir, 'node_modules', plugin.name); if (!fileExist(module) || fileState(module) !== 'dir') continue; - const pluginIndex = currentPlugins.findIndex((p) => `${p.name}` === `${plugin.name}`); - if (pluginIndex === -1) continue; - - const pluginInfo = currentPlugins[pluginIndex]; + const index = await this.db.getIndex(`${this.dbTable}`, plugin.name, 'name'); + if (index === -1) continue; + const pluginInfo = await this.db.getData(`${this.dbTable}[${index}]`); if (pluginInfo?.main && pluginInfo?.main.endsWith('.js')) { + let status = pluginInfo?.status || 'STOPED'; try { let pool = this.syncModules.get(`${plugin.name}`); try { - if (pool) { - // let entryModule = resolve(module, pluginInfo.main); - // if (process.platform === 'win32') entryModule = `file:///${entryModule}`; - // const res = await pool.exec(runModule, [entryModule, 'stop']); - // if (res.code === 0) currentPlugins[pluginIndex].status = 'STOPED'; - await pool.terminate(); - this.syncModules.delete(`${plugin.name}`); - currentPlugins[pluginIndex].status = 'STOPED'; - } + status = 'STOPED'; + this.syncModules.delete(`${plugin.name}`); + if (pool) await pool.terminate(); } catch (err: any) { - currentPlugins[pluginIndex].status = 'STOPED'; + status = 'STOPED'; this.syncModules.delete(`${plugin.name}`); if (pool) await pool.terminate(); logger.error(`[plugin][stop][error] ${err.message}`); } } catch (err: any) { logger.error(`[plugin][stop][pool] ${err.message}`); + } finally { + await this.db.push(`${this.dbTable}[${index}]`, Object.assign({}, pluginInfo, { status }), true); } } } - this.pluginList = currentPlugins; - this.writeJsonFile(this.pluginPath, this.pluginList); - - return this.fetchList(plugins); + const res = await this.fetchList([...new Set(plugins.map((p) => p.name))]); + return res; } /** diff --git a/src/main/core/server/routes/v1/plugin/work.ts b/src/main/core/server/routes/v1/plugin/work.ts index 1ba31be98..a43495e12 100644 --- a/src/main/core/server/routes/v1/plugin/work.ts +++ b/src/main/core/server/routes/v1/plugin/work.ts @@ -53,15 +53,6 @@ const api: FastifyPluginAsync = async (fastify): Promise => { data: res, }; }); - fastify.post(`/${API_PREFIX}/upgrade`, async (req: FastifyRequest<{ Body: any[] }>) => { - const plugins = req.body; - const res = await pluginAdapter.upgrade(plugins); - return { - code: 0, - msg: 'ok', - data: res, - }; - }); fastify.post(`/${API_PREFIX}/start`, async (req: FastifyRequest<{ Body: any[] }>) => { const plugins = req.body; const res = await pluginAdapter.start(plugins); diff --git a/src/renderer/src/pages/lab/components/pluginCenter/index.vue b/src/renderer/src/pages/lab/components/pluginCenter/index.vue index 6c1d35aaf..eb7166760 100644 --- a/src/renderer/src/pages/lab/components/pluginCenter/index.vue +++ b/src/renderer/src/pages/lab/components/pluginCenter/index.vue @@ -169,7 +169,7 @@ const handleControl = async (type: string, name: string) => { } else { const updateIndex = pluginList.value.findIndex(p => p.name === name); if (updateIndex > -1) { - pluginInfo.value[updateIndex] = updatedPluginList[0]; + pluginList.value[updateIndex] = updatedPluginList[0]; pluginInfo.value = updatedPluginList[0]; } } From dad14d36e87ad946e131694ad0fc70cd21055a27 Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Sat, 7 Dec 2024 17:30:07 +0800 Subject: [PATCH 013/175] [bug] fix headers and adRemove both data not catch --- .../core/server/routes/v1/lab/ad/index.ts | 29 ++++++++++++++----- src/main/index.ts | 4 +-- src/renderer/src/utils/common/film.ts | 5 +++- 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/main/core/server/routes/v1/lab/ad/index.ts b/src/main/core/server/routes/v1/lab/ad/index.ts index b25b1ad80..427de8bdf 100644 --- a/src/main/core/server/routes/v1/lab/ad/index.ts +++ b/src/main/core/server/routes/v1/lab/ad/index.ts @@ -1,4 +1,5 @@ import { FastifyPluginAsync, FastifyRequest, FastifyReply } from 'fastify'; +import { completeRequest } from '@main/utils/request'; import { fixAdM3u8Ai } from './utils'; const API_PREFIX = 'api/v1/lab/ad'; @@ -7,17 +8,31 @@ const api: FastifyPluginAsync = async (fastify): Promise => { fastify.get( `/${API_PREFIX}`, async (req: FastifyRequest<{ Querystring: { [key: string]: string } }>, reply: FastifyReply) => { - let { url, type, headers = '{}' } = req.query; - if (!type || type !== 'm3u8' || !url || !url.startsWith('http')) { - reply.code(500).send({ code: -1, msg: 'Invalid type provided or url' }); + const m3u8ContentType = ['application/vnd.apple.mpegurl', 'application/x-mpegURL', 'application/octet-stream']; + + let { url, headers = '{}' } = req.query; + + if (!url || !url.startsWith('http')) { + reply.code(500).send({ code: -1, msg: 'Invalid url provided' }); + return; } else { url = decodeURI(url); headers = JSON.parse(headers); - const content = (await fixAdM3u8Ai.v2(url, headers as any)) || ''; - if (content.includes('.ts')) { - reply.code(200).header('Content-Type', 'application/vnd.apple.mpegurl').send(content); + + const res = await completeRequest({ url, method: 'HEAD', headers } as any); + + if (res?.headers?.['content-type'] && m3u8ContentType.includes(res.headers['content-type'])) { + const content = (await fixAdM3u8Ai.v2(url, headers as any)) || ''; + if (content.includes('.ts')) { + reply.code(200).header('Content-Type', 'application/vnd.apple.mpegurl').send(content); + return; + } else { + reply.redirect(url); + return; + } } else { - reply.redirect(url); + reply.code(500).send({ code: -1, msg: 'Invalid url type provided' }); + return; } } }, diff --git a/src/main/index.ts b/src/main/index.ts index 63ab3c5b8..64da43d55 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -81,8 +81,8 @@ const ready = () => { return; } - // 不处理本地地址 - if (isLocalhostRef(url)) { + // 不处理本地地址 但lab/ad除外 + if (isLocalhostRef(url) && !`${url}`.includes('lab/ad')) { callback({}); return; } diff --git a/src/renderer/src/utils/common/film.ts b/src/renderer/src/utils/common/film.ts index e977704ea..10e279162 100644 --- a/src/renderer/src/utils/common/film.ts +++ b/src/renderer/src/utils/common/film.ts @@ -238,7 +238,10 @@ const playHelper = async ( } finally { if (adFlag && data.url && !data.url.startsWith('http://127.0.0.1') && data.mediaType.includes('m3u8')) { console.log('[film_common][removeAd][start]开始移除广告流程'); - data.url = `http://127.0.0.1:9978/api/v1/lab/ad?url=${encodeURI(data.url)}&type=m3u8&headers=${JSON.stringify(data.headers || {})}`; + // data.url = `http://127.0.0.1:9978/api/v1/lab/ad?url=${encodeURI(data.url)}&headers=${JSON.stringify(data.headers || {})}`; + const url = encodeURI(data.url); + const headers = JSON.stringify(data.headers || {}); + data.url = `http://127.0.0.1:9978/api/v1/lab/ad?url=${url}&headers=${headers}`; console.log('[film_common][removeAd][end]结束移除广告流程'); } console.log(`[film_common][playHelper][return]`, data); From c9bab1e86f8a1d3378901ab5db996518bc7699a0 Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Sat, 7 Dec 2024 17:30:33 +0800 Subject: [PATCH 014/175] [bug] fix search when one site in group --- src/renderer/src/pages/film/index.vue | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/renderer/src/pages/film/index.vue b/src/renderer/src/pages/film/index.vue index 303808f13..2631c8d36 100644 --- a/src/renderer/src/pages/film/index.vue +++ b/src/renderer/src/pages/film/index.vue @@ -404,10 +404,11 @@ const getSearchList = async () => { }; // 2. 请求数据 - const res = await fetchCmsSearch({ sourceId: currentSite.id, wd: searchTxt.value, page: pg === 1 ? '' : pg }); - const resultSearch = res?.list; + const res = await fetchCmsSearch({ sourceId: currentSite.id, wd: searchTxt.value, page: pg === 1 ? null : pg }); + const reSearch = res?.list; - if (!Array.isArray(resultSearch) || resultSearch.length === 0) { + // 2.1 数据为空 + if (!Array.isArray(reSearch) || reSearch.length === 0) { console.log('[film][search] empty search results'); // 聚搜过程中,如果某个站搜不出来结果,返回1让其他站继续搜索。单搜就返回0终止搜索 if (isLastSite) { @@ -420,26 +421,26 @@ const getSearchList = async () => { return length; } - let resultDetail = filterStatus ? resultSearch.filter((item) => item?.vod_name.includes(searchTxt.value)) : resultSearch; + // 2.2 数据去重 + let resultDetail = filterStatus ? reSearch.filter((item) => item?.vod_name.includes(searchTxt.value)) : reSearch; let newFilms = differenceBy(resultDetail, filmData.value.list, 'vod_id'); // 去重 if (newFilms.length > 0) { newFilms = resultDetail.map(item => ({ ...item, relateSite: currentSite })); filmData.value.list.push(...newFilms); - }; - // 最后一个站点,并且是聚搜,参与搜索的站点数大于1的情况,正常搜完一个就结束。只有一个站点正常搜索还要继续搜 - if (isLastSite) { - length = 0; + length = newFilms.length; + pagination.value.pageIndex++; + return length; } else { - if (newFilms.length > 0) { - length = newFilms.length; - pagination.value.pageIndex++; + if (isLastSite) { + length = 0; } else { length = 1; searchCurrentSite.value = searchGroup[index + 1]; - pagination.value.pageIndex = 1; }; - }; + pagination.value.pageIndex = 1; + return length; + } } catch (err) { console.log(err) // 聚搜的某一个站点发生错误,返回1让其他站点能继续搜索。只有一个站点进行搜索的时候发生错误就返回0终止搜索 From 2b21d2412fb50117191a306adc2db07dcd7558e6 Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Sun, 8 Dec 2024 01:32:59 +0800 Subject: [PATCH 015/175] [change] update drpy3 to 3.9.51beta6 20241126 --- .../routes/v1/site/cms/adapter/drpy/drpy3.ts | 56 +++++++++---------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/src/main/core/server/routes/v1/site/cms/adapter/drpy/drpy3.ts b/src/main/core/server/routes/v1/site/cms/adapter/drpy/drpy3.ts index f77b65852..d51272e7b 100644 --- a/src/main/core/server/routes/v1/site/cms/adapter/drpy/drpy3.ts +++ b/src/main/core/server/routes/v1/site/cms/adapter/drpy/drpy3.ts @@ -84,8 +84,16 @@ cheerio.jinja2 = function (template, obj) { declare let pdfl: () => void; // add-ts-mark let vercode = typeof pdfl === 'function' ? 'drpy2.1' : 'drpy2'; -const VERSION = vercode + ' 3.9.51beta5 20241104'; +const VERSION = vercode + '3.9.51beta6 20241126'; const UpdateInfo = [ + { + date: '20241126', + title: 'drpy更新,优化去广告算法', + version: '3.9.51beta6 20241126', + msg: ` +1. 更新龙头大佬提供的去广告算法 + `, + }, { date: '20241104', title: 'drpy更新,增加新特性', @@ -1267,7 +1275,11 @@ function fixAdM3u8(m3u8_text, m3u8_url, ad_remove) { */ function fixAdM3u8Ai(m3u8_url, headers) { let ts = new Date().getTime(); - let option = headers ? { headers: headers } : {}; + let option = headers + ? { + headers: headers, + } + : {}; function b(s1, s2) { let i = 0; @@ -1284,65 +1296,54 @@ function fixAdM3u8Ai(m3u8_url, headers) { return str.split('').reverse().join(''); } - //log('播放的地址:' + m3u8_url); let m3u8 = request(m3u8_url, option); - //log('m3u8处理前:' + m3u8); m3u8 = m3u8 .trim() .split('\n') .map((it) => (it.startsWith('#') ? it : urljoin(m3u8_url, it))) .join('\n'); - //log('m3u8处理后:============:' + m3u8); - // 获取嵌套m3u8地址 - m3u8 = m3u8.replace(/\n\n/gi, '\n'); //删除多余的换行符 + m3u8 = m3u8.replace(/\n\n/gi, '\n'); let last_url = m3u8.split('\n').slice(-1)[0]; if (last_url.length < 5) { last_url = m3u8.split('\n').slice(-2)[0]; } - if (last_url.includes('.m3u8') && last_url !== m3u8_url) { m3u8_url = urljoin2(m3u8_url, last_url); log('嵌套的m3u8_url:' + m3u8_url); m3u8 = request(m3u8_url, option); } - //log('----处理有广告的地址----'); let s = m3u8 .trim() .split('\n') .filter((it) => it.trim()) .join('\n'); let ss = s.split('\n'); - //找出第一条播放地址 - //let firststr = ss.find(x => !x.startsWith('#')); let firststr = ''; - let maxl = 0; //最大相同字符 + let maxl = 0; let kk = 0; - let kkk = 2; + let kkk1 = 1; + let kkk2 = 0; let secondstr = ''; for (let i = 0; i < ss.length; i++) { let s = ss[i]; if (!s.startsWith('#')) { if (kk == 0) firststr = s; - if (kk == 1) maxl = b(firststr, s); - if (kk > 1) { - if (maxl > b(firststr, s)) { + if (kk > 0) { + if (maxl > b(firststr, s) + 1) { if (secondstr.length < 5) secondstr = s; - kkk = kkk + 2; + kkk2++; } else { maxl = b(firststr, s); - kkk++; + kkk1++; } } kk++; - if (kk >= 20) break; + if (kk >= 30) break; } } - if (kkk > 30) firststr = secondstr; + if (kkk2 > kkk1) firststr = secondstr; let firststrlen = firststr.length; - //log('字符串长度:' + firststrlen); - let ml = Math.round(ss.length / 2).toString().length; //取数据的长度的位数 - //log('数据条数的长度:' + ml); - //找出最后一条播放地址 + let ml = Math.round(ss.length / 2).toString().length; let maxc = 0; let laststr = ss.toReversed().find((x) => { if (!x.startsWith('#')) { @@ -1356,13 +1357,12 @@ function fixAdM3u8Ai(m3u8_url, headers) { return false; }); log('最后一条切片:' + laststr); - //log('最小相同字符长度:' + maxl); - let ad_urls: any[] = []; // add-ts-mark + let ad_urls = []; for (let i = 0; i < ss.length; i++) { let s = ss[i]; if (!s.startsWith('#')) { if (b(firststr, s) < maxl) { - ad_urls.push(s); // 广告地址加入列表 + ad_urls.push(s); ss.splice(i - 1, 2); i = i - 2; } else { @@ -1376,8 +1376,8 @@ function fixAdM3u8Ai(m3u8_url, headers) { log('----广告地址----'); log(ad_urls); m3u8 = ss.join('\n'); - //log('处理完成'); log('处理耗时:' + (new Date().getTime() - ts).toString()); + log(m3u8); return m3u8; } From 33a06f4323c59fcbb745139aff47267f5bac9ca7 Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Sun, 8 Dec 2024 01:36:45 +0800 Subject: [PATCH 016/175] [bug] fix detail vod_content empty not trim method --- src/main/core/server/routes/v1/site/cms/adapter/drpyjs0.ts | 2 +- src/main/core/server/routes/v1/site/cms/adapter/t0Xml.ts | 2 +- src/main/core/server/routes/v1/site/cms/adapter/t1Json.ts | 2 +- src/main/core/server/routes/v1/site/cms/adapter/t4Hipy.ts | 5 +++-- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/core/server/routes/v1/site/cms/adapter/drpyjs0.ts b/src/main/core/server/routes/v1/site/cms/adapter/drpyjs0.ts index 1fb4a6089..2ef416d6b 100644 --- a/src/main/core/server/routes/v1/site/cms/adapter/drpyjs0.ts +++ b/src/main/core/server/routes/v1/site/cms/adapter/drpyjs0.ts @@ -121,7 +121,7 @@ class DrpyJs0Adapter { vod_remarks: vod.vod_remarks, vod_actor: vod.vod_actor, vod_director: vod.vod_director, - vod_content: vod.vod_content.trim(), + vod_content: vod.vod_content?.trim(), vod_play_from: vod.vod_play_from, vod_play_url: vod.vod_play_url, }); diff --git a/src/main/core/server/routes/v1/site/cms/adapter/t0Xml.ts b/src/main/core/server/routes/v1/site/cms/adapter/t0Xml.ts index fd917764e..f7d0292d2 100644 --- a/src/main/core/server/routes/v1/site/cms/adapter/t0Xml.ts +++ b/src/main/core/server/routes/v1/site/cms/adapter/t0Xml.ts @@ -170,7 +170,7 @@ class T0Adapter { vod_remarks: vod.note, vod_actor: vod.actor, vod_director: vod.director, - vod_content: vod.des.trim(), + vod_content: vod.des?.trim(), vod_play_from: vodPlayFrom(dldd), vod_play_url: vodPlayUrl(dldd), }); diff --git a/src/main/core/server/routes/v1/site/cms/adapter/t1Json.ts b/src/main/core/server/routes/v1/site/cms/adapter/t1Json.ts index 6a63f3ccd..ec9b2d3c4 100644 --- a/src/main/core/server/routes/v1/site/cms/adapter/t1Json.ts +++ b/src/main/core/server/routes/v1/site/cms/adapter/t1Json.ts @@ -128,7 +128,7 @@ class T1Adapter { vod_remarks: vod.vod_remarks, vod_actor: vod.vod_actor, vod_director: vod.vod_director, - vod_content: vod.vod_content.trim(), + vod_content: vod.vod_content?.trim(), vod_play_from: vod.vod_play_from, vod_play_url: vod.vod_play_url, }); diff --git a/src/main/core/server/routes/v1/site/cms/adapter/t4Hipy.ts b/src/main/core/server/routes/v1/site/cms/adapter/t4Hipy.ts index 7b04f973c..5001d9b92 100644 --- a/src/main/core/server/routes/v1/site/cms/adapter/t4Hipy.ts +++ b/src/main/core/server/routes/v1/site/cms/adapter/t4Hipy.ts @@ -83,7 +83,7 @@ class HipyT4Adapter { } async category(doc: { [key: string]: string }) { const { page, tid, f = '{}' } = doc; - console.log(page, tid, f); + const response = await request({ url: this.api, method: 'GET', @@ -122,6 +122,7 @@ class HipyT4Adapter { extend: this.ext, }, }); + const videos: any[] = []; for (const vod of response.list) { videos.push({ @@ -134,7 +135,7 @@ class HipyT4Adapter { vod_remarks: vod.vod_remarks, vod_actor: vod.vod_actor, vod_director: vod.vod_director, - vod_content: vod.vod_content.trim(), + vod_content: vod.vod_content?.trim(), vod_play_from: vod.vod_play_from, vod_play_url: vod.vod_play_url, }); From dff2fc55aa363e83fd75e3ac66c876b1deede17c Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Sun, 8 Dec 2024 01:37:47 +0800 Subject: [PATCH 017/175] [optimize] plugin --- .../routes/v1/plugin/utils/adapter_install.ts | 412 ++++++++++++++++++ .../utils/{adapter.ts => adapter_link.ts} | 1 + src/main/core/server/routes/v1/plugin/work.ts | 2 +- .../lab/components/pluginCenter/index.vue | 5 +- 4 files changed, 416 insertions(+), 4 deletions(-) create mode 100644 src/main/core/server/routes/v1/plugin/utils/adapter_install.ts rename src/main/core/server/routes/v1/plugin/utils/{adapter.ts => adapter_link.ts} (99%) diff --git a/src/main/core/server/routes/v1/plugin/utils/adapter_install.ts b/src/main/core/server/routes/v1/plugin/utils/adapter_install.ts new file mode 100644 index 000000000..2489f7d63 --- /dev/null +++ b/src/main/core/server/routes/v1/plugin/utils/adapter_install.ts @@ -0,0 +1,412 @@ +import npm from 'npm'; +import { join, resolve } from 'path'; +import workerpool from 'workerpool'; +import { JsonDB, Config } from 'node-json-db'; +import logger from '@main/core/logger'; +import { fileExist, fileState, readJson, readFile, saveJson, createDir } from '@main/utils/hiker/file'; + +import { AdapterHandlerOptions, AdapterInfo } from './types'; + +const runModule = async (modulePath: string, method: 'stop' | 'start') => { + try { + const entry = await import(modulePath); + const res = await entry?.[method](); + return { code: 0, msg: 'ok', data: res }; + } catch (err: any) { + throw err; + } +}; + +/** + * 系统插件管理器 + * @class AdapterHandler + */ +class AdapterHandler { + public baseDir: string; // 插件安装地址 + public pkgPath: string; // pkg配置文件路径 + public pluginPath: string; // 插件信息配置文件路径 + public pluginList: any[] = []; // 插件列表 + public syncModules = new Map(); + public dbTable: string = '/plugin'; + public db: JsonDB; + readonly registry: string; // 插件源地址 + + /** + * Creates an instance of AdapterHandler. + * @param {AdapterHandlerOptions} options + * @memberof AdapterHandler + */ + constructor(options: AdapterHandlerOptions) { + this.baseDir = options.baseDir; + this.pkgPath = join(this.baseDir, 'package.json'); + this.pluginPath = join(this.baseDir, 'plugin.json'); + this.registry = options?.registry || 'https://registry.npmmirror.com/'; + + // 初始化插件目录 + if (!fileExist(this.baseDir)) createDir(this.baseDir); + if (!fileExist(this.pluginPath) || fileState(this.pluginPath) !== 'file') saveJson(this.pluginPath, { plugin: [] }); + + // 初始化插件列表 + this.db = new JsonDB(new Config(this.pluginPath, true, true, '/')); + + // 启动插件程序 + (async () => { + let plugins = await this.fetchList(); + plugins = plugins.filter((p) => p.status === 'RUNNING'); + try { + await this.start([...new Set(plugins.map((p) => p.name))]); + } catch {} + })(); + } + + /** + * 读取JSON文件 + * @private + * @param {string} filePath 文件路径 + * @returns {json} JSON对象 + */ + private readJsonFile(filePath: string) { + try { + const content = readJson(filePath); + return content; + } catch (err: any) { + logger.error(`[plugin][readJsonFile][error] ${err.message}`); + throw new Error(`Failed to read JSON file: ${filePath}`); + } + } + + async fetchList(plugins: any[] = []) { + let infoList: AdapterInfo[] = []; + + try { + if (plugins.length === 0) { + infoList = await this.db.getData(`${this.dbTable}`); + } else { + for (let plugin of plugins) { + const index = await this.db.getIndex(`${this.dbTable}`, plugin, 'name'); + if (index === -1) continue; + + const pluginInfo = await this.db.getData(`${this.dbTable}[${index}]`); + infoList.push(pluginInfo); + } + } + } catch (err: any) { + infoList = []; + logger.error(`[plugin][fetchList][error] ${err.message}`); + } + + return infoList; + } + + /** + * 获取插件信息 + * @param {plugins} + * @memberof PluginHandler + */ + async info(plugins: any[]) { + plugins = [...new Set(plugins)]; + + try { + const res = await this.fetchList(plugins); + return res; + } catch (err: any) { + logger.error(`[plugin][getAdapterInfo][error] ${err.message}`); + } finally { + return []; + } + } + + /** + * 安装插件 + * @param plugins + * @memberof AdapterHandler + */ + async install(plugins: any[]) { + plugins = [...new Set(plugins)]; + + for (const plugin of plugins) { + let info: { [key: string]: string } = { name: plugin, pluginName: plugin }; + + try { + // 1.判断项目存在 + const pluginBasePath = join(this.baseDir, plugin); + if (!fileExist(pluginBasePath) || fileState(pluginBasePath) !== 'dir') continue; + + // 2.设置默认参数 + const pkgPath = join(pluginBasePath, 'package.json'); + if (!fileExist(pkgPath) || fileState(pkgPath) !== 'file') continue; + const pkgInfo = this.readJsonFile(pkgPath); + if (!pkgInfo || typeof pkgInfo !== 'object') continue; + const readmePath = join(pluginBasePath, 'README.md'); + info.readme = `### empty`; + if (fileExist(readmePath) && fileState(readmePath) === 'file') info.readme = readFile(readmePath); + info = { ...pkgInfo, ...info }; + + // 2.停止插件 + const index = await this.db.getIndex(`${this.dbTable}`, info.name, 'name'); + if (index > -1) await this.stop([plugin]); + + // 3.安装插件 + await this.execCommand('install', { prefix: pluginBasePath }, []); + + // 4.插件参数 + const data = { + type: info?.pluginType || 'system', + name: info?.name || '', + pluginName: info?.pluginName || '', + author: info?.author || '', + description: info?.description || '', + readme: info?.readme || `### empty`, + main: info?.main || '', + version: info?.version || '0.0.0', + logo: info?.logo || '', + status: info?.status || 'STOPED', + }; + + if (index > -1) await this.db.push(`${this.dbTable}[${index}]`, data, true); + else await this.db.push(`${this.dbTable}[]`, data); + } catch (err: any) { + logger.error(`[plugin][install][error] ${err.message}`); + } + } + + const res = await this.fetchList(plugins); + return res; + } + + /** + * 卸载插件 + * @param plugins + * @memberof AdapterHandler + */ + async uninstall(plugins: any[]) { + plugins = [...new Set(plugins)]; + + for (const plugin of plugins) { + try { + // 1.判断项目存在 + const pluginBasePath = join(this.baseDir, plugin); + if (!fileExist(pluginBasePath) || fileState(pluginBasePath) !== 'dir') continue; + + // 2.停止插件 + const index = await this.db.getIndex(`${this.dbTable}`, plugin, 'name'); + if (index > -1) await this.stop([plugin]); + else continue; + + // 3.卸载插件 + await this.execCommand('uninstall', { prefix: pluginBasePath }, []); + + // 4.插件参数 + await this.db.delete(`${this.dbTable}[${index}]`); + } catch (err: any) { + logger.error(`[plugin][uninstall][error] ${err.message}`); + } + } + + const res = await this.fetchList(plugins); + return res; + } + + /** + * 升级插件 + * @param plugins 插件名称 + * @memberof AdapterHandler + */ + async update(plugins: any[]) { + plugins = [...new Set(plugins)]; + + for (const plugin of plugins) { + try { + // 1.判断项目存在 + const pluginBasePath = join(this.baseDir, plugin); + if (!fileExist(pluginBasePath) || fileState(pluginBasePath) !== 'dir') continue; + + // 2.获取参数 + const index = await this.db.getIndex(`${this.dbTable}`, plugin, 'name'); + if (index === -1) continue; + const pluginInfo = await this.db.getData(`${this.dbTable}[${index}]`); + + // 3.获取插件参数 + const pkgPath = join(pluginBasePath, 'package.json'); + if (!fileExist(pkgPath) || fileState(pkgPath) !== 'file') continue; + const pkgInfo = this.readJsonFile(pkgPath); + if (!pkgInfo || typeof pkgInfo !== 'object') continue; + + const latestVersion = pkgInfo?.version || '0.0.0'; + const installedVersion = pluginInfo?.version || '0.0.0'; + if (latestVersion > installedVersion) await this.install([plugin]); + } catch (err: any) { + logger.error(`[plugin][update][error] ${err.message}`); + } + } + + const res = await this.fetchList(plugins); + return res; + } + + /** + * 列出所有已安装插件 + * @memberof AdapterHandler + */ + async list() { + try { + return await this.fetchList(); + } catch (err: any) { + logger.error(`[plugin][list][error] ${err.message}`); + return []; + } + } + + /** + * 启动插件 + * @param plugins + * @memberof AdapterHandler + */ + async start(plugins: string[]) { + plugins = [...new Set(plugins)]; + + for (const plugin of plugins) { + try { + // 1.判断项目存在 + const pluginBasePath = join(this.baseDir, plugin); + if (!fileExist(pluginBasePath) || fileState(pluginBasePath) !== 'dir') continue; + + // 2.获取参数 + const index = await this.db.getIndex(`${this.dbTable}`, plugin, 'name'); + if (index === -1) continue; + const pluginInfo = await this.db.getData(`${this.dbTable}[${index}]`); + + // 3.启动插件 + if (pluginInfo?.main && pluginInfo?.main.endsWith('.js')) { + let status = pluginInfo?.status || 'STOPED'; + + try { + let pool = this.syncModules.get(`${plugin}`); + if (!pool) { + pool = workerpool.pool(); + this.syncModules.set(`${plugin}`, pool); + } + + try { + let entryModule = resolve(pluginBasePath, pluginInfo.main); + if (process.platform === 'win32') entryModule = `file:///${entryModule}`; + const res = await pool.exec(runModule, [entryModule, 'start']); + if (res.code === 0) status = 'RUNNING'; + else status = 'STOPED'; + } catch (err: any) { + status = 'STOPED'; + this.syncModules.delete(`${plugin}`); + await pool.terminate(); + logger.error(`[plugin][start][exec][error] ${err.message}`); + } + } catch (err: any) { + logger.error(`[plugin][start][pool][error] ${err.message}`); + } finally { + await this.db.push(`${this.dbTable}[${index}]`, Object.assign({}, pluginInfo, { status }), true); + } + } + } catch (err: any) { + logger.error(`[plugin][start][error] ${err.message}`); + } + } + + const res = await this.fetchList(plugins); + return res; + } + + /** + * 停止插件 + * @param plugins + * @memberof AdapterHandler + */ + async stop(plugins: string[]) { + plugins = [...new Set(plugins)]; + + for (const plugin of plugins) { + try { + // 1.判断项目存在 + const pluginBasePath = join(this.baseDir, plugin); + if (!fileExist(pluginBasePath) || fileState(pluginBasePath) !== 'dir') continue; + + // 2.获取参数 + const index = await this.db.getIndex(`${this.dbTable}`, plugin, 'name'); + if (index === -1) continue; + const pluginInfo = await this.db.getData(`${this.dbTable}[${index}]`); + + // 3.停止插件 + if (pluginInfo?.main && pluginInfo?.main.endsWith('.js')) { + let status = pluginInfo?.status || 'STOPED'; + + try { + let pool = this.syncModules.get(`${plugin}`); + + try { + status = 'STOPED'; + this.syncModules.delete(`${plugin}`); + if (pool) await pool.terminate(); + } catch (err: any) { + status = 'STOPED'; + this.syncModules.delete(`${plugin}`); + if (pool) await pool.terminate(); + logger.error(`[plugin][stop][exec][error] ${err.message}`); + } + } catch (err: any) { + logger.error(`[plugin][stop][pool][error] ${err.message}`); + } finally { + await this.db.push(`${this.dbTable}[${index}]`, Object.assign({}, pluginInfo, { status }), true); + } + } + } catch (err: any) { + logger.error(`[plugin][stop][error] ${err.message}`); + } + } + + const res = await this.fetchList(plugins); + return res; + } + + /** + * 执行包管理器命令 + * @memberof AdapterHandler + */ + private async execCommand( + cmd: string, + options: { [key: string]: string }, + modules: string[] = [], + ): Promise<{ code: number; msg: string; data: any[] }> { + return new Promise(async (resolve: any, reject: any) => { + const config: { [key: string]: any } = { + prefix: this.baseDir, + save: true, + registry: this.registry, + ...options, + }; + + console.log(npm.config.loaded); + + npm.load(config, (loadErr: any) => { + npm.config.prefix = options?.prefix || this.baseDir; // 重要, 刷新项目工作路径 + + if (loadErr) { + logger.error(`[plugin][execCommand][load][error] ${loadErr.message}`); + reject({ code: -1, msg: loadErr.message, data: null }); + } + + npm.commands[cmd](modules, function (cmdErr: any, data: any[]) { + if (cmdErr) { + logger.error(`[plugin][execCommand][${cmd}][error] ${cmdErr.message}`); + reject({ code: -1, msg: cmdErr.message, data: null }); + } + logger.info(`[plugin][execCommand][data]`, data); + resolve({ code: 0, msg: 'ok', data }); + }); + + npm.on('log', (message) => { + logger.info(`[plugin][execCommand][log] ${message}`); + }); + }); + }); + } +} + +export default AdapterHandler; diff --git a/src/main/core/server/routes/v1/plugin/utils/adapter.ts b/src/main/core/server/routes/v1/plugin/utils/adapter_link.ts similarity index 99% rename from src/main/core/server/routes/v1/plugin/utils/adapter.ts rename to src/main/core/server/routes/v1/plugin/utils/adapter_link.ts index 7ee1bb4d0..d34c49522 100644 --- a/src/main/core/server/routes/v1/plugin/utils/adapter.ts +++ b/src/main/core/server/routes/v1/plugin/utils/adapter_link.ts @@ -137,6 +137,7 @@ class AdapterHandler { * @memberof AdapterHandler */ async install(plugins: any[]) { + // 赋值目录名 plugins = plugins.map((plugin) => { const updatedPlugin = { ...plugin }; updatedPlugin.pluginName = plugin.name; diff --git a/src/main/core/server/routes/v1/plugin/work.ts b/src/main/core/server/routes/v1/plugin/work.ts index a43495e12..d2724a2e5 100644 --- a/src/main/core/server/routes/v1/plugin/work.ts +++ b/src/main/core/server/routes/v1/plugin/work.ts @@ -1,7 +1,7 @@ import { FastifyPluginAsync, FastifyRequest } from 'fastify'; import { join } from 'path'; import { APP_STORE_PATH } from '@main/utils/hiker/file'; -import adapter from './utils/adapter'; +import adapter from './utils/adapter_install'; const API_PREFIX = 'api/v1/plugin'; const APP_PLUGIN_PATH = join(APP_STORE_PATH, 'plugin'); diff --git a/src/renderer/src/pages/lab/components/pluginCenter/index.vue b/src/renderer/src/pages/lab/components/pluginCenter/index.vue index eb7166760..f18033395 100644 --- a/src/renderer/src/pages/lab/components/pluginCenter/index.vue +++ b/src/renderer/src/pages/lab/components/pluginCenter/index.vue @@ -134,8 +134,7 @@ const handleItemClick = (name: string) => { } const handleGoDir = async() => { - const defaultPath = await window.electron.ipcRenderer.invoke('path-join', 'plugin', 'modules'); - window.electron.ipcRenderer.send('open-path', defaultPath, true); + window.electron.ipcRenderer.send('open-path', 'plugin', true); } const handleControl = async (type: string, name: string) => { @@ -149,7 +148,7 @@ const handleControl = async (type: string, name: string) => { if (!methodMap?.[type]) return; try { - const updatedPluginList = await methodMap[type]([{ name, isDev: true }]); + const updatedPluginList = await methodMap[type]([ name ]); const checkSuccess = () => { return type === 'uninstall' ? true : updatedPluginList && updatedPluginList.length > 0; }; From 42351f246a121ef9e347dba3244287ca4dc89c6c Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Sun, 8 Dec 2024 01:38:10 +0800 Subject: [PATCH 018/175] [optimize] player headers remove unsafe --- src/renderer/src/components/player/index.vue | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/renderer/src/components/player/index.vue b/src/renderer/src/components/player/index.vue index 264fa0903..41e200079 100644 --- a/src/renderer/src/components/player/index.vue +++ b/src/renderer/src/components/player/index.vue @@ -33,6 +33,16 @@ const formatUrlHeaders = (url: string, headers: { [key: string]: string }) => { return url; }; +const formatRemoveUnSafeHeaders = (headers: { [key: string]: string }) => { + const unsafeHeads = ['host', 'referer', 'origin', 'user-agent', 'content-length', 'set-cookie']; + + for (const key in headers) { + if (unsafeHeads.includes(key.toLowerCase())) delete headers[key]; + } + + return headers; +}; + const init = async () => { if (playerMode.value.type === 'custom') return; await destroy(); @@ -54,6 +64,7 @@ const create = async (doc: { [key: string]: any }) => { }; doc.url = formatUrlHeaders(doc.url, doc.headers); doc.type = mapVideoTypeToPlayerType(doc.type); + doc.headers = formatRemoveUnSafeHeaders(doc.headers); await adapter.value.create(doc); }; From 48e5233b4f7b9748f83de7b4da39ce66456eca91 Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Sun, 8 Dec 2024 02:08:36 +0800 Subject: [PATCH 019/175] [bug] fix play return parm not standed --- src/main/core/server/routes/v1/site/cms/adapter/drpyjs0.ts | 4 +--- src/main/core/server/routes/v1/site/cms/adapter/t4Hipy.ts | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/main/core/server/routes/v1/site/cms/adapter/drpyjs0.ts b/src/main/core/server/routes/v1/site/cms/adapter/drpyjs0.ts index 2ef416d6b..68453affb 100644 --- a/src/main/core/server/routes/v1/site/cms/adapter/drpyjs0.ts +++ b/src/main/core/server/routes/v1/site/cms/adapter/drpyjs0.ts @@ -169,9 +169,7 @@ class DrpyJs0Adapter { url: input, }, }); - return { - play: response, - }; + return { ...response }; } runMain() { return ''; diff --git a/src/main/core/server/routes/v1/site/cms/adapter/t4Hipy.ts b/src/main/core/server/routes/v1/site/cms/adapter/t4Hipy.ts index 5001d9b92..5129ce212 100644 --- a/src/main/core/server/routes/v1/site/cms/adapter/t4Hipy.ts +++ b/src/main/core/server/routes/v1/site/cms/adapter/t4Hipy.ts @@ -184,9 +184,7 @@ class HipyT4Adapter { play: play, }, }); - return { - play: response, - }; + return { ...response }; } runMain() { return ''; From 4dfb90bd9fd3d1e6ea73ee88f1389a95774506b8 Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Sun, 8 Dec 2024 19:05:20 +0800 Subject: [PATCH 020/175] [optimize] plugin --- .../routes/v1/plugin/utils/adapter_install.ts | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/main/core/server/routes/v1/plugin/utils/adapter_install.ts b/src/main/core/server/routes/v1/plugin/utils/adapter_install.ts index 2489f7d63..a1fed9304 100644 --- a/src/main/core/server/routes/v1/plugin/utils/adapter_install.ts +++ b/src/main/core/server/routes/v1/plugin/utils/adapter_install.ts @@ -3,7 +3,16 @@ import { join, resolve } from 'path'; import workerpool from 'workerpool'; import { JsonDB, Config } from 'node-json-db'; import logger from '@main/core/logger'; -import { fileExist, fileState, readJson, readFile, saveJson, createDir } from '@main/utils/hiker/file'; +import { + deleteFile, + fileExist, + fileState, + readJson, + readFile, + saveJson, + createDir, + deleteDir, +} from '@main/utils/hiker/file'; import { AdapterHandlerOptions, AdapterInfo } from './types'; @@ -147,7 +156,8 @@ class AdapterHandler { if (index > -1) await this.stop([plugin]); // 3.安装插件 - await this.execCommand('install', { prefix: pluginBasePath }, []); + const execRes = await this.execCommand('install', { prefix: pluginBasePath }, []); + if (execRes.code === -1) continue; // 4.插件参数 const data = { @@ -193,8 +203,11 @@ class AdapterHandler { if (index > -1) await this.stop([plugin]); else continue; - // 3.卸载插件 - await this.execCommand('uninstall', { prefix: pluginBasePath }, []); + // 3.删除必要依赖 + const pluginNodeModulesPath = join(pluginBasePath, 'node_modules'); + if (fileExist(pluginNodeModulesPath) && fileState(pluginBasePath) === 'dir') deleteDir(pluginNodeModulesPath); + const pluginPkgLockPath = join(pluginBasePath, 'package-lock.json'); + if (fileExist(pluginPkgLockPath) && fileState(pluginPkgLockPath) === 'file') deleteFile(pluginPkgLockPath); // 4.插件参数 await this.db.delete(`${this.dbTable}[${index}]`); @@ -376,16 +389,13 @@ class AdapterHandler { ): Promise<{ code: number; msg: string; data: any[] }> { return new Promise(async (resolve: any, reject: any) => { const config: { [key: string]: any } = { - prefix: this.baseDir, save: true, registry: this.registry, - ...options, }; - console.log(npm.config.loaded); - npm.load(config, (loadErr: any) => { npm.config.prefix = options?.prefix || this.baseDir; // 重要, 刷新项目工作路径 + logger.info(`[plugin][execCommand][env][prefix] ${npm.config.prefix}`); if (loadErr) { logger.error(`[plugin][execCommand][load][error] ${loadErr.message}`); From 60abbea7bdb30b24c79e73a7b02a7cf190508f44 Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Sun, 8 Dec 2024 19:05:39 +0800 Subject: [PATCH 021/175] [change]npm packages --- package.json | 4 +- yarn.lock | 134 +++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 110 insertions(+), 28 deletions(-) diff --git a/package.json b/package.json index c01259454..879380660 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zyfun", - "version": "3.3.10-beta1206", + "version": "3.3.10-beta1208", "description": "zyfun client", "main": "./out/main/index.js", "repository": { @@ -65,7 +65,7 @@ "@electron-uikit/titlebar": "^1.1.0", "@fastify/cors": "^10.0.1", "@fastify/multipart": "^9.0.1", - "@imengyu/vue3-context-menu": "^1.4.3", + "@imengyu/vue3-context-menu": "^1.4.4", "@nplayer/danmaku": "^1.0.12", "@rushstack/eslint-patch": "^1.10.4", "@swc/core": "^1.10.0", diff --git a/yarn.lock b/yarn.lock index 3fa797c94..46bfd413a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1088,10 +1088,10 @@ glob "^7.1.2" signal-exit "^3.0.2" -"@imengyu/vue3-context-menu@^1.4.3": - version "1.4.3" - resolved "https://registry.npmmirror.com/@imengyu/vue3-context-menu/-/vue3-context-menu-1.4.3.tgz#9c4e634eccdc0c9fe5b87e8f7f5e5d5917539c43" - integrity sha512-W2rT+xllLSg+u/Z36jE+mrjzO8gCIw0YDDyBxywuASmwrBotU4deftW8Zz9GK/QEHBRNyV5nBINZJo2J257Wlg== +"@imengyu/vue3-context-menu@^1.4.4": + version "1.4.4" + resolved "https://registry.npmmirror.com/@imengyu/vue3-context-menu/-/vue3-context-menu-1.4.4.tgz#c354c2a261bfc3a115ef906fd61786b810581fd0" + integrity sha512-Zjh1BbrvcNbZvsWr9IJl9KQUomf50EeP2GT+mWk63sqatDZxG7ZFX1eltrwRyfSBr+SuFpMvdYv/yRxpBsyw6w== "@intlify/core-base@10.0.5": version "10.0.5" @@ -2906,7 +2906,25 @@ cacheable-request@^7.0.2: normalize-url "^6.0.1" responselike "^2.0.0" -call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: +call-bind-apply-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.0.tgz#33127b42608972f76812a501d69db5d8ce404979" + integrity sha512-CCKAP2tkPau7D3GE8+V8R6sQubA9R5foIzGp+85EXCVSCivuxBNAWqcpn72PKYiIcqoViv/kcUDpaEIMBVi1lQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bind@^1.0.7: version "1.0.7" resolved "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== @@ -3694,7 +3712,7 @@ debug@^3.1.0: dependencies: ms "^2.1.1" -debuglog@^1.0.1: +debuglog@*, debuglog@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== @@ -4058,6 +4076,15 @@ drizzle-orm@^0.37.0: resolved "https://registry.npmmirror.com/drizzle-orm/-/drizzle-orm-0.37.0.tgz#313c508164922cf99cee5fa17381c503035538fa" integrity sha512-AsCNACQ/T2CyZUkrBRUqFT2ibHJ9ZHz3+lzYJFFn3hnj7ylIeItMz5kacRG89uSE74nXYShqehr6u+6ks4JR1A== +dunder-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.0.tgz#c2fce098b3c8f8899554905f4377b6d85dabaa80" + integrity sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-errors "^1.3.0" + gopd "^1.2.0" + duplexer3@^0.1.4: version "0.1.5" resolved "https://registry.npmmirror.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" @@ -4374,6 +4401,11 @@ es-define-property@^1.0.0: dependencies: get-intrinsic "^1.2.4" +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" @@ -5423,7 +5455,7 @@ get-east-asian-width@^1.0.0: resolved "https://registry.npmmirror.com/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz#21b4071ee58ed04ee0db653371b55b4299875389" integrity sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ== -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: +get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: version "1.2.4" resolved "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== @@ -5434,6 +5466,20 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@ has-symbols "^1.0.3" hasown "^2.0.0" +get-intrinsic@^1.2.1, get-intrinsic@^1.2.3: + version "1.2.5" + resolved "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.5.tgz#dfe7dd1b30761b464fe51bf4bb00ac7c37b681e7" + integrity sha512-Y4+pKa7XeRUPWFNvOOYHkRYrfzW07oraURSvjDmRVOJ748OrVmeXtpE4+GCEHncjCjkTxPNRt8kEbxDhsn6VTg== + dependencies: + call-bind-apply-helpers "^1.0.0" + dunder-proto "^1.0.0" + es-define-property "^1.0.1" + es-errors "^1.3.0" + function-bind "^1.1.2" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + get-port@^3.1.0: version "3.2.0" resolved "https://registry.npmmirror.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" @@ -5698,12 +5744,10 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -gopd@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/gopd/-/gopd-1.1.0.tgz#df8f0839c2d48caefc32a025a49294d39606c912" - integrity sha512-FQoVQnqcdk4hVM4JN1eromaun4iuS34oStkdlLENLdpULsuQcTyXj8w7ayhuUfPwEYZ1ZOooOTT6fdA9Vmx/RA== - dependencies: - get-intrinsic "^1.2.4" +gopd@^1.1.0, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== got@^11.7.0, got@^11.8.5: version "11.8.6" @@ -5790,17 +5834,22 @@ has-proto@^1.0.1: integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== has-proto@^1.0.3: - version "1.1.0" - resolved "https://registry.npmmirror.com/has-proto/-/has-proto-1.1.0.tgz#deb10494cbbe8809bce168a3b961f42969f5ed43" - integrity sha512-QLdzI9IIO1Jg7f9GT1gXpPpXArAn6cS31R1eEZqz08Gc+uQ8/XiqHWt17Fiw+2p6oTTIq5GXEpQkAlA88YRl/Q== + version "1.2.0" + resolved "https://registry.npmmirror.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== dependencies: - call-bind "^1.0.7" + dunder-proto "^1.0.0" has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" @@ -6084,7 +6133,7 @@ import-lazy@^2.1.0: resolved "https://registry.npmmirror.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== -imurmurhash@^0.1.4: +imurmurhash@*, imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== @@ -7057,6 +7106,11 @@ lockfile@^1.0.4: dependencies: signal-exit "^3.0.2" +lodash._baseindexof@*: + version "3.1.0" + resolved "https://registry.npmmirror.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" + integrity sha512-bSYo8Pc/f0qAkr8fPJydpJjtrHiSynYfYBjtANIgXv5xEf1WlTC63dIDlgu0s9dmTvzRu1+JJTxcIAHe+sH0FQ== + lodash._baseuniq@~4.6.0: version "4.6.0" resolved "https://registry.npmmirror.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" @@ -7065,11 +7119,33 @@ lodash._baseuniq@~4.6.0: lodash._createset "~4.0.0" lodash._root "~3.0.0" +lodash._bindcallback@*: + version "3.0.1" + resolved "https://registry.npmmirror.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" + integrity sha512-2wlI0JRAGX8WEf4Gm1p/mv/SZ+jLijpj0jyaE/AXeuQphzCgD8ZQW4oSpoN8JAopujOFGU3KMuq7qfHBWlGpjQ== + +lodash._cacheindexof@*: + version "3.0.2" + resolved "https://registry.npmmirror.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" + integrity sha512-S8dUjWr7SUT/X6TBIQ/OYoCHo1Stu1ZRy6uMUSKqzFnZp5G5RyQizSm6kvxD2Ewyy6AVfMg4AToeZzKfF99T5w== + +lodash._createcache@*: + version "3.1.2" + resolved "https://registry.npmmirror.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" + integrity sha512-ev5SP+iFpZOugyab/DEUQxUeZP5qyciVTlgQ1f4Vlw7VUcCD8fVnyIqVUEIaoFH9zjAqdgi69KiofzvVmda/ZQ== + dependencies: + lodash._getnative "^3.0.0" + lodash._createset@~4.0.0: version "4.0.3" resolved "https://registry.npmmirror.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" integrity sha512-GTkC6YMprrJZCYU3zcqZj+jkXkrXzq3IPBcF/fIPpNEAB4hZEtXU8zp/RwKOvZl43NUmwDbyRk3+ZTbeRdEBXA== +lodash._getnative@*, lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.npmmirror.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + integrity sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA== + lodash._root@~3.0.0: version "3.0.1" resolved "https://registry.npmmirror.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" @@ -7095,6 +7171,11 @@ lodash.merge@^4.6.2: resolved "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash.restparam@*: + version "3.6.1" + resolved "https://registry.npmmirror.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + integrity sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw== + lodash.truncate@^4.4.2: version "4.4.2" resolved "https://registry.npmmirror.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" @@ -9258,17 +9339,18 @@ real-require@^0.2.0: integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== reflect.getprototypeof@^1.0.6: - version "1.0.7" - resolved "https://registry.npmmirror.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.7.tgz#04311b33a1b713ca5eb7b5aed9950a86481858e5" - integrity sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g== + version "1.0.8" + resolved "https://registry.npmmirror.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.8.tgz#c58afb17a4007b4d1118c07b92c23fca422c5d82" + integrity sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" define-properties "^1.2.1" + dunder-proto "^1.0.0" es-abstract "^1.23.5" es-errors "^1.3.0" get-intrinsic "^1.2.4" - gopd "^1.0.1" - which-builtin-type "^1.1.4" + gopd "^1.2.0" + which-builtin-type "^1.2.0" regenerator-runtime@^0.14.0: version "0.14.1" @@ -9647,7 +9729,7 @@ set-cookie-parser@^2.6.0: resolved "https://registry.npmmirror.com/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz#3016f150072202dfbe90fadee053573cc89d2943" integrity sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ== -set-function-length@^1.2.1: +set-function-length@^1.2.1, set-function-length@^1.2.2: version "1.2.2" resolved "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== @@ -11335,7 +11417,7 @@ which-boxed-primitive@^1.0.2: is-string "^1.1.0" is-symbol "^1.1.0" -which-builtin-type@^1.1.4: +which-builtin-type@^1.2.0: version "1.2.0" resolved "https://registry.npmmirror.com/which-builtin-type/-/which-builtin-type-1.2.0.tgz#58042ac9602d78a6d117c7e811349df1268ba63c" integrity sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA== From ece3c11910baaee10d19fe6691b83b7e9a230deb Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Sun, 8 Dec 2024 23:49:35 +0800 Subject: [PATCH 022/175] [bug] fix t0xml return not stand --- src/main/core/server/routes/v1/site/cms/adapter/t0Xml.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/core/server/routes/v1/site/cms/adapter/t0Xml.ts b/src/main/core/server/routes/v1/site/cms/adapter/t0Xml.ts index f7d0292d2..c6a7774f5 100644 --- a/src/main/core/server/routes/v1/site/cms/adapter/t0Xml.ts +++ b/src/main/core/server/routes/v1/site/cms/adapter/t0Xml.ts @@ -221,10 +221,10 @@ class T0Adapter { const { input } = doc; let parse_url = this.playurl || ''; if (/\.(m3u8|mp4)/.test(input)) { - return JSON.stringify({ + return { parse: 0, url: input, - }); + }; } else { if (parse_url.startsWith('json:')) { const purl = parse_url.replace('json:', '') + input; From 8fbe1f92b637f22596bb3f7fb55a0a30f5902620 Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Fri, 13 Dec 2024 02:31:17 +0800 Subject: [PATCH 023/175] [optimize] plugin --- .../routes/v1/plugin/utils/adapter_install.ts | 163 ++++---- .../src/locales/lang/en_US/pages/lab.ts | 12 +- .../src/locales/lang/zh_CN/pages/lab.ts | 12 +- .../lab/components/pluginCenter/index.vue | 363 ++++++++++++------ 4 files changed, 368 insertions(+), 182 deletions(-) diff --git a/src/main/core/server/routes/v1/plugin/utils/adapter_install.ts b/src/main/core/server/routes/v1/plugin/utils/adapter_install.ts index a1fed9304..e99916d3a 100644 --- a/src/main/core/server/routes/v1/plugin/utils/adapter_install.ts +++ b/src/main/core/server/routes/v1/plugin/utils/adapter_install.ts @@ -2,6 +2,7 @@ import npm from 'npm'; import { join, resolve } from 'path'; import workerpool from 'workerpool'; import { JsonDB, Config } from 'node-json-db'; +import { pathToFileURL } from 'url'; import logger from '@main/core/logger'; import { deleteFile, @@ -60,7 +61,7 @@ class AdapterHandler { // 启动插件程序 (async () => { - let plugins = await this.fetchList(); + let plugins = await this.fetchList([], true); plugins = plugins.filter((p) => p.status === 'RUNNING'); try { await this.start([...new Set(plugins.map((p) => p.name))]); @@ -84,11 +85,11 @@ class AdapterHandler { } } - async fetchList(plugins: any[] = []) { + async fetchList(plugins: any[] = [], all: boolean = false) { let infoList: AdapterInfo[] = []; try { - if (plugins.length === 0) { + if (all) { infoList = await this.db.getData(`${this.dbTable}`); } else { for (let plugin of plugins) { @@ -107,6 +108,19 @@ class AdapterHandler { return infoList; } + /** + * 列出所有已安装插件 + * @memberof AdapterHandler + */ + async list() { + try { + return await this.fetchList([], true); + } catch (err: any) { + logger.error(`[plugin][list][error] ${err.message}`); + return []; + } + } + /** * 获取插件信息 * @param {plugins} @@ -120,7 +134,6 @@ class AdapterHandler { return res; } catch (err: any) { logger.error(`[plugin][getAdapterInfo][error] ${err.message}`); - } finally { return []; } } @@ -132,9 +145,10 @@ class AdapterHandler { */ async install(plugins: any[]) { plugins = [...new Set(plugins)]; + const projects: any[] = []; for (const plugin of plugins) { - let info: { [key: string]: string } = { name: plugin, pluginName: plugin }; + let info: { [key: string]: string } = {}; try { // 1.判断项目存在 @@ -146,14 +160,25 @@ class AdapterHandler { if (!fileExist(pkgPath) || fileState(pkgPath) !== 'file') continue; const pkgInfo = this.readJsonFile(pkgPath); if (!pkgInfo || typeof pkgInfo !== 'object') continue; + + info = { ...info, ...pkgInfo }; + + // 2.1 type + info.type = pkgInfo?.pluginType || 'system'; + // 2.1 readme const readmePath = join(pluginBasePath, 'README.md'); info.readme = `### empty`; if (fileExist(readmePath) && fileState(readmePath) === 'file') info.readme = readFile(readmePath); - info = { ...pkgInfo, ...info }; + // 2.2 main + if (info.type === 'ui') { + info.main = info?.main ? pathToFileURL(resolve(pluginBasePath, info.main)).toString() : 'about:blank'; + } else if (info?.type === 'system') { + info.main = info?.main ? pathToFileURL(resolve(pluginBasePath, info.main)).toString() : ''; + } // 2.停止插件 const index = await this.db.getIndex(`${this.dbTable}`, info.name, 'name'); - if (index > -1) await this.stop([plugin]); + if (index > -1) await this.stop([info.name]); // 3.安装插件 const execRes = await this.execCommand('install', { prefix: pluginBasePath }, []); @@ -161,26 +186,29 @@ class AdapterHandler { // 4.插件参数 const data = { - type: info?.pluginType || 'system', + type: info?.type || 'system', name: info?.name || '', - pluginName: info?.pluginName || '', + pluginName: info?.pluginName || info?.name || '', + pathName: plugin, author: info?.author || '', description: info?.description || '', - readme: info?.readme || `### empty`, + readme: info?.readme || '', main: info?.main || '', version: info?.version || '0.0.0', logo: info?.logo || '', status: info?.status || 'STOPED', }; + logger.info(`[plugin][install][data]`, data); if (index > -1) await this.db.push(`${this.dbTable}[${index}]`, data, true); else await this.db.push(`${this.dbTable}[]`, data); + projects.push(data.name); } catch (err: any) { logger.error(`[plugin][install][error] ${err.message}`); } } - const res = await this.fetchList(plugins); + const res = await this.fetchList(projects, false); return res; } @@ -194,29 +222,36 @@ class AdapterHandler { for (const plugin of plugins) { try { - // 1.判断项目存在 - const pluginBasePath = join(this.baseDir, plugin); - if (!fileExist(pluginBasePath) || fileState(pluginBasePath) !== 'dir') continue; - - // 2.停止插件 + // 1.获取插件信息 const index = await this.db.getIndex(`${this.dbTable}`, plugin, 'name'); - if (index > -1) await this.stop([plugin]); - else continue; + if (index === -1) continue; + const pluginInfo = await this.db.getData(`${this.dbTable}[${index}]`); + if (Object.keys(pluginInfo).length === 0) continue; - // 3.删除必要依赖 + // 2.判断项目存在 + const pluginBasePath = join(this.baseDir, pluginInfo.pathName); + if (!fileExist(pluginBasePath) || fileState(pluginBasePath) !== 'dir') { + if (index > -1) await this.db.delete(`${this.dbTable}[${index}]`); + continue; + } + + // 3.停止插件 + if (index > -1) await this.stop([pluginInfo.name]); + + // 4.删除必要依赖 const pluginNodeModulesPath = join(pluginBasePath, 'node_modules'); if (fileExist(pluginNodeModulesPath) && fileState(pluginBasePath) === 'dir') deleteDir(pluginNodeModulesPath); const pluginPkgLockPath = join(pluginBasePath, 'package-lock.json'); if (fileExist(pluginPkgLockPath) && fileState(pluginPkgLockPath) === 'file') deleteFile(pluginPkgLockPath); - // 4.插件参数 + // 5.插件参数 await this.db.delete(`${this.dbTable}[${index}]`); } catch (err: any) { logger.error(`[plugin][uninstall][error] ${err.message}`); } } - const res = await this.fetchList(plugins); + const res = await this.fetchList(plugins, false); return res; } @@ -230,16 +265,20 @@ class AdapterHandler { for (const plugin of plugins) { try { - // 1.判断项目存在 - const pluginBasePath = join(this.baseDir, plugin); - if (!fileExist(pluginBasePath) || fileState(pluginBasePath) !== 'dir') continue; - - // 2.获取参数 + // 1.获取插件信息 const index = await this.db.getIndex(`${this.dbTable}`, plugin, 'name'); if (index === -1) continue; const pluginInfo = await this.db.getData(`${this.dbTable}[${index}]`); + if (Object.keys(pluginInfo).length === 0) continue; + + // 2.判断项目存在 + const pluginBasePath = join(this.baseDir, pluginInfo.pathName); + if (!fileExist(pluginBasePath) || fileState(pluginBasePath) !== 'dir') { + if (index > -1) await this.db.delete(`${this.dbTable}[${index}]`); + continue; + } - // 3.获取插件参数 + // 3.获取pkg参数 const pkgPath = join(pluginBasePath, 'package.json'); if (!fileExist(pkgPath) || fileState(pkgPath) !== 'file') continue; const pkgInfo = this.readJsonFile(pkgPath); @@ -247,29 +286,16 @@ class AdapterHandler { const latestVersion = pkgInfo?.version || '0.0.0'; const installedVersion = pluginInfo?.version || '0.0.0'; - if (latestVersion > installedVersion) await this.install([plugin]); + if (latestVersion > installedVersion) await this.install([pluginInfo.pathName]); } catch (err: any) { logger.error(`[plugin][update][error] ${err.message}`); } } - const res = await this.fetchList(plugins); + const res = await this.fetchList(plugins, false); return res; } - /** - * 列出所有已安装插件 - * @memberof AdapterHandler - */ - async list() { - try { - return await this.fetchList(); - } catch (err: any) { - logger.error(`[plugin][list][error] ${err.message}`); - return []; - } - } - /** * 启动插件 * @param plugins @@ -280,35 +306,38 @@ class AdapterHandler { for (const plugin of plugins) { try { - // 1.判断项目存在 - const pluginBasePath = join(this.baseDir, plugin); - if (!fileExist(pluginBasePath) || fileState(pluginBasePath) !== 'dir') continue; - - // 2.获取参数 + // 1.获取插件信息 const index = await this.db.getIndex(`${this.dbTable}`, plugin, 'name'); if (index === -1) continue; const pluginInfo = await this.db.getData(`${this.dbTable}[${index}]`); + if (Object.keys(pluginInfo).length === 0) continue; + + // 2.判断项目存在 + const pluginBasePath = join(this.baseDir, pluginInfo.pathName); + if (!fileExist(pluginBasePath) || fileState(pluginBasePath) !== 'dir') { + if (index > -1) await this.db.delete(`${this.dbTable}[${index}]`); + continue; + } // 3.启动插件 - if (pluginInfo?.main && pluginInfo?.main.endsWith('.js')) { + if (pluginInfo?.main && pluginInfo?.main.toString().endsWith('.js')) { let status = pluginInfo?.status || 'STOPED'; try { - let pool = this.syncModules.get(`${plugin}`); + let pool = this.syncModules.get(`${pluginInfo.name}`); if (!pool) { pool = workerpool.pool(); - this.syncModules.set(`${plugin}`, pool); + this.syncModules.set(`${pluginInfo.name}`, pool); } try { - let entryModule = resolve(pluginBasePath, pluginInfo.main); - if (process.platform === 'win32') entryModule = `file:///${entryModule}`; - const res = await pool.exec(runModule, [entryModule, 'start']); + logger.info(`[plugin][start][${pluginInfo.name}] 入口: ${pluginInfo.main}`); + const res = await pool.exec(runModule, [pluginInfo.main, 'start']); if (res.code === 0) status = 'RUNNING'; else status = 'STOPED'; } catch (err: any) { status = 'STOPED'; - this.syncModules.delete(`${plugin}`); + this.syncModules.delete(`${pluginInfo.name}`); await pool.terminate(); logger.error(`[plugin][start][exec][error] ${err.message}`); } @@ -323,7 +352,7 @@ class AdapterHandler { } } - const res = await this.fetchList(plugins); + const res = await this.fetchList(plugins, false); return res; } @@ -337,29 +366,33 @@ class AdapterHandler { for (const plugin of plugins) { try { - // 1.判断项目存在 - const pluginBasePath = join(this.baseDir, plugin); - if (!fileExist(pluginBasePath) || fileState(pluginBasePath) !== 'dir') continue; - - // 2.获取参数 + // 1.获取插件信息 const index = await this.db.getIndex(`${this.dbTable}`, plugin, 'name'); if (index === -1) continue; const pluginInfo = await this.db.getData(`${this.dbTable}[${index}]`); + if (Object.keys(pluginInfo).length === 0) continue; + + // 2.判断项目存在 + const pluginBasePath = join(this.baseDir, pluginInfo.pathName); + if (!fileExist(pluginBasePath) || fileState(pluginBasePath) !== 'dir') { + if (index > -1) await this.db.delete(`${this.dbTable}[${index}]`); + continue; + } // 3.停止插件 - if (pluginInfo?.main && pluginInfo?.main.endsWith('.js')) { + if (pluginInfo?.main && pluginInfo?.main.toString().endsWith('.js')) { let status = pluginInfo?.status || 'STOPED'; try { - let pool = this.syncModules.get(`${plugin}`); + let pool = this.syncModules.get(`${pluginInfo.name}`); try { status = 'STOPED'; - this.syncModules.delete(`${plugin}`); + this.syncModules.delete(`${pluginInfo.name}`); if (pool) await pool.terminate(); } catch (err: any) { status = 'STOPED'; - this.syncModules.delete(`${plugin}`); + this.syncModules.delete(`${pluginInfo.name}`); if (pool) await pool.terminate(); logger.error(`[plugin][stop][exec][error] ${err.message}`); } @@ -374,7 +407,7 @@ class AdapterHandler { } } - const res = await this.fetchList(plugins); + const res = await this.fetchList(plugins, false); return res; } diff --git a/src/renderer/src/locales/lang/en_US/pages/lab.ts b/src/renderer/src/locales/lang/en_US/pages/lab.ts index 9c48bee59..f4a63e825 100644 --- a/src/renderer/src/locales/lang/en_US/pages/lab.ts +++ b/src/renderer/src/locales/lang/en_US/pages/lab.ts @@ -374,17 +374,23 @@ export default { }, control: { title: 'Control', - start: 'Start', - stop: 'Stop', + start: 'StartServer', + stop: 'StopServer', + devtool: 'Devtool', upgrade: 'Upgrade', update: 'Update', install: 'Install', uninstall: 'UnInstall', - cancelTip: 'There is unfinished history. Please wait until it is finished', + cancelTip: 'The current plug-in has an incomplete command, please wait moment', + devtoolDomAttchErrTip: 'The DOM is not mounted on the page, and the developer Tool failed to open', + loadUiEntryError: 'Failed to load entry', }, content: { title: 'README', }, + webview: { + title: 'ContentView', + }, installDialog: { tip: { tip1: 'Put the project into the specified directory, the file name must not have any special characters (if it is already in the directory, it will be ignored).', diff --git a/src/renderer/src/locales/lang/zh_CN/pages/lab.ts b/src/renderer/src/locales/lang/zh_CN/pages/lab.ts index 0fe9800fd..4ccf3e901 100644 --- a/src/renderer/src/locales/lang/zh_CN/pages/lab.ts +++ b/src/renderer/src/locales/lang/zh_CN/pages/lab.ts @@ -374,17 +374,23 @@ export default { }, control: { title: '控制中心', - start: '启动', - stop: '停止', + start: '启动服务', + stop: '停止服务', + devtool: '开发者工具', upgrade: '升级', update: '更新', install: '安装', uninstall: '卸载', - cancelTip: '历史存在未执行完内容, 请等完成后执行', + cancelTip: '当前插件存在未执行完命令, 请稍后', + devtoolDomAttchErrTip: '打开开发者工具失败, DOM未挂载到页面上', + loadUiEntryError: '加载入口失败', }, content: { title: 'README', }, + webview: { + title: '内容视图', + }, installDialog: { tip: { tip1: '将项目放入指定目录中, 文件名不可有特殊字符(如已放入则忽略)', diff --git a/src/renderer/src/pages/lab/components/pluginCenter/index.vue b/src/renderer/src/pages/lab/components/pluginCenter/index.vue index f18033395..dbff03827 100644 --- a/src/renderer/src/pages/lab/components/pluginCenter/index.vue +++ b/src/renderer/src/pages/lab/components/pluginCenter/index.vue @@ -7,7 +7,6 @@
{{ $t('pages.lab.pluginCenter.control.install') }} - {{ $t('pages.lab.pluginCenter.file') }}
@@ -28,7 +27,7 @@

{{ $t('pages.lab.pluginCenter.installDialog.step') }}1

{{ $t('pages.lab.pluginCenter.installDialog.tip.tip1') }}

- {{ $t('pages.lab.pluginCenter.installDialog.goDir') }} + {{ $t('pages.lab.pluginCenter.installDialog.goDir') }}

{{ $t('pages.lab.pluginCenter.installDialog.step') }}2

@@ -38,68 +37,100 @@
+
-
- - - - - - - + -
-
-

{{ $t('pages.lab.pluginCenter.info.title') }}

-
- {{ pluginInfo.name }} - v{{ pluginInfo.version || '0.0.0' }} + +
+
+
+
+
-
- {{ $t('pages.lab.pluginCenter.info.author') }}: - {{ pluginInfo.author || $t('pages.lab.pluginCenter.empty') }} +
+

+ {{ pluginInfo.pluginName || '' }} + v{{ pluginInfo.version || '0.0.0' }} +

+ {{ pluginInfo.description || $t('pages.lab.pluginCenter.empty') }} +
+
+ + + +
+
+ + {{ pluginInfo.author || $t('pages.lab.pluginCenter.empty') }} +
+
-
- {{ $t('pages.lab.pluginCenter.info.desc') }}: - {{ pluginInfo.description || $t('pages.lab.pluginCenter.empty') }} +
+ {{ $t('pages.lab.pluginCenter.control.uninstall') }} + + + + + + {{ $t('pages.lab.pluginCenter.control.start') }} + {{ $t('pages.lab.pluginCenter.control.stop') }} + {{ $t('pages.lab.pluginCenter.control.devtool') }} + +
-
-

{{ $t('pages.lab.pluginCenter.control.title') }}

-
- {{ $t('pages.lab.pluginCenter.info.status') }}: - - {{ $t('pages.lab.pluginCenter.info.start') }} - {{ $t('pages.lab.pluginCenter.info.stop') }} - - -
- - {{ $t('pages.lab.pluginCenter.control.start') }} - {{ $t('pages.lab.pluginCenter.control.stop') }} - {{ $t('pages.lab.pluginCenter.control.uninstall') }} - -
-
+ +

{{ $t('pages.lab.pluginCenter.content.title') }}

+
+

{{ $t('pages.lab.pluginCenter.webview.title') }}

+
+ +
+
+
- - - diff --git a/src/renderer/src/components/player/src/assets/css/artplayer.css b/src/renderer/src/components/player/src/assets/css/artplayer.css new file mode 100644 index 000000000..375bc2aac --- /dev/null +++ b/src/renderer/src/components/player/src/assets/css/artplayer.css @@ -0,0 +1,102 @@ + +.art-danmuku-emitter .art-danmuku-send { + background: linear-gradient(254deg, #08cc7e, #0ccc4c) !important; +} + +.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-played { + background: linear-gradient(270deg, #00e038, #32ccff) !important; +} + +.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle .art-volume-loaded { + background-image: linear-gradient(90deg, #00e038, #32ccff) !important; +} + +.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:hover { + background: #fff !important; + box-shadow: 0 0 15px 0 #00d157; +} + +.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator { + background: #fff !important; + box-shadow: 0 0 15px 0 #00d157; + height: 13px !important; + width: 13px !important; +} + +.art-danmuku-emitter + .art-danmuku-left + .art-danmuku-style + .art-danmuku-style-panel + .art-danmuku-style-panel-inner + .art-danmuku-style-panel-modes + .art-danmuku-style-panel-mode.art-current { + background-color: #00e038 !important; + border: 1px solid #00e038 !important; +} + +.art-danmuku-emitter { + opacity: 0 !important; + pointer-events: none !important; +} + +.art-icon-switchOn .icon path { + fill: #00d157 !important; +} + +.art-video-player.art-setting-show .art-settings { + border-radius: 8px !important; +} + +.artplayer-plugin-danmuku .apd-config .apd-config-panel .apd-config-panel-inner { + background: #000000bf !important; + backdrop-filter: saturate(180%) blur(20px) !important; + border-radius: 8px !important; +} + +.artplayer-plugin-danmuku .apd-slider .apd-slider-progress { + background: linear-gradient(270deg, #00e038, #32ccff) !important; +} + +.apd-slider .apd-slider-dot { + background: #fff !important; + box-shadow: 0 0 15px 0 #00d157; +} + +.artplayer-plugin-danmuku .apd-toggle svg.apd-toggle-on path:nth-of-type(2) { + fill: #00d157 !important; +} + +.artplayer-plugin-danmuku .apd-slider .apd-slider-points .apd-slider-point { + background-color: #fff !important; +} + +.artplayer-plugin-danmuku .apd-config-other .apd-other:hover, +.artplayer-plugin-danmuku .apd-modes .apd-mode:hover { + color: #00d157 !important; +} + +.apd-mode svg.apd-mode-0-off path, +.apd-mode svg.apd-mode-1-off path, +.apd-mode svg.apd-mode-2-off path { + fill: #00d157 !important; +} + +.apd-config-other .apd-other svg.apd-check-on path { + fill: #00d157 !important; +} + +.artplayer-plugin-danmuku .apd-slider .apd-slider-steps .apd-slider-step { + color: #ddd !important; +} + +.art-controls .art-control { + min-width: 30px !important; +} + +[data-danmuku-emitter=false] .art-controls-center .artplayer-plugin-danmuku { + gap: 10px !important; +} + +.art-controls .art-controls-center { + padding: 0 5px !important; +} diff --git a/src/renderer/src/components/player/src/assets/css/dplayer.css b/src/renderer/src/components/player/src/assets/css/dplayer.css new file mode 100644 index 000000000..800cd474d --- /dev/null +++ b/src/renderer/src/components/player/src/assets/css/dplayer.css @@ -0,0 +1,190 @@ +.dplayer-controller { + padding: 0 10px !important; +} + +.dplayer-controller .dplayer-bar-wrap { + width: calc(100% - 20px) !important; +} + +.dplayer-controller .dplayer-icons .dplayer-full:hover .dplayer-full-in-icon { + display: none !important; +} + +.dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-played { + background: linear-gradient(270deg, #00e038, #32ccff) !important; +} + +.dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-played .dplayer-thumb { + background: #fff !important; + box-shadow: 0 0 15px 0 #00d157; + height: 13px !important; + width: 13px !important; +} + +.dplayer-controller + .dplayer-icons + .dplayer-volume + .dplayer-volume-bar-wrap + .dplayer-volume-bar + .dplayer-volume-bar-inner { + background-image: linear-gradient(90deg, #00e038, #32ccff) !important; +} + +.dplayer-controller + .dplayer-icons + .dplayer-volume + .dplayer-volume-bar-wrap + .dplayer-volume-bar + .dplayer-volume-bar-inner + .dplayer-thumb { + background: #fff !important; + box-shadow: 0 0 15px 0 #00d157; +} + +.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box { + border-radius: 8px !important; + background-color: rgba(17, 18, 20, 0.8) !important; + backdrop-filter: saturate(180%) blur(20px) !important; +} + +.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-item:hover, +.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-speed-item:hover { + background: hsla(0, 0%, 100%, 0.04) !important; +} + +.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-item:hover, +.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-speed-item:hover span { + color: #00d157 !important; +} + +.dplayer-controller + .dplayer-icons + .dplayer-setting + .dplayer-setting-danmaku + .dplayer-danmaku-bar-wrap + .dplayer-danmaku-bar + .dplayer-danmaku-bar-inner { + background: linear-gradient(90deg, #00e038, #32ccff) !important; +} + +.dplayer-controller + .dplayer-icons + .dplayer-setting + .dplayer-setting-danmaku + .dplayer-danmaku-bar-wrap + .dplayer-danmaku-bar + .dplayer-danmaku-bar-inner + .dplayer-thumb { + background: #fff !important; + box-shadow: 0 0 15px 0 #00d157; +} + +.dplayer-comment { + opacity: 0 !important; + pointer-events: none !important; + display: none !important; +} + +.dplayer-controller .dplayer-icons .dplayer-toggle input:checked + label:before { + background: #00d157 !important; +} + +.dplayer-danmaku .dplayer-danmaku-right.dplayer-danmaku-move { + will-change: transform; + -webkit-animation-name: 'danmaku'; + animation-name: 'danmaku'; + -webkit-animation-timing-function: linear; + animation-timing-function: linear; + -webkit-animation-play-state: paused; + animation-play-state: paused; +} + +.dplayer-icons-left { + left: 10px !important; +} + +.dplayer-icons-right { + right: 10px !important; +} + +.dplayer-full-icon { + margin-right: -10px !important; +} + +.dplayer-play-icon { + margin-left: -10px !important; +} + +.dplayer-controller .dplayer-icons .dplayer-icon { + position: relative; + box-sizing: border-box; + height: 40px; + margin-left: -5px; + margin-right: -5px; + cursor: pointer; +} + +.dplayer-controller .dplayer-icons .dplayer-icon .dplayer-icon-content { + position: relative; + top: 0; + left: 0; + cursor: pointer; + opacity: 1 !important; +} + +.dplayer-controller .dplayer-icons .dplayer-icon .dplayer-icon-content svg { + display: block; +} + +.dplayer-controller .dplayer-icons .dplayer-time, +.dplayer-controller .dplayer-icons .dplayer-live-badge { + min-width: 40px; + font-size: 14px; + color: #fff; + text-align: center; + display: inline-block; + line-height: 40px; +} + +.dplayer-controller .dplayer-icons .dplayer-time > :last-child { + color: rgba(255, 255, 255, 0.5) !important; +} + +.dplayer-menu { + padding: 14px 0; + font-size: 14px; + color: #ddd; + position: absolute; + top: 50%; + left: 50%; + background-color: rgba(26, 26, 26, 0.96); + border-radius: 5px; + z-index: 9999; +} + +.dplayer-info-panel { + position: absolute; + top: 5px !important; + left: 5px !important; + background: rgba(26, 26, 26, 0.92) !important; + border-radius: 5px !important; + z-index: 9999; +} + +.dplayer-controller .dplayer-bar-wrap .dplayer-bar, +.dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-loaded, +.dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-played { + border-radius: 10px; +} + +.dplayer-setting-showdan, .dplayer-setting-danunlimit { + display: none; +} + +.dplayer-menu .dplayer-menu-item a { + text-decoration: none; +} + +.dplayer-controller .dplayer-icons .dplayer-live-dot { + background: #00d157 !important; +} diff --git a/src/renderer/src/components/player/src/assets/css/index.less b/src/renderer/src/components/player/src/assets/css/index.less new file mode 100644 index 000000000..faeb61b06 --- /dev/null +++ b/src/renderer/src/components/player/src/assets/css/index.less @@ -0,0 +1,19 @@ +@import 'xgplayer/es/plugins/danmu/index.css'; + +@import './artplayer.css'; +@import './dplayer.css'; +@import './nplayer.css'; +@import './veplayer.css'; + +.multi-player { + position: relative; + width: 100%; + height: 100%; + background: url(../img/bg-player.jpg) center center no-repeat; + background-size: cover; + + .multi-mse { + width: 100%; + height: 100%; + }; +} \ No newline at end of file diff --git a/src/renderer/src/components/player/src/assets/css/nplayer.css b/src/renderer/src/components/player/src/assets/css/nplayer.css new file mode 100644 index 000000000..a5ce6d7ca --- /dev/null +++ b/src/renderer/src/components/player/src/assets/css/nplayer.css @@ -0,0 +1,204 @@ +.nplayer_control { + display: block; + position: absolute; + visibility: visible; + height: 48px; + left: 0; + right: 0; + bottom: 0; + opacity: 1; + z-index: 10; + background-image: linear-gradient(180deg, transparent, rgba(0, 0, 0, 0.37), rgba(0, 0, 0, 0.75), rgba(0, 0, 0, 0.75)); + transition: + opacity 0.5s ease, + visibility 0.5s ease; +} + +.nplayer_poster_play { + cursor: pointer; + position: relative !important; + transform: none !important; + left: 0 !important; + top: 0 !important; + height: 28px !important; + width: 28px !important; +} + +.nplayer_icon svg { + position: relative; + top: 50%; + transform: translateY(-50%); + cursor: pointer; +} + +.nplayer_danmaku_send { + height: 30px; + border-radius: 5px; + opacity: 0 !important; + pointer-events: none !important; +} + +.nplayer_danmaku_send .nplayer_icon { + position: relative; + top: 5px; +} + +.nplayer_control_volume_bars { + background: rgba(17, 18, 20, 0.8) !important; + backdrop-filter: saturate(180%) blur(20px) !important; + border-radius: 8px; + font-size: 14px; + height: 130px; + text-align: center; + width: 39px; + left: -5px !important; +} + +.nplayer_control_volume-hor .nplayer_control_volume_bars { + border-radius: 5px; + height: 30px; + top: 2px !important; +} + +.nplayer_control_volume_bar { + border-radius: 2px; + left: 18px; + position: relative; + width: 3px !important; + background-image: linear-gradient(90deg, #00e038, #32ccff) !important; +} + +.nplayer_control_volume_bar::before { + cursor: pointer; + background-color: #fff; + border-radius: 50%; + box-shadow: 0 0 15px 0 #00d157; + opacity: 1; + top: 0; + left: -4px; + position: absolute; + width: 11px; + height: 11px; + z-index: 5; +} + +.nplayer_control > .nplayer_control_bar:first-child { + height: 14px; + width: 100%; +} + +.nplayer_control_bar-top { + display: none !important; +} + +.nplayer_danmaku_send_btn { + background: linear-gradient(254deg, #08cc7e, #0ccc4c); + border-radius: 0 5px 5px 0; + padding: 4px 10px !important; +} + +.nplayer_progress_played { + background: linear-gradient(270deg, #00e038, #32ccff) !important; +} + +.nplayer_progress_dot { + border-radius: 50%; + height: 13px; + width: 13px; + background: #fff; + box-shadow: 0 0 15px 0 #00d157; + opacity: 1 !important; + left: -7px !important; +} + +.nplayer_progress_dot_inner { + background: transparent !important; +} + +.nplayer_control_setting-active .nplayer_icon { + transform: none !important; +} + +.nplayer_slider_track_inner { + background: linear-gradient(270deg, #00e038, #32ccff) !important; +} + +.nplayer_slider_dot { + background: #fff !important; + box-shadow: 0 0 15px 0 #00d157; +} + +.nplayer_switch-active { + background: #00e038 !important; +} + +.nplayer_popover-active .nplayer_popover_panel { + border-radius: 8px; + background-color: rgba(17, 18, 20, 0.8); + backdrop-filter: saturate(180%) blur(20px); + box-shadow: none !important; +} + +.nplayer_control_setting_item:hover, +.nplayer_control_setting_option:hover { + color: #fff !important; + background: hsla(0, 0%, 100%, 0.04) !important; +} + +.nplayer_checkbox-active:before { + background: #00e038 !important; + border-color: #00e038 !important; +} + +.nplayer_checkbox:hover { + color: #00e038 !important; +} + +.nplayer_control_time-live:before { + background: #00d157 !important; + width: 6px !important; + height: 6px !important; +} + +.nplayer_tooltip_content { + background: rgba(17, 18, 20, 0.8); + backdrop-filter: saturate(180%) blur(20px); + border-radius: 8px; +} + +.nplayer_control .nplayer_control_bar:nth-child(2) { + display: flex !important; + justify-content: space-between !important; +} + +.nplayer_danmaku_reset { + height: 28px; + line-height: 28px; + border-radius: 14px; + background-color: #2b2b2b; + text-align: center; + font-size: 12px; +} + +.xg-icon-setting, +.xg-icon-danmu { + fill: #fff; +} + +svg.xgplayer-danmu-open-svg circle { + fill: #fff; +} + +@media not all and (hover: none) { + .nplayer_tooltip:hover { + background: transparent !important; + } +} + +@media (any-hover: hover) { + .nplayer_control:hover { + cursor: default !important; + opacity: 1 !important; + pointer-events: auto !important; + } +} diff --git a/src/renderer/src/components/player/src/assets/css/veplayer.css b/src/renderer/src/components/player/src/assets/css/veplayer.css new file mode 100644 index 000000000..26e4489fe --- /dev/null +++ b/src/renderer/src/components/player/src/assets/css/veplayer.css @@ -0,0 +1,4619 @@ +@charset "UTF-8"; +.xgplayer .xg-panel-info { + position: absolute; + width: 480px; + background: rgba(0, 0, 0, 0.8); + color: #fff; + font-size: 14px; + font-weight: lighter; + padding: 40px 0 20px; + z-index: 8; + top: 10px; + left: 10px; + display: none; + border-radius: 4px; +} + +.xgplayer .xg-panel-detail { + list-style: none; + line-height: 20px; + padding: 0; + font: + 12px/1.5 PingFangSC-Regular, + Helvetica, + Arial, + Microsoft Yahei, + sans-serif; +} + +.xgplayer .xg-menu { + display: none; + background: rgba(30, 30, 32, 0.8); + position: absolute; + width: 180px; + padding: 10px 0; + color: rgba(255, 255, 255, 0.8); + overflow: hidden; + cursor: pointer; + font: + 14px/1.5 PingFangSC-Regular, + Helvetica, + Arial, + Microsoft Yahei, + sans-serif; + z-index: 8; + border-radius: 4px; +} + +.xgplayer .v-menu-item:hover, +.xgplayer .v-menu-item:hover .menu-item-icon { + color: #fff; +} + +.xgplayer .v-menu-item { + padding-left: 20px; + height: 34px; + line-height: 34px; + cursor: pointer; + max-width: 100%; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + display: flex; + align-items: center; +} + +.xgplayer .menu-item-icon svg { + display: block; + width: 20px; + height: 20px; +} + +.xgplayer .menu-item-content { + display: table-cell; + vertical-align: middle; + padding: 0 10px; + flex: 1; +} + +.xgplayer .xg-item-label { + display: inline-block; + text-align: right; + width: 110px; + margin-right: 8px; + color: rgba(255, 255, 255, 0.8); +} + +.xgplayer .menu-item-icon { + color: rgba(255, 255, 255, 0.6); +} + +.xgplayer .xg-interact-icon { + position: absolute; + top: 15px; + cursor: pointer; + color: rgba(255, 255, 255, 0.6); + width: 40px; + text-align: center; + line-height: 1; +} + +.xgplayer .xg-interact-icon .svg-hover { + font-size: 12px; + padding: 2px; + display: none; +} + +.xgplayer .xg-interact-icon svg:hover + .svg-hover { + display: block; +} + +.xgplayer .xg-interact-icon:hover { + color: #fff; +} + +.xgplayer .xg-info-close { + right: 15px; +} + +.xgplayer .xg-info-copy { + right: 45px; +} + +xg-text-track.xg-text-track { + font-family: + PingFang SC, + SF Pro SC, + SF Pro Text, + SF Pro Icons, + Helvetica Neue, + Helvetica, + Arial, + sans-serif; + -webkit-font-smoothing: antialiased; + position: absolute; + bottom: 0; + color: #fff; + left: 0; + right: 0; + pointer-events: none; + display: flex; + justify-content: center; +} + +xg-text-track.xg-text-track.text-track-no-fitvideo { + margin-bottom: 2%; +} + +xg-text-track.xg-text-track.text-track-hide { + opacity: 0; + visibility: hidden; +} + +xg-text-track.xg-text-track.text-track-show { + opacity: 1; + visibility: visible; +} + +xg-text-track.xg-text-track xg-text-track-inner { + display: block; + max-width: 92%; + text-align: center; +} + +xg-text-track.xg-text-track xg-text-track-span { + display: -webkit-box; + text-align: left; + text-overflow: ellipsis; + -webkit-box-orient: vertical; + overflow: hidden; + padding: 1px 4px; + -webkit-line-clamp: 1; + line-height: 120%; + word-break: break-word; +} + +xg-text-track.xg-text-track xg-text-track-span.text-track-deputy { + font-size: 75%; +} + +xg-text-track.xg-text-track xg-text-track-span.text-track-single { + -webkit-line-clamp: 1; +} + +xg-text-track.xg-text-track xg-text-track-span.text-track-double { + -webkit-line-clamp: 2; +} + +xg-text-track.xg-text-track xg-text-track-span.text-track-three { + -webkit-line-clamp: 3; +} + +xg-text-track.xg-text-track xg-text-track-span.text-track-space { + opacity: 0; + height: 0; + line-height: 0; +} + +xg-text-track.xg-text-track.text-track-bg xg-text-track-inner { + background-color: rgba(0, 0, 0, 0.54); + border-radius: 2px; +} + +xg-text-track.xg-text-track.text-track-stroke xg-text-track-inner { + background-color: none; + border-radius: 0; + text-shadow: + -1px 1px 0 rgba(0, 0, 0, 0.7), + 1px 1px 0 rgba(0, 0, 0, 0.7), + 1px -1px 0 rgba(0, 0, 0, 0.7), + -1px -1px 0 rgba(0, 0, 0, 0.7); +} + +.xgplayer-music, +.xgplayer-controls { + border-radius: 4px; +} + +.xgplayer.xgplayer-music { + overflow: visible; +} + +.xgplayer.xgplayer-music .xg-video-container { + width: 0; + height: 0; +} + +.xgplayer.xgplayer-music .xgplayer-controls { + height: 100%; + background: none; +} + +.xgplayer.xgplayer-music .xgplayer-controls .xgplayer-time.xg-time-left { + margin-left: 16px; +} + +.xgplayer.xgplayer-music .xgplayer-controls .xgplayer-time.xg-time-right { + margin-right: 16px; +} + +.xgplayer.xgplayer-music .xgplayer-controls .xgplayer-mobile .xgplayer-time.xg-time-left { + margin-left: 8px; +} + +.xgplayer.xgplayer-music .xgplayer-controls .xgplayer-mobile .xgplayer-time.xg-time-right { + margin-right: 8px; +} + +.xgplayer.xgplayer-music xg-icon .xg-tips { + display: none; +} + +.xgplayer.xgplayer-music .xgplayer-progress { + top: 0; + transform: none; + min-width: 80px; +} + +.xgplayer.xgplayer-music .xgplayer-progress .xgplayer-progress-point { + opacity: 0; +} + +.xgplayer.xgplayer-music xg-bar { + display: none; +} + +.xgplayer-music.xgplayer { + background: #1d2129; +} + +.xgplayer-music.xgplayer .flex-controls .xg-inner-controls { + bottom: 14px; +} + +.xgplayer-music.xgplayer .xg-pos { + left: 22px; + right: 22px; +} + +.xgplayer-music.xgplayer xg-icon .xg-tips { + top: -20px; +} + +.xgplayer-music.xgplayer .xgplayer-cover, +.xgplayer-music.xgplayer .xgplayer-time { + cursor: unset; +} + +.xgplayer-music.xgplayer .xgplayer-name { + top: -26px; + position: absolute; + color: #ddd; + display: block; + text-align: left; + white-space: nowrap; + cursor: unset; +} + +.xgplayer-music.xgplayer .xgplayer-backward .xgplayer-timescale, +.xgplayer-music.xgplayer .xgplayer-forward .xgplayer-timescale { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + font-weight: 700; + color: #fff; + font-size: 12px; +} + +.xgplayer-music.xgplayer .xgplayer-play .xgplayer-icon svg { + font-size: 20px; +} + +.xgplayer-music.xgplayer .xgplayer-music-mode .xg-icon-order { + display: block; +} + +.xgplayer-music.xgplayer .xgplayer-music-mode .xg-icon-loop, +.xgplayer-music.xgplayer .xgplayer-music-mode .xg-icon-sloop, +.xgplayer-music.xgplayer .xgplayer-music-mode .xg-icon-random, +.xgplayer-music.xgplayer .xgplayer-music-mode[data-state='loop'] .xg-icon-order { + display: none; +} + +.xgplayer-music.xgplayer .xgplayer-music-mode[data-state='loop'] .xg-icon-loop { + display: block; +} + +.xgplayer-music.xgplayer .xgplayer-music-mode[data-state='loop'] .xg-icon-sloop, +.xgplayer-music.xgplayer .xgplayer-music-mode[data-state='loop'] .xg-icon-random, +.xgplayer-music.xgplayer .xgplayer-music-mode[data-state='sloop'] .xg-icon-order, +.xgplayer-music.xgplayer .xgplayer-music-mode[data-state='sloop'] .xg-icon-loop { + display: none; +} + +.xgplayer-music.xgplayer .xgplayer-music-mode[data-state='sloop'] .xg-icon-sloop { + display: block; +} + +.xgplayer-music.xgplayer .xgplayer-music-mode[data-state='sloop'] .xg-icon-random, +.xgplayer-music.xgplayer .xgplayer-music-mode[data-state='random'] .xg-icon-order, +.xgplayer-music.xgplayer .xgplayer-music-mode[data-state='random'] .xg-icon-loop, +.xgplayer-music.xgplayer .xgplayer-music-mode[data-state='random'] .xg-icon-sloop { + display: none; +} + +.xgplayer-music.xgplayer .xgplayer-music-mode[data-state='random'] .xg-icon-random { + display: block; +} + +.xgplayer.not-allow-autoplay .xgplayer-controls, +.xgplayer.xgplayer-nostart .xgplayer-controls, +.xgplayer.xgplayer-inactive .controls-autohide { + pointer-events: none; + visibility: hidden; + cursor: default; + opacity: 0; +} + +.xgplayer.not-allow-autoplay .xgplayer-controls-initshow, +.xgplayer.xgplayer-nostart .xgplayer-controls-initshow { + pointer-events: auto; + visibility: visible; + opacity: 1; +} + +.xgplayer .xgplayer-controls { + display: block; + position: absolute; + visibility: visible; + height: 48px; + left: 0; + right: 0; + bottom: 0; + opacity: 1; + z-index: 10; + background-image: linear-gradient(180deg, transparent, rgba(0, 0, 0, 0.37), rgba(0, 0, 0, 0.75), rgba(0, 0, 0, 0.75)); + transition: + opacity 0.5s ease, + visibility 0.5s ease; +} + +.xgplayer .xgplayer-controls.show { + display: block; + opacity: 1; + visibility: visible; + pointer-events: auto; +} + +.xgplayer .xg-inner-controls { + position: absolute; + height: 40px; + bottom: 0; + justify-content: space-between; + display: flex; +} + +.xgplayer .xg-left-grid, +.xgplayer .xg-right-grid { + position: relative; + display: flex; + flex-wrap: wrap; + flex-shrink: 1; + height: 100%; + z-index: 1; +} + +.xgplayer .xg-right-grid { + flex-direction: row-reverse; +} + +.xgplayer .xg-right-grid > :first-child { + margin-right: 0; +} + +.xgplayer .xg-right-grid xg-icon { + margin-left: 0; +} + +.xgplayer .xg-left-grid > :first-child { + margin-left: 0; +} + +.xgplayer .xg-left-grid xg-icon { + margin-right: 0; +} + +.xgplayer .xg-center-grid { + display: block; + position: absolute; + left: 0; + right: 0; + outline: none; + top: -20px; + padding: 5px 0; + text-align: center; +} + +.xgplayer .flex-controls .xg-inner-controls { + justify-content: space-around; + display: flex; + bottom: 8px; +} + +.xgplayer .flex-controls .xg-center-grid { + display: flex; + flex: 1; + position: relative; + top: 0; + height: 100%; + justify-content: space-between; + align-items: center; + left: 0; + right: 0; + padding: 0 16px; +} + +.xgplayer.xgplayer-mobile .xg-center-grid { + z-index: 2; +} + +.xgplayer.xgplayer-mobile .flex-controls .xg-center-grid { + padding: 0 8px; +} + +.xgplayer .bottom-controls .xg-center-grid { + top: 20px; + padding: 0; +} + +.xgplayer .bottom-controls .xg-left-grid, +.xgplayer .bottom-controls .xg-right-grid { + bottom: 10px; +} + +.xgplayer .mini-controls { + background-image: none; +} + +.xgplayer .mini-controls .xg-inner-controls { + bottom: 0; + left: 0; + right: 0; +} + +.xgplayer .mini-controls .xg-center-grid { + bottom: -28px; + top: auto; + padding: 0; +} + +.xgplayer .mini-controls .xg-left-grid, +.xgplayer .mini-controls .xg-right-grid { + display: none; +} + +.xgplayer .controls-follow { + bottom: 70px; + transition: bottom 0.3s ease; +} + +.xgplayer.flex-controls .controls-follow { + bottom: 45px; +} + +.xgplayer.xgplayer-inactive .controls-follow, +.xgplayer.no-controls .controls-follow, +.xgplayer.mini-controls .controls-follow { + bottom: 10px; +} + +.xgplayer-fullscreen-parent { + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + z-index: 9999; +} + +.xgplayer-fullscreen-parent .xgplayer.xgplayer-is-cssfullscreen, +.xgplayer-fullscreen-parent .xgplayer.xgplayer-is-fullscreen { + z-index: 10; + position: absolute; +} + +.xgplayer-rotate-parent { + position: fixed; + top: 0; + left: 100%; + bottom: 0; + right: 0; + width: 100vh; + height: 100vw; + z-index: 9999; + transform-origin: top left; + transform: rotate(90deg); +} + +.xgplayer-rotate-parent .xgplayer.xgplayer-rotate-fullscreen { + position: absolute; + top: 0; + left: 0; + z-index: 10; + margin: 0; + padding: 0; + width: 100%; + height: 100%; + transform: rotate(0); +} + +.xgplayer-rotate-parent .xgplayer-mobile video { + z-index: -1; +} + +.xgplayer { + position: relative; + width: 100%; + height: 100%; + overflow: hidden; + font-family: + PingFang SC, + Helvetica Neue, + Helvetica, + STHeiTi, + Microsoft YaHei, + WenQuanYi Micro Hei, + sans-serif; + font-size: 14px; + font-weight: 400; + background: #000; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-touch-callout: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; +} + +.xgplayer * { + margin: 0; + padding: 0; + border: 0; + vertical-align: baseline; + white-space: normal; + word-wrap: normal; + overflow-wrap: normal; +} + +.xgplayer ul, +.xgplayer li { + list-style: none; +} + +.xgplayer .xgplayer-none { + display: none; +} + +.xgplayer.xgplayer-is-fullscreen { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + margin: 0; + padding: 0; + z-index: 9999; +} + +.xgplayer.xgplayer-is-cssfullscreen { + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + z-index: 9999; +} + +.xgplayer.xgplayer-rotate-fullscreen { + position: fixed; + top: 0; + left: 100%; + bottom: 0; + right: 0; + width: 100vh; + height: 100vw; + transform-origin: top left; + transform: rotate(90deg); + z-index: 9999; +} + +.xgplayer.xgplayer-rotate-fullscreen.xgplayer-mobile video { + z-index: -1; +} + +.xgplayer xg-video-container.xg-video-container { + position: absolute; + top: 0; + bottom: 48px; + display: block; + width: 100%; +} + +.xgplayer video { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + outline: none; +} + +.xgplayer[data-xgfill='contain'] video { + object-fit: contain; +} + +.xgplayer[data-xgfill='cover'] video { + object-fit: cover; +} + +.xgplayer[data-xgfill='fill'] video { + object-fit: fill; +} + +.xgplayer .xg-pos { + left: 10px; + right: 10px; +} + +.xgplayer .xg-margin { + margin-left: 16px; + margin-right: 16px; +} + +.xgplayer .xg-bottom { + bottom: 0; +} + +.xgplayer .btn-text { + position: relative; + top: 50%; + height: 24px; + font-size: 13px; + text-align: center; +} + +.xgplayer .btn-text span { + display: inline-block; + min-width: 52px; + height: 24px; + line-height: 24px; + background: rgba(0, 0, 0, 0.38); + border-radius: 12px; +} + +.xgplayer xg-icon { + position: relative; + box-sizing: border-box; + height: 40px; + margin-left: 16px; + margin-right: 16px; + cursor: pointer; + color: rgba(255, 255, 255, 0.8); + fill: #fff; +} + +.xgplayer xg-icon .xg-tips { + top: -30px; + left: 50%; + transform: translate(-50%); +} + +.xgplayer xg-icon:active .xg-tips, +.xgplayer xg-icon:hover .xg-tips { + display: block; +} + +.xgplayer xg-icon:active .xg-tips.hide, +.xgplayer xg-icon:hover .xg-tips.hide { + display: none; +} + +.xgplayer xg-icon .xgplayer-icon { + position: relative; + top: 50%; + transform: translateY(-50%); + cursor: pointer; +} + +.xgplayer xg-icon .xg-icon-disable { + cursor: not-allowed; +} + +.xgplayer xg-icon .xg-img { + width: 100%; +} + +.xgplayer xg-icon svg, +.xgplayer xg-icon img { + height: 100%; + display: block; +} + +.xgplayer xg-bar { + display: block; +} + +.xgplayer.xgplayer-inactive xg-bar, +.xgplayer.xgplayer-mini xg-bar { + display: none; +} + +.xgplayer.xgplayer-inactive .xg-top-bar { + display: flex; +} + +.xgplayer.xgplayer-inactive .xg-top-bar.top-bar-autohide { + display: none; +} + +.xgplayer .xg-top-bar { + position: absolute; + z-index: 10; + top: 0; + padding: 0 16px; + display: flex; + height: 50px; +} + +.xgplayer .xg-top-bar xg-icon { + position: relative; + top: 10px; + left: 0; + width: 34px; + margin-top: 0; +} + +.xgplayer .xg-top-bar xg-icon:first-child { + margin-left: 0; +} + +.xgplayer .xg-left-bar, +.xgplayer .xg-right-bar { + position: absolute; + z-index: 9; + top: 50px; + bottom: 50px; + width: 50px; +} + +.xgplayer .xg-left-bar { + left: 0; +} + +.xgplayer .xg-right-bar { + right: 0; +} + +.xgplayer .xg-tips { + display: none; + position: absolute; + padding: 4px 6px; + background: rgba(0, 0, 0, 0.54); + border-radius: 4px; + font-size: 11px; + color: #fff; + text-align: center; + white-space: nowrap; + opacity: 0.85; +} + +.xgplayer .xg-margin { + left: 0px; + right: 0px; +} + +.xgplayer-mobile { + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +.xgplayer-mobile * { + text-decoration: none; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +.xgplayer-mobile.xgplayer-rotate-fullscreen .xg-top-bar, +.xgplayer-mobile.xgplayer-rotate-fullscreen .xg-pos { + left: 6%; + right: 6%; +} + +.xgplayer-mobile xg-icon:hover .xg-tips { + display: none; +} + +.xg-list-slide-scroll::-webkit-scrollbar-track { + background-color: transparent; + display: none; +} + +.xg-list-slide-scroll:hover::-webkit-scrollbar-track { + display: block; +} + +.xg-list-slide-scroll::-webkit-scrollbar { + -webkit-appearance: none; + appearance: none; + background: rgba(0, 0, 0, 0); + height: 4px; + width: 4px; +} + +.xg-list-slide-scroll::-webkit-scrollbar-corner { + background: transparent; + display: none; +} + +.xg-list-slide-scroll::-webkit-scrollbar-thumb { + background: hsla(0, 0%, 100%, 0.5); + border-radius: 3px; + display: none; + width: 4px; +} + +.xg-list-slide-scroll:hover::-webkit-scrollbar-thumb { + display: block; +} + +@media only screen and (max-width: 480px) { + .xgplayer-mobile xg-icon { + margin-right: 10px; + margin-left: 10px; + } + + .xgplayer-mobile .xg-top-bar { + left: 10px; + right: 10px; + } +} + +@media screen and (orientation: portrait) { + .xgplayer-mobile.xgplayer-is-fullscreen .xgplayer-controls, + .xgplayer-mobile.xgplayer-is-cssfullscreen .xgplayer-controls { + bottom: 34px; + bottom: constant(safe-area-inset-bottom); + bottom: env(safe-area-inset-bottom); + } + + .xgplayer-mobile.xgplayer-is-fullscreen .xg-top-bar, + .xgplayer-mobile.xgplayer-is-cssfullscreen .xg-top-bar { + top: 34px; + top: constant(safe-area-inset-top); + top: env(safe-area-inset-top); + } +} + +@media only screen and (orientation: landscape) { + .xgplayer-mobile.xgplayer-is-fullscreen .xg-top-bar, + .xgplayer-mobile.xgplayer-is-fullscreen .xg-pos { + left: 6%; + right: 6%; + } + + .xgplayer-mobile.xgplayer-rotate-fullscreen { + left: 0; + width: 100vw; + height: 100vh; + transform: rotate(0); + } +} + +.xgplayer .xgplayer-screen-container { + display: block; + width: 100%; +} + +.xgplayer .xg-options-icon { + display: none; + cursor: pointer; +} + +.xgplayer .xg-options-icon.show { + display: block; +} + +@-webkit-keyframes xg_right_options_active { + 0% { + transform: translate(50%); + } + + to { + transform: translate(-50%); + } +} + +@keyframes xg_right_options_active { + 0% { + transform: translate(50%); + } + + to { + transform: translate(-50%); + } +} + +@-webkit-keyframes xg_right_options_hide { + 0% { + transform: translate(-50%); + } + + to { + transform: translate(50%); + } +} + +@keyframes xg_right_options_hide { + 0% { + transform: translate(-50%); + } + + to { + transform: translate(50%); + } +} + +@-webkit-keyframes xg_left_options_active { + 0% { + transform: translate(-50%); + } + + to { + transform: translate(50%); + } +} + +@keyframes xg_left_options_active { + 0% { + transform: translate(-50%); + } + + to { + transform: translate(50%); + } +} + +@-webkit-keyframes xg_left_options_hide { + 0% { + transform: translate(50%); + } + + to { + transform: translate(-50%); + } +} + +@keyframes xg_left_options_hide { + 0% { + transform: translate(50%); + } + + to { + transform: translate(-50%); + } +} + +.xgplayer .xg-options-list { + display: none; + position: absolute; + z-index: 5; + width: 78px; + right: 50%; + bottom: 100%; + background: rgba(0, 0, 0, 0.54); + border-radius: 1px; + transform: translate(50%); + cursor: pointer; + overflow: auto; + height: 0; + opacity: 0.85; + font-size: 14px; + color: rgba(255, 255, 255, 0.8); +} + +.xgplayer .xg-options-list li { + height: 20px; + line-height: 20px; + position: relative; + padding: 4px 0; + text-align: center; +} + +.xgplayer .xg-options-list li:hover, +.xgplayer .xg-options-list li.selected { + color: red; + opacity: 1; +} + +.xgplayer .xg-options-list li:nth-child(1) { + position: relative; + margin-top: 12px; +} + +.xgplayer .xg-options-list li:last-child { + position: relative; + margin-bottom: 12px; +} + +.xgplayer .xg-options-list:hover { + opacity: 1; +} + +.xgplayer .xg-options-list.active { + display: block; + height: auto; +} + +.xgplayer .xg-options-list.xg-side-list { + width: 20%; + height: 100%; + bottom: 0; + background: rgba(0, 0, 0, 0.9); + display: flex; + flex-direction: column; + box-sizing: border-box; +} + +.xgplayer .xg-options-list.xg-side-list li { + flex: 1; + width: 100%; + padding: 0; + position: relative; +} + +.xgplayer .xg-options-list.xg-side-list li span { + display: block; + position: relative; + top: 50%; + transform: translateY(-50%); + pointer-events: none; +} + +.xgplayer .xg-options-list.xg-side-list li:nth-child(1) { + margin-top: 20px; +} + +.xgplayer .xg-options-list.xg-side-list li:last-child { + margin-bottom: 20px; +} + +.xgplayer .xg-options-list.xg-right-side { + right: -10.5%; +} + +.xgplayer .xg-options-list.xg-right-side.active { + height: 100%; + -webkit-animation: xg_right_options_active 0.2s ease-out forwards; + animation: xg_right_options_active 0.2s ease-out forwards; +} + +.xgplayer .xg-options-list.xg-right-side.hide { + height: 100%; + -webkit-animation: xg_right_options_hide 0.2s ease-in forwards; + animation: xg_right_options_hide 0.2s ease-in forwards; +} + +.xgplayer .xg-options-list.xg-left-side { + left: -10.5%; + transform: translate(-50%); +} + +.xgplayer .xg-options-list.xg-left-side.active { + height: 100%; + -webkit-animation: xg_left_options_active 0.2s ease-out forwards; + animation: xg_left_options_active 0.2s ease-out forwards; +} + +.xgplayer .xg-options-list.xg-left-side.hide { + height: 100%; + -webkit-animation: xg_left_options_hide 0.2s ease-in forwards; + animation: xg_left_options_hide 0.2s ease-in forwards; +} + +@media only screen and (max-width: 480px) { + .xgplayer-mobile .xg-options-icon.portrait { + display: none; + } +} + +.xgplayer xg-thumbnail { + display: block; +} + +.xgplayer-replay { + display: none; +} + +.xgplayer .xgplayer-replay { + display: none; + position: absolute; + left: 50%; + top: 50%; + width: 100px; + height: 100px; + justify-content: center; + align-items: center; + flex-direction: column; + z-index: 5; + transform: translate(-50%, -50%); + cursor: pointer; +} + +.xgplayer .xgplayer-replay .xgplayer-replay-txt { + display: inline-block; + font-size: 14px; + color: #fff; + line-height: 34px; + text-align: center; +} + +.xgplayer.xgplayer-mobile .xgplayer-replay-svg { + width: 50px; + height: 50px; +} + +.xgplayer.xgplayer-mobile .xgplayer-replay-txt { + line-height: 24px; + font-size: 12px; +} + +.xgplayer .xgplayer-poster { + display: block; + opacity: 1; + visibility: visible; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-position: center center; + background-size: 100% auto; + background-repeat: no-repeat; + transition: + opacity 0.3s ease, + visibility 0.3s ease; + pointer-events: none; +} + +.xgplayer .xgplayer-poster.hide, +.xgplayer.xgplayer-playing .xgplayer-poster { + opacity: 0; + visibility: hidden; +} + +.xgplayer.xgplayer-playing .xg-not-hidden, +.xgplayer.xgplayer-is-enter .xgplayer-poster.xg-showplay, +.xgplayer.xgplayer-playing .xgplayer-poster.xg-showplay, +.xgplayer.xgplayer-nostart .xgplayer-poster, +.xgplayer.xgplayer-ended .xgplayer-poster, +.xgplayer.not-allow-autoplay .xgplayer-poster { + opacity: 1; + visibility: visible; +} + +.xgplayer.xgplayer-nostart .xgplayer-poster.hide, +.xgplayer.xgplayer-ended .xgplayer-poster.hide, +.xgplayer.not-allow-autoplay .xgplayer-poster.hide { + opacity: 0; + visibility: hidden; +} + +@-webkit-keyframes playPause { + 0% { + transform: scale(1); + opacity: 1; + } + + 99% { + transform: scale(1.3); + opacity: 0; + } + + to { + transform: scale(1); + opacity: 0; + } +} + +@keyframes playPause { + 0% { + transform: scale(1); + opacity: 1; + } + + 99% { + transform: scale(1.3); + opacity: 0; + } + + to { + transform: scale(1); + opacity: 0; + } +} + +.xgplayer xg-start-inner { + display: block; + width: 100%; + height: 100%; + overflow: hidden; + border-radius: 50%; + background: rgba(0, 0, 0, 0.38); +} + +.xgplayer .xgplayer-start { + width: 70px; + height: 70px; + position: absolute; + left: 50%; + top: 50%; + z-index: 5; + transform: translate(-50%, -50%); + cursor: pointer; +} + +.xgplayer .xgplayer-start svg { + width: 100%; + height: 100%; +} + +.xgplayer .xgplayer-start.hide, +.xgplayer .xgplayer-start.focus-hide { + display: none; + pointer-events: none; +} + +.xgplayer .xgplayer-start:hover { + opacity: 0.85; +} + +.xgplayer .xgplayer-start .xg-icon-play { + display: block; +} + +.xgplayer .xgplayer-start .xg-icon-pause, +.xgplayer .xgplayer-start[data-state='pause'] .xg-icon-play { + display: none; +} + +.xgplayer .xgplayer-start[data-state='pause'] .xg-icon-pause, +.xgplayer .xgplayer-start.interact { + display: block; +} + +.xgplayer .xgplayer-start.interact xg-start-inner { + -webkit-animation: playPause 0.4s 0.1s ease-out forwards; + animation: playPause 0.4s 0.1s ease-out forwards; +} + +.xgplayer .xgplayer-start.show { + display: block; +} + +.xgplayer.xgplayer-mobile xg-start-inner { + background: initial; + border-radius: 0; +} + +.xgplayer.xgplayer-mobile .xgplayer-start { + height: 50px; + width: 50px; +} + +.xgplayer.xgplayer-mobile .xgplayer-start:hover { + opacity: 1; +} + +.xgplayer.xgplayer-inactive .xgplayer-start.auto-hide, +.xgplayer.xgplayer-is-enter .xgplayer-start.auto-hide, +.xgplayer.xgplayer-isloading.xgplayer-playing .xgplayer-start, +.xgplayer.xgplayer-is-enter .xgplayer-start, +.xgplayer.xgplayer-is-error .xgplayer-start, +.xgplayer.xgplayer-is-enter .xgplayer-start.show, +.xgplayer.xgplayer-is-error .xgplayer-start.show { + display: none; +} + +.xgplayer-enter { + display: none; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.8); + z-index: 5; + pointer-events: none; +} + +.xgplayer-enter .show { + display: block; +} + +.xgplayer-enter .xgplayer-enter-spinner { + display: block; + position: absolute; + z-index: 1; + left: 50%; + top: 50%; + height: 100px; + width: 100px; + transform: translate(-50%, -50%); +} + +.xgplayer-enter .xgplayer-enter-spinner div { + width: 6%; + height: 13%; + background-color: rgba(255, 255, 255, 0.7); + position: absolute; + left: 45%; + top: 45%; + opacity: 0; + border-radius: 30px; + -webkit-animation: fade 1s linear infinite; + animation: fade 1s linear infinite; +} + +.xgplayer-enter .xgplayer-enter-spinner div.xgplayer-enter-bar1 { + transform: rotate(0) translateY(-140%); + -webkit-animation-delay: -0s; + animation-delay: -0s; +} + +.xgplayer-enter .xgplayer-enter-spinner div.xgplayer-enter-bar2 { + transform: rotate(30deg) translateY(-140%); + -webkit-animation-delay: -0.9163s; + animation-delay: -0.9163s; +} + +.xgplayer-enter .xgplayer-enter-spinner div.xgplayer-enter-bar3 { + transform: rotate(60deg) translateY(-140%); + -webkit-animation-delay: -0.833s; + animation-delay: -0.833s; +} + +.xgplayer-enter .xgplayer-enter-spinner div.xgplayer-enter-bar4 { + transform: rotate(90deg) translateY(-140%); + -webkit-animation-delay: -0.7497s; + animation-delay: -0.7497s; +} + +.xgplayer-enter .xgplayer-enter-spinner div.xgplayer-enter-bar5 { + transform: rotate(120deg) translateY(-140%); + -webkit-animation-delay: -0.6664s; + animation-delay: -0.6664s; +} + +.xgplayer-enter .xgplayer-enter-spinner div.xgplayer-enter-bar6 { + transform: rotate(150deg) translateY(-140%); + -webkit-animation-delay: -0.5831s; + animation-delay: -0.5831s; +} + +.xgplayer-enter .xgplayer-enter-spinner div.xgplayer-enter-bar7 { + transform: rotate(180deg) translateY(-140%); + -webkit-animation-delay: -0.4998s; + animation-delay: -0.4998s; +} + +.xgplayer-enter .xgplayer-enter-spinner div.xgplayer-enter-bar8 { + transform: rotate(210deg) translateY(-140%); + -webkit-animation-delay: -0.4165s; + animation-delay: -0.4165s; +} + +.xgplayer-enter .xgplayer-enter-spinner div.xgplayer-enter-bar9 { + transform: rotate(240deg) translateY(-140%); + -webkit-animation-delay: -0.3332s; + animation-delay: -0.3332s; +} + +.xgplayer-enter .xgplayer-enter-spinner div.xgplayer-enter-bar10 { + transform: rotate(270deg) translateY(-140%); + -webkit-animation-delay: -0.2499s; + animation-delay: -0.2499s; +} + +.xgplayer-enter .xgplayer-enter-spinner div.xgplayer-enter-bar11 { + transform: rotate(300deg) translateY(-140%); + -webkit-animation-delay: -0.1666s; + animation-delay: -0.1666s; +} + +.xgplayer-enter .xgplayer-enter-spinner div.xgplayer-enter-bar12 { + transform: rotate(330deg) translateY(-142%); + -webkit-animation-delay: -0.0833s; + animation-delay: -0.0833s; +} + +@-webkit-keyframes fade { + 0% { + opacity: 1; + } + + to { + opacity: 0.25; + } +} + +@keyframes fade { + 0% { + opacity: 1; + } + + to { + opacity: 0.25; + } +} + +.xgplayer.xgplayer-is-enter .xgplayer-enter { + display: block; + opacity: 1; + transition: opacity 0.3s; +} + +.xgplayer.xgplayer-nostart .xgplayer-enter { + display: none; +} + +.xgplayer.xgplayer-mobile .xgplayer-enter .xgplayer-enter-spinner { + width: 70px; + height: 70px; +} + +.xg-mini-layer { + display: none; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 11; + background: linear-gradient(180deg, rgba(57, 57, 57, 0.9), rgba(57, 57, 57, 0) 50.27%); +} + +.xg-mini-layer .mask { + pointer-events: none; + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + background-color: rgba(0, 0, 0, 0.4); +} + +.xg-mini-layer xg-mini-header { + display: flex; + top: 0; + left: 0; + right: 40px; + box-sizing: border-box; + padding: 10px 3px 0 8px; + justify-content: space-between; + color: #fff; + font-size: 14px; + position: absolute; + z-index: 22; +} + +.xg-mini-layer xg-mini-header .xgplayer-pip-disableBtn { + pointer-events: all; +} + +.xg-mini-layer xg-mini-header #disabledMini { + display: none; + position: relative; +} + +.xg-mini-layer xg-mini-header #disabledMini + label { + cursor: pointer; + position: relative; + display: flex; + align-items: center; +} + +.xg-mini-layer xg-mini-header #disabledMini + label:before { + content: ''; + color: #ff142b; + background-color: transparent; + border-radius: 2px; + border: solid 1px #cdcdcd; + width: 16px; + height: 16px; + display: inline-block; + text-align: center; + vertical-align: middle; + line-height: 16px; + margin-right: 7px; +} + +.xg-mini-layer xg-mini-header #disabledMini:checked + label { + color: #ff142b; +} + +.xg-mini-layer xg-mini-header #disabledMini:checked + label:before { + border-color: #ff142b; +} + +.xg-mini-layer xg-mini-header #disabledMini:checked + label:after { + content: ''; + position: absolute; + width: 4px; + height: 8px; + border-color: #ff142b; + border-style: solid; + border-width: 0px 2px 2px 0px; + transform: rotate(45deg); + left: 6px; + top: 5px; +} + +.xg-mini-layer xg-mini-header .xgplayer-mini-disableBtn xg-tips { + position: absolute; + padding: 4px 6px; + white-space: nowrap; + bottom: -30px; + right: 15px; + border-radius: 4px; + background-color: rgba(0, 0, 0, 0.54); + display: none; +} + +.xg-mini-layer xg-mini-header .xgplayer-mini-disableBtn:hover #disabledMini + label:before { + border-color: #ff142b; +} + +.xg-mini-layer xg-mini-header .xgplayer-mini-disableBtn:hover #disabledMini + label { + color: #ff142b; +} + +.xg-mini-layer xg-mini-header .xgplayer-mini-disableBtn:hover xg-tips { + display: block; +} + +.xg-mini-layer .mini-cancel-btn { + cursor: pointer; + display: block; + color: #fff; + width: 40px; + height: 38px; + position: absolute; + right: 0; + top: 0; + text-align: center; + line-height: 38px; +} + +.xg-mini-layer .play-icon { + cursor: pointer; + height: 48px; + width: 48px; + position: absolute; + background: rgba(0, 0, 0, 0.54); + border-radius: 24px; + top: 50%; + left: 50%; + margin: -24px 0 0 -24px; +} + +.xg-mini-layer .play-icon svg, +.xg-mini-layer .play-icon img { + width: 50px; + height: 50px; + fill: #faf7f7; +} + +.xg-mini-layer .xg-icon-play { + display: none; +} + +.xg-mini-layer .xg-icon-pause, +.xg-mini-layer[data-state='pause'] .xg-icon-play { + display: block; +} + +.xg-mini-layer[data-state='pause'] .xg-icon-pause { + display: none; +} + +.xgplayer-miniicon { + position: relative; + outline: none; + display: block; +} + +.xgplayer-miniicon .name { + text-align: center; + font-size: 13px; + line-height: 20px; + height: 20px; + color: rgba(255, 255, 255, 0.8); + line-height: 40px; +} + +.xgplayer-miniicon .name span { + font-size: 13px; + width: 60px; + height: 20px; + line-height: 20px; + background: rgba(0, 0, 0, 0.38); + border-radius: 10px; + display: inline-block; + vertical-align: middle; +} + +.xgplayer-mini { + position: fixed; + width: 320px; + height: 180px; + z-index: 91; + box-shadow: 0 4px 7px 2px rgba(0, 0, 0, 0.2); +} + +.xgplayer-mini:hover { + cursor: move; +} + +.xgplayer-mini:hover .xg-mini-layer { + display: block; +} + +.xgplayer-mini.xgplayer-ended .xg-mini-layer { + display: none; +} + +.xgplayer-mobile .xg-mini-layer .play-icon { + background: none; + border-radius: initial; +} + +.xgplayer.xgplayer-inactive { + cursor: none; +} + +.xgplayer xg-thumbnail { + display: block; +} + +.xgplayer xg-trigger { + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; +} + +.xgplayer xg-trigger .time-preview { + display: none; + position: absolute; + width: 200px; + margin: 0 auto; + padding: 0 20px 30px; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + color: #fff; + text-shadow: 0 0 1px rgba(0, 0, 0, 0.54); + font-size: 18px; + text-align: center; + pointer-events: none; +} + +.xgplayer xg-trigger .time-preview span { + line-height: 24px; +} + +.xgplayer xg-trigger .time-preview .xg-cur { + color: red; +} + +.xgplayer xg-trigger .time-preview .xg-separator { + font-size: 14px; +} + +.xgplayer xg-trigger .time-preview .xg-seek-show { + transform: translate(-10px); +} + +.xgplayer xg-trigger .time-preview .xg-seek-show.xg-back .xg-seek-pre { + transform: rotate(180deg) translate(-5px); +} + +.xgplayer xg-trigger .time-preview .xg-seek-show.hide-seek-icon .xg-seek-icon { + display: none; +} + +.xgplayer xg-trigger .time-preview .xg-bar { + width: 96px; + height: 2px; + margin: 8px auto 0; + border-radius: 10px; + box-sizing: content-box; + background: rgba(255, 255, 255, 0.3); +} + +.xgplayer xg-trigger .time-preview .xg-bar .xg-curbar { + width: 0; + height: 100%; + background-color: red; +} + +.xgplayer xg-trigger .time-preview .xg-bar.hide { + display: none; +} + +.xgplayer xg-trigger .mobile-thumbnail { + position: relative; + left: 50%; + transform: translate(-50%); +} + +.xgplayer xg-trigger .xg-top-note { + position: absolute; + height: 32px; + width: 135px; + top: 26px; + left: 50%; + margin-left: -78px; + background: rgba(0, 0, 0, 0.3); + border-radius: 100px; + color: #fff; +} + +.xgplayer xg-trigger .xg-top-note span { + display: block; + line-height: 32px; + height: 32px; + font-size: 13px; + text-align: center; +} + +.xgplayer xg-trigger .xg-top-note i { + color: red; + margin: 0 5px; +} + +.xgplayer xg-trigger .xg-playbackrate { + display: none; +} + +.xgplayer xg-trigger[data-xg-action='seeking'] .time-preview { + display: block; +} + +.xgplayer xg-trigger[data-xg-action='playbackrate'] .xg-playbackrate { + display: block; +} + +.xgplayer .gradient { + display: none; + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + pointer-events: none; + background-image: linear-gradient( + rgba(0, 0, 0, 0.6), + rgba(0, 0, 0, 0.36) 20%, + rgba(0, 0, 0, 0) 36%, + rgba(0, 0, 0, 0) 70%, + rgba(0, 0, 0, 0.24) 77%, + rgba(0, 0, 0, 0.36) 83%, + rgba(0, 0, 0, 0.6) + ); +} + +.xgplayer .gradient.top { + background-image: linear-gradient( + rgba(0, 0, 0, 0.6), + rgba(0, 0, 0, 0.36) 20%, + rgba(0, 0, 0, 0) 36%, + rgba(0, 0, 0, 0) 70% + ); +} + +.xgplayer .gradient.bottom { + background-image: linear-gradient( + rgba(0, 0, 0, 0) 70%, + rgba(0, 0, 0, 0.24) 77%, + rgba(0, 0, 0, 0.36) 83%, + rgba(0, 0, 0, 0.6) + ); +} + +.xgplayer .gradient.none, +.xgplayer-mobile .xgplayer-controls { + background-image: initial; +} + +.xgplayer-mobile.xgplayer-playing .gradient { + display: block; +} + +.xgplayer-mobile.xgplayer-inactive .gradient { + background-image: initial; +} + +.xgplayer-mobile .xgmask { + position: absolute; + height: 100%; + z-index: 10; + top: 0; + left: 0; + width: 100%; + pointer-events: none; + background-color: rgba(0, 0, 0, 0); +} + +@media (prefers-color-scheme: dark) { + .xgplayer-mobile xg-trigger .time-preview { + color: #fff; + } + + .xgplayer-mobile xg-trigger .time-preview span.xg-cur { + color: red; + } + + .xgplayer-mobile xg-trigger .time-preview .xg-bar { + background-color: rgba(255, 255, 255, 0.3); + } + + .xgplayer-mobile xg-trigger .time-preview .xg-bar.xg-curbar { + background-color: red; + } +} + +@-webkit-keyframes loadingRotate { + 0% { + transform: rotate(0); + } + + 25% { + transform: rotate(90deg); + } + + 50% { + transform: rotate(180deg); + } + + 75% { + transform: rotate(270deg); + } + + to { + transform: rotate(360deg); + } +} + +@keyframes loadingRotate { + 0% { + transform: rotate(0); + } + + 25% { + transform: rotate(90deg); + } + + 50% { + transform: rotate(180deg); + } + + 75% { + transform: rotate(270deg); + } + + to { + transform: rotate(360deg); + } +} + +@-webkit-keyframes loadingDashOffset { + 0% { + stroke-dashoffset: 236; + } + + to { + stroke-dashoffset: 0; + } +} + +@keyframes loadingDashOffset { + 0% { + stroke-dashoffset: 236; + } + + to { + stroke-dashoffset: 0; + } +} + +xg-loading-inner { + display: block; + height: 100%; + width: 100%; + transform-origin: center; + -webkit-animation: loadingRotate 1s 0.1s linear infinite; + animation: loadingRotate 1s 0.1s linear infinite; +} + +.xgplayer-loading { + display: none; + width: 70px; + height: 70px; + overflow: hidden; + position: absolute; + z-index: 10; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + pointer-events: none; +} + +.xgplayer-loading svg, +.xgplayer-loading img { + width: 100%; + height: 100%; +} + +.xgplayer-mobile .xgplayer-loading { + width: 50px; + height: 50px; +} + +.xgplayer-isloading .xgplayer-loading { + display: block; +} + +.xgplayer-nostart .xgplayer-loading, +.xgplayer-pause .xgplayer-loading, +.xgplayer-is-enter .xgplayer-loading, +.xgplayer-is-ended .xgplayer-loading, +.xgplayer-is-error .xgplayer-loading { + display: none; +} + +.xgplayer .xgplayer-progress { + display: flex; + align-items: center; + position: relative; + min-width: 50px; + height: 12px; + left: 0; + right: 0; + top: 0; + outline: none; + flex: 1; + cursor: pointer; +} + +.xgplayer .xgplayer-progress-outer { + position: relative; + width: 100%; + height: 2px; + border-radius: 3px; + cursor: pointer; +} + +.xgplayer .progress-list { + display: flex; + height: 100%; + width: 100%; + border-radius: inherit; +} + +.xgplayer .xgplayer-progress-inner { + position: relative; + flex: 1; + height: 100%; + background: rgba(255, 255, 255, 0.3); + transition: + height 0.2s ease-in, + opacity 0.2s ease-out; + border-radius: inherit; + margin-right: 2px; + pointer-events: none; +} + +.xgplayer .xgplayer-progress-inner:last-child, +.xgplayer .xgplayer-progress-inner:only-child { + margin-right: 0; +} + +.xgplayer .inner-focus-point { + background: #fff; + position: relative; +} + +.xgplayer .inner-focus-point:before, +.xgplayer .inner-focus-point:after { + position: absolute; + top: 0; + content: ' '; + display: block; + width: 2px; + height: 300%; + top: 50%; + z-index: 1; + transform: translateY(-50%); + border-radius: 3px; + background: #fff; +} + +.xgplayer .inner-focus-point:before { + left: 0; +} + +.xgplayer .inner-focus-point:after { + right: 0; +} + +.xgplayer .xgplayer-progress-cache, +.xgplayer .xgplayer-progress-played { + display: block; + height: 100%; + width: 0; + position: absolute; + top: 0; + left: 0; + border-radius: inherit; +} + +.xgplayer .xgplayer-progress-played { + background: linear-gradient(-90deg, #fa1f41 0%, #e31106 100%); +} + +.xgplayer .xgplayer-progress-cache { + background: rgba(255, 255, 255, 0.5); +} + +.xgplayer .xgplayer-progress-btn { + display: block; + background: rgba(255, 94, 94, 0.304093); + border: 0.5px solid rgba(255, 94, 94, 0.056545); + box-shadow: 0 0 1px rgba(255, 0, 0, 0.384); + width: 20px; + height: 20px; + border-radius: 30px; + left: 0; + top: 50%; + position: absolute; + z-index: 1; + transform: translate(-50%, -50%); + box-sizing: border-box; + pointer-events: none; +} + +.xgplayer .xgplayer-progress-btn:before { + content: ' '; + display: block; + position: relative; + width: 12px; + height: 12px; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + border-radius: 30px; + background: #ffffff; +} + +.xgplayer .xgplayer-progress-btn.active { + border: 4px solid rgba(255, 94, 94, 0.064057); +} + +.xgplayer .xgplayer-progress-btn.active:before { + box-shadow: 0 0 3px rgba(248, 89, 89, 0.69); +} + +.xgplayer .xgplayer-progress-dot { + display: inline-block; + position: absolute; + height: 100%; + width: 5px; + top: 0px; + background: white; + border-radius: 6px; + z-index: 16; +} + +.xgplayer .xgplayer-progress-dot .xgplayer-progress-tip { + position: absolute; + left: 25%; + top: -40px; + height: auto; + line-height: 30px; + width: auto; + transform: scale(0.8) translate(-50%); + background: rgba(0, 0, 0, 0.3); + border-radius: 6px; + border: 1px solid rgba(0, 0, 0, 0.8); + cursor: default; + white-space: nowrap; + display: none; +} + +.xgplayer .xgplayer-progress-dot:hover .xgplayer-progress-tip { + display: block; +} + +.xgplayer .flex-controls .xgplayer-progress { + transform: translateY(0); +} + +.xgplayer.xgplayer-pc .xgplayer-progress-btn { + transform: translate(-50%, -50%) scale(0); +} + +.xgplayer.xgplayer-pc .xgplayer-progress-outer { + height: 3px; +} + +.xgplayer.xgplayer-pc .xgplayer-progress-inner { + margin-right: 4px; +} + +.xgplayer.xgplayer-pc .xgplayer-progress-inner:last-child, +.xgplayer.xgplayer-pc .xgplayer-progress-inner:only-child { + margin-right: 0; +} + +.xgplayer.xgplayer-pc .inner-focus-point:before, +.xgplayer.xgplayer-pc .inner-focus-point:after { + width: 3px; +} + +.xgplayer.xgplayer-pc .inner-focus-highlight { + background: rgba(255, 255, 255, 0.8); +} + +.xgplayer.xgplayer-pc .xgplayer-progress.active .xgplayer-progress-outer { + height: 6px; + margin-bottom: 3px; + transition: + height 0.3s ease, + margin-bottom 0.3s ease; +} + +.xgplayer.xgplayer-pc .xgplayer-progress.active .xgplayer-progress-btn { + transform: translate(-50%, -50%) scale(1); +} + +.xgplayer.xgplayer-pc .xgplayer-progress.active .inner-focus-point:before, +.xgplayer.xgplayer-pc .xgplayer-progress.active .inner-focus-point:after { + width: 6px; +} + +.xgplayer .xgplayer-progress-bottom .xgplayer-progress-outer { + top: 9px; +} + +.xgplayer .xgplayer-progress-bottom .xgplayer-progress-btn:before { + height: 6px; + width: 6px; +} + +.xgplayer.xgplayer-mobile .xgplayer-progress-bottom .xgplayer-progress-outer { + height: 4px; +} + +@media (prefers-color-scheme: dark) { + .xgplayer .xgplayer-progress .xgplayer-progress-inner { + background-color: rgba(255, 255, 255, 0.3); + } + + .xgplayer .xgplayer-progress .inner-focus-highlight { + background: rgba(255, 255, 255, 0.8); + } + + .xgplayer .xgplayer-progress .xgplayer-progress-btn { + background: rgba(255, 94, 94, 0.304093); + border: 0.5px solid rgba(255, 94, 94, 0.056545); + box-shadow: 0 0 1px rgba(255, 0, 0, 0.384); + } + + .xgplayer .xgplayer-progress .xgplayer-progress-btn:before { + background-color: #fff; + } + + .xgplayer .xgplayer-progress .xgplayer-progress-played { + background-color: linear-gradient(-90deg, #fa1f41 0%, #e31106 100%); + } + + .xgplayer .xgplayer-progress .xgplayer-progress-cache { + background-color: rgba(255, 255, 255, 0.5); + } +} + +.xg-mini-progress { + display: none; + position: absolute; + height: 2px; + left: 0; + right: 0; + bottom: 0px; + pointer-events: none; +} + +.xg-mini-progress xg-mini-progress-played, +.xg-mini-progress xg-mini-progress-cache { + height: 100%; + width: 0; + position: absolute; + top: 0; + left: 0; + border-radius: inherit; +} + +.xg-mini-progress xg-mini-progress-played { + background: linear-gradient(-90deg, #fa1f41 0%, #e31106 100%); +} + +.xg-mini-progress xg-mini-progress-cache { + background: rgba(255, 255, 255, 0.5); +} + +.xg-mini-progress-show, +.xgplayer-inactive .xg-mini-progress, +.xgplayer-mini .xg-mini-progress { + display: block; +} + +.xgplayer .xgplayer-play .xg-icon-play { + display: none; +} + +.xgplayer .xgplayer-play .xg-icon-pause, +.xgplayer .xgplayer-play[data-state='pause'] .xg-icon-play { + display: block; +} + +.xgplayer .xgplayer-play[data-state='pause'] .xg-icon-pause, +.xgplayer .xgplayer-fullscreen .xg-exit-fullscreen { + display: none; +} + +.xgplayer .xgplayer-fullscreen .xg-get-fullscreen, +.xgplayer .xgplayer-fullscreen[data-state='full'] .xg-exit-fullscreen { + display: block; +} + +.xgplayer .xgplayer-fullscreen[data-state='full'] .xg-get-fullscreen { + display: none; +} + +.xgplayer .xg-top-bar .xgplayer-back { + position: relative; + left: 0; + top: 16px; + width: 34px; + height: 40px; + display: none; +} + +.xgplayer .xg-top-bar .xgplayer-back.show { + display: block; +} + +.xgplayer .xgplayer-time { + min-width: 40px; + font-size: 14px; + font-family: PingFangSC-Semibold; + color: #fff; + text-align: center; + display: inline-block; + line-height: 40px; +} + +.xgplayer .xgplayer-time span { + display: inline-block; + line-height: 40px; + height: 40px; +} + +.xgplayer .xgplayer-time span .time-min-width { + text-align: center; + min-width: 2ch; +} + +.xgplayer .xgplayer-time span .time-min-width:first-child { + text-align: right; +} + +.xgplayer .xgplayer-time span .time-min-width:last-child { + text-align: left; +} + +.xgplayer .xgplayer-time .time-duration { + color: rgba(255, 255, 255, 0.5); +} + +.xgplayer .xgplayer-time .time-live-tag { + display: none; +} + +.xgplayer .xgplayer-time.xg-time-left { + margin-left: 0; +} + +.xgplayer .xgplayer-time.xg-time-right { + margin-right: 0; +} + +.xgplayer.xgplayer-mobile .xgplayer-time { + min-width: 30px; + font-size: 12px; +} + +.xgplayer.xgplayer-mobile .xgplayer-time.xg-time-left { + margin-right: 8px; +} + +.xgplayer.xgplayer-mobile .xgplayer-time.xg-time-right { + margin-left: 8px; +} + +.xgplayer .xgplayer-volume.slide-show .xgplayer-slider { + display: block; +} + +.xgplayer .xgplayer-slider { + display: none; + position: absolute; + width: 28px; + height: 92px; + background: rgba(0, 0, 0, 0.54); + border-radius: 1px; + bottom: 40px; + outline: none; +} + +.xgplayer .xgplayer-slider:after { + content: ' '; + display: block; + height: 15px; + width: 28px; + position: absolute; + bottom: -15px; + left: 0; + z-index: 20; + cursor: initial; +} + +.xgplayer .xgplayer-value-label { + position: absolute; + left: 0; + right: 0; + bottom: 100%; + padding: 5px 0 0; + font-size: 12px; + background-color: rgba(0, 0, 0, 0.54); + color: #fff; + text-align: center; +} + +.xgplayer .xgplayer-bar, +.xgplayer .xgplayer-drag { + display: block; + position: absolute; + bottom: 6px; + left: 12px; + background: rgba(255, 255, 255, 0.3); + border-radius: 100px; + width: 4px; + height: 76px; + outline: none; + cursor: pointer; +} + +.xgplayer .xgplayer-drag { + bottom: 0; + left: 0; + background: #fa1f41; + max-height: 76px; +} + +.xgplayer .xgplayer-drag:after { + content: ' '; + display: inline-block; + width: 8px; + height: 8px; + box-shadow: 0 0 15px 0 #00d157 !important; + background: #fff; + position: absolute; + border-radius: 50%; + left: -2px; + top: -4px; +} + +.xgplayer .xgplayer-volume[data-state='normal'] .xg-volume { + display: block; +} + +.xgplayer .xgplayer-volume[data-state='normal'] .xg-volume-small, +.xgplayer .xgplayer-volume[data-state='normal'] .xg-volume-mute, +.xgplayer .xgplayer-volume[data-state='small'] .xg-volume { + display: none; +} + +.xgplayer .xgplayer-volume[data-state='small'] .xg-volume-small { + display: block; +} + +.xgplayer .xgplayer-volume[data-state='small'] .xg-volume-mute, +.xgplayer .xgplayer-volume[data-state='mute'] .xg-volume, +.xgplayer .xgplayer-volume[data-state='mute'] .xg-volume-small { + display: none; +} + +.xgplayer .xgplayer-volume[data-state='mute'] .xg-volume-mute { + display: block; +} + +.xgplayer.xgplayer-mobile .xgplayer-volume .xgplayer-slider, +.xgplayer .xgplayer-pip .xg-exit-pip { + display: none; +} + +.xgplayer .xgplayer-pip .xg-get-pip, +.xgplayer .xgplayer-pip[data-state='pip'] .xg-exit-pip { + display: block; +} + +.xgplayer .xgplayer-pip[data-state='pip'] .xg-get-pip { + display: none; +} + +.xgplayer .xgplayer-playnext { + position: relative; + display: none; + cursor: pointer; +} + +.xgplayer .xgplayer-playnext .xgplayer-tips .xgplayer-tip-playnext { + display: block; +} + +.xgplayer .xgplayer-playnext:hover { + opacity: 0.85; +} + +.xgplayer .xgplayer-playnext:hover .xgplayer-tips { + display: block; +} + +.lang-is-en .xgplayer-playnext .xgplayer-tips { + margin-left: -25px; +} + +.lang-is-jp .xgplayer-playnext .xgplayer-tips { + margin-left: -38px; +} + +.xgplayer .xgplayer-download { + position: relative; + display: block; + cursor: pointer; +} + +.lang-is-en .xgplayer-download .xgplayer-tips { + margin-left: -32px; +} + +.lang-is-jp .xgplayer-download .xgplayer-tips { + margin-left: -40px; +} + +.xgplayer .xgplayer-shot { + display: none; +} + +.xgplayer-definition { + display: none; + cursor: pointer; +} + +.xgplayer .xgplayer-playbackrate { + display: none; + cursor: default; +} + +.xgplayer .xgplayer-cssfullscreen .xg-get-cssfull { + display: block; +} + +.xgplayer .xgplayer-cssfullscreen .xg-exit-cssfull, +.xgplayer .xgplayer-cssfullscreen[data-state='full'] .xg-get-cssfull { + display: none; +} + +.xgplayer .xgplayer-cssfullscreen[data-state='full'] .xg-exit-cssfull { + display: block; +} + +.xgplayer-error { + background: #000; + display: none; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + z-index: 6; + color: #fff; + text-align: center; + line-height: 100%; + justify-content: center; + align-items: center; +} + +.xgplayer-error .xgplayer-error-refresh { + color: #fa1f41; + padding: 0 3px; + cursor: pointer; +} + +.xgplayer-error .xgplayer-error-text { + line-height: 18px; + margin: auto 6px 20px; + display: block; +} + +.xgplayer-is-error .xgplayer-error { + display: flex; +} + +.xgplayer .xgplayer-prompt { + display: block; + pointer-events: none; + position: absolute; + z-index: 1; + padding: 6px 12px 5px; + opacity: 0; + left: 10px; + background: rgba(0, 0, 0, 0.5); + border-radius: 50px; + font-size: 12px; + line-height: 17px; + text-align: center; + color: #fff; +} + +.xgplayer .xgplayer-prompt.show { + display: block; + opacity: 1; + z-index: 10; + pointer-events: initial; +} + +.xgplayer .xgplayer-prompt.arrow { + transform: translate(-50%); +} + +.xgplayer .xgplayer-prompt.arrow:after { + content: ''; + display: block; + position: absolute; + left: 50%; + bottom: 0; + width: 0; + height: 0; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-top: 8px solid rgba(0, 0, 0, 0.5); + transform: translate(-50%, 100%); +} + +.xgplayer .xgplayer-prompt .highlight { + display: inline-block; + margin-left: 6px; + color: red; + cursor: pointer; +} + +.xgplayer.xgplayer-is-error .xgplayer-prompt.show { + display: none; + opacity: 1; +} + +.xgplayer .xgplayer-spot { + position: absolute; + top: 0; + left: 0; + height: 100%; + background: #fff; + border-radius: 12px; +} + +.xgplayer .xgplayer-spot.mini { + min-width: 6px; + transform: translate(-50%); +} + +.xgplayer .xgplayer-spot.active .xgplayer-spot-pop { + display: block; + opacity: 1; + pointer-events: initial; +} + +.xgplayer .xgplayer-spot-pop { + display: block; + opacity: 0; + pointer-events: none; + position: absolute; + left: 50%; + bottom: 5px; + padding-bottom: 5px; + transform: translate(-50%); +} + +.xgplayer-mobile .xgplayer-spot { + height: 3px; + min-width: 3px; + top: 50%; + opacity: 1; + transform: translateY(-50%); +} + +.xgplayer-mobile .xgplayer-spot.mini { + min-width: 3px; + transform: translate(-50%, -50%); +} + +.xgplayer .xgplayer-progress.active .xgplayer-spot { + opacity: 1; + transition: opacity 0.3s; + visibility: visible; +} + +.xgplayer .xg-spot-info { + position: absolute; + left: 0; + bottom: 100%; + display: none; +} + +.xgplayer .xg-spot-info.short-line .xg-spot-line { + height: 6px; +} + +.xgplayer .xg-spot-info.short-line .xg-spot-content { + bottom: -4px; +} + +.xgplayer .xg-spot-info.no-thumbnail .xg-spot-thumbnail { + display: none; +} + +.xgplayer .xg-spot-info.no-thumbnail .xgplayer-progress-point { + display: block; +} + +.xgplayer .xg-spot-info.no-timepoint .xgplayer-progress-point, +.xgplayer .xg-spot-info.hide { + display: none; +} + +.xgplayer .xgplayer-progress.active .xg-spot-info { + display: block; +} + +.xgplayer .xgplayer-progress.active .xg-spot-info.hide { + display: none; +} + +.xgplayer .xg-spot-line { + position: relative; + bottom: -7px; + margin-left: 50%; + display: block; + width: 1px; + height: 41px; + background-color: #fff; + pointer-events: none; +} + +.xgplayer .xgplayer-progress-point { + display: none; + position: relative; + bottom: -4px; + left: 50%; + transform: translate(-50%); + background: rgba(0, 0, 0, 0.54); + font-size: 11px; + color: #fff; + padding: 4px 6px; + border-radius: 4px; + text-align: center; + opacity: 0.85; + white-space: nowrap; +} + +.xgplayer .xg-spot-content { + position: relative; + bottom: -7px; + color: #fff; + border-radius: 2px 2px 0 0; +} + +.xgplayer .xg-spot-ext-text { + position: relative; + bottom: -7px; +} + +.xgplayer .xg-spot-thumbnail { + position: relative; + background-color: #111010; + pointer-events: none; + border-radius: 2px 2px 0 0; +} + +.xgplayer .xg-spot-time { + position: absolute; + bottom: 2px; + font-size: 12px; + line-height: 16.8px; + left: 50%; + transform: translate(-50%); + pointer-events: none; +} + +.xgplayer .progress-thumbnail { + margin: 0 auto; + display: block; +} + +.xgplayer .xg-spot-text { + display: none; + padding: 5px 8px; + background: rgba(0, 0, 0, 0.8); + border-radius: 0 0 2px 2px; + pointer-events: none; + box-sizing: border-box; +} + +.xgplayer .spot-inner-text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + line-height: 20px; + font-size: 12px; + max-height: 40px; +} + +.xgplayer .xg-spot-content.show-text .xg-spot-text { + display: block; +} + +.xgplayer .product .xg-spot-text { + background: #3370ff; +} + +.xgplayer .product .xg-spot-line { + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-top: 7px solid #3370ff; + width: 0; + height: 15px; + left: -10px; + background: none; +} + +.xgplayer .xgvideo-preview { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + opacity: 0; + visibility: hidden; + transition: + visibility 0.3s, + opacity 0.3s; + background-color: #000; +} + +.xgplayer .xgvideo-preview .xgvideo-thumbnail { + position: relative; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + border-radius: 0; +} + +.xgplayer .xgvideo-preview.show { + opacity: 1; + visibility: visible; +} + +.xgplayer-dynamic-bg, +.xgplayer-dynamic-bg canvas, +.xgplayer-dynamic-bg xgmask, +.xgplayer-dynamic-bg xgfilter { + display: block; + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + pointer-events: none; +} + +.xgplayer-dynamic-bg canvas { + transform: translateZ(0); +} + +.xgplayer-dynamic-bg xgmask { + background: rgba(0, 0, 0, 0.7); +} + +.xgplayer-pc .xg-options-icon .icon-text { + color: #fff; + font-size: 14px; + font-weight: 500; + background: transparent !important; + border: none; + border-radius: 0; + min-width: unset !important; +} + +.xgplayer-pc .xg-options-list { + color: #fff !important; + font-size: 14px; + background-color: rgba(17, 18, 20, 0.8) !important; + border-radius: 8px !important; + width: 78px; +} + +.xgplayer-pc .xg-options-list .option-item { + height: 34px !important; + padding: 0 !important; + display: flex; + justify-content: center; + align-items: center; + color: #fff !important; +} + +.xgplayer-pc .xg-options-list .option-item.selected { + color: #00d157 !important; +} + +.xgplayer-pc .xg-options-list .option-item:hover { + background-color: rgba(255, 255, 255, 0.2); +} + +.xgplayer-pc .xg-options-list .option-item:first-child { + margin-top: 0 !important; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +.xgplayer-pc .xg-options-list .option-item:last-child { + margin-bottom: 0 !important; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +.xgplayer-pc .xgplayer-fullscreen .xg-tips { + left: 0 !important; +} + +.xgplayer-pc .xgplayer-volume xg-slider.xgplayer-slider { + background: rgba(17, 18, 20, 0.8); + border-radius: 8px; + width: 43px; + height: 125px; + left: 50%; + transform: translate(-50%); +} + +.xgplayer-pc .xgplayer-volume xg-slider.xgplayer-slider:after { + content: none; +} + +.xgplayer-pc .xgplayer-volume xg-slider.xgplayer-slider .xgplayer-bar { + left: 20px; + bottom: 12px; + height: 98px; + transform: none; + top: auto; +} + +.xgplayer-pc .xgplayer-volume xg-slider.xgplayer-slider .xgplayer-drag { + max-height: 98px; + background-image: linear-gradient(90deg, #00e038, #32ccff); +} + +.xgplayer-pc .xgplayer-volume xg-slider.xgplayer-slider .xgplayer-drag.dragging:before, +.xgplayer-pc .xgplayer-volume xg-slider.xgplayer-slider .xgplayer-drag:hover:before { + content: ''; + position: absolute; + top: -10px; + left: -8px; + width: 20px; + height: 20px; + border-radius: 50%; +} + +.xgplayer-pc .xgplayer-volume xg-slider.xgplayer-slider .xgplayer-drag:after { + top: -5px; + width: 10px; + height: 10px; + left: -3px; + box-shadow: none; +} + +.xgplayer-pc .xgplayer-volume xg-slider.xgplayer-slider .xgplayer-volume-text { + margin-top: 12px; + font-size: 14px; + line-height: 22px; + text-align: center; +} + +.xgplayer-pc .xgplayer-progress .xgplayer-progress-outer { + transition: unset; +} + +.xgplayer-pc .xgplayer-progress .xgplayer-progress-btn { + width: 16px; + height: 16px; + background: #fff; + box-shadow: 0 0 15px 0 #00d157; +} + +.xgplayer-pc .xgplayer-progress .xgplayer-progress-played { + background: linear-gradient(270deg, #00e038, #32ccff) !important; +} + +.xgplayer-pc .xgplayer-replay { + height: unset; +} + +.xgplayer-pc .xgplayer-replay .xgplayer-replay-txt { + display: none; +} + +.xgplayer-pc .xgplayer-replay:hover circle { + fill-opacity: 0.5; +} + +.xgplayer-pc.xgplayer-is-error .xgplayer-start { + display: none; +} + +.xgplayer-mobile .xgplayer-progress .xgplayer-progress-played, +.xgplayer-mobile .xgplayer-shift-progress .xgplayer-progress-played { + background: #3469ff; +} + +.xgplayer-mobile .xgplayer-progress .xgplayer-progress-outer, +.xgplayer-mobile .xgplayer-shift-progress .xgplayer-progress-outer { + transition: unset; +} + +.xgplayer-mobile .xgplayer-progress .xgplayer-progress-btn, +.xgplayer-mobile .xgplayer-shift-progress .xgplayer-progress-btn { + width: 14px; + height: 14px; + background-color: rgba(255, 255, 255, 0.4) !important; + box-shadow: 0 0 1px rgba(52, 106, 255, 0.32); +} + +.xgplayer-mobile .xgplayer-progress .xgplayer-progress-btn:before, +.xgplayer-mobile .xgplayer-shift-progress .xgplayer-progress-btn:before { + width: 7px !important; + height: 7px !important; +} + +.xgplayer-mobile .xgplayer-replay { + height: unset; +} + +.xgplayer-mobile .xgplayer-replay .xgplayer-replay-txt { + display: none; +} + +.xgplayer-mobile .xgplayer-replay svg { + width: 50px; + height: 50px; +} + +.xgplayer-mobile .xgplayer-replay:hover circle { + fill-opacity: 0.5; +} + +.xgplayer-mobile .time-preview .xg-cur { + color: #3469ff !important; +} + +.xgplayer-mobile .time-preview .xg-curbar { + background-color: #3469ff !important; +} + +.xgplayer-mobile .xg-top-bar { + justify-content: flex-end; +} + +.xgplayer-mobile.xgplayer-is-error .xgplayer-start { + display: none; +} + +.xgplayer-mobile .xg-top-bar .xgplayer-back { + position: relative; + left: 0; + top: 10px; + width: 34px; + height: 40px; + display: none; +} + +.xgplayer-rightTop-iconList { + display: flex; +} + +.xgplayer-rightTop-iconList xg-icon { + margin-left: 0 !important; + margin-right: 0 !important; +} + +.xgplayer-rightTop-iconList .xgplayer-icon { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + margin-left: 10px; +} + +.panel-content { + display: flex; +} + +.panel-content .panel-icon-bt { + display: flex; + flex-direction: column; + margin: 0 5px; +} + +.panel-content .panel-icon-bt .panel-icon-svg { + display: flex; + width: 40px; + height: 40px; + justify-content: center; + align-items: center; + border-radius: 50%; +} + +.panel-content .panel-icon-bt .panel-icon-bt-text { + display: flex; + justify-content: center; + font-size: 12px; + margin-top: 5px; + color: #fff; +} + +.panel-fullscreen .panel-content, +.panel-inner .panel-content { + justify-content: center; + align-items: center; + width: 100%; + height: 100%; + flex-wrap: wrap; +} + +.panel-fullscreen .panel-content .panel-icon-svg, +.panel-inner .panel-content .panel-icon-svg { + background-color: rgba(255, 255, 255, 0.4); +} + +.panel-normal .panel-content { + height: 100px; + overflow-x: auto; + align-items: center; + box-sizing: border-box; + padding-left: 10px; + background-color: #202124; +} + +.panel-normal .panel-content .panel-icon-bt .panel-icon-svg { + background-color: rgba(255, 255, 255, 0.05); +} + +.panel-normal .panel-content .panel-icon-bt .panel-icon-bt-text { + color: rgba(255, 255, 255, 0.5); +} + +.xg-mobile-panel { + height: auto; + width: auto; +} + +.xg-mobile-panel.panel-normal { + position: fixed; + bottom: 0; + left: 0; + right: 0; + top: 0; + display: flex; + z-index: 100; +} + +@-webkit-keyframes xg_panel_active_normal { + 0% { + transform: translateY(100%); + } + + to { + transform: translateY(0); + } +} + +@keyframes xg_panel_active_normal { + 0% { + transform: translateY(100%); + } + + to { + transform: translateY(0); + } +} + +@-webkit-keyframes xg_panel_hide_normal { + 0% { + transform: translateY(0); + } + + to { + transform: translateY(100%); + display: none; + } +} + +@keyframes xg_panel_hide_normal { + 0% { + transform: translateY(0); + } + + to { + transform: translateY(100%); + display: none; + } +} + +.xg-mobile-panel.panel-normal .xg-mobile-panel-cancel { + position: absolute; + bottom: 0; + color: #fff; + width: 100%; + height: 54px; + background-color: #202124; + display: flex; + justify-content: center; + align-items: center; + border-top: 1px solid #2b2c2f; + font-size: 16px; +} + +.xg-mobile-panel.panel-normal .xg-mobile-panel-content { + display: block; + position: absolute; + bottom: 0; + width: 100%; + height: auto; + background-color: #202124; + z-index: 101; + overflow-y: auto; +} + +.xg-mobile-panel.panel-normal .xg-mobile-panel-content.xg-mobile-panel-cancel-mode { + bottom: 55px; +} + +.xg-mobile-panel.panel-normal .xg-mobile-panel-content .xg-mobile-panel-title { + font-size: 15px; + display: inline-block; + height: 40px; + text-align: center; + line-height: 50px; + color: #fff; + width: 100%; + box-sizing: border-box; +} + +.xg-mobile-panel.panel-normal .xg-mobile-panel-content .item-list-panel-content { + display: flex; + width: 100%; + flex-wrap: wrap; + justify-content: space-around; + padding: 20px; + box-sizing: border-box; + align-items: center; + background-color: #202124; + color: #d2d3d3; +} + +.xg-mobile-panel.panel-normal .xg-mobile-panel-content .item-list-panel-content:after { + content: ''; + width: 45%; +} + +.xg-mobile-panel.panel-normal .xg-mobile-panel-content .item-list-panel-content .panel-Item { + display: flex; + align-items: center; + justify-content: center; + width: 45%; + height: 36px; + background: hsla(0, 0%, 100%, 0.16); + border-radius: 4px; + margin-bottom: 15px; +} + +.xg-mobile-panel.panel-normal .xg-mobile-panel-content .item-list-panel-content .panel-Item.select-in { + background-color: rgba(64, 134, 255, 0.1); + color: #4086ff; +} + +.xg-mobile-panel.panel-normal.hide { + -webkit-animation: xg_panel_hide_normal 0.3s ease-out forwards; + animation: xg_panel_hide_normal 0.3s ease-out forwards; +} + +.xg-mobile-panel.panel-normal.active { + -webkit-animation: xg_panel_active_normal 0.3s ease-out forwards; + animation: xg_panel_active_normal 0.3s ease-out forwards; +} + +.xg-mobile-panel.panel-inner { + display: block; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.6); + position: absolute; + top: 0; + left: 0; + z-index: 100; +} + +.xg-mobile-panel.panel-inner.hide { + display: none; +} + +.xg-mobile-panel.panel-inner.active { + display: block; +} + +.xg-mobile-panel.panel-inner .item-list-panel-content { + display: flex; + width: 100%; + height: 100%; + background-color: transparent; + flex-wrap: wrap; + justify-content: space-around; + padding: 20px; + box-sizing: border-box; + align-items: center; + color: #d2d3d3; +} + +.xg-mobile-panel.panel-inner .item-list-panel-content:after { + content: ''; + width: 45%; +} + +.xg-mobile-panel.panel-inner .item-list-panel-content .panel-Item { + display: flex; + align-items: center; + justify-content: center; + width: 45%; + height: 36px; + background-color: rgba(255, 255, 255, 0.3); + border-radius: 4px; + margin-bottom: 15px; +} + +.xg-mobile-panel.panel-inner .item-list-panel-content .panel-Item.select-in { + background-color: rgba(64, 134, 255, 0.3); + color: #4086ff; +} + +.xg-mobile-panel.panel-fullscreen { + display: block; + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + z-index: 100; + -webkit-animation: xg_panel_active 0.3s ease-out forwards; + animation: xg_panel_active 0.3s ease-out forwards; +} + +@-webkit-keyframes xg_panel_active { + 0% { + transform: translate(100%); + } + + to { + transform: translate(0); + } +} + +@keyframes xg_panel_active { + 0% { + transform: translate(100%); + } + + to { + transform: translate(0); + } +} + +@-webkit-keyframes xg_panel_hide { + 0% { + transform: translate(0); + } + + to { + transform: translate(100%); + display: none; + } +} + +@keyframes xg_panel_hide { + 0% { + transform: translate(0); + } + + to { + transform: translate(100%); + display: none; + } +} + +.xg-mobile-panel.panel-fullscreen .xg-mobile-panel-content { + display: block; + position: absolute; + right: 0; + min-width: 50%; + height: 100%; + background-color: rgba(0, 0, 0, 0.6); + z-index: 101; + overflow-y: auto; +} + +.xg-mobile-panel.panel-fullscreen .xg-mobile-panel-content .xg-mobile-panel-title { + font-size: 13px; + display: inline-block; + width: 100%; + height: 40px; + text-align: center; + line-height: 50px; + color: #fff; + box-sizing: border-box; +} + +.xg-mobile-panel.panel-fullscreen .xg-mobile-panel-content .item-list-panel-content { + display: flex; + flex-direction: column; + width: 100%; + flex-wrap: wrap; + justify-content: space-around; + padding: 10px; + box-sizing: border-box; + align-items: center; +} + +.xg-mobile-panel.panel-fullscreen .xg-mobile-panel-content .item-list-panel-content .panel-Item { + display: flex; + align-items: center; + justify-content: center; + width: 100px; + height: 30px; + background: hsla(0, 0%, 100%, 0.16); + color: #fff; + margin-bottom: 15px; +} + +.xg-mobile-panel.panel-fullscreen .xg-mobile-panel-content .item-list-panel-content .panel-Item.select-in { + background-color: rgba(64, 134, 255, 0.21); + color: #94c2ff; +} + +.xg-mobile-panel.panel-fullscreen.hide { + -webkit-animation: xg_panel_hide 0.3s ease-out forwards; + animation: xg_panel_hide 0.3s ease-out forwards; +} + +.xg-mobile-panel.panel-fullscreen.active { + -webkit-animation: xg_panel_active 0.3s ease-out forwards; + animation: xg_panel_active 0.3s ease-out forwards; +} + +.xgplayer-unmute { + position: absolute; + display: flex; + width: 100%; + height: 100%; + justify-content: center; + align-items: center; + pointer-events: none; + z-index: 10; + top: 0; +} + +.xgplayer-unmute .xgplayer-unmute-bt { + display: flex; + justify-content: center; + align-items: center; + width: 180px; + height: 60px; + color: #fff; + border-radius: 5px; + border: 0.5px white solid; + font-size: 16px; + background-color: rgba(0, 0, 0, 0.5); + pointer-events: auto; +} + +.xgplayer-unmute .xgplayer-unmute-bt:hover { + background-color: rgba(0, 0, 0, 0.3); + border: 0.5px #3370ff solid; + color: #3370ff; +} + +.xgplayer-unmute .xgplayer-unmute-bt:active { + background-color: rgba(0, 0, 0, 0.3); +} + +.xgplayer-unmute .xgplayer-unmute-bt-tag { + display: none; + align-items: center; + color: #fff; + background: rgba(0, 0, 0, 0.45); + border-radius: 2px; + padding: 2px; + font-size: 12px; + position: absolute; + bottom: 4px; + left: 4px; +} + +.xgplayer-mobile .xgplayer-unmute-bt { + width: 150px; + height: 40px; + font-size: 14px; +} + +.xgplayer-ended .xgplayer-unmute, +.xgplayer-pause .xgplayer-unmute, +.xgplayer-isloading .xgplayer-unmute, +.xgplayer-is-error .xgplayer-unmute { + display: none; +} + +.xgplayer-refresh { + margin-left: 12px !important; +} + +.xgplayer-error .xgplayer-error-cover { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; +} + +.xgplayer-error .xgplayer-error-cover .xgplayer-error-img { + display: flex; + align-items: center; + justify-content: center; + width: 120px; + height: 120px; + margin-bottom: 16px; +} + +.xgplayer-error .xgplayer-error-cover .xgplayer-error-img img { + display: block; + width: 100%; + height: 100%; +} + +.xgplayer-error .xgplayer-error-cover .xgplayer-error-tips { + font-size: 16px; + margin-bottom: 16px; +} + +.xgplayer-error .xgplayer-error-cover .xgplayer-error-button { + display: block; + height: 35px; + cursor: pointer; + background-color: rgba(34, 33, 33, 0.643); + border-radius: 20px; + padding: 0 24px; + line-height: 35px; + text-align: center; + font-size: 16px; +} + +.xgplayer-error .xgplayer-error-cover .xgplayer-error-button:hover { + background-color: #5a5a5a; +} + +.xgplayer-error .xgplayer-error-cover .xgplayer-error-detail-info { + margin-top: 15px; + display: inline-block; +} + +.xgplayer-mobile .xgplayer-error .xgplayer-error-cover .xgplayer-error-img { + width: 60px; + height: 60px; + margin-bottom: 0; +} + +.xgplayer-mobile .xgplayer-error .xgplayer-error-tips { + font-size: 14px; + margin-bottom: 12px; +} + +.xgplayer-mobile .xgplayer-error .xgplayer-error-button { + font-size: 14px; +} + +.xgplayer .xgplayer-danmu { + height: 100%; + display: flex; + align-items: center; + justify-content: center; + position: relative; + margin-right: 16px !important; +} + +.xgplayer .xgplayer-danmu .icon-warp { + height: 100%; + display: flex; + align-items: center; +} + +.xgplayer .xgplayer-danmu .tips-wrap { + position: absolute; + bottom: 44px; + background: rgba(0, 0, 0, 0.54); + font-size: 11px; + color: #fff; + padding: 4px 6px; + border-radius: 4px; + text-align: center; + opacity: 0.85; + white-space: nowrap; + display: none; +} + +.xgplayer .panel-normal .panel-box { + color: #fff; +} + +.xgplayer .panel-normal .panel-box .xg-player-slider { + padding: 8px 0; +} + +.xgplayer .panel-inner .panel-box { + color: #fff; +} + +.xgplayer .panel-inner .panel-box .xg-player-slider { + padding: 4px 0; +} + +.xgplayer .panel-fullscreen .panel-box { + color: #fff; +} + +.xgplayer .panel-fullscreen .panel-box .xg-player-slider { + padding: 8px 0; +} + +.xgplayer .panel-box { + padding: 16px; +} + +.xgplayer .panel-box.pc-panel { + right: -10px; + bottom: 34px; + z-index: 20; + border-radius: 4px; + color: #fff; + position: absolute; + box-sizing: border-box; + width: 278px; + background-color: rgba(0, 0, 0, 0.8); + box-shadow: 0 1px 15px rgba(11, 18, 35, 0.26); + display: none; +} + +.xgplayer .panel-box.pc-panel .xg-player-slider { + padding: 8px 0; +} + +.xgplayer .panel-box .box-header { + display: flex; + font-weight: 500; + justify-content: space-between; + align-items: center; +} + +.xgplayer .panel-box .box-header .header-reset { + display: flex; + width: 64px; + height: 22px; + line-height: 22px; + justify-content: center; + align-items: center; + background: rgba(0, 0, 0, 0.4); + border-radius: 12px; + cursor: pointer; +} + +.xgplayer .panel-box .box-header .header-reset:hover { + background: rgba(255, 255, 255, 0.3); +} + +.xgplayer .xgplayer-danmu-container { + position: absolute; + top: 0; + left: 0; + right: 0; + height: 100%; + overflow: hidden; + pointer-events: none; + outline: none; +} + +.xgplayer .xgplayer-danmu-container div { + color: #fff; + text-shadow: + black 1px 0 1px, + black 0 1px 1px, + black 0 -1px 1px, + black -1px 0 1px; +} + +.xgplayer.xgplayer-mobile .xgplayer-danmu { + margin-right: 10px !important; +} + +.xgplayer.xgplayer-mobile .panel-box .box-header { + margin-bottom: 15px; +} + +.xg-player-slider { + position: relative; + display: flex; + font-size: 12px; + align-items: center; + justify-content: space-between; +} + +.xg-player-slider .line-title { + text-align: left; + flex: 0 0 70px; +} + +.xg-player-slider .line-slider { + flex: 1; + align-items: center; +} + +.xg-player-slider .line-slider .wrapper { + display: flex; + position: relative; + width: 100%; + height: 12px; + cursor: pointer; +} + +.xg-player-slider .line-slider .wrapper:before { + content: ''; + position: absolute; + left: 0; + top: 50%; + transform: translateY(-50%); + width: 100%; + height: 2px; + background-color: rgba(255, 255, 255, 0.2); +} + +.xg-player-slider .line-slider .wrapper .ticks { + position: absolute; + top: 50%; + left: 0; + height: 1px; + width: 100%; +} + +.xg-player-slider .line-slider .wrapper .ticks .tick { + position: absolute; + top: 0; + transform: translate(-50%, -50%); + width: 2px; + height: 2px; + border-radius: 50%; + background-color: #1d2129; +} + +.xg-player-slider .line-slider .wrapper .inner { + position: absolute; + left: 0; + top: 50%; + transform: translateY(-50%); + height: 2px; + background-color: #4086ff; +} + +.xg-player-slider .line-slider .wrapper .button { + position: absolute; + left: 0; + top: 50%; + transform: translate(-50%, -50%); + width: 10px; + height: 10px; + border-radius: 50%; + background-color: #fff; +} + +.xg-player-slider .line-value { + flex: 0 0 50px; + text-align: right; +} + +.xg-player-switch-wrapper { + display: flex; + justify-content: space-between; + align-items: center; + font-size: 12px; + padding: 7.25px 0 !important; +} + +.xg-player-switch-wrapper .left { + text-align: left; + flex: 1; +} + +.xg-player-switch-wrapper .right { + text-align: right; + flex: 0 0 36px; + display: flex; + align-items: center; +} + +.xg-player-switch-wrapper .switch { + position: relative; + display: inline-block; + width: 36px; + height: 18px; +} + +.xg-player-switch-wrapper .switch input { + opacity: 0; + width: 0; + height: 0; +} + +.xg-player-switch-wrapper .slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #ccc; + transition: 0.4s; +} + +.xg-player-switch-wrapper .slider:before { + position: absolute; + content: ''; + height: 16px; + width: 16px; + left: 2px; + bottom: 1px; + background-color: #fff; + transition: 0.4s; +} + +.xg-player-switch-wrapper input:checked + .slider { + background-color: #4086ff; +} + +.xg-player-switch-wrapper input:checked + .slider:before { + transform: translate(16px); +} + +.xg-player-switch-wrapper input:focus + .slider { + box-shadow: 0 0 1px #4086ff; +} + +.xg-player-switch-wrapper .slider.round { + border-radius: 18px; +} + +.xg-player-switch-wrapper .slider.round:before { + border-radius: 50%; +} + +.xgplayer-sdk-toast { + position: absolute; + bottom: 50px; + left: 16px; + z-index: 203; +} + +.xgplayer-sdk-toast .toast-container { + display: flex; + margin-top: 8px; + border-radius: 8px; + padding: 4px 10px; + height: 28px; + font-size: 14px; + line-height: 20px; + background: rgba(0, 0, 0, 0.4); + color: #fff; + box-sizing: content-box; +} + +.xgplayer-sdk-toast .toast-container .toast-txt { + display: flex; + align-items: center; +} + +.xgplayer-sdk-toast .toast-container .toast-txt .toast-txt-bt { + color: #338fff; + margin-left: 8px; +} + +.xgplayer-sdk-toast .toast-container .toast-txt .toast-txt-bt:hover { + color: rgba(51, 143, 255, 0.875); +} + +.xgplayer-sdk-toast .toast-container .toast-close-bt { + display: flex; + justify-content: center; + align-items: center; + height: 25px; + width: 25px; + font-size: 16px; + font-weight: bolder; + margin-left: 15px; +} + +.xgplayer-mobile .xgplayer-sdk-toast .toast-container { + height: 20px; + padding: 4px 8px; + font-size: 12px; +} + +.xgplayer-mobile .xgplayer-sdk-toast .toast-container .toast-close-bt { + height: 20px; + width: 20px; + font-size: 14px; + margin-left: 8px; +} + +.xgplayer .xg-panel-info { + z-index: 100; +} + +.xgplayer .xg-options-list li:hover, +.xgplayer .xg-options-list li.selected { + color: #00d157 !important; +} + +.xgplayer .xgplayer-mobile-playBackRate .icon-text { + color: #fff; + height: 20px; + line-height: 20px; + text-align: center; + position: absolute; + margin: auto; + font-size: 12px; + font-weight: 700; +} + +.xgplayer .xgplayer-enter { + z-index: 6; + background: none; +} + +@-webkit-keyframes scroll-ani-1 { + 0% { + transform: translateY(0); + } + + to { + transform: translateY(-50%); + } +} + +@keyframes scroll-ani-1 { + 0% { + transform: translateY(0); + } + + to { + transform: translateY(-50%); + } +} + +@-webkit-keyframes scroll-ani-2 { + 0% { + transform: translateY(0); + } + + to { + transform: translateY(-50%); + } +} + +@keyframes scroll-ani-2 { + 0% { + transform: translateY(0); + } + + to { + transform: translateY(-50%); + } +} + +.xgplayer-pc .xgplayer-subtitles { + position: absolute; + bottom: 40px; + left: 50%; + line-height: 28px; + font-size: 20px; + color: #fff; + transform: translate(-50%); + word-break: break-word; + overflow: hidden; + z-index: 6; + pointer-events: none; + white-space: nowrap; + text-align: left; + text-shadow: + black 1px 0 1px, + black 0 1px 1px, + black 0 -1px 1px, + black -1px 0 1px; + height: 56px; + width: 80%; + box-sizing: border-box; +} + +.xgplayer-pc .xgplayer-subtitles .xgplayer-subtitles-inner { + display: flex; + flex-direction: column; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.xgplayer-pc .xgplayer-subtitles .xgplayer-subtitles-inner span { + display: inline; + width: -webkit-max-content; + width: max-content; + box-sizing: border-box; +} + +.xgplayer-pc .xgplayer-subtitles .xgplayer-subtitles-helper { + opacity: 0; + width: -webkit-max-content; + width: max-content; +} + +.xgplayer-pc .xgplayer-subtitles .scroll-1 { + -webkit-animation: scroll-ani-1 0.1s forwards; + animation: scroll-ani-1 0.1s forwards; +} + +.xgplayer-pc .xgplayer-subtitles .scroll-2 { + -webkit-animation: scroll-ani-2 0.1s forwards; + animation: scroll-ani-2 0.1s forwards; +} + +.xgplayer-pc .xgplayer-inactive .xgplayer-subtitles { + bottom: 40px; +} + +.xgplayer-mobile .xgplayer-subtitles { + position: absolute; + bottom: 18px; + left: 50%; + line-height: 18px; + font-size: 12px; + color: #fff; + transform: translate(-50%); + word-break: break-word; + overflow: hidden; + z-index: 6; + pointer-events: none; + white-space: nowrap; + text-align: left; + text-shadow: + black 1px 0 1px, + black 0 1px 1px, + black 0 -1px 1px, + black -1px 0 1px; + height: 36px; + width: 64%; +} + +.xgplayer-mobile .xgplayer-subtitles-inner { + display: flex; + flex-direction: column; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.xgplayer-mobile .xgplayer-subtitles-inner span { + width: -webkit-max-content; + width: max-content; +} + +.xgplayer-mobile .xgplayer-subtitles-helper { + opacity: 0; + width: -webkit-max-content; + width: max-content; +} + +.xgplayer-mobile .scroll-1 { + -webkit-animation: scroll-ani-1 0.1s forwards; + animation: scroll-ani-1 0.1s forwards; +} + +.xgplayer-mobile .scroll-2 { + -webkit-animation: scroll-ani-2 0.1s forwards; + animation: scroll-ani-2 0.1s forwards; +} + +.xgplayer-mobile.xgplayer-is-fullscreen .xgplayer-subtitles, +.xgplayer-mobile.xgplayer-inner-fullscreen .xgplayer-subtitles { + bottom: 45px; + font-size: 16px; +} + +@media screen and (orientation: portrait) { + .xgplayer-mobile.xgplayer-is-fullscreen .xgplayer-subtitles, + .xgplayer-mobile.xgplayer-inner-fullscreen .xgplayer-subtitles { + bottom: 80px; + font-size: 12px; + } +} + +.xgplayer-aisub.isOpen .xgplayer-aisub-open-svg { + display: block; +} + +.xgplayer-aisub.isOpen .xgplayer-aisub-close-svg { + display: none; +} + +.xgplayer-aisub.isOpen .xg-tips { + display: none !important; +} + +.xgplayer-aisub.isClose .xgplayer-aisub-open-svg { + display: none; +} + +.xgplayer-aisub.isClose .xgplayer-aisub-close-svg { + display: block; +} + +.xgplayer-shift .xgplayer-shift-progress-point { + position: absolute; + top: -30px; + width: 60px; + padding: 6px 0; + background: rgba(0, 0, 0, 0.6); + border-radius: 2px; + font-size: 12px; + line-height: 18px; + color: #fff; + text-align: center; + transform: translate(-50%); + display: none; +} + +.xgplayer-shift .xgplayer-shift-progress-card { + display: flex; + position: absolute; + z-index: 8; + cursor: pointer; +} + +.xgplayer-shift .xgplayer-shift-progress-card:hover .xgplayer-shift-progress-card-img { + display: block; +} + +.xgplayer-shift .xgplayer-shift-progress-card .xgplayer-shift-progress-card-point { + display: block; + width: 5px; + height: 5px; + background-color: #fff; + border-radius: 50%; + margin-top: -1px; + z-index: 9; +} + +.xgplayer-shift .xgplayer-shift-progress-card .xgplayer-shift-progress-card-img { + display: none; + position: absolute; + bottom: 8px; + max-width: 180px; + max-height: 100px; + transform: translate(-50%); +} + +.xgplayer-shift.active .xgplayer-shift-progress-point { + display: block; +} + +.xgplayer-shift.active .xgplayer-shift-progress-card-point { + width: 10px; + height: 10px; + margin-top: -3px; +} + +.xgplayer-back-live-bt { + cursor: pointer; + position: absolute; + bottom: 60px; + left: 20px; + width: 96px; + height: 32px; + justify-content: center; + align-items: center; + border: 1px solid rgba(255, 255, 255, 0.8); + border-radius: 16px; + background: rgba(0, 0, 0, 0.4); + font-size: 13px; + color: #fff; + display: none; +} + +.xgplayer-back-live-bt:hover { + background: rgba(0, 0, 0, 0.6); +} + +.xgplayer-inactive .xgplayer-back-live-bt { + display: none !important; +} + +.xgplayer-mobile .xgplayer-shift { + margin: 0 8px; +} + +.xgplayer-mobile .xgplayer-shift .xgplayer-shift-progress-point { + display: none !important; +} + +.xgplayer-mobile .xgplayer-back-live-bt { + bottom: 40px; + width: 86px; + height: 25px; + font-size: 12px; +} + +.veplayer-livepanel-container { + color: #fff; + width: 165px; + height: 100%; + z-index: 8; + position: absolute; + font-size: 12px; + padding: 10px; + background: rgba(0, 0, 0, 0.5); + font-weight: 400; + box-sizing: border-box; + overflow-y: scroll; + scrollbar-width: none; + -ms-overflow-style: none; +} + +.veplayer-livepanel-container::-webkit-scrollbar { + display: none; +} + +.veplayer-livepanel-container-row { + display: block; + line-height: 20px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.veplayer-livepanel-container-row-label { + display: inline-block; + width: 50%; + color: #c9cdd4; +} + +.veplayer-livepanel-container-row-title { + display: inline-block; + padding-top: 30px; +} + +.veplayer-livepanel-hidden { + display: none; +} + +.xgplayer.xgplayer-mirror video { + transform: rotateY(180deg); +} + +.xgplayer .xgplayer-mirror-icon .xg-get-mirror { + display: block; +} + +.xgplayer .xgplayer-mirror-icon .xg-exit-mirror, +.xgplayer .xgplayer-mirror-icon[data-state='enable'] .xg-get-mirror { + display: none; +} + +.xgplayer .xgplayer-mirror-icon[data-state='enable'] .xg-exit-mirror, +.xgplayer-vttsub.isOpen .xgplayer-vttsub-open-svg { + display: block; +} + +.xgplayer-vttsub.isOpen .xgplayer-vttsub-close-svg { + display: none; +} + +.xgplayer-vttsub.isOpen .xg-tips { + display: none !important; +} + +.xgplayer-vttsub.isClose .xgplayer-vttsub-open-svg { + display: none; +} + +.xgplayer-vttsub.isClose .xgplayer-vttsub-close-svg { + display: block; +} + +.xgplayer .xg-options-icon.xg-play-list-btn-container { + display: none; +} + +.xgplayer .xg-options-icon.xg-play-list-btn-container.show { + display: flex; + justify-content: center; +} + +.xgplayer .xg-options-icon.xg-play-list-btn-container .xgplayer-icon + .xgplayer-icon { + margin-left: 16px; +} + +.xgplayer .xg-options-icon.xg-play-list-btn-container .xgplayer-icon .xg-tips { + display: none; +} + +.xgplayer .xg-options-icon.xg-play-list-btn-container .xgplayer-icon:hover .xg-tips { + display: block; +} + +.xgplayer .xg-right-bar .xg-play-list-btn-container, +.xgplayer .xg-left-bar .xg-play-list-btn-container { + display: flex; + flex-direction: column; +} + +.xgplayer .xg-right-bar .xg-play-list-btn-container .xgplayer-icon + .xgplayer-icon, +.xgplayer .xg-left-bar .xg-play-list-btn-container .xgplayer-icon + .xgplayer-icon { + margin-left: 0; + margin-top: 8px; +} + +@-webkit-keyframes xg_play_list_active { + 0% { + transform: translate(100%); + } + + to { + transform: translate(0); + } +} + +@keyframes xg_play_list_active { + 0% { + transform: translate(100%); + } + + to { + transform: translate(0); + } +} + +@-webkit-keyframes xg_play_list_hide { + 0% { + transform: translate(0); + } + + to { + transform: translate(100%); + } +} + +@keyframes xg_play_list_hide { + 0% { + transform: translate(0); + } + + to { + transform: translate(100%); + } +} + +@-webkit-keyframes playing_icon_line { + 0% { + transform: scaleY(0.4); + } + + 50% { + transform: scaleY(1); + } + + to { + transform: scaleY(0.4); + } +} + +@keyframes playing_icon_line { + 0% { + transform: scaleY(0.4); + } + + 50% { + transform: scaleY(1); + } + + to { + transform: scaleY(0.4); + } +} + +.xg-play-list-modal { + position: absolute; + width: 100%; + top: 0; + left: 0; + bottom: 0; + visibility: hidden; +} + +.xg-play-list-modal.active { + visibility: visible; + height: auto; +} + +.xg-play-list-modal.hide { + height: auto; +} + +.xg-play-list { + position: absolute; + display: block; + top: 8px; + bottom: 60px; + right: 8px; + width: 40%; + overflow: auto; + padding: 8px; + border-radius: 8px; + background: #292a27; + box-sizing: border-box; + cursor: pointer; + opacity: 0.85; +} + +.xg-play-list:hover { + opacity: 1; +} + +.xg-play-list.active { + display: block; + height: auto; + -webkit-animation: xg_play_list_active 0.2s ease-out forwards; + animation: xg_play_list_active 0.2s ease-out forwards; +} + +.xg-play-list.hide { + height: auto; + -webkit-animation: xg_play_list_hide 0.2s ease-in forwards; + animation: xg_play_list_hide 0.2s ease-in forwards; +} + +.xg-play-list .xg-play-list-item { + height: 20%; + padding: 6px 10px; + position: relative; + display: flex; +} + +.xg-play-list .xg-play-list-item.selected .xg-play-list-poster { + border-radius: 4px; + border: 2px solid #fff; +} + +.xg-play-list .xg-play-list-item.selected .xg-play-list-poster .playing { + display: flex; + position: absolute; + justify-content: center; + align-items: center; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.5); +} + +.xg-play-list .xg-play-list-item.selected .xg-play-list-poster .playing .icon-wrap { + width: 40px; + height: 40px; + box-sizing: border-box; + padding: 8px; + display: flex; + justify-content: space-between; +} + +.xg-play-list .xg-play-list-item.selected .xg-play-list-poster .playing .icon-wrap .icon-line { + width: 3px; + box-sizing: border-box; + border-radius: 3px; + background: #fff; + height: 20px; + transform: scaleY(0.2); +} + +.xg-play-list .xg-play-list-item.selected .xg-play-list-poster .playing .icon-wrap .icon-line:nth-child(1) { + -webkit-animation: playing_icon_line 2s ease-in infinite; + animation: playing_icon_line 2s ease-in infinite; + -webkit-animation-delay: -0.7s; + animation-delay: -0.7s; +} + +.xg-play-list .xg-play-list-item.selected .xg-play-list-poster .playing .icon-wrap .icon-line:nth-child(2) { + -webkit-animation: playing_icon_line 2s ease-in infinite; + animation: playing_icon_line 2s ease-in infinite; + -webkit-animation-delay: -0.5s; + animation-delay: -0.5s; +} + +.xg-play-list .xg-play-list-item.selected .xg-play-list-poster .playing .icon-wrap .icon-line:nth-child(3) { + -webkit-animation: playing_icon_line 2s ease-in infinite; + animation: playing_icon_line 2s ease-in infinite; + -webkit-animation-delay: -1s; + animation-delay: -1s; +} + +.xg-play-list .xg-play-list-item.selected .xg-play-list-poster .playing .icon-wrap .icon-line:nth-child(4) { + -webkit-animation: playing_icon_line 2s ease-in infinite; + animation: playing_icon_line 2s ease-in infinite; + -webkit-animation-delay: 0s; + animation-delay: 0s; +} + +.xg-play-list .xg-play-list-item .xg-play-list-poster { + position: relative; + width: 45%; + box-sizing: border-box; + background-position: center center; + background-size: 100% auto; + background-repeat: no-repeat; + transition: + opacity 0.3s ease, + visibility 0.3s ease; + pointer-events: none; + border-radius: 4px; + border: 2px solid transparent; +} + +.xg-play-list .xg-play-list-item .xg-play-list-poster .bg { + display: none; +} + +.xg-play-list .xg-play-list-item .xg-play-list-poster.no-poster .bg { + display: flex; + width: 100%; + height: 100%; + background: #242424; + justify-content: center; + align-items: center; +} + +.xg-play-list .xg-play-list-item .xg-play-list-poster .playing { + display: none; +} + +.xg-play-list .xg-play-list-item .xg-play-list-poster .duration { + position: absolute; + right: 4px; + bottom: 4px; + padding: 0 2px; + color: #fff; + text-align: right; + font-size: 12px; + font-style: normal; + font-weight: 400; + line-height: 16px; + border-radius: 4px; + background: rgba(0, 0, 0, 0.5); +} + +.xg-play-list .xg-play-list-item .xg-play-list-title { + width: 55%; + display: flex; + justify-content: center; + align-items: center; + padding-left: 8px; +} + +.xg-play-list .xg-play-list-item .xg-play-list-title .xg-play-list-title-text { + width: 100%; + text-align: left; + color: #fff; + font-size: 14px; + font-weight: 500; + line-height: 20px; + word-break: break-all; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; +} + +@-webkit-keyframes _xg_animation_blink { + 0% { + opacity: 0.1; + } + + 50% { + opacity: 1; + } + + to { + opacity: 0.1; + } +} + +@keyframes _xg_animation_blink { + 0% { + opacity: 0.1; + } + + 50% { + opacity: 1; + } + + to { + opacity: 0.1; + } +} diff --git a/src/renderer/src/assets/bg-player-1.jpg b/src/renderer/src/components/player/src/assets/img/bg-player-1.jpg similarity index 100% rename from src/renderer/src/assets/bg-player-1.jpg rename to src/renderer/src/components/player/src/assets/img/bg-player-1.jpg diff --git a/src/renderer/src/assets/bg-player-2.jpg b/src/renderer/src/components/player/src/assets/img/bg-player-2.jpg similarity index 100% rename from src/renderer/src/assets/bg-player-2.jpg rename to src/renderer/src/components/player/src/assets/img/bg-player-2.jpg diff --git a/src/renderer/src/assets/bg-player-3.jpg b/src/renderer/src/components/player/src/assets/img/bg-player-3.jpg similarity index 100% rename from src/renderer/src/assets/bg-player-3.jpg rename to src/renderer/src/components/player/src/assets/img/bg-player-3.jpg diff --git a/src/renderer/src/assets/bg-player-4.jpg b/src/renderer/src/components/player/src/assets/img/bg-player-4.jpg similarity index 100% rename from src/renderer/src/assets/bg-player-4.jpg rename to src/renderer/src/components/player/src/assets/img/bg-player-4.jpg diff --git a/src/renderer/src/assets/bg-player.jpg b/src/renderer/src/components/player/src/assets/img/bg-player.jpg similarity index 100% rename from src/renderer/src/assets/bg-player.jpg rename to src/renderer/src/components/player/src/assets/img/bg-player.jpg diff --git a/src/renderer/src/utils/common/player/playerModule/artplayer.ts b/src/renderer/src/components/player/src/core/artplayer.ts similarity index 87% rename from src/renderer/src/utils/common/player/playerModule/artplayer.ts rename to src/renderer/src/components/player/src/core/artplayer.ts index cd89f0923..cf695a512 100644 --- a/src/renderer/src/utils/common/player/playerModule/artplayer.ts +++ b/src/renderer/src/components/player/src/core/artplayer.ts @@ -1,6 +1,10 @@ import Artplayer from 'artplayer'; import artplayerPluginDanmuku from 'artplayer-plugin-danmuku'; -import { publicBarrageSend, publicColor, publicIcons, publicStream, playerStorage } from './components'; +import publicStream from '../utils/media-stream'; +import { publicBarrageSend, playerStorage } from '../utils/tool'; +import { publicColor, publicIcons } from '../utils/static'; + + class ArtPlayerAdapter { player: Artplayer | null = null; @@ -22,9 +26,8 @@ class ArtPlayerAdapter { artplayerPluginDanmuku({ speed: 5, danmuku: [], - // useWorker: true, // 5.0.1 版本参数 - synchronousPlayback: true, // 5.1.0 版本参数 - emitter: false, // 5.1.0 版本参数 + synchronousPlayback: true, + emitter: false, }), ], icons: { @@ -45,50 +48,42 @@ class ArtPlayerAdapter { customType: { customHls: (video: HTMLVideoElement, url: string, art: Artplayer) => { art.loading.show = true; - if (art.hls) publicStream.destroy.customHls(art); + if (art.hls) art.hls.destroy(); // @ts-ignore const headers = art.option.headers || {}; const hls = publicStream.create.customHls(video, url, headers); art.hls = hls; - art.on('destroy', () => { - publicStream.destroy.customHls(art); - }); + art.on('destroy', () => hls?.destroy()); art.loading.show = false; }, customFlv: (video: HTMLVideoElement, url: string, art: Artplayer) => { art.loading.show = true; - if (art.flv) publicStream.destroy.customFlv(art); + if (art.flv) art.flv.destroy(); // @ts-ignore const headers = art.option.headers || {}; const flv = publicStream.create.customFlv(video, url, headers); art.flv = flv; - art.on('destroy', () => { - publicStream.destroy.customFlv(art); - }); + art.on('destroy', () => flv?.destroy()); art.loading.show = false; }, customDash: (video: HTMLVideoElement, url: string, art: Artplayer) => { art.loading.show = true; - if (art.mpd) publicStream.destroy.customDash(art); + if (art.mpd) art.mpd.destroy(); // @ts-ignore const headers = art.option.headers || {}; const mpd = publicStream.create.customDash(video, url, headers); art.mpd = mpd; - art.on('destroy', () => { - publicStream.destroy.customDash(art); - }); + art.on('destroy', () => mpd?.destroy()); art.loading.show = false; }, customWebTorrent: (video: HTMLVideoElement, url: string, art: Artplayer) => { art.loading.show = true; - if (art.torrent) publicStream.destroy.customTorrent(art); + if (art.torrent) art.torrent.destroy(); // @ts-ignore const headers = art.option.headers || {}; const torrent = publicStream.create.customTorrent(video, url, headers); art.torrent = torrent; - art.on('destroy', () => { - publicStream.destroy.customTorrent(art); - }); + art.on('destroy', () => torrent?.destroy()); art.loading.show = false; }, }, @@ -109,11 +104,11 @@ class ArtPlayerAdapter { time: item.time, mode: item.mode === 'scroll' ? 1 : 0, border: false, + style: {} })); - this.player.plugins.artplayerPluginDanmuku.config({ - danmuku: comments, - }); + this.player.plugins.artplayerPluginDanmuku.config({ danmuku: comments }); this.player.plugins.artplayerPluginDanmuku.load(); + this.publicListener.sendDanmu = (danmu: any) => { const options = { player: id, diff --git a/src/renderer/src/utils/common/player/playerModule/dplayer.ts b/src/renderer/src/components/player/src/core/dplayer.ts similarity index 94% rename from src/renderer/src/utils/common/player/playerModule/dplayer.ts rename to src/renderer/src/components/player/src/core/dplayer.ts index 28b75fb78..53854bbcd 100644 --- a/src/renderer/src/utils/common/player/playerModule/dplayer.ts +++ b/src/renderer/src/components/player/src/core/dplayer.ts @@ -1,5 +1,7 @@ import DPlayer from 'dplayer'; -import { publicIcons, publicStream, playerStorage } from './components'; +import publicStream from '../utils/media-stream'; +import { playerStorage } from '../utils/tool'; +import { publicIcons } from '../utils/static'; const elementDeal = { replace: (el: string, newEle: string) => { @@ -135,40 +137,32 @@ class DPlayerAdapter { type: '', customType: { customHls: (video: HTMLVideoElement, dp: DPlayer) => { - if (dp.hls) publicStream.destroy.customHls(dp); + if (dp.hls) dp.hls.destroy(); const headers = dp.options.headers || {}; const hls = publicStream.create.customHls(video, video.src, headers); dp.hls = hls; - dp.on('destroy', () => { - publicStream.destroy.customHls(dp); - }); + dp.on('destroy', () => hls?.destroy()); }, customFlv: (video: HTMLVideoElement, dp: DPlayer) => { - if (dp.flv) publicStream.destroy.customFlv(dp); + if (dp.flv) dp.flv.destroy(); const headers = dp.options.headers || {}; const flv = publicStream.create.customFlv(video, video.src, headers); dp.flv = flv; - dp.on('destroy', () => { - publicStream.destroy.customFlv(dp); - }); + dp.on('destroy', () => flv?.destroy()); }, customDash: (video: HTMLVideoElement, dp: DPlayer) => { - if (dp.mpd) publicStream.destroy.customDash(dp); + if (dp.mpd) dp.mpd.destroy(); const headers = dp.options.headers || {}; const mpd = publicStream.create.customDash(video, video.src, headers); dp.mpd = mpd; - dp.on('destroy', () => { - publicStream.destroy.customDash(dp); - }); + dp.on('destroy', () => mpd?.destroy()); }, customWebTorrent: (video: HTMLVideoElement, dp: DPlayer) => { - if (dp.torrent) publicStream.destroy.customTorrent(dp); + if (dp.torrent) dp.torrent.destroy(); const headers = dp.options.headers || {}; const torrent = publicStream.create.customTorrent(video, video.src, headers); dp.torrent = torrent; - dp.on('destroy', () => { - publicStream.destroy.customTorrent(dp); - }); + dp.on('destroy', () => torrent?.destroy()); }, }, }, diff --git a/src/renderer/src/utils/common/player/playerModule/index.ts b/src/renderer/src/components/player/src/core/index.ts similarity index 100% rename from src/renderer/src/utils/common/player/playerModule/index.ts rename to src/renderer/src/components/player/src/core/index.ts diff --git a/src/renderer/src/utils/common/player/playerModule/nplayer.ts b/src/renderer/src/components/player/src/core/nplayer.ts similarity index 90% rename from src/renderer/src/utils/common/player/playerModule/nplayer.ts rename to src/renderer/src/components/player/src/core/nplayer.ts index 79219be04..fe2740708 100644 --- a/src/renderer/src/utils/common/player/playerModule/nplayer.ts +++ b/src/renderer/src/components/player/src/core/nplayer.ts @@ -1,6 +1,8 @@ import NPlayer, { EVENT as NPlayerEvent, Icon as NPlayerIcon } from 'nplayer'; import nplayerDanmaku from '@nplayer/danmaku'; -import { publicIcons, publicBarrageSend, publicStream, playerStorage } from './components'; +import publicStream from '../utils/media-stream'; +import { publicBarrageSend, playerStorage } from '../utils/tool'; +import { publicIcons } from '../utils/static'; const elementDeal = { createIcon: (html: string, noCls = false) => { @@ -138,28 +140,28 @@ class NPlayerAdapter { case 'customMp4': break; case 'customHls': - if (player.hls) publicStream.destroy.customHls(player); + if (player.hls) player.hls.destroy(); const hls = publicStream.create.customHls(player.video, options.src, headers); player.hls = hls; - player.on('destroy', () => publicStream.destroy.customHls(player)); + player.on('destroy', () => hls?.destroy()); break; case 'customFlv': - if (player.flv) publicStream.destroy.customFlv(player); + if (player.flv) player.flv.destroy(); const flv = publicStream.create.customFlv(player.video, options.src, headers); player.flv = flv; - player.on('destroy', () => publicStream.destroy.customFlv(player)); + player.on('destroy', () => flv?.destroy()); break; case 'customDash': - if (player.mpd) publicStream.destroy.customDash(player); + if (player.mpd) player.mpd.destroy(); const mpd = publicStream.create.customDash(player.video, options.src, headers); player.mpd = mpd; - player.on('destroy', () => publicStream.destroy.customDash(player)); + player.on('destroy', () => mpd?.destroy()); break; case 'customWebTorrent': - if (player.torrent) publicStream.destroy.customTorrent(player); + if (player.torrent) player.torrent.destroy(); const torrent = publicStream.create.customTorrent(player.video, options.src, headers); player.torrent = torrent; - player.on('destroy', publicStream.destroy.customTorrent(player)); + player.on('destroy', () => torrent?.destroy()); break; default: break; @@ -250,25 +252,33 @@ class NPlayerAdapter { }; playNext = (options: any) => { - if (this.player?.hls) publicStream.destroy.customHls(this.player); - if (this.player?.flv) publicStream.destroy.customFlv(this.player); - if (this.player?.mpd) publicStream.destroy.customDash(this.player); - if (this.player?.torrent) publicStream.destroy.customTorrent(this.player); + // @ts-ignore + if (this.player?.hls) this.player.hls.destroy(); + // @ts-ignore + if (this.player?.flv) this.player.flv.destroy(); + // @ts-ignore + if (this.player?.mpd) this.player.mpd.destroy(); + // @ts-ignore + if (this.player?.torrent) this.player.torrent.destroy(); switch (options.type) { case 'customMp4': this.player!.video.src = options.url; break; case 'customHls': + // @ts-ignore this.player.hls = publicStream.create.customHls(this.player!.video, options.url); break; case 'customFlv': + // @ts-ignore this.player.flv = publicStream.create.customFlv(this.player!.video, options.url); break; case 'customDash': + // @ts-ignore this.player.mpd = publicStream.create.customDash(this.player!.video, options.url); break; case 'customWebTorrent': + // @ts-ignore this.player.torrent = publicStream.create.customTorrent(this.player!.video, options.url); break; default: diff --git a/src/renderer/src/utils/common/player/playerModule/xgplayer.ts b/src/renderer/src/components/player/src/core/xgplayer.ts similarity index 98% rename from src/renderer/src/utils/common/player/playerModule/xgplayer.ts rename to src/renderer/src/components/player/src/core/xgplayer.ts index d5f4707d1..fc8d3a70f 100644 --- a/src/renderer/src/utils/common/player/playerModule/xgplayer.ts +++ b/src/renderer/src/components/player/src/core/xgplayer.ts @@ -9,7 +9,8 @@ import Mp4Plugin from 'xgplayer-mp4'; import ShakaPlugin from 'xgplayer-shaka'; // import DashPlugin from 'xgplayer-dash'; -import { publicColor, publicIcons, playerStorage } from './components'; +import { playerStorage } from '../utils/tool'; +import { publicColor, publicIcons } from '../utils/static'; class XgPlayerAdapter { player: XgPlayer | null = null; @@ -67,7 +68,7 @@ class XgPlayerAdapter { if (!this.player) return; comments = comments.map((item, index) => ({ duration: 5000, - id: String(index + 1), + id: (index + 1).toString(), txt: item.text, start: item.time * 1000, mode: ['left', 'right'].includes(item.mode) ? 'scroll' : item.mode, diff --git a/src/renderer/src/utils/common/player/playerModule/components/modules/webtorrent.ts b/src/renderer/src/components/player/src/modules/webtorrent.ts similarity index 100% rename from src/renderer/src/utils/common/player/playerModule/components/modules/webtorrent.ts rename to src/renderer/src/components/player/src/modules/webtorrent.ts diff --git a/src/renderer/src/components/player/src/multi-player.tsx b/src/renderer/src/components/player/src/multi-player.tsx new file mode 100644 index 000000000..73652d76f --- /dev/null +++ b/src/renderer/src/components/player/src/multi-player.tsx @@ -0,0 +1,108 @@ +import { defineComponent, onUnmounted, ref, shallowRef, toRaw } from 'vue'; +import type { SetupContext } from 'vue'; +import { ArtPlayerAdapter, DPlayerAdapter, NPlayerAdapter, XgPlayerAdapter } from './core'; +import { singleton, mediaUtils } from './utils/tool'; +import './assets/css/index.less'; + +const MultiPlayer = defineComponent({ + name: 'MultiPlayer', + emits: ['updateTime'], + setup(_props, ctx: SetupContext) { + const adapter = shallowRef(); + const mseRef = ref(); + const adapterRelation = { + artplayer: ArtPlayerAdapter, + dplayer: DPlayerAdapter, + nplayer: NPlayerAdapter, + xgplayer: XgPlayerAdapter, + }; + + const formatUrlHeaders = (url: string, headers: { [key: string]: string }) => { + if (headers) { + for (const key in headers) { + url += `@${key}=${headers[key]}`; + } + } + return url; + }; + + const formatRemoveUnSafeHeaders = (headers: { [key: string]: string }) => { + const unsafeHeads = ['host', 'referer', 'origin', 'user-agent', 'content-length', 'set-cookie']; + + for (const key in headers) { + if (unsafeHeads.includes(key.toLowerCase())) delete headers[key]; + } + + return headers; + }; + + const create = async (doc: { [key: string]: any }, type: string = 'artplayer') => { + if (!doc?.url) return; + if (!Object.keys(adapterRelation).includes(type)) return; + if (adapter.value) await destroy(); + const singleAdapter = singleton(adapterRelation?.[type]); + adapter.value = new singleAdapter(); + + if (mseRef.value) mseRef.value.id = doc.container; + if (!doc.type) { + const checkType = await mediaUtils.checkMediaType(doc.url); + if (checkType === 'unknown' && !checkType) return; + doc.type = checkType; + } + doc.url = formatUrlHeaders(doc.url, doc.headers); + doc.type = mediaUtils.mediaType2PlayerType(doc.type); + doc.headers = formatRemoveUnSafeHeaders(doc.headers); + await adapter.value.create(toRaw(doc)); + }; + + const destroy = async () => { + if (!adapter.value) return; + await adapter.value.destroy(); + adapter.value = null; + }; + + const play = async () => { + if (!adapter.value) return; + await adapter.value.play(); + }; + + const pause = async () => { + if (!adapter.value) return; + await adapter.value.pause(); + }; + + const barrage = async (comments: string[], url: string, id: string) => { + if (!adapter.value) return; + await adapter.value.barrage(toRaw(comments), url, id); + }; + + const onTimeUpdate = async () => { + if (!adapter.value) return; + await adapter.value.onTimeUpdate(({ currentTime, duration }) => { + ctx.emit('updateTime', { currentTime, duration }); + }); + }; + + onUnmounted(() => { + destroy(); + }); + + ctx.expose({ + barrage, + create, + destroy, + play, + pause, + onTimeUpdate + }); + + return () => ( +
+
+
+ ); + }, +}); + +export default MultiPlayer; +export type MultiPlayerInstance = InstanceType; \ No newline at end of file diff --git a/src/renderer/src/utils/common/player/playerModule/components/depend.ts b/src/renderer/src/components/player/src/utils/media-stream.ts similarity index 92% rename from src/renderer/src/utils/common/player/playerModule/components/depend.ts rename to src/renderer/src/components/player/src/utils/media-stream.ts index 6c8c2f1fd..6055a24e1 100644 --- a/src/renderer/src/utils/common/player/playerModule/components/depend.ts +++ b/src/renderer/src/components/player/src/utils/media-stream.ts @@ -2,12 +2,15 @@ import MpegTs from 'mpegts.js'; import flvjs from 'flv.js'; import Hls from 'hls.js'; -import WebTorrent from './modules/webtorrent'; +import WebTorrent from '../modules/webtorrent'; // @ts-ignore import shaka from 'shaka-player/dist/shaka-player.compiled'; const publicOptions = { - hls: {}, + hls: { + maxBufferLength: 600, // 缓冲区最大长度 + liveSyncDurationCount: 10, // 直播同步持续时间计数 + }, flv: { mediaDataSource: { type: 'flv', @@ -35,7 +38,7 @@ const publicStream = { if (Hls.isSupported()) { const options: any = Object.assign({}, { ...publicOptions.hls }); if (Object.keys(headers).length > 0) { - options.xhrSetup = function (xhr, _url) { + options.xhrSetup = function (xhr: any, _url: string) { xhr.withCredentials = true; // do send cookies for (const key in headers) { xhr.setRequestHeader(key, headers[key]); @@ -70,8 +73,6 @@ const publicStream = { const options = publicOptions.webtorrent; const client = new WebTorrent(options); const torrentId = url; - video.src = ''; - video.preload = 'metadata'; client.add(torrentId, (torrent) => { const file = torrent.files.find((file) => file.name.endsWith('.mp4') || file.name.endsWith('.mkv')); file.renderTo(video, { @@ -197,30 +198,27 @@ const publicStream = { }, destroy: { customHls: (player: any) => { - player.hls.destroy(); + if (player?.hls) player.hls.destroy(); delete player.hls; }, customFlv: (player: any) => { - player.flv.pause(); - player.flv.unload(); - player.flv.detachMediaElement(); - player.flv.destroy(); + if (player?.flv) player.flv.destroy(); delete player.flv; }, customDash: (player: any) => { - player.mpd.destroy(); + if (player?.mpd) player.mpd.destroy(); delete player.mpd; }, customTorrent: (player: any) => { // player.torrent.remove(player.video.src); - player.torrent.destroy(); + if (player?.torrent) player.torrent.destroy(); delete player.torrent; }, customMpegts: (player: any) => { - player.mpegts.destroy(); + if (player?.mpegts) player.mpegts.destroy(); delete player.mpegts; }, }, }; -export { publicStream }; +export default publicStream; diff --git a/src/renderer/src/utils/common/player/playerModule/components/static.ts b/src/renderer/src/components/player/src/utils/static.ts similarity index 100% rename from src/renderer/src/utils/common/player/playerModule/components/static.ts rename to src/renderer/src/components/player/src/utils/static.ts diff --git a/src/renderer/src/components/player/src/utils/tool.ts b/src/renderer/src/components/player/src/utils/tool.ts new file mode 100644 index 000000000..0eacf8771 --- /dev/null +++ b/src/renderer/src/components/player/src/utils/tool.ts @@ -0,0 +1,182 @@ +import { requestComplete } from '@/utils/request'; + +const publicBarrageSend = (url: string, options: any) => { + const removeEmptyParams = (url: string) => { + const urlObj = new URL(url); + const params = new URLSearchParams(urlObj.search.slice(1)); + params.forEach((value, key) => { + if (!value) params.delete(key); + }); + urlObj.search = params.toString(); + return urlObj.toString(); + }; + + const fd = new FormData(); + fd.append('player', options.id); + fd.append('text', options.text); + fd.append('time', options.time); + fd.append('color', options.color); + fd.append('type', options.type); + requestComplete({ url: removeEmptyParams(url), method: 'POST', data: fd, headers: { 'Content-Type': 'multipart/form-data' } }); +}; + +class publicStorage { + name: string; + settings: {}; + constructor(name: string) { + this.name = name; + this.settings = {}; + } + + get(key: string) { + try { + const storage = JSON.parse(localStorage.getItem(this.name) || '{}'); + return key ? storage[key] : storage; + } catch (error) { + return key ? this.settings[key] : this.settings; + } + } + + set(key: string, value: any) { + try { + const storage = Object.assign({}, this.get(''), { + [key]: value, + }); + localStorage.setItem(this.name, JSON.stringify(storage)); + } catch (error) { + this.settings[key] = value; + } + } + + del(key: string) { + try { + const storage = this.get(''); + delete storage[key]; + localStorage.setItem(this.name, JSON.stringify(storage)); + } catch (error) { + delete this.settings[key]; + } + } + + clear() { + try { + localStorage.removeItem(this.name); + } catch (error) { + this.settings = {}; + } + } +} + +const playerStorage = new publicStorage('player_settings'); + +const singleton = any>(className: T): T => { + let instance: InstanceType | null = null; + const proxy = new Proxy(className, { + construct(target, args) { + if (!instance) { + instance = Reflect.construct(target, args); + } + return instance as InstanceType; + }, + }); + proxy.prototype.construct = proxy; + return proxy; +}; + +const mediaUtils = (() => { + // 支持的媒体格式映射 + const supportedFormats: Record = { + 'video/mp4': 'mp4', + 'video/x-flv': 'flv', + 'video/ogg': 'ogx', + 'application/vnd.apple.mpegurl': 'm3u8', + 'application/x-mpegURL': 'm3u8', + 'application/octet-stream': 'm3u8', + 'video/avi': 'avi', + 'video/x-msvideo': 'avi', + 'video/x-matroska': 'mkv', + 'video/quicktime': 'mov', + 'video/x-ms-wmv': 'wmv', + 'video/3gpp': '3gp', + 'audio/mpeg': 'mp3', + 'audio/wav': 'wav', + 'audio/aac': 'aac', + 'audio/ogg': 'oga', + }; + + // 视频类型与播放器映射 + const videoTypeMap: Record = { + mp4: 'customMp4', + flv: 'customFlv', + m3u8: 'customHls', + mpd: 'customDash', + magnet: 'customWebTorrent', + mp3: 'customMpegts', + m4a: 'customMpegts', + wav: 'customMpegts', + flac: 'customMpegts', + aac: 'customMpegts', + ogg: 'customMpegts', + wma: 'customMpegts', + }; + + // 根据URL直接匹配文件格式 + const supportedFormatsLookup = (url: string): string | undefined => { + if (url.startsWith('magnet:')) return 'magnet'; + else if (/^https?:\/\//.test(url)) { + try { + const { pathname } = new URL(url); + const parts = pathname.split('.'); + const suffix = parts.length > 1 ? parts.slice(-1)[0] : ''; + return Object.values(supportedFormats).find((format) => suffix.includes(format)); + } catch (err) { + return undefined; + } + } + return undefined; + }; + + // 映射 Content-Type 到具体格式 + const mapContentTypeToFormat = (contentType: string): string => { + const entry = Object.entries(supportedFormats).find(([type]) => + contentType.includes(type) + ); + return entry ? entry[1] : 'unknown'; + }; + + // 使用 fetch 获取媒体类型 + const getMediaType = async (url: string): Promise => { + try { + const response = await requestComplete({ url, method: 'HEAD', timeout: 5000 }); + if (response.status === 200) { + const contentType = response.headers['content-type'] || ''; + return mapContentTypeToFormat(contentType); + } + return undefined; + } catch (err: any) { + console.log(`[mediaUtils][getMediaType][error]: ${err.message}`); + return undefined; + } + }; + + // 检查媒体类型 + const checkMediaType = async (url: string): Promise => { + if (!url || !(/^https?:\/\//.test(url) || url.startsWith('magnet:'))) return undefined; + + const fileType = supportedFormatsLookup(url); + return fileType || (await getMediaType(url)); + }; + + // 映射视频类型到播放器类型 + const mediaType2PlayerType = (videoType: string): string => { + return videoTypeMap[videoType] || 'customHls'; // 默认播放器类型为 customHls + }; + + // 导出函数 + return { + checkMediaType, + mediaType2PlayerType, + }; +})(); + +export { publicBarrageSend, playerStorage, singleton, mediaUtils }; diff --git a/src/renderer/src/utils/common/player/index.ts b/src/renderer/src/utils/common/player/index.ts deleted file mode 100644 index 8397f4e2b..000000000 --- a/src/renderer/src/utils/common/player/index.ts +++ /dev/null @@ -1,62 +0,0 @@ -/*! - * @module multi-player - * @brief 多播放器集成方案 - * @author HiramWong - * @update 2024-10-28 - * @version 0.1.4 - * - * **ChangeLog说明**: - * - 2024.5.12: - * - 初步实现方法集成[xgplayer|nplayer|dplayer|artplayer] - * - 2024.5.13: - * - 除xgplayer外增加弹幕发送逻辑 - * - 优化xgplayer兼容性-xgplayer-flv.js替代xgplayer-flv, xgplayer-hls.js替代xgplayer-hls - * - 2024.5.14: - * - 优化公共流逻辑-先检测环境是否支持 - * - 修复seek方法xgplayer进度跳转失败 - * - 修复playerNext方法nplayer会退出全屏 - * - 2024.5.15: - * - 修复取消监听事件导致组件内监听事件失效-提取为公共方法[时间变动|弹幕发送] - * - 修复自定义dplayer的off传入func匹配错误 - * - 2024.5.16: - * - 扩展dplayer画中画功能、控制栏弹幕开关 - * - 调整dplayer参数unlimited为false-解决阻塞主进程问题 - * - 修复触发playerNext方法在触发playerBarrage方法切换失败-没有赋值dp.options.video.src导致地址一直不变 - * - 2024.5.25: - * - 动态异步加载依赖 - * - 按播放器解耦 - * - 2024.6.1: - * - 修复playerNext方法nplayer类型为mp4不生效 - * - 统一风格-nplayer音量进度条改为垂直|扩展画中画控制栏显示|live模式去进度条 - * - 统一风格-live模式去除相关弹幕组件[减少内存] - * - 2024.6.2: - * - 修复mpd无法播放问题-类型映射 - * - 修复xgplayer初始化播放器失败-plugin赋值错误 - * - 优化mpd播放-使用shaka库替代dash库[dash库经常卡死|反复请求同一分片] - * - 修复artplayer弹幕库5.1版本-参数对齐 - * - 修复nplayer弹幕不滚动-BulletOption中type赋值错误 - * - 修复dplayer弹幕控制不生效-弹幕开关控制逻辑误删 - * - 2024.6.3: - * - 支持mp3|m4a音频-使用MPEG-TS库 - * - 2024.6.4: - * - 修复西瓜播放器加载视频错误 - * - 修复多次创建播放器扩展插件会重复添加-默认参数使用深拷贝 - * - 2024.6.29: - * - 修复在live模式下切换下一个报错-需判断弹幕组件库是否加载 - * - 修复flv数据流切换失败, 始终播放一个视频流 - * - 统一调用公共逻辑摧毁实例(除西瓜播放器外) - * - 去除nplayer控制条调用画中画(遗留多次创建会创建多个dom问题bug) - * - 2024.6.30: - * - 优化记忆音量和倍速(遗留art播放器UI显示不对bug-已提issue)-存储localStorage - * - 统一倍速为[0.5, 0.75, 1, 1.25, 1.5, 2] - * - 2024.7.1: - * - 扩展dplayer播放器缺失once方法 - * - 重写dplayer播放器destroy方法-始终会释放playrate为1的信号 - * - 2024.10.28: - * - 重写所有适配器-改为class适配器 - * - 共享记忆数据,并初始化设置(注意:dplayer设置静音项图标不对应, artplayer设置倍速值不生效)-实际均生效 - * - 2024.11.7: - * - 弹幕字母拼写错误 - * - * --- - */ diff --git a/src/renderer/src/utils/common/player/playerModule/components/index.ts b/src/renderer/src/utils/common/player/playerModule/components/index.ts deleted file mode 100644 index 4a0d28ff6..000000000 --- a/src/renderer/src/utils/common/player/playerModule/components/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { publicIcons, publicColor } from './static'; -import { publicStream } from './depend'; -import { publicBarrageSend, publicStorage, playerStorage } from './utils'; - -export { publicBarrageSend, publicIcons, publicColor, publicStream, publicStorage, playerStorage }; diff --git a/src/renderer/src/utils/common/player/playerModule/components/utils.ts b/src/renderer/src/utils/common/player/playerModule/components/utils.ts deleted file mode 100644 index 5f0834ea2..000000000 --- a/src/renderer/src/utils/common/player/playerModule/components/utils.ts +++ /dev/null @@ -1,62 +0,0 @@ -const publicBarrageSend = (url: string, options: any) => { - const okd = new FormData(); - okd.append('player', options.id); - okd.append('text', options.text); - okd.append('time', options.time); - okd.append('color', options.color); - okd.append('type', options.type); - const xhr = new XMLHttpRequest(); - xhr.open('POST', url, true); - xhr.send(okd); -}; - -class publicStorage { - name: string; - settings: {}; - constructor(name) { - this.name = name; - this.settings = {}; - } - - get(key) { - try { - const storage = JSON.parse(localStorage.getItem(this.name) || '{}'); - return key ? storage[key] : storage; - } catch (error) { - return key ? this.settings[key] : this.settings; - } - } - - set(key, value) { - try { - const storage = Object.assign({}, this.get(''), { - [key]: value, - }); - localStorage.setItem(this.name, JSON.stringify(storage)); - } catch (error) { - this.settings[key] = value; - } - } - - del(key) { - try { - const storage = this.get(''); - delete storage[key]; - localStorage.setItem(this.name, JSON.stringify(storage)); - } catch (error) { - delete this.settings[key]; - } - } - - clear() { - try { - localStorage.removeItem(this.name); - } catch (error) { - this.settings = {}; - } - } -} - -const playerStorage = new publicStorage('player_settings'); - -export { publicBarrageSend, publicStorage, playerStorage }; From 9fb123b2a3e84899918866d3a9a0a5762e67fb4a Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Sun, 15 Dec 2024 15:23:57 +0800 Subject: [PATCH 035/175] [optimize] multi-player check mpd --- src/renderer/src/components/player/src/utils/tool.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/renderer/src/components/player/src/utils/tool.ts b/src/renderer/src/components/player/src/utils/tool.ts index 0eacf8771..1c947a786 100644 --- a/src/renderer/src/components/player/src/utils/tool.ts +++ b/src/renderer/src/components/player/src/utils/tool.ts @@ -92,6 +92,7 @@ const mediaUtils = (() => { 'application/vnd.apple.mpegurl': 'm3u8', 'application/x-mpegURL': 'm3u8', 'application/octet-stream': 'm3u8', + 'application/dash+xml': 'mpd', 'video/avi': 'avi', 'video/x-msvideo': 'avi', 'video/x-matroska': 'mkv', From 457f735934e6edb3b4eee610819be334c56aad27 Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Sun, 15 Dec 2024 15:56:22 +0800 Subject: [PATCH 036/175] [change] use new multi-player --- .../src/components/player/src/utils/tool.ts | 4 +- .../src/locales/lang/en_US/pages/player.ts | 1 + .../src/locales/lang/zh_CN/pages/player.ts | 1 + src/renderer/src/pages/analyze/index.vue | 11 +- .../lab/components/snifferPlay/index.vue | 58 +++--- .../src/pages/play/componets/AsideFilm.vue | 172 +++++++++--------- .../pages/play/componets/DialogDownload.vue | 8 +- src/renderer/src/pages/play/index.vue | 30 +-- src/renderer/src/utils/common/film.ts | 62 ++++--- src/renderer/src/utils/tool.ts | 118 +----------- 10 files changed, 192 insertions(+), 273 deletions(-) diff --git a/src/renderer/src/components/player/src/utils/tool.ts b/src/renderer/src/components/player/src/utils/tool.ts index 1c947a786..f3b379d17 100644 --- a/src/renderer/src/components/player/src/utils/tool.ts +++ b/src/renderer/src/components/player/src/utils/tool.ts @@ -138,11 +138,11 @@ const mediaUtils = (() => { }; // 映射 Content-Type 到具体格式 - const mapContentTypeToFormat = (contentType: string): string => { + const mapContentTypeToFormat = (contentType: string): string | undefined => { const entry = Object.entries(supportedFormats).find(([type]) => contentType.includes(type) ); - return entry ? entry[1] : 'unknown'; + return entry ? entry[1] : undefined; }; // 使用 fetch 获取媒体类型 diff --git a/src/renderer/src/locales/lang/en_US/pages/player.ts b/src/renderer/src/locales/lang/en_US/pages/player.ts index ebe39cadf..a59b6089f 100644 --- a/src/renderer/src/locales/lang/en_US/pages/player.ts +++ b/src/renderer/src/locales/lang/en_US/pages/player.ts @@ -44,6 +44,7 @@ export default { official: 'Analyze completed, data is derived from {0}', noDefaultAnalyze: 'Not set default, Choose your own analysis line', noRecommendSearch: 'No recommendation found for this source, Switch is not performed', + noPlayUrl: 'Play address acquisition failed, please change the source or line', next: 'One moment, Switching next', }, placeholder: { diff --git a/src/renderer/src/locales/lang/zh_CN/pages/player.ts b/src/renderer/src/locales/lang/zh_CN/pages/player.ts index ff4a91f43..9fee624da 100644 --- a/src/renderer/src/locales/lang/zh_CN/pages/player.ts +++ b/src/renderer/src/locales/lang/zh_CN/pages/player.ts @@ -44,6 +44,7 @@ export default { sniiferError: '嗅探失败,请换源', noDefaultAnalyze: '未配置默认解析,自行选择解析线路', noRecommendSearch: '该源未找到相关推荐,不执行本次切换', + noPlayUrl: '播放地址获取失败,请换源或线路', next: '请稍候,正在切换下集', }, placeholder: { diff --git a/src/renderer/src/pages/analyze/index.vue b/src/renderer/src/pages/analyze/index.vue index f3c65168a..c624153ac 100644 --- a/src/renderer/src/pages/analyze/index.vue +++ b/src/renderer/src/pages/analyze/index.vue @@ -38,7 +38,7 @@
- +
@@ -71,14 +71,14 @@ import { putHistory, addHistory, findHistory } from '@/api/history'; import { fetchAnalyzeHelper } from '@/utils/common/film'; import emitter from '@/utils/emitter'; +import { MultiPlayer } from '@/components/player'; import DialogHistoryView from './components/DialogHistory.vue'; import DialogIframemView from './components/DialogIframe.vue'; import DialogSearchView from './components/DialogSearch.vue'; import SharePopup from '@/components/share-popup/index.vue'; import CommonNav from '@/components/common-nav/index.vue'; -import PlayerView from '@/components/player/index.vue'; -const store = usePlayStore(); +const storePlayer = usePlayStore(); const searchText = ref(''); const urlTitle = ref(''); // 播放地址的标题 const analyzeUrl = ref(''); // 输入需要解析地址 @@ -181,13 +181,12 @@ const getVideoInfo = async (url: string, title: string) => { playFormData.value.type = analyzeRes.mediaType; playFormData.value.url = analyzeRes.url; playFormData.value.headers = analyzeRes.headers; - const { playerMode } = store.setting; + const playerMode = storePlayer.setting.playerMode; if (playerMode.type === 'custom') { window.electron.ipcRenderer.send('call-player', playerMode.external, playFormData.value.url); } else { if (playerRef.value) { - await playerRef.value.init(); - await playerRef.value.create(playFormData.value); + await playerRef.value.create(playFormData.value, playerMode.type); }; } diff --git a/src/renderer/src/pages/lab/components/snifferPlay/index.vue b/src/renderer/src/pages/lab/components/snifferPlay/index.vue index 79131deeb..f15d75140 100644 --- a/src/renderer/src/pages/lab/components/snifferPlay/index.vue +++ b/src/renderer/src/pages/lab/components/snifferPlay/index.vue @@ -54,6 +54,7 @@ + @@ -65,7 +66,7 @@
- +
@@ -75,11 +76,13 @@ - + diff --git a/src/renderer/src/components/markdown-render/style/github-markdown.less b/src/renderer/src/components/markdown-render/style/github-markdown.less new file mode 100644 index 000000000..d838fd29d --- /dev/null +++ b/src/renderer/src/components/markdown-render/style/github-markdown.less @@ -0,0 +1,1103 @@ +:root[theme-mode='dark'] { + .markdown-body { + color-scheme: dark; + --color-prettylights-syntax-comment: #8b949e; + --color-prettylights-syntax-constant: #79c0ff; + --color-prettylights-syntax-entity: #d2a8ff; + --color-prettylights-syntax-storage-modifier-import: #c9d1d9; + --color-prettylights-syntax-entity-tag: #7ee787; + --color-prettylights-syntax-keyword: #ff7b72; + --color-prettylights-syntax-string: #a5d6ff; + --color-prettylights-syntax-variable: #ffa657; + --color-prettylights-syntax-brackethighlighter-unmatched: #f85149; + --color-prettylights-syntax-invalid-illegal-text: #f0f6fc; + --color-prettylights-syntax-invalid-illegal-bg: #8e1519; + --color-prettylights-syntax-carriage-return-text: #f0f6fc; + --color-prettylights-syntax-carriage-return-bg: #b62324; + --color-prettylights-syntax-string-regexp: #7ee787; + --color-prettylights-syntax-markup-list: #f2cc60; + --color-prettylights-syntax-markup-heading: #1f6feb; + --color-prettylights-syntax-markup-italic: #c9d1d9; + --color-prettylights-syntax-markup-bold: #c9d1d9; + --color-prettylights-syntax-markup-deleted-text: #ffdcd7; + --color-prettylights-syntax-markup-deleted-bg: #67060c; + --color-prettylights-syntax-markup-inserted-text: #aff5b4; + --color-prettylights-syntax-markup-inserted-bg: #033a16; + --color-prettylights-syntax-markup-changed-text: #ffdfb6; + --color-prettylights-syntax-markup-changed-bg: #5a1e02; + --color-prettylights-syntax-markup-ignored-text: #c9d1d9; + --color-prettylights-syntax-markup-ignored-bg: #1158c7; + --color-prettylights-syntax-meta-diff-range: #d2a8ff; + --color-prettylights-syntax-brackethighlighter-angle: #8b949e; + --color-prettylights-syntax-sublimelinter-gutter-mark: #484f58; + --color-prettylights-syntax-constant-other-reference-link: #a5d6ff; + --color-fg-default: #c9d1d9; + --color-fg-muted: #8b949e; + --color-fg-subtle: #6e7681; + --color-canvas-default: #0d1117; + --color-canvas-subtle: #161b22; + --color-border-default: #30363d; + --color-border-muted: #21262d; + --color-neutral-muted: rgba(110,118,129,0.4); + --color-accent-fg: #58a6ff; + --color-accent-emphasis: #1f6feb; + --color-attention-subtle: rgba(187,128,9,0.15); + --color-danger-fg: #f85149; + } +} + +:root, +:root[theme-mode='light'] { + .markdown-body { + color-scheme: light; + --color-prettylights-syntax-comment: #6e7781; + --color-prettylights-syntax-constant: #0550ae; + --color-prettylights-syntax-entity: #8250df; + --color-prettylights-syntax-storage-modifier-import: #24292f; + --color-prettylights-syntax-entity-tag: #116329; + --color-prettylights-syntax-keyword: #cf222e; + --color-prettylights-syntax-string: #0a3069; + --color-prettylights-syntax-variable: #953800; + --color-prettylights-syntax-brackethighlighter-unmatched: #82071e; + --color-prettylights-syntax-invalid-illegal-text: #f6f8fa; + --color-prettylights-syntax-invalid-illegal-bg: #82071e; + --color-prettylights-syntax-carriage-return-text: #f6f8fa; + --color-prettylights-syntax-carriage-return-bg: #cf222e; + --color-prettylights-syntax-string-regexp: #116329; + --color-prettylights-syntax-markup-list: #3b2300; + --color-prettylights-syntax-markup-heading: #0550ae; + --color-prettylights-syntax-markup-italic: #24292f; + --color-prettylights-syntax-markup-bold: #24292f; + --color-prettylights-syntax-markup-deleted-text: #82071e; + --color-prettylights-syntax-markup-deleted-bg: #ffebe9; + --color-prettylights-syntax-markup-inserted-text: #116329; + --color-prettylights-syntax-markup-inserted-bg: #dafbe1; + --color-prettylights-syntax-markup-changed-text: #953800; + --color-prettylights-syntax-markup-changed-bg: #ffd8b5; + --color-prettylights-syntax-markup-ignored-text: #eaeef2; + --color-prettylights-syntax-markup-ignored-bg: #0550ae; + --color-prettylights-syntax-meta-diff-range: #8250df; + --color-prettylights-syntax-brackethighlighter-angle: #57606a; + --color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f; + --color-prettylights-syntax-constant-other-reference-link: #0a3069; + --color-fg-default: #24292f; + --color-fg-muted: #57606a; + --color-fg-subtle: #6e7781; + --color-canvas-default: #ffffff; + --color-canvas-subtle: #f6f8fa; + --color-border-default: #d0d7de; + --color-border-muted: hsla(210,18%,87%,1); + --color-neutral-muted: rgba(175,184,193,0.2); + --color-accent-fg: #0969da; + --color-accent-emphasis: #0969da; + --color-attention-subtle: #fff8c5; + --color-danger-fg: #cf222e; + } +} + +.markdown-body { + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + margin: 0; + color: var(--color-fg-default); + background-color: var(--color-canvas-default); + font-family: -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"; + font-size: 16px; + line-height: 1.5; + word-wrap: break-word; +} + +.markdown-body .octicon { + display: inline-block; + fill: currentColor; + vertical-align: text-bottom; +} + +.markdown-body h1:hover .anchor .octicon-link:before, +.markdown-body h2:hover .anchor .octicon-link:before, +.markdown-body h3:hover .anchor .octicon-link:before, +.markdown-body h4:hover .anchor .octicon-link:before, +.markdown-body h5:hover .anchor .octicon-link:before, +.markdown-body h6:hover .anchor .octicon-link:before { + width: 16px; + height: 16px; + content: ' '; + display: inline-block; + background-color: currentColor; + -webkit-mask-image: url("data:image/svg+xml,"); + mask-image: url("data:image/svg+xml,"); +} + +.markdown-body details, +.markdown-body figcaption, +.markdown-body figure { + display: block; +} + +.markdown-body summary { + display: list-item; +} + +.markdown-body [hidden] { + display: none !important; +} + +.markdown-body a { + background-color: transparent; + color: var(--color-accent-fg); + text-decoration: none; +} + +.markdown-body abbr[title] { + border-bottom: none; + text-decoration: underline dotted; +} + +.markdown-body b, +.markdown-body strong { + font-weight: var(--base-text-weight-semibold, 600); +} + +.markdown-body dfn { + font-style: italic; +} + +.markdown-body h1 { + margin: .67em 0; + font-weight: var(--base-text-weight-semibold, 600); + padding-bottom: .3em; + font-size: 2em; + border-bottom: 1px solid var(--color-border-muted); +} + +.markdown-body mark { + background-color: var(--color-attention-subtle); + color: var(--color-fg-default); +} + +.markdown-body small { + font-size: 90%; +} + +.markdown-body sub, +.markdown-body sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +.markdown-body sub { + bottom: -0.25em; +} + +.markdown-body sup { + top: -0.5em; +} + +.markdown-body img { + border-style: none; + max-width: 100%; + box-sizing: content-box; + background-color: var(--color-canvas-default); +} + +.markdown-body code, +.markdown-body kbd, +.markdown-body pre, +.markdown-body samp { + font-family: monospace; + font-size: 1em; +} + +.markdown-body figure { + margin: 1em 40px; +} + +.markdown-body hr { + box-sizing: content-box; + overflow: hidden; + background: transparent; + border-bottom: 1px solid var(--color-border-muted); + height: .25em; + padding: 0; + margin: 24px 0; + background-color: var(--color-border-default); + border: 0; +} + +.markdown-body input { + font: inherit; + margin: 0; + overflow: visible; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +.markdown-body [type=button], +.markdown-body [type=reset], +.markdown-body [type=submit] { + -webkit-appearance: button; +} + +.markdown-body [type=checkbox], +.markdown-body [type=radio] { + box-sizing: border-box; + padding: 0; +} + +.markdown-body [type=number]::-webkit-inner-spin-button, +.markdown-body [type=number]::-webkit-outer-spin-button { + height: auto; +} + +.markdown-body [type=search]::-webkit-search-cancel-button, +.markdown-body [type=search]::-webkit-search-decoration { + -webkit-appearance: none; +} + +.markdown-body ::-webkit-input-placeholder { + color: inherit; + opacity: .54; +} + +.markdown-body ::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; +} + +.markdown-body a:hover { + text-decoration: underline; +} + +.markdown-body ::placeholder { + color: var(--color-fg-subtle); + opacity: 1; +} + +.markdown-body hr::before { + display: table; + content: ""; +} + +.markdown-body hr::after { + display: table; + clear: both; + content: ""; +} + +.markdown-body table { + border-spacing: 0; + border-collapse: collapse; + display: block; + width: max-content; + max-width: 100%; + overflow: auto; +} + +.markdown-body td, +.markdown-body th { + padding: 0; +} + +.markdown-body details summary { + cursor: pointer; +} + +.markdown-body details:not([open])>*:not(summary) { + display: none !important; +} + +.markdown-body a:focus, +.markdown-body [role=button]:focus, +.markdown-body input[type=radio]:focus, +.markdown-body input[type=checkbox]:focus { + outline: 2px solid var(--color-accent-fg); + outline-offset: -2px; + box-shadow: none; +} + +.markdown-body a:focus:not(:focus-visible), +.markdown-body [role=button]:focus:not(:focus-visible), +.markdown-body input[type=radio]:focus:not(:focus-visible), +.markdown-body input[type=checkbox]:focus:not(:focus-visible) { + outline: solid 1px transparent; +} + +.markdown-body a:focus-visible, +.markdown-body [role=button]:focus-visible, +.markdown-body input[type=radio]:focus-visible, +.markdown-body input[type=checkbox]:focus-visible { + outline: 2px solid var(--color-accent-fg); + outline-offset: -2px; + box-shadow: none; +} + +.markdown-body a:not([class]):focus, +.markdown-body a:not([class]):focus-visible, +.markdown-body input[type=radio]:focus, +.markdown-body input[type=radio]:focus-visible, +.markdown-body input[type=checkbox]:focus, +.markdown-body input[type=checkbox]:focus-visible { + outline-offset: 0; +} + +.markdown-body kbd { + display: inline-block; + padding: 3px 5px; + font: 11px ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + line-height: 10px; + color: var(--color-fg-default); + vertical-align: middle; + background-color: var(--color-canvas-subtle); + border: solid 1px var(--color-neutral-muted); + border-bottom-color: var(--color-neutral-muted); + border-radius: 6px; + box-shadow: inset 0 -1px 0 var(--color-neutral-muted); +} + +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin-top: 24px; + margin-bottom: 16px; + font-weight: var(--base-text-weight-semibold, 600); + line-height: 1.25; +} + +.markdown-body h2 { + font-weight: var(--base-text-weight-semibold, 600); + padding-bottom: .3em; + font-size: 1.5em; + border-bottom: 1px solid var(--color-border-muted); +} + +.markdown-body h3 { + font-weight: var(--base-text-weight-semibold, 600); + font-size: 1.25em; +} + +.markdown-body h4 { + font-weight: var(--base-text-weight-semibold, 600); + font-size: 1em; +} + +.markdown-body h5 { + font-weight: var(--base-text-weight-semibold, 600); + font-size: .875em; +} + +.markdown-body h6 { + font-weight: var(--base-text-weight-semibold, 600); + font-size: .85em; + color: var(--color-fg-muted); +} + +.markdown-body p { + margin-top: 0; + margin-bottom: 10px; +} + +.markdown-body blockquote { + margin: 0; + padding: 0 1em; + color: var(--color-fg-muted); + border-left: .25em solid var(--color-border-default); +} + +.markdown-body ul, +.markdown-body ol { + margin-top: 0; + margin-bottom: 0; + padding-left: 2em; +} + +.markdown-body ol ol, +.markdown-body ul ol { + list-style-type: lower-roman; +} + +.markdown-body ul ul ol, +.markdown-body ul ol ol, +.markdown-body ol ul ol, +.markdown-body ol ol ol { + list-style-type: lower-alpha; +} + +.markdown-body dd { + margin-left: 0; +} + +.markdown-body tt, +.markdown-body code, +.markdown-body samp { + font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + font-size: 12px; +} + +.markdown-body pre { + margin-top: 0; + margin-bottom: 0; + font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + font-size: 12px; + word-wrap: normal; +} + +.markdown-body .octicon { + display: inline-block; + overflow: visible !important; + vertical-align: text-bottom; + fill: currentColor; +} + +.markdown-body input::-webkit-outer-spin-button, +.markdown-body input::-webkit-inner-spin-button { + margin: 0; + -webkit-appearance: none; + appearance: none; +} + +.markdown-body::before { + display: table; + content: ""; +} + +.markdown-body::after { + display: table; + clear: both; + content: ""; +} + +.markdown-body>*:first-child { + margin-top: 0 !important; +} + +.markdown-body>*:last-child { + margin-bottom: 0 !important; +} + +.markdown-body a:not([href]) { + color: inherit; + text-decoration: none; +} + +.markdown-body .absent { + color: var(--color-danger-fg); +} + +.markdown-body .anchor { + float: left; + padding-right: 4px; + margin-left: -20px; + line-height: 1; +} + +.markdown-body .anchor:focus { + outline: none; +} + +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre, +.markdown-body details { + margin-top: 0; + margin-bottom: 16px; +} + +.markdown-body blockquote>:first-child { + margin-top: 0; +} + +.markdown-body blockquote>:last-child { + margin-bottom: 0; +} + +.markdown-body h1 .octicon-link, +.markdown-body h2 .octicon-link, +.markdown-body h3 .octicon-link, +.markdown-body h4 .octicon-link, +.markdown-body h5 .octicon-link, +.markdown-body h6 .octicon-link { + color: var(--color-fg-default); + vertical-align: middle; + visibility: hidden; +} + +.markdown-body h1:hover .anchor, +.markdown-body h2:hover .anchor, +.markdown-body h3:hover .anchor, +.markdown-body h4:hover .anchor, +.markdown-body h5:hover .anchor, +.markdown-body h6:hover .anchor { + text-decoration: none; +} + +.markdown-body h1:hover .anchor .octicon-link, +.markdown-body h2:hover .anchor .octicon-link, +.markdown-body h3:hover .anchor .octicon-link, +.markdown-body h4:hover .anchor .octicon-link, +.markdown-body h5:hover .anchor .octicon-link, +.markdown-body h6:hover .anchor .octicon-link { + visibility: visible; +} + +.markdown-body h1 tt, +.markdown-body h1 code, +.markdown-body h2 tt, +.markdown-body h2 code, +.markdown-body h3 tt, +.markdown-body h3 code, +.markdown-body h4 tt, +.markdown-body h4 code, +.markdown-body h5 tt, +.markdown-body h5 code, +.markdown-body h6 tt, +.markdown-body h6 code { + padding: 0 .2em; + font-size: inherit; +} + +.markdown-body summary h1, +.markdown-body summary h2, +.markdown-body summary h3, +.markdown-body summary h4, +.markdown-body summary h5, +.markdown-body summary h6 { + display: inline-block; +} + +.markdown-body summary h1 .anchor, +.markdown-body summary h2 .anchor, +.markdown-body summary h3 .anchor, +.markdown-body summary h4 .anchor, +.markdown-body summary h5 .anchor, +.markdown-body summary h6 .anchor { + margin-left: -40px; +} + +.markdown-body summary h1, +.markdown-body summary h2 { + padding-bottom: 0; + border-bottom: 0; +} + +.markdown-body ul.no-list, +.markdown-body ol.no-list { + padding: 0; + list-style-type: none; +} + +.markdown-body ol[type=a] { + list-style-type: lower-alpha; +} + +.markdown-body ol[type=A] { + list-style-type: upper-alpha; +} + +.markdown-body ol[type=i] { + list-style-type: lower-roman; +} + +.markdown-body ol[type=I] { + list-style-type: upper-roman; +} + +.markdown-body ol[type="1"] { + list-style-type: decimal; +} + +.markdown-body div>ol:not([type]) { + list-style-type: decimal; +} + +.markdown-body ul ul, +.markdown-body ul ol, +.markdown-body ol ol, +.markdown-body ol ul { + margin-top: 0; + margin-bottom: 0; +} + +.markdown-body li>p { + margin-top: 16px; +} + +.markdown-body li+li { + margin-top: .25em; +} + +.markdown-body dl { + padding: 0; +} + +.markdown-body dl dt { + padding: 0; + margin-top: 16px; + font-size: 1em; + font-style: italic; + font-weight: var(--base-text-weight-semibold, 600); +} + +.markdown-body dl dd { + padding: 0 16px; + margin-bottom: 16px; +} + +.markdown-body table th { + font-weight: var(--base-text-weight-semibold, 600); +} + +.markdown-body table th, +.markdown-body table td { + padding: 6px 13px; + border: 1px solid var(--color-border-default); +} + +.markdown-body table tr { + background-color: var(--color-canvas-default); + border-top: 1px solid var(--color-border-muted); +} + +.markdown-body table tr:nth-child(2n) { + background-color: var(--color-canvas-subtle); +} + +.markdown-body table img { + background-color: transparent; +} + +.markdown-body img[align=right] { + padding-left: 20px; +} + +.markdown-body img[align=left] { + padding-right: 20px; +} + +.markdown-body .emoji { + max-width: none; + vertical-align: text-top; + background-color: transparent; +} + +.markdown-body span.frame { + display: block; + overflow: hidden; +} + +.markdown-body span.frame>span { + display: block; + float: left; + width: auto; + padding: 7px; + margin: 13px 0 0; + overflow: hidden; + border: 1px solid var(--color-border-default); +} + +.markdown-body span.frame span img { + display: block; + float: left; +} + +.markdown-body span.frame span span { + display: block; + padding: 5px 0 0; + clear: both; + color: var(--color-fg-default); +} + +.markdown-body span.align-center { + display: block; + overflow: hidden; + clear: both; +} + +.markdown-body span.align-center>span { + display: block; + margin: 13px auto 0; + overflow: hidden; + text-align: center; +} + +.markdown-body span.align-center span img { + margin: 0 auto; + text-align: center; +} + +.markdown-body span.align-right { + display: block; + overflow: hidden; + clear: both; +} + +.markdown-body span.align-right>span { + display: block; + margin: 13px 0 0; + overflow: hidden; + text-align: right; +} + +.markdown-body span.align-right span img { + margin: 0; + text-align: right; +} + +.markdown-body span.float-left { + display: block; + float: left; + margin-right: 13px; + overflow: hidden; +} + +.markdown-body span.float-left span { + margin: 13px 0 0; +} + +.markdown-body span.float-right { + display: block; + float: right; + margin-left: 13px; + overflow: hidden; +} + +.markdown-body span.float-right>span { + display: block; + margin: 13px auto 0; + overflow: hidden; + text-align: right; +} + +.markdown-body code, +.markdown-body tt { + padding: .2em .4em; + margin: 0; + font-size: 85%; + white-space: break-spaces; + background-color: var(--color-neutral-muted); + border-radius: 6px; +} + +.markdown-body code br, +.markdown-body tt br { + display: none; +} + +.markdown-body del code { + text-decoration: inherit; +} + +.markdown-body samp { + font-size: 85%; +} + +.markdown-body pre code { + font-size: 100%; +} + +.markdown-body pre>code { + padding: 0; + margin: 0; + word-break: normal; + white-space: pre; + background: transparent; + border: 0; +} + +.markdown-body .highlight { + margin-bottom: 16px; +} + +.markdown-body .highlight pre { + margin-bottom: 0; + word-break: normal; +} + +.markdown-body .highlight pre, +.markdown-body pre { + padding: 16px; + overflow: auto; + font-size: 85%; + line-height: 1.45; + background-color: var(--color-canvas-subtle); + border-radius: 6px; +} + +.markdown-body pre code, +.markdown-body pre tt { + display: inline; + max-width: auto; + padding: 0; + margin: 0; + overflow: visible; + line-height: inherit; + word-wrap: normal; + background-color: transparent; + border: 0; +} + +.markdown-body .csv-data td, +.markdown-body .csv-data th { + padding: 5px; + overflow: hidden; + font-size: 12px; + line-height: 1; + text-align: left; + white-space: nowrap; +} + +.markdown-body .csv-data .blob-num { + padding: 10px 8px 9px; + text-align: right; + background: var(--color-canvas-default); + border: 0; +} + +.markdown-body .csv-data tr { + border-top: 0; +} + +.markdown-body .csv-data th { + font-weight: var(--base-text-weight-semibold, 600); + background: var(--color-canvas-subtle); + border-top: 0; +} + +.markdown-body [data-footnote-ref]::before { + content: "["; +} + +.markdown-body [data-footnote-ref]::after { + content: "]"; +} + +.markdown-body .footnotes { + font-size: 12px; + color: var(--color-fg-muted); + border-top: 1px solid var(--color-border-default); +} + +.markdown-body .footnotes ol { + padding-left: 16px; +} + +.markdown-body .footnotes ol ul { + display: inline-block; + padding-left: 16px; + margin-top: 16px; +} + +.markdown-body .footnotes li { + position: relative; +} + +.markdown-body .footnotes li:target::before { + position: absolute; + top: -8px; + right: -8px; + bottom: -8px; + left: -24px; + pointer-events: none; + content: ""; + border: 2px solid var(--color-accent-emphasis); + border-radius: 6px; +} + +.markdown-body .footnotes li:target { + color: var(--color-fg-default); +} + +.markdown-body .footnotes .data-footnote-backref g-emoji { + font-family: monospace; +} + +.markdown-body .pl-c { + color: var(--color-prettylights-syntax-comment); +} + +.markdown-body .pl-c1, +.markdown-body .pl-s .pl-v { + color: var(--color-prettylights-syntax-constant); +} + +.markdown-body .pl-e, +.markdown-body .pl-en { + color: var(--color-prettylights-syntax-entity); +} + +.markdown-body .pl-smi, +.markdown-body .pl-s .pl-s1 { + color: var(--color-prettylights-syntax-storage-modifier-import); +} + +.markdown-body .pl-ent { + color: var(--color-prettylights-syntax-entity-tag); +} + +.markdown-body .pl-k { + color: var(--color-prettylights-syntax-keyword); +} + +.markdown-body .pl-s, +.markdown-body .pl-pds, +.markdown-body .pl-s .pl-pse .pl-s1, +.markdown-body .pl-sr, +.markdown-body .pl-sr .pl-cce, +.markdown-body .pl-sr .pl-sre, +.markdown-body .pl-sr .pl-sra { + color: var(--color-prettylights-syntax-string); +} + +.markdown-body .pl-v, +.markdown-body .pl-smw { + color: var(--color-prettylights-syntax-variable); +} + +.markdown-body .pl-bu { + color: var(--color-prettylights-syntax-brackethighlighter-unmatched); +} + +.markdown-body .pl-ii { + color: var(--color-prettylights-syntax-invalid-illegal-text); + background-color: var(--color-prettylights-syntax-invalid-illegal-bg); +} + +.markdown-body .pl-c2 { + color: var(--color-prettylights-syntax-carriage-return-text); + background-color: var(--color-prettylights-syntax-carriage-return-bg); +} + +.markdown-body .pl-sr .pl-cce { + font-weight: bold; + color: var(--color-prettylights-syntax-string-regexp); +} + +.markdown-body .pl-ml { + color: var(--color-prettylights-syntax-markup-list); +} + +.markdown-body .pl-mh, +.markdown-body .pl-mh .pl-en, +.markdown-body .pl-ms { + font-weight: bold; + color: var(--color-prettylights-syntax-markup-heading); +} + +.markdown-body .pl-mi { + font-style: italic; + color: var(--color-prettylights-syntax-markup-italic); +} + +.markdown-body .pl-mb { + font-weight: bold; + color: var(--color-prettylights-syntax-markup-bold); +} + +.markdown-body .pl-md { + color: var(--color-prettylights-syntax-markup-deleted-text); + background-color: var(--color-prettylights-syntax-markup-deleted-bg); +} + +.markdown-body .pl-mi1 { + color: var(--color-prettylights-syntax-markup-inserted-text); + background-color: var(--color-prettylights-syntax-markup-inserted-bg); +} + +.markdown-body .pl-mc { + color: var(--color-prettylights-syntax-markup-changed-text); + background-color: var(--color-prettylights-syntax-markup-changed-bg); +} + +.markdown-body .pl-mi2 { + color: var(--color-prettylights-syntax-markup-ignored-text); + background-color: var(--color-prettylights-syntax-markup-ignored-bg); +} + +.markdown-body .pl-mdr { + font-weight: bold; + color: var(--color-prettylights-syntax-meta-diff-range); +} + +.markdown-body .pl-ba { + color: var(--color-prettylights-syntax-brackethighlighter-angle); +} + +.markdown-body .pl-sg { + color: var(--color-prettylights-syntax-sublimelinter-gutter-mark); +} + +.markdown-body .pl-corl { + text-decoration: underline; + color: var(--color-prettylights-syntax-constant-other-reference-link); +} + +.markdown-body g-emoji { + display: inline-block; + min-width: 1ch; + font-family: "Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; + font-size: 1em; + font-style: normal !important; + font-weight: var(--base-text-weight-normal, 400); + line-height: 1; + vertical-align: -0.075em; +} + +.markdown-body g-emoji img { + width: 1em; + height: 1em; +} + +.markdown-body .task-list-item { + list-style-type: none; +} + +.markdown-body .task-list-item label { + font-weight: var(--base-text-weight-normal, 400); +} + +.markdown-body .task-list-item.enabled label { + cursor: pointer; +} + +.markdown-body .task-list-item+.task-list-item { + margin-top: 4px; +} + +.markdown-body .task-list-item .handle { + display: none; +} + +.markdown-body .task-list-item-checkbox { + margin: 0 .2em .25em -1.4em; + vertical-align: middle; +} + +.markdown-body .contains-task-list:dir(rtl) .task-list-item-checkbox { + margin: 0 -1.6em .25em .2em; +} + +.markdown-body .contains-task-list { + position: relative; +} + +.markdown-body .contains-task-list:hover .task-list-item-convert-container, +.markdown-body .contains-task-list:focus-within .task-list-item-convert-container { + display: block; + width: auto; + height: 24px; + overflow: visible; + clip: auto; +} + +.markdown-body ::-webkit-calendar-picker-indicator { + filter: invert(50%); +} diff --git a/src/renderer/src/components/markdown-render/style/highlight.less b/src/renderer/src/components/markdown-render/style/highlight.less new file mode 100644 index 000000000..33c3942a9 --- /dev/null +++ b/src/renderer/src/components/markdown-render/style/highlight.less @@ -0,0 +1,204 @@ +:root[theme-mode='dark'] { + pre code.hljs { + display: block; + overflow-x: auto; + padding: 1em + } + + code.hljs { + padding: 3px 5px + } + + .hljs { + color: #abb2bf; + background: #282c34 + } + + .hljs-keyword, + .hljs-operator, + .hljs-pattern-match { + color: #f92672 + } + + .hljs-function, + .hljs-pattern-match .hljs-constructor { + color: #61aeee + } + + .hljs-function .hljs-params { + color: #a6e22e + } + + .hljs-function .hljs-params .hljs-typing { + color: #fd971f + } + + .hljs-module-access .hljs-module { + color: #7e57c2 + } + + .hljs-constructor { + color: #e2b93d + } + + .hljs-constructor .hljs-string { + color: #9ccc65 + } + + .hljs-comment, + .hljs-quote { + color: #b18eb1; + font-style: italic + } + + .hljs-doctag, + .hljs-formula { + color: #c678dd + } + + .hljs-deletion, + .hljs-name, + .hljs-section, + .hljs-selector-tag, + .hljs-subst { + color: #e06c75 + } + + .hljs-literal { + color: #56b6c2 + } + + .hljs-addition, + .hljs-attribute, + .hljs-meta .hljs-string, + .hljs-regexp, + .hljs-string { + color: #98c379 + } + + .hljs-built_in, + .hljs-class .hljs-title, + .hljs-title.class_ { + color: #e6c07b + } + + .hljs-attr, + .hljs-number, + .hljs-selector-attr, + .hljs-selector-class, + .hljs-selector-pseudo, + .hljs-template-variable, + .hljs-type, + .hljs-variable { + color: #d19a66 + } + + .hljs-bullet, + .hljs-link, + .hljs-meta, + .hljs-selector-id, + .hljs-symbol, + .hljs-title { + color: #61aeee + } + + .hljs-emphasis { + font-style: italic + } + + .hljs-strong { + font-weight: 700 + } + + .hljs-link { + text-decoration: underline + } +} + +:root, +:root[theme-mode='light'] { + pre code.hljs { + display: block; + overflow-x: auto; + padding: 1em + } + + code.hljs { + padding: 3px 5px + } + + .hljs { + color: #383a42; + background: #fafafa + } + + .hljs-comment, + .hljs-quote { + color: #a0a1a7; + font-style: italic + } + + .hljs-doctag, + .hljs-formula, + .hljs-keyword { + color: #a626a4 + } + + .hljs-deletion, + .hljs-name, + .hljs-section, + .hljs-selector-tag, + .hljs-subst { + color: #e45649 + } + + .hljs-literal { + color: #0184bb + } + + .hljs-addition, + .hljs-attribute, + .hljs-meta .hljs-string, + .hljs-regexp, + .hljs-string { + color: #50a14f + } + + .hljs-attr, + .hljs-number, + .hljs-selector-attr, + .hljs-selector-class, + .hljs-selector-pseudo, + .hljs-template-variable, + .hljs-type, + .hljs-variable { + color: #986801 + } + + .hljs-bullet, + .hljs-link, + .hljs-meta, + .hljs-selector-id, + .hljs-symbol, + .hljs-title { + color: #4078f2 + } + + .hljs-built_in, + .hljs-class .hljs-title, + .hljs-title.class_ { + color: #c18401 + } + + .hljs-emphasis { + font-style: italic + } + + .hljs-strong { + font-weight: 700 + } + + .hljs-link { + text-decoration: underline + } +} diff --git a/src/renderer/src/components/markdown-render/index.less b/src/renderer/src/components/markdown-render/style/index.less similarity index 54% rename from src/renderer/src/components/markdown-render/index.less rename to src/renderer/src/components/markdown-render/style/index.less index 1fdde5b49..15f3433c7 100644 --- a/src/renderer/src/components/markdown-render/index.less +++ b/src/renderer/src/components/markdown-render/style/index.less @@ -1,53 +1,11 @@ -@import 'github-markdown-css'; - -.markdown-custom { - .md-btn { - width: 18px; - height: 18px; - display: flex; - align-items: center; - justify-content: center; - border: 1px var(--td-border-level-2-color) solid; - border-radius: var(--td-radius-default); - background-color: var(--td-bg-color-secondarycontainer); - margin: 0; - padding: 0; - transition: all 0.2s linear; - display: none; - padding: var(--td-size-1); - - &:hover { - border-color: var(--td-brand-color-hover); - display: flex; - } - - .md-icon-copy{ - width: 100%; - height: 100%; - background-repeat: no-repeat; - background-position: center center; - background-size: 80% 80%; - background-image: url(../../assets/copy.svg); - -webkit-mask-image: url(../../assets/copy.svg); - mask-image: url(../../assets/copy.svg); - background-color: var(--td-text-color-primary); - -webkit-mask-size: cover; - mask-size: cover; - } - } - - pre { - background-color: var(--td-bg-color-secondarycontainer); - color: var(--td-text-color-primary); - - &:hover { - & + .md-btn { - display: flex; - } - } - } - - blockquote { +@import './highlight.less'; +@import './github-markdown.less'; + +.markdown-body { + background-color: transparent !important; + font-size: 14px; + + blockquote { border-left: 0.25em solid var(--td-text-color-disabled); color: var(--td-text-color-secondary); } @@ -127,4 +85,66 @@ img { max-width: 35% !important; } + + p { + white-space: pre-wrap; + } + + ol { + list-style-type: decimal; + } + + ul { + list-style-type: disc; + } + + pre code, + pre tt { + line-height: 1.65; + } + + .highlight pre, + pre { + background-color: #fff; + } + + code.hljs { + padding: 0; + } + + .code-block { + &-wrapper { + position: relative; + padding-top: 24px; + } + + &-header { + position: absolute; + top: 5px; + right: 0; + width: 100%; + padding: 0 1rem; + display: flex; + justify-content: flex-end; + align-items: center; + color: #b3b3b3; + + &__copy{ + cursor: pointer; + margin-left: 0.5rem; + user-select: none; + &:hover { + color: #65a665; + } + } + } + } +} + +:root[theme-mode='dark'] { + + .highlight pre, + pre { + background-color: #282c34; + } } diff --git a/src/renderer/src/pages/Disclaimer.vue b/src/renderer/src/pages/Disclaimer.vue index 8271f6375..7ee72f9cd 100644 --- a/src/renderer/src/pages/Disclaimer.vue +++ b/src/renderer/src/pages/Disclaimer.vue @@ -14,7 +14,7 @@ {{ $t('pages.md.privacyPolicy.title') }}
diff --git a/src/renderer/src/pages/lab/components/aiBrain/index.vue b/src/renderer/src/pages/lab/components/aiBrain/index.vue index 48b1986be..482168c08 100644 --- a/src/renderer/src/pages/lab/components/aiBrain/index.vue +++ b/src/renderer/src/pages/lab/components/aiBrain/index.vue @@ -91,7 +91,7 @@
- +
diff --git a/src/renderer/src/pages/setting/components/base/components/DialogThumbnail.vue b/src/renderer/src/pages/setting/components/base/components/DialogThumbnail.vue index d7a33cd25..deeec8a7b 100644 --- a/src/renderer/src/pages/setting/components/base/components/DialogThumbnail.vue +++ b/src/renderer/src/pages/setting/components/base/components/DialogThumbnail.vue @@ -10,7 +10,7 @@ {{ $t('pages.md.thumbanilFfmpeg.title') }}
diff --git a/src/renderer/src/pages/setting/components/base/components/DialogUpdate.vue b/src/renderer/src/pages/setting/components/base/components/DialogUpdate.vue index af10011a2..897bc7a51 100644 --- a/src/renderer/src/pages/setting/components/base/components/DialogUpdate.vue +++ b/src/renderer/src/pages/setting/components/base/components/DialogUpdate.vue @@ -19,7 +19,11 @@

{{ $t('pages.setting.update.changelog') }}

-
+
+
+
+
+

{{ $t('pages.setting.update.tip') }} @@ -51,7 +55,7 @@ + + diff --git a/src/renderer/src/pages/lab/index.vue b/src/renderer/src/pages/lab/index.vue index ca3669b73..436bb055e 100644 --- a/src/renderer/src/pages/lab/index.vue +++ b/src/renderer/src/pages/lab/index.vue @@ -19,6 +19,7 @@ import CommonNav from '@/components/common-nav/index.vue'; // 异步加载组件,也可以直接导入组件 const componentMap = { 'dataCrypto': defineAsyncComponent(() => import('./components/dataCrypto/index.vue')), + 'fileDiff': defineAsyncComponent(() => import('./components/fileDiff/index.vue')), 'aiBrain': defineAsyncComponent(() => import('./components/aiBrain/index.vue')), 'jsEdit': defineAsyncComponent(() => import('./components/jsEdit/index.vue')), 'staticFilter': defineAsyncComponent(() => import('./components/staticFilter/index.vue')), @@ -34,6 +35,10 @@ const settingNav = computed(() => { id: 'dataCrypto', name: t('pages.lab.nav.dataCrypto') }, + { + id: 'fileDiff', + name: t('pages.lab.nav.fileDiff') + }, { id: 'aiBrain', name: t('pages.lab.nav.aiBrain') From 55e77723cc8b56697b64acf470f8eb29870c4e34 Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Sat, 28 Dec 2024 18:52:18 +0800 Subject: [PATCH 059/175] [optimize] t0 t1 compatibility(issue #388) --- .../routes/v1/site/cms/adapter/t0Xml.ts | 43 ++++++++++++------ .../routes/v1/site/cms/adapter/t1Json.ts | 44 +++++++++++++------ 2 files changed, 59 insertions(+), 28 deletions(-) diff --git a/src/main/core/server/routes/v1/site/cms/adapter/t0Xml.ts b/src/main/core/server/routes/v1/site/cms/adapter/t0Xml.ts index c6a7774f5..3bc2da3f5 100644 --- a/src/main/core/server/routes/v1/site/cms/adapter/t0Xml.ts +++ b/src/main/core/server/routes/v1/site/cms/adapter/t0Xml.ts @@ -24,13 +24,21 @@ class T0Adapter { async init() {} async home() { - const response = await request({ - url: this.api, - method: 'GET', - params: { - ac: 'class', - }, - }); + let response; + try { + response = await request({ + url: this.api, + method: 'GET', + params: { + ac: 'class', + }, + }); + } catch { + response = await request({ + url: this.api, + method: 'GET', + }); + }; const xml2json = parser.parse(response); const data = xml2json?.rss?.class; const classList = Array.isArray(data?.ty) ? data.ty : [data?.ty]; @@ -66,13 +74,20 @@ class T0Adapter { } async homeVod() { let response; - response = await request({ - url: this.api, - method: 'GET', - params: { - ac: 'class', - }, - }); + try { + response = await request({ + url: this.api, + method: 'GET', + params: { + ac: 'class', + }, + }); + } catch { + response = await request({ + url: this.api, + method: 'GET', + }); + }; const xml2json = parser.parse(response); const data = xml2json?.rss?.list; diff --git a/src/main/core/server/routes/v1/site/cms/adapter/t1Json.ts b/src/main/core/server/routes/v1/site/cms/adapter/t1Json.ts index ec9b2d3c4..d66cff950 100644 --- a/src/main/core/server/routes/v1/site/cms/adapter/t1Json.ts +++ b/src/main/core/server/routes/v1/site/cms/adapter/t1Json.ts @@ -13,13 +13,21 @@ class T1Adapter { async init() {} async home() { - const response = await request({ - url: this.api, - method: 'GET', - params: { - ac: 'class', - }, - }); + let response; + try { + response = await request({ + url: this.api, + method: 'GET', + params: { + ac: 'class', + }, + }); + } catch { + response = await request({ + url: this.api, + method: 'GET', + }); + }; let classes: any[] = []; // 分类 @@ -52,13 +60,21 @@ class T1Adapter { } async homeVod() { let response; - response = await request({ - url: this.api, - method: 'GET', - params: { - ac: 'class', - }, - }); + try { + response = await request({ + url: this.api, + method: 'GET', + params: { + ac: 'class', + }, + }); + } catch { + response = await request({ + url: this.api, + method: 'GET', + }); + }; + if (Array.isArray(response?.list) && response.list.length > 0 && !response.list[0].vod_pic) { const ids = response.list.map((item) => item.vod_id); response = await this.detail({ id: ids }); From db5d2735c8bdf0f89244f2080ab37cc60994e9e7 Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Sun, 29 Dec 2024 23:53:42 +0800 Subject: [PATCH 060/175] [change] tag-nav emit name --- src/renderer/src/components/tag-nav/index.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/renderer/src/components/tag-nav/index.vue b/src/renderer/src/components/tag-nav/index.vue index 8f0a2099b..157aa659d 100644 --- a/src/renderer/src/components/tag-nav/index.vue +++ b/src/renderer/src/components/tag-nav/index.vue @@ -33,14 +33,14 @@ watch( }, ); -const emit = defineEmits(['changeKey']); +const emit = defineEmits(['change']); const tagFlag = ref(props.active); const uniqueList = computed(() => uniqBy(props.list, 'type_id')); const handleItemClick = (key: string | number) => { console.log(key) - emit('changeKey', key); + emit('change', key); }; From 4ace50e7c9c8e6fe8f8671e92db8b7f3a2ac2218 Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Sun, 29 Dec 2024 23:56:12 +0800 Subject: [PATCH 061/175] [feat] split component --- .../components/split/hooks/use-merge-state.ts | 22 + .../src/components/split/hooks/use-state.ts | 12 + .../split/icon/drag-dot-vertical.svg | 14 + .../src/components/split/icon/drag-dot.svg | 14 + src/renderer/src/components/split/index.vue | 366 ++++++++++++ .../src/components/split/interface.ts | 9 + .../src/components/split/resize-observer.tsx | 82 +++ .../src/components/split/resize-trigger.vue | 64 +++ .../src/components/split/style/index.less | 63 +++ .../components/split/utils/convert-case.ts | 22 + .../src/components/split/utils/dom.ts | 172 ++++++ src/renderer/src/components/split/utils/is.ts | 107 ++++ .../src/components/split/utils/types.ts | 74 +++ .../src/components/split/utils/vue-utils.ts | 527 ++++++++++++++++++ 14 files changed, 1548 insertions(+) create mode 100644 src/renderer/src/components/split/hooks/use-merge-state.ts create mode 100644 src/renderer/src/components/split/hooks/use-state.ts create mode 100644 src/renderer/src/components/split/icon/drag-dot-vertical.svg create mode 100644 src/renderer/src/components/split/icon/drag-dot.svg create mode 100644 src/renderer/src/components/split/index.vue create mode 100644 src/renderer/src/components/split/interface.ts create mode 100644 src/renderer/src/components/split/resize-observer.tsx create mode 100644 src/renderer/src/components/split/resize-trigger.vue create mode 100644 src/renderer/src/components/split/style/index.less create mode 100644 src/renderer/src/components/split/utils/convert-case.ts create mode 100644 src/renderer/src/components/split/utils/dom.ts create mode 100644 src/renderer/src/components/split/utils/is.ts create mode 100644 src/renderer/src/components/split/utils/types.ts create mode 100644 src/renderer/src/components/split/utils/vue-utils.ts diff --git a/src/renderer/src/components/split/hooks/use-merge-state.ts b/src/renderer/src/components/split/hooks/use-merge-state.ts new file mode 100644 index 000000000..9dd0279c9 --- /dev/null +++ b/src/renderer/src/components/split/hooks/use-merge-state.ts @@ -0,0 +1,22 @@ +import { Ref, toRefs, computed, watch, ComputedRef } from 'vue'; +import { isUndefined } from '../utils/is'; +import useState from './use-state'; + +export default function useMergeState( + defaultValue: T, + props: { value: E } +): [ComputedRef, (val: E) => void, Ref] { + const { value } = toRefs(props); + const [localValue, setLocalValue] = useState( + !isUndefined(value.value) ? value.value : defaultValue + ); + watch(value, (newVal) => { + isUndefined(newVal) && setLocalValue(undefined); + }); + + const mergeValue = computed(() => + !isUndefined(value.value) ? value.value : localValue.value + ); + + return [mergeValue, setLocalValue, localValue]; +} diff --git a/src/renderer/src/components/split/hooks/use-state.ts b/src/renderer/src/components/split/hooks/use-state.ts new file mode 100644 index 000000000..fb98811a6 --- /dev/null +++ b/src/renderer/src/components/split/hooks/use-state.ts @@ -0,0 +1,12 @@ +import { Ref, ref } from 'vue'; + +export default function useState( + defaultValue?: T +): [Ref, (newValue: T) => void] { + const value = ref(defaultValue) as Ref; + const setValue = (newValue: T) => { + value.value = newValue; + }; + + return [value, setValue]; +} diff --git a/src/renderer/src/components/split/icon/drag-dot-vertical.svg b/src/renderer/src/components/split/icon/drag-dot-vertical.svg new file mode 100644 index 000000000..604ba6588 --- /dev/null +++ b/src/renderer/src/components/split/icon/drag-dot-vertical.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/renderer/src/components/split/icon/drag-dot.svg b/src/renderer/src/components/split/icon/drag-dot.svg new file mode 100644 index 000000000..e147338e4 --- /dev/null +++ b/src/renderer/src/components/split/icon/drag-dot.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/renderer/src/components/split/index.vue b/src/renderer/src/components/split/index.vue new file mode 100644 index 000000000..0cc363465 --- /dev/null +++ b/src/renderer/src/components/split/index.vue @@ -0,0 +1,366 @@ + + diff --git a/src/renderer/src/components/split/interface.ts b/src/renderer/src/components/split/interface.ts new file mode 100644 index 000000000..e5d5242ef --- /dev/null +++ b/src/renderer/src/components/split/interface.ts @@ -0,0 +1,9 @@ +export interface SplitProps { + component: string; + direction: 'horizontal' | 'vertical'; + size: number | string | undefined; + defaultSize: number | string; + min: number | string | undefined; + max: number | string | undefined; + disabled: boolean; +} diff --git a/src/renderer/src/components/split/resize-observer.tsx b/src/renderer/src/components/split/resize-observer.tsx new file mode 100644 index 000000000..bbd67fad5 --- /dev/null +++ b/src/renderer/src/components/split/resize-observer.tsx @@ -0,0 +1,82 @@ +import { + defineComponent, + onMounted, + onUnmounted, + ref, + ComponentPublicInstance, + computed, + cloneVNode, + watch, +} from 'vue'; +import ResizeObserver from 'resize-observer-polyfill'; +import { getFirstComponent } from './utils/vue-utils'; +import { isComponentInstance } from './utils/is'; + +export default defineComponent({ + name: 'ResizeObserver', + emits: [ + /** + * resize 事件 + * @property {ResizeObserverEntry} entry 触发 resize 的 dom 元素 + */ + 'resize', + ], + setup(props, { emit, slots }) { + let resizeObserver: ResizeObserver | null; + + const componentRef = ref(); + + const element = computed(() => + isComponentInstance(componentRef.value) + ? componentRef.value.$el + : componentRef.value + ); + + const createResizeObserver = (target: HTMLElement) => { + if (!target) return; + resizeObserver = new ResizeObserver((entries: ResizeObserverEntry[]) => { + const entry = entries[0]; + emit('resize', entry); + }); + resizeObserver.observe(target); + }; + + const destroyResizeObserver = () => { + if (resizeObserver) { + resizeObserver.disconnect(); + resizeObserver = null; + } + }; + + watch(element, (_element) => { + if (resizeObserver) destroyResizeObserver(); + if (_element) createResizeObserver(_element); + }); + + onMounted(() => { + if (element.value) { + createResizeObserver(element.value); + } + }); + + onUnmounted(() => { + destroyResizeObserver(); + }); + + return () => { + const firstChild = getFirstComponent(slots.default?.() ?? []); + + if (firstChild) { + return cloneVNode( + firstChild, + { + ref: componentRef, + }, + true + ); + } + + return null; + }; + }, +}); diff --git a/src/renderer/src/components/split/resize-trigger.vue b/src/renderer/src/components/split/resize-trigger.vue new file mode 100644 index 000000000..d8677cb56 --- /dev/null +++ b/src/renderer/src/components/split/resize-trigger.vue @@ -0,0 +1,64 @@ + + + diff --git a/src/renderer/src/components/split/style/index.less b/src/renderer/src/components/split/style/index.less new file mode 100644 index 000000000..4927e50fa --- /dev/null +++ b/src/renderer/src/components/split/style/index.less @@ -0,0 +1,63 @@ +/** 公共前缀 */ +@starter-prefix: zy; +@split-prefix-cls: ~'@{starter-prefix}-split'; +@split-trigger-prefix-cls: ~'@{split-prefix-cls}-trigger'; +@split-trigger-color-icon: var(--td-text-color-primary); +@split-trigger-font-size-icon: 12px; +@split-trigger-color-background: var(--td-border-level-1-color); + +.@{split-prefix-cls} { + display: flex; + + &-pane { + overflow: auto; + } + + &-pane-second { + flex: 1; + } + + &-horizontal { + flex-direction: row; + } + + &-vertical { + flex-direction: column; + } +} + +// 伸缩触发杆 +.@{split-trigger-prefix-cls} { + &-icon-wrapper { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + color: @split-trigger-color-icon; + font-size: @split-trigger-font-size-icon; + line-height: 1; + background-color: @split-trigger-color-background; + } + + &-icon { + display: inline-block; + margin: -3px; + width: 1em; + height: 1em; + color: inherit; + font-style: normal; + vertical-align: -2px; + outline: none; + stroke: currentColor; + } + + &-vertical { + height: 100%; + cursor: col-resize; + } + + &-horizontal { + width: 100%; + cursor: row-resize; + } +} diff --git a/src/renderer/src/components/split/utils/convert-case.ts b/src/renderer/src/components/split/utils/convert-case.ts new file mode 100644 index 000000000..39d30a9de --- /dev/null +++ b/src/renderer/src/components/split/utils/convert-case.ts @@ -0,0 +1,22 @@ +// 转换大小写 +export const toKebabCase = (string: string): string => { + return string.replace(/\B([A-Z])/g, '-$1').toLowerCase(); +}; + +// 连字符转驼峰 +export const toPascalCase = (string: string): string => { + return string + .replace(/^./, (match) => match.toUpperCase()) + .replace(/-(\w)/g, (_, p1: string) => { + return p1?.toUpperCase() ?? ''; + }); +}; + +// 驼峰转连字符 +export const toCamelCase = (string: string): string => { + return string + .replace(/^./, (match) => match.toLowerCase()) + .replace(/-(\w)/g, (_, p1: string) => { + return p1?.toUpperCase() ?? ''; + }); +}; diff --git a/src/renderer/src/components/split/utils/dom.ts b/src/renderer/src/components/split/utils/dom.ts new file mode 100644 index 000000000..f2f6d283d --- /dev/null +++ b/src/renderer/src/components/split/utils/dom.ts @@ -0,0 +1,172 @@ +import { VNode } from 'vue'; +import { isString } from './is'; + +export const NOOP = () => { + return undefined; +}; +export interface Size { + height: number; + width: number; +} +export const getDocumentSize = (): Size => { + const { body } = document; + const html = document.documentElement; + let topBody; + try { + const topWindow = window.top || window.self || window; + topBody = topWindow.document.body; + } catch {} + + return { + height: Math.max( + body.scrollHeight, + body.offsetHeight, + html.clientHeight, + html.scrollHeight, + html.offsetHeight, + topBody?.scrollHeight || 0, + topBody?.clientHeight || 0 + ), + width: Math.max( + body.scrollWidth, + body.offsetWidth, + html.clientWidth, + html.scrollWidth, + html.offsetWidth, + topBody?.scrollWidth || 0, + topBody?.clientWidth || 0 + ), + }; +}; +export const isServerRendering = (() => { + try { + return !(typeof window !== 'undefined' && document !== undefined); + } catch (e) { + return true; + } +})(); + +export const on = (() => { + if (isServerRendering) { + return NOOP; + } + return ( + element: HTMLElement | Window, + event: K, + handler: (ev: HTMLElementEventMap[K]) => void, + options: boolean | AddEventListenerOptions = false + ) => { + element.addEventListener( + event, + handler as EventListenerOrEventListenerObject, + options + ); + }; +})(); + +export const off = (() => { + if (isServerRendering) { + return NOOP; + } + return ( + element: HTMLElement | Window, + type: K, + handler: (ev: HTMLElementEventMap[K]) => void, + options: boolean | EventListenerOptions = false + ) => { + element.removeEventListener( + type, + handler as EventListenerOrEventListenerObject, + options + ); + }; +})(); + +export const findDomNode = (vnode: VNode) => { + let node = vnode.el; + while (node && !node.tagName) { + node = node.nextSibling; + } + return node as HTMLElement; +}; + +export const contains = (root: Node | null | undefined, ele: Node | null) => { + if (!root || !ele) { + return false; + } + let node: Node | null = ele; + while (node) { + if (node === root) { + return true; + } + node = node.parentNode; + } + return false; +}; + +export const OVERLAY_TYPES = [ + 'modal', + 'message', + 'notification', + 'drawer', +] as const; + +export const getOverlay = (type: typeof OVERLAY_TYPES[number]) => { + const popper = document.createElement('div'); + popper.setAttribute('class', `arco-overlay arco-overlay-${type}`); + return popper; +}; + +export const querySelector = ( + selectors: string, + container?: Document | HTMLElement +) => { + if (isServerRendering) { + return NOOP(); + } + return ( + (container ?? document).querySelector(selectors) ?? undefined + ); +}; + +export const getElement = ( + target: string | HTMLElement | undefined, + container?: Document | HTMLElement +): HTMLElement | undefined => { + if (isString(target)) { + const selector = target[0] === '#' ? `[id='${target.slice(1)}']` : target; + return querySelector(selector, container); + } + return target; +}; + +/** + * Get the relative distance between two DOMs + * @param target + * @param relative + */ +export const getRelativeRect = (target: HTMLElement, relative: HTMLElement) => { + const targetRect = target.getBoundingClientRect(); + const relativeRect = relative.getBoundingClientRect(); + + return { + top: targetRect.top - relativeRect.top, + bottom: relativeRect.bottom - targetRect.bottom, + left: targetRect.left - relativeRect.left, + right: relativeRect.right - targetRect.right, + width: targetRect.width, + height: targetRect.height, + }; +}; + +export const isScroll = (element: HTMLElement) => { + return element.tagName === 'BODY' + ? document.documentElement.scrollHeight > window.innerHeight + : element.scrollHeight > element.offsetHeight; +}; + +export const getScrollBarWidth = (element: HTMLElement) => { + return element.tagName === 'BODY' + ? window.innerWidth - getDocumentSize().width + : element.offsetWidth - element.clientWidth; +}; diff --git a/src/renderer/src/components/split/utils/is.ts b/src/renderer/src/components/split/utils/is.ts new file mode 100644 index 000000000..3e7c8e44b --- /dev/null +++ b/src/renderer/src/components/split/utils/is.ts @@ -0,0 +1,107 @@ +import type { ComponentPublicInstance, VNodeNormalizedChildren } from 'vue'; +import { VNode } from 'vue'; + +const opt = Object.prototype.toString; + +export function isArray(obj: any): obj is any[] { + return opt.call(obj) === '[object Array]'; +} + +export function isNull(obj: any): obj is null { + return opt.call(obj) === '[object Null]'; +} + +export function isBoolean(obj: unknown): obj is boolean { + return opt.call(obj) === '[object Boolean]'; +} + +export function isObject( + obj: T +): obj is Extract> { + return opt.call(obj) === '[object Object]'; +} + +export const isPromise = (obj: unknown): obj is Promise => { + return opt.call(obj) === '[object Promise]'; +}; + +export function isString(obj: any): obj is string { + return opt.call(obj) === '[object String]'; +} + +export function isNumber(obj: any): obj is number { + return opt.call(obj) === '[object Number]' && obj === obj; // eslint-disable-line +} + +export function isRegExp(obj: any) { + return opt.call(obj) === '[object RegExp]'; +} + +export function isDate(obj: any) { + return opt.call(obj) === '[object Date]'; +} + +function isHex(color: any) { + return /^#[a-fA-F0-9]{3}$|#[a-fA-F0-9]{6}$/.test(color); +} + +function isRgb(color: any) { + return /^rgb\((\s*\d+\s*,?){3}\)$/.test(color); +} + +function isRgba(color: any) { + return /^rgba\((\s*\d+\s*,\s*){3}\s*\d(\.\d+)?\s*\)$/.test(color); +} + +export function isColor(color: any): boolean { + return isHex(color) || isRgb(color) || isRgba(color); +} + +export function isUndefined(obj: any): obj is undefined { + return obj === undefined; +} + +export function isFunction(obj: any): obj is (...args: any[]) => any { + return typeof obj === 'function'; +} + +export function isEmptyObject(obj: any): boolean { + return isObject(obj) && Object.keys(obj).length === 0; +} + +export function isExist(obj: any): boolean { + return obj || obj === 0; +} + +export function isWindow(el: any): el is Window { + return el === window; +} + +export const isComponentInstance = ( + value: any +): value is ComponentPublicInstance => { + return value?.$ !== undefined; +}; + +export const isArrayChildren = ( + children: VNodeNormalizedChildren +): children is VNode[] => { + return isArray(children); +}; + +export const isQuarter = (fromat: string) => { + return /\[Q]Q/.test(fromat); +}; + +export function isDayjs(time: any) { + return ( + isObject(time) && + '$y' in time && + '$M' in time && + '$D' in time && + '$d' in time && + '$H' in time && + '$m' in time && + '$s' in time + ); +} diff --git a/src/renderer/src/components/split/utils/types.ts b/src/renderer/src/components/split/utils/types.ts new file mode 100644 index 000000000..09b455d06 --- /dev/null +++ b/src/renderer/src/components/split/utils/types.ts @@ -0,0 +1,74 @@ +import type { App, RenderFunction } from 'vue'; +import { VNode } from 'vue'; + +export interface ArcoOptions { + classPrefix?: string; + componentPrefix?: string; +} + +export interface ArcoIconOptions { + iconPrefix?: string; +} + +export interface ArcoGlobalConfig { + classPrefix?: string; +} + +type UnionToIntersection = (U extends any ? (k: U) => void : never) extends ( + k: infer I +) => void + ? I + : never; + +export type BaseType = string | number; +export type UnionType = BaseType | Record; +export type Data = Record; +export type RenderContent = string | RenderFunction; + +export type EmitFn = (event: T, ...args: any[]) => void; + +export type EmitFn2< + Options = Record, + Event extends keyof Options = keyof Options +> = UnionToIntersection< + { + [key in Event]: Options[key] extends (...args: infer Args) => any + ? (event: key, ...args: Args) => void + : (event: key, ...args: any[]) => void; + }[Event] +>; + +export type EmitType = T | T[]; + +export type SFCWithInstall> = T & + D & { + install: (app: App, opt?: ArcoOptions) => void; + }; + +export type ClassName = + | string + | Record + | (string | Record)[]; + +export type FieldString = { + [K in keyof T]?: string; +}; + +export interface SlotChildren { + value?: VNode[]; +} + +export interface ValueData { + value: string | number; + label: string; + closable?: boolean; + + [other: string]: any; +} + +export type AnimationDuration = + | number + | { + enter: number; + leave: number; + }; diff --git a/src/renderer/src/components/split/utils/vue-utils.ts b/src/renderer/src/components/split/utils/vue-utils.ts new file mode 100644 index 000000000..423d82eeb --- /dev/null +++ b/src/renderer/src/components/split/utils/vue-utils.ts @@ -0,0 +1,527 @@ +import type { + Component, + Slot, + Slots, + VNode, + VNodeTypes, + VNodeArrayChildren, + ComponentPublicInstance, + RenderFunction, +} from 'vue'; +import { cloneVNode, Fragment, isVNode } from 'vue'; +import { Data, RenderContent } from './types'; +import { isArray, isFunction, isNumber, isObject, isString } from './is'; +import { toCamelCase, toKebabCase } from './convert-case'; + +// Quoted from vue-next +// https://github.com/vuejs/vue-next/blob/master/packages/shared/src/shapeFlags.ts +export enum ShapeFlags { + ELEMENT = 1, + FUNCTIONAL_COMPONENT = 1 << 1, + STATEFUL_COMPONENT = 1 << 2, + COMPONENT = ShapeFlags.STATEFUL_COMPONENT | ShapeFlags.FUNCTIONAL_COMPONENT, + TEXT_CHILDREN = 1 << 3, + ARRAY_CHILDREN = 1 << 4, + SLOTS_CHILDREN = 1 << 5, + TELEPORT = 1 << 6, + SUSPENSE = 1 << 7, + COMPONENT_SHOULD_KEEP_ALIVE = 1 << 8, + COMPONENT_KEPT_ALIVE = 1 << 9, +} + +// Quoted from vue-next +// https://github.com/vuejs/vue-next/blob/master/packages/shared/src/patchFlags.ts +export enum PatchFlags { + TEXT = 1, + CLASS = 2, + STYLE = 4, + PROPS = 8, + FULL_PROPS = 16, + HYDRATE_EVENTS = 32, + STABLE_FRAGMENT = 64, + KEYED_FRAGMENT = 128, + UNKEYED_FRAGMENT = 256, + NEED_PATCH = 512, + DYNAMIC_SLOTS = 1024, + DEV_ROOT_FRAGMENT = 2048, + HOISTED = -1, + BAIL = -2, +} + +export const getValueFromSlotsOrProps = ( + name: string, + props?: Data, + slots?: Slots +) => { + if (slots?.[name]) { + return slots[name]; + } + if (props?.[name]) { + return () => props[name]; + } + return undefined; +}; + +export const isComponentInstance = ( + value: any +): value is ComponentPublicInstance => { + return value?.$ !== undefined; +}; + +export const isElement = (vn: VNode) => { + return Boolean(vn && vn.shapeFlag & ShapeFlags.ELEMENT); +}; + +export const isComponent = ( + vn: VNode, + type?: VNodeTypes +): type is Component => { + return Boolean(vn && vn.shapeFlag & ShapeFlags.COMPONENT); +}; + +export const isText = ( + vn: VNode, + children: VNode['children'] +): children is string => { + return Boolean(vn && vn.shapeFlag & ShapeFlags.TEXT_CHILDREN); +}; + +export const isNamedComponent = (child: VNode, name: string) => { + return isComponent(child, child.type) && child.type.name === name; +}; + +export const isTextChildren = ( + child: VNode, + children: VNode['children'] +): children is string => { + return Boolean(child && child.shapeFlag & 8); +}; + +export const isArrayChildren = ( + vn: VNode, + children: VNode['children'] +): children is VNode[] => { + return Boolean(vn && vn.shapeFlag & ShapeFlags.ARRAY_CHILDREN); +}; + +export const isSlotsChildren = ( + vn: VNode, + children: VNode['children'] +): children is Slots => { + return Boolean(vn && vn.shapeFlag & ShapeFlags.SLOTS_CHILDREN); +}; + +export const getChildrenString = (children: VNode[]): string => { + let text = ''; + for (const child of children) { + if (isString(child) || isNumber(child)) { + text += String(child); + } else if (isTextChildren(child, child.children)) { + text += child.children; + } else if (isArrayChildren(child, child.children)) { + text += getChildrenString(child.children); + } else if (isSlotsChildren(child, child.children)) { + const _children = child.children.default?.(); + if (_children) { + text += getChildrenString(_children); + } + } + } + + return text; +}; + +export const getVNodeChildrenString = (vn: VNode): string => { + if (isText(vn, vn.children)) { + return vn.children; + } + // Used to splice the content of sub-components and return the text of all sub-components + let text = ''; + if (isArrayChildren(vn, vn.children)) { + for (const child of vn.children) { + text += getVNodeChildrenString(child); + } + } else if (isSlotsChildren(vn, vn.children)) { + const children = vn.children.default?.() ?? []; + for (const child of children) { + text += getVNodeChildrenString(child); + } + } + return text; +}; + +export const getChildrenFunc = (vn: VNode): RenderFunction | undefined => { + if (isTextChildren(vn, vn.children) || isArrayChildren(vn, vn.children)) { + return (() => vn.children) as RenderFunction; + } + if (isSlotsChildren(vn, vn.children)) { + return vn.children.default; + } + return undefined; +}; + +export const getChildrenTextOrSlot = (vn: VNode): string | Slot | undefined => { + if (isText(vn, vn.children)) { + return vn.children; + } + if (isSlotsChildren(vn, vn.children)) { + const children = vn.children.default?.(); + // 如果slot的内容是文字,优先返回字符串 + if (children && children.length === 1) { + const child = children[0]; + if (isTextChildren(child, child.children)) { + return child.children; + } + } + return vn.children.default; + } + if (isArrayChildren(vn, vn.children)) { + if (vn.children.length === 1) { + const child = vn.children[0]; + if (isTextChildren(child, child.children)) { + return child.children; + } + } + return () => vn.children as VNode[]; + } + return undefined; +}; + +export const getFirstComponent = ( + children: VNode[] | undefined +): VNode | undefined => { + if (!children) { + return undefined; + } + + for (const child of children) { + if (isElement(child) || isComponent(child)) { + return child; + } + // If the current node is not a component, continue to find subcomponents + if (isArrayChildren(child, child.children)) { + const result = getFirstComponent(child.children); + if (result) return result; + } else if (isSlotsChildren(child, child.children)) { + const children = child.children.default?.(); + if (children) { + const result = getFirstComponent(children); + if (result) return result; + } + } else if (isArray(child)) { + const result = getFirstComponent(child); + if (result) return result; + } + } + + return undefined; +}; + +/** + * Used to get the number of specified components in children + * @param vNodes + * @param componentName + */ +export const getComponentNumber = (vNodes: VNode[], componentName: string) => { + let count = 0; + for (const item of vNodes) { + if (isComponent(item, item.type) && item.type.name === componentName) { + count++; + } else if (isArrayChildren(item, item.children)) { + count += getComponentNumber(item.children, componentName); + } + } + return count; +}; + +export const foreachComponent = ( + children: VNode[], + name: string, + cb: (node: VNode) => void +) => { + for (const item of children) { + if (isComponent(item, item.type) && item.type.name === name) { + cb(item); + } + if (isArrayChildren(item, item.children)) { + foreachComponent(item.children, name, cb); + } + } +}; + +export const isEmptyChildren = (children?: VNode[]) => { + if (!children) { + return true; + } + + for (const item of children) { + if (item.children) { + return false; + } + } + + return true; +}; + +export const getChildrenComponents = ( + children: VNode[], + name: string, + props?: Data | ((node: VNode, index: number) => Data), + startIndex = 0 +): VNode[] => { + const result = []; + for (const item of children) { + if (isNamedComponent(item, name)) { + if (props) { + const index: number = startIndex + result.length; + const extraProps = isFunction(props) ? props(item, index) : props; + result.push(cloneVNode(item, extraProps, true)); + } else { + result.push(item); + } + } else if (isArrayChildren(item, item.children)) { + result.push( + ...getChildrenComponents(item.children, name, props, result.length) + ); + } else if (isSlotsChildren(item, item.children)) { + const defaultChildren = item.children.default?.() ?? []; + result.push( + ...getChildrenComponents(defaultChildren, name, props, result.length) + ); + } + } + return result; +}; + +export const mergeFirstChild = ( + children: VNode[] | undefined, + extraProps: Data | ((vn: VNode) => Data) +): boolean => { + if (children && children.length > 0) { + for (let i = 0; i < children.length; i++) { + const child = children[i]; + if (isElement(child) || isComponent(child)) { + const props = isFunction(extraProps) ? extraProps(child) : extraProps; + children[i] = cloneVNode(child, props, true); + return true; + } + const _children = getChildrenArray(child); + if (_children && _children.length > 0) { + const result = mergeFirstChild(_children, extraProps); + if (result) return true; + } + } + } + return false; +}; + +export const getChildrenArray = (vn: VNode): VNode[] | undefined => { + if (isArrayChildren(vn, vn.children)) { + return vn.children; + } + if (isArray(vn)) { + return vn; + } + return undefined; +}; + +export const getFirstElementFromVNode = ( + vn: VNode +): HTMLElement | undefined => { + if (isElement(vn)) { + return vn.el as HTMLElement; + } + if (isComponent(vn)) { + if ((vn.el as Node)?.nodeType === 1) { + return vn.el as HTMLElement; + } + if (vn.component?.subTree) { + const ele = getFirstElementFromVNode(vn.component.subTree); + if (ele) return ele; + } + } else { + const children = getChildrenArray(vn); + return getFirstElementFromChildren(children); + } + return undefined; +}; + +export const getFirstElementFromTemplateRef = ( + target: HTMLElement | ComponentPublicInstance | undefined +) => { + if (isComponentInstance(target)) { + return getFirstElementFromVNode(target.$.subTree); + } + return target; +}; + +export const getFirstElementFromChildren = ( + children: VNode[] | undefined +): HTMLElement | undefined => { + if (children && children.length > 0) { + for (const child of children) { + const element = getFirstElementFromVNode(child); + if (element) return element; + } + } + return undefined; +}; + +/** + * Get the value of boolean type prop + * @param value + */ +export const getBooleanProp = (value: string | boolean | undefined) => { + return !!(value || isString(value)); +}; + +export const getRenderFunc = (content: RenderContent) => { + if (isFunction(content)) { + return content; + } + return () => content; +}; + +export const getAllElements = ( + children: VNode[] | undefined, + includeText = false +) => { + const results: VNode[] = []; + for (const item of children ?? []) { + if ( + isElement(item) || + isComponent(item) || + (includeText && isTextChildren(item, item.children)) + ) { + results.push(item); + } else if (isArrayChildren(item, item.children)) { + results.push(...getAllElements(item.children, includeText)); + } else if (isSlotsChildren(item, item.children)) { + results.push(...getAllElements(item.children.default?.(), includeText)); + } else if (isArray(item)) { + results.push(...getAllElements(item, includeText)); + } + } + return results; +}; + +/** + * Remove Fragment + * @param nodeList + */ +export function unFragment(nodeList: VNode[]) { + function loop(nodes: VNodeArrayChildren) { + const unFragmentNodeList: VNodeArrayChildren = []; + + nodes.forEach((node) => { + if (isVNode(node) && node.type === Fragment) { + if (isSlotsChildren(node, node.children)) { + // RowSlots + unFragmentNodeList.push(...loop(node.children.default?.() || [])); + } else if (isArrayChildren(node, node.children)) { + // VNodeArrayChildren + unFragmentNodeList.push(...loop(node.children)); + } else if (isString(node.children)) { + // string + unFragmentNodeList.push(node.children); + } + } else { + unFragmentNodeList.push(node); + } + }); + + return unFragmentNodeList; + } + + return loop(nodeList); +} + +export const resolveProps = (vn: VNode) => { + const props: Data = {}; + // @ts-ignore + const options = vn.type?.props ?? {}; + for (const key of Object.keys(vn.props ?? {})) { + const rawValue = vn.props?.[key]; + const camelKey = toCamelCase(key); + let resolveValue = rawValue; + if (rawValue === '' || rawValue === toKebabCase(camelKey)) { + const type = isObject(options[camelKey]) + ? options[camelKey].type + : options[camelKey]; + if (type === Boolean) { + resolveValue = true; + } + } + props[camelKey] = resolveValue; + } + return props; +}; + +export const getFirstElement = (vn: VNode | VNode[]): HTMLElement | null => { + if (isArray(vn)) { + for (const child of vn) { + const result = getFirstElement(child); + if (result) return result; + } + } else if (isElement(vn)) { + return vn.el as HTMLElement; + } else if (isComponent(vn)) { + if ((vn.el as Node).nodeType === 1) { + return vn.el as HTMLElement; + } + if (vn.component) { + const result = getFirstElement(vn.component.subTree); + if (result) return result; + } + } else if (isArrayChildren(vn, vn.children)) { + for (const child of vn.children) { + const result = getFirstElement(child); + if (result) return result; + } + } + return null; +}; + +export const getSlotFunction = (param: RenderContent | undefined) => { + if (param) { + if (isFunction(param)) return param; + return () => param; + } + return undefined; +}; + +export const getComponentsFromVNode = (vn: VNode, name: string) => { + const components: number[] = []; + + if (isComponent(vn, vn.type)) { + if (vn.type.name === name) { + if (vn.component) { + components.push(vn.component.uid); + } + } else if (vn.component?.subTree) { + components.push(...getComponentsFromVNode(vn.component.subTree, name)); + } + } else { + const children = getChildrenArray(vn); + if (children) { + components.push(...getComponentsFromChildren(children, name)); + } + } + + return components; +}; + +export const getComponentsFromChildren = ( + children: VNode[] | undefined, + name: string +) => { + const components: number[] = []; + + if (children && children.length > 0) { + for (const child of children) { + components.push(...getComponentsFromVNode(child, name)); + } + } + + return components; +}; From 15272e30e9c70d815aa1338470895e0a3acf2534 Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Sun, 29 Dec 2024 23:56:33 +0800 Subject: [PATCH 062/175] [optimize] style --- src/renderer/src/style/index.less | 1 + src/renderer/src/style/layout.less | 2 +- src/renderer/src/style/normalize.less | 353 ++++++++++++++++++++++++++ 3 files changed, 355 insertions(+), 1 deletion(-) create mode 100644 src/renderer/src/style/normalize.less diff --git a/src/renderer/src/style/index.less b/src/renderer/src/style/index.less index b777b7fb5..2ee7697f2 100644 --- a/src/renderer/src/style/index.less +++ b/src/renderer/src/style/index.less @@ -1,5 +1,6 @@ @import './font-family.less'; @import './reset.less'; +@import './normalize.less'; @import './theme/index.less'; @import './dialog.less'; diff --git a/src/renderer/src/style/layout.less b/src/renderer/src/style/layout.less index c6f704fc4..e51d9373f 100644 --- a/src/renderer/src/style/layout.less +++ b/src/renderer/src/style/layout.less @@ -599,7 +599,7 @@ --td-bg-content-hover-1: #282828; --td-bg-content-hover-2: #323232; --td-bg-content-input: #242424; - --td-bg-content-input-1: #242424; + --td-bg-content-input-1: #1d1f23; --td-bg-content-input-2: #2c2c2c; --td-bg-popup: #303032; --td-context: 255, 255, 255; diff --git a/src/renderer/src/style/normalize.less b/src/renderer/src/style/normalize.less new file mode 100644 index 000000000..610d078f0 --- /dev/null +++ b/src/renderer/src/style/normalize.less @@ -0,0 +1,353 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + + html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ + -webkit-font-smoothing: antialiased; /* chrome、safari */ + -moz-osx-font-smoothing: grayscale; /* firefox */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ + +main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + margin: 0.67em 0; + font-size: 2em; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-size: 1em; /* 2 */ + font-family: monospace, monospace; /* 1 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ + border-bottom: none; /* 1 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-size: 1em; /* 2 */ + font-family: monospace, monospace; /* 1 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + margin: 0; /* 2 */ + font-size: 100%; /* 1 */ + font-family: inherit; /* 1 */ + line-height: 1.15; /* 1 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { + /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { + /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type='button'], +[type='reset'], +[type='submit'] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type='button']::-moz-focus-inner, +[type='reset']::-moz-focus-inner, +[type='submit']::-moz-focus-inner { + padding: 0; + border-style: none; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type='button']:-moz-focusring, +[type='reset']:-moz-focusring, +[type='submit']:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + display: table; /* 1 */ + box-sizing: border-box; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + color: inherit; /* 2 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type='checkbox'], +[type='radio'] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type='number']::-webkit-inner-spin-button, +[type='number']::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type='search'] { + outline-offset: -2px; /* 2 */ + -webkit-appearance: textfield; /* 1 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type='search']::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + font: inherit; /* 2 */ + -webkit-appearance: button; /* 1 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} From b6d4738de0900ef5131df6875f8c34d5c15c28d6 Mon Sep 17 00:00:00 2001 From: Hiram <> Date: Sun, 29 Dec 2024 23:56:51 +0800 Subject: [PATCH 063/175] [optimize] format json --- src/renderer/src/pages/lab/components/snifferPlay/index.vue | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/renderer/src/pages/lab/components/snifferPlay/index.vue b/src/renderer/src/pages/lab/components/snifferPlay/index.vue index 303c4f528..66849c63b 100644 --- a/src/renderer/src/pages/lab/components/snifferPlay/index.vue +++ b/src/renderer/src/pages/lab/components/snifferPlay/index.vue @@ -77,6 +77,7 @@ @@ -1092,12 +1185,16 @@ const handleMonacoObject = (monaco) => { .content { flex: 1; - display: flex; - flex-direction: row; - justify-content: space-between; - grid-gap: var(--td-comp-margin-s); + // display: flex; + // flex-direction: row; + // justify-content: space-between; + // grid-gap: var(--td-comp-margin-s); width: 100%; - height: 100%; + // height: 100%; + height: calc(100% - 36px - var(--td-size-4)); + // overflow: hidden; + + border-radius: var(--td-radius-default); overflow: hidden; .left { @@ -1334,4 +1431,301 @@ const handleMonacoObject = (monaco) => { --vscode-editorStickyScroll-shadow: var(--td-bg-content-input-1); --vscode-scrollbar-shadow: var(--td-bg-content-input-1); } + +:deep(.t-tabs) { + height: 100%; + + .t-tabs__header { + .t-tabs__nav-container.t-is-top { + background-color: var(--td-bg-content-input-1); + } + } + + .t-tabs__nav--card.t-tabs__nav-item.t-is-active { + background-color: var(--td-bg-content-input-2); + border-bottom-color: transparent; + } + + .t-tabs__content { + padding: var(--td-pop-padding-s); + background-color: var(--td-bg-content-input-2); + height: calc(100% - var(--td-comp-size-l)); + width: 100%; + overflow: auto; + + .t-tab-panel { + height: 100%; + width: 100%; + } + } + + .t-tabs__nav-item.t-size-m { + height: var(--td-comp-size-l); + line-height: var(--td-comp-size-l); + background-color: var(--td-bg-content-input-1); + border-color: transparent; + } + + .t-tabs__nav-item-text-wrapper { + color: var(--td-text-color-secondary); + font-size: var(--td-font-size-link-small); + font-weight: normal; + } + +} + +.data_debug, .dom_debug { + width: 100%; + display: flex; + flex-direction: column; + flex-wrap: wrap; + grid-gap: var(--td-comp-margin-s); + overflow-y: auto; + + .item { + display: flex; + flex-wrap: nowrap; + width: 100%; + overflow: hidden; + position: relative; + + .init { + width: auto !important; + + :deep(.t-button__text) { + display: flex; + flex-direction: row; + align-items: center; + } + + .click { + margin-left: var(--td-comp-margin-s); + border: 2px solid rgba(132, 133, 141, 0.7); + border-radius: var(--td-radius-circle); + width: 24px; + height: 24px; + } + + .status { + display: flex; + flex-direction: column; + font-size: 12px; + line-height: 14px; + align-content: flex-start; + + .title { + font-weight: 500; + text-align: left; + } + + .desc { + font-size: 10px; + text-align: left; + } + } + } + + .source { + :deep(.input-group) { + display: flex; + flex-wrap: nowrap; + width: 100%; + overflow: hidden; + gap: 0; + + .input { + flex: 1; + width: 100%; + margin-right: var(--td-comp-margin-s); + + .t-input { + background-color: var(--td-bg-content-input-1) !important; + } + } + + .w-btn { + width: 50px !important; + background-color: var(--td-bg-content-input-1); + } + } + } + + .input { + width: 100%; + margin-right: var(--td-comp-margin-s); + + :deep(.t-input), :deep(.t-textarea__inner) { + background-color: var(--td-bg-content-input-1) !important; + } + } + + .proxy-upload-textarea { + margin-right: 0; + + :deep(.t-textarea__inner) { + padding-bottom: calc(var(--td-size-3) + var(--td-comp-size-m)); + } + } + + .proxy-upload-btn { + position: absolute; + right: var(--td-size-4); + bottom: var(--td-size-3); + } + + .w-btn { + width: 50px; + background-color: var(--td-bg-content-input-1); + } + + .w-100\% { + width: calc((100% - 50px - (var(--td-comp-margin-s)))); + } + + .w-50\% { + width: calc((100% - 50px - (var(--td-comp-margin-s) * 2)) / 2); + } + + .w-50-30\% { + width: calc((100% - 50px - (var(--td-comp-margin-s) * 2)) / 10 * 3); + } + + .w-50-70\% { + width: calc((100% - 50px - (var(--td-comp-margin-s) * 2)) / 10 * 7); + } + + .w-33-30\% { + width: calc((100% - 50px - (var(--td-comp-margin-s) * 2)) / 10 * 3); + } + + .w-33-40\% { + width: calc((100% - 50px - (var(--td-comp-margin-s) * 2)) / 10 * 4); + } + + .w-33\% { + width: calc((100% - 50px - (var(--td-comp-margin-s) * 3)) / 3); + } + } +} + +.html_preview { + display: flex; + flex-direction: column; + gap: var(--td-comp-margin-s); + height: 100%; + + .urlbar-root { + display: flex; + gap: var(--td-comp-margin-s); + + .urlbar-control { + display: flex; + justify-content: space-around; + align-items: center; + background-color: var(--td-bg-content-input-1); + border-radius: var(--td-radius-default); + height: 100%; + width: 100px; + + :deep(.t-button) { + &:not(.t-is-disabled):not(.t-button--ghost) { + --ripple-color: transparent; + } + } + + :deep(.t-button__text) { + svg { + color: var(--td-text-color-placeholder); + } + } + + :deep(.t-button--variant-text) { + &:hover { + border-color: transparent; + background-color: transparent; + + .t-button__text { + svg { + color: var(--td-primary-color); + } + } + } + } + } + + .urlbar-url { + :deep(.t-input) { + background-color: var(--td-bg-content-input-1) !important; + } + } + + .urlbar-devtool { + background-color: var(--td-bg-content-input-1); + --ripple-color: transparent; + color: var(--td-text-color-placeholder); + + &:hover { + color: var(--td-primary-color); + } + } + } + + .webview-box { + flex: 1; + height: 100%; + width: 100%; + } +} + +.split-pane { + height: 100%; + width: 100%; + + .editor-pane { + height: 100%; + width: 100%; + } + + .console-pane { + display: flex; + flex-direction: column; + height: 100%; + width: 100%; + + .console-root { + display: flex; + justify-content: space-between; + background-color: var(--td-bg-content-input-1); + padding: 0 var(--td-comp-paddingLR-xs); + + .header-name { + color: var(--td-text-color-secondary); + font-size: var(--td-font-size-link-small); + } + + .header-clear { + color: var(--td-text-color-secondary); + cursor: pointer; + + &:hover { + color: var(--td-text-color-primary); + } + } + } + + .log-pane-content { + display: flex; + flex: 1 1 auto; + flex-direction: column; + min-height: 0; + + .log-box { + width: 100%; + height: 100%; + overflow-y: auto; + background-color: var(--td-bg-content-input-2); + } + } + } +} diff --git a/src/renderer/src/pages/lab/components/jsEdit/index_t3.vue b/src/renderer/src/pages/lab/components/jsEdit/index_t3.vue new file mode 100644 index 000000000..05ed0e2ff --- /dev/null +++ b/src/renderer/src/pages/lab/components/jsEdit/index_t3.vue @@ -0,0 +1,1337 @@ + + + + + diff --git a/src/renderer/src/pages/lab/components/reqHtml/index.vue b/src/renderer/src/pages/lab/components/reqHtml/index.vue index 664303ff2..5ddc18d8f 100644 --- a/src/renderer/src/pages/lab/components/reqHtml/index.vue +++ b/src/renderer/src/pages/lab/components/reqHtml/index.vue @@ -1,27 +1,27 @@