From 88d98aadba2b2b92528e8f49c0926ad5d1553bbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hanu=C5=A1?= Date: Sun, 5 Jul 2026 00:51:24 +0200 Subject: [PATCH] fix(ts-templates): allow esbuild + unrs-resolver install scripts for tsx npm 11 introduced an allowlist gate for dependency lifecycle scripts. When a freshly scaffolded TypeScript template is installed with npm 11+, npm skips the postinstall scripts of `esbuild` (a transitive dependency of `tsx`) and `unrs-resolver`, printing: npm warn allow-scripts esbuild@... (postinstall: node install.js) npm warn allow-scripts unrs-resolver@... (postinstall: node postinstall.js) esbuild's postinstall is what downloads its native binary, so skipping it leaves `node_modules/esbuild/bin/esbuild` missing and any `tsx src/main.ts` run (including `npm start` / `apify run`) fails. The obvious remedy (`npm approve-scripts esbuild unrs-resolver`) does not work on a fresh install because the packages are not yet installed: npm error code ENOMATCH npm error No installed packages match: esbuild, unrs-resolver Declaring `trustedDependencies` in package.json opts these two packages into running their install scripts, which is exactly what a working `tsx` requires. This is applied to every `ts-*` template that ships `tsx`. Surfaced during an evaluation of Apify surfaces for agent-driven Actor development. Co-Authored-By: Claude Opus 4.7 --- templates/ts-beeai-agent/package.json | 4 ++++ templates/ts-bootstrap-cheerio-crawler/package.json | 4 ++++ templates/ts-crawlee-cheerio/package.json | 4 ++++ templates/ts-crawlee-playwright-camoufox/package.json | 4 ++++ templates/ts-crawlee-playwright-chrome/package.json | 4 ++++ templates/ts-crawlee-puppeteer-chrome/package.json | 4 ++++ templates/ts-empty/package.json | 4 ++++ templates/ts-mastraai/package.json | 4 ++++ templates/ts-mcp-empty/package.json | 4 ++++ templates/ts-mcp-proxy/package.json | 4 ++++ templates/ts-playwright-test-runner/package.json | 4 ++++ templates/ts-standby/package.json | 4 ++++ templates/ts-start-bun/package.json | 4 ++++ templates/ts-start/package.json | 4 ++++ 14 files changed, 56 insertions(+) diff --git a/templates/ts-beeai-agent/package.json b/templates/ts-beeai-agent/package.json index 7a3de23bb..6ac7d7d25 100644 --- a/templates/ts-beeai-agent/package.json +++ b/templates/ts-beeai-agent/package.json @@ -25,6 +25,10 @@ "typescript-eslint": "^8.60.0", "vitest": "^4.1.7" }, + "trustedDependencies": [ + "esbuild", + "unrs-resolver" + ], "scripts": { "start": "npm run start:dev", "start:prod": "node dist/main.js", diff --git a/templates/ts-bootstrap-cheerio-crawler/package.json b/templates/ts-bootstrap-cheerio-crawler/package.json index 40fc941d6..eb4310c5e 100644 --- a/templates/ts-bootstrap-cheerio-crawler/package.json +++ b/templates/ts-bootstrap-cheerio-crawler/package.json @@ -23,6 +23,10 @@ "typescript-eslint": "^8.58.0", "vitest": "^4.1.0" }, + "trustedDependencies": [ + "esbuild", + "unrs-resolver" + ], "scripts": { "start": "npm run start:dev", "start:prod": "node dist/main.js", diff --git a/templates/ts-crawlee-cheerio/package.json b/templates/ts-crawlee-cheerio/package.json index ff3b80e84..36f03c7b0 100644 --- a/templates/ts-crawlee-cheerio/package.json +++ b/templates/ts-crawlee-cheerio/package.json @@ -23,6 +23,10 @@ "typescript-eslint": "^8.58.0", "vitest": "^4.1.0" }, + "trustedDependencies": [ + "esbuild", + "unrs-resolver" + ], "scripts": { "start": "npm run start:dev", "start:prod": "node dist/main.js", diff --git a/templates/ts-crawlee-playwright-camoufox/package.json b/templates/ts-crawlee-playwright-camoufox/package.json index 15032bea0..dd3b50ef1 100644 --- a/templates/ts-crawlee-playwright-camoufox/package.json +++ b/templates/ts-crawlee-playwright-camoufox/package.json @@ -25,6 +25,10 @@ "typescript-eslint": "^8.58.0", "vitest": "^4.1.0" }, + "trustedDependencies": [ + "esbuild", + "unrs-resolver" + ], "scripts": { "start": "npm run start:dev", "start:prod": "node dist/main.js", diff --git a/templates/ts-crawlee-playwright-chrome/package.json b/templates/ts-crawlee-playwright-chrome/package.json index 3c6b8f628..989009011 100644 --- a/templates/ts-crawlee-playwright-chrome/package.json +++ b/templates/ts-crawlee-playwright-chrome/package.json @@ -24,6 +24,10 @@ "typescript-eslint": "^8.58.0", "vitest": "^4.1.0" }, + "trustedDependencies": [ + "esbuild", + "unrs-resolver" + ], "scripts": { "start": "npm run start:dev", "start:prod": "node dist/main.js", diff --git a/templates/ts-crawlee-puppeteer-chrome/package.json b/templates/ts-crawlee-puppeteer-chrome/package.json index a900e535e..e894743fa 100644 --- a/templates/ts-crawlee-puppeteer-chrome/package.json +++ b/templates/ts-crawlee-puppeteer-chrome/package.json @@ -24,6 +24,10 @@ "typescript-eslint": "^8.58.0", "vitest": "^4.1.0" }, + "trustedDependencies": [ + "esbuild", + "unrs-resolver" + ], "scripts": { "start": "npm run start:dev", "start:prod": "node dist/main.js", diff --git a/templates/ts-empty/package.json b/templates/ts-empty/package.json index 209367b16..e58b5a600 100644 --- a/templates/ts-empty/package.json +++ b/templates/ts-empty/package.json @@ -23,6 +23,10 @@ "typescript-eslint": "^8.58.0", "vitest": "^4.1.0" }, + "trustedDependencies": [ + "esbuild", + "unrs-resolver" + ], "scripts": { "start": "npm run start:dev", "start:prod": "node dist/main.js", diff --git a/templates/ts-mastraai/package.json b/templates/ts-mastraai/package.json index 35084fdf0..3b7148d69 100644 --- a/templates/ts-mastraai/package.json +++ b/templates/ts-mastraai/package.json @@ -26,6 +26,10 @@ "typescript-eslint": "^8.58.0", "vitest": "^4.1.0" }, + "trustedDependencies": [ + "esbuild", + "unrs-resolver" + ], "scripts": { "start": "npm run start:dev", "start:prod": "node dist/main.js", diff --git a/templates/ts-mcp-empty/package.json b/templates/ts-mcp-empty/package.json index d48535a70..b34008084 100644 --- a/templates/ts-mcp-empty/package.json +++ b/templates/ts-mcp-empty/package.json @@ -28,6 +28,10 @@ "typescript-eslint": "^8.58.0", "vitest": "^4.1.0" }, + "trustedDependencies": [ + "esbuild", + "unrs-resolver" + ], "scripts": { "start": "npm run start:dev", "start:prod": "node dist/main.js", diff --git a/templates/ts-mcp-proxy/package.json b/templates/ts-mcp-proxy/package.json index 9c449c725..357163ab3 100644 --- a/templates/ts-mcp-proxy/package.json +++ b/templates/ts-mcp-proxy/package.json @@ -30,6 +30,10 @@ "typescript-eslint": "^8.58.0", "vitest": "^4.1.0" }, + "trustedDependencies": [ + "esbuild", + "unrs-resolver" + ], "scripts": { "start": "npm run start:dev", "start:prod": "node dist/main.js", diff --git a/templates/ts-playwright-test-runner/package.json b/templates/ts-playwright-test-runner/package.json index 710ad2fa5..f63c738be 100644 --- a/templates/ts-playwright-test-runner/package.json +++ b/templates/ts-playwright-test-runner/package.json @@ -3,6 +3,10 @@ "version": "1.0.0", "description": "", "type": "module", + "trustedDependencies": [ + "esbuild", + "unrs-resolver" + ], "scripts": { "start": "npm run start:dev", "start:dev": "tsx src/main.ts", diff --git a/templates/ts-standby/package.json b/templates/ts-standby/package.json index 27f659ccd..c3a98e60a 100644 --- a/templates/ts-standby/package.json +++ b/templates/ts-standby/package.json @@ -22,6 +22,10 @@ "typescript-eslint": "^8.58.0", "vitest": "^4.1.0" }, + "trustedDependencies": [ + "esbuild", + "unrs-resolver" + ], "scripts": { "start": "npm run start:dev", "start:prod": "node dist/main.js", diff --git a/templates/ts-start-bun/package.json b/templates/ts-start-bun/package.json index 905f05a92..2123101ff 100644 --- a/templates/ts-start-bun/package.json +++ b/templates/ts-start-bun/package.json @@ -24,6 +24,10 @@ "typescript-eslint": "^8.58.0", "vitest": "^4.1.0" }, + "trustedDependencies": [ + "esbuild", + "unrs-resolver" + ], "scripts": { "start": "bun src/main.ts", "test": "vitest run" diff --git a/templates/ts-start/package.json b/templates/ts-start/package.json index 5f45eb940..41f378f30 100644 --- a/templates/ts-start/package.json +++ b/templates/ts-start/package.json @@ -24,6 +24,10 @@ "typescript-eslint": "^8.58.0", "vitest": "^4.1.0" }, + "trustedDependencies": [ + "esbuild", + "unrs-resolver" + ], "scripts": { "start": "npm run start:dev", "start:prod": "node dist/main.js",