@warlock.js/cascade 1.0.5 → 1.0.7
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/cjs/aggregate/DeselectPipeline.d.ts +10 -0
- package/cjs/aggregate/DeselectPipeline.d.ts.map +1 -0
- package/cjs/aggregate/DeselectPipeline.js +17 -0
- package/cjs/aggregate/DeselectPipeline.js.map +1 -0
- package/cjs/aggregate/GeoNearPipeline.d.ts +34 -0
- package/cjs/aggregate/GeoNearPipeline.d.ts.map +1 -0
- package/cjs/aggregate/GeoNearPipeline.js +44 -0
- package/cjs/aggregate/GeoNearPipeline.js.map +1 -0
- package/cjs/aggregate/GroupByPipeline.d.ts +12 -0
- package/cjs/aggregate/GroupByPipeline.d.ts.map +1 -0
- package/cjs/aggregate/GroupByPipeline.js +28 -0
- package/cjs/aggregate/GroupByPipeline.js.map +1 -0
- package/cjs/aggregate/LimitPipeline.d.ts +10 -0
- package/cjs/aggregate/LimitPipeline.d.ts.map +1 -0
- package/cjs/aggregate/LimitPipeline.js +14 -0
- package/cjs/aggregate/LimitPipeline.js.map +1 -0
- package/cjs/aggregate/LookupPipeline.d.ts +19 -0
- package/cjs/aggregate/LookupPipeline.d.ts.map +1 -0
- package/cjs/aggregate/LookupPipeline.js +19 -0
- package/cjs/aggregate/LookupPipeline.js.map +1 -0
- package/cjs/aggregate/OrWherePipeline.d.ts +23 -0
- package/cjs/aggregate/OrWherePipeline.d.ts.map +1 -0
- package/cjs/aggregate/OrWherePipeline.js +42 -0
- package/cjs/aggregate/OrWherePipeline.js.map +1 -0
- package/cjs/aggregate/SelectPipeline.d.ts +10 -0
- package/cjs/aggregate/SelectPipeline.d.ts.map +1 -0
- package/cjs/aggregate/SelectPipeline.js +26 -0
- package/cjs/aggregate/SelectPipeline.js.map +1 -0
- package/cjs/aggregate/SkipPipeline.d.ts +10 -0
- package/cjs/aggregate/SkipPipeline.d.ts.map +1 -0
- package/cjs/aggregate/SkipPipeline.js +14 -0
- package/cjs/aggregate/SkipPipeline.js.map +1 -0
- package/cjs/aggregate/SortByPipeline.d.ts +10 -0
- package/cjs/aggregate/SortByPipeline.d.ts.map +1 -0
- package/cjs/aggregate/SortByPipeline.js +18 -0
- package/cjs/aggregate/SortByPipeline.js.map +1 -0
- package/cjs/aggregate/SortPipeline.d.ts +11 -0
- package/cjs/aggregate/SortPipeline.d.ts.map +1 -0
- package/cjs/aggregate/SortPipeline.js +18 -0
- package/cjs/aggregate/SortPipeline.js.map +1 -0
- package/cjs/aggregate/SortRandomPipeline.d.ts +10 -0
- package/cjs/aggregate/SortRandomPipeline.d.ts.map +1 -0
- package/cjs/aggregate/SortRandomPipeline.js +16 -0
- package/cjs/aggregate/SortRandomPipeline.js.map +1 -0
- package/cjs/aggregate/UnwindPipeline.d.ts +14 -0
- package/cjs/aggregate/UnwindPipeline.d.ts.map +1 -0
- package/cjs/aggregate/UnwindPipeline.js +19 -0
- package/cjs/aggregate/UnwindPipeline.js.map +1 -0
- package/cjs/aggregate/WhereExpression.d.ts +17 -0
- package/cjs/aggregate/WhereExpression.d.ts.map +1 -0
- package/cjs/aggregate/WhereExpression.js +149 -0
- package/cjs/aggregate/WhereExpression.js.map +1 -0
- package/cjs/aggregate/WhereExpressionPipeline.d.ts +10 -0
- package/cjs/aggregate/WhereExpressionPipeline.d.ts.map +1 -0
- package/cjs/aggregate/WhereExpressionPipeline.js +15 -0
- package/cjs/aggregate/WhereExpressionPipeline.js.map +1 -0
- package/cjs/aggregate/WherePipeline.d.ts +13 -0
- package/cjs/aggregate/WherePipeline.d.ts.map +1 -0
- package/cjs/aggregate/WherePipeline.js +12 -0
- package/cjs/aggregate/WherePipeline.js.map +1 -0
- package/cjs/aggregate/aggregate.d.ts +358 -0
- package/cjs/aggregate/aggregate.d.ts.map +1 -0
- package/cjs/aggregate/aggregate.js +680 -0
- package/cjs/aggregate/aggregate.js.map +1 -0
- package/cjs/aggregate/expressions.d.ts +361 -0
- package/cjs/aggregate/expressions.d.ts.map +1 -0
- package/cjs/aggregate/expressions.js +536 -0
- package/cjs/aggregate/expressions.js.map +1 -0
- package/cjs/aggregate/index.d.ts +21 -0
- package/cjs/aggregate/index.d.ts.map +1 -0
- package/cjs/aggregate/parsePipelines.d.ts +5 -0
- package/cjs/aggregate/parsePipelines.d.ts.map +1 -0
- package/cjs/aggregate/parsePipelines.js +6 -0
- package/cjs/aggregate/parsePipelines.js.map +1 -0
- package/cjs/aggregate/pipeline.d.ts +31 -0
- package/cjs/aggregate/pipeline.d.ts.map +1 -0
- package/cjs/aggregate/pipeline.js +42 -0
- package/cjs/aggregate/pipeline.js.map +1 -0
- package/cjs/aggregate/types.d.ts +8 -0
- package/cjs/aggregate/types.d.ts.map +1 -0
- package/cjs/aggregate/types.js +31 -0
- package/cjs/aggregate/types.js.map +1 -0
- package/cjs/blueprint/blueprint-column.d.ts +82 -0
- package/cjs/blueprint/blueprint-column.d.ts.map +1 -0
- package/cjs/blueprint/blueprint.d.ts +162 -0
- package/cjs/blueprint/blueprint.d.ts.map +1 -0
- package/cjs/blueprint/blueprint.js +340 -0
- package/cjs/blueprint/blueprint.js.map +1 -0
- package/cjs/blueprint/index.d.ts +3 -0
- package/cjs/blueprint/index.d.ts.map +1 -0
- package/cjs/blueprint/model-blueprint.d.ts +15 -0
- package/cjs/blueprint/model-blueprint.d.ts.map +1 -0
- package/cjs/blueprint/model-blueprint.js +16 -0
- package/cjs/blueprint/model-blueprint.js.map +1 -0
- package/cjs/casts/arrayOf.d.ts +5 -0
- package/cjs/casts/arrayOf.d.ts.map +1 -0
- package/cjs/casts/arrayOf.js +18 -0
- package/cjs/casts/arrayOf.js.map +1 -0
- package/cjs/casts/cast-email.d.ts +2 -0
- package/cjs/casts/cast-email.d.ts.map +1 -0
- package/cjs/casts/cast-email.js +5 -0
- package/cjs/casts/cast-email.js.map +1 -0
- package/cjs/casts/castModel.d.ts +3 -0
- package/cjs/casts/castModel.d.ts.map +1 -0
- package/cjs/casts/castModel.js +49 -0
- package/cjs/casts/castModel.js.map +1 -0
- package/cjs/casts/expiresAfter.d.ts +3 -0
- package/cjs/casts/expiresAfter.d.ts.map +1 -0
- package/cjs/casts/expiresAfter.js +5 -0
- package/cjs/casts/expiresAfter.js.map +1 -0
- package/cjs/casts/index.d.ts +9 -0
- package/cjs/casts/index.d.ts.map +1 -0
- package/cjs/casts/oneOf.d.ts +3 -0
- package/cjs/casts/oneOf.d.ts.map +1 -0
- package/cjs/casts/oneOf.js +22 -0
- package/cjs/casts/oneOf.js.map +1 -0
- package/cjs/casts/random-string.d.ts +2 -0
- package/cjs/casts/random-string.d.ts.map +1 -0
- package/cjs/casts/random-string.js +5 -0
- package/cjs/casts/random-string.js.map +1 -0
- package/cjs/casts/randomInteger.d.ts +2 -0
- package/cjs/casts/randomInteger.d.ts.map +1 -0
- package/cjs/casts/randomInteger.js +7 -0
- package/cjs/casts/randomInteger.js.map +1 -0
- package/cjs/casts/shapedArray.d.ts +26 -0
- package/cjs/casts/shapedArray.d.ts.map +1 -0
- package/cjs/casts/shapedArray.js +100 -0
- package/cjs/casts/shapedArray.js.map +1 -0
- package/cjs/config.d.ts +4 -0
- package/cjs/config.d.ts.map +1 -0
- package/cjs/config.js +10 -0
- package/cjs/config.js.map +1 -0
- package/cjs/connection.d.ts +45 -0
- package/cjs/connection.d.ts.map +1 -0
- package/cjs/connection.js +98 -0
- package/cjs/connection.js.map +1 -0
- package/cjs/database.d.ts +49 -0
- package/cjs/database.d.ts.map +1 -0
- package/cjs/database.js +85 -0
- package/cjs/database.js.map +1 -0
- package/cjs/index.d.ts +11 -1
- package/cjs/index.d.ts.map +1 -1
- package/cjs/index.js +1 -5
- package/cjs/index.js.map +1 -1
- package/cjs/migration/index.d.ts +4 -0
- package/cjs/migration/index.d.ts.map +1 -0
- package/cjs/migration/migrate.d.ts +13 -0
- package/cjs/migration/migrate.d.ts.map +1 -0
- package/cjs/migration/migrate.js +72 -0
- package/cjs/migration/migrate.js.map +1 -0
- package/cjs/migration/migration-office.d.ts +21 -0
- package/cjs/migration/migration-office.d.ts.map +1 -0
- package/cjs/migration/migration-office.js +40 -0
- package/cjs/migration/migration-office.js.map +1 -0
- package/cjs/migration/migration-officer.d.ts +33 -0
- package/cjs/migration/migration-officer.d.ts.map +1 -0
- package/cjs/migration/migration-officer.js +55 -0
- package/cjs/migration/migration-officer.js.map +1 -0
- package/cjs/migration/types.d.ts +34 -0
- package/cjs/migration/types.d.ts.map +1 -0
- package/cjs/model/ModelAggregate.d.ts +84 -0
- package/cjs/model/ModelAggregate.d.ts.map +1 -0
- package/cjs/model/ModelAggregate.js +164 -0
- package/cjs/model/ModelAggregate.js.map +1 -0
- package/cjs/model/ModelSync.d.ts +74 -0
- package/cjs/model/ModelSync.d.ts.map +1 -0
- package/cjs/model/ModelSync.js +215 -0
- package/cjs/model/ModelSync.js.map +1 -0
- package/cjs/model/RelationshipWithMany.d.ts +24 -0
- package/cjs/model/RelationshipWithMany.d.ts.map +1 -0
- package/cjs/model/RelationshipWithMany.js +42 -0
- package/cjs/model/RelationshipWithMany.js.map +1 -0
- package/cjs/model/base-model.d.ts +155 -0
- package/cjs/model/base-model.d.ts.map +1 -0
- package/cjs/model/base-model.js +230 -0
- package/cjs/model/base-model.js.map +1 -0
- package/cjs/model/crud-model.d.ts +117 -0
- package/cjs/model/crud-model.d.ts.map +1 -0
- package/cjs/model/crud-model.js +352 -0
- package/cjs/model/crud-model.js.map +1 -0
- package/cjs/model/index.d.ts +10 -0
- package/cjs/model/index.d.ts.map +1 -0
- package/cjs/model/joinable.d.ts +87 -0
- package/cjs/model/joinable.d.ts.map +1 -0
- package/cjs/model/joinable.js +155 -0
- package/cjs/model/joinable.js.map +1 -0
- package/cjs/model/master-mind.d.ts +44 -0
- package/cjs/model/master-mind.d.ts.map +1 -0
- package/cjs/model/master-mind.js +129 -0
- package/cjs/model/master-mind.js.map +1 -0
- package/cjs/model/model-events.d.ts +57 -0
- package/cjs/model/model-events.d.ts.map +1 -0
- package/cjs/model/model-events.js +102 -0
- package/cjs/model/model-events.js.map +1 -0
- package/cjs/model/model.d.ts +401 -0
- package/cjs/model/model.d.ts.map +1 -0
- package/cjs/model/model.js +1028 -0
- package/cjs/model/model.js.map +1 -0
- package/cjs/model/types.d.ts +113 -0
- package/cjs/model/types.d.ts.map +1 -0
- package/cjs/model/types.js +11 -0
- package/cjs/model/types.js.map +1 -0
- package/cjs/query/index.d.ts +2 -0
- package/cjs/query/index.d.ts.map +1 -0
- package/cjs/query/query.d.ts +228 -0
- package/cjs/query/query.d.ts.map +1 -0
- package/cjs/query/query.js +675 -0
- package/cjs/query/query.js.map +1 -0
- package/cjs/query/types.d.ts +56 -0
- package/cjs/query/types.d.ts.map +1 -0
- package/cjs/types.d.ts +62 -0
- package/cjs/types.d.ts.map +1 -0
- package/cjs/utils/connectToDatabase.d.ts +3 -0
- package/cjs/utils/connectToDatabase.d.ts.map +1 -0
- package/cjs/utils/connectToDatabase.js +3 -0
- package/cjs/utils/connectToDatabase.js.map +1 -0
- package/cjs/utils/deep-diff.d.ts +9 -0
- package/cjs/utils/deep-diff.d.ts.map +1 -0
- package/cjs/utils/deep-diff.js +44 -0
- package/cjs/utils/deep-diff.js.map +1 -0
- package/cjs/utils/dropAllDatabaseIndexes.d.ts +2 -0
- package/cjs/utils/dropAllDatabaseIndexes.d.ts.map +1 -0
- package/cjs/utils/dropAllDatabaseIndexes.js +10 -0
- package/cjs/utils/dropAllDatabaseIndexes.js.map +1 -0
- package/cjs/utils/index.d.ts +5 -0
- package/cjs/utils/index.d.ts.map +1 -0
- package/cjs/utils/joinable-proxy.d.ts +3 -0
- package/cjs/utils/joinable-proxy.d.ts.map +1 -0
- package/cjs/utils/joinable-proxy.js +14 -0
- package/cjs/utils/joinable-proxy.js.map +1 -0
- package/cjs/utils/listDatabaseIndexes.d.ts +4 -0
- package/cjs/utils/listDatabaseIndexes.d.ts.map +1 -0
- package/cjs/utils/listDatabaseIndexes.js +101 -0
- package/cjs/utils/listDatabaseIndexes.js.map +1 -0
- package/cjs/utils/onceConnected.d.ts +2 -0
- package/cjs/utils/onceConnected.d.ts.map +1 -0
- package/cjs/utils/onceConnected.js +8 -0
- package/cjs/utils/onceConnected.js.map +1 -0
- package/esm/connection.js +1 -1
- package/esm/connection.js.map +1 -1
- package/esm/utils/deep-diff.d.ts.map +1 -1
- package/esm/utils/deep-diff.js +5 -3
- package/esm/utils/deep-diff.js.map +1 -1
- package/package.json +1 -1
- package/cjs/commands/create-new-app/get-app-path.d.ts +0 -2
- package/cjs/commands/create-new-app/get-app-path.d.ts.map +0 -1
- package/cjs/commands/create-new-app/get-app-path.js +0 -8
- package/cjs/commands/create-new-app/get-app-path.js.map +0 -1
- package/cjs/commands/create-new-app/index.d.ts +0 -2
- package/cjs/commands/create-new-app/index.d.ts.map +0 -1
- package/cjs/commands/create-new-app/index.js +0 -44
- package/cjs/commands/create-new-app/index.js.map +0 -1
- package/cjs/commands/create-new-app/select-app-type.d.ts +0 -2
- package/cjs/commands/create-new-app/select-app-type.d.ts.map +0 -1
- package/cjs/commands/create-new-app/types.d.ts +0 -9
- package/cjs/commands/create-new-app/types.d.ts.map +0 -1
- package/cjs/commands/create-warlock-app/index.d.ts +0 -3
- package/cjs/commands/create-warlock-app/index.d.ts.map +0 -1
- package/cjs/commands/create-warlock-app/index.js +0 -18
- package/cjs/commands/create-warlock-app/index.js.map +0 -1
- package/cjs/helpers/app.d.ts +0 -51
- package/cjs/helpers/app.d.ts.map +0 -1
- package/cjs/helpers/app.js +0 -127
- package/cjs/helpers/app.js.map +0 -1
- package/cjs/helpers/exec.d.ts +0 -10
- package/cjs/helpers/exec.d.ts.map +0 -1
- package/cjs/helpers/exec.js +0 -69
- package/cjs/helpers/exec.js.map +0 -1
- package/cjs/helpers/package-manager.d.ts +0 -6
- package/cjs/helpers/package-manager.d.ts.map +0 -1
- package/cjs/helpers/package-manager.js +0 -22
- package/cjs/helpers/package-manager.js.map +0 -1
- package/cjs/helpers/paths.d.ts +0 -4
- package/cjs/helpers/paths.d.ts.map +0 -1
- package/cjs/helpers/paths.js +0 -8
- package/cjs/helpers/paths.js.map +0 -1
- package/cjs/helpers/project-builder-helpers.d.ts +0 -7
- package/cjs/helpers/project-builder-helpers.d.ts.map +0 -1
- package/cjs/helpers/project-builder-helpers.js +0 -44
- package/cjs/helpers/project-builder-helpers.js.map +0 -1
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
'use strict';var mongodb=require('mongodb'),baseModel=require('./base-model.js'),types=require('./types.js');class CrudModel extends baseModel.BaseModel {
|
|
2
|
+
/**
|
|
3
|
+
* Create a new record in the database for the current model (child class of this one)
|
|
4
|
+
* and return a new instance of it with the created data and the new generated id
|
|
5
|
+
*/
|
|
6
|
+
static async create(data) {
|
|
7
|
+
const model = this.self(data); // get new instance of model
|
|
8
|
+
// save the model, and generate the proper columns needed
|
|
9
|
+
await model.beforeCreating(data);
|
|
10
|
+
await model.save();
|
|
11
|
+
await model.onCreate();
|
|
12
|
+
return model;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Called before creating a new record
|
|
16
|
+
*/
|
|
17
|
+
async beforeCreating(_data) {
|
|
18
|
+
//
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Called after creating a new record
|
|
22
|
+
*/
|
|
23
|
+
async onCreate() {
|
|
24
|
+
//
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Update model by the given id
|
|
28
|
+
*/
|
|
29
|
+
static async update(id, data) {
|
|
30
|
+
const model = (await this.find(id));
|
|
31
|
+
// execute the update operation
|
|
32
|
+
if (!model)
|
|
33
|
+
return null;
|
|
34
|
+
await model.save(data);
|
|
35
|
+
return model;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Replace the entire document for the given document id with the given new data
|
|
39
|
+
*/
|
|
40
|
+
static async replace(id, data) {
|
|
41
|
+
const model = (await this.find(id));
|
|
42
|
+
if (!model)
|
|
43
|
+
return null;
|
|
44
|
+
model.replaceWith(data);
|
|
45
|
+
await model.save();
|
|
46
|
+
return model;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Restore the document from trash
|
|
50
|
+
*/
|
|
51
|
+
static async restore(id) {
|
|
52
|
+
const deleteStrategy = this.deleteStrategy;
|
|
53
|
+
if (deleteStrategy === types.ModelDeleteStrategy.softDelete) {
|
|
54
|
+
const model = await this.query.first(this.collection, {
|
|
55
|
+
id,
|
|
56
|
+
});
|
|
57
|
+
if (!model)
|
|
58
|
+
return null;
|
|
59
|
+
model.unset("deletedAt");
|
|
60
|
+
await model.save();
|
|
61
|
+
return model;
|
|
62
|
+
}
|
|
63
|
+
// retrieve the document from trash collection
|
|
64
|
+
const result = await this.query.first(this.collection + "Trash", await this.prepareFilters({
|
|
65
|
+
[this.primaryIdColumn]: id,
|
|
66
|
+
}));
|
|
67
|
+
if (!result)
|
|
68
|
+
return null;
|
|
69
|
+
const document = result.document;
|
|
70
|
+
// otherwise, create a new model with it
|
|
71
|
+
document.restoredAt = new Date();
|
|
72
|
+
const model = this.self(document);
|
|
73
|
+
model.unset("deletedAt");
|
|
74
|
+
model.markAsRestored();
|
|
75
|
+
await model.save(); // save again in the same collection
|
|
76
|
+
return model;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Restore all documents from trash or by the given filter
|
|
80
|
+
*/
|
|
81
|
+
static async restoreAll(filter) {
|
|
82
|
+
const deleteStrategy = this.deleteStrategy;
|
|
83
|
+
if (deleteStrategy === types.ModelDeleteStrategy.softDelete) {
|
|
84
|
+
const models = await this.query.list(this.collection, filter);
|
|
85
|
+
for (const model of models) {
|
|
86
|
+
model.unset("deletedAt");
|
|
87
|
+
if (model.id) {
|
|
88
|
+
model.set("id", Number(model.id));
|
|
89
|
+
}
|
|
90
|
+
await model.save();
|
|
91
|
+
}
|
|
92
|
+
return models;
|
|
93
|
+
}
|
|
94
|
+
if (filter) {
|
|
95
|
+
for (const key in filter) {
|
|
96
|
+
filter[`document.` + key] = filter[key];
|
|
97
|
+
delete filter[key];
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const documents = await this.query.list(this.collection + "Trash", filter);
|
|
101
|
+
const models = [];
|
|
102
|
+
for (const document of documents) {
|
|
103
|
+
const model = this.self(document.document);
|
|
104
|
+
if (model.id) {
|
|
105
|
+
model.set("id", Number(model.id));
|
|
106
|
+
}
|
|
107
|
+
model.unset("deletedAt");
|
|
108
|
+
model.markAsRestored();
|
|
109
|
+
await model.save();
|
|
110
|
+
models.push(model);
|
|
111
|
+
}
|
|
112
|
+
return models;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get deleted document by id
|
|
116
|
+
*/
|
|
117
|
+
static async getDeleted(id) {
|
|
118
|
+
const deleteStrategy = this.deleteStrategy;
|
|
119
|
+
if (deleteStrategy === types.ModelDeleteStrategy.softDelete) {
|
|
120
|
+
const model = await this.query.first(this.collection, {
|
|
121
|
+
id,
|
|
122
|
+
});
|
|
123
|
+
if (!model)
|
|
124
|
+
return null;
|
|
125
|
+
return model;
|
|
126
|
+
}
|
|
127
|
+
const result = await this.query.first(this.collection + "Trash", await this.prepareFilters({
|
|
128
|
+
[this.primaryIdColumn]: id,
|
|
129
|
+
}));
|
|
130
|
+
if (!result)
|
|
131
|
+
return null;
|
|
132
|
+
const document = result.document;
|
|
133
|
+
// otherwise, create a new model with it
|
|
134
|
+
const model = this.self(document);
|
|
135
|
+
return model;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get all deleted documents
|
|
139
|
+
*/
|
|
140
|
+
static async getAllDeleted(filter) {
|
|
141
|
+
const deleteStrategy = this.deleteStrategy;
|
|
142
|
+
if (deleteStrategy === types.ModelDeleteStrategy.softDelete) {
|
|
143
|
+
return await this.query.list(this.collection, filter);
|
|
144
|
+
}
|
|
145
|
+
if (filter) {
|
|
146
|
+
for (const key in filter) {
|
|
147
|
+
filter[`document.` + key] = filter[key];
|
|
148
|
+
delete filter[key];
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const documents = await this.query.list(this.collection + "Trash", filter);
|
|
152
|
+
const models = [];
|
|
153
|
+
for (const document of documents) {
|
|
154
|
+
const model = this.self(document.document);
|
|
155
|
+
models.push(model);
|
|
156
|
+
}
|
|
157
|
+
return models;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Find and update the document for the given filter with the given data or create a new document/record
|
|
161
|
+
* if filter has no matching
|
|
162
|
+
*/
|
|
163
|
+
static async upsert(filter, data) {
|
|
164
|
+
filter = await this.prepareFilters(filter);
|
|
165
|
+
let model = (await this.first(filter));
|
|
166
|
+
if (!model) {
|
|
167
|
+
model = this.self(data);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
model.merge(data);
|
|
171
|
+
}
|
|
172
|
+
await model.save();
|
|
173
|
+
return model;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Find document by id
|
|
177
|
+
*/
|
|
178
|
+
static async find(id) {
|
|
179
|
+
if (this.primaryIdColumn === "id") {
|
|
180
|
+
id = Number(id);
|
|
181
|
+
}
|
|
182
|
+
else if (this.primaryIdColumn === "_id" && typeof id === "string") {
|
|
183
|
+
id = new mongodb.ObjectId(id);
|
|
184
|
+
}
|
|
185
|
+
return this.findBy(this.primaryIdColumn, id);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Find document by the given column and value
|
|
189
|
+
*/
|
|
190
|
+
static async findBy(column, value) {
|
|
191
|
+
const result = await this.query.first(this.collection, await this.prepareFilters({
|
|
192
|
+
[column]: value,
|
|
193
|
+
}));
|
|
194
|
+
return result ? this.self(result) : null;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Create an explain plan for the given filter
|
|
198
|
+
*/
|
|
199
|
+
static async explain(filter = {}) {
|
|
200
|
+
return await this.query.explain(this.collection, await this.prepareFilters(filter));
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* List multiple documents based on the given filter
|
|
204
|
+
*/
|
|
205
|
+
static async list(filter = {}) {
|
|
206
|
+
const documents = await this.query.list(this.collection, await this.prepareFilters(filter));
|
|
207
|
+
return documents.map(document => this.self(document));
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Paginate records based on the given filter
|
|
211
|
+
*/
|
|
212
|
+
static async paginate(filter, page = 1, limit = 15) {
|
|
213
|
+
filter = await this.prepareFilters(filter);
|
|
214
|
+
const documents = await this.query.list(this.collection, filter, query => {
|
|
215
|
+
query.skip((page - 1) * limit).limit(limit);
|
|
216
|
+
});
|
|
217
|
+
const totalDocumentsOfFilter = await this.query.count(this.collection, filter);
|
|
218
|
+
const result = {
|
|
219
|
+
documents: documents.map(document => this.self(document)),
|
|
220
|
+
paginationInfo: {
|
|
221
|
+
limit,
|
|
222
|
+
page,
|
|
223
|
+
result: documents.length,
|
|
224
|
+
total: totalDocumentsOfFilter,
|
|
225
|
+
pages: Math.ceil(totalDocumentsOfFilter / limit),
|
|
226
|
+
},
|
|
227
|
+
};
|
|
228
|
+
return result;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Find or create a new document based on the given filter and data
|
|
232
|
+
* If the document is not found, it will be created
|
|
233
|
+
* otherwise, just return the found document
|
|
234
|
+
*/
|
|
235
|
+
static async findOrCreate(filter, data, { merge = false } = {}) {
|
|
236
|
+
filter = await this.prepareFilters(filter);
|
|
237
|
+
let model = (await this.first(filter));
|
|
238
|
+
if (!model) {
|
|
239
|
+
model = this.self({
|
|
240
|
+
...(merge ? filter : {}),
|
|
241
|
+
...data,
|
|
242
|
+
});
|
|
243
|
+
await model.save();
|
|
244
|
+
}
|
|
245
|
+
return model;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Update or create a new document based on the given filter and data
|
|
249
|
+
*/
|
|
250
|
+
static async updateOrCreate(filter, data) {
|
|
251
|
+
filter = await this.prepareFilters(filter);
|
|
252
|
+
let model = (await this.first(filter));
|
|
253
|
+
if (!model) {
|
|
254
|
+
model = this.self(data);
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
model.merge(data);
|
|
258
|
+
}
|
|
259
|
+
await model.save();
|
|
260
|
+
return model;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Count total documents based on the given filter
|
|
264
|
+
*/
|
|
265
|
+
static async count(filter = {}) {
|
|
266
|
+
return await this.query.count(this.collection, await this.prepareFilters(filter));
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Get first model for the given filter
|
|
270
|
+
*/
|
|
271
|
+
static async first(filter = {}) {
|
|
272
|
+
const result = await this.query.first(this.collection, await this.prepareFilters(filter));
|
|
273
|
+
return result ? this.self(result) : null;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Get last model for the given filter
|
|
277
|
+
*/
|
|
278
|
+
static async last(filter = {}) {
|
|
279
|
+
const result = await this.query.last(this.collection, await this.prepareFilters(filter));
|
|
280
|
+
return result ? this.self(result) : null;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Get latest documents
|
|
284
|
+
*/
|
|
285
|
+
static async latest(filter = {}) {
|
|
286
|
+
const documents = await this.query.latest(this.collection, await this.prepareFilters(filter));
|
|
287
|
+
return documents.map(document => this.self(document));
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Delete single document if the given filter is an ObjectId of mongodb
|
|
291
|
+
* Otherwise, delete multiple documents based on the given filter object
|
|
292
|
+
*/
|
|
293
|
+
static async delete(filter = {}) {
|
|
294
|
+
if (filter instanceof mongodb.ObjectId ||
|
|
295
|
+
typeof filter === "string" ||
|
|
296
|
+
typeof filter === "number") {
|
|
297
|
+
return (await this.query.deleteOne(this.collection, await this.prepareFilters({
|
|
298
|
+
[this.primaryIdColumn]: filter,
|
|
299
|
+
})))
|
|
300
|
+
? 1
|
|
301
|
+
: 0;
|
|
302
|
+
}
|
|
303
|
+
filter = await this.prepareFilters(filter);
|
|
304
|
+
return await this.query.delete(this.collection, filter);
|
|
305
|
+
}
|
|
306
|
+
static async chunk(limitOrFilter, callback) {
|
|
307
|
+
let limit = limitOrFilter;
|
|
308
|
+
let filter = {};
|
|
309
|
+
if (typeof limitOrFilter === "object") {
|
|
310
|
+
limit = limitOrFilter.limit;
|
|
311
|
+
delete limitOrFilter.limit;
|
|
312
|
+
filter = limitOrFilter;
|
|
313
|
+
}
|
|
314
|
+
const totalDocumentsOfFilter = await this.query.count(this.collection, filter);
|
|
315
|
+
const totalPages = Math.ceil(totalDocumentsOfFilter / limit);
|
|
316
|
+
for (let page = 1; page <= totalPages; page++) {
|
|
317
|
+
const result = await this.paginate(filter, page, limit);
|
|
318
|
+
const output = await callback(result.documents, result.paginationInfo);
|
|
319
|
+
if (output === false)
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Check if document exists for the given filter
|
|
325
|
+
*/
|
|
326
|
+
static async exists(filter = {}) {
|
|
327
|
+
return await this.query.exists(this.collection, await this.prepareFilters(filter));
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Get distinct values for the given column
|
|
331
|
+
*/
|
|
332
|
+
static async distinct(column, filter = {}) {
|
|
333
|
+
return await this.query.distinct(this.collection, column, await this.prepareFilters(filter));
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Prepare filters
|
|
337
|
+
*/
|
|
338
|
+
static async prepareFilters(filters = {}) {
|
|
339
|
+
// if filter contains _id and it is a string, convert it to ObjectId
|
|
340
|
+
if (filters._id && typeof filters._id === "string") {
|
|
341
|
+
filters._id = new mongodb.ObjectId(filters._id);
|
|
342
|
+
}
|
|
343
|
+
const deleteStrategy = this.deleteStrategy;
|
|
344
|
+
if (deleteStrategy === types.ModelDeleteStrategy.softDelete &&
|
|
345
|
+
!filters.withDeleted) {
|
|
346
|
+
filters.deletedAt = null;
|
|
347
|
+
}
|
|
348
|
+
await this.events().trigger("fetching", this, filters);
|
|
349
|
+
await baseModel.BaseModel.events().trigger("fetching", this, filters);
|
|
350
|
+
return filters;
|
|
351
|
+
}
|
|
352
|
+
}exports.CrudModel=CrudModel;//# sourceMappingURL=crud-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crud-model.js","sources":["../../src/model/crud-model.ts"],"sourcesContent":[null],"names":["BaseModel","ModelDeleteStrategy","ObjectId"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from "../migration/migration-office";
|
|
2
|
+
export * from "./ModelAggregate";
|
|
3
|
+
export * from "./ModelSync";
|
|
4
|
+
export * from "./base-model";
|
|
5
|
+
export * from "./crud-model";
|
|
6
|
+
export * from "./joinable";
|
|
7
|
+
export * from "./master-mind";
|
|
8
|
+
export * from "./model";
|
|
9
|
+
export * from "./types";
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { GenericObject } from "@mongez/reinforcements";
|
|
2
|
+
import type { LookupPipelineOptions, Pipeline } from "../aggregate";
|
|
3
|
+
import { Aggregate } from "../aggregate";
|
|
4
|
+
import type { Model } from "../model";
|
|
5
|
+
export type JoinableProxy = Joinable & Aggregate;
|
|
6
|
+
export type ReturnAsCallback = (data: any | any[]) => any;
|
|
7
|
+
export declare class Joinable {
|
|
8
|
+
model: typeof Model;
|
|
9
|
+
/**
|
|
10
|
+
* Lookup data
|
|
11
|
+
*/
|
|
12
|
+
protected lookupData: LookupPipelineOptions;
|
|
13
|
+
/**
|
|
14
|
+
* Whether to return the data in model
|
|
15
|
+
*/
|
|
16
|
+
isInModel: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Return data as callback
|
|
19
|
+
*/
|
|
20
|
+
protected returnAsCallback: ReturnAsCallback;
|
|
21
|
+
/**
|
|
22
|
+
* Aggregate instance
|
|
23
|
+
*/
|
|
24
|
+
query: Aggregate;
|
|
25
|
+
/**
|
|
26
|
+
* Constructor
|
|
27
|
+
* The Joined Model
|
|
28
|
+
*/
|
|
29
|
+
constructor(model: typeof Model);
|
|
30
|
+
/**
|
|
31
|
+
* Set the return as callback
|
|
32
|
+
*/
|
|
33
|
+
returnAs(callback: ReturnAsCallback): this;
|
|
34
|
+
/**
|
|
35
|
+
* Get return as callback
|
|
36
|
+
*/
|
|
37
|
+
getReturnAs(): ReturnAsCallback;
|
|
38
|
+
/**
|
|
39
|
+
* Return data in model
|
|
40
|
+
*/
|
|
41
|
+
inModel(inModel?: boolean): this;
|
|
42
|
+
/**
|
|
43
|
+
* Set the local field
|
|
44
|
+
*/
|
|
45
|
+
localField(localField: string): this;
|
|
46
|
+
/**
|
|
47
|
+
* Get value from lookup data
|
|
48
|
+
*/
|
|
49
|
+
get(key: keyof LookupPipelineOptions, defaultValue?: any): any;
|
|
50
|
+
/**
|
|
51
|
+
* Set the foreign field
|
|
52
|
+
*/
|
|
53
|
+
foreignField(foreignField: string): this;
|
|
54
|
+
/**
|
|
55
|
+
* Set the as field
|
|
56
|
+
*/
|
|
57
|
+
as(as: string): this;
|
|
58
|
+
/**
|
|
59
|
+
* Wether to return a single document or an array
|
|
60
|
+
*/
|
|
61
|
+
single(single?: boolean): this;
|
|
62
|
+
/**
|
|
63
|
+
* Set the pipeline
|
|
64
|
+
*/
|
|
65
|
+
addPipeline(pipeline: (Pipeline | GenericObject)[]): this;
|
|
66
|
+
/**
|
|
67
|
+
* Add let
|
|
68
|
+
*/
|
|
69
|
+
let(letData: LookupPipelineOptions["let"]): this;
|
|
70
|
+
/**
|
|
71
|
+
* Set all lookup data
|
|
72
|
+
*/
|
|
73
|
+
set(data: LookupPipelineOptions): this;
|
|
74
|
+
/**
|
|
75
|
+
* Parse the lookup data
|
|
76
|
+
*/
|
|
77
|
+
parse(): Required<LookupPipelineOptions>;
|
|
78
|
+
/**
|
|
79
|
+
* Reset the pipelines
|
|
80
|
+
*/
|
|
81
|
+
reset(): void;
|
|
82
|
+
/**
|
|
83
|
+
* Clone the current instance
|
|
84
|
+
*/
|
|
85
|
+
clone(): Joinable;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=joinable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"joinable.d.ts","sourceRoot":"","sources":["../../src/model/joinable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEjD,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,KAAK,GAAG,CAAC;AAE1D,qBAAa,QAAQ;IAuCO,KAAK,EAAE,OAAO,KAAK;IAtC7C;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,qBAAqB,CAMzC;IAEF;;OAEG;IACI,SAAS,UAAS;IAEzB;;OAEG;IACH,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAQ1C;IAEF;;OAEG;IACI,KAAK,EAAE,SAAS,CAAC;IAExB;;;OAGG;gBACuB,KAAK,EAAE,OAAO,KAAK;IAK7C;;OAEG;IACI,QAAQ,CAAC,QAAQ,EAAE,gBAAgB;IAM1C;;OAEG;IACI,WAAW;IAIlB;;OAEG;IACI,OAAO,CAAC,OAAO,UAAO;IAM7B;;OAEG;IACI,UAAU,CAAC,UAAU,EAAE,MAAM;IAMpC;;OAEG;IACI,GAAG,CAAC,GAAG,EAAE,MAAM,qBAAqB,EAAE,YAAY,CAAC,EAAE,GAAG;IAI/D;;OAEG;IACI,YAAY,CAAC,YAAY,EAAE,MAAM;IAMxC;;OAEG;IACI,EAAE,CAAC,EAAE,EAAE,MAAM;IAMpB;;OAEG;IACI,MAAM,CAAC,MAAM,UAAO;IAM3B;;OAEG;IACI,WAAW,CAAC,QAAQ,EAAE,CAAC,QAAQ,GAAG,aAAa,CAAC,EAAE;IAKzD;;OAEG;IACI,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC,KAAK,CAAC;IAMhD;;OAEG;IACI,GAAG,CAAC,IAAI,EAAE,qBAAqB;IAUtC;;OAEG;IACI,KAAK;IAuBZ;;OAEG;IACI,KAAK;IAIZ;;OAEG;IACI,KAAK;CAab"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
'use strict';var pluralize=require('pluralize');require('@mongez/reinforcements'),require('@mongez/supportive-is'),require('@mongez/time-wizard');var aggregate=require('../aggregate/aggregate.js');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var pluralize__default=/*#__PURE__*/_interopDefault(pluralize);class Joinable {
|
|
2
|
+
model;
|
|
3
|
+
/**
|
|
4
|
+
* Lookup data
|
|
5
|
+
*/
|
|
6
|
+
lookupData = {
|
|
7
|
+
from: "",
|
|
8
|
+
localField: "",
|
|
9
|
+
foreignField: "id",
|
|
10
|
+
as: "",
|
|
11
|
+
single: false,
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Whether to return the data in model
|
|
15
|
+
*/
|
|
16
|
+
isInModel = false;
|
|
17
|
+
/**
|
|
18
|
+
* Return data as callback
|
|
19
|
+
*/
|
|
20
|
+
returnAsCallback = (data) => {
|
|
21
|
+
if (this.isInModel) {
|
|
22
|
+
return Array.isArray(data)
|
|
23
|
+
? data.map(item => new this.model(item))
|
|
24
|
+
: new this.model(data);
|
|
25
|
+
}
|
|
26
|
+
return data;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Aggregate instance
|
|
30
|
+
*/
|
|
31
|
+
query;
|
|
32
|
+
/**
|
|
33
|
+
* Constructor
|
|
34
|
+
* The Joined Model
|
|
35
|
+
*/
|
|
36
|
+
constructor(model) {
|
|
37
|
+
this.model = model;
|
|
38
|
+
this.lookupData.from = model.collection;
|
|
39
|
+
this.query = new aggregate.Aggregate(model.collection);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Set the return as callback
|
|
43
|
+
*/
|
|
44
|
+
returnAs(callback) {
|
|
45
|
+
this.returnAsCallback = callback;
|
|
46
|
+
return this;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get return as callback
|
|
50
|
+
*/
|
|
51
|
+
getReturnAs() {
|
|
52
|
+
return this.returnAsCallback;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Return data in model
|
|
56
|
+
*/
|
|
57
|
+
inModel(inModel = true) {
|
|
58
|
+
this.isInModel = inModel;
|
|
59
|
+
return this;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Set the local field
|
|
63
|
+
*/
|
|
64
|
+
localField(localField) {
|
|
65
|
+
this.lookupData.localField = localField;
|
|
66
|
+
return this;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get value from lookup data
|
|
70
|
+
*/
|
|
71
|
+
get(key, defaultValue) {
|
|
72
|
+
return this.lookupData[key] || defaultValue;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Set the foreign field
|
|
76
|
+
*/
|
|
77
|
+
foreignField(foreignField) {
|
|
78
|
+
this.lookupData.foreignField = foreignField;
|
|
79
|
+
return this;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Set the as field
|
|
83
|
+
*/
|
|
84
|
+
as(as) {
|
|
85
|
+
this.lookupData.as = as;
|
|
86
|
+
return this;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Wether to return a single document or an array
|
|
90
|
+
*/
|
|
91
|
+
single(single = true) {
|
|
92
|
+
this.lookupData.single = single;
|
|
93
|
+
return this;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Set the pipeline
|
|
97
|
+
*/
|
|
98
|
+
addPipeline(pipeline) {
|
|
99
|
+
this.query.addPipeline(pipeline);
|
|
100
|
+
return this;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Add let
|
|
104
|
+
*/
|
|
105
|
+
let(letData) {
|
|
106
|
+
this.lookupData.let = letData;
|
|
107
|
+
return this;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Set all lookup data
|
|
111
|
+
*/
|
|
112
|
+
set(data) {
|
|
113
|
+
if (!data.from) {
|
|
114
|
+
data.from = this.model.collection;
|
|
115
|
+
}
|
|
116
|
+
this.lookupData = data;
|
|
117
|
+
return this;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Parse the lookup data
|
|
121
|
+
*/
|
|
122
|
+
parse() {
|
|
123
|
+
const name = this.lookupData.single
|
|
124
|
+
? pluralize__default.default(this.model.collection, 1)
|
|
125
|
+
: pluralize__default.default(this.model.collection);
|
|
126
|
+
const lookupData = { ...this.lookupData };
|
|
127
|
+
if (!lookupData.as) {
|
|
128
|
+
lookupData.as = name;
|
|
129
|
+
}
|
|
130
|
+
if (!lookupData.localField) {
|
|
131
|
+
lookupData.localField = name + ".id";
|
|
132
|
+
}
|
|
133
|
+
lookupData.pipeline = this.query.parse();
|
|
134
|
+
// reset the pipelines
|
|
135
|
+
this.reset();
|
|
136
|
+
return lookupData;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Reset the pipelines
|
|
140
|
+
*/
|
|
141
|
+
reset() {
|
|
142
|
+
this.query = new aggregate.Aggregate(this.model.collection);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Clone the current instance
|
|
146
|
+
*/
|
|
147
|
+
clone() {
|
|
148
|
+
const clone = new Joinable(this.model);
|
|
149
|
+
clone.set(this.lookupData);
|
|
150
|
+
clone.query.addPipelines(this.query.getPipelines());
|
|
151
|
+
clone.isInModel = this.isInModel;
|
|
152
|
+
clone.returnAsCallback = this.returnAsCallback.bind(clone);
|
|
153
|
+
return clone;
|
|
154
|
+
}
|
|
155
|
+
}exports.Joinable=Joinable;//# sourceMappingURL=joinable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"joinable.js","sources":["../../src/model/joinable.ts"],"sourcesContent":[null],"names":["Aggregate","pluralize"],"mappings":"2UAUa,QAAQ,CAAA;AAuCO,IAAA,KAAA,CAAA;AAtC1B;;AAEG;AACO,IAAA,UAAU,GAA0B;AAC5C,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,UAAU,EAAE,EAAE;AACd,QAAA,YAAY,EAAE,IAAI;AAClB,QAAA,EAAE,EAAE,EAAE;AACN,QAAA,MAAM,EAAE,KAAK;KACd,CAAC;AAEF;;AAEG;IACI,SAAS,GAAG,KAAK,CAAC;AAEzB;;AAEG;AACO,IAAA,gBAAgB,GAAqB,CAAC,IAAS,KAAI;QAC3D,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AACxB,kBAAE,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;kBACtC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC1B,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;AACd,KAAC,CAAC;AAEF;;AAEG;AACI,IAAA,KAAK,CAAY;AAExB;;;AAGG;AACH,IAAA,WAAA,CAA0B,KAAmB,EAAA;QAAnB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAc;QAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,IAAIA,mBAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;KAC9C;AAED;;AAEG;AACI,IAAA,QAAQ,CAAC,QAA0B,EAAA;AACxC,QAAA,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;AAEjC,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;AAEG;IACI,WAAW,GAAA;QAChB,OAAO,IAAI,CAAC,gBAAgB,CAAC;KAC9B;AAED;;AAEG;IACI,OAAO,CAAC,OAAO,GAAG,IAAI,EAAA;AAC3B,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;AAEzB,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;AAEG;AACI,IAAA,UAAU,CAAC,UAAkB,EAAA;AAClC,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC;AAExC,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;AAEG;IACI,GAAG,CAAC,GAAgC,EAAE,YAAkB,EAAA;QAC7D,OAAQ,IAAI,CAAC,UAAkB,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC;KACtD;AAED;;AAEG;AACI,IAAA,YAAY,CAAC,YAAoB,EAAA;AACtC,QAAA,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,YAAY,CAAC;AAE5C,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;AAEG;AACI,IAAA,EAAE,CAAC,EAAU,EAAA;AAClB,QAAA,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;AAExB,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;AAEG;IACI,MAAM,CAAC,MAAM,GAAG,IAAI,EAAA;AACzB,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;AAEhC,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;AAEG;AACI,IAAA,WAAW,CAAC,QAAsC,EAAA;AACvD,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AACjC,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;AAEG;AACI,IAAA,GAAG,CAAC,OAAqC,EAAA;AAC9C,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,OAAO,CAAC;AAE9B,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;AAEG;AACI,IAAA,GAAG,CAAC,IAA2B,EAAA;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;AACnC,SAAA;AAED,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAEvB,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;AAEG;IACI,KAAK,GAAA;AACV,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM;cAC/BC,0BAAS,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;cACnCA,0BAAS,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAErC,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAE1C,QAAA,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;AAClB,YAAA,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC;AACtB,SAAA;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;AAC1B,YAAA,UAAU,CAAC,UAAU,GAAG,IAAI,GAAG,KAAK,CAAC;AACtC,SAAA;QAED,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;;QAGzC,IAAI,CAAC,KAAK,EAAE,CAAC;AAEb,QAAA,OAAO,UAA6C,CAAC;KACtD;AAED;;AAEG;IACI,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,KAAK,GAAG,IAAID,mBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;KACnD;AAED;;AAEG;IACI,KAAK,GAAA;QACV,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAEvC,QAAA,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAE3B,QAAA,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;AAEpD,QAAA,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAEjC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAE3D,QAAA,OAAO,KAAK,CAAC;KACd;AACF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type ClientSession } from "mongodb";
|
|
2
|
+
import { type Database } from "../database";
|
|
3
|
+
export declare class MasterMind {
|
|
4
|
+
/**
|
|
5
|
+
* Master Mind Collection name
|
|
6
|
+
*/
|
|
7
|
+
collection: string;
|
|
8
|
+
/**
|
|
9
|
+
* Connection instance
|
|
10
|
+
*/
|
|
11
|
+
database: Database;
|
|
12
|
+
/**
|
|
13
|
+
* Get last id of the given collection
|
|
14
|
+
*/
|
|
15
|
+
getLastId(collection: string): Promise<number>;
|
|
16
|
+
/**
|
|
17
|
+
* Set last id for the given collection
|
|
18
|
+
*/
|
|
19
|
+
setLastId(collection: string, id: number, { session }?: {
|
|
20
|
+
session?: ClientSession;
|
|
21
|
+
}): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Rename the given collection to the new one to keep the last id updated and not to be reset
|
|
24
|
+
*/
|
|
25
|
+
renameCollection(oldCollection: string, newCollection: string, { session }?: {
|
|
26
|
+
session?: ClientSession;
|
|
27
|
+
}): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Get current active session from database object
|
|
30
|
+
*/
|
|
31
|
+
getCurrentSession(): ClientSession;
|
|
32
|
+
/**
|
|
33
|
+
* Update all collections by the last id of each collection in current database
|
|
34
|
+
*/
|
|
35
|
+
updateAllLastId(): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Generate next id for the given collection name
|
|
38
|
+
*/
|
|
39
|
+
generateNextId(collection: string, incrementIdBy?: number, initialId?: number, { session }?: {
|
|
40
|
+
session?: ClientSession;
|
|
41
|
+
}): Promise<number>;
|
|
42
|
+
}
|
|
43
|
+
export declare const masterMind: MasterMind;
|
|
44
|
+
//# sourceMappingURL=master-mind.d.ts.map
|