Skip to content

Commit afb2636

Browse files
chore(typings): Adding plumbing to allow the types added to Observable by default, to come from one
1 parent fa99594 commit afb2636

8 files changed

+130
-9
lines changed

package.json

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313
},
1414
"scripts": {
1515
"build_all": "npm run build_es6 && npm run build_amd && npm run build_cjs && npm run build_global && npm run generate_packages",
16-
"build_amd": "rm -rf dist/amd && tsc typings/es6-shim/es6-shim.d.ts src/Rx.ts -m amd --outDir dist/amd --sourcemap --target ES5 --diagnostics --pretty",
17-
"build_cjs": "rm -rf dist/cjs && tsc typings/es6-shim/es6-shim.d.ts src/Rx.ts src/Rx.KitchenSink.ts -m commonjs --outDir dist/cjs --sourcemap --target ES5 -d --diagnostics --pretty",
18-
"build_es6": "rm -rf dist/es6 && tsc src/Rx.ts src/Rx.KitchenSink.ts --outDir dist/es6 --sourceMap --target ES6 -d --diagnostics --pretty",
16+
"build_amd": "npm run build_operators && rm -rf dist/amd && tsc typings/es6-shim/es6-shim.d.ts src/Rx.ts -m amd --outDir dist/amd --sourcemap --target ES5 --diagnostics --pretty",
17+
"build_cjs": "npm run build_operators && rm -rf dist/cjs && tsc typings/es6-shim/es6-shim.d.ts src/Rx.ts src/Rx.KitchenSink.ts -m commonjs --outDir dist/cjs --sourcemap --target ES5 -d --diagnostics --pretty",
18+
"build_es6": "npm run build_operators && rm -rf dist/es6 && tsc src/Rx.ts src/Rx.KitchenSink.ts --outDir dist/es6 --sourceMap --target ES6 -d --diagnostics --pretty",
1919
"build_closure": "java -jar ./node_modules/google-closure-compiler/compiler.jar ./dist/global/Rx.js --language_in ECMASCRIPT5 --create_source_map ./dist/global/Rx.min.js.map --js_output_file ./dist/global/Rx.min.js",
20-
"build_global": "rm -rf dist/global && mkdir \"dist/global\" && browserify src/Rx.global.js --outfile dist/global/Rx.js && npm run build_closure",
20+
"build_global": "npm run build_operators && rm -rf dist/global && mkdir \"dist/global\" && browserify src/Rx.global.js --outfile dist/global/Rx.js && npm run build_closure",
2121
"build_perf": "npm run build_cjs && npm run build_global && webdriver-manager update && npm run perf",
2222
"build_test": "rm -rf dist/ && npm run lint && npm run build_cjs && jasmine",
2323
"build_cover": "rm -rf dist/ && npm run lint && npm run build_cjs && npm run cover",
@@ -37,7 +37,8 @@
3737
"generate_packages": "node .make-packages.js",
3838
"generate_operator_patches": "tsc -outDir dist/ ./tools/generate-operator-patches.ts && node ./dist/generate-operator-patches.js --exec",
3939
"commit": "git-cz",
40-
"check_circular_dependencies": "madge ./dist/cjs --circular"
40+
"check_circular_dependencies": "madge ./dist/cjs --circular",
41+
"build_operators": "node typingsgen.js"
4142
},
4243
"repository": {
4344
"type": "git",

src/CoreOperators.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ import {ConnectableObservable} from './observable/ConnectableObservable';
44
import {Subject} from './Subject';
55
import {GroupedObservable} from './operator/groupBy-support';
66
import {Notification} from './Notification';
7+
/* tslint:disable */
8+
import * as operator from './operator-typings';
9+
/* tslint:enable */
710

811
export interface CoreOperators<T> {
912
buffer?: (closingNotifier: Observable<any>) => Observable<T[]>;

src/Observable.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@ import {Subject} from './Subject';
1212
import {Notification} from './Notification';
1313
import {rxSubscriber} from'./symbol/rxSubscriber';
1414

15+
<<<<<<< HEAD
16+
=======
17+
/* tslint:disable */
18+
import * as operator from './operator-typings';
19+
/* tslint:enable */
20+
>>>>>>> chore(typings): Adding plumbing to allow the types added to Observable by default, to come from one
1521
import {combineLatest as combineLatestStatic} from './operator/combineLatest-static';
1622
import {concat as concatStatic} from './operator/concat-static';
1723
import {merge as mergeStatic} from './operator/merge-static';

src/operator-typings.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/* tslint:disable:class-name */ /* tslint:disable:no-unused-variable */ /* tslint:disable:max-line-length */
2+
import {Observable} from './Observable';
3+
import {ConnectableObservable} from './observable/ConnectableObservable';
4+
import {Scheduler} from './Scheduler';
5+
import {Notification} from './Notification';
6+
import {Subject} from './Subject';
7+
import {Observer} from './Observer';
8+
import {GroupedObservable} from './operator/groupBy-support';
9+
import {GroupByObservable} from './operator/groupBy';
10+
import {TimeInterval} from './operator/extended/timeInterval';
11+
import {ObservableOrPromise, ArrayOrIterator, _Selector, _IndexSelector, _SwitchMapResultSelector, _ObservableMergeMapProjector, _IteratorMergeMapProjector, _Predicate, _PredicateObservable, _Comparer, _Accumulator, _MergeAccumulator} from './types';
12+
13+
/* ||| MARKER ||| */
14+
/* ||| MARKER ||| */

src/types.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import {Observable} from './Observable';
2+
export type ObservableOrPromise<T> = Observable<T> | Promise<T>;
3+
export type ArrayOrIterator<T> = Iterator<T> | ArrayLike<T> | Array<T>;
4+
5+
export type _Selector<T, TResult> = (value: T) => TResult;
6+
export type _IndexSelector<T, TResult> = (value: T, index: number) => TResult;
7+
export type _SwitchMapResultSelector<T1, T2, TResult> = (outerValue: T1, innerValue: T2, outerIndex: number, innerIndex: number) => TResult;
8+
export type _ObservableMergeMapProjector<T, R> = (value: T, index: number) => ObservableOrPromise<R>;
9+
export type _IteratorMergeMapProjector<T, R> = (value: T, index: number) => ArrayOrIterator<R>;
10+
11+
export type _Predicate<T> = _Selector<T, boolean>;
12+
export type _PredicateObservable<T> = (value: T, index: number, observable: Observable<T>) => boolean;
13+
14+
export type _Comparer<T, TResult> = (value1: T, value2: T) => TResult;
15+
export type _Accumulator<T, TAcc> = (acc: TAcc, value: T) => TAcc;
16+
export type _MergeAccumulator<T, TAcc> = (acc: TAcc, value: T) => Observable<TAcc>;

tsconfig.json

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,22 @@
77
"target": "es6",
88
"outDir": "dist/es6"
99
},
10-
"files": [
11-
"src/Rx.ts",
12-
"src/Rx.KitchenSink.ts"
13-
]
10+
"formatCodeOptions": {
11+
"indentSize": 2,
12+
"tabSize": 2,
13+
"convertTabsToSpaces": true,
14+
"insertSpaceAfterCommaDelimiter": true,
15+
"insertSpaceAfterSemicolonInForStatements": true,
16+
"insertSpaceBeforeAndAfterBinaryOperators": true,
17+
"insertSpaceAfterKeywordsInControlFlowStatements": true,
18+
"insertSpaceAfterFunctionKeywordForAnonymousFunctions": false,
19+
"insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false,
20+
"placeOpenBraceOnNewLineForFunctions": false,
21+
"placeOpenBraceOnNewLineForControlBlocks": false
22+
},
23+
"files": [
24+
"typings/es6-build-shim.d.ts",
25+
"src/Rx.ts",
26+
"src/Rx.KitchenSink.ts"
27+
]
1428
}

