A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/angular/angular-cli/commit/526cdb263a8c74ad228f584f70dc029aa69351d7 below:

allow `chain` rule to accept iterab… · angular/angular-cli@526cdb2 · GitHub

File tree Expand file treeCollapse file tree 3 files changed

+65

-6

lines changed

Filter options

Expand file treeCollapse file tree 3 files changed

+65

-6

lines changed Original file line number Diff line number Diff line change

@@ -145,7 +145,7 @@ export function callRule(rule: Rule, input: Tree_2 | Observable<Tree_2>, context

145 145

export function callSource(source: Source, context: SchematicContext): Observable<Tree_2>;

146 146 147 147

// @public

148 -

export function chain(rules: Rule[]): Rule;

148 +

export function chain(rules: Iterable<Rule> | AsyncIterable<Rule>): Rule;

149 149 150 150

// @public (undocumented)

151 151

export class CircularCollectionException extends BaseException {

Original file line number Diff line number Diff line change

@@ -33,9 +33,14 @@ export function empty(): Source {

33 33

/**

34 34

* Chain multiple rules into a single rule.

35 35

*/

36 -

export function chain(rules: Rule[]): Rule {

37 -

return (tree, context) => {

38 -

return rules.reduce<Tree | Observable<Tree>>((acc, curr) => callRule(curr, acc, context), tree);

36 +

export function chain(rules: Iterable<Rule> | AsyncIterable<Rule>): Rule {

37 +

return async (initialTree, context) => {

38 +

let intermediateTree: Observable<Tree> | undefined;

39 +

for await (const rule of rules) {

40 +

intermediateTree = callRule(rule, intermediateTree ?? initialTree, context);

41 +

}

42 + 43 +

return () => intermediateTree;

39 44

};

40 45

}

41 46 Original file line number Diff line number Diff line change

@@ -17,11 +17,11 @@ import { apply, applyToSubtree, chain } from './base';

17 17

import { callRule, callSource } from './call';

18 18

import { move } from './move';

19 19 20 -

const context: SchematicContext = ({

20 +

const context: SchematicContext = {

21 21

engine: null,

22 22

debug: false,

23 23

strategy: MergeStrategy.Default,

24 -

} as {}) as SchematicContext;

24 +

} as {} as SchematicContext;

25 25 26 26

describe('chain', () => {

27 27

it('works with simple rules', (done) => {

@@ -48,6 +48,60 @@ describe('chain', () => {

48 48

.then(done, done.fail);

49 49

});

50 50 51 +

it('works with a sync generator of rules', async () => {

52 +

const rulesCalled: Tree[] = [];

53 + 54 +

const tree0 = empty();

55 +

const tree1 = empty();

56 +

const tree2 = empty();

57 +

const tree3 = empty();

58 + 59 +

const rule0: Rule = (tree: Tree) => ((rulesCalled[0] = tree), tree1);

60 +

const rule1: Rule = (tree: Tree) => ((rulesCalled[1] = tree), tree2);

61 +

const rule2: Rule = (tree: Tree) => ((rulesCalled[2] = tree), tree3);

62 + 63 +

function* generateRules() {

64 +

yield rule0;

65 +

yield rule1;

66 +

yield rule2;

67 +

}

68 + 69 +

const result = await callRule(chain(generateRules()), tree0, context).toPromise();

70 + 71 +

expect(result).not.toBe(tree0);

72 +

expect(rulesCalled[0]).toBe(tree0);

73 +

expect(rulesCalled[1]).toBe(tree1);

74 +

expect(rulesCalled[2]).toBe(tree2);

75 +

expect(result).toBe(tree3);

76 +

});

77 + 78 +

it('works with an async generator of rules', async () => {

79 +

const rulesCalled: Tree[] = [];

80 + 81 +

const tree0 = empty();

82 +

const tree1 = empty();

83 +

const tree2 = empty();

84 +

const tree3 = empty();

85 + 86 +

const rule0: Rule = (tree: Tree) => ((rulesCalled[0] = tree), tree1);

87 +

const rule1: Rule = (tree: Tree) => ((rulesCalled[1] = tree), tree2);

88 +

const rule2: Rule = (tree: Tree) => ((rulesCalled[2] = tree), tree3);

89 + 90 +

async function* generateRules() {

91 +

yield rule0;

92 +

yield rule1;

93 +

yield rule2;

94 +

}

95 + 96 +

const result = await callRule(chain(generateRules()), tree0, context).toPromise();

97 + 98 +

expect(result).not.toBe(tree0);

99 +

expect(rulesCalled[0]).toBe(tree0);

100 +

expect(rulesCalled[1]).toBe(tree1);

101 +

expect(rulesCalled[2]).toBe(tree2);

102 +

expect(result).toBe(tree3);

103 +

});

104 + 51 105

it('works with observable rules', (done) => {

52 106

const rulesCalled: Tree[] = [];

53 107

You can’t perform that action at this time.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4