Created
September 25, 2016 14:36
-
-
Save geoffreak/a5b832838bce9d6b26719e1e5e26ec14 to your computer and use it in GitHub Desktop.
Oibackoff typing generator (short and working!)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import * as fs from 'fs'; | |
// Settings | |
let generics = ['a','b','c','d','e','f','g','h','i','j','k']; | |
let paramGenerics = ['o','p','q','r','s','t','u','v','w','x','y','z']; | |
let parameterName = 'p'; | |
// File | |
let fileStream = fs.createWriteStream('index.d.ts'); | |
// Generate the instance | |
let lines: string[] = []; | |
let functionCallbackNotation = `callback: (${generics.map(v => `${v}: ${v.toUpperCase()}`).join(', ')}) => any`; | |
let callbackArr: string[] = []; | |
for (let genericNumber = 0; genericNumber < generics.length; genericNumber++) { | |
let str = `${generics[genericNumber]}: ${generics[genericNumber].toUpperCase()}`; | |
if (genericNumber === 2) { | |
str = `priorErrorsOr${generics[genericNumber].toUpperCase()}: ${generics[genericNumber].toUpperCase()} | ${generics[0].toUpperCase()}[]`; | |
} | |
if (genericNumber == 1) { | |
str += ' | null'; | |
} | |
if (genericNumber > 0) { | |
str += ' | undefined'; | |
} | |
callbackArr.push(str); | |
} | |
let callbackNotation = `callback: (${callbackArr.join(', ')}) => void`; | |
// Loop through each allowed amount of backoff parameters | |
for (let maxParamNumber = 0; maxParamNumber <= paramGenerics.length; maxParamNumber++) { | |
// Build the list of backoff parameters | |
let backoffParams: string[] = []; | |
let callbackParams: string[] = []; | |
for (let paramNumber = 0; paramNumber < maxParamNumber; paramNumber++) { | |
backoffParams.push(`${parameterName}${paramNumber}: ${paramGenerics[paramNumber].toUpperCase()}`) | |
callbackParams.push(`${parameterName}${paramNumber}: ${paramGenerics[paramNumber].toUpperCase()}`) | |
} | |
callbackParams.push(functionCallbackNotation); | |
let genericNotation = `<${generics.concat(paramGenerics.slice(0, maxParamNumber)).map(v => v.toUpperCase()).join(',')}>`; | |
let immediateArgs: string[] = []; | |
immediateArgs.push(`fn: (${callbackParams.join(', ')}) => any`) | |
immediateArgs = immediateArgs.concat(backoffParams); | |
immediateArgs.push('intermediate: BackoffIntermediate<A>'); | |
immediateArgs.push(callbackNotation); | |
lines.push(`${genericNotation}(${immediateArgs.join(', ')}): void;`) | |
let noImmediateArgs: string[] = []; | |
noImmediateArgs.push(`fn: (${callbackParams.join(', ')}) => any`) | |
noImmediateArgs = noImmediateArgs.concat(backoffParams); | |
noImmediateArgs.push(callbackNotation); | |
lines.push(`${genericNotation}(${noImmediateArgs.join(', ')}): void;`) | |
} | |
fileStream.write(`export declare interface BackoffInstance {\n ${lines.join('\n ')}\n}\n`); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export declare interface BackoffInstance { | |
<A,B,C,D,E,F,G,H,I,J,K>(fn: (callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K>(fn: (callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K,O>(fn: (p0: O, callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, p0: O, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K,O>(fn: (p0: O, callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, p0: O, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K,O,P>(fn: (p0: O, p1: P, callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, p0: O, p1: P, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K,O,P>(fn: (p0: O, p1: P, callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, p0: O, p1: P, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K,O,P,Q>(fn: (p0: O, p1: P, p2: Q, callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, p0: O, p1: P, p2: Q, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K,O,P,Q>(fn: (p0: O, p1: P, p2: Q, callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, p0: O, p1: P, p2: Q, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K,O,P,Q,R>(fn: (p0: O, p1: P, p2: Q, p3: R, callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, p0: O, p1: P, p2: Q, p3: R, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K,O,P,Q,R>(fn: (p0: O, p1: P, p2: Q, p3: R, callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, p0: O, p1: P, p2: Q, p3: R, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K,O,P,Q,R,S>(fn: (p0: O, p1: P, p2: Q, p3: R, p4: S, callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, p0: O, p1: P, p2: Q, p3: R, p4: S, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K,O,P,Q,R,S>(fn: (p0: O, p1: P, p2: Q, p3: R, p4: S, callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, p0: O, p1: P, p2: Q, p3: R, p4: S, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K,O,P,Q,R,S,T>(fn: (p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K,O,P,Q,R,S,T>(fn: (p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K,O,P,Q,R,S,T,U>(fn: (p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, p6: U, callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, p6: U, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K,O,P,Q,R,S,T,U>(fn: (p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, p6: U, callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, p6: U, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K,O,P,Q,R,S,T,U,V>(fn: (p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, p6: U, p7: V, callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, p6: U, p7: V, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K,O,P,Q,R,S,T,U,V>(fn: (p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, p6: U, p7: V, callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, p6: U, p7: V, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K,O,P,Q,R,S,T,U,V,W>(fn: (p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, p6: U, p7: V, p8: W, callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, p6: U, p7: V, p8: W, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K,O,P,Q,R,S,T,U,V,W>(fn: (p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, p6: U, p7: V, p8: W, callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, p6: U, p7: V, p8: W, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K,O,P,Q,R,S,T,U,V,W,X>(fn: (p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, p6: U, p7: V, p8: W, p9: X, callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, p6: U, p7: V, p8: W, p9: X, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K,O,P,Q,R,S,T,U,V,W,X>(fn: (p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, p6: U, p7: V, p8: W, p9: X, callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, p6: U, p7: V, p8: W, p9: X, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K,O,P,Q,R,S,T,U,V,W,X,Y>(fn: (p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, p6: U, p7: V, p8: W, p9: X, p10: Y, callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, p6: U, p7: V, p8: W, p9: X, p10: Y, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K,O,P,Q,R,S,T,U,V,W,X,Y>(fn: (p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, p6: U, p7: V, p8: W, p9: X, p10: Y, callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, p6: U, p7: V, p8: W, p9: X, p10: Y, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K,O,P,Q,R,S,T,U,V,W,X,Y,Z>(fn: (p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, p6: U, p7: V, p8: W, p9: X, p10: Y, p11: Z, callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, p6: U, p7: V, p8: W, p9: X, p10: Y, p11: Z, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
<A,B,C,D,E,F,G,H,I,J,K,O,P,Q,R,S,T,U,V,W,X,Y,Z>(fn: (p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, p6: U, p7: V, p8: W, p9: X, p10: Y, p11: Z, callback: (a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K) => any) => any, p0: O, p1: P, p2: Q, p3: R, p4: S, p5: T, p6: U, p7: V, p8: W, p9: X, p10: Y, p11: Z, callback: (a: A, b: B | null | undefined, priorErrorsOrC: C | A[] | undefined, d: D | undefined, e: E | undefined, f: F | undefined, g: G | undefined, h: H | undefined, i: I | undefined, j: J | undefined, k: K | undefined) => void): void; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment