From b64b5ece65213c65fe0f4d9a24be9c95a115de9c Mon Sep 17 00:00:00 2001 From: Alex Eagle Date: Mon, 3 Oct 2016 16:46:05 -0700 Subject: [PATCH] refactor(facade): Remove most of StringMapWrapper facade. (#12022) This change mostly automated by https://github.com/alexeagle/tslint/commit/12012b07a2f7c341424aee5b40660ca0839bc347 with some manual fixes. --- .../benchpress/src/metric/multi_metric.ts | 4 +- .../benchpress/src/metric/user_metric.ts | 3 +- .../@angular/benchpress/src/reporter/util.ts | 6 +- .../benchpress/src/sample_description.ts | 3 +- .../test/metric/perflog_metric_spec.ts | 3 +- .../compiler-cli/test/reflector_host_spec.ts | 2 +- .../test/static_reflector_spec.ts | 1 - .../src/animation/animation_compiler.ts | 34 ++++---- .../src/animation/animation_parser.ts | 82 ++++++++----------- .../@angular/compiler/src/compile_metadata.ts | 5 +- .../compiler/src/output/value_util.ts | 5 +- .../src/template_parser/template_parser.ts | 13 +-- modules/@angular/compiler/src/util.ts | 6 +- .../src/view_compiler/compile_element.ts | 4 +- .../src/view_compiler/event_binder.ts | 14 ++-- .../src/view_compiler/view_builder.ts | 22 +++-- .../test/animation/animation_parser_spec.ts | 6 +- .../src/animation/animation_style_util.ts | 23 +++--- .../core/src/animation/view_animation_map.ts | 6 +- .../differs/default_keyvalue_differ.ts | 2 +- .../@angular/core/src/linker/debug_context.ts | 4 +- .../@angular/core/src/reflection/reflector.ts | 4 +- .../change_detection_integration_spec.ts | 3 +- .../@angular/core/testing/testing_internal.ts | 4 +- modules/@angular/facade/src/collection.ts | 28 +------ modules/@angular/forms/src/form_builder.ts | 5 +- modules/@angular/forms/src/model.ts | 10 +-- modules/@angular/forms/src/validators.ts | 2 +- .../src/dom/web_animations_driver.ts | 9 +- .../src/dom/web_animations_player.ts | 5 +- .../test/dom/web_animations_driver_spec.ts | 3 +- .../platform-browser/testing/matchers.ts | 8 +- .../testing/mock_animation_driver.ts | 4 +- .../platform-server/src/parse5_adapter.ts | 4 +- modules/benchmarks/src/tree/ng2_ftl/index.ts | 4 +- .../src/tree/ng2_static_ftl/index.ts | 4 +- 36 files changed, 140 insertions(+), 205 deletions(-) diff --git a/modules/@angular/benchpress/src/metric/multi_metric.ts b/modules/@angular/benchpress/src/metric/multi_metric.ts index 09b4668836..1a92a33200 100644 --- a/modules/@angular/benchpress/src/metric/multi_metric.ts +++ b/modules/@angular/benchpress/src/metric/multi_metric.ts @@ -7,7 +7,6 @@ */ import {Injector, OpaqueToken} from '@angular/core'; -import {StringMapWrapper} from '../facade/collection'; import {Metric} from '../metric'; @@ -57,8 +56,7 @@ export class MultiMetric extends Metric { function mergeStringMaps(maps: {[key: string]: string}[]): {[key: string]: string} { var result: {[key: string]: string} = {}; - maps.forEach( - map => { StringMapWrapper.forEach(map, (value, prop) => { result[prop] = value; }); }); + maps.forEach(map => { Object.keys(map).forEach(prop => { result[prop] = map[prop]; }); }); return result; } diff --git a/modules/@angular/benchpress/src/metric/user_metric.ts b/modules/@angular/benchpress/src/metric/user_metric.ts index e5828a1ebb..e1c221df26 100644 --- a/modules/@angular/benchpress/src/metric/user_metric.ts +++ b/modules/@angular/benchpress/src/metric/user_metric.ts @@ -9,7 +9,6 @@ import {Inject, Injectable} from '@angular/core'; import {Options} from '../common_options'; -import {StringMapWrapper} from '../facade/collection'; import {isNumber} from '../facade/lang'; import {Metric} from '../metric'; import {WebDriverAdapter} from '../web_driver_adapter'; @@ -40,7 +39,7 @@ export class UserMetric extends Metric { reject = rej; }); let adapter = this._wdAdapter; - let names = StringMapWrapper.keys(this._userMetrics); + let names = Object.keys(this._userMetrics); function getAndClearValues() { Promise.all(names.map(name => adapter.executeScript(`return window.${name}`))) diff --git a/modules/@angular/benchpress/src/reporter/util.ts b/modules/@angular/benchpress/src/reporter/util.ts index afe417c5ba..d04371cc1c 100644 --- a/modules/@angular/benchpress/src/reporter/util.ts +++ b/modules/@angular/benchpress/src/reporter/util.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import {StringMapWrapper} from '../facade/collection'; + import {NumberWrapper} from '../facade/lang'; import {MeasureValues} from '../measure_values'; import {Statistic} from '../statistic'; @@ -17,7 +17,7 @@ export function formatNum(n: number) { export function sortedProps(obj: {[key: string]: any}) { var props: string[] = []; - StringMapWrapper.forEach(obj, (value, prop) => props.push(prop)); + props.push(...Object.keys(obj)); props.sort(); return props; } @@ -30,4 +30,4 @@ export function formatStats(validSamples: MeasureValues[], metricName: string): // Note: Don't use the unicode character for +- as it might cause // hickups for consoles... return NumberWrapper.isNaN(cv) ? formattedMean : `${formattedMean}+-${Math.floor(cv)}%`; -} \ No newline at end of file +} diff --git a/modules/@angular/benchpress/src/sample_description.ts b/modules/@angular/benchpress/src/sample_description.ts index 3cf5a99a3f..a82e5e1b5e 100644 --- a/modules/@angular/benchpress/src/sample_description.ts +++ b/modules/@angular/benchpress/src/sample_description.ts @@ -9,7 +9,6 @@ import {OpaqueToken} from '@angular/core'; import {Options} from './common_options'; -import {StringMapWrapper} from './facade/collection'; import {Metric} from './metric'; import {Validator} from './validator'; @@ -42,7 +41,7 @@ export class SampleDescription { public metrics: {[key: string]: any}) { this.description = {}; descriptions.forEach(description => { - StringMapWrapper.forEach(description, (value, prop) => this.description[prop] = value); + Object.keys(description).forEach(prop => { this.description[prop] = description[prop]; }); }); } diff --git a/modules/@angular/benchpress/test/metric/perflog_metric_spec.ts b/modules/@angular/benchpress/test/metric/perflog_metric_spec.ts index eab81efd8b..bf933e1ad8 100644 --- a/modules/@angular/benchpress/test/metric/perflog_metric_spec.ts +++ b/modules/@angular/benchpress/test/metric/perflog_metric_spec.ts @@ -10,7 +10,6 @@ import {Provider} from '@angular/core'; import {AsyncTestCompleter, beforeEach, describe, expect, inject, it} from '@angular/core/testing/testing_internal'; import {Metric, Options, PerfLogEvent, PerfLogFeatures, PerflogMetric, ReflectiveInjector, WebDriverExtension} from '../../index'; -import {StringMapWrapper} from '../../src/facade/collection'; import {isPresent} from '../../src/facade/lang'; import {TraceEventFactory} from '../trace_event_factory'; @@ -68,7 +67,7 @@ export function main() { function sortedKeys(stringMap: {[key: string]: any}) { var res: string[] = []; - StringMapWrapper.forEach(stringMap, (_, key) => { res.push(key); }); + res.push(...Object.keys(stringMap)); res.sort(); return res; } diff --git a/modules/@angular/compiler-cli/test/reflector_host_spec.ts b/modules/@angular/compiler-cli/test/reflector_host_spec.ts index c37284bff3..a0dc2c3e8d 100644 --- a/modules/@angular/compiler-cli/test/reflector_host_spec.ts +++ b/modules/@angular/compiler-cli/test/reflector_host_spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import {beforeEach, ddescribe, describe, expect, iit, it} from '@angular/core/testing/testing_internal'; +import {beforeEach, describe, expect, it} from '@angular/core/testing/testing_internal'; import * as ts from 'typescript'; import {ReflectorHost} from '../src/reflector_host'; diff --git a/modules/@angular/compiler-cli/test/static_reflector_spec.ts b/modules/@angular/compiler-cli/test/static_reflector_spec.ts index 75f8c823f8..feb2d553ee 100644 --- a/modules/@angular/compiler-cli/test/static_reflector_spec.ts +++ b/modules/@angular/compiler-cli/test/static_reflector_spec.ts @@ -9,7 +9,6 @@ import {StaticReflector, StaticReflectorHost, StaticSymbol} from '@angular/compiler-cli/src/static_reflector'; import {HostListener, animate, group, keyframes, sequence, state, style, transition, trigger} from '@angular/core'; import {ListWrapper} from '@angular/facade/src/collection'; -import {isBlank} from '@angular/facade/src/lang'; import {MetadataCollector} from '@angular/tsc-wrapped'; import * as ts from 'typescript'; diff --git a/modules/@angular/compiler/src/animation/animation_compiler.ts b/modules/@angular/compiler/src/animation/animation_compiler.ts index 0622068c18..edb5398701 100644 --- a/modules/@angular/compiler/src/animation/animation_compiler.ts +++ b/modules/@angular/compiler/src/animation/animation_compiler.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import {StringMapWrapper} from '../facade/collection'; + import {isPresent} from '../facade/lang'; import {Identifiers, resolveIdentifier} from '../identifiers'; import * as o from '../output/output_ast'; @@ -61,8 +61,7 @@ class _AnimationBuilder implements AnimationAstVisitor { } ast.styles.forEach(entry => { - stylesArr.push( - o.literalMap(StringMapWrapper.keys(entry).map(key => [key, o.literal(entry[key])]))); + stylesArr.push(o.literalMap(Object.keys(entry).map(key => [key, o.literal(entry[key])]))); }); return o.importExpr(resolveIdentifier(Identifiers.AnimationStyles)).instantiate([ @@ -133,9 +132,8 @@ class _AnimationBuilder implements AnimationAstVisitor { visitAnimationStateDeclaration( ast: AnimationStateDeclarationAst, context: _AnimationBuilderContext): void { var flatStyles: {[key: string]: string | number} = {}; - _getStylesArray(ast).forEach(entry => { - StringMapWrapper.forEach(entry, (value: string, key: string) => { flatStyles[key] = value; }); - }); + _getStylesArray(ast).forEach( + entry => { Object.keys(entry).forEach(key => { flatStyles[key] = entry[key]; }); }); context.stateMap.registerState(ast.stateName, flatStyles); } @@ -291,18 +289,16 @@ class _AnimationBuilder implements AnimationAstVisitor { var fnVariable = o.variable(this._fnVarName); var lookupMap: any[] = []; - StringMapWrapper.forEach( - context.stateMap.states, (value: {[key: string]: string}, stateName: string) => { - var variableValue = EMPTY_MAP; - if (isPresent(value)) { - let styleMap: any[] = []; - StringMapWrapper.forEach(value, (value: string, key: string) => { - styleMap.push([key, o.literal(value)]); - }); - variableValue = o.literalMap(styleMap); - } - lookupMap.push([stateName, variableValue]); - }); + Object.keys(context.stateMap.states).forEach(stateName => { + const value = context.stateMap.states[stateName]; + var variableValue = EMPTY_MAP; + if (isPresent(value)) { + let styleMap: any[] = []; + Object.keys(value).forEach(key => { styleMap.push([key, o.literal(value[key])]); }); + variableValue = o.literalMap(styleMap); + } + lookupMap.push([stateName, variableValue]); + }); const compiledStatesMapStmt = this._statesMapVar.set(o.literalMap(lookupMap)).toDeclStmt(); const statements: o.Statement[] = [compiledStatesMapStmt, fnStatement]; @@ -349,7 +345,7 @@ function _isEndStateAnimateStep(step: AnimationAst): boolean { if (step instanceof AnimationStepAst && step.duration > 0 && step.keyframes.length == 2) { var styles1 = _getStylesArray(step.keyframes[0])[0]; var styles2 = _getStylesArray(step.keyframes[1])[0]; - return StringMapWrapper.isEmpty(styles1) && StringMapWrapper.isEmpty(styles2); + return Object.keys(styles1).length === 0 && Object.keys(styles2).length === 0; } return false; } diff --git a/modules/@angular/compiler/src/animation/animation_parser.ts b/modules/@angular/compiler/src/animation/animation_parser.ts index 163c38aac3..70f74e8e45 100644 --- a/modules/@angular/compiler/src/animation/animation_parser.ts +++ b/modules/@angular/compiler/src/animation/animation_parser.ts @@ -20,6 +20,10 @@ const _INITIAL_KEYFRAME = 0; const _TERMINAL_KEYFRAME = 1; const _ONE_SECOND = 1000; +declare type Styles = { + [key: string]: string | number +}; + export class AnimationParseError extends ParseError { constructor(message: string) { super(null, message); } toString(): string { return `${this.msg}`; } @@ -90,11 +94,11 @@ export class AnimationParser { function _parseAnimationDeclarationStates( stateMetadata: CompileAnimationStateDeclarationMetadata, errors: AnimationParseError[]): AnimationStateDeclarationAst[] { - var styleValues: {[key: string]: string | number}[] = []; + var styleValues: Styles[] = []; stateMetadata.styles.styles.forEach(stylesEntry => { // TODO (matsko): change this when we get CSS class integration support if (isStringMap(stylesEntry)) { - styleValues.push(<{[key: string]: string | number}>stylesEntry); + styleValues.push(stylesEntry as Styles); } else { errors.push(new AnimationParseError( `State based animations cannot contain references to other states`)); @@ -169,16 +173,6 @@ function _parseAnimationTransitionExpr( return expressions; } -function _fetchSylesFromState(stateName: string, stateStyles: {[key: string]: AnimationStylesAst}): - CompileAnimationStyleMetadata { - var entry = stateStyles[stateName]; - if (isPresent(entry)) { - var styles = <{[key: string]: string | number}[]>entry.styles; - return new CompileAnimationStyleMetadata(0, styles); - } - return null; -} - function _normalizeAnimationEntry(entry: CompileAnimationMetadata | CompileAnimationMetadata[]): CompileAnimationMetadata { return isArray(entry) ? new CompileAnimationSequenceMetadata(entry) : @@ -234,7 +228,7 @@ function _normalizeStyleStepEntry( } var newSteps: CompileAnimationMetadata[] = []; - var combinedStyles: {[key: string]: string | number}[]; + var combinedStyles: Styles[]; steps.forEach(step => { if (step instanceof CompileAnimationStyleMetadata) { // this occurs when a style step is followed by a previous style step @@ -290,7 +284,7 @@ function _normalizeStyleStepEntry( function _resolveStylesFromState( stateName: string, stateStyles: {[key: string]: AnimationStylesAst}, errors: AnimationParseError[]) { - var styles: {[key: string]: string | number}[] = []; + var styles: Styles[] = []; if (stateName[0] != ':') { errors.push(new AnimationParseError(`Animation states via styles must be prefixed with a ":"`)); } else { @@ -302,7 +296,7 @@ function _resolveStylesFromState( } else { value.styles.forEach(stylesEntry => { if (isStringMap(stylesEntry)) { - styles.push(<{[key: string]: string | number}>stylesEntry); + styles.push(stylesEntry as Styles); } }); } @@ -336,15 +330,13 @@ function _parseAnimationKeyframes( var lastOffset = 0; keyframeSequence.steps.forEach(styleMetadata => { var offset = styleMetadata.offset; - var keyframeStyles: {[key: string]: string | number} = {}; + var keyframeStyles: Styles = {}; styleMetadata.styles.forEach(entry => { - StringMapWrapper.forEach( - <{[key: string]: string | number}>entry, - (value: any /** TODO #9100 */, prop: any /** TODO #9100 */) => { - if (prop != 'offset') { - keyframeStyles[prop] = value; - } - }); + Object.keys(entry).forEach(prop => { + if (prop != 'offset') { + keyframeStyles[prop] = (entry as Styles)[prop]; + } + }); }); if (isPresent(offset)) { @@ -381,24 +373,22 @@ function _parseAnimationKeyframes( let entry = rawKeyframes[i]; let styles = entry[1]; - StringMapWrapper.forEach( - styles, (value: any /** TODO #9100 */, prop: any /** TODO #9100 */) => { - if (!isPresent(firstKeyframeStyles[prop])) { - firstKeyframeStyles[prop] = FILL_STYLE_FLAG; - } - }); + Object.keys(styles).forEach(prop => { + if (!isPresent(firstKeyframeStyles[prop])) { + firstKeyframeStyles[prop] = FILL_STYLE_FLAG; + } + }); } for (i = limit - 1; i >= 0; i--) { let entry = rawKeyframes[i]; let styles = entry[1]; - StringMapWrapper.forEach( - styles, (value: any /** TODO #9100 */, prop: any /** TODO #9100 */) => { - if (!isPresent(lastKeyframeStyles[prop])) { - lastKeyframeStyles[prop] = value; - } - }); + Object.keys(styles).forEach(prop => { + if (!isPresent(lastKeyframeStyles[prop])) { + lastKeyframeStyles[prop] = styles[prop]; + } + }); } return rawKeyframes.map( @@ -422,11 +412,9 @@ function _parseTransitionAnimation( if (entry instanceof CompileAnimationStyleMetadata) { entry.styles.forEach(stylesEntry => { // by this point we know that we only have stringmap values - var map = <{[key: string]: string | number}>stylesEntry; - StringMapWrapper.forEach( - map, (value: any /** TODO #9100 */, prop: any /** TODO #9100 */) => { - collectedStyles.insertAtTime(prop, time, value); - }); + var map = stylesEntry as Styles; + Object.keys(map).forEach( + prop => { collectedStyles.insertAtTime(prop, time, map[prop]); }); }); previousStyles = entry.styles; return; @@ -472,7 +460,7 @@ function _parseTransitionAnimation( } else { let styleData = styles; let offset = _TERMINAL_KEYFRAME; - let styleAst = new AnimationStylesAst(<{[key: string]: string | number}[]>styleData.styles); + let styleAst = new AnimationStylesAst(styleData.styles as Styles[]); var keyframe = new AnimationKeyframeAst(offset, styleAst); keyframes = [keyframe]; } @@ -484,9 +472,8 @@ function _parseTransitionAnimation( keyframes.forEach( (keyframe: any /** TODO #9100 */) => keyframe.styles.styles.forEach( - (entry: any /** TODO #9100 */) => StringMapWrapper.forEach( - entry, (value: any /** TODO #9100 */, prop: any /** TODO #9100 */) => - collectedStyles.insertAtTime(prop, currentTime, value)))); + (entry: any /** TODO #9100 */) => Object.keys(entry).forEach( + prop => { collectedStyles.insertAtTime(prop, currentTime, entry[prop]); }))); } else { // if the code reaches this stage then an error // has already been populated within the _normalizeStyleSteps() @@ -559,10 +546,11 @@ function _parseTimeExpression( function _createStartKeyframeFromEndKeyframe( endKeyframe: AnimationKeyframeAst, startTime: number, duration: number, collectedStyles: StylesCollection, errors: AnimationParseError[]): AnimationKeyframeAst { - var values: {[key: string]: string | number} = {}; + var values: Styles = {}; var endTime = startTime + duration; - endKeyframe.styles.styles.forEach((styleData: {[key: string]: string | number}) => { - StringMapWrapper.forEach(styleData, (val: any /** TODO #9100 */, prop: any /** TODO #9100 */) => { + endKeyframe.styles.styles.forEach((styleData: Styles) => { + Object.keys(styleData).forEach(prop => { + const val = styleData[prop]; if (prop == 'offset') return; var resultIndex = collectedStyles.indexOfAtOrBeforeTime(prop, startTime); diff --git a/modules/@angular/compiler/src/compile_metadata.ts b/modules/@angular/compiler/src/compile_metadata.ts index 94db25d418..a067044c63 100644 --- a/modules/@angular/compiler/src/compile_metadata.ts +++ b/modules/@angular/compiler/src/compile_metadata.ts @@ -8,7 +8,7 @@ import {ChangeDetectionStrategy, SchemaMetadata, Type, ViewEncapsulation} from '@angular/core'; -import {ListWrapper, MapWrapper, StringMapWrapper} from './facade/collection'; +import {ListWrapper, MapWrapper} from './facade/collection'; import {isPresent, isStringMap, normalizeBlank, normalizeBool} from './facade/lang'; import {LifecycleHooks} from './private_import_core'; import {CssSelector} from './selector'; @@ -342,7 +342,8 @@ export class CompileDirectiveMetadata implements CompileMetadataWithIdentifier { var hostProperties: {[key: string]: string} = {}; var hostAttributes: {[key: string]: string} = {}; if (isPresent(host)) { - StringMapWrapper.forEach(host, (value: string, key: string) => { + Object.keys(host).forEach(key => { + const value = host[key]; const matches = key.match(HOST_REG_EXP); if (matches === null) { hostAttributes[key] = value; diff --git a/modules/@angular/compiler/src/output/value_util.ts b/modules/@angular/compiler/src/output/value_util.ts index 9b0df14bc0..37ac5756ec 100644 --- a/modules/@angular/compiler/src/output/value_util.ts +++ b/modules/@angular/compiler/src/output/value_util.ts @@ -8,7 +8,6 @@ import {CompileIdentifierMetadata} from '../compile_metadata'; -import {StringMapWrapper} from '../facade/collection'; import {ValueTransformer, visitValue} from '../util'; import * as o from './output_ast'; @@ -24,9 +23,7 @@ class _ValueOutputAstTransformer implements ValueTransformer { visitStringMap(map: {[key: string]: any}, type: o.MapType): o.Expression { var entries: Array[] = []; - StringMapWrapper.forEach(map, (value: any, key: string) => { - entries.push([key, visitValue(value, this, null)]); - }); + Object.keys(map).forEach(key => { entries.push([key, visitValue(map[key], this, null)]); }); return o.literalMap(entries, type); } diff --git a/modules/@angular/compiler/src/template_parser/template_parser.ts b/modules/@angular/compiler/src/template_parser/template_parser.ts index 5710605bd6..0f884f25e5 100644 --- a/modules/@angular/compiler/src/template_parser/template_parser.ts +++ b/modules/@angular/compiler/src/template_parser/template_parser.ts @@ -11,7 +11,6 @@ import {Inject, Injectable, OpaqueToken, Optional, SchemaMetadata, SecurityConte import {CompileDirectiveMetadata, CompilePipeMetadata, CompileTemplateMetadata, CompileTokenMetadata, removeIdentifierDuplicates} from '../compile_metadata'; import {AST, ASTWithSource, BindingPipe, EmptyExpr, Interpolation, ParserError, RecursiveAstVisitor, TemplateBinding} from '../expression_parser/ast'; import {Parser} from '../expression_parser/parser'; -import {StringMapWrapper} from '../facade/collection'; import {isPresent, isString} from '../facade/lang'; import {I18NHtmlParser} from '../i18n/i18n_html_parser'; import {Identifiers, identifierToken, resolveIdentifierToken} from '../identifiers'; @@ -832,7 +831,8 @@ class TemplateParseVisitor implements html.Visitor { elementName: string, hostProps: {[key: string]: string}, sourceSpan: ParseSourceSpan, targetPropertyAsts: BoundElementPropertyAst[]) { if (hostProps) { - StringMapWrapper.forEach(hostProps, (expression: string, propName: string) => { + Object.keys(hostProps).forEach(propName => { + const expression = hostProps[propName]; if (isString(expression)) { const exprAst = this._parseBinding(expression, sourceSpan); targetPropertyAsts.push( @@ -850,7 +850,8 @@ class TemplateParseVisitor implements html.Visitor { hostListeners: {[key: string]: string}, sourceSpan: ParseSourceSpan, targetEventAsts: BoundEventAst[]) { if (hostListeners) { - StringMapWrapper.forEach(hostListeners, (expression: string, propName: string) => { + Object.keys(hostListeners).forEach(propName => { + const expression = hostListeners[propName]; if (isString(expression)) { this._parseEventOrAnimationEvent(propName, expression, sourceSpan, [], targetEventAsts); } else { @@ -875,7 +876,8 @@ class TemplateParseVisitor implements html.Visitor { } }); - StringMapWrapper.forEach(directiveProperties, (elProp: string, dirProp: string) => { + Object.keys(directiveProperties).forEach(dirProp => { + const elProp = directiveProperties[dirProp]; const boundProp = boundPropsByName.get(elProp); // Bindings are optional, so this binding only needs to be set up if an expression is given. @@ -1047,7 +1049,8 @@ class TemplateParseVisitor implements html.Visitor { const allDirectiveEvents = new Set(); directives.forEach(directive => { - StringMapWrapper.forEach(directive.directive.outputs, (eventName: string) => { + Object.keys(directive.directive.outputs).forEach(k => { + const eventName = directive.directive.outputs[k]; allDirectiveEvents.add(eventName); }); }); diff --git a/modules/@angular/compiler/src/util.ts b/modules/@angular/compiler/src/util.ts index f69eb0c63c..512c897566 100644 --- a/modules/@angular/compiler/src/util.ts +++ b/modules/@angular/compiler/src/util.ts @@ -7,7 +7,6 @@ */ import {CompileTokenMetadata} from './compile_metadata'; -import {StringMapWrapper} from './facade/collection'; import {StringWrapper, isArray, isBlank, isPresent, isPrimitive, isStrictStringMap} from './facade/lang'; import * as o from './output/output_ast'; @@ -63,9 +62,8 @@ export class ValueTransformer implements ValueVisitor { } visitStringMap(map: {[key: string]: any}, context: any): any { var result = {}; - StringMapWrapper.forEach(map, (value: any /** TODO #9100 */, key: any /** TODO #9100 */) => { - (result as any /** TODO #9100 */)[key] = visitValue(value, this, context); - }); + Object.keys(map).forEach( + key => { (result as any /** TODO #9100 */)[key] = visitValue(map[key], this, context); }); return result; } visitPrimitive(value: any, context: any): any { return value; } diff --git a/modules/@angular/compiler/src/view_compiler/compile_element.ts b/modules/@angular/compiler/src/view_compiler/compile_element.ts index 575929a789..8986330e89 100644 --- a/modules/@angular/compiler/src/view_compiler/compile_element.ts +++ b/modules/@angular/compiler/src/view_compiler/compile_element.ts @@ -8,7 +8,7 @@ import {CompileDiDependencyMetadata, CompileDirectiveMetadata, CompileIdentifierMetadata, CompileProviderMetadata, CompileQueryMetadata, CompileTokenMetadata} from '../compile_metadata'; -import {ListWrapper, MapWrapper, StringMapWrapper} from '../facade/collection'; +import {ListWrapper, MapWrapper} from '../facade/collection'; import {isPresent} from '../facade/lang'; import {Identifiers, identifierToken, resolveIdentifier, resolveIdentifierToken} from '../identifiers'; import * as o from '../output/output_ast'; @@ -192,7 +192,7 @@ export class CompileElement extends CompileNode { queriesWithReads, queriesForProvider.map(query => new _QueryWithRead(query, resolvedProvider.token))); }); - StringMapWrapper.forEach(this.referenceTokens, (_: CompileTokenMetadata, varName: string) => { + Object.keys(this.referenceTokens).forEach(varName => { var token = this.referenceTokens[varName]; var varValue: o.Expression; if (isPresent(token)) { diff --git a/modules/@angular/compiler/src/view_compiler/event_binder.ts b/modules/@angular/compiler/src/view_compiler/event_binder.ts index 9673640f90..504923a7df 100644 --- a/modules/@angular/compiler/src/view_compiler/event_binder.ts +++ b/modules/@angular/compiler/src/view_compiler/event_binder.ts @@ -7,7 +7,6 @@ */ import {CompileDirectiveMetadata} from '../compile_metadata'; -import {StringMapWrapper} from '../facade/collection'; import {StringWrapper, isPresent} from '../facade/lang'; import {identifierToken} from '../identifiers'; import * as o from '../output/output_ast'; @@ -173,13 +172,12 @@ export function collectEventListeners( export function bindDirectiveOutputs( directiveAst: DirectiveAst, directiveInstance: o.Expression, eventListeners: CompileEventListener[]) { - StringMapWrapper.forEach( - directiveAst.directive.outputs, - (eventName: any /** TODO #9100 */, observablePropName: any /** TODO #9100 */) => { - eventListeners.filter(listener => listener.eventName == eventName).forEach((listener) => { - listener.listenToDirective(directiveInstance, observablePropName); - }); - }); + Object.keys(directiveAst.directive.outputs).forEach(observablePropName => { + const eventName = directiveAst.directive.outputs[observablePropName]; + eventListeners.filter(listener => listener.eventName == eventName).forEach((listener) => { + listener.listenToDirective(directiveInstance, observablePropName); + }); + }); } export function bindRenderOutputs(eventListeners: CompileEventListener[]) { diff --git a/modules/@angular/compiler/src/view_compiler/view_builder.ts b/modules/@angular/compiler/src/view_compiler/view_builder.ts index 71958bc21c..4fdb24f7d1 100644 --- a/modules/@angular/compiler/src/view_compiler/view_builder.ts +++ b/modules/@angular/compiler/src/view_compiler/view_builder.ts @@ -9,7 +9,7 @@ import {ViewEncapsulation} from '@angular/core'; import {CompileDirectiveMetadata, CompileIdentifierMetadata, CompileTokenMetadata} from '../compile_metadata'; -import {ListWrapper, StringMapWrapper} from '../facade/collection'; +import {ListWrapper} from '../facade/collection'; import {StringWrapper, isPresent} from '../facade/lang'; import {Identifiers, identifierToken, resolveIdentifier} from '../identifiers'; import * as o from '../output/output_ast'; @@ -346,10 +346,10 @@ function _mergeHtmlAndDirectiveAttrs( declaredHtmlAttrs: {[key: string]: string}, directives: CompileDirectiveMetadata[]): string[][] { var result: {[key: string]: string} = {}; - StringMapWrapper.forEach( - declaredHtmlAttrs, (value: string, key: string) => { result[key] = value; }); + Object.keys(declaredHtmlAttrs).forEach(key => { result[key] = declaredHtmlAttrs[key]; }); directives.forEach(directiveMeta => { - StringMapWrapper.forEach(directiveMeta.hostAttributes, (value: string, name: string) => { + Object.keys(directiveMeta.hostAttributes).forEach(name => { + const value = directiveMeta.hostAttributes[name]; var prevValue = result[name]; result[name] = isPresent(prevValue) ? mergeAttributeValue(name, prevValue, value) : value; }); @@ -373,9 +373,7 @@ function mergeAttributeValue(attrName: string, attrValue1: string, attrValue2: s function mapToKeyValueArray(data: {[key: string]: string}): string[][] { var entryArray: string[][] = []; - StringMapWrapper.forEach(data, (value: string, name: string) => { - entryArray.push([name, value]); - }); + Object.keys(data).forEach(name => { entryArray.push([name, data[name]]); }); // We need to sort to get a defined output order // for tests and for caching generated artifacts... ListWrapper.sort(entryArray, (entry1, entry2) => StringWrapper.compare(entry1[0], entry2[0])); @@ -421,11 +419,11 @@ function createStaticNodeDebugInfo(node: CompileNode): o.Expression { if (isPresent(compileElement.component)) { componentToken = createDiTokenExpression(identifierToken(compileElement.component.type)); } - StringMapWrapper.forEach( - compileElement.referenceTokens, (token: CompileTokenMetadata, varName: string) => { - varTokenEntries.push( - [varName, isPresent(token) ? createDiTokenExpression(token) : o.NULL_EXPR]); - }); + Object.keys(compileElement.referenceTokens).forEach(varName => { + const token = compileElement.referenceTokens[varName]; + varTokenEntries.push( + [varName, isPresent(token) ? createDiTokenExpression(token) : o.NULL_EXPR]); + }); } return o.importExpr(resolveIdentifier(Identifiers.StaticNodeDebugInfo)) .instantiate( diff --git a/modules/@angular/compiler/test/animation/animation_parser_spec.ts b/modules/@angular/compiler/test/animation/animation_parser_spec.ts index 9958eaa010..f780058167 100644 --- a/modules/@angular/compiler/test/animation/animation_parser_spec.ts +++ b/modules/@angular/compiler/test/animation/animation_parser_spec.ts @@ -12,7 +12,6 @@ import {expect} from '@angular/platform-browser/testing/matchers'; import {AnimationEntryAst, AnimationGroupAst, AnimationKeyframeAst, AnimationSequenceAst, AnimationStepAst, AnimationStylesAst} from '../../src/animation/animation_ast'; import {AnimationParser} from '../../src/animation/animation_parser'; -import {StringMapWrapper} from '../../src/facade/collection'; import {CompileMetadataResolver} from '../../src/metadata_resolver'; import {FILL_STYLE_FLAG, flattenStyles} from '../private_import_core'; @@ -21,10 +20,7 @@ export function main() { var combineStyles = (styles: AnimationStylesAst): {[key: string]: string | number} => { var flatStyles: {[key: string]: string | number} = {}; styles.styles.forEach( - entry => StringMapWrapper.forEach( - entry, (val: any /** TODO #9100 */, prop: any /** TODO #9100 */) => { - flatStyles[prop] = val; - })); + entry => Object.keys(entry).forEach(prop => { flatStyles[prop] = entry[prop]; })); return flatStyles; }; diff --git a/modules/@angular/core/src/animation/animation_style_util.ts b/modules/@angular/core/src/animation/animation_style_util.ts index 18e4df4240..264f321e93 100644 --- a/modules/@angular/core/src/animation/animation_style_util.ts +++ b/modules/@angular/core/src/animation/animation_style_util.ts @@ -17,11 +17,12 @@ export function prepareFinalAnimationStyles( nullValue: string = null): {[key: string]: string} { var finalStyles: {[key: string]: string} = {}; - StringMapWrapper.forEach(newStyles, (value: string, prop: string) => { + Object.keys(newStyles).forEach(prop => { + const value = newStyles[prop]; finalStyles[prop] = value == AUTO_STYLE ? nullValue : value.toString(); }); - StringMapWrapper.forEach(previousStyles, (value: string, prop: string) => { + Object.keys(previousStyles).forEach(prop => { if (!isPresent(finalStyles[prop])) { finalStyles[prop] = nullValue; } @@ -41,7 +42,8 @@ export function balanceAnimationKeyframes( var extraFirstKeyframeStyles: {[key: string]: string} = {}; var hasExtraFirstStyles = false; - StringMapWrapper.forEach(collectedStyles, (value: string, prop: string) => { + Object.keys(collectedStyles).forEach(prop => { + const value = collectedStyles[prop] as string; // if the style is already defined in the first keyframe then // we do not replace it. if (!flatenedFirstKeyframeStyles[prop]) { @@ -60,7 +62,7 @@ export function balanceAnimationKeyframes( var flatenedFinalKeyframeStyles = flattenStyles(finalKeyframe.styles.styles); var extraFinalKeyframeStyles: {[key: string]: string} = {}; var hasExtraFinalStyles = false; - StringMapWrapper.forEach(keyframeCollectedStyles, (value: string, prop: string) => { + Object.keys(keyframeCollectedStyles).forEach(prop => { if (!isPresent(flatenedFinalKeyframeStyles[prop])) { extraFinalKeyframeStyles[prop] = AUTO_STYLE; hasExtraFinalStyles = true; @@ -71,7 +73,7 @@ export function balanceAnimationKeyframes( finalKeyframe.styles.styles.push(extraFinalKeyframeStyles); } - StringMapWrapper.forEach(flatenedFinalKeyframeStyles, (value: string, prop: string) => { + Object.keys(flatenedFinalKeyframeStyles).forEach(prop => { if (!isPresent(flatenedFirstKeyframeStyles[prop])) { extraFirstKeyframeStyles[prop] = AUTO_STYLE; hasExtraFirstStyles = true; @@ -87,7 +89,7 @@ export function balanceAnimationKeyframes( export function clearStyles(styles: {[key: string]: string | number}): {[key: string]: string} { var finalStyles: {[key: string]: string} = {}; - StringMapWrapper.keys(styles).forEach(key => { finalStyles[key] = null; }); + Object.keys(styles).forEach(key => { finalStyles[key] = null; }); return finalStyles; } @@ -95,7 +97,8 @@ export function collectAndResolveStyles( collection: {[key: string]: string | number}, styles: {[key: string]: string | number}[]) { return styles.map(entry => { var stylesObj: {[key: string]: string | number} = {}; - StringMapWrapper.forEach(entry, (value: string | number, prop: string) => { + Object.keys(entry).forEach(prop => { + let value = entry[prop]; if (value == FILL_STYLE_FLAG) { value = collection[prop]; if (!isPresent(value)) { @@ -111,15 +114,13 @@ export function collectAndResolveStyles( export function renderStyles( element: any, renderer: any, styles: {[key: string]: string | number}): void { - StringMapWrapper.forEach( - styles, (value: string, prop: string) => { renderer.setElementStyle(element, prop, value); }); + Object.keys(styles).forEach(prop => { renderer.setElementStyle(element, prop, styles[prop]); }); } export function flattenStyles(styles: {[key: string]: string | number}[]): {[key: string]: string} { var finalStyles: {[key: string]: string} = {}; styles.forEach(entry => { - StringMapWrapper.forEach( - entry, (value: string, prop: string) => { finalStyles[prop] = value; }); + Object.keys(entry).forEach(prop => { finalStyles[prop] = entry[prop] as string; }); }); return finalStyles; } diff --git a/modules/@angular/core/src/animation/view_animation_map.ts b/modules/@angular/core/src/animation/view_animation_map.ts index ac20292f99..5048b27165 100644 --- a/modules/@angular/core/src/animation/view_animation_map.ts +++ b/modules/@angular/core/src/animation/view_animation_map.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import {StringMapWrapper} from '../facade/collection'; + import {isPresent} from '../facade/lang'; import {AnimationPlayer} from './animation_player'; @@ -27,7 +27,7 @@ export class ViewAnimationMap { findAllPlayersByElement(element: any): AnimationPlayer[] { const el = this._map.get(element); - return el ? StringMapWrapper.values(el) : []; + return el ? Object.keys(el).map(k => el[k]) : []; } set(element: any, animationName: string, player: AnimationPlayer): void { @@ -54,7 +54,7 @@ export class ViewAnimationMap { const index = this._allPlayers.indexOf(player); this._allPlayers.splice(index, 1); - if (StringMapWrapper.isEmpty(playersByAnimation)) { + if (Object.keys(playersByAnimation).length === 0) { this._map.delete(element); } } diff --git a/modules/@angular/core/src/change_detection/differs/default_keyvalue_differ.ts b/modules/@angular/core/src/change_detection/differs/default_keyvalue_differ.ts index ec2efbaf18..98432fd0ac 100644 --- a/modules/@angular/core/src/change_detection/differs/default_keyvalue_differ.ts +++ b/modules/@angular/core/src/change_detection/differs/default_keyvalue_differ.ts @@ -284,7 +284,7 @@ export class DefaultKeyValueDiffer implements KeyValueDiffer { if (obj instanceof Map) { obj.forEach(fn); } else { - StringMapWrapper.forEach(obj, fn); + Object.keys(obj).forEach(k => fn(obj[k], k)); } } } diff --git a/modules/@angular/core/src/linker/debug_context.ts b/modules/@angular/core/src/linker/debug_context.ts index a196488028..eb6e55f3c2 100644 --- a/modules/@angular/core/src/linker/debug_context.ts +++ b/modules/@angular/core/src/linker/debug_context.ts @@ -7,7 +7,6 @@ */ import {Injector} from '../di'; -import {StringMapWrapper} from '../facade/collection'; import {isBlank, isPresent} from '../facade/lang'; import {RenderDebugInfo} from '../render/api'; @@ -68,7 +67,8 @@ export class DebugContext implements RenderDebugInfo { var staticNodeInfo = this._staticNodeInfo; if (isPresent(staticNodeInfo)) { var refs = staticNodeInfo.refTokens; - StringMapWrapper.forEach(refs, (refToken: any, refName: string) => { + Object.keys(refs).forEach(refName => { + const refToken = refs[refName]; let varValue: any; if (isBlank(refToken)) { varValue = this._view.allNodes ? this._view.allNodes[this._nodeIndex] : null; diff --git a/modules/@angular/core/src/reflection/reflector.ts b/modules/@angular/core/src/reflection/reflector.ts index ab045dcdd5..cf593706b1 100644 --- a/modules/@angular/core/src/reflection/reflector.ts +++ b/modules/@angular/core/src/reflection/reflector.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import {MapWrapper, StringMapWrapper} from '../facade/collection'; +import {MapWrapper} from '../facade/collection'; import {isPresent} from '../facade/lang'; import {Type} from '../type'; import {PlatformReflectionCapabilities} from './platform_reflection_capabilities'; @@ -181,5 +181,5 @@ export class Reflector extends ReflectorReader { } function _mergeMaps(target: Map, config: {[key: string]: Function}): void { - StringMapWrapper.forEach(config, (v: Function, k: string) => target.set(k, v)); + Object.keys(config).forEach(k => { target.set(k, config[k]); }); } diff --git a/modules/@angular/core/test/linker/change_detection_integration_spec.ts b/modules/@angular/core/test/linker/change_detection_integration_spec.ts index bac67a04ff..de25bbc51b 100644 --- a/modules/@angular/core/test/linker/change_detection_integration_spec.ts +++ b/modules/@angular/core/test/linker/change_detection_integration_spec.ts @@ -17,7 +17,6 @@ import {DomRootRenderer} from '@angular/platform-browser/src/dom/dom_renderer'; import {MockSchemaRegistry} from '../../../compiler/testing/index'; import {EventEmitter} from '../../src/facade/async'; -import {StringMapWrapper} from '../../src/facade/collection'; import {NumberWrapper} from '../../src/facade/lang'; export function main() { @@ -1348,7 +1347,7 @@ class TestDirective implements OnInit, DoCheck, OnChanges, AfterContentInit, Aft ngOnChanges(changes: SimpleChanges) { this.log.add(this.name, 'ngOnChanges'); const r: {[k: string]: string} = {}; - StringMapWrapper.forEach(changes, (c: SimpleChange, key: string) => r[key] = c.currentValue); + Object.keys(changes).forEach(key => { r[key] = changes[key].currentValue; }); this.changes = r; if (this.throwOn == 'ngOnChanges') { throw new Error('Boom!'); diff --git a/modules/@angular/core/testing/testing_internal.ts b/modules/@angular/core/testing/testing_internal.ts index aa3c86ce70..49a6476f87 100644 --- a/modules/@angular/core/testing/testing_internal.ts +++ b/modules/@angular/core/testing/testing_internal.ts @@ -224,9 +224,7 @@ export class SpyObject { } var m = StringMapWrapper.merge(config, overrides); - StringMapWrapper.forEach(m, (value: any /** TODO #9100 */, key: any /** TODO #9100 */) => { - object.spy(key).andReturn(value); - }); + Object.keys(m).forEach(key => { object.spy(key).andReturn(m[key]); }); return object; } diff --git a/modules/@angular/facade/src/collection.ts b/modules/@angular/facade/src/collection.ts index 49a0b2ed7a..c8838decbb 100644 --- a/modules/@angular/facade/src/collection.ts +++ b/modules/@angular/facade/src/collection.ts @@ -98,32 +98,6 @@ export class MapWrapper { * Wraps Javascript Objects */ export class StringMapWrapper { - static create(): {[k: /*any*/ string]: any} { - // Note: We are not using Object.create(null) here due to - // performance! - // http://jsperf.com/ng2-object-create-null - return {}; - } - static contains(map: {[key: string]: any}, key: string): boolean { - return map.hasOwnProperty(key); - } - - static keys(map: {[key: string]: any}): string[] { return Object.keys(map); } - static values(map: {[key: string]: T}): T[] { - return Object.keys(map).map((k: string): T => map[k]); - } - static isEmpty(map: {[key: string]: any}): boolean { - for (var prop in map) { - return false; - } - return true; - } - static forEach(map: {[key: string]: V}, callback: (v: V, K: string) => void) { - for (let k of Object.keys(map)) { - callback(map[k], k); - } - } - static merge(m1: {[key: string]: V}, m2: {[key: string]: V}): {[key: string]: V} { var m: {[key: string]: V} = {}; @@ -317,4 +291,4 @@ export function iterateListLike(obj: any, fn: Function) { fn(item.value); } } -} \ No newline at end of file +} diff --git a/modules/@angular/forms/src/form_builder.ts b/modules/@angular/forms/src/form_builder.ts index 20015e3157..3c0462cf7d 100644 --- a/modules/@angular/forms/src/form_builder.ts +++ b/modules/@angular/forms/src/form_builder.ts @@ -9,7 +9,6 @@ import {Injectable} from '@angular/core'; import {AsyncValidatorFn, ValidatorFn} from './directives/validators'; -import {StringMapWrapper} from './facade/collection'; import {isArray, isPresent} from './facade/lang'; import {AbstractControl, FormArray, FormControl, FormGroup} from './model'; @@ -75,8 +74,8 @@ export class FormBuilder { /** @internal */ _reduceControls(controlsConfig: {[k: string]: any}): {[key: string]: AbstractControl} { var controls: {[key: string]: AbstractControl} = {}; - StringMapWrapper.forEach(controlsConfig, (controlConfig: any, controlName: string) => { - controls[controlName] = this._createControl(controlConfig); + Object.keys(controlsConfig).forEach(controlName => { + controls[controlName] = this._createControl(controlsConfig[controlName]); }); return controls; } diff --git a/modules/@angular/forms/src/model.ts b/modules/@angular/forms/src/model.ts index 9a7f911d56..e3f5b79ce6 100644 --- a/modules/@angular/forms/src/model.ts +++ b/modules/@angular/forms/src/model.ts @@ -939,9 +939,9 @@ export class FormGroup extends AbstractControl { */ setValue(value: {[key: string]: any}, {onlySelf}: {onlySelf?: boolean} = {}): void { this._checkAllValuesPresent(value); - StringMapWrapper.forEach(value, (newValue: any, name: string) => { + Object.keys(value).forEach(name => { this._throwIfControlMissing(name); - this.controls[name].setValue(newValue, {onlySelf: true}); + this.controls[name].setValue(value[name], {onlySelf: true}); }); this.updateValueAndValidity({onlySelf: onlySelf}); } @@ -968,9 +968,9 @@ export class FormGroup extends AbstractControl { * ``` */ patchValue(value: {[key: string]: any}, {onlySelf}: {onlySelf?: boolean} = {}): void { - StringMapWrapper.forEach(value, (newValue: any, name: string) => { + Object.keys(value).forEach(name => { if (this.controls[name]) { - this.controls[name].patchValue(newValue, {onlySelf: true}); + this.controls[name].patchValue(value[name], {onlySelf: true}); } }); this.updateValueAndValidity({onlySelf: onlySelf}); @@ -1046,7 +1046,7 @@ export class FormGroup extends AbstractControl { /** @internal */ _forEachChild(cb: (v: any, k: string) => void): void { - StringMapWrapper.forEach(this.controls, cb); + Object.keys(this.controls).forEach(k => cb(this.controls[k], k)); } /** @internal */ diff --git a/modules/@angular/forms/src/validators.ts b/modules/@angular/forms/src/validators.ts index 805bebdbea..e0cd411c7e 100644 --- a/modules/@angular/forms/src/validators.ts +++ b/modules/@angular/forms/src/validators.ts @@ -152,5 +152,5 @@ function _mergeErrors(arrayOfErrors: any[]): {[key: string]: any} { arrayOfErrors.reduce((res: {[key: string]: any}, errors: {[key: string]: any}) => { return isPresent(errors) ? StringMapWrapper.merge(res, errors) : res; }, {}); - return StringMapWrapper.isEmpty(res) ? null : res; + return Object.keys(res).length === 0 ? null : res; } diff --git a/modules/@angular/platform-browser/src/dom/web_animations_driver.ts b/modules/@angular/platform-browser/src/dom/web_animations_driver.ts index 49653106bf..ca8edbef5d 100644 --- a/modules/@angular/platform-browser/src/dom/web_animations_driver.ts +++ b/modules/@angular/platform-browser/src/dom/web_animations_driver.ts @@ -7,8 +7,6 @@ */ import {AUTO_STYLE} from '@angular/core'; - -import {StringMapWrapper} from '../facade/collection'; import {StringWrapper, isNumber, isPresent} from '../facade/lang'; import {AnimationKeyframe, AnimationStyles} from '../private_import_core'; @@ -65,15 +63,16 @@ function _populateStyles( defaultStyles: {[key: string]: string | number}): {[key: string]: string | number} { var data: {[key: string]: string | number} = {}; styles.styles.forEach((entry) => { - StringMapWrapper.forEach(entry, (val: any, prop: string) => { + Object.keys(entry).forEach(prop => { + const val = entry[prop]; var formattedProp = dashCaseToCamelCase(prop); data[formattedProp] = val == AUTO_STYLE ? val : val.toString() + _resolveStyleUnit(val, prop, formattedProp); }); }); - StringMapWrapper.forEach(defaultStyles, (value: string, prop: string) => { + Object.keys(defaultStyles).forEach(prop => { if (!isPresent(data[prop])) { - data[prop] = value; + data[prop] = defaultStyles[prop]; } }); return data; diff --git a/modules/@angular/platform-browser/src/dom/web_animations_player.ts b/modules/@angular/platform-browser/src/dom/web_animations_player.ts index 79749d6fb4..db1eb4495a 100644 --- a/modules/@angular/platform-browser/src/dom/web_animations_player.ts +++ b/modules/@angular/platform-browser/src/dom/web_animations_player.ts @@ -7,8 +7,6 @@ */ import {AUTO_STYLE} from '@angular/core'; - -import {StringMapWrapper} from '../facade/collection'; import {isPresent} from '../facade/lang'; import {AnimationPlayer} from '../private_import_core'; @@ -49,7 +47,8 @@ export class WebAnimationsPlayer implements AnimationPlayer { var keyframes = this.keyframes.map(styles => { var formattedKeyframe: {[key: string]: string | number} = {}; - StringMapWrapper.forEach(styles, (value: string | number, prop: string) => { + Object.keys(styles).forEach(prop => { + const value = styles[prop]; formattedKeyframe[prop] = value == AUTO_STYLE ? _computeStyle(this.element, prop) : value; }); return formattedKeyframe; diff --git a/modules/@angular/platform-browser/test/dom/web_animations_driver_spec.ts b/modules/@angular/platform-browser/test/dom/web_animations_driver_spec.ts index e455bc11da..660737baad 100644 --- a/modules/@angular/platform-browser/test/dom/web_animations_driver_spec.ts +++ b/modules/@angular/platform-browser/test/dom/web_animations_driver_spec.ts @@ -12,7 +12,6 @@ import {el} from '@angular/platform-browser/testing/browser_util'; import {DomAnimatePlayer} from '../../src/dom/dom_animate_player'; import {WebAnimationsDriver} from '../../src/dom/web_animations_driver'; import {WebAnimationsPlayer} from '../../src/dom/web_animations_player'; -import {StringMapWrapper} from '../../src/facade/collection'; import {AnimationKeyframe, AnimationStyles} from '../../src/private_import_core'; import {MockDomAnimatePlayer} from '../../testing/mock_dom_animate_player'; @@ -113,7 +112,7 @@ export function main() { var player = driver.animate(elm, startingStyles, styles, 1000, 1000, null); var details = _formatOptions(player); var options = details['options']; - var keys = StringMapWrapper.keys(options); + var keys = Object.keys(options); expect(keys.indexOf('easing')).toEqual(-1); }); }); diff --git a/modules/@angular/platform-browser/testing/matchers.ts b/modules/@angular/platform-browser/testing/matchers.ts index b904f09189..1bfe35c51f 100644 --- a/modules/@angular/platform-browser/testing/matchers.ts +++ b/modules/@angular/platform-browser/testing/matchers.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import {StringMapWrapper} from './facade/collection'; + import {global, isString} from './facade/lang'; import {getDOM} from './private_import_platform-browser'; @@ -190,9 +190,9 @@ _global.beforeEach(function() { if (isString(styles)) { allPassed = getDOM().hasStyle(actual, styles); } else { - allPassed = !StringMapWrapper.isEmpty(styles); - StringMapWrapper.forEach(styles, (style: string, prop: string) => { - allPassed = allPassed && getDOM().hasStyle(actual, prop, style); + allPassed = Object.keys(styles).length !== 0; + Object.keys(styles).forEach(prop => { + allPassed = allPassed && getDOM().hasStyle(actual, prop, styles[prop]); }); } diff --git a/modules/@angular/platform-browser/testing/mock_animation_driver.ts b/modules/@angular/platform-browser/testing/mock_animation_driver.ts index 1719a2b964..af8bf395c1 100644 --- a/modules/@angular/platform-browser/testing/mock_animation_driver.ts +++ b/modules/@angular/platform-browser/testing/mock_animation_driver.ts @@ -9,8 +9,6 @@ import {AnimationPlayer} from '@angular/core'; import {MockAnimationPlayer} from '@angular/core/testing/testing_internal'; import {AnimationDriver} from '@angular/platform-browser'; - -import {StringMapWrapper} from './facade/collection'; import {AnimationKeyframe, AnimationStyles} from './private_import_core'; export class MockAnimationDriver extends AnimationDriver { @@ -40,7 +38,7 @@ function _serializeKeyframes(keyframes: AnimationKeyframe[]): any[] { function _serializeStyles(styles: AnimationStyles): {[key: string]: any} { var flatStyles: {[key: string]: any} = {}; styles.styles.forEach((entry: {[key: string]: string | number;}) => { - StringMapWrapper.forEach(entry, (val: any, prop: string) => { flatStyles[prop] = val; }); + Object.keys(entry).forEach(prop => { flatStyles[prop] = entry[prop]; }); }); return flatStyles; } diff --git a/modules/@angular/platform-server/src/parse5_adapter.ts b/modules/@angular/platform-server/src/parse5_adapter.ts index 44228eb65a..bda029d42f 100644 --- a/modules/@angular/platform-server/src/parse5_adapter.ts +++ b/modules/@angular/platform-server/src/parse5_adapter.ts @@ -8,7 +8,7 @@ const parse5 = require('parse5'); -import {ListWrapper, StringMapWrapper} from '../src/facade/collection'; +import {ListWrapper} from '../src/facade/collection'; import {DomAdapter, setRootDomAdapter} from './private_import_platform-browser'; import {isPresent, isBlank, global, setValueOnPath} from '../src/facade/lang'; import {SelectorMatcher, CssSelector} from './private_import_compiler'; @@ -474,7 +474,7 @@ export class Parse5DomAdapter extends DomAdapter { this.appendChild(newDoc, body); newDoc['head'] = head; newDoc['body'] = body; - newDoc['_window'] = StringMapWrapper.create(); + newDoc['_window'] = {}; return newDoc; } defaultDoc(): Document { return defDoc = defDoc || this.createHtmlDocument(); } diff --git a/modules/benchmarks/src/tree/ng2_ftl/index.ts b/modules/benchmarks/src/tree/ng2_ftl/index.ts index 6790e9057f..c72296c699 100644 --- a/modules/benchmarks/src/tree/ng2_ftl/index.ts +++ b/modules/benchmarks/src/tree/ng2_ftl/index.ts @@ -1,8 +1,8 @@ -import {ApplicationRef, NgModule, enableProdMode} from '@angular/core'; +import {ApplicationRef, enableProdMode} from '@angular/core'; import {platformBrowser} from '@angular/platform-browser'; import {bindAction, profile} from '../../util'; -import {TreeNode, buildTree, emptyTree} from '../util'; +import {buildTree, emptyTree} from '../util'; import {AppModuleNgFactory} from './app.ngfactory'; import {TreeComponent} from './tree'; diff --git a/modules/benchmarks/src/tree/ng2_static_ftl/index.ts b/modules/benchmarks/src/tree/ng2_static_ftl/index.ts index f07c63c493..38bd32108b 100644 --- a/modules/benchmarks/src/tree/ng2_static_ftl/index.ts +++ b/modules/benchmarks/src/tree/ng2_static_ftl/index.ts @@ -1,8 +1,8 @@ -import {ApplicationRef, NgModule, enableProdMode} from '@angular/core'; +import {ApplicationRef, enableProdMode} from '@angular/core'; import {platformBrowser} from '@angular/platform-browser'; import {bindAction, profile} from '../../util'; -import {TreeNode, buildTree, emptyTree} from '../util'; +import {buildTree, emptyTree} from '../util'; import {AppModuleNgFactory} from './app.ngfactory'; import {TreeRootComponent} from './tree';