modules_manifest.ts 1.02 KB
export interface FileMap<T> { [fileName: string]: T; }

/** A class that maintains the module dependency graph of output JS files. */
export class ModulesManifest {
  /** Map of googmodule module name to file name */
  private moduleToFileName: FileMap<string> = {};
  /** Map of file name to arrays of imported googmodule module names */
  private referencedModules: FileMap<string[]> = {};

  addModule(fileName: string, module: string): void {
    this.moduleToFileName[module] = fileName;
    this.referencedModules[fileName] = [];
  }

  addReferencedModule(fileName: string, resolvedModule: string): void {
    this.referencedModules[fileName].push(resolvedModule);
  }

  get modules(): string[] {
    return Object.keys(this.moduleToFileName);
  }

  getFileNameFromModule(module: string): string {
    return this.moduleToFileName[module];
  }

  get fileNames(): string[] {
    return Object.keys(this.referencedModules);
  }

  getReferencedModules(fileName: string): string[] {
    return this.referencedModules[fileName];
  }
}