@orion-js/mongodb 3.2.55 → 3.3.6

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.
Files changed (36) hide show
  1. package/lib/createCollection/createIndexes.d.ts +3 -3
  2. package/lib/createCollection/generateId.js +3 -1
  3. package/lib/createCollection/generateId.test.js +38 -0
  4. package/lib/createCollection/getMethods/countDocuments.d.ts +2 -3
  5. package/lib/createCollection/getMethods/countDocuments.js +3 -2
  6. package/lib/createCollection/getMethods/dataLoader/loadById.d.ts +2 -2
  7. package/lib/createCollection/getMethods/dataLoader/loadData.d.ts +2 -2
  8. package/lib/createCollection/getMethods/dataLoader/loadMany.d.ts +2 -2
  9. package/lib/createCollection/getMethods/dataLoader/loadOne.d.ts +2 -2
  10. package/lib/createCollection/getMethods/deleteMany.d.ts +2 -3
  11. package/lib/createCollection/getMethods/deleteMany.js +3 -2
  12. package/lib/createCollection/getMethods/deleteOne.d.ts +2 -3
  13. package/lib/createCollection/getMethods/deleteOne.js +3 -2
  14. package/lib/createCollection/getMethods/estimatedDocumentCount.d.ts +2 -2
  15. package/lib/createCollection/getMethods/find.d.ts +2 -3
  16. package/lib/createCollection/getMethods/find.js +3 -2
  17. package/lib/createCollection/getMethods/findOne.d.ts +2 -3
  18. package/lib/createCollection/getMethods/findOne.js +4 -3
  19. package/lib/createCollection/getMethods/findOneAndUpdate.d.ts +2 -2
  20. package/lib/createCollection/getMethods/getSelector.d.ts +3 -2
  21. package/lib/createCollection/getMethods/getSelector.js +2 -2
  22. package/lib/createCollection/getMethods/insertAndFind.d.ts +2 -2
  23. package/lib/createCollection/getMethods/insertMany.d.ts +2 -2
  24. package/lib/createCollection/getMethods/insertOne.d.ts +2 -2
  25. package/lib/createCollection/getMethods/updateAndFind.d.ts +2 -2
  26. package/lib/createCollection/getMethods/updateItem.d.ts +2 -3
  27. package/lib/createCollection/getMethods/updateItem.js +4 -3
  28. package/lib/createCollection/getMethods/updateMany.d.ts +2 -2
  29. package/lib/createCollection/getMethods/updateOne.d.ts +2 -2
  30. package/lib/createCollection/getMethods/upsert.d.ts +2 -2
  31. package/lib/createCollection/getMethods/wrapErrors.d.ts +1 -1
  32. package/lib/createCollection/initItem.d.ts +2 -3
  33. package/lib/createCollection/initItem.js +3 -2
  34. package/lib/createCollection/typedModel.test.js +8 -0
  35. package/lib/types/index.d.ts +49 -49
  36. package/package.json +10 -10
@@ -1,3 +1,3 @@
1
- import { Collection } from '..';
2
- export declare function checkIndexes(collection: Partial<Collection>): Promise<void>;
3
- export declare function loadIndexes(collection: Partial<Collection>): Promise<string[]>;
1
+ import { Collection, ModelClassBase } from '..';
2
+ export declare function checkIndexes<DocumentType extends ModelClassBase>(collection: Partial<Collection<DocumentType>>): Promise<void>;
3
+ export declare function loadIndexes<DocumentType extends ModelClassBase>(collection: Partial<Collection<DocumentType>>): Promise<string[]>;
@@ -4,7 +4,9 @@ const helpers_1 = require("@orion-js/helpers");
4
4
  const bson_1 = require("bson");
