liwi-mongo 9.0.0 → 9.2.0
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/CHANGELOG.md +20 -0
- package/README.md +3 -0
- package/dist/MongoBaseModel.d.ts +1 -1
- package/dist/MongoConnection.d.ts +1 -1
- package/dist/MongoConnection.d.ts.map +1 -1
- package/dist/MongoCursor.d.ts +1 -1
- package/dist/MongoQueryCollection.d.ts +1 -2
- package/dist/MongoQueryCollection.d.ts.map +1 -1
- package/dist/MongoQuerySingleItem.d.ts +1 -2
- package/dist/MongoQuerySingleItem.d.ts.map +1 -1
- package/dist/MongoStore.d.ts +2 -3
- package/dist/MongoStore.d.ts.map +1 -1
- package/dist/createMongoSubscribeStore.d.ts +1 -1
- package/dist/createMongoSubscribeStore.d.ts.map +1 -1
- package/dist/index-node14.cjs +13 -10
- package/dist/index-node14.cjs.map +1 -1
- package/dist/index-node14.mjs +13 -10
- package/dist/index-node14.mjs.map +1 -1
- package/package.json +9 -14
- package/src/MongoBaseModel.ts +1 -1
- package/src/MongoConnection.ts +21 -12
- package/src/MongoCursor.ts +1 -1
- package/src/MongoQueryCollection.ts +3 -5
- package/src/MongoQuerySingleItem.ts +3 -5
- package/src/MongoStore.ts +2 -4
- package/src/createMongoSubscribeStore.ts +1 -1
- package/rollup.config.mjs +0 -5
- package/tsconfig.eslint.json +0 -7
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,26 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [9.2.0](https://github.com/liwijs/liwi/compare/v9.1.0...v9.2.0) (2022-10-29)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package liwi-mongo
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# [9.1.0](https://github.com/liwijs/liwi/compare/v9.0.0...v9.1.0) (2022-10-08)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Bug Fixes
|
|
18
|
+
|
|
19
|
+
* redact connectionString in logs ([236ecb2](https://github.com/liwijs/liwi/commit/236ecb2b812c4d48ae0028b91e93528ddc899f1b))
|
|
20
|
+
* update dev dependencies, fix ts remix, fix next babel config ([fadb30e](https://github.com/liwijs/liwi/commit/fadb30e9620fbbcb99cfbc6a7db78d9ef2dad5e2))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
6
26
|
# [9.0.0](https://github.com/liwijs/liwi/compare/v8.3.1...v9.0.0) (2022-03-05)
|
|
7
27
|
|
|
8
28
|
|
package/README.md
CHANGED
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
10
10
|
<a href="https://npmjs.org/package/liwi-mongo"><img src="https://img.shields.io/npm/v/liwi-mongo.svg?style=flat-square"></a>
|
|
11
|
+
<a href="https://npmjs.org/package/liwi-mongo"><img src="https://img.shields.io/npm/dw/liwi-mongo.svg?style=flat-square"></a>
|
|
12
|
+
<a href="https://npmjs.org/package/liwi-mongo"><img src="https://img.shields.io/node/v/liwi-mongo.svg?style=flat-square"></a>
|
|
13
|
+
<a href="https://npmjs.org/package/liwi-mongo"><img src="https://img.shields.io/npm/types/liwi-mongo.svg?style=flat-square"></a>
|
|
11
14
|
</p>
|
|
12
15
|
|
|
13
16
|
## Install
|
package/dist/MongoBaseModel.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BaseModel, AllowedKeyValue, InsertType } from 'liwi-
|
|
1
|
+
import type { BaseModel, AllowedKeyValue, InsertType } from 'liwi-store';
|
|
2
2
|
export declare type MongoKeyPath = '_id';
|
|
3
3
|
export interface MongoBaseModel<KeyValue extends AllowedKeyValue = string> extends BaseModel {
|
|
4
4
|
_id: KeyValue;
|
|
@@ -5,7 +5,7 @@ export default class MongoConnection extends AbstractConnection {
|
|
|
5
5
|
_connecting?: Promise<mongodb.MongoClient>;
|
|
6
6
|
connectionFailed?: boolean;
|
|
7
7
|
constructor(config: Map<string, string | number>);
|
|
8
|
-
connect(connectionString: string): void;
|
|
8
|
+
connect(connectionString: string, connectionStringRedacted: string): void;
|
|
9
9
|
getConnection(): Promise<mongodb.MongoClient>;
|
|
10
10
|
close(): Promise<void>;
|
|
11
11
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MongoConnection.d.ts","sourceRoot":"","sources":["../src/MongoConnection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,OAAO,MAAM,SAAS,CAAC;AAK9B,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,kBAAkB;IAC7D,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC;IAElC,WAAW,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAE3C,gBAAgB,CAAC,EAAE,OAAO,CAAC;gBAGf,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"MongoConnection.d.ts","sourceRoot":"","sources":["../src/MongoConnection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,OAAO,MAAM,SAAS,CAAC;AAK9B,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,kBAAkB;IAC7D,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC;IAElC,WAAW,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAE3C,gBAAgB,CAAC,EAAE,OAAO,CAAC;gBAGf,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAqChD,OAAO,CAAC,gBAAgB,EAAE,MAAM,EAAE,wBAAwB,EAAE,MAAM,GAAG,IAAI;IAkDzE,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;IAIvC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAU7B"}
|
package/dist/MongoCursor.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AbstractStoreCursor } from 'liwi-store';
|
|
2
|
-
import type { AllowedKeyValue } from 'liwi-
|
|
2
|
+
import type { AllowedKeyValue } from 'liwi-store';
|
|
3
3
|
import type { FindCursor } from 'mongodb';
|
|
4
4
|
import type { MongoBaseModel } from './MongoBaseModel';
|
|
5
5
|
import type MongoStore from './MongoStore';
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import type { QuerySubscription, SubscribeCallback, QueryResult, QueryParams } from 'liwi-store';
|
|
1
|
+
import type { QuerySubscription, SubscribeCallback, QueryResult, QueryParams, QueryOptions, Transformer, AllowedKeyValue } from 'liwi-store';
|
|
2
2
|
import { AbstractSubscribableStoreQuery } from 'liwi-subscribe-store';
|
|
3
|
-
import type { QueryOptions, Transformer, AllowedKeyValue } from 'liwi-types';
|
|
4
3
|
import type { MongoBaseModel, MongoInsertType, MongoKeyPath } from './MongoBaseModel';
|
|
5
4
|
import type MongoStore from './MongoStore';
|
|
6
5
|
declare type TestCriteria = (obj: any) => boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MongoQueryCollection.d.ts","sourceRoot":"","sources":["../src/MongoQueryCollection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"MongoQueryCollection.d.ts","sourceRoot":"","sources":["../src/MongoQueryCollection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,WAAW,EAEX,YAAY,EACZ,WAAW,EACX,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AAEtE,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,YAAY,EACb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAS3C,aAAK,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;AAE1C,MAAM,CAAC,OAAO,OAAO,oBAAoB,CACvC,KAAK,SAAS,cAAc,CAAC,QAAQ,CAAC,EACtC,MAAM,SAAS,WAAW,CAAC,MAAM,CAAC,GAAG,KAAK,EAC1C,QAAQ,SAAS,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,EAC/C,IAAI,SAAS,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG,KAAK,CACnD,SAAQ,8BAA8B,CACtC,YAAY,EACZ,QAAQ,EACR,KAAK,EACL,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,EAChC,MAAM,EACN,IAAI,EAAE,CACP;IACC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA8B;IAEpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAE9C,OAAO,CAAC,YAAY,CAAC,CAAe;IAEpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2B;gBAGrD,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,EAClC,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,EAC5B,WAAW,GAAE,WAAW,CAAC,KAAK,EAAE,IAAI,CAAuB;IAQ7D,kBAAkB,IAAI,YAAY;IAY5B,KAAK,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAiB3E,UAAU,CACR,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,EAC7C,eAAe,EAAE,OAAO,GACvB,iBAAiB;YAiHN,iBAAiB;CAkBhC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import type { QuerySubscription, SubscribeCallback, QueryResult, QueryParams } from 'liwi-store';
|
|
1
|
+
import type { QuerySubscription, SubscribeCallback, QueryResult, QueryParams, QueryOptions, Transformer, AllowedKeyValue } from 'liwi-store';
|
|
2
2
|
import { AbstractSubscribableStoreQuery } from 'liwi-subscribe-store';
|
|
3
|
-
import type { QueryOptions, Transformer, AllowedKeyValue } from 'liwi-types';
|
|
4
3
|
import type { MongoBaseModel, MongoInsertType, MongoKeyPath } from './MongoBaseModel';
|
|
5
4
|
import type MongoStore from './MongoStore';
|
|
6
5
|
declare type TestCriteria = (obj: any) => boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MongoQuerySingleItem.d.ts","sourceRoot":"","sources":["../src/MongoQuerySingleItem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"MongoQuerySingleItem.d.ts","sourceRoot":"","sources":["../src/MongoQuerySingleItem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,WAAW,EAEX,YAAY,EACZ,WAAW,EACX,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AAEtE,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,YAAY,EACb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAS3C,aAAK,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;AAE1C,MAAM,CAAC,OAAO,OAAO,oBAAoB,CACvC,KAAK,SAAS,cAAc,CAAC,QAAQ,CAAC,EACtC,MAAM,SAAS,WAAW,CAAC,MAAM,CAAC,GAAG,KAAK,EAC1C,MAAM,SAAS,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,EACnE,QAAQ,SAAS,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,CAC/C,SAAQ,8BAA8B,CACtC,YAAY,EACZ,QAAQ,EACR,KAAK,EACL,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,EAChC,MAAM,EACN,MAAM,CACP;IACC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA8B;IAEpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAE9C,OAAO,CAAC,YAAY,CAAC,CAAe;IAEpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;gBAGvD,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,EAClC,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,EAC5B,WAAW,GAAE,WAAW,CAAC,KAAK,EAAE,MAAM,CAAuB;IAQ/D,uBAAuB,IAAI,YAAY;IAajC,KAAK,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAiB3E,UAAU,CACR,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC7C,eAAe,EAAE,OAAO,GACvB,iBAAiB;YAqFN,iBAAiB;CAchC"}
|
package/dist/MongoStore.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type { UpsertResult, SubscribableStore, QueryParams, UpsertPartialObject } from 'liwi-store';
|
|
2
|
-
import type { Criteria, Sort, Update, QueryOptions, Transformer, AllowedKeyValue, OptionalBaseModelKeysForInsert } from 'liwi-types';
|
|
1
|
+
import type { UpsertResult, SubscribableStore, QueryParams, UpsertPartialObject, Criteria, Sort, Update, QueryOptions, Transformer, AllowedKeyValue, OptionalBaseModelKeysForInsert } from 'liwi-store';
|
|
3
2
|
import type { Collection } from 'mongodb';
|
|
4
3
|
import type { MongoBaseModel, MongoKeyPath, MongoInsertType } from './MongoBaseModel';
|
|
5
4
|
import type MongoConnection from './MongoConnection';
|
|
@@ -30,7 +29,7 @@ export default class MongoStore<Model extends MongoBaseModel<KeyValue>, KeyValue
|
|
|
30
29
|
deleteOne(object: Model): Promise<void>;
|
|
31
30
|
deleteMany(selector: Criteria<Model>): Promise<void>;
|
|
32
31
|
count(filter?: Criteria<Model>): Promise<number>;
|
|
33
|
-
cursor<Result = Model>(filter?: Criteria<Model>, sort?: Sort<Model>): Promise<MongoCursor<Model, Result, KeyValue>>;
|
|
32
|
+
cursor<Result extends Partial<Model> = Model>(filter?: Criteria<Model>, sort?: Sort<Model>): Promise<MongoCursor<Model, Result, KeyValue>>;
|
|
34
33
|
findByKey(key: KeyValue, criteria?: Criteria<Model>): Promise<Model | undefined>;
|
|
35
34
|
findAll(criteria?: Criteria<Model>, sort?: Sort<Model>): Promise<Model[]>;
|
|
36
35
|
findOne(filter: Criteria<Model>, sort?: Sort<Model>): Promise<Model | undefined>;
|
package/dist/MongoStore.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MongoStore.d.ts","sourceRoot":"","sources":["../src/MongoStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,mBAAmB,
|
|
1
|
+
{"version":3,"file":"MongoStore.d.ts","sourceRoot":"","sources":["../src/MongoStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import type { AllowedKeyValue } from 'liwi-store';
|
|
1
2
|
import { SubscribeStore } from 'liwi-subscribe-store';
|
|
2
|
-
import type { AllowedKeyValue } from 'liwi-types';
|
|
3
3
|
import type { MongoBaseModel, MongoInsertType, MongoKeyPath } from './MongoBaseModel';
|
|
4
4
|
import type MongoConnection from './MongoConnection';
|
|
5
5
|
import type MongoStore from './MongoStore';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createMongoSubscribeStore.d.ts","sourceRoot":"","sources":["../src/createMongoSubscribeStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"createMongoSubscribeStore.d.ts","sourceRoot":"","sources":["../src/createMongoSubscribeStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,YAAY,EACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,eAAe,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAC/C,KAAK,SAAS,cAAc,CAAC,QAAQ,CAAC,EACtC,QAAQ,SAAS,eAAe,GAAG,KAAK,CAAC,YAAY,CAAC,EAEtD,UAAU,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,GACtC,cAAc,CACf,YAAY,EACZ,QAAQ,EACR,KAAK,EACL,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,EAChC,eAAe,EACf,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAC5B,CAEA"}
|
package/dist/index-node14.cjs
CHANGED
|
@@ -582,21 +582,24 @@ class MongoConnection extends liwiStore.AbstractConnection {
|
|
|
582
582
|
throw new Error('Missing config database');
|
|
583
583
|
}
|
|
584
584
|
|
|
585
|
-
const
|
|
586
|
-
|
|
585
|
+
const buildConnectionString = redactCredentials => `mongodb://${config.has('user') ? `${redactCredentials ? `${config.get('user').slice(0, 2)}[redacted]` : config.get('user')}:${redactCredentials ? '[redacted]' : config.get('password')}@` : ''}` + `${config.get('host')}:${config.get('port')}/${config.get('database')}`;
|
|
586
|
+
|
|
587
|
+
const connectionString = buildConnectionString(false);
|
|
588
|
+
const connectionStringRedacted = buildConnectionString(true);
|
|
589
|
+
this.connect(connectionString, connectionStringRedacted);
|
|
587
590
|
}
|
|
588
591
|
|
|
589
|
-
connect(connectionString) {
|
|
592
|
+
connect(connectionString, connectionStringRedacted) {
|
|
590
593
|
logger.info('connecting', {
|
|
591
|
-
|
|
594
|
+
connectionStringRedacted
|
|
592
595
|
});
|
|
593
596
|
const connectPromise = mongodb__default.MongoClient.connect(connectionString).then(connection => {
|
|
594
597
|
logger.info('connected', {
|
|
595
|
-
|
|
598
|
+
connectionStringRedacted
|
|
596
599
|
});
|
|
597
600
|
connection.on('close', () => {
|
|
598
601
|
logger.warn('close', {
|
|
599
|
-
|
|
602
|
+
connectionStringRedacted
|
|
600
603
|
});
|
|
601
604
|
this.connectionFailed = true;
|
|
602
605
|
|
|
@@ -606,7 +609,7 @@ class MongoConnection extends liwiStore.AbstractConnection {
|
|
|
606
609
|
});
|
|
607
610
|
connection.on('timeout', () => {
|
|
608
611
|
logger.warn('timeout', {
|
|
609
|
-
|
|
612
|
+
connectionStringRedacted
|
|
610
613
|
});
|
|
611
614
|
this.connectionFailed = true;
|
|
612
615
|
|
|
@@ -616,7 +619,7 @@ class MongoConnection extends liwiStore.AbstractConnection {
|
|
|
616
619
|
});
|
|
617
620
|
connection.on('reconnect', () => {
|
|
618
621
|
logger.warn('reconnect', {
|
|
619
|
-
|
|
622
|
+
connectionStringRedacted
|
|
620
623
|
});
|
|
621
624
|
this.connectionFailed = false;
|
|
622
625
|
|
|
@@ -624,7 +627,7 @@ class MongoConnection extends liwiStore.AbstractConnection {
|
|
|
624
627
|
});
|
|
625
628
|
connection.on('error', err => {
|
|
626
629
|
logger.warn('error', {
|
|
627
|
-
|
|
630
|
+
connectionStringRedacted,
|
|
628
631
|
err
|
|
629
632
|
});
|
|
630
633
|
});
|
|
@@ -636,7 +639,7 @@ class MongoConnection extends liwiStore.AbstractConnection {
|
|
|
636
639
|
return connection;
|
|
637
640
|
}).catch(err => {
|
|
638
641
|
logger.info('not connected', {
|
|
639
|
-
|
|
642
|
+
connectionStringRedacted
|
|
640
643
|
});
|
|
641
644
|
console.error(err.message || err); // throw err;
|
|
642
645
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-node14.cjs","sources":["../src/MongoCursor.ts","../src/MongoQueryCollection.ts","../src/MongoQuerySingleItem.ts","../src/MongoStore.ts","../src/MongoConnection.ts","../src/createMongoSubscribeStore.ts"],"sourcesContent":["import { AbstractStoreCursor } from 'liwi-store';\nimport type { AllowedKeyValue } from 'liwi-types';\nimport type { FindCursor } from 'mongodb';\nimport type { MongoBaseModel } from './MongoBaseModel';\nimport type MongoStore from './MongoStore';\n\nexport default class MongoCursor<\n Model extends MongoBaseModel<KeyValue>,\n Result extends Partial<Model> = Model,\n KeyValue extends AllowedKeyValue = Model['_id'],\n> extends AbstractStoreCursor<\n MongoStore<Model, KeyValue>,\n KeyValue,\n Model,\n Result\n> {\n // key in AbstractCursor\n\n private readonly cursor: FindCursor<Result>;\n\n private _result?: Result | null;\n\n constructor(store: MongoStore<Model, KeyValue>, cursor: FindCursor<Result>) {\n super(store);\n this.cursor = cursor;\n }\n\n advance(count: number): void {\n this.cursor.skip(count);\n }\n\n next(): Promise<KeyValue | undefined> {\n return this.cursor.next().then((value) => {\n this._result = value;\n this.key = value?._id;\n return this.key;\n });\n }\n\n limit(newLimit: number): Promise<this> {\n this.cursor.limit(newLimit);\n return Promise.resolve(this);\n }\n\n result(): Promise<Result> {\n if (!this._result) throw new Error('Cannot call result() before next()');\n return Promise.resolve(this._result);\n }\n\n close(): Promise<void> {\n if (this.cursor) {\n this.cursor.close();\n }\n\n return Promise.resolve();\n }\n\n toArray(): Promise<Result[]> {\n return this.cursor.toArray();\n }\n}\n","/* eslint-disable complexity, max-lines */\nimport type {\n QuerySubscription,\n SubscribeCallback,\n QueryResult,\n QueryParams,\n} from 'liwi-store';\nimport type { Actions } from 'liwi-subscribe-store';\nimport { AbstractSubscribableStoreQuery } from 'liwi-subscribe-store';\nimport type {\n Changes,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n} from 'liwi-types';\nimport mingo from 'mingo';\nimport type {\n MongoBaseModel,\n MongoInsertType,\n MongoKeyPath,\n} from './MongoBaseModel';\nimport type MongoCursor from './MongoCursor';\nimport type MongoStore from './MongoStore';\n\nconst identityTransformer = <\n Model extends MongoBaseModel<any>,\n Transformed = Model,\n>(\n model: Model,\n): Transformed => model as unknown as Transformed;\n\ntype TestCriteria = (obj: any) => boolean;\n\nexport default class MongoQueryCollection<\n Model extends MongoBaseModel<KeyValue>,\n Params extends QueryParams<Params> = never,\n KeyValue extends AllowedKeyValue = Model['_id'],\n Item extends Record<MongoKeyPath, KeyValue> = Model,\n> extends AbstractSubscribableStoreQuery<\n MongoKeyPath,\n KeyValue,\n Model,\n MongoInsertType<Model, KeyValue>,\n Params,\n Item[]\n> {\n private readonly store: MongoStore<Model, KeyValue>;\n\n private readonly options: QueryOptions<Model>;\n\n private testCriteria?: TestCriteria;\n\n private readonly transformer: Transformer<Model, Item>;\n\n constructor(\n store: MongoStore<Model, KeyValue>,\n options: QueryOptions<Model>,\n transformer: Transformer<Model, Item> = identityTransformer,\n ) {\n super();\n this.store = store;\n this.options = options;\n this.transformer = transformer;\n }\n\n createTestCriteria(): TestCriteria {\n if (!this.testCriteria) {\n if (!this.options.criteria) {\n return () => true;\n }\n\n const mingoQuery = new mingo.Query(this.options.criteria);\n this.testCriteria = mingoQuery.test.bind(mingoQuery);\n }\n return this.testCriteria;\n }\n\n async fetch<T>(onFulfilled: (result: QueryResult<Item[]>) => T): Promise<T> {\n const [result, count] = await Promise.all([\n this.createMongoCursor().then((cursor) => cursor.toArray()),\n this.store.count(),\n ]);\n\n return onFulfilled({\n result: result.map(this.transformer),\n meta: { total: count },\n info: {\n sort: this.options.sort,\n limit: this.options.limit,\n keyPath: this.store.keyPath,\n },\n });\n }\n\n _subscribe(\n callback: SubscribeCallback<KeyValue, Item[]>,\n _includeInitial: boolean,\n ): QuerySubscription {\n const store = super.getSubscribeStore();\n const testCriteria: TestCriteria = this.createTestCriteria();\n\n const promise: Promise<void> = _includeInitial\n ? this.fetch(({ result, meta, info }: QueryResult<Item[]>) => {\n callback(null, [\n {\n type: 'initial',\n initial: result,\n queryInfo: info,\n meta,\n },\n ]);\n })\n : Promise.resolve();\n\n const unsubscribe = store.subscribe((action: Actions<Model>) => {\n const changes: Changes<KeyValue, Item[]> = [];\n switch (action.type) {\n case 'inserted': {\n const filtered = action.next.filter(testCriteria);\n if (filtered.length > 0) {\n changes.push({\n type: 'inserted',\n result: filtered.map(this.transformer),\n });\n }\n break;\n }\n case 'deleted': {\n const filtered = action.prev.filter(testCriteria);\n if (filtered.length > 0) {\n changes.push({\n type: 'deleted',\n keys: filtered.map((object) => object[this.store.keyPath]),\n });\n }\n break;\n }\n case 'updated': {\n const {\n deleted,\n updated,\n inserted,\n }: {\n deleted: KeyValue[];\n updated: Item[];\n inserted: Item[];\n } = { deleted: [], updated: [], inserted: [] };\n\n action.changes.forEach(([prevObject, nextObject]: [Model, Model]) => {\n if (testCriteria(prevObject)) {\n if (!testCriteria(nextObject)) {\n deleted.push(prevObject[this.store.keyPath]);\n } else {\n updated.push(this.transformer(nextObject));\n }\n } else if (testCriteria(nextObject)) {\n inserted.push(this.transformer(nextObject));\n }\n });\n\n if (deleted.length > 0) {\n changes.push({ type: 'deleted', keys: deleted });\n }\n if (updated.length > 0) {\n changes.push({ type: 'updated', result: updated });\n }\n if (inserted.length > 0) {\n changes.push({ type: 'inserted', result: inserted });\n }\n\n break;\n }\n default:\n throw new Error('Unsupported type');\n }\n\n if (changes.length === 0) return;\n\n callback(null, changes);\n });\n // let _feed;\n // const promise = this.queryCallback(this.store.query(), this.store.r)\n // .changes({\n // includeInitial: _includeInitial,\n // includeStates: true,\n // includeTypes: true,\n // includeOffsets: true,\n // })\n // .then((feed) => {\n // if (args.length === 0) {\n // _feed = feed;\n // delete this._promise;\n // }\n //\n // feed.each(callback);\n // return feed;\n // });\n //\n // if (args.length === 0) this._promise = promise;\n\n return {\n stop: unsubscribe,\n cancel: unsubscribe,\n then: <T, U>(\n onFulfilled: () => T | Promise<T>,\n onRejected?: (error: any) => U | Promise<U>,\n ): Promise<T | U> => promise.then(onFulfilled, onRejected),\n };\n }\n\n private async createMongoCursor(): Promise<\n MongoCursor<Model, Model, KeyValue>\n > {\n const cursor = await this.store.cursor(\n this.options.criteria,\n this.options.sort,\n );\n\n if (this.options.skip) {\n cursor.advance(this.options.skip);\n }\n\n if (this.options.limit) {\n await cursor.limit(this.options.limit);\n }\n\n return cursor;\n }\n}\n","import type {\n QuerySubscription,\n SubscribeCallback,\n QueryResult,\n QueryParams,\n} from 'liwi-store';\nimport type { Actions } from 'liwi-subscribe-store';\nimport { AbstractSubscribableStoreQuery } from 'liwi-subscribe-store';\nimport type {\n Changes,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n} from 'liwi-types';\nimport mingo from 'mingo';\nimport type {\n MongoBaseModel,\n MongoInsertType,\n MongoKeyPath,\n} from './MongoBaseModel';\nimport type MongoCursor from './MongoCursor';\nimport type MongoStore from './MongoStore';\n\nconst identityTransformer = <\n Model extends MongoBaseModel<any>,\n Transformed = Model,\n>(\n model: Model,\n): Transformed => model as unknown as Transformed;\n\ntype TestCriteria = (obj: any) => boolean;\n\nexport default class MongoQuerySingleItem<\n Model extends MongoBaseModel<KeyValue>,\n Params extends QueryParams<Params> = never,\n Result extends Record<MongoKeyPath, KeyValue> | null = Model | null,\n KeyValue extends AllowedKeyValue = Model['_id'],\n> extends AbstractSubscribableStoreQuery<\n MongoKeyPath,\n KeyValue,\n Model,\n MongoInsertType<Model, KeyValue>,\n Params,\n Result\n> {\n private readonly store: MongoStore<Model, KeyValue>;\n\n private readonly options: QueryOptions<Model>;\n\n private testCriteria?: TestCriteria;\n\n private readonly transformer: Transformer<Model, Result>;\n\n constructor(\n store: MongoStore<Model, KeyValue>,\n options: QueryOptions<Model>,\n transformer: Transformer<Model, Result> = identityTransformer,\n ) {\n super();\n this.store = store;\n this.options = options;\n this.transformer = transformer;\n }\n\n createMingoTestCriteria(): TestCriteria {\n if (!this.testCriteria) {\n if (!this.options.criteria) {\n return () => true;\n }\n\n const mingoQuery = new mingo.Query(this.options.criteria);\n this.testCriteria = mingoQuery.test.bind(mingoQuery);\n }\n\n return this.testCriteria;\n }\n\n async fetch<T>(onFulfilled: (result: QueryResult<Result>) => T): Promise<T> {\n const cursor = await this.createMongoCursor();\n await cursor.limit(1);\n return cursor.toArray().then((result: Model[]) => {\n const item: Result =\n result.length === 0 ? (null as Result) : this.transformer(result[0]);\n return onFulfilled({\n result: item,\n meta: { total: result === null ? 0 : 1 },\n info: {\n limit: 1,\n keyPath: this.store.keyPath,\n },\n });\n });\n }\n\n _subscribe(\n callback: SubscribeCallback<KeyValue, Result>,\n _includeInitial: boolean,\n ): QuerySubscription {\n const store = super.getSubscribeStore();\n const testCriteria: TestCriteria = this.createMingoTestCriteria();\n\n const promise: Promise<void> = _includeInitial\n ? this.fetch(({ result, meta, info }: QueryResult<Result>) => {\n callback(null, [\n {\n type: 'initial',\n initial: result,\n queryInfo: info,\n meta,\n },\n ]);\n })\n : Promise.resolve();\n\n const unsubscribe = store.subscribe(async (action: Actions<Model>) => {\n const changes: Changes<KeyValue, Result> = [];\n switch (action.type) {\n case 'inserted': {\n const filtered = action.next.filter(testCriteria);\n if (filtered.length > 0) {\n changes.push({\n type: 'updated',\n result: this.transformer(filtered[0]),\n });\n }\n break;\n }\n case 'deleted': {\n const filtered = action.prev.filter(testCriteria);\n if (filtered.length > 0) {\n changes.push({\n type: 'deleted',\n keys: filtered.map((object) => object[this.store.keyPath]),\n });\n }\n break;\n }\n case 'updated': {\n const filtered = action.changes.filter(([prev, next]) =>\n testCriteria(prev),\n );\n if (filtered.length > 0) {\n if (this.options.sort) {\n const { result } = await this.fetch((res) => res);\n changes.push({\n type: 'updated',\n result,\n });\n } else if (filtered.length !== 1) {\n throw new Error(\n 'should not match more than 1, use sort if you can have multiple match',\n );\n } else {\n const [, next] = filtered[0];\n changes.push({\n type: 'updated',\n result: testCriteria(next) ? this.transformer(next) : null!,\n });\n }\n } else if (filtered.length === 0) {\n }\n break;\n }\n default:\n throw new Error('Unsupported type');\n }\n\n if (changes.length === 0) return;\n\n callback(null, changes);\n });\n\n return {\n stop: unsubscribe,\n cancel: unsubscribe,\n then: <T, U>(\n onFulfilled: () => T | Promise<T>,\n onRejected?: (error: any) => U | Promise<U>,\n ): Promise<T | U> => promise.then(onFulfilled, onRejected),\n };\n }\n\n private async createMongoCursor(): Promise<\n MongoCursor<Model, Model, KeyValue>\n > {\n const cursor = await this.store.cursor(\n this.options.criteria,\n this.options.sort,\n );\n\n if (this.options.limit) {\n await cursor.limit(this.options.limit);\n }\n\n return cursor;\n }\n}\n","/* eslint-disable max-lines */\nimport type {\n UpsertResult,\n SubscribableStore,\n QueryParams,\n UpsertPartialObject,\n} from 'liwi-store';\nimport type {\n Criteria,\n Sort,\n Update,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n OptionalBaseModelKeysForInsert,\n} from 'liwi-types';\nimport type {\n Collection,\n FindCursor,\n MongoClient,\n UpdateFilter,\n} from 'mongodb';\nimport mongodb from 'mongodb';\nimport type {\n MongoBaseModel,\n MongoKeyPath,\n MongoInsertType,\n} from './MongoBaseModel';\nimport type MongoConnection from './MongoConnection';\nimport MongoCursor from './MongoCursor';\nimport MongoQueryCollection from './MongoQueryCollection';\nimport MongoQuerySingleItem from './MongoQuerySingleItem';\n\nexport interface MongoUpsertResult<\n KeyValue extends AllowedKeyValue,\n Model extends MongoBaseModel<KeyValue>,\n> extends UpsertResult<Model> {\n object: Model;\n inserted: boolean;\n}\n\nexport default class MongoStore<\n Model extends MongoBaseModel<KeyValue>,\n KeyValue extends AllowedKeyValue = Model[MongoKeyPath],\n> implements\n SubscribableStore<\n MongoKeyPath,\n KeyValue,\n Model,\n MongoInsertType<Model>,\n MongoConnection\n >\n{\n readonly keyPath: MongoKeyPath = '_id';\n\n readonly connection: MongoConnection;\n\n private _collection: Collection<Model> | Promise<Collection<Model>>;\n\n constructor(connection: MongoConnection, collectionName: string) {\n this.connection = connection;\n\n if (!collectionName) {\n throw new Error(`Invalid collectionName: \"${collectionName}\"`);\n }\n\n this._collection = connection.getConnection().then(\n (client: MongoClient) => {\n this._collection = client.db().collection(collectionName);\n return this._collection;\n },\n (err: any) => {\n this._collection = Promise.reject(err);\n return this._collection;\n },\n );\n }\n\n get collection(): Promise<Collection<Model>> {\n if (this.connection.connectionFailed) {\n return Promise.reject(new Error('MongoDB connection failed'));\n }\n\n return Promise.resolve(this._collection);\n }\n\n createQuerySingleItem<\n Result extends Record<MongoKeyPath, KeyValue> = Model,\n Params extends QueryParams<Params> = never,\n >(\n options: QueryOptions<Model>,\n transformer?: Transformer<Model, Result>,\n ): MongoQuerySingleItem<Model, Params, Result, KeyValue> {\n return new MongoQuerySingleItem<Model, Params, Result, KeyValue>(\n this,\n options,\n transformer,\n );\n }\n\n createQueryCollection<\n Item extends Record<MongoKeyPath, KeyValue> = Model,\n Params extends QueryParams<Params> = never,\n >(\n options: QueryOptions<Model>,\n transformer?: Transformer<Model, Item>,\n ): MongoQueryCollection<Model, Params, Model['_id'], Item> {\n return new MongoQueryCollection<Model, Params, KeyValue, Item>(\n this,\n options,\n transformer,\n );\n }\n\n async insertOne(object: MongoInsertType<Model>): Promise<Model> {\n if (!object._id) {\n object._id = new mongodb.ObjectId().toString() as Model['_id'];\n }\n\n if (!object.created) object.created = new Date();\n if (!object.updated) object.updated = new Date();\n\n const collection = await this.collection;\n const { acknowledged: isAcknowledged } = await collection.insertOne(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n object as any,\n );\n if (!isAcknowledged) {\n throw new Error('Fail to insert');\n }\n\n return object as Model;\n }\n\n async replaceOne(object: Model): Promise<Model> {\n if (!object.updated) object.updated = new Date();\n\n const collection = await this.collection;\n await collection.replaceOne({ _id: object._id } as Criteria<Model>, object);\n return object;\n }\n\n async upsertOne<\n K extends Exclude<\n keyof Model,\n MongoKeyPath | OptionalBaseModelKeysForInsert\n >,\n >(\n object: UpsertPartialObject<MongoKeyPath, KeyValue, Model, K>,\n setOnInsertPartialObject?: Update<Model>['$setOnInsert'],\n ): Promise<Model> {\n const result = await this.upsertOneWithInfo(\n object,\n setOnInsertPartialObject,\n );\n return result.object;\n }\n\n async upsertOneWithInfo<\n K extends Exclude<\n keyof Model,\n MongoKeyPath | OptionalBaseModelKeysForInsert\n >,\n >(\n object: UpsertPartialObject<MongoKeyPath, KeyValue, Model, K>,\n setOnInsertPartialObject?: Update<Model>['$setOnInsert'],\n ): Promise<MongoUpsertResult<KeyValue, Model>> {\n const $setOnInsert = {\n created: object.created || new Date(),\n ...setOnInsertPartialObject,\n };\n\n if (!object.updated) {\n (object as MongoBaseModel).updated = new Date();\n }\n\n const $set: Partial<typeof object> = { ...object };\n delete $set.created;\n\n const collection = await this.collection;\n\n const { upsertedCount } = await collection.updateOne(\n { _id: object._id } as Criteria<Model>,\n { $set, $setOnInsert } as UpdateFilter<Model>,\n { upsert: true },\n );\n\n if (upsertedCount) {\n Object.assign(object, $setOnInsert);\n }\n\n return { object: object as unknown as Model, inserted: !!upsertedCount };\n }\n\n replaceSeveral(objects: Model[]): Promise<Model[]> {\n return Promise.all(objects.map((object: Model) => this.replaceOne(object)));\n }\n\n async partialUpdateByKey(\n key: KeyValue,\n partialUpdate: Update<Model>,\n criteria?: Criteria<Model>,\n ): Promise<Model> {\n const collection = await this.collection;\n const commandResult = await collection.updateOne(\n { _id: key, ...criteria } as Criteria<Model>,\n partialUpdate as UpdateFilter<Model>,\n );\n if (!commandResult.acknowledged) {\n console.error(commandResult);\n throw new Error('Update failed');\n }\n const object = await this.findByKey(key);\n return object!;\n }\n\n partialUpdateOne(\n object: Model,\n partialUpdate: Update<Model>,\n ): Promise<Model> {\n return this.partialUpdateByKey(object._id, partialUpdate);\n }\n\n partialUpdateMany(\n criteria: Criteria<Model>,\n partialUpdate: Update<Model>,\n ): Promise<void> {\n return this.collection\n .then((collection) =>\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n collection.updateMany(criteria, partialUpdate as any),\n )\n .then((res) => undefined); // TODO return updated object\n }\n\n deleteByKey(key: KeyValue, criteria?: Criteria<Model>): Promise<void> {\n return this.collection\n .then((collection) =>\n collection.deleteOne({ _id: key, ...criteria } as Criteria<Model>),\n )\n .then(() => undefined);\n }\n\n deleteOne(object: Model): Promise<void> {\n return this.deleteByKey(object._id);\n }\n\n deleteMany(selector: Criteria<Model>): Promise<void> {\n return this.collection\n .then((collection) => collection.deleteMany(selector))\n .then(() => undefined);\n }\n\n async count(filter?: Criteria<Model>): Promise<number> {\n const collection = await this.collection;\n return filter\n ? collection.countDocuments(filter)\n : collection.countDocuments();\n }\n\n async cursor<Result = Model>(\n filter?: Criteria<Model>,\n sort?: Sort<Model>,\n ): Promise<MongoCursor<Model, Result, KeyValue>> {\n const collection = await this.collection;\n const findCursor = filter\n ? collection.find<Result>(filter)\n : (collection.find() as unknown as FindCursor<Result>);\n if (sort) findCursor.sort(sort);\n return new MongoCursor<Model, Result, KeyValue>(this, findCursor);\n }\n\n async findByKey(\n key: KeyValue,\n criteria?: Criteria<Model>,\n ): Promise<Model | undefined> {\n const collection = await this.collection;\n const result = await collection.findOne<Model>({\n _id: key,\n ...criteria,\n } as Criteria<Model>);\n return result || undefined;\n }\n\n findAll(criteria?: Criteria<Model>, sort?: Sort<Model>): Promise<Model[]> {\n return this.cursor<Model>(criteria, sort).then((cursor) =>\n cursor.toArray(),\n );\n }\n\n async findOne(\n filter: Criteria<Model>,\n sort?: Sort<Model>,\n ): Promise<Model | undefined> {\n const collection = await this.collection;\n const result = await collection.findOne<Model>(filter, {\n sort,\n });\n return result || undefined;\n }\n}\n","import { AbstractConnection } from 'liwi-store';\nimport mongodb from 'mongodb';\nimport { Logger } from 'nightingale-logger';\n\nconst logger = new Logger('liwi:mongo:MongoConnection');\n\nexport default class MongoConnection extends AbstractConnection {\n _connection?: mongodb.MongoClient;\n\n _connecting?: Promise<mongodb.MongoClient>;\n\n connectionFailed?: boolean;\n\n // TODO interface\n constructor(config: Map<string, string | number>) {\n super();\n\n if (!config.has('host')) {\n config.set('host', 'localhost');\n }\n if (!config.has('port')) {\n config.set('port', '27017');\n }\n if (!config.has('database')) {\n throw new Error('Missing config database');\n }\n\n const connectionString =\n `mongodb://${\n config.has('user')\n ? `${config.get('user') as string}:${\n config.get('password') as string\n }@`\n : ''\n }` +\n `${config.get('host') as string}:${config.get('port') as string}/${\n config.get('database') as string\n }`;\n\n this.connect(connectionString);\n }\n\n connect(connectionString: string): void {\n logger.info('connecting', { connectionString });\n\n const connectPromise = mongodb.MongoClient.connect(connectionString)\n .then((connection) => {\n logger.info('connected', { connectionString });\n connection.on('close', () => {\n logger.warn('close', { connectionString });\n this.connectionFailed = true;\n this.getConnection = () => {\n throw new Error('MongoDB connection closed');\n };\n });\n connection.on('timeout', () => {\n logger.warn('timeout', { connectionString });\n this.connectionFailed = true;\n this.getConnection = () => {\n throw new Error('MongoDB connection timeout');\n };\n });\n connection.on('reconnect', () => {\n logger.warn('reconnect', { connectionString });\n this.connectionFailed = false;\n this.getConnection = () => Promise.resolve(this._connection!);\n });\n connection.on('error', (err) => {\n logger.warn('error', { connectionString, err });\n });\n\n this._connection = connection;\n this._connecting = undefined;\n this.getConnection = () => Promise.resolve(this._connection!);\n return connection;\n })\n .catch((err) => {\n logger.info('not connected', { connectionString });\n console.error(err.message || err);\n // throw err;\n process.nextTick(() => {\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(1);\n });\n\n throw err;\n });\n\n this.getConnection = () => Promise.resolve(connectPromise);\n this._connecting = this.getConnection();\n }\n\n getConnection(): Promise<mongodb.MongoClient> {\n throw new Error('call connect()');\n }\n\n async close(): Promise<void> {\n this.getConnection = () => Promise.reject(new Error('Connection closed'));\n if (this._connection) {\n await this._connection.close();\n this._connection = undefined;\n } else if (this._connecting) {\n await this._connecting;\n await this.close();\n }\n }\n}\n","import { SubscribeStore } from 'liwi-subscribe-store';\nimport type { AllowedKeyValue } from 'liwi-types';\nimport type {\n MongoBaseModel,\n MongoInsertType,\n MongoKeyPath,\n} from './MongoBaseModel';\nimport type MongoConnection from './MongoConnection';\nimport type MongoStore from './MongoStore';\n\nexport default function createMongoSubscribeStore<\n Model extends MongoBaseModel<KeyValue>,\n KeyValue extends AllowedKeyValue = Model[MongoKeyPath],\n>(\n mongoStore: MongoStore<Model, KeyValue>,\n): SubscribeStore<\n MongoKeyPath,\n KeyValue,\n Model,\n MongoInsertType<Model, KeyValue>,\n MongoConnection,\n MongoStore<Model, KeyValue>\n> {\n return new SubscribeStore(mongoStore);\n}\n"],"names":["MongoCursor","AbstractStoreCursor","constructor","store","cursor","advance","count","skip","next","then","value","_result","key","_id","limit","newLimit","Promise","resolve","result","Error","close","toArray","identityTransformer","model","MongoQueryCollection","AbstractSubscribableStoreQuery","options","transformer","createTestCriteria","testCriteria","criteria","mingoQuery","mingo","Query","test","bind","fetch","onFulfilled","all","createMongoCursor","map","meta","total","info","sort","keyPath","_subscribe","callback","_includeInitial","getSubscribeStore","promise","type","initial","queryInfo","unsubscribe","subscribe","action","changes","filtered","filter","length","push","prev","keys","object","deleted","updated","inserted","forEach","prevObject","nextObject","stop","cancel","onRejected","MongoQuerySingleItem","createMingoTestCriteria","item","res","MongoStore","connection","collectionName","_collection","getConnection","client","db","collection","err","reject","connectionFailed","createQuerySingleItem","createQueryCollection","insertOne","mongodb","ObjectId","toString","created","Date","acknowledged","isAcknowledged","replaceOne","upsertOne","setOnInsertPartialObject","upsertOneWithInfo","$setOnInsert","$set","upsertedCount","updateOne","upsert","Object","assign","replaceSeveral","objects","partialUpdateByKey","partialUpdate","commandResult","console","error","findByKey","partialUpdateOne","partialUpdateMany","updateMany","undefined","deleteByKey","deleteOne","deleteMany","selector","countDocuments","findCursor","find","findOne","findAll","logger","Logger","MongoConnection","AbstractConnection","config","has","set","connectionString","get","connect","connectPromise","MongoClient","on","warn","_connection","_connecting","catch","message","process","nextTick","exit","createMongoSubscribeStore","mongoStore","SubscribeStore"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-node14.cjs","sources":["../src/MongoCursor.ts","../src/MongoQueryCollection.ts","../src/MongoQuerySingleItem.ts","../src/MongoStore.ts","../src/MongoConnection.ts","../src/createMongoSubscribeStore.ts"],"sourcesContent":["import { AbstractStoreCursor } from 'liwi-store';\nimport type { AllowedKeyValue } from 'liwi-store';\nimport type { FindCursor } from 'mongodb';\nimport type { MongoBaseModel } from './MongoBaseModel';\nimport type MongoStore from './MongoStore';\n\nexport default class MongoCursor<\n Model extends MongoBaseModel<KeyValue>,\n Result extends Partial<Model> = Model,\n KeyValue extends AllowedKeyValue = Model['_id'],\n> extends AbstractStoreCursor<\n MongoStore<Model, KeyValue>,\n KeyValue,\n Model,\n Result\n> {\n // key in AbstractCursor\n\n private readonly cursor: FindCursor<Result>;\n\n private _result?: Result | null;\n\n constructor(store: MongoStore<Model, KeyValue>, cursor: FindCursor<Result>) {\n super(store);\n this.cursor = cursor;\n }\n\n advance(count: number): void {\n this.cursor.skip(count);\n }\n\n next(): Promise<KeyValue | undefined> {\n return this.cursor.next().then((value) => {\n this._result = value;\n this.key = value?._id;\n return this.key;\n });\n }\n\n limit(newLimit: number): Promise<this> {\n this.cursor.limit(newLimit);\n return Promise.resolve(this);\n }\n\n result(): Promise<Result> {\n if (!this._result) throw new Error('Cannot call result() before next()');\n return Promise.resolve(this._result);\n }\n\n close(): Promise<void> {\n if (this.cursor) {\n this.cursor.close();\n }\n\n return Promise.resolve();\n }\n\n toArray(): Promise<Result[]> {\n return this.cursor.toArray();\n }\n}\n","/* eslint-disable complexity, max-lines */\nimport type {\n QuerySubscription,\n SubscribeCallback,\n QueryResult,\n QueryParams,\n Changes,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n} from 'liwi-store';\nimport type { Actions } from 'liwi-subscribe-store';\nimport { AbstractSubscribableStoreQuery } from 'liwi-subscribe-store';\nimport mingo from 'mingo';\nimport type {\n MongoBaseModel,\n MongoInsertType,\n MongoKeyPath,\n} from './MongoBaseModel';\nimport type MongoCursor from './MongoCursor';\nimport type MongoStore from './MongoStore';\n\nconst identityTransformer = <\n Model extends MongoBaseModel<any>,\n Transformed = Model,\n>(\n model: Model,\n): Transformed => model as unknown as Transformed;\n\ntype TestCriteria = (obj: any) => boolean;\n\nexport default class MongoQueryCollection<\n Model extends MongoBaseModel<KeyValue>,\n Params extends QueryParams<Params> = never,\n KeyValue extends AllowedKeyValue = Model['_id'],\n Item extends Record<MongoKeyPath, KeyValue> = Model,\n> extends AbstractSubscribableStoreQuery<\n MongoKeyPath,\n KeyValue,\n Model,\n MongoInsertType<Model, KeyValue>,\n Params,\n Item[]\n> {\n private readonly store: MongoStore<Model, KeyValue>;\n\n private readonly options: QueryOptions<Model>;\n\n private testCriteria?: TestCriteria;\n\n private readonly transformer: Transformer<Model, Item>;\n\n constructor(\n store: MongoStore<Model, KeyValue>,\n options: QueryOptions<Model>,\n transformer: Transformer<Model, Item> = identityTransformer,\n ) {\n super();\n this.store = store;\n this.options = options;\n this.transformer = transformer;\n }\n\n createTestCriteria(): TestCriteria {\n if (!this.testCriteria) {\n if (!this.options.criteria) {\n return () => true;\n }\n\n const mingoQuery = new mingo.Query(this.options.criteria);\n this.testCriteria = mingoQuery.test.bind(mingoQuery);\n }\n return this.testCriteria;\n }\n\n async fetch<T>(onFulfilled: (result: QueryResult<Item[]>) => T): Promise<T> {\n const [result, count] = await Promise.all([\n this.createMongoCursor().then((cursor) => cursor.toArray()),\n this.store.count(),\n ]);\n\n return onFulfilled({\n result: result.map(this.transformer),\n meta: { total: count },\n info: {\n sort: this.options.sort,\n limit: this.options.limit,\n keyPath: this.store.keyPath,\n },\n });\n }\n\n _subscribe(\n callback: SubscribeCallback<KeyValue, Item[]>,\n _includeInitial: boolean,\n ): QuerySubscription {\n const store = super.getSubscribeStore();\n const testCriteria: TestCriteria = this.createTestCriteria();\n\n const promise: Promise<void> = _includeInitial\n ? this.fetch(({ result, meta, info }: QueryResult<Item[]>) => {\n callback(null, [\n {\n type: 'initial',\n initial: result,\n queryInfo: info,\n meta,\n },\n ]);\n })\n : Promise.resolve();\n\n const unsubscribe = store.subscribe((action: Actions<Model>) => {\n const changes: Changes<KeyValue, Item[]> = [];\n switch (action.type) {\n case 'inserted': {\n const filtered = action.next.filter(testCriteria);\n if (filtered.length > 0) {\n changes.push({\n type: 'inserted',\n result: filtered.map(this.transformer),\n });\n }\n break;\n }\n case 'deleted': {\n const filtered = action.prev.filter(testCriteria);\n if (filtered.length > 0) {\n changes.push({\n type: 'deleted',\n keys: filtered.map((object) => object[this.store.keyPath]),\n });\n }\n break;\n }\n case 'updated': {\n const {\n deleted,\n updated,\n inserted,\n }: {\n deleted: KeyValue[];\n updated: Item[];\n inserted: Item[];\n } = { deleted: [], updated: [], inserted: [] };\n\n action.changes.forEach(([prevObject, nextObject]: [Model, Model]) => {\n if (testCriteria(prevObject)) {\n if (!testCriteria(nextObject)) {\n deleted.push(prevObject[this.store.keyPath]);\n } else {\n updated.push(this.transformer(nextObject));\n }\n } else if (testCriteria(nextObject)) {\n inserted.push(this.transformer(nextObject));\n }\n });\n\n if (deleted.length > 0) {\n changes.push({ type: 'deleted', keys: deleted });\n }\n if (updated.length > 0) {\n changes.push({ type: 'updated', result: updated });\n }\n if (inserted.length > 0) {\n changes.push({ type: 'inserted', result: inserted });\n }\n\n break;\n }\n default:\n throw new Error('Unsupported type');\n }\n\n if (changes.length === 0) return;\n\n callback(null, changes);\n });\n // let _feed;\n // const promise = this.queryCallback(this.store.query(), this.store.r)\n // .changes({\n // includeInitial: _includeInitial,\n // includeStates: true,\n // includeTypes: true,\n // includeOffsets: true,\n // })\n // .then((feed) => {\n // if (args.length === 0) {\n // _feed = feed;\n // delete this._promise;\n // }\n //\n // feed.each(callback);\n // return feed;\n // });\n //\n // if (args.length === 0) this._promise = promise;\n\n return {\n stop: unsubscribe,\n cancel: unsubscribe,\n then: <T, U>(\n onFulfilled: () => T | Promise<T>,\n onRejected?: (error: any) => U | Promise<U>,\n ): Promise<T | U> => promise.then(onFulfilled, onRejected),\n };\n }\n\n private async createMongoCursor(): Promise<\n MongoCursor<Model, Model, KeyValue>\n > {\n const cursor = await this.store.cursor(\n this.options.criteria,\n this.options.sort,\n );\n\n if (this.options.skip) {\n cursor.advance(this.options.skip);\n }\n\n if (this.options.limit) {\n await cursor.limit(this.options.limit);\n }\n\n return cursor;\n }\n}\n","import type {\n QuerySubscription,\n SubscribeCallback,\n QueryResult,\n QueryParams,\n Changes,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n} from 'liwi-store';\nimport type { Actions } from 'liwi-subscribe-store';\nimport { AbstractSubscribableStoreQuery } from 'liwi-subscribe-store';\nimport mingo from 'mingo';\nimport type {\n MongoBaseModel,\n MongoInsertType,\n MongoKeyPath,\n} from './MongoBaseModel';\nimport type MongoCursor from './MongoCursor';\nimport type MongoStore from './MongoStore';\n\nconst identityTransformer = <\n Model extends MongoBaseModel<any>,\n Transformed = Model,\n>(\n model: Model,\n): Transformed => model as unknown as Transformed;\n\ntype TestCriteria = (obj: any) => boolean;\n\nexport default class MongoQuerySingleItem<\n Model extends MongoBaseModel<KeyValue>,\n Params extends QueryParams<Params> = never,\n Result extends Record<MongoKeyPath, KeyValue> | null = Model | null,\n KeyValue extends AllowedKeyValue = Model['_id'],\n> extends AbstractSubscribableStoreQuery<\n MongoKeyPath,\n KeyValue,\n Model,\n MongoInsertType<Model, KeyValue>,\n Params,\n Result\n> {\n private readonly store: MongoStore<Model, KeyValue>;\n\n private readonly options: QueryOptions<Model>;\n\n private testCriteria?: TestCriteria;\n\n private readonly transformer: Transformer<Model, Result>;\n\n constructor(\n store: MongoStore<Model, KeyValue>,\n options: QueryOptions<Model>,\n transformer: Transformer<Model, Result> = identityTransformer,\n ) {\n super();\n this.store = store;\n this.options = options;\n this.transformer = transformer;\n }\n\n createMingoTestCriteria(): TestCriteria {\n if (!this.testCriteria) {\n if (!this.options.criteria) {\n return () => true;\n }\n\n const mingoQuery = new mingo.Query(this.options.criteria);\n this.testCriteria = mingoQuery.test.bind(mingoQuery);\n }\n\n return this.testCriteria;\n }\n\n async fetch<T>(onFulfilled: (result: QueryResult<Result>) => T): Promise<T> {\n const cursor = await this.createMongoCursor();\n await cursor.limit(1);\n return cursor.toArray().then((result: Model[]) => {\n const item: Result =\n result.length === 0 ? (null as Result) : this.transformer(result[0]);\n return onFulfilled({\n result: item,\n meta: { total: result === null ? 0 : 1 },\n info: {\n limit: 1,\n keyPath: this.store.keyPath,\n },\n });\n });\n }\n\n _subscribe(\n callback: SubscribeCallback<KeyValue, Result>,\n _includeInitial: boolean,\n ): QuerySubscription {\n const store = super.getSubscribeStore();\n const testCriteria: TestCriteria = this.createMingoTestCriteria();\n\n const promise: Promise<void> = _includeInitial\n ? this.fetch(({ result, meta, info }: QueryResult<Result>) => {\n callback(null, [\n {\n type: 'initial',\n initial: result,\n queryInfo: info,\n meta,\n },\n ]);\n })\n : Promise.resolve();\n\n const unsubscribe = store.subscribe(async (action: Actions<Model>) => {\n const changes: Changes<KeyValue, Result> = [];\n switch (action.type) {\n case 'inserted': {\n const filtered = action.next.filter(testCriteria);\n if (filtered.length > 0) {\n changes.push({\n type: 'updated',\n result: this.transformer(filtered[0]),\n });\n }\n break;\n }\n case 'deleted': {\n const filtered = action.prev.filter(testCriteria);\n if (filtered.length > 0) {\n changes.push({\n type: 'deleted',\n keys: filtered.map((object) => object[this.store.keyPath]),\n });\n }\n break;\n }\n case 'updated': {\n const filtered = action.changes.filter(([prev, next]) =>\n testCriteria(prev),\n );\n if (filtered.length > 0) {\n if (this.options.sort) {\n const { result } = await this.fetch((res) => res);\n changes.push({\n type: 'updated',\n result,\n });\n } else if (filtered.length !== 1) {\n throw new Error(\n 'should not match more than 1, use sort if you can have multiple match',\n );\n } else {\n const [, next] = filtered[0];\n changes.push({\n type: 'updated',\n result: testCriteria(next) ? this.transformer(next) : null!,\n });\n }\n } else if (filtered.length === 0) {\n }\n break;\n }\n default:\n throw new Error('Unsupported type');\n }\n\n if (changes.length === 0) return;\n\n callback(null, changes);\n });\n\n return {\n stop: unsubscribe,\n cancel: unsubscribe,\n then: <T, U>(\n onFulfilled: () => T | Promise<T>,\n onRejected?: (error: any) => U | Promise<U>,\n ): Promise<T | U> => promise.then(onFulfilled, onRejected),\n };\n }\n\n private async createMongoCursor(): Promise<\n MongoCursor<Model, Model, KeyValue>\n > {\n const cursor = await this.store.cursor(\n this.options.criteria,\n this.options.sort,\n );\n\n if (this.options.limit) {\n await cursor.limit(this.options.limit);\n }\n\n return cursor;\n }\n}\n","/* eslint-disable max-lines */\nimport type {\n UpsertResult,\n SubscribableStore,\n QueryParams,\n UpsertPartialObject,\n Criteria,\n Sort,\n Update,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n OptionalBaseModelKeysForInsert,\n} from 'liwi-store';\nimport type {\n Collection,\n FindCursor,\n MongoClient,\n UpdateFilter,\n} from 'mongodb';\nimport mongodb from 'mongodb';\nimport type {\n MongoBaseModel,\n MongoKeyPath,\n MongoInsertType,\n} from './MongoBaseModel';\nimport type MongoConnection from './MongoConnection';\nimport MongoCursor from './MongoCursor';\nimport MongoQueryCollection from './MongoQueryCollection';\nimport MongoQuerySingleItem from './MongoQuerySingleItem';\n\nexport interface MongoUpsertResult<\n KeyValue extends AllowedKeyValue,\n Model extends MongoBaseModel<KeyValue>,\n> extends UpsertResult<Model> {\n object: Model;\n inserted: boolean;\n}\n\nexport default class MongoStore<\n Model extends MongoBaseModel<KeyValue>,\n KeyValue extends AllowedKeyValue = Model[MongoKeyPath],\n> implements\n SubscribableStore<\n MongoKeyPath,\n KeyValue,\n Model,\n MongoInsertType<Model>,\n MongoConnection\n >\n{\n readonly keyPath: MongoKeyPath = '_id';\n\n readonly connection: MongoConnection;\n\n private _collection: Collection<Model> | Promise<Collection<Model>>;\n\n constructor(connection: MongoConnection, collectionName: string) {\n this.connection = connection;\n\n if (!collectionName) {\n throw new Error(`Invalid collectionName: \"${collectionName}\"`);\n }\n\n this._collection = connection.getConnection().then(\n (client: MongoClient) => {\n this._collection = client.db().collection(collectionName);\n return this._collection;\n },\n (err: any) => {\n this._collection = Promise.reject(err);\n return this._collection;\n },\n );\n }\n\n get collection(): Promise<Collection<Model>> {\n if (this.connection.connectionFailed) {\n return Promise.reject(new Error('MongoDB connection failed'));\n }\n\n return Promise.resolve(this._collection);\n }\n\n createQuerySingleItem<\n Result extends Record<MongoKeyPath, KeyValue> = Model,\n Params extends QueryParams<Params> = never,\n >(\n options: QueryOptions<Model>,\n transformer?: Transformer<Model, Result>,\n ): MongoQuerySingleItem<Model, Params, Result, KeyValue> {\n return new MongoQuerySingleItem<Model, Params, Result, KeyValue>(\n this,\n options,\n transformer,\n );\n }\n\n createQueryCollection<\n Item extends Record<MongoKeyPath, KeyValue> = Model,\n Params extends QueryParams<Params> = never,\n >(\n options: QueryOptions<Model>,\n transformer?: Transformer<Model, Item>,\n ): MongoQueryCollection<Model, Params, Model['_id'], Item> {\n return new MongoQueryCollection<Model, Params, KeyValue, Item>(\n this,\n options,\n transformer,\n );\n }\n\n async insertOne(object: MongoInsertType<Model>): Promise<Model> {\n if (!object._id) {\n object._id = new mongodb.ObjectId().toString() as Model['_id'];\n }\n\n if (!object.created) object.created = new Date();\n if (!object.updated) object.updated = new Date();\n\n const collection = await this.collection;\n const { acknowledged: isAcknowledged } = await collection.insertOne(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n object as any,\n );\n if (!isAcknowledged) {\n throw new Error('Fail to insert');\n }\n\n return object as Model;\n }\n\n async replaceOne(object: Model): Promise<Model> {\n if (!object.updated) object.updated = new Date();\n\n const collection = await this.collection;\n await collection.replaceOne({ _id: object._id } as Criteria<Model>, object);\n return object;\n }\n\n async upsertOne<\n K extends Exclude<\n keyof Model,\n MongoKeyPath | OptionalBaseModelKeysForInsert\n >,\n >(\n object: UpsertPartialObject<MongoKeyPath, KeyValue, Model, K>,\n setOnInsertPartialObject?: Update<Model>['$setOnInsert'],\n ): Promise<Model> {\n const result = await this.upsertOneWithInfo(\n object,\n setOnInsertPartialObject,\n );\n return result.object;\n }\n\n async upsertOneWithInfo<\n K extends Exclude<\n keyof Model,\n MongoKeyPath | OptionalBaseModelKeysForInsert\n >,\n >(\n object: UpsertPartialObject<MongoKeyPath, KeyValue, Model, K>,\n setOnInsertPartialObject?: Update<Model>['$setOnInsert'],\n ): Promise<MongoUpsertResult<KeyValue, Model>> {\n const $setOnInsert = {\n created: object.created || new Date(),\n ...setOnInsertPartialObject,\n };\n\n if (!object.updated) {\n (object as MongoBaseModel).updated = new Date();\n }\n\n const $set: Partial<typeof object> = { ...object };\n delete $set.created;\n\n const collection = await this.collection;\n\n const { upsertedCount } = await collection.updateOne(\n { _id: object._id } as Criteria<Model>,\n { $set, $setOnInsert } as UpdateFilter<Model>,\n { upsert: true },\n );\n\n if (upsertedCount) {\n Object.assign(object, $setOnInsert);\n }\n\n return { object: object as unknown as Model, inserted: !!upsertedCount };\n }\n\n replaceSeveral(objects: Model[]): Promise<Model[]> {\n return Promise.all(objects.map((object: Model) => this.replaceOne(object)));\n }\n\n async partialUpdateByKey(\n key: KeyValue,\n partialUpdate: Update<Model>,\n criteria?: Criteria<Model>,\n ): Promise<Model> {\n const collection = await this.collection;\n const commandResult = await collection.updateOne(\n { _id: key, ...criteria } as Criteria<Model>,\n partialUpdate as UpdateFilter<Model>,\n );\n if (!commandResult.acknowledged) {\n console.error(commandResult);\n throw new Error('Update failed');\n }\n const object = await this.findByKey(key);\n return object!;\n }\n\n partialUpdateOne(\n object: Model,\n partialUpdate: Update<Model>,\n ): Promise<Model> {\n return this.partialUpdateByKey(object._id, partialUpdate);\n }\n\n partialUpdateMany(\n criteria: Criteria<Model>,\n partialUpdate: Update<Model>,\n ): Promise<void> {\n return this.collection\n .then((collection) =>\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n collection.updateMany(criteria, partialUpdate as any),\n )\n .then((res) => undefined); // TODO return updated object\n }\n\n deleteByKey(key: KeyValue, criteria?: Criteria<Model>): Promise<void> {\n return this.collection\n .then((collection) =>\n collection.deleteOne({ _id: key, ...criteria } as Criteria<Model>),\n )\n .then(() => undefined);\n }\n\n deleteOne(object: Model): Promise<void> {\n return this.deleteByKey(object._id);\n }\n\n deleteMany(selector: Criteria<Model>): Promise<void> {\n return this.collection\n .then((collection) => collection.deleteMany(selector))\n .then(() => undefined);\n }\n\n async count(filter?: Criteria<Model>): Promise<number> {\n const collection = await this.collection;\n return filter\n ? collection.countDocuments(filter)\n : collection.countDocuments();\n }\n\n async cursor<Result extends Partial<Model> = Model>(\n filter?: Criteria<Model>,\n sort?: Sort<Model>,\n ): Promise<MongoCursor<Model, Result, KeyValue>> {\n const collection = await this.collection;\n const findCursor = filter\n ? collection.find<Result>(filter)\n : (collection.find() as unknown as FindCursor<Result>);\n if (sort) findCursor.sort(sort);\n return new MongoCursor<Model, Result, KeyValue>(this, findCursor);\n }\n\n async findByKey(\n key: KeyValue,\n criteria?: Criteria<Model>,\n ): Promise<Model | undefined> {\n const collection = await this.collection;\n const result = await collection.findOne<Model>({\n _id: key,\n ...criteria,\n } as Criteria<Model>);\n return result || undefined;\n }\n\n findAll(criteria?: Criteria<Model>, sort?: Sort<Model>): Promise<Model[]> {\n return this.cursor<Model>(criteria, sort).then((cursor) =>\n cursor.toArray(),\n );\n }\n\n async findOne(\n filter: Criteria<Model>,\n sort?: Sort<Model>,\n ): Promise<Model | undefined> {\n const collection = await this.collection;\n const result = await collection.findOne<Model>(filter, {\n sort,\n });\n return result || undefined;\n }\n}\n","import { AbstractConnection } from 'liwi-store';\nimport mongodb from 'mongodb';\nimport { Logger } from 'nightingale-logger';\n\nconst logger = new Logger('liwi:mongo:MongoConnection');\n\nexport default class MongoConnection extends AbstractConnection {\n _connection?: mongodb.MongoClient;\n\n _connecting?: Promise<mongodb.MongoClient>;\n\n connectionFailed?: boolean;\n\n // TODO interface\n constructor(config: Map<string, string | number>) {\n super();\n\n if (!config.has('host')) {\n config.set('host', 'localhost');\n }\n if (!config.has('port')) {\n config.set('port', '27017');\n }\n if (!config.has('database')) {\n throw new Error('Missing config database');\n }\n\n const buildConnectionString = (redactCredentials: boolean): string =>\n `mongodb://${\n config.has('user')\n ? `${\n redactCredentials\n ? `${(config.get('user') as string).slice(0, 2)}[redacted]`\n : (config.get('user') as string)\n }:${\n redactCredentials\n ? '[redacted]'\n : (config.get('password') as string)\n }@`\n : ''\n }` +\n `${config.get('host') as string}:${config.get('port') as string}/${\n config.get('database') as string\n }`;\n\n const connectionString = buildConnectionString(false);\n const connectionStringRedacted = buildConnectionString(true);\n\n this.connect(connectionString, connectionStringRedacted);\n }\n\n connect(connectionString: string, connectionStringRedacted: string): void {\n logger.info('connecting', { connectionStringRedacted });\n\n const connectPromise = mongodb.MongoClient.connect(connectionString)\n .then((connection) => {\n logger.info('connected', { connectionStringRedacted });\n connection.on('close', () => {\n logger.warn('close', { connectionStringRedacted });\n this.connectionFailed = true;\n this.getConnection = () => {\n throw new Error('MongoDB connection closed');\n };\n });\n connection.on('timeout', () => {\n logger.warn('timeout', { connectionStringRedacted });\n this.connectionFailed = true;\n this.getConnection = () => {\n throw new Error('MongoDB connection timeout');\n };\n });\n connection.on('reconnect', () => {\n logger.warn('reconnect', { connectionStringRedacted });\n this.connectionFailed = false;\n this.getConnection = () => Promise.resolve(this._connection!);\n });\n connection.on('error', (err) => {\n logger.warn('error', { connectionStringRedacted, err });\n });\n\n this._connection = connection;\n this._connecting = undefined;\n this.getConnection = () => Promise.resolve(this._connection!);\n return connection;\n })\n .catch((err) => {\n logger.info('not connected', { connectionStringRedacted });\n console.error(err.message || err);\n // throw err;\n process.nextTick(() => {\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(1);\n });\n\n throw err;\n });\n\n this.getConnection = () => Promise.resolve(connectPromise);\n this._connecting = this.getConnection();\n }\n\n getConnection(): Promise<mongodb.MongoClient> {\n throw new Error('call connect()');\n }\n\n async close(): Promise<void> {\n this.getConnection = () => Promise.reject(new Error('Connection closed'));\n if (this._connection) {\n await this._connection.close();\n this._connection = undefined;\n } else if (this._connecting) {\n await this._connecting;\n await this.close();\n }\n }\n}\n","import type { AllowedKeyValue } from 'liwi-store';\nimport { SubscribeStore } from 'liwi-subscribe-store';\nimport type {\n MongoBaseModel,\n MongoInsertType,\n MongoKeyPath,\n} from './MongoBaseModel';\nimport type MongoConnection from './MongoConnection';\nimport type MongoStore from './MongoStore';\n\nexport default function createMongoSubscribeStore<\n Model extends MongoBaseModel<KeyValue>,\n KeyValue extends AllowedKeyValue = Model[MongoKeyPath],\n>(\n mongoStore: MongoStore<Model, KeyValue>,\n): SubscribeStore<\n MongoKeyPath,\n KeyValue,\n Model,\n MongoInsertType<Model, KeyValue>,\n MongoConnection,\n MongoStore<Model, KeyValue>\n> {\n return new SubscribeStore(mongoStore);\n}\n"],"names":["MongoCursor","AbstractStoreCursor","constructor","store","cursor","advance","count","skip","next","then","value","_result","key","_id","limit","newLimit","Promise","resolve","result","Error","close","toArray","identityTransformer","model","MongoQueryCollection","AbstractSubscribableStoreQuery","options","transformer","createTestCriteria","testCriteria","criteria","mingoQuery","mingo","Query","test","bind","fetch","onFulfilled","all","createMongoCursor","map","meta","total","info","sort","keyPath","_subscribe","callback","_includeInitial","getSubscribeStore","promise","type","initial","queryInfo","unsubscribe","subscribe","action","changes","filtered","filter","length","push","prev","keys","object","deleted","updated","inserted","forEach","prevObject","nextObject","stop","cancel","onRejected","MongoQuerySingleItem","createMingoTestCriteria","item","res","MongoStore","connection","collectionName","_collection","getConnection","client","db","collection","err","reject","connectionFailed","createQuerySingleItem","createQueryCollection","insertOne","mongodb","ObjectId","toString","created","Date","acknowledged","isAcknowledged","replaceOne","upsertOne","setOnInsertPartialObject","upsertOneWithInfo","$setOnInsert","$set","upsertedCount","updateOne","upsert","Object","assign","replaceSeveral","objects","partialUpdateByKey","partialUpdate","commandResult","console","error","findByKey","partialUpdateOne","partialUpdateMany","updateMany","undefined","deleteByKey","deleteOne","deleteMany","selector","countDocuments","findCursor","find","findOne","findAll","logger","Logger","MongoConnection","AbstractConnection","config","has","set","buildConnectionString","redactCredentials","get","slice","connectionString","connectionStringRedacted","connect","connectPromise","MongoClient","on","warn","_connection","_connecting","catch","message","process","nextTick","exit","createMongoSubscribeStore","mongoStore","SubscribeStore"],"mappings":";;;;;;;;;;;;;;;AAMe,MAAMA,WAAN,SAILC,6BAJK,CASb;AACA;AAMAC,EAAAA,WAAW,CAACC,KAAD,EAAqCC,MAArC,EAAiE;AAC1E,IAAA,KAAA,CAAMD,KAAN,CAAA,CAAA;IACA,IAAKC,CAAAA,MAAL,GAAcA,MAAd,CAAA;AACD,GAAA;;EAEDC,OAAO,CAACC,KAAD,EAAsB;AAC3B,IAAA,IAAA,CAAKF,MAAL,CAAYG,IAAZ,CAAiBD,KAAjB,CAAA,CAAA;AACD,GAAA;;AAEDE,EAAAA,IAAI,GAAkC;IACpC,OAAO,IAAA,CAAKJ,MAAL,CAAYI,IAAZ,GAAmBC,IAAnB,CAAyBC,KAAD,IAAW;MACxC,IAAKC,CAAAA,OAAL,GAAeD,KAAf,CAAA;AACA,MAAA,IAAA,CAAKE,GAAL,GAAWF,KAAK,EAAEG,GAAlB,CAAA;AACA,MAAA,OAAO,KAAKD,GAAZ,CAAA;AACD,KAJM,CAAP,CAAA;AAKD,GAAA;;EAEDE,KAAK,CAACC,QAAD,EAAkC;AACrC,IAAA,IAAA,CAAKX,MAAL,CAAYU,KAAZ,CAAkBC,QAAlB,CAAA,CAAA;AACA,IAAA,OAAOC,OAAO,CAACC,OAAR,CAAgB,IAAhB,CAAP,CAAA;AACD,GAAA;;AAEDC,EAAAA,MAAM,GAAoB;IACxB,IAAI,CAAC,KAAKP,OAAV,EAAmB,MAAM,IAAIQ,KAAJ,CAAU,oCAAV,CAAN,CAAA;AACnB,IAAA,OAAOH,OAAO,CAACC,OAAR,CAAgB,IAAA,CAAKN,OAArB,CAAP,CAAA;AACD,GAAA;;AAEDS,EAAAA,KAAK,GAAkB;IACrB,IAAI,IAAA,CAAKhB,MAAT,EAAiB;MACf,IAAKA,CAAAA,MAAL,CAAYgB,KAAZ,EAAA,CAAA;AACD,KAAA;;IAED,OAAOJ,OAAO,CAACC,OAAR,EAAP,CAAA;AACD,GAAA;;AAEDI,EAAAA,OAAO,GAAsB;AAC3B,IAAA,OAAO,IAAKjB,CAAAA,MAAL,CAAYiB,OAAZ,EAAP,CAAA;AACD,GAAA;;AA5CD;;ACfF;;AAsBA,MAAMC,qBAAmB,GAIvBC,KAJ0B,IAKVA,KALlB,CAAA;;AASe,MAAMC,oBAAN,SAKLC,iDALK,CAYb;EASAvB,WAAW,CACTC,KADS,EAETuB,OAFS,EAGTC,WAAqC,GAAGL,qBAH/B,EAIT;AACA,IAAA,KAAA,EAAA,CAAA;IACA,IAAKnB,CAAAA,KAAL,GAAaA,KAAb,CAAA;IACA,IAAKuB,CAAAA,OAAL,GAAeA,OAAf,CAAA;IACA,IAAKC,CAAAA,WAAL,GAAmBA,WAAnB,CAAA;AACD,GAAA;;AAEDC,EAAAA,kBAAkB,GAAiB;IACjC,IAAI,CAAC,IAAKC,CAAAA,YAAV,EAAwB;AACtB,MAAA,IAAI,CAAC,IAAA,CAAKH,OAAL,CAAaI,QAAlB,EAA4B;AAC1B,QAAA,OAAO,MAAM,IAAb,CAAA;AACD,OAAA;;MAED,MAAMC,UAAU,GAAG,IAAIC,cAAK,CAACC,KAAV,CAAgB,IAAKP,CAAAA,OAAL,CAAaI,QAA7B,CAAnB,CAAA;MACA,IAAKD,CAAAA,YAAL,GAAoBE,UAAU,CAACG,IAAX,CAAgBC,IAAhB,CAAqBJ,UAArB,CAApB,CAAA;AACD,KAAA;;AACD,IAAA,OAAO,KAAKF,YAAZ,CAAA;AACD,GAAA;;EAEU,MAALO,KAAK,CAAIC,WAAJ,EAAiE;AAC1E,IAAA,MAAM,CAACnB,MAAD,EAASZ,KAAT,CAAkB,GAAA,MAAMU,OAAO,CAACsB,GAAR,CAAY,CACxC,IAAA,CAAKC,iBAAL,EAAyB9B,CAAAA,IAAzB,CAA+BL,MAAD,IAAYA,MAAM,CAACiB,OAAP,EAA1C,CADwC,EAExC,IAAA,CAAKlB,KAAL,CAAWG,KAAX,EAFwC,CAAZ,CAA9B,CAAA;AAKA,IAAA,OAAO+B,WAAW,CAAC;AACjBnB,MAAAA,MAAM,EAAEA,MAAM,CAACsB,GAAP,CAAW,IAAA,CAAKb,WAAhB,CADS;AAEjBc,MAAAA,IAAI,EAAE;AAAEC,QAAAA,KAAK,EAAEpC,KAAAA;OAFE;AAGjBqC,MAAAA,IAAI,EAAE;AACJC,QAAAA,IAAI,EAAE,IAAA,CAAKlB,OAAL,CAAakB,IADf;AAEJ9B,QAAAA,KAAK,EAAE,IAAA,CAAKY,OAAL,CAAaZ,KAFhB;QAGJ+B,OAAO,EAAE,IAAK1C,CAAAA,KAAL,CAAW0C,OAAAA;AAHhB,OAAA;AAHW,KAAD,CAAlB,CAAA;AASD,GAAA;;AAEDC,EAAAA,UAAU,CACRC,QADQ,EAERC,eAFQ,EAGW;AACnB,IAAA,MAAM7C,KAAK,GAAG,KAAM8C,CAAAA,iBAAN,EAAd,CAAA;AACA,IAAA,MAAMpB,YAA0B,GAAG,IAAKD,CAAAA,kBAAL,EAAnC,CAAA;AAEA,IAAA,MAAMsB,OAAsB,GAAGF,eAAe,GAC1C,IAAKZ,CAAAA,KAAL,CAAW,CAAC;MAAElB,MAAF;MAAUuB,IAAV;AAAgBE,MAAAA,IAAAA;AAAhB,KAAD,KAAiD;MAC1DI,QAAQ,CAAC,IAAD,EAAO,CACb;AACEI,QAAAA,IAAI,EAAE,SADR;AAEEC,QAAAA,OAAO,EAAElC,MAFX;AAGEmC,QAAAA,SAAS,EAAEV,IAHb;AAIEF,QAAAA,IAAAA;AAJF,OADa,CAAP,CAAR,CAAA;AAQD,KATD,CAD0C,GAW1CzB,OAAO,CAACC,OAAR,EAXJ,CAAA;AAaA,IAAA,MAAMqC,WAAW,GAAGnD,KAAK,CAACoD,SAAN,CAAiBC,MAAD,IAA4B;MAC9D,MAAMC,OAAkC,GAAG,EAA3C,CAAA;;MACA,QAAQD,MAAM,CAACL,IAAf;AACE,QAAA,KAAK,UAAL;AAAiB,UAAA;YACf,MAAMO,QAAQ,GAAGF,MAAM,CAAChD,IAAP,CAAYmD,MAAZ,CAAmB9B,YAAnB,CAAjB,CAAA;;AACA,YAAA,IAAI6B,QAAQ,CAACE,MAAT,GAAkB,CAAtB,EAAyB;cACvBH,OAAO,CAACI,IAAR,CAAa;AACXV,gBAAAA,IAAI,EAAE,UADK;AAEXjC,gBAAAA,MAAM,EAAEwC,QAAQ,CAAClB,GAAT,CAAa,KAAKb,WAAlB,CAAA;eAFV,CAAA,CAAA;AAID,aAAA;;AACD,YAAA,MAAA;AACD,WAAA;;AACD,QAAA,KAAK,SAAL;AAAgB,UAAA;YACd,MAAM+B,QAAQ,GAAGF,MAAM,CAACM,IAAP,CAAYH,MAAZ,CAAmB9B,YAAnB,CAAjB,CAAA;;AACA,YAAA,IAAI6B,QAAQ,CAACE,MAAT,GAAkB,CAAtB,EAAyB;cACvBH,OAAO,CAACI,IAAR,CAAa;AACXV,gBAAAA,IAAI,EAAE,SADK;AAEXY,gBAAAA,IAAI,EAAEL,QAAQ,CAAClB,GAAT,CAAcwB,MAAD,IAAYA,MAAM,CAAC,IAAA,CAAK7D,KAAL,CAAW0C,OAAZ,CAA/B,CAAA;eAFR,CAAA,CAAA;AAID,aAAA;;AACD,YAAA,MAAA;AACD,WAAA;;AACD,QAAA,KAAK,SAAL;AAAgB,UAAA;YACd,MAAM;cACJoB,OADI;cAEJC,OAFI;AAGJC,cAAAA,QAAAA;aAKE,GAAA;AAAEF,cAAAA,OAAO,EAAE,EAAX;AAAeC,cAAAA,OAAO,EAAE,EAAxB;AAA4BC,cAAAA,QAAQ,EAAE,EAAA;aAR1C,CAAA;YAUAX,MAAM,CAACC,OAAP,CAAeW,OAAf,CAAuB,CAAC,CAACC,UAAD,EAAaC,UAAb,CAAD,KAA8C;AACnE,cAAA,IAAIzC,YAAY,CAACwC,UAAD,CAAhB,EAA8B;AAC5B,gBAAA,IAAI,CAACxC,YAAY,CAACyC,UAAD,CAAjB,EAA+B;kBAC7BL,OAAO,CAACJ,IAAR,CAAaQ,UAAU,CAAC,IAAKlE,CAAAA,KAAL,CAAW0C,OAAZ,CAAvB,CAAA,CAAA;AACD,iBAFD,MAEO;AACLqB,kBAAAA,OAAO,CAACL,IAAR,CAAa,KAAKlC,WAAL,CAAiB2C,UAAjB,CAAb,CAAA,CAAA;AACD,iBAAA;AACF,eAND,MAMO,IAAIzC,YAAY,CAACyC,UAAD,CAAhB,EAA8B;AACnCH,gBAAAA,QAAQ,CAACN,IAAT,CAAc,KAAKlC,WAAL,CAAiB2C,UAAjB,CAAd,CAAA,CAAA;AACD,eAAA;aATH,CAAA,CAAA;;AAYA,YAAA,IAAIL,OAAO,CAACL,MAAR,GAAiB,CAArB,EAAwB;cACtBH,OAAO,CAACI,IAAR,CAAa;AAAEV,gBAAAA,IAAI,EAAE,SAAR;AAAmBY,gBAAAA,IAAI,EAAEE,OAAAA;eAAtC,CAAA,CAAA;AACD,aAAA;;AACD,YAAA,IAAIC,OAAO,CAACN,MAAR,GAAiB,CAArB,EAAwB;cACtBH,OAAO,CAACI,IAAR,CAAa;AAAEV,gBAAAA,IAAI,EAAE,SAAR;AAAmBjC,gBAAAA,MAAM,EAAEgD,OAAAA;eAAxC,CAAA,CAAA;AACD,aAAA;;AACD,YAAA,IAAIC,QAAQ,CAACP,MAAT,GAAkB,CAAtB,EAAyB;cACvBH,OAAO,CAACI,IAAR,CAAa;AAAEV,gBAAAA,IAAI,EAAE,UAAR;AAAoBjC,gBAAAA,MAAM,EAAEiD,QAAAA;eAAzC,CAAA,CAAA;AACD,aAAA;;AAED,YAAA,MAAA;AACD,WAAA;;AACD,QAAA;AACE,UAAA,MAAM,IAAIhD,KAAJ,CAAU,kBAAV,CAAN,CAAA;AAzDJ,OAAA;;AA4DA,MAAA,IAAIsC,OAAO,CAACG,MAAR,KAAmB,CAAvB,EAA0B,OAAA;AAE1Bb,MAAAA,QAAQ,CAAC,IAAD,EAAOU,OAAP,CAAR,CAAA;KAhEkB,CAApB,CAjBmB;AAoFnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IAEA,OAAO;AACLc,MAAAA,IAAI,EAAEjB,WADD;AAELkB,MAAAA,MAAM,EAAElB,WAFH;AAGL7C,MAAAA,IAAI,EAAE,CACJ4B,WADI,EAEJoC,UAFI,KAGevB,OAAO,CAACzC,IAAR,CAAa4B,WAAb,EAA0BoC,UAA1B,CAAA;KANvB,CAAA;AAQD,GAAA;;AAE8B,EAAA,MAAjBlC,iBAAiB,GAE7B;AACA,IAAA,MAAMnC,MAAM,GAAG,MAAM,IAAKD,CAAAA,KAAL,CAAWC,MAAX,CACnB,IAAKsB,CAAAA,OAAL,CAAaI,QADM,EAEnB,KAAKJ,OAAL,CAAakB,IAFM,CAArB,CAAA;;AAKA,IAAA,IAAI,IAAKlB,CAAAA,OAAL,CAAanB,IAAjB,EAAuB;AACrBH,MAAAA,MAAM,CAACC,OAAP,CAAe,IAAKqB,CAAAA,OAAL,CAAanB,IAA5B,CAAA,CAAA;AACD,KAAA;;AAED,IAAA,IAAI,IAAKmB,CAAAA,OAAL,CAAaZ,KAAjB,EAAwB;MACtB,MAAMV,MAAM,CAACU,KAAP,CAAa,KAAKY,OAAL,CAAaZ,KAA1B,CAAN,CAAA;AACD,KAAA;;AAED,IAAA,OAAOV,MAAP,CAAA;AACD,GAAA;;AAtLD;;ACtBF,MAAMkB,mBAAmB,GAIvBC,KAJ0B,IAKVA,KALlB,CAAA;;AASe,MAAMmD,oBAAN,SAKLjD,iDALK,CAYb;EASAvB,WAAW,CACTC,KADS,EAETuB,OAFS,EAGTC,WAAuC,GAAGL,mBAHjC,EAIT;AACA,IAAA,KAAA,EAAA,CAAA;IACA,IAAKnB,CAAAA,KAAL,GAAaA,KAAb,CAAA;IACA,IAAKuB,CAAAA,OAAL,GAAeA,OAAf,CAAA;IACA,IAAKC,CAAAA,WAAL,GAAmBA,WAAnB,CAAA;AACD,GAAA;;AAEDgD,EAAAA,uBAAuB,GAAiB;IACtC,IAAI,CAAC,IAAK9C,CAAAA,YAAV,EAAwB;AACtB,MAAA,IAAI,CAAC,IAAA,CAAKH,OAAL,CAAaI,QAAlB,EAA4B;AAC1B,QAAA,OAAO,MAAM,IAAb,CAAA;AACD,OAAA;;MAED,MAAMC,UAAU,GAAG,IAAIC,cAAK,CAACC,KAAV,CAAgB,IAAKP,CAAAA,OAAL,CAAaI,QAA7B,CAAnB,CAAA;MACA,IAAKD,CAAAA,YAAL,GAAoBE,UAAU,CAACG,IAAX,CAAgBC,IAAhB,CAAqBJ,UAArB,CAApB,CAAA;AACD,KAAA;;AAED,IAAA,OAAO,KAAKF,YAAZ,CAAA;AACD,GAAA;;EAEU,MAALO,KAAK,CAAIC,WAAJ,EAAiE;AAC1E,IAAA,MAAMjC,MAAM,GAAG,MAAM,IAAA,CAAKmC,iBAAL,EAArB,CAAA;AACA,IAAA,MAAMnC,MAAM,CAACU,KAAP,CAAa,CAAb,CAAN,CAAA;AACA,IAAA,OAAOV,MAAM,CAACiB,OAAP,GAAiBZ,IAAjB,CAAuBS,MAAD,IAAqB;AAChD,MAAA,MAAM0D,IAAY,GAChB1D,MAAM,CAAC0C,MAAP,KAAkB,CAAlB,GAAuB,IAAvB,GAAyC,KAAKjC,WAAL,CAAiBT,MAAM,CAAC,CAAD,CAAvB,CAD3C,CAAA;AAEA,MAAA,OAAOmB,WAAW,CAAC;AACjBnB,QAAAA,MAAM,EAAE0D,IADS;AAEjBnC,QAAAA,IAAI,EAAE;AAAEC,UAAAA,KAAK,EAAExB,MAAM,KAAK,IAAX,GAAkB,CAAlB,GAAsB,CAAA;SAFpB;AAGjByB,QAAAA,IAAI,EAAE;AACJ7B,UAAAA,KAAK,EAAE,CADH;UAEJ+B,OAAO,EAAE,IAAK1C,CAAAA,KAAL,CAAW0C,OAAAA;AAFhB,SAAA;AAHW,OAAD,CAAlB,CAAA;AAQD,KAXM,CAAP,CAAA;AAYD,GAAA;;AAEDC,EAAAA,UAAU,CACRC,QADQ,EAERC,eAFQ,EAGW;AACnB,IAAA,MAAM7C,KAAK,GAAG,KAAM8C,CAAAA,iBAAN,EAAd,CAAA;AACA,IAAA,MAAMpB,YAA0B,GAAG,IAAK8C,CAAAA,uBAAL,EAAnC,CAAA;AAEA,IAAA,MAAMzB,OAAsB,GAAGF,eAAe,GAC1C,IAAKZ,CAAAA,KAAL,CAAW,CAAC;MAAElB,MAAF;MAAUuB,IAAV;AAAgBE,MAAAA,IAAAA;AAAhB,KAAD,KAAiD;MAC1DI,QAAQ,CAAC,IAAD,EAAO,CACb;AACEI,QAAAA,IAAI,EAAE,SADR;AAEEC,QAAAA,OAAO,EAAElC,MAFX;AAGEmC,QAAAA,SAAS,EAAEV,IAHb;AAIEF,QAAAA,IAAAA;AAJF,OADa,CAAP,CAAR,CAAA;AAQD,KATD,CAD0C,GAW1CzB,OAAO,CAACC,OAAR,EAXJ,CAAA;IAaA,MAAMqC,WAAW,GAAGnD,KAAK,CAACoD,SAAN,CAAgB,MAAOC,MAAP,IAAkC;MACpE,MAAMC,OAAkC,GAAG,EAA3C,CAAA;;MACA,QAAQD,MAAM,CAACL,IAAf;AACE,QAAA,KAAK,UAAL;AAAiB,UAAA;YACf,MAAMO,QAAQ,GAAGF,MAAM,CAAChD,IAAP,CAAYmD,MAAZ,CAAmB9B,YAAnB,CAAjB,CAAA;;AACA,YAAA,IAAI6B,QAAQ,CAACE,MAAT,GAAkB,CAAtB,EAAyB;cACvBH,OAAO,CAACI,IAAR,CAAa;AACXV,gBAAAA,IAAI,EAAE,SADK;AAEXjC,gBAAAA,MAAM,EAAE,IAAKS,CAAAA,WAAL,CAAiB+B,QAAQ,CAAC,CAAD,CAAzB,CAAA;eAFV,CAAA,CAAA;AAID,aAAA;;AACD,YAAA,MAAA;AACD,WAAA;;AACD,QAAA,KAAK,SAAL;AAAgB,UAAA;YACd,MAAMA,QAAQ,GAAGF,MAAM,CAACM,IAAP,CAAYH,MAAZ,CAAmB9B,YAAnB,CAAjB,CAAA;;AACA,YAAA,IAAI6B,QAAQ,CAACE,MAAT,GAAkB,CAAtB,EAAyB;cACvBH,OAAO,CAACI,IAAR,CAAa;AACXV,gBAAAA,IAAI,EAAE,SADK;AAEXY,gBAAAA,IAAI,EAAEL,QAAQ,CAAClB,GAAT,CAAcwB,MAAD,IAAYA,MAAM,CAAC,IAAA,CAAK7D,KAAL,CAAW0C,OAAZ,CAA/B,CAAA;eAFR,CAAA,CAAA;AAID,aAAA;;AACD,YAAA,MAAA;AACD,WAAA;;AACD,QAAA,KAAK,SAAL;AAAgB,UAAA;AACd,YAAA,MAAMa,QAAQ,GAAGF,MAAM,CAACC,OAAP,CAAeE,MAAf,CAAsB,CAAC,CAACG,IAAD,EAAOtD,IAAP,CAAD,KACrCqB,YAAY,CAACiC,IAAD,CADG,CAAjB,CAAA;;AAGA,YAAA,IAAIJ,QAAQ,CAACE,MAAT,GAAkB,CAAtB,EAAyB;AACvB,cAAA,IAAI,IAAKlC,CAAAA,OAAL,CAAakB,IAAjB,EAAuB;gBACrB,MAAM;AAAE1B,kBAAAA,MAAAA;AAAF,iBAAA,GAAa,MAAM,IAAKkB,CAAAA,KAAL,CAAYyC,GAAD,IAASA,GAApB,CAAzB,CAAA;gBACApB,OAAO,CAACI,IAAR,CAAa;AACXV,kBAAAA,IAAI,EAAE,SADK;AAEXjC,kBAAAA,MAAAA;iBAFF,CAAA,CAAA;AAID,eAND,MAMO,IAAIwC,QAAQ,CAACE,MAAT,KAAoB,CAAxB,EAA2B;AAChC,gBAAA,MAAM,IAAIzC,KAAJ,CACJ,uEADI,CAAN,CAAA;AAGD,eAJM,MAIA;AACL,gBAAA,MAAM,GAAGX,IAAH,CAAA,GAAWkD,QAAQ,CAAC,CAAD,CAAzB,CAAA;gBACAD,OAAO,CAACI,IAAR,CAAa;AACXV,kBAAAA,IAAI,EAAE,SADK;kBAEXjC,MAAM,EAAEW,YAAY,CAACrB,IAAD,CAAZ,GAAqB,IAAA,CAAKmB,WAAL,CAAiBnB,IAAjB,CAArB,GAA8C,IAAA;iBAFxD,CAAA,CAAA;AAID,eAAA;aAjBH,MAkBO,IAAIkD,QAAQ,CAACE,MAAT,KAAoB,CAAxB,EAA2B,CACjC;;AACD,YAAA,MAAA;AACD,WAAA;;AACD,QAAA;AACE,UAAA,MAAM,IAAIzC,KAAJ,CAAU,kBAAV,CAAN,CAAA;AAhDJ,OAAA;;AAmDA,MAAA,IAAIsC,OAAO,CAACG,MAAR,KAAmB,CAAvB,EAA0B,OAAA;AAE1Bb,MAAAA,QAAQ,CAAC,IAAD,EAAOU,OAAP,CAAR,CAAA;AACD,KAxDmB,CAApB,CAAA;IA0DA,OAAO;AACLc,MAAAA,IAAI,EAAEjB,WADD;AAELkB,MAAAA,MAAM,EAAElB,WAFH;AAGL7C,MAAAA,IAAI,EAAE,CACJ4B,WADI,EAEJoC,UAFI,KAGevB,OAAO,CAACzC,IAAR,CAAa4B,WAAb,EAA0BoC,UAA1B,CAAA;KANvB,CAAA;AAQD,GAAA;;AAE8B,EAAA,MAAjBlC,iBAAiB,GAE7B;AACA,IAAA,MAAMnC,MAAM,GAAG,MAAM,IAAKD,CAAAA,KAAL,CAAWC,MAAX,CACnB,IAAKsB,CAAAA,OAAL,CAAaI,QADM,EAEnB,KAAKJ,OAAL,CAAakB,IAFM,CAArB,CAAA;;AAKA,IAAA,IAAI,IAAKlB,CAAAA,OAAL,CAAaZ,KAAjB,EAAwB;MACtB,MAAMV,MAAM,CAACU,KAAP,CAAa,KAAKY,OAAL,CAAaZ,KAA1B,CAAN,CAAA;AACD,KAAA;;AAED,IAAA,OAAOV,MAAP,CAAA;AACD,GAAA;;AAvJD;;AC1CF;AAuCe,MAAM0E,UAAN,CAWf;AACWjC,EAAAA,OAAO,GAAiB,KAAjB,CAAA;;AAMhB3C,EAAAA,WAAW,CAAC6E,UAAD,EAA8BC,cAA9B,EAAsD;IAC/D,IAAKD,CAAAA,UAAL,GAAkBA,UAAlB,CAAA;;IAEA,IAAI,CAACC,cAAL,EAAqB;AACnB,MAAA,MAAM,IAAI7D,KAAJ,CAAW,CAA2B6D,yBAAAA,EAAAA,cAAe,GAArD,CAAN,CAAA;AACD,KAAA;;IAED,IAAKC,CAAAA,WAAL,GAAmBF,UAAU,CAACG,aAAX,EAA2BzE,CAAAA,IAA3B,CAChB0E,MAAD,IAAyB;MACvB,IAAKF,CAAAA,WAAL,GAAmBE,MAAM,CAACC,EAAP,EAAYC,CAAAA,UAAZ,CAAuBL,cAAvB,CAAnB,CAAA;AACA,MAAA,OAAO,KAAKC,WAAZ,CAAA;KAHe,EAKhBK,GAAD,IAAc;AACZ,MAAA,IAAA,CAAKL,WAAL,GAAmBjE,OAAO,CAACuE,MAAR,CAAeD,GAAf,CAAnB,CAAA;AACA,MAAA,OAAO,KAAKL,WAAZ,CAAA;AACD,KARgB,CAAnB,CAAA;AAUD,GAAA;;AAEa,EAAA,IAAVI,UAAU,GAA+B;AAC3C,IAAA,IAAI,IAAKN,CAAAA,UAAL,CAAgBS,gBAApB,EAAsC;MACpC,OAAOxE,OAAO,CAACuE,MAAR,CAAe,IAAIpE,KAAJ,CAAU,2BAAV,CAAf,CAAP,CAAA;AACD,KAAA;;AAED,IAAA,OAAOH,OAAO,CAACC,OAAR,CAAgB,IAAA,CAAKgE,WAArB,CAAP,CAAA;AACD,GAAA;;AAEDQ,EAAAA,qBAAqB,CAInB/D,OAJmB,EAKnBC,WALmB,EAMoC;IACvD,OAAO,IAAI+C,oBAAJ,CACL,IADK,EAELhD,OAFK,EAGLC,WAHK,CAAP,CAAA;AAKD,GAAA;;AAED+D,EAAAA,qBAAqB,CAInBhE,OAJmB,EAKnBC,WALmB,EAMsC;IACzD,OAAO,IAAIH,oBAAJ,CACL,IADK,EAELE,OAFK,EAGLC,WAHK,CAAP,CAAA;AAKD,GAAA;;EAEc,MAATgE,SAAS,CAAC3B,MAAD,EAAiD;AAC9D,IAAA,IAAI,CAACA,MAAM,CAACnD,GAAZ,EAAiB;MACfmD,MAAM,CAACnD,GAAP,GAAa,IAAI+E,gBAAO,CAACC,QAAZ,EAAuBC,CAAAA,QAAvB,EAAb,CAAA;AACD,KAAA;;IAED,IAAI,CAAC9B,MAAM,CAAC+B,OAAZ,EAAqB/B,MAAM,CAAC+B,OAAP,GAAiB,IAAIC,IAAJ,EAAjB,CAAA;IACrB,IAAI,CAAChC,MAAM,CAACE,OAAZ,EAAqBF,MAAM,CAACE,OAAP,GAAiB,IAAI8B,IAAJ,EAAjB,CAAA;AAErB,IAAA,MAAMX,UAAU,GAAG,MAAM,IAAA,CAAKA,UAA9B,CAAA;IACA,MAAM;AAAEY,MAAAA,YAAY,EAAEC,cAAAA;AAAhB,KAAA,GAAmC,MAAMb,UAAU,CAACM,SAAX;AAE7C3B,IAAAA,MAF6C,CAA/C,CAAA;;IAIA,IAAI,CAACkC,cAAL,EAAqB;AACnB,MAAA,MAAM,IAAI/E,KAAJ,CAAU,gBAAV,CAAN,CAAA;AACD,KAAA;;AAED,IAAA,OAAO6C,MAAP,CAAA;AACD,GAAA;;EAEe,MAAVmC,UAAU,CAACnC,MAAD,EAAgC;IAC9C,IAAI,CAACA,MAAM,CAACE,OAAZ,EAAqBF,MAAM,CAACE,OAAP,GAAiB,IAAI8B,IAAJ,EAAjB,CAAA;AAErB,IAAA,MAAMX,UAAU,GAAG,MAAM,IAAA,CAAKA,UAA9B,CAAA;IACA,MAAMA,UAAU,CAACc,UAAX,CAAsB;MAAEtF,GAAG,EAAEmD,MAAM,CAACnD,GAAAA;KAApC,EAA8DmD,MAA9D,CAAN,CAAA;AACA,IAAA,OAAOA,MAAP,CAAA;AACD,GAAA;;AAEc,EAAA,MAAToC,SAAS,CAMbpC,MANa,EAObqC,wBAPa,EAQG;IAChB,MAAMnF,MAAM,GAAG,MAAM,IAAA,CAAKoF,iBAAL,CACnBtC,MADmB,EAEnBqC,wBAFmB,CAArB,CAAA;IAIA,OAAOnF,MAAM,CAAC8C,MAAd,CAAA;AACD,GAAA;;AAEsB,EAAA,MAAjBsC,iBAAiB,CAMrBtC,MANqB,EAOrBqC,wBAPqB,EAQwB;AAC7C,IAAA,MAAME,YAAY,GAAG;AACnBR,MAAAA,OAAO,EAAE/B,MAAM,CAAC+B,OAAP,IAAkB,IAAIC,IAAJ,EADR;MAEnB,GAAGK,wBAAAA;KAFL,CAAA;;AAKA,IAAA,IAAI,CAACrC,MAAM,CAACE,OAAZ,EAAqB;AAClBF,MAAAA,MAAD,CAA2BE,OAA3B,GAAqC,IAAI8B,IAAJ,EAArC,CAAA;AACD,KAAA;;IAED,MAAMQ,IAA4B,GAAG,EAAE,GAAGxC,MAAAA;KAA1C,CAAA;IACA,OAAOwC,IAAI,CAACT,OAAZ,CAAA;AAEA,IAAA,MAAMV,UAAU,GAAG,MAAM,IAAA,CAAKA,UAA9B,CAAA;IAEA,MAAM;AAAEoB,MAAAA,aAAAA;AAAF,KAAA,GAAoB,MAAMpB,UAAU,CAACqB,SAAX,CAC9B;MAAE7F,GAAG,EAAEmD,MAAM,CAACnD,GAAAA;AAAd,KAD8B,EAE9B;MAAE2F,IAAF;AAAQD,MAAAA,YAAAA;AAAR,KAF8B,EAG9B;AAAEI,MAAAA,MAAM,EAAE,IAAA;AAAV,KAH8B,CAAhC,CAAA;;AAMA,IAAA,IAAIF,aAAJ,EAAmB;AACjBG,MAAAA,MAAM,CAACC,MAAP,CAAc7C,MAAd,EAAsBuC,YAAtB,CAAA,CAAA;AACD,KAAA;;IAED,OAAO;AAAEvC,MAAAA,MAAM,EAAEA,MAAV;MAAsCG,QAAQ,EAAE,CAAC,CAACsC,aAAAA;KAAzD,CAAA;AACD,GAAA;;EAEDK,cAAc,CAACC,OAAD,EAAqC;AACjD,IAAA,OAAO/F,OAAO,CAACsB,GAAR,CAAYyE,OAAO,CAACvE,GAAR,CAAawB,MAAD,IAAmB,KAAKmC,UAAL,CAAgBnC,MAAhB,CAA/B,CAAZ,CAAP,CAAA;AACD,GAAA;;AAEuB,EAAA,MAAlBgD,kBAAkB,CACtBpG,GADsB,EAEtBqG,aAFsB,EAGtBnF,QAHsB,EAIN;AAChB,IAAA,MAAMuD,UAAU,GAAG,MAAM,IAAA,CAAKA,UAA9B,CAAA;AACA,IAAA,MAAM6B,aAAa,GAAG,MAAM7B,UAAU,CAACqB,SAAX,CAC1B;AAAE7F,MAAAA,GAAG,EAAED,GAAP;MAAY,GAAGkB,QAAAA;KADW,EAE1BmF,aAF0B,CAA5B,CAAA;;AAIA,IAAA,IAAI,CAACC,aAAa,CAACjB,YAAnB,EAAiC;MAC/BkB,OAAO,CAACC,KAAR,CAAcF,aAAd,CAAA,CAAA;AACA,MAAA,MAAM,IAAI/F,KAAJ,CAAU,eAAV,CAAN,CAAA;AACD,KAAA;;AACD,IAAA,MAAM6C,MAAM,GAAG,MAAM,KAAKqD,SAAL,CAAezG,GAAf,CAArB,CAAA;AACA,IAAA,OAAOoD,MAAP,CAAA;AACD,GAAA;;AAEDsD,EAAAA,gBAAgB,CACdtD,MADc,EAEdiD,aAFc,EAGE;IAChB,OAAO,IAAA,CAAKD,kBAAL,CAAwBhD,MAAM,CAACnD,GAA/B,EAAoCoG,aAApC,CAAP,CAAA;AACD,GAAA;;AAEDM,EAAAA,iBAAiB,CACfzF,QADe,EAEfmF,aAFe,EAGA;AACf,IAAA,OAAO,KAAK5B,UAAL,CACJ5E,IADI,CACE4E,UAAD;AAEJA,IAAAA,UAAU,CAACmC,UAAX,CAAsB1F,QAAtB,EAAgCmF,aAAhC,CAHG,CAKJxG,CAAAA,IALI,CAKC,MAASgH,SALV,CAAP,CADe;AAOhB,GAAA;;AAEDC,EAAAA,WAAW,CAAC9G,GAAD,EAAgBkB,QAAhB,EAA2D;IACpE,OAAO,IAAA,CAAKuD,UAAL,CACJ5E,IADI,CACE4E,UAAD,IACJA,UAAU,CAACsC,SAAX,CAAqB;AAAE9G,MAAAA,GAAG,EAAED,GAAP;MAAY,GAAGkB,QAAAA;AAAf,KAArB,CAFG,CAIJrB,CAAAA,IAJI,CAIC,MAAMgH,SAJP,CAAP,CAAA;AAKD,GAAA;;EAEDE,SAAS,CAAC3D,MAAD,EAA+B;AACtC,IAAA,OAAO,KAAK0D,WAAL,CAAiB1D,MAAM,CAACnD,GAAxB,CAAP,CAAA;AACD,GAAA;;EAED+G,UAAU,CAACC,QAAD,EAA2C;AACnD,IAAA,OAAO,KAAKxC,UAAL,CACJ5E,IADI,CACE4E,UAAD,IAAgBA,UAAU,CAACuC,UAAX,CAAsBC,QAAtB,CADjB,CAAA,CAEJpH,IAFI,CAEC,MAAMgH,SAFP,CAAP,CAAA;AAGD,GAAA;;EAEU,MAALnH,KAAK,CAACqD,MAAD,EAA4C;AACrD,IAAA,MAAM0B,UAAU,GAAG,MAAM,IAAA,CAAKA,UAA9B,CAAA;AACA,IAAA,OAAO1B,MAAM,GACT0B,UAAU,CAACyC,cAAX,CAA0BnE,MAA1B,CADS,GAET0B,UAAU,CAACyC,cAAX,EAFJ,CAAA;AAGD,GAAA;;AAEW,EAAA,MAAN1H,MAAM,CACVuD,MADU,EAEVf,IAFU,EAGqC;AAC/C,IAAA,MAAMyC,UAAU,GAAG,MAAM,IAAA,CAAKA,UAA9B,CAAA;AACA,IAAA,MAAM0C,UAAU,GAAGpE,MAAM,GACrB0B,UAAU,CAAC2C,IAAX,CAAwBrE,MAAxB,CADqB,GAEpB0B,UAAU,CAAC2C,IAAX,EAFL,CAAA;AAGA,IAAA,IAAIpF,IAAJ,EAAUmF,UAAU,CAACnF,IAAX,CAAgBA,IAAhB,CAAA,CAAA;AACV,IAAA,OAAO,IAAI5C,WAAJ,CAAyC,IAAzC,EAA+C+H,UAA/C,CAAP,CAAA;AACD,GAAA;;AAEc,EAAA,MAATV,SAAS,CACbzG,GADa,EAEbkB,QAFa,EAGe;AAC5B,IAAA,MAAMuD,UAAU,GAAG,MAAM,IAAA,CAAKA,UAA9B,CAAA;AACA,IAAA,MAAMnE,MAAM,GAAG,MAAMmE,UAAU,CAAC4C,OAAX,CAA0B;AAC7CpH,MAAAA,GAAG,EAAED,GADwC;MAE7C,GAAGkB,QAAAA;AAF0C,KAA1B,CAArB,CAAA;IAIA,OAAOZ,MAAM,IAAIuG,SAAjB,CAAA;AACD,GAAA;;AAEDS,EAAAA,OAAO,CAACpG,QAAD,EAA6Bc,IAA7B,EAAmE;AACxE,IAAA,OAAO,IAAKxC,CAAAA,MAAL,CAAmB0B,QAAnB,EAA6Bc,IAA7B,CAAA,CAAmCnC,IAAnC,CAAyCL,MAAD,IAC7CA,MAAM,CAACiB,OAAP,EADK,CAAP,CAAA;AAGD,GAAA;;AAEY,EAAA,MAAP4G,OAAO,CACXtE,MADW,EAEXf,IAFW,EAGiB;AAC5B,IAAA,MAAMyC,UAAU,GAAG,MAAM,IAAA,CAAKA,UAA9B,CAAA;IACA,MAAMnE,MAAM,GAAG,MAAMmE,UAAU,CAAC4C,OAAX,CAA0BtE,MAA1B,EAAkC;AACrDf,MAAAA,IAAAA;AADqD,KAAlC,CAArB,CAAA;IAGA,OAAO1B,MAAM,IAAIuG,SAAjB,CAAA;AACD,GAAA;;AAvPH;;AC9CA,MAAMU,MAAM,GAAG,IAAIC,wBAAJ,CAAW,4BAAX,CAAf,CAAA;AAEe,MAAMC,eAAN,SAA8BC,4BAA9B,CAAiD;AAO9D;EACApI,WAAW,CAACqI,MAAD,EAAuC;AAChD,IAAA,KAAA,EAAA,CAAA;;AAEA,IAAA,IAAI,CAACA,MAAM,CAACC,GAAP,CAAW,MAAX,CAAL,EAAyB;AACvBD,MAAAA,MAAM,CAACE,GAAP,CAAW,MAAX,EAAmB,WAAnB,CAAA,CAAA;AACD,KAAA;;AACD,IAAA,IAAI,CAACF,MAAM,CAACC,GAAP,CAAW,MAAX,CAAL,EAAyB;AACvBD,MAAAA,MAAM,CAACE,GAAP,CAAW,MAAX,EAAmB,OAAnB,CAAA,CAAA;AACD,KAAA;;AACD,IAAA,IAAI,CAACF,MAAM,CAACC,GAAP,CAAW,UAAX,CAAL,EAA6B;AAC3B,MAAA,MAAM,IAAIrH,KAAJ,CAAU,yBAAV,CAAN,CAAA;AACD,KAAA;;AAED,IAAA,MAAMuH,qBAAqB,GAAIC,iBAAD,IAC3B,aACCJ,MAAM,CAACC,GAAP,CAAW,MAAX,CACK,GAAA,CAAA,EACCG,iBAAiB,GACZ,GAAGJ,MAAM,CAACK,GAAP,CAAW,MAAX,CAAD,CAA+BC,KAA/B,CAAqC,CAArC,EAAwC,CAAxC,CAA2C,YADjC,GAEZN,MAAM,CAACK,GAAP,CAAW,MAAX,CACN,CACCD,CAAAA,EAAAA,iBAAiB,GACb,YADa,GAEZJ,MAAM,CAACK,GAAP,CAAW,UAAX,CACN,GATL,GAUI,EACL,CAZD,CAAA,GAaC,GAAEL,MAAM,CAACK,GAAP,CAAW,MAAX,CAA6B,CAAA,CAAA,EAAGL,MAAM,CAACK,GAAP,CAAW,MAAX,CAA6B,CAAA,CAAA,EAC9DL,MAAM,CAACK,GAAP,CAAW,UAAX,CACD,CAhBH,CAAA,CAAA;;AAkBA,IAAA,MAAME,gBAAgB,GAAGJ,qBAAqB,CAAC,KAAD,CAA9C,CAAA;AACA,IAAA,MAAMK,wBAAwB,GAAGL,qBAAqB,CAAC,IAAD,CAAtD,CAAA;AAEA,IAAA,IAAA,CAAKM,OAAL,CAAaF,gBAAb,EAA+BC,wBAA/B,CAAA,CAAA;AACD,GAAA;;AAEDC,EAAAA,OAAO,CAACF,gBAAD,EAA2BC,wBAA3B,EAAmE;AACxEZ,IAAAA,MAAM,CAACxF,IAAP,CAAY,YAAZ,EAA0B;AAAEoG,MAAAA,wBAAAA;KAA5B,CAAA,CAAA;AAEA,IAAA,MAAME,cAAc,GAAGrD,gBAAO,CAACsD,WAAR,CAAoBF,OAApB,CAA4BF,gBAA5B,CAAA,CACpBrI,IADoB,CACdsE,UAAD,IAAgB;AACpBoD,MAAAA,MAAM,CAACxF,IAAP,CAAY,WAAZ,EAAyB;AAAEoG,QAAAA,wBAAAA;OAA3B,CAAA,CAAA;AACAhE,MAAAA,UAAU,CAACoE,EAAX,CAAc,OAAd,EAAuB,MAAM;AAC3BhB,QAAAA,MAAM,CAACiB,IAAP,CAAY,OAAZ,EAAqB;AAAEL,UAAAA,wBAAAA;SAAvB,CAAA,CAAA;QACA,IAAKvD,CAAAA,gBAAL,GAAwB,IAAxB,CAAA;;QACA,IAAKN,CAAAA,aAAL,GAAqB,MAAM;AACzB,UAAA,MAAM,IAAI/D,KAAJ,CAAU,2BAAV,CAAN,CAAA;SADF,CAAA;OAHF,CAAA,CAAA;AAOA4D,MAAAA,UAAU,CAACoE,EAAX,CAAc,SAAd,EAAyB,MAAM;AAC7BhB,QAAAA,MAAM,CAACiB,IAAP,CAAY,SAAZ,EAAuB;AAAEL,UAAAA,wBAAAA;SAAzB,CAAA,CAAA;QACA,IAAKvD,CAAAA,gBAAL,GAAwB,IAAxB,CAAA;;QACA,IAAKN,CAAAA,aAAL,GAAqB,MAAM;AACzB,UAAA,MAAM,IAAI/D,KAAJ,CAAU,4BAAV,CAAN,CAAA;SADF,CAAA;OAHF,CAAA,CAAA;AAOA4D,MAAAA,UAAU,CAACoE,EAAX,CAAc,WAAd,EAA2B,MAAM;AAC/BhB,QAAAA,MAAM,CAACiB,IAAP,CAAY,WAAZ,EAAyB;AAAEL,UAAAA,wBAAAA;SAA3B,CAAA,CAAA;QACA,IAAKvD,CAAAA,gBAAL,GAAwB,KAAxB,CAAA;;QACA,IAAKN,CAAAA,aAAL,GAAqB,MAAMlE,OAAO,CAACC,OAAR,CAAgB,IAAKoI,CAAAA,WAArB,CAA3B,CAAA;OAHF,CAAA,CAAA;AAKAtE,MAAAA,UAAU,CAACoE,EAAX,CAAc,OAAd,EAAwB7D,GAAD,IAAS;AAC9B6C,QAAAA,MAAM,CAACiB,IAAP,CAAY,OAAZ,EAAqB;UAAEL,wBAAF;AAA4BzD,UAAAA,GAAAA;SAAjD,CAAA,CAAA;OADF,CAAA,CAAA;MAIA,IAAK+D,CAAAA,WAAL,GAAmBtE,UAAnB,CAAA;MACA,IAAKuE,CAAAA,WAAL,GAAmB7B,SAAnB,CAAA;;MACA,IAAKvC,CAAAA,aAAL,GAAqB,MAAMlE,OAAO,CAACC,OAAR,CAAgB,IAAKoI,CAAAA,WAArB,CAA3B,CAAA;;AACA,MAAA,OAAOtE,UAAP,CAAA;AACD,KA9BoB,CA+BpBwE,CAAAA,KA/BoB,CA+BbjE,GAAD,IAAS;AACd6C,MAAAA,MAAM,CAACxF,IAAP,CAAY,eAAZ,EAA6B;AAAEoG,QAAAA,wBAAAA;OAA/B,CAAA,CAAA;MACA5B,OAAO,CAACC,KAAR,CAAc9B,GAAG,CAACkE,OAAJ,IAAelE,GAA7B,CAAA,CAFc;;MAIdmE,OAAO,CAACC,QAAR,CAAiB,MAAM;AACrB;QACAD,OAAO,CAACE,IAAR,CAAa,CAAb,CAAA,CAAA;OAFF,CAAA,CAAA;AAKA,MAAA,MAAMrE,GAAN,CAAA;AACD,KAzCoB,CAAvB,CAAA;;IA2CA,IAAKJ,CAAAA,aAAL,GAAqB,MAAMlE,OAAO,CAACC,OAAR,CAAgBgI,cAAhB,CAA3B,CAAA;;AACA,IAAA,IAAA,CAAKK,WAAL,GAAmB,IAAKpE,CAAAA,aAAL,EAAnB,CAAA;AACD,GAAA;;AAEDA,EAAAA,aAAa,GAAiC;AAC5C,IAAA,MAAM,IAAI/D,KAAJ,CAAU,gBAAV,CAAN,CAAA;AACD,GAAA;;AAEU,EAAA,MAALC,KAAK,GAAkB;AAC3B,IAAA,IAAA,CAAK8D,aAAL,GAAqB,MAAMlE,OAAO,CAACuE,MAAR,CAAe,IAAIpE,KAAJ,CAAU,mBAAV,CAAf,CAA3B,CAAA;;IACA,IAAI,IAAA,CAAKkI,WAAT,EAAsB;AACpB,MAAA,MAAM,IAAKA,CAAAA,WAAL,CAAiBjI,KAAjB,EAAN,CAAA;MACA,IAAKiI,CAAAA,WAAL,GAAmB5B,SAAnB,CAAA;AACD,KAHD,MAGO,IAAI,IAAK6B,CAAAA,WAAT,EAAsB;AAC3B,MAAA,MAAM,KAAKA,WAAX,CAAA;MACA,MAAM,IAAA,CAAKlI,KAAL,EAAN,CAAA;AACD,KAAA;AACF,GAAA;;AA5G6D;;ACIjD,SAASwI,yBAAT,CAIbC,UAJa,EAYb;AACA,EAAA,OAAO,IAAIC,iCAAJ,CAAmBD,UAAnB,CAAP,CAAA;AACD;;;;;;"}
|
package/dist/index-node14.mjs
CHANGED
|
@@ -573,21 +573,24 @@ class MongoConnection extends AbstractConnection {
|
|
|
573
573
|
throw new Error('Missing config database');
|
|
574
574
|
}
|
|
575
575
|
|
|
576
|
-
const
|
|
577
|
-
|
|
576
|
+
const buildConnectionString = redactCredentials => `mongodb://${config.has('user') ? `${redactCredentials ? `${config.get('user').slice(0, 2)}[redacted]` : config.get('user')}:${redactCredentials ? '[redacted]' : config.get('password')}@` : ''}` + `${config.get('host')}:${config.get('port')}/${config.get('database')}`;
|
|
577
|
+
|
|
578
|
+
const connectionString = buildConnectionString(false);
|
|
579
|
+
const connectionStringRedacted = buildConnectionString(true);
|
|
580
|
+
this.connect(connectionString, connectionStringRedacted);
|
|
578
581
|
}
|
|
579
582
|
|
|
580
|
-
connect(connectionString) {
|
|
583
|
+
connect(connectionString, connectionStringRedacted) {
|
|
581
584
|
logger.info('connecting', {
|
|
582
|
-
|
|
585
|
+
connectionStringRedacted
|
|
583
586
|
});
|
|
584
587
|
const connectPromise = mongodb.MongoClient.connect(connectionString).then(connection => {
|
|
585
588
|
logger.info('connected', {
|
|
586
|
-
|
|
589
|
+
connectionStringRedacted
|
|
587
590
|
});
|
|
588
591
|
connection.on('close', () => {
|
|
589
592
|
logger.warn('close', {
|
|
590
|
-
|
|
593
|
+
connectionStringRedacted
|
|
591
594
|
});
|
|
592
595
|
this.connectionFailed = true;
|
|
593
596
|
|
|
@@ -597,7 +600,7 @@ class MongoConnection extends AbstractConnection {
|
|
|
597
600
|
});
|
|
598
601
|
connection.on('timeout', () => {
|
|
599
602
|
logger.warn('timeout', {
|
|
600
|
-
|
|
603
|
+
connectionStringRedacted
|
|
601
604
|
});
|
|
602
605
|
this.connectionFailed = true;
|
|
603
606
|
|
|
@@ -607,7 +610,7 @@ class MongoConnection extends AbstractConnection {
|
|
|
607
610
|
});
|
|
608
611
|
connection.on('reconnect', () => {
|
|
609
612
|
logger.warn('reconnect', {
|
|
610
|
-
|
|
613
|
+
connectionStringRedacted
|
|
611
614
|
});
|
|
612
615
|
this.connectionFailed = false;
|
|
613
616
|
|
|
@@ -615,7 +618,7 @@ class MongoConnection extends AbstractConnection {
|
|
|
615
618
|
});
|
|
616
619
|
connection.on('error', err => {
|
|
617
620
|
logger.warn('error', {
|
|
618
|
-
|
|
621
|
+
connectionStringRedacted,
|
|
619
622
|
err
|
|
620
623
|
});
|
|
621
624
|
});
|
|
@@ -627,7 +630,7 @@ class MongoConnection extends AbstractConnection {
|
|
|
627
630
|
return connection;
|
|
628
631
|
}).catch(err => {
|
|
629
632
|
logger.info('not connected', {
|
|
630
|
-
|
|
633
|
+
connectionStringRedacted
|
|
631
634
|
});
|
|
632
635
|
console.error(err.message || err); // throw err;
|
|
633
636
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-node14.mjs","sources":["../src/MongoCursor.ts","../src/MongoQueryCollection.ts","../src/MongoQuerySingleItem.ts","../src/MongoStore.ts","../src/MongoConnection.ts","../src/createMongoSubscribeStore.ts"],"sourcesContent":["import { AbstractStoreCursor } from 'liwi-store';\nimport type { AllowedKeyValue } from 'liwi-types';\nimport type { FindCursor } from 'mongodb';\nimport type { MongoBaseModel } from './MongoBaseModel';\nimport type MongoStore from './MongoStore';\n\nexport default class MongoCursor<\n Model extends MongoBaseModel<KeyValue>,\n Result extends Partial<Model> = Model,\n KeyValue extends AllowedKeyValue = Model['_id'],\n> extends AbstractStoreCursor<\n MongoStore<Model, KeyValue>,\n KeyValue,\n Model,\n Result\n> {\n // key in AbstractCursor\n\n private readonly cursor: FindCursor<Result>;\n\n private _result?: Result | null;\n\n constructor(store: MongoStore<Model, KeyValue>, cursor: FindCursor<Result>) {\n super(store);\n this.cursor = cursor;\n }\n\n advance(count: number): void {\n this.cursor.skip(count);\n }\n\n next(): Promise<KeyValue | undefined> {\n return this.cursor.next().then((value) => {\n this._result = value;\n this.key = value?._id;\n return this.key;\n });\n }\n\n limit(newLimit: number): Promise<this> {\n this.cursor.limit(newLimit);\n return Promise.resolve(this);\n }\n\n result(): Promise<Result> {\n if (!this._result) throw new Error('Cannot call result() before next()');\n return Promise.resolve(this._result);\n }\n\n close(): Promise<void> {\n if (this.cursor) {\n this.cursor.close();\n }\n\n return Promise.resolve();\n }\n\n toArray(): Promise<Result[]> {\n return this.cursor.toArray();\n }\n}\n","/* eslint-disable complexity, max-lines */\nimport type {\n QuerySubscription,\n SubscribeCallback,\n QueryResult,\n QueryParams,\n} from 'liwi-store';\nimport type { Actions } from 'liwi-subscribe-store';\nimport { AbstractSubscribableStoreQuery } from 'liwi-subscribe-store';\nimport type {\n Changes,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n} from 'liwi-types';\nimport mingo from 'mingo';\nimport type {\n MongoBaseModel,\n MongoInsertType,\n MongoKeyPath,\n} from './MongoBaseModel';\nimport type MongoCursor from './MongoCursor';\nimport type MongoStore from './MongoStore';\n\nconst identityTransformer = <\n Model extends MongoBaseModel<any>,\n Transformed = Model,\n>(\n model: Model,\n): Transformed => model as unknown as Transformed;\n\ntype TestCriteria = (obj: any) => boolean;\n\nexport default class MongoQueryCollection<\n Model extends MongoBaseModel<KeyValue>,\n Params extends QueryParams<Params> = never,\n KeyValue extends AllowedKeyValue = Model['_id'],\n Item extends Record<MongoKeyPath, KeyValue> = Model,\n> extends AbstractSubscribableStoreQuery<\n MongoKeyPath,\n KeyValue,\n Model,\n MongoInsertType<Model, KeyValue>,\n Params,\n Item[]\n> {\n private readonly store: MongoStore<Model, KeyValue>;\n\n private readonly options: QueryOptions<Model>;\n\n private testCriteria?: TestCriteria;\n\n private readonly transformer: Transformer<Model, Item>;\n\n constructor(\n store: MongoStore<Model, KeyValue>,\n options: QueryOptions<Model>,\n transformer: Transformer<Model, Item> = identityTransformer,\n ) {\n super();\n this.store = store;\n this.options = options;\n this.transformer = transformer;\n }\n\n createTestCriteria(): TestCriteria {\n if (!this.testCriteria) {\n if (!this.options.criteria) {\n return () => true;\n }\n\n const mingoQuery = new mingo.Query(this.options.criteria);\n this.testCriteria = mingoQuery.test.bind(mingoQuery);\n }\n return this.testCriteria;\n }\n\n async fetch<T>(onFulfilled: (result: QueryResult<Item[]>) => T): Promise<T> {\n const [result, count] = await Promise.all([\n this.createMongoCursor().then((cursor) => cursor.toArray()),\n this.store.count(),\n ]);\n\n return onFulfilled({\n result: result.map(this.transformer),\n meta: { total: count },\n info: {\n sort: this.options.sort,\n limit: this.options.limit,\n keyPath: this.store.keyPath,\n },\n });\n }\n\n _subscribe(\n callback: SubscribeCallback<KeyValue, Item[]>,\n _includeInitial: boolean,\n ): QuerySubscription {\n const store = super.getSubscribeStore();\n const testCriteria: TestCriteria = this.createTestCriteria();\n\n const promise: Promise<void> = _includeInitial\n ? this.fetch(({ result, meta, info }: QueryResult<Item[]>) => {\n callback(null, [\n {\n type: 'initial',\n initial: result,\n queryInfo: info,\n meta,\n },\n ]);\n })\n : Promise.resolve();\n\n const unsubscribe = store.subscribe((action: Actions<Model>) => {\n const changes: Changes<KeyValue, Item[]> = [];\n switch (action.type) {\n case 'inserted': {\n const filtered = action.next.filter(testCriteria);\n if (filtered.length > 0) {\n changes.push({\n type: 'inserted',\n result: filtered.map(this.transformer),\n });\n }\n break;\n }\n case 'deleted': {\n const filtered = action.prev.filter(testCriteria);\n if (filtered.length > 0) {\n changes.push({\n type: 'deleted',\n keys: filtered.map((object) => object[this.store.keyPath]),\n });\n }\n break;\n }\n case 'updated': {\n const {\n deleted,\n updated,\n inserted,\n }: {\n deleted: KeyValue[];\n updated: Item[];\n inserted: Item[];\n } = { deleted: [], updated: [], inserted: [] };\n\n action.changes.forEach(([prevObject, nextObject]: [Model, Model]) => {\n if (testCriteria(prevObject)) {\n if (!testCriteria(nextObject)) {\n deleted.push(prevObject[this.store.keyPath]);\n } else {\n updated.push(this.transformer(nextObject));\n }\n } else if (testCriteria(nextObject)) {\n inserted.push(this.transformer(nextObject));\n }\n });\n\n if (deleted.length > 0) {\n changes.push({ type: 'deleted', keys: deleted });\n }\n if (updated.length > 0) {\n changes.push({ type: 'updated', result: updated });\n }\n if (inserted.length > 0) {\n changes.push({ type: 'inserted', result: inserted });\n }\n\n break;\n }\n default:\n throw new Error('Unsupported type');\n }\n\n if (changes.length === 0) return;\n\n callback(null, changes);\n });\n // let _feed;\n // const promise = this.queryCallback(this.store.query(), this.store.r)\n // .changes({\n // includeInitial: _includeInitial,\n // includeStates: true,\n // includeTypes: true,\n // includeOffsets: true,\n // })\n // .then((feed) => {\n // if (args.length === 0) {\n // _feed = feed;\n // delete this._promise;\n // }\n //\n // feed.each(callback);\n // return feed;\n // });\n //\n // if (args.length === 0) this._promise = promise;\n\n return {\n stop: unsubscribe,\n cancel: unsubscribe,\n then: <T, U>(\n onFulfilled: () => T | Promise<T>,\n onRejected?: (error: any) => U | Promise<U>,\n ): Promise<T | U> => promise.then(onFulfilled, onRejected),\n };\n }\n\n private async createMongoCursor(): Promise<\n MongoCursor<Model, Model, KeyValue>\n > {\n const cursor = await this.store.cursor(\n this.options.criteria,\n this.options.sort,\n );\n\n if (this.options.skip) {\n cursor.advance(this.options.skip);\n }\n\n if (this.options.limit) {\n await cursor.limit(this.options.limit);\n }\n\n return cursor;\n }\n}\n","import type {\n QuerySubscription,\n SubscribeCallback,\n QueryResult,\n QueryParams,\n} from 'liwi-store';\nimport type { Actions } from 'liwi-subscribe-store';\nimport { AbstractSubscribableStoreQuery } from 'liwi-subscribe-store';\nimport type {\n Changes,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n} from 'liwi-types';\nimport mingo from 'mingo';\nimport type {\n MongoBaseModel,\n MongoInsertType,\n MongoKeyPath,\n} from './MongoBaseModel';\nimport type MongoCursor from './MongoCursor';\nimport type MongoStore from './MongoStore';\n\nconst identityTransformer = <\n Model extends MongoBaseModel<any>,\n Transformed = Model,\n>(\n model: Model,\n): Transformed => model as unknown as Transformed;\n\ntype TestCriteria = (obj: any) => boolean;\n\nexport default class MongoQuerySingleItem<\n Model extends MongoBaseModel<KeyValue>,\n Params extends QueryParams<Params> = never,\n Result extends Record<MongoKeyPath, KeyValue> | null = Model | null,\n KeyValue extends AllowedKeyValue = Model['_id'],\n> extends AbstractSubscribableStoreQuery<\n MongoKeyPath,\n KeyValue,\n Model,\n MongoInsertType<Model, KeyValue>,\n Params,\n Result\n> {\n private readonly store: MongoStore<Model, KeyValue>;\n\n private readonly options: QueryOptions<Model>;\n\n private testCriteria?: TestCriteria;\n\n private readonly transformer: Transformer<Model, Result>;\n\n constructor(\n store: MongoStore<Model, KeyValue>,\n options: QueryOptions<Model>,\n transformer: Transformer<Model, Result> = identityTransformer,\n ) {\n super();\n this.store = store;\n this.options = options;\n this.transformer = transformer;\n }\n\n createMingoTestCriteria(): TestCriteria {\n if (!this.testCriteria) {\n if (!this.options.criteria) {\n return () => true;\n }\n\n const mingoQuery = new mingo.Query(this.options.criteria);\n this.testCriteria = mingoQuery.test.bind(mingoQuery);\n }\n\n return this.testCriteria;\n }\n\n async fetch<T>(onFulfilled: (result: QueryResult<Result>) => T): Promise<T> {\n const cursor = await this.createMongoCursor();\n await cursor.limit(1);\n return cursor.toArray().then((result: Model[]) => {\n const item: Result =\n result.length === 0 ? (null as Result) : this.transformer(result[0]);\n return onFulfilled({\n result: item,\n meta: { total: result === null ? 0 : 1 },\n info: {\n limit: 1,\n keyPath: this.store.keyPath,\n },\n });\n });\n }\n\n _subscribe(\n callback: SubscribeCallback<KeyValue, Result>,\n _includeInitial: boolean,\n ): QuerySubscription {\n const store = super.getSubscribeStore();\n const testCriteria: TestCriteria = this.createMingoTestCriteria();\n\n const promise: Promise<void> = _includeInitial\n ? this.fetch(({ result, meta, info }: QueryResult<Result>) => {\n callback(null, [\n {\n type: 'initial',\n initial: result,\n queryInfo: info,\n meta,\n },\n ]);\n })\n : Promise.resolve();\n\n const unsubscribe = store.subscribe(async (action: Actions<Model>) => {\n const changes: Changes<KeyValue, Result> = [];\n switch (action.type) {\n case 'inserted': {\n const filtered = action.next.filter(testCriteria);\n if (filtered.length > 0) {\n changes.push({\n type: 'updated',\n result: this.transformer(filtered[0]),\n });\n }\n break;\n }\n case 'deleted': {\n const filtered = action.prev.filter(testCriteria);\n if (filtered.length > 0) {\n changes.push({\n type: 'deleted',\n keys: filtered.map((object) => object[this.store.keyPath]),\n });\n }\n break;\n }\n case 'updated': {\n const filtered = action.changes.filter(([prev, next]) =>\n testCriteria(prev),\n );\n if (filtered.length > 0) {\n if (this.options.sort) {\n const { result } = await this.fetch((res) => res);\n changes.push({\n type: 'updated',\n result,\n });\n } else if (filtered.length !== 1) {\n throw new Error(\n 'should not match more than 1, use sort if you can have multiple match',\n );\n } else {\n const [, next] = filtered[0];\n changes.push({\n type: 'updated',\n result: testCriteria(next) ? this.transformer(next) : null!,\n });\n }\n } else if (filtered.length === 0) {\n }\n break;\n }\n default:\n throw new Error('Unsupported type');\n }\n\n if (changes.length === 0) return;\n\n callback(null, changes);\n });\n\n return {\n stop: unsubscribe,\n cancel: unsubscribe,\n then: <T, U>(\n onFulfilled: () => T | Promise<T>,\n onRejected?: (error: any) => U | Promise<U>,\n ): Promise<T | U> => promise.then(onFulfilled, onRejected),\n };\n }\n\n private async createMongoCursor(): Promise<\n MongoCursor<Model, Model, KeyValue>\n > {\n const cursor = await this.store.cursor(\n this.options.criteria,\n this.options.sort,\n );\n\n if (this.options.limit) {\n await cursor.limit(this.options.limit);\n }\n\n return cursor;\n }\n}\n","/* eslint-disable max-lines */\nimport type {\n UpsertResult,\n SubscribableStore,\n QueryParams,\n UpsertPartialObject,\n} from 'liwi-store';\nimport type {\n Criteria,\n Sort,\n Update,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n OptionalBaseModelKeysForInsert,\n} from 'liwi-types';\nimport type {\n Collection,\n FindCursor,\n MongoClient,\n UpdateFilter,\n} from 'mongodb';\nimport mongodb from 'mongodb';\nimport type {\n MongoBaseModel,\n MongoKeyPath,\n MongoInsertType,\n} from './MongoBaseModel';\nimport type MongoConnection from './MongoConnection';\nimport MongoCursor from './MongoCursor';\nimport MongoQueryCollection from './MongoQueryCollection';\nimport MongoQuerySingleItem from './MongoQuerySingleItem';\n\nexport interface MongoUpsertResult<\n KeyValue extends AllowedKeyValue,\n Model extends MongoBaseModel<KeyValue>,\n> extends UpsertResult<Model> {\n object: Model;\n inserted: boolean;\n}\n\nexport default class MongoStore<\n Model extends MongoBaseModel<KeyValue>,\n KeyValue extends AllowedKeyValue = Model[MongoKeyPath],\n> implements\n SubscribableStore<\n MongoKeyPath,\n KeyValue,\n Model,\n MongoInsertType<Model>,\n MongoConnection\n >\n{\n readonly keyPath: MongoKeyPath = '_id';\n\n readonly connection: MongoConnection;\n\n private _collection: Collection<Model> | Promise<Collection<Model>>;\n\n constructor(connection: MongoConnection, collectionName: string) {\n this.connection = connection;\n\n if (!collectionName) {\n throw new Error(`Invalid collectionName: \"${collectionName}\"`);\n }\n\n this._collection = connection.getConnection().then(\n (client: MongoClient) => {\n this._collection = client.db().collection(collectionName);\n return this._collection;\n },\n (err: any) => {\n this._collection = Promise.reject(err);\n return this._collection;\n },\n );\n }\n\n get collection(): Promise<Collection<Model>> {\n if (this.connection.connectionFailed) {\n return Promise.reject(new Error('MongoDB connection failed'));\n }\n\n return Promise.resolve(this._collection);\n }\n\n createQuerySingleItem<\n Result extends Record<MongoKeyPath, KeyValue> = Model,\n Params extends QueryParams<Params> = never,\n >(\n options: QueryOptions<Model>,\n transformer?: Transformer<Model, Result>,\n ): MongoQuerySingleItem<Model, Params, Result, KeyValue> {\n return new MongoQuerySingleItem<Model, Params, Result, KeyValue>(\n this,\n options,\n transformer,\n );\n }\n\n createQueryCollection<\n Item extends Record<MongoKeyPath, KeyValue> = Model,\n Params extends QueryParams<Params> = never,\n >(\n options: QueryOptions<Model>,\n transformer?: Transformer<Model, Item>,\n ): MongoQueryCollection<Model, Params, Model['_id'], Item> {\n return new MongoQueryCollection<Model, Params, KeyValue, Item>(\n this,\n options,\n transformer,\n );\n }\n\n async insertOne(object: MongoInsertType<Model>): Promise<Model> {\n if (!object._id) {\n object._id = new mongodb.ObjectId().toString() as Model['_id'];\n }\n\n if (!object.created) object.created = new Date();\n if (!object.updated) object.updated = new Date();\n\n const collection = await this.collection;\n const { acknowledged: isAcknowledged } = await collection.insertOne(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n object as any,\n );\n if (!isAcknowledged) {\n throw new Error('Fail to insert');\n }\n\n return object as Model;\n }\n\n async replaceOne(object: Model): Promise<Model> {\n if (!object.updated) object.updated = new Date();\n\n const collection = await this.collection;\n await collection.replaceOne({ _id: object._id } as Criteria<Model>, object);\n return object;\n }\n\n async upsertOne<\n K extends Exclude<\n keyof Model,\n MongoKeyPath | OptionalBaseModelKeysForInsert\n >,\n >(\n object: UpsertPartialObject<MongoKeyPath, KeyValue, Model, K>,\n setOnInsertPartialObject?: Update<Model>['$setOnInsert'],\n ): Promise<Model> {\n const result = await this.upsertOneWithInfo(\n object,\n setOnInsertPartialObject,\n );\n return result.object;\n }\n\n async upsertOneWithInfo<\n K extends Exclude<\n keyof Model,\n MongoKeyPath | OptionalBaseModelKeysForInsert\n >,\n >(\n object: UpsertPartialObject<MongoKeyPath, KeyValue, Model, K>,\n setOnInsertPartialObject?: Update<Model>['$setOnInsert'],\n ): Promise<MongoUpsertResult<KeyValue, Model>> {\n const $setOnInsert = {\n created: object.created || new Date(),\n ...setOnInsertPartialObject,\n };\n\n if (!object.updated) {\n (object as MongoBaseModel).updated = new Date();\n }\n\n const $set: Partial<typeof object> = { ...object };\n delete $set.created;\n\n const collection = await this.collection;\n\n const { upsertedCount } = await collection.updateOne(\n { _id: object._id } as Criteria<Model>,\n { $set, $setOnInsert } as UpdateFilter<Model>,\n { upsert: true },\n );\n\n if (upsertedCount) {\n Object.assign(object, $setOnInsert);\n }\n\n return { object: object as unknown as Model, inserted: !!upsertedCount };\n }\n\n replaceSeveral(objects: Model[]): Promise<Model[]> {\n return Promise.all(objects.map((object: Model) => this.replaceOne(object)));\n }\n\n async partialUpdateByKey(\n key: KeyValue,\n partialUpdate: Update<Model>,\n criteria?: Criteria<Model>,\n ): Promise<Model> {\n const collection = await this.collection;\n const commandResult = await collection.updateOne(\n { _id: key, ...criteria } as Criteria<Model>,\n partialUpdate as UpdateFilter<Model>,\n );\n if (!commandResult.acknowledged) {\n console.error(commandResult);\n throw new Error('Update failed');\n }\n const object = await this.findByKey(key);\n return object!;\n }\n\n partialUpdateOne(\n object: Model,\n partialUpdate: Update<Model>,\n ): Promise<Model> {\n return this.partialUpdateByKey(object._id, partialUpdate);\n }\n\n partialUpdateMany(\n criteria: Criteria<Model>,\n partialUpdate: Update<Model>,\n ): Promise<void> {\n return this.collection\n .then((collection) =>\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n collection.updateMany(criteria, partialUpdate as any),\n )\n .then((res) => undefined); // TODO return updated object\n }\n\n deleteByKey(key: KeyValue, criteria?: Criteria<Model>): Promise<void> {\n return this.collection\n .then((collection) =>\n collection.deleteOne({ _id: key, ...criteria } as Criteria<Model>),\n )\n .then(() => undefined);\n }\n\n deleteOne(object: Model): Promise<void> {\n return this.deleteByKey(object._id);\n }\n\n deleteMany(selector: Criteria<Model>): Promise<void> {\n return this.collection\n .then((collection) => collection.deleteMany(selector))\n .then(() => undefined);\n }\n\n async count(filter?: Criteria<Model>): Promise<number> {\n const collection = await this.collection;\n return filter\n ? collection.countDocuments(filter)\n : collection.countDocuments();\n }\n\n async cursor<Result = Model>(\n filter?: Criteria<Model>,\n sort?: Sort<Model>,\n ): Promise<MongoCursor<Model, Result, KeyValue>> {\n const collection = await this.collection;\n const findCursor = filter\n ? collection.find<Result>(filter)\n : (collection.find() as unknown as FindCursor<Result>);\n if (sort) findCursor.sort(sort);\n return new MongoCursor<Model, Result, KeyValue>(this, findCursor);\n }\n\n async findByKey(\n key: KeyValue,\n criteria?: Criteria<Model>,\n ): Promise<Model | undefined> {\n const collection = await this.collection;\n const result = await collection.findOne<Model>({\n _id: key,\n ...criteria,\n } as Criteria<Model>);\n return result || undefined;\n }\n\n findAll(criteria?: Criteria<Model>, sort?: Sort<Model>): Promise<Model[]> {\n return this.cursor<Model>(criteria, sort).then((cursor) =>\n cursor.toArray(),\n );\n }\n\n async findOne(\n filter: Criteria<Model>,\n sort?: Sort<Model>,\n ): Promise<Model | undefined> {\n const collection = await this.collection;\n const result = await collection.findOne<Model>(filter, {\n sort,\n });\n return result || undefined;\n }\n}\n","import { AbstractConnection } from 'liwi-store';\nimport mongodb from 'mongodb';\nimport { Logger } from 'nightingale-logger';\n\nconst logger = new Logger('liwi:mongo:MongoConnection');\n\nexport default class MongoConnection extends AbstractConnection {\n _connection?: mongodb.MongoClient;\n\n _connecting?: Promise<mongodb.MongoClient>;\n\n connectionFailed?: boolean;\n\n // TODO interface\n constructor(config: Map<string, string | number>) {\n super();\n\n if (!config.has('host')) {\n config.set('host', 'localhost');\n }\n if (!config.has('port')) {\n config.set('port', '27017');\n }\n if (!config.has('database')) {\n throw new Error('Missing config database');\n }\n\n const connectionString =\n `mongodb://${\n config.has('user')\n ? `${config.get('user') as string}:${\n config.get('password') as string\n }@`\n : ''\n }` +\n `${config.get('host') as string}:${config.get('port') as string}/${\n config.get('database') as string\n }`;\n\n this.connect(connectionString);\n }\n\n connect(connectionString: string): void {\n logger.info('connecting', { connectionString });\n\n const connectPromise = mongodb.MongoClient.connect(connectionString)\n .then((connection) => {\n logger.info('connected', { connectionString });\n connection.on('close', () => {\n logger.warn('close', { connectionString });\n this.connectionFailed = true;\n this.getConnection = () => {\n throw new Error('MongoDB connection closed');\n };\n });\n connection.on('timeout', () => {\n logger.warn('timeout', { connectionString });\n this.connectionFailed = true;\n this.getConnection = () => {\n throw new Error('MongoDB connection timeout');\n };\n });\n connection.on('reconnect', () => {\n logger.warn('reconnect', { connectionString });\n this.connectionFailed = false;\n this.getConnection = () => Promise.resolve(this._connection!);\n });\n connection.on('error', (err) => {\n logger.warn('error', { connectionString, err });\n });\n\n this._connection = connection;\n this._connecting = undefined;\n this.getConnection = () => Promise.resolve(this._connection!);\n return connection;\n })\n .catch((err) => {\n logger.info('not connected', { connectionString });\n console.error(err.message || err);\n // throw err;\n process.nextTick(() => {\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(1);\n });\n\n throw err;\n });\n\n this.getConnection = () => Promise.resolve(connectPromise);\n this._connecting = this.getConnection();\n }\n\n getConnection(): Promise<mongodb.MongoClient> {\n throw new Error('call connect()');\n }\n\n async close(): Promise<void> {\n this.getConnection = () => Promise.reject(new Error('Connection closed'));\n if (this._connection) {\n await this._connection.close();\n this._connection = undefined;\n } else if (this._connecting) {\n await this._connecting;\n await this.close();\n }\n }\n}\n","import { SubscribeStore } from 'liwi-subscribe-store';\nimport type { AllowedKeyValue } from 'liwi-types';\nimport type {\n MongoBaseModel,\n MongoInsertType,\n MongoKeyPath,\n} from './MongoBaseModel';\nimport type MongoConnection from './MongoConnection';\nimport type MongoStore from './MongoStore';\n\nexport default function createMongoSubscribeStore<\n Model extends MongoBaseModel<KeyValue>,\n KeyValue extends AllowedKeyValue = Model[MongoKeyPath],\n>(\n mongoStore: MongoStore<Model, KeyValue>,\n): SubscribeStore<\n MongoKeyPath,\n KeyValue,\n Model,\n MongoInsertType<Model, KeyValue>,\n MongoConnection,\n MongoStore<Model, KeyValue>\n> {\n return new SubscribeStore(mongoStore);\n}\n"],"names":["MongoCursor","AbstractStoreCursor","constructor","store","cursor","advance","count","skip","next","then","value","_result","key","_id","limit","newLimit","Promise","resolve","result","Error","close","toArray","identityTransformer","model","MongoQueryCollection","AbstractSubscribableStoreQuery","options","transformer","createTestCriteria","testCriteria","criteria","mingoQuery","mingo","Query","test","bind","fetch","onFulfilled","all","createMongoCursor","map","meta","total","info","sort","keyPath","_subscribe","callback","_includeInitial","getSubscribeStore","promise","type","initial","queryInfo","unsubscribe","subscribe","action","changes","filtered","filter","length","push","prev","keys","object","deleted","updated","inserted","forEach","prevObject","nextObject","stop","cancel","onRejected","MongoQuerySingleItem","createMingoTestCriteria","item","res","MongoStore","connection","collectionName","_collection","getConnection","client","db","collection","err","reject","connectionFailed","createQuerySingleItem","createQueryCollection","insertOne","mongodb","ObjectId","toString","created","Date","acknowledged","isAcknowledged","replaceOne","upsertOne","setOnInsertPartialObject","upsertOneWithInfo","$setOnInsert","$set","upsertedCount","updateOne","upsert","Object","assign","replaceSeveral","objects","partialUpdateByKey","partialUpdate","commandResult","console","error","findByKey","partialUpdateOne","partialUpdateMany","updateMany","undefined","deleteByKey","deleteOne","deleteMany","selector","countDocuments","findCursor","find","findOne","findAll","logger","Logger","MongoConnection","AbstractConnection","config","has","set","connectionString","get","connect","connectPromise","MongoClient","on","warn","_connection","_connecting","catch","message","process","nextTick","exit","createMongoSubscribeStore","mongoStore","SubscribeStore"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-node14.mjs","sources":["../src/MongoCursor.ts","../src/MongoQueryCollection.ts","../src/MongoQuerySingleItem.ts","../src/MongoStore.ts","../src/MongoConnection.ts","../src/createMongoSubscribeStore.ts"],"sourcesContent":["import { AbstractStoreCursor } from 'liwi-store';\nimport type { AllowedKeyValue } from 'liwi-store';\nimport type { FindCursor } from 'mongodb';\nimport type { MongoBaseModel } from './MongoBaseModel';\nimport type MongoStore from './MongoStore';\n\nexport default class MongoCursor<\n Model extends MongoBaseModel<KeyValue>,\n Result extends Partial<Model> = Model,\n KeyValue extends AllowedKeyValue = Model['_id'],\n> extends AbstractStoreCursor<\n MongoStore<Model, KeyValue>,\n KeyValue,\n Model,\n Result\n> {\n // key in AbstractCursor\n\n private readonly cursor: FindCursor<Result>;\n\n private _result?: Result | null;\n\n constructor(store: MongoStore<Model, KeyValue>, cursor: FindCursor<Result>) {\n super(store);\n this.cursor = cursor;\n }\n\n advance(count: number): void {\n this.cursor.skip(count);\n }\n\n next(): Promise<KeyValue | undefined> {\n return this.cursor.next().then((value) => {\n this._result = value;\n this.key = value?._id;\n return this.key;\n });\n }\n\n limit(newLimit: number): Promise<this> {\n this.cursor.limit(newLimit);\n return Promise.resolve(this);\n }\n\n result(): Promise<Result> {\n if (!this._result) throw new Error('Cannot call result() before next()');\n return Promise.resolve(this._result);\n }\n\n close(): Promise<void> {\n if (this.cursor) {\n this.cursor.close();\n }\n\n return Promise.resolve();\n }\n\n toArray(): Promise<Result[]> {\n return this.cursor.toArray();\n }\n}\n","/* eslint-disable complexity, max-lines */\nimport type {\n QuerySubscription,\n SubscribeCallback,\n QueryResult,\n QueryParams,\n Changes,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n} from 'liwi-store';\nimport type { Actions } from 'liwi-subscribe-store';\nimport { AbstractSubscribableStoreQuery } from 'liwi-subscribe-store';\nimport mingo from 'mingo';\nimport type {\n MongoBaseModel,\n MongoInsertType,\n MongoKeyPath,\n} from './MongoBaseModel';\nimport type MongoCursor from './MongoCursor';\nimport type MongoStore from './MongoStore';\n\nconst identityTransformer = <\n Model extends MongoBaseModel<any>,\n Transformed = Model,\n>(\n model: Model,\n): Transformed => model as unknown as Transformed;\n\ntype TestCriteria = (obj: any) => boolean;\n\nexport default class MongoQueryCollection<\n Model extends MongoBaseModel<KeyValue>,\n Params extends QueryParams<Params> = never,\n KeyValue extends AllowedKeyValue = Model['_id'],\n Item extends Record<MongoKeyPath, KeyValue> = Model,\n> extends AbstractSubscribableStoreQuery<\n MongoKeyPath,\n KeyValue,\n Model,\n MongoInsertType<Model, KeyValue>,\n Params,\n Item[]\n> {\n private readonly store: MongoStore<Model, KeyValue>;\n\n private readonly options: QueryOptions<Model>;\n\n private testCriteria?: TestCriteria;\n\n private readonly transformer: Transformer<Model, Item>;\n\n constructor(\n store: MongoStore<Model, KeyValue>,\n options: QueryOptions<Model>,\n transformer: Transformer<Model, Item> = identityTransformer,\n ) {\n super();\n this.store = store;\n this.options = options;\n this.transformer = transformer;\n }\n\n createTestCriteria(): TestCriteria {\n if (!this.testCriteria) {\n if (!this.options.criteria) {\n return () => true;\n }\n\n const mingoQuery = new mingo.Query(this.options.criteria);\n this.testCriteria = mingoQuery.test.bind(mingoQuery);\n }\n return this.testCriteria;\n }\n\n async fetch<T>(onFulfilled: (result: QueryResult<Item[]>) => T): Promise<T> {\n const [result, count] = await Promise.all([\n this.createMongoCursor().then((cursor) => cursor.toArray()),\n this.store.count(),\n ]);\n\n return onFulfilled({\n result: result.map(this.transformer),\n meta: { total: count },\n info: {\n sort: this.options.sort,\n limit: this.options.limit,\n keyPath: this.store.keyPath,\n },\n });\n }\n\n _subscribe(\n callback: SubscribeCallback<KeyValue, Item[]>,\n _includeInitial: boolean,\n ): QuerySubscription {\n const store = super.getSubscribeStore();\n const testCriteria: TestCriteria = this.createTestCriteria();\n\n const promise: Promise<void> = _includeInitial\n ? this.fetch(({ result, meta, info }: QueryResult<Item[]>) => {\n callback(null, [\n {\n type: 'initial',\n initial: result,\n queryInfo: info,\n meta,\n },\n ]);\n })\n : Promise.resolve();\n\n const unsubscribe = store.subscribe((action: Actions<Model>) => {\n const changes: Changes<KeyValue, Item[]> = [];\n switch (action.type) {\n case 'inserted': {\n const filtered = action.next.filter(testCriteria);\n if (filtered.length > 0) {\n changes.push({\n type: 'inserted',\n result: filtered.map(this.transformer),\n });\n }\n break;\n }\n case 'deleted': {\n const filtered = action.prev.filter(testCriteria);\n if (filtered.length > 0) {\n changes.push({\n type: 'deleted',\n keys: filtered.map((object) => object[this.store.keyPath]),\n });\n }\n break;\n }\n case 'updated': {\n const {\n deleted,\n updated,\n inserted,\n }: {\n deleted: KeyValue[];\n updated: Item[];\n inserted: Item[];\n } = { deleted: [], updated: [], inserted: [] };\n\n action.changes.forEach(([prevObject, nextObject]: [Model, Model]) => {\n if (testCriteria(prevObject)) {\n if (!testCriteria(nextObject)) {\n deleted.push(prevObject[this.store.keyPath]);\n } else {\n updated.push(this.transformer(nextObject));\n }\n } else if (testCriteria(nextObject)) {\n inserted.push(this.transformer(nextObject));\n }\n });\n\n if (deleted.length > 0) {\n changes.push({ type: 'deleted', keys: deleted });\n }\n if (updated.length > 0) {\n changes.push({ type: 'updated', result: updated });\n }\n if (inserted.length > 0) {\n changes.push({ type: 'inserted', result: inserted });\n }\n\n break;\n }\n default:\n throw new Error('Unsupported type');\n }\n\n if (changes.length === 0) return;\n\n callback(null, changes);\n });\n // let _feed;\n // const promise = this.queryCallback(this.store.query(), this.store.r)\n // .changes({\n // includeInitial: _includeInitial,\n // includeStates: true,\n // includeTypes: true,\n // includeOffsets: true,\n // })\n // .then((feed) => {\n // if (args.length === 0) {\n // _feed = feed;\n // delete this._promise;\n // }\n //\n // feed.each(callback);\n // return feed;\n // });\n //\n // if (args.length === 0) this._promise = promise;\n\n return {\n stop: unsubscribe,\n cancel: unsubscribe,\n then: <T, U>(\n onFulfilled: () => T | Promise<T>,\n onRejected?: (error: any) => U | Promise<U>,\n ): Promise<T | U> => promise.then(onFulfilled, onRejected),\n };\n }\n\n private async createMongoCursor(): Promise<\n MongoCursor<Model, Model, KeyValue>\n > {\n const cursor = await this.store.cursor(\n this.options.criteria,\n this.options.sort,\n );\n\n if (this.options.skip) {\n cursor.advance(this.options.skip);\n }\n\n if (this.options.limit) {\n await cursor.limit(this.options.limit);\n }\n\n return cursor;\n }\n}\n","import type {\n QuerySubscription,\n SubscribeCallback,\n QueryResult,\n QueryParams,\n Changes,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n} from 'liwi-store';\nimport type { Actions } from 'liwi-subscribe-store';\nimport { AbstractSubscribableStoreQuery } from 'liwi-subscribe-store';\nimport mingo from 'mingo';\nimport type {\n MongoBaseModel,\n MongoInsertType,\n MongoKeyPath,\n} from './MongoBaseModel';\nimport type MongoCursor from './MongoCursor';\nimport type MongoStore from './MongoStore';\n\nconst identityTransformer = <\n Model extends MongoBaseModel<any>,\n Transformed = Model,\n>(\n model: Model,\n): Transformed => model as unknown as Transformed;\n\ntype TestCriteria = (obj: any) => boolean;\n\nexport default class MongoQuerySingleItem<\n Model extends MongoBaseModel<KeyValue>,\n Params extends QueryParams<Params> = never,\n Result extends Record<MongoKeyPath, KeyValue> | null = Model | null,\n KeyValue extends AllowedKeyValue = Model['_id'],\n> extends AbstractSubscribableStoreQuery<\n MongoKeyPath,\n KeyValue,\n Model,\n MongoInsertType<Model, KeyValue>,\n Params,\n Result\n> {\n private readonly store: MongoStore<Model, KeyValue>;\n\n private readonly options: QueryOptions<Model>;\n\n private testCriteria?: TestCriteria;\n\n private readonly transformer: Transformer<Model, Result>;\n\n constructor(\n store: MongoStore<Model, KeyValue>,\n options: QueryOptions<Model>,\n transformer: Transformer<Model, Result> = identityTransformer,\n ) {\n super();\n this.store = store;\n this.options = options;\n this.transformer = transformer;\n }\n\n createMingoTestCriteria(): TestCriteria {\n if (!this.testCriteria) {\n if (!this.options.criteria) {\n return () => true;\n }\n\n const mingoQuery = new mingo.Query(this.options.criteria);\n this.testCriteria = mingoQuery.test.bind(mingoQuery);\n }\n\n return this.testCriteria;\n }\n\n async fetch<T>(onFulfilled: (result: QueryResult<Result>) => T): Promise<T> {\n const cursor = await this.createMongoCursor();\n await cursor.limit(1);\n return cursor.toArray().then((result: Model[]) => {\n const item: Result =\n result.length === 0 ? (null as Result) : this.transformer(result[0]);\n return onFulfilled({\n result: item,\n meta: { total: result === null ? 0 : 1 },\n info: {\n limit: 1,\n keyPath: this.store.keyPath,\n },\n });\n });\n }\n\n _subscribe(\n callback: SubscribeCallback<KeyValue, Result>,\n _includeInitial: boolean,\n ): QuerySubscription {\n const store = super.getSubscribeStore();\n const testCriteria: TestCriteria = this.createMingoTestCriteria();\n\n const promise: Promise<void> = _includeInitial\n ? this.fetch(({ result, meta, info }: QueryResult<Result>) => {\n callback(null, [\n {\n type: 'initial',\n initial: result,\n queryInfo: info,\n meta,\n },\n ]);\n })\n : Promise.resolve();\n\n const unsubscribe = store.subscribe(async (action: Actions<Model>) => {\n const changes: Changes<KeyValue, Result> = [];\n switch (action.type) {\n case 'inserted': {\n const filtered = action.next.filter(testCriteria);\n if (filtered.length > 0) {\n changes.push({\n type: 'updated',\n result: this.transformer(filtered[0]),\n });\n }\n break;\n }\n case 'deleted': {\n const filtered = action.prev.filter(testCriteria);\n if (filtered.length > 0) {\n changes.push({\n type: 'deleted',\n keys: filtered.map((object) => object[this.store.keyPath]),\n });\n }\n break;\n }\n case 'updated': {\n const filtered = action.changes.filter(([prev, next]) =>\n testCriteria(prev),\n );\n if (filtered.length > 0) {\n if (this.options.sort) {\n const { result } = await this.fetch((res) => res);\n changes.push({\n type: 'updated',\n result,\n });\n } else if (filtered.length !== 1) {\n throw new Error(\n 'should not match more than 1, use sort if you can have multiple match',\n );\n } else {\n const [, next] = filtered[0];\n changes.push({\n type: 'updated',\n result: testCriteria(next) ? this.transformer(next) : null!,\n });\n }\n } else if (filtered.length === 0) {\n }\n break;\n }\n default:\n throw new Error('Unsupported type');\n }\n\n if (changes.length === 0) return;\n\n callback(null, changes);\n });\n\n return {\n stop: unsubscribe,\n cancel: unsubscribe,\n then: <T, U>(\n onFulfilled: () => T | Promise<T>,\n onRejected?: (error: any) => U | Promise<U>,\n ): Promise<T | U> => promise.then(onFulfilled, onRejected),\n };\n }\n\n private async createMongoCursor(): Promise<\n MongoCursor<Model, Model, KeyValue>\n > {\n const cursor = await this.store.cursor(\n this.options.criteria,\n this.options.sort,\n );\n\n if (this.options.limit) {\n await cursor.limit(this.options.limit);\n }\n\n return cursor;\n }\n}\n","/* eslint-disable max-lines */\nimport type {\n UpsertResult,\n SubscribableStore,\n QueryParams,\n UpsertPartialObject,\n Criteria,\n Sort,\n Update,\n QueryOptions,\n Transformer,\n AllowedKeyValue,\n OptionalBaseModelKeysForInsert,\n} from 'liwi-store';\nimport type {\n Collection,\n FindCursor,\n MongoClient,\n UpdateFilter,\n} from 'mongodb';\nimport mongodb from 'mongodb';\nimport type {\n MongoBaseModel,\n MongoKeyPath,\n MongoInsertType,\n} from './MongoBaseModel';\nimport type MongoConnection from './MongoConnection';\nimport MongoCursor from './MongoCursor';\nimport MongoQueryCollection from './MongoQueryCollection';\nimport MongoQuerySingleItem from './MongoQuerySingleItem';\n\nexport interface MongoUpsertResult<\n KeyValue extends AllowedKeyValue,\n Model extends MongoBaseModel<KeyValue>,\n> extends UpsertResult<Model> {\n object: Model;\n inserted: boolean;\n}\n\nexport default class MongoStore<\n Model extends MongoBaseModel<KeyValue>,\n KeyValue extends AllowedKeyValue = Model[MongoKeyPath],\n> implements\n SubscribableStore<\n MongoKeyPath,\n KeyValue,\n Model,\n MongoInsertType<Model>,\n MongoConnection\n >\n{\n readonly keyPath: MongoKeyPath = '_id';\n\n readonly connection: MongoConnection;\n\n private _collection: Collection<Model> | Promise<Collection<Model>>;\n\n constructor(connection: MongoConnection, collectionName: string) {\n this.connection = connection;\n\n if (!collectionName) {\n throw new Error(`Invalid collectionName: \"${collectionName}\"`);\n }\n\n this._collection = connection.getConnection().then(\n (client: MongoClient) => {\n this._collection = client.db().collection(collectionName);\n return this._collection;\n },\n (err: any) => {\n this._collection = Promise.reject(err);\n return this._collection;\n },\n );\n }\n\n get collection(): Promise<Collection<Model>> {\n if (this.connection.connectionFailed) {\n return Promise.reject(new Error('MongoDB connection failed'));\n }\n\n return Promise.resolve(this._collection);\n }\n\n createQuerySingleItem<\n Result extends Record<MongoKeyPath, KeyValue> = Model,\n Params extends QueryParams<Params> = never,\n >(\n options: QueryOptions<Model>,\n transformer?: Transformer<Model, Result>,\n ): MongoQuerySingleItem<Model, Params, Result, KeyValue> {\n return new MongoQuerySingleItem<Model, Params, Result, KeyValue>(\n this,\n options,\n transformer,\n );\n }\n\n createQueryCollection<\n Item extends Record<MongoKeyPath, KeyValue> = Model,\n Params extends QueryParams<Params> = never,\n >(\n options: QueryOptions<Model>,\n transformer?: Transformer<Model, Item>,\n ): MongoQueryCollection<Model, Params, Model['_id'], Item> {\n return new MongoQueryCollection<Model, Params, KeyValue, Item>(\n this,\n options,\n transformer,\n );\n }\n\n async insertOne(object: MongoInsertType<Model>): Promise<Model> {\n if (!object._id) {\n object._id = new mongodb.ObjectId().toString() as Model['_id'];\n }\n\n if (!object.created) object.created = new Date();\n if (!object.updated) object.updated = new Date();\n\n const collection = await this.collection;\n const { acknowledged: isAcknowledged } = await collection.insertOne(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n object as any,\n );\n if (!isAcknowledged) {\n throw new Error('Fail to insert');\n }\n\n return object as Model;\n }\n\n async replaceOne(object: Model): Promise<Model> {\n if (!object.updated) object.updated = new Date();\n\n const collection = await this.collection;\n await collection.replaceOne({ _id: object._id } as Criteria<Model>, object);\n return object;\n }\n\n async upsertOne<\n K extends Exclude<\n keyof Model,\n MongoKeyPath | OptionalBaseModelKeysForInsert\n >,\n >(\n object: UpsertPartialObject<MongoKeyPath, KeyValue, Model, K>,\n setOnInsertPartialObject?: Update<Model>['$setOnInsert'],\n ): Promise<Model> {\n const result = await this.upsertOneWithInfo(\n object,\n setOnInsertPartialObject,\n );\n return result.object;\n }\n\n async upsertOneWithInfo<\n K extends Exclude<\n keyof Model,\n MongoKeyPath | OptionalBaseModelKeysForInsert\n >,\n >(\n object: UpsertPartialObject<MongoKeyPath, KeyValue, Model, K>,\n setOnInsertPartialObject?: Update<Model>['$setOnInsert'],\n ): Promise<MongoUpsertResult<KeyValue, Model>> {\n const $setOnInsert = {\n created: object.created || new Date(),\n ...setOnInsertPartialObject,\n };\n\n if (!object.updated) {\n (object as MongoBaseModel).updated = new Date();\n }\n\n const $set: Partial<typeof object> = { ...object };\n delete $set.created;\n\n const collection = await this.collection;\n\n const { upsertedCount } = await collection.updateOne(\n { _id: object._id } as Criteria<Model>,\n { $set, $setOnInsert } as UpdateFilter<Model>,\n { upsert: true },\n );\n\n if (upsertedCount) {\n Object.assign(object, $setOnInsert);\n }\n\n return { object: object as unknown as Model, inserted: !!upsertedCount };\n }\n\n replaceSeveral(objects: Model[]): Promise<Model[]> {\n return Promise.all(objects.map((object: Model) => this.replaceOne(object)));\n }\n\n async partialUpdateByKey(\n key: KeyValue,\n partialUpdate: Update<Model>,\n criteria?: Criteria<Model>,\n ): Promise<Model> {\n const collection = await this.collection;\n const commandResult = await collection.updateOne(\n { _id: key, ...criteria } as Criteria<Model>,\n partialUpdate as UpdateFilter<Model>,\n );\n if (!commandResult.acknowledged) {\n console.error(commandResult);\n throw new Error('Update failed');\n }\n const object = await this.findByKey(key);\n return object!;\n }\n\n partialUpdateOne(\n object: Model,\n partialUpdate: Update<Model>,\n ): Promise<Model> {\n return this.partialUpdateByKey(object._id, partialUpdate);\n }\n\n partialUpdateMany(\n criteria: Criteria<Model>,\n partialUpdate: Update<Model>,\n ): Promise<void> {\n return this.collection\n .then((collection) =>\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n collection.updateMany(criteria, partialUpdate as any),\n )\n .then((res) => undefined); // TODO return updated object\n }\n\n deleteByKey(key: KeyValue, criteria?: Criteria<Model>): Promise<void> {\n return this.collection\n .then((collection) =>\n collection.deleteOne({ _id: key, ...criteria } as Criteria<Model>),\n )\n .then(() => undefined);\n }\n\n deleteOne(object: Model): Promise<void> {\n return this.deleteByKey(object._id);\n }\n\n deleteMany(selector: Criteria<Model>): Promise<void> {\n return this.collection\n .then((collection) => collection.deleteMany(selector))\n .then(() => undefined);\n }\n\n async count(filter?: Criteria<Model>): Promise<number> {\n const collection = await this.collection;\n return filter\n ? collection.countDocuments(filter)\n : collection.countDocuments();\n }\n\n async cursor<Result extends Partial<Model> = Model>(\n filter?: Criteria<Model>,\n sort?: Sort<Model>,\n ): Promise<MongoCursor<Model, Result, KeyValue>> {\n const collection = await this.collection;\n const findCursor = filter\n ? collection.find<Result>(filter)\n : (collection.find() as unknown as FindCursor<Result>);\n if (sort) findCursor.sort(sort);\n return new MongoCursor<Model, Result, KeyValue>(this, findCursor);\n }\n\n async findByKey(\n key: KeyValue,\n criteria?: Criteria<Model>,\n ): Promise<Model | undefined> {\n const collection = await this.collection;\n const result = await collection.findOne<Model>({\n _id: key,\n ...criteria,\n } as Criteria<Model>);\n return result || undefined;\n }\n\n findAll(criteria?: Criteria<Model>, sort?: Sort<Model>): Promise<Model[]> {\n return this.cursor<Model>(criteria, sort).then((cursor) =>\n cursor.toArray(),\n );\n }\n\n async findOne(\n filter: Criteria<Model>,\n sort?: Sort<Model>,\n ): Promise<Model | undefined> {\n const collection = await this.collection;\n const result = await collection.findOne<Model>(filter, {\n sort,\n });\n return result || undefined;\n }\n}\n","import { AbstractConnection } from 'liwi-store';\nimport mongodb from 'mongodb';\nimport { Logger } from 'nightingale-logger';\n\nconst logger = new Logger('liwi:mongo:MongoConnection');\n\nexport default class MongoConnection extends AbstractConnection {\n _connection?: mongodb.MongoClient;\n\n _connecting?: Promise<mongodb.MongoClient>;\n\n connectionFailed?: boolean;\n\n // TODO interface\n constructor(config: Map<string, string | number>) {\n super();\n\n if (!config.has('host')) {\n config.set('host', 'localhost');\n }\n if (!config.has('port')) {\n config.set('port', '27017');\n }\n if (!config.has('database')) {\n throw new Error('Missing config database');\n }\n\n const buildConnectionString = (redactCredentials: boolean): string =>\n `mongodb://${\n config.has('user')\n ? `${\n redactCredentials\n ? `${(config.get('user') as string).slice(0, 2)}[redacted]`\n : (config.get('user') as string)\n }:${\n redactCredentials\n ? '[redacted]'\n : (config.get('password') as string)\n }@`\n : ''\n }` +\n `${config.get('host') as string}:${config.get('port') as string}/${\n config.get('database') as string\n }`;\n\n const connectionString = buildConnectionString(false);\n const connectionStringRedacted = buildConnectionString(true);\n\n this.connect(connectionString, connectionStringRedacted);\n }\n\n connect(connectionString: string, connectionStringRedacted: string): void {\n logger.info('connecting', { connectionStringRedacted });\n\n const connectPromise = mongodb.MongoClient.connect(connectionString)\n .then((connection) => {\n logger.info('connected', { connectionStringRedacted });\n connection.on('close', () => {\n logger.warn('close', { connectionStringRedacted });\n this.connectionFailed = true;\n this.getConnection = () => {\n throw new Error('MongoDB connection closed');\n };\n });\n connection.on('timeout', () => {\n logger.warn('timeout', { connectionStringRedacted });\n this.connectionFailed = true;\n this.getConnection = () => {\n throw new Error('MongoDB connection timeout');\n };\n });\n connection.on('reconnect', () => {\n logger.warn('reconnect', { connectionStringRedacted });\n this.connectionFailed = false;\n this.getConnection = () => Promise.resolve(this._connection!);\n });\n connection.on('error', (err) => {\n logger.warn('error', { connectionStringRedacted, err });\n });\n\n this._connection = connection;\n this._connecting = undefined;\n this.getConnection = () => Promise.resolve(this._connection!);\n return connection;\n })\n .catch((err) => {\n logger.info('not connected', { connectionStringRedacted });\n console.error(err.message || err);\n // throw err;\n process.nextTick(() => {\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(1);\n });\n\n throw err;\n });\n\n this.getConnection = () => Promise.resolve(connectPromise);\n this._connecting = this.getConnection();\n }\n\n getConnection(): Promise<mongodb.MongoClient> {\n throw new Error('call connect()');\n }\n\n async close(): Promise<void> {\n this.getConnection = () => Promise.reject(new Error('Connection closed'));\n if (this._connection) {\n await this._connection.close();\n this._connection = undefined;\n } else if (this._connecting) {\n await this._connecting;\n await this.close();\n }\n }\n}\n","import type { AllowedKeyValue } from 'liwi-store';\nimport { SubscribeStore } from 'liwi-subscribe-store';\nimport type {\n MongoBaseModel,\n MongoInsertType,\n MongoKeyPath,\n} from './MongoBaseModel';\nimport type MongoConnection from './MongoConnection';\nimport type MongoStore from './MongoStore';\n\nexport default function createMongoSubscribeStore<\n Model extends MongoBaseModel<KeyValue>,\n KeyValue extends AllowedKeyValue = Model[MongoKeyPath],\n>(\n mongoStore: MongoStore<Model, KeyValue>,\n): SubscribeStore<\n MongoKeyPath,\n KeyValue,\n Model,\n MongoInsertType<Model, KeyValue>,\n MongoConnection,\n MongoStore<Model, KeyValue>\n> {\n return new SubscribeStore(mongoStore);\n}\n"],"names":["MongoCursor","AbstractStoreCursor","constructor","store","cursor","advance","count","skip","next","then","value","_result","key","_id","limit","newLimit","Promise","resolve","result","Error","close","toArray","identityTransformer","model","MongoQueryCollection","AbstractSubscribableStoreQuery","options","transformer","createTestCriteria","testCriteria","criteria","mingoQuery","mingo","Query","test","bind","fetch","onFulfilled","all","createMongoCursor","map","meta","total","info","sort","keyPath","_subscribe","callback","_includeInitial","getSubscribeStore","promise","type","initial","queryInfo","unsubscribe","subscribe","action","changes","filtered","filter","length","push","prev","keys","object","deleted","updated","inserted","forEach","prevObject","nextObject","stop","cancel","onRejected","MongoQuerySingleItem","createMingoTestCriteria","item","res","MongoStore","connection","collectionName","_collection","getConnection","client","db","collection","err","reject","connectionFailed","createQuerySingleItem","createQueryCollection","insertOne","mongodb","ObjectId","toString","created","Date","acknowledged","isAcknowledged","replaceOne","upsertOne","setOnInsertPartialObject","upsertOneWithInfo","$setOnInsert","$set","upsertedCount","updateOne","upsert","Object","assign","replaceSeveral","objects","partialUpdateByKey","partialUpdate","commandResult","console","error","findByKey","partialUpdateOne","partialUpdateMany","updateMany","undefined","deleteByKey","deleteOne","deleteMany","selector","countDocuments","findCursor","find","findOne","findAll","logger","Logger","MongoConnection","AbstractConnection","config","has","set","buildConnectionString","redactCredentials","get","slice","connectionString","connectionStringRedacted","connect","connectPromise","MongoClient","on","warn","_connection","_connecting","catch","message","process","nextTick","exit","createMongoSubscribeStore","mongoStore","SubscribeStore"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "liwi-mongo",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.2.0",
|
|
4
4
|
"description": "mongo implementation for liwi",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"author": "Christophe Hurpeau <christophe@hurpeau.com> (https://christophe.hurpeau.com)",
|
|
@@ -32,16 +32,12 @@
|
|
|
32
32
|
"build": "yarn clean:build && rollup --config rollup.config.mjs && yarn run build:definitions",
|
|
33
33
|
"build:definitions": "tsc -p tsconfig.build.json",
|
|
34
34
|
"clean": "yarn clean:build",
|
|
35
|
-
"clean:build": "
|
|
35
|
+
"clean:build": "pob-babel-clean-out dist",
|
|
36
36
|
"lint": "yarn run lint:eslint",
|
|
37
37
|
"lint:eslint": "cd ../.. && yarn run eslint --report-unused-disable-directives --resolve-plugins-relative-to . --quiet packages/liwi-mongo",
|
|
38
38
|
"watch": "yarn clean:build && rollup --config rollup.config.mjs --watch"
|
|
39
39
|
},
|
|
40
|
-
"prettier":
|
|
41
|
-
"trailingComma": "all",
|
|
42
|
-
"singleQuote": true,
|
|
43
|
-
"arrowParens": "always"
|
|
44
|
-
},
|
|
40
|
+
"prettier": "@pob/root/prettier-config",
|
|
45
41
|
"pob": {
|
|
46
42
|
"babelEnvs": [
|
|
47
43
|
{
|
|
@@ -58,17 +54,16 @@
|
|
|
58
54
|
]
|
|
59
55
|
},
|
|
60
56
|
"dependencies": {
|
|
61
|
-
"liwi-store": "9.
|
|
62
|
-
"liwi-subscribe-store": "9.
|
|
63
|
-
"liwi-types": "9.0.0",
|
|
57
|
+
"liwi-store": "9.2.0",
|
|
58
|
+
"liwi-subscribe-store": "9.2.0",
|
|
64
59
|
"mingo": "^6.0.3",
|
|
65
60
|
"mongodb": "^4.0.0",
|
|
66
61
|
"nightingale-logger": "^12.1.4"
|
|
67
62
|
},
|
|
68
63
|
"devDependencies": {
|
|
69
|
-
"@babel/core": "7.
|
|
70
|
-
"pob-babel": "
|
|
71
|
-
"typescript": "4.
|
|
64
|
+
"@babel/core": "7.19.3",
|
|
65
|
+
"pob-babel": "34.3.0",
|
|
66
|
+
"typescript": "4.8.4"
|
|
72
67
|
},
|
|
73
|
-
"gitHead": "
|
|
68
|
+
"gitHead": "00374a5d4f50f8995ce99fa33907ddb6c30c969d"
|
|
74
69
|
}
|
package/src/MongoBaseModel.ts
CHANGED
package/src/MongoConnection.ts
CHANGED
|
@@ -25,11 +25,17 @@ export default class MongoConnection extends AbstractConnection {
|
|
|
25
25
|
throw new Error('Missing config database');
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
const
|
|
28
|
+
const buildConnectionString = (redactCredentials: boolean): string =>
|
|
29
29
|
`mongodb://${
|
|
30
30
|
config.has('user')
|
|
31
|
-
? `${
|
|
32
|
-
|
|
31
|
+
? `${
|
|
32
|
+
redactCredentials
|
|
33
|
+
? `${(config.get('user') as string).slice(0, 2)}[redacted]`
|
|
34
|
+
: (config.get('user') as string)
|
|
35
|
+
}:${
|
|
36
|
+
redactCredentials
|
|
37
|
+
? '[redacted]'
|
|
38
|
+
: (config.get('password') as string)
|
|
33
39
|
}@`
|
|
34
40
|
: ''
|
|
35
41
|
}` +
|
|
@@ -37,36 +43,39 @@ export default class MongoConnection extends AbstractConnection {
|
|
|
37
43
|
config.get('database') as string
|
|
38
44
|
}`;
|
|
39
45
|
|
|
40
|
-
|
|
46
|
+
const connectionString = buildConnectionString(false);
|
|
47
|
+
const connectionStringRedacted = buildConnectionString(true);
|
|
48
|
+
|
|
49
|
+
this.connect(connectionString, connectionStringRedacted);
|
|
41
50
|
}
|
|
42
51
|
|
|
43
|
-
connect(connectionString: string): void {
|
|
44
|
-
logger.info('connecting', {
|
|
52
|
+
connect(connectionString: string, connectionStringRedacted: string): void {
|
|
53
|
+
logger.info('connecting', { connectionStringRedacted });
|
|
45
54
|
|
|
46
55
|
const connectPromise = mongodb.MongoClient.connect(connectionString)
|
|
47
56
|
.then((connection) => {
|
|
48
|
-
logger.info('connected', {
|
|
57
|
+
logger.info('connected', { connectionStringRedacted });
|
|
49
58
|
connection.on('close', () => {
|
|
50
|
-
logger.warn('close', {
|
|
59
|
+
logger.warn('close', { connectionStringRedacted });
|
|
51
60
|
this.connectionFailed = true;
|
|
52
61
|
this.getConnection = () => {
|
|
53
62
|
throw new Error('MongoDB connection closed');
|
|
54
63
|
};
|
|
55
64
|
});
|
|
56
65
|
connection.on('timeout', () => {
|
|
57
|
-
logger.warn('timeout', {
|
|
66
|
+
logger.warn('timeout', { connectionStringRedacted });
|
|
58
67
|
this.connectionFailed = true;
|
|
59
68
|
this.getConnection = () => {
|
|
60
69
|
throw new Error('MongoDB connection timeout');
|
|
61
70
|
};
|
|
62
71
|
});
|
|
63
72
|
connection.on('reconnect', () => {
|
|
64
|
-
logger.warn('reconnect', {
|
|
73
|
+
logger.warn('reconnect', { connectionStringRedacted });
|
|
65
74
|
this.connectionFailed = false;
|
|
66
75
|
this.getConnection = () => Promise.resolve(this._connection!);
|
|
67
76
|
});
|
|
68
77
|
connection.on('error', (err) => {
|
|
69
|
-
logger.warn('error', {
|
|
78
|
+
logger.warn('error', { connectionStringRedacted, err });
|
|
70
79
|
});
|
|
71
80
|
|
|
72
81
|
this._connection = connection;
|
|
@@ -75,7 +84,7 @@ export default class MongoConnection extends AbstractConnection {
|
|
|
75
84
|
return connection;
|
|
76
85
|
})
|
|
77
86
|
.catch((err) => {
|
|
78
|
-
logger.info('not connected', {
|
|
87
|
+
logger.info('not connected', { connectionStringRedacted });
|
|
79
88
|
console.error(err.message || err);
|
|
80
89
|
// throw err;
|
|
81
90
|
process.nextTick(() => {
|
package/src/MongoCursor.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AbstractStoreCursor } from 'liwi-store';
|
|
2
|
-
import type { AllowedKeyValue } from 'liwi-
|
|
2
|
+
import type { AllowedKeyValue } from 'liwi-store';
|
|
3
3
|
import type { FindCursor } from 'mongodb';
|
|
4
4
|
import type { MongoBaseModel } from './MongoBaseModel';
|
|
5
5
|
import type MongoStore from './MongoStore';
|
|
@@ -4,15 +4,13 @@ import type {
|
|
|
4
4
|
SubscribeCallback,
|
|
5
5
|
QueryResult,
|
|
6
6
|
QueryParams,
|
|
7
|
-
} from 'liwi-store';
|
|
8
|
-
import type { Actions } from 'liwi-subscribe-store';
|
|
9
|
-
import { AbstractSubscribableStoreQuery } from 'liwi-subscribe-store';
|
|
10
|
-
import type {
|
|
11
7
|
Changes,
|
|
12
8
|
QueryOptions,
|
|
13
9
|
Transformer,
|
|
14
10
|
AllowedKeyValue,
|
|
15
|
-
} from 'liwi-
|
|
11
|
+
} from 'liwi-store';
|
|
12
|
+
import type { Actions } from 'liwi-subscribe-store';
|
|
13
|
+
import { AbstractSubscribableStoreQuery } from 'liwi-subscribe-store';
|
|
16
14
|
import mingo from 'mingo';
|
|
17
15
|
import type {
|
|
18
16
|
MongoBaseModel,
|
|
@@ -3,15 +3,13 @@ import type {
|
|
|
3
3
|
SubscribeCallback,
|
|
4
4
|
QueryResult,
|
|
5
5
|
QueryParams,
|
|
6
|
-
} from 'liwi-store';
|
|
7
|
-
import type { Actions } from 'liwi-subscribe-store';
|
|
8
|
-
import { AbstractSubscribableStoreQuery } from 'liwi-subscribe-store';
|
|
9
|
-
import type {
|
|
10
6
|
Changes,
|
|
11
7
|
QueryOptions,
|
|
12
8
|
Transformer,
|
|
13
9
|
AllowedKeyValue,
|
|
14
|
-
} from 'liwi-
|
|
10
|
+
} from 'liwi-store';
|
|
11
|
+
import type { Actions } from 'liwi-subscribe-store';
|
|
12
|
+
import { AbstractSubscribableStoreQuery } from 'liwi-subscribe-store';
|
|
15
13
|
import mingo from 'mingo';
|
|
16
14
|
import type {
|
|
17
15
|
MongoBaseModel,
|
package/src/MongoStore.ts
CHANGED
|
@@ -4,8 +4,6 @@ import type {
|
|
|
4
4
|
SubscribableStore,
|
|
5
5
|
QueryParams,
|
|
6
6
|
UpsertPartialObject,
|
|
7
|
-
} from 'liwi-store';
|
|
8
|
-
import type {
|
|
9
7
|
Criteria,
|
|
10
8
|
Sort,
|
|
11
9
|
Update,
|
|
@@ -13,7 +11,7 @@ import type {
|
|
|
13
11
|
Transformer,
|
|
14
12
|
AllowedKeyValue,
|
|
15
13
|
OptionalBaseModelKeysForInsert,
|
|
16
|
-
} from 'liwi-
|
|
14
|
+
} from 'liwi-store';
|
|
17
15
|
import type {
|
|
18
16
|
Collection,
|
|
19
17
|
FindCursor,
|
|
@@ -258,7 +256,7 @@ export default class MongoStore<
|
|
|
258
256
|
: collection.countDocuments();
|
|
259
257
|
}
|
|
260
258
|
|
|
261
|
-
async cursor<Result = Model>(
|
|
259
|
+
async cursor<Result extends Partial<Model> = Model>(
|
|
262
260
|
filter?: Criteria<Model>,
|
|
263
261
|
sort?: Sort<Model>,
|
|
264
262
|
): Promise<MongoCursor<Model, Result, KeyValue>> {
|
package/rollup.config.mjs
DELETED