@@ -6,12 +6,10 @@ import {KeyValueChangesFactory} from './pipes/keyvalue_changes';
6
6
import { ObservablePipeFactory } from './pipes/observable_pipe' ;
7
7
import { PromisePipeFactory } from './pipes/promise_pipe' ;
8
8
import { NullPipeFactory } from './pipes/null_pipe' ;
9
- import { BindingRecord } from './binding_record' ;
10
- import { DirectiveRecord } from './directive_record' ;
11
- import { DEFAULT } from './constants' ;
12
9
import { ChangeDetection , ProtoChangeDetector , ChangeDetectorDefinition } from './interfaces' ;
13
10
import { Injectable } from 'angular2/src/di/decorators' ;
14
- import { List } from 'angular2/src/facade/collection' ;
11
+ import { List , StringMapWrapper } from 'angular2/src/facade/collection' ;
12
+ import { isPresent , BaseException } from 'angular2/src/facade/lang' ;
15
13
16
14
// HACK: workaround for Traceur behavior.
17
15
// It expects all transpiled modules to contain this marker.
@@ -47,6 +45,34 @@ export var defaultPipes = {
47
45
"async" : async
48
46
} ;
49
47
48
+ export var preGeneratedProtoDetectors = { } ;
49
+
50
+
51
+ /**
52
+ * Implements change detection using a map of pregenerated proto detectors.
53
+ *
54
+ * @exportedAs angular2/change_detection
55
+ */
56
+ export class PreGeneratedChangeDetection extends ChangeDetection {
57
+ _dynamicChangeDetection : ChangeDetection ;
58
+ _protoChangeDetectors : any ;
59
+
60
+ constructor ( private registry : PipeRegistry , protoChangeDetectors ?) {
61
+ super ( ) ;
62
+ this . _dynamicChangeDetection = new DynamicChangeDetection ( registry ) ;
63
+ this . _protoChangeDetectors =
64
+ isPresent ( protoChangeDetectors ) ? protoChangeDetectors : preGeneratedProtoDetectors ;
65
+ }
66
+
67
+ createProtoChangeDetector ( definition : ChangeDetectorDefinition ) : ProtoChangeDetector {
68
+ var id = definition . id ;
69
+ if ( StringMapWrapper . contains ( this . _protoChangeDetectors , id ) ) {
70
+ return StringMapWrapper . get ( this . _protoChangeDetectors , id ) ( this . registry ) ;
71
+ }
72
+ return this . _dynamicChangeDetection . createProtoChangeDetector ( definition ) ;
73
+ }
74
+ }
75
+
50
76
51
77
/**
52
78
* Implements change detection that does not require `eval()`.
@@ -57,9 +83,9 @@ export var defaultPipes = {
57
83
*/
58
84
@Injectable ( )
59
85
export class DynamicChangeDetection extends ChangeDetection {
60
- constructor ( public registry : PipeRegistry ) { super ( ) ; }
86
+ constructor ( private registry : PipeRegistry ) { super ( ) ; }
61
87
62
- createProtoChangeDetector ( definition :ChangeDetectorDefinition ) : ProtoChangeDetector {
88
+ createProtoChangeDetector ( definition : ChangeDetectorDefinition ) : ProtoChangeDetector {
63
89
return new DynamicProtoChangeDetector ( this . registry , definition ) ;
64
90
}
65
91
}
@@ -76,7 +102,7 @@ export class DynamicChangeDetection extends ChangeDetection {
76
102
export class JitChangeDetection extends ChangeDetection {
77
103
constructor ( public registry : PipeRegistry ) { super ( ) ; }
78
104
79
- createProtoChangeDetector ( definition :ChangeDetectorDefinition ) : ProtoChangeDetector {
105
+ createProtoChangeDetector ( definition : ChangeDetectorDefinition ) : ProtoChangeDetector {
80
106
return new JitProtoChangeDetector ( this . registry , definition ) ;
81
107
}
82
108
}
0 commit comments