Skip to content

Commit 36f6740

Browse files
committed
feat(@angular-devkit/schematics): rules return values are optional now
This simplifies writing simple rules that only change the tree.
1 parent 2d1aaec commit 36f6740

File tree

4 files changed

+9
-5
lines changed

4 files changed

+9
-5
lines changed

packages/angular_devkit/schematics/src/engine/interface.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,4 +166,4 @@ export type AsyncFileOperator = (tree: FileEntry) => Observable<FileEntry | null
166166
* know which types is the schematic or collection metadata, as they are both tooling specific.
167167
*/
168168
export type Source = (context: SchematicContext) => Tree | Observable<Tree>;
169-
export type Rule = (tree: Tree, context: SchematicContext) => Tree | Observable<Tree>;
169+
export type Rule = (tree: Tree, context: SchematicContext) => Tree | Observable<Tree> | void;

packages/angular_devkit/schematics/src/engine/schematic.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ export class SchematicImpl<CollectionT extends object, SchematicT extends object
5555
const result = this._factory(transformedOptions)(tree, context);
5656
if (result instanceof Observable) {
5757
return result;
58+
} else if (result === undefined) {
59+
return Observable.of(tree);
5860
} else {
5961
return Observable.of(result);
6062
}

packages/angular_devkit/schematics/src/engine/schematic_spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ const engine: Engine<CollectionT, SchematicT> = {
3535
createContext: (schematic: Schematic<{}, {}>) => ({ engine, schematic, ...context }),
3636
transformOptions: (_: {}, options: {}) => options,
3737
defaultMergeStrategy: MergeStrategy.Default,
38-
} as Engine<CollectionT, SchematicT>;
38+
} as {} as Engine<CollectionT, SchematicT>;
3939
const collection = {
4040
name: 'collection',
4141
description: 'description',

packages/angular_devkit/schematics/src/rules/call.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { VirtualTree } from '../tree/virtual';
1616
* When a rule or source returns an invalid value.
1717
*/
1818
export class InvalidRuleResultException extends BaseException {
19-
constructor(value: {}) {
19+
constructor(value?: {}) {
2020
let v = 'Unknown Type';
2121
if (value === undefined) {
2222
v = 'undefined';
@@ -56,13 +56,15 @@ export function callSource(source: Source, context: SchematicContext): Observabl
5656
export function callRule(rule: Rule,
5757
input: Observable<Tree>,
5858
context: SchematicContext): Observable<Tree> {
59-
return input.mergeMap(i => {
60-
const result = rule(i, context);
59+
return input.mergeMap(inputTree => {
60+
const result = rule(inputTree, context);
6161

6262
if (result instanceof VirtualTree) {
6363
return Observable.of(result as Tree);
6464
} else if (result instanceof Observable) {
6565
return result;
66+
} else if (result === undefined) {
67+
return Observable.of(inputTree);
6668
} else {
6769
throw new InvalidRuleResultException(result);
6870
}

0 commit comments

Comments
 (0)