From 69413786b70d760db6d820f7c8d77f9e00745882 Mon Sep 17 00:00:00 2001 From: Leonardo Ortiz Date: Tue, 3 Jun 2025 17:48:55 -0300 Subject: [PATCH 1/2] npm list fallback, increase timeout to 60s --- src/frameworks/constants.ts | 2 +- src/frameworks/utils.ts | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/frameworks/constants.ts b/src/frameworks/constants.ts index b3d6e754082..b98584e0f2e 100644 --- a/src/frameworks/constants.ts +++ b/src/frameworks/constants.ts @@ -2,7 +2,7 @@ import { SupportLevel } from "./interfaces"; import * as clc from "colorette"; import * as experiments from "../experiments"; -export const NPM_COMMAND_TIMEOUT_MILLIES = 10_000; +export const NPM_COMMAND_TIMEOUT_MILLIES = 60_000; export const SupportLevelWarnings = { [SupportLevel.Experimental]: (framework: string) => `Thank you for trying our ${clc.italic( diff --git a/src/frameworks/utils.ts b/src/frameworks/utils.ts index 19e3414cbb9..2ee5339099c 100644 --- a/src/frameworks/utils.ts +++ b/src/frameworks/utils.ts @@ -1,4 +1,4 @@ -import { readJSON as originalReadJSON } from "fs-extra"; +import { readJSON as originalReadJSON, readJsonSync } from "fs-extra"; import type { ReadOptions } from "fs-extra"; import { dirname, extname, join, relative } from "path"; import { readFile } from "fs/promises"; @@ -290,8 +290,14 @@ export function findDependency(name: string, options: Partial = { cwd, env, timeout: NPM_COMMAND_TIMEOUT_MILLIES }, ); if (!result.stdout) return; - const json = JSON.parse(result.stdout.toString()); - return scanDependencyTree(name, json.dependencies); + try { + const json = JSON.parse(result.stdout.toString()); + return scanDependencyTree(name, json.dependencies); + } catch (e) { + // fallback to reading the version directly from package.json if npm list times out + const packageJson = readJsonSync(join(cwd, name, "package.json"), { throws: false }); + return packageJson?.version ? { version: packageJson.version } : undefined; + } } export function relativeRequire( From 907df84a5d930664ef60d750e07364c7aed205d3 Mon Sep 17 00:00:00 2001 From: Leonardo Ortiz Date: Wed, 4 Jun 2025 10:53:08 -0300 Subject: [PATCH 2/2] changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 84291c9e32b..27d5e10d859 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,3 +5,5 @@ - Always setup Data Connect SDK when FDC_CONNECTOR env var is set. - `firebase init` now uses FIREBASE_PROJECT env var as the default project name. - Add emulator support to firestore MCP tools. (#8700) +- Increased npm timeout for web frameworks to 60s. (#8702) +- Fallback to reading web framework dependencies version directly from node_modules package.json when the npm timeout is reached. (#8702)