This commit is contained in:
2026-04-07 20:16:40 +08:00
parent 978821fe19
commit 51f9ef04ba
10 changed files with 244 additions and 259 deletions

95
.github/workflows/deploy.yml vendored Normal file
View File

@@ -0,0 +1,95 @@
# 1. 准备工作:配置 GitHub Secrets
# 在你的 GitHub 仓库中,进入 Settings -> Secrets and variables -> Actions添加以下 Repository secrets
# SERVER_HOST: 你的服务器 IP。
# SERVER_USER: 服务器用户名(如 root
# SERVER_SSH_KEY: 你的 SSH 私钥id_rsa 的内容)。
# GLITCHTIP_URL: 你的 GlitchTip 域名(如 https://glitchtip.example.com/)。
# GLITCHTIP_ORG: GlitchTip 里的组织 Slug。
# GLITCHTIP_PROJECT: GlitchTip 里的项目 Slug。
# GLITCHTIP_TOKEN: GlitchTip 的 API Auth Token。
# REMOTE_PATH: 服务器部署根路径(如 /www/wwwroot/alert
# 2. 配置 GitHub Actions
# 在你的 GitHub 仓库中,进入 Actions -> Workflows创建一个新的 Workflow 文件,例如 deploy.yml。
name: Pro-CI-CD-Pipeline
on:
push:
tags:
- "v*" # 仅当推送 v 开头的 tag 时触发 (例如 v1.1.0)
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# 1. 检出代码
- name: Checkout Code
uses: actions/checkout@v4
# 2. 安装 pnpm (Node >= 20)
- name: Install pnpm
uses: pnpm/action-setup@v2
with:
version: 8 # 或者使用 latest
- name: Set Up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: "pnpm"
# 3. 安装依赖并执行打包
- name: Install Dependencies and Build
run: |
pnpm install
pnpm run build
env:
# 注入版本号给 UmiJS (Ant Design Pro)
UMI_APP_SENTRY_RELEASE: ${{ github.ref_name }}
# 4. 上传 SourceMap 到 GlitchTip
- name: Upload SourceMaps to GlitchTip
uses: getsentry/action-release@v1
env:
SENTRY_AUTH_TOKEN: ${{ secrets.GLITCHTIP_TOKEN }}
SENTRY_URL: ${{ secrets.GLITCHTIP_URL }}
SENTRY_ORG: ${{ secrets.GLITCHTIP_ORG }}
SENTRY_PROJECT: ${{ secrets.GLITCHTIP_PROJECT }}
with:
version: ${{ github.ref_name }}
sourcemaps: "./dist"
url_prefix: "~/" # 匹配线上 JS 路径
# 5. 安全清理:删除本地打包后的 .map 文件
- name: Clean SourceMaps
run: find dist -name "*.map" -type f -delete
# 6. 配置 SSH 密钥
- name: Install SSH Key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.SERVER_SSH_KEY }}
known_hosts: unnecessary # 第一次连接自动确认
if_key_exists: replace
# 7. 远程原子化部署 (Atomic Deployment)
- name: Deploy to Server
run: |
VERSION=${{ github.ref_name }}
REMOTE_BASE=${{ secrets.REMOTE_PATH }}
RELEASES_PATH="$REMOTE_BASE/releases/$VERSION"
CURRENT_PATH="$REMOTE_BASE/current"
echo ">>> 正在创建远程目录: $RELEASES_PATH"
ssh -o StrictHostKeyChecking=no ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }} "mkdir -p $RELEASES_PATH"
echo ">>> 正在上传打包产物 (rsync)..."
# 使用 rsync 同传 dist 目录内容到 releases 下的版本目录
rsync -avz --delete ./dist/ ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }}:$RELEASES_PATH
echo ">>> 正在更新服务器软链接 (ln -snf)..."
# 原子化切换软链接
ssh ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }} "ln -snf $RELEASES_PATH $CURRENT_PATH"
- name: Success Notification
run: echo "🎉 Version ${{ github.ref_name }} successfully deployed to ${{ secrets.SERVER_HOST }}"

View File

@@ -1 +0,0 @@
pnpm exec commitlint --edit $1

View File

@@ -1 +0,0 @@
pnpm exec lint-staged

