@@ -24,9 +24,9 @@ function stripPrefix(name: string, prefix: string | string[]) {
24
24
/**
25
25
* Replace some strings.
26
26
*/
27
- function replace ( value : any , replaceArray : [ any , any ] [ ] ) {
27
+ function replace ( value : string , replaceArray : [ string , any ] [ ] ) {
28
28
for ( let [ search , replace ] of replaceArray ) {
29
- value = value . replace ( search , replace )
29
+ if ( value === search ) value = replace
30
30
}
31
31
return value
32
32
}
@@ -64,28 +64,24 @@ function lowerCamelCase(name: string) {
64
64
export function morph (
65
65
obj : any ,
66
66
fn : ( key : string , value : any ) => { key : string ; value : any }
67
- ) {
68
- if ( typeof obj === 'object' ) {
67
+ ) : any {
68
+ if ( typeof obj === 'object' && obj !== null ) {
69
69
if ( Array . isArray ( obj ) ) {
70
- for ( const element of obj ) {
71
- morph ( element , fn )
72
- }
70
+ return obj . map ( ( element : any ) => morph ( element , fn ) )
73
71
} else {
72
+ let newObj : Record < string , any > = { }
74
73
for ( let [ key , value ] of Object . entries ( obj ) ) {
75
74
// technically this should never happen here, but let's be safe
76
75
assert ( typeof key === 'string' , 'Only string keys are supported' )
76
+
77
77
if ( typeof value === 'object' ) {
78
- morph ( value , fn )
78
+ newObj [ key ] = morph ( value , fn )
79
79
} else {
80
80
const updated = fn ( key , value )
81
- if ( updated . key !== key ) {
82
- delete obj [ key ]
83
- obj [ updated . key ] = updated . value
84
- } else if ( updated . value !== value ) {
85
- obj [ key ] = updated . value
86
- }
81
+ newObj [ updated . key ] = updated . value
87
82
}
88
83
}
84
+ return newObj
89
85
}
90
86
}
91
87
}
@@ -104,7 +100,7 @@ export function morph(
104
100
* @deprecated
105
101
*/
106
102
export function legacy ( obj : any ) {
107
- morph ( obj , ( key : string , value : any ) => {
103
+ return morph ( obj , ( key : string , value : any ) => {
108
104
key = stripPrefix ( key , 'praw_' )
109
105
key = lowerFirstLetter ( key )
110
106
value = replace ( value , [ [ '' , undefined ] ] )
@@ -117,7 +113,7 @@ export function legacy(obj: any) {
117
113
* @beta
118
114
*/
119
115
export function modern ( obj : any ) {
120
- morph ( obj , ( key : string , value : any ) => {
116
+ return morph ( obj , ( key : string , value : any ) => {
121
117
key = stripPrefix ( key , [
122
118
'fiz_' ,
123
119
'praw_' ,
0 commit comments