Types

Complete type reference for browser-metro.

FileMap

interface FileMap {
  [path: string]: string; // absolute path → source code
}

ModuleMap

interface ModuleMap {
  [id: string]: string; // module ID → transformed source
}

Transformer

interface Transformer {
  transform(params: TransformParams): TransformResult;
}
 
interface TransformParams {
  src: string;       // source code
  filename: string;  // e.g. "/app.tsx"
}
 
interface TransformResult {
  code: string;           // transformed source code
  sourceMap?: RawSourceMap; // optional source map
}

BundlerConfig

interface BundlerConfig {
  resolver: ResolverConfig;
  transformer: Transformer;
  server: { packageServerUrl: string };
  hmr?: { enabled: boolean; reactRefresh?: boolean };
  plugins?: BundlerPlugin[];
  env?: Record<string, string>;
  routerShim?: boolean;
}

ResolverConfig

interface ResolverConfig {
  sourceExts: string[];
  paths?: Record<string, string[]>; // tsconfig "paths"
}

HmrUpdate

interface HmrUpdate {
  updatedModules: Record<string, string>;
  removedModules: string[];
  requiresReload: boolean;
  reloadReason?: string;
}

IncrementalBuildResult

interface IncrementalBuildResult {
  bundle: string;
  hmrUpdate: HmrUpdate | null;
  type: "full" | "incremental";
  rebuiltModules: string[];
  removedModules: string[];
  buildTime: number;
}

FileChange

interface FileChange {
  path: string;
  type: "create" | "update" | "delete";
}

ContentChange

interface ContentChange {
  path: string;
  type: "create" | "update" | "delete";
  content?: string; // omitted for delete
}

BundlerPlugin

interface BundlerPlugin {
  name: string;
  transformSource?(params: {
    src: string; filename: string;
  }): { src: string } | null;
  transformOutput?(params: {
    code: string; filename: string;
  }): { code: string } | null;
  resolveRequest?(
    context: { fromFile: string },
    moduleName: string
  ): string | null;
  moduleAliases?(): Record<string, string>;
  shimModules?(): Record<string, string>;
}