Created
September 25, 2016 03:37
-
-
Save geoffreak/8ac60f3f995f56401c862bc58b447817 to your computer and use it in GitHub Desktop.
Oibackoff typing that works thanks to a bug that makes things simpler!
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']; | |
| let maxParameters = 10; | |
| let maxCallbackParameters = 2; | |
| let parameterName = 'data'; | |
| // File | |
| let fileStream = fs.createWriteStream('index.d.ts'); | |
| // Generate the instance | |
| let lines: string[] = []; | |
| for (let maxGeneric = 1; maxGeneric <= generics.length; maxGeneric++) { | |
| let genericNotation = `<${generics.slice(0, maxGeneric).map(v => v.toUpperCase()).join(',')}>`; | |
| let functionCallbackNotation = `callback: (${generics.slice(0, maxGeneric).map(v => `${v}: ${v.toUpperCase()}`).join(', ')}) => any`; | |
| let callbackNotation = `callback: (${generics.slice(0, maxGeneric).map(v => `${v}: ${v.toUpperCase()}`).join(', ')}, ${maxGeneric < 2 ? 'data: null, ' : ''}priorErrors?: ${generics[0].toUpperCase()}[]) => void`; | |
| // Loop through each allowed amount of backoff parameters | |
| for (let maxBackoffParamNumber = 0; maxBackoffParamNumber < maxParameters; maxBackoffParamNumber++) { | |
| // Build the list of backoff parameters | |
| let backoffParams: string[] = []; | |
| for (let backoffParamNumber = 0; backoffParamNumber < maxBackoffParamNumber; backoffParamNumber++) { | |
| backoffParams.push(`${parameterName}${backoffParamNumber}: any`) | |
| } | |
| // Loop through each allowed amount of callback parameters | |
| for (let maxCallbackParamNumber = 0; maxCallbackParamNumber < maxCallbackParameters; maxCallbackParamNumber++) { | |
| // Build the list of callback parameters | |
| let callbackParams: string[] = []; | |
| for (let callbackParamNumber = 0; callbackParamNumber < maxCallbackParamNumber; callbackParamNumber++) { | |
| callbackParams.push(`${parameterName}${callbackParamNumber}: any`) | |
| } | |
| callbackParams.push(functionCallbackNotation); | |
| 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>(fn: (callback: (a: A) => any) => any, intermediate: BackoffIntermediate<A>, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (callback: (a: A) => any) => any, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (data0: any, callback: (a: A) => any) => any, intermediate: BackoffIntermediate<A>, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (data0: any, callback: (a: A) => any) => any, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (callback: (a: A) => any) => any, data0: any, intermediate: BackoffIntermediate<A>, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (callback: (a: A) => any) => any, data0: any, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (data0: any, callback: (a: A) => any) => any, data0: any, intermediate: BackoffIntermediate<A>, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (data0: any, callback: (a: A) => any) => any, data0: any, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (callback: (a: A) => any) => any, data0: any, data1: any, intermediate: BackoffIntermediate<A>, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (callback: (a: A) => any) => any, data0: any, data1: any, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (data0: any, callback: (a: A) => any) => any, data0: any, data1: any, intermediate: BackoffIntermediate<A>, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (data0: any, callback: (a: A) => any) => any, data0: any, data1: any, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (callback: (a: A) => any) => any, data0: any, data1: any, data2: any, intermediate: BackoffIntermediate<A>, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (callback: (a: A) => any) => any, data0: any, data1: any, data2: any, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (data0: any, callback: (a: A) => any) => any, data0: any, data1: any, data2: any, intermediate: BackoffIntermediate<A>, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (data0: any, callback: (a: A) => any) => any, data0: any, data1: any, data2: any, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (callback: (a: A) => any) => any, data0: any, data1: any, data2: any, data3: any, intermediate: BackoffIntermediate<A>, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (callback: (a: A) => any) => any, data0: any, data1: any, data2: any, data3: any, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (data0: any, callback: (a: A) => any) => any, data0: any, data1: any, data2: any, data3: any, intermediate: BackoffIntermediate<A>, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (data0: any, callback: (a: A) => any) => any, data0: any, data1: any, data2: any, data3: any, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (callback: (a: A) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, intermediate: BackoffIntermediate<A>, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (callback: (a: A) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (data0: any, callback: (a: A) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, intermediate: BackoffIntermediate<A>, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (data0: any, callback: (a: A) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (callback: (a: A) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, intermediate: BackoffIntermediate<A>, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (callback: (a: A) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (data0: any, callback: (a: A) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, intermediate: BackoffIntermediate<A>, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (data0: any, callback: (a: A) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (callback: (a: A) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, data6: any, intermediate: BackoffIntermediate<A>, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (callback: (a: A) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, data6: any, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (data0: any, callback: (a: A) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, data6: any, intermediate: BackoffIntermediate<A>, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (data0: any, callback: (a: A) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, data6: any, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (callback: (a: A) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, data6: any, data7: any, intermediate: BackoffIntermediate<A>, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (callback: (a: A) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, data6: any, data7: any, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (data0: any, callback: (a: A) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, data6: any, data7: any, intermediate: BackoffIntermediate<A>, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (data0: any, callback: (a: A) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, data6: any, data7: any, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (callback: (a: A) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, data6: any, data7: any, data8: any, intermediate: BackoffIntermediate<A>, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (callback: (a: A) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, data6: any, data7: any, data8: any, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (data0: any, callback: (a: A) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, data6: any, data7: any, data8: any, intermediate: BackoffIntermediate<A>, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A>(fn: (data0: any, callback: (a: A) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, data6: any, data7: any, data8: any, callback: (a: A, data: null, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (callback: (a: A, b: B) => any) => any, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (callback: (a: A, b: B) => any) => any, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (data0: any, callback: (a: A, b: B) => any) => any, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (data0: any, callback: (a: A, b: B) => any) => any, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (callback: (a: A, b: B) => any) => any, data0: any, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (callback: (a: A, b: B) => any) => any, data0: any, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (data0: any, callback: (a: A, b: B) => any) => any, data0: any, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (data0: any, callback: (a: A, b: B) => any) => any, data0: any, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (callback: (a: A, b: B) => any) => any, data0: any, data1: any, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (callback: (a: A, b: B) => any) => any, data0: any, data1: any, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (data0: any, callback: (a: A, b: B) => any) => any, data0: any, data1: any, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (data0: any, callback: (a: A, b: B) => any) => any, data0: any, data1: any, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (data0: any, callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (data0: any, callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, data3: any, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, data3: any, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (data0: any, callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, data3: any, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (data0: any, callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, data3: any, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (data0: any, callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (data0: any, callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (data0: any, callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (data0: any, callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, data6: any, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, data6: any, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (data0: any, callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, data6: any, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (data0: any, callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, data6: any, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, data6: any, data7: any, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, data6: any, data7: any, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (data0: any, callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, data6: any, data7: any, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (data0: any, callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, data6: any, data7: any, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, data6: any, data7: any, data8: any, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, data6: any, data7: any, data8: any, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (data0: any, callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, data6: any, data7: any, data8: any, intermediate: BackoffIntermediate<A>, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| <A,B>(fn: (data0: any, callback: (a: A, b: B) => any) => any, data0: any, data1: any, data2: any, data3: any, data4: any, data5: any, data6: any, data7: any, data8: any, callback: (a: A, b: B, priorErrors?: A[]) => void): void; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment