@forestadmin/datasource-mongoose 1.2.6 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/collection.d.ts +3 -3
- package/dist/collection.js +56 -46
- package/dist/datasource.d.ts +10 -4
- package/dist/datasource.js +65 -17
- package/dist/index.js +2 -2
- package/dist/mongoose/schema.d.ts +10 -1
- package/dist/mongoose/schema.js +82 -13
- package/dist/types.d.ts +33 -2
- package/dist/utils/helpers.d.ts +20 -0
- package/dist/utils/helpers.js +54 -2
- package/dist/utils/options.d.ts +9 -0
- package/dist/utils/options.js +80 -0
- package/dist/utils/pipeline/filter.d.ts +3 -1
- package/dist/utils/pipeline/filter.js +24 -7
- package/dist/utils/pipeline/lookup.d.ts +2 -1
- package/dist/utils/pipeline/lookup.js +3 -3
- package/dist/utils/pipeline/reparent.d.ts +6 -1
- package/dist/utils/pipeline/reparent.js +25 -18
- package/dist/utils/pipeline/virtual-fields.d.ts +3 -3
- package/dist/utils/pipeline/virtual-fields.js +27 -38
- package/dist/utils/schema/fields.d.ts +3 -2
- package/dist/utils/schema/fields.js +7 -9
- package/dist/utils/schema/relations.js +22 -10
- package/package.json +2 -2
package/dist/collection.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { AggregateResult, Aggregation, BaseCollection, Caller, DataSource, Filter, PaginatedFilter, Projection, RecordData } from '@forestadmin/datasource-toolkit';
|
|
2
2
|
import { Model } from 'mongoose';
|
|
3
|
+
import { Stack } from './types';
|
|
3
4
|
export default class MongooseCollection extends BaseCollection {
|
|
4
5
|
model: Model<RecordData>;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
constructor(dataSource: DataSource, model: Model<RecordData>, prefix?: string, ignoredFields?: string[]);
|
|
6
|
+
stack: Stack;
|
|
7
|
+
constructor(dataSource: DataSource, model: Model<RecordData>, stack: Stack);
|
|
8
8
|
list(caller: Caller, filter: PaginatedFilter, projection: Projection): Promise<RecordData[]>;
|
|
9
9
|
aggregate(caller: Caller, filter: Filter, aggregation: Aggregation, limit?: number): Promise<AggregateResult[]>;
|
|
10
10
|
create(caller: Caller, data: RecordData[]): Promise<RecordData[]>;
|
package/dist/collection.js
CHANGED
|
@@ -17,13 +17,14 @@ const reparent_1 = __importDefault(require("./utils/pipeline/reparent"));
|
|
|
17
17
|
const virtual_fields_1 = __importDefault(require("./utils/pipeline/virtual-fields"));
|
|
18
18
|
const fields_1 = __importDefault(require("./utils/schema/fields"));
|
|
19
19
|
class MongooseCollection extends datasource_toolkit_1.BaseCollection {
|
|
20
|
-
constructor(dataSource, model,
|
|
21
|
-
|
|
20
|
+
constructor(dataSource, model, stack) {
|
|
21
|
+
const { prefix } = stack[stack.length - 1];
|
|
22
|
+
const name = prefix ? (0, helpers_1.escape)(`${model.modelName}.${prefix}`) : model.modelName;
|
|
23
|
+
super(name, dataSource);
|
|
22
24
|
this.model = model;
|
|
23
|
-
this.
|
|
24
|
-
this.ignoredFields = ignoredFields;
|
|
25
|
+
this.stack = stack;
|
|
25
26
|
this.enableCount();
|
|
26
|
-
this.addFields(fields_1.default.buildFieldsSchema(model,
|
|
27
|
+
this.addFields(fields_1.default.buildFieldsSchema(model, stack));
|
|
27
28
|
}
|
|
28
29
|
async list(caller, filter, projection) {
|
|
29
30
|
const lookupProjection = projection.union(filter.conditionTree?.projection, filter.sort?.projection);
|
|
@@ -52,54 +53,66 @@ class MongooseCollection extends datasource_toolkit_1.BaseCollection {
|
|
|
52
53
|
async delete(caller, filter) {
|
|
53
54
|
return this.handleValidationError(() => this._delete(caller, filter));
|
|
54
55
|
}
|
|
55
|
-
async _create(caller,
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
async _create(caller, flatData) {
|
|
57
|
+
const { asFields } = this.stack[this.stack.length - 1];
|
|
58
|
+
const data = flatData.map(fd => (0, helpers_1.unflattenRecord)(fd, asFields));
|
|
59
|
+
// For root models, we can simply insert the records.
|
|
60
|
+
if (this.stack.length < 2) {
|
|
58
61
|
const { insertedIds } = await this.model.insertMany(data, { rawResult: true });
|
|
59
|
-
return
|
|
62
|
+
return flatData.map((record, index) => ({
|
|
63
|
+
_id: (0, helpers_1.replaceMongoTypes)(insertedIds[index]),
|
|
64
|
+
...record,
|
|
65
|
+
}));
|
|
60
66
|
}
|
|
67
|
+
// Only array fields can create subdocuments (the others should use update)
|
|
68
|
+
const schema = schema_1.default.fromModel(this.model).applyStack(this.stack);
|
|
69
|
+
if (!schema.isArray)
|
|
70
|
+
throw new datasource_toolkit_1.ValidationError('Trying to create subrecords on a non-array field');
|
|
61
71
|
// Transform list of subrecords to a list of modifications that we'll apply to the root record.
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
-
|
|
72
|
+
const lastStackStep = this.stack[this.stack.length - 1];
|
|
73
|
+
const fieldName = this.stack.length > 2
|
|
74
|
+
? lastStackStep.prefix.substring(this.stack[this.stack.length - 2].prefix.length + 1)
|
|
75
|
+
: lastStackStep.prefix;
|
|
76
|
+
const updates = {};
|
|
65
77
|
const results = [];
|
|
66
78
|
for (const record of data) {
|
|
67
79
|
const { parentId, ...rest } = record;
|
|
68
80
|
if (!parentId)
|
|
69
81
|
throw new datasource_toolkit_1.ValidationError('Trying to create a subrecord with no parent');
|
|
70
82
|
const [rootId, path] = (0, helpers_1.splitId)(`${parentId}.${fieldName}`);
|
|
71
|
-
|
|
72
|
-
|
|
83
|
+
const rootIdString = String(rootId);
|
|
84
|
+
if (!updates[rootIdString])
|
|
85
|
+
updates[rootIdString] = { rootId, path, records: [] };
|
|
73
86
|
// unwrap 'content' on leafs
|
|
74
|
-
updates.
|
|
87
|
+
updates[rootIdString].records.push(schema.isLeaf ? rest.content : rest);
|
|
75
88
|
results.push({
|
|
76
|
-
_id:
|
|
77
|
-
? `${rootId}.${path}.${updates.get(rootId).records.length - 1}`
|
|
78
|
-
: `${rootId}.${path}`,
|
|
89
|
+
_id: `${rootId}.${path}.${updates[rootIdString].records.length - 1}`,
|
|
79
90
|
...record,
|
|
80
91
|
});
|
|
81
92
|
}
|
|
82
93
|
// Apply the modifications to the root document.
|
|
83
|
-
const promises =
|
|
84
|
-
? { $push: { [path]: { $each: records, position: 0 } } }
|
|
85
|
-
: { $set: { [path]: records[0] } }, { rawResult: true }));
|
|
94
|
+
const promises = Object.values(updates).map(({ rootId, path, records }) => this.model.updateOne({ _id: rootId }, { $push: { [path]: { $position: 0, $each: records } } }));
|
|
86
95
|
await Promise.all(promises);
|
|
87
96
|
return results;
|
|
88
97
|
}
|
|
89
|
-
async _update(caller, filter,
|
|
98
|
+
async _update(caller, filter, flatPatch) {
|
|
99
|
+
const { asFields } = this.stack[this.stack.length - 1];
|
|
100
|
+
const patch = (0, helpers_1.unflattenRecord)(flatPatch, asFields, true);
|
|
90
101
|
// Fetch the ids of the documents OR subdocuments that will be updated.
|
|
91
102
|
// We need to do that regardless of `this.prefix` because the filter may contain conditions on
|
|
92
103
|
// relationships.
|
|
93
104
|
const records = await this.list(caller, filter, new datasource_toolkit_1.Projection('_id'));
|
|
94
105
|
const ids = records.map(record => record._id);
|
|
95
|
-
if (
|
|
106
|
+
if (this.stack.length < 2) {
|
|
96
107
|
// We are updating a real document, we can delegate the work to mongoose directly.
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
108
|
+
await (ids.length > 1
|
|
109
|
+
? this.model.updateMany({ _id: ids }, patch, { rawResult: true })
|
|
110
|
+
: this.model.updateOne({ _id: ids }, patch, { rawResult: true }));
|
|
111
|
+
}
|
|
112
|
+
else if (patch.parentId && ids.some(id => !id.startsWith(patch.parentId))) {
|
|
113
|
+
// When we update subdocuments, we need to make sure that the new parent is the same as the
|
|
114
|
+
// old one: reparenting is not supported.
|
|
115
|
+
throw new datasource_toolkit_1.ValidationError(`'${this.name}' is virtual: records cannot be reparented.`);
|
|
103
116
|
}
|
|
104
117
|
else {
|
|
105
118
|
// We are updating a subdocument (this.prefix is set).
|
|
@@ -111,24 +124,21 @@ class MongooseCollection extends datasource_toolkit_1.BaseCollection {
|
|
|
111
124
|
// potentially nested arrays) instead of performing one update per doc.
|
|
112
125
|
// Also note, that when we are using a single field as a model, an extra level of nesting is
|
|
113
126
|
// added (this is common when using the flattener to create many to many relationships)
|
|
114
|
-
const { isLeaf } = schema_1.default.fromModel(this.model).
|
|
127
|
+
const { isLeaf } = schema_1.default.fromModel(this.model).applyStack(this.stack);
|
|
115
128
|
// `idsByPath` contains one entry if using the flattener in object-mode, but potentially many
|
|
116
129
|
// if using the flattener in array-mode.
|
|
117
130
|
const idsByPath = (0, helpers_1.groupIdsByPath)(ids);
|
|
118
131
|
// Perform the updates.
|
|
119
|
-
const promises = Object.entries(idsByPath).map(
|
|
132
|
+
const promises = Object.entries(idsByPath).map(([path, rootIds]) => {
|
|
120
133
|
// When using object-mode flattener, path == this.prefix.
|
|
121
134
|
// When using array-mode flattener, path == this.prefix + '.0' (or '.1', etc).
|
|
122
135
|
// (Both can be used at the same time as this is a recursive process).
|
|
123
136
|
const subdocPatch = (0, helpers_1.buildSubdocumentPatch)(path, patch, isLeaf);
|
|
124
|
-
if (Object.keys(subdocPatch).length)
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
await this.model.updateOne({ _id: rootIds }, subdocPatch, { rawResult: true });
|
|
130
|
-
}
|
|
131
|
-
}
|
|
137
|
+
if (!Object.keys(subdocPatch).length)
|
|
138
|
+
return null;
|
|
139
|
+
return ids.length > 1
|
|
140
|
+
? this.model.updateMany({ _id: rootIds }, subdocPatch, { rawResult: true })
|
|
141
|
+
: this.model.updateOne({ _id: rootIds }, subdocPatch, { rawResult: true });
|
|
132
142
|
});
|
|
133
143
|
await Promise.all(promises);
|
|
134
144
|
}
|
|
@@ -136,11 +146,11 @@ class MongooseCollection extends datasource_toolkit_1.BaseCollection {
|
|
|
136
146
|
async _delete(caller, filter) {
|
|
137
147
|
const records = await this.list(caller, filter, new datasource_toolkit_1.Projection('_id'));
|
|
138
148
|
const ids = records.map(record => record._id);
|
|
139
|
-
if (
|
|
149
|
+
if (this.stack.length < 2) {
|
|
140
150
|
await this.model.deleteMany({ _id: ids }, { rawResult: true });
|
|
141
151
|
return;
|
|
142
152
|
}
|
|
143
|
-
const schema = schema_1.default.fromModel(this.model).
|
|
153
|
+
const schema = schema_1.default.fromModel(this.model).applyStack(this.stack);
|
|
144
154
|
const idsByPath = (0, helpers_1.groupIdsByPath)(ids);
|
|
145
155
|
if (schema.isArray) {
|
|
146
156
|
// Iterate paths in reverse order so that when we delete elements from arrays, the indexes
|
|
@@ -168,10 +178,10 @@ class MongooseCollection extends datasource_toolkit_1.BaseCollection {
|
|
|
168
178
|
}
|
|
169
179
|
buildBasePipeline(filter, lookupProjection) {
|
|
170
180
|
return [
|
|
171
|
-
...reparent_1.default.reparent(this.model, this.
|
|
172
|
-
...virtual_fields_1.default.addVirtual(this.model, this.
|
|
173
|
-
...lookup_1.default.lookup(this.model, this.
|
|
174
|
-
...filter_1.default.filter(this.model, this.
|
|
181
|
+
...reparent_1.default.reparent(this.model, this.stack),
|
|
182
|
+
...virtual_fields_1.default.addVirtual(this.model, this.stack, lookupProjection),
|
|
183
|
+
...lookup_1.default.lookup(this.model, this.stack, lookupProjection),
|
|
184
|
+
...filter_1.default.filter(this.model, this.stack, filter),
|
|
175
185
|
];
|
|
176
186
|
}
|
|
177
187
|
async handleValidationError(callback) {
|
|
@@ -188,4 +198,4 @@ class MongooseCollection extends datasource_toolkit_1.BaseCollection {
|
|
|
188
198
|
}
|
|
189
199
|
}
|
|
190
200
|
exports.default = MongooseCollection;
|
|
191
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEseURBQXlEO0FBQ3pELHlDQUF5QztBQUN6Qyx3RUFXeUM7QUFDekMsdUNBQXVEO0FBRXZELCtEQUErQztBQUMvQyw2Q0FPeUI7QUFDekIscUVBQXNEO0FBQ3RELG1FQUFvRDtBQUNwRCxxRUFBc0Q7QUFDdEQsNkVBQThEO0FBQzlELHlFQUEwRDtBQUMxRCxxRkFBcUU7QUFDckUsbUVBQW9EO0FBRXBELE1BQXFCLGtCQUFtQixTQUFRLG1DQUFjO0lBSzVELFlBQ0UsVUFBc0IsRUFDdEIsS0FBd0IsRUFDeEIsU0FBaUIsSUFBSSxFQUNyQixnQkFBMEIsRUFBRTtRQUU1QixLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFBLGdCQUFNLEVBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDckYsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFFbkMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJLENBQ1IsTUFBYyxFQUNkLE1BQXVCLEVBQ3ZCLFVBQXNCO1FBRXRCLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FDdkMsTUFBTSxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQ2hDLE1BQU0sQ0FBQyxJQUFJ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
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEseURBQXlEO0FBQ3pELHlDQUF5QztBQUN6Qyx3RUFXeUM7QUFDekMsdUNBQXVEO0FBRXZELCtEQUErQztBQUUvQyw2Q0FReUI7QUFDekIscUVBQXNEO0FBQ3RELG1FQUFvRDtBQUNwRCxxRUFBc0Q7QUFDdEQsNkVBQThEO0FBQzlELHlFQUEwRDtBQUMxRCxxRkFBcUU7QUFDckUsbUVBQW9EO0FBRXBELE1BQXFCLGtCQUFtQixTQUFRLG1DQUFjO0lBSTVELFlBQVksVUFBc0IsRUFBRSxLQUF3QixFQUFFLEtBQVk7UUFDeEUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBQSxnQkFBTSxFQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBRS9FLEtBQUssQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksQ0FDUixNQUFjLEVBQ2QsTUFBdUIsRUFDdkIsVUFBc0I7UUFFdEIsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUN2QyxNQUFNLENBQUMs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
|
package/dist/datasource.d.ts
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
|
-
import { BaseDataSource } from '@forestadmin/datasource-toolkit';
|
|
1
|
+
import { BaseDataSource, Logger } from '@forestadmin/datasource-toolkit';
|
|
2
2
|
import { Connection } from 'mongoose';
|
|
3
3
|
import MongooseCollection from './collection';
|
|
4
4
|
import { MongooseOptions } from './types';
|
|
5
5
|
export default class MongooseDatasource extends BaseDataSource<MongooseCollection> {
|
|
6
|
-
constructor(connection: Connection, options?: MongooseOptions);
|
|
6
|
+
constructor(connection: Connection, options?: MongooseOptions, logger?: Logger);
|
|
7
7
|
/** Create all collections for a given model */
|
|
8
8
|
private addModel;
|
|
9
|
-
|
|
10
|
-
private
|
|
9
|
+
private checkAsFields;
|
|
10
|
+
private checkAsModels;
|
|
11
|
+
/**
|
|
12
|
+
* When flattening a field, or transforming a field into a model, we need to check that
|
|
13
|
+
* there are no intermediary arrays. For example, if we have a schema like this:
|
|
14
|
+
* { a: [{ b: { c: String } }] } and we want to flatten a.b.c, we can't do it.
|
|
15
|
+
*/
|
|
16
|
+
private containsIntermediaryArray;
|
|
11
17
|
}
|
|
12
18
|
//# sourceMappingURL=datasource.d.ts.map
|
package/dist/datasource.js
CHANGED
|
@@ -6,37 +6,85 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const datasource_toolkit_1 = require("@forestadmin/datasource-toolkit");
|
|
7
7
|
const collection_1 = __importDefault(require("./collection"));
|
|
8
8
|
const schema_1 = __importDefault(require("./mongoose/schema"));
|
|
9
|
+
const helpers_1 = require("./utils/helpers");
|
|
10
|
+
const options_1 = __importDefault(require("./utils/options"));
|
|
9
11
|
const relations_1 = __importDefault(require("./utils/schema/relations"));
|
|
10
12
|
class MongooseDatasource extends datasource_toolkit_1.BaseDataSource {
|
|
11
|
-
constructor(connection, options = {}) {
|
|
13
|
+
constructor(connection, options = {}, logger = null) {
|
|
12
14
|
super();
|
|
15
|
+
if (options && !options.flattenMode) {
|
|
16
|
+
logger?.('Warn', 'Using unspecified flattenMode. ' +
|
|
17
|
+
'Please refer to the documentation to update your code:\n' +
|
|
18
|
+
'https://docs.forestadmin.com/developer-guide-agents-nodejs/data-sources/provided-data-sources/mongoose');
|
|
19
|
+
}
|
|
13
20
|
// Create collections (with only many to one relations).
|
|
14
21
|
for (const model of Object.values(connection.models)) {
|
|
15
|
-
|
|
22
|
+
const schema = schema_1.default.fromModel(model);
|
|
23
|
+
const { asFields, asModels } = options_1.default.parseOptions(model, options);
|
|
24
|
+
this.addModel(model, schema, [], null, asFields, asModels);
|
|
16
25
|
}
|
|
17
26
|
// Add one-to-many, one-to-one and many-to-many relations.
|
|
18
27
|
relations_1.default.addImplicitRelations(this.collections);
|
|
19
28
|
}
|
|
20
29
|
/** Create all collections for a given model */
|
|
21
|
-
addModel(model,
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
30
|
+
addModel(model, schema, stack, // current only
|
|
31
|
+
prefix, // prefix that we should handle in this recursion
|
|
32
|
+
asFields, // current + children
|
|
33
|
+
asModels) {
|
|
34
|
+
const localAsFields = asFields.filter(f => !asModels.some(i => f.startsWith(`${i}.`)));
|
|
35
|
+
const localAsModels = asModels.filter(f => !asModels.some(i => f.startsWith(`${i}.`)));
|
|
36
|
+
const localStack = [...stack, { prefix, asFields: localAsFields, asModels: localAsModels }];
|
|
37
|
+
this.checkAsFields(schema, prefix, localAsFields);
|
|
38
|
+
this.checkAsModels(schema, prefix, localAsModels);
|
|
39
|
+
this.addCollection(new collection_1.default(this, model, localStack));
|
|
40
|
+
for (const name of localAsModels) {
|
|
26
41
|
const subPrefix = prefix ? `${prefix}.${name}` : name;
|
|
27
|
-
|
|
42
|
+
const subAsFields = (0, helpers_1.unnest)(asFields, name);
|
|
43
|
+
const subAsModels = (0, helpers_1.unnest)(asModels, name);
|
|
44
|
+
this.addModel(model, schema, localStack, subPrefix, subAsFields, subAsModels);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
checkAsFields(schema, prefix, localAsFields) {
|
|
48
|
+
const localSchema = schema.getSubSchema(prefix);
|
|
49
|
+
for (const field of localAsFields) {
|
|
50
|
+
const name = prefix ? `${prefix}.${field}` : field;
|
|
51
|
+
if (!field.includes('.') && prefix)
|
|
52
|
+
throw new Error(`asFields contains "${name}", which can't be flattened further because ` +
|
|
53
|
+
`asModels contains "${prefix}", so it is already at the root of a collection.`);
|
|
54
|
+
if (!field.includes('.'))
|
|
55
|
+
throw new Error(`asFields contains "${name}", which can't be flattened because it is already at ` +
|
|
56
|
+
`the root of the model.`);
|
|
57
|
+
if (this.containsIntermediaryArray(localSchema, field))
|
|
58
|
+
throw new Error(`asFields contains "${name}", ` +
|
|
59
|
+
`which can't be moved to the root of the model, because it is inside of an array. ` +
|
|
60
|
+
'Either add all intermediary arrays to asModels, or remove it from asFields.');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
checkAsModels(schema, prefix, localAsModels) {
|
|
64
|
+
const localSchema = schema.getSubSchema(prefix);
|
|
65
|
+
for (const field of localAsModels) {
|
|
66
|
+
const name = prefix ? `${prefix}.${field}` : field;
|
|
67
|
+
if (this.containsIntermediaryArray(localSchema, field))
|
|
68
|
+
throw new Error(`asModels contains "${name}", ` +
|
|
69
|
+
`which can't be transformed into a model, because it is inside of an array. ` +
|
|
70
|
+
'Either add all intermediary arrays to asModels, or remove it from asModels.');
|
|
28
71
|
}
|
|
29
72
|
}
|
|
30
|
-
/**
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
73
|
+
/**
|
|
74
|
+
* When flattening a field, or transforming a field into a model, we need to check that
|
|
75
|
+
* there are no intermediary arrays. For example, if we have a schema like this:
|
|
76
|
+
* { a: [{ b: { c: String } }] } and we want to flatten a.b.c, we can't do it.
|
|
77
|
+
*/
|
|
78
|
+
containsIntermediaryArray(schema, field) {
|
|
79
|
+
let index = field.indexOf('.');
|
|
80
|
+
while (index !== -1) {
|
|
81
|
+
const prefix = field.substring(0, index);
|
|
82
|
+
if (schema.getSubSchema(prefix).isArray)
|
|
83
|
+
return true;
|
|
84
|
+
index = field.indexOf('.', index + 1);
|
|
35
85
|
}
|
|
36
|
-
|
|
37
|
-
const schema = schema_1.default.fromModel(model);
|
|
38
|
-
return new datasource_toolkit_1.Projection(...Object.keys(schema.fields).filter(field => schema.fields[field]?.['[]']?.options?.ref));
|
|
86
|
+
return false;
|
|
39
87
|
}
|
|
40
88
|
}
|
|
41
89
|
exports.default = MongooseDatasource;
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRhc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsd0VBQXlFO0FBR3pFLDhEQUE4QztBQUM5QywrREFBK0M7QUFFL0MsNkNBQXlDO0FBQ3pDLDhEQUE0QztBQUM1Qyx5RUFBeUQ7QUFFekQsTUFBcUIsa0JBQW1CLFNBQVEsbUNBQWtDO0lBQ2hGLFlBQVksVUFBc0IsRUFBRSxVQUEyQixFQUFFLEVBQUUsU0FBaUIsSUFBSTtRQUN0RixLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtZQUNuQyxNQUFNLEVBQUUsQ0FDTixNQUFNLEVBQ04saUNBQWlDO2dCQUMvQiwwREFBMEQ7Z0JBQzFELHdHQUF3RyxDQUMzRyxDQUFDO1NBQ0g7UUFFRCx3REFBd0Q7UUFDeEQsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNwRCxNQUFNLE1BQU0sR0FBRyxnQkFBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLGlCQUFhLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUUxRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDNUQ7UUFFRCwwREFBMEQ7UUFDMUQsbUJBQWlCLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCwrQ0FBK0M7SUFDdkMsUUFBUSxDQUNkLEtBQXFCLEVBQ3JCLE1BQXNCLEVBQ3RCLEtBQVksRUFBRSxlQUFlO0lBQzdCLE1BQXFC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
|
package/dist/index.js
CHANGED
|
@@ -10,7 +10,7 @@ Object.defineProperty(exports, "MongooseCollection", { enumerable: true, get: fu
|
|
|
10
10
|
var datasource_2 = require("./datasource");
|
|
11
11
|
Object.defineProperty(exports, "MongooseDatasource", { enumerable: true, get: function () { return __importDefault(datasource_2).default; } });
|
|
12
12
|
function createMongooseDataSource(connection, options = {}) {
|
|
13
|
-
return async () => new datasource_1.default(connection, options);
|
|
13
|
+
return async (logger) => new datasource_1.default(connection, options, logger);
|
|
14
14
|
}
|
|
15
15
|
exports.createMongooseDataSource = createMongooseDataSource;
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0EsOERBQThDO0FBRzlDLDJDQUE2RDtBQUFwRCxpSUFBQSxPQUFPLE9BQXNCO0FBQ3RDLDJDQUE2RDtBQUFwRCxpSUFBQSxPQUFPLE9BQXNCO0FBRXRDLFNBQWdCLHdCQUF3QixDQUN0QyxVQUFzQixFQUN0QixVQUEyQixFQUFFO0lBRTdCLE9BQU8sS0FBSyxFQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsSUFBSSxvQkFBa0IsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzdFLENBQUM7QUFMRCw0REFLQyJ9
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Model, SchemaType } from 'mongoose';
|
|
2
|
+
import { Stack } from '../types';
|
|
2
3
|
export type SchemaBranch = {
|
|
3
4
|
[key: string]: SchemaNode;
|
|
4
5
|
};
|
|
@@ -9,9 +10,17 @@ export default class MongooseSchema {
|
|
|
9
10
|
readonly fields: SchemaBranch;
|
|
10
11
|
private models;
|
|
11
12
|
static fromModel(model: Model<unknown>): MongooseSchema;
|
|
13
|
+
get schemaNode(): SchemaNode;
|
|
12
14
|
get schemaType(): SchemaType;
|
|
13
15
|
constructor(models: Record<string, Model<unknown>>, fields: SchemaBranch, isArray: boolean, isLeaf: boolean);
|
|
14
|
-
|
|
16
|
+
listPathsMatching(handle: (field: string, schema: MongooseSchema) => boolean, prefix?: string): string[];
|
|
17
|
+
/**
|
|
18
|
+
* List leafs and arrays up to a certain level
|
|
19
|
+
* Arrays are never traversed
|
|
20
|
+
*/
|
|
21
|
+
listFields(level?: number): string[];
|
|
22
|
+
applyStack(stack: Stack, skipAsModels?: boolean): MongooseSchema;
|
|
23
|
+
getSubSchema(path: string): MongooseSchema;
|
|
15
24
|
/**
|
|
16
25
|
* Build a tree of SchemaType from a mongoose schema.
|
|
17
26
|
* This removes most complexity from using prefixes, nested schemas and array types
|
package/dist/mongoose/schema.js
CHANGED
|
@@ -8,8 +8,11 @@ class MongooseSchema {
|
|
|
8
8
|
static fromModel(model) {
|
|
9
9
|
return new MongooseSchema(model.db.models, this.buildFields(model.schema), false, false);
|
|
10
10
|
}
|
|
11
|
+
get schemaNode() {
|
|
12
|
+
return this.isLeaf ? this.fields.content : this.fields;
|
|
13
|
+
}
|
|
11
14
|
get schemaType() {
|
|
12
|
-
if (this.
|
|
15
|
+
if (this.isLeaf) {
|
|
13
16
|
return this.fields.content;
|
|
14
17
|
}
|
|
15
18
|
throw new Error(`Schema is not a leaf.`);
|
|
@@ -20,14 +23,81 @@ class MongooseSchema {
|
|
|
20
23
|
this.isArray = isArray;
|
|
21
24
|
this.isLeaf = isLeaf;
|
|
22
25
|
}
|
|
23
|
-
|
|
26
|
+
listPathsMatching(handle, prefix) {
|
|
27
|
+
if (this.isLeaf)
|
|
28
|
+
return [];
|
|
29
|
+
return Object.keys(this.fields).flatMap(field => {
|
|
30
|
+
const schema = this.getSubSchema(field);
|
|
31
|
+
const subPrefix = `${prefix ? `${prefix}.` : ''}${field}`;
|
|
32
|
+
const subFields = schema
|
|
33
|
+
.listPathsMatching(handle, subPrefix)
|
|
34
|
+
.map(subField => `${field}.${subField}`);
|
|
35
|
+
return handle(subPrefix, schema) ? [field, ...subFields] : subFields;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* List leafs and arrays up to a certain level
|
|
40
|
+
* Arrays are never traversed
|
|
41
|
+
*/
|
|
42
|
+
listFields(level = Infinity) {
|
|
43
|
+
if (this.isLeaf)
|
|
44
|
+
throw new Error('Cannot list fields on a leaf schema.');
|
|
45
|
+
if (level === 0)
|
|
46
|
+
throw new Error('Level must be greater than 0.');
|
|
47
|
+
if (level === 1)
|
|
48
|
+
return Object.keys(this.fields);
|
|
49
|
+
return Object.keys(this.fields).flatMap(field => {
|
|
50
|
+
const schema = this.getSubSchema(field);
|
|
51
|
+
if (schema.isLeaf || schema.isArray)
|
|
52
|
+
return [field];
|
|
53
|
+
return schema.listFields(level - 1).map(subField => `${field}.${subField}`);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
applyStack(stack, skipAsModels = false) {
|
|
57
|
+
if (stack.length === 0)
|
|
58
|
+
throw new Error('Stack can never be empty.');
|
|
59
|
+
const step = stack.pop();
|
|
60
|
+
const subSchema = this.getSubSchema(step.prefix);
|
|
61
|
+
for (const field of step.asFields) {
|
|
62
|
+
const fieldSchema = subSchema.getSubSchema(field);
|
|
63
|
+
(0, helpers_1.recursiveDelete)(subSchema.fields, field);
|
|
64
|
+
subSchema.fields[field.replace(/\./g, '@@@')] = fieldSchema.isArray
|
|
65
|
+
? { '[]': fieldSchema.schemaNode }
|
|
66
|
+
: fieldSchema.schemaNode;
|
|
67
|
+
}
|
|
68
|
+
if (stack.length) {
|
|
69
|
+
subSchema.fields._id = new mongoose_1.Schema.Types.String('__placeholder__');
|
|
70
|
+
subSchema.fields.parent = this.applyStack(stack).fields;
|
|
71
|
+
subSchema.fields.parentId = subSchema.fields.parent._id;
|
|
72
|
+
}
|
|
73
|
+
if (!skipAsModels) {
|
|
74
|
+
for (const field of step.asModels) {
|
|
75
|
+
(0, helpers_1.recursiveDelete)(this.fields, field);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
// Here we actually should recurse into the subSchema and add the _id and parentId fields
|
|
80
|
+
// to the virtual one-to-one relations.
|
|
81
|
+
//
|
|
82
|
+
// The issue is that we can't do that because we don't know where the relations are after
|
|
83
|
+
// the first level of nesting (we would need to have the complete asModel / asFields like in
|
|
84
|
+
// the datasource.ts file).
|
|
85
|
+
//
|
|
86
|
+
// Because of that, we need to work around the missing fields in:
|
|
87
|
+
// - pipeline/virtual-fields.ts file: we're throwing an error when we can't guess the value
|
|
88
|
+
// of a given _id / parentId field.
|
|
89
|
+
// - pipeline/filter.ts: we're using an educated guess for the types of the _id / parentId
|
|
90
|
+
// fields (String or ObjectId)
|
|
91
|
+
}
|
|
92
|
+
stack.push(step);
|
|
93
|
+
return subSchema;
|
|
94
|
+
}
|
|
95
|
+
getSubSchema(path) {
|
|
24
96
|
// Terminating condition
|
|
25
|
-
if (path
|
|
97
|
+
if (!path)
|
|
26
98
|
return this;
|
|
27
99
|
// General case: go down the tree
|
|
28
|
-
const
|
|
29
|
-
const prefix = dotIndex === -1 ? path : path.substring(0, dotIndex);
|
|
30
|
-
const suffix = dotIndex === -1 ? null : path.substring(dotIndex + 1);
|
|
100
|
+
const [prefix, suffix] = path.split(/\.(.*)/);
|
|
31
101
|
let isArray = false;
|
|
32
102
|
let isLeaf = false;
|
|
33
103
|
let child = this.fields[prefix];
|
|
@@ -35,8 +105,12 @@ class MongooseSchema {
|
|
|
35
105
|
if (prefix.endsWith('__manyToOne')) {
|
|
36
106
|
const foreignKeyName = prefix.substring(0, prefix.length - '__manyToOne'.length);
|
|
37
107
|
const relationName = this.fields[foreignKeyName].options.ref;
|
|
108
|
+
// FIXME We should definitively apply the foreign collection stack here
|
|
38
109
|
child = MongooseSchema.fromModel(this.models[relationName]).fields;
|
|
39
110
|
}
|
|
111
|
+
else if (!child) {
|
|
112
|
+
throw new Error(`Field '${prefix}' not found. Available fields are: ${this.listFields()}`);
|
|
113
|
+
}
|
|
40
114
|
// Traverse arrays
|
|
41
115
|
if (child['[]']) {
|
|
42
116
|
child = child['[]'];
|
|
@@ -47,12 +121,7 @@ class MongooseSchema {
|
|
|
47
121
|
child = { content: child };
|
|
48
122
|
isLeaf = true;
|
|
49
123
|
}
|
|
50
|
-
|
|
51
|
-
if (withParent && !prefix.endsWith('__manyToOne')) {
|
|
52
|
-
const id = new mongoose_1.Schema.Types.String(prefix, {}, 'String');
|
|
53
|
-
child = { ...child, _id: id, parentId: this.fields._id, parent: this.fields };
|
|
54
|
-
}
|
|
55
|
-
return new MongooseSchema(this.models, child, isArray, isLeaf).getSubSchema(suffix, withParent);
|
|
124
|
+
return new MongooseSchema(this.models, child, isArray, isLeaf).getSubSchema(suffix);
|
|
56
125
|
}
|
|
57
126
|
/**
|
|
58
127
|
* Build a tree of SchemaType from a mongoose schema.
|
|
@@ -86,4 +155,4 @@ class MongooseSchema {
|
|
|
86
155
|
}
|
|
87
156
|
}
|
|
88
157
|
exports.default = MongooseSchema;
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
158
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vbmdvb3NlL3NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlDQUF5QztBQUN6Qyx1REFBdUQ7QUFDdkQsdUNBQXFEO0FBR3JELDhDQUFpRTtBQUtqRSxNQUFxQixjQUFjO0lBT2pDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBcUI7UUFDcEMsT0FBTyxJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDekQsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFxQixDQUFDO1NBQzFDO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxZQUNFLE1BQXNDLEVBQ3RDLE1BQW9CLEVBQ3BCLE9BQWdCLEVBQ2hCLE1BQWU7UUFFZixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsaUJBQWlCLENBQ2YsTUFBMEQsRUFDMUQsTUFBZTtRQUVmLElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUUzQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM5QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sU0FBUyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7WUFDMUQsTUFBTSxTQUFTLEdBQUcsTUFBTTtpQkFDckIsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQztpQkFDcEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQztZQUUzQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVLENBQUMsS0FBSyxHQUFHLFFBQVE7UUFDekIsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztRQUN6RSxJQUFJLEtBQUssS0FBSyxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ2xFLElBQUksS0FBSyxLQUFLLENBQUM7WUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWpELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzlDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEMsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVwRCxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQVksRUFBRSxZQUFZLEdBQUcsS0FBSztRQUMzQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUVyRSxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDekIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFakQsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pDLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEQsSUFBQSx5QkFBZSxFQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxPQUFPO2dCQUNqRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRTtnQkFDbEMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7U0FDNUI7UUFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDaEIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNsRSxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUN4RCxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7U0FDekQ7UUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDakMsSUFBQSx5QkFBZSxFQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDckM7U0FDRjthQUFNO1lBQ0wseUZBQXlGO1lBQ3pGLHVDQUF1QztZQUN2QyxFQUFFO1lBQ0YseUZBQXlGO1lBQ3pGLDRGQUE0RjtZQUM1RiwyQkFBMkI7WUFDM0IsRUFBRTtZQUNGLGlFQUFpRTtZQUNqRSwyRkFBMkY7WUFDM0YscUNBQXFDO1lBQ3JDLDBGQUEwRjtZQUMxRixnQ0FBZ0M7U0FDakM7UUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWpCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBWTtRQUN2Qix3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUV2QixpQ0FBaUM7UUFDakMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQWlCLENBQUM7UUFFaEQscUJBQXFCO1FBQ3JCLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUNsQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFFN0QsdUVBQXVFO1lBQ3ZFLEtBQUssR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7U0FDcEU7YUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxNQUFNLHNDQUFzQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzVGO1FBRUQsa0JBQWtCO1FBQ2xCLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2YsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQWlCLENBQUM7WUFDcEMsT0FBTyxHQUFHLElBQUksQ0FBQztTQUNoQjtRQUVELG9DQUFvQztRQUNwQyxJQUFJLEtBQUssWUFBWSxxQkFBVSxFQUFFO1lBQy9CLEtBQUssR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUMzQixNQUFNLEdBQUcsSUFBSSxDQUFDO1NBQ2Y7UUFFRCxPQUFPLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVEOzs7T0FHRztJQUNLLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBYyxFQUFFLEtBQUssR0FBRyxDQUFDO1FBQ2xELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUVqQixLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDeEQsMERBQTBEO1lBQzFELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUNyRixvQ0FBb0M7Z0JBQ3BDLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssaUJBQWlCLEVBQUU7b0JBQ2hELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQWdCLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNyRSxLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7d0JBQ3hELElBQUEsc0JBQVksRUFBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLElBQUksT0FBTyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7aUJBQ3ZEO3FCQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLEVBQUU7b0JBQ3pELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQWdCLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNyRSxLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7d0JBQ3hELElBQUEsc0JBQVksRUFBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLE9BQU8sT0FBTyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7aUJBQzFEO3FCQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssYUFBYSxFQUFFO29CQUNuRCxJQUFBLHNCQUFZLEVBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxLQUFLLEVBQUcsS0FBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUMxRDtxQkFBTTtvQkFDTCxJQUFBLHNCQUFZLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDbEM7YUFDRjtTQUNGO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUFsTEQsaUNBa0xDIn0=
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,35 @@
|
|
|
1
|
-
export type
|
|
2
|
-
asModels?:
|
|
1
|
+
export type FlattenOptions = {
|
|
2
|
+
asModels?: string[];
|
|
3
|
+
asFields?: string[];
|
|
3
4
|
};
|
|
5
|
+
export type ManualFlattenOptions = {
|
|
6
|
+
flattenMode: 'manual';
|
|
7
|
+
flattenOptions?: {
|
|
8
|
+
[modelName: string]: {
|
|
9
|
+
asModels?: string[];
|
|
10
|
+
asFields?: Array<string | {
|
|
11
|
+
field: string;
|
|
12
|
+
level: number;
|
|
13
|
+
}>;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export type AutoFlattenOptions = {
|
|
18
|
+
flattenMode: 'auto';
|
|
19
|
+
};
|
|
20
|
+
export type NoFlattenOptions = {
|
|
21
|
+
flattenMode: 'none';
|
|
22
|
+
};
|
|
23
|
+
export type LegacyFlattenOptions = {
|
|
24
|
+
flattenMode?: 'legacy';
|
|
25
|
+
asModels?: {
|
|
26
|
+
[modelName: string]: string[];
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
export type MongooseOptions = ManualFlattenOptions | AutoFlattenOptions | NoFlattenOptions | LegacyFlattenOptions;
|
|
30
|
+
export type Stack = {
|
|
31
|
+
prefix: string | null;
|
|
32
|
+
asFields: string[];
|
|
33
|
+
asModels: string[];
|
|
34
|
+
}[];
|
|
4
35
|
//# sourceMappingURL=types.d.ts.map
|