diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index f0770a01..3ba681ab 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -20,8 +20,6 @@ jobs: steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 - with: - version: 8 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: @@ -48,11 +46,9 @@ jobs: steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 - with: - version: 8 - uses: actions/setup-node@v4 with: - node-version: 18.x + node-version: 20.x - run: pnpm i --no-frozen-lockfile - run: pnpm run lint @@ -61,11 +57,9 @@ jobs: steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 - with: - version: 8 - uses: actions/setup-node@v4 with: - node-version: 18.x + node-version: 20.x - run: pnpm i --no-frozen-lockfile - run: pnpm run build-mod # Upload build to artifacts diff --git a/package.json b/package.json index 11d5cdbb..672fabe8 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "root", "private": true, "files": [], + "packageManager": "pnpm@10.28.1+sha512.7d7dbbca9e99447b7c3bf7a73286afaaf6be99251eb9498baefa7d406892f67b879adb3a1d7e687fc4ccc1a388c7175fbaae567a26ab44d1067b54fcb0d6a316", "scripts": { "build": "tsc --build", "watch": "tsc --build --watch", @@ -27,7 +28,7 @@ ] }, "engines": { - "node": ">=18" + "node": ">=20" }, "workspaces": [ "packages/*", diff --git a/packages/controller/package.json b/packages/controller/package.json index 67ef8494..9f350bd6 100644 --- a/packages/controller/package.json +++ b/packages/controller/package.json @@ -17,45 +17,45 @@ "factorio" ], "engines": { - "node": ">=18" + "node": ">=20" }, "dependencies": { "@clusterio/lib": "workspace:*", - "@sinclair/typebox": "^0.30.4", + "@sinclair/typebox": "catalog:", + "set-blocking": "catalog:", + "jsonwebtoken": "catalog:", + "express": "catalog:", + "fs-extra": "catalog:", + "ws": "catalog:", + "jszip": "catalog:", + "winston": "catalog:", + "winston-daily-rotate-file": "catalog:", "busboy": "^1.6.0", "compression": "^1.8.0", - "express": "^4.21.2", "finalhandler": "^1.3.1", - "fs-extra": "^11.3.0", - "jsonwebtoken": "^9.0.1", - "jszip": "^3.10.1", - "set-blocking": "^2.0.0", - "winston": "^3.17.0", - "winston-daily-rotate-file": "^4.7.1", - "ws": "^8.18.1", "yargs": "^17.7.2" }, "devDependencies": { "@clusterio/web_ui": "workspace:*", - "@swc/core": "^1.13.3", - "@types/busboy": "^1.5.0", - "@types/compression": "^1.7.2", - "@types/express": "^4.17.17", - "@types/finalhandler": "^1.2.0", - "@types/fs-extra": "^11.0.1", - "@types/jsonwebtoken": "^9.0.9", - "@types/node": "^20.17.19", - "@types/set-blocking": "^2.0.0", - "@types/ws": "^8.5.14", + "@types/jsonwebtoken": "catalog:", + "@types/set-blocking": "catalog:", + "@types/finalhandler": "catalog:", + "@types/express": "catalog:", + "@types/fs-extra": "catalog:", + "@types/node": "catalog:", + "@types/ws": "catalog:", "@types/yargs": "^17.0.33", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-router-dom": "^6.29.0", - "typescript": "^5.7.3", - "webpack": "^5.98.0", - "webpack-cli": "^5.1.4", - "webpack-dev-middleware": "^6.1.1", - "webpack-merge": "^5.9.0" + "@types/compression": "^1.7.2", + "@types/busboy": "^1.5.0", + "@swc/core": "catalog:", + "react": "catalog:", + "react-dom": "catalog:", + "react-router-dom": "catalog:", + "typescript": "catalog:", + "webpack": "catalog:", + "webpack-cli": "catalog:", + "webpack-merge": "catalog:", + "webpack-dev-middleware": "^6.1.1" }, "publishConfig": { "access": "public" diff --git a/packages/create/package.json b/packages/create/package.json index da1cdd54..b26a0e45 100644 --- a/packages/create/package.json +++ b/packages/create/package.json @@ -13,11 +13,11 @@ "factorio" ], "engines": { - "node": ">=18" + "node": ">=20" }, "dependencies": { - "chalk": "^4.1.2", - "fs-extra": "^11.3.0", + "chalk": "catalog:", + "fs-extra": "catalog:", "inquirer": "^8.2.4", "yargs": "^17.7.2" }, diff --git a/packages/create/templates/common/package.json b/packages/create/templates/common/package.json index b4ffa659..0e01b9d7 100644 --- a/packages/create/templates/common/package.json +++ b/packages/create/templates/common/package.json @@ -15,6 +15,18 @@ "node": "__node_version__" }, "peerDependencies": { +//%if controller + "@clusterio/controller": "^__clusterio_version__", +//%endif +//%if webpack + "@clusterio/web_ui": "^__clusterio_version__", +//%endif +//%if host + "@clusterio/host": "^__clusterio_version__", +//%endif +//%if ctl + "@clusterio/ctl": "^__clusterio_version__", +//%endif "@clusterio/lib": "^__clusterio_version__" }, "devDependencies": { @@ -36,7 +48,18 @@ "webpack": "^5.88.2", "webpack-cli": "^5.1.4", "webpack-merge": "^5.9.0", +//%endif +//%if controller + "@clusterio/controller": "^__clusterio_version__", +//%endif +//%if webpack "@clusterio/web_ui": "^__clusterio_version__", +//%endif +//%if host + "@clusterio/host": "^__clusterio_version__", +//%endif +//%if ctl + "@clusterio/ctl": "^__clusterio_version__", //%endif "@clusterio/lib": "^__clusterio_version__" }, diff --git a/packages/ctl/package.json b/packages/ctl/package.json index 3f5d67b7..af4819ed 100644 --- a/packages/ctl/package.json +++ b/packages/ctl/package.json @@ -17,25 +17,25 @@ "factorio" ], "engines": { - "node": ">=18" + "node": ">=20" }, "dependencies": { "@clusterio/lib": "workspace:*", + "set-blocking": "catalog:", + "fs-extra": "catalog:", + "winston": "catalog:", + "phin": "catalog:", "as-table": "^1.0.55", - "fs-extra": "^11.3.0", - "phin": "^3.7.0", - "set-blocking": "^2.0.0", - "winston": "^3.17.0", "yargs": "^17.7.2" }, "publishConfig": { "access": "public" }, "devDependencies": { - "@types/fs-extra": "^11.0.1", - "@types/node": "^20.17.19", - "@types/set-blocking": "^2.0.0", + "@types/fs-extra": "catalog:", + "@types/node": "catalog:", + "@types/set-blocking": "catalog:", "@types/yargs": "^17.0.33", - "typescript": "^5.7.3" + "typescript": "catalog:" } } diff --git a/packages/host/package.json b/packages/host/package.json index 6fe78bed..638f1501 100644 --- a/packages/host/package.json +++ b/packages/host/package.json @@ -18,33 +18,33 @@ "factorio" ], "engines": { - "node": ">=18" + "node": ">=20" }, "dependencies": { "@clusterio/lib": "workspace:*", - "@sinclair/typebox": "^0.30.4", - "fs-extra": "^11.3.0", + "@sinclair/typebox": "catalog:", + "set-blocking": "catalog:", + "fs-extra": "catalog:", + "jszip": "catalog:", + "phin": "catalog:", + "winston": "catalog:", + "winston-daily-rotate-file": "catalog:", "jimp": "^0.22.8", - "jszip": "^3.10.1", - "phin": "^3.7.0", "pidusage": "^3.0.2", "rcon-client": "^4.2.5", "semver": "^7.7.1", - "set-blocking": "^2.0.0", - "winston": "^3.17.0", - "winston-daily-rotate-file": "^4.7.1", "yargs": "^17.7.2" }, "publishConfig": { "access": "public" }, "devDependencies": { - "@types/fs-extra": "^11.0.1", - "@types/node": "^20.17.19", + "@types/node": "catalog:", + "@types/fs-extra": "catalog:", + "@types/set-blocking": "catalog:", "@types/pidusage": "^2.0.2", "@types/semver": "^7.5.0", - "@types/set-blocking": "^2.0.0", "@types/yargs": "^17.0.33", - "typescript": "^5.7.3" + "typescript": "catalog:" } } diff --git a/packages/lib/package.json b/packages/lib/package.json index 187ac1eb..74e4f560 100644 --- a/packages/lib/package.json +++ b/packages/lib/package.json @@ -18,30 +18,30 @@ "node": ">=12" }, "dependencies": { - "@sinclair/typebox": "^0.30.4", - "ajv": "^8.17.1", - "chalk": "^4.1.2", + "@sinclair/typebox": "catalog:", + "set-blocking": "catalog:", + "fs-extra": "catalog:", + "jszip": "catalog:", + "chalk": "catalog:", + "ws": "catalog:", + "winston": "catalog:", + "winston-transport": "catalog:", "fast-deep-equal": "^3.1.3", - "fs-extra": "^11.3.0", - "jszip": "^3.10.1", - "klaw": "^4.1.0", - "set-blocking": "^2.0.0", "triple-beam": "^1.4.1", - "winston": "^3.17.0", - "winston-transport": "^4.9.0", - "ws": "^8.18.1", + "ajv": "^8.17.1", + "klaw": "^4.1.0", "yargs": "^17.7.2" }, "publishConfig": { "access": "public" }, "devDependencies": { - "@types/fs-extra": "^11.0.1", - "@types/node": "^20.17.19", - "@types/set-blocking": "^2.0.0", + "@types/fs-extra": "catalog:", + "@types/node": "catalog:", + "@types/ws": "catalog:", + "@types/set-blocking": "catalog:", "@types/triple-beam": "^1.3.2", - "@types/ws": "^8.5.14", "@types/yargs": "^17.0.33", - "typescript": "^5.7.3" + "typescript": "catalog:" } } diff --git a/plugins/global_chat/package.json b/plugins/global_chat/package.json index f5f56e4d..14f0f38d 100644 --- a/plugins/global_chat/package.json +++ b/plugins/global_chat/package.json @@ -20,25 +20,30 @@ "url": "https://github.com/clusterio/clusterio/issues" }, "engines": { - "node": ">=18" + "node": ">=20" }, "peerDependencies": { + "@clusterio/web_ui": "workspace:*", + "@clusterio/host": "workspace:*", + "@clusterio/ctl": "workspace:*", "@clusterio/lib": "workspace:*" }, + "dependencies": { + "@sinclair/typebox": "catalog:" + }, "devDependencies": { - "@clusterio/lib": "workspace:*", "@clusterio/web_ui": "workspace:*", - "@types/node": "^20.17.19", - "@types/react": "^18.3.18", - "typescript": "^5.7.3", - "webpack": "^5.98.0", - "webpack-cli": "^5.1.4", - "webpack-merge": "^5.9.0" + "@clusterio/host": "workspace:*", + "@clusterio/ctl": "workspace:*", + "@clusterio/lib": "workspace:*", + "@types/node": "catalog:", + "@types/react": "catalog:", + "typescript": "catalog:", + "webpack": "catalog:", + "webpack-cli": "catalog:", + "webpack-merge": "catalog:" }, "publishConfig": { "access": "public" - }, - "dependencies": { - "@sinclair/typebox": "^0.30.4" } } diff --git a/plugins/global_chat/tsconfig.node.json b/plugins/global_chat/tsconfig.node.json index ce0e013f..24bc1d0a 100644 --- a/plugins/global_chat/tsconfig.node.json +++ b/plugins/global_chat/tsconfig.node.json @@ -2,6 +2,8 @@ "extends": "../../tsconfig.node.json", "references": [ { "path": "../../packages/lib/tsconfig.node.json" }, + { "path": "../../packages/host/tsconfig.node.json" }, + { "path": "../../packages/ctl/tsconfig.node.json" }, ], "include": ["./**/*.ts"], "exclude": ["test/*", "./dist/*"], diff --git a/plugins/inventory_sync/package.json b/plugins/inventory_sync/package.json index dc715c09..73e69188 100644 --- a/plugins/inventory_sync/package.json +++ b/plugins/inventory_sync/package.json @@ -20,28 +20,33 @@ "url": "https://github.com/clusterio/factorioClusterio/issues" }, "engines": { - "node": ">=18" + "node": ">=20" }, "peerDependencies": { + "@clusterio/controller": "workspace:*", + "@clusterio/web_ui": "workspace:*", + "@clusterio/host": "workspace:*", "@clusterio/lib": "workspace:*" }, "dependencies": { - "@sinclair/typebox": "^0.30.4", - "fs-extra": "^8.1.0" + "@sinclair/typebox": "catalog:", + "fs-extra": "catalog:" }, "devDependencies": { - "@clusterio/lib": "workspace:*", + "@clusterio/controller": "workspace:*", "@clusterio/web_ui": "workspace:*", - "@types/fs-extra": "^11.0.1", - "@types/node": "^20.17.19", - "@types/react": "^18.3.18", - "antd": "^5.24.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "typescript": "^5.7.3", - "webpack": "^5.98.0", - "webpack-cli": "^5.1.4", - "webpack-merge": "^5.9.0" + "@clusterio/host": "workspace:*", + "@clusterio/lib": "workspace:*", + "@types/fs-extra": "catalog:", + "@types/node": "catalog:", + "@types/react": "catalog:", + "antd": "catalog:", + "react": "catalog:", + "react-dom": "catalog:", + "typescript": "catalog:", + "webpack": "catalog:", + "webpack-cli": "catalog:", + "webpack-merge": "catalog:" }, "publishConfig": { "access": "public" diff --git a/plugins/inventory_sync/tsconfig.node.json b/plugins/inventory_sync/tsconfig.node.json index ce0e013f..55d31e46 100644 --- a/plugins/inventory_sync/tsconfig.node.json +++ b/plugins/inventory_sync/tsconfig.node.json @@ -2,6 +2,8 @@ "extends": "../../tsconfig.node.json", "references": [ { "path": "../../packages/lib/tsconfig.node.json" }, + { "path": "../../packages/host/tsconfig.node.json" }, + { "path": "../../packages/controller/tsconfig.node.json" }, ], "include": ["./**/*.ts"], "exclude": ["test/*", "./dist/*"], diff --git a/plugins/player_auth/package.json b/plugins/player_auth/package.json index 955430fd..358f04c4 100644 --- a/plugins/player_auth/package.json +++ b/plugins/player_auth/package.json @@ -20,30 +20,35 @@ "url": "https://github.com/clusterio/clusterio/issues" }, "engines": { - "node": ">=18" + "node": ">=20" }, "peerDependencies": { + "@clusterio/controller": "workspace:*", + "@clusterio/web_ui": "workspace:*", + "@clusterio/host": "workspace:*", "@clusterio/lib": "workspace:*" }, "dependencies": { - "@sinclair/typebox": "^0.30.4", - "express": "^4.21.2", - "jsonwebtoken": "^9.0.1" + "@sinclair/typebox": "catalog:", + "jsonwebtoken": "catalog:", + "express": "catalog:" }, "devDependencies": { - "@clusterio/lib": "workspace:*", + "@clusterio/controller": "workspace:*", "@clusterio/web_ui": "workspace:*", - "@types/express": "^4.17.17", - "@types/jsonwebtoken": "^9.0.9", - "@types/node": "^20.17.19", - "@types/react": "^18.3.18", - "antd": "^5.24.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "typescript": "^5.7.3", - "webpack": "^5.98.0", - "webpack-cli": "^5.1.4", - "webpack-merge": "^5.9.0" + "@clusterio/host": "workspace:*", + "@clusterio/lib": "workspace:*", + "@types/express": "catalog:", + "@types/jsonwebtoken": "catalog:", + "@types/node": "catalog:", + "@types/react": "catalog:", + "antd": "catalog:", + "react": "catalog:", + "react-dom": "catalog:", + "typescript": "catalog:", + "webpack": "catalog:", + "webpack-cli": "catalog:", + "webpack-merge": "catalog:" }, "publishConfig": { "access": "public" diff --git a/plugins/player_auth/tsconfig.node.json b/plugins/player_auth/tsconfig.node.json index ce0e013f..55d31e46 100644 --- a/plugins/player_auth/tsconfig.node.json +++ b/plugins/player_auth/tsconfig.node.json @@ -2,6 +2,8 @@ "extends": "../../tsconfig.node.json", "references": [ { "path": "../../packages/lib/tsconfig.node.json" }, + { "path": "../../packages/host/tsconfig.node.json" }, + { "path": "../../packages/controller/tsconfig.node.json" }, ], "include": ["./**/*.ts"], "exclude": ["test/*", "./dist/*"], diff --git a/plugins/research_sync/package.json b/plugins/research_sync/package.json index 0c64aaf1..29704b02 100644 --- a/plugins/research_sync/package.json +++ b/plugins/research_sync/package.json @@ -20,25 +20,30 @@ "url": "https://github.com/clusterio/clusterio/issues" }, "engines": { - "node": ">=18" + "node": ">=20" }, "peerDependencies": { + "@clusterio/controller": "workspace:*", + "@clusterio/web_ui": "workspace:*", + "@clusterio/host": "workspace:*", "@clusterio/lib": "workspace:*" }, "dependencies": { - "@sinclair/typebox": "^0.30.4", - "fs-extra": "^8.1.0" + "@sinclair/typebox": "catalog:", + "fs-extra": "catalog:" }, "devDependencies": { - "@clusterio/lib": "workspace:*", + "@clusterio/controller": "workspace:*", "@clusterio/web_ui": "workspace:*", - "@types/fs-extra": "^11.0.1", - "@types/node": "^20.17.19", - "@types/react": "^18.3.18", - "typescript": "^5.7.3", - "webpack": "^5.98.0", - "webpack-cli": "^5.1.4", - "webpack-merge": "^5.9.0" + "@clusterio/host": "workspace:*", + "@clusterio/lib": "workspace:*", + "@types/fs-extra": "catalog:", + "@types/node": "catalog:", + "@types/react": "catalog:", + "typescript": "catalog:", + "webpack": "catalog:", + "webpack-cli": "catalog:", + "webpack-merge": "catalog:" }, "publishConfig": { "access": "public" diff --git a/plugins/research_sync/tsconfig.node.json b/plugins/research_sync/tsconfig.node.json index ce0e013f..55d31e46 100644 --- a/plugins/research_sync/tsconfig.node.json +++ b/plugins/research_sync/tsconfig.node.json @@ -2,6 +2,8 @@ "extends": "../../tsconfig.node.json", "references": [ { "path": "../../packages/lib/tsconfig.node.json" }, + { "path": "../../packages/host/tsconfig.node.json" }, + { "path": "../../packages/controller/tsconfig.node.json" }, ], "include": ["./**/*.ts"], "exclude": ["test/*", "./dist/*"], diff --git a/plugins/statistics_exporter/package.json b/plugins/statistics_exporter/package.json index 2fe688e6..683cf207 100644 --- a/plugins/statistics_exporter/package.json +++ b/plugins/statistics_exporter/package.json @@ -20,20 +20,23 @@ "url": "https://github.com/clusterio/clusterio/issues" }, "engines": { - "node": ">=18" + "node": ">=20" }, "peerDependencies": { + "@clusterio/web_ui": "workspace:*", + "@clusterio/host": "workspace:*", "@clusterio/lib": "workspace:*" }, "devDependencies": { - "@clusterio/lib": "workspace:*", "@clusterio/web_ui": "workspace:*", - "@types/node": "^20.17.19", - "@types/react": "^18.3.18", - "typescript": "^5.7.3", - "webpack": "^5.98.0", - "webpack-cli": "^5.1.4", - "webpack-merge": "^5.9.0" + "@clusterio/host": "workspace:*", + "@clusterio/lib": "workspace:*", + "@types/node": "catalog:", + "@types/react": "catalog:", + "typescript": "catalog:", + "webpack": "catalog:", + "webpack-cli": "catalog:", + "webpack-merge": "catalog:" }, "publishConfig": { "access": "public" diff --git a/plugins/statistics_exporter/tsconfig.node.json b/plugins/statistics_exporter/tsconfig.node.json index ce0e013f..48c9d359 100644 --- a/plugins/statistics_exporter/tsconfig.node.json +++ b/plugins/statistics_exporter/tsconfig.node.json @@ -2,6 +2,7 @@ "extends": "../../tsconfig.node.json", "references": [ { "path": "../../packages/lib/tsconfig.node.json" }, + { "path": "../../packages/host/tsconfig.node.json" }, ], "include": ["./**/*.ts"], "exclude": ["test/*", "./dist/*"], diff --git a/plugins/subspace_storage/package.json b/plugins/subspace_storage/package.json index 4b7f4cd7..63187fe0 100644 --- a/plugins/subspace_storage/package.json +++ b/plugins/subspace_storage/package.json @@ -20,29 +20,34 @@ "url": "https://github.com/clusterio/clusterio/issues" }, "engines": { - "node": ">=18" + "node": ">=20" }, "peerDependencies": { + "@clusterio/controller": "workspace:*", + "@clusterio/web_ui": "workspace:*", + "@clusterio/host": "workspace:*", "@clusterio/lib": "workspace:*" }, "dependencies": { - "@sinclair/typebox": "^0.30.4", - "fs-extra": "^8.1.0" + "@sinclair/typebox": "catalog:", + "fs-extra": "catalog:" }, "devDependencies": { - "@clusterio/lib": "workspace:*", + "@clusterio/controller": "workspace:*", "@clusterio/web_ui": "workspace:*", - "@types/express": "^4.17.17", - "@types/fs-extra": "^11.0.1", - "@types/node": "^20.17.19", - "@types/react": "^18.3.18", - "antd": "^5.24.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "typescript": "^5.7.3", - "webpack": "^5.98.0", - "webpack-cli": "^5.1.4", - "webpack-merge": "^5.9.0" + "@clusterio/host": "workspace:*", + "@clusterio/lib": "workspace:*", + "@types/express": "catalog:", + "@types/fs-extra": "catalog:", + "@types/node": "catalog:", + "@types/react": "catalog:", + "antd": "catalog:", + "react": "catalog:", + "react-dom": "catalog:", + "typescript": "catalog:", + "webpack": "catalog:", + "webpack-cli": "catalog:", + "webpack-merge": "catalog:" }, "publishConfig": { "access": "public" diff --git a/plugins/subspace_storage/tsconfig.node.json b/plugins/subspace_storage/tsconfig.node.json index ce0e013f..55d31e46 100644 --- a/plugins/subspace_storage/tsconfig.node.json +++ b/plugins/subspace_storage/tsconfig.node.json @@ -2,6 +2,8 @@ "extends": "../../tsconfig.node.json", "references": [ { "path": "../../packages/lib/tsconfig.node.json" }, + { "path": "../../packages/host/tsconfig.node.json" }, + { "path": "../../packages/controller/tsconfig.node.json" }, ], "include": ["./**/*.ts"], "exclude": ["test/*", "./dist/*"], diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 64d14f73..29bc79e4 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -5,4 +5,36 @@ packages: - "external_plugins/*/*" - "test/" +catalog: + "@types/node": ^20.17.19 + "@types/fs-extra": ^11.0.1 + "@types/express": ^4.17.17 + "@types/finalhandler": ^1.2.0 + "@types/jsonwebtoken": ^9.0.9 + "@types/set-blocking": ^2.0.0 + "@types/react": ^18.3.18 + "@types/ws": ^8.5.14 + "@sinclair/typebox": ^0.30.4 + "@swc/core": ^1.13.3 + "antd": ^5.24.2 + "react": ^18.2.0 + "react-dom": ^18.2.0 + "react-router-dom": ^6.29.0 + "typescript": ^5.7.3 + "webpack": ^5.98.0 + "webpack-cli": ^5.1.4 + "webpack-merge": ^5.9.0 + "fs-extra": ^8.1.0 + "express": ^5.1.0 + "winston": ^3.17.0 + "winston-transport": ^4.9.0 + "winston-daily-rotate-file": ^4.7.1 + "jsonwebtoken": ^9.0.2 + "set-blocking": ^2.0.0 + "jszip": ^3.10.1 + "chalk": ^4.1.2 + "phin": ^3.7.0 + "ws": ^8.18.1 + +catalogMode: strict linkWorkspacePackages: true