@forestadmin/datasource-mongoose 1.2.6 → 1.3.1

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.
@@ -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
- prefix: string;
6
- ignoredFields: string[];
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[]>;
@@ -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, prefix = null, ignoredFields = []) {
21
- super(prefix ? (0, helpers_1.escape)(`${model.modelName}.${prefix}`) : model.modelName, dataSource);
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.prefix = prefix;
24
- this.ignoredFields = ignoredFields;
25
+ this.stack = stack;
25
26
  this.enableCount();
26
- this.addFields(fields_1.default.buildFieldsSchema(model, prefix, ignoredFields));
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, data) {
56
- // If there is no prefix, we can delegate the work to mongoose directly.
57
- if (!this.prefix) {
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 data.map((record, index) => ({ _id: insertedIds[index], ...record }));
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 fieldName = this.prefix.substring(this.prefix.lastIndexOf('.') + 1);
63
- const schema = schema_1.default.fromModel(this.model).getSubSchema(this.prefix);
64
- const updates = new Map();
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
- if (!updates.has(rootId))
72
- updates.set(rootId, { path, records: [] });
83
+ const rootIdString = String(rootId);
84
+ if (!updates[rootIdString])
85
+ updates[rootIdString] = { rootId, path, records: [] };
73
86
  // unwrap 'content' on leafs
74
- updates.get(rootId).records.push(schema.isLeaf ? rest.content : rest);
87
+ updates[rootIdString].records.push(schema.isLeaf ? rest.content : rest);
75
88
  results.push({
76
- _id: schema.isArray // arrays have indexes in their ids
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 = [...updates.entries()].map(async ([rootId, { path, records }]) => this.model.updateOne({ _id: rootId }, schema.isArray
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, patch) {
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 (!this.prefix) {
106
+ if (this.stack.length < 2) {
96
107
  // We are updating a real document, we can delegate the work to mongoose directly.
97
- if (ids.length > 1) {
98
- await this.model.updateMany({ _id: ids }, patch, { rawResult: true });
99
- }
100
- else {
101
- await this.model.updateOne({ _id: ids }, patch, { rawResult: true });
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).getSubSchema(this.prefix);
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(async ([path, rootIds]) => {
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
- if (ids.length > 1 || rootIds.length > 1) {
126
- await this.model.updateMany({ _id: rootIds }, subdocPatch, { rawResult: true });
127
- }
128
- else {
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 (!this.prefix) {
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).getSubSchema(this.prefix);
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.prefix),
172
- ...virtual_fields_1.default.addVirtual(this.model, this.prefix, this.ignoredFields, lookupProjection),
173
- ...lookup_1.default.lookup(this.model, this.prefix, lookupProjection),
174
- ...filter_1.default.filter(this.model, this.prefix, filter),
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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
@@ -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
- /** Get list of cuts for a given model */
10
- private getCuts;
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
@@ -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
- this.addModel(model, this.getCuts(options, model));
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, cuts, prefix = null) {
22
- const ignore = [...new Set([...cuts.columns, ...Object.keys(cuts.relations)])];
23
- this.addCollection(new collection_1.default(this, model, prefix, ignore));
24
- for (const name of ignore) {
25
- const subProjection = cuts.relations[name] ?? new datasource_toolkit_1.Projection();
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
- this.addModel(model, subProjection, subPrefix);
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
- /** Get list of cuts for a given model */
31
- getCuts(options, model) {
32
- // A list was provided by the customer, use it.
33
- if (options?.asModels?.[model.modelName]) {
34
- return new datasource_toolkit_1.Projection(...options.asModels[model.modelName].map(item => item.replace(/\./g, ':')));
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
- // When no cuts are provided, only cut on list of references
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRhc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsd0VBQTZFO0FBRzdFLDhEQUE4QztBQUM5QywrREFBK0M7QUFFL0MseUVBQXlEO0FBRXpELE1BQXFCLGtCQUFtQixTQUFRLG1DQUFrQztJQUNoRixZQUFZLFVBQXNCLEVBQUUsVUFBMkIsRUFBRTtRQUMvRCxLQUFLLEVBQUUsQ0FBQztRQUVSLHdEQUF3RDtRQUN4RCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3BELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDcEQ7UUFFRCwwREFBMEQ7UUFDMUQsbUJBQWlCLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCwrQ0FBK0M7SUFDdkMsUUFBUSxDQUFDLEtBQXFCLEVBQUUsSUFBZ0IsRUFBRSxTQUFpQixJQUFJO1FBQzdFLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRS9FLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxvQkFBa0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRXhFLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxFQUFFO1lBQ3pCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSwrQkFBVSxFQUFFLENBQUM7WUFDL0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUNoRDtJQUNILENBQUM7SUFFRCx5Q0FBeUM7SUFDakMsT0FBTyxDQUFDLE9BQXdCLEVBQUUsS0FBcUI7UUFDN0QsK0NBQStDO1FBQy9DLElBQUksT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN4QyxPQUFPLElBQUksK0JBQVUsQ0FDbkIsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUMzRSxDQUFDO1NBQ0g7UUFFRCw0REFBNEQ7UUFDNUQsTUFBTSxNQUFNLEdBQUcsZ0JBQWMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFL0MsT0FBTyxJQUFJLCtCQUFVLENBQ25CLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FDMUYsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTFDRCxxQ0EwQ0MifQ==
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0EsOERBQThDO0FBRzlDLDJDQUE2RDtBQUFwRCxpSUFBQSxPQUFPLE9BQXNCO0FBQ3RDLDJDQUE2RDtBQUFwRCxpSUFBQSxPQUFPLE9BQXNCO0FBRXRDLFNBQWdCLHdCQUF3QixDQUN0QyxVQUFzQixFQUN0QixVQUEyQixFQUFFO0lBRTdCLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQyxJQUFJLG9CQUFrQixDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBTEQsNERBS0MifQ==
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
- getSubSchema(path: string, withParent?: boolean): MongooseSchema;
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
@@ -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.fields.content instanceof mongoose_1.SchemaType) {
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
- getSubSchema(path, withParent = false) {
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 === null)
97
+ if (!path)
26
98
  return this;
27
99
  // General case: go down the tree
28
- const dotIndex = path.indexOf('.');
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
- // If we want parent to be included, re-add the rootSchema
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vbmdvb3NlL3NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlDQUF5QztBQUN6Qyx1REFBdUQ7QUFDdkQsdUNBQXFEO0FBRXJELDhDQUFnRDtBQUtoRCxNQUFxQixjQUFjO0lBT2pDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBcUI7UUFDcEMsT0FBTyxJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLFlBQVkscUJBQVUsRUFBRTtZQUM3QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBcUIsQ0FBQztTQUMxQztRQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsWUFDRSxNQUFzQyxFQUN0QyxNQUFvQixFQUNwQixPQUFnQixFQUNoQixNQUFlO1FBRWYsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFZLEVBQUUsVUFBVSxHQUFHLEtBQUs7UUFDM0Msd0JBQXdCO1FBQ3hCLElBQUksSUFBSSxLQUFLLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUUvQixpQ0FBaUM7UUFDakMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxN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
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vbmdvb3NlL3NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlDQUF5QztBQUN6Qyx1REFBdUQ7QUFDdkQsdUNBQXFEO0FBR3JELDhDQUFpRTtBQUtqRSxNQUFxQixjQUFjO0lBT2pDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBcUI7UUFDcEMsT0FBTyxJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDekQsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFxQixDQUFDO1NBQzFDO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxZQUNFLE1BQXNDLEVBQ3RDLE1BQW9CLEVBQ3BCLE9BQWdCLEVBQ2hCLE1BQWU7UUFFZixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsaUJBQWlCLENBQ2YsTUFBMEQsRUFDMUQsTUFBZTtRQUVmLElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLEVB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
package/dist/types.d.ts CHANGED
@@ -1,4 +1,35 @@
1
- export type MongooseOptions = {
2
- asModels?: Record<string, string[]>;
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