@zakodium/adonis-mongodb 0.12.0 → 0.14.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/README.md +2 -5
- package/lib/adonis-typings/database.d.ts +3 -3
- package/lib/adonis-typings/migration.d.ts +3 -2
- package/lib/commands/MongodbListMigrations.js +4 -4
- package/lib/commands/MongodbMakeMigration.js +10 -8
- package/lib/commands/MongodbMigrate.js +15 -8
- package/lib/commands/util/MigrationCommand.d.ts +1 -1
- package/lib/commands/util/MigrationCommand.js +16 -10
- package/lib/commands/util/transformMigrations.js +11 -6
- package/lib/src/Database/Connection.d.ts +3 -3
- package/lib/src/Database/Connection.js +3 -3
- package/lib/src/Migration.js +38 -10
- package/lib/src/Model/Model.d.ts +2 -2
- package/lib/src/Model/Model.js +38 -26
- package/package.json +18 -18
- package/src/Database/Connection.ts +3 -3
- package/src/Migration.ts +57 -13
- package/src/Model/Model.ts +24 -16
package/README.md
CHANGED
|
@@ -26,10 +26,7 @@ MongoDB provider for AdonisJS 5.
|
|
|
26
26
|
|
|
27
27
|
This provider requires AdonisJS v5 and won't work with AdonisJS v4.
|
|
28
28
|
|
|
29
|
-
We recommend using MongoDB >=
|
|
30
|
-
migrations will be transactional and will be properly rolled back in case of error.
|
|
31
|
-
|
|
32
|
-
If you use a version < 4.4, you might run into issues with partially applied migrations.
|
|
29
|
+
We recommend using MongoDB >=5.0. Earlier versions are not tested.
|
|
33
30
|
|
|
34
31
|
## Installation
|
|
35
32
|
|
|
@@ -100,7 +97,7 @@ To run tests locally:
|
|
|
100
97
|
|
|
101
98
|
```bash
|
|
102
99
|
docker-compose up -d
|
|
103
|
-
node reset-dev.
|
|
100
|
+
node reset-dev.mjs
|
|
104
101
|
npm test
|
|
105
102
|
docker-compose down
|
|
106
103
|
```
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
declare module '@ioc:Zakodium/Mongodb/Database' {
|
|
3
|
-
import { EventEmitter } from 'events';
|
|
4
|
-
import { MongoClientOptions, Collection, Db, ClientSession, MongoClient } from 'mongodb';
|
|
3
|
+
import { EventEmitter } from 'node:events';
|
|
4
|
+
import { MongoClientOptions, Collection, Db, ClientSession, MongoClient, Document } from 'mongodb';
|
|
5
5
|
/**
|
|
6
6
|
* Shape of the configuration in `config/mongodb.ts`.
|
|
7
7
|
*/
|
|
@@ -109,7 +109,7 @@ declare module '@ioc:Zakodium/Mongodb/Database' {
|
|
|
109
109
|
on(event: 'disconnect:start', callback: (connection: ConnectionContract) => void): this;
|
|
110
110
|
on(event: 'disconnect:error', callback: (error: Error, connection: ConnectionContract) => void): this;
|
|
111
111
|
database(): Promise<Db>;
|
|
112
|
-
collection<TSchema
|
|
112
|
+
collection<TSchema extends Document>(collectionName: string): Promise<Collection<TSchema>>;
|
|
113
113
|
transaction<TResult>(handler: (client: ClientSession, db: Db) => Promise<TResult>): Promise<TResult>;
|
|
114
114
|
}
|
|
115
115
|
const Database: DatabaseContract;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
declare module '@ioc:Zakodium/Mongodb/Migration' {
|
|
2
|
-
import { Db, ClientSession, IndexSpecification, CreateIndexesOptions } from 'mongodb';
|
|
2
|
+
import { Db, ClientSession, IndexSpecification, CreateIndexesOptions, DropIndexesOptions } from 'mongodb';
|
|
3
3
|
export default abstract class Migration {
|
|
4
4
|
createCollections(collectionNames: string[]): void;
|
|
5
5
|
createCollection(collectionName: string): void;
|
|
6
|
-
createIndex(collectionName: string, index: IndexSpecification, options?: CreateIndexesOptions): void;
|
|
6
|
+
createIndex(collectionName: string, index: IndexSpecification, options?: Omit<CreateIndexesOptions, 'session'>): void;
|
|
7
|
+
dropIndex(collectionName: string, indexName: string, options?: Omit<DropIndexesOptions, 'session'>): void;
|
|
7
8
|
defer(callback: (db: Db, client: ClientSession) => Promise<void>): void;
|
|
8
9
|
abstract up(): void;
|
|
9
10
|
execUp(): Promise<void>;
|
|
@@ -18,7 +18,7 @@ const MigrationCommand_1 = __importDefault(require("./util/MigrationCommand"));
|
|
|
18
18
|
class MongodbListMigrations extends MigrationCommand_1.default {
|
|
19
19
|
async run(db) {
|
|
20
20
|
try {
|
|
21
|
-
const connection = this.getConnection(db);
|
|
21
|
+
const connection = await this.getConnection(db);
|
|
22
22
|
const database = await connection.database();
|
|
23
23
|
const coll = database.collection('__adonis_mongodb');
|
|
24
24
|
const migrations = await this.getMigrations(connection.config);
|
|
@@ -30,7 +30,7 @@ class MongodbListMigrations extends MigrationCommand_1.default {
|
|
|
30
30
|
/**
|
|
31
31
|
* Push a new row to the table
|
|
32
32
|
*/
|
|
33
|
-
|
|
33
|
+
for (const [idx, { name, file }] of migrations.entries()) {
|
|
34
34
|
const document = migrationDocuments.find((doc) => doc.name === name);
|
|
35
35
|
const { description } = imports[idx];
|
|
36
36
|
table.push([
|
|
@@ -41,7 +41,7 @@ class MongodbListMigrations extends MigrationCommand_1.default {
|
|
|
41
41
|
document ? document.batch : 'NA',
|
|
42
42
|
description || '',
|
|
43
43
|
]);
|
|
44
|
-
}
|
|
44
|
+
}
|
|
45
45
|
// eslint-disable-next-line no-console
|
|
46
46
|
console.log(table.toString());
|
|
47
47
|
}
|
|
@@ -62,4 +62,4 @@ __decorate([
|
|
|
62
62
|
__metadata("design:returntype", Promise)
|
|
63
63
|
], MongodbListMigrations.prototype, "run", null);
|
|
64
64
|
exports.default = MongodbListMigrations;
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9uZ29kYkxpc3RNaWdyYXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vY29tbWFuZHMvTW9uZ29kYkxpc3RNaWdyYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0VBQXlEO0FBQ3pELDREQUFrQztBQUlsQywrRUFBdUQ7QUFFdkQsTUFBcUIscUJBQXNCLFNBQVEsMEJBQWdCO0lBUXBELEFBQU4sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFvQjtRQUNuQyxJQUFJO1lBQ0YsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hELE1BQU0sUUFBUSxHQUFHLE1BQU0sVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNyRCxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRS9ELE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRXpELE1BQU0sS0FBSyxHQUFHLElBQUksb0JBQVEsQ0FBQztnQkFDekIsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDO2FBQzdDLENBQUMsQ0FBQztZQUVILE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDL0IsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDekQsQ0FBQztZQUVGOztlQUVHO1lBQ0gsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUN4RCxNQUFNLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7Z0JBRXJFLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JDLEtBQUssQ0FBQyxJQUFJLENBQUM7b0JBQ1QsSUFBSTtvQkFDSixRQUFRO3dCQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7d0JBQ2hDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7b0JBQ2pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtvQkFDaEMsV0FBVyxJQUFJLEVBQUU7aUJBQ2xCLENBQUMsQ0FBQzthQUNKO1lBRUQsc0NBQXNDO1lBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDL0I7Z0JBQVM7WUFDUixNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDN0I7SUFDSCxDQUFDOztBQTlDYSxpQ0FBVyxHQUFHLDBCQUEwQixDQUFDO0FBQ3pDLGlDQUFXLEdBQUcseUJBQXlCLENBQUM7QUFDeEMsOEJBQVEsR0FBRztJQUN2QixPQUFPLEVBQUUsSUFBSTtDQUNkLENBQUM7QUFHVztJQURaLElBQUEsbUJBQU0sRUFBQyxDQUFDLDJCQUEyQixDQUFDLENBQUM7Ozs7Z0RBd0NyQztBQS9DSCx3Q0FnREMifQ==
|
|
@@ -8,26 +8,28 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
const
|
|
15
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
13
16
|
const standalone_1 = require("@adonisjs/core/build/standalone");
|
|
14
17
|
class MongodbMakeMigration extends standalone_1.BaseCommand {
|
|
15
18
|
async run() {
|
|
16
|
-
|
|
17
|
-
if (name.includes('/')) {
|
|
19
|
+
if (this.name.includes('/')) {
|
|
18
20
|
this.logger.error('name argument should not contain any slash');
|
|
19
21
|
process.exitCode = 1;
|
|
20
22
|
return;
|
|
21
23
|
}
|
|
22
24
|
const folder = 'mongodb/migrations';
|
|
23
|
-
const stub =
|
|
25
|
+
const stub = node_path_1.default.join(__dirname, '../../templates/migration.txt');
|
|
24
26
|
this.generator
|
|
25
|
-
.addFile(name, { prefix: String(Date.now()), pattern: 'snakecase' })
|
|
27
|
+
.addFile(this.name, { prefix: String(Date.now()), pattern: 'snakecase' })
|
|
26
28
|
.stub(stub)
|
|
27
29
|
.destinationDir(folder)
|
|
28
|
-
.appRoot(this.application.
|
|
30
|
+
.appRoot(this.application.appRoot)
|
|
29
31
|
.apply({
|
|
30
|
-
className: `${name[0].toUpperCase()}${name.slice(1)}Migration`,
|
|
32
|
+
className: `${this.name[0].toUpperCase()}${this.name.slice(1)}Migration`,
|
|
31
33
|
});
|
|
32
34
|
await this.generator.run();
|
|
33
35
|
}
|
|
@@ -46,4 +48,4 @@ __decorate([
|
|
|
46
48
|
__metadata("design:type", String)
|
|
47
49
|
], MongodbMakeMigration.prototype, "connection", void 0);
|
|
48
50
|
exports.default = MongodbMakeMigration;
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9uZ29kYk1ha2VNaWdyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9jb21tYW5kcy9Nb25nb2RiTWFrZU1pZ3JhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLDBEQUE2QjtBQUU3QixnRUFBMkU7QUFFM0UsTUFBcUIsb0JBQXFCLFNBQVEsd0JBQVc7SUFhcEQsS0FBSyxDQUFDLEdBQUc7UUFDZCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7WUFDaEUsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7WUFDckIsT0FBTztTQUNSO1FBRUQsTUFBTSxNQUFNLEdBQUcsb0JBQW9CLENBQUM7UUFFcEMsTUFBTSxJQUFJLEdBQUcsbUJBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLCtCQUErQixDQUFDLENBQUM7UUFFbkUsSUFBSSxDQUFDLFNBQVM7YUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO2FBQ3hFLElBQUksQ0FBQyxJQUFJLENBQUM7YUFDVixjQUFjLENBQUMsTUFBTSxDQUFDO2FBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQzthQUNqQyxLQUFLLENBQUM7WUFDTCxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUN4RCxDQUFDLENBQ0YsV0FBVztTQUNiLENBQUMsQ0FBQztRQUNMLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUM3QixDQUFDOztBQWxDYSxnQ0FBVyxHQUFHLHdCQUF3QixDQUFDO0FBQ3ZDLGdDQUFXLEdBQUcsMkJBQTJCLENBQUM7QUFDMUMsNkJBQVEsR0FBRztJQUN2QixPQUFPLEVBQUUsSUFBSTtDQUNkLENBQUM7QUFFRjtJQUFDLGlCQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsV0FBVyxFQUFFLDRCQUE0QixFQUFFLENBQUM7O2tEQUN2QztBQUVwQjtJQUFDLGtCQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsV0FBVyxFQUFFLDhDQUE4QyxFQUFFLENBQUM7O3dEQUNwRDtBQVg1Qix1Q0FvQ0MifQ==
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -29,10 +33,11 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
29
33
|
};
|
|
30
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
35
|
const standalone_1 = require("@adonisjs/core/build/standalone");
|
|
36
|
+
const mongodb_1 = require("mongodb");
|
|
32
37
|
const MigrationCommand_1 = __importStar(require("./util/MigrationCommand"));
|
|
33
38
|
class MongodbMigrate extends MigrationCommand_1.default {
|
|
34
39
|
async _executeMigration(db) {
|
|
35
|
-
const connection = this.getConnection(db);
|
|
40
|
+
const connection = await this.getConnection(db);
|
|
36
41
|
const migrations = await this.getMigrations(connection.config);
|
|
37
42
|
const migrationLockColl = await connection.collection(MigrationCommand_1.migrationLockCollectionName);
|
|
38
43
|
const migrationColl = await connection.collection(MigrationCommand_1.migrationCollectionName);
|
|
@@ -45,13 +50,14 @@ class MongodbMigrate extends MigrationCommand_1.default {
|
|
|
45
50
|
});
|
|
46
51
|
if (lock.modifiedCount === 0 && lock.upsertedCount === 0) {
|
|
47
52
|
this.logger.error('A migration is already running');
|
|
53
|
+
this.exitCode = 1;
|
|
48
54
|
await db.manager.closeAll();
|
|
49
|
-
|
|
55
|
+
await this.exit();
|
|
50
56
|
}
|
|
51
57
|
const migrationDocs = await migrationColl.find({}).toArray();
|
|
52
|
-
const dbMigrationNames = migrationDocs.map((m) => m.name);
|
|
58
|
+
const dbMigrationNames = new Set(migrationDocs.map((m) => m.name));
|
|
53
59
|
// Keep migrations that are not yet registered
|
|
54
|
-
const unregisteredMigrations = migrations.filter((migration) => !dbMigrationNames.
|
|
60
|
+
const unregisteredMigrations = migrations.filter((migration) => !dbMigrationNames.has(migration.name));
|
|
55
61
|
// Keep migrations that are not yet registered
|
|
56
62
|
let successfullyExecuted = 0;
|
|
57
63
|
// Get the next incremental batch value
|
|
@@ -78,13 +84,14 @@ class MongodbMigrate extends MigrationCommand_1.default {
|
|
|
78
84
|
const migration = new Migration(connection.name, this.logger, session);
|
|
79
85
|
await migration.execUp();
|
|
80
86
|
await migrationColl.insertOne({
|
|
87
|
+
_id: new mongodb_1.ObjectId(),
|
|
81
88
|
name,
|
|
82
89
|
date: new Date(),
|
|
83
90
|
batch: newBatch,
|
|
84
91
|
}, { session });
|
|
85
92
|
}
|
|
86
|
-
catch (
|
|
87
|
-
lastTransactionError =
|
|
93
|
+
catch (error) {
|
|
94
|
+
lastTransactionError = error;
|
|
88
95
|
await session.abortTransaction();
|
|
89
96
|
}
|
|
90
97
|
});
|
|
@@ -136,4 +143,4 @@ __decorate([
|
|
|
136
143
|
__metadata("design:returntype", Promise)
|
|
137
144
|
], MongodbMigrate.prototype, "run", null);
|
|
138
145
|
exports.default = MongodbMigrate;
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9uZ29kYk1pZ3JhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9jb21tYW5kcy9Nb25nb2RiTWlncmF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0VBQXlEO0FBQ3pELHFDQUFtQztBQUluQyw0RUFHaUM7QUFjakMsTUFBcUIsY0FBZSxTQUFRLDBCQUFnQjtJQU9sRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsRUFBb0I7UUFDbEQsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFL0QsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLFVBQVUsQ0FBQyxVQUFVLENBQ25ELDhDQUEyQixDQUM1QixDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQUcsTUFBTSxVQUFVLENBQUMsVUFBVSxDQUMvQywwQ0FBdUIsQ0FDeEIsQ0FBQztRQUVGLE1BQU0sSUFBSSxHQUFHLE1BQU0saUJBQWlCLENBQUMsU0FBUyxDQUM1QztZQUNFLEdBQUcsRUFBRSxnQkFBZ0I7U0FDdEIsRUFDRDtZQUNFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7U0FDeEIsRUFDRDtZQUNFLE1BQU0sRUFBRSxJQUFJO1NBQ2IsQ0FDRixDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLENBQUMsRUFBRTtZQUN4RCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM1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
|
|
@@ -17,7 +17,7 @@ export default abstract class MigrationCommand extends BaseCommand {
|
|
|
17
17
|
static commandName: string;
|
|
18
18
|
static description: string;
|
|
19
19
|
connection: string;
|
|
20
|
-
protected getConnection(db: DatabaseContract): ConnectionContract
|
|
20
|
+
protected getConnection(db: DatabaseContract): Promise<ConnectionContract>;
|
|
21
21
|
protected getMigrations(config: MongodbConnectionConfig): Promise<MigrationDescription[]>;
|
|
22
22
|
protected importMigration(file: string): Promise<{
|
|
23
23
|
Migration: MigrationModule['default'];
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -32,18 +36,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
32
36
|
};
|
|
33
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
38
|
exports.migrationLockCollectionName = exports.migrationCollectionName = void 0;
|
|
35
|
-
const promises_1 = require("fs/promises");
|
|
36
|
-
const
|
|
39
|
+
const promises_1 = require("node:fs/promises");
|
|
40
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
37
41
|
const standalone_1 = require("@adonisjs/core/build/standalone");
|
|
38
42
|
const transformMigrations_1 = __importDefault(require("./transformMigrations"));
|
|
39
43
|
const folder = 'mongodb/migrations';
|
|
40
44
|
exports.migrationCollectionName = '__adonis_mongodb';
|
|
41
45
|
exports.migrationLockCollectionName = '__adonis_mongodb_lock';
|
|
42
46
|
class MigrationCommand extends standalone_1.BaseCommand {
|
|
43
|
-
getConnection(db) {
|
|
47
|
+
async getConnection(db) {
|
|
44
48
|
if (this.connection && !db.manager.has(this.connection)) {
|
|
45
49
|
this.logger.error(`No MongoDB connection registered with name "${this.connection}"`);
|
|
46
|
-
|
|
50
|
+
this.exitCode = 1;
|
|
51
|
+
await this.exit();
|
|
47
52
|
}
|
|
48
53
|
return db.connection(this.connection);
|
|
49
54
|
}
|
|
@@ -52,13 +57,13 @@ class MigrationCommand extends standalone_1.BaseCommand {
|
|
|
52
57
|
? config.migrations
|
|
53
58
|
: [folder];
|
|
54
59
|
const rawMigrationFiles = await Promise.all(folders
|
|
55
|
-
.map((folder) =>
|
|
60
|
+
.map((folder) => node_path_1.default.join(this.application.appRoot, folder))
|
|
56
61
|
.map(async (migrationsPath) => {
|
|
57
62
|
try {
|
|
58
63
|
const files = await (0, promises_1.readdir)(migrationsPath);
|
|
59
64
|
return files
|
|
60
|
-
.filter((file) =>
|
|
61
|
-
.map((file) =>
|
|
65
|
+
.filter((file) => node_path_1.default.extname(file) === '.js' || node_path_1.default.extname(file) === '.ts')
|
|
66
|
+
.map((file) => node_path_1.default.join(migrationsPath, file));
|
|
62
67
|
}
|
|
63
68
|
catch {
|
|
64
69
|
return [];
|
|
@@ -67,7 +72,8 @@ class MigrationCommand extends standalone_1.BaseCommand {
|
|
|
67
72
|
return (0, transformMigrations_1.default)(rawMigrationFiles, this.logger);
|
|
68
73
|
}
|
|
69
74
|
async importMigration(file) {
|
|
70
|
-
|
|
75
|
+
var _a;
|
|
76
|
+
const module = await (_a = file, Promise.resolve().then(() => __importStar(require(_a))));
|
|
71
77
|
const { default: Migration, description } = module;
|
|
72
78
|
if (!Migration || typeof Migration !== 'function') {
|
|
73
79
|
throw new Error(`Migration in ${file} must export a default class`);
|
|
@@ -85,4 +91,4 @@ __decorate([
|
|
|
85
91
|
__metadata("design:type", String)
|
|
86
92
|
], MigrationCommand.prototype, "connection", void 0);
|
|
87
93
|
exports.default = MigrationCommand;
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uQ29tbWFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbW1hbmRzL3V0aWwvTWlncmF0aW9uQ29tbWFuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUEyQztBQUMzQywwREFBNkI7QUFFN0IsZ0VBQXFFO0FBV3JFLGdGQUUrQjtBQUUvQixNQUFNLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQztBQUV2QixRQUFBLHVCQUF1QixHQUFHLGtCQUFrQixDQUFDO0FBQzdDLFFBQUEsMkJBQTJCLEdBQUcsdUJBQXVCLENBQUM7QUFXbkUsTUFBOEIsZ0JBQWlCLFNBQVEsd0JBQVc7SUFXdEQsS0FBSyxDQUFDLGFBQWEsQ0FDM0IsRUFBb0I7UUFFcEIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3ZELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLCtDQUErQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQ2xFLENBQUM7WUFDRixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztZQUNsQixNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNuQjtRQUNELE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVTLEtBQUssQ0FBQyxhQUFhLENBQzNCLE1BQStCO1FBRS9CLE1BQU0sT0FBTyxHQUNYLE1BQU0sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUMvQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVU7WUFDbkIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFZixNQUFNLGlCQUFpQixHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDekMsT0FBTzthQUNKLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsbUJBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDNUQsR0FBRyxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsRUFBRTtZQUM1QixJQUFJO2dCQUNGLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBQSxrQkFBTyxFQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUM1QyxPQUFPLEtBQUs7cUJBQ1QsTUFBTSxDQUNMLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDUCxtQkFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksbUJBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUMvRDtxQkFDQSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLG1CQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ25EO1lBQUMsTUFBTTtnQkFDTixPQUFPLEVBQUUsQ0FBQzthQUNYO1FBQ0gsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUVGLE9BQU8sSUFBQSw2QkFBbUIsRUFBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVTLEtBQUssQ0FBQyxlQUFlLENBQzdCLElBQVk7O1FBRVosTUFBTSxNQUFNLEdBQW9CLFlBQWEsSUFBSSwwREFBQyxDQUFDO1FBQ25ELE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUNuRCxJQUFJLENBQUMsU0FBUyxJQUFJLE9BQU8sU0FBUyxLQUFLLFVBQVUsRUFBRTtZQUNqRCxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixJQUFJLDhCQUE4QixDQUFDLENBQUM7U0FDckU7UUFDRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3BDLENBQUM7O0FBN0RhLHlCQUFRLEdBQUc7SUFDdkIsT0FBTyxFQUFFLElBQUk7Q0FDZCxDQUFDO0FBRVksNEJBQVcsR0FBRyxhQUFhLENBQUM7QUFDNUIsNEJBQVcsR0FBRyxhQUFhLENBQUM7QUFFMUM7SUFBQyxrQkFBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFdBQVcsRUFBRSw4Q0FBOEMsRUFBRSxDQUFDOztvREFDcEQ7QUFUNUIsbUNBK0RDIn0=
|
|
@@ -1,19 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
6
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
4
7
|
const matchTimestamp = /^(?<timestamp>\d+)_.*$/;
|
|
5
8
|
function transformMigrations(rawMigrations, logger) {
|
|
6
9
|
// Separate name and file fields
|
|
7
10
|
const migrations = rawMigrations
|
|
8
11
|
.flat()
|
|
9
|
-
.sort((a, b) =>
|
|
12
|
+
.sort((a, b) => node_path_1.default
|
|
13
|
+
.basename(a, node_path_1.default.extname(a))
|
|
14
|
+
.localeCompare(node_path_1.default.basename(b, node_path_1.default.extname(a))))
|
|
10
15
|
.map((migrationFile) => ({
|
|
11
|
-
name:
|
|
16
|
+
name: node_path_1.default.basename(migrationFile, node_path_1.default.extname(migrationFile)),
|
|
12
17
|
file: migrationFile,
|
|
13
18
|
}));
|
|
14
19
|
// Check migration file names
|
|
15
20
|
let hadBadName = false;
|
|
16
|
-
|
|
21
|
+
for (const { name, file } of migrations) {
|
|
17
22
|
const match = matchTimestamp.exec(name);
|
|
18
23
|
const timestamp = Number(match?.groups?.timestamp);
|
|
19
24
|
if (Number.isNaN(timestamp) || timestamp === 0) {
|
|
@@ -22,7 +27,7 @@ function transformMigrations(rawMigrations, logger) {
|
|
|
22
27
|
logger.error(`Invalid migration file: ${file}. Name must start with a timestamp`);
|
|
23
28
|
}
|
|
24
29
|
}
|
|
25
|
-
}
|
|
30
|
+
}
|
|
26
31
|
if (hadBadName) {
|
|
27
32
|
throw new Error('some migration files are malformed');
|
|
28
33
|
}
|
|
@@ -36,4 +41,4 @@ function transformMigrations(rawMigrations, logger) {
|
|
|
36
41
|
return migrations;
|
|
37
42
|
}
|
|
38
43
|
exports.default = transformMigrations;
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtTWlncmF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbW1hbmRzL3V0aWwvdHJhbnNmb3JtTWlncmF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDBEQUE2QjtBQUk3QixNQUFNLGNBQWMsR0FBRyx3QkFBd0IsQ0FBQztBQU9oRCxTQUF3QixtQkFBbUIsQ0FDekMsYUFBeUIsRUFDekIsTUFBZTtJQUVmLGdDQUFnQztJQUNoQyxNQUFNLFVBQVUsR0FBMkIsYUFBYTtTQUNyRCxJQUFJLEVBQUU7U0FDTixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDYixtQkFBSTtTQUNELFFBQVEsQ0FBQyxDQUFDLEVBQUUsbUJBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUIsYUFBYSxDQUFDLG1CQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxtQkFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3BEO1NBQ0EsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksRUFBRSxtQkFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsbUJBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0QsSUFBSSxFQUFFLGFBQWE7S0FDcEIsQ0FBQyxDQUFDLENBQUM7SUFFTiw2QkFBNkI7SUFDN0IsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLEtBQUssTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxVQUFVLEVBQUU7UUFDdkMsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNuRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRTtZQUM5QyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLElBQUksTUFBTSxFQUFFO2dCQUNWLE1BQU0sQ0FBQyxLQUFLLENBQ1YsMkJBQTJCLElBQUksb0NBQW9DLENBQ3BFLENBQUM7YUFDSDtTQUNGO0tBQ0Y7SUFDRCxJQUFJLFVBQVUsRUFBRTtRQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztLQUN2RDtJQUVELHdDQUF3QztJQUN4QyxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FDeEIsVUFBVSxDQUFDLE1BQU0sQ0FDZixDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDbEIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQ3hFLENBQ0YsQ0FBQztJQUNGLElBQUksVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUU7UUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FDYix5Q0FBeUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQzthQUNyRCxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUM7YUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ2hCLENBQUM7S0FDSDtJQUVELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFuREQsc0NBbURDIn0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="@adonisjs/logger/build/adonis-typings/logger" />
|
|
2
2
|
/// <reference types="node" />
|
|
3
|
-
import { EventEmitter } from 'events';
|
|
4
|
-
import { MongoClient, Db, Collection, ClientSession } from 'mongodb';
|
|
3
|
+
import { EventEmitter } from 'node:events';
|
|
4
|
+
import { MongoClient, Db, Collection, ClientSession, Document } from 'mongodb';
|
|
5
5
|
import { LoggerContract } from '@ioc:Adonis/Core/Logger';
|
|
6
6
|
import type { MongodbConnectionConfig, ConnectionContract } from '@ioc:Zakodium/Mongodb/Database';
|
|
7
7
|
export declare interface Connection {
|
|
@@ -24,6 +24,6 @@ export declare class Connection extends EventEmitter implements ConnectionContra
|
|
|
24
24
|
connect(): Promise<Db>;
|
|
25
25
|
disconnect(): Promise<void>;
|
|
26
26
|
database(): Promise<Db>;
|
|
27
|
-
collection<TSchema
|
|
27
|
+
collection<TSchema extends Document>(collectionName: string): Promise<Collection<TSchema>>;
|
|
28
28
|
transaction<TResult>(handler: (session: ClientSession, db: Db) => Promise<TResult>): Promise<TResult>;
|
|
29
29
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Connection = void 0;
|
|
4
|
-
const
|
|
4
|
+
const node_events_1 = require("node:events");
|
|
5
5
|
const utils_1 = require("@poppinss/utils");
|
|
6
6
|
const mongodb_1 = require("mongodb");
|
|
7
7
|
var ConnectionStatus;
|
|
@@ -9,7 +9,7 @@ var ConnectionStatus;
|
|
|
9
9
|
ConnectionStatus["CONNECTED"] = "CONNECTED";
|
|
10
10
|
ConnectionStatus["DISCONNECTED"] = "DISCONNECTED";
|
|
11
11
|
})(ConnectionStatus || (ConnectionStatus = {}));
|
|
12
|
-
class Connection extends
|
|
12
|
+
class Connection extends node_events_1.EventEmitter {
|
|
13
13
|
constructor(name, config, logger) {
|
|
14
14
|
super();
|
|
15
15
|
this.name = name;
|
|
@@ -81,4 +81,4 @@ class Connection extends events_1.EventEmitter {
|
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
exports.Connection = Connection;
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9EYXRhYmFzZS9Db25uZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUEyQztBQUUzQywyQ0FBNEM7QUFDNUMscUNBQStFO0FBUS9FLElBQUssZ0JBR0o7QUFIRCxXQUFLLGdCQUFnQjtJQUNuQiwyQ0FBdUIsQ0FBQTtJQUN2QixpREFBNkIsQ0FBQTtBQUMvQixDQUFDLEVBSEksZ0JBQWdCLEtBQWhCLGdCQUFnQixRQUdwQjtBQXlCRCxNQUFhLFVBQVcsU0FBUSwwQkFBWTtJQVUxQyxZQUNFLElBQVksRUFDWixNQUErQixFQUMvQixNQUFzQjtRQUV0QixLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsWUFBWSxDQUFDO1FBQzVDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxxQkFBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQzdDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhO1NBQzdCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFTyxLQUFLLENBQUMsU0FBUztRQUNyQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN4QixNQUFNLElBQUksaUJBQVMsQ0FDakIscUNBQXFDLEVBQ3JDLEdBQUcsRUFDSCxzQkFBc0IsQ0FDdkIsQ0FBQztTQUNIO1FBQ0QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFTSxPQUFP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
|
package/lib/src/Migration.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
var MigrationType;
|
|
4
4
|
(function (MigrationType) {
|
|
5
5
|
MigrationType["CreateCollection"] = "CreateCollection";
|
|
6
|
+
MigrationType["DropIndex"] = "DropIndex";
|
|
6
7
|
MigrationType["CreateIndex"] = "CreateIndex";
|
|
7
8
|
MigrationType["Custom"] = "Custom";
|
|
8
9
|
})(MigrationType || (MigrationType = {}));
|
|
@@ -16,18 +17,28 @@ function createMigration(Database) {
|
|
|
16
17
|
this.$session = session;
|
|
17
18
|
}
|
|
18
19
|
createCollections(collectionNames) {
|
|
19
|
-
|
|
20
|
+
for (const collectionName of collectionNames) {
|
|
21
|
+
this.createCollection(collectionName);
|
|
22
|
+
}
|
|
20
23
|
}
|
|
21
24
|
createCollection(collectionName) {
|
|
22
25
|
this.$operations.push({
|
|
23
26
|
type: MigrationType.CreateCollection,
|
|
24
|
-
|
|
27
|
+
collectionName,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
dropIndex(collectionName, indexName, options) {
|
|
31
|
+
this.$operations.push({
|
|
32
|
+
type: MigrationType.DropIndex,
|
|
33
|
+
collectionName,
|
|
34
|
+
indexName,
|
|
35
|
+
options,
|
|
25
36
|
});
|
|
26
37
|
}
|
|
27
38
|
createIndex(collectionName, index, options) {
|
|
28
39
|
this.$operations.push({
|
|
29
40
|
type: MigrationType.CreateIndex,
|
|
30
|
-
|
|
41
|
+
collectionName,
|
|
31
42
|
index,
|
|
32
43
|
options,
|
|
33
44
|
});
|
|
@@ -41,6 +52,7 @@ function createMigration(Database) {
|
|
|
41
52
|
async execUp() {
|
|
42
53
|
this.up();
|
|
43
54
|
await this._createCollections();
|
|
55
|
+
await this._dropIndexes();
|
|
44
56
|
await this._createIndexes();
|
|
45
57
|
await this._executeDeferred();
|
|
46
58
|
}
|
|
@@ -59,8 +71,10 @@ function createMigration(Database) {
|
|
|
59
71
|
async _createCollections() {
|
|
60
72
|
const db = await this.$connection.database();
|
|
61
73
|
for (const op of this.$operations.filter(isCreateCollection)) {
|
|
62
|
-
this.$logger.info(`Creating collection ${op.
|
|
63
|
-
await db.createCollection(op.
|
|
74
|
+
this.$logger.info(`Creating collection ${op.collectionName}`);
|
|
75
|
+
await db.createCollection(op.collectionName, {
|
|
76
|
+
session: this.$session,
|
|
77
|
+
});
|
|
64
78
|
}
|
|
65
79
|
}
|
|
66
80
|
async _executeDeferred() {
|
|
@@ -69,15 +83,26 @@ function createMigration(Database) {
|
|
|
69
83
|
await op.callback(db, this.$session);
|
|
70
84
|
}
|
|
71
85
|
}
|
|
86
|
+
async _dropIndexes() {
|
|
87
|
+
const db = await this.$connection.database();
|
|
88
|
+
for (const op of this.$operations.filter(isDropIndex)) {
|
|
89
|
+
this.$logger.info(`Dropping index ${op.indexName} on ${op.collectionName}`);
|
|
90
|
+
const collection = db.collection(op.collectionName);
|
|
91
|
+
// Index deletion cannot be done in a transaction.
|
|
92
|
+
await collection.dropIndex(op.indexName, { ...op.options });
|
|
93
|
+
}
|
|
94
|
+
}
|
|
72
95
|
async _createIndexes() {
|
|
73
96
|
const db = await this.$connection.database();
|
|
74
97
|
const collections = await this._listCollections();
|
|
75
98
|
for (const op of this.$operations.filter(isCreateIndex)) {
|
|
76
|
-
this.$logger.info(`Creating index on ${op.
|
|
77
|
-
await db.createIndex(op.
|
|
99
|
+
this.$logger.info(`Creating index on ${op.collectionName}`);
|
|
100
|
+
await db.createIndex(op.collectionName, op.index, {
|
|
78
101
|
...op.options,
|
|
79
|
-
//
|
|
80
|
-
session: collections.includes(op.
|
|
102
|
+
// Index creation will fail if collection pre-exists the transaction.
|
|
103
|
+
session: collections.includes(op.collectionName)
|
|
104
|
+
? undefined
|
|
105
|
+
: this.$session,
|
|
81
106
|
});
|
|
82
107
|
}
|
|
83
108
|
}
|
|
@@ -91,7 +116,10 @@ function isCreateCollection(op) {
|
|
|
91
116
|
function isCreateIndex(op) {
|
|
92
117
|
return op.type === MigrationType.CreateIndex;
|
|
93
118
|
}
|
|
119
|
+
function isDropIndex(op) {
|
|
120
|
+
return op.type === MigrationType.DropIndex;
|
|
121
|
+
}
|
|
94
122
|
function isCustom(op) {
|
|
95
123
|
return op.type === MigrationType.Custom;
|
|
96
124
|
}
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL01pZ3JhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWNBLElBQUssYUFLSjtBQUxELFdBQUssYUFBYTtJQUNoQixzREFBcUMsQ0FBQTtJQUNyQyx3Q0FBdUIsQ0FBQTtJQUN2Qiw0Q0FBMkIsQ0FBQTtJQUMzQixrQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBTEksYUFBYSxLQUFiLGFBQWEsUUFLakI7QUFnQ0QsOERBQThEO0FBQzlELFNBQXdCLGVBQWUsQ0FBQyxRQUEwQjtJQUNoRSxNQUFlLFNBQVM7UUFPdEIsWUFDRSxVQUE4QixFQUM5QixNQUFjLEVBQ2QsT0FBc0I7WUFUaEIsZ0JBQVcsR0FBeUIsRUFBRSxDQUFDO1lBVzdDLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztZQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUMxQixDQUFDO1FBRU0saUJBQWlCLENBQUMsZUFBeUI7WUFDaEQsS0FBSyxNQUFNLGNBQWMsSUFBSSxlQUFlLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUN2QztRQUNILENBQUM7UUFFTSxnQkFBZ0IsQ0FBQyxjQUFzQjtZQUM1QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDcEIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxnQkFBZ0I7Z0JBQ3BDLGNBQWM7YUFDZixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRU0sU0FBUyxDQUNkLGNBQXNCLEVBQ3RCLFNBQWlCLEVBQ2pCLE9BQTRCO1lBRTVCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUNwQixJQUFJLEVBQUUsYUFBYSxDQUFDLFNBQVM7Z0JBQzdCLGNBQWM7Z0JBQ2Qs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
|
package/lib/src/Model/Model.d.ts
CHANGED
|
@@ -4,11 +4,11 @@ import { MongodbDocument, QueryContract, NoExtraProperties, ModelAttributes, Mod
|
|
|
4
4
|
declare class Query<ModelType extends typeof BaseModel> implements QueryContract<InstanceType<ModelType>> {
|
|
5
5
|
private filter;
|
|
6
6
|
private options;
|
|
7
|
-
private
|
|
7
|
+
private ModelConstructor;
|
|
8
8
|
private localCustomSort;
|
|
9
9
|
private localOptions;
|
|
10
10
|
private getDriverOptions;
|
|
11
|
-
constructor(filter: Filter<ModelAttributes<InstanceType<ModelType>>>, options: ModelAdapterOptions<Omit<FindOptions<ModelAttributes<InstanceType<ModelType>>>, ForbiddenQueryOptions>> | undefined,
|
|
11
|
+
constructor(filter: Filter<ModelAttributes<InstanceType<ModelType>>>, options: ModelAdapterOptions<Omit<FindOptions<ModelAttributes<InstanceType<ModelType>>>, ForbiddenQueryOptions>> | undefined, ModelConstructor: ModelType);
|
|
12
12
|
sort(sort: QuerySortObject): this;
|
|
13
13
|
sortBy(field: string, direction?: SortDirection): this;
|
|
14
14
|
skip(skip: number): this;
|
package/lib/src/Model/Model.js
CHANGED
|
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.BaseAutoIncrementModel = exports.BaseModel = void 0;
|
|
7
|
-
const
|
|
7
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
8
8
|
const utils_1 = require("@poppinss/utils");
|
|
9
9
|
const lodash_1 = require("lodash");
|
|
10
10
|
const pluralize_1 = __importDefault(require("pluralize"));
|
|
@@ -24,10 +24,15 @@ const forbiddenQueryOptions = [
|
|
|
24
24
|
'explain',
|
|
25
25
|
];
|
|
26
26
|
class Query {
|
|
27
|
-
|
|
27
|
+
getDriverOptions() {
|
|
28
|
+
return { ...mergeDriverOptions(this.options), ...this.localOptions };
|
|
29
|
+
}
|
|
30
|
+
constructor(filter, options,
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
32
|
+
ModelConstructor) {
|
|
28
33
|
this.filter = filter;
|
|
29
34
|
this.options = options;
|
|
30
|
-
this.
|
|
35
|
+
this.ModelConstructor = ModelConstructor;
|
|
31
36
|
this.localCustomSort = false;
|
|
32
37
|
this.localOptions = {
|
|
33
38
|
sort: {
|
|
@@ -42,9 +47,6 @@ class Query {
|
|
|
42
47
|
}
|
|
43
48
|
}
|
|
44
49
|
}
|
|
45
|
-
getDriverOptions() {
|
|
46
|
-
return { ...mergeDriverOptions(this.options), ...this.localOptions };
|
|
47
|
-
}
|
|
48
50
|
sort(sort) {
|
|
49
51
|
if (!this.localCustomSort) {
|
|
50
52
|
this.localCustomSort = true;
|
|
@@ -79,13 +81,13 @@ class Query {
|
|
|
79
81
|
return this;
|
|
80
82
|
}
|
|
81
83
|
async first() {
|
|
82
|
-
const collection = await this.
|
|
84
|
+
const collection = await this.ModelConstructor.getCollection();
|
|
83
85
|
const driverOptions = this.getDriverOptions();
|
|
84
86
|
const result = await collection.findOne(this.filter, driverOptions);
|
|
85
87
|
if (result === null) {
|
|
86
88
|
return null;
|
|
87
89
|
}
|
|
88
|
-
const instance = new this.
|
|
90
|
+
const instance = new this.ModelConstructor(result, {
|
|
89
91
|
// @ts-expect-error Unavoidable error.
|
|
90
92
|
collection,
|
|
91
93
|
session: driverOptions.session,
|
|
@@ -100,37 +102,38 @@ class Query {
|
|
|
100
102
|
return result;
|
|
101
103
|
}
|
|
102
104
|
async all() {
|
|
103
|
-
const collection = await this.
|
|
105
|
+
const collection = await this.ModelConstructor.getCollection();
|
|
104
106
|
const driverOptions = this.getDriverOptions();
|
|
105
107
|
const result = await collection.find(this.filter, driverOptions).toArray();
|
|
106
|
-
return result.map((value) => new this.
|
|
108
|
+
return result.map((value) => new this.ModelConstructor(value, {
|
|
107
109
|
// @ts-expect-error Unavoidable error.
|
|
108
110
|
collection,
|
|
109
111
|
session: driverOptions.session,
|
|
110
112
|
}, true));
|
|
111
113
|
}
|
|
112
114
|
async count() {
|
|
113
|
-
const collection = await this.
|
|
115
|
+
const collection = await this.ModelConstructor.getCollection();
|
|
114
116
|
const driverOptions = this.getDriverOptions();
|
|
115
117
|
return collection.countDocuments(this.filter, driverOptions);
|
|
116
118
|
}
|
|
117
119
|
async distinct(key) {
|
|
118
|
-
const collection = await this.
|
|
120
|
+
const collection = await this.ModelConstructor.getCollection();
|
|
119
121
|
const driverOptions = this.getDriverOptions();
|
|
120
|
-
|
|
122
|
+
const result = await collection.distinct(key, this.filter, driverOptions);
|
|
123
|
+
return result;
|
|
121
124
|
}
|
|
122
125
|
async explain(verbosity) {
|
|
123
|
-
const collection = await this.
|
|
126
|
+
const collection = await this.ModelConstructor.getCollection();
|
|
124
127
|
const driverOptions = this.getDriverOptions();
|
|
125
128
|
return collection.find(this.filter, driverOptions).explain(verbosity);
|
|
126
129
|
}
|
|
127
130
|
async *[Symbol.asyncIterator]() {
|
|
128
|
-
const collection = await this.
|
|
131
|
+
const collection = await this.ModelConstructor.getCollection();
|
|
129
132
|
const driverOptions = this.getDriverOptions();
|
|
130
133
|
for await (const value of collection.find(this.filter, driverOptions)) {
|
|
131
134
|
if (value === null)
|
|
132
135
|
continue;
|
|
133
|
-
yield new this.
|
|
136
|
+
yield new this.ModelConstructor(value, {
|
|
134
137
|
// @ts-expect-error Unavoidable error.
|
|
135
138
|
collection,
|
|
136
139
|
session: driverOptions.session,
|
|
@@ -158,7 +161,7 @@ class BaseModel {
|
|
|
158
161
|
this.$isDeleted = false;
|
|
159
162
|
this.$collection = null;
|
|
160
163
|
if (dbObj) {
|
|
161
|
-
this.$original = alreadyExists
|
|
164
|
+
this.$original = alreadyExists ? (0, lodash_1.cloneDeep)(dbObj) : {};
|
|
162
165
|
this.$attributes = dbObj;
|
|
163
166
|
}
|
|
164
167
|
else {
|
|
@@ -200,7 +203,7 @@ class BaseModel {
|
|
|
200
203
|
/**
|
|
201
204
|
* No-op when already booted.
|
|
202
205
|
*/
|
|
203
|
-
if (this.booted
|
|
206
|
+
if (this.booted) {
|
|
204
207
|
return;
|
|
205
208
|
}
|
|
206
209
|
this.booted = true;
|
|
@@ -312,7 +315,7 @@ class BaseModel {
|
|
|
312
315
|
return new Query(filter, options, this);
|
|
313
316
|
}
|
|
314
317
|
static async getCollection(connection = this.connection) {
|
|
315
|
-
(0,
|
|
318
|
+
(0, node_assert_1.default)(this.$database, 'Model should only be accessed from IoC container');
|
|
316
319
|
const connectionInstance = this.$database.connection(connection);
|
|
317
320
|
return connectionInstance.collection(this.collectionName);
|
|
318
321
|
}
|
|
@@ -394,12 +397,15 @@ class BaseModel {
|
|
|
394
397
|
session: this.$options?.session,
|
|
395
398
|
};
|
|
396
399
|
if (!this.$isPersisted) {
|
|
400
|
+
// @ts-expect-error Unavoidable error, as _id is unknown here.
|
|
397
401
|
const result = await collection.insertOne(toSet, driverOptions);
|
|
398
402
|
this.$attributes._id = result.insertedId;
|
|
399
403
|
this.$isPersisted = true;
|
|
400
404
|
}
|
|
401
405
|
else {
|
|
402
|
-
await collection.updateOne(
|
|
406
|
+
await collection.updateOne(
|
|
407
|
+
// @ts-expect-error Unavoidable error, as _id is unknown here.
|
|
408
|
+
{ _id: this.$attributes._id }, { $set: toSet }, driverOptions);
|
|
403
409
|
}
|
|
404
410
|
this.$original = (0, lodash_1.cloneDeep)(this.$attributes);
|
|
405
411
|
return true;
|
|
@@ -412,15 +418,16 @@ class BaseModel {
|
|
|
412
418
|
session: this.$options?.session,
|
|
413
419
|
};
|
|
414
420
|
const result = await collection.deleteOne({
|
|
421
|
+
// @ts-expect-error Unavoidable error, as _id is unknown here.
|
|
415
422
|
_id: this.$attributes._id,
|
|
416
423
|
}, driverOptions);
|
|
417
424
|
this.$isDeleted = true;
|
|
418
425
|
return result.deletedCount === 1;
|
|
419
426
|
}
|
|
420
427
|
merge(values) {
|
|
421
|
-
|
|
428
|
+
for (const [key, value] of Object.entries(values)) {
|
|
422
429
|
this.$attributes[key] = value;
|
|
423
|
-
}
|
|
430
|
+
}
|
|
424
431
|
return this;
|
|
425
432
|
}
|
|
426
433
|
fill(values) {
|
|
@@ -448,19 +455,24 @@ class BaseAutoIncrementModel extends BaseModel {
|
|
|
448
455
|
if (this._id === undefined) {
|
|
449
456
|
const connection = BaseAutoIncrementModel.$database.connection();
|
|
450
457
|
const counterCollection = await connection.collection('__adonis_mongodb_counters');
|
|
451
|
-
const doc = await counterCollection.findOneAndUpdate(
|
|
452
|
-
|
|
458
|
+
const doc = await counterCollection.findOneAndUpdate(
|
|
459
|
+
// @ts-expect-error Unavoidable error, as _id is unknown here.
|
|
460
|
+
{ _id: this.constructor.collectionName }, { $inc: { count: 1 } }, { ...driverOptions, upsert: true, returnDocument: 'after' });
|
|
461
|
+
(0, node_assert_1.default)(doc.value, 'upsert should always create a document');
|
|
453
462
|
toSet._id = doc.value.count;
|
|
463
|
+
// @ts-expect-error Unavoidable error, as _id is unknown here.
|
|
454
464
|
await collection.insertOne(toSet, driverOptions);
|
|
455
465
|
this.$attributes._id = doc.value.count;
|
|
456
466
|
this.$isPersisted = true;
|
|
457
467
|
}
|
|
458
468
|
else {
|
|
459
|
-
await collection.updateOne(
|
|
469
|
+
await collection.updateOne(
|
|
470
|
+
// @ts-expect-error Unavoidable error, as _id is unknown here.
|
|
471
|
+
{ _id: this.$attributes._id }, { $set: toSet }, driverOptions);
|
|
460
472
|
}
|
|
461
473
|
this.$original = (0, lodash_1.cloneDeep)(this.$attributes);
|
|
462
474
|
return true;
|
|
463
475
|
}
|
|
464
476
|
}
|
|
465
477
|
exports.BaseAutoIncrementModel = BaseAutoIncrementModel;
|
|
466
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvTW9kZWwvTW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQTRCO0FBRTVCLDJDQUFrRTtBQUNsRSxtQ0FBK0Q7QUFnQi9ELDBEQUFrQztBQWVsQyxpREFBOEM7QUFFOUMsU0FBUyxrQkFBa0IsQ0FFekIsT0FBK0M7SUFDL0MsSUFBSSxDQUFDLE9BQU87UUFBRSxPQUFPLEVBQXNCLENBQUM7SUFDNUMsT0FBTztRQUNMLEdBQUcsT0FBTyxDQUFDLGFBQWE7UUFDeEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxNQUFNO0tBQ0osQ0FBQztBQUN4QixDQUFDO0FBUUQsTUFBTSxxQkFBcUIsR0FBNEI7SUFDckQsTUFBTTtJQUNOLE1BQU07SUFDTixPQUFPO0lBQ1AsU0FBUztDQUNWLENBQUM7QUFFRixNQUFNLEtBQUs7SUFnQlQsWUFDVSxNQUF3RCxFQUN4RCxPQU9LLEVBQ0wsZ0JBQTJCO1FBVDNCLFdBQU0sR0FBTixNQUFNLENBQWtEO1FBQ3hELFlBQU8sR0FBUCxPQUFPLENBT0Y7UUFDTCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQVc7UUF2QjdCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLGlCQUFZLEdBQXNCO1lBQ3hDLElBQUksRUFBRTtnQkFDSixHQUFHLEVBQUUsWUFBWTthQUNsQjtTQUNGLENBQUM7UUFvQkEsSUFBSSxPQUFPLEVBQUUsYUFBYSxFQUFFO1lBQzFCLEtBQUssTUFBTSxHQUFHLElBQUkscUJBQXFCLEVBQUU7Z0JBQ3ZDLElBQUksR0FBRyxJQUFJLE9BQU8sQ0FBQyxhQUFhLEVBQUU7b0JBQ2hDLE1BQU0sSUFBSSxTQUFTLENBQUMsR0FBRyxHQUFHLDBDQUEwQyxDQUFDLENBQUM7aUJBQ3ZFO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUF6Qk8sZ0JBQWdCO1FBR3RCLE9BQU8sRUFBRSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FB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
|
|
478
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvTW9kZWwvTW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOERBQWlDO0FBRWpDLDJDQUFrRTtBQUNsRSxtQ0FBK0Q7QUFnQi9ELDBEQUFrQztBQWVsQyxpREFBOEM7QUFFOUMsU0FBUyxrQkFBa0IsQ0FFekIsT0FBK0M7SUFDL0MsSUFBSSxDQUFDLE9BQU87UUFBRSxPQUFPLEVBQXNCLENBQUM7SUFDNUMsT0FBTztRQUNMLEdBQUcsT0FBTyxDQUFDLGFBQWE7UUFDeEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxNQUFNO0tBQ0osQ0FBQztBQUN4QixDQUFDO0FBUUQsTUFBTSxxQkFBcUIsR0FBNEI7SUFDckQsTUFBTTtJQUNOLE1BQU07SUFDTixPQUFPO0lBQ1AsU0FBUztDQUNWLENBQUM7QUFFRixNQUFNLEtBQUs7SUFVRCxnQkFBZ0I7UUFHdEIsT0FBTyxFQUFFLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxZQUNVLE1BQXdELEVBQ3hELE9BT0s7SUFDYixnRUFBZ0U7SUFDeEQsZ0JBQTJCO1FBVjNCLFdBQU0sR0FBTixNQUFNLENBQWtEO1FBQ3hELFlBQU8sR0FBUCxPQUFPLENBT0Y7UUFFTCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQVc7UUF4QjdCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLGlCQUFZLEdBQXNCO1lBQ3hDLElBQUksRUFBRTtnQkFDSixHQUFHLEVBQUUsWUFBWTthQUNsQjtTQUNGLENBQUM7UUFxQkEsSUFBSSxPQUFPLEVBQUUsYUFBYSxFQUFFO1lBQzFCLEtBQUssTUFBTSxHQUFHLElBQUkscUJBQXFCLEVBQUU7Z0JBQ3ZDLElBQUksR0FBRyxJQUFJLE9BQU8sQ0FBQyxhQUFhLEVBQUU7b0JBQ2hDLE1BQU0sSUFBSSxTQUFTLENBQUMsR0FBRyxHQUFHLDBDQUEwQyxDQUFDLENBQUM7aUJBQ3ZFO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFTSxJQUFJLENBQUMsSUFBcUI7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1NBQy9CO2FBQU07WUFDTCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQWEsRUFBRSxZQUEyQixXQUFXO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU0sSUFBSSxDQUFDLElBQVk7UUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDM0IsTUFBTSxJQUFJLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO1lBQ1osTUFBTSxJQUFJLFNBQVMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFhO1FBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzVCLE1BQU0sSUFBSSxTQUFTLENBQUMsMEJBQTBCLENBQUMsQ0FBQztTQUNqRDtRQUNELElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtZQUNiLE1BQU0sSUFBSSxTQUFTLENBQUMsNEJBQTRCLENBQUMsQ0FBQztTQUNuRDtRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSztRQUNoQixNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMvRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QyxNQUFNLE1BQU0sR0FBRyxNQUFNLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNwRSxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7WUFDbkIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sUUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUN4QyxNQUFNLEVBQ047WUFDRSxzQ0FBc0M7WUFDdEMsVUFBVTtZQUNWLE9BQU8sRUFBRSxhQUFhLENBQUMsT0FBTztTQUMvQixFQUNELElBQUksQ0FDc0IsQ0FBQztRQUM3QixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU0sS0FBSyxDQUFDLFdBQVc7UUFDdEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE1BQU0sSUFBSSxpQkFBUyxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxHQUFHO1FBQ2QsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDL0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDOUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0UsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUNmLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDUixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FDdkIsS0FBSyxFQUNMO1lBQ0Usc0NBQXNDO1lBQ3RDLFVBQVU7WUFDVixPQUFPLEVBQUUsYUFBYSxDQUFDLE9BQU87U0FDL0IsRUFDRCxJQUFJLENBQ3NCLENBQy9CLENBQUM7SUFDSixDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQUs7UUFDaEIsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDL0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDOUMsT0FBTyxVQUFVLENBQUMsY0FBYyxDQUM5QixJQUFJLENBQUMsTUFBTSxFQUNYLGFBQTZCLENBQzlCLENBQUM7SUFDSixDQUFDO0lBRU0sS0FBSyxDQUFDLFFBQVEsQ0FBYyxHQUFXO1FBQzVDLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQy9ELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzlDLE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxDQUFDLFFBQVEsQ0FDdEMsR0FBRyxFQUNILElBQUksQ0FBQyxNQUFNLEVBQ1gsYUFBZ0MsQ0FDakMsQ0FBQztRQUNGLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQWdDO1FBQ25ELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQy9ELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzlDLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO1FBR2xDLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQy9ELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzlDLElBQUksS0FBSyxFQUFFLE1BQU0sS0FBSyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsRUFBRTtZQUNyRSxJQUFJLEtBQUssS0FBSyxJQUFJO2dCQUFFLFNBQVM7WUFDN0IsTUFBTSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FDN0IsS0FBSyxFQUNMO2dCQUNFLHNDQUFzQztnQkFDdEMsVUFBVTtnQkFDVixPQUFPLEVBQUUsYUFBYSxDQUFDLE9BQU87YUFDL0IsRUFDRCxJQUFJLENBQ3NCLENBQUM7U0FDOUI7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxTQUFTLHFCQUFxQixDQUFDLGVBQXVCO0lBQ3BELE9BQU8sSUFBQSxrQkFBUyxFQUFDLElBQUEsbUJBQVMsRUFBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFPRCxTQUFTLFVBQVUsQ0FBQyxPQUFxQjtJQUN2QyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJO1FBQUUsT0FBTztJQUNyQyxPQUFPLENBQUMsSUFBSSxHQUFHO1FBQ2IsR0FBRyxFQUFFLENBQUMsQ0FBQztLQUNSLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxNQUFNLENBQUMsTUFBZSxFQUFFLEdBQVc7SUFDMUMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFRRCxNQUFhLFNBQVM7SUFzQnBCLFlBQ0UsS0FBK0IsRUFDL0IsT0FBeUMsRUFDekMsYUFBYSxHQUFHLEtBQUs7UUFaaEIsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsYUFBUSxHQUFHLElBQUksQ0FBQztRQUNoQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRWhCLGdCQUFXLEdBRVYsSUFBSSxDQUFDO1FBUWQsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBQSxrQkFBUyxFQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDMUI7YUFBTTtZQUNMLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1NBQ3ZCO1FBRUQsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztTQUN2QztRQUVELElBQUksYUFBYSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1NBQ3ZCO1FBRUQsaURBQWlEO1FBQ2pELE9BQU8sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLDJCQUFZLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBR00sTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUEwQjtRQUNuRCxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztJQUM1QixDQUFDO0lBRU0sTUFBTSxDQUFDLFNBQVMsQ0FDckIsSUFBWSxFQUNaLFVBQWlDLEVBQUU7UUFFbkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDM0MsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBWTtRQUNsQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVNLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBWTtRQUNsQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVNLE1BQU0sQ0FBQyxJQUFJO1FBQ2hCOzs7V0FHRztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1NBQ3JCO1FBRUQ7O1dBRUc7UUFDSCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUVuQixJQUFBLDRCQUFvQixFQUFDLElBQUksRUFBRSxTQUFTLEVBQUU7WUFDcEMsWUFBWSxFQUFFLGdCQUFnQjtZQUM5QixZQUFZLEVBQUUscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM5QyxRQUFRLEVBQUUsUUFBUTtTQUNuQixDQUFDLENBQUM7UUFFSCxJQUFBLDRCQUFvQixFQUFDLElBQUksRUFBRSxTQUFTLEVBQUU7WUFDcEMsWUFBWSxFQUFFLG9CQUFvQjtZQUNsQyxZQUFZLEVBQUUsSUFBSSxHQUFHLEVBQUU7WUFDdkIsUUFBUSxFQUFFLFNBQVM7U0FDcEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUV2QixNQUF3RCxFQUN4RCxPQUFvRDtRQUVwRCxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM5QyxNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRCxPQUFPLFVBQVUsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FFeEIsS0FBd0QsRUFDeEQsT0FBK0M7UUFFL0MsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUMsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQy9CLHNDQUFzQztZQUN0QyxVQUFVO1lBQ1YsT0FBTyxFQUFFLGFBQWEsQ0FBQyxPQUFPO1NBQy9CLENBQTRCLENBQUM7UUFDOUIsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUN2QyxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBRTVCLE1BQWdFLEVBQ2hFLE9BQStDO1FBRS9DLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzlDLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQzFCLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDUixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxzQ0FBc0M7WUFDdEMsVUFBVTtZQUNWLE9BQU8sRUFBRSxhQUFhLENBQUMsT0FBTztTQUMvQixDQUE0QixDQUNoQyxDQUFDO1FBQ0YsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLEVBQUU7WUFDaEMsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztTQUN4QztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FFdEIsRUFBa0MsRUFDbEMsT0FFQztRQUVELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzlDLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xELE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFFdkIsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDL0QsSUFBSSxNQUFNLEtBQUssSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLElBQUksSUFBSSxDQUN2QixNQUFNO1FBQ04sc0NBQXNDO1FBQ3RDLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsT0FBTyxFQUFFLEVBQzlDLElBQUksQ0FDc0IsQ0FBQztRQUM3QixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBRTVCLEVBQWtDLEVBQ2xDLE9BRUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxNQUFNLElBQUksaUJBQVMsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztTQUN4RTtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FFeEIsR0FBVyxFQUNYLEtBQWMsRUFDZCxPQUVDO1FBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUMsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFFNUIsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDL0QsSUFBSSxNQUFNLEtBQUssSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLElBQUksSUFBSSxDQUN2QixNQUFNO1FBQ04sc0NBQXNDO1FBQ3RDLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsT0FBTyxFQUFFLEVBQzlDLElBQUksQ0FDc0IsQ0FBQztRQUM3QixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBRTlCLEdBQVcsRUFDWCxLQUFjLEVBQ2QsT0FFQztRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxNQUFNLElBQUksaUJBQVMsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztTQUN4RTtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FFMUIsR0FBMEMsRUFDMUMsT0FFQztRQUVELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzlDLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xELE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVTtZQUM3QixzQ0FBc0M7YUFDckMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsYUFBYSxDQUFDO2FBQzFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FDMUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNULElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLHNDQUFzQztZQUN0QyxVQUFVO1lBQ1YsT0FBTyxFQUFFLGFBQWEsQ0FBQyxPQUFPO1NBQy9CLENBQTRCLENBQ2hDLENBQUM7UUFDRixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBRXJCLE9BRUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM5QyxNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRCxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsRSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUMxQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ1QsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2Ysc0NBQXNDO1lBQ3RDLFVBQVU7WUFDVixPQUFPLEVBQUUsYUFBYSxDQUFDLE9BQU87U0FDL0IsQ0FBNEIsQ0FDaEMsQ0FBQztRQUNGLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBSyxDQUVqQixTQUEyRCxFQUFFLEVBQzdELE9BS0M7UUFFRCxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUUvQixVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVU7UUFFNUIsSUFBQSxxQkFBTSxFQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsa0RBQWtELENBQUMsQ0FBQztRQUMzRSxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sa0JBQWtCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDL0MsT0FBTztZQUNMLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7WUFDNUIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDL0IsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtTQUN4QixDQUFDO0lBQ0osQ0FBQztJQUVELElBQVcsTUFBTTtRQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFXLE1BQU07UUFDZixPQUFPLElBQUEsZUFBTSxFQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDN0MsT0FBTyxDQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUztnQkFDakMsQ0FBQyxJQUFBLGdCQUFPLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FDckMsQ0FBQztRQUNKLENBQUMsQ0FBbUMsQ0FBQztJQUN2QyxDQUFDO0lBRU0saUJBQWlCO1FBQ3RCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixNQUFNLElBQUksaUJBQVMsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztTQUN4RTtJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsaUJBQWlCO1FBRzVCLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUU7WUFDN0IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO1NBQ3pCO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQStCLENBQUM7UUFDekQsSUFBSSxDQUFDLFdBQVc7WUFDZCxDQUFDLE1BQU0sV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUVqQyxDQUFDO1FBQ0osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFTSxhQUFhO1FBQ2xCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDMUIsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbEQsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELDBFQUEwRTtRQUMxRSx3RUFBd0U7UUFDeEUsNkNBQTZDO1FBQzdDLE1BQU0sS0FBSyxHQUFHLEVBQWUsQ0FBQztRQUM5QixNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFO1lBQzVDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztZQUNqQyxLQUFLLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztTQUN2QjtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUNqQyxLQUFLLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUV0QixLQUFLLE1BQU0sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLElBQUksWUFBWSxFQUFFO1lBQ2pELEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxVQUFVLENBQUM7U0FDOUI7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFXLEVBQUU7UUFDWCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTSxNQUFNO1FBQ1gsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFTSxLQUFLLENBQUMsSUFBSSxDQUNmLE9BQWdEO1FBRWhELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFbEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ25DLElBQUksS0FBSyxLQUFLLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNqQyxNQUFNLGFBQWEsR0FBRztZQUNwQixHQUFHLE9BQU8sRUFBRSxhQUFhO1lBQ3pCLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU87U0FDaEMsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3RCLDhEQUE4RDtZQUM5RCxNQUFNLE1BQU0sR0FBRyxNQUFNLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7WUFDekMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7U0FDMUI7YUFBTTtZQUNMLE1BQU0sVUFBVSxDQUFDLFNBQVM7WUFDeEIsOERBQThEO1lBQzlELEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEVBQzdCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUNmLGFBQWEsQ0FDZCxDQUFDO1NBQ0g7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUEsa0JBQVMsRUFBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0MsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sS0FBSyxDQUFDLE1BQU0sQ0FDakIsT0FBNkM7UUFFN0MsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNsRCxNQUFNLGFBQWEsR0FBRztZQUNwQixHQUFHLE9BQU8sRUFBRSxhQUFhO1lBQ3pCLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU87U0FDaEMsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxDQUFDLFNBQVMsQ0FDdkM7WUFDRSw4REFBOEQ7WUFDOUQsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRztTQUMxQixFQUNELGFBQWEsQ0FDZCxDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsT0FBTyxNQUFNLENBQUMsWUFBWSxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU0sS0FBSyxDQUNWLE1BQXlFO1FBRXpFLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1NBQy9CO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sSUFBSSxDQUNULE1BQXlFO1FBRXpFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO1FBQzdDLElBQUksQ0FBQyxXQUFXLEdBQUc7WUFDakIsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFO1NBQ2IsQ0FBQztRQUNGLElBQUksU0FBUztZQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBNWJELDhCQTRiQztBQUVELE1BQWEsc0JBQXVCLFNBQVEsU0FBUztJQUc1QyxLQUFLLENBQUMsSUFBSSxDQUNmLE9BQWdEO1FBRWhELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFbEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ25DLElBQUksS0FBSyxLQUFLLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNqQyxNQUFNLGFBQWEsR0FBRztZQUNwQixHQUFHLE9BQU8sRUFBRSxhQUFhO1lBQ3pCLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU87U0FDaEMsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxTQUFTLEVBQUU7WUFDMUIsTUFBTSxVQUFVLEdBQUcsc0JBQXNCLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2pFLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxVQUFVLENBQUMsVUFBVSxDQUNuRCwyQkFBMkIsQ0FDNUIsQ0FBQztZQUVGLE1BQU0sR0FBRyxHQUFHLE1BQU0saUJBQWlCLENBQUMsZ0JBQWdCO1lBQ2xELDhEQUE4RDtZQUM5RCxFQUFFLEdBQUcsRUFBRyxJQUFJLENBQUMsV0FBZ0MsQ0FBQyxjQUFjLEVBQUUsRUFDOUQsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFDdEIsRUFBRSxHQUFHLGFBQWEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsQ0FDNUQsQ0FBQztZQUNGLElBQUEscUJBQU0sRUFBQyxHQUFHLENBQUMsS0FBSyxFQUFFLHdDQUF3QyxDQUFDLENBQUM7WUFDNUQsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUM1Qiw4REFBOEQ7WUFDOUQsTUFBTSxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztTQUMxQjthQUFNO1lBQ0wsTUFBTSxVQUFVLENBQUMsU0FBUztZQUN4Qiw4REFBOEQ7WUFDOUQsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsRUFDN0IsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQ2YsYUFBYSxDQUNkLENBQUM7U0FDSDtRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBQSxrQkFBUyxFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRjtBQTdDRCx3REE2Q0MifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zakodium/adonis-mongodb",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"description": "MongoDB provider for AdonisJs",
|
|
5
5
|
"main": "./lib/providers/MongodbProvider.js",
|
|
6
6
|
"types": "./lib/adonis-typings/index.d.ts",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
},
|
|
28
28
|
"env": {
|
|
29
29
|
"MONGODB_CONNECTION": "mongodb",
|
|
30
|
-
"MONGODB_URL": "mongodb://localhost:27017",
|
|
30
|
+
"MONGODB_URL": "mongodb://localhost:27017?directConnection=true",
|
|
31
31
|
"MONGODB_DATABASE": "test"
|
|
32
32
|
},
|
|
33
33
|
"instructionsMd": "./instructions.md",
|
|
@@ -61,26 +61,26 @@
|
|
|
61
61
|
},
|
|
62
62
|
"homepage": "https://github.com/zakodium/adonis-mongodb#readme",
|
|
63
63
|
"devDependencies": {
|
|
64
|
-
"@adonisjs/auth": "^8.
|
|
65
|
-
"@adonisjs/core": "^5.
|
|
66
|
-
"@adonisjs/logger": "^4.1.
|
|
67
|
-
"@poppinss/cliui": "^
|
|
68
|
-
"@types/jest": "^
|
|
69
|
-
"@types/lodash": "^4.14.
|
|
64
|
+
"@adonisjs/auth": "^8.2.3",
|
|
65
|
+
"@adonisjs/core": "^5.9.0",
|
|
66
|
+
"@adonisjs/logger": "^4.1.5",
|
|
67
|
+
"@poppinss/cliui": "^3.0.5",
|
|
68
|
+
"@types/jest": "^29.4.0",
|
|
69
|
+
"@types/lodash": "^4.14.191",
|
|
70
70
|
"@types/pluralize": "0.0.29",
|
|
71
|
-
"
|
|
72
|
-
"eslint": "^7.
|
|
73
|
-
"jest": "^
|
|
74
|
-
"prettier": "^2.4
|
|
75
|
-
"rimraf": "^
|
|
76
|
-
"ts-jest": "^
|
|
77
|
-
"typescript": "^4.
|
|
71
|
+
"eslint": "^8.34.0",
|
|
72
|
+
"eslint-config-zakodium": "^7.0.0",
|
|
73
|
+
"jest": "^29.4.2",
|
|
74
|
+
"prettier": "^2.8.4",
|
|
75
|
+
"rimraf": "^4.1.2",
|
|
76
|
+
"ts-jest": "^29.0.5",
|
|
77
|
+
"typescript": "^4.9.5"
|
|
78
78
|
},
|
|
79
79
|
"dependencies": {
|
|
80
|
-
"@poppinss/utils": "^
|
|
81
|
-
"cli-table3": "^0.6.
|
|
80
|
+
"@poppinss/utils": "^5.0.0",
|
|
81
|
+
"cli-table3": "^0.6.3",
|
|
82
82
|
"lodash": "^4.17.21",
|
|
83
|
-
"mongodb": "^
|
|
83
|
+
"mongodb": "^5.0.1",
|
|
84
84
|
"pluralize": "^8.0.0"
|
|
85
85
|
}
|
|
86
86
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { EventEmitter } from 'events';
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
2
|
|
|
3
3
|
import { Exception } from '@poppinss/utils';
|
|
4
|
-
import { MongoClient, Db, Collection, ClientSession } from 'mongodb';
|
|
4
|
+
import { MongoClient, Db, Collection, ClientSession, Document } from 'mongodb';
|
|
5
5
|
|
|
6
6
|
import { LoggerContract } from '@ioc:Adonis/Core/Logger';
|
|
7
7
|
import type {
|
|
@@ -114,7 +114,7 @@ export class Connection extends EventEmitter implements ConnectionContract {
|
|
|
114
114
|
return this._ensureDb();
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
-
public async collection<TSchema
|
|
117
|
+
public async collection<TSchema extends Document>(
|
|
118
118
|
collectionName: string,
|
|
119
119
|
): Promise<Collection<TSchema>> {
|
|
120
120
|
const db = await this._ensureDb();
|
package/src/Migration.ts
CHANGED
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
ClientSession,
|
|
5
5
|
Db,
|
|
6
6
|
IndexSpecification,
|
|
7
|
+
DropIndexesOptions,
|
|
7
8
|
} from 'mongodb';
|
|
8
9
|
|
|
9
10
|
import type {
|
|
@@ -13,18 +14,26 @@ import type {
|
|
|
13
14
|
|
|
14
15
|
enum MigrationType {
|
|
15
16
|
CreateCollection = 'CreateCollection',
|
|
17
|
+
DropIndex = 'DropIndex',
|
|
16
18
|
CreateIndex = 'CreateIndex',
|
|
17
19
|
Custom = 'Custom',
|
|
18
20
|
}
|
|
19
21
|
|
|
20
22
|
interface CreateCollectionOperation {
|
|
21
23
|
type: MigrationType.CreateCollection;
|
|
22
|
-
|
|
24
|
+
collectionName: string;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
interface DropIndexOperation {
|
|
28
|
+
type: MigrationType.DropIndex;
|
|
29
|
+
collectionName: string;
|
|
30
|
+
indexName: string;
|
|
31
|
+
options?: DropIndexesOptions;
|
|
23
32
|
}
|
|
24
33
|
|
|
25
34
|
interface CreateIndexOperation {
|
|
26
35
|
type: MigrationType.CreateIndex;
|
|
27
|
-
|
|
36
|
+
collectionName: string;
|
|
28
37
|
index: IndexSpecification;
|
|
29
38
|
options?: CreateIndexesOptions;
|
|
30
39
|
}
|
|
@@ -36,6 +45,7 @@ interface CustomOperation {
|
|
|
36
45
|
|
|
37
46
|
type MigrationOperation =
|
|
38
47
|
| CreateCollectionOperation
|
|
48
|
+
| DropIndexOperation
|
|
39
49
|
| CreateIndexOperation
|
|
40
50
|
| CustomOperation;
|
|
41
51
|
|
|
@@ -59,15 +69,28 @@ export default function createMigration(Database: DatabaseContract): any {
|
|
|
59
69
|
}
|
|
60
70
|
|
|
61
71
|
public createCollections(collectionNames: string[]): void {
|
|
62
|
-
|
|
63
|
-
this.createCollection(collectionName)
|
|
64
|
-
|
|
72
|
+
for (const collectionName of collectionNames) {
|
|
73
|
+
this.createCollection(collectionName);
|
|
74
|
+
}
|
|
65
75
|
}
|
|
66
76
|
|
|
67
77
|
public createCollection(collectionName: string): void {
|
|
68
78
|
this.$operations.push({
|
|
69
79
|
type: MigrationType.CreateCollection,
|
|
70
|
-
|
|
80
|
+
collectionName,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
public dropIndex(
|
|
85
|
+
collectionName: string,
|
|
86
|
+
indexName: string,
|
|
87
|
+
options?: DropIndexesOptions,
|
|
88
|
+
): void {
|
|
89
|
+
this.$operations.push({
|
|
90
|
+
type: MigrationType.DropIndex,
|
|
91
|
+
collectionName,
|
|
92
|
+
indexName,
|
|
93
|
+
options,
|
|
71
94
|
});
|
|
72
95
|
}
|
|
73
96
|
|
|
@@ -78,7 +101,7 @@ export default function createMigration(Database: DatabaseContract): any {
|
|
|
78
101
|
): void {
|
|
79
102
|
this.$operations.push({
|
|
80
103
|
type: MigrationType.CreateIndex,
|
|
81
|
-
|
|
104
|
+
collectionName,
|
|
82
105
|
index,
|
|
83
106
|
options,
|
|
84
107
|
});
|
|
@@ -94,6 +117,7 @@ export default function createMigration(Database: DatabaseContract): any {
|
|
|
94
117
|
public async execUp(): Promise<void> {
|
|
95
118
|
this.up();
|
|
96
119
|
await this._createCollections();
|
|
120
|
+
await this._dropIndexes();
|
|
97
121
|
await this._createIndexes();
|
|
98
122
|
await this._executeDeferred();
|
|
99
123
|
}
|
|
@@ -113,8 +137,10 @@ export default function createMigration(Database: DatabaseContract): any {
|
|
|
113
137
|
private async _createCollections(): Promise<void> {
|
|
114
138
|
const db = await this.$connection.database();
|
|
115
139
|
for (const op of this.$operations.filter(isCreateCollection)) {
|
|
116
|
-
this.$logger.info(`Creating collection ${op.
|
|
117
|
-
await db.createCollection(op.
|
|
140
|
+
this.$logger.info(`Creating collection ${op.collectionName}`);
|
|
141
|
+
await db.createCollection(op.collectionName, {
|
|
142
|
+
session: this.$session,
|
|
143
|
+
});
|
|
118
144
|
}
|
|
119
145
|
}
|
|
120
146
|
|
|
@@ -125,15 +151,29 @@ export default function createMigration(Database: DatabaseContract): any {
|
|
|
125
151
|
}
|
|
126
152
|
}
|
|
127
153
|
|
|
154
|
+
private async _dropIndexes(): Promise<void> {
|
|
155
|
+
const db = await this.$connection.database();
|
|
156
|
+
for (const op of this.$operations.filter(isDropIndex)) {
|
|
157
|
+
this.$logger.info(
|
|
158
|
+
`Dropping index ${op.indexName} on ${op.collectionName}`,
|
|
159
|
+
);
|
|
160
|
+
const collection = db.collection(op.collectionName);
|
|
161
|
+
// Index deletion cannot be done in a transaction.
|
|
162
|
+
await collection.dropIndex(op.indexName, { ...op.options });
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
128
166
|
private async _createIndexes(): Promise<void> {
|
|
129
167
|
const db = await this.$connection.database();
|
|
130
168
|
const collections = await this._listCollections();
|
|
131
169
|
for (const op of this.$operations.filter(isCreateIndex)) {
|
|
132
|
-
this.$logger.info(`Creating index on ${op.
|
|
133
|
-
await db.createIndex(op.
|
|
170
|
+
this.$logger.info(`Creating index on ${op.collectionName}`);
|
|
171
|
+
await db.createIndex(op.collectionName, op.index, {
|
|
134
172
|
...op.options,
|
|
135
|
-
//
|
|
136
|
-
session: collections.includes(op.
|
|
173
|
+
// Index creation will fail if collection pre-exists the transaction.
|
|
174
|
+
session: collections.includes(op.collectionName)
|
|
175
|
+
? undefined
|
|
176
|
+
: this.$session,
|
|
137
177
|
});
|
|
138
178
|
}
|
|
139
179
|
}
|
|
@@ -154,6 +194,10 @@ function isCreateIndex(op: MigrationOperation): op is CreateIndexOperation {
|
|
|
154
194
|
return op.type === MigrationType.CreateIndex;
|
|
155
195
|
}
|
|
156
196
|
|
|
197
|
+
function isDropIndex(op: MigrationOperation): op is DropIndexOperation {
|
|
198
|
+
return op.type === MigrationType.DropIndex;
|
|
199
|
+
}
|
|
200
|
+
|
|
157
201
|
function isCustom(op: MigrationOperation): op is CustomOperation {
|
|
158
202
|
return op.type === MigrationType.Custom;
|
|
159
203
|
}
|
package/src/Model/Model.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import assert from 'assert';
|
|
1
|
+
import assert from 'node:assert';
|
|
2
2
|
|
|
3
3
|
import { defineStaticProperty, Exception } from '@poppinss/utils';
|
|
4
4
|
import { cloneDeep, isEqual, pickBy, snakeCase } from 'lodash';
|
|
@@ -83,7 +83,8 @@ class Query<ModelType extends typeof BaseModel>
|
|
|
83
83
|
>
|
|
84
84
|
>
|
|
85
85
|
| undefined,
|
|
86
|
-
|
|
86
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
87
|
+
private ModelConstructor: ModelType,
|
|
87
88
|
) {
|
|
88
89
|
if (options?.driverOptions) {
|
|
89
90
|
for (const key of forbiddenQueryOptions) {
|
|
@@ -131,13 +132,13 @@ class Query<ModelType extends typeof BaseModel>
|
|
|
131
132
|
}
|
|
132
133
|
|
|
133
134
|
public async first(): Promise<InstanceType<ModelType> | null> {
|
|
134
|
-
const collection = await this.
|
|
135
|
+
const collection = await this.ModelConstructor.getCollection();
|
|
135
136
|
const driverOptions = this.getDriverOptions();
|
|
136
137
|
const result = await collection.findOne(this.filter, driverOptions);
|
|
137
138
|
if (result === null) {
|
|
138
139
|
return null;
|
|
139
140
|
}
|
|
140
|
-
const instance = new this.
|
|
141
|
+
const instance = new this.ModelConstructor(
|
|
141
142
|
result,
|
|
142
143
|
{
|
|
143
144
|
// @ts-expect-error Unavoidable error.
|
|
@@ -158,12 +159,12 @@ class Query<ModelType extends typeof BaseModel>
|
|
|
158
159
|
}
|
|
159
160
|
|
|
160
161
|
public async all(): Promise<Array<InstanceType<ModelType>>> {
|
|
161
|
-
const collection = await this.
|
|
162
|
+
const collection = await this.ModelConstructor.getCollection();
|
|
162
163
|
const driverOptions = this.getDriverOptions();
|
|
163
164
|
const result = await collection.find(this.filter, driverOptions).toArray();
|
|
164
165
|
return result.map(
|
|
165
166
|
(value) =>
|
|
166
|
-
new this.
|
|
167
|
+
new this.ModelConstructor(
|
|
167
168
|
value,
|
|
168
169
|
{
|
|
169
170
|
// @ts-expect-error Unavoidable error.
|
|
@@ -176,7 +177,7 @@ class Query<ModelType extends typeof BaseModel>
|
|
|
176
177
|
}
|
|
177
178
|
|
|
178
179
|
public async count(): Promise<number> {
|
|
179
|
-
const collection = await this.
|
|
180
|
+
const collection = await this.ModelConstructor.getCollection();
|
|
180
181
|
const driverOptions = this.getDriverOptions();
|
|
181
182
|
return collection.countDocuments(
|
|
182
183
|
this.filter,
|
|
@@ -185,17 +186,18 @@ class Query<ModelType extends typeof BaseModel>
|
|
|
185
186
|
}
|
|
186
187
|
|
|
187
188
|
public async distinct<T = unknown>(key: string): Promise<T[]> {
|
|
188
|
-
const collection = await this.
|
|
189
|
+
const collection = await this.ModelConstructor.getCollection();
|
|
189
190
|
const driverOptions = this.getDriverOptions();
|
|
190
|
-
|
|
191
|
+
const result = await collection.distinct(
|
|
191
192
|
key,
|
|
192
193
|
this.filter,
|
|
193
194
|
driverOptions as DistinctOptions,
|
|
194
195
|
);
|
|
196
|
+
return result;
|
|
195
197
|
}
|
|
196
198
|
|
|
197
199
|
public async explain(verbosity?: ExplainVerbosityLike): Promise<Document> {
|
|
198
|
-
const collection = await this.
|
|
200
|
+
const collection = await this.ModelConstructor.getCollection();
|
|
199
201
|
const driverOptions = this.getDriverOptions();
|
|
200
202
|
return collection.find(this.filter, driverOptions).explain(verbosity);
|
|
201
203
|
}
|
|
@@ -203,11 +205,11 @@ class Query<ModelType extends typeof BaseModel>
|
|
|
203
205
|
public async *[Symbol.asyncIterator](): AsyncIterableIterator<
|
|
204
206
|
InstanceType<ModelType>
|
|
205
207
|
> {
|
|
206
|
-
const collection = await this.
|
|
208
|
+
const collection = await this.ModelConstructor.getCollection();
|
|
207
209
|
const driverOptions = this.getDriverOptions();
|
|
208
210
|
for await (const value of collection.find(this.filter, driverOptions)) {
|
|
209
211
|
if (value === null) continue;
|
|
210
|
-
yield new this.
|
|
212
|
+
yield new this.ModelConstructor(
|
|
211
213
|
value,
|
|
212
214
|
{
|
|
213
215
|
// @ts-expect-error Unavoidable error.
|
|
@@ -274,7 +276,7 @@ export class BaseModel {
|
|
|
274
276
|
alreadyExists = false,
|
|
275
277
|
) {
|
|
276
278
|
if (dbObj) {
|
|
277
|
-
this.$original = alreadyExists
|
|
279
|
+
this.$original = alreadyExists ? cloneDeep(dbObj) : {};
|
|
278
280
|
this.$attributes = dbObj;
|
|
279
281
|
} else {
|
|
280
282
|
this.$original = {};
|
|
@@ -328,7 +330,7 @@ export class BaseModel {
|
|
|
328
330
|
/**
|
|
329
331
|
* No-op when already booted.
|
|
330
332
|
*/
|
|
331
|
-
if (this.booted
|
|
333
|
+
if (this.booted) {
|
|
332
334
|
return;
|
|
333
335
|
}
|
|
334
336
|
|
|
@@ -635,11 +637,13 @@ export class BaseModel {
|
|
|
635
637
|
session: this.$options?.session,
|
|
636
638
|
};
|
|
637
639
|
if (!this.$isPersisted) {
|
|
640
|
+
// @ts-expect-error Unavoidable error, as _id is unknown here.
|
|
638
641
|
const result = await collection.insertOne(toSet, driverOptions);
|
|
639
642
|
this.$attributes._id = result.insertedId;
|
|
640
643
|
this.$isPersisted = true;
|
|
641
644
|
} else {
|
|
642
645
|
await collection.updateOne(
|
|
646
|
+
// @ts-expect-error Unavoidable error, as _id is unknown here.
|
|
643
647
|
{ _id: this.$attributes._id },
|
|
644
648
|
{ $set: toSet },
|
|
645
649
|
driverOptions,
|
|
@@ -660,6 +664,7 @@ export class BaseModel {
|
|
|
660
664
|
};
|
|
661
665
|
const result = await collection.deleteOne(
|
|
662
666
|
{
|
|
667
|
+
// @ts-expect-error Unavoidable error, as _id is unknown here.
|
|
663
668
|
_id: this.$attributes._id,
|
|
664
669
|
},
|
|
665
670
|
driverOptions,
|
|
@@ -671,9 +676,9 @@ export class BaseModel {
|
|
|
671
676
|
public merge<T extends Partial<Omit<ModelAttributes<this>, '_id'>>>(
|
|
672
677
|
values: NoExtraProperties<Partial<Omit<ModelAttributes<this>, '_id'>>, T>,
|
|
673
678
|
): this {
|
|
674
|
-
|
|
679
|
+
for (const [key, value] of Object.entries(values)) {
|
|
675
680
|
this.$attributes[key] = value;
|
|
676
|
-
}
|
|
681
|
+
}
|
|
677
682
|
return this;
|
|
678
683
|
}
|
|
679
684
|
|
|
@@ -712,17 +717,20 @@ export class BaseAutoIncrementModel extends BaseModel {
|
|
|
712
717
|
);
|
|
713
718
|
|
|
714
719
|
const doc = await counterCollection.findOneAndUpdate(
|
|
720
|
+
// @ts-expect-error Unavoidable error, as _id is unknown here.
|
|
715
721
|
{ _id: (this.constructor as typeof BaseModel).collectionName },
|
|
716
722
|
{ $inc: { count: 1 } },
|
|
717
723
|
{ ...driverOptions, upsert: true, returnDocument: 'after' },
|
|
718
724
|
);
|
|
719
725
|
assert(doc.value, 'upsert should always create a document');
|
|
720
726
|
toSet._id = doc.value.count;
|
|
727
|
+
// @ts-expect-error Unavoidable error, as _id is unknown here.
|
|
721
728
|
await collection.insertOne(toSet, driverOptions);
|
|
722
729
|
this.$attributes._id = doc.value.count;
|
|
723
730
|
this.$isPersisted = true;
|
|
724
731
|
} else {
|
|
725
732
|
await collection.updateOne(
|
|
733
|
+
// @ts-expect-error Unavoidable error, as _id is unknown here.
|
|
726
734
|
{ _id: this.$attributes._id },
|
|
727
735
|
{ $set: toSet },
|
|
728
736
|
driverOptions,
|