Skip to content

Commit 0223be5

Browse files
committedNov 1, 2023
Start using virtual file paths for common imported extnames (resolves #322)
1 parent 6d35bb2 commit 0223be5

File tree

15 files changed

+36
-6
lines changed

15 files changed

+36
-6
lines changed
 

‎fixtures/unresolved/node_modules/@svg-icons/fa-brands/github.svg

Error rendering embedded code

Invalid image source.

‎fixtures/unresolved/node_modules/@svg-icons/fa-brands/index.js

Whitespace-only changes.

‎fixtures/unresolved/node_modules/@svg-icons/fa-brands/package.json

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎fixtures/unresolved/node_modules/@svg-icons/heroicons-outline/briefcase.svg

Error rendering embedded code

Invalid image source.

‎fixtures/unresolved/node_modules/@svg-icons/heroicons-outline/index.js

Whitespace-only changes.

‎fixtures/unresolved/node_modules/@svg-icons/heroicons-outline/package.json

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎fixtures/unresolved/package.json

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
{
22
"name": "@fixtures/unresolved",
3+
"dependencies": {
4+
"@svg-icons/fa-brands": "*",
5+
"@svg-icons/heroicons-outline": "*"
6+
},
37
"devDependencies": {
48
"style-loader": "*"
59
}

‎fixtures/unresolved/src/base.css

Whitespace-only changes.

‎fixtures/unresolved/src/common/image.svg

Error rendering embedded code

Invalid image source.

‎fixtures/unresolved/src/index.ts

+8
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,11 @@ import Styles from '-!style-loader!css-loader?modules!./styles.css';
88
import unresolved from './unresolved';
99
import unresolvedPkg from 'unresolved';
1010
import unresolvedOrg from '@org/unresolved';
11+
12+
import Github from '@svg-icons/fa-brands/github.svg';
13+
import Briefcase from '@svg-icons/heroicons-outline/briefcase.svg';
14+
15+
import SomeSVG from 'common/image.svg';
16+
17+
import './globals.css';
18+
import 'styles/base.css';

‎fixtures/unresolved/src/styles/base.css

Whitespace-only changes.

‎fixtures/unresolved/tsconfig.json

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"compilerOptions": {
3+
"baseUrl": ".",
4+
"paths": {
5+
"common/*": ["src/common/*"],
6+
"styles/*": ["src/styles/*"]
7+
}
8+
}
9+
}

‎src/ProjectPrincipal.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -200,16 +200,15 @@ export class ProjectPrincipal {
200200
}
201201
} else {
202202
const sanitizedSpecifier = sanitizeSpecifier(specifier);
203-
const ext = extname(sanitizedSpecifier);
204-
const hasIgnoredExtension = IGNORED_FILE_EXTENSIONS.includes(ext);
205-
if (!hasIgnoredExtension && isMaybePackageName(sanitizedSpecifier)) {
203+
if (isMaybePackageName(sanitizedSpecifier)) {
206204
// Should never end up here; maybe a dependency that was not installed.
207205
// Package name may contain such extensions, but any external dependency should be resolved by TS.
208206
external.add(sanitizedSpecifier);
209207
} else {
210208
const isIgnored = this.isGitIgnored(join(dirname(filePath), sanitizedSpecifier));
211209
if (!isIgnored) {
212210
const ext = extname(sanitizedSpecifier);
211+
const hasIgnoredExtension = IGNORED_FILE_EXTENSIONS.includes(ext);
213212
if (!ext || (ext !== '.json' && !hasIgnoredExtension)) {
214213
unresolvedImports.add(specifier);
215214
}

‎src/constants.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,11 @@ export const IGNORED_GLOBAL_BINARIES = [
4343

4444
export const IGNORED_DEPENDENCIES = ['knip', 'typescript'];
4545

46+
export const VIRTUAL_FILE_EXTENSIONS = ['.css', '.html', '.svg'];
47+
4648
export const IGNORED_FILE_EXTENSIONS = [
49+
...VIRTUAL_FILE_EXTENSIONS,
4750
'.avif',
48-
'.css',
4951
'.eot',
5052
'.gif',
5153
'.ico',
@@ -55,7 +57,6 @@ export const IGNORED_FILE_EXTENSIONS = [
5557
'.png',
5658
'.sass',
5759
'.scss',
58-
'.svg',
5960
'.sh',
6061
'.ttf',
6162
'.webp',

‎src/typescript/createHosts.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { EOL } from 'node:os';
22
// eslint-disable-next-line n/no-restricted-import
33
import path from 'node:path';
44
import ts from 'typescript';
5+
import { VIRTUAL_FILE_EXTENSIONS } from '../constants.js';
56
import { createCustomModuleResolver } from './resolveModuleNames.js';
67
import { SourceFileManager } from './SourceFileManager.js';
78
import { createCustomSys } from './sys.js';
@@ -20,7 +21,7 @@ const fileManager = new SourceFileManager();
2021

2122
export const createHosts = ({ cwd, compilerOptions, entryPaths, compilers }: CreateHostsOptions) => {
2223
fileManager.installCompilers(compilers);
23-
const virtualFileExtensions = [...compilers[0].keys(), ...compilers[1].keys()];
24+
const virtualFileExtensions = [...VIRTUAL_FILE_EXTENSIONS, ...compilers[0].keys(), ...compilers[1].keys()];
2425
const sys = createCustomSys(cwd, virtualFileExtensions);
2526
const resolveModuleNames = createCustomModuleResolver(sys, compilerOptions, virtualFileExtensions);
2627

0 commit comments

Comments
 (0)
Please sign in to comment.