typings/es6-build-shim.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
declare type IterableShim<T> = Iterable<T>;

typingsgen.js

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
var fs = require('fs');
2+
var regex = /export interface .*?Operators<T> \{([\S|\s]*)\}/;
3+
4+
var core = fs.readFileSync('./src/CoreOperators.ts').toString();
5+
var kitchenSink = fs.readFileSync('./src/Rx.KitchenSink.ts').toString();
6+
var combinedMethods = core.match(regex)[1].trim() + '\n' + kitchenSink.match(regex)[1].trim();
7+
var contents = combinedMethods.split('\n');
8+
9+
var operators = {};
10+
var fileResult = '';
11+
12+
for (var i = 0; i < contents.length; i++) {
13+
var item = contents[i].trim();
14+
if (item) {
15+
var file = item.match(/(.*?)\: operator.operator_proto_(.*?)<T>;/);
16+
if (!file) {
17+
continue;
18+
}
19+
20+
var filename = file[2].trim();
21+
var fileContent;
22+
23+
if (fs.existsSync('./src/operator/' + filename + '.ts')) {
24+
fileContent = fs.readFileSync('./src/operator/' + filename + '.ts').toString();
25+
} else {
26+
fileContent = fs.readFileSync('./src/operator/extended/' + filename + '.ts').toString();
27+
}
28+
29+
var methods = [];
30+
31+
var r = new RegExp('export function [_]?' + filename + '([\\s|\\S]*?[\\;\\{])', 'g');
32+
33+
do {
34+
var result = r.exec(fileContent);
35+
if (result) {
36+
var method = result[1].trim();
37+
if (methods.length > 0 && method.indexOf('{') > -1) {
38+
continue;
39+
}
40+
41+
method = method.split(/\n/g)
42+
.filter(function (x) { return !!x; })
43+
.map(function (x) { return ('' + x).trim(); })
44+
.join(' ')
45+
.replace(/ = .*?([\,|\)])/g, '$1');
46+
47+
if (method[method.length - 1] === ';' || method[method.length - 1] === '{') {
48+
method = method.substr(0, method.length - 1).trim();
49+
}
50+
51+
method = method.replace(/^<T>/, '').replace(/^<T, /, '<');
52+
methods.push(method);
53+
}
54+
} while(result);
55+
56+
if (!operators[filename]) {
57+
operators[filename] = true;
58+
fileResult += 'export interface operator_proto_' + filename + '<T> {\n ' + methods.join(';\n ') + ';\n}\n';
59+
}
60+
}
61+
}
62+
63+
var typingsContent = fs.readFileSync('./src/operator-typings.ts').toString();
64+
fileResult = '/* ||| MARKER ||| */\n' + fileResult + '/* ||| MARKER ||| */';
65+
typingsContent = typingsContent.replace(/(\/\* \|\|\| MARKER \|\|\| \*\/[\s|\S]*?\/\* \|\|\| MARKER \|\|\| \*\/)/, fileResult);
66+
fs.writeFileSync('./src/operator-typings.ts', typingsContent);

0 commit comments

Comments
 (0)