@@ -2541,8 +2541,6 @@ module.exports = function (grunt) {
25412541 'nuget-time' ,
25422542 'nuget-virtualtime'
25432543 ] ) ;
2544-
2545-
25462544
25472545 grunt . registerTask ( 'rebuild-ts' , 'Rebuild typescript declarations' , function ( ) {
25482546 var path = require ( 'path' ) ;
@@ -2551,6 +2549,7 @@ module.exports = function (grunt) {
25512549 var cache = { } ;
25522550 var dependencies = { } ;
25532551 var concatItems = grunt . config . get ( 'concat' ) ;
2552+ var allLoadedFiles = { } ;
25542553
25552554 function loadFile ( tsFile ) {
25562555 if ( cache [ tsFile ] ) {
@@ -2587,10 +2586,17 @@ module.exports = function (grunt) {
25872586 return c ;
25882587 }
25892588
2590- function addLoadedFile ( tsFile ) {
2589+ function addLoadedFile ( concatKey , tsFile ) {
25912590 if ( loadedFiles [ tsFile ] ) {
25922591 return ;
25932592 }
2593+
2594+ if ( ! ( concatKey === 'all' || concatKey === 'main' || concatKey === 'lite' || concatKey === 'core' ) ) {
2595+ if ( allLoadedFiles [ 'lite' ] [ tsFile ] || allLoadedFiles [ 'core' ] [ tsFile ] ) {
2596+ loadedFiles [ tsFile ] = true ;
2597+ return ;
2598+ }
2599+ }
25942600
25952601 if ( ! ( tsFile . match ( / \/ t o s e t \. t s $ / ) || tsFile . match ( / \/ t o m a p \. t s $ / ) ) ) {
25962602 output . push ( cache [ tsFile ] ) ;
@@ -2599,37 +2605,50 @@ module.exports = function (grunt) {
25992605 loadedFiles [ tsFile ] = true ;
26002606 }
26012607
2602- function addFileContent ( tsFile ) {
2608+ function addFileContent ( concatKey , tsFile ) {
26032609 if ( loadedFiles [ tsFile ] ) {
26042610 return ;
26052611 }
26062612
26072613 var deps = dependencies [ tsFile ] ;
26082614 for ( var k = 0 ; k < deps . length ; k ++ ) {
2609- addLoadedFile ( deps [ k ] ) ;
2610- addFileContent ( deps [ k ] ) ;
2615+ addLoadedFile ( concatKey , deps [ k ] ) ;
2616+ addFileContent ( concatKey , deps [ k ] ) ;
26112617 }
26122618
2613- addLoadedFile ( tsFile ) ;
2619+ addLoadedFile ( concatKey , tsFile ) ;
26142620 }
26152621
26162622 loadFile ( 'ts/core/es5.ts' ) ;
26172623 loadFile ( 'ts/core/es6.ts' ) ;
2618-
2624+
2625+ var items = [ ] ;
26192626 for ( var key in concatItems ) {
2620- var loadedFiles = { } ;
2627+ if ( key . indexOf ( '-compat' ) > - 1 ) {
2628+ continue ;
2629+ }
2630+
2631+ if ( key === 'lite' || key === 'core' ) {
2632+ items . unshift ( key ) ;
2633+ } else {
2634+ items . push ( key ) ;
2635+ }
2636+ }
2637+
2638+ for ( var key = 0 ; key < items . length ; key ++ ) {
2639+ var concatKey = items [ key ] ;
2640+
2641+ if ( ! allLoadedFiles [ concatKey ] )
2642+ allLoadedFiles [ concatKey ] = { } ;
2643+ var loadedFiles = allLoadedFiles [ concatKey ] ;
2644+
26212645 var output = [ ] ;
26222646 var es6Output = [ ] ;
2623- var value = concatItems [ key ] ;
2647+ var value = concatItems [ concatKey ] ;
26242648 var src = value . src ;
26252649 var dest = value . dest ;
2626-
26272650 var dist = false ;
26282651
2629- if ( key . indexOf ( '-compat' ) > - 1 ) {
2630- continue ;
2631- }
2632-
26332652 if ( dest . indexOf ( 'dist/' ) === 0 ) {
26342653 dist = dest . match ( / d i s t \/ ( .* ?) \. j s / ) [ 1 ] ;
26352654 dest = dest . replace ( / d i s t \/ ( .* ?) \. j s / , 'ts/$1.d.ts' ) ;
@@ -2652,7 +2671,7 @@ module.exports = function (grunt) {
26522671 }
26532672
26542673 if ( tsFile . indexOf ( '/es5' ) === - 1 || tsFile . indexOf ( '/es6' ) === - 1 ) {
2655- addFileContent ( tsFile ) ;
2674+ addFileContent ( concatKey , tsFile ) ;
26562675 }
26572676 } else {
26582677 var valid = [ '/headers/' , '/longstacktraces/' , '/internal/' , '/autodetachobserver' , '/subjects/innersubscription' , '/perf/observablebase' , 'linq/enumerable/while' , '.compat.' , 'linq/observable/_' , '/linq/observable/fromarrayobservable' , '/joins/' , '/linq/observable/flatmapbase' , '/disposables/scheduleddisposable' , '/concurrency/catchscheduler' , '/core/observeonobserver' , '/testing/mockpromise' , '/testing/hotobservable' , '/testing/coldobservable' ] ;
@@ -2663,33 +2682,74 @@ module.exports = function (grunt) {
26632682 break ;
26642683 }
26652684 }
2666-
2667- if ( ! validResult ) {
2668- console . log ( 'missing file: ' + tsFile ) ;
2669- }
26702685 }
26712686 }
2672-
2673- output . unshift ( cache [ 'ts/core/es5.ts' ] ) ;
2674- es6Output . unshift ( cache [ 'ts/core/es6.ts' ] ) ;
2675-
2676- var outputString = 'declare module Rx {\n' + output . join ( '' ) + '\n}\n' ;
2677- outputString += '\ndeclare module "rx" { export = Rx; }\n' ;
2678- if ( dist ) {
2679- outputString += 'declare module "' + dist + '" { export = Rx; }' ;
2680- }
2681- grunt . file . write ( dest , outputString ) ;
2682-
2683- outputString = 'declare module Rx {\n' + es6Output . join ( '' ) + '\n}\n' ;
2684- outputString += '\ndeclare module "rx" { export = Rx; }\n' ;
2685- if ( dist ) {
2686- outputString += '\ndeclare module "' + dist + '" { export = Rx; }\n' ;
2687- }
2688- grunt . file . write ( dest . replace ( / ^ t s \/ / , 'ts/es6/' ) , outputString ) ;
2687+
2688+ var writeOut = function ( dest , output , es6 ) {
2689+ var outputString = 'declare module Rx {\n' + output . join ( '' ) + '\n}\n' ;
2690+ if ( concatKey === 'all' || concatKey === 'main' || concatKey === 'lite' || concatKey === 'core' ) {
2691+ outputString += '\ndeclare module "rx" { export = Rx; }\n' ;
2692+ }
2693+ if ( dist && concatKey !== 'core' ) {
2694+ outputString += 'declare module "' + dist + '" { export = Rx; }' ;
2695+ }
2696+
2697+ // TS 1.5.4 support
2698+ outputString = outputString
2699+ . replace ( / e x p o r t t y p e O b s e r v a b l e O r P r o m i s e < T > = I O b s e r v a b l e < T > \| O b s e r v a b l e < T > \| P r o m i s e < T > ; / g, '' )
2700+ . replace ( / e x p o r t t y p e A r r a y L i k e < T > = A r r a y < T > \| \{ l e n g t h : n u m b e r ; \[ i n d e x : n u m b e r \] : T ; \} ; / g, '' )
2701+ . replace ( / e x p o r t t y p e A r r a y O r I t e r a b l e < T > = A r r a y L i k e < T > \| I t e r a b l e < T > ; / g, '' )
2702+ . replace ( / e x p o r t t y p e A r r a y O r I t e r a b l e < T > = A r r a y L i k e < T > ; / g, '' )
2703+ . replace ( / e x p o r t t y p e _ S e l e c t o r < T , T R e s u l t > = \( v a l u e : T , i n d e x : n u m b e r , o b s e r v a b l e : O b s e r v a b l e < T > \) = > T R e s u l t ; / g, '' )
2704+ . replace ( / e x p o r t t y p e _ V a l u e O r S e l e c t o r < T , T R e s u l t > = T R e s u l t \| _ S e l e c t o r < T , T R e s u l t > ; / g, '' )
2705+ . replace ( / e x p o r t t y p e _ P r e d i c a t e < T > = _ S e l e c t o r < T , b o o l e a n > ; / g, '' )
2706+ . replace ( / e x p o r t t y p e _ C o m p a r e r < T , T R e s u l t > = \( v a l u e 1 : T , v a l u e 2 : T \) = > T R e s u l t ; / g, '' )
2707+ . replace ( / e x p o r t t y p e _ A c c u m u l a t o r < T , T A c c > = \( a c c : T A c c , v a l u e : T \) = > T A c c ; / g, '' )
2708+ . replace ( / e x p o r t t y p e _ F l a t M a p R e s u l t S e l e c t o r < T 1 , T 2 , T R e s u l t > = \( v a l u e : T 1 , s e l e c t o r V a l u e : T 2 , i n d e x : n u m b e r , s e l e c t o r O t h e r : n u m b e r \) = > T R e s u l t ; / g, '' )
2709+ . replace ( / _ P r e d i c a t e < ( \w * ?) > / g, '_Selector<$1, boolean>' )
2710+ . replace ( / _ V a l u e O r S e l e c t o r < ( \w * ?) , O b s e r v a b l e O r P r o m i s e < ( \w * ?) > > / g, 'ObservableOrPromise<$2> | _Selector<$1, ObservableOrPromise<$2>>' )
2711+ . replace ( / _ V a l u e O r S e l e c t o r < ( \w * ?) , A r r a y O r I t e r a b l e < ( \w * ?) > > / g, 'ArrayOrIterable<$2> | _Selector<$1, ArrayOrIterable<$2>>' )
2712+ . replace ( / _ V a l u e O r S e l e c t o r < ( \w * ?) , ( \w * ?) > / g, '$2 | _Selector<$1, $2>' )
2713+ . replace ( / _ S e l e c t o r < O b s e r v a b l e < ( \w * ?) > , ( \w * ?) > / g, '((value: Observable<$1>, index: number, observable: Observable<Observable<$1>>) => $2)' )
2714+ . replace ( / _ S e l e c t o r < ( \w * ?) , O b s e r v a b l e < ( \w * ?) > > / g, '((value: $1, index: number, observable: Observable<$1>) => Observable<$2>)' )
2715+ . replace ( / _ S e l e c t o r < ( \w * ?) , O b s e r v a b l e O r P r o m i s e < ( \w * ?) > > / g, '((value: $1, index: number, observable: ObservableOrPromise<$1>) => ObservableOrPromise<$2>)' )
2716+ . replace ( / _ S e l e c t o r < ( \w * ?) , A r r a y O r I t e r a b l e < ( \w * ?) > > / g, '((value: $1, index: number, observable: ArrayOrIterable<$1>) => ArrayOrIterable<$2>)' )
2717+ . replace ( / _ S e l e c t o r < ( \w * ?) , ( \w * ?) > / g, '((value: $1, index: number, observable: Observable<$1>) => $2)' )
2718+ . replace ( / _ C o m p a r e r < ( \w * ?) , ( \w * ?) > / g, '((value1: $1, value2: $1) => $2)' )
2719+ . replace ( / _ C o m p a r e r < T \| T O t h e r , b o o l e a n > / , '((value1: T | TOther, value2: T | TOther) => boolean)' )
2720+ . replace ( / _ A c c u m u l a t o r < ( \w * ?) , ( \w * ?) > / g, '((acc: $1, value: $1) => $2)' )
2721+ . replace ( / s p e c i a l ._ F l a t M a p R e s u l t S e l e c t o r < ( \w * ?) , ( \w * ?) , ( \w * ?) > / g, '((value: $1, selectorValue: $2, index: number, selectorOther: number) => $3)' )
2722+ . replace ( / O b s e r v a b l e O r P r o m i s e \< ( \w * ?) \> / g, '(IObservable<$1> | Observable<$1> \| Promise<$1>)' )
2723+
2724+ /*special._FlatMapResultSelector<T, TOther, TResult>*/
2725+ if ( es6 ) {
2726+ outputString = outputString
2727+ . replace ( / A r r a y O r I t e r a b l e < ( \w * ?) > / g, '(ArrayLike<$1> | Iterable<$1>)' ) ;
2728+ } else {
2729+ outputString = outputString
2730+ . replace ( / A r r a y O r I t e r a b l e < ( \w * ?) > / g, 'ArrayLike<$1>' ) ;
2731+ }
2732+
2733+ outputString = outputString
2734+ . replace ( / A r r a y L i k e < ( \w * ?) > / g, '(Array<$1> | { length: number;[index: number]: $1; })' )
2735+
2736+ outputString = outputString + '\n' ;
2737+ //.replace(/\(IObservable<TResult> \| Observable<TResult> \| Promise<TResult>\) \| \(value: T, index: number, observable: \(IObservable<T> \| Observable<T> \| Promise<T>\)\) => \(IObservable<TResult> \| Observable<TResult> \| Promise<TResult>\)\): Observable<TResult>/, '(IObservable<TResult> | Observable<TResult> | Promise<TResult> | (value: T, index: number, observable: (IObservable<T> | Observable<T> | Promise<T>)) => (IObservable<TResult> | Observable<TResult> | Promise<TResult>)): Observable<TResult>')
2738+
2739+ grunt . file . write ( dest , outputString ) ;
2740+ } ;
2741+
2742+ if ( concatKey === 'all' || concatKey === 'main' || concatKey === 'lite' || concatKey === 'core' ) {
2743+ output . unshift ( cache [ 'ts/core/es5.ts' ] ) ;
2744+ es6Output . unshift ( cache [ 'ts/core/es6.ts' ] ) ;
2745+ }
2746+
2747+ writeOut ( dest , output ) ;
2748+ writeOut ( dest . replace ( / .d .t s $ / , '.es6.d.ts' ) , es6Output , true ) ;
26892749 }
26902750
2691- grunt . file . write ( 'ts/es6/es6- iterable.d.ts' , grunt . file . read ( 'ts/core/es6-iterable.d.ts' ) ) ;
2692- grunt . file . write ( 'ts/es6/es6 -promise.d.ts' , grunt . file . read ( 'ts/core/es6-promise.d.ts' ) ) ;
2751+ grunt . file . write ( 'ts/iterable.es6 .d.ts' , grunt . file . read ( 'ts/core/es6-iterable.d.ts' ) ) ;
2752+ grunt . file . write ( 'ts/es6-promise.es6 .d.ts' , grunt . file . read ( 'ts/core/es6-promise.d.ts' ) ) ;
26932753 } ) ;
26942754
26952755 grunt . registerTask ( 'concat-min' , [
0 commit comments