@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.
@@ -9,29 +9,27 @@ const schema_1 = __importDefault(require("../../mongoose/schema"));
9
9
  const helpers_1 = require("../helpers");
10
10
  /** Generate forest admin schema from mongoose schema */
11
11
  class FieldsGenerator {
12
- static buildFieldsSchema(model, prefix = null, skips = []) {
12
+ static buildFieldsSchema(model, stack = [{ prefix: null, asFields: [], asModels: [] }]) {
13
13
  const ourSchema = {};
14
- const childSchema = schema_1.default.fromModel(model).getSubSchema(prefix, true);
14
+ const childSchema = schema_1.default.fromModel(model).applyStack(stack);
15
15
  // Add columns and many to one relations
16
16
  for (const [name, field] of Object.entries(childSchema.fields)) {
17
- if (name !== 'parent' && !skips.includes(name)) {
17
+ if (name !== 'parent') {
18
18
  ourSchema[name] = this.buildColumnSchema(field);
19
19
  if (field instanceof mongoose_1.SchemaType && field.options.ref)
20
20
  ourSchema[`${name}__manyToOne`] = this.buildManyToOne(field.options.ref, name);
21
21
  }
22
22
  }
23
23
  // When a prefix is used add pk + fk + many to one relation to the parent.
24
- if (prefix?.length) {
25
- const parentPrefix = prefix.includes('.')
26
- ? prefix.substring(0, prefix.lastIndexOf('.'))
27
- : null;
24
+ if (stack.length > 1) {
25
+ const parentPrefix = stack[stack.length - 2].prefix;
28
26
  ourSchema._id = this.buildVirtualPrimaryKey();
29
27
  ourSchema.parentId = {
30
28
  ...this.buildColumnSchema(childSchema.fields.parent._id),
31
29
  isPrimaryKey: false,
32
30
  validation: [{ operator: 'Present' }],
33
31
  };
34
- ourSchema.parent = this.buildManyToOne((0, helpers_1.escape)(parentPrefix ? `${model.modelName}.${parentPrefix}` : model.modelName), 'parentId');
32
+ ourSchema.parent = this.buildManyToOne((0, helpers_1.escape)(parentPrefix !== null ? `${model.modelName}.${parentPrefix}` : model.modelName), 'parentId');
35
33
  }
36
34
  return ourSchema;
37
35
  }
@@ -107,4 +105,4 @@ class FieldsGenerator {
107
105
  }
108
106
  }
109
107
  exports.default = FieldsGenerator;
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL3NjaGVtYS9maWVsZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFVQSx1Q0FBNkM7QUFFN0MsMEVBQTBEO0FBQzFELG1FQUFpRjtBQUNqRix3Q0FBb0M7QUFFcEMsd0RBQXdEO0FBQ3hELE1BQXFCLGVBQWU7SUFDbEMsTUFBTSxDQUFDLGlCQUFpQixDQUN0QixLQUF3QixFQUN4QixTQUFpQixJQUFJLEVBQ3JCLFFBQWtCLEVBQUU7UUFFcEIsTUFBTSxTQUFTLEdBQStCLEVBQUUsQ0FBQztRQUNqRCxNQUFNLFdBQVcsR0FBRyxnQkFBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRS9FLHdDQUF3QztRQUN4QyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDOUQsSUFBSSxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDOUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxLQUFLLFlBQVkscUJBQVUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUc7b0JBQ2xELFNBQVMsQ0FBQyxHQUFHLElBQUksYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNsRjtTQUNGO1FBRUQsMEVBQTBFO1FBQzFFLElBQUksTUFBTSxFQUFFLE1BQU0sRUFBRTtZQUNsQixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzlDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFFVCxTQUFTLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQzlDLFNBQVMsQ0FBQyxRQUFRLEdBQUc7Z0JBQ25CLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBdUIsQ0FBQyxHQUFHLENBQUM7Z0JBQzFFLFlBQVksRUFBRSxLQUFLO2dCQUNuQixVQUFVLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQzthQUN0QyxDQUFDO1lBRUYsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUNwQyxJQUFBLGdCQUFNLEVBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFDN0UsVUFBVSxDQUNYLENBQUM7U0FDSDtRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCwyRUFBMkU7SUFDbkUsTUFBTSxDQUFDLHNCQUFzQjtRQUNuQyxPQUFPO1lBQ0wsSUFBSSxFQUFFLFFBQVE7WUFDZCxVQUFVLEVBQUUsUUFBUTtZQUNwQixlQUFlLEVBQUUsMEJBQXdCLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDO1lBQ3pFLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFVBQVUsRUFBRSxJQUFJO1NBQ2pCLENBQUM7SUFDSixDQUFDO0lBRU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFrQixFQUFFLFVBQWtCO1FBQ2xFLE9BQU87WUFDTCxJQUFJLEVBQUUsV0FBVztZQUNqQixpQkFBaUIsRUFBRSxVQUFVO1lBQzdCLFVBQVU7WUFDVixnQkFBZ0IsRUFBRSxLQUFLO1NBQ3hCLENBQUM7SUFDSixDQUFDO0lBRUQsMENBQTBDO0lBQ2xDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxLQUFpQjtRQUNoRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLE1BQU0sTUFBTSxHQUFpQjtZQUMzQixVQUFVO1lBQ1YsZUFBZSxFQUFFLDBCQUF3QixDQUFDLHFCQUFxQixDQUFDLFVBQTRCLENBQUM7WUFDN0YsWUFBWSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTztZQUNwQyxZQUFZLEVBQUUsS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLO1lBQ2xDLFVBQVUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxTQUFTO1lBQ3RDLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVSxZQUFZLE1BQU0sSUFBSSxVQUFVLEtBQUssTUFBTSxDQUFDO1lBQ3BFLElBQUksRUFBRSxRQUFRO1lBQ2QsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtTQUNoRSxDQUFDO1FBRUYsSUFBSSxVQUFVLEtBQUssTUFBTSxFQUFFO1lBQ3pCLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFtQixDQUFDLENBQUM7U0FDN0Q7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsMkNBQTJDO0lBQ25DLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBaUI7UUFDNUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWhELDJGQUEyRjtRQUMzRixVQUFVO1FBQ1YsSUFBSSxVQUFVLEtBQUssUUFBUSxFQUFFO1lBQzNCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBbUIsQ0FBQyxDQUFDO1lBRTNELElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsRUFBRTtnQkFDOUQsT0FBTyxNQUFNLENBQUM7YUFDZjtTQUNGO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELG9EQUFvRDtJQUM1QyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBaUI7UUFDL0MsSUFBSSxLQUFLLFlBQVkscUJBQVUsRUFBRTtZQUMvQixJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDcEUsT0FBTyxLQUFLLENBQUMsUUFBMEIsQ0FBQzthQUN6QztZQUVELElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ2pFLE9BQU8sUUFBUSxDQUFDO2FBQ2pCO1lBRUQsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUVELElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdDO1FBRUQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FDakMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQ3BGLEVBQUUsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELCtDQUErQztJQUN2QyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQWlCO1FBQzVDLE9BQU8sS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDO0lBQ2pHLENBQUM7Q0FDRjtBQS9IRCxrQ0ErSEMifQ==
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL3NjaGVtYS9maWVsZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFTQSx1Q0FBNkM7QUFFN0MsMEVBQTBEO0FBQzFELG1FQUFpRjtBQUVqRix3Q0FBb0M7QUFFcEMsd0RBQXdEO0FBQ3hELE1BQXFCLGVBQWU7SUFDbEMsTUFBTSxDQUFDLGlCQUFpQixDQUN0QixLQUFxQixFQUNyQixRQUFlLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBRTdELE1BQU0sU0FBUyxHQUErQixFQUFFLENBQUM7UUFDakQsTUFBTSxXQUFXLEdBQUcsZ0JBQWMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXRFLHdDQUF3QztRQUN4QyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDOUQsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO2dCQUNyQixTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLEtBQUssWUFBWSxxQkFBVSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRztvQkFDbEQsU0FBUyxDQUFDLEdBQUcsSUFBSSxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ2xGO1NBQ0Y7UUFFRCwwRUFBMEU7UUFDMUUsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNwQixNQUFNLFlBQVksR0FBRyxLQUFL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
@@ -13,17 +13,23 @@ class RelationGenerator {
13
13
  */
14
14
  static addImplicitRelations(collections) {
15
15
  for (const collection of collections) {
16
+ // Get many to one relations
16
17
  const manyToOnes = Object.entries(collection.schema.fields).filter(([, f]) => f.type === 'ManyToOne');
17
- // Create one-to-many and one-to-one
18
- for (const [name, field] of manyToOnes) {
19
- this.addManyToOneInverse(collection, name, field);
20
- }
21
- // @fixme this will break if _id is both a foreignkey and a pk
22
18
  // Create many to many (5 fields == _id + 2 relations + 2 foreignKeys)
23
- if (manyToOnes.length === 2 && Object.keys(collection.schema.fields).length === 5) {
19
+ // @fixme this may break, we should check in the schema, but it's more complicated
20
+ const isVirtualJunction = collection.name.includes('_') &&
21
+ manyToOnes.length === 2 &&
22
+ Object.keys(collection.schema.fields).length === 5;
23
+ // Create relationships
24
+ if (isVirtualJunction) {
24
25
  this.addManyToMany(collection, manyToOnes[0][1], manyToOnes[1][1]);
25
26
  this.addManyToMany(collection, manyToOnes[1][1], manyToOnes[0][1]);
26
27
  }
28
+ else {
29
+ for (const [name, field] of manyToOnes) {
30
+ this.addManyToOneInverse(collection, name, field);
31
+ }
32
+ }
27
33
  }
28
34
  }
29
35
  /**
@@ -38,9 +44,15 @@ class RelationGenerator {
38
44
  if (name === 'parent') {
39
45
  // Create inverse of 'parent' relationship so that the relation name matches the actual name
40
46
  // of the data which is stored in the database.
41
- const childSchema = schema_1.default.fromModel(collection.model).getSubSchema(collection.prefix, true);
42
- inverseName = (0, helpers_1.escape)(collection.prefix.substring(collection.prefix.lastIndexOf('.') + 1));
43
- type = childSchema.fields.parent[inverseName]['[]'] ? 'OneToMany' : 'OneToOne';
47
+ const { stack } = collection;
48
+ const { prefix } = stack[stack.length - 1];
49
+ const { isArray } = schema_1.default.fromModel(collection.model).applyStack(stack);
50
+ type = isArray ? 'OneToMany' : 'OneToOne';
51
+ inverseName = (0, helpers_1.escape)(prefix);
52
+ if (stack.length > 2) {
53
+ const previousLength = stack[stack.length - 2].prefix.length + 1;
54
+ inverseName = prefix.substring(previousLength);
55
+ }
44
56
  }
45
57
  else {
46
58
  // Native ManyToOne relationship (there is an actual foreign key in the document, this is
@@ -72,4 +84,4 @@ class RelationGenerator {
72
84
  }
73
85
  }
74
86
  exports.default = RelationGenerator;
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL3NjaGVtYS9yZWxhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFHQSxtRUFBbUQ7QUFDbkQsd0NBQW9DO0FBRXBDLGlHQUFpRztBQUNqRyxNQUFxQixpQkFBaUI7SUFDcEM7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLG9CQUFvQixDQUFDLFdBQWlDO1FBQzNELEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFO1lBQ3BDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQ2hFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FDSCxDQUFDO1lBRWpDLG9DQUFvQztZQUNwQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksVUFBVSxFQUFFO2dCQUN0QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNuRDtZQUVELDhEQUE4RDtZQUM5RCxzRUFBc0U7WUFDdEUsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDakYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL3NjaGVtYS9yZWxhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFHQSxtRUFBbUQ7QUFDbkQsd0NBQW9DO0FBRXBDLGlHQUFpRztBQUNqRyxNQUFxQixpQkFBaUI7SUFDcEM7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLG9CQUFvQixDQUFDLFdBQWlDO1FBQzNELEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFO1lBQ3BDLDRCQUE0QjtZQUM1QixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUNoRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLENBQ0gsQ0FBQztZQUVqQyxzRUFBc0U7WUFDdEUsa0ZBQWtGO1lBQ2xGLE1BQU0saUJBQWlCLEdBQ3JCLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztnQkFDN0IsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztZQUVyRCx1QkFBdUI7WUFDdkIsSUFBSSxpQkFBaUIsRUFBRTtnQkFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDcEU7aUJBQU07Z0JBQ0wsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLFVBQVUsRUFBRTtvQkFDdEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ25EO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLE1BQU0sQ0FBQyxtQkFBbUIsQ0FDaEMsVUFBOEIsRUFDOUIsSUFBWSxFQUNaLE1BQXVCO1FBRXZCLElBQUksSUFBOEIsQ0FBQztRQUNuQyxJQUFJLFdBQW1CLENBQUM7UUFFeEIsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQ3JCLDRGQUE0RjtZQUM1RiwrQ0FBK0M7WUFDL0MsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLFVBQVUsQ0FBQztZQUM3QixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDM0MsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLGdCQUFjLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFakYsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7WUFDMUMsV0FBVyxHQUFHLElBQUEsZ0JBQU0sRUFBQyxNQUFNLENBQUMsQ0FBQztZQUU3QixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNwQixNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDakUsV0FBVyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDaEQ7U0FDRjthQUFNO1lBQ0wseUZBQXlGO1lBQ3pGLDZEQUE2RDtZQUM3RCxXQUFXLEdBQUcsSUFBQSxnQkFBTSxFQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksSUFBSSxJQUFJLFdBQVcsQ0FBQyxDQUFDO1lBQzVELElBQUksR0FBRyxXQUFXLENBQUM7U0FDcEI7UUFFRCxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUV0RixlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRztZQUMzQyxJQUFJO1lBQ0osaUJBQWlCLEVBQUUsVUFBVSxDQUFDLElBQUk7WUFDbEMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxVQUFVO1lBQzVCLGVBQWUsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO1NBQ3pDLENBQUM7SUFDSixDQUFDO0lBRUQsaURBQWlEO0lBQ3pDLE1BQU0sQ0FBQyxhQUFhLENBQzFCLGlCQUE2QixFQUM3QixjQUErQixFQUMvQixlQUFnQztRQUVoQyxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzVGLE1BQU0sWUFBWSxHQUFHLElBQUEsZ0JBQU0sRUFDekIsR0FBRyxlQUFlLENBQUMsaUJBQWlCLFlBQVksaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQ3pFLENBQUM7UUFFRixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRztZQUNuQyxJQUFJLEVBQUUsWUFBWTtZQUNsQixpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO1lBQ3pDLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxpQkFBaUI7WUFDcEQsVUFBVSxFQUFFLGVBQWUsQ0FBQyxVQUFVO1lBQ3RDLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxnQkFBZ0I7WUFDbEQsU0FBUyxFQUFFLGNBQWMsQ0FBQyxVQUFVO1lBQ3BDLGVBQWUsRUFBRSxjQUFjLENBQUMsZ0JBQWdCO1NBQ2pELENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFqR0Qsb0NBaUdDIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forestadmin/datasource-mongoose",
3
- "version": "1.2.6",
3
+ "version": "1.3.1",
4
4
  "main": "dist/index.js",
5
5
  "license": "GPL-3.0",
6
6
  "publishConfig": {
@@ -16,7 +16,7 @@
16
16
  "dist/**/*.d.ts"
17
17
  ],
18
18
  "dependencies": {
19
- "@forestadmin/datasource-toolkit": "1.2.2",
19
+ "@forestadmin/datasource-toolkit": "1.4.0",
20
20
  "luxon": "^3.2.1"
21
21
  },
22
22
  "devDependencies": {