Repository: TypeScript
Issue: `resolveJsonModule` doesn't copy source file when located within `node_modules` subdirectory
Labels: Bug

# Bug Report

<!--
  Please fill in each section completely. Thank you!
-->

### 🔎 Search Terms
resolveJsonModule json node_modules

<!--
  What search terms did you use when trying to find an existing bug report?
  List them here so people in the future can find this one more easily.
-->

### 🕗 Version & Regression Information
Version 4.2.4
macOS 11.3

The issue seems very old, at least TS v3.4 is also affected.

<!-- When did you start seeing this bug occur?

"Bugs" that have existed in TS for a long time are very likely to be FAQs; refer to
  https://github.com/Microsoft/TypeScript/wiki/FAQ#common-bugs-that-arent-bugs

If possible, please try testing the nightly version of TS to see if it's already been fixed.
For npm: `typescript@next`
This is also the 'Nightly' version in the playground: http://www.typescriptlang.org/play/?ts=Nightly

Note: The TypeScript Playground can be used to try older versions of TypeScript.

Please keep and fill in the line that best applies:
-->
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about tsconfig.json

### 💻 Code
`tsconfig.json`
```json
{
	"compilerOptions": {
		"baseUrl": "src",
		"rootDir": "src",
		"outDir": "dist",
		"resolveJsonModule": true,
	},
}
```

`src/index.ts`
```typescript
import * as json from './config.json';
```

`src/config.json`
```json
{}
```

### 🙁 Actual behavior
When I run `tsc` the output in `dist` contains `index.js` and `config.json`. This is good and expected. If any parent directory is named `node_modules` then the JSON file will no longer be copied. A full terminal session of this phenomenon is included below:

```log
marcel@marcel ~/tmp $ ls -lah
total 0
drwxr-xr-x   3 marcel  staff    96B May  4 02:22 .
drwxr-xr-x  84 marcel  staff   2.6K May  4 02:22 ..
drwxr-xr-x   4 marcel  staff   128B May  4 02:21 test

marcel@marcel ~/tmp $ cd test 

marcel@marcel ~/tmp/test $ ls -lah
total 8
drwxr-xr-x  4 marcel  staff   128B May  4 02:21 .
drwxr-xr-x  3 marcel  staff    96B May  4 02:22 ..
drwxr-xr-x  4 marcel  staff   128B May  4 02:13 src
-rw-r--r--  1 marcel  staff   119B May  4 02:14 tsconfig.json

marcel@marcel ~/tmp/test $ npx tsc

marcel@marcel ~/tmp/test $ cat dist/config.json 
{}

marcel@marcel ~/tmp/test $ cd ..

marcel@marcel ~/tmp $ mkdir node_modules

marcel@marcel ~/tmp $ mv test node_modules 

marcel@marcel ~/tmp $ cd node_modules/test 

marcel@marcel ~/tmp/node_modules/test $ rm -rf dist 

marcel@marcel ~/tmp/node_modules/test $ npx tsc

marcel@marcel ~/tmp/node_modules/test $ cat dist/config.json
cat: dist/config.json: No such file or directory

marcel@marcel ~/tmp/node_modules/test $ ls dist 
index.js
```

<!-- What happened, and why it was wrong -->

### 🙂 Expected behavior

<!-- What you expected to happen instead, and why -->
It is unexpected that the name of a parent directory would affect the compiler in this manner.

### Additional information
If I invoke the compiler with the `--traceResolution` option the output is almost exactly the same but an additional line is logged in the `node_modules` parent case. The full log follows and the additional line is annotated inline. This diagnostic message does *not* appear when `node_modules` is found in the parent hierarchy.

```
======== Resolving module './config.json' from '/Users/marcel/tmp/node_modules/hello/test/src/index.ts'. ========
Module resolution kind is not specified, using 'NodeJs'.
Loading module as file / folder, candidate module location '/Users/marcel/tmp/node_modules/hello/test/src/config.json', target file type 'TypeScript'.
File '/Users/marcel/tmp/node_modules/hello/test/src/config.json.ts' does not exist.
File '/Users/marcel/tmp/node_modules/hello/test/src/config.json.tsx' does not exist.
File '/Users/marcel/tmp/node_modules/hello/test/src/config.json.d.ts' does not exist.
Directory '/Users/marcel/tmp/node_modules/hello/test/src/config.json' does not exist, skipping all lookups in it.
Loading module as file / folder, candidate module location '/Users/marcel/tmp/node_modules/hello/test/src/config.json', target file type 'JavaScript'.
File '/Users/marcel/tmp/node_modules/hello/test/src/config.json.js' does not exist.
File '/Users/marcel/tmp/node_modules/hello/test/src/config.json.jsx' does not exist.
Directory '/Users/marcel/tmp/node_modules/hello/test/src/config.json' does not exist, skipping all lookups in it.
Loading module as file / folder, candidate module location '/Users/marcel/tmp/node_modules/hello/test/src/config.json', target file type 'Json'.
File '/Users/marcel/tmp/node_modules/hello/test/src/config.json' exist - use it as a name resolution result.
File '/Users/marcel/tmp/node_modules/hello/package.json' does not exist.
  ^----- THIS LINE IS ADDED
======== Module name './config.json' was successfully resolved to '/Users/marcel/tmp/node_modules/hello/test/src/config.json'. ========
```