@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.
@@ -15,6 +15,16 @@ export declare function escape(str: string): string;
15
15
  * a == { field: { subfield: 42 } }
16
16
  */
17
17
  export declare function recursiveSet(target: any, path: string, value: unknown): void;
18
+ /**
19
+ * Remove a value in a plain object recursively
20
+ * If the value is an object and is empty, it will be removed.
21
+ *
22
+ * @example
23
+ * const a = { field: { subfield: 42 } };
24
+ * recursiveDelete(a, 'field.subfield');
25
+ * a == { }
26
+ */
27
+ export declare function recursiveDelete(target: any, path: string): void;
18
28
  /**
19
29
  * Compare two ids.
20
30
  * This is useful to ensure we perform array operations in the right order.
@@ -59,4 +69,14 @@ export declare function replaceMongoTypes(records: any): any;
59
69
  * == { 'authors.1.name': 'Asimov' }
60
70
  */
61
71
  export declare function buildSubdocumentPatch(path: string, patch: RecordData, isLeaf: boolean): RecordData;
72
+ /**
73
+ * Unflattend patches and records
74
+ */
75
+ export declare function unflattenRecord(record: RecordData, asFields: string[], patchMode?: boolean): RecordData;
76
+ /**
77
+ * Similar to projection.unnest
78
+ * @example
79
+ * unnest(['firstname', 'book.title', 'book.author'], 'book') == ['title', 'author']
80
+ */
81
+ export declare function unnest(strings: string[], prefix: string): string[];
62
82
  //# sourceMappingURL=helpers.d.ts.map
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildSubdocumentPatch = exports.replaceMongoTypes = exports.groupIdsByPath = exports.splitId = exports.compareIds = exports.recursiveSet = exports.escape = void 0;
3
+ exports.unnest = exports.unflattenRecord = exports.buildSubdocumentPatch = exports.replaceMongoTypes = exports.groupIdsByPath = exports.splitId = exports.compareIds = exports.recursiveDelete = exports.recursiveSet = exports.escape = void 0;
4
4
  const mongoose_1 = require("mongoose");
