@@ -6,12 +6,10 @@ import {KeyValueChangesFactory} from './pipes/keyvalue_changes';
66import { ObservablePipeFactory } from './pipes/observable_pipe' ;
77import { PromisePipeFactory } from './pipes/promise_pipe' ;
88import { NullPipeFactory } from './pipes/null_pipe' ;
9- import { BindingRecord } from './binding_record' ;
10- import { DirectiveRecord } from './directive_record' ;
11- import { DEFAULT } from './constants' ;
129import { ChangeDetection , ProtoChangeDetector , ChangeDetectorDefinition } from './interfaces' ;
1310import { 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' ;
1513
1614// HACK: workaround for Traceur behavior.
1715// It expects all transpiled modules to contain this marker.
@@ -47,6 +45,34 @@ export var defaultPipes = {
4745 "async" : async
4846} ;
4947
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+
5076
5177/**
5278 * Implements change detection that does not require `eval()`.
@@ -57,9 +83,9 @@ export var defaultPipes = {
5783 */
5884@Injectable ( )
5985export class DynamicChangeDetection extends ChangeDetection {
60- constructor ( public registry : PipeRegistry ) { super ( ) ; }
86+ constructor ( private registry : PipeRegistry ) { super ( ) ; }
6187
62- createProtoChangeDetector ( definition :ChangeDetectorDefinition ) : ProtoChangeDetector {
88+ createProtoChangeDetector ( definition : ChangeDetectorDefinition ) : ProtoChangeDetector {
6389 return new DynamicProtoChangeDetector ( this . registry , definition ) ;
6490 }
6591}
@@ -76,7 +102,7 @@ export class DynamicChangeDetection extends ChangeDetection {
76102export class JitChangeDetection extends ChangeDetection {
77103 constructor ( public registry : PipeRegistry ) { super ( ) ; }
78104
79- createProtoChangeDetector ( definition :ChangeDetectorDefinition ) : ProtoChangeDetector {
105+ createProtoChangeDetector ( definition : ChangeDetectorDefinition ) : ProtoChangeDetector {
80106 return new JitProtoChangeDetector ( this . registry , definition ) ;
81107 }
82108}
0 commit comments