nongo-driver 2.12.6 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/atlas-api.js +6 -6
- package/dist/atlas-api.js.map +1 -1
- package/dist/cursor-iterator.d.ts +1 -2
- package/dist/cursor-iterator.js +3 -1
- package/dist/cursor-iterator.js.map +1 -1
- package/dist/generate-interfaces.js +24 -7
- package/dist/generate-interfaces.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +33 -17
- package/dist/index.js.map +1 -1
- package/dist/interface/atlas/field.d.ts +1 -1
- package/dist/interface/atlas/field.js +1 -0
- package/dist/interface/atlas/field.js.map +1 -1
- package/dist/interface/atlas/index.js +15 -4
- package/dist/interface/atlas/index.js.map +1 -1
- package/dist/interface/index.d.ts +1 -10
- package/dist/interface/index.js +15 -4
- package/dist/interface/index.js.map +1 -1
- package/dist/model.d.ts +12 -13
- package/dist/model.js +26 -29
- package/dist/model.js.map +1 -1
- package/dist/mongo-index.d.ts +2 -3
- package/dist/mongo-index.js.map +1 -1
- package/dist/nongo.d.ts +1 -1
- package/dist/nongo.js +17 -21
- package/dist/nongo.js.map +1 -1
- package/dist/schema-parser.js +10 -10
- package/dist/schema-parser.js.map +1 -1
- package/dist/ts-interface-generator.js +18 -2
- package/dist/ts-interface-generator.js.map +1 -1
- package/dist/validator.js +1 -1
- package/dist/validator.js.map +1 -1
- package/package.json +16 -24
- package/src/atlas-api.ts +11 -40
- package/src/cursor-iterator.ts +1 -3
- package/src/index.ts +1 -1
- package/src/interface/index.ts +0 -11
- package/src/model.ts +25 -39
- package/src/mongo-index.ts +1 -3
- package/src/nongo.ts +1 -5
- package/test/database-helper.ts +26 -13
- package/test/models/dummy-model-changed-obj.ts +12 -0
- package/test/models/dummy-model-obj.ts +40 -0
- package/test/models/dummy-model-with-max-index-obj.ts +195 -0
- package/test/models/text-index-model-modified-obj.ts +12 -0
- package/test/models/text-index-model-obj.ts +11 -0
- package/test/models/text-index-model-too-long-obj.ts +11 -0
- package/test/nongo-multi.test.ts +2 -5
- package/test/nongo.test.ts +125 -172
package/test/nongo.test.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import clone from 'clone-deep';
|
|
2
|
-
import fs from 'fs';
|
|
3
2
|
import {ObjectId} from 'mongodb';
|
|
4
|
-
import rimraf from 'rimraf';
|
|
5
3
|
import Logger from 'wbb-logger';
|
|
6
4
|
import {Nongo} from '../src';
|
|
7
5
|
import DatabaseHelper from './database-helper';
|
|
@@ -21,7 +19,7 @@ process.on('unhandledRejection', (reason) => {
|
|
|
21
19
|
|
|
22
20
|
async function find() {
|
|
23
21
|
const client = await DatabaseHelper.getClient();
|
|
24
|
-
const db = client.db(
|
|
22
|
+
const db = client.db(DatabaseHelper.getDbName());
|
|
25
23
|
return await db.collection('DummyModel').find({}).toArray();
|
|
26
24
|
}
|
|
27
25
|
|
|
@@ -368,7 +366,7 @@ describe('Testing DB operations...', () => {
|
|
|
368
366
|
// Del obj 1 (using toHexString to keep test that prepareQuery works)
|
|
369
367
|
const res = await nongo.col(DummyModel).remove({_id: model1.obj._id.toHexString()});
|
|
370
368
|
// Check a model was deleted
|
|
371
|
-
expect(res).toEqual({
|
|
369
|
+
expect(res).toEqual({acknowledged: true, deletedCount: 1});
|
|
372
370
|
|
|
373
371
|
const docs = await nongo.col(DummyModel).find();
|
|
374
372
|
|
|
@@ -384,79 +382,71 @@ describe('Testing DB operations...', () => {
|
|
|
384
382
|
|
|
385
383
|
it('Test indexes have been applied', async () => {
|
|
386
384
|
const client = await DatabaseHelper.getClient();
|
|
387
|
-
const db = client.db(
|
|
388
|
-
const {databaseName} = db;
|
|
389
|
-
const ns = `${databaseName}.DummyModel`;
|
|
385
|
+
const db = client.db(DatabaseHelper.getDbName());
|
|
390
386
|
|
|
391
387
|
let expected: any = [
|
|
392
388
|
{
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
ns,
|
|
389
|
+
"v":2,
|
|
390
|
+
"key":{
|
|
391
|
+
"_id":1
|
|
392
|
+
},
|
|
393
|
+
"name":"_id_"
|
|
399
394
|
},
|
|
400
395
|
{
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
396
|
+
"v":2,
|
|
397
|
+
"key":{
|
|
398
|
+
"name":1
|
|
399
|
+
},
|
|
400
|
+
"name":"name_1",
|
|
401
|
+
"background":true,
|
|
402
|
+
"unique":true
|
|
408
403
|
},
|
|
409
404
|
{
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
ns,
|
|
405
|
+
"v":2,
|
|
406
|
+
"key":{
|
|
407
|
+
"pets.likes.drink":1
|
|
408
|
+
},
|
|
409
|
+
"name":"pets.likes.drink_1",
|
|
410
|
+
"background":true
|
|
417
411
|
},
|
|
418
412
|
{
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
ns,
|
|
426
|
-
v: 2,
|
|
413
|
+
"v":2,
|
|
414
|
+
"key":{
|
|
415
|
+
"job.role":1
|
|
416
|
+
},
|
|
417
|
+
"name":"job.role_1",
|
|
418
|
+
"background":true
|
|
427
419
|
},
|
|
428
420
|
{
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
name: 'age_text',
|
|
437
|
-
ns,
|
|
438
|
-
textIndexVersion: 3,
|
|
439
|
-
v: 2,
|
|
440
|
-
weights: {
|
|
441
|
-
age: 1,
|
|
442
|
-
},
|
|
421
|
+
"v":2,
|
|
422
|
+
"key":{
|
|
423
|
+
"dontStripChildren":1,
|
|
424
|
+
"created":1
|
|
425
|
+
},
|
|
426
|
+
"name":"dontStripChildren_1_created_1",
|
|
427
|
+
"background":true
|
|
443
428
|
},
|
|
444
429
|
{
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
430
|
+
"v":2,
|
|
431
|
+
"key":{
|
|
432
|
+
"_fts":"text",
|
|
433
|
+
"_ftsx":1
|
|
434
|
+
},
|
|
435
|
+
"name":"age_text",
|
|
436
|
+
"background":true,
|
|
437
|
+
"weights":{
|
|
438
|
+
"age":1
|
|
439
|
+
},
|
|
440
|
+
"default_language":"english",
|
|
441
|
+
"language_override":"language",
|
|
442
|
+
"textIndexVersion":3
|
|
443
|
+
}
|
|
444
|
+
]
|
|
455
445
|
|
|
456
446
|
let nongo = await DatabaseHelper.getNongoInstance([DummyModel]);
|
|
457
447
|
await nongo.ensureIndexes();
|
|
458
448
|
let indexes = await db.collection('DummyModel').indexes();
|
|
459
|
-
expect(indexes).toEqual(
|
|
449
|
+
expect(indexes).toEqual(expected);
|
|
460
450
|
await nongo.mongoClient.close();
|
|
461
451
|
|
|
462
452
|
expected = [
|
|
@@ -466,25 +456,22 @@ describe('Testing DB operations...', () => {
|
|
|
466
456
|
_id: 1,
|
|
467
457
|
},
|
|
468
458
|
name: '_id_',
|
|
469
|
-
ns,
|
|
470
459
|
},
|
|
471
460
|
{
|
|
472
461
|
v: 2,
|
|
473
462
|
background: true,
|
|
474
463
|
key: {
|
|
475
|
-
|
|
464
|
+
"pets.likes.drink": 1,
|
|
476
465
|
},
|
|
477
|
-
name: '
|
|
478
|
-
ns,
|
|
466
|
+
name: 'pets.likes.drink_1',
|
|
479
467
|
},
|
|
480
468
|
{
|
|
481
469
|
v: 2,
|
|
482
470
|
background: true,
|
|
483
471
|
key: {
|
|
484
|
-
'
|
|
472
|
+
'name': 1,
|
|
485
473
|
},
|
|
486
|
-
name: '
|
|
487
|
-
ns,
|
|
474
|
+
name: 'name_1',
|
|
488
475
|
},
|
|
489
476
|
{
|
|
490
477
|
background: true,
|
|
@@ -495,7 +482,6 @@ describe('Testing DB operations...', () => {
|
|
|
495
482
|
},
|
|
496
483
|
language_override: 'language',
|
|
497
484
|
name: 'name_text_age_text',
|
|
498
|
-
ns,
|
|
499
485
|
textIndexVersion: 3,
|
|
500
486
|
v: 2,
|
|
501
487
|
weights: {
|
|
@@ -508,7 +494,7 @@ describe('Testing DB operations...', () => {
|
|
|
508
494
|
nongo = await DatabaseHelper.getNongoInstance([DummyModelChanged]);
|
|
509
495
|
await nongo.ensureIndexes();
|
|
510
496
|
indexes = await db.collection('DummyModel').indexes();
|
|
511
|
-
expect(indexes).toEqual(
|
|
497
|
+
expect(indexes).toEqual(expected);
|
|
512
498
|
await nongo.mongoClient.close();
|
|
513
499
|
|
|
514
500
|
await client.close();
|
|
@@ -517,54 +503,50 @@ describe('Testing DB operations...', () => {
|
|
|
517
503
|
it(
|
|
518
504
|
'Test old indexes were removed', async () => {
|
|
519
505
|
const client = await DatabaseHelper.getClient();
|
|
520
|
-
const db = client.db(
|
|
506
|
+
const db = client.db(DatabaseHelper.getDbName());
|
|
521
507
|
const {databaseName} = db;
|
|
522
508
|
const ns = `${databaseName}.DummyModel`;
|
|
523
509
|
const expected: any = [
|
|
524
510
|
{
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
v: 2,
|
|
511
|
+
"key":{
|
|
512
|
+
"_id":1
|
|
513
|
+
},
|
|
514
|
+
"name":"_id_",
|
|
515
|
+
"v":2
|
|
531
516
|
},
|
|
532
517
|
{
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
v: 2,
|
|
518
|
+
"background":true,
|
|
519
|
+
"key":{
|
|
520
|
+
"pets.likes.drink":1
|
|
521
|
+
},
|
|
522
|
+
"name":"pets.likes.drink_1",
|
|
523
|
+
"v":2
|
|
540
524
|
},
|
|
541
525
|
{
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
v: 2,
|
|
526
|
+
"background":true,
|
|
527
|
+
"key":{
|
|
528
|
+
"name":1
|
|
529
|
+
},
|
|
530
|
+
"name":"name_1",
|
|
531
|
+
"v":2
|
|
549
532
|
},
|
|
550
533
|
{
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
];
|
|
534
|
+
"background":true,
|
|
535
|
+
"default_language":"english",
|
|
536
|
+
"key":{
|
|
537
|
+
"_fts":"text",
|
|
538
|
+
"_ftsx":1
|
|
539
|
+
},
|
|
540
|
+
"language_override":"language",
|
|
541
|
+
"name":"name_text_age_text",
|
|
542
|
+
"textIndexVersion":3,
|
|
543
|
+
"v":2,
|
|
544
|
+
"weights":{
|
|
545
|
+
"age":1,
|
|
546
|
+
"name":1
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
]
|
|
568
550
|
|
|
569
551
|
// create dummy model with maximum possible number of indexes
|
|
570
552
|
let nongo = await DatabaseHelper.getNongoInstance([DummyModelWithMaxIndex]);
|
|
@@ -600,12 +582,11 @@ describe('Testing DB operations...', () => {
|
|
|
600
582
|
count: {$sum: 1},
|
|
601
583
|
},
|
|
602
584
|
},
|
|
585
|
+
{
|
|
586
|
+
$sort: {_id: -1}
|
|
587
|
+
}
|
|
603
588
|
];
|
|
604
589
|
|
|
605
|
-
const options = {
|
|
606
|
-
sort: {name: -1},
|
|
607
|
-
};
|
|
608
|
-
|
|
609
590
|
const expected = [
|
|
610
591
|
{
|
|
611
592
|
_id: 'obj2',
|
|
@@ -618,11 +599,11 @@ describe('Testing DB operations...', () => {
|
|
|
618
599
|
];
|
|
619
600
|
|
|
620
601
|
// Aggreate and check result is correct
|
|
621
|
-
const results = await nongo.col(DummyModel).aggregate(pipeline
|
|
602
|
+
const results = await nongo.col(DummyModel).aggregate(pipeline);
|
|
622
603
|
expect(results).toHaveLength(2);
|
|
623
604
|
expect(results).toEqual(expected);
|
|
624
605
|
|
|
625
|
-
for await (const doc of await nongo.col(DummyModel).aggregateIterator(pipeline
|
|
606
|
+
for await (const doc of await nongo.col(DummyModel).aggregateIterator(pipeline)) {
|
|
626
607
|
expect(expected.shift()).toEqual(doc);
|
|
627
608
|
}
|
|
628
609
|
|
|
@@ -636,8 +617,14 @@ describe('Testing DB operations...', () => {
|
|
|
636
617
|
|
|
637
618
|
const newAge = 999999999;
|
|
638
619
|
const result = await nongo.col(DummyModel)
|
|
639
|
-
.update({}, {$set: {age: newAge}});
|
|
640
|
-
expect(result).toEqual({
|
|
620
|
+
.update({}, { $set: { age: newAge } });
|
|
621
|
+
expect(result).toEqual({
|
|
622
|
+
"acknowledged": true,
|
|
623
|
+
"matchedCount": 2,
|
|
624
|
+
"modifiedCount": 2,
|
|
625
|
+
"upsertedCount": 0,
|
|
626
|
+
"upsertedId": null,
|
|
627
|
+
});
|
|
641
628
|
|
|
642
629
|
const doc = await nongo.col(DummyModel).findOne();
|
|
643
630
|
expect(doc.obj.age).toBe(newAge);
|
|
@@ -727,35 +714,6 @@ describe('Testing DB operations...', () => {
|
|
|
727
714
|
// Finish the test
|
|
728
715
|
await nongo.mongoClient.close();
|
|
729
716
|
});
|
|
730
|
-
|
|
731
|
-
it('Test creating collection dump', async () => {
|
|
732
|
-
// Insert and confirm it worked
|
|
733
|
-
const nongo: any = await DatabaseHelper.getNongoInstance(models);
|
|
734
|
-
await nongo.new(DummyModel, obj1).save();
|
|
735
|
-
expect(await nongo.col(DummyModel).findOne()).toBeDefined();
|
|
736
|
-
|
|
737
|
-
const dir = './testing/temp-dump';
|
|
738
|
-
|
|
739
|
-
// Make sure {@code dir} doesn't exist
|
|
740
|
-
expect(fs.existsSync(dir)).toBeFalsy();
|
|
741
|
-
|
|
742
|
-
await nongo.col(DummyModel).dumpCollection(dir, true);
|
|
743
|
-
|
|
744
|
-
// Check the dir has been populated by the dump
|
|
745
|
-
expect(fs.readdirSync(dir).length).toBeTruthy();
|
|
746
|
-
|
|
747
|
-
// Clean up {@code dir}
|
|
748
|
-
await new Promise(((resolve) => {
|
|
749
|
-
rimraf(dir, () => {
|
|
750
|
-
logger.info('Cleaned up ' + dir);
|
|
751
|
-
resolve();
|
|
752
|
-
});
|
|
753
|
-
}));
|
|
754
|
-
|
|
755
|
-
// Finish the test
|
|
756
|
-
await nongo.mongoClient.close();
|
|
757
|
-
});
|
|
758
|
-
|
|
759
717
|
});
|
|
760
718
|
|
|
761
719
|
it('test text index update', async () => {
|
|
@@ -769,41 +727,36 @@ it('test text index update', async () => {
|
|
|
769
727
|
await nongo.ensureIndexes();
|
|
770
728
|
|
|
771
729
|
const client = await DatabaseHelper.getClient();
|
|
772
|
-
const db = client.db(
|
|
773
|
-
const {databaseName} = db;
|
|
774
|
-
const ns = `${databaseName}.TextIndexModel`;
|
|
730
|
+
const db = client.db(DatabaseHelper.getDbName());
|
|
775
731
|
const indexes = await db.collection('TextIndexModel').indexes();
|
|
776
732
|
|
|
777
733
|
expect(indexes).toEqual([{
|
|
778
734
|
v: 2,
|
|
779
735
|
key: {_id: 1},
|
|
780
736
|
name: '_id_',
|
|
781
|
-
ns,
|
|
782
737
|
},
|
|
738
|
+
{
|
|
739
|
+
v: 2,
|
|
740
|
+
unique: true,
|
|
741
|
+
key: {name: 1, module: 1},
|
|
742
|
+
name: 'name_1_module_1',
|
|
743
|
+
background: true,
|
|
744
|
+
},
|
|
745
|
+
{
|
|
746
|
+
v: 2,
|
|
747
|
+
key: {_fts: 'text', _ftsx: 1},
|
|
748
|
+
name: 'my_text_index',
|
|
749
|
+
background: true,
|
|
750
|
+
weights:
|
|
783
751
|
{
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
name:
|
|
788
|
-
|
|
789
|
-
background: true,
|
|
752
|
+
'description.cy': 1,
|
|
753
|
+
'description.en': 1,
|
|
754
|
+
'description.es': 1,
|
|
755
|
+
'name': 1,
|
|
756
|
+
'summary': 1,
|
|
790
757
|
},
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
ns,
|
|
796
|
-
background: true,
|
|
797
|
-
weights:
|
|
798
|
-
{
|
|
799
|
-
'description.cy': 1,
|
|
800
|
-
'description.en': 1,
|
|
801
|
-
'description.es': 1,
|
|
802
|
-
'name': 1,
|
|
803
|
-
'summary': 1,
|
|
804
|
-
},
|
|
805
|
-
default_language: 'english',
|
|
806
|
-
language_override: 'language',
|
|
807
|
-
textIndexVersion: 3,
|
|
808
|
-
}]);
|
|
758
|
+
default_language: 'english',
|
|
759
|
+
language_override: 'language',
|
|
760
|
+
textIndexVersion: 3,
|
|
761
|
+
}]);
|
|
809
762
|
});
|