Skip to content

Commit 5fd05a2

Browse files
style(typings): Added the ability to compute typings
1 parent 065cd5c commit 5fd05a2

File tree

2 files changed

+55
-3
lines changed

2 files changed

+55
-3
lines changed

src/operator-typings.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {Observer} from './Observer';
88
import {GroupedObservable} from './operator/groupBy-support';
99
import {GroupByObservable} from './operator/groupBy';
1010
import {TimeInterval} from './operator/extended/timeInterval';
11-
import {ObservableOrPromise, ArrayOrIterator, _Selector, _IndexSelector, _SwitchMapResultSelector, _ObservableMergeMapProjector, _IteratorMergeMapProjector, _Predicate, _PredicateObservable, _Comparer, _Accumulator, _MergeAccumulator} from './types';
11+
import {ObservableInput, ObservableOrPromise, ArrayOrIterator, _Selector, _IndexSelector, _SwitchMapResultSelector, _ObservableMergeMapProjector, _IteratorMergeMapProjector, _Predicate, _PredicateObservable, _Comparer, _Accumulator, _MergeAccumulator} from './types';
1212

1313
/* ||| MARKER ||| */
1414
/* ||| MARKER ||| */

typingsgen.js

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,12 @@ for (var i = 0; i < contents.length; i++) {
2121
var fileContent;
2222

2323
if (fs.existsSync('./src/operator/' + filename + '.ts')) {
24-
fileContent = fs.readFileSync('./src/operator/' + filename + '.ts').toString();
24+
fileContent = fs.readFileSync('./src/operator/' + filename + '.ts').toString('utf8');
2525
} else {
26-
fileContent = fs.readFileSync('./src/operator/extended/' + filename + '.ts').toString();
26+
fileContent = fs.readFileSync('./src/operator/extended/' + filename + '.ts').toString('utf8');
2727
}
28+
29+
fileContent = computeTypingsFor(fileContent);
2830

2931
var methods = [];
3032

@@ -64,3 +66,53 @@ var typingsContent = fs.readFileSync('./src/operator-typings.ts').toString();
6466
fileResult = '/* ||| MARKER ||| */\n' + fileResult + '/* ||| MARKER ||| */';
6567
typingsContent = typingsContent.replace(/(\/\* \|\|\| MARKER \|\|\| \*\/[\s|\S]*?\/\* \|\|\| MARKER \|\|\| \*\/)/, fileResult);
6668
fs.writeFileSync('./src/operator-typings.ts', typingsContent);
69+
70+
71+
function computeTypingsFor(s) {
72+
var captureRegex = /\/\*\-\-([\s|\S]*?)-\-\*\//g;
73+
var computeNumberRegex = /\*compute (\d.*?)?\*/;
74+
var tokenRegex = /\{.*?\}/g;
75+
76+
s = s.replace(captureRegex, function(capture) {
77+
capture = capture.trim();
78+
capture = capture.substr(3, capture.length - 3 * 2);
79+
var compute = computeNumberRegex.exec(capture);
80+
if (compute) {
81+
compute = compute[1] || '6';
82+
} else {
83+
compute = '6';
84+
}
85+
var range = compute.split('-');
86+
if (range.length === 1) {
87+
var start = 1;
88+
var end = range[0];
89+
} else {
90+
var start = range[0];
91+
var end = range[1];
92+
}
93+
94+
capture = capture.replace(computeNumberRegex, '').trim();
95+
96+
var tokenResult;
97+
var results = [];
98+
for (var number = start; number <= end; number++) {
99+
var res = capture.replace(tokenRegex, function(capture, index, str) {
100+
var items = [];
101+
capture = capture.substr(1, capture.length - 2);
102+
for (var i = start; i <= number; i++) {
103+
var typeName = 'T' + (i === 1 ? '' : i);
104+
items.push(capture.replace(/\|X\|/g, typeName).replace(/\|v\|/g, 'v' + i));
105+
}
106+
107+
return items.join(', ');
108+
});
109+
results.push(res);
110+
}
111+
112+
return results.join('\n');
113+
});
114+
115+
return s;
116+
}
117+
118+

0 commit comments

Comments
 (0)