Skip to content

Commit c344fd4

Browse files
authored
SDK v2 (#620)
* Modernizes SDK - Replace ParsePromise with native Promise - Removes all compatibility with Backbone style callbacks * Ensures integration tests are OK * Updates documentations to remove backbone styles * removes es2015 transformations * Adds prepare phase * Adds changelog
1 parent b762756 commit c344fd4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+938
-2182
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Parse-SDK-JS
2+
3+
## 2.0.0
4+
5+
- Parse.Promise has been replaced by native Promises
6+
- Backbone style callbacks are removed

babel-jest.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
const babelJest = require('babel-jest');
22

33
module.exports = babelJest.createTransformer({
4-
presets: ['es2015', 'react', 'stage-2'],
4+
presets: [["env", {
5+
"targets": {
6+
"node": "8"
7+
}
8+
}], 'react'],
59
plugins: [],
610
});

integration/test/ArrayOperationsTest.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ describe('Array Operations', () => {
271271
object.save().then(() => {
272272
object.add('strings', 'bar');
273273
object.addUnique('strings', 'bar');
274-
}).fail((e) => {
274+
}).catch((e) => {
275275
assert.equal(e.message, 'Cannot merge AddUnique Op with the previous Op');
276276
done();
277277
});
@@ -283,7 +283,7 @@ describe('Array Operations', () => {
283283
object.save().then(() => {
284284
object.addUnique('strings', 'bar');
285285
object.add('strings', 'bar');
286-
}).fail((e) => {
286+
}).catch((e) => {
287287
assert.equal(e.message, 'Cannot merge Add Op with the previous Op');
288288
done();
289289
});
@@ -295,7 +295,7 @@ describe('Array Operations', () => {
295295
object.save().then(() => {
296296
object.add('strings', 'bar');
297297
object.remove('strings', 'bar');
298-
}).fail((e) => {
298+
}).catch((e) => {
299299
assert.equal(e.message, 'Cannot merge Remove Op with the previous Op');
300300
done();
301301
});
@@ -307,7 +307,7 @@ describe('Array Operations', () => {
307307
object.save().then(() => {
308308
object.remove('strings', 'bar');
309309
object.add('strings', 'bar');
310-
}).fail((e) => {
310+
}).catch((e) => {
311311
assert.equal(e.message, 'Cannot merge Add Op with the previous Op');
312312
done();
313313
});
@@ -319,7 +319,7 @@ describe('Array Operations', () => {
319319
object.save().then(() => {
320320
object.addUnique('strings', 'bar');
321321
object.remove('strings', 'bar');
322-
}).fail((e) => {
322+
}).catch((e) => {
323323
assert.equal(e.message, 'Cannot merge Remove Op with the previous Op');
324324
done();
325325
});
@@ -331,7 +331,7 @@ describe('Array Operations', () => {
331331
object.save().then(() => {
332332
object.remove('strings', 'bar');
333333
object.addUnique('strings', 'bar');
334-
}).fail((e) => {
334+
}).catch((e) => {
335335
assert.equal(e.message, 'Cannot merge AddUnique Op with the previous Op');
336336
done();
337337
});

integration/test/IncrementTest.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ describe('Increment', () => {
220220
object.save().then(() => {
221221
object.set('numeric', 'x');
222222
return object.save();
223-
}).fail(() => {
223+
}).catch(() => {
224224
done();
225225
});
226226
});

integration/test/ParseACLTest.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ describe('Parse.ACL', () => {
5757
Parse.User.logOut();
5858

5959
return new Parse.Query(TestObject).get(object.id);
60-
}).fail((e) => {
60+
}).catch((e) => {
6161
assert.equal(e.code, Parse.Error.OBJECT_NOT_FOUND);
6262
done();
6363
});
@@ -106,7 +106,7 @@ describe('Parse.ACL', () => {
106106

107107
object.set('score', 10);
108108
return object.save();
109-
}).fail((e) => {
109+
}).catch((e) => {
110110
assert.equal(e.code, Parse.Error.OBJECT_NOT_FOUND);
111111
done();
112112
});
@@ -130,7 +130,7 @@ describe('Parse.ACL', () => {
130130
Parse.User.logOut();
131131

132132
return object.destroy();
133-
}).fail((e) => {
133+
}).catch((e) => {
134134
assert.equal(e.code, Parse.Error.OBJECT_NOT_FOUND);
135135
done();
136136
});
@@ -262,7 +262,7 @@ describe('Parse.ACL', () => {
262262
Parse.User.logOut();
263263
object.set('score', 10);
264264
return object.save();
265-
}).fail((e) => {
265+
}).catch((e) => {
266266
assert.equal(e.code, Parse.Error.OBJECT_NOT_FOUND);
267267
done();
268268
});
@@ -283,7 +283,7 @@ describe('Parse.ACL', () => {
283283
}).then(() => {
284284
Parse.User.logOut();
285285
return object.destroy();
286-
}).fail((e) => {
286+
}).catch((e) => {
287287
assert.equal(e.code, Parse.Error.OBJECT_NOT_FOUND);
288288
done();
289289
});
@@ -304,7 +304,7 @@ describe('Parse.ACL', () => {
304304
}).then(() => {
305305
Parse.User.logOut();
306306
return new Parse.Query(TestObject).get(object.id);
307-
}).fail((e) => {
307+
}).catch((e) => {
308308
assert.equal(e.code, Parse.Error.OBJECT_NOT_FOUND);
309309
done();
310310
});
@@ -494,7 +494,7 @@ describe('Parse.ACL', () => {
494494
}).then(() => {
495495
let query = new Parse.Query(TestObject);
496496
return query.get(object.id);
497-
}).fail((e) => {
497+
}).catch((e) => {
498498
assert.equal(e.code, Parse.Error.OBJECT_NOT_FOUND);
499499
done();
500500
});
@@ -546,7 +546,7 @@ describe('Parse.ACL', () => {
546546
}).then(() => {
547547
object.set('score', 10);
548548
return object.save();
549-
}).fail((e) => {
549+
}).catch((e) => {
550550
assert.equal(e.code, Parse.Error.OBJECT_NOT_FOUND);
551551
done();
552552
});
@@ -571,7 +571,7 @@ describe('Parse.ACL', () => {
571571
return Parse.User.logOut();
572572
}).then(() => {
573573
return object.destroy();
574-
}).fail((e) => {
574+
}).catch((e) => {
575575
assert.equal(e.code, Parse.Error.OBJECT_NOT_FOUND);
576576
done();
577577
});

integration/test/ParseGeoBoxTest.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ describe('Geo Box', () => {
6060
let query = new Parse.Query('Location');
6161
query.withinGeoBox('location', northeastOfSF, southwestOfSF);
6262
return query.find();
63-
}).fail(() => {
63+
}).catch(() => {
6464
// Query should fail for crossing the date line
6565
done();
6666
});

integration/test/ParseGeoPointTest.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ describe('Geo Point', () => {
5353
let obj = new TestObject();
5454
obj.set('locationOne', point);
5555
obj.set('locationTwo', point);
56-
obj.save().fail((e) => {
56+
obj.save().catch((e) => {
5757
done();
5858
});
5959
});
@@ -449,7 +449,7 @@ describe('Geo Point', () => {
449449
it('non array withinPolygon', (done) => {
450450
const query = new Parse.Query(TestPoint);
451451
query.withinPolygon('location', 1234);
452-
query.find().fail((err) => {
452+
query.find().catch((err) => {
453453
assert.equal(err.code, Parse.Error.INVALID_JSON);
454454
done();
455455
});
@@ -458,7 +458,7 @@ describe('Geo Point', () => {
458458
it('invalid array withinPolygon', (done) => {
459459
const query = new Parse.Query(TestPoint);
460460
query.withinPolygon('location', [1234]);
461-
query.find().fail((err) => {
461+
query.find().catch((err) => {
462462
assert.equal(err.code, Parse.Error.INVALID_JSON);
463463
done();
464464
});
@@ -471,6 +471,6 @@ describe('Geo Point', () => {
471471
assert.equal(err.code, Parse.Error.INVALID_JSON);
472472
done();
473473
})
474-
.fail(done.fail);
474+
.catch(done.fail);
475475
}, 'Test passes locally but not on CI');
476476
});

integration/test/ParseMasterKeyTest.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ describe('Master Key', () => {
3636
}).then(() => {
3737
// expect success
3838
done();
39-
}).fail((e) => console.log(e));
39+
}).catch((e) => console.log(e));
4040
});
4141

4242
it('throws when no master key is provided', (done) => {
4343
Parse.CoreManager.set('MASTER_KEY', null);
4444
let object = new TestObject();
45-
object.save(null, { useMasterKey: true }).fail(() => {
45+
object.save(null, { useMasterKey: true }).catch(() => {
4646
// should fail
4747
done();
4848
});

integration/test/ParseObjectTest.js

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ describe('Parse Object', () => {
7474
return object.destroy();
7575
}).then(() => {
7676
return object.fetch();
77-
}).fail((e) => {
77+
}).catch((e) => {
7878
assert.equal(e.code, Parse.Error.OBJECT_NOT_FOUND);
7979
done();
8080
});
@@ -158,7 +158,7 @@ describe('Parse Object', () => {
158158
}).then((itemAgain) => {
159159
assert.equal(item.get('foo'), itemAgain.get('foo'));
160160
done();
161-
}).fail(e => console.log(e));
161+
}).catch(done.fail);
162162
});
163163

164164
it('does not remove old fields on fetch', (done) => {
@@ -248,22 +248,22 @@ describe('Parse Object', () => {
248248
it('cannot set an invalid date', (done) => {
249249
let obj = new TestObject();
250250
obj.set('when', new Date(Date.parse(null)));
251-
obj.save().fail((e) => {
251+
obj.save().catch((e) => {
252252
done();
253253
});
254254
});
255255

256256
it('cannot create invalid class names', (done) => {
257257
let item = new Parse.Object('Foo^Bar');
258-
item.save().fail((e) => {
258+
item.save().catch((e) => {
259259
done();
260260
});
261261
});
262262

263263
it('cannot create invalid key names', (done) => {
264264
let item = new Parse.Object('Item');
265265
assert(!item.set({ 'foo^bar': 'baz' }));
266-
item.save({ 'foo^bar': 'baz' }).fail((e) => {
266+
item.save({ 'foo^bar': 'baz' }).catch((e) => {
267267
assert.equal(e.code, Parse.Error.INVALID_KEY_NAME);
268268
done();
269269
});
@@ -788,7 +788,7 @@ describe('Parse Object', () => {
788788
other = new TestObject();
789789
other.set('number', 'two');
790790
return other.save();
791-
}).fail((e) => {
791+
}).catch((e) => {
792792
assert.equal(e.code, Parse.Error.INCORRECT_TYPE);
793793
other.set('number', 2);
794794
return other.save();
@@ -939,7 +939,7 @@ describe('Parse Object', () => {
939939
let bryan = new PickyEater();
940940
bryan.save({ meal: 'burrito' }).then(() => {
941941
return bryan.save({ meal: 'tomatoes' });
942-
}).fail((e) => {
942+
}).catch((e) => {
943943
assert.equal(e, 'Ew. Gross.');
944944
done();
945945
});
@@ -978,7 +978,7 @@ describe('Parse Object', () => {
978978
}).then(() => {
979979
let query = new Parse.Query(TestObject);
980980
return query.get(o.id);
981-
}).fail((e) => {
981+
}).catch((e) => {
982982
assert.equal(e.code, Parse.Error.OBJECT_NOT_FOUND);
983983
done();
984984
});
@@ -1004,7 +1004,7 @@ describe('Parse Object', () => {
10041004
it('can destroyAll an object that does not exist', (done) => {
10051005
let o = new TestObject();
10061006
o.id = 'fakeobject';
1007-
Parse.Object.destroyAll([o]).fail((e) => {
1007+
Parse.Object.destroyAll([o]).catch((e) => {
10081008
assert.equal(e.code, Parse.Error.AGGREGATE_ERROR);
10091009
assert.equal(e.errors.length, 1);
10101010
done();
@@ -1019,7 +1019,7 @@ describe('Parse Object', () => {
10191019
Parse.Object.saveAll(objects).then(() => {
10201020
objects[0].id = 'fakeobject';
10211021
return Parse.Object.destroyAll(objects);
1022-
}).fail((e) => {
1022+
}).catch((e) => {
10231023
assert.equal(e.code, Parse.Error.AGGREGATE_ERROR);
10241024
assert.equal(e.errors.length, 1);
10251025
assert.equal(e.errors[0].code, Parse.Error.OBJECT_NOT_FOUND);
@@ -1036,7 +1036,7 @@ describe('Parse Object', () => {
10361036
Parse.Object.saveAll(objects).then(() => {
10371037
objects[19].id = 'fakeobject';
10381038
return Parse.Object.destroyAll(objects);
1039-
}).fail((e) => {
1039+
}).catch((e) => {
10401040
assert.equal(e.code, Parse.Error.AGGREGATE_ERROR);
10411041
assert.equal(e.errors.length, 1);
10421042
assert.equal(e.errors[0].code, Parse.Error.OBJECT_NOT_FOUND);
@@ -1053,7 +1053,7 @@ describe('Parse Object', () => {
10531053
Parse.Object.saveAll(objects).then(() => {
10541054
objects[20].id = 'fakeobject';
10551055
return Parse.Object.destroyAll(objects);
1056-
}).fail((e) => {
1056+
}).catch((e) => {
10571057
assert.equal(e.code, Parse.Error.AGGREGATE_ERROR);
10581058
assert.equal(e.errors.length, 1);
10591059
assert.equal(e.errors[0].code, Parse.Error.OBJECT_NOT_FOUND);
@@ -1072,7 +1072,7 @@ describe('Parse Object', () => {
10721072
objects[19].id = 'fakeobject';
10731073
objects[20].id = 'fakeobject';
10741074
return Parse.Object.destroyAll(objects);
1075-
}).fail((e) => {
1075+
}).catch((e) => {
10761076
assert.equal(e.code, Parse.Error.AGGREGATE_ERROR);
10771077
assert.equal(e.errors.length, 3);
10781078
assert.equal(e.errors[0].code, Parse.Error.OBJECT_NOT_FOUND);
@@ -1157,14 +1157,14 @@ describe('Parse Object', () => {
11571157
let itemAgain = containerAgain.get('item');
11581158
let multiClassArray = [subContainerAgain, itemAgain];
11591159
return Parse.Object.fetchAll(multiClassArray);
1160-
}).fail((e) => {
1160+
}).catch((e) => {
11611161
assert.equal(e.code, Parse.Error.INVALID_CLASS_NAME);
11621162
});
11631163
});
11641164

11651165
it('fails fetchAll on unsaved object', () => {
11661166
let unsavedObjectArray = [new TestObject()];
1167-
return Parse.Object.fetchAll(unsavedObjectArray).fail((e) => {
1167+
return Parse.Object.fetchAll(unsavedObjectArray).catch((e) => {
11681168
assert.equal(e.code, Parse.Error.MISSING_OBJECT_ID);
11691169
});
11701170
});
@@ -1188,7 +1188,7 @@ describe('Parse Object', () => {
11881188
let nonExistentObject = new Item({ objectId: deletedObject.id });
11891189
let nonExistentObjectArray = [nonExistentObject, items[1]];
11901190
return Parse.Object.fetchAll(nonExistentObjectArray);
1191-
}).fail((e) => {
1191+
}).catch((e) => {
11921192
assert.equal(e.code, Parse.Error.OBJECT_NOT_FOUND);
11931193
done();
11941194
});
@@ -1265,7 +1265,7 @@ describe('Parse Object', () => {
12651265

12661266
it('can fetchAllIfNeeded with an unsaved object', () => {
12671267
let unsavedObjectArray = [new TestObject()];
1268-
Parse.Object.fetchAllIfNeeded(unsavedObjectArray).fail((e) => {
1268+
Parse.Object.fetchAllIfNeeded(unsavedObjectArray).catch((e) => {
12691269
assert.equal(e.code, Parse.Error.MISSING_OBJECT_ID);
12701270
done();
12711271
});
@@ -1283,7 +1283,7 @@ describe('Parse Object', () => {
12831283
let itemAgain = containerAgain.get('item');
12841284
let multiClassArray = [subContainerAgain, itemAgain];
12851285
return Parse.Object.fetchAllIfNeeded(multiClassArray);
1286-
}).fail((e) => {
1286+
}).catch((e) => {
12871287
assert.equal(e.code, Parse.Error.INVALID_CLASS_NAME);
12881288
});
12891289
});

integration/test/ParseQueryAggregateTest.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,10 @@ describe('Parse Aggregate Query', () => {
5959
const query = new Parse.Query(TestObject);
6060
return query.distinct('score').then((results) => {
6161
assert.equal(results.length, 2);
62-
assert.equal(results[0], 10);
63-
assert.equal(results[1], 20);
62+
// Order the results in case
63+
const orderedResults = results.sort((a, b) => a - b);
64+
assert.equal(orderedResults[0], 10);
65+
assert.equal(orderedResults[1], 20);
6466
});
6567
});
6668

0 commit comments

Comments
 (0)