View File

@@ -58,8 +58,7 @@ const config: ConfigType = defineConfig({
*/ */
ignoreMomentLocale: true, ignoreMomentLocale: true,
// Only enable sourcemap during the dev stage devtool: process.env.UMI_APP_SENTRY_DSN ? 'source-map' : false,
devtool: isDev ? 'source-map' : false,
/** /**
* @name Proxy configuration * @name Proxy configuration
* @description Allows your local server to proxy requests to your backend so you can access server data locally * @description Allows your local server to proxy requests to your backend so you can access server data locally

167
deploy.js
View File

@@ -6,10 +6,11 @@ const path = require('node:path');
const CONFIG = { const CONFIG = {
// 1. 开发源码所在的根目录 // 1. 开发源码所在的根目录
devProjectRoot: path.join(__dirname, './'), devProjectRoot: path.join(__dirname, './'),
// 2. phpStudy 实际运行网站的目录 (目标位置) // 2. 实际运行网站的目录 (目标位置)
phpStudyPath: 'D:/phpstudy_pro/WWW/alert', prodProjectPath: 'D:\\phpstudy_pro\\WWW\\alert',
deployRemote: false, deployRemote: false,
// 需要配置ssh密钥对否则会提示输入密码
remote: { remote: {
host: '1.2.3.4', // 服务器IP host: '1.2.3.4', // 服务器IP
user: 'root', // 用户名 user: 'root', // 用户名
@@ -19,8 +20,8 @@ const CONFIG = {
// 预定义几个常用路径 // 预定义几个常用路径
const DEV_DIST = path.join(CONFIG.devProjectRoot, 'dist'); const DEV_DIST = path.join(CONFIG.devProjectRoot, 'dist');
const PHPSTUDY_RELEASES = path.join(CONFIG.phpStudyPath, 'releases'); const PROD_RELEASES = path.join(CONFIG.prodProjectPath, 'releases');
const PHPSTUDY_CURRENT = path.join(CONFIG.phpStudyPath, 'current'); const PROD_CURRENT = path.join(CONFIG.prodProjectPath, 'current');
// 颜色工具 // 颜色工具
const log = { const log = {
@@ -30,9 +31,68 @@ const log = {
error: (msg) => console.log(`\x1b[31m✘ ${msg}\x1b[0m`), error: (msg) => console.log(`\x1b[31m✘ ${msg}\x1b[0m`),
}; };
async function start() { async function main() {
let version = ''; // 解析参数: node scripts/deploy.js --rollback v1.0.0
const args = process.argv.slice(2);
const isStatus = args[0] === '--status' || args[0] === '-s';
const isRollback = args[0] === '--rollback' || args[0] === '-r';
const targetVersion = isRollback ? args[1] : '';
if (isStatus) {
showStatus();
return; // 结束执行
}
if (isRollback) {
if (!targetVersion) {
log.error(
'请指定要切换的版本号,例如: node scripts/deploy.js --rollback v1.0.0',
);
process.exit(1);
}
await performRollback(targetVersion);
} else {
await performFullDeploy();
}
}
// --- 【逻辑函数:秒级回退/切换】 ---
async function performRollback(version) {
log.info(`开始秒级切换至版本: ${version}...`);
// 1. 检查本地是否存在该版本
const localTarget = path.join(PROD_RELEASES, version);
if (!fs.existsSync(localTarget)) {
log.error(
`本地 releases 目录中未找到版本 ${version},请检查路径: ${localTarget}`,
);
process.exit(1);
}
// 2. 切换本地软链接
try {
updateLocalLink(localTarget);
log.success(`本地 Prod项目 已成功切换至 ${version}`);
} catch (e) {
log.error(`本地切换失败: ${e.message}`);
}
// 3. 切换远程软链接
if (CONFIG.deployRemote) {
try {
updateRemoteLink(version);
log.success(`远程服务器已成功切换至 ${version}`);
} catch (e) {
log.error(`远程切换失败: ${e.message}`);
}
}
log.info('切换任务结束。');
}
// --- 【逻辑函数:全流程发布】 ---
async function performFullDeploy() {
let version = '';
// 1. 获取 Git Tag // 1. 获取 Git Tag
try { try {
version = execSync('git describe --tags --abbrev=0').toString().trim(); version = execSync('git describe --tags --abbrev=0').toString().trim();
@@ -42,6 +102,8 @@ async function start() {
process.exit(1); process.exit(1);
} }
log.info(`开始全流程发布版本: ${version}`);
// 2. 执行编译 // 2. 执行编译
try { try {
log.info('开始执行构建 (npm run build)...'); log.info('开始执行构建 (npm run build)...');
@@ -71,14 +133,27 @@ async function start() {
log.warn('您可以稍后手动补传,部署将继续进行...'); log.warn('您可以稍后手动补传,部署将继续进行...');
} }
// 4. 清理并本地归档 // 4. 清理 Map
try { try {
log.info('正在清理.map 文件并执行本地归档...'); log.info('正在尝试清理 SourceMap...');
cleanSourceMaps(DEV_DIST); cleanSourceMaps(DEV_DIST);
deployToLocal(version); log.success('SourceMap 清理成功');
log.success('本地归档与软链接更新完成');
} catch (_e) { } catch (_e) {
log.error(`本地归档失败: ${_e.message}`); log.error(`SourceMap 清理失败: ${_e.message}`);
}
// D. 归档到本地 Prod项目
try {
const targetDir = path.join(PROD_RELEASES, version);
if (fs.existsSync(targetDir))
fs.rmSync(targetDir, { recursive: true, force: true });
if (!fs.existsSync(PROD_RELEASES))
fs.mkdirSync(PROD_RELEASES, { recursive: true });
fs.cpSync(DEV_DIST, targetDir, { recursive: true });
updateLocalLink(targetDir);
log.success('本地部署成功');
} catch (e) {
log.error(`本地归档失败: ${e.message}`);
process.exit(1); process.exit(1);
} }
@@ -100,43 +175,55 @@ async function start() {
log.info(`\n🎉 所有任务执行完毕 [Version: ${version}]`); log.info(`\n🎉 所有任务执行完毕 [Version: ${version}]`);
} }
// --- 逻辑封装函数 --- // --- 新增状态查看函数 ---
function showStatus() {
log.info('正在查询当前版本状态...');
function deployToLocal(version) { // 1. 查看本地版本 (Node.js 获取软链接指向的真实路径)
const targetDir = path.join(PHPSTUDY_RELEASES, version); if (fs.existsSync(PROD_CURRENT)) {
// realpathSync 可以获取软链接指向的真实绝对路径
// A. 确保 phpStudy 下的 releases 文件夹存在 const realPath = fs.realpathSync(PROD_CURRENT);
if (!fs.existsSync(PHPSTUDY_RELEASES)) { const version = path.basename(realPath);
fs.mkdirSync(PHPSTUDY_RELEASES, { recursive: true }); log.success(`本地 Prod 当前版本: ${version}`);
log.info(` 路径: ${realPath}`);
} else {
log.warn('本地尚未创建 current 软链接。');
} }
// B. 如果该版本已存在,先删除旧的 // 2. 查看远程版本 (通过 SSH 执行 readlink)
if (fs.existsSync(targetDir)) { if (CONFIG.deployRemote) {
fs.rmSync(targetDir, { recursive: true, force: true });
}
// C. 【关键】将开发目录下的 dist 复制到 phpStudy 对应的版本目录
// fs.cpSync 需要 Node.js v16.7.0+
try {
fs.cpSync(DEV_DIST, targetDir, { recursive: true });
log.success(`已将产物复制到: ${targetDir}`);
} catch (_e) {
throw new Error(`复制产物到 phpStudy 目录失败: ${_e.message}`);
}
// D. 更新 phpStudy 目录下的软链接 (Junction)
if (fs.existsSync(PHPSTUDY_CURRENT)) {
try { try {
// Windows 下删除目录链接 const { host, user, path: remotePath } = CONFIG.remote;
fs.rmSync(PHPSTUDY_CURRENT, { recursive: true, force: true }); const remoteCurrentLink = `${remotePath}/current`;
// readlink -f 可以获取链接指向的完整路径
const cmd = `ssh ${user}@${host} "readlink -f ${remoteCurrentLink}"`;
const remoteRealPath = execSync(cmd).toString().trim();
const remoteVersion = path.basename(remoteRealPath);
log.success(`远程服务器当前版本: ${remoteVersion}`);
} catch (_e) { } catch (_e) {
throw new Error(`无法删除 phpStudy 旧的软链接: ${_e.message}`); log.error('无法获取远程版本状态,请检查 SSH 连接。');
} }
} }
}
// 在 phpStudy 目录下创建链接,指向刚复制过去的版本 // --- 【通用工具函数】 ---
function updateLocalLink(targetDir) {
if (fs.existsSync(PROD_CURRENT)) {
fs.rmSync(PROD_CURRENT, { recursive: true, force: true });
}
const linkType = process.platform === 'win32' ? 'junction' : 'dir'; const linkType = process.platform === 'win32' ? 'junction' : 'dir';
fs.symlinkSync(targetDir, PHPSTUDY_CURRENT, linkType); fs.symlinkSync(targetDir, PROD_CURRENT, linkType);
}
function updateRemoteLink(version) {
const { host, user, path: remotePath } = CONFIG.remote;
const remoteVersionDir = `${remotePath}/releases/${version}`;
const remoteCurrentLink = `${remotePath}/current`;
// 直接发送 ln 命令,前提是该目录已经在服务器 releases 里了
execSync(
`ssh ${user}@${host} "ln -snf ${remoteVersionDir} ${remoteCurrentLink}"`,
);
} }
function deployToRemote(version) { function deployToRemote(version) {
@@ -188,4 +275,4 @@ function cleanSourceMaps(dir) {
} }
// 启动执行 // 启动执行
start(); main();

View File

@@ -11,14 +11,13 @@
"dev:mock": "npm run start:mock", "dev:mock": "npm run start:mock",
"postinstall": "max setup", "postinstall": "max setup",
"lint": "npm run biome:lint && npm run tsc", "lint": "npm run biome:lint && npm run tsc",
"lint-staged": "lint-staged",
"biome:lint": "npx @biomejs/biome lint", "biome:lint": "npx @biomejs/biome lint",
"prepare": "husky",
"preview": "max preview --port 8000", "preview": "max preview --port 8000",
"start": "cross-env UMI_ENV=dev MOCK=none max dev", "start": "cross-env UMI_ENV=dev MOCK=none max dev",
"start:mock": "cross-env UMI_ENV=dev max dev", "start:mock": "cross-env UMI_ENV=dev max dev",
"tsc": "tsc --noEmit", "tsc": "tsc --noEmit",
"dpl": "node deploy.js" "dpl": "node deploy.js",
"rollback": "node deploy.js --rollback"
}, },
"browserslist": [ "browserslist": [
"defaults" "defaults"
@@ -54,8 +53,6 @@
"@umijs/max": "^4.3.24", "@umijs/max": "^4.3.24",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"express": "^4.21.1", "express": "^4.21.1",
"husky": "^9.1.7",
"lint-staged": "^16.1.2",
"mockjs": "^1.1.0", "mockjs": "^1.1.0",
"ts-node": "^10.9.2", "ts-node": "^10.9.2",
"typescript": "^5.6.3", "typescript": "^5.6.3",

200
pnpm-lock.yaml generated
View File

@@ -93,12 +93,6 @@ importers:
express: express:
specifier: ^4.21.1 specifier: ^4.21.1
version: 4.22.1 version: 4.22.1
husky:
specifier: ^9.1.7
version: 9.1.7
lint-staged:
specifier: ^16.1.2
version: 16.2.7
mockjs: mockjs:
specifier: ^1.1.0 specifier: ^1.1.0
version: 1.1.0 version: 1.1.0
@@ -3659,10 +3653,6 @@ packages:
resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
engines: {node: '>=8'} engines: {node: '>=8'}
ansi-escapes@7.2.0:
resolution: {integrity: sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==}
engines: {node: '>=18'}
ansi-html-community@0.0.8: ansi-html-community@0.0.8:
resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==}
engines: {'0': node >= 0.8.0} engines: {'0': node >= 0.8.0}
@@ -4336,10 +4326,6 @@ packages:
resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
engines: {node: '>=8'} engines: {node: '>=8'}
cli-cursor@5.0.0:
resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
engines: {node: '>=18'}
cli-spinners@2.9.2: cli-spinners@2.9.2:
resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
engines: {node: '>=6'} engines: {node: '>=6'}
@@ -4348,10 +4334,6 @@ packages:
resolution: {integrity: sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==} resolution: {integrity: sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==}
engines: {node: '>= 0.2.0'} engines: {node: '>= 0.2.0'}
cli-truncate@5.1.1:
resolution: {integrity: sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==}
engines: {node: '>=20'}
cli-width@3.0.0: cli-width@3.0.0:
resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
@@ -4428,9 +4410,6 @@ packages:
colord@2.9.3: colord@2.9.3:
resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
colors@1.0.3: colors@1.0.3:
resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==} resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==}
engines: {node: '>=0.1.90'} engines: {node: '>=0.1.90'}
@@ -5198,9 +5177,6 @@ packages:
resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
emoji-regex@10.6.0:
resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
emoji-regex@7.0.3: emoji-regex@7.0.3:
resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==}
@@ -5258,10 +5234,6 @@ packages:
resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
engines: {node: '>=6'} engines: {node: '>=6'}
environment@1.1.0:
resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
engines: {node: '>=18'}
err-code@2.0.3: err-code@2.0.3:
resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
@@ -5882,10 +5854,6 @@ packages:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*} engines: {node: 6.* || 8.* || >= 10.*}
get-east-asian-width@1.4.0:
resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==}
engines: {node: '>=18'}
get-intrinsic@1.3.0: get-intrinsic@1.3.0:
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
@@ -6250,11 +6218,6 @@ packages:
humanize-ms@1.2.1: humanize-ms@1.2.1:
resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
husky@9.1.7:
resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==}
engines: {node: '>=18'}
hasBin: true
iconv-lite@0.4.24: iconv-lite@0.4.24:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@@ -6528,10 +6491,6 @@ packages:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'} engines: {node: '>=8'}
is-fullwidth-code-point@5.1.0:
resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==}
engines: {node: '>=18'}
is-generator-fn@2.1.0: is-generator-fn@2.1.0:
resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==}
engines: {node: '>=6'} engines: {node: '>=6'}
@@ -7172,15 +7131,6 @@ packages:
lines-and-columns@1.2.4: lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
lint-staged@16.2.7:
resolution: {integrity: sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==}
engines: {node: '>=20.17'}
hasBin: true
listr2@9.0.5:
resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==}
engines: {node: '>=20.0.0'}
load-json-file@4.0.0: load-json-file@4.0.0:
resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==}
engines: {node: '>=4'} engines: {node: '>=4'}
@@ -7287,10 +7237,6 @@ packages:
resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
engines: {node: '>=10'} engines: {node: '>=10'}
log-update@6.1.0:
resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
engines: {node: '>=18'}
log4js@1.1.1: log4js@1.1.1:
resolution: {integrity: sha512-lYb14ZSs1M/CUFuvy7Zk3VZLDtqrqOaVql9CE0tv8g6/qE1Gfq97XKdltBsjSxxvcJ+t8fAXOnvFxSsms7gGVg==} resolution: {integrity: sha512-lYb14ZSs1M/CUFuvy7Zk3VZLDtqrqOaVql9CE0tv8g6/qE1Gfq97XKdltBsjSxxvcJ+t8fAXOnvFxSsms7gGVg==}
engines: {node: '>=0.12'} engines: {node: '>=0.12'}
@@ -7503,10 +7449,6 @@ packages:
resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
engines: {node: '>=12'} engines: {node: '>=12'}
mimic-function@5.0.1:
resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
engines: {node: '>=18'}
mimic-response@1.0.1: mimic-response@1.0.1:
resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==}
engines: {node: '>=4'} engines: {node: '>=4'}
@@ -7655,10 +7597,6 @@ packages:
mute-stream@0.0.8: mute-stream@0.0.8:
resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
nano-spawn@2.0.0:
resolution: {integrity: sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==}
engines: {node: '>=20.17'}
nanoid@3.3.11: nanoid@3.3.11:
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@@ -7984,10 +7922,6 @@ packages:
resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
onetime@7.0.0:
resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
engines: {node: '>=18'}
open@8.4.2: open@8.4.2:
resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -8246,11 +8180,6 @@ packages:
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
engines: {node: '>=12'} engines: {node: '>=12'}
pidtree@0.6.0:
resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
engines: {node: '>=0.10'}
hasBin: true
pify@2.3.0: pify@2.3.0:
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@@ -9693,10 +9622,6 @@ packages:
resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
engines: {node: '>=8'} engines: {node: '>=8'}
restore-cursor@5.1.0:
resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
engines: {node: '>=18'}
retry@0.12.0: retry@0.12.0:
resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
engines: {node: '>= 4'} engines: {node: '>= 4'}
@@ -9705,9 +9630,6 @@ packages:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'} engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
rfdc@1.4.1:
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
rimraf@2.7.1: rimraf@2.7.1:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
deprecated: Rimraf versions prior to v4 are no longer supported deprecated: Rimraf versions prior to v4 are no longer supported
@@ -10094,10 +10016,6 @@ packages:
resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==}
engines: {node: '>=10'} engines: {node: '>=10'}
slice-ansi@7.1.2:
resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==}
engines: {node: '>=18'}
smart-buffer@4.2.0: smart-buffer@4.2.0:
resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
@@ -10258,10 +10176,6 @@ packages:
resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==}
engines: {node: '>=4'} engines: {node: '>=4'}
string-argv@0.3.2:
resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
engines: {node: '>=0.6.19'}
string-convert@0.2.1: string-convert@0.2.1:
resolution: {integrity: sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==} resolution: {integrity: sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==}
@@ -10285,14 +10199,6 @@ packages:
resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
engines: {node: '>=12'} engines: {node: '>=12'}
string-width@7.2.0:
resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
engines: {node: '>=18'}
string-width@8.1.0:
resolution: {integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==}
engines: {node: '>=20'}
string.prototype.matchall@4.0.12: string.prototype.matchall@4.0.12:
resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
@@ -11182,10 +11088,6 @@ packages:
resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
wrap-ansi@9.0.2:
resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==}
engines: {node: '>=18'}
wrappy@1.0.2: wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
@@ -11251,11 +11153,6 @@ packages:
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
yaml@2.8.2:
resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==}
engines: {node: '>= 14.6'}
hasBin: true
yargs-parser@13.1.1: yargs-parser@13.1.1:
resolution: {integrity: sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==} resolution: {integrity: sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==}
@@ -16912,10 +16809,6 @@ snapshots:
dependencies: dependencies:
type-fest: 0.21.3 type-fest: 0.21.3
ansi-escapes@7.2.0:
dependencies:
environment: 1.1.0
ansi-html-community@0.0.8: {} ansi-html-community@0.0.8: {}
ansi-regex@3.0.1: {} ansi-regex@3.0.1: {}
@@ -17959,21 +17852,12 @@ snapshots:
dependencies: dependencies:
restore-cursor: 3.1.0 restore-cursor: 3.1.0
cli-cursor@5.0.0:
dependencies:
restore-cursor: 5.1.0
cli-spinners@2.9.2: {} cli-spinners@2.9.2: {}
cli-table@0.3.11: cli-table@0.3.11:
dependencies: dependencies:
colors: 1.0.3 colors: 1.0.3
cli-truncate@5.1.1:
dependencies:
slice-ansi: 7.1.2
string-width: 8.1.0
cli-width@3.0.0: {} cli-width@3.0.0: {}
click-to-react-component@1.1.0(@types/react@19.2.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): click-to-react-component@1.1.0(@types/react@19.2.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
@@ -18050,8 +17934,6 @@ snapshots:
colord@2.9.3: {} colord@2.9.3: {}
colorette@2.0.20: {}
colors@1.0.3: {} colors@1.0.3: {}
combined-stream@1.0.8: combined-stream@1.0.8:
@@ -18810,8 +18692,6 @@ snapshots:
emittery@0.13.1: emittery@0.13.1:
optional: true optional: true
emoji-regex@10.6.0: {}
emoji-regex@7.0.3: {} emoji-regex@7.0.3: {}
emoji-regex@8.0.0: {} emoji-regex@8.0.0: {}
@@ -18860,8 +18740,6 @@ snapshots:
env-paths@2.2.1: {} env-paths@2.2.1: {}
environment@1.1.0: {}
err-code@2.0.3: {} err-code@2.0.3: {}
errno@0.1.8: errno@0.1.8:
@@ -19861,8 +19739,6 @@ snapshots:
get-caller-file@2.0.5: {} get-caller-file@2.0.5: {}
get-east-asian-width@1.4.0: {}
get-intrinsic@1.3.0: get-intrinsic@1.3.0:
dependencies: dependencies:
call-bind-apply-helpers: 1.0.2 call-bind-apply-helpers: 1.0.2
@@ -20314,8 +20190,6 @@ snapshots:
dependencies: dependencies:
ms: 2.1.3 ms: 2.1.3
husky@9.1.7: {}
iconv-lite@0.4.24: iconv-lite@0.4.24:
dependencies: dependencies:
safer-buffer: 2.1.2 safer-buffer: 2.1.2
@@ -20585,10 +20459,6 @@ snapshots:
is-fullwidth-code-point@3.0.0: {} is-fullwidth-code-point@3.0.0: {}
is-fullwidth-code-point@5.1.0:
dependencies:
get-east-asian-width: 1.4.0
is-generator-fn@2.1.0: is-generator-fn@2.1.0:
optional: true optional: true
@@ -21443,25 +21313,6 @@ snapshots:
lines-and-columns@1.2.4: {} lines-and-columns@1.2.4: {}
lint-staged@16.2.7:
dependencies:
commander: 14.0.2
listr2: 9.0.5
micromatch: 4.0.8
nano-spawn: 2.0.0
pidtree: 0.6.0
string-argv: 0.3.2
yaml: 2.8.2
listr2@9.0.5:
dependencies:
cli-truncate: 5.1.1
colorette: 2.0.20
eventemitter3: 5.0.1
log-update: 6.1.0
rfdc: 1.4.1
wrap-ansi: 9.0.2
load-json-file@4.0.0: load-json-file@4.0.0:
dependencies: dependencies:
graceful-fs: 4.2.11 graceful-fs: 4.2.11
@@ -21555,14 +21406,6 @@ snapshots:
chalk: 4.1.2 chalk: 4.1.2
is-unicode-supported: 0.1.0 is-unicode-supported: 0.1.0
log-update@6.1.0:
dependencies:
ansi-escapes: 7.2.0
cli-cursor: 5.0.0
slice-ansi: 7.1.2
strip-ansi: 7.1.2
wrap-ansi: 9.0.2
log4js@1.1.1: log4js@1.1.1:
dependencies: dependencies:
debug: 2.6.9 debug: 2.6.9
@@ -21848,8 +21691,6 @@ snapshots:
mimic-fn@4.0.0: {} mimic-fn@4.0.0: {}
mimic-function@5.0.1: {}
mimic-response@1.0.1: {} mimic-response@1.0.1: {}
min-document@2.19.2: min-document@2.19.2:
@@ -22005,8 +21846,6 @@ snapshots:
mute-stream@0.0.8: {} mute-stream@0.0.8: {}
nano-spawn@2.0.0: {}
nanoid@3.3.11: {} nanoid@3.3.11: {}
napi-postinstall@0.3.4: napi-postinstall@0.3.4:
@@ -22441,10 +22280,6 @@ snapshots:
dependencies: dependencies:
mimic-fn: 4.0.0 mimic-fn: 4.0.0
onetime@7.0.0:
dependencies:
mimic-function: 5.0.1
open@8.4.2: open@8.4.2:
dependencies: dependencies:
define-lazy-prop: 2.0.0 define-lazy-prop: 2.0.0
@@ -22751,8 +22586,6 @@ snapshots:
picomatch@4.0.3: picomatch@4.0.3:
optional: true optional: true
pidtree@0.6.0: {}
pify@2.3.0: {} pify@2.3.0: {}
pify@3.0.0: {} pify@3.0.0: {}
@@ -24559,17 +24392,10 @@ snapshots:
onetime: 5.1.2 onetime: 5.1.2
signal-exit: 3.0.7 signal-exit: 3.0.7
restore-cursor@5.1.0:
dependencies:
onetime: 7.0.0
signal-exit: 4.1.0
retry@0.12.0: {} retry@0.12.0: {}
reusify@1.1.0: {} reusify@1.1.0: {}
rfdc@1.4.1: {}
rimraf@2.7.1: rimraf@2.7.1:
dependencies: dependencies:
glob: 7.2.3 glob: 7.2.3
@@ -25053,11 +24879,6 @@ snapshots:
astral-regex: 2.0.0 astral-regex: 2.0.0
is-fullwidth-code-point: 3.0.0 is-fullwidth-code-point: 3.0.0
slice-ansi@7.1.2:
dependencies:
ansi-styles: 6.2.3
is-fullwidth-code-point: 5.1.0
smart-buffer@4.2.0: {} smart-buffer@4.2.0: {}
socks-proxy-agent@6.2.1: socks-proxy-agent@6.2.1:
@@ -25245,8 +25066,6 @@ snapshots:
strict-uri-encode@2.0.0: {} strict-uri-encode@2.0.0: {}
string-argv@0.3.2: {}
string-convert@0.2.1: {} string-convert@0.2.1: {}
string-length@4.0.2: string-length@4.0.2:
@@ -25278,17 +25097,6 @@ snapshots:
emoji-regex: 9.2.2 emoji-regex: 9.2.2
strip-ansi: 7.1.2 strip-ansi: 7.1.2
string-width@7.2.0:
dependencies:
emoji-regex: 10.6.0
get-east-asian-width: 1.4.0
strip-ansi: 7.1.2
string-width@8.1.0:
dependencies:
get-east-asian-width: 1.4.0
strip-ansi: 7.1.2
string.prototype.matchall@4.0.12: string.prototype.matchall@4.0.12:
dependencies: dependencies:
call-bind: 1.0.8 call-bind: 1.0.8
@@ -26472,12 +26280,6 @@ snapshots:
string-width: 5.1.2 string-width: 5.1.2
strip-ansi: 7.1.2 strip-ansi: 7.1.2
wrap-ansi@9.0.2:
dependencies:
ansi-styles: 6.2.3
string-width: 7.2.0
strip-ansi: 7.1.2
wrappy@1.0.2: {} wrappy@1.0.2: {}
write-file-atomic@2.4.3: write-file-atomic@2.4.3:
@@ -26524,8 +26326,6 @@ snapshots:
yaml@1.10.2: {} yaml@1.10.2: {}
yaml@2.8.2: {}
yargs-parser@13.1.1: yargs-parser@13.1.1:
dependencies: dependencies:
camelcase: 5.3.1 camelcase: 5.3.1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 114 KiB

View File

@@ -85,7 +85,7 @@ const Login: React.FC = () => {
<Flex align="center" justify="center"> <Flex align="center" justify="center">
<LoginForm <LoginForm
logo="/logo.svg" logo="/logo.svg"
title="RiskGuardxxx" title="RiskGuard"
subTitle={$t('pages.layouts.userLayout.title')} subTitle={$t('pages.layouts.userLayout.title')}
initialValues={{ initialValues={{
autoLogin: true, autoLogin: true,

View File

@@ -1,11 +1,20 @@
import * as Sentry from '@sentry/react'; import * as Sentry from '@sentry/react';
import packageJson from '../../package.json';
Sentry.init({ if (process.env.UMI_APP_SENTRY_DSN) {
dsn: process.env.UMI_APP_SENTRY_DSN, Sentry.init({
enabled: process.env.NODE_ENV === 'production', dsn: process.env.UMI_APP_SENTRY_DSN,
integrations: [Sentry.browserTracingIntegration()], enabled: process.env.NODE_ENV === 'production',
environment: process.env.NODE_ENV, integrations: [Sentry.browserTracingIntegration()],
release: `${packageJson.name}@${process.env.UMI_APP_SENTRY_RELEASE}`, environment: process.env.NODE_ENV,
tracesSampleRate: 0.02, release: process.env.UMI_APP_SENTRY_RELEASE,
}); tracesSampleRate: 0.02,
});
}
// Print the version number only in the production environment
if (process.env.NODE_ENV === 'production') {
console.log(
`%c Current Version: ${process.env.UMI_APP_SHORT_RELEASE || 'N/A'} `,
'background: #1e88e5; color: #fff; padding: 2px 5px; border-radius: 3px;',
);
}