From 9c1c9ce3bdf97575a4c5952406f29bf55343b0c1 Mon Sep 17 00:00:00 2001 From: Andrew Bradley Date: Sun, 8 Aug 2021 17:59:14 -0400 Subject: [PATCH] gracefully handle error when @types/node is not installed (#1422) --- src/resolver-functions.ts | 41 +++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/src/resolver-functions.ts b/src/resolver-functions.ts index d52f09851..e76528155 100644 --- a/src/resolver-functions.ts +++ b/src/resolver-functions.ts @@ -137,23 +137,30 @@ export function createResolverFunctions(kwargs: { ); if (typeDirectiveName === 'node' && !resolvedTypeReferenceDirective) { // Resolve @types/node relative to project first, then __dirname (copy logic from elsewhere / refactor into reusable function) - const typesNodePackageJsonPath = require.resolve( - '@types/node/package.json', - { - paths: [configFilePath ?? cwd, __dirname], - } - ); - const typeRoots = [resolve(typesNodePackageJsonPath, '../..')]; - ({ resolvedTypeReferenceDirective } = ts.resolveTypeReferenceDirective( - typeDirectiveName, - containingFile, - { - ...config.options, - typeRoots, - }, - serviceHost, - redirectedReference - )); + let typesNodePackageJsonPath: string | undefined; + try { + typesNodePackageJsonPath = require.resolve( + '@types/node/package.json', + { + paths: [configFilePath ?? cwd, __dirname], + } + ); + } catch {} // gracefully do nothing when @types/node is not installed for any reason + if (typesNodePackageJsonPath) { + const typeRoots = [resolve(typesNodePackageJsonPath, '../..')]; + ({ + resolvedTypeReferenceDirective, + } = ts.resolveTypeReferenceDirective( + typeDirectiveName, + containingFile, + { + ...config.options, + typeRoots, + }, + serviceHost, + redirectedReference + )); + } } if (resolvedTypeReferenceDirective) { fixupResolvedModule(resolvedTypeReferenceDirective);