@@ -209,6 +209,7 @@ await createBrowserCompatShim();
209209await createModuleRunnerStub ( ) ;
210210await createNodeEntry ( ) ;
211211await copyBrowserClientFiles ( ) ;
212+ await createBrowserEntryFiles ( ) ;
212213const pluginExports = await createPluginExports ( ) ;
213214await mergePackageJson ( pluginExports ) ;
214215await validateExternalDeps ( ) ;
@@ -1716,6 +1717,38 @@ export * from '../@vitest/runner/index.js';
17161717 console . log ( ` Created ${ browserVendorStubs . length } vendor stubs` ) ;
17171718}
17181719
1720+ /**
1721+ * Create browser/ directory at package root with context files.
1722+ * The package exports "./browser" pointing to these files:
1723+ * - browser/context.js: Runtime guard (throws if used outside browser mode)
1724+ * - browser/context.d.ts: Re-exports types from dist/@vitest/browser/context.d.ts
1725+ *
1726+ * These files are NOT tracked in git (.gitignore excludes browser/)
1727+ * but ARE included in the package (package.json files: ["browser/**"])
1728+ */
1729+ async function createBrowserEntryFiles ( ) {
1730+ console . log ( '\nCreating browser/ entry files...' ) ;
1731+
1732+ const browserDir = resolve ( projectDir , 'browser' ) ;
1733+ await mkdir ( browserDir , { recursive : true } ) ;
1734+
1735+ // 1. Copy context.js from @vitest/browser (runtime guard)
1736+ const srcContextJs = resolve ( projectDir , 'node_modules/@vitest/browser/context.js' ) ;
1737+ const destContextJs = join ( browserDir , 'context.js' ) ;
1738+ await copyFile ( srcContextJs , destContextJs ) ;
1739+ console . log ( ' Created browser/context.js' ) ;
1740+
1741+ // 2. Create context.d.ts that re-exports from our bundled types
1742+ const contextDtsContent = `// Re-export browser context types from bundled @vitest/browser package
1743+ // This provides: page, userEvent, server, commands, utils, locators, cdp, Locator, etc.
1744+ // The bundled context.d.ts has imports rewritten to point to our dist files
1745+ export * from '../dist/@vitest/browser/context.d.ts'
1746+ ` ;
1747+ const destContextDts = join ( browserDir , 'context.d.ts' ) ;
1748+ await writeFile ( destContextDts , contextDtsContent , 'utf-8' ) ;
1749+ console . log ( ' Created browser/context.d.ts' ) ;
1750+ }
1751+
17191752/**
17201753 * Create /plugins/* exports for all copied @vitest/* packages.
17211754 * This allows pnpm overrides to redirect @vitest/* imports to our copied versions.
0 commit comments