Skip to content

Commit a52e8f9

Browse files
committed
fix: improve isBareSpecifier and isRelativeSpecifier logic for better accuracy
1 parent d05a4a2 commit a52e8f9

2 files changed

Lines changed: 11 additions & 3 deletions

File tree

src/specifier.test.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,17 @@ describe("isRelativeSpecifier", () => {
3232
it("returns true for ./ and ../", () => {
3333
assert.ok(isRelativeSpecifier("./foo"));
3434
assert.ok(isRelativeSpecifier("../bar"));
35-
assert.ok(isRelativeSpecifier(".hidden"));
3635
});
3736

3837
it("returns true for absolute paths starting with /", () => {
3938
assert.ok(isRelativeSpecifier("/abs"));
4039
});
4140

41+
it("returns false for dot-prefixed names without slash", () => {
42+
assert.ok(!isRelativeSpecifier(".hidden"));
43+
assert.ok(!isRelativeSpecifier(".tsconfig.json"));
44+
});
45+
4246
it("returns false for bare specifiers and URLs", () => {
4347
assert.ok(!isRelativeSpecifier("react"));
4448
assert.ok(!isRelativeSpecifier("https://esm.sh/react"));

src/specifier.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import ts from "typescript";
22

33
export function isBareSpecifier(specifier: string): boolean {
4-
if (specifier.match(/^\.*\//)) return false;
4+
if (isRelativeSpecifier(specifier)) return false;
55

66
try {
77
new URL(specifier);
@@ -13,7 +13,11 @@ export function isBareSpecifier(specifier: string): boolean {
1313

1414
/* Helper to check if a specifier is relative, note that it includes both relative paths and absolute paths */
1515
export function isRelativeSpecifier(specifier: string): boolean {
16-
return specifier.startsWith(".") || specifier.startsWith("/");
16+
return (
17+
specifier.startsWith("./") ||
18+
specifier.startsWith("../") ||
19+
specifier.startsWith("/")
20+
);
1721
}
1822

1923
export function collectSpecifiers(sourceFile: ts.SourceFile): Set<string> {

0 commit comments

Comments
 (0)