@biorate/mongodb 0.28.3 → 0.29.1

Sign up to get free protection for your applications and to get access to all the features.
package/src/index.ts DELETED
@@ -1,152 +0,0 @@
1
- import { init, injectable } from '@biorate/inversion';
2
- import { events } from '@biorate/tools';
3
- import { Connector } from '@biorate/connector';
4
- import { createConnection } from 'mongoose';
5
- import { getModelForClass } from '@typegoose/typegoose';
6
- import { MongoDBCantConnectError } from './errors';
7
- import { IMongoDBConfig, IMongoDBConnection } from './interfaces';
8
-
9
- export * from './errors';
10
- export * from './interfaces';
11
-
12
- /**
13
- * @description Mongodb ORM connector based on mongoose and typegoose
14
- *
15
- * ### Features:
16
- * - connector manager for mongodb
17
- *
18
- * @example
19
- * ```
20
- * import { inject, container, Types, Core } from '@biorate/inversion';
21
- * import { IConfig, Config } from '@biorate/config';
22
- * import {
23
- * Severity,
24
- * modelOptions,
25
- * Prop,
26
- * MongoDBConnector,
27
- * IMongoDBConnector,
28
- * model,
29
- * ReturnModelType,
30
- * } from '@biorate/mongodb';
31
- *
32
- * // Define models
33
- * @modelOptions({
34
- * options: {
35
- * allowMixed: Severity.ALLOW,
36
- * },
37
- * schemaOptions: { collection: 'test', versionKey: false },
38
- * })
39
- * export class TestModel {
40
- * @Prop()
41
- * firstName: string;
42
- *
43
- * @Prop()
44
- * lastName: string;
45
- *
46
- * @Prop()
47
- * age: number;
48
- * }
49
- *
50
- * // Define root
51
- * export class Root extends Core() {
52
- * @inject(MongoDBConnector) public connector: IMongoDBConnector;
53
- * @model(TestModel) public test: ReturnModelType<typeof TestModel>;
54
- * }
55
- *
56
- * // Bind dependencies
57
- * container.bind<IConfig>(Types.Config).to(Config).inSingletonScope();
58
- * container.bind<IMongoDBConnector>(MongoDBConnector).toSelf().inSingletonScope();
59
- * container.bind<Root>(Root).toSelf().inSingletonScope();
60
- *
61
- * // Configure
62
- * container.get<IConfig>(Types.Config).merge({
63
- * MongoDB: [
64
- * {
65
- * name: 'connection',
66
- * host: 'mongodb://localhost:27017/',
67
- * options: {
68
- * useNewUrlParser: true,
69
- * useUnifiedTopology: true,
70
- * dbName: 'test',
71
- * },
72
- * },
73
- * ],
74
- * });
75
- *
76
- * (async () => {
77
- * const root = container.get<Root>(Root);
78
- * await root.$run();
79
- * await root.connector.connection().dropDatabase();
80
- *
81
- * const connection = root.connector.connection('connection'); // Get connection instance
82
- * console.log(connection);
83
- *
84
- * await new root.test({
85
- * firstName: 'Vasya',
86
- * lastName: 'Pupkin',
87
- * age: 36,
88
- * }).save(); // insert data into test collection
89
- *
90
- * // Get data from database
91
- * const data = await root.test.find({ firstName: 'Vasya' }, { _id: 0 });
92
- * console.log(data); // {
93
- * // firstName: 'Vasya',
94
- * // lastName: 'Pupkin',
95
- * // age: 36,
96
- * // }
97
- * })();
98
- * ```
99
- */
100
- @injectable()
101
- export class MongoDBConnector extends Connector<IMongoDBConfig, IMongoDBConnection> {
102
- /**
103
- * @description Namespace path for fetching configuration
104
- */
105
- protected readonly namespace = 'MongoDB';
106
- /**
107
- * @description Create connection
108
- */
109
- protected async connect(config: IMongoDBConfig) {
110
- let connection: IMongoDBConnection;
111
- try {
112
- connection = createConnection(config.host, config.options);
113
- await events.once(connection, 'open');
114
- } catch (e) {
115
- throw new MongoDBCantConnectError(e);
116
- }
117
- return connection;
118
- }
119
- /**
120
- * @description Initialize method
121
- */
122
- @init() protected async initialize() {
123
- connections = this.connections;
124
- await super.initialize();
125
- }
126
- }
127
- /**
128
- * @description Private connections link
129
- */
130
- let connections: Map<string, IMongoDBConnection> = null;
131
- /**
132
- * @description Model injection decorator
133
- */
134
- export const model = <T = unknown>(
135
- Model: new (...args: any) => T,
136
- connection?: string,
137
- options: Record<string, unknown> = {},
138
- ) => {
139
- return (proto?: any, key?: string) => {
140
- Object.defineProperty(proto, key, {
141
- get() {
142
- return getModelForClass(Model, {
143
- existingConnection: connection
144
- ? connections.get(connection)
145
- : [...connections][0][1],
146
- options,
147
- });
148
- },
149
- configurable: false,
150
- });
151
- };
152
- };
package/src/interfaces.ts DELETED
@@ -1,11 +0,0 @@
1
- import { IConnectorConfig, IConnector } from '@biorate/connector';
2
- import { ConnectOptions, Connection } from 'mongoose';
3
-
4
- export type IMongoDBConnection = Connection;
5
-
6
- export interface IMongoDBConfig extends IConnectorConfig {
7
- host: string;
8
- options: ConnectOptions;
9
- }
10
-
11
- export type IMongoDBConnector = IConnector<IMongoDBConfig, IMongoDBConnection>;
@@ -1,36 +0,0 @@
1
- import { use } from 'chai';
2
- import { jestSnapshotPlugin } from 'mocha-chai-jest-snapshot';
3
- import { inject, container, Types, Core } from '@biorate/inversion';
4
- import { IConfig, Config } from '@biorate/config';
5
- import { MongoDBConnector, IMongoDBConnector, model } from '../../src';
6
- import { ReturnModelType } from '@typegoose/typegoose';
7
- import { TestModel } from './models';
8
-
9
- export * from './models';
10
-
11
- use(jestSnapshotPlugin());
12
-
13
- export const dbName = 'test';
14
-
15
- export class Root extends Core() {
16
- @inject(MongoDBConnector) public connector: IMongoDBConnector;
17
- @model(TestModel) public test: ReturnModelType<typeof TestModel>;
18
- }
19
-
20
- container.bind<IConfig>(Types.Config).to(Config).inSingletonScope();
21
- container.bind<IMongoDBConnector>(MongoDBConnector).toSelf().inSingletonScope();
22
- container.bind<Root>(Root).toSelf().inSingletonScope();
23
-
24
- container.get<IConfig>(Types.Config).merge({
25
- MongoDB: [
26
- {
27
- name: 'connection',
28
- host: 'mongodb://localhost:27017/',
29
- options: {
30
- useNewUrlParser: true,
31
- useUnifiedTopology: true,
32
- dbName,
33
- },
34
- },
35
- ],
36
- });
@@ -1 +0,0 @@
1
- export * from './test';