@teambit/harmony
Version:
abstract extension system
64 lines (63 loc) • 1.97 kB
TypeScript
import 'reflect-metadata';
import ExtensionGraph, { DependencyGraphOptions } from './extension-graph/extension-graph';
import { Extension, ExtensionManifest } from './extension';
import { Config } from './config';
import { Aspect } from './aspect';
import { Runtimes } from './runtimes/runtimes';
import { RuntimeDefinition } from './runtimes/runtime-definition';
export type GlobalConfig = {
[key: string]: object;
};
export type RequireFn = (aspect: Extension, runtime: RuntimeDefinition) => Promise<void>;
export declare class Harmony {
/**
* extension graph
*/
readonly graph: ExtensionGraph;
/**
* harmony top level config
*/
readonly config: Config;
readonly runtimes: Runtimes;
readonly activeRuntime: string;
private depOptions;
constructor(
/**
* extension graph
*/
graph: ExtensionGraph,
/**
* harmony top level config
*/
config: Config, runtimes: Runtimes, activeRuntime: string, depOptions: DependencyGraphOptions);
current: string | null;
private runtime;
/**
* list all registered extensions
*/
get extensions(): Map<string, Extension>;
/**
* list all registered extensions ids
*/
get extensionsIds(): string[];
/**
* load an Aspect into the dependency graph.
*/
load(extensions: ExtensionManifest[]): Promise<void>;
/**
* set extensions during Harmony runtime.
* hack!
*/
set(extensions: ExtensionManifest[]): Promise<void>;
private runOne;
getDependencies(aspect: Extension): Extension[];
initExtension(id: string): void;
endExtension(): void;
/**
* get an extension from harmony.
*/
get<T>(id: string): T;
resolveRuntime(name: string): RuntimeDefinition;
run(requireFn?: RequireFn): Promise<void>;
static load(aspects: Aspect[], runtime: string, globalConfig: GlobalConfig, options?: DependencyGraphOptions): Promise<Harmony>;
}