docs: fix the docs because the interface does not exist (#40308)
PR Close #40308
This commit is contained in:
parent
b630b09c7e
commit
956f75f068
|
@ -6,37 +6,53 @@ import {
|
||||||
chain, mergeWith
|
chain, mergeWith
|
||||||
} from '@angular-devkit/schematics';
|
} from '@angular-devkit/schematics';
|
||||||
|
|
||||||
import { strings, normalize, experimental } from '@angular-devkit/core';
|
import { strings, normalize, virtualFs, workspaces } from '@angular-devkit/core';
|
||||||
// #enddocregion schematics-imports
|
// #enddocregion schematics-imports
|
||||||
|
|
||||||
import { Schema as MyServiceSchema } from './schema';
|
import { Schema as MyServiceSchema } from './schema';
|
||||||
// #enddocregion schema-imports
|
// #enddocregion schema-imports
|
||||||
|
|
||||||
|
function createHost(tree: Tree): workspaces.WorkspaceHost {
|
||||||
|
return {
|
||||||
|
async readFile(path: string): Promise<string> {
|
||||||
|
const data = tree.read(path);
|
||||||
|
if (!data) {
|
||||||
|
throw new SchematicsException('File not found.');
|
||||||
|
}
|
||||||
|
return virtualFs.fileBufferToString(data);
|
||||||
|
},
|
||||||
|
async writeFile(path: string, data: string): Promise<void> {
|
||||||
|
return tree.overwrite(path, data);
|
||||||
|
},
|
||||||
|
async isDirectory(path: string): Promise<boolean> {
|
||||||
|
return !tree.exists(path) && tree.getDir(path).subfiles.length > 0;
|
||||||
|
},
|
||||||
|
async isFile(path: string): Promise<boolean> {
|
||||||
|
return tree.exists(path);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
export function myService(options: MyServiceSchema): Rule {
|
export function myService(options: MyServiceSchema): Rule {
|
||||||
return (tree: Tree) => {
|
return async (tree: Tree) => {
|
||||||
const workspaceConfig = tree.read('/angular.json');
|
const host = createHost(tree);
|
||||||
if (!workspaceConfig) {
|
const { workspace } = await workspaces.readWorkspace('/', host);
|
||||||
throw new SchematicsException('Could not find Angular workspace configuration');
|
|
||||||
}
|
|
||||||
|
|
||||||
// convert workspace to string
|
|
||||||
const workspaceContent = workspaceConfig.toString();
|
|
||||||
|
|
||||||
// parse workspace string into JSON object
|
|
||||||
const workspace: experimental.workspace.WorkspaceSchema = JSON.parse(workspaceContent);
|
|
||||||
// #enddocregion workspace
|
// #enddocregion workspace
|
||||||
|
|
||||||
|
// #docregion project-info
|
||||||
// #docregion project-fallback
|
// #docregion project-fallback
|
||||||
if (!options.project) {
|
if (!options.project) {
|
||||||
options.project = workspace.defaultProject;
|
options.project = workspace.extensions.defaultProject;
|
||||||
}
|
}
|
||||||
// #enddocregion project-fallback
|
// #enddocregion project-fallback
|
||||||
|
|
||||||
// #docregion project-info
|
const project = workspace.projects.get(options.project);
|
||||||
const projectName = options.project as string;
|
if (!project) {
|
||||||
|
throw new SchematicsException(`Invalid project name: ${options.project}`);
|
||||||
|
}
|
||||||
|
|
||||||
const project = workspace.projects[projectName];
|
const projectType = project.extensions.projectType === 'application' ? 'app' : 'lib';
|
||||||
|
|
||||||
const projectType = project.projectType === 'application' ? 'app' : 'lib';
|
|
||||||
// #enddocregion project-info
|
// #enddocregion project-info
|
||||||
|
|
||||||
// #docregion path
|
// #docregion path
|
||||||
|
|
|
@ -218,7 +218,8 @@ The `Tree` methods give you access to the complete file tree in your workspace,
|
||||||
|
|
||||||
### Get the project configuration
|
### Get the project configuration
|
||||||
|
|
||||||
1. To determine the destination project, use the `Tree.read()` method to read the contents of the workspace configuration file, `angular.json`, at the root of the workspace.
|
1. To determine the destination project, use the `workspaces.readWorkspace` method to read the contents of the workspace configuration file, `angular.json`.
|
||||||
|
To use `workspaces.readWorkspace` you need to create a `workspaces.WorkspaceHost` from the `Tree`.
|
||||||
Add the following code to your factory function.
|
Add the following code to your factory function.
|
||||||
|
|
||||||
<code-example header="projects/my-lib/schematics/my-service/index.ts (Schema Import)" path="schematics-for-libraries/projects/my-lib/schematics/my-service/index.ts" region="workspace">
|
<code-example header="projects/my-lib/schematics/my-service/index.ts (Schema Import)" path="schematics-for-libraries/projects/my-lib/schematics/my-service/index.ts" region="workspace">
|
||||||
|
@ -226,9 +227,7 @@ The `Tree` methods give you access to the complete file tree in your workspace,
|
||||||
|
|
||||||
* Be sure to check that the context exists and throw the appropriate error.
|
* Be sure to check that the context exists and throw the appropriate error.
|
||||||
|
|
||||||
* After reading the contents into a string, parse the configuration into a JSON object, typed to the `WorkspaceSchema`.
|
1. The `WorkspaceDefinition`, `extensions` property includes a `defaultProject` value for determining which project to use if not provided.
|
||||||
|
|
||||||
1. The `WorkspaceSchema` contains all the properties of the workspace configuration, including a `defaultProject` value for determining which project to use if not provided.
|
|
||||||
We will use that value as a fallback, if no project is explicitly specified in the `ng generate` command.
|
We will use that value as a fallback, if no project is explicitly specified in the `ng generate` command.
|
||||||
|
|
||||||
<code-example header="projects/my-lib/schematics/my-service/index.ts (Default Project)" path="schematics-for-libraries/projects/my-lib/schematics/my-service/index.ts" region="project-fallback">
|
<code-example header="projects/my-lib/schematics/my-service/index.ts (Default Project)" path="schematics-for-libraries/projects/my-lib/schematics/my-service/index.ts" region="project-fallback">
|
||||||
|
|
Loading…
Reference in New Issue