11import type { ViteHotContext } from 'types/hot'
22import { HMRClient , HMRContext , type HMRLogger } from '../shared/hmr'
3- import { cleanUrl , isPrimitive , isWindows } from '../shared/utils'
3+ import { cleanUrl , isPrimitive } from '../shared/utils'
44import { analyzeImportedModDifference } from '../shared/ssrTransform'
55import {
66 type NormalizedModuleRunnerTransport ,
@@ -11,17 +11,11 @@ import { EvaluatedModules } from './evaluatedModules'
1111import type {
1212 ModuleEvaluator ,
1313 ModuleRunnerContext ,
14- ModuleRunnerImportMeta ,
1514 ModuleRunnerOptions ,
1615 ResolvedResult ,
1716 SSRImportMetadata ,
1817} from './types'
19- import {
20- posixDirname ,
21- posixPathToFileHref ,
22- posixResolve ,
23- toWindowsPath ,
24- } from './utils'
18+ import { posixDirname , posixPathToFileHref , posixResolve } from './utils'
2519import {
2620 ssrDynamicImportKey ,
2721 ssrExportAllKey ,
@@ -34,6 +28,7 @@ import { hmrLogger, silentConsole } from './hmrLogger'
3428import { createHMRHandlerForRunner } from './hmrHandler'
3529import { enableSourceMapSupport } from './sourcemap/index'
3630import { ESModulesEvaluator } from './esmEvaluator'
31+ import { createDefaultImportMeta } from './createImportMeta'
3732
3833interface ModuleRunnerDebugger {
3934 ( formatter : unknown , ...args : unknown [ ] ) : void
@@ -43,13 +38,6 @@ export class ModuleRunner {
4338 public evaluatedModules : EvaluatedModules
4439 public hmrClient ?: HMRClient
4540
46- private readonly envProxy = new Proxy ( { } as any , {
47- get ( _ , p ) {
48- throw new Error (
49- `[module runner] Dynamic access of "import.meta.env" is not supported. Please, use "import.meta.env.${ String ( p ) } " instead.` ,
50- )
51- } ,
52- } )
5341 private readonly transport : NormalizedModuleRunnerTransport
5442 private readonly resetSourceMapSupport ?: ( ) => void
5543 private readonly concurrentModuleNodePromises = new Map <
@@ -351,29 +339,13 @@ export class ModuleRunner {
351339 )
352340 }
353341
342+ const createImportMeta =
343+ this . options . createImportMeta ?? createDefaultImportMeta
344+
354345 const modulePath = cleanUrl ( file || moduleId )
355346 // disambiguate the `<UNIT>:/` on windows: see nodejs/node#31710
356347 const href = posixPathToFileHref ( modulePath )
357- const filename = modulePath
358- const dirname = posixDirname ( modulePath )
359- const meta : ModuleRunnerImportMeta = {
360- filename : isWindows ? toWindowsPath ( filename ) : filename ,
361- dirname : isWindows ? toWindowsPath ( dirname ) : dirname ,
362- url : href ,
363- env : this . envProxy ,
364- resolve ( _id , _parent ?) {
365- throw new Error (
366- '[module runner] "import.meta.resolve" is not supported.' ,
367- )
368- } ,
369- // should be replaced during transformation
370- glob ( ) {
371- throw new Error (
372- `[module runner] "import.meta.glob" is statically replaced during ` +
373- `file transformation. Make sure to reference it by the full name.` ,
374- )
375- } ,
376- }
348+ const meta = await createImportMeta ( modulePath )
377349 const exports = Object . create ( null )
378350 Object . defineProperty ( exports , Symbol . toStringTag , {
379351 value : 'Module' ,
0 commit comments