Skip to content

Commit 105abe8

Browse files
Copilotsapphi-red
andauthored
fix(glob): handle glob imports from folders starting with dot (#20800)
Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: sapphi-red <[email protected]>
1 parent c095037 commit 105abe8

File tree

4 files changed

+21
-6
lines changed

4 files changed

+21
-6
lines changed

packages/vite/src/node/__tests__/plugins/importGlob/__snapshots__/fixture.spec.ts.snap

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
22

33
exports[`fixture > transform 1`] = `
4-
"import * as __vite_glob_3_0 from "./modules/a.ts";import * as __vite_glob_3_1 from "./modules/b.ts";import * as __vite_glob_3_2 from "./modules/index.ts";import * as __vite_glob_5_0 from "./modules/a.ts";import * as __vite_glob_5_1 from "./modules/b.ts";import * as __vite_glob_5_2 from "./modules/index.ts";import { name as __vite_glob_9_0 } from "./modules/a.ts";import { name as __vite_glob_9_1 } from "./modules/b.ts";import { name as __vite_glob_9_2 } from "./modules/index.ts";import { name as __vite_glob_11_0 } from "./modules/a.ts";import { name as __vite_glob_11_1 } from "./modules/b.ts";import { name as __vite_glob_11_2 } from "./modules/index.ts";import { default as __vite_glob_15_0 } from "./modules/a.ts?raw";import { default as __vite_glob_15_1 } from "./modules/b.ts?raw";import "types/importMeta";
4+
"import * as __vite_glob_3_0 from "./modules/a.ts";import * as __vite_glob_3_1 from "./modules/b.ts";import * as __vite_glob_3_2 from "./modules/index.ts";import * as __vite_glob_5_0 from "./modules/a.ts";import * as __vite_glob_5_1 from "./modules/b.ts";import * as __vite_glob_5_2 from "./modules/index.ts";import { name as __vite_glob_9_0 } from "./modules/a.ts";import { name as __vite_glob_9_1 } from "./modules/b.ts";import { name as __vite_glob_9_2 } from "./modules/index.ts";import { name as __vite_glob_11_0 } from "./modules/a.ts";import { name as __vite_glob_11_1 } from "./modules/b.ts";import { name as __vite_glob_11_2 } from "./modules/index.ts";import { default as __vite_glob_15_0 } from "./modules/a.ts?raw";import { default as __vite_glob_15_1 } from "./modules/b.ts?raw";import * as __vite_glob_28_0 from "./.foo/test.ts";import "types/importMeta";
55
export const basic = /* #__PURE__ */ Object.assign({"./modules/a.ts": () => import("./modules/a.ts"),"./modules/b.ts": () => import("./modules/b.ts"),"./modules/index.ts": () => import("./modules/index.ts")});
66
export const basicWithObjectKeys = Object.keys({"./modules/a.ts": 0,"./modules/b.ts": 0,"./modules/index.ts": 0});
77
export const basicWithObjectValues = Object.values([() => import("./modules/a.ts"),() => import("./modules/b.ts"),() => import("./modules/index.ts")]);
@@ -100,11 +100,12 @@ export const customRootBase = /* #__PURE__ */ Object.assign({"./a.ts": () => imp
100100
export const customBaseParent = /* #__PURE__ */ Object.assign({"../fixture-b/a.ts": () => import("/fixture-b/a.ts"),"../fixture-b/b.ts": () => import("/fixture-b/b.ts"),"../fixture-b/index.ts": () => import("/fixture-b/index.ts")
101101
102102
});
103+
export const dotFolder = /* #__PURE__ */ Object.assign({"./.foo/test.ts": __vite_glob_28_0});
103104
"
104105
`;
105106

106107
exports[`fixture > transform with restoreQueryExtension 1`] = `
107-
"import * as __vite_glob_3_0 from "./modules/a.ts";import * as __vite_glob_3_1 from "./modules/b.ts";import * as __vite_glob_3_2 from "./modules/index.ts";import * as __vite_glob_5_0 from "./modules/a.ts";import * as __vite_glob_5_1 from "./modules/b.ts";import * as __vite_glob_5_2 from "./modules/index.ts";import { name as __vite_glob_9_0 } from "./modules/a.ts";import { name as __vite_glob_9_1 } from "./modules/b.ts";import { name as __vite_glob_9_2 } from "./modules/index.ts";import { name as __vite_glob_11_0 } from "./modules/a.ts";import { name as __vite_glob_11_1 } from "./modules/b.ts";import { name as __vite_glob_11_2 } from "./modules/index.ts";import { default as __vite_glob_15_0 } from "./modules/a.ts?raw";import { default as __vite_glob_15_1 } from "./modules/b.ts?raw";import "types/importMeta";
108+
"import * as __vite_glob_3_0 from "./modules/a.ts";import * as __vite_glob_3_1 from "./modules/b.ts";import * as __vite_glob_3_2 from "./modules/index.ts";import * as __vite_glob_5_0 from "./modules/a.ts";import * as __vite_glob_5_1 from "./modules/b.ts";import * as __vite_glob_5_2 from "./modules/index.ts";import { name as __vite_glob_9_0 } from "./modules/a.ts";import { name as __vite_glob_9_1 } from "./modules/b.ts";import { name as __vite_glob_9_2 } from "./modules/index.ts";import { name as __vite_glob_11_0 } from "./modules/a.ts";import { name as __vite_glob_11_1 } from "./modules/b.ts";import { name as __vite_glob_11_2 } from "./modules/index.ts";import { default as __vite_glob_15_0 } from "./modules/a.ts?raw";import { default as __vite_glob_15_1 } from "./modules/b.ts?raw";import * as __vite_glob_28_0 from "./.foo/test.ts";import "types/importMeta";
108109
export const basic = /* #__PURE__ */ Object.assign({"./modules/a.ts": () => import("./modules/a.ts"),"./modules/b.ts": () => import("./modules/b.ts"),"./modules/index.ts": () => import("./modules/index.ts")});
109110
export const basicWithObjectKeys = Object.keys({"./modules/a.ts": 0,"./modules/b.ts": 0,"./modules/index.ts": 0});
110111
export const basicWithObjectValues = Object.values([() => import("./modules/a.ts"),() => import("./modules/b.ts"),() => import("./modules/index.ts")]);
@@ -203,6 +204,7 @@ export const customRootBase = /* #__PURE__ */ Object.assign({"./a.ts": () => imp
203204
export const customBaseParent = /* #__PURE__ */ Object.assign({"../fixture-b/a.ts": () => import("/fixture-b/a.ts"),"../fixture-b/b.ts": () => import("/fixture-b/b.ts"),"../fixture-b/index.ts": () => import("/fixture-b/index.ts")
204205
205206
});
207+
export const dotFolder = /* #__PURE__ */ Object.assign({"./.foo/test.ts": __vite_glob_28_0});
206208
"
207209
`;
208210

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const msg = 'dot-folder-test'

packages/vite/src/node/__tests__/plugins/importGlob/fixture-a/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,3 +120,5 @@ export const customRootBase = import.meta.glob('./**/*.ts', {
120120
export const customBaseParent = import.meta.glob('/fixture-b/**/*.ts', {
121121
base: '/fixture-a',
122122
})
123+
124+
export const dotFolder = import.meta.glob('./.foo/*.ts', { eager: true })

packages/vite/src/node/plugins/importMetaGlob.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -458,14 +458,20 @@ export async function transformGlobImport(
458458
let filePath = options.base
459459
? `${relative(posix.join(root, options.base), file)}`
460460
: importPath
461-
if (options.base && filePath[0] !== '.') {
461+
if (
462+
options.base &&
463+
!filePath.startsWith('./') &&
464+
!filePath.startsWith('../')
465+
) {
462466
filePath = `./${filePath}`
463467
}
464468
return { filePath, importPath }
465469
}
466470

467471
let importPath = relative(dir, file)
468-
if (importPath[0] !== '.') importPath = `./${importPath}`
472+
if (!importPath.startsWith('./') && !importPath.startsWith('../')) {
473+
importPath = `./${importPath}`
474+
}
469475

470476
let filePath: string
471477
if (options.base) {
@@ -474,15 +480,19 @@ export async function transformGlobImport(
474480
posix.join(resolvedBasePath, options.base),
475481
file,
476482
)
477-
if (filePath[0] !== '.') filePath = `./${filePath}`
483+
if (!filePath.startsWith('./') && !filePath.startsWith('../')) {
484+
filePath = `./${filePath}`
485+
}
478486
if (options.base[0] === '/') {
479487
importPath = `/${relative(root, file)}`
480488
}
481489
} else if (isRelative) {
482490
filePath = importPath
483491
} else {
484492
filePath = relative(root, file)
485-
if (filePath[0] !== '.') filePath = `/${filePath}`
493+
if (!filePath.startsWith('./') && !filePath.startsWith('../')) {
494+
filePath = `/${filePath}`
495+
}
486496
}
487497

488498
return { filePath, importPath }

0 commit comments

Comments
 (0)