@@ -39,7 +39,7 @@ function main(): void {
39
39
function buildUniqueNameMap ( names : string [ ] ) : IIndexable < string > {
40
40
var nameMap : IIndexable < string > = { } ;
41
41
42
- var uniqueNames = NameGenerator . ensureUniqueness ( names , /*isFixed */ undefined , /* isCaseSensitive */ false ) ;
42
+ var uniqueNames = NameGenerator . ensureUniqueness ( names , /* isCaseSensitive */ false , /* isFixed */ undefined ) ;
43
43
44
44
for ( var i = 0 ; i < names . length ; i ++ ) {
45
45
nameMap [ names [ i ] ] = uniqueNames [ i ] ;
@@ -94,14 +94,17 @@ function convertPropertyName(origName: string): string {
94
94
}
95
95
96
96
module NameGenerator {
97
- export function ensureUniqueness ( names : string [ ] , isFixed : boolean [ ] = names . map ( ( ) => false ) , isCaseSensitive : boolean = false ) : string [ ] {
97
+ export function ensureUniqueness ( names : string [ ] , isCaseSensitive : boolean , isFixed ?: boolean [ ] ) : string [ ] {
98
+ if ( ! isFixed ) {
99
+ isFixed = names . map ( ( ) => false )
100
+ }
98
101
99
- var names = names . map ( x => x ) ;
100
- ensureUniquenessInPlace ( names , isFixed , isCaseSensitive ) ;
102
+ var names = names . slice ( ) ;
103
+ ensureUniquenessInPlace ( names , isCaseSensitive , isFixed ) ;
101
104
return names ;
102
105
}
103
106
104
- function ensureUniquenessInPlace ( names : string [ ] , isFixed : boolean [ ] , isCaseSensitive : boolean ) : void {
107
+ function ensureUniquenessInPlace ( names : string [ ] , isCaseSensitive : boolean , isFixed : boolean [ ] ) : void {
105
108
for ( var i = 0 ; i < names . length ; i ++ ) {
106
109
var name = names [ i ] ;
107
110
var collisionIndices = Utilities . collectMatchingIndices ( name , names , isCaseSensitive ) ;
@@ -128,9 +131,12 @@ module NameGenerator {
128
131
}
129
132
130
133
while ( true ) {
131
- var newName = name + suffix ++ ;
134
+ var newName = name + suffix ;
135
+ suffix ++ ;
132
136
133
- if ( ! proposedNames . some ( ( name ) => Utilities . stringEquals ( name , newName , isCaseSensitive ) ) ) {
137
+ // Check if we've synthesized a unique name, and if so
138
+ // replace the conflicting name with the new one.
139
+ if ( ! proposedNames . some ( name => Utilities . stringEquals ( name , newName , isCaseSensitive ) ) ) {
134
140
proposedNames [ collisionIndex ] = newName ;
135
141
break ;
136
142
}
@@ -141,7 +147,7 @@ module NameGenerator {
141
147
142
148
module Utilities {
143
149
/// Return a list of all indices where a string occurs.
144
- export function collectMatchingIndices ( name : string , proposedNames : string [ ] , isCaseSensitive : boolean = false ) : number [ ] {
150
+ export function collectMatchingIndices ( name : string , proposedNames : string [ ] , isCaseSensitive : boolean ) : number [ ] {
145
151
var matchingIndices : number [ ] = [ ] ;
146
152
147
153
for ( var i = 0 ; i < proposedNames . length ; i ++ ) {
@@ -153,7 +159,7 @@ module Utilities {
153
159
return matchingIndices ;
154
160
}
155
161
156
- export function stringEquals ( s1 : string , s2 : string , caseSensitive : boolean = false ) : boolean {
162
+ export function stringEquals ( s1 : string , s2 : string , caseSensitive : boolean ) : boolean {
157
163
if ( caseSensitive ) {
158
164
s1 = s1 . toLowerCase ( ) ;
159
165
s2 = s2 . toLowerCase ( ) ;
0 commit comments