diff --git a/Makefile b/Makefile index 11d7e3fec..c25feec5a 100644 --- a/Makefile +++ b/Makefile @@ -46,12 +46,5 @@ docker_build_ee: pull_image docker_install_node_modules docker_build_demo: pull_image docker_install_node_modules $(DOCKER) run -v $(MAIN_MODULE):/usr/src/app --user $(UID):$(GID) -w /usr/src/app --rm $(DOCKER_IMAGE) sh -c "pnpm build:demo" -docker_build_icons_docs: pull_image docker_install_node_modules - $(DOCKER) run -v $(MAIN_MODULE):/usr/src/app --user $(UID):$(GID) -w /usr/src/app --rm $(DOCKER_IMAGE) sh -c "pnpm icon:docs:g && pnpm icon:docs:build && mv packages/icons/docs-dist ./docs-dist && tar zcf $(ICONS_DOCS_OUTER_BUILD_NAME) ./docs-dist" - -docker_upload_icons_docs: - curl -T $(ICONS_DOCS_OUTER_BUILD_NAME) \ - ftp://$(RELEASE_FTP_HOST)/actiontech-dms-ui/icons/$(ICONS_DOCS_OUTER_BUILD_NAME) --ftp-create-dirs - -docker_sync_icons_docs_static: - curl -X POST ${SYNC_ICONS_DOCS_STATIC_HOST}/sync-static \ No newline at end of file +docker_publish_and_docs_deploy: docker_install_node_modules + $(DOCKER) run -v $(MAIN_MODULE):/usr/src/app --user $(UID):$(GID) -w /usr/src/app --rm $(DOCKER_IMAGE) sh -c "git config --global --add safe.directory /usr/src/app && pnpm publishAndDocsDeploy" diff --git a/package.json b/package.json index 549863e54..bf5c55434 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,9 @@ "api_client:g": "npm_config_registry=http://10.186.18.19:4873 pnpx @actiontech/cli api-client -y", "api_mocks:g": "npm_config_registry=http://10.186.18.19:4873 pnpx @actiontech/cli api-mocks -y", "ai-doc": "npm_config_registry=http://10.186.18.19:4873 pnpx @actiontech/cli ai-doc", - "postinstall": "pnpm --filter @actiontech/dms-kit build" + "postinstall": "pnpm --filter @actiontech/dms-kit build", + "publish_and_docs_deploy": "pnpm install && pnpm -C scripts/publishAndDocsDeploy install --ignore-workspace && tsx scripts/publishAndDocsDeploy/index.ts", + "publish_and_docs_deploy1": "tsx scripts/publishAndDocsDeploy/index.ts" }, "keywords": [], "author": "", @@ -92,6 +94,7 @@ "stylelint-config-styled-components": "^0.1.1", "stylelint-prettier": "^4.0.2", "ts-jest": "27.1.5", + "tsx": "^4.20.5", "typescript": "^5.0.2", "typescript-eslint": "^8.28.0", "vite": "^5.2.6", diff --git a/packages/dms-kit/package.json b/packages/dms-kit/package.json index 6396154e2..6239002d4 100644 --- a/packages/dms-kit/package.json +++ b/packages/dms-kit/package.json @@ -1,6 +1,6 @@ { "name": "@actiontech/dms-kit", - "version": "0.0.2-beta.6", + "version": "0.0.2-beta.7", "main": "lib/index.js", "module": "es/index.js", "types": "es/index.d.ts", diff --git a/packages/icons/.dumi/tsconfig.json b/packages/icons/.dumi/tsconfig.json new file mode 100644 index 000000000..79711a82b --- /dev/null +++ b/packages/icons/.dumi/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "../tsconfig.json", + "include": [ + "**/*" + ] +} \ No newline at end of file diff --git a/packages/icons/docs/icon/Common.md b/packages/icons/docs/icon/Common.md index f3faaa138..dc928e70e 100644 --- a/packages/icons/docs/icon/Common.md +++ b/packages/icons/docs/icon/Common.md @@ -361,6 +361,20 @@ import { EyeClosedOutlined } from '@actiontech/icons'; export default () => ``` +## FaLessThanEqualOutlined +```jsx +import { FaLessThanEqualOutlined } from '@actiontech/icons'; + +export default () => +``` + +## FilterOutlined +```jsx +import { FilterOutlined } from '@actiontech/icons'; + +export default () => +``` + ## HexagonOutlined ```jsx import { HexagonOutlined } from '@actiontech/icons'; diff --git a/packages/icons/docs/icon/Data.md b/packages/icons/docs/icon/Data.md index 3fbd8e0ef..ca59ecbb2 100644 --- a/packages/icons/docs/icon/Data.md +++ b/packages/icons/docs/icon/Data.md @@ -144,6 +144,13 @@ import { TrendCardFilled } from '@actiontech/icons'; export default () => ``` +## DashboardOutlined +```jsx +import { DashboardOutlined } from '@actiontech/icons'; + +export default () => +``` + ## DoubleDatabaseOutlined ```jsx import { DoubleDatabaseOutlined } from '@actiontech/icons'; diff --git a/packages/icons/package_publish.json b/packages/icons/package_publish.json index 112a4072d..c6a5b2803 100644 --- a/packages/icons/package_publish.json +++ b/packages/icons/package_publish.json @@ -1,6 +1,5 @@ { "name": "@actiontech/icons", - "version": "0.0.1-rc.7", "description": "", "main": "./dist/index.js", "module": "./es/index.js", diff --git a/packages/icons/publish-icons.mjs b/packages/icons/publish-icons.mjs index 793ae5089..c01bab98b 100755 --- a/packages/icons/publish-icons.mjs +++ b/packages/icons/publish-icons.mjs @@ -124,27 +124,10 @@ async function confirmPublish() { }); } -function updatePackagePublishVersion(iconsDir, version) { - const pubPkgPath = path.join(iconsDir, 'package_publish.json'); - try { - const pubPkgContent = readJson(pubPkgPath); - pubPkgContent.version = version; - writeJson(pubPkgPath, pubPkgContent); - console.log(`✅ 已更新 package_publish.json 版本号为: ${version}`); - } catch (err) { - console.warn(`⚠️ 更新 package_publish.json 版本号失败: ${err.message}`); - } -} - async function main() { - const { version, skipConfirm } = parseArgs(process.argv); - if (!version) { - console.error('请通过 --version 或 -v 指定版本号,例如:'); - console.error( - ' node packages/icons/publish-icons.mjs --version 0.0.1-rc.3' - ); - process.exit(1); - } + const { skipConfirm } = parseArgs(process.argv); + + const version = readJson(path.join(iconsDir, 'package.json')).version; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); @@ -230,9 +213,6 @@ async function main() { console.log('[6/7] 执行发布: npm publish'); runCmd('npm', ['publish'], tmpDir); - console.log('[7/7] 更新 package_publish.json 版本号'); - updatePackagePublishVersion(iconsDir, version); - console.log('✅ 发布完成'); } catch (err) { console.error('❌ 发布流程发生错误:', err?.message || err); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c4db7791d..2d052c501 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -285,6 +285,9 @@ importers: ts-jest: specifier: 27.1.5 version: 27.1.5(@babel/core@7.26.10)(@types/jest@29.5.12)(babel-jest@29.7.0(@babel/core@7.26.10))(jest@29.1.2(@types/node@18.19.84)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.1))(@types/node@18.19.84)(typescript@5.8.2)))(typescript@5.8.2) + tsx: + specifier: ^4.20.5 + version: 4.20.5 typescript: specifier: ^5.0.2 version: 5.8.2 @@ -23650,7 +23653,6 @@ snapshots: get-tsconfig: 4.10.0 optionalDependencies: fsevents: 2.3.3 - optional: true tty-browserify@0.0.0: {} diff --git a/scripts/publishAndDocsDeploy/.npmrc b/scripts/publishAndDocsDeploy/.npmrc new file mode 100644 index 000000000..5e775f322 --- /dev/null +++ b/scripts/publishAndDocsDeploy/.npmrc @@ -0,0 +1,2 @@ +registry=https://registry.npmmirror.com +@actiontech:registry=http://10.186.18.19:4873/ \ No newline at end of file diff --git a/scripts/publishAndDocsDeploy/index.ts b/scripts/publishAndDocsDeploy/index.ts new file mode 100644 index 000000000..db0755096 --- /dev/null +++ b/scripts/publishAndDocsDeploy/index.ts @@ -0,0 +1,416 @@ +// 从 package.json 中获取对应包名称和版本 +// `[包]@[版本]`未发布时,发布包 +// 构建文档和部署文档 +// 推送 tag + +import * as fs from 'fs'; +import * as path from 'path'; +import { Client as ftpClient } from 'basic-ftp'; +import archiver from 'archiver'; +import axios from 'axios'; +import { execa } from 'execa'; +import chalk from 'chalk'; +import { ServerSDK } from '@actiontech/robot-server-sdk'; + +// 配置 +const config = { + pnpm: { + registry: 'http://10.186.18.19:4873/', + name: '@actiontech:registry', + preCom: '@actiontech', + auth: '//10.186.18.19:4873/:_auth="cHVibGlzaGVyOnB1Ymxpc2hlcg=="' + }, + ftpServer: { + host: '10.186.18.90', + user: 'ftpadmin', + password: 'KFQsB9g0aut7' + }, + ftpDir: path.join('/actiontech-dms-ui', 'docs'), + githubApi: { + owner: 'actiontech', // GitHub 用户名或组织名 + repo: 'dms-ui', // GitHub 仓库名 + baseUrl: 'https://api.github.com', // GitHub API 基础 URL + projectId: 706476902 + } +}; + +// 包配置 +const packages = [ + { + dir: 'icons', + distDir: path.join(process.cwd(), 'packages/icons/docs-dist'), + changelogPath: path.join(process.cwd(), 'packages/icons/docs/CHANGELOG.md') + }, + { + dir: 'dms-kit', + distDir: path.join(process.cwd(), 'packages/dms-kit/docs-dist'), + changelogPath: path.join( + process.cwd(), + 'packages/dms-kit/docs/CHANGELOG.md' + ) + } +]; + +// 日志工具 +const stepLog = (msg: string) => console.log(chalk.magenta(`>> ${msg}`)); +const successLog = (msg: string) => console.log(chalk.green(msg)); +const errorLog = (msg: string) => console.log(chalk.red(msg)); + +const robotSDK = new ServerSDK({ baseUrl: 'http://10.186.18.19:8000' }); + +interface PackageInfo { + name: string; + version: string; + dir: string; + distDir: string; + changelogPath: string; +} + +class DmsUiDeploy { + private pkgs: PackageInfo[] = []; + private cwd = process.cwd(); + + async start() { + try { + stepLog('获取包信息'); + await this.loadPkgInfo(); + + if (!this.pkgs.length) { + console.log('未找到有效的包信息'); + return; + } + + // stepLog('步骤1: 发布包'); + // await this.publishPkg(); + + stepLog('步骤2: 部署文档'); + await this.deployDocs(); + + // stepLog('步骤3: 推送版本标签'); + // 没有 github token 暂不推送 + // await this.setGitRegistryTag(); + + successLog('所有步骤执行完成'); + process.exit(0); + } catch (error) { + this.handleError(error); + } + } + + private async loadPkgInfo() { + // 检查 Git 状态 + // const { stdout: unSubmitted } = await execa('git', [ + // 'status', + // '--porcelain' + // ]); + // if (unSubmitted || !this.cwd.endsWith('/app')) { + // errorLog('禁止手动执行该脚本'); + // process.exit(1); + // } + + for (const pkg of packages) { + try { + const packageJsonPath = path.join( + this.cwd, + `packages/${pkg.dir}/package.json` + ); + const packageJson = JSON.parse( + fs.readFileSync(packageJsonPath, 'utf-8') + ); + const { name, version } = packageJson; + + this.pkgs.push({ + ...pkg, + name, + version + }); + } catch (error) { + errorLog(`加载包信息失败: ${pkg.dir} - ${error}`); + throw error; + } + } + } + + private async publishPkg() { + for (const pkg of this.pkgs) { + // 检查包是否已发布 + let isPublished = false; + try { + const { stdout } = await execa('pnpm', [ + 'info', + `${pkg.name}@${pkg.version}`, + '--registry', + config.pnpm.registry + ]); + if (stdout.length) { + isPublished = true; + } + } catch { + isPublished = false; + } + + if (isPublished) { + console.log(`包 ${pkg.name}@${pkg.version} 已发布,跳过发布步骤`); + continue; + } + + try { + stepLog(`发布包 ${pkg.name}@${pkg.version}`); + if (pkg.dir === 'icons') { + await execa( + 'node', + ['packages/icons/publish-icons.mjs', '--skip-confirm'], + { + cwd: path.join(this.cwd, 'packages', 'icons') + } + ); + return; + } + const pkgPath = path.join(this.cwd, 'packages', pkg.dir); + + // 设置 npm 认证 + await execa('pnpm', ['config', 'set', config.pnpm.auth], { + cwd: pkgPath + }); + + // 发布包 + const tag = pkg.version.includes('beta') ? 'beta' : 'latest'; + await execa( + 'pnpm', + [ + 'publish', + '--registry', + config.pnpm.registry, + '--tag', + tag, + '--no-git-checks' + ], + { cwd: pkgPath } + ); + + successLog(`包 ${pkg.name}@${pkg.version} 发布成功`); + } catch (error) { + errorLog(`包 ${pkg.name}@${pkg.version} 发布失败`); + this.handleError(error); + } + } + } + + private async deployDocs() { + stepLog('上传文档到 FTP 服务器'); + const ftp = new ftpClient(); + + try { + await ftp.access(config.ftpServer); + + const packageList: Array<{ + filepath: string; + name: string; + version: string; + changelog: string; + }> = []; + + for (const pkg of this.pkgs) { + const zipFileName = `${pkg.dir}-v${pkg.version}.zip`; + + // 检查文档是否已部署 + let isDeployed = false; + try { + await ftp.ensureDir(config.ftpDir); + const list = await ftp.list(config.ftpDir); + isDeployed = list.some((file) => file.name === zipFileName); + } catch { + isDeployed = false; + } + + if (isDeployed) { + console.log(`文档 ${zipFileName} 已存在,跳过上传`); + continue; + } + + stepLog(`构建并上传文档: ${pkg.dir}`); + if (pkg.dir === 'icons') { + await execa('pnpm', ['docs:g'], { + cwd: path.join(this.cwd, 'packages', 'icons') + }); + } + const dumiConfigPath = path.join( + this.cwd, + 'packages', + pkg.dir, + '.dumirc.ts' + ); + + // 读取原始配置 + const originalConfig = fs.readFileSync(dumiConfigPath, 'utf-8'); + + // 修改配置用于构建 + const modifiedConfig = originalConfig.replaceAll( + '/dms-docs', + `/doc/${pkg.dir}-v${pkg.version.split('.')[0]}` + ); + + // 写入修改后的配置 + fs.writeFileSync(dumiConfigPath, modifiedConfig); + + try { + // 构建文档 + await execa('pnpm', ['docs:build'], { + cwd: path.join(this.cwd, 'packages', pkg.dir) + }); + + // 压缩文档 + await this.compressFolder( + pkg.distDir, + path.join(this.cwd, zipFileName) + ); + + // 上传到 FTP + const readStream = fs.createReadStream( + path.join(this.cwd, zipFileName) + ); + await ftp.uploadFrom( + readStream, + path.join(config.ftpDir, zipFileName) + ); + + // 清理临时文件 + fs.unlinkSync(path.join(this.cwd, zipFileName)); + packageList.push({ + filepath: path.join(config.ftpDir, zipFileName), + name: pkg.name, + version: pkg.version, + changelog: getChangelogForVersion(pkg.changelogPath, pkg.version) + }); + + successLog(`${zipFileName} 已上传至 FTP 服务器`); + } finally { + // 恢复原始配置 + fs.writeFileSync(dumiConfigPath, originalConfig); + } + } + + successLog('文档网站产物传输成功'); + // 发送部署请求 + if (packageList.length) { + stepLog('发送文档部署请求'); + await robotSDK.docManagement.dmpKitDeploy({ + body: { + package_list: packageList, + project_id: config.githubApi.projectId + } + }); + successLog('文档部署请求发送成功'); + } + } catch (err) { + errorLog('文档部署失败'); + this.handleError(err); + } finally { + ftp.close(); + } + } + + private async setGitRegistryTag() { + const { stdout: tagShell } = await execa('git', ['tag']); + const githubToken = ( + await robotSDK.project.getProject({ + params: { id: config.githubApi.projectId } + }) + ).data.data?.token; + + for (const pkg of this.pkgs) { + const tag = `v${pkg.version}@${pkg.dir}`; + + if (tagShell.includes(tag)) { + console.log(`标签 ${tag} 已存在,跳过推送`); + continue; + } + + try { + const { stdout: localCommit } = await execa('git', [ + 'rev-parse', + 'HEAD' + ]); + + const tagUrl = `${config.githubApi.baseUrl}/repos/${config.githubApi.owner}/${config.githubApi.repo}/git/refs`; + + await axios.post( + tagUrl, + { + ref: `refs/tags/${tag}`, + sha: localCommit + }, + { + headers: { + Authorization: `token ${githubToken}`, + Accept: 'application/vnd.github.v3+json', + 'User-Agent': 'dms-ui-deploy-script' + } + } + ); + + successLog(`Git 仓库标签 ${tag} 添加成功`); + } catch (error) { + errorLog(`Git 仓库标签 ${tag} 添加失败`); + this.handleError(error); + } + } + } + + private async compressFolder( + sourceDir: string, + outputZipPath: string + ): Promise { + return new Promise((resolve, reject) => { + const archive = archiver('zip', { zlib: { level: 9 } }); + const outputStream = fs.createWriteStream(outputZipPath); + + outputStream.on('close', resolve); + outputStream.on('error', reject); + + archive.pipe(outputStream); + archive.directory(sourceDir, path.basename(sourceDir)); + archive.finalize(); + }); + } + + private handleError(error: any) { + console.error(error); + process.exit(1); + } +} + +// 运行部署 +new DmsUiDeploy().start(); + +function getChangelogForVersion(changelogPath: string, version: string) { + try { + const changelogContent = fs.readFileSync(changelogPath, 'utf-8'); + + // 构建版本标题的正则表达式 + // 匹配 ## version 后面的内容,直到下一个 ## 或文件结尾 + const versionPattern = new RegExp( + `## ${version}(?:\\s+[^\\n]*)?\\s*\\n([\\s\\S]*?)(?=\\n## |$)`, + 'i' + ); + const match = changelogContent.match(versionPattern); + + if (match && match[1]) { + // 清理内容,移除多余的空行和缩进 + const content = match[1] + .trim() + .split('\n') + .map((line) => line.trim()) + .filter((line) => line.length > 0) + .join('\n'); + + return content; + } + + console.log(`未找到版本 ${version} 的 changelog`); + return `未找到版本 ${version} 的 changelog`; + } catch (error) { + console.error('读取 changelog.md 文件失败:', error); + return `读取 changelog.md 文件失败: ${error}`; + } +} diff --git a/scripts/publishAndDocsDeploy/package.json b/scripts/publishAndDocsDeploy/package.json new file mode 100644 index 000000000..d4f877ff0 --- /dev/null +++ b/scripts/publishAndDocsDeploy/package.json @@ -0,0 +1,38 @@ +{ + "name": "@actiontech/dms-ui-publish-deploy", + "version": "1.0.0", + "description": "DMS UI 包发布和文档部署脚本", + "main": "index.ts", + "type": "module", + "scripts": { + "start": "tsx index.ts", + "build": "tsc", + "dev": "tsx watch index.ts" + }, + "keywords": [ + "dms-ui", + "publish", + "deploy", + "docs", + "actiontech" + ], + "author": "ActionTech", + "license": "MIT", + "dependencies": { + "archiver": "^7.0.1", + "axios": "^0.27.2", + "basic-ftp": "^5.0.5", + "chalk": "^4.1.2", + "execa": "^8.0.1", + "@actiontech/robot-server-sdk": "latest", + "zod": "^3.22.3" + }, + "devDependencies": { + "@types/archiver": "^6.0.3", + "@types/node": "^18.0.4", + "typescript": "^5.0.2" + }, + "engines": { + "node": ">=18.0.0" + } +} \ No newline at end of file diff --git a/scripts/publishAndDocsDeploy/pnpm-lock.yaml b/scripts/publishAndDocsDeploy/pnpm-lock.yaml new file mode 100644 index 000000000..9e9a2c034 --- /dev/null +++ b/scripts/publishAndDocsDeploy/pnpm-lock.yaml @@ -0,0 +1,937 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@actiontech/robot-server-sdk': + specifier: latest + version: 1.0.0(@types/node@18.19.123)(zod@3.25.76) + archiver: + specifier: ^7.0.1 + version: 7.0.1 + axios: + specifier: ^0.27.2 + version: 0.27.2 + basic-ftp: + specifier: ^5.0.5 + version: 5.0.5 + chalk: + specifier: ^4.1.2 + version: 4.1.2 + execa: + specifier: ^8.0.1 + version: 8.0.1 + zod: + specifier: ^3.22.3 + version: 3.25.76 + devDependencies: + '@types/archiver': + specifier: ^6.0.3 + version: 6.0.3 + '@types/node': + specifier: ^18.0.4 + version: 18.19.123 + typescript: + specifier: ^5.0.2 + version: 5.9.2 + +packages: + + '@actiontech/robot-server-sdk@1.0.0': + resolution: {integrity: sha512-+nYQ9LdzuGmrjx0IugE51aQwKN/+r2Pmt3FxmVat1ZtGMBZlD4Ydh96LNQHkYhNwP2Kb5KzKn3YfeMYg3l/hbg==} + engines: {node: '>=18.11.18', pnpm: '>=9.7.0'} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@ts-rest/core@3.52.1': + resolution: {integrity: sha512-tAjz7Kxq/grJodcTA1Anop4AVRDlD40fkksEV5Mmal88VoZeRKAG8oMHsDwdwPZz+B/zgnz0q2sF+cm5M7Bc7g==} + peerDependencies: + '@types/node': ^18.18.7 || >=20.8.4 + zod: ^3.22.3 + peerDependenciesMeta: + '@types/node': + optional: true + zod: + optional: true + + '@types/archiver@6.0.3': + resolution: {integrity: sha512-a6wUll6k3zX6qs5KlxIggs1P1JcYJaTCx2gnlr+f0S1yd2DoaEwoIK10HmBaLnZwWneBz+JBm0dwcZu0zECBcQ==} + + '@types/node@18.19.123': + resolution: {integrity: sha512-K7DIaHnh0mzVxreCR9qwgNxp3MH9dltPNIEddW9MYUlcKAzm+3grKNSTe2vCJHI1FaLpvpL5JGJrz1UZDKYvDg==} + + '@types/readdir-glob@1.1.5': + resolution: {integrity: sha512-raiuEPUYqXu+nvtY2Pe8s8FEmZ3x5yAH4VkLdihcPdalvsHltomrRC9BzuStrJ9yk06470hS0Crw0f1pXqD+Hg==} + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.2.0: + resolution: {integrity: sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + archiver-utils@5.0.2: + resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} + engines: {node: '>= 14'} + + archiver@7.0.1: + resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} + engines: {node: '>= 14'} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axios@0.27.2: + resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==} + + b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + bare-events@2.6.1: + resolution: {integrity: sha512-AuTJkq9XmE6Vk0FJVNq5QxETrSA/vKHarWVBG5l/JbdCL1prJemiyJqUS0jrlXO0MftuPq4m3YVYhoNc5+aE/g==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + basic-ftp@5.0.5: + resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} + engines: {node: '>=10.0.0'} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + buffer-crc32@1.0.0: + resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} + engines: {node: '>=8.0.0'} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + compress-commons@6.0.2: + resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==} + engines: {node: '>= 14'} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + + crc32-stream@6.0.0: + resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} + engines: {node: '>= 14'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + engines: {node: '>= 6'} + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@4.7.0: + resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readdir-glob@1.1.3: + resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + streamx@2.22.1: + resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + + text-decoder@1.2.3: + resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + zip-stream@6.0.1: + resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} + engines: {node: '>= 14'} + + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + +snapshots: + + '@actiontech/robot-server-sdk@1.0.0(@types/node@18.19.123)(zod@3.25.76)': + dependencies: + '@ts-rest/core': 3.52.1(@types/node@18.19.123)(zod@3.25.76) + transitivePeerDependencies: + - '@types/node' + - zod + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@ts-rest/core@3.52.1(@types/node@18.19.123)(zod@3.25.76)': + optionalDependencies: + '@types/node': 18.19.123 + zod: 3.25.76 + + '@types/archiver@6.0.3': + dependencies: + '@types/readdir-glob': 1.1.5 + + '@types/node@18.19.123': + dependencies: + undici-types: 5.26.5 + + '@types/readdir-glob@1.1.5': + dependencies: + '@types/node': 18.19.123 + + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + ansi-regex@5.0.1: {} + + ansi-regex@6.2.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + archiver-utils@5.0.2: + dependencies: + glob: 10.4.5 + graceful-fs: 4.2.11 + is-stream: 2.0.1 + lazystream: 1.0.1 + lodash: 4.17.21 + normalize-path: 3.0.0 + readable-stream: 4.7.0 + + archiver@7.0.1: + dependencies: + archiver-utils: 5.0.2 + async: 3.2.6 + buffer-crc32: 1.0.0 + readable-stream: 4.7.0 + readdir-glob: 1.1.3 + tar-stream: 3.1.7 + zip-stream: 6.0.1 + + async@3.2.6: {} + + asynckit@0.4.0: {} + + axios@0.27.2: + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.4 + transitivePeerDependencies: + - debug + + b4a@1.6.7: {} + + balanced-match@1.0.2: {} + + bare-events@2.6.1: + optional: true + + base64-js@1.5.1: {} + + basic-ftp@5.0.5: {} + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + buffer-crc32@1.0.0: {} + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + compress-commons@6.0.2: + dependencies: + crc-32: 1.2.2 + crc32-stream: 6.0.0 + is-stream: 2.0.1 + normalize-path: 3.0.0 + readable-stream: 4.7.0 + + core-util-is@1.0.3: {} + + crc-32@1.2.2: {} + + crc32-stream@6.0.0: + dependencies: + crc-32: 1.2.2 + readable-stream: 4.7.0 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + delayed-stream@1.0.0: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + eastasianwidth@0.2.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + event-target-shim@5.0.1: {} + + events@3.3.0: {} + + execa@8.0.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + + fast-fifo@1.3.2: {} + + follow-redirects@1.15.11: {} + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + form-data@4.0.4: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + function-bind@1.1.2: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-stream@8.0.1: {} + + glob@10.4.5: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + has-flag@4.0.0: {} + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + human-signals@5.0.0: {} + + ieee754@1.2.1: {} + + inherits@2.0.4: {} + + is-fullwidth-code-point@3.0.0: {} + + is-stream@2.0.1: {} + + is-stream@3.0.0: {} + + isarray@1.0.0: {} + + isexe@2.0.0: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + lazystream@1.0.1: + dependencies: + readable-stream: 2.3.8 + + lodash@4.17.21: {} + + lru-cache@10.4.3: {} + + math-intrinsics@1.1.0: {} + + merge-stream@2.0.0: {} + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mimic-fn@4.0.0: {} + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.2 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + + minipass@7.1.2: {} + + normalize-path@3.0.0: {} + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + package-json-from-dist@1.0.1: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + process-nextick-args@2.0.1: {} + + process@0.11.10: {} + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@4.7.0: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + + readdir-glob@1.1.3: + dependencies: + minimatch: 5.1.6 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + signal-exit@4.1.0: {} + + streamx@2.22.1: + dependencies: + fast-fifo: 1.3.2 + text-decoder: 1.2.3 + optionalDependencies: + bare-events: 2.6.1 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.2.0 + + strip-final-newline@3.0.0: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + tar-stream@3.1.7: + dependencies: + b4a: 1.6.7 + fast-fifo: 1.3.2 + streamx: 2.22.1 + + text-decoder@1.2.3: + dependencies: + b4a: 1.6.7 + + typescript@5.9.2: {} + + undici-types@5.26.5: {} + + util-deprecate@1.0.2: {} + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + zip-stream@6.0.1: + dependencies: + archiver-utils: 5.0.2 + compress-commons: 6.0.2 + readable-stream: 4.7.0 + + zod@3.25.76: {}