5
5
  /**
6
6
  * Replace dots by underscores.
@@ -33,6 +33,30 @@ function recursiveSet(target, path, value) {
33
33
  }
34
34
  }
35
35
  exports.recursiveSet = recursiveSet;
36
+ /**
37
+ * Remove a value in a plain object recursively
38
+ * If the value is an object and is empty, it will be removed.
39
+ *
40
+ * @example
41
+ * const a = { field: { subfield: 42 } };
42
+ * recursiveDelete(a, 'field.subfield');
43
+ * a == { }
44
+ */
45
+ function recursiveDelete(target, path) {
46
+ const index = path.indexOf('.');
47
+ if (index !== -1) {
48
+ const prefix = path.substring(0, index);
49
+ const suffix = path.substring(index + 1);
50
+ recursiveDelete(target[prefix], suffix);
51
+ if (Object.keys(target[prefix]).length === 0) {
52
+ delete target[prefix];
53
+ }
54
+ }
55
+ else {
56
+ delete target[path];
57
+ }
58
+ }
59
+ exports.recursiveDelete = recursiveDelete;
36
60
  /**
37
61
  * Compare two ids.
38
62
  * This is useful to ensure we perform array operations in the right order.
@@ -129,4 +153,32 @@ function buildSubdocumentPatch(path, patch, isLeaf) {
129
153
  return cleanPatch;
130
154
  }
131
155
  exports.buildSubdocumentPatch = buildSubdocumentPatch;
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHVDQUFrRDtBQUVsRDs7Ozs7R0FLRztBQUNILFNBQWdCLE1BQU0sQ0FBQyxHQUFXO0lBQ2hDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUZELHdCQUVDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLFlBQVksQ0FBQyxNQUFXLEVBQUUsSUFBWSxFQUFFLEtBQWM7SUFDcEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVoQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtRQUNoQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6QyxNQUFNLENBQUMsTUFBTSxNQUFiLE1BQU0sQ0FBQyxNQUFNLElBQU0sRUFBRSxFQUFDO1FBRXRCLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzdDO1NBQU07UUFDTCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0tBQ3RCO0FBQ0gsQ0FBQztBQVpELG9DQVlDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLFVBQVUsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUM3QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFDekIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QixNQUFNLE1BQU0sR0FBRyxDQUFDLENB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
156
+ /**
157
+ * Unflattend patches and records
158
+ */
159
+ function unflattenRecord(record, asFields, patchMode = false) {
160
+ const newRecord = { ...record };
161
+ for (const field of asFields) {
162
+ const alias = field.replace(/\./g, '@@@');
163
+ const value = newRecord[alias];
164
+ if (value !== undefined) {
165
+ if (patchMode)
166
+ newRecord[field] = value;
167
+ else
168
+ recursiveSet(newRecord, field, value);
169
+ delete newRecord[alias];
170
+ }
171
+ }
172
+ return newRecord;
173
+ }
174
+ exports.unflattenRecord = unflattenRecord;
175
+ /**
176
+ * Similar to projection.unnest
177
+ * @example
178
+ * unnest(['firstname', 'book.title', 'book.author'], 'book') == ['title', 'author']
179
+ */
180
+ function unnest(strings, prefix) {
181
+ return strings.filter(f => f.startsWith(`${prefix}.`)).map(f => f.substring(prefix.length + 1));
182
+ }
183
+ exports.unnest = unnest;
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHVDQUFrRDtBQUVsRDs7Ozs7R0FLRztBQUNILFNBQWdCLE1BQU0sQ0FBQyxHQUFXO0lBQ2hDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUZELHdCQUVDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLFlBQVksQ0FBQyxNQUFXLEVBQUUsSUFBWSxFQUFFLEtBQWM7SUFDcEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVoQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtRQUNoQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6QyxNQUFNLENBQUMsTUFBTSxNQUFiLE1BQU0sQ0FBQyxNQUFNLElBQU0sRUFBRSxFQUFDO1FBRXRCLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzdDO1NBQU07UUFDTCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0tBQ3RCO0FBQ0gsQ0FBQztBQVpELG9DQVlDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQixlQUFlLENBQUMsTUFBVyxFQUFFLElBQVk7SUFDdkQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVoQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtRQUNoQixNQUFNLE1BQU0sR0FBRyxJ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
@@ -0,0 +1,9 @@
1
+ import { Model } from 'mongoose';
2
+ import { FlattenOptions, MongooseOptions } from '../types';
3
+ export default class OptionsParser {
4
+ static parseOptions(model: Model<unknown>, options: MongooseOptions): FlattenOptions;
5
+ private static getAutoFlattenOptions;
6
+ private static getManualFlattenOptions;
7
+ private static getLegacyFlattenOptions;
8
+ }
9
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const schema_1 = __importDefault(require("../mongoose/schema"));
7
+ class OptionsParser {
8
+ static parseOptions(model, options) {
9
+ const schema = schema_1.default.fromModel(model);
10
+ switch (options.flattenMode) {
11
+ case 'auto':
12
+ return this.getAutoFlattenOptions(schema);
13
+ case 'manual':
14
+ return this.getManualFlattenOptions(schema, options, model.modelName);
15
+ case 'none':
16
+ return { asFields: [], asModels: [] };
17
+ default:
18
+ return this.getLegacyFlattenOptions(schema, options, model.modelName);
19
+ }
20
+ }
21
+ static getAutoFlattenOptions(schema) {
22
+ // Split on all arrays of objects and arrays of references.
23
+ const asModels = schema
24
+ .listPathsMatching((_, s) => s.isArray && (!s.isLeaf || s.schemaNode?.options?.ref))
25
+ .sort();
26
+ // flatten all fields which are nested
27
+ const asFields = schema.listPathsMatching((field, pathSchema) => {
28
+ // on veut flatten si on est à plus de 1 niveau de profondeur par rapport au asModels
29
+ const minDistance = asModels.reduce((acc, asModel) => {
30
+ return field.startsWith(`${asModel}.`)
31
+ ? Math.min(acc, field.split('.').length - asModel.split('.').length)
32
+ : acc;
33
+ }, field.split('.').length);
34
+ return !asModels.includes(field) && pathSchema.isLeaf && minDistance > 1;
35
+ });
36
+ return { asFields, asModels };
37
+ }
38
+ static getManualFlattenOptions(schema, options, modelName) {
39
+ // If the user specified either asModels or asFields for this model, we apply it.
40
+ const asModels = (options?.flattenOptions?.[modelName]?.asModels ?? [])
41
+ .map(f => f.replace(/:/g, '.'))
42
+ .sort();
43
+ const asFields = (options?.flattenOptions?.[modelName]?.asFields ?? [])
44
+ .flatMap(item => {
45
+ const field = (typeof item === 'string' ? item : item.field).replace(/:/g, '.');
46
+ const level = typeof item === 'string' ? 99 : item.level;
47
+ const subSchema = schema.getSubSchema(field);
48
+ return subSchema.isLeaf ? [field] : subSchema.listFields(level).map(f => `${field}.${f}`);
49
+ })
50
+ .filter(f => !asModels.includes(f)) // asModels takes precedence over asFields
51
+ .sort(); // sort so that subfields appear after their parent
52
+ return { asFields, asModels };
53
+ }
54
+ static getLegacyFlattenOptions(schema, options, modelName) {
55
+ let asFields;
56
+ let asModels;
57
+ if (options?.asModels?.[modelName]) {
58
+ // [legacy mode] retro-compatibility when customer provided asModels
59
+ const cuts = new Set(options.asModels[modelName].map(f => f.replace(/:/g, '.')));
60
+ for (let field of cuts) {
61
+ while (field.lastIndexOf('.') !== -1) {
62
+ field = field.substring(0, field.lastIndexOf('.'));
63
+ cuts.add(field);
64
+ }
65
+ }
66
+ asFields = [];
67
+ asModels = [...cuts].sort();
68
+ }
69
+ else {
70
+ // [legacy mode] retro-compatibility when customer did not provice anything
71
+ asFields = [];
72
+ asModels = Object.keys(schema.fields)
73
+ .filter(field => schema.fields[field]?.['[]']?.options?.ref)
74
+ .sort();
75
+ }
76
+ return { asFields, asModels };
77
+ }
78
+ }
79
+ exports.default = OptionsParser;
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsZ0VBQWdEO0FBUWhELE1BQXFCLGFBQWE7SUFDaEMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFxQixFQUFFLE9BQXdCO1FBQ2pFLE1BQU0sTUFBTSxHQUFHLGdCQUFjLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRS9DLFFBQVEsT0FBTyxDQUFDLFdBQVcsRUFBRTtZQUMzQixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUMsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3hFLEtBQUssTUFBTTtnQkFDVCxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDeEM7Z0JBQ0UsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDekU7SUFDSCxDQUFDO0lBRU8sTUFBTSxDQUFDLHFCQUFxQixDQUFDLE1BQXNCO1FBQ3pELDJEQUEyRDtRQUMzRCxNQUFNLFFBQVEsR0FBRyxNQUFNO2FBQ3BCLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNuRixJQUFJLEVBQUUsQ0FBQztRQUVWLHNDQUFzQztRQUN0QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsaUJB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
@@ -1,8 +1,9 @@
1
1
  import { PaginatedFilter } from '@forestadmin/datasource-toolkit';
