diff --git a/.github/workflows/linux_build.yml b/.github/workflows/linux_build.yml index e38bc86a..ea8adf4c 100644 --- a/.github/workflows/linux_build.yml +++ b/.github/workflows/linux_build.yml @@ -36,9 +36,9 @@ jobs: # step3: install node env - name: Install Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: - node-version: '16.x' + node-version: '18.17.0' - name: Install system deps if: matrix.os == 'ubuntu-latest' diff --git a/.github/workflows/mac_beta.yml b/.github/workflows/mac_beta.yml index 24202761..0bb0f7db 100644 --- a/.github/workflows/mac_beta.yml +++ b/.github/workflows/mac_beta.yml @@ -36,9 +36,9 @@ jobs: # step3: install node env - name: Install Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: - node-version: '16.x' + node-version: '18.17.0' - name: Install system deps if: matrix.os == 'ubuntu-latest' diff --git a/.github/workflows/mac_build.yml b/.github/workflows/mac_build.yml index 71727a27..f5da1866 100644 --- a/.github/workflows/mac_build.yml +++ b/.github/workflows/mac_build.yml @@ -43,9 +43,9 @@ jobs: # step3: install node env - name: Install Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: - node-version: '16.x' + node-version: '18.17.0' # step3: yarn - name: Yarn install macos diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index df3049b4..9693d983 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -44,9 +44,9 @@ jobs: # step3: install node env - name: Install Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: - node-version: '16.x' + node-version: '18.17.0' - name: Install system deps if: matrix.os == 'ubuntu-latest' diff --git a/.github/workflows/mas.yml b/.github/workflows/mas.yml index 207fa85a..7b8f85b9 100644 --- a/.github/workflows/mas.yml +++ b/.github/workflows/mas.yml @@ -43,9 +43,9 @@ jobs: # step2: install node env - name: Install Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: - node-version: '16.x' + node-version: '18.17.0' # step3: yarn - name: Yarn install diff --git a/.github/workflows/win_beta.yml b/.github/workflows/win_beta.yml new file mode 100644 index 00000000..42c59456 --- /dev/null +++ b/.github/workflows/win_beta.yml @@ -0,0 +1,69 @@ +# main.yml + +# Workflow's name +name: Win Beta Build + +# Workflow's trigger +on: + workflow_dispatch: + +env: + ELECTRON_OUTPUT_PATH: ./dist_electron + CSC_LINK: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} + CSC_KEY_PASSWORD: ${{ secrets.P12_PASSWORD }} + +# Workflow's jobs +jobs: + # job's id + release: + # job's name + name: build and release electron app + + # the type of machine to run the job on + runs-on: ${{ matrix.os }} + + # create a build matrix for jobs + strategy: + fail-fast: false + matrix: + os: [windows-11-arm] + + # create steps + steps: + # step1: check out repository + - name: Check out git repository + uses: actions/checkout@v2 + + # step3: install node env + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: '18.17.0' + architecture: 'x64' + + - name: Yarn install windows + if: matrix.os == 'windows-11-arm' + run: | + yarn + yarn run lint:fix + yarn global add xvfb-maybe + + - name: Build & release app + run: | + yarn release + yarn upload-beta + env: + GH_TOKEN: ${{ secrets.GH_TOKEN }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + R2_SECRET_ID: ${{ secrets.R2_SECRET_ID }} + R2_SECRET_KEY: ${{ secrets.R2_SECRET_KEY }} + R2_ACCOUNT_ID: ${{ secrets.R2_ACCOUNT_ID }} + ELECTRON_SKIP_NOTARIZATION: ${{ secrets.ELECTRON_SKIP_NOTARIZATION }} + XCODE_APP_LOADER_EMAIL: ${{ secrets.XCODE_APP_LOADER_EMAIL }} + XCODE_APP_LOADER_PASSWORD: ${{ secrets.XCODE_APP_LOADER_PASSWORD }} + XCODE_TEAM_ID: ${{ secrets.XCODE_TEAM_ID }} + BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} + P12_PASSWORD: ${{ secrets.P12_PASSWORD }} + BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }} + KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} diff --git a/.github/workflows/win_build.yml b/.github/workflows/win_build.yml index 3962cf67..4a796400 100644 --- a/.github/workflows/win_build.yml +++ b/.github/workflows/win_build.yml @@ -36,9 +36,9 @@ jobs: # step3: install node env - name: Install Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: - node-version: '16.x' + node-version: '18.17.0' - name: Yarn install windows if: matrix.os == 'windows-latest' diff --git a/.gitignore b/.gitignore index d383bc09..82e21965 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,4 @@ scripts/generateYmlFile.js /dist_electron /docs cloc.exe +desktop.ini \ No newline at end of file diff --git a/.vscode/mcp.json b/.vscode/mcp.json new file mode 100644 index 00000000..48aec851 --- /dev/null +++ b/.vscode/mcp.json @@ -0,0 +1,15 @@ +{ +"inputs": [ + // The "inputs" section defines the inputs required for the MCP server configuration. + { + "type": "promptString" + } +], +"servers": { + // The "servers" section defines the MCP servers you want to use. + "fetch": { + "command": "uvx", + "args": ["mcp-server-fetch"] + } + } +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 51005003..4eda76ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,42 @@ +## :tada: 2.9.9 (2025-06-12) + + +### :sparkles: Features + +* **custom:** add support of skip process ([0f75afe](https://github.com/Kuingsmile/piclist/commit/0f75afe)) +* **custom:** add WebDAV sync configuration options ([d5f137e](https://github.com/Kuingsmile/piclist/commit/d5f137e)) +* **custom:** always copy workflow file for macos ([3a25da9](https://github.com/Kuingsmile/piclist/commit/3a25da9)) +* **custom:** enhance Gallery page layout and styling for improved user experience ([060e215](https://github.com/Kuingsmile/piclist/commit/060e215)) +* **custom:** enhance upload page UI and functionality ([89f8d4c](https://github.com/Kuingsmile/piclist/commit/89f8d4c)) +* **custom:** make configuration properties optional for various services ([36706f9](https://github.com/Kuingsmile/piclist/commit/36706f9)) +* **custom:** refactor plugin page ([a06b7e8](https://github.com/Kuingsmile/piclist/commit/a06b7e8)) +* **custom:** remove auto replace of localhost to 0.0.0.0 ([9deda85](https://github.com/Kuingsmile/piclist/commit/9deda85)) +* **custom:** reorder watermark position mapping for improved clarity ([711a89a](https://github.com/Kuingsmile/piclist/commit/711a89a)) +* **custom:** update core ([e17b578](https://github.com/Kuingsmile/piclist/commit/e17b578)), closes [#329](https://github.com/Kuingsmile/piclist/issues/329) +* **custom:** update styles for improved UI in Plugin and UploaderConfig pages ([11c694d](https://github.com/Kuingsmile/piclist/commit/11c694d)) + + +### :pencil: Documentation + +* **custom:** add official website section to README files ([ea0d19c](https://github.com/Kuingsmile/piclist/commit/ea0d19c)) +* **custom:** update release notes for v2.9.9 with new features and important changes ([9080535](https://github.com/Kuingsmile/piclist/commit/9080535)) + + +### :package: Chore + +* **custom:** add lint fix ([b0a4454](https://github.com/Kuingsmile/piclist/commit/b0a4454)) +* **custom:** add windows arm test workflow ([205f1ce](https://github.com/Kuingsmile/piclist/commit/205f1ce)) +* **custom:** test arm64 workflow ([c715f25](https://github.com/Kuingsmile/piclist/commit/c715f25)) +* **custom:** update scripts ([5c42690](https://github.com/Kuingsmile/piclist/commit/5c42690)) +* **custom:** upgrade setup-node action to v4 in CI workflows ([8ca0bbc](https://github.com/Kuingsmile/piclist/commit/8ca0bbc)) + + +### :back: Revert + +* **custom:** revert UI chage, delayed to next major version ([8b92501](https://github.com/Kuingsmile/piclist/commit/8b92501)) + + + ## :tada: 2.9.8 (2025-03-04) diff --git a/README.md b/README.md index ff1e7541..4bfc7588 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ - [📑 Table of Contents](#-table-of-contents) - [Introduction](#introduction) +- [Official Website](#official-website) - [How to Migrate from PicGo](#how-to-migrate-from-picgo) - [PicList-Core](#piclist-core) - [Key Features](#key-features) @@ -60,6 +61,12 @@ PicList is an efficient cloud storage and image hosting management tool built up - Comprehensive cloud storage management with file operations, search, and previews - Built-in image processing tools (watermarks, compression, scaling, rotation, format conversion) +## Official Website + +Please visit the [PicList official website piclist.cn](https://piclist.cn) for more information. + +You can also visit the [DeepWiki of PicList](https://deepwiki.com/Kuingsmile/PicList) to learn more about the project architecture and development. + ## How to Migrate from PicGo PicList `V1.5.0` and above provide a `one-click migration` function. Enter the `Settings` page, click the button next to `Migrate from PicGo`, then restart the application for changes to take effect. @@ -109,6 +116,7 @@ If your Typora version is below 1.8.0, set both the PicList and PicGo (app) uplo #### **Version < 1.6.0-dev** For Windows, in Typora settings: + 1. Set upload service to `PicGo(app)` 2. Set `PicGo path` to your PicList installation path @@ -138,6 +146,7 @@ docker run -d \ kuingsmile/piclist:latest \ node /usr/local/bin/picgo-server -k piclist123456 ``` + Change `./piclist` to your config directory path and `piclist123456` to your preferred secret key. #### Using docker-compose @@ -262,11 +271,13 @@ The built installer will be available in the `dist_electron` directory. For network issues with electron-builder, set the mirror: **Linux/macOS:** + ```bash export ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/" ``` **Windows:** + ```cmd set ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ ``` diff --git a/README_cn.md b/README_cn.md index 6e1b4042..224ae504 100644 --- a/README_cn.md +++ b/README_cn.md @@ -21,6 +21,7 @@ - [📑 目录](#-目录) - [简介](#简介) +- [官方网址](#官方网址) - [如何从PicGo迁移](#如何从picgo迁移) - [PicList-Core](#piclist-core) - [特色功能](#特色功能) @@ -60,6 +61,12 @@ PicList是一款高效的云存储和图床平台管理工具,基于PicGo深 - 全面的云存储管理功能,包括文件操作、搜索和预览 - 内置图像处理工具,如水印、压缩、缩放、旋转和格式转换 +## 官方网址 + +请访问 [PicList官网 piclist.cn](https://piclist.cn) 获取更多信息。 + +此外,你也可以访问[DeepWiki of PicList](https://deepwiki.com/Kuingsmile/PicList)了解更多关于项目架构和开发的内容。 + ## 如何从PicGo迁移 PicList `V1.5.0`以上版本提供 `一键迁移`功能,进入 `设置`页面,然后在 `从PicGo迁移`选项点击右侧按钮即可,迁移后请重启应用生效。 @@ -109,6 +116,7 @@ PicList的内核使用[PicList-core](https://github.com/Kuingsmile/PicList-Core) #### **1.6.0版本以下** Windows系统: + 1. 进入Typora设置页面,选择"图像" 2. 将上传服务设置为`PicGo(app)` 3. 在`PicGo路径`中填写PicList的安装路径 @@ -266,11 +274,13 @@ yarn run build 如果遇到网络问题导致electron-builder下载失败,可以设置镜像源: **Linux/macOS:** + ```bash export ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/" ``` **Windows:** + ```cmd set ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ ``` diff --git a/currentVersion.md b/currentVersion.md index 6050d179..a276ab34 100644 --- a/currentVersion.md +++ b/currentVersion.md @@ -1,9 +1,22 @@ -### ✨ Features +## 🎉 [v2.9.9] 更新日志 -- 移除了管理界面的额外提示横幅 -- 优化了相册缓存机制,现在重复上传同名图片时会正确刷新 -- 优化了配置读取机制 +本次更新引入了对 WebDAV 配置同步和便携模式的支持,同时提升了安全性和易用性。 -### 🐛 Bug Fixes +### ⚠️ 重要变更 -- 修复了alist图床在设置自定义域名后图片链接拼接错误的问题 \ No newline at end of file +* **环境要求更新**:我们已停止对 Node.js 16 的支持。现在开发本应用所需的 **最低 Node.js 版本为 v18.17.0**。 + +### ✨ 新增功能 (Features) + +* **WebDAV 配置同步**:现在您可以使用 WebDAV 在多个设备间同步您的应用配置了。 +* **便携模式支持**:新增了便携包,无需安装即可运行,轻松实现“开箱即用”。 +* **跳过图片处理**:现在可以设置特定文件后缀名(如 `.gif`),使其在上传时跳过所有图片处理流程。 +* **增强的上传器支持**:为腾讯云、阿里云和高级自定义图床增加了 `webPath` 参数。 +* **更广泛的系统支持**:通过更新核心图像处理库 (sharp),增加了对 ArchLinux 的支持。 +* **增强局域网安全**:内置的 API 服务不再默认监听 `0.0.0.0`,以防止未经授权的局域网访问,提升了安全性。 + +### 🐛 问题修复 (Bug Fixes) + +* **SM.MS 上传**:修复了在特定网络环境下,上传到 SM.MS 图床可能失败的问题。 +* **WebDAV 默认路径**:修复了 WebDAV 上传器中 `webPath` 参数默认值不正确的问题。 +* **macOS 右键菜单**:修复了 macOS 上右键菜单有时会消失的问题,现在程序会尝试自动恢复它。 diff --git a/currentVersion_en.md b/currentVersion_en.md index 53bb0949..e8b782b4 100644 --- a/currentVersion_en.md +++ b/currentVersion_en.md @@ -1,9 +1,22 @@ -### ✨ Features +## 🎉 [v2.9.9] Release Notes -- Remove the extra prompt banner in the management interface -- Optimized the album cache mechanism, now when uploading images with the same name repeatedly, it will refresh correctly -- Optimized the configuration reading mechanism +This update introduces support for WebDAV configuration synchronization and portable mode, while enhancing security and usability. + +### ⚠️ Important Changes + +* **Environment Requirement Update**: We have stopped supporting Node.js 16. The **minimum Node.js version required to develop this application is now v18.17.0**. + +### ✨ New Features + +* **WebDAV Configuration Synchronization**: You can now use WebDAV to synchronize your application configuration across multiple devices. +* **Portable Mode Support**: A portable package has been added, allowing you to run the application without installation for an "out-of-the-box" experience. +* **Skip Image Processing**: You can now set specific file extensions (like `.gif`) to skip all image processing during upload. +* **Enhanced Uploader Support**: Added `webPath` parameter for Tencent Cloud, Alibaba Cloud, and advanced custom image hosts. +* **Broader System Support**: Added support for ArchLinux by updating the core image processing library (sharp). +* **Enhanced LAN Security**: The built-in API service no longer listens on `0.0.0.0` by default, preventing unauthorized access from the local network. ### 🐛 Bug Fixes -- Fixed the problem that the image link of the alist picture bed was spliced incorrectly after setting a custom domain name +* **SM.MS Upload**: Fixed an issue where uploads to the SM.MS image host could fail in certain network environments. +* **WebDAV Default Path**: Fixed an issue with the default value of the `webPath` parameter in the WebDAV uploader. +* **macOS Right-Click Menu**: Fixed an issue where the right-click menu would sometimes disappear on macOS, and the program will now attempt to restore it automatically. diff --git a/package.json b/package.json index de9c4474..9f4f6ff4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "piclist", - "version": "2.9.8", + "version": "2.9.9", "author": { "name": "Kuingsmile", "email": "pkukuing@gmail.com" @@ -46,7 +46,7 @@ "@smithy/node-http-handler": "^2.1.6", "@videojs-player/vue": "^1.0.0", "ali-oss": "^6.18.1", - "axios": "^1.6.8", + "axios": "^1.9.0", "compare-versions": "^4.1.3", "core-js": "^3.37.1", "cos-nodejs-sdk-v5": "^2.12.5", @@ -67,7 +67,7 @@ "multer": "^1.4.5-lts.1", "node-ssh-no-cpu-features": "^2.0.0", "nodejs-file-downloader": "^4.12.1", - "piclist": "^1.9.11", + "piclist": "^1.9.13", "pinia": "^2.1.7", "pinia-plugin-persistedstate": "^3.2.1", "proxy-agent": "^5.0.0", @@ -97,7 +97,7 @@ "@types/lowdb": "^1.0.15", "@types/mime-types": "^2.1.4", "@types/multer": "^1.4.11", - "@types/node": "^22.0.0", + "@types/node": "^18.19.110", "@types/semver": "^7.5.6", "@types/tunnel": "^0.0.7", "@types/upyun": "^3.4.3", @@ -149,7 +149,7 @@ } }, "resolutions": { - "@types/node": "^16.10.2", + "@types/node": "^18.19.110", "vue-cli-plugin-electron-builder/**/electron-builder": "23.3.3" } } diff --git a/public/i18n/en.yml b/public/i18n/en.yml index c8fe6a00..642aace7 100644 --- a/public/i18n/en.yml +++ b/public/i18n/en.yml @@ -108,6 +108,8 @@ GALLERY_MATCHED: ' Matched: ' UPLOAD_PAGE_COPY_UPLOAD_API: Copy Upload API UPLOAD_PAGE_IMAGE_PROCESS_NAME: Image Processing UPLOAD_PAGE_IMAGE_PROCESS_DIALOG_TITLE: Image Processing Settings +UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST: Skip Process Ext List +UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST_TIPS: Enter the file extensions to skip processing, separated by commas (e.g., jpg,png,gif) UPLOAD_PAGE_IMAGE_PROCESS_ISADDWM: Add Watermark UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE: Watermark Type UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_TEXT: Text @@ -125,6 +127,7 @@ UPLOAD_PAGE_IMAGE_PROCESS_QUALITY: Compression Quality(1-100) UPLOAD_PAGE_IMAGE_PROCESS_ISCONVERT: Convert Format UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT: Destination Format UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT_SPECIFIC: 'Specific Format, Please enter in json format, e.g. {"png": "jpg"}' +UPLOAD_PAGE_IMAGE_PROCESS_TRANSFORMATION: Image Rotate Setting UPLOAD_PAGE_IMAGE_PROCESS_ISFLIP: Whether to flip vertically UPLOAD_PAGE_IMAGE_PROCESS_ISFLOP: Whether to flip horizontally UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZE: Resize to fixed size @@ -302,6 +305,16 @@ SETTINGS_SYNC_CONFIG_GITHUB_TOKEN_PLACEHOLDER: Please enter GitHub Token SETTINGS_SYNC_CONFIG_GITEA_TOKEN_PLACEHOLDER: Please enter Gitea Token SETTINGS_SYNC_CONFIG_GITEE_TOKEN_PLACEHOLDER: Please enter Gitee Token SETTINGS_SYNC_CONFIG_PROXY_PLACEHOLDER: Please enter proxy +SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT: WebDAV Endpoint +SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT_PLACEHOLDER: Please enter WebDAV endpoint URL +SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME: Username +SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME_PLACEHOLDER: Please enter WebDAV username +SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD: Password +SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD_PLACEHOLDER: Please enter WebDAV password +SETTINGS_SYNC_CONFIG_WEBDAV_AUTH_TYPE: Authentication Type +SETTINGS_SYNC_CONFIG_WEBDAV_SSL_ENABLED: Enable SSL/HTTPS +SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH: Save Path +SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH_PLACEHOLDER: Please select save path for sync files SETTINGS_UP_DOWN_DESC: Upload and download configuration files SETTINGS_UP_DOWN_TITLE: Please use this after filled the synchronization configuration SETTINGS_SYNC_UPLOAD: Upload diff --git a/public/i18n/zh-CN.yml b/public/i18n/zh-CN.yml index 912a8987..64899c65 100644 --- a/public/i18n/zh-CN.yml +++ b/public/i18n/zh-CN.yml @@ -108,6 +108,8 @@ GALLERY_MATCHED: ' 匹配到: ' UPLOAD_PAGE_COPY_UPLOAD_API: 复制上传API UPLOAD_PAGE_IMAGE_PROCESS_NAME: 图片处理 UPLOAD_PAGE_IMAGE_PROCESS_DIALOG_TITLE: 图片处理设置 +UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST: 跳过处理的文件扩展名列表 +UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST_TIPS: "请填写需要跳过处理的文件扩展名列表, 以英文逗号分隔, 如: jpg,png,gif" UPLOAD_PAGE_IMAGE_PROCESS_ISADDWM: 是否添加水印 UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE: 水印类型 UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_TEXT: 文字 @@ -125,6 +127,7 @@ UPLOAD_PAGE_IMAGE_PROCESS_QUALITY: 压缩质量(1-100) UPLOAD_PAGE_IMAGE_PROCESS_ISCONVERT: 是否转换格式 UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT: 转换目的格式 UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT_SPECIFIC: '精细化转换格式, 请输入JSON格式,如: {"png": "jpg"}' +UPLOAD_PAGE_IMAGE_PROCESS_TRANSFORMATION: 图片旋转设置 UPLOAD_PAGE_IMAGE_PROCESS_ISFLIP: 是否进行垂直翻转 UPLOAD_PAGE_IMAGE_PROCESS_ISFLOP: 是否进行水平翻转 UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZE: 是否按固定尺寸调整图片 @@ -305,6 +308,16 @@ SETTINGS_SYNC_CONFIG_GITHUB_TOKEN_PLACEHOLDER: 请输入GitHub Token SETTINGS_SYNC_CONFIG_GITEA_TOKEN_PLACEHOLDER: 请输入Gitea Token SETTINGS_SYNC_CONFIG_GITEE_TOKEN_PLACEHOLDER: 请输入Gitee Token SETTINGS_SYNC_CONFIG_PROXY_PLACEHOLDER: 请输入代理地址 +SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT: WebDAV端点 +SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT_PLACEHOLDER: 请输入WebDAV端点URL +SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME: 用户名 +SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME_PLACEHOLDER: 请输入WebDAV用户名 +SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD: 密码 +SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD_PLACEHOLDER: 请输入WebDAV密码 +SETTINGS_SYNC_CONFIG_WEBDAV_AUTH_TYPE: 认证类型 +SETTINGS_SYNC_CONFIG_WEBDAV_SSL_ENABLED: 启用SSL/HTTPS +SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH: 保存路径 +SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH_PLACEHOLDER: 请选择同步文件的保存路径 SETTINGS_UP_DOWN_DESC: 上传下载配置文件 SETTINGS_UP_DOWN_TITLE: 请在设置完同步配置后使用 SETTINGS_SYNC_UPLOAD: 上传 @@ -350,7 +363,7 @@ DRAG_FILE_TO_HERE: 将文件拖拽到此处,或 CLICK_TO_UPLOAD: 点击上传 LINK_FORMAT: 链接格式 CUSTOM: 自定义 -CLIPBOARD_PICTURE: 剪贴板图片 +CLIPBOARD_PICTURE: 剪贴板 TIPS_DRAG_VALID_PICTURE_OR_URL: 请拖入合法的图片文件或者图片URL地址 TIPS_INPUT_URL: 请输入URL TIPS_HTTP_PREFIX: http://或者https://开头 diff --git a/public/i18n/zh-TW.yml b/public/i18n/zh-TW.yml index c22910b9..c61d095b 100644 --- a/public/i18n/zh-TW.yml +++ b/public/i18n/zh-TW.yml @@ -108,6 +108,8 @@ GALLERY_MATCHED: ' 匹配到: ' UPLOAD_PAGE_COPY_UPLOAD_API: 複製上傳API UPLOAD_PAGE_IMAGE_PROCESS_NAME: 圖片處理 UPLOAD_PAGE_IMAGE_PROCESS_DIALOG_TITLE: 圖片處理設置 +UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST: 跳過處理的文件擴展名列表 +UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST_TIPS: "請填寫需要跳過處理的文件擴展名列表, 以英文逗號分隔, 如: jpg,png,gif" UPLOAD_PAGE_IMAGE_PROCESS_ISADDWM: 是否添加水印 UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE: 水印類型 UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_TEXT: 文字 @@ -125,6 +127,7 @@ UPLOAD_PAGE_IMAGE_PROCESS_QUALITY: 壓縮質量(1-100) UPLOAD_PAGE_IMAGE_PROCESS_ISCONVERT: 是否轉換格式 UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT: 轉換目的格式 UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT_SPECIFIC: '指定格式, 请输入JSON格式配置,如{"jpg":"png"}' +UPLOAD_PAGE_IMAGE_PROCESS_TRANSFORMATION: 圖片翻轉设置 UPLOAD_PAGE_IMAGE_PROCESS_ISFLIP: 是否進行垂直翻轉 UPLOAD_PAGE_IMAGE_PROCESS_ISFLOP: 是否進行水平翻轉 UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZE: 是否按固定尺寸調整圖片 @@ -303,6 +306,16 @@ SETTINGS_SYNC_CONFIG_GITHUB_TOKEN_PLACEHOLDER: 請輸入 GitHub Token SETTINGS_SYNC_CONFIG_GITEA_TOKEN_PLACEHOLDER: 請輸入 Gitea Token SETTINGS_SYNC_CONFIG_GITEE_TOKEN_PLACEHOLDER: 請輸入 Gitee Token SETTINGS_SYNC_CONFIG_PROXY_PLACEHOLDER: 請輸入代理地址 +SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT: WebDAV端點 +SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT_PLACEHOLDER: 請輸入WebDAV端點URL +SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME: 用戶名 +SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME_PLACEHOLDER: 請輸入WebDAV用戶名 +SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD: 密碼 +SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD_PLACEHOLDER: 請輸入WebDAV密碼 +SETTINGS_SYNC_CONFIG_WEBDAV_AUTH_TYPE: 認證類型 +SETTINGS_SYNC_CONFIG_WEBDAV_SSL_ENABLED: 啟用SSL/HTTPS +SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH: 保存路徑 +SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH_PLACEHOLDER: 請選擇同步檔案的保存路徑 SETTINGS_UP_DOWN_DESC: 上傳和下載配置檔案 SETTINGS_UP_DOWN_TITLE: 請在設置完同步配置後再使用 SETTINGS_SYNC_UPLOAD: 上傳 @@ -348,7 +361,7 @@ DRAG_FILE_TO_HERE: 將檔案拖曳到此處,或 CLICK_TO_UPLOAD: 點擊上傳 LINK_FORMAT: 連結格式 CUSTOM: 自訂 -CLIPBOARD_PICTURE: 剪貼簿圖片 +CLIPBOARD_PICTURE: 剪貼簿 TIPS_DRAG_VALID_PICTURE_OR_URL: 請拖入合法的圖片檔案或者圖片URL地址 TIPS_INPUT_URL: 請輸入URL TIPS_HTTP_PREFIX: http://或者https://開頭 diff --git a/scripts/check-dep.js b/scripts/check-dep.js index a855d203..ba21d407 100644 --- a/scripts/check-dep.js +++ b/scripts/check-dep.js @@ -1,7 +1,7 @@ const ncu = require('npm-check-updates') const axios = require('axios') -async function getRepositoryInfo (packageName) { +async function getRepositoryInfo(packageName) { try { const { data } = await axios.get(`https://registry.npmjs.org/${packageName}`) const repository = data.repository @@ -17,7 +17,7 @@ async function getRepositoryInfo (packageName) { return null } -async function checkUpdates () { +async function checkUpdates() { const updated = await ncu.run({ packageFile: './package.json', upgrade: false diff --git a/scripts/config.js b/scripts/config.js index 83183636..358adccb 100644 --- a/scripts/config.js +++ b/scripts/config.js @@ -1,53 +1,63 @@ // different platform has different format // macos -const darwin = [{ - appNameWithPrefix: 'PicList-', - ext: '.dmg', - arch: '-arm64', - 'version-file': 'latest-mac.yml' -}, { - appNameWithPrefix: 'PicList-', - ext: '.dmg', - arch: '-x64', - 'version-file': 'latest-mac.yml' -}, { - appNameWithPrefix: 'PicList-', - ext: '.dmg', - arch: '-universal', - 'version-file': 'latest-mac.yml' -} +const darwin = [ + { + appNameWithPrefix: 'PicList-', + ext: '.dmg', + arch: '-arm64', + 'version-file': 'latest-mac.yml' + }, + { + appNameWithPrefix: 'PicList-', + ext: '.dmg', + arch: '-x64', + 'version-file': 'latest-mac.yml' + }, + { + appNameWithPrefix: 'PicList-', + ext: '.dmg', + arch: '-universal', + 'version-file': 'latest-mac.yml' + } ] -const linux = [{ - appNameWithPrefix: 'PicList-', - ext: '.AppImage', - arch: '', - 'version-file': 'latest-linux.yml' -}, { - appNameWithPrefix: 'piclist_', - ext: '.snap', - arch: '_amd64', - 'version-file': 'latest-linux.yml' -}] +const linux = [ + { + appNameWithPrefix: 'PicList-', + ext: '.AppImage', + arch: '', + 'version-file': 'latest-linux.yml' + }, + { + appNameWithPrefix: 'piclist_', + ext: '.snap', + arch: '_amd64', + 'version-file': 'latest-linux.yml' + } +] // windows -const win32 = [{ - appNameWithPrefix: 'PicList-Setup-', - ext: '.exe', - arch: '-ia32', - 'version-file': 'latest.yml' -}, { - appNameWithPrefix: 'PicList-Setup-', - ext: '.exe', - arch: '-x64', - 'version-file': 'latest.yml' -}, { - appNameWithPrefix: 'PicList-Setup-', - ext: '.exe', - arch: '', // 32 & 64 - 'version-file': 'latest.yml' -}] +const win32 = [ + { + appNameWithPrefix: 'PicList-Setup-', + ext: '.exe', + arch: '-ia32', + 'version-file': 'latest.yml' + }, + { + appNameWithPrefix: 'PicList-Setup-', + ext: '.exe', + arch: '-x64', + 'version-file': 'latest.yml' + }, + { + appNameWithPrefix: 'PicList-Setup-', + ext: '.exe', + arch: '', // 32 & 64 + 'version-file': 'latest.yml' + } +] module.exports = { darwin, diff --git a/scripts/gen-i18n-types.js b/scripts/gen-i18n-types.js index 3f156262..d0e29b14 100644 --- a/scripts/gen-i18n-types.js +++ b/scripts/gen-i18n-types.js @@ -12,8 +12,7 @@ const obj = yaml.load(langFile) const keys = Object.keys(obj) -const types = -`interface ILocales { +const types = `interface ILocales { ${keys.map(key => `${key}: string`).join('\n ')} } type ILocalesKey = keyof ILocales diff --git a/scripts/gen-sha256.js b/scripts/gen-sha256.js index 7ebaae64..3cb7cdb0 100644 --- a/scripts/gen-sha256.js +++ b/scripts/gen-sha256.js @@ -4,55 +4,133 @@ const path = require('path') const axios = require('axios') const fs = require('fs-extra') const pkg = require('../package.json') -const version = pkg.version +const version = process.argv[2] || pkg.version -const x64URL = `https://release.piclist.cn/latest/PicList-${version}-x64.dmg` -const arm64URL = `https://release.piclist.cn/latest/PicList-${version}-arm64.dmg` -const x64Path = path.join(os.homedir(), 'Downloads', 'PicList-x64.dmg') -const arm64Path = path.join(os.homedir(), 'Downloads', 'PicList-arm64.dmg') +// Configuration +const BASE_URL = `https://github.com/Kuingsmile/PicList/releases/download/v${version}` +const DOWNLOAD_DIR = process.argv[3] || path.join(os.homedir(), 'Downloads') +// File information +const files = [ + { + name: 'PicList-x64.dmg', + url: `${BASE_URL}/PicList-${version}-x64.dmg` + }, + { + name: 'PicList-arm64.dmg', + url: `${BASE_URL}/PicList-${version}-arm64.dmg` + } +] + +/** + * Create progress bar string + */ +function getProgressBar(current, total, length = 20) { + const progress = Math.round((current / total) * length) + const percentage = Math.round((current / total) * 100) + const bar = '█'.repeat(progress) + '░'.repeat(length - progress) + return `[${bar}] ${percentage}% (${formatBytes(current)}/${formatBytes(total)})` +} + +/** + * Format bytes to human-readable format + */ +function formatBytes(bytes, decimals = 2) { + if (bytes === 0) return '0 Bytes' + const k = 1024 + const sizes = ['Bytes', 'KB', 'MB', 'GB'] + const i = Math.floor(Math.log(bytes) / Math.log(k)) + return parseFloat((bytes / Math.pow(k, i)).toFixed(decimals)) + ' ' + sizes[i] +} + +/** + * Download file and calculate SHA256 hash + */ +async function downloadAndHash(fileInfo) { + const { url, name } = fileInfo + const filePath = path.join(DOWNLOAD_DIR, name) + + console.log(`\nStarting download: ${name} from ${url}`) -const downloadAndHash = async (url, path) => { try { const response = await axios({ method: 'get', url, responseType: 'stream' }) - const writer = fs.createWriteStream(path) + + const writer = fs.createWriteStream(filePath) response.data.pipe(writer) const hash = crypto.createHash('sha256') const progressTotal = parseInt(response.headers['content-length'], 10) let progressCurrent = 0 - console.log('\n') - response.data.on('data', (chunk) => { + response.data.on('data', chunk => { hash.update(chunk) progressCurrent += chunk.length - const progressBar = Math.round(progressCurrent / progressTotal * 100) - process.stdout.write(`\r${progressBar}% ${path}`) + process.stdout.write(`\r${name}: ${getProgressBar(progressCurrent, progressTotal)}`) }) await new Promise((resolve, reject) => { - response.data.on('end', () => { - resolve() - }) - response.data.on('error', (err) => { - reject(err) - }) + writer.on('finish', resolve) + writer.on('error', reject) + response.data.on('error', reject) }) - console.log(`\n${path} SHA256: ${hash.digest('hex')}`) + const hashValue = hash.digest('hex') + console.log(`\n✅ ${name} SHA256: ${hashValue}`) - await fs.remove(path) - console.log(`Deleted ${path}`) + // Write hash to a file for reference + await fs.writeFile(`${filePath}.sha256`, hashValue) + console.log(`Hash saved to ${filePath}.sha256`) + + if (process.argv.includes('--keep-files')) { + console.log(`Keeping file: ${filePath}`) + } else { + await fs.remove(filePath) + console.log(`Deleted: ${filePath}`) + } + + return { name, hash: hashValue } } catch (err) { - console.error(`\nError downloading ${url}: ${err.message}`) + console.error(`\n❌ Error processing ${name}: ${err.message}`) + throw err } } -downloadAndHash(x64URL, x64Path).then(() => { - downloadAndHash(arm64URL, arm64Path) -}).catch(() => { - downloadAndHash(arm64URL, arm64Path) -}) +/** + * Main function + */ +async function main() { + console.log(`Generating SHA256 hashes for PicList v${version}`) + console.log(`Download directory: ${DOWNLOAD_DIR}`) + + try { + // Ensure download directory exists + await fs.ensureDir(DOWNLOAD_DIR) + + // Start all downloads concurrently + const results = await Promise.allSettled(files.map(downloadAndHash)) + + // Output summary + console.log('\n===== SUMMARY =====') + results.forEach((result, index) => { + const fileName = files[index].name + if (result.status === 'fulfilled') { + console.log(`✅ ${fileName}: ${result.value.hash}`) + } else { + console.log(`❌ ${fileName}: Failed - ${result.reason.message}`) + } + }) + + // Check if all downloads were successful + if (results.some(r => r.status === 'rejected')) { + process.exit(1) + } + } catch (err) { + console.error(`\nCritical error: ${err.message}`) + process.exit(1) + } +} + +main() diff --git a/scripts/notarize.js b/scripts/notarize.js index 3aebfb25..3435af2a 100644 --- a/scripts/notarize.js +++ b/scripts/notarize.js @@ -3,14 +3,9 @@ require('dotenv').config() const { notarize } = require('@electron/notarize') -const { - ELECTRON_SKIP_NOTARIZATION, - XCODE_APP_LOADER_EMAIL, - XCODE_APP_LOADER_PASSWORD, - XCODE_TEAM_ID -} = process.env +const { ELECTRON_SKIP_NOTARIZATION, XCODE_APP_LOADER_EMAIL, XCODE_APP_LOADER_PASSWORD, XCODE_TEAM_ID } = process.env -async function main (context) { +async function main(context) { const { electronPlatformName, appOutDir } = context if ( diff --git a/scripts/upload-beta.js b/scripts/upload-beta.js index 86402d10..203fe3de 100644 --- a/scripts/upload-beta.js +++ b/scripts/upload-beta.js @@ -45,7 +45,7 @@ const uploadFile = async () => { } } }) - parallelUploads3.on('httpUploadProgress', (progress) => { + parallelUploads3.on('httpUploadProgress', progress => { const progressBar = Math.round((progress.loaded / progress.total) * 100) process.stdout.write(`\r${progressBar}% ${fileName}`) }) diff --git a/src/main/server/index.ts b/src/main/server/index.ts index 04554d41..1837acf3 100644 --- a/src/main/server/index.ts +++ b/src/main/server/index.ts @@ -53,7 +53,6 @@ class Server { config = { port: DEFAULT_PORT, host: DEFAULT_HOST, enable: true } picgo.saveConfig({ [configPaths.settings.server]: config }) } - config.host = config.host === '127.0.0.1' ? '0.0.0.0' : config.host return config } diff --git a/src/main/utils/beforeOpen.ts b/src/main/utils/beforeOpen.ts index da4a68f4..fd41fda5 100644 --- a/src/main/utils/beforeOpen.ts +++ b/src/main/utils/beforeOpen.ts @@ -44,7 +44,6 @@ function copyFileOutsideOfElectronAsar(sourceInAsarArchive: string, destOutsideA */ function resolveMacWorkFlow() { const dest = `${os.homedir()}/Library/Services/Upload pictures with PicList.workflow` - if (fs.existsSync(dest)) return true try { copyFileOutsideOfElectronAsar(path.join(__static, 'Upload pictures with PicList.workflow'), dest) } catch (e) { diff --git a/src/main/utils/syncSettings.ts b/src/main/utils/syncSettings.ts index 232f2483..97a81a5b 100644 --- a/src/main/utils/syncSettings.ts +++ b/src/main/utils/syncSettings.ts @@ -4,11 +4,13 @@ import fs from 'fs-extra' import { HttpsProxyAgent } from 'hpagent' import path from 'path' import { Octokit } from '@octokit/rest' +import { createClient, AuthType, WebDAVClientOptions } from 'webdav' import db from '@core/datastore' import logger from '@core/picgo/logger' import { configPaths } from '#/utils/configPaths' +import { formatEndpoint } from '#/utils/common' const STORE_PATH = app.getPath('userData') @@ -53,7 +55,30 @@ function getOctokit(syncConfig: ISyncConfig) { }) } -const isSyncConfigValidate = ({ type, username, repo, branch, token }: ISyncConfig) => { +const isSyncConfigValidate = ({ + type, + username, + repo, + branch, + token, + webdavEndpoint, + webdavUsername, + webdavPassword, + webdavAuthType, + webdavSslEnabled, + webdavSavePath +}: ISyncConfig) => { + if (type === 'webdav') { + return ( + type && + webdavEndpoint && + webdavUsername && + webdavPassword && + webdavAuthType !== undefined && + webdavSslEnabled !== undefined && + webdavSavePath !== undefined + ) + } return type && username && repo && branch && token } @@ -97,6 +122,29 @@ async function uploadLocalToRemote(syncConfig: ISyncConfig, fileName: string) { const res = await axios.post(apiUrl, defaultConfig, { headers }) return isHttpResSuccess(res) } + case 'webdav': { + const { + webdavEndpoint = '', + webdavUsername, + webdavPassword, + webdavAuthType = 'basic', + webdavSslEnabled = true, + webdavSavePath = '' + } = syncConfig + const webdavEndpointF = formatEndpoint(webdavEndpoint, webdavSslEnabled) + const options: WebDAVClientOptions = { + username: webdavUsername, + password: webdavPassword + } + if (webdavAuthType === 'digest') { + options.authType = AuthType.Digest + } + const client = createClient(webdavEndpointF, options) + const fileContent = fs.readFileSync(localFilePath) + const remoteFilePath = webdavSavePath ? path.join(webdavSavePath, fileName) : fileName + await client.putFileContents(remoteFilePath, fileContent, { overwrite: true }) + return true + } default: return false } @@ -188,6 +236,29 @@ async function updateLocalToRemote(syncConfig: ISyncConfig, fileName: string) { ) return isHttpResSuccess(res) } + case 'webdav': { + const { + webdavEndpoint = '', + webdavUsername, + webdavPassword, + webdavAuthType = 'basic', + webdavSslEnabled = true, + webdavSavePath = '' + } = syncConfig + const webdavEndpointF = formatEndpoint(webdavEndpoint, webdavSslEnabled) + const options: WebDAVClientOptions = { + username: webdavUsername, + password: webdavPassword + } + if (webdavAuthType === 'digest') { + options.authType = AuthType.Digest + } + const client = createClient(webdavEndpointF, options) + const fileContent = fs.readFileSync(localFilePath) + const remoteFilePath = webdavSavePath ? path.join(webdavSavePath, fileName) : fileName + await client.putFileContents(remoteFilePath, fileContent, { overwrite: true }) + return true + } default: return false } @@ -278,6 +349,29 @@ async function downloadRemoteToLocal(syncConfig: ISyncConfig, fileName: string) } }) } + case 'webdav': { + const { + webdavEndpoint = '', + webdavUsername, + webdavPassword, + webdavAuthType = 'basic', + webdavSslEnabled = true, + webdavSavePath = '' + } = syncConfig + const webdavEndpointF = formatEndpoint(webdavEndpoint, webdavSslEnabled) + const options: WebDAVClientOptions = { + username: webdavUsername, + password: webdavPassword + } + if (webdavAuthType === 'digest') { + options.authType = AuthType.Digest + } + const client = createClient(webdavEndpointF, options) + const remoteFilePath = webdavSavePath ? path.join(webdavSavePath, fileName) : fileName + const fileContent = await client.getFileContents(remoteFilePath) + await fs.writeFile(localFilePath, fileContent as Buffer) + return true + } default: return false } diff --git a/src/renderer/components/ImageProcessSetting.vue b/src/renderer/components/ImageProcessSetting.vue index ab916f36..2bab77f0 100644 --- a/src/renderer/components/ImageProcessSetting.vue +++ b/src/renderer/components/ImageProcessSetting.vue @@ -6,6 +6,12 @@ size="default" :model="waterMarkForm" > + + +
+ {{ $T('UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST_TIPS') }} +
+
@@ -189,6 +195,7 @@ const waterMarkForm = reactive({ watermarkImagePath: '', watermarkPosition: 'southeast' }) + const compressForm = reactive({ quality: 100, isConvert: false, @@ -207,8 +214,13 @@ const compressForm = reactive({ }) const formatConvertObj = ref('{}') +const skipProcessForm = reactive({ + skipProcessExtList: 'zip,rar,7z,tar,gz,tar.gz,tar.bz2,tar.xz' +}) + const waterMarkFormKeys = Object.keys(waterMarkForm) as (keyof typeof waterMarkForm)[] const compressFormKeys = Object.keys(compressForm) as (keyof typeof compressForm)[] +const skipProcessFormKeys = Object.keys(skipProcessForm) as (keyof typeof skipProcessForm)[] const switchStyle = '--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949;' @@ -226,12 +238,14 @@ function handleSaveConfig() { compressForm.formatConvertObj = formatConvertObjFilter saveConfig(configPaths.buildIn.compress, toRaw(compressForm)) saveConfig(configPaths.buildIn.watermark, toRaw(waterMarkForm)) + saveConfig(configPaths.buildIn.skipProcess, toRaw(skipProcessForm)) closeDialog() } async function initData() { const compress = await getConfig(configPaths.buildIn.compress) const watermark = await getConfig(configPaths.buildIn.watermark) + const skipProcess = await getConfig(configPaths.buildIn.skipProcess) if (compress) { compressFormKeys.forEach(key => { compressForm[key] = compress[key] ?? compressForm[key] @@ -252,6 +266,11 @@ async function initData() { }) waterMarkForm.watermarkColor = watermark.watermarkColor === '' ? '#CCCCCC73' : watermark.watermarkColor } + if (skipProcess) { + skipProcessFormKeys.forEach(key => { + skipProcessForm[key] = skipProcess[key] ?? skipProcessForm[key] + }) + } } function closeDialog() { diff --git a/src/renderer/pages/PicGoSetting.vue b/src/renderer/pages/PicGoSetting.vue index 56a29366..164e8d8d 100644 --- a/src/renderer/pages/PicGoSetting.vue +++ b/src/renderer/pages/PicGoSetting.vue @@ -858,9 +858,10 @@ draggable append-to-body > -
+
{{ $T('SETTINGS_SYNC_CONFIG_NOTE') }}
+ @@ -875,19 +876,65 @@ - + + + ({ token: '', endpoint: '', proxy: '', - interval: 60 + interval: 60, + // WebDAV-specific fields + password: '', + authType: 'basic', + sslEnabled: true, + webdavSavePath: '' }) -const syncType = ['github', 'gitee', 'gitea'] +const syncType = ['github', 'gitee', 'gitea', 'webdav'] async function cancelSyncSetting() { syncVisible.value = false @@ -1222,7 +1274,14 @@ async function cancelSyncSetting() { token: '', endpoint: '', proxy: '', - interval: 60 + interval: 60, + // WebDAV-specific fields + webdavEndpoint: '', + webdavUsername: '', + webdavPassword: '', + webdavAuthType: 'basic', + webdavSslEnabled: true, + webdavSavePath: '' } } @@ -1289,7 +1348,14 @@ async function initData() { token: '', endpoint: '', proxy: '', - interval: 60 + interval: 60, + // WebDAV-specific fields + webdavEndpoint: '', + webdavUsername: '', + webdavPassword: '', + webdavAuthType: 'basic', + webdavSslEnabled: true, + webdavSavePath: '' } formOfSetting.value.logFileSizeLimit = enforceNumber(settings.logFileSizeLimit) || 10 addProxyWatch() diff --git a/src/universal/types/i18n.d.ts b/src/universal/types/i18n.d.ts index e211a24c..2ef44779 100644 --- a/src/universal/types/i18n.d.ts +++ b/src/universal/types/i18n.d.ts @@ -105,6 +105,8 @@ interface ILocales { UPLOAD_PAGE_COPY_UPLOAD_API: string UPLOAD_PAGE_IMAGE_PROCESS_NAME: string UPLOAD_PAGE_IMAGE_PROCESS_DIALOG_TITLE: string + UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST: string + UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST_TIPS: string UPLOAD_PAGE_IMAGE_PROCESS_ISADDWM: string UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE: string UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_TEXT: string @@ -122,6 +124,7 @@ interface ILocales { UPLOAD_PAGE_IMAGE_PROCESS_ISCONVERT: string UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT: string UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT_SPECIFIC: string + UPLOAD_PAGE_IMAGE_PROCESS_TRANSFORMATION: string UPLOAD_PAGE_IMAGE_PROCESS_ISFLIP: string UPLOAD_PAGE_IMAGE_PROCESS_ISFLOP: string UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZE: string @@ -298,6 +301,16 @@ interface ILocales { SETTINGS_SYNC_CONFIG_GITEA_TOKEN_PLACEHOLDER: string SETTINGS_SYNC_CONFIG_GITEE_TOKEN_PLACEHOLDER: string SETTINGS_SYNC_CONFIG_PROXY_PLACEHOLDER: string + SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT: string + SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT_PLACEHOLDER: string + SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME: string + SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME_PLACEHOLDER: string + SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD: string + SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD_PLACEHOLDER: string + SETTINGS_SYNC_CONFIG_WEBDAV_AUTH_TYPE: string + SETTINGS_SYNC_CONFIG_WEBDAV_SSL_ENABLED: string + SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH: string + SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH_PLACEHOLDER: string SETTINGS_UP_DOWN_DESC: string SETTINGS_UP_DOWN_TITLE: string SETTINGS_SYNC_UPLOAD: string diff --git a/src/universal/types/types.d.ts b/src/universal/types/types.d.ts index 4e0c4814..0a323bb5 100644 --- a/src/universal/types/types.d.ts +++ b/src/universal/types/types.d.ts @@ -47,6 +47,13 @@ interface ISyncConfig { endpoint?: string proxy?: string interval?: number + // WebDAV specific fields + webdavEndpoint?: string + webdavUsername?: string + webdavPassword?: string + webdavAuthType?: 'basic' | 'digest' + webdavSslEnabled?: boolean + webdavSavePath?: string } // Image && PicBed @@ -310,25 +317,26 @@ interface IAliYunConfig { accessKeySecret: string bucket: string area: string - path: string - customUrl: string - options: string + path?: string + webPath?: string + customUrl?: string + options?: string } interface IGitHubConfig { repo: string token: string - path: string - customUrl: string + path?: string + customUrl?: string branch: string } interface IImgurConfig { - clientId: string - proxy: string - username: string - accessToken: string - album: string + clientId?: string + proxy?: string + username?: string + accessToken?: string + album?: string } interface IQiniuConfig { @@ -337,8 +345,8 @@ interface IQiniuConfig { bucket: string url: string area: 'z0' | 'z1' | 'z2' | 'na0' | 'as0' | string - options: string - path: string + options?: string + path?: string } interface ISMMSConfig { @@ -353,23 +361,24 @@ interface ITcYunConfig { appId: string endpoint: string area: string - path: string - customUrl: string + path?: string + webPath?: string + customUrl?: string version: 'v4' | 'v5' - options: string - slim: boolean + options?: string + slim?: boolean } interface IUpYunConfig { bucket: string operator: string password: string - options: string - path: string + options?: string + path?: string url: string - antiLeechToken: string - expireTime: number - endpoint: string + antiLeechToken?: string + expireTime?: number + endpoint?: string } interface IWebdavPlistConfig { @@ -377,11 +386,11 @@ interface IWebdavPlistConfig { sslEnabled: boolean username: string password: string - path: string - webpath: string - customUrl: string + path?: string + webpath?: string + customUrl?: string authType: string - options: string + options?: string } interface ISftpPlistConfig { diff --git a/src/universal/utils/configPaths.ts b/src/universal/utils/configPaths.ts index efe18cad..ccd51ba9 100644 --- a/src/universal/utils/configPaths.ts +++ b/src/universal/utils/configPaths.ts @@ -99,6 +99,9 @@ export interface IConfigStruct { enable: boolean format: string } + skipProcess: { + skipProcessExtList: string + } } debug: boolean PICGO_ENV: string @@ -180,7 +183,8 @@ export const configPaths = { buildIn: { compress: 'buildIn.compress', watermark: 'buildIn.watermark', - rename: 'buildIn.rename' + rename: 'buildIn.rename', + skipProcess: 'buildIn.skipProcess' }, debug: 'debug', PICGO_ENV: 'PICGO_ENV' diff --git a/yarn.lock b/yarn.lock index f0883b6a..038390b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2009,6 +2009,13 @@ resolved "https://registry.yarnpkg.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz#1f635ad5fdd5c85ed936481525570e82b5a8307a" integrity sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg== +"@emnapi/runtime@^1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.4.3.tgz#c0564665c80dc81c448adac23f9dfbed6c838f7d" + integrity sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ== + dependencies: + tslib "^2.4.0" + "@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" @@ -2099,6 +2106,129 @@ resolved "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-5.0.0.tgz#bf344cc75136039bc41bcf5d1ddbcb40405fca3b" integrity sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg== +"@img/sharp-darwin-arm64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz#65049ef7c6be7857da742cd028f97602ce209635" + integrity sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg== + optionalDependencies: + "@img/sharp-libvips-darwin-arm64" "1.1.0" + +"@img/sharp-darwin-x64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.2.tgz#d37ff7c75c46d5a68a3756e3f1924ef7ca7b285e" + integrity sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g== + optionalDependencies: + "@img/sharp-libvips-darwin-x64" "1.1.0" + +"@img/sharp-libvips-darwin-arm64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz#843f7c09c7245dc0d3cfec2b3c83bb08799a704f" + integrity sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA== + +"@img/sharp-libvips-darwin-x64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz#1239c24426c06a8e833815562f78047a3bfbaaf8" + integrity sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ== + +"@img/sharp-libvips-linux-arm64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz#20d276cefd903ee483f0441ba35961679c286315" + integrity sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew== + +"@img/sharp-libvips-linux-arm@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz#067c0b566eae8063738cf1b1db8f8a8573b5465c" + integrity sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA== + +"@img/sharp-libvips-linux-ppc64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz#682334595f2ca00e0a07a675ba170af165162802" + integrity sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ== + +"@img/sharp-libvips-linux-s390x@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz#82fcd68444b3666384235279c145c2b28d8ee302" + integrity sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA== + +"@img/sharp-libvips-linux-x64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz#65b2b908bf47156b0724fde9095676c83a18cf5a" + integrity sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q== + +"@img/sharp-libvips-linuxmusl-arm64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz#72accf924e80b081c8db83b900b444a67c203f01" + integrity sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w== + +"@img/sharp-libvips-linuxmusl-x64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz#1fa052737e203f46bf44192acd01f9faf11522d7" + integrity sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A== + +"@img/sharp-linux-arm64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.2.tgz#c9690fac5f3137eaab3f7ad6065390d10f66f1fa" + integrity sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q== + optionalDependencies: + "@img/sharp-libvips-linux-arm64" "1.1.0" + +"@img/sharp-linux-arm@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.2.tgz#771dd2ec645f85f98441359bfc118afaf38cbd8b" + integrity sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ== + optionalDependencies: + "@img/sharp-libvips-linux-arm" "1.1.0" + +"@img/sharp-linux-s390x@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.2.tgz#82132d158abff57bd90b53574f2865f72f94e6c8" + integrity sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw== + optionalDependencies: + "@img/sharp-libvips-linux-s390x" "1.1.0" + +"@img/sharp-linux-x64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.2.tgz#d815fb87899d462b28b62a9252ad127f02fe0740" + integrity sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ== + optionalDependencies: + "@img/sharp-libvips-linux-x64" "1.1.0" + +"@img/sharp-linuxmusl-arm64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.2.tgz#cfac45b2abbc04628f676e123bfe3aeb300266c7" + integrity sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-arm64" "1.1.0" + +"@img/sharp-linuxmusl-x64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.2.tgz#b876c23ff51d0fb6d9f3b0a07e2f4d1436c203ad" + integrity sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-x64" "1.1.0" + +"@img/sharp-wasm32@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-wasm32/-/sharp-wasm32-0.34.2.tgz#b1dd0bab547dccf517586eb1fa5852160bba3b82" + integrity sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ== + dependencies: + "@emnapi/runtime" "^1.4.3" + +"@img/sharp-win32-arm64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz#f37bee0f60c167f825a09d2b8de6849b823e8b30" + integrity sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ== + +"@img/sharp-win32-ia32@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz#8fc30b6655bc6ff8910344a2020d334aa6361672" + integrity sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw== + +"@img/sharp-win32-x64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz#ecf19250f8fe35de684aa2b0ec6f773b3447247b" + integrity sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw== + "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" @@ -3489,17 +3619,12 @@ dependencies: "@types/express" "*" -"@types/node@*", "@types/node@20.5.1", "@types/node@^16.10.2", "@types/node@^16.11.26", "@types/node@^18.11.18": - version "16.11.18" - resolved "https://registry.npmjs.org/@types/node/-/node-16.11.18.tgz#39ed7c52943b0cee6d7299b717707bd51b1f90b9" - integrity sha512-7N8AOYWWYuw0g+K+GKCmIwfU1VMHcexYNpLPYzFZ4Uq2W6C/ptfeC7XhXgy/4pcwhz/9KoS5yijMfnYQ0u0Udw== - -"@types/node@^22.0.0": - version "22.4.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.4.1.tgz#9b595d292c65b94c20923159e2ce947731b6fdce" - integrity sha512-1tbpb9325+gPnKK0dMm+/LMriX0vKxf6RnB0SZUqfyVkQ4fMgUSySqhxE/y8Jvs4NyF1yHzTfG9KlnkIODxPKg== +"@types/node@*", "@types/node@20.5.1", "@types/node@^16.11.26", "@types/node@^18.11.18", "@types/node@^18.19.110": + version "18.19.110" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.110.tgz#33e25fa1796ba5023cee137f24f15d332d2d45d1" + integrity sha512-WW2o4gTmREtSnqKty9nhqF/vA0GKd0V/rbC0OyjSk9Bz6bzlsXKT+i7WDdS/a0z74rfT2PO4dArVCSnapNLA5Q== dependencies: - undici-types "~6.19.2" + undici-types "~5.26.4" "@types/normalize-package-data@^2.4.0", "@types/normalize-package-data@^2.4.1": version "2.4.1" @@ -4959,10 +5084,10 @@ axios@^0.27.2: follow-redirects "^1.14.9" form-data "^4.0.0" -axios@^1.6.8: - version "1.6.8" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" - integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== +axios@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.9.0.tgz#25534e3b72b54540077d33046f77e3b8d7081901" + integrity sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" @@ -5064,7 +5189,7 @@ bl@^1.0.0: readable-stream "^2.3.5" safe-buffer "^5.1.1" -bl@^4.0.3, bl@^4.1.0: +bl@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== @@ -5599,11 +5724,6 @@ chokidar@^3.4.2, chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - chownr@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" @@ -6533,10 +6653,10 @@ dateformat@^2.0.0: resolved "https://registry.npmmirror.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" integrity sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw== -dayjs@^1.11.11: - version "1.11.11" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.11.tgz#dfe0e9d54c5f8b68ccf8ca5f72ac603e7e5ed59e" - integrity sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg== +dayjs@^1.11.13: + version "1.11.13" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c" + integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== dayjs@^1.11.3: version "1.11.7" @@ -6786,10 +6906,10 @@ detect-indent@6.1.0: resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== -detect-libc@^2.0.0, detect-libc@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" - integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== +detect-libc@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.4.tgz#f04715b8ba815e53b4d8109655b6508a6865a7e8" + integrity sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA== detect-node@^2.0.4: version "2.1.0" @@ -7182,7 +7302,7 @@ encoding@^0.1.13: dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -7703,11 +7823,6 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - expand-tilde@^2.0.0, expand-tilde@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" @@ -8296,6 +8411,15 @@ fs-extra@^11.2.0: jsonfile "^6.0.1" universalify "^2.0.0" +fs-extra@^11.3.0: + version "11.3.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" + integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -8506,11 +8630,6 @@ git-semver-tags@^7.0.0: meow "^12.0.1" semver "^7.5.2" -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== - glob-parent@^5.1.0, glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -10811,7 +10930,7 @@ minimist@^1.2.0, minimist@^1.2.5: resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -minimist@^1.2.3, minimist@^1.2.8: +minimist@^1.2.8: version "1.2.8" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -10893,11 +11012,6 @@ mitt@^3.0.1: resolved "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: - version "0.5.3" - resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - mkdirp@^0.5.1, mkdirp@^0.5.5: version "0.5.5" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" @@ -11046,11 +11160,6 @@ nanoid@^3.3.7: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -11094,23 +11203,11 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-abi@^3.3.0: - version "3.35.0" - resolved "https://registry.npmjs.org/node-abi/-/node-abi-3.35.0.tgz#c7f171af995cc5286fa95612c4ca97b3910eaa79" - integrity sha512-jAlSOFR1Bls963NmFwxeQkNTzqjUF0NThm8Le7eRIRGzFUVJuMOFZDLv5Y30W/Oaw+KEebEJLAigwO9gQHoEmw== - dependencies: - semver "^7.3.5" - node-addon-api@^1.6.3: version "1.7.2" resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d" integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg== -node-addon-api@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" - integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== - node-bump-version@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/node-bump-version/-/node-bump-version-1.0.2.tgz#38bf7892507f92b2bc08082c9963125875edd3bf" @@ -11956,10 +12053,10 @@ performance-now@^2.1.0: resolved "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== -piclist@^1.9.11: - version "1.9.11" - resolved "https://registry.yarnpkg.com/piclist/-/piclist-1.9.11.tgz#5a8601886acd7208ac0d23c4dde507c167f6e0c3" - integrity sha512-qa78MLN4bc7cG0YcW4izlFodim2ZSyPlpPd8zXObiGxN9B8HHgppXcQaqUQpjNSWrSgVIBdynQZtJlexAaroFw== +piclist@^1.9.13: + version "1.9.13" + resolved "https://registry.yarnpkg.com/piclist/-/piclist-1.9.13.tgz#530ba4a0c44866e52e1070ef0a3ee9c68f8168bb" + integrity sha512-j376+RB3KQypGlfi4mxRMjw4H+A2KaNtaltQJV0551v4SquxQO9mNfXIxL7VcsSpX9kuiy24FkzjglZPJP54lA== dependencies: "@aws-sdk/client-s3" "3.421.0" "@aws-sdk/lib-storage" "3.421.0" @@ -11967,16 +12064,16 @@ piclist@^1.9.11: "@picgo/i18n" "^1.0.0" "@picgo/store" "^2.1.0" "@smithy/node-http-handler" "2.1.6" - axios "^1.6.8" + axios "^1.9.0" chalk "^2.4.1" commander "^8.1.0" cross-spawn "^7.0.3" - dayjs "^1.11.11" + dayjs "^1.11.13" download-git-repo "^3.0.2" ejs "^2.6.1" file-type "16.2.0" form-data "^4.0.0" - fs-extra "^11.2.0" + fs-extra "^11.3.0" globby "^11.1.0" heic-convert "^1.2.4" hpagent "1.2.0" @@ -11994,7 +12091,7 @@ piclist@^1.9.11: qiniu "7.9.0" resolve "^1.8.1" rimraf "^5.0.1" - sharp "^0.32.1" + sharp "^0.34.2" text-to-svg "^3.1.5" tunnel "^0.0.6" uuid "^9.0.1" @@ -12406,24 +12503,6 @@ postcss@^8.4.38: picocolors "^1.0.0" source-map-js "^1.2.0" -prebuild-install@^7.1.1: - version "7.1.1" - resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" - integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== - dependencies: - detect-libc "^2.0.0" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" - node-abi "^3.3.0" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^4.0.0" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -12710,7 +12789,7 @@ rc-config-loader@^4.1.3: json5 "^2.2.2" require-from-string "^2.0.2" -rc@1.2.8, rc@^1.2.7, rc@^1.2.8: +rc@1.2.8, rc@^1.2.8: version "1.2.8" resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -12806,7 +12885,7 @@ readable-stream@1.1.x: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.1.1, readable-stream@^3.6.0: +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -13433,18 +13512,16 @@ semver@^7.3.7: dependencies: lru-cache "^6.0.0" -semver@^7.5.0: - version "7.5.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0" - integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA== - dependencies: - lru-cache "^6.0.0" - semver@^7.6.0: version "7.6.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== +semver@^7.7.2: + version "7.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" + integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== + send@0.18.0: version "0.18.0" resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -13523,19 +13600,36 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" -sharp@^0.32.1: - version "0.32.1" - resolved "https://registry.npmjs.org/sharp/-/sharp-0.32.1.tgz#41aa0d0b2048b2e0ee453d9fcb14ec1f408390fe" - integrity sha512-kQTFtj7ldpUqSe8kDxoGLZc1rnMFU0AO2pqbX6pLy3b7Oj8ivJIdoKNwxHVQG2HN6XpHPJqCSM2nsma2gOXvOg== +sharp@^0.34.2: + version "0.34.2" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.34.2.tgz#648bd639854dbe48047b0b420213c186d036b32d" + integrity sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg== dependencies: color "^4.2.3" - detect-libc "^2.0.1" - node-addon-api "^6.1.0" - prebuild-install "^7.1.1" - semver "^7.5.0" - simple-get "^4.0.1" - tar-fs "^2.1.1" - tunnel-agent "^0.6.0" + detect-libc "^2.0.4" + semver "^7.7.2" + optionalDependencies: + "@img/sharp-darwin-arm64" "0.34.2" + "@img/sharp-darwin-x64" "0.34.2" + "@img/sharp-libvips-darwin-arm64" "1.1.0" + "@img/sharp-libvips-darwin-x64" "1.1.0" + "@img/sharp-libvips-linux-arm" "1.1.0" + "@img/sharp-libvips-linux-arm64" "1.1.0" + "@img/sharp-libvips-linux-ppc64" "1.1.0" + "@img/sharp-libvips-linux-s390x" "1.1.0" + "@img/sharp-libvips-linux-x64" "1.1.0" + "@img/sharp-libvips-linuxmusl-arm64" "1.1.0" + "@img/sharp-libvips-linuxmusl-x64" "1.1.0" + "@img/sharp-linux-arm" "0.34.2" + "@img/sharp-linux-arm64" "0.34.2" + "@img/sharp-linux-s390x" "0.34.2" + "@img/sharp-linux-x64" "0.34.2" + "@img/sharp-linuxmusl-arm64" "0.34.2" + "@img/sharp-linuxmusl-x64" "0.34.2" + "@img/sharp-wasm32" "0.34.2" + "@img/sharp-win32-arm64" "0.34.2" + "@img/sharp-win32-ia32" "0.34.2" + "@img/sharp-win32-x64" "0.34.2" shebang-command@^1.2.0: version "1.2.0" @@ -13627,20 +13721,6 @@ sigstore@^1.3.0: "@sigstore/tuf" "^1.0.3" make-fetch-happen "^11.0.1" -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^4.0.0, simple-get@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" - integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== - dependencies: - decompress-response "^6.0.0" - once "^1.3.1" - simple-concat "^1.0.0" - simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" @@ -13958,7 +14038,16 @@ strict-uri-encode@^1.0.0: resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -14024,7 +14113,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -14052,6 +14141,13 @@ strip-ansi@^5.1.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^7.0.1, strip-ansi@^7.1.0: version "7.1.0" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -14229,16 +14325,6 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -tar-fs@^2.0.0, tar-fs@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - tar-stream@^1.5.2: version "1.6.2" resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" @@ -14252,17 +14338,6 @@ tar-stream@^1.5.2: to-buffer "^1.1.1" xtend "^4.0.0" -tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - tar@^6.1.11: version "6.1.11" resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" @@ -14566,6 +14641,11 @@ tslib@^2.1.0, tslib@^2.3.1: resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +tslib@^2.4.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + tslib@^2.5.0: version "2.6.1" resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410" @@ -14714,10 +14794,10 @@ unbzip2-stream@^1.0.9: buffer "^5.2.1" through "^2.3.8" -undici-types@~6.19.2: - version "6.19.8" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" - integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== unescape@^1.0.1: version "1.0.1" @@ -15537,7 +15617,7 @@ wordwrap@^1.0.0: resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -15554,6 +15634,15 @@ wrap-ansi@^3.0.1: string-width "^2.1.1" strip-ansi "^4.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"