5
5
  const getIdGenerator = (options) => {
6
6
  if (options.idGeneration === 'random') {
7
- return () => (0, helpers_1.generateId)();
7
+ const prefix = options.idPrefix || '';
8
+ const random = (0, helpers_1.generateId)();
9
+ return () => `${prefix}${random}`;
8
10
  }
9
11
  return () => {
10
12
  const id = new bson_1.ObjectID();
@@ -1,4 +1,13 @@
1
1
  "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
2
11
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
13
  };
@@ -6,6 +15,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
15
  const helpers_1 = require("@orion-js/helpers");
7
16
  const index_1 = __importDefault(require("./index"));
8
17
  const bson_1 = require("bson");
18
+ const typed_model_1 = require("@orion-js/typed-model");
9
19
  it('generates a usable mongo objectId as string', async () => {
10
20
  const Tests = (0, index_1.default)({ name: (0, helpers_1.generateId)() });
11
21
  const now = new Date();
@@ -17,3 +27,31 @@ it('generates a usable mongo objectId as string', async () => {
17
27
  const diff = now.valueOf() - objectId.getTimestamp().valueOf();
18
28
  expect(diff).toBeGreaterThan(0);
19
29
  });
30
+ it('generates a ids with a prefix', async () => {
31
+ let Schema = class Schema {
32
+ };
33
+ __decorate([
34
+ (0, typed_model_1.Prop)(),
35
+ __metadata("design:type", String)
36
+ ], Schema.prototype, "_id", void 0);
37
+ __decorate([
38
+ (0, typed_model_1.Prop)(),
39
+ __metadata("design:type", String)
40
+ ], Schema.prototype, "name", void 0);
41
+ Schema = __decorate([
42
+ (0, typed_model_1.TypedSchema)()
43
+ ], Schema);
44
+ const Tests = (0, index_1.default)({
45
+ name: (0, helpers_1.generateId)(),
46
+ schema: Schema,
47
+ idGeneration: 'random',
48
+ idPrefix: 'pref_'
49
+ });
50
+ const userId = await Tests.insertOne({
51
+ name: 'Nico'
52
+ });
53
+ const item = await Tests.findOne(userId);
54
+ // no te deja usar otra cosa que no sea con el prefix
55
+ await Tests.updateOne({ _id: 'pref_123' }, { $set: { name: 'Nicolás' } });
56
+ expect(userId).toMatch(/^pref_/);
57
+ });
@@ -1,3 +1,2 @@
1
- import { Collection, CountDocuments } from '../../types';
2
- declare const _default: <DocumentType>(collection: Partial<Collection>) => CountDocuments<DocumentType>;
3
- export default _default;
1
+ import { Collection, CountDocuments, ModelClassBase } from '../../types';
2
+ export default function <DocumentType extends ModelClassBase>(collection: Partial<Collection<DocumentType>>): CountDocuments<DocumentType>;
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const getSelector_1 = __importDefault(require("./getSelector"));
7
- exports.default = (collection) => {
7
+ function default_1(collection) {
8
8
  const func = async function (selectorArg, options) {
9
9
  await collection.connectionPromise;
10
10
  const selector = (0, getSelector_1.default)(arguments);
@@ -12,4 +12,5 @@ exports.default = (collection) => {
12
12
  return result;
13
13
  };
14
14
  return func;
15
- };
15
+ }
16
+ exports.default = default_1;
@@ -1,2 +1,2 @@
1
- import { Collection, DataLoader } from '../../../types';
2
- export default function <DocumentType>(collection: Partial<Collection>): DataLoader.LoadById<DocumentType>;
1
+ import { Collection, DataLoader, ModelClassBase } from '../../../types';
2
+ export default function <DocumentType extends ModelClassBase>(collection: Partial<Collection<DocumentType>>): DataLoader.LoadById<DocumentType>;
@@ -1,2 +1,2 @@
1
- import { DataLoader, Collection } from '../../../types';
2
- export default function <ModelClass>(collection: Partial<Collection>): DataLoader.LoadData<ModelClass>;
1
+ import { DataLoader, Collection, ModelClassBase } from '../../../types';
2
+ export default function <DocumentType extends ModelClassBase>(collection: Partial<Collection<DocumentType>>): DataLoader.LoadData<DocumentType>;
@@ -1,2 +1,2 @@
1
- import { Collection, DataLoader } from '../../../types';
2
- export default function <ModelClass>(collection: Partial<Collection>): DataLoader.LoadMany<ModelClass>;
1
+ import { Collection, DataLoader, ModelClassBase } from '../../../types';
2
+ export default function <DocumentType extends ModelClassBase>(collection: Partial<Collection<DocumentType>>): DataLoader.LoadMany<DocumentType>;
@@ -1,2 +1,2 @@
1
- import { Collection, DataLoader } from '../../../types';
2
- export default function <ModelClass>(collection: Partial<Collection>): DataLoader.LoadOne<ModelClass>;
1
+ import { Collection, DataLoader, ModelClassBase } from '../../../types';
2
+ export default function <DocumentType extends ModelClassBase>(collection: Partial<Collection<DocumentType>>): DataLoader.LoadOne<DocumentType>;
@@ -1,3 +1,2 @@
1
- import { Collection, DeleteMany } from '../../types';
2
- declare const _default: <DocumentType>(collection: Partial<Collection>) => DeleteMany<DocumentType>;
3
- export default _default;
1
+ import { Collection, DeleteMany, ModelClassBase } from '../../types';
2
+ export default function <DocumentType extends ModelClassBase>(collection: Partial<Collection<DocumentType>>): DeleteMany<DocumentType>;
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const getSelector_1 = __importDefault(require("./getSelector"));
7
- exports.default = (collection) => {
7
+ function default_1(collection) {
8
8
  const func = async function (selectorArg, options) {
9
9
  await collection.connectionPromise;
10
10
  const selector = (0, getSelector_1.default)(arguments);
@@ -12,4 +12,5 @@ exports.default = (collection) => {
12
12
  return result;
13
13
  };
14
14
  return func;
15
- };
15
+ }
16
+ exports.default = default_1;
@@ -1,3 +1,2 @@
1
- import { Collection, DeleteOne } from '../../types';
2
- declare const _default: <DocumentType>(collection: Partial<Collection>) => DeleteOne<DocumentType>;
3
- export default _default;
1
+ import { Collection, DeleteOne, ModelClassBase } from '../../types';
2
+ export default function <DocumentType extends ModelClassBase>(collection: Partial<Collection<DocumentType>>): DeleteOne<DocumentType>;
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const getSelector_1 = __importDefault(require("./getSelector"));
7
- exports.default = (collection) => {
7
+ function default_1(collection) {
8
8
  const func = async function (selectorArg, options) {
9
9
  await collection.connectionPromise;
10
10
  const selector = (0, getSelector_1.default)(arguments);
@@ -12,4 +12,5 @@ exports.default = (collection) => {
12
12
  return result;
13
13
  };
14
14
  return func;
15
- };
15
+ }
16
+ exports.default = default_1;
@@ -1,3 +1,3 @@
1
- import { Collection, EstimatedDocumentCount } from '../../types';
2
- declare const _default: <DocumentType>(collection: Partial<Collection>) => EstimatedDocumentCount<DocumentType>;
1
+ import { Collection, EstimatedDocumentCount, ModelClassBase } from '../../types';
2
+ declare const _default: <DocumentType extends ModelClassBase>(collection: Partial<Collection<DocumentType>>) => EstimatedDocumentCount<DocumentType>;
3
3
  export default _default;
@@ -1,3 +1,2 @@
1
- import { Collection, Find } from '../../types';
2
- declare const _default: <DocumentType>(collection: Partial<Collection>) => Find<DocumentType>;
3
- export default _default;
1
+ import { Collection, Find, ModelClassBase } from '../../types';
2
+ export default function <DocumentType extends ModelClassBase>(collection: Partial<Collection<DocumentType>>): Find<DocumentType>;
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const getSelector_1 = __importDefault(require("./getSelector"));
7
- exports.default = (collection) => {
7
+ function default_1(collection) {
8
8
  const find = function (selectorArg, options) {
9
9
  const selector = (0, getSelector_1.default)(arguments);
10
10
  const cursor = collection.rawCollection.find(selector, options);
@@ -17,4 +17,5 @@ exports.default = (collection) => {
17
17
  return cursor;
18
18
  };
19
19
  return find;
20
- };
20
+ }
21
+ exports.default = default_1;
@@ -1,3 +1,2 @@
1
- import { Collection, FindOne } from '../../types';
2
- declare const _default: <DocumentType>(collection: Partial<Collection>) => FindOne<DocumentType>;
3
- export default _default;
1
+ import { Collection, FindOne, ModelClassBase } from '../../types';
2
+ export default function <DocumentType extends ModelClassBase>(collection: Partial<Collection<DocumentType>>): FindOne<DocumentType>;
@@ -4,14 +4,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const getSelector_1 = __importDefault(require("./getSelector"));
7
- exports.default = (collection) => {
7
+ function default_1(collection) {
8
8
  const findOne = async function (selectorArg, options) {
9
9
  await collection.connectionPromise;
10
10
  const selector = (0, getSelector_1.default)(arguments);
11
- const item = await collection.rawCollection.findOne(selector, options);
11
+ const item = (await collection.rawCollection.findOne(selector, options));
12
12
  if (!item)
13
13
  return item;
14
14
  return collection.initItem(item);
15
15
  };
16
16
  return findOne;
17
- };
17
+ }
18
+ exports.default = default_1;
@@ -1,3 +1,3 @@
1
- import { Collection, FindOneAndUpdate } from '../../types';
2
- declare const _default: <DocumentType>(collection: Partial<Collection>) => FindOneAndUpdate<DocumentType>;
1
+ import { Collection, FindOneAndUpdate, ModelClassBase } from '../../types';
2
+ declare const _default: <DocumentType extends ModelClassBase>(collection: Partial<Collection<DocumentType>>) => FindOneAndUpdate<DocumentType>;
3
3
  export default _default;
@@ -1,2 +1,3 @@
1
- import { Document, Filter } from 'mongodb';
2
- export default function (args: IArguments): Filter<Document>;
1
+ import { Filter } from 'mongodb';
2
+ import { ModelClassBase } from '../../types';
3
+ export default function getSelector<ModelClass extends ModelClassBase>(args: IArguments): Filter<ModelClass>;
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const isPlainObject_1 = __importDefault(require("lodash/isPlainObject"));
7
- function default_1(args) {
7
+ function getSelector(args) {
8
8
  if (args.length === 0)
9
9
  return {};
10
10
  const selector = args[0];
@@ -18,4 +18,4 @@ function default_1(args) {
18
18
  _id: 'shouldReturnNull'
19
19
  };
20
20
  }
21
- exports.default = default_1;
21
+ exports.default = getSelector;
@@ -1,3 +1,3 @@
1
- import { Collection, InsertAndFind } from '../../types';
2
- declare const _default: <DocumentType>(collection: Partial<Collection>) => InsertAndFind<DocumentType>;
1
+ import { Collection, InsertAndFind, ModelClassBase } from '../../types';
2
+ declare const _default: <DocumentType extends ModelClassBase>(collection: Partial<Collection<DocumentType>>) => InsertAndFind<DocumentType>;
3
3
  export default _default;
@@ -1,3 +1,3 @@
1
- import { Collection, InsertMany } from '../../types';
2
- declare const _default: <DocumentType>(collection: Partial<Collection>) => InsertMany<DocumentType>;
1
+ import { Collection, InsertMany, ModelClassBase } from '../../types';
2
+ declare const _default: <DocumentType extends ModelClassBase>(collection: Partial<Collection<DocumentType>>) => InsertMany<DocumentType>;
3
3
  export default _default;
@@ -1,3 +1,3 @@
1
- import { Collection, InsertOne } from '../../types';
2
- declare const _default: <DocumentType>(collection: Partial<Collection>) => InsertOne<DocumentType>;
1
+ import { Collection, InsertOne, ModelClassBase } from '../../types';
2
+ declare const _default: <DocumentType extends ModelClassBase>(collection: Partial<Collection<DocumentType>>) => InsertOne<DocumentType>;
3
3
  export default _default;
@@ -1,3 +1,3 @@
1
- import { Collection, UpdateAndFind } from '../../types';
2
- declare const _default: <DocumentType>(collection: Partial<Collection>) => UpdateAndFind<DocumentType>;
1
+ import { Collection, ModelClassBase, UpdateAndFind } from '../../types';
2
+ declare const _default: <DocumentType extends ModelClassBase>(collection: Partial<Collection<DocumentType>>) => UpdateAndFind<DocumentType>;
3
3
  export default _default;
@@ -1,3 +1,2 @@
1
- import { Collection, UpdateItem } from '../../types';
2
- declare const _default: <DocumentType>(collection: Partial<Collection>) => UpdateItem<DocumentType>;
3
- export default _default;
1
+ import { Collection, ModelClassBase, UpdateItem } from '../../types';
2
+ export default function <DocumentType extends ModelClassBase>(collection: Partial<Collection<DocumentType>>): UpdateItem<DocumentType>;
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const wrapErrors_1 = require("./wrapErrors");
4
- exports.default = (collection) => {
4
+ function default_1(collection) {
5
5
  const updateItem = async function (item, modifier) {
6
6
  await collection.connectionPromise;
7
7
  const updated = await (0, wrapErrors_1.wrapErrors)(async () => {
8
- return await collection.updateAndFind({ _id: item._id }, modifier);
8
+ return await collection.updateAndFind(item._id, modifier);
9
9
  });
10
10
  for (const key in item) {
11
11
  delete item[key];
@@ -15,4 +15,5 @@ exports.default = (collection) => {
15
15
  }
16
16
  };
17
17
  return updateItem;
18
- };
18
+ }
19
+ exports.default = default_1;
@@ -1,3 +1,3 @@
1
- import { Collection, UpdateMany } from '../../types';
2
- declare const _default: <DocumentType>(collection: Partial<Collection>) => UpdateMany<DocumentType>;
1
+ import { Collection, ModelClassBase, UpdateMany } from '../../types';
2
+ declare const _default: <DocumentType extends ModelClassBase>(collection: Partial<Collection<DocumentType>>) => UpdateMany<DocumentType>;
3
3
  export default _default;
@@ -1,3 +1,3 @@
1
- import { Collection, UpdateOne } from '../../types';
2
- declare const _default: <DocumentType>(collection: Partial<Collection>) => UpdateOne<DocumentType>;
1
+ import { Collection, ModelClassBase, UpdateOne } from '../../types';
2
+ declare const _default: <DocumentType extends ModelClassBase>(collection: Partial<Collection<DocumentType>>) => UpdateOne<DocumentType>;
3
3
  export default _default;
@@ -1,3 +1,3 @@
1
- import { Collection, Upsert } from '../../types';
2
- declare const _default: <DocumentType>(collection: Partial<Collection>) => Upsert<DocumentType>;
1
+ import { Collection, ModelClassBase, Upsert } from '../../types';
2
+ declare const _default: <DocumentType extends ModelClassBase>(collection: Partial<Collection<DocumentType>>) => Upsert<DocumentType>;
3
3
  export default _default;
@@ -1 +1 @@
1
- export declare const wrapErrors: <TFunc extends Function>(operation: TFunc) => Promise<any>;
1
+ export declare const wrapErrors: <TFunc extends () => Promise<any>>(operation: TFunc) => Promise<ReturnType<TFunc>>;
@@ -1,3 +1,2 @@
1
- import { Collection } from '../types';
2
- declare const _default: (collection: Partial<Collection>) => (doc: any) => any;
3
- export default _default;
1
+ import { Collection, InitItem, ModelClassBase } from '../types';
2
+ export default function initItem<ModelClass extends ModelClassBase>(collection: Partial<Collection<ModelClass>>): InitItem<ModelClass>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = (collection) => {
3
+ function initItem(collection) {
4
4
  const initItem = doc => {
5
5
  if (!doc)
6
6
  return doc;
@@ -9,4 +9,5 @@ exports.default = (collection) => {
9
9
  return collection.model.initItem(doc);
10
10
  };
11
11
  return initItem;
12
- };
12
+ }
13
+ exports.default = initItem;
@@ -26,6 +26,10 @@ describe('Collections with typed model', () => {
26
26
  });
27
27
  let Person = class Person {
28
28
  };
29
+ __decorate([
30
+ (0, typed_model_1.Prop)(),
31
+ __metadata("design:type", String)
32
+ ], Person.prototype, "_id", void 0);
29
33
  __decorate([
30
34
  (0, typed_model_1.Prop)(),
31
35
  __metadata("design:type", String)
@@ -109,6 +113,10 @@ describe('Collections with typed model', () => {
109
113
  });
110
114
  let Person = class Person {
111
115
  };
116
+ __decorate([
117
+ (0, typed_model_1.Prop)(),
118
+ __metadata("design:type", String)
119
+ ], Person.prototype, "_id", void 0);
112
120
  __decorate([
113
121
  (0, typed_model_1.Prop)(),
114
122
  __metadata("design:type", String)
@@ -1,37 +1,35 @@
1
1
  import * as MongoDB from 'mongodb';
2
2
  import { Model } from '@orion-js/models';
3
- import { Schema } from '@orion-js/schema';
3
+ import { Blackbox, Schema } from '@orion-js/schema';
4
4
  import { OrionMongoClient } from '../connect/connections';
5
- declare type RemoveFunctions<T> = OmitByValue<T, Function>;
6
- export declare type DocumentWithId<T> = T & {
7
- /**
8
- * The ID of the document
9
- */
10
- _id: string;
5
+ declare type RemoveFunctions<T extends ModelClassBase> = Pick<T, {
6
+ [Key in keyof T]-?: T[Key] extends Function ? never : Key;
7
+ }[keyof T]> & {
8
+ _id: ModelClassBase['_id'];
11
9
  };
12
- export declare type DocumentWithIdOptional<T> = Omit<T, '_id'> & {
10
+ export declare type ModelClassBase = {
11
+ _id: string;
12
+ } & Blackbox;
13
+ export declare type DocumentWithIdOptional<T extends ModelClassBase> = Omit<T, '_id'> & {
13
14
  /**
14
15
  * The ID of the document
15
16
  */
16
- _id?: string;
17
+ _id?: T['_id'];
17
18
  };
18
19
  export declare type DocumentWithoutId<T> = Omit<T, '_id'>;
19
- declare type OmitByValue<T, ValueType> = Pick<T, {
20
- [Key in keyof T]-?: T[Key] extends ValueType ? never : Key;
21
- }[keyof T]>;
22
- export declare type ModelToDocumentType<ModelClass> = RemoveFunctions<ModelClass>;
23
- export declare type ModelToDocumentTypeWithId<ModelClass> = DocumentWithId<RemoveFunctions<ModelClass>>;
24
- export declare type ModelToDocumentTypeWithoutId<ModelClass> = DocumentWithoutId<ModelToDocumentType<ModelClass>>;
25
- export declare type ModelToDocumentTypeWithIdOptional<ModelClass> = DocumentWithIdOptional<ModelToDocumentType<ModelClass>>;
26
- export declare type ModelToMongoSelector<ModelClass> = MongoSelector<ModelToDocumentType<ModelClass>>;
27
- export declare type ModelToUpdateFilter<ModelClass> = MongoDB.UpdateFilter<ModelToDocumentTypeWithoutId<ModelClass>> | Partial<ModelToDocumentTypeWithoutId<ModelClass>>;
20
+ export declare type ModelToDocumentType<ModelClass extends ModelClassBase> = RemoveFunctions<ModelClass>;
21
+ export declare type ModelToDocumentTypeWithId<ModelClass extends ModelClassBase> = RemoveFunctions<ModelClass>;
22
+ export declare type ModelToDocumentTypeWithoutId<ModelClass extends ModelClassBase> = DocumentWithoutId<ModelToDocumentType<ModelClass>>;
23
+ export declare type ModelToDocumentTypeWithIdOptional<ModelClass extends ModelClassBase> = DocumentWithIdOptional<ModelToDocumentType<ModelClass>>;
24
+ export declare type ModelToMongoSelector<ModelClass extends ModelClassBase> = MongoSelector<ModelToDocumentType<ModelClass>>;
25
+ export declare type ModelToUpdateFilter<ModelClass extends ModelClassBase> = MongoDB.UpdateFilter<ModelToDocumentTypeWithoutId<ModelClass>> | Partial<ModelToDocumentTypeWithoutId<ModelClass>>;
28
26
  export interface CollectionIndex {
29
27
  keys: MongoDB.IndexSpecification;
30
28
  options?: MongoDB.CreateIndexesOptions;
31
29
  }
32
30
  declare type KeyOf<T extends object> = Extract<keyof T, string>;
33
31
  export declare namespace DataLoader {
34
- interface LoadDataOptionsBase<ModelClass> {
32
+ interface LoadDataOptionsBase<ModelClass extends ModelClassBase> {
35
33
  key: KeyOf<ModelToDocumentTypeWithId<ModelClass>>;
36
34
  match?: MongoDB.Filter<ModelToDocumentTypeWithId<ModelClass>>;
37
35
  sort?: MongoDB.Sort;
@@ -39,20 +37,20 @@ export declare namespace DataLoader {
39
37
  timeout?: number;
40
38
  debug?: boolean;
41
39
  }
42
- export interface LoadDataOptions<ModelClass> extends LoadDataOptionsBase<ModelClass> {
40
+ export interface LoadDataOptions<ModelClass extends ModelClassBase> extends LoadDataOptionsBase<ModelClass> {
43
41
  value?: any;
44
42
  values?: Array<any>;
45
43
  }
46
- export interface LoadOneOptions<ModelClass> extends LoadDataOptionsBase<ModelClass> {
44
+ export interface LoadOneOptions<ModelClass extends ModelClassBase> extends LoadDataOptionsBase<ModelClass> {
47
45
  value: any;
48
46
  }
49
- export type LoadData<ModelClass> = (options: LoadDataOptions<ModelClass>) => Promise<Array<ModelClass>>;
50
- export type LoadOne<ModelClass> = (options: LoadOneOptions<ModelClass>) => Promise<ModelClass>;
51
- export type LoadMany<ModelClass> = (options: LoadDataOptions<ModelClass>) => Promise<Array<ModelClass>>;
52
- export type LoadById<ModelClass> = (id: string) => Promise<ModelClass>;
47
+ export type LoadData<ModelClass extends ModelClassBase> = (options: LoadDataOptions<ModelClass>) => Promise<Array<ModelClass>>;
48
+ export type LoadOne<ModelClass extends ModelClassBase> = (options: LoadOneOptions<ModelClass>) => Promise<ModelClass>;
49
+ export type LoadMany<ModelClass extends ModelClassBase> = (options: LoadDataOptions<ModelClass>) => Promise<Array<ModelClass>>;
50
+ export type LoadById<ModelClass extends ModelClassBase> = (id: ModelClass['_id']) => Promise<ModelClass>;
53
51
  export {};
54
52
  }
55
- export declare type MongoSelector<DocumentType = MongoDB.Document> = string | MongoDB.Filter<DocumentType>;
53
+ export declare type MongoSelector<ModelClass extends ModelClassBase = ModelClassBase> = ModelClass['_id'] | MongoDB.Filter<ModelClass>;
56
54
  export interface FindCursor<ModelClass> extends MongoDB.FindCursor {
57
55
  toArray: () => Promise<Array<ModelClass>>;
58
56
  }
@@ -71,23 +69,21 @@ export interface InsertOptions {
71
69
  validate?: boolean;
72
70
  mongoOptions?: MongoDB.InsertOneOptions;
73
71
  }
74
- export declare type InitItem<ModelClass> = (doc: MongoDB.Document) => ModelClass;
75
- export declare type FindOne<ModelClass> = (selector?: ModelToMongoSelector<ModelClass>, options?: MongoDB.FindOptions) => Promise<ModelClass>;
76
- export declare type Find<ModelClass> = (selector?: ModelToMongoSelector<ModelClass>, options?: MongoDB.FindOptions) => FindCursor<ModelClass>;
77
- export declare type FindOneAndUpdate<ModelClass> = (selector: ModelToMongoSelector<ModelClass>, modifier: ModelToUpdateFilter<ModelClass>, options?: FindOneAndUpdateUpdateOptions) => Promise<ModelClass>;
78
- export declare type UpdateAndFind<ModelClass> = (selector: ModelToMongoSelector<ModelClass>, modifier: ModelToUpdateFilter<ModelClass>, options?: FindOneAndUpdateUpdateOptions) => Promise<ModelClass>;
79
- export declare type UpdateItem<ModelClass> = (item: {
80
- _id: string;
81
- } & ModelClass, modifier: ModelToUpdateFilter<ModelClass>) => Promise<void>;
82
- export declare type InsertOne<ModelClass> = (doc: ModelToDocumentTypeWithIdOptional<ModelClass>, options?: InsertOptions) => Promise<string>;
83
- export declare type InsertMany<ModelClass> = (doc: Array<ModelToDocumentTypeWithIdOptional<ModelClass>>, options?: InsertOptions) => Promise<Array<string>>;
84
- export declare type InsertAndFind<ModelClass> = (doc: ModelToDocumentTypeWithIdOptional<ModelClass>, options?: InsertOptions) => Promise<ModelClass>;
85
- export declare type DeleteMany<ModelClass> = (selector: ModelToMongoSelector<ModelClass>, options?: MongoDB.DeleteOptions) => Promise<MongoDB.DeleteResult>;
86
- export declare type DeleteOne<ModelClass> = (selector: ModelToMongoSelector<ModelClass>, options?: MongoDB.DeleteOptions) => Promise<MongoDB.DeleteResult>;
87
- export declare type UpdateOne<ModelClass> = (selector: ModelToMongoSelector<ModelClass>, modifier: ModelToUpdateFilter<ModelClass>, options?: UpdateOptions) => Promise<MongoDB.UpdateResult>;
88
- export declare type UpdateMany<ModelClass> = (selector: ModelToMongoSelector<ModelClass>, modifier: ModelToUpdateFilter<ModelClass>, options?: UpdateOptions) => Promise<MongoDB.UpdateResult | MongoDB.Document>;
89
- export declare type Upsert<ModelClass> = (selector: ModelToMongoSelector<ModelClass>, modifier: ModelToUpdateFilter<ModelClass>, options?: UpdateOptions) => Promise<MongoDB.UpdateResult>;
90
- export interface CreateCollectionOptions {
72
+ export declare type InitItem<ModelClass extends ModelClassBase> = (doc: any) => ModelClass;
73
+ export declare type FindOne<ModelClass extends ModelClassBase> = (selector?: ModelToMongoSelector<ModelClass>, options?: MongoDB.FindOptions) => Promise<ModelClass>;
74
+ export declare type Find<ModelClass extends ModelClassBase> = (selector?: ModelToMongoSelector<ModelClass>, options?: MongoDB.FindOptions) => FindCursor<ModelClass>;
75
+ export declare type FindOneAndUpdate<ModelClass extends ModelClassBase> = (selector: ModelToMongoSelector<ModelClass>, modifier: ModelToUpdateFilter<ModelClass>, options?: FindOneAndUpdateUpdateOptions) => Promise<ModelClass>;
76
+ export declare type UpdateAndFind<ModelClass extends ModelClassBase> = (selector: ModelToMongoSelector<ModelClass>, modifier: ModelToUpdateFilter<ModelClass>, options?: FindOneAndUpdateUpdateOptions) => Promise<ModelClass>;
77
+ export declare type UpdateItem<ModelClass extends ModelClassBase> = (item: ModelClass, modifier: ModelToUpdateFilter<ModelClass>) => Promise<void>;
78
+ export declare type InsertOne<ModelClass extends ModelClassBase> = (doc: ModelToDocumentTypeWithIdOptional<ModelClass>, options?: InsertOptions) => Promise<ModelClass['_id']>;
79
+ export declare type InsertMany<ModelClass extends ModelClassBase> = (doc: Array<ModelToDocumentTypeWithIdOptional<ModelClass>>, options?: InsertOptions) => Promise<Array<ModelClass['_id']>>;
80
+ export declare type InsertAndFind<ModelClass extends ModelClassBase> = (doc: ModelToDocumentTypeWithIdOptional<ModelClass>, options?: InsertOptions) => Promise<ModelClass>;
81
+ export declare type DeleteMany<ModelClass extends ModelClassBase> = (selector: ModelToMongoSelector<ModelClass>, options?: MongoDB.DeleteOptions) => Promise<MongoDB.DeleteResult>;
82
+ export declare type DeleteOne<ModelClass extends ModelClassBase> = (selector: ModelToMongoSelector<ModelClass>, options?: MongoDB.DeleteOptions) => Promise<MongoDB.DeleteResult>;
83
+ export declare type UpdateOne<ModelClass extends ModelClassBase> = (selector: ModelToMongoSelector<ModelClass>, modifier: ModelToUpdateFilter<ModelClass>, options?: UpdateOptions) => Promise<MongoDB.UpdateResult>;
84
+ export declare type UpdateMany<ModelClass extends ModelClassBase> = (selector: ModelToMongoSelector<ModelClass>, modifier: ModelToUpdateFilter<ModelClass>, options?: UpdateOptions) => Promise<MongoDB.UpdateResult | MongoDB.Document>;
85
+ export declare type Upsert<ModelClass extends ModelClassBase> = (selector: ModelToMongoSelector<ModelClass>, modifier: ModelToUpdateFilter<ModelClass>, options?: UpdateOptions) => Promise<MongoDB.UpdateResult>;
86
+ export interface CreateCollectionOptions<ModelClass extends ModelClassBase = ModelClassBase> {
91
87
  /**
92
88
  * The name of the collection on the Mongo Database
93
89
  */
@@ -114,11 +110,15 @@ export interface CreateCollectionOptions {
114
110
  * Select between random id generation o mongo (time based) id generation
115
111
  */
116
112
  idGeneration?: 'mongo' | 'random';
113
+ /**
114
+ * ID prefix. Only used if idGeneration is random. Recommended for type checking
115
+ */
116
+ idPrefix?: ModelClass['_id'];
117
117
  }
118
- export declare type EstimatedDocumentCount<ModelClass> = (options?: MongoDB.EstimatedDocumentCountOptions) => Promise<number>;
119
- export declare type CountDocuments<ModelClass> = (selector: ModelToMongoSelector<ModelClass>, options?: MongoDB.CountDocumentsOptions) => Promise<number>;
120
- export declare type CreateCollection = <ModelClass = any>(options: CreateCollectionOptions) => Collection<ModelClass>;
121
- export interface Collection<ModelClass = any> {
118
+ export declare type EstimatedDocumentCount<ModelClass extends ModelClassBase> = (options?: MongoDB.EstimatedDocumentCountOptions) => Promise<number>;
119
+ export declare type CountDocuments<ModelClass extends ModelClassBase> = (selector: ModelToMongoSelector<ModelClass>, options?: MongoDB.CountDocumentsOptions) => Promise<number>;
120
+ export declare type CreateCollection = <ModelClass extends ModelClassBase = any>(options: CreateCollectionOptions<ModelClass>) => Collection<ModelClass>;
121
+ export interface Collection<ModelClass extends ModelClassBase = ModelClassBase> {
122
122
  name: string;
123
123
  connectionName?: string;
124
124
  schema?: Schema;
@@ -127,11 +127,11 @@ export interface Collection<ModelClass = any> {
127
127
  */
128
128
  model?: Model;
129
129
  indexes: Array<CollectionIndex>;
130
- generateId: () => string;
130
+ generateId: () => ModelClass['_id'];
131
131
  getSchema: () => Schema;
132
132
  db: MongoDB.Db;
133
133
  client: OrionMongoClient;
134
- rawCollection: MongoDB.Collection;
134
+ rawCollection: MongoDB.Collection<ModelClass>;
135
135
  initItem: InitItem<ModelClass>;
136
136
  findOne: FindOne<ModelClass>;
137
137
  find: Find<ModelClass>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orion-js/mongodb",
3
- "version": "3.2.55",
3
+ "version": "3.3.6",
4
4
  "main": "lib/index.js",
5
5
  "types": "lib/index.d.ts",
6
6
  "files": [
@@ -17,14 +17,14 @@
17
17
  "upgrade-interactive": "yarn upgrade-interactive"
18
18
  },
19
19
  "dependencies": {
20
- "@orion-js/env": "^3.2.40",
21
- "@orion-js/helpers": "^3.2.48",
22
- "@orion-js/logger": "^3.2.40",
23
- "@orion-js/models": "^3.2.53",
24
- "@orion-js/resolvers": "^3.2.53",
25
- "@orion-js/schema": "^3.2.53",
26
- "@orion-js/services": "^3.2.48",
27
- "@orion-js/typed-model": "^3.2.53",
20
+ "@orion-js/env": "^3.3.6",
21
+ "@orion-js/helpers": "^3.3.6",
22
+ "@orion-js/logger": "^3.3.6",
23
+ "@orion-js/models": "^3.3.6",
24
+ "@orion-js/resolvers": "^3.3.6",
25
+ "@orion-js/schema": "^3.3.6",
26
+ "@orion-js/services": "^3.3.6",
27
+ "@orion-js/typed-model": "^3.3.6",
28
28
  "dataloader": "2.1.0",
29
29
  "dot-object": "2.1.4",
30
30
  "mongodb": "4.5.0"
@@ -41,5 +41,5 @@
41
41
  "publishConfig": {
42
42
  "access": "public"
43
43
  },
44
- "gitHead": "ce5164ec1e1f513042436572b0fbf0d4df0fd224"
44
+ "gitHead": "d4c33669c0b80c178ad769fd0bd845382d8c6645"
45
45
  }