nongo-driver 3.3.7 → 3.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/model.d.ts CHANGED
@@ -11,11 +11,13 @@ export interface RevisionHistory {
11
11
  export default abstract class Model<T extends {
12
12
  _id?: ObjectId;
13
13
  revision?: string;
14
+ previousRevision?: string;
14
15
  history?: RevisionHistory[];
15
16
  diffs?: any;
16
17
  name?: string;
17
18
  key?: string;
18
19
  environment?: string;
20
+ module?: string;
19
21
  deleted?: true;
20
22
  } = any> {
21
23
  nongo: Nongo;
@@ -39,7 +41,6 @@ export default abstract class Model<T extends {
39
41
  private removeEnvironmentMapping;
40
42
  private createEnvironmentMapping;
41
43
  private updateEnvironmentMapping;
42
- private updateIntentEntityBlockMapping;
43
44
  revertVersion(id: string, revisionId: string): Promise<this>;
44
45
  getRevisionObjForEnvironment(isLive: boolean, id: string): Promise<this>;
45
46
  saveEnvironmentRevision(id: string, environmentId: string): Promise<this>;
@@ -47,7 +48,6 @@ export default abstract class Model<T extends {
47
48
  strip(parentPath: any, toStrip: any): void;
48
49
  deleteKey(path: any, obj: any): void;
49
50
  byId(id: any): Promise<this>;
50
- getRevisionHistory(history: RevisionHistory[]): Promise<this[]>;
51
51
  getRevisions(query: Filter<Document>, options?: FindOptions<Document>): Promise<this[]>;
52
52
  getRevision(query: Filter<Document>): Promise<this>;
53
53
  find(query?: Filter<Document>, options?: FindOptions<Document>): Promise<this[]>;
package/dist/model.js CHANGED
@@ -12,8 +12,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  const clone_deep_1 = __importDefault(require("clone-deep"));
14
14
  const mongodb_1 = require("mongodb");
15
- const just_diff_1 = require("just-diff");
16
- const gt_1 = __importDefault(require("semver/functions/gt"));
17
15
  const inc_1 = __importDefault(require("semver/functions/inc"));
18
16
  const cursor_iterator_1 = __importDefault(require("./cursor-iterator"));
19
17
  const nongo_1 = __importDefault(require("./nongo"));
@@ -73,27 +71,16 @@ class Model {
73
71
  idString() {
74
72
  return this.obj._id.toHexString();
75
73
  }
76
- async getLatestRevisionNumber(name) {
77
- const query = this.collection === 'FormModel' ? { key: name } : { name };
78
- const liveObj = await this.db
79
- .collection(this.collection)
80
- .findOne(query, { sort: { revision: -1 } });
74
+ async getLatestRevisionNumber(query) {
75
+ var _a;
81
76
  const revObj = await this.db
82
77
  .collection(this.collectionRevision)
83
78
  .findOne(query, { sort: { revision: -1 } });
84
- let version = '0.0.1';
85
- if (liveObj && revObj) {
86
- (0, gt_1.default)(liveObj.revision, revObj.revision)
87
- ? (version = (0, inc_1.default)(liveObj.revision, 'patch'))
88
- : (version = (0, inc_1.default)(revObj.revision, 'patch'));
89
- }
90
- else if (liveObj) {
91
- version = (0, inc_1.default)(liveObj.revision, 'patch');
92
- }
93
- else if (revObj) {
94
- version = (0, inc_1.default)(revObj.revision, 'patch');
79
+ let revision = '0.0.1';
80
+ if (revObj) {
81
+ revision = (0, inc_1.default)(revObj.revision, 'patch');
95
82
  }
96
- return version;
83
+ return { revision, newestRevisionId: (_a = revObj === null || revObj === void 0 ? void 0 : revObj._id) === null || _a === void 0 ? void 0 : _a.toHexString() };
97
84
  }
98
85
  /*
99
86
  * Upsert the model into the database
@@ -119,39 +106,51 @@ class Model {
119
106
  : { isLive: true };
120
107
  const clientEnv = await this.db.collection('Environment').findOne(query);
121
108
  const environmentId = clientEnv._id.toHexString();
122
- const { name, key } = this.obj;
123
- this.obj.revision = await this.getLatestRevisionNumber(name || key);
109
+ const { name, module, key } = this.obj;
110
+ const revisionQuery = name ? { name, module } : { key };
111
+ // Get id of newest revision, so we can use that to find the appropriate mapping
112
+ // this is in case the object we're trying to save either doesn't have _id (for example if it's being imported)
113
+ // or if the _id simply isn't correct for the environment
114
+ const { revision, newestRevisionId } = await this.getLatestRevisionNumber(revisionQuery);
115
+ this.obj.previousRevision = this.obj.revision;
116
+ this.obj.revision = revision;
124
117
  if (clientEnv.isLive) {
125
- const revisionObjId = new mongodb_1.ObjectId();
126
118
  const liveRevisionObject = await this.db
127
119
  .collection(this.collection)
128
- .findOne({ _id: this.obj._id });
129
- this.obj.history = nongo_1.default.revisionHistory(liveRevisionObject, revisionObjId);
120
+ .findOne(revisionQuery);
121
+ // If object exists in live, override generated id
122
+ this.obj._id = liveRevisionObject
123
+ ? liveRevisionObject._id
124
+ : this.obj._id;
130
125
  await this.db
131
126
  .collection(this.collection)
132
127
  .replaceOne({ _id: this.obj._id }, this.obj, { upsert: true });
133
128
  if (liveRevisionObject) {
134
- liveRevisionObject._id = revisionObjId;
129
+ // Check if the previously live version has a revision equivalent
130
+ const liveRevisionCopy = await this.db
131
+ .collection(this.collectionRevision)
132
+ .find(Object.assign(Object.assign({}, query), { revision: liveRevisionObject.revision }));
133
+ if (!liveRevisionCopy) {
134
+ liveRevisionObject._id = new mongodb_1.ObjectId();
135
+ await this.db
136
+ .collection(this.collectionRevision)
137
+ .insertOne(liveRevisionObject);
138
+ }
139
+ // Add new live model to revision, so they're both in sync
135
140
  await this.db
136
141
  .collection(this.collectionRevision)
137
- .insertOne(liveRevisionObject);
142
+ .insertOne(Object.assign(Object.assign({}, this.obj), { _id: new mongodb_1.ObjectId() }));
138
143
  }
139
144
  }
140
145
  else {
141
- const revisionObj = await this.db
142
- .collection(this.collectionRevision)
143
- .findOne({ _id: this.obj._id });
144
- this.obj.history = nongo_1.default.revisionHistory(revisionObj, this.idString());
145
146
  this.obj._id = new mongodb_1.ObjectId();
146
147
  const r = await this.db
147
148
  .collection(this.collectionRevision)
148
149
  .insertOne(this.obj);
149
150
  if (this.obj.revision !== '0.0.1') {
150
151
  // update relevant mappings
151
- const revisionId = revisionObj._id.toHexString();
152
152
  const insertedId = r.insertedId.toHexString();
153
- await this.updateEnvironmentMapping(revisionId, insertedId, environmentId);
154
- await this.updateIntentEntityBlockMapping(revisionId, insertedId, environmentId);
153
+ await this.updateEnvironmentMapping(insertedId, newestRevisionId, environmentId);
155
154
  }
156
155
  }
157
156
  if (this.obj.revision === '0.0.1') {
@@ -178,66 +177,32 @@ class Model {
178
177
  }
179
178
  async createEnvironmentMapping(environmentId) {
180
179
  await this.db.collection(this.collectionEnvironmentMapping).insertOne({
181
- originalId: this.idString(),
180
+ latestRevisionId: this.idString(),
182
181
  environments: { [environmentId]: this.idString() },
183
182
  });
184
183
  }
185
- async updateEnvironmentMapping(revisionId, insertedId, environmentId) {
184
+ async updateEnvironmentMapping(insertedId, latestRevisionId, environmentId) {
186
185
  const path = `environments.${environmentId}`;
186
+ // Find the mapping where the current
187
187
  await this.db
188
188
  .collection(this.collectionEnvironmentMapping)
189
- .updateOne({ [path]: revisionId }, { $set: { [path]: insertedId } });
190
- }
191
- async updateIntentEntityBlockMapping(oldId, newId, environment) {
192
- if (this.collection === 'Block') {
193
- // update intent and entity mappings
194
- const filter = { block_id: oldId, environment };
195
- const update = { $set: { block_id: newId } };
196
- await this.db.collection('IntentBlockMapping').updateMany(filter, update);
197
- await this.db.collection('EntityBlockMapping').updateMany(filter, update);
198
- }
199
- else if (this.collection === 'Intent') {
200
- // update intent mapping
201
- const filter = { intent_id: oldId, environment };
202
- const update = { $set: { intent_id: newId } };
203
- await this.db.collection('IntentBlockMapping').updateMany(filter, update);
204
- }
205
- else if (this.collection === 'Entity') {
206
- // update entity mapping
207
- const filter = { entity_id: oldId, environment };
208
- const update = { $set: { entity_id: newId } };
209
- await this.db.collection('EntityBlockMapping').updateMany(filter, update);
210
- }
211
- else if (this.collection === 'FormModel') {
212
- return;
213
- }
214
- else {
215
- throw Error(`${this.collection} is unsupported revision type.`);
216
- }
189
+ .updateOne({ latestRevisionId }, { $set: { [path]: insertedId, latestRevisionId: insertedId } });
217
190
  }
218
191
  async revertVersion(id, revisionId) {
219
- const revisionObjId = new mongodb_1.ObjectId();
220
192
  // get the actuall object
221
193
  const obj = await this.db
222
194
  .collection(this.collection)
223
195
  .findOne({ _id: new mongodb_1.ObjectId(id) });
224
- // get revision
196
+ // get revision to revert to
225
197
  const objToRevert = await this.db
226
198
  .collection(this.collectionRevision)
227
199
  .findOne({ _id: new mongodb_1.ObjectId(revisionId) });
228
- // update revision object
229
- objToRevert.revision = nongo_1.default.revisionNumber(obj.revision);
230
- objToRevert.history = nongo_1.default.revisionHistory(obj, revisionObjId);
231
- delete objToRevert.diffs;
232
- const diffs = (0, just_diff_1.diff)(obj, objToRevert);
233
- objToRevert.diffs = excludePathsFromDiff(diffs);
200
+ // set id of revision to id of original, so it saves properly
234
201
  objToRevert._id = obj._id;
202
+ // revert
235
203
  await this.db
236
204
  .collection(this.collection)
237
205
  .replaceOne({ _id: obj._id }, objToRevert);
238
- // make actuall object as revision object and save it to the revision collection
239
- obj._id = revisionObjId;
240
- await this.db.collection(this.collectionRevision).insertOne(obj);
241
206
  // Return the doc as a model
242
207
  // @ts-ignore
243
208
  return new this.constructor(this.nongo, objToRevert);
@@ -341,10 +306,6 @@ class Model {
341
306
  async byId(id) {
342
307
  return this.findOne({ _id: id });
343
308
  }
344
- async getRevisionHistory(history) {
345
- const revisionIds = history.map((i) => new mongodb_1.ObjectId(i.id));
346
- return this.toArray(await this.findIterator({ _id: { $in: revisionIds } }, { sort: { revision: 'descending' } }, this.collectionRevision));
347
- }
348
309
  async getRevisions(query, options) {
349
310
  return this.toArray(await this.findIterator(query, options, this.collectionRevision));
350
311
  }
package/dist/model.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nongo-driver",
3
- "version": "3.3.7",
3
+ "version": "3.3.8",
4
4
  "description": "A promise driven, schema lead, mongo driver.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/src/model.ts CHANGED
@@ -46,11 +46,13 @@ export default abstract class Model<
46
46
  T extends {
47
47
  _id?: ObjectId;
48
48
  revision?: string;
49
+ previousRevision?: string;
49
50
  history?: RevisionHistory[];
50
51
  diffs?: any;
51
52
  name?: string;
52
53
  key?: string;
53
54
  environment?: string;
55
+ module?: string;
54
56
  deleted?: true;
55
57
  } = any,
56
58
  > {
@@ -114,25 +116,17 @@ export default abstract class Model<
114
116
  return this.obj._id.toHexString();
115
117
  }
116
118
 
117
- private async getLatestRevisionNumber(name: string): Promise<string> {
118
- const query = this.collection === 'FormModel' ? {key: name} : {name};
119
- const liveObj = await this.db
120
- .collection(this.collection)
121
- .findOne(query, {sort: {revision: -1}});
119
+ private async getLatestRevisionNumber(
120
+ query,
121
+ ): Promise<{revision: string; newestRevisionId: string}> {
122
122
  const revObj = await this.db
123
123
  .collection(this.collectionRevision)
124
124
  .findOne(query, {sort: {revision: -1}});
125
- let version = '0.0.1';
126
- if (liveObj && revObj) {
127
- semverGt(liveObj.revision, revObj.revision)
128
- ? (version = incVersion(liveObj.revision, 'patch'))
129
- : (version = incVersion(revObj.revision, 'patch'));
130
- } else if (liveObj) {
131
- version = incVersion(liveObj.revision, 'patch');
132
- } else if (revObj) {
133
- version = incVersion(revObj.revision, 'patch');
125
+ let revision = '0.0.1';
126
+ if (revObj) {
127
+ revision = incVersion(revObj.revision, 'patch');
134
128
  }
135
- return version;
129
+ return {revision, newestRevisionId: revObj?._id?.toHexString()};
136
130
  }
137
131
 
138
132
  /*
@@ -162,49 +156,54 @@ export default abstract class Model<
162
156
  const clientEnv = await this.db.collection('Environment').findOne(query);
163
157
  const environmentId = clientEnv._id.toHexString();
164
158
 
165
- const {name, key} = this.obj;
166
- this.obj.revision = await this.getLatestRevisionNumber(name || key);
167
-
159
+ const {name, module, key} = this.obj;
160
+ const revisionQuery = name ? {name, module} : {key};
161
+ // Get id of newest revision, so we can use that to find the appropriate mapping
162
+ // this is in case the object we're trying to save either doesn't have _id (for example if it's being imported)
163
+ // or if the _id simply isn't correct for the environment
164
+ const {revision, newestRevisionId} = await this.getLatestRevisionNumber(
165
+ revisionQuery,
166
+ );
167
+ this.obj.previousRevision = this.obj.revision;
168
+ this.obj.revision = revision;
168
169
  if (clientEnv.isLive) {
169
- const revisionObjId = new ObjectId();
170
170
  const liveRevisionObject = await this.db
171
171
  .collection(this.collection)
172
- .findOne({_id: this.obj._id});
173
- this.obj.history = Nongo.revisionHistory(
174
- liveRevisionObject,
175
- revisionObjId,
176
- );
172
+ .findOne(revisionQuery);
173
+ // If object exists in live, override generated id
174
+ this.obj._id = liveRevisionObject
175
+ ? liveRevisionObject._id
176
+ : this.obj._id;
177
177
  await this.db
178
178
  .collection(this.collection)
179
179
  .replaceOne({_id: this.obj._id}, this.obj, {upsert: true});
180
180
  if (liveRevisionObject) {
181
- liveRevisionObject._id = revisionObjId;
181
+ // Check if the previously live version has a revision equivalent
182
+ const liveRevisionCopy = await this.db
183
+ .collection(this.collectionRevision)
184
+ .find({...query, revision: liveRevisionObject.revision});
185
+ if (!liveRevisionCopy) {
186
+ liveRevisionObject._id = new ObjectId();
187
+ await this.db
188
+ .collection(this.collectionRevision)
189
+ .insertOne(liveRevisionObject);
190
+ }
191
+ // Add new live model to revision, so they're both in sync
182
192
  await this.db
183
193
  .collection(this.collectionRevision)
184
- .insertOne(liveRevisionObject);
194
+ .insertOne({...this.obj, _id: new ObjectId()});
185
195
  }
186
196
  } else {
187
- const revisionObj = await this.db
188
- .collection(this.collectionRevision)
189
- .findOne({_id: this.obj._id});
190
-
191
- this.obj.history = Nongo.revisionHistory(revisionObj, this.idString());
192
197
  this.obj._id = new ObjectId();
193
198
  const r = await this.db
194
199
  .collection(this.collectionRevision)
195
200
  .insertOne(this.obj);
196
201
  if (this.obj.revision !== '0.0.1') {
197
202
  // update relevant mappings
198
- const revisionId = revisionObj._id.toHexString();
199
203
  const insertedId = r.insertedId.toHexString();
200
204
  await this.updateEnvironmentMapping(
201
- revisionId,
202
- insertedId,
203
- environmentId,
204
- );
205
- await this.updateIntentEntityBlockMapping(
206
- revisionId,
207
205
  insertedId,
206
+ newestRevisionId,
208
207
  environmentId,
209
208
  );
210
209
  }
@@ -235,78 +234,45 @@ export default abstract class Model<
235
234
 
236
235
  private async createEnvironmentMapping(environmentId: string): Promise<void> {
237
236
  await this.db.collection(this.collectionEnvironmentMapping).insertOne({
238
- originalId: this.idString(),
237
+ latestRevisionId: this.idString(),
239
238
  environments: {[environmentId]: this.idString()},
240
239
  });
241
240
  }
242
241
 
243
242
  private async updateEnvironmentMapping(
244
- revisionId: string,
245
243
  insertedId: string,
244
+ latestRevisionId: string,
246
245
  environmentId: string,
247
246
  ): Promise<void> {
248
247
  const path = `environments.${environmentId}`;
248
+ // Find the mapping where the current
249
249
  await this.db
250
250
  .collection(this.collectionEnvironmentMapping)
251
- .updateOne({[path]: revisionId}, {$set: {[path]: insertedId}});
252
- }
253
-
254
- private async updateIntentEntityBlockMapping(
255
- oldId: string,
256
- newId: string,
257
- environment: string,
258
- ): Promise<void> {
259
- if (this.collection === 'Block') {
260
- // update intent and entity mappings
261
- const filter = {block_id: oldId, environment};
262
- const update = {$set: {block_id: newId}};
263
- await this.db.collection('IntentBlockMapping').updateMany(filter, update);
264
- await this.db.collection('EntityBlockMapping').updateMany(filter, update);
265
- } else if (this.collection === 'Intent') {
266
- // update intent mapping
267
- const filter = {intent_id: oldId, environment};
268
- const update = {$set: {intent_id: newId}};
269
- await this.db.collection('IntentBlockMapping').updateMany(filter, update);
270
- } else if (this.collection === 'Entity') {
271
- // update entity mapping
272
- const filter = {entity_id: oldId, environment};
273
- const update = {$set: {entity_id: newId}};
274
- await this.db.collection('EntityBlockMapping').updateMany(filter, update);
275
- } else if (this.collection === 'FormModel') {
276
- return;
277
- } else {
278
- throw Error(`${this.collection} is unsupported revision type.`);
279
- }
251
+ .updateOne(
252
+ {latestRevisionId},
253
+ {$set: {[path]: insertedId, latestRevisionId: insertedId}},
254
+ );
280
255
  }
281
256
 
282
257
  public async revertVersion(id: string, revisionId: string): Promise<this> {
283
- const revisionObjId = new ObjectId();
284
258
  // get the actuall object
285
259
  const obj = await this.db
286
260
  .collection(this.collection)
287
261
  .findOne({_id: new ObjectId(id)});
288
262
 
289
- // get revision
263
+ // get revision to revert to
290
264
  const objToRevert = await this.db
291
265
  .collection(this.collectionRevision)
292
266
  .findOne({_id: new ObjectId(revisionId)});
293
267
 
294
- // update revision object
295
- objToRevert.revision = Nongo.revisionNumber(obj.revision);
296
- objToRevert.history = Nongo.revisionHistory(obj, revisionObjId);
297
- delete objToRevert.diffs;
298
- const diffs = diff(obj, objToRevert);
299
- objToRevert.diffs = excludePathsFromDiff(diffs);
268
+ // set id of revision to id of original, so it saves properly
300
269
  objToRevert._id = obj._id;
301
270
 
271
+ // revert
302
272
  await this.db
303
273
  .collection(this.collection)
304
274
  .replaceOne({_id: obj._id}, objToRevert);
305
275
 
306
- // make actuall object as revision object and save it to the revision collection
307
- obj._id = revisionObjId;
308
- await this.db.collection(this.collectionRevision).insertOne(obj);
309
-
310
276
  // Return the doc as a model
311
277
  // @ts-ignore
312
278
  return new this.constructor(this.nongo, objToRevert);
@@ -431,17 +397,6 @@ export default abstract class Model<
431
397
  return this.findOne({_id: id});
432
398
  }
433
399
 
434
- public async getRevisionHistory(history: RevisionHistory[]) {
435
- const revisionIds = history.map((i) => new ObjectId(i.id));
436
- return this.toArray(
437
- await this.findIterator(
438
- {_id: {$in: revisionIds}},
439
- {sort: {revision: 'descending'}},
440
- this.collectionRevision,
441
- ),
442
- );
443
- }
444
-
445
400
  public async getRevisions(
446
401
  query: Filter<Document>,
447
402
  options?: FindOptions<Document>,
@@ -55,7 +55,7 @@ describe('Testing nongo revisioning', () => {
55
55
  model.obj.age = 30;
56
56
  await model.save();
57
57
  expect(model.obj.revision).toEqual('0.0.2');
58
- const revisions = await nongo.col(DummyModelWithRevision).getRevisionHistory(model.obj.history);
58
+ const revisions = await nongo.col(DummyModelWithRevision).getRevisions({name: model.obj.name});
59
59
  expect(revisions.length).toEqual(1);
60
60
  })
61
61
 
@@ -63,7 +63,7 @@ describe('Testing nongo revisioning', () => {
63
63
  const model = await nongo.col(DummyModelWithRevision).findOne({name: 'John'});
64
64
  model.obj.name = 'Nick';
65
65
  await model.save();
66
- const revisions = await nongo.col(DummyModelWithRevision).getRevisionHistory(model.obj.history);
66
+ const revisions = await nongo.col(DummyModelWithRevision).getRevisions({name: model.obj.name})
67
67
  expect(revisions.length).toEqual(2);
68
68
  const models = await nongo.col(DummyModelWithRevision).find();
69
69
  expect(models.length).toEqual(2);
@@ -73,7 +73,7 @@ describe('Testing nongo revisioning', () => {
73
73
  const revision = await nongo.col(DummyModelWithRevision).getRevision({name: "John", revision: "0.0.1"});
74
74
  expect(revision.obj.revision).toEqual("0.0.1");
75
75
  const model = await nongo.col(DummyModelWithRevision).findOne({name: 'Nick'});
76
- const latestDoc = await nongo.col(DummyModelWithRevision).revertVersion(model.obj._id, model.obj.history[0].id);
76
+ const latestDoc = await nongo.col(DummyModelWithRevision).revertVersion(model.obj._id);
77
77
  expect(latestDoc.obj.name).toEqual(revision.obj.name)
78
78
  })
79
79
  })
@@ -0,0 +1,12 @@
1
+ // This file was generated using nongo-driver's TsInterfaceGenerator.
2
+ export default interface DummyModelChangedObj {
3
+ 'name': string;
4
+ 'pets': Array<{
5
+ 'species'?: string;
6
+ 'likes'?: {
7
+ 'food'?: string[];
8
+ 'drink'?: string[];
9
+ };
10
+ }>;
11
+ '_id'?: any;
12
+ }
@@ -0,0 +1,40 @@
1
+ // This file was generated using nongo-driver's TsInterfaceGenerator.
2
+ export default interface DummyModelObj {
3
+ 'dontStripChildren'?: any;
4
+ 'dontStripChildren2'?: any;
5
+ 'exampleMap'?: {[key: string]: {
6
+ 'mapValueField': string;
7
+ }};
8
+ 'created'?: Date;
9
+ 'arrayOfObject'?: object[];
10
+ 'name': string;
11
+ 'age': number;
12
+ 'pets': Array<{
13
+ 'species'?: string;
14
+ 'likes'?: {
15
+ 'food'?: string[];
16
+ 'drink'?: string[];
17
+ };
18
+ }>;
19
+ 'job': {
20
+ 'role': string;
21
+ 'at'?: string;
22
+ };
23
+ 'location'?: {
24
+ 'address1'?: string;
25
+ };
26
+ 'autoInit': {
27
+ 'initArray': Array<{
28
+ 'nestedObj': any;
29
+ }>;
30
+ 'initNestedObj'?: {
31
+ 'hello'?: string;
32
+ };
33
+ 'initNestedNative'?: any;
34
+ };
35
+ 'notEmptyFields'?: {
36
+ 'aString': string;
37
+ 'anArray': string[];
38
+ };
39
+ '_id'?: any;
40
+ }
@@ -0,0 +1,195 @@
1
+ // This file was generated using nongo-driver's TsInterfaceGenerator.
2
+ export default interface DummyModelWithMaxIndexObj {
3
+ 'clients'?: {
4
+ 'client1'?: {
5
+ 'favouritePet'?: string;
6
+ };
7
+ 'client2'?: {
8
+ 'favouritePet'?: string;
9
+ };
10
+ 'client3'?: {
11
+ 'favouritePet'?: string;
12
+ };
13
+ 'client4'?: {
14
+ 'favouritePet'?: string;
15
+ };
16
+ 'client5'?: {
17
+ 'favouritePet'?: string;
18
+ };
19
+ 'client6'?: {
20
+ 'favouritePet'?: string;
21
+ };
22
+ 'client7'?: {
23
+ 'favouritePet'?: string;
24
+ };
25
+ 'client8'?: {
26
+ 'favouritePet'?: string;
27
+ };
28
+ 'client9'?: {
29
+ 'favouritePet'?: string;
30
+ };
31
+ 'client10'?: {
32
+ 'favouritePet'?: string;
33
+ };
34
+ 'client11'?: {
35
+ 'favouritePet'?: string;
36
+ };
37
+ 'client12'?: {
38
+ 'favouritePet'?: string;
39
+ };
40
+ 'client13'?: {
41
+ 'favouritePet'?: string;
42
+ };
43
+ 'client14'?: {
44
+ 'favouritePet'?: string;
45
+ };
46
+ 'client15'?: {
47
+ 'favouritePet'?: string;
48
+ };
49
+ 'client16'?: {
50
+ 'favouritePet'?: string;
51
+ };
52
+ 'client17'?: {
53
+ 'favouritePet'?: string;
54
+ };
55
+ 'client18'?: {
56
+ 'favouritePet'?: string;
57
+ };
58
+ 'client19'?: {
59
+ 'favouritePet'?: string;
60
+ };
61
+ 'client20'?: {
62
+ 'favouritePet'?: string;
63
+ };
64
+ 'client21'?: {
65
+ 'favouritePet'?: string;
66
+ };
67
+ 'client22'?: {
68
+ 'favouritePet'?: string;
69
+ };
70
+ 'client23'?: {
71
+ 'favouritePet'?: string;
72
+ };
73
+ 'client24'?: {
74
+ 'favouritePet'?: string;
75
+ };
76
+ 'client25'?: {
77
+ 'favouritePet'?: string;
78
+ };
79
+ 'client26'?: {
80
+ 'favouritePet'?: string;
81
+ };
82
+ 'client27'?: {
83
+ 'favouritePet'?: string;
84
+ };
85
+ 'client28'?: {
86
+ 'favouritePet'?: string;
87
+ };
88
+ 'client29'?: {
89
+ 'favouritePet'?: string;
90
+ };
91
+ 'client30'?: {
92
+ 'favouritePet'?: string;
93
+ };
94
+ 'client31'?: {
95
+ 'favouritePet'?: string;
96
+ };
97
+ 'client32'?: {
98
+ 'favouritePet'?: string;
99
+ };
100
+ 'client33'?: {
101
+ 'favouritePet'?: string;
102
+ };
103
+ 'client34'?: {
104
+ 'favouritePet'?: string;
105
+ };
106
+ 'client35'?: {
107
+ 'favouritePet'?: string;
108
+ };
109
+ 'client36'?: {
110
+ 'favouritePet'?: string;
111
+ };
112
+ 'client37'?: {
113
+ 'favouritePet'?: string;
114
+ };
115
+ 'client38'?: {
116
+ 'favouritePet'?: string;
117
+ };
118
+ 'client39'?: {
119
+ 'favouritePet'?: string;
120
+ };
121
+ 'client40'?: {
122
+ 'favouritePet'?: string;
123
+ };
124
+ 'client41'?: {
125
+ 'favouritePet'?: string;
126
+ };
127
+ 'client42'?: {
128
+ 'favouritePet'?: string;
129
+ };
130
+ 'client43'?: {
131
+ 'favouritePet'?: string;
132
+ };
133
+ 'client44'?: {
134
+ 'favouritePet'?: string;
135
+ };
136
+ 'client45'?: {
137
+ 'favouritePet'?: string;
138
+ };
139
+ 'client46'?: {
140
+ 'favouritePet'?: string;
141
+ };
142
+ 'client47'?: {
143
+ 'favouritePet'?: string;
144
+ };
145
+ 'client48'?: {
146
+ 'favouritePet'?: string;
147
+ };
148
+ 'client49'?: {
149
+ 'favouritePet'?: string;
150
+ };
151
+ 'client50'?: {
152
+ 'favouritePet'?: string;
153
+ };
154
+ 'client51'?: {
155
+ 'favouritePet'?: string;
156
+ };
157
+ 'client52'?: {
158
+ 'favouritePet'?: string;
159
+ };
160
+ 'client53'?: {
161
+ 'favouritePet'?: string;
162
+ };
163
+ 'client54'?: {
164
+ 'favouritePet'?: string;
165
+ };
166
+ 'client55'?: {
167
+ 'favouritePet'?: string;
168
+ };
169
+ 'client56'?: {
170
+ 'favouritePet'?: string;
171
+ };
172
+ 'client57'?: {
173
+ 'favouritePet'?: string;
174
+ };
175
+ 'client58'?: {
176
+ 'favouritePet'?: string;
177
+ };
178
+ 'client59'?: {
179
+ 'favouritePet'?: string;
180
+ };
181
+ 'client60'?: {
182
+ 'favouritePet'?: string;
183
+ };
184
+ 'client61'?: {
185
+ 'favouritePet'?: string;
186
+ };
187
+ 'client62'?: {
188
+ 'favouritePet'?: string;
189
+ };
190
+ 'client63'?: {
191
+ 'favouritePet'?: string;
192
+ };
193
+ };
194
+ '_id'?: any;
195
+ }
@@ -0,0 +1,13 @@
1
+ // This file was generated using nongo-driver's TsInterfaceGenerator.
2
+ export default interface DummyModelWithRevisionObj {
3
+ 'revision'?: string;
4
+ 'history'?: Array<{
5
+ 'id'?: string;
6
+ 'revision'?: string;
7
+ 'created'?: Date;
8
+ }>;
9
+ 'created': Date;
10
+ 'name': string;
11
+ 'age'?: number;
12
+ '_id'?: any;
13
+ }
@@ -0,0 +1,12 @@
1
+ // This file was generated using nongo-driver's TsInterfaceGenerator.
2
+ export default interface TextIndexModelModifiedObj {
3
+ 'name'?: string;
4
+ 'module'?: string;
5
+ 'description'?: {
6
+ 'en'?: string;
7
+ 'cy'?: string;
8
+ 'es'?: string;
9
+ };
10
+ 'summary'?: string;
11
+ '_id'?: any;
12
+ }
@@ -0,0 +1,11 @@
1
+ // This file was generated using nongo-driver's TsInterfaceGenerator.
2
+ export default interface TextIndexModelObj {
3
+ 'name'?: string;
4
+ 'module'?: string;
5
+ 'description'?: {
6
+ 'en'?: string;
7
+ 'cy'?: string;
8
+ };
9
+ 'summary'?: string;
10
+ '_id'?: any;
11
+ }
@@ -0,0 +1,11 @@
1
+ // This file was generated using nongo-driver's TsInterfaceGenerator.
2
+ export default interface TextIndexModelTooLongObj {
3
+ 'name'?: string;
4
+ 'module'?: string;
5
+ 'description'?: {
6
+ 'en'?: string;
7
+ 'cy'?: string;
8
+ };
9
+ 'summary'?: string;
10
+ '_id'?: any;
11
+ }