This repository is a snapshot of a commit on the original repository. The original code used to generate this is located at http://github.com/angular/angular-cli.
We do not accept PRs or Issues opened on this repository. You should not use this over a tested and released version of this package.
To test this snapshot in your own project, use
npm install git+https://github.com/angular/angular-devkit-core-builds.git
Shared utilities for Angular DevKit.
export interface SchemaValidatorResult { success: boolean; errors?: string[]; }
export interface SchemaValidator { (data: any): Observable<SchemaValidatorResult>; }
export interface SchemaFormatter { readonly async: boolean; validate(data: any): boolean | Observable<boolean>; }
export interface SchemaRegistry { compile(schema: Object): Observable<SchemaValidator>; addFormat(name: string, formatter: SchemaFormatter): void; }
SchemaRegistry
implementation using https://github.com/epoberezkin/ajv. Constructor accepts object containing SchemaFormatter
that will be added automatically.
export class CoreSchemaRegistry implements SchemaRegistry { constructor(formats: { [name: string]: SchemaFormatter} = {}) {} }
The workspaces
namespace provides an API for interacting with the workspace file formats. It provides an abstraction of the underlying storage format of the workspace and provides support for both reading and writing. Currently, the only supported format is the JSON-based format used by the Angular CLI. For this format, the API provides internal change tracking of values which enables fine-grained updates to the underlying storage of the workspace. This allows for the retention of existing formatting and comments.
A workspace is defined via the following object model. Definition collection objects are specialized Javascript Map
objects with an additional add
method to simplify addition and provide more localized error checking of the newly added values.
exportinterfaceWorkspaceDefinition{readonlyextensions: Record<string,JsonValue|undefined>;readonlyprojects: ProjectDefinitionCollection;}exportinterfaceProjectDefinition{readonlyextensions: Record<string,JsonValue|undefined>;readonlytargets: TargetDefinitionCollection;root: string;prefix?: string;sourceRoot?: string;}exportinterfaceTargetDefinition{options?: Record<string,JsonValue|undefined>;configurations?: Record<string,Record<string,JsonValue|undefined>|undefined>;builder: string;}
The API is asynchronous and has two main functions to facilitate reading, creation, and modifying a workspace: readWorkspace
and writeWorkspace
.
exportenumWorkspaceFormat{JSON,}
exportfunctionreadWorkspace(path: string,host: WorkspaceHost,format?: WorkspaceFormat,): Promise<{workspace: WorkspaceDefinition}>;
exportfunctionwriteWorkspace(workspace: WorkspaceDefinition,host: WorkspaceHost,path?: string,format?: WorkspaceFormat,): Promise<void>;
A WorkspaceHost
abstracts the underlying data access methods from the functions. It provides methods to read, write, and analyze paths. A utility function is provided to create an instance of a WorkspaceHost
from the Angular DevKit's virtual filesystem host abstraction.
exportinterfaceWorkspaceHost{readFile(path: string): Promise<string>;writeFile(path: string,data: string): Promise<void>;isDirectory(path: string): Promise<boolean>;isFile(path: string): Promise<boolean>;}exportfunctioncreateWorkspaceHost(host: virtualFs.Host): WorkspaceHost;
To demonstrate the usage of the API, the following code will show how to add a option property to a build target for an application.
import{NodeJsSyncHost}from'@angular-devkit/core/node';import{workspaces}from'@angular-devkit/core';asyncfunctiondemonstrate(){consthost=workspaces.createWorkspaceHost(newNodeJsSyncHost());const{ workspace }=awaitworkspaces.readWorkspace('path/to/workspace/directory/',host);constproject=workspace.projects.get('my-app');if(!project){thrownewError('my-app does not exist');}constbuildTarget=project.targets.get('build');if(!buildTarget){thrownewError('build target does not exist');}buildTarget.options.optimization=true;awaitworkspaces.writeWorkspace(workspace,host);}demonstrate();