From e007ccf97bc526ff1f45a1f84c26758973c10daa Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Thu, 25 Apr 2019 10:38:20 -0700 Subject: [PATCH] Simplify chaining of transforms (#22994) --- src/compiler/core.ts | 33 --------------------------------- src/compiler/transformer.ts | 8 +++++++- 2 files changed, 7 insertions(+), 34 deletions(-) diff --git a/src/compiler/core.ts b/src/compiler/core.ts index b99304ddfedca..b3839842d3e60 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -1639,39 +1639,6 @@ namespace ts { }; } - /** - * High-order function, creates a function that executes a function composition. - * For example, `chain(a, b)` is the equivalent of `x => ((a', b') => y => b'(a'(y)))(a(x), b(x))` - * - * @param args The functions to chain. - */ - export function chain(...args: ((t: T) => (u: U) => U)[]): (t: T) => (u: U) => U; - export function chain(a: (t: T) => (u: U) => U, b: (t: T) => (u: U) => U, c: (t: T) => (u: U) => U, d: (t: T) => (u: U) => U, e: (t: T) => (u: U) => U): (t: T) => (u: U) => U { - if (e) { - const args: ((t: T) => (u: U) => U)[] = []; - for (let i = 0; i < arguments.length; i++) { - args[i] = arguments[i]; - } - - return t => compose(...map(args, f => f(t))); - } - else if (d) { - return t => compose(a(t), b(t), c(t), d(t)); - } - else if (c) { - return t => compose(a(t), b(t), c(t)); - } - else if (b) { - return t => compose(a(t), b(t)); - } - else if (a) { - return t => compose(a(t)); - } - else { - return _ => u => u; - } - } - /** * High-order function, composes functions. Note that functions are composed inside-out; * for example, `compose(a, b)` is the equivalent of `x => b(a(x))`. diff --git a/src/compiler/transformer.ts b/src/compiler/transformer.ts index 12d20d6c089eb..ba47d5b8106ff 100644 --- a/src/compiler/transformer.ts +++ b/src/compiler/transformer.ts @@ -151,7 +151,13 @@ namespace ts { performance.mark("beforeTransform"); // Chain together and initialize each transformer. - const transformation = chain(...transformers)(context); + const transformersWithContext = transformers.map(t => t(context)); + const transformation = (node: T): T => { + for (const transform of transformersWithContext) { + node = transform(node); + } + return node; + }; // prevent modification of transformation hooks. state = TransformationState.Initialized;