[6a3a178] | 1 | /**
|
---|
| 2 | * @license
|
---|
| 3 | * Copyright Google LLC All Rights Reserved.
|
---|
| 4 | *
|
---|
| 5 | * Use of this source code is governed by an MIT-style license that can be
|
---|
| 6 | * found in the LICENSE file at https://angular.io/license
|
---|
| 7 | */
|
---|
| 8 | import { UpdateRecorder } from './update-recorder';
|
---|
| 9 | /**
|
---|
| 10 | * A workspace path semantically is equivalent to the `Path` type provided by the
|
---|
| 11 | * Angular devkit. Paths denoted with such a type are guaranteed to be representing
|
---|
| 12 | * paths of a given virtual file system. This means that the root of a path can be
|
---|
| 13 | * different, and does not necessarily need to match the root in the real file system.
|
---|
| 14 | *
|
---|
| 15 | * For example: Consider we have a project in `/home/<..>/my-project`. Then a path
|
---|
| 16 | * like `/package.json` could actually refer to the `package.json` file in `my-project`.
|
---|
| 17 | * Note that in the real file system this would not match though.
|
---|
| 18 | *
|
---|
| 19 | * One wonder why another type has been declared for such paths, when there already
|
---|
| 20 | * is the `Path` type provided by the devkit. We do this for a couple of reasons:
|
---|
| 21 | *
|
---|
| 22 | * 1. The update-tool cannot have a dependency on the Angular devkit as that one
|
---|
| 23 | * is not synced into g3. We want to be able to run migrations in g3 if needed.
|
---|
| 24 | */
|
---|
| 25 | export declare type WorkspacePath = string & {
|
---|
| 26 | __PRIVATE_DEVKIT_PATH: void;
|
---|
| 27 | };
|
---|
| 28 | /** Interface that describes a directory. */
|
---|
| 29 | export interface DirectoryEntry {
|
---|
| 30 | /** List of directories inside the directory. */
|
---|
| 31 | directories: string[];
|
---|
| 32 | /** List of files inside the directory. */
|
---|
| 33 | files: string[];
|
---|
| 34 | }
|
---|
| 35 | /**
|
---|
| 36 | * Abstraction of the file system that migrations can use to record and apply
|
---|
| 37 | * changes. This is necessary to support virtual file systems as used in the CLI devkit.
|
---|
| 38 | */
|
---|
| 39 | export declare abstract class FileSystem {
|
---|
| 40 | /** Checks whether the given file exists. */
|
---|
| 41 | abstract fileExists(path: WorkspacePath): boolean;
|
---|
| 42 | /** Checks whether the given directory exists. */
|
---|
| 43 | abstract directoryExists(path: WorkspacePath): boolean;
|
---|
| 44 | /** Gets the contents of the given file. */
|
---|
| 45 | abstract read(filePath: WorkspacePath): string | null;
|
---|
| 46 | /** Reads the given directory to retrieve children. */
|
---|
| 47 | abstract readDirectory(dirPath: WorkspacePath): DirectoryEntry;
|
---|
| 48 | /**
|
---|
| 49 | * Creates an update recorder for the given file. Edits can be recorded and
|
---|
| 50 | * committed in batches. Changes are not applied automatically because otherwise
|
---|
| 51 | * migrations would need to re-read files, or account for shifted file contents.
|
---|
| 52 | */
|
---|
| 53 | abstract edit(filePath: WorkspacePath): UpdateRecorder;
|
---|
| 54 | /** Applies all changes which have been recorded in update recorders. */
|
---|
| 55 | abstract commitEdits(): void;
|
---|
| 56 | /** Creates a new file with the given content. */
|
---|
| 57 | abstract create(filePath: WorkspacePath, content: string): void;
|
---|
| 58 | /** Overwrites an existing file with the given content. */
|
---|
| 59 | abstract overwrite(filePath: WorkspacePath, content: string): void;
|
---|
| 60 | /** Deletes the given file. */
|
---|
| 61 | abstract delete(filePath: WorkspacePath): void;
|
---|
| 62 | /**
|
---|
| 63 | * Resolves given paths to a resolved path in the file system. For example, the devkit
|
---|
| 64 | * tree considers the actual workspace directory as file system root.
|
---|
| 65 | *
|
---|
| 66 | * Follows the same semantics as the native path `resolve` method. i.e. segments
|
---|
| 67 | * are processed in reverse. The last segment is considered the target and the
|
---|
| 68 | * function will iterate from the target through other segments until it finds an
|
---|
| 69 | * absolute path segment.
|
---|
| 70 | */
|
---|
| 71 | abstract resolve(...segments: string[]): WorkspacePath;
|
---|
| 72 | }
|
---|