mirror of
https://github.com/angular/angular-cli.git
synced 2025-05-17 19:13:34 +08:00
refactor(@angular-devkit/core): allow creation of a host from a non-observable source
This commit is contained in:
parent
af5a1db467
commit
7045cee223
14
etc/api/angular_devkit/core/src/_golden-api.d.ts
vendored
14
etc/api/angular_devkit/core/src/_golden-api.d.ts
vendored
@ -229,6 +229,8 @@ export declare class CoreSchemaRegistry implements SchemaRegistry {
|
||||
useXDeprecatedProvider(onUsage: (message: string) => void): void;
|
||||
}
|
||||
|
||||
export declare function createSyncHost<StatsT extends object = {}>(handler: SyncHostHandler<StatsT>): Host<StatsT>;
|
||||
|
||||
export declare function createWorkspaceHost(host: virtualFs.Host): WorkspaceHost;
|
||||
|
||||
export interface CustomDimensionsAndMetricsOptions {
|
||||
@ -1048,6 +1050,18 @@ export declare class SyncDelegateHost<T extends object = {}> {
|
||||
write(path: Path, content: FileBufferLike): void;
|
||||
}
|
||||
|
||||
export interface SyncHostHandler<StatsT extends object = {}> {
|
||||
delete(path: Path): void;
|
||||
exists(path: Path): boolean;
|
||||
isDirectory(path: Path): boolean;
|
||||
isFile(path: Path): boolean;
|
||||
list(path: Path): PathFragment[];
|
||||
read(path: Path): FileBuffer;
|
||||
rename(from: Path, to: Path): void;
|
||||
stat(path: Path): Stats<StatsT> | null;
|
||||
write(path: Path, content: FileBufferLike): void;
|
||||
}
|
||||
|
||||
export declare class SynchronousDelegateExpectedException extends BaseException {
|
||||
constructor();
|
||||
}
|
||||
|
82
packages/angular_devkit/core/src/virtual-fs/host/create.ts
Normal file
82
packages/angular_devkit/core/src/virtual-fs/host/create.ts
Normal file
@ -0,0 +1,82 @@
|
||||
/**
|
||||
* @license
|
||||
* Copyright Google Inc. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
import { Observable } from 'rxjs';
|
||||
import { Path, PathFragment } from '../path';
|
||||
import { FileBuffer, FileBufferLike, Host, HostCapabilities, Stats } from './interface';
|
||||
|
||||
export interface SyncHostHandler<StatsT extends object = {}> {
|
||||
read(path: Path): FileBuffer;
|
||||
list(path: Path): PathFragment[];
|
||||
|
||||
exists(path: Path): boolean;
|
||||
isDirectory(path: Path): boolean;
|
||||
isFile(path: Path): boolean;
|
||||
|
||||
stat(path: Path): Stats<StatsT> | null;
|
||||
|
||||
write(path: Path, content: FileBufferLike): void;
|
||||
delete(path: Path): void;
|
||||
rename(from: Path, to: Path): void;
|
||||
}
|
||||
|
||||
function wrapAction<T>(action: () => T): Observable<T> {
|
||||
return new Observable((subscriber) => {
|
||||
subscriber.next(action());
|
||||
subscriber.complete();
|
||||
});
|
||||
}
|
||||
|
||||
export function createSyncHost<StatsT extends object = {}>(
|
||||
handler: SyncHostHandler<StatsT>,
|
||||
): Host<StatsT> {
|
||||
return new (class {
|
||||
get capabilities(): HostCapabilities {
|
||||
return { synchronous: true };
|
||||
}
|
||||
|
||||
read(path: Path): Observable<FileBuffer> {
|
||||
return wrapAction(() => handler.read(path));
|
||||
}
|
||||
|
||||
list(path: Path): Observable<PathFragment[]> {
|
||||
return wrapAction(() => handler.list(path));
|
||||
}
|
||||
|
||||
exists(path: Path): Observable<boolean> {
|
||||
return wrapAction(() => handler.exists(path));
|
||||
}
|
||||
|
||||
isDirectory(path: Path): Observable<boolean> {
|
||||
return wrapAction(() => handler.isDirectory(path));
|
||||
}
|
||||
|
||||
isFile(path: Path): Observable<boolean> {
|
||||
return wrapAction(() => handler.isFile(path));
|
||||
}
|
||||
|
||||
stat(path: Path): Observable<Stats<StatsT> | null> {
|
||||
return wrapAction(() => handler.stat(path));
|
||||
}
|
||||
|
||||
write(path: Path, content: FileBufferLike): Observable<void> {
|
||||
return wrapAction(() => handler.write(path, content));
|
||||
}
|
||||
|
||||
delete(path: Path): Observable<void> {
|
||||
return wrapAction(() => handler.delete(path));
|
||||
}
|
||||
|
||||
rename(from: Path, to: Path): Observable<void> {
|
||||
return wrapAction(() => handler.rename(from, to));
|
||||
}
|
||||
|
||||
watch(): null {
|
||||
return null;
|
||||
}
|
||||
})();
|
||||
}
|
@ -8,6 +8,7 @@
|
||||
|
||||
export * from './alias';
|
||||
export * from './buffer';
|
||||
export * from './create';
|
||||
export * from './empty';
|
||||
export * from './interface';
|
||||
export * from './memory';
|
||||
|
Loading…
x
Reference in New Issue
Block a user