Skip to content

Commit c7ebda0

Browse files
style(typings): added enhanced typings for bindCallback.create
1 parent 4a70941 commit c7ebda0

File tree

4 files changed

+89
-23
lines changed

4 files changed

+89
-23
lines changed

src/Observable.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import {Subject} from './Subject';
1212
import {Notification} from './Notification';
1313
import {rxSubscriber} from'./symbol/rxSubscriber';
1414

15+
import {observable} from './typings-generated';
16+
1517
/**
1618
* A representation of any set of values over any amount of time. This the most basic building block
1719
* of RxJS.
@@ -156,7 +158,7 @@ export class Observable<T> implements CoreOperators<T> {
156158
}
157159

158160
// static method stubs
159-
static bindCallback: <T>(callbackFunc: Function, selector?: Function, scheduler?: Scheduler) => Function;
161+
static bindCallback: observable.create.bindCallback;
160162
static combineLatest: <T>(...observables: Array<Observable<any> |
161163
Array<Observable<any>> |
162164
((...values: Array<any>) => T) |

src/observable/bindCallback.ts

+20-2
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,27 @@ import {AsyncSubject} from '../subject/AsyncSubject';
99
export class BoundCallbackObservable<T> extends Observable<T> {
1010
subject: AsyncSubject<T>;
1111

12+
/*-- *compute 0-6* static create<{|X|, }TResult>(
13+
callbackFunc: ({|x|: |X|, }callback: (result: TResult) => any) => any
14+
): ({|x|: |X|}) => Observable<TResult>; --*/
15+
/*-- *compute 0-6* static create<{|X|, }TResult>(callbackFunc: ({|x|: |X|, }callback: (result: TResult) => any) => any,
16+
selector: any,
17+
scheduler: Scheduler): ({|x|: |X|}) => Observable<TResult>; --*/
18+
/*-- *compute 0-6* static create<{|X|}>(callbackFunc: ({|x|: |X|, }
19+
callback: (...args: any[]) => any) => any): ({|x|: |X|}) => Observable<any[]>; --*/
20+
/*-- *compute 0-6* static create<{|X|, }TResult>(callbackFunc: ({|x|: |X|, }callback: (...args: any[]) => any) => any,
21+
selector: (...args: any[]) => TResult,
22+
scheduler?: Scheduler): ({|x|: |X|}) => Observable<TResult>; --*/
23+
static create<T>(callbackFunc: Function): (...args: any[]) => Observable<T>;
1224
static create<T>(callbackFunc: Function,
13-
selector: Function = undefined,
14-
scheduler?: Scheduler): Function {
25+
selector: void,
26+
scheduler: Scheduler): (...args: any[]) => Observable<T>;
27+
static create<T>(callbackFunc: Function,
28+
selector?: (...args: any[]) => T,
29+
scheduler?: Scheduler): (...args: any[]) => Observable<T>;
30+
static create<T>(callbackFunc: Function,
31+
selector: Function | void = undefined,
32+
scheduler?: Scheduler): (...args: any[]) => Observable<T> {
1533
return (...args): Observable<T> => {
1634
return new BoundCallbackObservable(callbackFunc, selector, args, scheduler);
1735
};

src/typings-generated.ts

+39
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,43 @@ import {Scheduler} from './Scheduler';
33

44
/* tslint:disable:class-name *//* tslint:disable:max-line-length */
55
/* ||| MARKER ||| */
6+
export module observable {
7+
export module create {
8+
export interface bindCallback {
9+
<TResult>( callbackFunc: (callback: (result: TResult) => any) => any ): () => Observable<TResult>;
10+
<T, TResult>( callbackFunc: (x1: T, callback: (result: TResult) => any) => any ): (x1: T) => Observable<TResult>;
11+
<T, T2, TResult>( callbackFunc: (x1: T, x2: T2, callback: (result: TResult) => any) => any ): (x1: T, x2: T2) => Observable<TResult>;
12+
<T, T2, T3, TResult>( callbackFunc: (x1: T, x2: T2, x3: T3, callback: (result: TResult) => any) => any ): (x1: T, x2: T2, x3: T3) => Observable<TResult>;
13+
<T, T2, T3, T4, TResult>( callbackFunc: (x1: T, x2: T2, x3: T3, x4: T4, callback: (result: TResult) => any) => any ): (x1: T, x2: T2, x3: T3, x4: T4) => Observable<TResult>;
14+
<T, T2, T3, T4, T5, TResult>( callbackFunc: (x1: T, x2: T2, x3: T3, x4: T4, x5: T5, callback: (result: TResult) => any) => any ): (x1: T, x2: T2, x3: T3, x4: T4, x5: T5) => Observable<TResult>;
15+
<T, T2, T3, T4, T5, T6, TResult>( callbackFunc: (x1: T, x2: T2, x3: T3, x4: T4, x5: T5, x6: T6, callback: (result: TResult) => any) => any ): (x1: T, x2: T2, x3: T3, x4: T4, x5: T5, x6: T6) => Observable<TResult>;
16+
<TResult>(callbackFunc: (callback: (result: TResult) => any) => any, selector: any, scheduler: Scheduler): () => Observable<TResult>;
17+
<T, TResult>(callbackFunc: (x1: T, callback: (result: TResult) => any) => any, selector: any, scheduler: Scheduler): (x1: T) => Observable<TResult>;
18+
<T, T2, TResult>(callbackFunc: (x1: T, x2: T2, callback: (result: TResult) => any) => any, selector: any, scheduler: Scheduler): (x1: T, x2: T2) => Observable<TResult>;
19+
<T, T2, T3, TResult>(callbackFunc: (x1: T, x2: T2, x3: T3, callback: (result: TResult) => any) => any, selector: any, scheduler: Scheduler): (x1: T, x2: T2, x3: T3) => Observable<TResult>;
20+
<T, T2, T3, T4, TResult>(callbackFunc: (x1: T, x2: T2, x3: T3, x4: T4, callback: (result: TResult) => any) => any, selector: any, scheduler: Scheduler): (x1: T, x2: T2, x3: T3, x4: T4) => Observable<TResult>;
21+
<T, T2, T3, T4, T5, TResult>(callbackFunc: (x1: T, x2: T2, x3: T3, x4: T4, x5: T5, callback: (result: TResult) => any) => any, selector: any, scheduler: Scheduler): (x1: T, x2: T2, x3: T3, x4: T4, x5: T5) => Observable<TResult>;
22+
<T, T2, T3, T4, T5, T6, TResult>(callbackFunc: (x1: T, x2: T2, x3: T3, x4: T4, x5: T5, x6: T6, callback: (result: TResult) => any) => any, selector: any, scheduler: Scheduler): (x1: T, x2: T2, x3: T3, x4: T4, x5: T5, x6: T6) => Observable<TResult>;
23+
(callbackFunc: ( callback: (...args: any[]) => any) => any): () => Observable<any[]>;
24+
<T>(callbackFunc: (x1: T, callback: (...args: any[]) => any) => any): (x1: T) => Observable<any[]>;
25+
<T, T2>(callbackFunc: (x1: T, x2: T2, callback: (...args: any[]) => any) => any): (x1: T, x2: T2) => Observable<any[]>;
26+
<T, T2, T3>(callbackFunc: (x1: T, x2: T2, x3: T3, callback: (...args: any[]) => any) => any): (x1: T, x2: T2, x3: T3) => Observable<any[]>;
27+
<T, T2, T3, T4>(callbackFunc: (x1: T, x2: T2, x3: T3, x4: T4, callback: (...args: any[]) => any) => any): (x1: T, x2: T2, x3: T3, x4: T4) => Observable<any[]>;
28+
<T, T2, T3, T4, T5>(callbackFunc: (x1: T, x2: T2, x3: T3, x4: T4, x5: T5, callback: (...args: any[]) => any) => any): (x1: T, x2: T2, x3: T3, x4: T4, x5: T5) => Observable<any[]>;
29+
<T, T2, T3, T4, T5, T6>(callbackFunc: (x1: T, x2: T2, x3: T3, x4: T4, x5: T5, x6: T6, callback: (...args: any[]) => any) => any): (x1: T, x2: T2, x3: T3, x4: T4, x5: T5, x6: T6) => Observable<any[]>;
30+
<TResult>(callbackFunc: (callback: (...args: any[]) => any) => any, selector: (...args: any[]) => TResult, scheduler?: Scheduler): () => Observable<TResult>;
31+
<T, TResult>(callbackFunc: (x1: T, callback: (...args: any[]) => any) => any, selector: (...args: any[]) => TResult, scheduler?: Scheduler): (x1: T) => Observable<TResult>;
32+
<T, T2, TResult>(callbackFunc: (x1: T, x2: T2, callback: (...args: any[]) => any) => any, selector: (...args: any[]) => TResult, scheduler?: Scheduler): (x1: T, x2: T2) => Observable<TResult>;
33+
<T, T2, T3, TResult>(callbackFunc: (x1: T, x2: T2, x3: T3, callback: (...args: any[]) => any) => any, selector: (...args: any[]) => TResult, scheduler?: Scheduler): (x1: T, x2: T2, x3: T3) => Observable<TResult>;
34+
<T, T2, T3, T4, TResult>(callbackFunc: (x1: T, x2: T2, x3: T3, x4: T4, callback: (...args: any[]) => any) => any, selector: (...args: any[]) => TResult, scheduler?: Scheduler): (x1: T, x2: T2, x3: T3, x4: T4) => Observable<TResult>;
35+
<T, T2, T3, T4, T5, TResult>(callbackFunc: (x1: T, x2: T2, x3: T3, x4: T4, x5: T5, callback: (...args: any[]) => any) => any, selector: (...args: any[]) => TResult, scheduler?: Scheduler): (x1: T, x2: T2, x3: T3, x4: T4, x5: T5) => Observable<TResult>;
36+
<T, T2, T3, T4, T5, T6, TResult>(callbackFunc: (x1: T, x2: T2, x3: T3, x4: T4, x5: T5, x6: T6, callback: (...args: any[]) => any) => any, selector: (...args: any[]) => TResult, scheduler?: Scheduler): (x1: T, x2: T2, x3: T3, x4: T4, x5: T5, x6: T6) => Observable<TResult>;
37+
<T>(callbackFunc: Function): (...args: any[]) => Observable<T>;
38+
<T>(callbackFunc: Function, selector: void, scheduler: Scheduler): (...args: any[]) => Observable<T>;
39+
<T>(callbackFunc: Function, selector?: (...args: any[]) => T, scheduler?: Scheduler): (...args: any[]) => Observable<T>;
40+
}
41+
}
42+
}
43+
export module operator {
44+
}
645
/* ||| MARKER ||| */

tools/typing-generator.js

+27-20
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@ for (var i = 0; i < contents.length; i++) {
3030
} else {
3131
if (fs.existsSync('./src/operator/' + filename + '.ts')) {
3232
fileContent = fs.readFileSync('./src/operator/' + filename + '.ts').toString('utf8');
33-
} else {
34-
fileContent = fs.readFileSync('./src/operator/extended/' + filename + '.ts').toString('utf8');
3533
}
3634
}
3735

@@ -65,12 +63,16 @@ for (var i = 0; i < contents.length; i++) {
6563
.replace(/([\w|\d]*?)\: (\w*) = [\w|\d|\.|\-]*/g, '$1?: $2');
6664

6765
if (method[method.length - 1] === ';' || method[method.length - 1] === '{') {
68-
method = method.substr(0, method.length - 1).trim();
66+
method = method.replace(/(,\s){2}/g, ', ').substr(0, method.length - 1).trim();
6967
}
7068

7169
if (!_static) {
7270
method = method.replace(/^<T>/, '').replace(/^<T, /, '<');
7371
}
72+
method = method.replace(/^<>/, '');
73+
if (method.indexOf(';') === -1) {
74+
method += ';';
75+
}
7476
methods.push(method);
7577
}
7678
} while (result);
@@ -99,7 +101,7 @@ for (var i in observables) {
99101
var value = observables[i];
100102
fileResult += ' export module ' + value.type + ' {\n';
101103
fileResult += ' export interface ' + value.name + ' {\n';
102-
fileResult += ' ' + value.methods.join(';\n ') + ';\n';
104+
fileResult += ' ' + value.methods.join('\n ') + '\n';
103105
fileResult += ' }\n';
104106
fileResult += ' }\n';
105107
}
@@ -110,7 +112,7 @@ for (var i in operators) {
110112
var value = operators[i];
111113
fileResult += ' export module ' + value.type + ' {\n';
112114
fileResult += ' export interface ' + value.name + ' {\n';
113-
fileResult += ' ' + value.methods.join(';\n ') + ';\n';
115+
fileResult += ' ' + value.methods.join('\n ') + '\n';
114116
fileResult += ' }\n';
115117
fileResult += ' }\n';
116118
}
@@ -124,10 +126,11 @@ fs.writeFileSync('./src/typings-generated.ts', typingsContent);
124126

