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 hidden or 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 hidden or 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