126 lines
2.4 KiB
TypeScript
126 lines
2.4 KiB
TypeScript
import type {
|
|
TargetConfiguration,
|
|
Workspace,
|
|
} from '@nrwl/tao/src/shared/workspace';
|
|
|
|
/**
|
|
* Some metadata about a file
|
|
*/
|
|
export interface FileData {
|
|
file: string;
|
|
hash: string;
|
|
ext: string;
|
|
deps?: string[];
|
|
}
|
|
|
|
/**
|
|
* A list of files separated by the project they belong to
|
|
*/
|
|
export interface ProjectFileMap {
|
|
[projectName: string]: FileData[];
|
|
}
|
|
|
|
/**
|
|
* A Graph of projects in the workspace and dependencies between them
|
|
*/
|
|
export interface ProjectGraph<T = any> {
|
|
nodes: Record<string, ProjectGraphNode<T>>;
|
|
dependencies: Record<string, ProjectGraphDependency[]>;
|
|
|
|
// this is optional otherwise it might break folks who use project graph creation
|
|
allWorkspaceFiles?: FileData[];
|
|
}
|
|
|
|
/**
|
|
* Type of dependency between projects
|
|
*/
|
|
export enum DependencyType {
|
|
/**
|
|
* Static dependencies are tied to the loading of the module
|
|
*/
|
|
static = 'static',
|
|
/**
|
|
* Dynamic dependencies are brought in by the module at run time
|
|
*/
|
|
dynamic = 'dynamic',
|
|
/**
|
|
* Implicit dependencies are inferred
|
|
*/
|
|
implicit = 'implicit',
|
|
}
|
|
|
|
/**
|
|
* A node describing a project in a workspace
|
|
*/
|
|
export interface ProjectGraphNode<T = any> {
|
|
type: string;
|
|
name: string;
|
|
/**
|
|
* Additional metadata about a project
|
|
*/
|
|
data: T & {
|
|
/**
|
|
* The project's root directory
|
|
*/
|
|
root?: string;
|
|
/**
|
|
* Targets associated to the project
|
|
*/
|
|
targets?: { [targetName: string]: TargetConfiguration };
|
|
/**
|
|
* Files associated to the project
|
|
*/
|
|
files: FileData[];
|
|
};
|
|
}
|
|
|
|
/**
|
|
* A dependency between two projects
|
|
*/
|
|
export interface ProjectGraphDependency {
|
|
type: DependencyType | string;
|
|
/**
|
|
* The project being imported by the other
|
|
*/
|
|
target: string;
|
|
/**
|
|
* The project importing the other
|
|
*/
|
|
source: string;
|
|
}
|
|
|
|
/**
|
|
* Additional information to be used to process a project graph
|
|
*/
|
|
export interface ProjectGraphProcessorContext {
|
|
/**
|
|
* Workspace information such as projects and configuration
|
|
*/
|
|
workspace: Workspace;
|
|
|
|
/**
|
|
* All files in the workspace
|
|
*/
|
|
fileMap: ProjectFileMap;
|
|
|
|
/**
|
|
* Files changes since last invocation
|
|
*/
|
|
filesToProcess: ProjectFileMap;
|
|
}
|
|
|
|
/**
|
|
* A function that produces an updated ProjectGraph
|
|
*/
|
|
export type ProjectGraphProcessor = (
|
|
currentGraph: ProjectGraph,
|
|
context: ProjectGraphProcessorContext
|
|
) => ProjectGraph;
|
|
|
|
/**
|
|
* A plugin for Nx
|
|
*/
|
|
export interface NxPlugin {
|
|
processProjectGraph: ProjectGraphProcessor;
|
|
}
|