125127
function computeTypingsFor(s) {
126128
var captureRegex = /\/\*\-\-([\s|\S]*?)-\-\*\//g;
127-
var computeNumberRegex = /\*compute (\d.*?)?\*/;
129+
var computeNumberRegex = /\*compute (\d.*?)?(x\d.*?)?\*/;
128130
var tokenRegex = /\{.*?\}/g;
129131

130132
s = s.replace(captureRegex, function(capture) {
133+
var start, end;
131134
capture = capture.trim();
132135
capture = capture.substr(3, capture.length - 3 * 2);
133136
var compute = computeNumberRegex.exec(capture);
@@ -138,30 +141,34 @@ function computeTypingsFor(s) {
138141
}
139142
var range = compute.split('-');
140143
if (range.length === 1) {
141-
var start = 1;
142-
var end = range[0];
144+
start = 1;
145+
end = +range[0];
143146
} else {
144-
var start = range[0];
145-
var end = range[1];
147+
start = +range[0];
148+
end = +range[1];
146149
}
147150

148151
capture = capture.replace(computeNumberRegex, '').trim();
149152

150-
var tokenResult;
151153
var results = [];
152154
for (var number = start; number <= end; number++) {
153155
var res = capture.replace(tokenRegex, function(capture, index, str) {
154156
var items = [];
155157
capture = capture.substr(1, capture.length - 2);
156-
var union = capture.indexOf('|U|') > -1;
157-
for (var i = start; i <= number; i++) {
158-
var typeName = 'T' + (i === 1 ? '' : i);
159-
items.push(capture
160-
.replace(/\|U\|/g, typeName)
161-
.replace(/\|X\|/g, typeName)
162-
.replace(/\|v\|/g, 'v' + i)
163-
);
164-
}
158+
var union = capture.indexOf('$X$') > -1;
159+
160+
for (var x = start; x <= number; x++) {
161+
if (x === 0) {
162+
continue;
163+
}
164+
var xTypeName = 'T' + (x === 1 ? '' : x);
165+
var r = capture
166+
.replace(/\|X\|/g, xTypeName)
167+
.replace(/\$X\$/g, xTypeName)
168+
.replace(/\|x\|/g, 'x' + x);
169+
170+
items.push(r);
171+
}
165172

166173
return items.join(union ? ' | ' : ', ');
167174
});

0 commit comments

Comments
 (0)