Skip to content

Commit fc04e06

Browse files
committed
TS: Allow .js extensions in cross package imports
1 parent 852b90a commit fc04e06

2 files changed

Lines changed: 9 additions & 12 deletions

File tree

javascript/extractor/lib/typescript/src/common.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { VirtualSourceRoot } from "./virtual_source_root";
77
* Extracts the package name from the prefix of an import string.
88
*/
99
const packageNameRex = /^(?:@[\w.-]+[/\\])?\w[\w.-]*(?=[/\\]|$)/;
10-
const extensions = ['.ts', '.tsx', '.d.ts'];
10+
const extensions = ['.ts', '.tsx', '.d.ts', '.js', '.jsx'];
1111

1212
export class Project {
1313
public program: ts.Program = null;

javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -728,7 +728,11 @@ protected DependencyInstallationResult installDependencies(Set<Path> filesToExtr
728728
// For named packages, find the main file.
729729
String name = getChildAsString(packageJson, "name");
730730
if (name != null) {
731-
Path entryPoint = guessPackageMainFile(path, packageJson);
731+
Path entryPoint = guessPackageMainFile(path, packageJson, FileType.TYPESCRIPT.getExtensions());
732+
if (entryPoint == null) {
733+
// Try a TypeScript-recognized JS extension instead
734+
entryPoint = guessPackageMainFile(path, packageJson, Arrays.asList(".js", ".jsx"));
735+
}
732736
if (entryPoint != null) {
733737
System.out.println(relativePath + ": Main file set to " + sourceRoot.relativize(entryPoint));
734738
packageMainFile.put(name, entryPoint);
@@ -788,12 +792,11 @@ protected DependencyInstallationResult installDependencies(Set<Path> filesToExtr
788792
* given package - that is, the file you get when importing the package by name
789793
* without any path suffix.
790794
*/
791-
private Path guessPackageMainFile(Path packageJsonFile, JsonObject packageJson) {
795+
private Path guessPackageMainFile(Path packageJsonFile, JsonObject packageJson, Iterable<String> extensions) {
792796
Path packageDir = packageJsonFile.getParent();
793797

794798
// Try <package_dir>/index.ts.
795-
// Do not allow JavaScript extensions at this point as it might be compiled output (will be attempted later).
796-
Path resolved = tryResolveWithExtensions(packageDir, "index", FileType.TYPESCRIPT.getExtensions());
799+
Path resolved = tryResolveWithExtensions(packageDir, "index", extensions);
797800
if (resolved != null) {
798801
return resolved;
799802
}
@@ -828,7 +831,7 @@ private Path guessPackageMainFile(Path packageJsonFile, JsonObject packageJson)
828831

829832
// Strip off extensions until a file can be found
830833
while (true) {
831-
resolved = tryResolveTypeScriptOrJavaScriptFile(sourceDir, candidatePath.toString());
834+
resolved = tryResolveWithExtensions(sourceDir, candidatePath.toString(), extensions);
832835
if (resolved != null) {
833836
return resolved;
834837
}
@@ -838,12 +841,6 @@ private Path guessPackageMainFile(Path packageJsonFile, JsonObject packageJson)
838841
}
839842
}
840843
}
841-
842-
// Try <package_dir>/index.js - this time allowing JS extension.
843-
resolved = tryResolveWithExtensions(packageDir, "index", FileType.JS.getExtensions());
844-
if (resolved != null) {
845-
return resolved;
846-
}
847844

848845
return resolved;
849846
}

0 commit comments

Comments
 (0)