diff --git a/.gitignore b/.gitignore
index 960df7d52..4dbb2d65d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -29,6 +29,7 @@ dist
# misc
.DS_Store
+.env
.env.local
.env.development.local
.env.test.local
@@ -47,3 +48,9 @@ es
# cursor
.cursor
+
+verdaccio
+ftp-data
+
+
+/scripts/cli/dms-kit-publish/docs
\ No newline at end of file
diff --git a/Makefile b/Makefile
index 11d7e3fec..acbde1e37 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_dms_kit_publish: 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 dms-kit:publish"
diff --git a/package.json b/package.json
index 99e325790..f3c59eef7 100644
--- a/package.json
+++ b/package.json
@@ -34,12 +34,14 @@
"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",
+ "dms-kit:publish": "pnpm --filter @actiontech/cli-dms-kit-publish build && dms-kit-publish"
},
"keywords": [],
"author": "",
"devDependencies": {
"@actiontech/cli-create-dms-page": "workspace:^",
+ "@actiontech/cli-dms-kit-publish": "workspace:^",
"@cfaester/enzyme-adapter-react-18": "^0.7.0",
"@eslint/js": "^9.23.0",
"@testing-library/dom": "9.3.4",
@@ -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/.dumi/tsconfig.json b/packages/dms-kit/.dumi/tsconfig.json
new file mode 100644
index 000000000..79711a82b
--- /dev/null
+++ b/packages/dms-kit/.dumi/tsconfig.json
@@ -0,0 +1,6 @@
+{
+ "extends": "../tsconfig.json",
+ "include": [
+ "**/*"
+ ]
+}
\ No newline at end of file
diff --git a/packages/dms-kit/package.json b/packages/dms-kit/package.json
index 05cf82ac0..72714c484 100644
--- a/packages/dms-kit/package.json
+++ b/packages/dms-kit/package.json
@@ -23,10 +23,6 @@
"test:c": "jest --watchAll=false --coverage",
"test:ci": "jest --ci --watchAll=false --coverage --color --silent --testLocationInResults"
},
- "publishConfig": {
- "registry": "http://10.186.18.19:4873/",
- "access": "restricted"
- },
"dependencies": {
"ahooks": "^3.7.0",
"axios": ">=0.27.2",
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..8e8d9987f 100644
--- a/packages/icons/package_publish.json
+++ b/packages/icons/package_publish.json
@@ -1,7 +1,7 @@
{
"name": "@actiontech/icons",
- "version": "0.0.1-rc.7",
"description": "",
+ "version": "0.0.1-rc.7",
"main": "./dist/index.js",
"module": "./es/index.js",
"types": "./es/index.d.ts",
@@ -21,10 +21,6 @@
"es",
"dist"
],
- "publishConfig": {
- "registry": "http://10.186.18.19:4873/",
- "access": "restricted"
- },
"scripts": {
"start": "dumi dev",
"docs:build": "dumi build",
@@ -46,4 +42,4 @@
"peerDependencies": {
"react": ">=17"
}
-}
\ No newline at end of file
+}
diff --git a/packages/icons/publish-icons.mjs b/packages/icons/publish-icons.mjs
index 793ae5089..c0b864af1 100755
--- a/packages/icons/publish-icons.mjs
+++ b/packages/icons/publish-icons.mjs
@@ -5,8 +5,12 @@ import { fileURLToPath } from 'node:url';
import { spawnSync } from 'node:child_process';
import readline from 'node:readline';
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+const iconsDir = __dirname;
+
function parseArgs(argv) {
- const args = { version: '', skipConfirm: false };
+ const args = { version: '', skipConfirm: false, registry: '', auth: '' };
for (let i = 2; i < argv.length; i += 1) {
const key = argv[i];
const val = argv[i + 1];
@@ -15,6 +19,10 @@ function parseArgs(argv) {
i += 1;
} else if (key === '--skip-confirm' || key === '-y') {
args.skipConfirm = true;
+ } else if (key === '--registry' || key === '-r') {
+ args.registry = val || '';
+ } else if (key === '--auth' || key === '-a') {
+ args.auth = val || '';
}
}
return args;
@@ -124,31 +132,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, registry, auth } = parseArgs(process.argv);
- const __filename = fileURLToPath(import.meta.url);
- const __dirname = path.dirname(__filename);
- const iconsDir = __dirname;
+ const version = readJson(path.join(iconsDir, 'package.json')).version;
const pubPkg = path.join(iconsDir, 'package_publish.json');
ensureFileExists(pubPkg, '发布用 package_publish.json');
@@ -158,12 +145,11 @@ async function main() {
const originalVersion = originalPubPkgContent.version;
const tmpBase = path.join(__dirname, '..');
- const tmpDir = fs.mkdtempSync(
- path.join(tmpBase, 'actiontech-icons-publish-')
- );
+ const tmpDir = path.join(tmpBase, 'actiontech-icons-publish');
try {
console.log(`[1/7] 创建临时目录: ${tmpDir}`);
+ fs.mkdirSync(tmpDir, { recursive: true });
console.log('[2/7] 复制整个 icons 包到临时目录');
// 复制整个包目录,但排除一些不需要的文件
@@ -226,12 +212,14 @@ async function main() {
return;
}
}
-
- console.log('[6/7] 执行发布: npm publish');
- runCmd('npm', ['publish'], tmpDir);
-
- console.log('[7/7] 更新 package_publish.json 版本号');
- updatePackagePublishVersion(iconsDir, version);
+ console.log('[6/7] 配置认证');
+ runCmd('pnpm', ['config', 'set', auth], tmpDir);
+ console.log('[7/7] 执行发布: pnpm publish');
+ runCmd(
+ 'pnpm',
+ ['publish', '--registry', registry, '--no-git-checks'],
+ tmpDir
+ );
console.log('✅ 发布完成');
} catch (err) {
@@ -250,7 +238,7 @@ async function main() {
console.warn(`⚠️ 还原版本号失败: ${restoreErr.message}`);
}
} finally {
- console.log('[8/7] 清理临时目录');
+ console.log('[7/7] 清理临时目录');
try {
if (fs.existsSync(tmpDir)) {
fs.rmSync(tmpDir, { recursive: true, force: true });
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 84f11b398..8d2b8c0a6 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -132,6 +132,9 @@ importers:
'@actiontech/cli-create-dms-page':
specifier: workspace:^
version: link:scripts/cli/create-dms-page
+ '@actiontech/cli-dms-kit-publish':
+ specifier: workspace:^
+ version: link:scripts/cli/dms-kit-publish
'@cfaester/enzyme-adapter-react-18':
specifier: ^0.7.0
version: 0.7.1(enzyme@3.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -260,7 +263,7 @@ importers:
version: 3.0.5
msw:
specifier: ^0.45.0
- version: 0.45.0(typescript@5.8.2)
+ version: 0.45.0(encoding@0.1.13)(typescript@5.8.2)
postcss-less:
specifier: ^6.0.0
version: 6.0.0(postcss@8.5.3)
@@ -288,6 +291,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
@@ -551,6 +557,50 @@ importers:
specifier: ^7.20.6
version: 7.20.7
+ scripts/cli/dms-kit-publish:
+ dependencies:
+ '@octokit/rest':
+ specifier: ^20.1.2
+ version: 20.1.2
+ archiver:
+ specifier: ^7.0.1
+ version: 7.0.1
+ basic-ftp:
+ specifier: ^5.0.5
+ version: 5.0.5
+ chalk:
+ specifier: ^4.1.2
+ version: 4.1.2
+ dotenv:
+ specifier: ^17.2.3
+ version: 17.2.3
+ execa:
+ specifier: ^8.0.1
+ version: 8.0.1
+ nodemailer:
+ specifier: ^7.0.10
+ version: 7.0.10
+ semver:
+ specifier: ^7.7.3
+ version: 7.7.3
+ devDependencies:
+ '@types/archiver':
+ specifier: ^6.0.3
+ version: 6.0.4
+ '@types/node':
+ specifier: ^18.0.4
+ version: 18.19.84
+ '@types/nodemailer':
+ specifier: ^7.0.3
+ version: 7.0.3
+ '@types/semver':
+ specifier: ^7.7.1
+ version: 7.7.1
+
+ scripts/cli/dms-kit-publish/verdaccio/storage/data/@actiontech/dms-kit: {}
+
+ scripts/cli/dms-kit-publish/verdaccio/storage/data/@actiontech/icons: {}
+
packages:
'@adobe/css-tools@4.4.2':
@@ -667,6 +717,131 @@ packages:
'@antv/util@2.0.17':
resolution: {integrity: sha512-o6I9hi5CIUvLGDhth0RxNSFDRwXeywmt6ExR4+RmVAzIi48ps6HUy+svxOCayvrPBN37uE6TAc2KDofRo0nK9Q==}
+ '@aws-crypto/sha256-browser@5.2.0':
+ resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==}
+
+ '@aws-crypto/sha256-js@5.2.0':
+ resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-crypto/supports-web-crypto@5.2.0':
+ resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==}
+
+ '@aws-crypto/util@5.2.0':
+ resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==}
+
+ '@aws-sdk/client-sesv2@3.922.0':
+ resolution: {integrity: sha512-cowHCdzir4KmT/MoRyp2RV3BAebjcpiyKU1pidu2D1lI87iGXlxNG7KXJ0W8mjQoGpKa2XcihDY/mtqd/6uVlA==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/client-sso@3.922.0':
+ resolution: {integrity: sha512-jdHs7uy7cSpiMvrxhYmqHyJxgK7hyqw4plG8OQ4YTBpq0SbfAxdoOuOkwJ1IVUUQho4otR1xYYjiX/8e8J8qwQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/core@3.922.0':
+ resolution: {integrity: sha512-EvfP4cqJfpO3L2v5vkIlTkMesPtRwWlMfsaW6Tpfm7iYfBOuTi6jx60pMDMTyJNVfh6cGmXwh/kj1jQdR+w99Q==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/credential-provider-env@3.922.0':
+ resolution: {integrity: sha512-WikGQpKkROJSK3D3E7odPjZ8tU7WJp5/TgGdRuZw3izsHUeH48xMv6IznafpRTmvHcjAbDQj4U3CJZNAzOK/OQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/credential-provider-http@3.922.0':
+ resolution: {integrity: sha512-i72DgHMK7ydAEqdzU0Duqh60Q8W59EZmRJ73y0Y5oFmNOqnYsAI+UXyOoCsubp+Dkr6+yOwAn1gPt1XGE9Aowg==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/credential-provider-ini@3.922.0':
+ resolution: {integrity: sha512-bVF+pI5UCLNkvbiZr/t2fgTtv84s8FCdOGAPxQiQcw5qOZywNuuCCY3wIIchmQr6GJr8YFkEp5LgDCac5EC5aQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/credential-provider-node@3.922.0':
+ resolution: {integrity: sha512-agCwaD6mBihToHkjycL8ObIS2XOnWypWZZWhJSoWyHwFrhEKz1zGvgylK9Dc711oUfU+zU6J8e0JPKNJMNb3BQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/credential-provider-process@3.922.0':
+ resolution: {integrity: sha512-1DZOYezT6okslpvMW7oA2q+y17CJd4fxjNFH0jtThfswdh9CtG62+wxenqO+NExttq0UMaKisrkZiVrYQBTShw==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/credential-provider-sso@3.922.0':
+ resolution: {integrity: sha512-nbD3G3hShTYxLCkKMqLkLPtKwAAfxdY/k9jHtZmVBFXek2T6tQrqZHKxlAu+fd23Ga4/Aik7DLQQx1RA1a5ipg==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/credential-provider-web-identity@3.922.0':
+ resolution: {integrity: sha512-wjGIhgMHGGQfQTdFaJphNOKyAL8wZs6znJdHADPVURmgR+EWLyN/0fDO1u7wx8xaLMZpbHIFWBEvf9TritR/cQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/middleware-host-header@3.922.0':
+ resolution: {integrity: sha512-HPquFgBnq/KqKRVkiuCt97PmWbKtxQ5iUNLEc6FIviqOoZTmaYG3EDsIbuFBz9C4RHJU4FKLmHL2bL3FEId6AA==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/middleware-logger@3.922.0':
+ resolution: {integrity: sha512-AkvYO6b80FBm5/kk2E636zNNcNgjztNNUxpqVx+huyGn9ZqGTzS4kLqW2hO6CBe5APzVtPCtiQsXL24nzuOlAg==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/middleware-recursion-detection@3.922.0':
+ resolution: {integrity: sha512-TtSCEDonV/9R0VhVlCpxZbp/9sxQvTTRKzIf8LxW3uXpby6Wl8IxEciBJlxmSkoqxh542WRcko7NYODlvL/gDA==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/middleware-sdk-s3@3.922.0':
+ resolution: {integrity: sha512-ygg8lME1oFAbsH42ed2wtGqfHLoT5irgx6VC4X98j79fV1qXEwwwbqMsAiMQ/HJehpjqAFRVsHox3MHLN48Z5A==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/middleware-user-agent@3.922.0':
+ resolution: {integrity: sha512-N4Qx/9KP3oVQBJOrSghhz8iZFtUC2NNeSZt88hpPhbqAEAtuX8aD8OzVcpnAtrwWqy82Yd2YTxlkqMGkgqnBsQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/nested-clients@3.922.0':
+ resolution: {integrity: sha512-uYvKCF1TGh/MuJ4TMqmUM0Csuao02HawcseG4LUDyxdUsd/EFuxalWq1Cx4fKZQ2K8F504efZBjctMAMNY+l7A==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/region-config-resolver@3.922.0':
+ resolution: {integrity: sha512-44Y/rNNwhngR2KHp6gkx//TOr56/hx6s4l+XLjOqH7EBCHL7XhnrT1y92L+DLiroVr1tCSmO8eHQwBv0Y2+mvw==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/signature-v4-multi-region@3.922.0':
+ resolution: {integrity: sha512-mmsgEEL5pE+A7gFYiJMDBCLVciaXq4EFI5iAP7bPpnHvOplnNOYxVy2IreKMllGvrfjVyLnwxzZYlo5zZ65FWg==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/token-providers@3.922.0':
+ resolution: {integrity: sha512-/inmPnjZE0ZBE16zaCowAvouSx05FJ7p6BQYuzlJ8vxEU0sS0Hf8fvhuiRnN9V9eDUPIBY+/5EjbMWygXL4wlQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/types@3.922.0':
+ resolution: {integrity: sha512-eLA6XjVobAUAMivvM7DBL79mnHyrm+32TkXNWZua5mnxF+6kQCfblKKJvxMZLGosO53/Ex46ogim8IY5Nbqv2w==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/util-arn-parser@3.893.0':
+ resolution: {integrity: sha512-u8H4f2Zsi19DGnwj5FSZzDMhytYF/bCh37vAtBsn3cNDL3YG578X5oc+wSX54pM3tOxS+NY7tvOAo52SW7koUA==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/util-endpoints@3.922.0':
+ resolution: {integrity: sha512-4ZdQCSuNMY8HMlR1YN4MRDdXuKd+uQTeKIr5/pIM+g3TjInZoj8imvXudjcrFGA63UF3t92YVTkBq88mg58RXQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/util-locate-window@3.893.0':
+ resolution: {integrity: sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/util-user-agent-browser@3.922.0':
+ resolution: {integrity: sha512-qOJAERZ3Plj1st7M4Q5henl5FRpE30uLm6L9edZqZXGR6c7ry9jzexWamWVpQ4H4xVAVmiO9dIEBAfbq4mduOA==}
+
+ '@aws-sdk/util-user-agent-node@3.922.0':
+ resolution: {integrity: sha512-NrPe/Rsr5kcGunkog0eBV+bY0inkRELsD2SacC4lQZvZiXf8VJ2Y7j+Yq1tB+h+FPLsdt3v9wItIvDf/laAm0Q==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ aws-crt: '>=1.0.0'
+ peerDependenciesMeta:
+ aws-crt:
+ optional: true
+
+ '@aws-sdk/xml-builder@3.921.0':
+ resolution: {integrity: sha512-LVHg0jgjyicKKvpNIEMXIMr1EBViESxcPkqfOlT+X1FkmUMTNZEEVF18tOJg4m4hV5vxtkWcqtr4IEeWa1C41Q==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws/lambda-invoke-store@0.1.1':
+ resolution: {integrity: sha512-RcLam17LdlbSOSp9VxmUu1eI6Mwxp+OwhD2QhiSNmNCzoDb0EeUXTD2n/WbcnrAYMGlmf05th6QYq23VqvJqpA==}
+ engines: {node: '>=18.0.0'}
+
'@babel/code-frame@7.26.2':
resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
engines: {node: '>=6.9.0'}
@@ -675,10 +850,6 @@ packages:
resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==}
engines: {node: '>=6.9.0'}
- '@babel/core@7.23.6':
- resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==}
- engines: {node: '>=6.9.0'}
-
'@babel/core@7.26.10':
resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==}
engines: {node: '>=6.9.0'}
@@ -2883,6 +3054,58 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
+ '@octokit/auth-token@4.0.0':
+ resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==}
+ engines: {node: '>= 18'}
+
+ '@octokit/core@5.2.2':
+ resolution: {integrity: sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==}
+ engines: {node: '>= 18'}
+
+ '@octokit/endpoint@9.0.6':
+ resolution: {integrity: sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==}
+ engines: {node: '>= 18'}
+
+ '@octokit/graphql@7.1.1':
+ resolution: {integrity: sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==}
+ engines: {node: '>= 18'}
+
+ '@octokit/openapi-types@24.2.0':
+ resolution: {integrity: sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==}
+
+ '@octokit/plugin-paginate-rest@11.4.4-cjs.2':
+ resolution: {integrity: sha512-2dK6z8fhs8lla5PaOTgqfCGBxgAv/le+EhPs27KklPhm1bKObpu6lXzwfUEQ16ajXzqNrKMujsFyo9K2eaoISw==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ '@octokit/core': '5'
+
+ '@octokit/plugin-request-log@4.0.1':
+ resolution: {integrity: sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ '@octokit/core': '5'
+
+ '@octokit/plugin-rest-endpoint-methods@13.3.2-cjs.1':
+ resolution: {integrity: sha512-VUjIjOOvF2oELQmiFpWA1aOPdawpyaCUqcEBc/UOUnj3Xp6DJGrJ1+bjUIIDzdHjnFNO6q57ODMfdEZnoBkCwQ==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ '@octokit/core': ^5
+
+ '@octokit/request-error@5.1.1':
+ resolution: {integrity: sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==}
+ engines: {node: '>= 18'}
+
+ '@octokit/request@8.4.1':
+ resolution: {integrity: sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==}
+ engines: {node: '>= 18'}
+
+ '@octokit/rest@20.1.2':
+ resolution: {integrity: sha512-GmYiltypkHHtihFwPRxlaorG5R9VAHuk/vbszVoRTGXnAsY60wYLkh/E2XiFmdZmqrisw+9FaazS1i5SbdWYgA==}
+ engines: {node: '>= 18'}
+
+ '@octokit/types@13.10.0':
+ resolution: {integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==}
+
'@open-draft/until@1.0.3':
resolution: {integrity: sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==}
@@ -3224,6 +3447,178 @@ packages:
'@sketch-hq/sketch-file-format-ts@6.5.0':
resolution: {integrity: sha512-shaGl4ttFDpHjYBoMaZpciOtsi/lKvJ3VfcBYk6+PjjbFs6H5GxPAyhbiSqy3Vmx30aos284pd88QzD3rE6iag==}
+ '@smithy/abort-controller@4.2.4':
+ resolution: {integrity: sha512-Z4DUr/AkgyFf1bOThW2HwzREagee0sB5ycl+hDiSZOfRLW8ZgrOjDi6g8mHH19yyU5E2A/64W3z6SMIf5XiUSQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/config-resolver@4.4.1':
+ resolution: {integrity: sha512-BciDJ5hkyYEGBBKMbjGB1A/Zq8bYZ41Zo9BMnGdKF6QD1fY4zIkYx6zui/0CHaVGnv6h0iy8y4rnPX9CPCAPyQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/core@3.17.2':
+ resolution: {integrity: sha512-n3g4Nl1Te+qGPDbNFAYf+smkRVB+JhFsGy9uJXXZQEufoP4u0r+WLh6KvTDolCswaagysDc/afS1yvb2jnj1gQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/credential-provider-imds@4.2.4':
+ resolution: {integrity: sha512-YVNMjhdz2pVto5bRdux7GMs0x1m0Afz3OcQy/4Yf9DH4fWOtroGH7uLvs7ZmDyoBJzLdegtIPpXrpJOZWvUXdw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/fetch-http-handler@5.3.5':
+ resolution: {integrity: sha512-mg83SM3FLI8Sa2ooTJbsh5MFfyMTyNRwxqpKHmE0ICRIa66Aodv80DMsTQI02xBLVJ0hckwqTRr5IGAbbWuFLQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/hash-node@4.2.4':
+ resolution: {integrity: sha512-kKU0gVhx/ppVMntvUOZE7WRMFW86HuaxLwvqileBEjL7PoILI8/djoILw3gPQloGVE6O0oOzqafxeNi2KbnUJw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/invalid-dependency@4.2.4':
+ resolution: {integrity: sha512-z6aDLGiHzsMhbS2MjetlIWopWz//K+mCoPXjW6aLr0mypF+Y7qdEh5TyJ20Onf9FbWHiWl4eC+rITdizpnXqOw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/is-array-buffer@2.2.0':
+ resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==}
+ engines: {node: '>=14.0.0'}
+
+ '@smithy/is-array-buffer@4.2.0':
+ resolution: {integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/middleware-content-length@4.2.4':
+ resolution: {integrity: sha512-hJRZuFS9UsElX4DJSJfoX4M1qXRH+VFiLMUnhsWvtOOUWRNvvOfDaUSdlNbjwv1IkpVjj/Rd/O59Jl3nhAcxow==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/middleware-endpoint@4.3.6':
+ resolution: {integrity: sha512-PXehXofGMFpDqr933rxD8RGOcZ0QBAWtuzTgYRAHAL2BnKawHDEdf/TnGpcmfPJGwonhginaaeJIKluEojiF/w==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/middleware-retry@4.4.6':
+ resolution: {integrity: sha512-OhLx131znrEDxZPAvH/OYufR9d1nB2CQADyYFN4C3V/NQS7Mg4V6uvxHC/Dr96ZQW8IlHJTJ+vAhKt6oxWRndA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/middleware-serde@4.2.4':
+ resolution: {integrity: sha512-jUr3x2CDhV15TOX2/Uoz4gfgeqLrRoTQbYAuhLS7lcVKNev7FeYSJ1ebEfjk+l9kbb7k7LfzIR/irgxys5ZTOg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/middleware-stack@4.2.4':
+ resolution: {integrity: sha512-Gy3TKCOnm9JwpFooldwAboazw+EFYlC+Bb+1QBsSi5xI0W5lX81j/P5+CXvD/9ZjtYKRgxq+kkqd/KOHflzvgA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/node-config-provider@4.3.4':
+ resolution: {integrity: sha512-3X3w7qzmo4XNNdPKNS4nbJcGSwiEMsNsRSunMA92S4DJLLIrH5g1AyuOA2XKM9PAPi8mIWfqC+fnfKNsI4KvHw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/node-http-handler@4.4.4':
+ resolution: {integrity: sha512-VXHGfzCXLZeKnFp6QXjAdy+U8JF9etfpUXD1FAbzY1GzsFJiDQRQIt2CnMUvUdz3/YaHNqT3RphVWMUpXTIODA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/property-provider@4.2.4':
+ resolution: {integrity: sha512-g2DHo08IhxV5GdY3Cpt/jr0mkTlAD39EJKN27Jb5N8Fb5qt8KG39wVKTXiTRCmHHou7lbXR8nKVU14/aRUf86w==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/protocol-http@5.3.4':
+ resolution: {integrity: sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/querystring-builder@4.2.4':
+ resolution: {integrity: sha512-KQ1gFXXC+WsbPFnk7pzskzOpn4s+KheWgO3dzkIEmnb6NskAIGp/dGdbKisTPJdtov28qNDohQrgDUKzXZBLig==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/querystring-parser@4.2.4':
+ resolution: {integrity: sha512-aHb5cqXZocdzEkZ/CvhVjdw5l4r1aU/9iMEyoKzH4eXMowT6M0YjBpp7W/+XjkBnY8Xh0kVd55GKjnPKlCwinQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/service-error-classification@4.2.4':
+ resolution: {integrity: sha512-fdWuhEx4+jHLGeew9/IvqVU/fxT/ot70tpRGuOLxE3HzZOyKeTQfYeV1oaBXpzi93WOk668hjMuuagJ2/Qs7ng==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/shared-ini-file-loader@4.3.4':
+ resolution: {integrity: sha512-y5ozxeQ9omVjbnJo9dtTsdXj9BEvGx2X8xvRgKnV+/7wLBuYJQL6dOa/qMY6omyHi7yjt1OA97jZLoVRYi8lxA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/signature-v4@5.3.4':
+ resolution: {integrity: sha512-ScDCpasxH7w1HXHYbtk3jcivjvdA1VICyAdgvVqKhKKwxi+MTwZEqFw0minE+oZ7F07oF25xh4FGJxgqgShz0A==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/smithy-client@4.9.2':
+ resolution: {integrity: sha512-gZU4uAFcdrSi3io8U99Qs/FvVdRxPvIMToi+MFfsy/DN9UqtknJ1ais+2M9yR8e0ASQpNmFYEKeIKVcMjQg3rg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/types@4.8.1':
+ resolution: {integrity: sha512-N0Zn0OT1zc+NA+UVfkYqQzviRh5ucWwO7mBV3TmHHprMnfcJNfhlPicDkBHi0ewbh+y3evR6cNAW0Raxvb01NA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/url-parser@4.2.4':
+ resolution: {integrity: sha512-w/N/Iw0/PTwJ36PDqU9PzAwVElo4qXxCC0eCTlUtIz/Z5V/2j/cViMHi0hPukSBHp4DVwvUlUhLgCzqSJ6plrg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-base64@4.3.0':
+ resolution: {integrity: sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-body-length-browser@4.2.0':
+ resolution: {integrity: sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-body-length-node@4.2.1':
+ resolution: {integrity: sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-buffer-from@2.2.0':
+ resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==}
+ engines: {node: '>=14.0.0'}
+
+ '@smithy/util-buffer-from@4.2.0':
+ resolution: {integrity: sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-config-provider@4.2.0':
+ resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-defaults-mode-browser@4.3.5':
+ resolution: {integrity: sha512-GwaGjv/QLuL/QHQaqhf/maM7+MnRFQQs7Bsl6FlaeK6lm6U7mV5AAnVabw68cIoMl5FQFyKK62u7RWRzWL25OQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-defaults-mode-node@4.2.7':
+ resolution: {integrity: sha512-6hinjVqec0WYGsqN7h9hL/ywfULmJJNXGXnNZW7jrIn/cFuC/aVlVaiDfBIJEvKcOrmN8/EgsW69eY0gXABeHw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-endpoints@3.2.4':
+ resolution: {integrity: sha512-f+nBDhgYRCmUEDKEQb6q0aCcOTXRDqH5wWaFHJxt4anB4pKHlgGoYP3xtioKXH64e37ANUkzWf6p4Mnv1M5/Vg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-hex-encoding@4.2.0':
+ resolution: {integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-middleware@4.2.4':
+ resolution: {integrity: sha512-fKGQAPAn8sgV0plRikRVo6g6aR0KyKvgzNrPuM74RZKy/wWVzx3BMk+ZWEueyN3L5v5EDg+P582mKU+sH5OAsg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-retry@4.2.4':
+ resolution: {integrity: sha512-yQncJmj4dtv/isTXxRb4AamZHy4QFr4ew8GxS6XLWt7sCIxkPxPzINWd7WLISEFPsIan14zrKgvyAF+/yzfwoA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-stream@4.5.5':
+ resolution: {integrity: sha512-7M5aVFjT+HPilPOKbOmQfCIPchZe4DSBc1wf1+NvHvSoFTiFtauZzT+onZvCj70xhXd0AEmYnZYmdJIuwxOo4w==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-uri-escape@4.2.0':
+ resolution: {integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-utf8@2.3.0':
+ resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==}
+ engines: {node: '>=14.0.0'}
+
+ '@smithy/util-utf8@4.2.0':
+ resolution: {integrity: sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/uuid@1.1.0':
+ resolution: {integrity: sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==}
+ engines: {node: '>=18.0.0'}
+
'@stackblitz/sdk@1.11.0':
resolution: {integrity: sha512-DFQGANNkEZRzFk1/rDP6TcFdM82ycHE+zfl9C/M/jXlH68jiqHWHFMQURLELoD8koxvu/eW5uhg94NSAZlYrUQ==}
@@ -3539,6 +3934,9 @@ packages:
'@tsconfig/node16@1.0.4':
resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
+ '@types/archiver@6.0.4':
+ resolution: {integrity: sha512-ULdQpARQ3sz9WH4nb98mJDYA0ft2A8C4f4fovvUcFwINa1cgGjY36JCAYuP5YypRq4mco1lJp1/7jEMS2oR0Hg==}
+
'@types/argparse@1.0.38':
resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==}
@@ -3683,6 +4081,9 @@ packages:
'@types/node@22.13.14':
resolution: {integrity: sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==}
+ '@types/nodemailer@7.0.3':
+ resolution: {integrity: sha512-fC8w49YQ868IuPWRXqPfLf+MuTRex5Z1qxMoG8rr70riqqbOp2F5xgOKE9fODEBPzpnvjkJXFgK6IL2xgMSTnA==}
+
'@types/normalize-package-data@2.4.4':
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
@@ -3726,14 +4127,17 @@ packages:
'@types/react@18.3.23':
resolution: {integrity: sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==}
+ '@types/readdir-glob@1.1.5':
+ resolution: {integrity: sha512-raiuEPUYqXu+nvtY2Pe8s8FEmZ3x5yAH4VkLdihcPdalvsHltomrRC9BzuStrJ9yk06470hS0Crw0f1pXqD+Hg==}
+
'@types/resolve@1.20.6':
resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==}
'@types/sax@1.2.7':
resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==}
- '@types/semver@7.7.0':
- resolution: {integrity: sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==}
+ '@types/semver@7.7.1':
+ resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==}
'@types/set-cookie-parser@2.4.10':
resolution: {integrity: sha512-GGmQVGpQWUe5qglJozEjZV/5dyxbOOZ0LHe/lqyWssB88Y4svNfst0uqBVscdDeIKl5Jy5+aPSvy7mI9tYRguw==}
@@ -4198,6 +4602,10 @@ packages:
resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
deprecated: Use your platform's native atob() and btoa() methods instead
+ abort-controller@3.0.0:
+ resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
+ engines: {node: '>=6.5'}
+
accepts@1.3.8:
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
engines: {node: '>= 0.6'}
@@ -4335,6 +4743,14 @@ packages:
arch@2.2.0:
resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==}
+ 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'}
+
arg@4.1.3:
resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
@@ -4465,6 +4881,14 @@ packages:
axios@0.27.2:
resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==}
+ b4a@1.7.3:
+ resolution: {integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==}
+ peerDependencies:
+ react-native-b4a: '*'
+ peerDependenciesMeta:
+ react-native-b4a:
+ optional: true
+
babel-jest@29.7.0:
resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -4546,12 +4970,27 @@ packages:
balanced-match@2.0.0:
resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==}
+ bare-events@2.8.1:
+ resolution: {integrity: sha512-oxSAxTS1hRfnyit2CL5QpAOS5ixfBjj6ex3yTNvXyY/kE719jQ/IjuESJBK2w5v4wwQRAHGseVJXx9QBYOtFGQ==}
+ peerDependencies:
+ bare-abort-controller: '*'
+ peerDependenciesMeta:
+ bare-abort-controller:
+ optional: true
+
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'}
+
bcp-47-match@2.0.3:
resolution: {integrity: sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==}
+ before-after-hook@2.2.3:
+ resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==}
+
big-integer@1.6.52:
resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==}
engines: {node: '>=0.6'}
@@ -4586,6 +5025,9 @@ packages:
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+ bowser@2.12.1:
+ resolution: {integrity: sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==}
+
bplist-parser@0.2.0:
resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==}
engines: {node: '>= 5.10.0'}
@@ -4635,6 +5077,10 @@ packages:
bser@2.1.1:
resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
+ buffer-crc32@1.0.0:
+ resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==}
+ engines: {node: '>=8.0.0'}
+
buffer-from@1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
@@ -4650,6 +5096,9 @@ packages:
buffer@5.7.1:
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
builtin-status-codes@3.0.0:
resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==}
@@ -4940,6 +5389,10 @@ packages:
common-path-prefix@3.0.0:
resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==}
+ compress-commons@6.0.2:
+ resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==}
+ engines: {node: '>= 14'}
+
compressible@2.0.18:
resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
engines: {node: '>= 0.6'}
@@ -5046,6 +5499,15 @@ packages:
typescript:
optional: true
+ 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'}
+
create-ecdh@4.0.4:
resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==}
@@ -5403,6 +5865,9 @@ packages:
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
engines: {node: '>= 0.8'}
+ deprecation@2.3.1:
+ resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==}
+
dequal@2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
@@ -5543,6 +6008,10 @@ packages:
resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==}
engines: {node: '>=12'}
+ dotenv@17.2.3:
+ resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==}
+ engines: {node: '>=12'}
+
dotignore@0.1.2:
resolution: {integrity: sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==}
hasBin: true
@@ -5610,6 +6079,9 @@ packages:
resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
engines: {node: '>= 0.8'}
+ encoding@0.1.13:
+ resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==}
+
end-of-stream@1.4.4:
resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
@@ -5926,6 +6398,10 @@ packages:
resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
engines: {node: '>= 0.6'}
+ event-target-shim@5.0.1:
+ resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
+ engines: {node: '>=6'}
+
eventemitter3@2.0.3:
resolution: {integrity: sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==}
@@ -5933,6 +6409,9 @@ packages:
resolution: {integrity: sha512-6iR7z9hAJEwrT+D2Ywg6Fx62HSmN86OlcvPdrnq1JBeFr30dMF6l+j7M3VabjHfIi2KMtF8rO0J1rIZEfwMAwg==}
engines: {node: '>=0.8.x'}
+ events-universal@1.0.1:
+ resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==}
+
events@3.3.0:
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
engines: {node: '>=0.8.x'}
@@ -5948,6 +6427,10 @@ packages:
resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==}
engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0}
+ execa@8.0.1:
+ resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
+ engines: {node: '>=16.17'}
+
exit@0.1.2:
resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
engines: {node: '>= 0.8.0'}
@@ -5980,6 +6463,9 @@ packages:
fast-equals@4.0.3:
resolution: {integrity: sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg==}
+ fast-fifo@1.3.2:
+ resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==}
+
fast-glob@3.2.12:
resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
engines: {node: '>=8.6.0'}
@@ -6001,6 +6487,10 @@ packages:
fast-uri@3.0.6:
resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==}
+ fast-xml-parser@5.2.5:
+ resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==}
+ hasBin: true
+
fastest-levenshtein@1.0.16:
resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==}
engines: {node: '>= 4.9.1'}
@@ -6215,6 +6705,10 @@ packages:
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
engines: {node: '>=10'}
+ get-stream@8.0.1:
+ resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
+ engines: {node: '>=16'}
+
get-symbol-description@1.1.0:
resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
engines: {node: '>= 0.4'}
@@ -6590,6 +7084,10 @@ packages:
resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==}
engines: {node: '>=14.18.0'}
+ human-signals@5.0.0:
+ resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
+ engines: {node: '>=16.17.0'}
+
hyphenate-style-name@1.1.0:
resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==}
@@ -7304,6 +7802,10 @@ packages:
resolution: {integrity: sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==}
engines: {node: '>=0.10.0'}
+ lazystream@1.0.1:
+ resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==}
+ engines: {node: '>= 0.6.3'}
+
leac@0.6.0:
resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==}
@@ -7931,6 +8433,10 @@ packages:
node-releases@2.0.19:
resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
+ nodemailer@7.0.10:
+ resolution: {integrity: sha512-Us/Se1WtT0ylXgNFfyFSx4LElllVLJXQjWi2Xz17xWw7amDKO2MLtFnVp1WACy7GkVGs+oBlRopVNUzlrGSw1w==}
+ engines: {node: '>=6.0.0'}
+
normalize-package-data@2.5.0:
resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
@@ -9241,6 +9747,13 @@ packages:
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
engines: {node: '>= 6'}
+ 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==}
+
readdirp@3.6.0:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
@@ -9607,8 +10120,8 @@ packages:
engines: {node: '>=10'}
hasBin: true
- semver@7.7.1:
- resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
+ semver@7.7.3:
+ resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
engines: {node: '>=10'}
hasBin: true
@@ -9838,6 +10351,9 @@ packages:
stream-shift@1.0.3:
resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==}
+ streamx@2.23.0:
+ resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==}
+
strict-event-emitter@0.2.8:
resolution: {integrity: sha512-KDf/ujU8Zud3YaLtMCcTI4xkZlZVIYxTLr+XIULexP+77EEVWixeXroLUXQXiVtH4XH2W7jr/3PT1v3zBuvc3A==}
@@ -9939,6 +10455,9 @@ packages:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
+ strnum@2.1.1:
+ resolution: {integrity: sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==}
+
style-search@0.1.0:
resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==}
@@ -10113,6 +10632,9 @@ packages:
resolution: {integrity: sha512-KCuXjYxCZ3ru40dmND+oCLsXyuA8hoseu2SS404Px5ouyS0A99v8X/mdiLqsR5MTAyamMBN7PRwt2Dv3+xGIxw==}
hasBin: true
+ tar-stream@3.1.7:
+ resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==}
+
terser-webpack-plugin@5.3.14:
resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==}
engines: {node: '>= 10.13.0'}
@@ -10138,6 +10660,9 @@ packages:
resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
engines: {node: '>=8'}
+ text-decoder@1.2.3:
+ resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==}
+
textextensions@2.6.0:
resolution: {integrity: sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ==}
engines: {node: '>=0.8'}
@@ -10503,6 +11028,9 @@ packages:
unist-util-visit@5.0.0:
resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
+ universal-user-agent@6.0.1:
+ resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==}
+
universalify@0.1.2:
resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
engines: {node: '>= 4.0.0'}
@@ -10938,6 +11466,10 @@ packages:
engines: {node: '>=8.0.0'}
hasBin: true
+ zip-stream@6.0.1:
+ resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==}
+ engines: {node: '>= 14'}
+
zod-validation-error@2.1.0:
resolution: {integrity: sha512-VJh93e2wb4c3tWtGgTa0OF/dTt/zoPCPzXq4V11ZjxmEAFaPi/Zss1xIZdEB5RD8GD00U0/iVXgqkF77RV7pdQ==}
engines: {node: '>=18.0.0'}
@@ -11193,33 +11725,397 @@ snapshots:
csstype: 3.1.3
tslib: 2.8.1
- '@babel/code-frame@7.26.2':
+ '@aws-crypto/sha256-browser@5.2.0':
dependencies:
- '@babel/helper-validator-identifier': 7.25.9
- js-tokens: 4.0.0
- picocolors: 1.1.1
+ '@aws-crypto/sha256-js': 5.2.0
+ '@aws-crypto/supports-web-crypto': 5.2.0
+ '@aws-crypto/util': 5.2.0
+ '@aws-sdk/types': 3.922.0
+ '@aws-sdk/util-locate-window': 3.893.0
+ '@smithy/util-utf8': 2.3.0
+ tslib: 2.8.1
- '@babel/compat-data@7.26.8': {}
+ '@aws-crypto/sha256-js@5.2.0':
+ dependencies:
+ '@aws-crypto/util': 5.2.0
+ '@aws-sdk/types': 3.922.0
+ tslib: 2.8.1
- '@babel/core@7.23.6':
+ '@aws-crypto/supports-web-crypto@5.2.0':
dependencies:
- '@ampproject/remapping': 2.3.0
- '@babel/code-frame': 7.26.2
- '@babel/generator': 7.27.0
- '@babel/helper-compilation-targets': 7.27.0
- '@babel/helper-module-transforms': 7.26.0(@babel/core@7.23.6)
- '@babel/helpers': 7.27.0
- '@babel/parser': 7.27.0
- '@babel/template': 7.27.0
- '@babel/traverse': 7.27.0
- '@babel/types': 7.27.0
- convert-source-map: 2.0.0
- debug: 4.4.0
- gensync: 1.0.0-beta.2
- json5: 2.2.3
- semver: 6.3.1
+ tslib: 2.8.1
+
+ '@aws-crypto/util@5.2.0':
+ dependencies:
+ '@aws-sdk/types': 3.922.0
+ '@smithy/util-utf8': 2.3.0
+ tslib: 2.8.1
+
+ '@aws-sdk/client-sesv2@3.922.0':
+ dependencies:
+ '@aws-crypto/sha256-browser': 5.2.0
+ '@aws-crypto/sha256-js': 5.2.0
+ '@aws-sdk/core': 3.922.0
+ '@aws-sdk/credential-provider-node': 3.922.0
+ '@aws-sdk/middleware-host-header': 3.922.0
+ '@aws-sdk/middleware-logger': 3.922.0
+ '@aws-sdk/middleware-recursion-detection': 3.922.0
+ '@aws-sdk/middleware-user-agent': 3.922.0
+ '@aws-sdk/region-config-resolver': 3.922.0
+ '@aws-sdk/signature-v4-multi-region': 3.922.0
+ '@aws-sdk/types': 3.922.0
+ '@aws-sdk/util-endpoints': 3.922.0
+ '@aws-sdk/util-user-agent-browser': 3.922.0
+ '@aws-sdk/util-user-agent-node': 3.922.0
+ '@smithy/config-resolver': 4.4.1
+ '@smithy/core': 3.17.2
+ '@smithy/fetch-http-handler': 5.3.5
+ '@smithy/hash-node': 4.2.4
+ '@smithy/invalid-dependency': 4.2.4
+ '@smithy/middleware-content-length': 4.2.4
+ '@smithy/middleware-endpoint': 4.3.6
+ '@smithy/middleware-retry': 4.4.6
+ '@smithy/middleware-serde': 4.2.4
+ '@smithy/middleware-stack': 4.2.4
+ '@smithy/node-config-provider': 4.3.4
+ '@smithy/node-http-handler': 4.4.4
+ '@smithy/protocol-http': 5.3.4
+ '@smithy/smithy-client': 4.9.2
+ '@smithy/types': 4.8.1
+ '@smithy/url-parser': 4.2.4
+ '@smithy/util-base64': 4.3.0
+ '@smithy/util-body-length-browser': 4.2.0
+ '@smithy/util-body-length-node': 4.2.1
+ '@smithy/util-defaults-mode-browser': 4.3.5
+ '@smithy/util-defaults-mode-node': 4.2.7
+ '@smithy/util-endpoints': 3.2.4
+ '@smithy/util-middleware': 4.2.4
+ '@smithy/util-retry': 4.2.4
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
transitivePeerDependencies:
- - supports-color
+ - aws-crt
+
+ '@aws-sdk/client-sso@3.922.0':
+ dependencies:
+ '@aws-crypto/sha256-browser': 5.2.0
+ '@aws-crypto/sha256-js': 5.2.0
+ '@aws-sdk/core': 3.922.0
+ '@aws-sdk/middleware-host-header': 3.922.0
+ '@aws-sdk/middleware-logger': 3.922.0
+ '@aws-sdk/middleware-recursion-detection': 3.922.0
+ '@aws-sdk/middleware-user-agent': 3.922.0
+ '@aws-sdk/region-config-resolver': 3.922.0
+ '@aws-sdk/types': 3.922.0
+ '@aws-sdk/util-endpoints': 3.922.0
+ '@aws-sdk/util-user-agent-browser': 3.922.0
+ '@aws-sdk/util-user-agent-node': 3.922.0
+ '@smithy/config-resolver': 4.4.1
+ '@smithy/core': 3.17.2
+ '@smithy/fetch-http-handler': 5.3.5
+ '@smithy/hash-node': 4.2.4
+ '@smithy/invalid-dependency': 4.2.4
+ '@smithy/middleware-content-length': 4.2.4
+ '@smithy/middleware-endpoint': 4.3.6
+ '@smithy/middleware-retry': 4.4.6
+ '@smithy/middleware-serde': 4.2.4
+ '@smithy/middleware-stack': 4.2.4
+ '@smithy/node-config-provider': 4.3.4
+ '@smithy/node-http-handler': 4.4.4
+ '@smithy/protocol-http': 5.3.4
+ '@smithy/smithy-client': 4.9.2
+ '@smithy/types': 4.8.1
+ '@smithy/url-parser': 4.2.4
+ '@smithy/util-base64': 4.3.0
+ '@smithy/util-body-length-browser': 4.2.0
+ '@smithy/util-body-length-node': 4.2.1
+ '@smithy/util-defaults-mode-browser': 4.3.5
+ '@smithy/util-defaults-mode-node': 4.2.7
+ '@smithy/util-endpoints': 3.2.4
+ '@smithy/util-middleware': 4.2.4
+ '@smithy/util-retry': 4.2.4
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/core@3.922.0':
+ dependencies:
+ '@aws-sdk/types': 3.922.0
+ '@aws-sdk/xml-builder': 3.921.0
+ '@smithy/core': 3.17.2
+ '@smithy/node-config-provider': 4.3.4
+ '@smithy/property-provider': 4.2.4
+ '@smithy/protocol-http': 5.3.4
+ '@smithy/signature-v4': 5.3.4
+ '@smithy/smithy-client': 4.9.2
+ '@smithy/types': 4.8.1
+ '@smithy/util-base64': 4.3.0
+ '@smithy/util-middleware': 4.2.4
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+
+ '@aws-sdk/credential-provider-env@3.922.0':
+ dependencies:
+ '@aws-sdk/core': 3.922.0
+ '@aws-sdk/types': 3.922.0
+ '@smithy/property-provider': 4.2.4
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@aws-sdk/credential-provider-http@3.922.0':
+ dependencies:
+ '@aws-sdk/core': 3.922.0
+ '@aws-sdk/types': 3.922.0
+ '@smithy/fetch-http-handler': 5.3.5
+ '@smithy/node-http-handler': 4.4.4
+ '@smithy/property-provider': 4.2.4
+ '@smithy/protocol-http': 5.3.4
+ '@smithy/smithy-client': 4.9.2
+ '@smithy/types': 4.8.1
+ '@smithy/util-stream': 4.5.5
+ tslib: 2.8.1
+
+ '@aws-sdk/credential-provider-ini@3.922.0':
+ dependencies:
+ '@aws-sdk/core': 3.922.0
+ '@aws-sdk/credential-provider-env': 3.922.0
+ '@aws-sdk/credential-provider-http': 3.922.0
+ '@aws-sdk/credential-provider-process': 3.922.0
+ '@aws-sdk/credential-provider-sso': 3.922.0
+ '@aws-sdk/credential-provider-web-identity': 3.922.0
+ '@aws-sdk/nested-clients': 3.922.0
+ '@aws-sdk/types': 3.922.0
+ '@smithy/credential-provider-imds': 4.2.4
+ '@smithy/property-provider': 4.2.4
+ '@smithy/shared-ini-file-loader': 4.3.4
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/credential-provider-node@3.922.0':
+ dependencies:
+ '@aws-sdk/credential-provider-env': 3.922.0
+ '@aws-sdk/credential-provider-http': 3.922.0
+ '@aws-sdk/credential-provider-ini': 3.922.0
+ '@aws-sdk/credential-provider-process': 3.922.0
+ '@aws-sdk/credential-provider-sso': 3.922.0
+ '@aws-sdk/credential-provider-web-identity': 3.922.0
+ '@aws-sdk/types': 3.922.0
+ '@smithy/credential-provider-imds': 4.2.4
+ '@smithy/property-provider': 4.2.4
+ '@smithy/shared-ini-file-loader': 4.3.4
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/credential-provider-process@3.922.0':
+ dependencies:
+ '@aws-sdk/core': 3.922.0
+ '@aws-sdk/types': 3.922.0
+ '@smithy/property-provider': 4.2.4
+ '@smithy/shared-ini-file-loader': 4.3.4
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@aws-sdk/credential-provider-sso@3.922.0':
+ dependencies:
+ '@aws-sdk/client-sso': 3.922.0
+ '@aws-sdk/core': 3.922.0
+ '@aws-sdk/token-providers': 3.922.0
+ '@aws-sdk/types': 3.922.0
+ '@smithy/property-provider': 4.2.4
+ '@smithy/shared-ini-file-loader': 4.3.4
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/credential-provider-web-identity@3.922.0':
+ dependencies:
+ '@aws-sdk/core': 3.922.0
+ '@aws-sdk/nested-clients': 3.922.0
+ '@aws-sdk/types': 3.922.0
+ '@smithy/property-provider': 4.2.4
+ '@smithy/shared-ini-file-loader': 4.3.4
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/middleware-host-header@3.922.0':
+ dependencies:
+ '@aws-sdk/types': 3.922.0
+ '@smithy/protocol-http': 5.3.4
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-logger@3.922.0':
+ dependencies:
+ '@aws-sdk/types': 3.922.0
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-recursion-detection@3.922.0':
+ dependencies:
+ '@aws-sdk/types': 3.922.0
+ '@aws/lambda-invoke-store': 0.1.1
+ '@smithy/protocol-http': 5.3.4
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-sdk-s3@3.922.0':
+ dependencies:
+ '@aws-sdk/core': 3.922.0
+ '@aws-sdk/types': 3.922.0
+ '@aws-sdk/util-arn-parser': 3.893.0
+ '@smithy/core': 3.17.2
+ '@smithy/node-config-provider': 4.3.4
+ '@smithy/protocol-http': 5.3.4
+ '@smithy/signature-v4': 5.3.4
+ '@smithy/smithy-client': 4.9.2
+ '@smithy/types': 4.8.1
+ '@smithy/util-config-provider': 4.2.0
+ '@smithy/util-middleware': 4.2.4
+ '@smithy/util-stream': 4.5.5
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-user-agent@3.922.0':
+ dependencies:
+ '@aws-sdk/core': 3.922.0
+ '@aws-sdk/types': 3.922.0
+ '@aws-sdk/util-endpoints': 3.922.0
+ '@smithy/core': 3.17.2
+ '@smithy/protocol-http': 5.3.4
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@aws-sdk/nested-clients@3.922.0':
+ dependencies:
+ '@aws-crypto/sha256-browser': 5.2.0
+ '@aws-crypto/sha256-js': 5.2.0
+ '@aws-sdk/core': 3.922.0
+ '@aws-sdk/middleware-host-header': 3.922.0
+ '@aws-sdk/middleware-logger': 3.922.0
+ '@aws-sdk/middleware-recursion-detection': 3.922.0
+ '@aws-sdk/middleware-user-agent': 3.922.0
+ '@aws-sdk/region-config-resolver': 3.922.0
+ '@aws-sdk/types': 3.922.0
+ '@aws-sdk/util-endpoints': 3.922.0
+ '@aws-sdk/util-user-agent-browser': 3.922.0
+ '@aws-sdk/util-user-agent-node': 3.922.0
+ '@smithy/config-resolver': 4.4.1
+ '@smithy/core': 3.17.2
+ '@smithy/fetch-http-handler': 5.3.5
+ '@smithy/hash-node': 4.2.4
+ '@smithy/invalid-dependency': 4.2.4
+ '@smithy/middleware-content-length': 4.2.4
+ '@smithy/middleware-endpoint': 4.3.6
+ '@smithy/middleware-retry': 4.4.6
+ '@smithy/middleware-serde': 4.2.4
+ '@smithy/middleware-stack': 4.2.4
+ '@smithy/node-config-provider': 4.3.4
+ '@smithy/node-http-handler': 4.4.4
+ '@smithy/protocol-http': 5.3.4
+ '@smithy/smithy-client': 4.9.2
+ '@smithy/types': 4.8.1
+ '@smithy/url-parser': 4.2.4
+ '@smithy/util-base64': 4.3.0
+ '@smithy/util-body-length-browser': 4.2.0
+ '@smithy/util-body-length-node': 4.2.1
+ '@smithy/util-defaults-mode-browser': 4.3.5
+ '@smithy/util-defaults-mode-node': 4.2.7
+ '@smithy/util-endpoints': 3.2.4
+ '@smithy/util-middleware': 4.2.4
+ '@smithy/util-retry': 4.2.4
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/region-config-resolver@3.922.0':
+ dependencies:
+ '@aws-sdk/types': 3.922.0
+ '@smithy/config-resolver': 4.4.1
+ '@smithy/node-config-provider': 4.3.4
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@aws-sdk/signature-v4-multi-region@3.922.0':
+ dependencies:
+ '@aws-sdk/middleware-sdk-s3': 3.922.0
+ '@aws-sdk/types': 3.922.0
+ '@smithy/protocol-http': 5.3.4
+ '@smithy/signature-v4': 5.3.4
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@aws-sdk/token-providers@3.922.0':
+ dependencies:
+ '@aws-sdk/core': 3.922.0
+ '@aws-sdk/nested-clients': 3.922.0
+ '@aws-sdk/types': 3.922.0
+ '@smithy/property-provider': 4.2.4
+ '@smithy/shared-ini-file-loader': 4.3.4
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/types@3.922.0':
+ dependencies:
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@aws-sdk/util-arn-parser@3.893.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@aws-sdk/util-endpoints@3.922.0':
+ dependencies:
+ '@aws-sdk/types': 3.922.0
+ '@smithy/types': 4.8.1
+ '@smithy/url-parser': 4.2.4
+ '@smithy/util-endpoints': 3.2.4
+ tslib: 2.8.1
+
+ '@aws-sdk/util-locate-window@3.893.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@aws-sdk/util-user-agent-browser@3.922.0':
+ dependencies:
+ '@aws-sdk/types': 3.922.0
+ '@smithy/types': 4.8.1
+ bowser: 2.12.1
+ tslib: 2.8.1
+
+ '@aws-sdk/util-user-agent-node@3.922.0':
+ dependencies:
+ '@aws-sdk/middleware-user-agent': 3.922.0
+ '@aws-sdk/types': 3.922.0
+ '@smithy/node-config-provider': 4.3.4
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@aws-sdk/xml-builder@3.921.0':
+ dependencies:
+ '@smithy/types': 4.8.1
+ fast-xml-parser: 5.2.5
+ tslib: 2.8.1
+
+ '@aws/lambda-invoke-store@0.1.1': {}
+
+ '@babel/code-frame@7.26.2':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.25.9
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/compat-data@7.26.8': {}
'@babel/core@7.26.10':
dependencies:
@@ -11241,9 +12137,9 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@babel/eslint-parser@7.23.3(@babel/core@7.23.6)(eslint@9.23.0)':
+ '@babel/eslint-parser@7.23.3(@babel/core@7.26.10)(eslint@9.23.0)':
dependencies:
- '@babel/core': 7.23.6
+ '@babel/core': 7.26.10
'@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1
eslint: 9.23.0
eslint-visitor-keys: 2.1.0
@@ -11322,15 +12218,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@babel/helper-module-transforms@7.26.0(@babel/core@7.23.6)':
- dependencies:
- '@babel/core': 7.23.6
- '@babel/helper-module-imports': 7.25.9
- '@babel/helper-validator-identifier': 7.25.9
- '@babel/traverse': 7.27.0
- transitivePeerDependencies:
- - supports-color
-
'@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)':
dependencies:
'@babel/core': 7.26.10
@@ -13569,6 +14456,69 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.19.1
+ '@octokit/auth-token@4.0.0': {}
+
+ '@octokit/core@5.2.2':
+ dependencies:
+ '@octokit/auth-token': 4.0.0
+ '@octokit/graphql': 7.1.1
+ '@octokit/request': 8.4.1
+ '@octokit/request-error': 5.1.1
+ '@octokit/types': 13.10.0
+ before-after-hook: 2.2.3
+ universal-user-agent: 6.0.1
+
+ '@octokit/endpoint@9.0.6':
+ dependencies:
+ '@octokit/types': 13.10.0
+ universal-user-agent: 6.0.1
+
+ '@octokit/graphql@7.1.1':
+ dependencies:
+ '@octokit/request': 8.4.1
+ '@octokit/types': 13.10.0
+ universal-user-agent: 6.0.1
+
+ '@octokit/openapi-types@24.2.0': {}
+
+ '@octokit/plugin-paginate-rest@11.4.4-cjs.2(@octokit/core@5.2.2)':
+ dependencies:
+ '@octokit/core': 5.2.2
+ '@octokit/types': 13.10.0
+
+ '@octokit/plugin-request-log@4.0.1(@octokit/core@5.2.2)':
+ dependencies:
+ '@octokit/core': 5.2.2
+
+ '@octokit/plugin-rest-endpoint-methods@13.3.2-cjs.1(@octokit/core@5.2.2)':
+ dependencies:
+ '@octokit/core': 5.2.2
+ '@octokit/types': 13.10.0
+
+ '@octokit/request-error@5.1.1':
+ dependencies:
+ '@octokit/types': 13.10.0
+ deprecation: 2.3.1
+ once: 1.4.0
+
+ '@octokit/request@8.4.1':
+ dependencies:
+ '@octokit/endpoint': 9.0.6
+ '@octokit/request-error': 5.1.1
+ '@octokit/types': 13.10.0
+ universal-user-agent: 6.0.1
+
+ '@octokit/rest@20.1.2':
+ dependencies:
+ '@octokit/core': 5.2.2
+ '@octokit/plugin-paginate-rest': 11.4.4-cjs.2(@octokit/core@5.2.2)
+ '@octokit/plugin-request-log': 4.0.1(@octokit/core@5.2.2)
+ '@octokit/plugin-rest-endpoint-methods': 13.3.2-cjs.1(@octokit/core@5.2.2)
+
+ '@octokit/types@13.10.0':
+ dependencies:
+ '@octokit/openapi-types': 24.2.0
+
'@open-draft/until@1.0.3': {}
'@parcel/watcher-android-arm64@2.5.1':
@@ -13876,6 +14826,280 @@ snapshots:
'@sketch-hq/sketch-file-format-ts@6.5.0': {}
+ '@smithy/abort-controller@4.2.4':
+ dependencies:
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@smithy/config-resolver@4.4.1':
+ dependencies:
+ '@smithy/node-config-provider': 4.3.4
+ '@smithy/types': 4.8.1
+ '@smithy/util-config-provider': 4.2.0
+ '@smithy/util-endpoints': 3.2.4
+ '@smithy/util-middleware': 4.2.4
+ tslib: 2.8.1
+
+ '@smithy/core@3.17.2':
+ dependencies:
+ '@smithy/middleware-serde': 4.2.4
+ '@smithy/protocol-http': 5.3.4
+ '@smithy/types': 4.8.1
+ '@smithy/util-base64': 4.3.0
+ '@smithy/util-body-length-browser': 4.2.0
+ '@smithy/util-middleware': 4.2.4
+ '@smithy/util-stream': 4.5.5
+ '@smithy/util-utf8': 4.2.0
+ '@smithy/uuid': 1.1.0
+ tslib: 2.8.1
+
+ '@smithy/credential-provider-imds@4.2.4':
+ dependencies:
+ '@smithy/node-config-provider': 4.3.4
+ '@smithy/property-provider': 4.2.4
+ '@smithy/types': 4.8.1
+ '@smithy/url-parser': 4.2.4
+ tslib: 2.8.1
+
+ '@smithy/fetch-http-handler@5.3.5':
+ dependencies:
+ '@smithy/protocol-http': 5.3.4
+ '@smithy/querystring-builder': 4.2.4
+ '@smithy/types': 4.8.1
+ '@smithy/util-base64': 4.3.0
+ tslib: 2.8.1
+
+ '@smithy/hash-node@4.2.4':
+ dependencies:
+ '@smithy/types': 4.8.1
+ '@smithy/util-buffer-from': 4.2.0
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+
+ '@smithy/invalid-dependency@4.2.4':
+ dependencies:
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@smithy/is-array-buffer@2.2.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/is-array-buffer@4.2.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/middleware-content-length@4.2.4':
+ dependencies:
+ '@smithy/protocol-http': 5.3.4
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@smithy/middleware-endpoint@4.3.6':
+ dependencies:
+ '@smithy/core': 3.17.2
+ '@smithy/middleware-serde': 4.2.4
+ '@smithy/node-config-provider': 4.3.4
+ '@smithy/shared-ini-file-loader': 4.3.4
+ '@smithy/types': 4.8.1
+ '@smithy/url-parser': 4.2.4
+ '@smithy/util-middleware': 4.2.4
+ tslib: 2.8.1
+
+ '@smithy/middleware-retry@4.4.6':
+ dependencies:
+ '@smithy/node-config-provider': 4.3.4
+ '@smithy/protocol-http': 5.3.4
+ '@smithy/service-error-classification': 4.2.4
+ '@smithy/smithy-client': 4.9.2
+ '@smithy/types': 4.8.1
+ '@smithy/util-middleware': 4.2.4
+ '@smithy/util-retry': 4.2.4
+ '@smithy/uuid': 1.1.0
+ tslib: 2.8.1
+
+ '@smithy/middleware-serde@4.2.4':
+ dependencies:
+ '@smithy/protocol-http': 5.3.4
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@smithy/middleware-stack@4.2.4':
+ dependencies:
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@smithy/node-config-provider@4.3.4':
+ dependencies:
+ '@smithy/property-provider': 4.2.4
+ '@smithy/shared-ini-file-loader': 4.3.4
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@smithy/node-http-handler@4.4.4':
+ dependencies:
+ '@smithy/abort-controller': 4.2.4
+ '@smithy/protocol-http': 5.3.4
+ '@smithy/querystring-builder': 4.2.4
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@smithy/property-provider@4.2.4':
+ dependencies:
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@smithy/protocol-http@5.3.4':
+ dependencies:
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@smithy/querystring-builder@4.2.4':
+ dependencies:
+ '@smithy/types': 4.8.1
+ '@smithy/util-uri-escape': 4.2.0
+ tslib: 2.8.1
+
+ '@smithy/querystring-parser@4.2.4':
+ dependencies:
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@smithy/service-error-classification@4.2.4':
+ dependencies:
+ '@smithy/types': 4.8.1
+
+ '@smithy/shared-ini-file-loader@4.3.4':
+ dependencies:
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@smithy/signature-v4@5.3.4':
+ dependencies:
+ '@smithy/is-array-buffer': 4.2.0
+ '@smithy/protocol-http': 5.3.4
+ '@smithy/types': 4.8.1
+ '@smithy/util-hex-encoding': 4.2.0
+ '@smithy/util-middleware': 4.2.4
+ '@smithy/util-uri-escape': 4.2.0
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+
+ '@smithy/smithy-client@4.9.2':
+ dependencies:
+ '@smithy/core': 3.17.2
+ '@smithy/middleware-endpoint': 4.3.6
+ '@smithy/middleware-stack': 4.2.4
+ '@smithy/protocol-http': 5.3.4
+ '@smithy/types': 4.8.1
+ '@smithy/util-stream': 4.5.5
+ tslib: 2.8.1
+
+ '@smithy/types@4.8.1':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/url-parser@4.2.4':
+ dependencies:
+ '@smithy/querystring-parser': 4.2.4
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@smithy/util-base64@4.3.0':
+ dependencies:
+ '@smithy/util-buffer-from': 4.2.0
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+
+ '@smithy/util-body-length-browser@4.2.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/util-body-length-node@4.2.1':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/util-buffer-from@2.2.0':
+ dependencies:
+ '@smithy/is-array-buffer': 2.2.0
+ tslib: 2.8.1
+
+ '@smithy/util-buffer-from@4.2.0':
+ dependencies:
+ '@smithy/is-array-buffer': 4.2.0
+ tslib: 2.8.1
+
+ '@smithy/util-config-provider@4.2.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/util-defaults-mode-browser@4.3.5':
+ dependencies:
+ '@smithy/property-provider': 4.2.4
+ '@smithy/smithy-client': 4.9.2
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@smithy/util-defaults-mode-node@4.2.7':
+ dependencies:
+ '@smithy/config-resolver': 4.4.1
+ '@smithy/credential-provider-imds': 4.2.4
+ '@smithy/node-config-provider': 4.3.4
+ '@smithy/property-provider': 4.2.4
+ '@smithy/smithy-client': 4.9.2
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@smithy/util-endpoints@3.2.4':
+ dependencies:
+ '@smithy/node-config-provider': 4.3.4
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@smithy/util-hex-encoding@4.2.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/util-middleware@4.2.4':
+ dependencies:
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@smithy/util-retry@4.2.4':
+ dependencies:
+ '@smithy/service-error-classification': 4.2.4
+ '@smithy/types': 4.8.1
+ tslib: 2.8.1
+
+ '@smithy/util-stream@4.5.5':
+ dependencies:
+ '@smithy/fetch-http-handler': 5.3.5
+ '@smithy/node-http-handler': 4.4.4
+ '@smithy/types': 4.8.1
+ '@smithy/util-base64': 4.3.0
+ '@smithy/util-buffer-from': 4.2.0
+ '@smithy/util-hex-encoding': 4.2.0
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+
+ '@smithy/util-uri-escape@4.2.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/util-utf8@2.3.0':
+ dependencies:
+ '@smithy/util-buffer-from': 2.2.0
+ tslib: 2.8.1
+
+ '@smithy/util-utf8@4.2.0':
+ dependencies:
+ '@smithy/util-buffer-from': 4.2.0
+ tslib: 2.8.1
+
+ '@smithy/uuid@1.1.0':
+ dependencies:
+ tslib: 2.8.1
+
'@stackblitz/sdk@1.11.0': {}
'@stylelint/postcss-css-in-js@0.38.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.5.3))(postcss@8.5.3))(postcss@8.5.3)':
@@ -14173,6 +15397,10 @@ snapshots:
'@tsconfig/node16@1.0.4':
optional: true
+ '@types/archiver@6.0.4':
+ dependencies:
+ '@types/readdir-glob': 1.1.5
+
'@types/argparse@1.0.38': {}
'@types/aria-query@5.0.4': {}
@@ -14342,6 +15570,13 @@ snapshots:
dependencies:
undici-types: 6.20.0
+ '@types/nodemailer@7.0.3':
+ dependencies:
+ '@aws-sdk/client-sesv2': 3.922.0
+ '@types/node': 18.19.84
+ transitivePeerDependencies:
+ - aws-crt
+
'@types/normalize-package-data@2.4.4': {}
'@types/nprogress@0.2.3': {}
@@ -14384,13 +15619,17 @@ snapshots:
'@types/prop-types': 15.7.14
csstype: 3.1.3
+ '@types/readdir-glob@1.1.5':
+ dependencies:
+ '@types/node': 18.19.84
+
'@types/resolve@1.20.6': {}
'@types/sax@1.2.7':
dependencies:
'@types/node': 18.19.84
- '@types/semver@7.7.0': {}
+ '@types/semver@7.7.1': {}
'@types/set-cookie-parser@2.4.10':
dependencies:
@@ -14440,7 +15679,7 @@ snapshots:
graphemer: 1.4.0
ignore: 5.3.2
natural-compare-lite: 1.4.0
- semver: 7.7.1
+ semver: 7.7.3
tsutils: 3.21.0(typescript@5.3.3)
optionalDependencies:
typescript: 5.3.3
@@ -14459,7 +15698,7 @@ snapshots:
graphemer: 1.4.0
ignore: 5.3.2
natural-compare-lite: 1.4.0
- semver: 7.7.1
+ semver: 7.7.3
tsutils: 3.21.0(typescript@5.8.2)
optionalDependencies:
typescript: 5.8.2
@@ -14575,7 +15814,7 @@ snapshots:
debug: 4.4.0
globby: 11.1.0
is-glob: 4.0.3
- semver: 7.7.1
+ semver: 7.7.3
tsutils: 3.21.0(typescript@5.3.3)
optionalDependencies:
typescript: 5.3.3
@@ -14589,7 +15828,7 @@ snapshots:
debug: 4.4.0
globby: 11.1.0
is-glob: 4.0.3
- semver: 7.7.1
+ semver: 7.7.3
tsutils: 3.21.0(typescript@5.8.2)
optionalDependencies:
typescript: 5.8.2
@@ -14604,7 +15843,7 @@ snapshots:
fast-glob: 3.3.3
is-glob: 4.0.3
minimatch: 9.0.5
- semver: 7.7.1
+ semver: 7.7.3
ts-api-utils: 2.1.0(typescript@5.8.2)
typescript: 5.8.2
transitivePeerDependencies:
@@ -14614,13 +15853,13 @@ snapshots:
dependencies:
'@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0)
'@types/json-schema': 7.0.15
- '@types/semver': 7.7.0
+ '@types/semver': 7.7.1
'@typescript-eslint/scope-manager': 5.62.0
'@typescript-eslint/types': 5.62.0
'@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3)
eslint: 9.23.0
eslint-scope: 5.1.1
- semver: 7.7.1
+ semver: 7.7.3
transitivePeerDependencies:
- supports-color
- typescript
@@ -14629,13 +15868,13 @@ snapshots:
dependencies:
'@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0)
'@types/json-schema': 7.0.15
- '@types/semver': 7.7.0
+ '@types/semver': 7.7.1
'@typescript-eslint/scope-manager': 5.62.0
'@typescript-eslint/types': 5.62.0
'@typescript-eslint/typescript-estree': 5.62.0(typescript@5.8.2)
eslint: 9.23.0
eslint-scope: 5.1.1
- semver: 7.7.1
+ semver: 7.7.3
transitivePeerDependencies:
- supports-color
- typescript
@@ -14897,8 +16136,8 @@ snapshots:
'@umijs/lint@4.4.6(eslint@9.23.0)(jest@29.1.2(@types/node@22.13.14)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.1))(@types/node@22.13.14)(typescript@5.3.3)))(postcss-less@6.0.0(postcss@8.5.3))(stylelint@15.11.0(typescript@5.3.3))(typescript@5.3.3)':
dependencies:
- '@babel/core': 7.23.6
- '@babel/eslint-parser': 7.23.3(@babel/core@7.23.6)(eslint@9.23.0)
+ '@babel/core': 7.26.10
+ '@babel/eslint-parser': 7.23.3(@babel/core@7.26.10)(eslint@9.23.0)
'@stylelint/postcss-css-in-js': 0.38.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.5.3))(postcss@8.5.3))(postcss@8.5.3)
'@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.23.0)(typescript@5.3.3))(eslint@9.23.0)(typescript@5.3.3)
'@typescript-eslint/parser': 5.62.0(eslint@9.23.0)(typescript@5.3.3)
@@ -14923,8 +16162,8 @@ snapshots:
'@umijs/lint@4.4.6(eslint@9.23.0)(jest@29.1.2(@types/node@22.13.14)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.1))(@types/node@22.13.14)(typescript@5.8.2)))(postcss-less@6.0.0(postcss@8.5.3))(stylelint@15.11.0(typescript@5.8.2))(typescript@5.8.2)':
dependencies:
- '@babel/core': 7.23.6
- '@babel/eslint-parser': 7.23.3(@babel/core@7.23.6)(eslint@9.23.0)
+ '@babel/core': 7.26.10
+ '@babel/eslint-parser': 7.23.3(@babel/core@7.26.10)(eslint@9.23.0)
'@stylelint/postcss-css-in-js': 0.38.0(postcss-syntax@0.36.2(postcss-less@6.0.0(postcss@8.5.3))(postcss@8.5.3))(postcss@8.5.3)
'@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.23.0)(typescript@5.8.2))(eslint@9.23.0)(typescript@5.8.2)
'@typescript-eslint/parser': 5.62.0(eslint@9.23.0)(typescript@5.8.2)
@@ -14985,7 +16224,7 @@ snapshots:
react-error-overlay: 6.0.9
react-refresh: 0.14.2
resolve: 1.22.10
- semver: 7.7.1
+ semver: 7.7.3
yargs-parser: 21.1.1
optionalDependencies:
'@umijs/mako-darwin-arm64': 0.11.5
@@ -15319,6 +16558,10 @@ snapshots:
abab@2.0.6: {}
+ abort-controller@3.0.0:
+ dependencies:
+ event-target-shim: 5.0.1
+
accepts@1.3.8:
dependencies:
mime-types: 2.1.35
@@ -15495,6 +16738,29 @@ snapshots:
arch@2.2.0: {}
+ 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
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+
arg@4.1.3:
optional: true
@@ -15662,6 +16928,8 @@ snapshots:
transitivePeerDependencies:
- debug
+ b4a@1.7.3: {}
+
babel-jest@29.7.0(@babel/core@7.26.10):
dependencies:
'@babel/core': 7.26.10
@@ -15822,10 +17090,16 @@ snapshots:
balanced-match@2.0.0: {}
+ bare-events@2.8.1: {}
+
base64-js@1.5.1: {}
+ basic-ftp@5.0.5: {}
+
bcp-47-match@2.0.3: {}
+ before-after-hook@2.2.3: {}
+
big-integer@1.6.52: {}
big.js@5.2.2: {}
@@ -15865,6 +17139,8 @@ snapshots:
boolbase@1.0.0: {}
+ bowser@2.12.1: {}
+
bplist-parser@0.2.0:
dependencies:
big-integer: 1.6.52
@@ -15944,6 +17220,8 @@ snapshots:
dependencies:
node-int64: 0.4.0
+ buffer-crc32@1.0.0: {}
+
buffer-from@1.1.2: {}
buffer-okam@4.9.2:
@@ -15965,6 +17243,11 @@ snapshots:
base64-js: 1.5.1
ieee754: 1.2.1
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
builtin-status-codes@3.0.0: {}
bundle-name@3.0.0:
@@ -16245,6 +17528,14 @@ snapshots:
common-path-prefix@3.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
+
compressible@2.0.18:
dependencies:
mime-db: 1.54.0
@@ -16356,6 +17647,13 @@ snapshots:
optionalDependencies:
typescript: 5.8.2
+ crc-32@1.2.2: {}
+
+ crc32-stream@6.0.0:
+ dependencies:
+ crc-32: 1.2.2
+ readable-stream: 4.7.0
+
create-ecdh@4.0.4:
dependencies:
bn.js: 4.12.1
@@ -16480,7 +17778,7 @@ snapshots:
postcss-modules-scope: 3.2.1(postcss@8.5.3)
postcss-modules-values: 4.0.0(postcss@8.5.3)
postcss-value-parser: 4.2.0
- semver: 7.7.1
+ semver: 7.7.3
webpack: 5.101.3(@swc/core@1.9.2(@swc/helpers@0.5.1))
css-prefers-color-scheme@6.0.3(postcss@8.5.3):
@@ -16780,6 +18078,8 @@ snapshots:
depd@2.0.0: {}
+ deprecation@2.3.1: {}
+
dequal@2.0.3: {}
des.js@1.1.0:
@@ -16918,6 +18218,8 @@ snapshots:
dotenv@16.4.7: {}
+ dotenv@17.2.3: {}
+
dotignore@0.1.2:
dependencies:
minimatch: 3.1.2
@@ -17182,6 +18484,11 @@ snapshots:
encodeurl@2.0.0: {}
+ encoding@0.1.13:
+ dependencies:
+ iconv-lite: 0.6.3
+ optional: true
+
end-of-stream@1.4.4:
dependencies:
once: 1.4.0
@@ -17763,10 +19070,18 @@ snapshots:
etag@1.8.1: {}
+ event-target-shim@5.0.1: {}
+
eventemitter3@2.0.3: {}
events-okam@3.3.0: {}
+ events-universal@1.0.1:
+ dependencies:
+ bare-events: 2.8.1
+ transitivePeerDependencies:
+ - bare-abort-controller
+
events@3.3.0: {}
evp_bytestokey@1.0.3:
@@ -17798,6 +19113,18 @@ snapshots:
signal-exit: 3.0.7
strip-final-newline: 3.0.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
+
exit@0.1.2: {}
expect@29.7.0:
@@ -17866,6 +19193,8 @@ snapshots:
fast-equals@4.0.3: {}
+ fast-fifo@1.3.2: {}
+
fast-glob@3.2.12:
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -17890,6 +19219,10 @@ snapshots:
fast-uri@3.0.6: {}
+ fast-xml-parser@5.2.5:
+ dependencies:
+ strnum: 2.1.1
+
fastest-levenshtein@1.0.16: {}
fastq@1.19.1:
@@ -18074,7 +19407,7 @@ snapshots:
minimatch: 3.1.2
node-abort-controller: 3.1.1
schema-utils: 3.3.0
- semver: 7.7.1
+ semver: 7.7.3
tapable: 2.2.1
typescript: 5.3.3
webpack: 5.101.3(@swc/core@1.9.2(@swc/helpers@0.5.1))
@@ -18091,7 +19424,7 @@ snapshots:
minimatch: 3.1.2
node-abort-controller: 3.1.1
schema-utils: 3.3.0
- semver: 7.7.1
+ semver: 7.7.3
tapable: 2.2.1
typescript: 5.8.2
webpack: 5.101.3(@swc/core@1.9.2(@swc/helpers@0.5.1))
@@ -18182,6 +19515,8 @@ snapshots:
get-stream@6.0.1: {}
+ get-stream@8.0.1: {}
+
get-symbol-description@1.1.0:
dependencies:
call-bound: 1.0.4
@@ -18707,6 +20042,8 @@ snapshots:
human-signals@4.3.1: {}
+ human-signals@5.0.0: {}
+
hyphenate-style-name@1.1.0: {}
i18next@21.10.0:
@@ -19066,7 +20403,7 @@ snapshots:
'@babel/parser': 7.27.0
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.2
- semver: 7.7.1
+ semver: 7.7.3
transitivePeerDependencies:
- supports-color
@@ -19570,7 +20907,7 @@ snapshots:
jest-util: 29.7.0
natural-compare: 1.4.0
pretty-format: 29.7.0
- semver: 7.7.1
+ semver: 7.7.3
transitivePeerDependencies:
- supports-color
@@ -19852,6 +21189,10 @@ snapshots:
lazy-cache@1.0.4: {}
+ lazystream@1.0.1:
+ dependencies:
+ readable-stream: 2.3.8
+
leac@0.6.0: {}
less-plugin-resolve@1.0.2:
@@ -20032,7 +21373,7 @@ snapshots:
make-dir@4.0.0:
dependencies:
- semver: 7.7.1
+ semver: 7.7.3
make-error@1.3.6: {}
@@ -20555,7 +21896,7 @@ snapshots:
ms@2.1.3: {}
- msw@0.45.0(typescript@5.8.2):
+ msw@0.45.0(encoding@0.1.13)(typescript@5.8.2):
dependencies:
'@mswjs/cookies': 0.2.2
'@mswjs/interceptors': 0.17.10
@@ -20569,7 +21910,7 @@ snapshots:
inquirer: 8.2.6
is-node-process: 1.2.0
js-levenshtein: 1.1.6
- node-fetch: 2.7.0
+ node-fetch: 2.7.0(encoding@0.1.13)
outvariant: 1.4.3
path-to-regexp: 6.3.0
statuses: 2.0.1
@@ -20635,9 +21976,11 @@ snapshots:
node-domexception@1.0.0: {}
- node-fetch@2.7.0:
+ node-fetch@2.7.0(encoding@0.1.13):
dependencies:
whatwg-url: 5.0.0
+ optionalDependencies:
+ encoding: 0.1.13
node-fetch@3.3.2:
dependencies:
@@ -20706,6 +22049,8 @@ snapshots:
node-releases@2.0.19: {}
+ nodemailer@7.0.10: {}
+
normalize-package-data@2.5.0:
dependencies:
hosted-git-info: 2.8.9
@@ -20717,7 +22062,7 @@ snapshots:
dependencies:
hosted-git-info: 4.1.0
is-core-module: 2.16.1
- semver: 7.7.1
+ semver: 7.7.3
validate-npm-package-license: 3.0.4
normalize-path@3.0.0: {}
@@ -22186,6 +23531,18 @@ snapshots:
string_decoder: 1.3.0
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
+
readdirp@3.6.0:
dependencies:
picomatch: 2.3.1
@@ -22644,7 +24001,7 @@ snapshots:
dependencies:
lru-cache: 6.0.0
- semver@7.7.1: {}
+ semver@7.7.3: {}
send@0.19.0:
dependencies:
@@ -22922,6 +24279,15 @@ snapshots:
stream-shift@1.0.3: {}
+ streamx@2.23.0:
+ dependencies:
+ events-universal: 1.0.1
+ fast-fifo: 1.3.2
+ text-decoder: 1.2.3
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+
strict-event-emitter@0.2.8:
dependencies:
events: 3.3.0
@@ -23045,6 +24411,8 @@ snapshots:
strip-json-comments@3.1.1: {}
+ strnum@2.1.1: {}
+
style-search@0.1.0: {}
style-to-object@0.4.4:
@@ -23394,6 +24762,15 @@ snapshots:
resolve: 1.22.10
string.prototype.trim: 1.2.10
+ tar-stream@3.1.7:
+ dependencies:
+ b4a: 1.7.3
+ fast-fifo: 1.3.2
+ streamx: 2.23.0
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+
terser-webpack-plugin@5.3.14(@swc/core@1.9.2(@swc/helpers@0.5.1))(webpack@5.101.3(@swc/core@1.9.2(@swc/helpers@0.5.1))):
dependencies:
'@jridgewell/trace-mapping': 0.3.25
@@ -23418,6 +24795,12 @@ snapshots:
glob: 7.2.3
minimatch: 3.1.2
+ text-decoder@1.2.3:
+ dependencies:
+ b4a: 1.7.3
+ transitivePeerDependencies:
+ - react-native-b4a
+
textextensions@2.6.0: {}
thenify-all@1.6.0:
@@ -23517,7 +24900,7 @@ snapshots:
json5: 2.2.3
lodash.memoize: 4.1.2
make-error: 1.3.6
- semver: 7.7.1
+ semver: 7.7.3
typescript: 5.8.2
yargs-parser: 20.2.9
optionalDependencies:
@@ -23663,7 +25046,6 @@ snapshots:
get-tsconfig: 4.10.0
optionalDependencies:
fsevents: 2.3.3
- optional: true
tty-browserify@0.0.0: {}
@@ -23948,6 +25330,8 @@ snapshots:
unist-util-is: 6.0.0
unist-util-visit-parents: 6.0.1
+ universal-user-agent@6.0.1: {}
+
universalify@0.1.2: {}
universalify@0.2.0: {}
@@ -24408,6 +25792,12 @@ snapshots:
optionalDependencies:
commander: 9.5.0
+ zip-stream@6.0.1:
+ dependencies:
+ archiver-utils: 5.0.2
+ compress-commons: 6.0.2
+ readable-stream: 4.7.0
+
zod-validation-error@2.1.0(zod@3.24.2):
dependencies:
zod: 3.24.2
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 8cba9f65c..14388ec8e 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -1,3 +1,3 @@
packages:
- 'packages/**'
- - 'scripts/cli/create-dms-page'
+ - 'scripts/cli/**'
diff --git a/scripts/cli/dms-kit-publish/.env.example b/scripts/cli/dms-kit-publish/.env.example
new file mode 100644
index 000000000..4021abc73
--- /dev/null
+++ b/scripts/cli/dms-kit-publish/.env.example
@@ -0,0 +1,115 @@
+# ========================================
+# DMS-UI 部署脚本环境变量配置
+# ========================================
+
+# 部署环境 (development | staging | production)
+DEPLOY_ENV=development
+
+# ========================================
+# NPM 私有仓库配置
+# ========================================
+
+# npm 仓库地址
+NPM_REGISTRY=http://localhost:4873/
+
+# npm 认证信息
+# 格式: //registry_url/:_auth="base64_encoded_credentials"
+# 生成方式: echo -n "username:password" | base64
+# 示例: publisher:publisher -> cHVibGlzaGVyOnB1Ymxpc2hlcg==
+NPM_AUTH//localhost:4873/:_authToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyZWFsX2dyb3VwcyI6WyJwdWJsaXNoZXIiXSwibmFtZSI6InB1Ymxpc2hlciIsImdyb3VwcyI6WyJwdWJsaXNoZXIiLCIkYWxsIiwiJGF1dGhlbnRpY2F0ZWQiLCJAYWxsIiwiQGF1dGhlbnRpY2F0ZWQiLCJhbGwiXSwiaWF0IjoxNzYyMjM2NzY5LCJuYmYiOjE3NjIyMzY3NzAsImV4cCI6MTc2NzQyMDc2OX0.jO5xsVp3dSnNEbW77a37SuPRL7Q1YL2i66evaBVd3Mo
+
+# ========================================
+# FTP 服务器配置
+# ========================================
+
+# FTP 服务器地址
+FTP_HOST=localhost
+
+# FTP 用户名
+FTP_USER=ftpadmin
+
+# FTP 密码
+FTP_PASSWORD=test123
+
+# FTP 上传目录
+FTP_DIR=/home/ftpadmin/actiontech-dms-ui/docs
+
+# ========================================
+# Robot SDK 配置
+# ========================================
+
+# Robot SDK API 地址
+ROBOT_SDK_BASE_URL=http://localhost:3535
+
+# ========================================
+# GitHub API 配置
+# ========================================
+
+# GitHub 组织/用户名
+GITHUB_OWNER=actiontech
+
+# GitHub 仓库名
+GITHUB_REPO=dms-ui
+
+
+# GitHub 项目 ID
+GITHUB_PROJECT_ID=706476902
+
+# Github Token, 用于推送 tag 至仓库
+GITHUB_TOKEN=
+
+# ========================================
+# 邮件通知配置(可选)
+# ========================================
+
+# SMTP 服务器地址
+# 留空则不发送邮件通知
+EMAIL_HOST=localhost
+
+# SMTP 端口
+EMAIL_PORT=1025
+
+# 是否使用 SSL/TLS (true | false)
+EMAIL_SECURE=false
+
+# SMTP 用户名(如不需要认证可留空)
+EMAIL_USER=
+
+# SMTP 密码(如不需要认证可留空)
+EMAIL_PASS=
+
+# 发件人邮箱
+EMAIL_FROM=dms-deploy@example.com
+
+# 收件人邮箱(多个邮箱用逗号分隔)
+EMAIL_TO=admin@example.com,team@example.com
+
+# ========================================
+# 说明
+# ========================================
+
+# 本地测试环境(development):
+# - NPM_REGISTRY: http://localhost:4873/
+# - FTP_HOST: localhost
+# - EMAIL_HOST: localhost (MailHog)
+# - 其他密码使用测试密码即可
+
+# 测试环境(staging):
+# - 使用测试服务器的实际地址
+# - 密码使用测试环境密码
+# - 版本号使用 x.x.x-staging.x
+
+# 生产环境(production):
+# - 使用生产服务器地址
+# - 密码使用生产环境密码
+# - 必须通过 GoCD 执行,不要手动运行
+
+# ========================================
+# 安全提示
+# ========================================
+
+# 1. 不要将此文件提交到 Git
+# 2. 不要在公共场合分享此文件
+# 3. 定期更换密码
+# 4. 生产环境密码必须使用强密码
+# 5. 在 GoCD 中使用 Secure Variables 存储敏感信息
diff --git a/scripts/cli/dms-kit-publish/bin/core.js b/scripts/cli/dms-kit-publish/bin/core.js
new file mode 100755
index 000000000..5dad674fd
--- /dev/null
+++ b/scripts/cli/dms-kit-publish/bin/core.js
@@ -0,0 +1,2 @@
+#!/usr/bin/env node
+require('../dist/index.js');
diff --git a/scripts/cli/dms-kit-publish/package.json b/scripts/cli/dms-kit-publish/package.json
new file mode 100644
index 000000000..08ad5444c
--- /dev/null
+++ b/scripts/cli/dms-kit-publish/package.json
@@ -0,0 +1,32 @@
+{
+ "name": "@actiontech/cli-dms-kit-publish",
+ "version": "1.0.0",
+ "description": "DMS Kit 包发布和文档部署工具",
+ "bin": {
+ "dms-kit-publish": "./bin/core.js"
+ },
+ "files": [
+ "dist"
+ ],
+ "scripts": {
+ "build:watch": "tsc -w",
+ "build": "tsc",
+ "start": "tsc && node dist/index.js"
+ },
+ "dependencies": {
+ "@octokit/rest": "^20.1.2",
+ "archiver": "^7.0.1",
+ "basic-ftp": "^5.0.5",
+ "chalk": "^4.1.2",
+ "dotenv": "^17.2.3",
+ "execa": "^8.0.1",
+ "nodemailer": "^7.0.10",
+ "semver": "^7.7.3"
+ },
+ "devDependencies": {
+ "@types/archiver": "^6.0.3",
+ "@types/node": "^18.0.4",
+ "@types/nodemailer": "^7.0.3",
+ "@types/semver": "^7.7.1"
+ }
+}
\ No newline at end of file
diff --git a/scripts/cli/dms-kit-publish/scripts/setup-local-test.sh b/scripts/cli/dms-kit-publish/scripts/setup-local-test.sh
new file mode 100755
index 000000000..94b40a548
--- /dev/null
+++ b/scripts/cli/dms-kit-publish/scripts/setup-local-test.sh
@@ -0,0 +1,214 @@
+#!/bin/bash
+
+# DMS-UI 本地测试环境启动脚本
+
+set -e
+
+echo ""
+echo "🚀 启动 DMS-KIT-PUBLISH 本地测试环境"
+echo "================================"
+echo ""
+
+# 检查 Docker 是否安装
+if ! command -v docker &> /dev/null; then
+ echo "❌ 错误: 未安装 Docker"
+ echo "请先安装 Docker: https://docs.docker.com/get-docker/"
+ exit 1
+fi
+
+# 检查 Docker 是否运行
+if ! docker info &> /dev/null; then
+ echo "❌ 错误: Docker 未运行"
+ echo "请先启动 Docker"
+ exit 1
+fi
+
+# 停止并删除已存在的容器
+echo "🧹 清理旧容器..."
+docker rm -f verdaccio ftp-server mailhog 2>/dev/null || true
+
+# 清理旧的 Verdaccio 配置(如果需要)
+if [ -f "$(pwd)/verdaccio/conf/config.yaml" ]; then
+ echo "🔍 检测到现有配置文件,将重新生成以确保配置正确..."
+ rm -f $(pwd)/verdaccio/conf/config.yaml
+fi
+
+echo ""
+
+# 启动 Verdaccio
+echo "📦 启动 npm 私有仓库 (Verdaccio)..."
+
+# 创建 Verdaccio 数据目录
+mkdir -p $(pwd)/verdaccio/storage $(pwd)/verdaccio/conf
+
+# 创建 Verdaccio 配置文件(如果不存在)
+if [ ! -f "$(pwd)/verdaccio/conf/config.yaml" ]; then
+ cat > $(pwd)/verdaccio/conf/config.yaml << 'EOF'
+storage: /verdaccio/storage/data
+
+auth:
+ htpasswd:
+ file: /verdaccio/storage/htpasswd
+ max_users: 1000
+ algorithm: bcrypt
+ rounds: 10
+
+security:
+ api:
+ jwt:
+ sign:
+ expiresIn: 60d
+ notBefore: 1
+ web:
+ sign:
+ expiresIn: 7d
+ verify:
+ expiresIn: 7d
+
+uplinks:
+ npmjs:
+ url: https://registry.npmjs.org/
+ timeout: 30s
+
+packages:
+ '@*/*':
+ access: $all
+ publish: $authenticated
+ unpublish: $authenticated
+ proxy: npmjs
+
+ '**':
+ access: $all
+ publish: $authenticated
+ unpublish: $authenticated
+ proxy: npmjs
+
+server:
+ keepAliveTimeout: 60
+
+middlewares:
+ audit:
+ enabled: true
+
+logs: { type: stdout, format: pretty, level: http }
+
+max_body_size: 100mb
+EOF
+fi
+
+docker run -d \
+ --name verdaccio \
+ -p 4873:4873 \
+ -v $(pwd)/verdaccio/storage:/verdaccio/storage \
+ -v $(pwd)/verdaccio/conf:/verdaccio/conf \
+ verdaccio/verdaccio
+
+echo " 等待 Verdaccio 启动..."
+sleep 5
+
+# 检查 Verdaccio 是否启动成功
+if curl -s http://localhost:4873 > /dev/null; then
+ echo " ✅ Verdaccio 启动成功"
+else
+ echo " ⚠️ Verdaccio 可能未完全启动,请稍后检查"
+ echo " 检查日志: docker logs verdaccio"
+fi
+echo ""
+
+# 启动 FTP 服务器
+echo "📁 启动 FTP 服务器..."
+
+# 预创建 FTP 目录结构(模拟生产环境)
+mkdir -p $(pwd)/ftp-data/actiontech-dms-ui/docs
+echo " 已预创建目录结构: /home/ftpadmin/actiontech-dms-ui/docs"
+
+docker run -d \
+ --name ftp-server \
+ -p 21:21 \
+ -p 21000-21010:21000-21010 \
+ -e USERS="ftpadmin|test123" \
+ -e ADDRESS=localhost \
+ -e MIN_PORT=21000 \
+ -e MAX_PORT=21010 \
+ -v $(pwd)/ftp-data:/home/ftpadmin \
+ delfer/alpine-ftp-server
+
+echo " 等待 FTP 服务器启动..."
+sleep 3
+echo " ✅ FTP 服务器启动成功"
+echo ""
+
+# 启动 Mailpit (MailHog 的现代化替代品,支持 ARM)
+echo "📧 启动邮件测试服务 (Mailpit)..."
+docker run -d \
+ --name mailhog \
+ -p 1025:1025 \
+ -p 8025:8025 \
+ -e MP_MAX_MESSAGES=5000 \
+ axllent/mailpit
+
+echo " 等待 Mailpit 启动..."
+sleep 2
+echo " ✅ Mailpit 启动成功"
+echo ""
+
+echo "================================"
+echo "✅ 测试环境启动完成!"
+echo "================================"
+echo ""
+echo "📌 服务地址:"
+echo " - npm 仓库: http://localhost:4873"
+echo " - FTP 服务: ftp://localhost:21"
+echo " - 邮件界面: http://localhost:8025"
+echo ""
+echo "🔐 测试凭据:"
+echo " - FTP 用户: ftpadmin / test123"
+echo " - npm 用户: publisher / publisher"
+echo ""
+echo "📝 下一步操作:"
+echo " 1. 注册 npm 用户 (如果还未注册):"
+echo " npm adduser --registry http://localhost:4873/"
+echo ""
+echo " 2. 配置环境变量:"
+echo " cd scripts/publishAndDocsDeploy"
+echo " cp .env.example .env"
+echo " # 编辑 .env 文件(开发环境已经配置好,无需修改)"
+echo ""
+echo " 3. 准备测试包:"
+echo " # 修改 packages/*/package.json 中的版本号"
+echo " # 更新 packages/*/docs/CHANGELOG.md"
+echo ""
+echo " 4. 运行测试:"
+echo " pnpm tsx scripts/publishAndDocsDeploy/index.ts"
+echo ""
+echo "📖 详细文档: scripts/publishAndDocsDeploy/LOCAL_TEST_GUIDE.md"
+echo ""
+
+# 提示注册 npm 用户
+echo "❓ 是否现在注册 npm 用户? (y/n)"
+read -r response
+if [[ "$response" =~ ^([yY][eE][sS]|[yY])$ ]]; then
+ echo ""
+ echo "请输入以下信息注册 npm 用户:"
+ echo "用户名: publisher"
+ echo "密码: publisher"
+ echo "邮箱: publisher@example.com"
+ echo ""
+ npm adduser --registry http://localhost:4873/
+
+ if [ $? -eq 0 ]; then
+ echo ""
+ echo "✅ npm 用户注册成功!"
+ echo ""
+ echo "🔑 认证信息已保存到 ~/.npmrc"
+ echo " 你可以从中获取 NPM_AUTH 配置"
+ else
+ echo ""
+ echo "⚠️ npm 用户注册失败,请稍后手动注册"
+ fi
+fi
+
+echo ""
+echo "🎉 准备就绪!可以开始测试了!"
+echo ""
+
diff --git a/scripts/cli/dms-kit-publish/scripts/stop-local-test.sh b/scripts/cli/dms-kit-publish/scripts/stop-local-test.sh
new file mode 100755
index 000000000..d55ad5ae1
--- /dev/null
+++ b/scripts/cli/dms-kit-publish/scripts/stop-local-test.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+
+# DMS-UI 本地测试环境停止脚本
+
+echo ""
+echo "🛑 停止 DMS-KIT-PUBLISH 本地测试环境"
+echo "================================"
+echo ""
+
+# 停止并删除容器
+echo "🧹 停止容器..."
+docker rm -f verdaccio ftp-server mailhog 2>/dev/null || true
+echo ""
+
+echo "================================"
+echo "✅ 测试环境已停止并清理"
+echo "================================"
+echo ""
+
+# 询问是否删除数据
+echo "❓ 是否删除测试数据? (y/n)"
+echo " - verdaccio/ (npm 包数据)"
+echo " - ftp-data/ (FTP 上传文件)"
+echo ""
+read -r response
+
+if [[ "$response" =~ ^([yY][eE][sS]|[yY])$ ]]; then
+ echo ""
+ echo "🗑️ 删除测试数据..."
+ rm -rf verdaccio/ ftp-data/
+ echo "✅ 测试数据已删除"
+else
+ echo ""
+ echo "📦 测试数据已保留"
+ echo " - 位置: $(pwd)/verdaccio/ 和 $(pwd)/ftp-data/"
+ echo " - 下次启动测试环境时会复用这些数据"
+fi
+
+echo ""
+echo "👋 再见!"
+echo ""
+
diff --git a/scripts/cli/dms-kit-publish/src/config/environment.ts b/scripts/cli/dms-kit-publish/src/config/environment.ts
new file mode 100644
index 000000000..056b7adcc
--- /dev/null
+++ b/scripts/cli/dms-kit-publish/src/config/environment.ts
@@ -0,0 +1,99 @@
+import chalk from 'chalk';
+import 'dotenv/config';
+import type { EnvironmentConfig } from '../types/index';
+
+// 获取当前环境
+export const ENV = process.env.DEPLOY_ENV || 'production';
+
+// 解析命令行参数
+const args = process.argv.slice(2);
+export const RETRY_DEPLOY_TRIGGER = args.includes('--retry-deploy-trigger');
+
+// 环境配置定义
+const environments: Record = {
+ development: {
+ pnpm: {
+ registry: process.env.NPM_REGISTRY || 'http://localhost:4873/',
+ auth: process.env.NPM_AUTH || ''
+ },
+ ftpServer: {
+ host: process.env.FTP_HOST || 'localhost',
+ user: process.env.FTP_USER || '',
+ password: process.env.FTP_PASSWORD || ''
+ },
+ ftpDir: process.env.FTP_DIR || '/home/ftpadmin/actiontech-dms-ui/docs',
+ robotSDK: {
+ baseUrl: process.env.ROBOT_SDK_BASE_URL || 'http://localhost:3535'
+ },
+ githubApi: {
+ owner: process.env.GITHUB_OWNER || 'actiontech',
+ repo: process.env.GITHUB_REPO || 'dms-ui',
+ baseUrl: process.env.GITHUB_API_BASE_URL || 'https://api.github.com',
+ projectId: parseInt(process.env.GITHUB_PROJECT_ID || '706476902'),
+ token: process.env.GITHUB_TOKEN || ''
+ },
+ email: process.env.EMAIL_HOST
+ ? {
+ host: process.env.EMAIL_HOST,
+ port: parseInt(process.env.EMAIL_PORT || '587'),
+ secure: process.env.EMAIL_SECURE === 'true',
+ auth: {
+ user: process.env.EMAIL_USER || '',
+ pass: process.env.EMAIL_PASS || ''
+ },
+ from: process.env.EMAIL_FROM || '',
+ to: (process.env.EMAIL_TO || '').split(',').filter(Boolean)
+ }
+ : undefined
+ },
+ production: {
+ pnpm: {
+ registry: process.env.NPM_REGISTRY || 'http://10.186.18.19:4873/',
+ auth: process.env.NPM_AUTH || ''
+ },
+ ftpServer: {
+ host: process.env.FTP_HOST || '10.186.18.90',
+ user: process.env.FTP_USER || '',
+ password: process.env.FTP_PASSWORD || ''
+ },
+ ftpDir: process.env.FTP_DIR || '/actiontech-dms-ui/docs',
+ robotSDK: {
+ baseUrl: process.env.ROBOT_SDK_BASE_URL || 'http://10.186.18.19:8000'
+ },
+ githubApi: {
+ owner: process.env.GITHUB_OWNER || 'actiontech',
+ repo: process.env.GITHUB_REPO || 'dms-ui',
+ baseUrl: process.env.GITHUB_API_BASE_URL || 'https://api.github.com',
+ projectId: parseInt(process.env.GITHUB_PROJECT_ID || '706476902'),
+ token: process.env.GITHUB_TOKEN || ''
+ },
+ email: process.env.EMAIL_HOST
+ ? {
+ host: process.env.EMAIL_HOST,
+ port: parseInt(process.env.EMAIL_PORT || '587'),
+ secure: process.env.EMAIL_SECURE === 'true',
+ auth: {
+ user: process.env.EMAIL_USER || '',
+ pass: process.env.EMAIL_PASS || ''
+ },
+ from: process.env.EMAIL_FROM || '',
+ to: (process.env.EMAIL_TO || '').split(',').filter(Boolean)
+ }
+ : undefined
+ }
+};
+
+// 验证环境并获取配置
+if (!environments[ENV]) {
+ console.error(chalk.red(`不支持的环境: ${ENV}`));
+ console.error(
+ chalk.red(`支持的环境: ${Object.keys(environments).join(', ')}`)
+ );
+ process.exit(1);
+}
+
+// 导出当前环境配置
+export const config = environments[ENV];
+
+// 输出当前环境信息
+console.log(chalk.blue(`\n当前部署环境: ${ENV}\n`));
diff --git a/scripts/cli/dms-kit-publish/src/config/index.ts b/scripts/cli/dms-kit-publish/src/config/index.ts
new file mode 100644
index 000000000..5d04aebd1
--- /dev/null
+++ b/scripts/cli/dms-kit-publish/src/config/index.ts
@@ -0,0 +1 @@
+export * from './environment';
diff --git a/scripts/cli/dms-kit-publish/src/constants/packages.ts b/scripts/cli/dms-kit-publish/src/constants/packages.ts
new file mode 100644
index 000000000..2c3cd69e2
--- /dev/null
+++ b/scripts/cli/dms-kit-publish/src/constants/packages.ts
@@ -0,0 +1,34 @@
+import * as path from 'path';
+import type { PackageConfig } from '../types/index';
+
+// 项目根目录
+const projectRoot = path.join(__dirname, '..', '..', '..', '..', '..');
+
+// 包配置列表
+export const packages: PackageConfig[] = [
+ {
+ dir: 'icons',
+ distDir: path.join(projectRoot, 'packages', 'icons', 'docs-dist'),
+ changelogPath: path.join(
+ projectRoot,
+ 'packages',
+ 'icons',
+ 'docs',
+ 'CHANGELOG.md'
+ )
+ },
+ {
+ dir: 'dms-kit',
+ distDir: path.join(projectRoot, 'packages', 'dms-kit', 'docs-dist'),
+ changelogPath: path.join(
+ projectRoot,
+ 'packages',
+ 'dms-kit',
+ 'docs',
+ 'CHANGELOG.md'
+ )
+ }
+];
+
+// 导出项目根目录
+export { projectRoot };
diff --git a/scripts/cli/dms-kit-publish/src/index.ts b/scripts/cli/dms-kit-publish/src/index.ts
new file mode 100644
index 000000000..b0e57e892
--- /dev/null
+++ b/scripts/cli/dms-kit-publish/src/index.ts
@@ -0,0 +1,18 @@
+/**
+ * DMS UI 部署脚本入口文件
+ *
+ * 功能:
+ * 1. 从 package.json 中获取对应包名称和版本
+ * 2. [包]@[版本]未发布时,发布包
+ * 3. 构建文档和部署文档
+ * 4. 推送 tag
+ *
+ * 使用方法:
+ * - 正常部署: node dist/index.js
+ * - 重试文档部署触发: node dist/index.js --retry-deploy-trigger
+ */
+
+import { DmsKitPublish } from './services/deploy';
+
+// 启动部署流程
+new DmsKitPublish().start();
diff --git a/scripts/cli/dms-kit-publish/src/services/deploy.ts b/scripts/cli/dms-kit-publish/src/services/deploy.ts
new file mode 100644
index 000000000..8d89a75ec
--- /dev/null
+++ b/scripts/cli/dms-kit-publish/src/services/deploy.ts
@@ -0,0 +1,847 @@
+import * as fs from 'fs';
+import * as path from 'path';
+import { Client as ftpClient } from 'basic-ftp';
+import { execa } from 'execa';
+import { Octokit } from '@octokit/rest';
+import { config, ENV, RETRY_DEPLOY_TRIGGER } from '../config/index';
+import { packages, projectRoot } from '../constants/packages';
+import {
+ ErrorCode,
+ DeployError,
+ PackageInfo,
+ ZipFileInfo
+} from '../types/index';
+import {
+ stepLog,
+ successLog,
+ errorLog,
+ warnLog,
+ infoLog
+} from '../utils/logger';
+import { getChangelogForVersion } from '../utils/changelog';
+import { compressFolder } from '../utils/compress';
+import { VersionValidator } from './validator';
+import { NotificationService } from './notification';
+import axios from 'axios';
+
+/**
+ * DMS UI 部署主类
+ * 负责整个部署流程的协调和执行
+ */
+export class DmsKitPublish {
+ private pkgs: PackageInfo[] = [];
+ private cwd = projectRoot;
+ private validator = new VersionValidator();
+ private notificationService = new NotificationService();
+ private currentPhase: 'preparation' | 'publishing' = 'preparation';
+
+ /**
+ * 启动部署流程
+ */
+ async start() {
+ const startTime = Date.now();
+ let zipFiles: ZipFileInfo[] = [];
+ try {
+ // 如果是重试部署触发模式
+ if (RETRY_DEPLOY_TRIGGER) {
+ infoLog('\n========================================');
+ infoLog(' 重试部署触发模式');
+ infoLog('========================================\n');
+
+ await this.retryDeployTrigger();
+
+ const duration = ((Date.now() - startTime) / 1000).toFixed(2);
+ successLog(`\n部署触发完成 (耗时: ${duration}s)`);
+ process.exit(0);
+ }
+
+ infoLog('\n========================================');
+ infoLog(' 准备阶段');
+ infoLog('========================================\n');
+
+ // 验证必需的环境变量
+ this.validateEnvironmentVariables();
+
+ stepLog('获取包信息');
+ await this.loadPkgInfo();
+
+ if (!this.pkgs.length) {
+ infoLog('未找到有效的包信息');
+ return;
+ }
+
+ // 验证 FTP 连接
+ await this.validateFtpConnection();
+
+ // 构建文档
+ await this.buildDocs();
+
+ // 压缩文档
+ zipFiles = await this.compressDocs();
+
+ infoLog('\n========================================');
+ infoLog(' 发布阶段');
+ infoLog('========================================\n');
+
+ // 进入发布阶段
+ this.currentPhase = 'publishing';
+
+ // 发布包
+ await this.publishPkg();
+
+ // 创建并推送 Git tags
+ await this.createGitTags();
+
+ // 上传文档
+ await this.uploadDocs(zipFiles);
+
+ // 触发文档部署
+ await this.triggerDocsDeploy(zipFiles);
+
+ // 清理临时文件
+ this.cleanupTempFiles(zipFiles);
+
+ // stepLog('步骤3: 推送版本标签');
+ // 没有 github token 暂不推送
+ // await this.setGitRegistryTag();
+
+ const duration = ((Date.now() - startTime) / 1000).toFixed(2);
+ successLog(`\n所有步骤执行完成 (耗时: ${duration}s)`);
+
+ // 发送成功通知
+ const notificationContent = `环境: ${ENV}
+
+执行步骤:
+ 1. ✓ 验证环境变量
+ 2. ✓ 获取包信息
+ 3. ✓ 验证 FTP 连接 (准备阶段)
+ 4. ✓ 构建文档 (准备阶段)
+ 5. ✓ 压缩文档 (准备阶段)
+ 6. ✓ 发布包 (发布阶段)
+ 7. ✓ 创建 Git Tags (发布阶段)
+ 8. ✓ 上传文档 (发布阶段)
+ 9. ✓ 触发文档部署 (发布阶段)
+
+包列表:
+${this.pkgs.map((p) => ` - ${p.name}@${p.version}`).join('\n')}
+
+Git Tags:
+${this.pkgs.map((p) => ` - ${p.dir}-v${p.version}`).join('\n')}
+
+总耗时: ${duration}s`;
+
+ await this.notificationService.sendEmailNotification(
+ '发布成功',
+ notificationContent
+ );
+
+ process.exit(0);
+ } catch (error) {
+ const duration = ((Date.now() - startTime) / 1000).toFixed(2);
+
+ // 发送失败通知
+ const errorMessage =
+ error instanceof Error ? error.message : String(error);
+ await this.notificationService.sendEmailNotification(
+ '发布失败',
+ `环境: ${ENV}\n错误信息:\n${errorMessage}\n耗时: ${duration}s`,
+ true
+ );
+
+ this.handleError(error);
+ }
+ }
+
+ /**
+ * 验证必需的环境变量
+ */
+ private validateEnvironmentVariables() {
+ const requiredVars: Array<{ name: string; value: any; env: string[] }> = [
+ { name: 'NPM_REGISTRY', value: config.pnpm.registry, env: ['all'] },
+ { name: 'FTP_HOST', value: config.ftpServer.host, env: ['all'] },
+ {
+ name: 'FTP_USER',
+ value: config.ftpServer.user,
+ env: ['production']
+ },
+ {
+ name: 'FTP_PASSWORD',
+ value: config.ftpServer.password,
+ env: ['production']
+ },
+ { name: 'GITHUB_TOKEN', value: config.githubApi.token, env: ['all'] }
+ ];
+
+ const missing: string[] = [];
+
+ for (const varCheck of requiredVars) {
+ if (
+ varCheck.env.includes('all') ||
+ varCheck.env.includes(ENV.toLowerCase())
+ ) {
+ if (!varCheck.value || varCheck.value === '') {
+ missing.push(varCheck.name);
+ }
+ }
+ }
+
+ if (missing.length > 0) {
+ throw new DeployError(
+ ErrorCode.ENV_VAR_MISSING,
+ `缺少必需的环境变量: ${missing.join(', ')}`,
+ { missing }
+ );
+ }
+
+ successLog('环境变量检查通过');
+ }
+
+ /**
+ * 重试部署触发
+ */
+ private async retryDeployTrigger() {
+ stepLog('读取包信息');
+
+ // 从 package.json 读取所有包的信息
+ const allPackages: PackageInfo[] = [];
+ 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;
+
+ allPackages.push({
+ ...pkg,
+ name,
+ version
+ });
+
+ infoLog(` 读取包信息: ${name}@${version}`);
+ } catch (error: any) {
+ warnLog(`跳过包 ${pkg.dir}: ${error.message}`);
+ }
+ }
+
+ if (allPackages.length === 0) {
+ throw new Error('未找到任何包信息');
+ }
+
+ // 连接 FTP 检查哪些版本已上传
+ stepLog('检查 FTP 服务器上的文件');
+ const ftp = new ftpClient();
+ const existingPackages: PackageInfo[] = [];
+
+ try {
+ await ftp.access(config.ftpServer);
+ const list = await ftp.list(config.ftpDir);
+
+ for (const pkg of allPackages) {
+ const zipFileName = `${pkg.dir}-v${pkg.version}.zip`;
+ const exists = list.some((file) => file.name === zipFileName);
+
+ if (exists) {
+ existingPackages.push(pkg);
+ successLog(` 找到已上传文件: ${zipFileName}`);
+ } else {
+ warnLog(` 未找到文件: ${zipFileName}`);
+ }
+ }
+ } catch (error: any) {
+ throw new DeployError(ErrorCode.FTP_UPLOAD_FAILED, 'FTP 连接失败', {
+ originalError: error.message
+ });
+ } finally {
+ ftp.close();
+ }
+
+ if (existingPackages.length === 0) {
+ throw new Error('FTP 服务器上未找到任何已上传的文档包');
+ }
+
+ // 构建 zipFiles 信息
+ const zipFiles: ZipFileInfo[] = existingPackages.map((pkg) => ({
+ pkg,
+ zipPath: path.join(this.cwd, `${pkg.dir}-v${pkg.version}.zip`)
+ }));
+
+ // 触发文档部署
+ stepLog('触发文档部署');
+ await this.triggerDocsDeploy(zipFiles);
+
+ successLog(`成功触发 ${existingPackages.length} 个包的文档部署`);
+ }
+
+ /**
+ * 加载包信息并验证
+ */
+ private async loadPkgInfo() {
+ 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;
+
+ // 验证版本号格式
+ if (!this.validator.validateFormat(version)) {
+ throw new DeployError(
+ ErrorCode.VERSION_INVALID,
+ `版本号格式不正确: ${version}`
+ );
+ }
+
+ // 验证版本号递增
+ const shouldPublish = await this.validator.validateIncrement(
+ name,
+ version
+ );
+
+ if (shouldPublish) {
+ // 验证 CHANGELOG
+ this.validator.validateChangelog(pkg.changelogPath, version);
+
+ this.pkgs.push({
+ ...pkg,
+ name,
+ version
+ });
+
+ successLog(`包信息加载成功: ${name}@${version}`);
+ }
+ } catch (error: any) {
+ throw new DeployError(
+ ErrorCode.PKG_LOAD_FAILED,
+ `加载包信息失败: ${pkg.dir}`,
+ { originalError: error.message }
+ );
+ }
+ }
+ }
+
+ /**
+ * 发布包到 npm 仓库
+ */
+ 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) {
+ infoLog(`包 ${pkg.name}@${pkg.version} 已发布,跳过发布步骤`);
+ continue;
+ }
+
+ try {
+ stepLog(`发布包 ${pkg.name}@${pkg.version}`);
+ if (pkg.dir === 'icons') {
+ await execa(
+ 'node',
+ [
+ 'publish-icons.mjs',
+ '--skip-confirm',
+ '--registry',
+ config.pnpm.registry,
+ '--auth',
+ config.pnpm.auth
+ ],
+ {
+ cwd: path.join(this.cwd, 'packages', 'icons')
+ }
+ );
+ continue;
+ }
+ const pkgPath = path.join(this.cwd, 'packages', pkg.dir);
+
+ // 设置 npm 认证
+ await execa('pnpm', ['config', 'set', config.pnpm.auth], {
+ cwd: pkgPath
+ });
+
+ // 发布包
+ await execa(
+ 'pnpm',
+ ['publish', '--registry', config.pnpm.registry, '--no-git-checks'],
+ {
+ cwd: pkgPath
+ }
+ );
+
+ successLog(`包 ${pkg.name}@${pkg.version} 发布成功`);
+ } catch (error: any) {
+ throw new DeployError(
+ ErrorCode.NPM_PUBLISH_FAILED,
+ `包 ${pkg.name}@${pkg.version} 发布失败`,
+ { originalError: error.message }
+ );
+ }
+ }
+ }
+
+ /**
+ * 创建并推送 Git Tags
+ */
+ private async createGitTags() {
+ stepLog('创建并推送 Git Tags');
+
+ // 初始化 Octokit 实例
+ const octokit = new Octokit({
+ auth: config.githubApi.token
+ });
+
+ try {
+ // 1. 获取当前分支的最新 commit SHA
+ const { data: refData } = await octokit.git.getRef({
+ owner: config.githubApi.owner,
+ repo: config.githubApi.repo,
+ ref: 'heads/main'
+ });
+
+ const commitSha = refData.object.sha;
+ infoLog(` 当前 commit SHA: ${commitSha}`);
+
+ // 2. 为每个包创建 tag
+ for (const pkg of this.pkgs) {
+ const tagName = `${pkg.dir}-v${pkg.version}`;
+
+ try {
+ // 检查 tag 是否已存在
+ try {
+ await octokit.git.getRef({
+ owner: config.githubApi.owner,
+ repo: config.githubApi.repo,
+ ref: `tags/${tagName}`
+ });
+ infoLog(` Tag ${tagName} 已存在,跳过创建`);
+ continue;
+ } catch (error: any) {
+ // tag 不存在,继续创建
+ if (error.status !== 404) {
+ throw error;
+ }
+ }
+
+ // 3. 创建 tag 对象
+ const { data: tagData } = await octokit.git.createTag({
+ owner: config.githubApi.owner,
+ repo: config.githubApi.repo,
+ tag: tagName,
+ message: `Release ${pkg.name}@${pkg.version}`,
+ object: commitSha,
+ type: 'commit'
+ });
+
+ // 4. 创建 tag 引用
+ await octokit.git.createRef({
+ owner: config.githubApi.owner,
+ repo: config.githubApi.repo,
+ ref: `refs/tags/${tagName}`,
+ sha: tagData.sha
+ });
+
+ successLog(` Tag ${tagName} 创建成功`);
+ } catch (error: any) {
+ throw new DeployError(
+ ErrorCode.TAG_PUSH_FAILED,
+ `创建 tag ${tagName} 失败`,
+ {
+ originalError: error.message,
+ status: error.status
+ }
+ );
+ }
+ }
+
+ successLog('Git Tags 创建完成');
+ } catch (error: any) {
+ if (error instanceof DeployError) {
+ throw error;
+ }
+ throw new DeployError(ErrorCode.TAG_PUSH_FAILED, '获取 commit SHA 失败', {
+ originalError: error.message,
+ status: error.status
+ });
+ }
+ }
+
+ /**
+ * 构建文档
+ */
+ private async buildDocs() {
+ stepLog('构建文档');
+
+ for (const pkg of this.pkgs) {
+ stepLog(`构建文档: ${pkg.dir}`);
+
+ // icons 包特殊处理
+ 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.replace(
+ new RegExp(`/dms-docs`, 'g'),
+ `/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)
+ });
+
+ // 验证构建产物
+ if (!fs.existsSync(pkg.distDir)) {
+ throw new DeployError(
+ ErrorCode.DOCS_BUILD_FAILED,
+ `构建产物不存在: ${pkg.distDir}`
+ );
+ }
+
+ successLog(`文档构建完成: ${pkg.dir}`);
+ } catch (error: any) {
+ throw new DeployError(
+ ErrorCode.DOCS_BUILD_FAILED,
+ `文档构建失败: ${pkg.dir}`,
+ { originalError: error.message }
+ );
+ } finally {
+ // 恢复原始配置
+ fs.writeFileSync(dumiConfigPath, originalConfig);
+ }
+ }
+ }
+
+ /**
+ * 压缩文档
+ */
+ private async compressDocs(): Promise {
+ stepLog('压缩文档');
+
+ const zipFiles: ZipFileInfo[] = [];
+
+ for (const pkg of this.pkgs) {
+ const zipFileName = `${pkg.dir}-v${pkg.version}.zip`;
+ const zipPath = path.join(this.cwd, zipFileName);
+
+ await compressFolder(pkg.distDir, zipPath);
+
+ // 验证压缩文件
+ const stats = fs.statSync(zipPath);
+ infoLog(` ${pkg.dir}: ${(stats.size / 1024 / 1024).toFixed(2)} MB`);
+
+ zipFiles.push({ pkg, zipPath });
+ }
+
+ successLog('文档压缩完成');
+ return zipFiles;
+ }
+
+ /**
+ * 确保 FTP 目录存在(递归创建)
+ */
+ private async ensureFtpDir(ftp: ftpClient, dirPath: string): Promise {
+ infoLog(` 正在确保 FTP 目录存在: ${dirPath}`);
+
+ try {
+ // 尝试使用 basic-ftp 的 ensureDir 方法,它会自动递归创建目录
+ await ftp.ensureDir(dirPath);
+ infoLog(` FTP 目录已准备就绪: ${dirPath}`);
+ } catch (error: any) {
+ throw new Error(`确保 FTP 目录失败 ${dirPath}: ${error.message}`);
+ }
+ }
+
+ /**
+ * 验证 FTP 连接
+ */
+ private async validateFtpConnection(): Promise {
+ stepLog('验证 FTP 连接');
+ const ftp = new ftpClient();
+ const testFileName = '.test_write_permission';
+ const testFilePath = path.join(config.ftpDir, testFileName);
+ const tempTestFile = path.join(this.cwd, testFileName);
+
+ try {
+ await ftp.access(config.ftpServer);
+
+ // 确保目录存在(递归创建)
+ await this.ensureFtpDir(ftp, config.ftpDir);
+
+ // 创建临时测试文件
+ fs.writeFileSync(tempTestFile, 'test');
+
+ // 测试写权限
+ const testStream = fs.createReadStream(tempTestFile);
+ await ftp.uploadFrom(testStream, testFilePath);
+ await ftp.remove(testFilePath);
+
+ successLog('FTP 连接验证通过');
+ } catch (error: any) {
+ throw new DeployError(
+ ErrorCode.FTP_UPLOAD_FAILED,
+ `FTP 连接验证失败,请检查服务器配置\n目标目录: ${config.ftpDir}`,
+ { originalError: error.message }
+ );
+ } finally {
+ ftp.close();
+ // 清理本地临时文件
+ if (fs.existsSync(tempTestFile)) {
+ fs.unlinkSync(tempTestFile);
+ }
+ }
+ }
+
+ /**
+ * 上传文档到 FTP
+ */
+ private async uploadDocs(zipFiles: ZipFileInfo[]) {
+ stepLog('上传文档到 FTP');
+ const ftp = new ftpClient();
+
+ try {
+ await ftp.access(config.ftpServer);
+
+ // 确保目录存在(递归创建)
+ await this.ensureFtpDir(ftp, config.ftpDir);
+
+ for (const { zipPath } of zipFiles) {
+ const zipFileName = path.basename(zipPath);
+
+ // 检查文档是否已部署
+ let isDeployed = false;
+ try {
+ const list = await ftp.list(config.ftpDir);
+ isDeployed = list.some((file) => file.name === zipFileName);
+ } catch {
+ isDeployed = false;
+ }
+
+ if (isDeployed) {
+ infoLog(` ${zipFileName} 已存在,跳过上传`);
+ continue;
+ }
+
+ // 上传
+ const readStream = fs.createReadStream(zipPath);
+ await ftp.uploadFrom(readStream, path.join(config.ftpDir, zipFileName));
+
+ successLog(` ${zipFileName} 上传成功`);
+ }
+
+ successLog('文档上传完成');
+ } catch (error: any) {
+ throw new DeployError(ErrorCode.FTP_UPLOAD_FAILED, 'FTP 上传失败', {
+ originalError: error.message
+ });
+ } finally {
+ ftp.close();
+ }
+ }
+
+ /**
+ * 触发文档部署
+ */
+ private async triggerDocsDeploy(zipFiles: ZipFileInfo[]) {
+ const packageList = zipFiles.map(({ pkg, zipPath }) => ({
+ filepath: path.join(config.ftpDir, path.basename(zipPath)),
+ name: pkg.name,
+ version: pkg.version,
+ changelog: getChangelogForVersion(pkg.changelogPath, pkg.version)
+ }));
+
+ if (packageList.length === 0) {
+ infoLog('没有需要部署的文档');
+ return;
+ }
+
+ stepLog('发送文档部署请求');
+ try {
+ await axios.post(
+ `${config.robotSDK.baseUrl}/v1/doc-management/dmp-kit-deploy`,
+ {
+ package_list: packageList,
+ project_id: config.githubApi.projectId
+ },
+ {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }
+ );
+ successLog('文档部署请求发送成功');
+ } catch (error: any) {
+ if (RETRY_DEPLOY_TRIGGER) {
+ // 在重试模式下,抛出错误
+ throw new DeployError(
+ ErrorCode.NOTIFICATION_FAILED,
+ '文档部署请求发送失败',
+ { originalError: error.message }
+ );
+ } else {
+ // 在正常流程中,只警告不中断
+ warnLog('文档部署请求发送失败,但不影响主流程');
+ errorLog(error.message);
+ warnLog('\n💡 提示: 如需重试文档部署触发,可使用参数:');
+ infoLog('--retry-deploy-trigger\n');
+ }
+ }
+ }
+
+ /**
+ * 清理临时文件
+ */
+ private cleanupTempFiles(zipFiles: ZipFileInfo[]) {
+ for (const { zipPath } of zipFiles) {
+ if (fs.existsSync(zipPath)) {
+ fs.unlinkSync(zipPath);
+ }
+ }
+ infoLog('临时文件清理完成');
+ }
+
+ /**
+ * 错误处理
+ */
+ private handleError(error: any) {
+ infoLog('\n');
+ errorLog('========================================');
+ errorLog(' 部署失败');
+ errorLog('========================================\n');
+
+ // 根据阶段显示不同的提示
+ if (this.currentPhase === 'preparation') {
+ warnLog('⚠️ 当前处于准备阶段,未发布任何包');
+ warnLog(' 可以修复问题后直接重新运行脚本\n');
+ } else {
+ warnLog('⚠️ 当前处于发布阶段');
+ warnLog(' 部分包可能已发布,可重新运行脚本继续未完成的步骤\n');
+ }
+
+ if (error instanceof DeployError) {
+ errorLog(`错误代码: ${error.code}`);
+ errorLog(`错误信息: ${error.message}`);
+
+ // 根据错误类型提供解决方案
+ switch (error.code) {
+ case ErrorCode.ENV_VAR_MISSING:
+ infoLog('\n解决方案:');
+ infoLog(' 1. 检查 .env 文件配置');
+ infoLog(' 2. 确认 GoCD 中的环境变量配置');
+ infoLog(' 3. 参考 .env.example 文件');
+ break;
+
+ case ErrorCode.VERSION_INVALID:
+ infoLog('\n解决方案:');
+ infoLog(' 1. 检查 package.json 中的版本号格式');
+ infoLog(' 2. 确保版本号大于当前已发布版本');
+ infoLog(' 3. 遵循语义化版本规范 (semver)');
+ break;
+
+ case ErrorCode.CHANGELOG_MISSING:
+ infoLog('\n解决方案:');
+ infoLog(' 1. 在 CHANGELOG.md 中添加对应版本的更新说明');
+ infoLog(' 2. 格式: ## 版本号');
+ break;
+
+ case ErrorCode.NPM_PUBLISH_FAILED:
+ infoLog('\n可能的原因:');
+ infoLog(' 1. npm 认证信息过期');
+ infoLog(' 2. 版本号已存在');
+ infoLog(' 3. 网络连接问题');
+ infoLog('\n解决方案:');
+ infoLog(' - 检查 NPM_AUTH 环境变量');
+ infoLog(' - 确认版本号是否已更新');
+ break;
+
+ case ErrorCode.DOCS_BUILD_FAILED:
+ infoLog('\n可能的原因:');
+ infoLog(' 1. 依赖未安装');
+ infoLog(' 2. 文档配置错误');
+ infoLog(' 3. 文档源文件有语法错误');
+ infoLog('\n解决方案:');
+ infoLog(' - 运行 pnpm install');
+ infoLog(' - 检查 .dumirc.ts 配置');
+ infoLog(' - 本地运行 pnpm docs:build 测试');
+ break;
+
+ case ErrorCode.FTP_UPLOAD_FAILED:
+ infoLog('\n可能的原因:');
+ infoLog(' 1. FTP 服务器连接失败');
+ infoLog(' 2. 认证失败');
+ infoLog(' 3. 磁盘空间不足');
+ infoLog('\n解决方案:');
+ infoLog(' - 检查 FTP 服务器状态');
+ infoLog(' - 验证 FTP 账号密码');
+ infoLog(' - 测试 FTP 连接: ftp ' + config.ftpServer.host);
+ break;
+
+ case ErrorCode.TAG_PUSH_FAILED:
+ infoLog('\n可能的原因:');
+ infoLog(' 1. GITHUB_TOKEN 环境变量未设置或无效');
+ infoLog(' 2. Token 权限不足(需要 repo 或 public_repo 权限)');
+ infoLog(' 3. 网络连接问题');
+ infoLog(' 4. Tag 已存在(可能是并发创建导致)');
+ infoLog(' 5. 指定的分支不存在(默认为 main)');
+ infoLog('\n解决方案:');
+ infoLog(' - 检查 GITHUB_TOKEN 环境变量是否正确设置');
+ infoLog(
+ ' - 确认 Token 具有 repo 权限(Settings > Developer settings > Personal access tokens)'
+ );
+ infoLog(' - 验证仓库地址和分支名称是否正确');
+ infoLog(' - 检查网络连接是否正常');
+ infoLog(' - 如果 Tag 已存在,可以忽略此错误');
+ break;
+ }
+
+ if (error.details) {
+ infoLog('\n详细信息:');
+ infoLog(JSON.stringify(error.details, null, 2));
+ }
+ } else {
+ errorLog(`未知错误: ${error.message || String(error)}`);
+ if (error.stack) {
+ errorLog(error.stack);
+ }
+ }
+
+ errorLog('\n========================================\n');
+ process.exit(1);
+ }
+}
diff --git a/scripts/cli/dms-kit-publish/src/services/notification.ts b/scripts/cli/dms-kit-publish/src/services/notification.ts
new file mode 100644
index 000000000..a9add3b9a
--- /dev/null
+++ b/scripts/cli/dms-kit-publish/src/services/notification.ts
@@ -0,0 +1,84 @@
+import nodemailer from 'nodemailer';
+import { config, ENV } from '../config/index';
+
+/**
+ * 通知服务
+ * 负责发送邮件通知(未来可扩展为飞书通知)
+ * TODO: 目前不会配置邮件通知,后续应该会调整为 feishu 通知,修改 robot 服务来配合消息推送
+ */
+export class NotificationService {
+ private transporter?: nodemailer.Transporter;
+
+ constructor() {
+ if (config.email) {
+ this.transporter = nodemailer.createTransport({
+ host: config.email.host,
+ port: config.email.port,
+ secure: config.email.secure,
+ auth: config.email.auth
+ });
+ }
+ }
+
+ /**
+ * 发送邮件通知
+ * @param subject 邮件主题
+ * @param content 邮件内容
+ * @param isError 是否为错误通知
+ */
+ async sendEmailNotification(
+ subject: string,
+ content: string,
+ isError = false
+ ): Promise {
+ if (!this.transporter || !config.email) {
+ console.log('邮件通知未配置,跳过发送');
+ return;
+ }
+
+ try {
+ const html = `
+
+
+
+
+
+
+
+
+
+
+
+ `;
+
+ await this.transporter.sendMail({
+ from: config.email.from,
+ to: config.email.to,
+ subject: `[DMS-UI] ${subject}`,
+ html
+ });
+
+ console.log('邮件通知发送成功');
+ } catch (error: any) {
+ console.error('邮件通知发送失败:', error.message);
+ // 不抛出错误,避免影响主流程
+ }
+ }
+}
diff --git a/scripts/cli/dms-kit-publish/src/services/validator.ts b/scripts/cli/dms-kit-publish/src/services/validator.ts
new file mode 100644
index 000000000..756b17e5f
--- /dev/null
+++ b/scripts/cli/dms-kit-publish/src/services/validator.ts
@@ -0,0 +1,97 @@
+import * as fs from 'fs';
+import { execa } from 'execa';
+import semver from 'semver';
+import { config } from '../config/index';
+import { ErrorCode, DeployError } from '../types/index';
+import { successLog, warnLog } from '../utils/logger';
+
+/**
+ * 版本校验器
+ * 负责验证版本号格式、递增和 CHANGELOG 一致性
+ */
+export class VersionValidator {
+ /**
+ * 验证版本号格式
+ * @param version 版本号
+ * @returns 是否有效
+ */
+ validateFormat(version: string): boolean {
+ return semver.valid(version) !== null;
+ }
+
+ /**
+ * 验证版本号递增
+ * @param pkgName 包名
+ * @param newVersion 新版本号
+ * @returns 是否应该发布(版本号大于当前版本)
+ */
+ async validateIncrement(
+ pkgName: string,
+ newVersion: string
+ ): Promise {
+ try {
+ console.log(config.pnpm.registry, 'config.pnpm.registry');
+ const { stdout } = await execa('pnpm', [
+ 'view',
+ pkgName,
+ 'version',
+ '--registry',
+ config.pnpm.registry
+ ]);
+
+ const currentVersion = stdout.trim();
+
+ // 比较版本号
+ if (semver.lt(newVersion, currentVersion)) {
+ throw new DeployError(
+ ErrorCode.VERSION_INVALID,
+ `新版本 ${newVersion} 必须大于当前版本 ${currentVersion}`
+ );
+ }
+
+ if (semver.eq(newVersion, currentVersion)) {
+ warnLog(
+ `包 ${pkgName} 版本 ${newVersion} 与已发布版本相同,将跳过发布。`
+ );
+ return false;
+ }
+
+ // 检查版本跳跃是否合理
+ const diff = semver.diff(currentVersion, newVersion);
+ if (diff === 'major') {
+ warnLog(`⚠️ 检测到主版本号升级: ${currentVersion} → ${newVersion}`);
+ warnLog(' 请确认这是一个包含破坏性更改的版本');
+ }
+
+ successLog(`版本号校验通过: ${currentVersion} → ${newVersion}`);
+ return true;
+ } catch (error: any) {
+ // 如果包还未发布,跳过检查
+ if (error.message && error.message.includes('404')) {
+ console.log(`包 ${pkgName} 首次发布`);
+ return true;
+ }
+ throw error;
+ }
+ }
+
+ /**
+ * 验证版本号与 CHANGELOG 一致
+ * @param changelogPath CHANGELOG 文件路径
+ * @param version 版本号
+ * @returns 是否一致
+ */
+ validateChangelog(changelogPath: string, version: string): boolean {
+ const content = fs.readFileSync(changelogPath, 'utf-8');
+ const hasVersion = new RegExp(`^## ${version}`, 'm').test(content);
+
+ if (!hasVersion) {
+ throw new DeployError(
+ ErrorCode.CHANGELOG_MISSING,
+ `CHANGELOG.md 中未找到版本 ${version} 的更新说明`
+ );
+ }
+
+ return true;
+ }
+}
diff --git a/scripts/cli/dms-kit-publish/src/types/config.ts b/scripts/cli/dms-kit-publish/src/types/config.ts
new file mode 100644
index 000000000..016e0e832
--- /dev/null
+++ b/scripts/cli/dms-kit-publish/src/types/config.ts
@@ -0,0 +1,34 @@
+// 环境配置接口
+export interface EnvironmentConfig {
+ pnpm: {
+ registry: string;
+ auth: string;
+ };
+ ftpServer: {
+ host: string;
+ user: string;
+ password: string;
+ };
+ ftpDir: string;
+ robotSDK: {
+ baseUrl: string;
+ };
+ githubApi: {
+ owner: string;
+ repo: string;
+ baseUrl: string;
+ projectId: number;
+ token: string;
+ };
+ email?: {
+ host: string;
+ port: number;
+ secure: boolean;
+ auth: {
+ user: string;
+ pass: string;
+ };
+ from: string;
+ to: string[];
+ };
+}
diff --git a/scripts/cli/dms-kit-publish/src/types/error.ts b/scripts/cli/dms-kit-publish/src/types/error.ts
new file mode 100644
index 000000000..0ab0ff9de
--- /dev/null
+++ b/scripts/cli/dms-kit-publish/src/types/error.ts
@@ -0,0 +1,20 @@
+// 错误代码枚举
+export enum ErrorCode {
+ ENV_VAR_MISSING = 'ENV_VAR_MISSING',
+ PKG_LOAD_FAILED = 'PKG_LOAD_FAILED',
+ VERSION_INVALID = 'VERSION_INVALID',
+ CHANGELOG_MISSING = 'CHANGELOG_MISSING',
+ NPM_PUBLISH_FAILED = 'NPM_PUBLISH_FAILED',
+ DOCS_BUILD_FAILED = 'DOCS_BUILD_FAILED',
+ FTP_UPLOAD_FAILED = 'FTP_UPLOAD_FAILED',
+ TAG_PUSH_FAILED = 'TAG_PUSH_FAILED',
+ NOTIFICATION_FAILED = 'NOTIFICATION_FAILED'
+}
+
+// 部署错误类
+export class DeployError extends Error {
+ constructor(public code: ErrorCode, message: string, public details?: any) {
+ super(message);
+ this.name = 'DeployError';
+ }
+}
diff --git a/scripts/cli/dms-kit-publish/src/types/index.ts b/scripts/cli/dms-kit-publish/src/types/index.ts
new file mode 100644
index 000000000..08159f96b
--- /dev/null
+++ b/scripts/cli/dms-kit-publish/src/types/index.ts
@@ -0,0 +1,4 @@
+// 统一导出所有类型定义
+export * from './error';
+export * from './config';
+export * from './package';
diff --git a/scripts/cli/dms-kit-publish/src/types/package.ts b/scripts/cli/dms-kit-publish/src/types/package.ts
new file mode 100644
index 000000000..5d614b2a2
--- /dev/null
+++ b/scripts/cli/dms-kit-publish/src/types/package.ts
@@ -0,0 +1,21 @@
+// 包信息接口
+export interface PackageInfo {
+ name: string;
+ version: string;
+ dir: string;
+ distDir: string;
+ changelogPath: string;
+}
+
+// 压缩文件信息接口
+export interface ZipFileInfo {
+ pkg: PackageInfo;
+ zipPath: string;
+}
+
+// 包配置接口
+export interface PackageConfig {
+ dir: string;
+ distDir: string;
+ changelogPath: string;
+}
diff --git a/scripts/cli/dms-kit-publish/src/utils/changelog.ts b/scripts/cli/dms-kit-publish/src/utils/changelog.ts
new file mode 100644
index 000000000..a420e8546
--- /dev/null
+++ b/scripts/cli/dms-kit-publish/src/utils/changelog.ts
@@ -0,0 +1,42 @@
+import * as fs from 'fs';
+
+/**
+ * 从 CHANGELOG.md 中提取指定版本的更新内容
+ * @param changelogPath CHANGELOG.md 文件路径
+ * @param version 版本号
+ * @returns 版本的更新内容
+ */
+export function getChangelogForVersion(
+ changelogPath: string,
+ version: string
+): 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/cli/dms-kit-publish/src/utils/compress.ts b/scripts/cli/dms-kit-publish/src/utils/compress.ts
new file mode 100644
index 000000000..5714dcab9
--- /dev/null
+++ b/scripts/cli/dms-kit-publish/src/utils/compress.ts
@@ -0,0 +1,25 @@
+import * as fs from 'fs';
+import * as path from 'path';
+import archiver from 'archiver';
+
+/**
+ * 压缩文件夹为 zip 文件
+ * @param sourceDir 源文件夹路径
+ * @param outputZipPath 输出 zip 文件路径
+ */
+export function 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();
+ });
+}
diff --git a/scripts/cli/dms-kit-publish/src/utils/logger.ts b/scripts/cli/dms-kit-publish/src/utils/logger.ts
new file mode 100644
index 000000000..862cd45bf
--- /dev/null
+++ b/scripts/cli/dms-kit-publish/src/utils/logger.ts
@@ -0,0 +1,8 @@
+import chalk from 'chalk';
+
+// 日志工具函数
+export const stepLog = (msg: string) => console.log(chalk.magenta(`>> ${msg}`));
+export const successLog = (msg: string) => console.log(chalk.green(msg));
+export const errorLog = (msg: string) => console.log(chalk.red(msg));
+export const warnLog = (msg: string) => console.log(chalk.yellow(msg));
+export const infoLog = (msg: string) => console.log(chalk.cyan(msg));
diff --git a/scripts/cli/dms-kit-publish/tsconfig.json b/scripts/cli/dms-kit-publish/tsconfig.json
new file mode 100644
index 000000000..af9c7a141
--- /dev/null
+++ b/scripts/cli/dms-kit-publish/tsconfig.json
@@ -0,0 +1,106 @@
+{
+ "compilerOptions": {
+ /* Visit https://aka.ms/tsconfig.json to read more about this file */
+
+ /* Projects */
+ // "incremental": true, /* Enable incremental compilation */
+ // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
+ // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */
+ // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */
+ // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
+ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
+
+ /* Language and Environment */
+ "target": "ES6" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
+ // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
+ // "jsx": "preserve", /* Specify what JSX code is generated. */
+ // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
+ // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
+ // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */
+ // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
+ // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */
+ // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */
+ // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
+ // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
+
+ /* Modules */
+ "module": "CommonJS" /* Specify what module code is generated. */,
+ "rootDir": "./src" /* Specify the root folder within your source files. */,
+ "moduleResolution": "Node" /* Specify how TypeScript looks up a file from a given module specifier. */,
+ "baseUrl": "./" /* Specify the base directory to resolve non-relative module names. */,
+ // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
+ // "rootDirs": [
+ // "./src",
+ // "./package.json"
+ // ] /* Allow multiple folders to be treated as one when resolving modules. */,
+ // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */
+ // "types": [], /* Specify type package names to be included without being referenced in a source file. */
+ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
+ "resolveJsonModule": true /* Enable importing .json files */,
+ // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */
+
+ /* JavaScript Support */
+ "allowJs": true /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */,
+ // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
+ // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */
+
+ /* Emit */
+ // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
+ // "declarationMap": true, /* Create sourcemaps for d.ts files. */
+ // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
+ "sourceMap": true /* Create source map files for emitted JavaScript files. */,
+ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */
+ "outDir": "./dist" /* Specify an output folder for all emitted files. */,
+ // "removeComments": true, /* Disable emitting comments. */
+ // "noEmit": true, /* Disable emitting files from a compilation. */
+ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
+ // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */
+ // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
+ // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
+ // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
+ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
+ // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
+ // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
+ // "newLine": "crlf", /* Set the newline character for emitting files. */
+ // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */
+ // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */
+ // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
+ // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */
+ // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
+ // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
+
+ /* Interop Constraints */
+ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
+ // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
+ "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */,
+ // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
+ "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */,
+
+ /* Type Checking */
+ "strict": true /* Enable all strict type-checking options. */,
+ // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */
+ // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */
+ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
+ // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */
+ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
+ // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */
+ // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */
+ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
+ // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */
+ // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */
+ // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
+ // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
+ // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
+ // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
+ // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
+ // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */
+ // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
+ // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
+
+ /* Completeness */
+ "skipDefaultLibCheck": true /* Skip type checking .d.ts files that are included with TypeScript. */,
+ "skipLibCheck": true /* Skip type checking all .d.ts files. */
+ },
+ "exclude": ["node_modules", "dist", "./bin"],
+ "include": ["./src"]
+}