2
2
  import { Model, PipelineStage } from 'mongoose';
3
+ import { Stack } from '../../types';
3
4
  /** Transform a forest admin filter into mongo pipeline */
4
5
  export default class FilterGenerator {
5
- static filter(model: Model<unknown>, prefix: string | null, filter: PaginatedFilter): PipelineStage[];
6
+ static filter(model: Model<unknown>, stack: Stack, filter: PaginatedFilter): PipelineStage[];
6
7
  private static computeMatch;
7
8
  private static formatAndCastLeafValue;
8
9
  private static buildMatchCondition;
@@ -12,5 +13,6 @@ export default class FilterGenerator {
12
13
  private static computeFields;
13
14
  private static formatNestedFieldPath;
14
15
  private static formatStringFieldName;
16
+ private static getFieldMetadata;
15
17
  }
16
18
  //# sourceMappingURL=filter.d.ts.map
@@ -10,11 +10,10 @@ const schema_1 = __importDefault(require("../../mongoose/schema"));
10
10
  const STRING_OPERATORS = ['Like', 'ILike', 'NotContains', 'LongerThan', 'ShorterThan'];
11
11
  /** Transform a forest admin filter into mongo pipeline */
12
12
  class FilterGenerator {
13
- static filter(model, prefix, filter) {
14
- const schema = schema_1.default.fromModel(model).getSubSchema(prefix, true);
13
+ static filter(model, stack, filter) {
15
14
  const fields = new Set();
16
15
  const tree = filter?.conditionTree;
17
- const match = this.computeMatch(schema, tree, fields);
16
+ const match = this.computeMatch(model, stack, tree, fields);
18
17
  const sort = this.computeSort(filter?.sort);
19
18
  const pipeline = [];
20
19
  if (fields.size)
@@ -29,10 +28,11 @@ class FilterGenerator {
29
28
  pipeline.push({ $limit: filter.page.limit });
30
29
  return pipeline;
31
30
  }
32
- static computeMatch(schema, tree, fields) {
31
+ static computeMatch(model, stack, tree, fields) {
32
+ const schema = schema_1.default.fromModel(model).applyStack(stack, true);
33
33
  if (tree instanceof datasource_toolkit_1.ConditionTreeBranch) {
34
34
  return {
35
- [`$${tree.aggregator.toLowerCase()}`]: tree.conditions.map(condition => this.computeMatch(schema, condition, fields)),
35
+ [`$${tree.aggregator.toLowerCase()}`]: tree.conditions.map(condition => this.computeMatch(model, stack, condition, fields)),
36
36
  };
37
37
  }
38
38
  if (tree instanceof datasource_toolkit_1.ConditionTreeLeaf) {
@@ -48,7 +48,7 @@ class FilterGenerator {
48
48
  // is used after the request (for instance for "after hooks").
49
49
  let { value } = leaf;
50
50
  leaf.field = this.formatNestedFieldPath(leaf.field);
51
- const { isArray, schemaType: { instance }, } = schema.getSubSchema(leaf.field, true);
51
+ const [isArray, instance] = this.getFieldMetadata(schema, leaf.field);
52
52
  // @fixme I'm really not sure that this can work in all cases.
53
53
  // It assumes that the type of the value is the same than the type of the column
54
54
  // which is not the case for many operators.
@@ -140,6 +140,23 @@ class FilterGenerator {
140
140
  parts.push(`string_${parts.pop()}`);
141
141
  return parts.join('.');
142
142
  }
143
+ static getFieldMetadata(schema, field) {
144
+ // nested _ids are strings
145
+ let isArray;
146
+ let instance;
147
+ try {
148
+ // This may crash when we query virtual one to one relationships, because their virtual
149
+ // fields are not in the schema (This is documented in MongooseSchema)
150
+ const subSchema = schema.getSubSchema(field);
151
+ isArray = subSchema.isArray;
152
+ instance = subSchema.schemaType.instance;
153
+ }
154
+ catch {
155
+ isArray = false;
156
+ instance = 'String';
157
+ }
158
+ return [isArray, instance];
159
+ }
143
160
  }
144
161
  exports.default = FilterGenerator;
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL3BpcGVsaW5lL2ZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHdFQU15QztBQUN6QyxpQ0FBaUM7QUFDakMsdUNBQXdFO0FBRXhFLG1FQUFtRDtBQUVuRCxNQUFNLGdCQUFnQixHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBRXZGLDBEQUEwRDtBQUMxRCxNQUFxQixlQUFlO0lBQ2xDLE1BQU0sQ0FBQyxNQUFNLENBQ1gsS0FBcUIsRUFDckIsTUFBcUIsRUFDckIsTUFBdUI7UUFFdkIsTUFBTSxNQUFNLEdBQUcsZ0JBQWMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUxRSxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxHQUFHLE1BQU0sRUFBRSxhQUFhLENBQUM7UUFDbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3RELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTVDLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLE1BQU0sQ0FBQyxJQUFJO1lBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDM0QsSUFBSSxLQUFLO1lBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLElBQUksSUFBSTtZQUFFLFFBQVEsQ0FBQyxJQUFJLENB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
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL3BpcGVsaW5lL2ZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHdFQU15QztBQUN6QyxpQ0FBaUM7QUFDakMsdUNBQXdFO0FBRXhFLG1FQUFtRDtBQUduRCxNQUFNLGdCQUFnQixHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBRXZGLDBEQUEwRDtBQUMxRCxNQUFxQixlQUFlO0lBQ2xDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBcUIsRUFBRSxLQUFZLEVBQUUsTUFBdUI7UUFDeEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUNqQyxNQUFNLElBQUksR0FBRyxNQUFNLEVBQUUsYUFBYSxDQUFDO1FBQ25DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDNUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFNUMsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksTUFBTSxDQUFDLElBQUk7WUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMzRCxJQUFJLEtBQUs7WUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxJQUFJO1lBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLElBQUksTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEtBQUssU0FBUztZ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
@@ -1,11 +1,12 @@
1
1
  import { Projection } from '@forestadmin/datasource-toolkit';
2
2
  import { Model, PipelineStage } from 'mongoose';
3
+ import { Stack } from '../../types';
3
4
  /**
4
5
  * Transform a forest admin projection into a mongo pipeline that performs the lookups
5
6
  * and transformations to target them
6
7
  */
7
8
  export default class LookupGenerator {
8
- static lookup(model: Model<unknown>, prefix: string, projection: Projection): PipelineStage[];
9
+ static lookup(model: Model<unknown>, stack: Stack, projection: Projection): PipelineStage[];
9
10
  private static lookupProjection;
10
11
  private static lookupRelation;
11
12
  }
@@ -9,8 +9,8 @@ const schema_1 = __importDefault(require("../../mongoose/schema"));
9
9
  * and transformations to target them
10
10
  */
11
11
  class LookupGenerator {
12
- static lookup(model, prefix, projection) {
13
- const childSchema = schema_1.default.fromModel(model).getSubSchema(prefix, true).fields;
12
+ static lookup(model, stack, projection) {
13
+ const childSchema = schema_1.default.fromModel(model).applyStack(stack, true).fields;
14
14
  return this.lookupProjection(model.db.models, null, childSchema, projection);
15
15
  }
16
16
  static lookupProjection(models, currentPath, schema, projection) {
@@ -46,4 +46,4 @@ class LookupGenerator {
46
46
  }
47
47
  }
48
48
  exports.default = LookupGenerator;
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL3BpcGVsaW5lL2xvb2t1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUdBLG1FQUFtRTtBQUVuRTs7O0dBR0c7QUFDSCxNQUFxQixlQUFlO0lBQ2xDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBcUIsRUFBRSxNQUFjLEVBQUUsVUFBc0I7UUFDekUsTUFBTSxXQUFXLEdBQUcsZ0JBQWMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFdEYsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRU8sTUFBTSxDQUFDLGdCQUFnQixDQUM3QixNQUFzQyxFQUN0QyxXQUFtQixFQUNuQixNQUFrQixFQUNsQixVQUFzQjtRQUV0QixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFFcEIsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztZQUN0RSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUUxRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU8sTUFBTSxDQUFDLGNBQWMsQ0FDM0IsTUFBc0MsRUFDdEMsV0FBbUIsRUFDbkIsTUFBa0IsRUFDbEIsSUFBWSxFQUNaLGFBQXlCO1FBRXpCLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUV6RCw4QkFBOEI7UUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ2hDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRXpELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDO1lBQzdDLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLElBQUksY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztZQUNyRixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUM7WUFFM0IsTUFBTSxTQUFTLEdBQUcsZ0JBQWMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBRXpELE9BQU87Z0JBQ0wsMEJBQTBCO2dCQUMxQixFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFO2dCQUNuRCxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLDBCQUEwQixFQUFFLElBQUksRUFBRSxFQUFFO2dCQUVqRSx3Q0FBd0M7Z0JBQ3hDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQzthQUMvRCxDQUFDO1NBQ0g7UUFFRCw0Q0FBNEM7UUFDNUMsSUFBSSxJQUFJLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztTQUN2RTtRQUVELDZDQUE2QztRQUM3QyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELENBQUM7Q0FDRjtBQTNERCxrQ0EyREMifQ==
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL3BpcGVsaW5lL2xvb2t1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUdBLG1FQUFtRTtBQUduRTs7O0dBR0c7QUFDSCxNQUFxQixlQUFlO0lBQ2xDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBcUIsRUFBRSxLQUFZLEVBQUUsVUFBc0I7UUFDdkUsTUFBTSxXQUFXLEdBQUcsZ0JBQWMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFbkYsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRU8sTUFBTSxDQUFDLGdCQUFnQixDQUM3QixNQUFzQyxFQUN0QyxXQUFtQixFQUNuQixNQUFrQixFQUNsQixVQUFzQjtRQUV0QixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFFcEIsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztZQUN0RSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUUxRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU8sTUFBTSxDQUFDLGNBQWMsQ0FDM0IsTUFBc0MsRUFDdEMsV0FBbUIsRUFDbkIsTUFBa0IsRUFDbEIsSUFBWSxFQUNaLGFBQXlCO1FBRXpCLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUV6RCw4QkFBOEI7UUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ2hDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRXpELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDO1lBQzdDLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLElBQUksY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztZQUNyRixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUM7WUFFM0IsTUFBTSxTQUFTLEdBQUcsZ0JBQWMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBRXpELE9BQU87Z0JBQ0wsMEJBQTBCO2dCQUMxQixFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFO2dCQUNuRCxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLDBCQUEwQixFQUFFLElBQUksRUFBRSxFQUFFO2dCQUVqRSx3Q0FBd0M7Z0JBQ3hDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQzthQUMvRCxDQUFDO1NBQ0g7UUFFRCw0Q0FBNEM7UUFDNUMsSUFBSSxJQUFJLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztTQUN2RTtRQUVELDZDQUE2QztRQUM3QyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELENBQUM7Q0FDRjtBQTNERCxrQ0EyREMifQ==
@@ -6,8 +6,13 @@ import { Model, PipelineStage } from 'mongoose';
6
6
  * without loosing the parent (which may be needed later on).
7
7
  */
8
8
  export default class ReparentGenerator {
9
- static reparent(model: Model<unknown>, prefix: string | null): PipelineStage[];
9
+ static reparent(model: Model<unknown>, stack: {
10
+ prefix: string | null;
11
+ asFields: string[];
12
+ asModels: string[];
13
+ }[]): PipelineStage[];
10
14
  private static reparentArray;
11
15
  private static reparentObject;
16
+ static unflatten(asFields: string[]): PipelineStage[];
12
17
  }
13
18
  //# sourceMappingURL=reparent.d.ts.map
@@ -3,7 +3,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const mongoose_1 = require("mongoose");
7
6
  const schema_1 = __importDefault(require("../../mongoose/schema"));
8
7
  /**
9
8
  * Generate pipeline to query submodels.
@@ -12,22 +11,22 @@ const schema_1 = __importDefault(require("../../mongoose/schema"));
12
11
  * without loosing the parent (which may be needed later on).
13
12
  */
14
13
  class ReparentGenerator {
15
- static reparent(model, prefix) {
16
- if (!prefix?.length)
17
- return [];
18
- // Take only the part of the records we are interested in
19
- const pipeline = [];
20
- let schema = schema_1.default.fromModel(model).fields;
21
- for (const part of prefix.split('.')) {
22
- pipeline.push(...(schema[part]['[]']
23
- ? this.reparentArray(part, schema[part]['[]'] instanceof mongoose_1.SchemaType)
24
- : this.reparentObject(part, schema[part] instanceof mongoose_1.SchemaType)));
25
- schema = schema[part];
26
- if (schema['[]'])
27
- schema = schema['[]'];
28
- }
29
- // If we end up on a field, create a virtual record
30
- return pipeline;
14
+ static reparent(model, stack) {
15
+ const schema = schema_1.default.fromModel(model);
16
+ return stack.flatMap((step, index) => {
17
+ if (index === 0)
18
+ return this.unflatten(step.asFields);
19
+ const localSchema = schema.getSubSchema(step.prefix);
20
+ const relativePrefix = stack[index - 1].prefix !== null
21
+ ? step.prefix.substring(stack[index - 1].prefix.length + 1)
22
+ : step.prefix;
23
+ return [
24
+ ...(localSchema.isArray
25
+ ? this.reparentArray(relativePrefix, localSchema.isLeaf)
26
+ : this.reparentObject(relativePrefix, localSchema.isLeaf)),
27
+ ...this.unflatten(step.asFields),
28
+ ];
29
+ });
31
30
  }
32
31
  static reparentArray(prefix, inDoc) {
33
32
  return [
@@ -66,6 +65,14 @@ class ReparentGenerator {
66
65
  },
67
66
  ];
68
67
  }
68
+ static unflatten(asFields) {
69
+ return asFields.length
70
+ ? [
71
+ { $addFields: Object.fromEntries(asFields.map(f => [f.replace(/\./g, '@@@'), `$${f}`])) },
72
+ { $project: Object.fromEntries(asFields.map(f => [f, 0])) },
73
+ ]
74
+ : [];
75
+ }
69
76
  }
70
77
  exports.default = ReparentGenerator;
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwYXJlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvcGlwZWxpbmUvcmVwYXJlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx1Q0FBNEQ7QUFFNUQsbUVBQW1FO0FBRW5FOzs7OztHQUtHO0FBQ0gsTUFBcUIsaUJBQWlCO0lBQ3BDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBcUIsRUFBRSxNQUFxQjtRQUMxRCxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUUvQix5REFBeUQ7UUFDekQsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksTUFBTSxHQUFlLGdCQUFjLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUVoRSxLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDcEMsUUFBUSxDQUFDLElBQUksQ0FDWCxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDcEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxxQkFBVSxDQUFDO2dCQUNwRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLHFCQUFVLENBQUMsQ0FBQyxDQUNuRSxDQUFDO1lBRUYsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQUUsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN6QztRQUVELG1EQUFtRDtRQUNuRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFjLEVBQUUsS0FBYztRQUN6RCxPQUFPO1lBQ0wsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUMvRDtnQkFDRSxZQUFZLEVBQUU7b0JBQ1osT0FBTyxFQUFFO3dCQUNQLGFBQWEsRUFBRTs0QkFDYixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLEVBQUU7NEJBQ2hEO2dDQUNFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksTUFBTSxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRTtnQ0FDakYsUUFBUSxFQUFFLE1BQU07Z0NBQ2hCLE1BQU0sRUFBRSxRQUFROzZCQUNqQjt5QkFDRjtxQkFDRjtpQkFDRjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQWMsRUFBRSxLQUFjO1FBQzFELE9BQU87WUFDTDtnQkFDRSxZQUFZLEVBQUU7b0JBQ1osT0FBTyxFQUFFO3dCQUNQLGFBQWEsRUFBRTs0QkFDYixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLEVBQUU7NEJBQ2hEO2dDQUNFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLENBQUMsRUFBRTtnQ0FDdkQsUUFBUSxFQUFFLE1BQU07Z0NBQ2hCLE1BQU0sRUFBRSxRQUFROzZCQUNqQjt5QkFDRjtxQkFDRjtpQkFDRjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTdERCxvQ0E2REMifQ==
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwYXJlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvcGlwZWxpbmUvcmVwYXJlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQSxtRUFBbUQ7QUFFbkQ7Ozs7O0dBS0c7QUFDSCxNQUFxQixpQkFBaUI7SUFDcEMsTUFBTSxDQUFDLFFBQVEsQ0FDYixLQUFxQixFQUNyQixLQUEwRTtRQUUxRSxNQUFNLE1BQU0sR0FBRyxnQkFBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUvQyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDbkMsSUFBSSxLQUFLLEtBQUssQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRXRELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JELE1BQU0sY0FBYyxHQUNsQixLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJO2dCQUM5QixDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDM0QsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFFbEIsT0FBTztnQkFDTCxHQUFHLENBQUMsV0FBVyxDQUFDLE9BQU87b0JBQ3JCLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDO29CQUN4RCxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM1RCxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQzthQUNqQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFjLEVBQUUsS0FBYztRQUN6RCxPQUFPO1lBQ0wsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUMvRDtnQkFDRSxZQUFZLEVBQUU7b0JBQ1osT0FBTyxFQUFFO3dCQUNQLGFBQWEsRUFBRTs0QkFDYixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLEVBQUU7NEJBQ2hEO2dDQUNFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksTUFBTSxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRTtnQ0FDakYsUUFBUSxFQUFFLE1BQU07Z0NBQ2hCLE1BQU0sRUFBRSxRQUFROzZCQUNqQjt5QkFDRjtxQkFDRjtpQkFDRjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQWMsRUFBRSxLQUFjO1FBQzFELE9BQU87WUFDTDtnQkFDRSxZQUFZLEVBQUU7b0JBQ1osT0FBTyxFQUFFO3dCQUNQLGFBQWEsRUFBRTs0QkFDYixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLEVBQUU7NEJBQ2hEO2dDQUNFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLENBQUMsRUFBRTtnQ0FDdkQsUUFBUSxFQUFFLE1BQU07Z0NBQ2hCLE1BQU0sRUFBRSxRQUFROzZCQUNqQjt5QkFDRjtxQkFDRjtpQkFDRjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQWtCO1FBQ2pDLE9BQU8sUUFBUSxDQUFDLE1BQU07WUFDcEIsQ0FBQyxDQUFDO2dCQUNFLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDekYsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2FBQzVEO1lBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNULENBQUM7Q0FDRjtBQXhFRCxvQ0F3RUMifQ==
@@ -1,6 +1,6 @@
1
1
  import { Projection } from '@forestadmin/datasource-toolkit';
2
2
  import { Model, PipelineStage } from 'mongoose';
3
- import MongooseSchema from '../../mongoose/schema';
3
+ import { Stack } from '../../types';
4
4
  /**
5
5
  * When using the `asModel` options, users can request/filter on the virtual _id and parentId fields
6
6
  * of children (using the generated OneToOne relation).
@@ -15,7 +15,7 @@ import MongooseSchema from '../../mongoose/schema';
15
15
  * injected to save resources.
16
16
  */
17
17
  export default class VirtualFieldsGenerator {
18
- static addVirtual(model: Model<unknown>, prefix: string, ignoredFields: string[], projection: Projection): PipelineStage[];
19
- static getVirtuals(path: string, schema: MongooseSchema, projection: Projection): Record<string, unknown>;
18
+ static addVirtual(model: Model<unknown>, stack: Stack, projection: Projection): PipelineStage[];
19
+ private static getPath;
20
20
  }
21
21
  //# sourceMappingURL=virtual-fields.d.ts.map
@@ -1,9 +1,5 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const schema_1 = __importDefault(require("../../mongoose/schema"));
7
3
  /**
8
4
  * When using the `asModel` options, users can request/filter on the virtual _id and parentId fields
9
5
  * of children (using the generated OneToOne relation).
@@ -18,48 +14,41 @@ const schema_1 = __importDefault(require("../../mongoose/schema"));
18
14
  * injected to save resources.
19
15
  */
20
16
  class VirtualFieldsGenerator {
21
- static addVirtual(model, prefix, ignoredFields, projection) {
22
- const schema = schema_1.default.fromModel(model).getSubSchema(prefix, true);
17
+ static addVirtual(model, stack, projection) {
23
18
  const set = {};
24
- for (const [relation, subProjection] of Object.entries(projection.relations)) {
25
- // if it is a virtual one to one (<=> inverse of "parent")
26
- if (ignoredFields.includes(relation)) {
27
- const virtuals = this.getVirtuals(relation, schema.getSubSchema(relation, true), subProjection);
28
- for (const [key, value] of Object.entries(virtuals)) {
29
- set[key] = value;
30
- }
19
+ for (const colonField of projection) {
20
+ const field = colonField.replace(/:/g, '.');
21
+ const isFromOneToOne = stack[stack.length - 1].asModels.some(f => field.startsWith(`${f}.`));
22
+ if (isFromOneToOne) {
23
+ set[field] = this.getPath(field);
31
24
  }
32
25
  }
33
26
  return Object.keys(set).length ? [{ $addFields: set }] : [];
34
27
  }
35
- static getVirtuals(path, schema, projection) {
36
- const result = {};
37
- if (projection.columns.includes('_id')) {
38
- result[`${path}._id`] = { $concat: [{ $toString: '$_id' }, `.${path}`] };
28
+ static getPath(field) {
29
+ if (field.endsWith('._id')) {
30
+ const suffix = field.substring(0, field.length - 4);
31
+ return { $concat: [{ $toString: '$_id' }, `.${suffix}`] };
39
32
  }
40
- if (projection.columns.includes('parentId')) {
41
- const dotIndex = path.lastIndexOf('.');
42
- const parentPath = dotIndex !== -1 ? path.substring(0, dotIndex) : null;
43
- result[`${path}.parentId`] = parentPath
44
- ? { $concat: [{ $toString: '$_id' }, `.${parentPath}`] }
45
- : '$_id';
46
- }
47
- if (projection.columns.includes('content') && schema.isLeaf) {
48
- result[`${path}.content`] = `$${path}`;
49
- }
50
- for (const [relation, subProjection] of Object.entries(projection.relations)) {
51
- // If we're asking for data that is inside of this mongo document (and not a __manyToOne)
52
- // This condition should be equivalent to `!relation.endWith('__manyToOne')` but we want
53
- // to get rid of the fact that the code depends on the naming.
54
- if (schema.fields[relation]) {
55
- const subVirtuals = this.getVirtuals(`${path}.${relation}`, schema.getSubSchema(relation, true), subProjection);
56
- for (const [key, value] of Object.entries(subVirtuals)) {
57
- result[key] = value;
58
- }
33
+ if (field.endsWith('.parentId')) {
34
+ if (field.split('.').length > 2) {
35
+ // Implementing this would require us to have knowledge of the value of asModel for
36
+ // for virtual models under the current one, which the `stack` variable does not have.
37
+ // If the expcetion causes issues we could simply return
38
+ // `$${field.substring(0, field.length - 9)}._id` but that would not work if the customer
39
+ // jumped over multiple levels of nesting.
40
+ // As this is a use case that never happens from the UI, and that can be worked around when
41
+ // using the API, we decided to not implement it.
42
+ throw new Error('Fetching virtual parentId deeper than 1 level is not supported.');
59
43
  }
44
+ return '$_id';
45
+ }
46
+ if (field.endsWith('.content')) {
47
+ // FIXME: we should check that this is really a leaf field because "content" can't
48
+ // really be used as a reserved word
49
+ return `$${field.substring(0, field.length - 8)}`;
60
50
  }
61
- return result;
62
51
  }
63
52
  }
64
53
  exports.default = VirtualFieldsGenerator;
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC1maWVsZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvcGlwZWxpbmUvdmlydHVhbC1maWVsZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFHQSxtRUFBbUQ7QUFFbkQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBcUIsc0JBQXNCO0lBQ3pDLE1BQU0sQ0FBQyxVQUFVLENBQ2YsS0FBcUIsRUFDckIsTUFBYyxFQUNkLGFBQXVCLEVBQ3ZCLFVBQXNCO1FBRXRCLE1BQU0sTUFBTSxHQUFHLGdCQUFjLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUUsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBRWYsS0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzVFLDBEQUEwRDtZQUMxRCxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3BDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQy9CLFFBQVEsRUFDUixNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFDbkMsYUFBYSxDQUNkLENBQUM7Z0JBRUYsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQ25ELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7aUJBQ2xCO2FBQ0Y7U0FDRjtRQUVELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzlELENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVyxDQUNoQixJQUFZLEVBQ1osTUFBc0IsRUFDdEIsVUFBc0I7UUFFdEIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBRWxCLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdEMsTUFBTSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQzFFO1FBRUQsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUMzQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sVUFBVSxHQUFHLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN4RSxNQUFNLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxHQUFHLFVBQVU7Z0JBQ3JDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksVUFBVSxFQUFFLENBQUMsRUFBRTtnQkFDeEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUNaO1FBRUQsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQzNELE1BQU0sQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztTQUN4QztRQUVELEtBQUssTUFBTSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUM1RSx5RkFBeUY7WUFDekYsd0ZBQXdGO1lBQ3hGLDhEQUE4RDtZQUM5RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzNCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQ2xDLEdBQUcsSUFBSSxJQUFJLFFBQVEsRUFBRSxFQUNyQixNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFDbkMsYUFBYSxDQUNkLENBQUM7Z0JBRUYsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7b0JBQ3RELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7aUJBQ3JCO2FBQ0Y7U0FDRjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRjtBQXRFRCx5Q0FzRUMifQ==
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC1maWVsZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvcGlwZWxpbmUvdmlydHVhbC1maWVsZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFLQTs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFxQixzQkFBc0I7SUFDekMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFxQixFQUFFLEtBQVksRUFBRSxVQUFzQjtRQUMzRSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFFZixLQUFLLE1BQU0sVUFBVSxJQUFJLFVBQVUsRUFBRTtZQUNuQyxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM1QyxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUU3RixJQUFJLGNBQWMsRUFBRTtnQkFDbEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDbEM7U0FDRjtRQUVELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzlELENBQUM7SUFFTyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQWE7UUFDbEMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzFCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFFcEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQzNEO1FBRUQsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQy9CLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUMvQixtRkFBbUY7Z0JBQ25GLHNGQUFzRjtnQkFFdEYsd0RBQXdEO2dCQUN4RCx5RkFBeUY7Z0JBQ3pGLDBDQUEwQztnQkFFMUMsMkZBQTJGO2dCQUMzRixpREFBaUQ7Z0JBRWpELE1BQU0sSUFBSSxLQUFLLENBQUMsaUVBQWlFLENBQUMsQ0FBQzthQUNwRjtZQUVELE9BQU8sTUFBTSxDQUFDO1NBQ2Y7UUFFRCxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDOUIsa0ZBQWtGO1lBQ2xGLG9DQUFvQztZQUNwQyxPQUFPLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ25EO0lBQ0gsQ0FBQztDQUNGO0FBL0NELHlDQStDQyJ9
@@ -1,8 +1,9 @@
1
- import { CollectionSchema, RecordData } from '@forestadmin/datasource-toolkit';
1
+ import { CollectionSchema } from '@forestadmin/datasource-toolkit';
2
2
  import { Model } from 'mongoose';
3
+ import { Stack } from '../../types';
3
4
  /** Generate forest admin schema from mongoose schema */
4
5
  export default class FieldsGenerator {
5
- static buildFieldsSchema(model: Model<RecordData>, prefix?: string, skips?: string[]): CollectionSchema['fields'];
6
+ static buildFieldsSchema(model: Model<unknown>, stack?: Stack): CollectionSchema['fields'];
6
7
  /** Fake primary key that will be used when we're flattening collections */
7
8
  private static buildVirtualPrimaryKey;
8
9
  private static buildManyToOne;