@@ -130,67 +130,60 @@ function transformKeyValue(schema, className, restKey, restValue, {
130
130
return { key : key , value : value } ;
131
131
}
132
132
133
- function transformQueryKeyValue ( schema , className , restKey , restValue , { validate } = { } ) {
133
+ const valueAsDate = value => {
134
+ if ( typeof value === 'string' ) {
135
+ return new Date ( value ) ;
136
+ } else if ( value instanceof Date ) {
137
+ return value ;
138
+ }
139
+ return false ;
140
+ }
141
+
142
+ function transformQueryKeyValue ( schema , className , key , value , { validate } = { } ) {
134
143
// Check if the schema is known since it's a built-in field.
135
- var key = restKey ;
136
- var timeField = false ;
137
144
switch ( key ) {
138
- case 'objectId' :
139
- case '_id' :
140
- key = '_id' ;
141
- break ;
142
145
case 'createdAt' :
143
- case '_created_at' :
146
+ if ( valueAsDate ( value ) ) {
147
+ return { key : '_created_at' , value : valueAsDate ( value ) }
148
+ }
144
149
key = '_created_at' ;
145
- timeField = true ;
146
150
break ;
147
151
case 'updatedAt' :
148
- case '_updated_at' :
152
+ if ( valueAsDate ( value ) ) {
153
+ return { key : '_updated_at' , value : valueAsDate ( value ) }
154
+ }
149
155
key = '_updated_at' ;
150
- timeField = true ;
151
- break ;
152
- case '_email_verify_token' :
153
- key = "_email_verify_token" ;
154
- break ;
155
- case '_perishable_token' :
156
- key = "_perishable_token" ;
157
- break ;
158
- case 'sessionToken' :
159
- case '_session_token' :
160
- key = '_session_token' ;
161
156
break ;
162
157
case 'expiresAt' :
163
- case '_expiresAt' :
164
- key = 'expiresAt' ;
165
- timeField = true ;
158
+ if ( valueAsDate ( value ) ) {
159
+ return { key : 'expiresAt' , value : valueAsDate ( value ) }
160
+ }
166
161
break ;
162
+ case 'objectId' : return { key : '_id' , value}
163
+ case 'sessionToken' : return { key : '_session_token' , value}
167
164
case '_rperm' :
168
165
case '_wperm' :
169
- return { key : key , value : restValue } ;
170
- break ;
166
+ case '_perishable_token' :
167
+ case '_email_verify_token' : return { key , value }
171
168
case '$or' :
172
- if ( ! ( restValue instanceof Array ) ) {
169
+ if ( ! ( value instanceof Array ) ) {
173
170
throw new Parse . Error ( Parse . Error . INVALID_QUERY , 'bad $or format - use an array value' ) ;
174
171
}
175
- var mongoSubqueries = restValue . map ( ( s ) => {
176
- return transformWhere ( schema , className , s ) ;
177
- } ) ;
172
+ var mongoSubqueries = value . map ( subQuery => transformWhere ( schema , className , subQuery ) ) ;
178
173
return { key : '$or' , value : mongoSubqueries } ;
179
174
case '$and' :
180
- if ( ! ( restValue instanceof Array ) ) {
175
+ if ( ! ( value instanceof Array ) ) {
181
176
throw new Parse . Error ( Parse . Error . INVALID_QUERY , 'bad $and format - use an array value' ) ;
182
177
}
183
- var mongoSubqueries = restValue . map ( ( s ) => {
184
- return transformWhere ( schema , className , s ) ;
185
- } ) ;
178
+ var mongoSubqueries = value . map ( subQuery => transformWhere ( schema , className , subQuery ) ) ;
186
179
return { key : '$and' , value : mongoSubqueries } ;
187
180
default :
188
181
// Other auth data
189
182
var authDataMatch = key . match ( / ^ a u t h D a t a \. ( [ a - z A - Z 0 - 9 _ ] + ) \. i d $ / ) ;
190
183
if ( authDataMatch ) {
191
184
var provider = authDataMatch [ 1 ] ;
192
185
// Special-case auth data.
193
- return { key : ' _auth_data_' + provider + ' .id' , value : restValue } ;
186
+ return { key : ` _auth_data_${ provider } .id` , value} ;
194
187
}
195
188
if ( validate && ! key . match ( / ^ [ a - z A - Z ] [ a - z A - Z 0 - 9 _ \. ] * $ / ) ) {
196
189
throw new Parse . Error ( Parse . Error . INVALID_KEY_NAME , 'invalid key name: ' + key ) ;
@@ -205,46 +198,39 @@ function transformQueryKeyValue(schema, className, restKey, restValue, { validat
205
198
expected = schema . getExpectedType ( className , key ) ;
206
199
}
207
200
if ( ( expected && expected . type == 'Pointer' ) ||
208
- ( ! expected && restValue && restValue . __type == 'Pointer' ) ) {
201
+ ( ! expected && value && value . __type == 'Pointer' ) ) {
209
202
key = '_p_' + key ;
210
203
}
211
204
var expectedTypeIsArray = ( expected && expected . type === 'Array' ) ;
212
205
213
206
// Handle query constraints
214
- value = transformConstraint ( restValue , expectedTypeIsArray ) ;
215
- if ( value !== CannotTransform ) {
216
- return { key : key , value : value } ;
207
+ if ( transformConstraint ( value , expectedTypeIsArray ) !== CannotTransform ) {
208
+ return { key, value : transformConstraint ( value , expectedTypeIsArray ) } ;
217
209
}
218
210
219
- if ( expectedTypeIsArray && ! ( restValue instanceof Array ) ) {
220
- return {
221
- key : key , value : { '$all' : [ restValue ] }
222
- } ;
211
+ if ( expectedTypeIsArray && ! ( value instanceof Array ) ) {
212
+ return { key, value : { '$all' : [ value ] } } ;
223
213
}
224
214
225
215
// Handle atomic values
226
- var value = transformAtom ( restValue , false ) ;
227
- if ( value !== CannotTransform ) {
228
- if ( timeField && ( typeof value === 'string' ) ) {
229
- value = new Date ( value ) ;
230
- }
231
- return { key : key , value : value } ;
216
+ if ( transformAtom ( value , false ) !== CannotTransform ) {
217
+ return { key, value : transformAtom ( value , false ) } ;
232
218
}
233
219
234
220
// Handle arrays
235
- if ( restValue instanceof Array ) {
236
- throw new Parse . Error ( Parse . Error . INVALID_JSON , 'cannot use array as query param' ) ;
221
+ if ( value instanceof Array ) {
222
+ throw new Parse . Error ( Parse . Error . INVALID_JSON , 'cannot use array as query param' ) ;
237
223
}
238
224
239
225
// Handle normal objects by recursing
240
- value = { } ;
241
- for ( var subRestKey in restValue ) {
242
- var subRestValue = restValue [ subRestKey ] ;
226
+ let result = { } ;
227
+ for ( var subRestKey in value ) {
228
+ var subRestValue = value [ subRestKey ] ;
243
229
var out = transformKeyValue ( schema , className , subRestKey , subRestValue , { inObject : true } ) ;
244
230
// For recursed objects, keep the keys in rest format
245
- value [ subRestKey ] = out . value ;
231
+ result [ subRestKey ] = out . value ;
246
232
}
247
- return { key : key , value : value } ;
233
+ return { key, result } ;
248
234
}
249
235
250
236
// Main exposed method to help run queries.
0 commit comments