liwi-mongo 8.1.1 → 9.0.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/.eslintrc.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "root": true,
3
- "extends": ["@pob/eslint-config/root", "@pob/eslint-config-node"],
3
+ "extends": ["@pob/eslint-config/root-module"],
4
4
  "ignorePatterns": ["*.d.ts", "/dist"]
5
5
  }
package/CHANGELOG.md CHANGED
@@ -3,6 +3,51 @@
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.0.0](https://github.com/liwijs/liwi/compare/v8.3.1...v9.0.0) (2022-03-05)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * update meta when params change ([7c260a8](https://github.com/liwijs/liwi/commit/7c260a84cc8daae0113fbbf30f5a9e7ca921ee3e))
12
+
13
+
14
+ ### Features
15
+
16
+ * **deps:** update dependency mongodb to v4 ([#22](https://github.com/liwijs/liwi/issues/22)) ([cdf9204](https://github.com/liwijs/liwi/commit/cdf920461156e5dd6dceaf5bf26b24c206385634))
17
+ * refactor and use node 14 ([101c861](https://github.com/liwijs/liwi/commit/101c861063420fc5a83ff5a45322b9529962dcc2))
18
+
19
+
20
+ ### BREAKING CHANGES
21
+
22
+ * **deps:** cursor.count() is removed and replaced by store.count()
23
+ * requires node 14
24
+
25
+
26
+
27
+
28
+
29
+ ## [8.3.1](https://github.com/liwijs/liwi/compare/v8.3.0...v8.3.1) (2021-11-28)
30
+
31
+
32
+ ### Bug Fixes
33
+
34
+ * **liwi-mongo:** fix mingoQuery for MongoQuerySingleItem ([34c240f](https://github.com/liwijs/liwi/commit/34c240f5b8c2a4fa3f3190d634acb92ab5ea563c))
35
+
36
+
37
+
38
+
39
+
40
+ # [8.3.0](https://github.com/liwijs/liwi/compare/v8.2.1...v8.3.0) (2021-11-22)
41
+
42
+
43
+ ### Bug Fixes
44
+
45
+ * update pob-babel and bring back webpack 4 compat ([135caf3](https://github.com/liwijs/liwi/commit/135caf3c2d1693ae39d33e7527f16392720865a5))
46
+
47
+
48
+
49
+
50
+
6
51
  ## [8.1.1](https://github.com/liwijs/liwi/compare/v8.1.0...v8.1.1) (2021-03-28)
7
52
 
8
53
 
@@ -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;IA4BhD,OAAO,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAoDvC,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;IAIvC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAU7B"}
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;IA4BhD,OAAO,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAkDvC,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;IAIvC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAU7B"}
@@ -1,16 +1,15 @@
1
1
  import { AbstractStoreCursor } from 'liwi-store';
2
2
  import type { AllowedKeyValue } from 'liwi-types';
3
- import type { Cursor } from 'mongodb';
3
+ import type { FindCursor } from 'mongodb';
4
4
  import type { MongoBaseModel } from './MongoBaseModel';
5
5
  import type MongoStore from './MongoStore';
6
6
  export default class MongoCursor<Model extends MongoBaseModel<KeyValue>, Result extends Partial<Model> = Model, KeyValue extends AllowedKeyValue = Model['_id']> extends AbstractStoreCursor<MongoStore<Model, KeyValue>, KeyValue, Model, Result> {
7
7
  private readonly cursor;
8
8
  private _result?;
9
- constructor(store: MongoStore<Model, KeyValue>, cursor: Cursor);
9
+ constructor(store: MongoStore<Model, KeyValue>, cursor: FindCursor<Result>);
10
10
  advance(count: number): void;
11
- next(): Promise<any>;
11
+ next(): Promise<KeyValue | undefined>;
12
12
  limit(newLimit: number): Promise<this>;
13
- count(applySkipLimit?: boolean): Promise<number>;
14
13
  result(): Promise<Result>;
15
14
  close(): Promise<void>;
16
15
  toArray(): Promise<Result[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"MongoCursor.d.ts","sourceRoot":"","sources":["../src/MongoCursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,OAAO,OAAO,WAAW,CAC9B,KAAK,SAAS,cAAc,CAAC,QAAQ,CAAC,EACtC,MAAM,SAAS,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,EACrC,QAAQ,SAAS,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,CAC/C,SAAQ,mBAAmB,CAC3B,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,EAC3B,QAAQ,EACR,KAAK,EACL,MAAM,CACP;IAGC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,OAAO,CAAC,OAAO,CAAC,CAAS;gBAEb,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM;IAK9D,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI5B,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC;IAQpB,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtC,KAAK,CAAC,cAAc,UAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAI9C,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAKzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtB,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAG7B"}
1
+ {"version":3,"file":"MongoCursor.d.ts","sourceRoot":"","sources":["../src/MongoCursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,OAAO,OAAO,WAAW,CAC9B,KAAK,SAAS,cAAc,CAAC,QAAQ,CAAC,EACtC,MAAM,SAAS,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,EACrC,QAAQ,SAAS,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,CAC/C,SAAQ,mBAAmB,CAC3B,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,EAC3B,QAAQ,EACR,KAAK,EACL,MAAM,CACP;IAGC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAE5C,OAAO,CAAC,OAAO,CAAC,CAAgB;gBAEpB,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC;IAK1E,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI5B,IAAI,IAAI,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;IAQrC,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAKzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtB,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAG7B"}
@@ -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;AACtE,OAAO,KAAK,EAEV,YAAY,EACZ,WAAW,EACX,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,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;IAkB3E,UAAU,CACR,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,EAC7C,eAAe,EAAE,OAAO,GACvB,iBAAiB;YAoHN,iBAAiB;CAkBhC"}
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;AACtE,OAAO,KAAK,EAEV,YAAY,EACZ,WAAW,EACX,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,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"}
@@ -3,16 +3,14 @@ import { AbstractSubscribableStoreQuery } from 'liwi-subscribe-store';
3
3
  import type { QueryOptions, Transformer, AllowedKeyValue } from 'liwi-types';
4
4
  import type { MongoBaseModel, MongoInsertType, MongoKeyPath } from './MongoBaseModel';
5
5
  import type MongoStore from './MongoStore';
6
- interface TestCriteria {
7
- test: (obj: any) => boolean;
8
- }
6
+ declare type TestCriteria = (obj: any) => boolean;
9
7
  export default class MongoQuerySingleItem<Model extends MongoBaseModel<KeyValue>, Params extends QueryParams<Params> = never, Result extends Record<MongoKeyPath, KeyValue> | null = Model | null, KeyValue extends AllowedKeyValue = Model['_id']> extends AbstractSubscribableStoreQuery<MongoKeyPath, KeyValue, Model, MongoInsertType<Model, KeyValue>, Params, Result> {
10
8
  private readonly store;
11
9
  private readonly options;
12
- private mingoQuery?;
10
+ private testCriteria?;
13
11
  private readonly transformer;
14
12
  constructor(store: MongoStore<Model, KeyValue>, options: QueryOptions<Model>, transformer?: Transformer<Model, Result>);
15
- createMingoQuery(): TestCriteria;
13
+ createMingoTestCriteria(): TestCriteria;
16
14
  fetch<T>(onFulfilled: (result: QueryResult<Result>) => T): Promise<T>;
17
15
  _subscribe(callback: SubscribeCallback<KeyValue, Result>, _includeInitial: boolean): QuerySubscription;
18
16
  private createMongoCursor;
@@ -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;AACtE,OAAO,KAAK,EAEV,YAAY,EACZ,WAAW,EACX,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,YAAY,EACb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAS3C,UAAU,YAAY;IACpB,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CAC7B;AAED,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,UAAU,CAAC,CAAe;IAElC,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,gBAAgB,IAAI,YAAY;IAY1B,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"}
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;AACtE,OAAO,KAAK,EAEV,YAAY,EACZ,WAAW,EACX,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,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"}
@@ -15,23 +15,24 @@ export default class MongoStore<Model extends MongoBaseModel<KeyValue>, KeyValue
15
15
  readonly connection: MongoConnection;
16
16
  private _collection;
17
17
  constructor(connection: MongoConnection, collectionName: string);
18
- get collection(): Promise<Collection>;
18
+ get collection(): Promise<Collection<Model>>;
19
19
  createQuerySingleItem<Result extends Record<MongoKeyPath, KeyValue> = Model, Params extends QueryParams<Params> = never>(options: QueryOptions<Model>, transformer?: Transformer<Model, Result>): MongoQuerySingleItem<Model, Params, Result, KeyValue>;
20
20
  createQueryCollection<Item extends Record<MongoKeyPath, KeyValue> = Model, Params extends QueryParams<Params> = never>(options: QueryOptions<Model>, transformer?: Transformer<Model, Item>): MongoQueryCollection<Model, Params, Model['_id'], Item>;
21
21
  insertOne(object: MongoInsertType<Model>): Promise<Model>;
22
22
  replaceOne(object: Model): Promise<Model>;
23
- upsertOne<K extends Exclude<keyof Model, MongoKeyPath | OptionalBaseModelKeysForInsert>>(object: UpsertPartialObject<MongoKeyPath, KeyValue, Model, K>, setOnInsertPartialObject?: Pick<Model, K>): Promise<Model>;
24
- upsertOneWithInfo<K extends Exclude<keyof Model, MongoKeyPath | OptionalBaseModelKeysForInsert>>(object: UpsertPartialObject<MongoKeyPath, KeyValue, Model, K>, setOnInsertPartialObject?: Pick<Model, K>): Promise<MongoUpsertResult<KeyValue, Model>>;
23
+ upsertOne<K extends Exclude<keyof Model, MongoKeyPath | OptionalBaseModelKeysForInsert>>(object: UpsertPartialObject<MongoKeyPath, KeyValue, Model, K>, setOnInsertPartialObject?: Update<Model>['$setOnInsert']): Promise<Model>;
24
+ upsertOneWithInfo<K extends Exclude<keyof Model, MongoKeyPath | OptionalBaseModelKeysForInsert>>(object: UpsertPartialObject<MongoKeyPath, KeyValue, Model, K>, setOnInsertPartialObject?: Update<Model>['$setOnInsert']): Promise<MongoUpsertResult<KeyValue, Model>>;
25
25
  replaceSeveral(objects: Model[]): Promise<Model[]>;
26
- partialUpdateByKey(key: any, partialUpdate: Update<Model>, criteria?: Criteria<Model>): Promise<Model>;
26
+ partialUpdateByKey(key: KeyValue, partialUpdate: Update<Model>, criteria?: Criteria<Model>): Promise<Model>;
27
27
  partialUpdateOne(object: Model, partialUpdate: Update<Model>): Promise<Model>;
28
28
  partialUpdateMany(criteria: Criteria<Model>, partialUpdate: Update<Model>): Promise<void>;
29
- deleteByKey(key: any, criteria?: Criteria<Model>): Promise<void>;
29
+ deleteByKey(key: KeyValue, criteria?: Criteria<Model>): Promise<void>;
30
30
  deleteOne(object: Model): Promise<void>;
31
31
  deleteMany(selector: Criteria<Model>): Promise<void>;
32
- cursor<Result = Model>(criteria?: Criteria<Model>, sort?: Sort<Model>): Promise<MongoCursor<Model, Result, KeyValue>>;
33
- findByKey(key: any, criteria?: Criteria<Model>): Promise<Model | undefined>;
32
+ count(filter?: Criteria<Model>): Promise<number>;
33
+ cursor<Result = Model>(filter?: Criteria<Model>, sort?: Sort<Model>): Promise<MongoCursor<Model, Result, KeyValue>>;
34
+ findByKey(key: KeyValue, criteria?: Criteria<Model>): Promise<Model | undefined>;
34
35
  findAll(criteria?: Criteria<Model>, sort?: Sort<Model>): Promise<Model[]>;
35
- findOne(criteria: Criteria<Model>, sort?: Sort<Model>): Promise<Model | undefined>;
36
+ findOne(filter: Criteria<Model>, sort?: Sort<Model>): Promise<Model | undefined>;
36
37
  }
37
38
  //# sourceMappingURL=MongoStore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MongoStore.d.ts","sourceRoot":"","sources":["../src/MongoStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MongoStore.d.ts","sourceRoot":"","sources":["../src/MongoStore.ts"],"names":[],"mappings":"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"}
@@ -6,13 +6,12 @@ const mongodb = require('mongodb');
6
6
  const liwiStore = require('liwi-store');
7
7
  const liwiSubscribeStore = require('liwi-subscribe-store');
8
8
  const mingo = require('mingo');
9
- const Logger = require('nightingale-logger');
9
+ const nightingaleLogger = require('nightingale-logger');
10
10
 
11
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e['default'] : e; }
11
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e["default"] : e; }
12
12
 
13
13
  const mongodb__default = /*#__PURE__*/_interopDefaultLegacy(mongodb);
14
14
  const mingo__default = /*#__PURE__*/_interopDefaultLegacy(mingo);
15
- const Logger__default = /*#__PURE__*/_interopDefaultLegacy(Logger);
16
15
 
17
16
  class MongoCursor extends liwiStore.AbstractStoreCursor {
18
17
  // key in AbstractCursor
@@ -28,7 +27,7 @@ class MongoCursor extends liwiStore.AbstractStoreCursor {
28
27
  next() {
29
28
  return this.cursor.next().then(value => {
30
29
  this._result = value;
31
- this.key = value === null || value === void 0 ? void 0 : value._id;
30
+ this.key = value?._id;
32
31
  return this.key;
33
32
  });
34
33
  }
@@ -38,10 +37,6 @@ class MongoCursor extends liwiStore.AbstractStoreCursor {
38
37
  return Promise.resolve(this);
39
38
  }
40
39
 
41
- count(applySkipLimit = false) {
42
- return this.cursor.count(applySkipLimit);
43
- }
44
-
45
40
  result() {
46
41
  if (!this._result) throw new Error('Cannot call result() before next()');
47
42
  return Promise.resolve(this._result);
@@ -87,8 +82,7 @@ class MongoQueryCollection extends liwiSubscribeStore.AbstractSubscribableStoreQ
87
82
  }
88
83
 
89
84
  async fetch(onFulfilled) {
90
- const cursor = await this.createMongoCursor();
91
- const [result, count] = await Promise.all([cursor.toArray(), cursor.count()]);
85
+ const [result, count] = await Promise.all([this.createMongoCursor().then(cursor => cursor.toArray()), this.store.count()]);
92
86
  return onFulfilled({
93
87
  result: result.map(this.transformer),
94
88
  meta: {
@@ -155,22 +149,21 @@ class MongoQueryCollection extends liwiSubscribeStore.AbstractSubscribableStoreQ
155
149
  deleted,
156
150
  updated,
157
151
  inserted
158
- } = action.changes.reduce((acc, [prevObject, nextObject]) => {
152
+ } = {
153
+ deleted: [],
154
+ updated: [],
155
+ inserted: []
156
+ };
157
+ action.changes.forEach(([prevObject, nextObject]) => {
159
158
  if (testCriteria(prevObject)) {
160
159
  if (!testCriteria(nextObject)) {
161
- acc.deleted.push(prevObject[this.store.keyPath]);
160
+ deleted.push(prevObject[this.store.keyPath]);
162
161
  } else {
163
- acc.updated.push(this.transformer(nextObject));
162
+ updated.push(this.transformer(nextObject));
164
163
  }
165
164
  } else if (testCriteria(nextObject)) {
166
- acc.inserted.push(this.transformer(nextObject));
165
+ inserted.push(this.transformer(nextObject));
167
166
  }
168
-
169
- return acc;
170
- }, {
171
- deleted: [],
172
- updated: [],
173
- inserted: []
174
167
  });
175
168
 
176
169
  if (deleted.length > 0) {
@@ -256,18 +249,17 @@ class MongoQuerySingleItem extends liwiSubscribeStore.AbstractSubscribableStoreQ
256
249
  this.transformer = transformer;
257
250
  }
258
251
 
259
- createMingoQuery() {
260
- if (!this.mingoQuery) {
252
+ createMingoTestCriteria() {
253
+ if (!this.testCriteria) {
261
254
  if (!this.options.criteria) {
262
- return {
263
- test: () => true
264
- };
255
+ return () => true;
265
256
  }
266
257
 
267
- this.mingoQuery = new mingo__default.Query(this.options.criteria);
258
+ const mingoQuery = new mingo__default.Query(this.options.criteria);
259
+ this.testCriteria = mingoQuery.test.bind(mingoQuery);
268
260
  }
269
261
 
270
- return this.mingoQuery;
262
+ return this.testCriteria;
271
263
  }
272
264
 
273
265
  async fetch(onFulfilled) {
@@ -290,7 +282,7 @@ class MongoQuerySingleItem extends liwiSubscribeStore.AbstractSubscribableStoreQ
290
282
 
291
283
  _subscribe(callback, _includeInitial) {
292
284
  const store = super.getSubscribeStore();
293
- const mingoQuery = this.createMingoQuery();
285
+ const testCriteria = this.createMingoTestCriteria();
294
286
  const promise = _includeInitial ? this.fetch(({
295
287
  result,
296
288
  meta,
@@ -309,7 +301,7 @@ class MongoQuerySingleItem extends liwiSubscribeStore.AbstractSubscribableStoreQ
309
301
  switch (action.type) {
310
302
  case 'inserted':
311
303
  {
312
- const filtered = action.next.filter(mingoQuery.test);
304
+ const filtered = action.next.filter(testCriteria);
313
305
 
314
306
  if (filtered.length > 0) {
315
307
  changes.push({
@@ -323,7 +315,7 @@ class MongoQuerySingleItem extends liwiSubscribeStore.AbstractSubscribableStoreQ
323
315
 
324
316
  case 'deleted':
325
317
  {
326
- const filtered = action.prev.filter(mingoQuery.test);
318
+ const filtered = action.prev.filter(testCriteria);
327
319
 
328
320
  if (filtered.length > 0) {
329
321
  changes.push({
@@ -337,7 +329,7 @@ class MongoQuerySingleItem extends liwiSubscribeStore.AbstractSubscribableStoreQ
337
329
 
338
330
  case 'updated':
339
331
  {
340
- const filtered = action.changes.filter(([prev, next]) => mingoQuery.test(prev));
332
+ const filtered = action.changes.filter(([prev, next]) => testCriteria(prev));
341
333
 
342
334
  if (filtered.length > 0) {
343
335
  if (this.options.sort) {
@@ -354,7 +346,7 @@ class MongoQuerySingleItem extends liwiSubscribeStore.AbstractSubscribableStoreQ
354
346
  const [, next] = filtered[0];
355
347
  changes.push({
356
348
  type: 'updated',
357
- result: mingoQuery.test(next) ? this.transformer(next) : null
349
+ result: testCriteria(next) ? this.transformer(next) : null
358
350
  });
359
351
  }
360
352
  } else if (filtered.length === 0) ;
@@ -390,8 +382,9 @@ class MongoQuerySingleItem extends liwiSubscribeStore.AbstractSubscribableStoreQ
390
382
 
391
383
  /* eslint-disable max-lines */
392
384
  class MongoStore {
385
+ keyPath = '_id';
386
+
393
387
  constructor(connection, collectionName) {
394
- this.keyPath = '_id';
395
388
  this.connection = connection;
396
389
 
397
390
  if (!collectionName) {
@@ -425,17 +418,18 @@ class MongoStore {
425
418
 
426
419
  async insertOne(object) {
427
420
  if (!object._id) {
428
- object._id = new mongodb__default.ObjectID().toString();
421
+ object._id = new mongodb__default.ObjectId().toString();
429
422
  }
430
423
 
431
424
  if (!object.created) object.created = new Date();
432
425
  if (!object.updated) object.updated = new Date();
433
426
  const collection = await this.collection;
434
427
  const {
435
- result
436
- } = await collection.insertOne(object);
428
+ acknowledged: isAcknowledged
429
+ } = await collection.insertOne( // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
430
+ object);
437
431
 
438
- if (!result.ok || result.n !== 1) {
432
+ if (!isAcknowledged) {
439
433
  throw new Error('Fail to insert');
440
434
  }
441
435
 
@@ -502,7 +496,7 @@ class MongoStore {
502
496
  ...criteria
503
497
  }, partialUpdate);
504
498
 
505
- if (!commandResult.result.ok) {
499
+ if (!commandResult.acknowledged) {
506
500
  console.error(commandResult);
507
501
  throw new Error('Update failed');
508
502
  }
@@ -516,7 +510,8 @@ class MongoStore {
516
510
  }
517
511
 
518
512
  partialUpdateMany(criteria, partialUpdate) {
519
- return this.collection.then(collection => collection.updateMany(criteria, partialUpdate)).then(() => undefined); // TODO return updated object
513
+ return this.collection.then(collection => // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
514
+ collection.updateMany(criteria, partialUpdate)).then(() => undefined); // TODO return updated object
520
515
  }
521
516
 
522
517
  deleteByKey(key, criteria) {
@@ -534,28 +529,42 @@ class MongoStore {
534
529
  return this.collection.then(collection => collection.deleteMany(selector)).then(() => undefined);
535
530
  }
536
531
 
537
- cursor(criteria, sort) {
538
- return this.collection.then(collection => collection.find(criteria)).then(sort && (cursor => cursor.sort(sort))).then(cursor => new MongoCursor(this, cursor));
532
+ async count(filter) {
533
+ const collection = await this.collection;
534
+ return filter ? collection.countDocuments(filter) : collection.countDocuments();
539
535
  }
540
536
 
541
- findByKey(key, criteria) {
542
- return this.collection.then(collection => collection.findOne({
537
+ async cursor(filter, sort) {
538
+ const collection = await this.collection;
539
+ const findCursor = filter ? collection.find(filter) : collection.find();
540
+ if (sort) findCursor.sort(sort);
541
+ return new MongoCursor(this, findCursor);
542
+ }
543
+
544
+ async findByKey(key, criteria) {
545
+ const collection = await this.collection;
546
+ const result = await collection.findOne({
543
547
  _id: key,
544
548
  ...criteria
545
- })).then(result => result || undefined);
549
+ });
550
+ return result || undefined;
546
551
  }
547
552
 
548
553
  findAll(criteria, sort) {
549
554
  return this.cursor(criteria, sort).then(cursor => cursor.toArray());
550
555
  }
551
556
 
552
- findOne(criteria, sort) {
553
- return this.collection.then(collection => collection.find(criteria)).then(sort && (cursor => cursor.sort(sort))).then(cursor => cursor.limit(1).next());
557
+ async findOne(filter, sort) {
558
+ const collection = await this.collection;
559
+ const result = await collection.findOne(filter, {
560
+ sort
561
+ });
562
+ return result || undefined;
554
563
  }
555
564
 
556
565
  }
557
566
 
558
- const logger = new Logger__default('liwi:mongo:MongoConnection');
567
+ const logger = new nightingaleLogger.Logger('liwi:mongo:MongoConnection');
559
568
  class MongoConnection extends liwiStore.AbstractConnection {
560
569
  // TODO interface
561
570
  constructor(config) {
@@ -581,9 +590,7 @@ class MongoConnection extends liwiStore.AbstractConnection {
581
590
  logger.info('connecting', {
582
591
  connectionString
583
592
  });
584
- const connectPromise = mongodb__default.MongoClient.connect(connectionString, {
585
- useNewUrlParser: true
586
- }).then(connection => {
593
+ const connectPromise = mongodb__default.MongoClient.connect(connectionString).then(connection => {
587
594
  logger.info('connected', {
588
595
  connectionString
589
596
  });
@@ -670,4 +677,4 @@ function createMongoSubscribeStore(mongoStore) {
670
677
  exports.MongoConnection = MongoConnection;
671
678
  exports.MongoStore = MongoStore;
672
679
  exports.createMongoSubscribeStore = createMongoSubscribeStore;
673
- //# sourceMappingURL=index-node12-dev.cjs.js.map
680
+ //# sourceMappingURL=index-node14.cjs.map
@@ -0,0 +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":";;;;;;;;;;;;;;;AAMe,MAAMA,WAAN,SAILC,6BAJK,CASb;AACA;AAMAC,EAAAA,WAAW,CAACC,KAAD,EAAqCC,MAArC,EAAiE;AAC1E,UAAMD,KAAN;AACA,SAAKC,MAAL,GAAcA,MAAd;AACD;;AAEDC,EAAAA,OAAO,CAACC,KAAD,EAAsB;AAC3B,SAAKF,MAAL,CAAYG,IAAZ,CAAiBD,KAAjB;AACD;;AAEDE,EAAAA,IAAI,GAAkC;AACpC,WAAO,KAAKJ,MAAL,CAAYI,IAAZ,GAAmBC,IAAnB,CAAyBC,KAAD,IAAW;AACxC,WAAKC,OAAL,GAAeD,KAAf;AACA,WAAKE,GAAL,GAAWF,KAAK,EAAEG,GAAlB;AACA,aAAO,KAAKD,GAAZ;AACD,KAJM,CAAP;AAKD;;AAEDE,EAAAA,KAAK,CAACC,QAAD,EAAkC;AACrC,SAAKX,MAAL,CAAYU,KAAZ,CAAkBC,QAAlB;AACA,WAAOC,OAAO,CAACC,OAAR,CAAgB,IAAhB,CAAP;AACD;;AAEDC,EAAAA,MAAM,GAAoB;AACxB,QAAI,CAAC,KAAKP,OAAV,EAAmB,MAAM,IAAIQ,KAAJ,CAAU,oCAAV,CAAN;AACnB,WAAOH,OAAO,CAACC,OAAR,CAAgB,KAAKN,OAArB,CAAP;AACD;;AAEDS,EAAAA,KAAK,GAAkB;AACrB,QAAI,KAAKhB,MAAT,EAAiB;AACf,WAAKA,MAAL,CAAYgB,KAAZ;AACD;;AAED,WAAOJ,OAAO,CAACC,OAAR,EAAP;AACD;;AAEDI,EAAAA,OAAO,GAAsB;AAC3B,WAAO,KAAKjB,MAAL,CAAYiB,OAAZ,EAAP;AACD;;AA5CD;;ACfF;;AAwBA,MAAMC,qBAAmB,GAIvBC,KAJ0B,IAKVA,KALlB;;AASe,MAAMC,oBAAN,SAKLC,iDALK,CAYb;AASAvB,EAAAA,WAAW,CACTC,KADS,EAETuB,OAFS,EAGTC,WAAqC,GAAGL,qBAH/B,EAIT;AACA;AACA,SAAKnB,KAAL,GAAaA,KAAb;AACA,SAAKuB,OAAL,GAAeA,OAAf;AACA,SAAKC,WAAL,GAAmBA,WAAnB;AACD;;AAEDC,EAAAA,kBAAkB,GAAiB;AACjC,QAAI,CAAC,KAAKC,YAAV,EAAwB;AACtB,UAAI,CAAC,KAAKH,OAAL,CAAaI,QAAlB,EAA4B;AAC1B,eAAO,MAAM,IAAb;AACD;;AAED,YAAMC,UAAU,GAAG,IAAIC,cAAK,CAACC,KAAV,CAAgB,KAAKP,OAAL,CAAaI,QAA7B,CAAnB;AACA,WAAKD,YAAL,GAAoBE,UAAU,CAACG,IAAX,CAAgBC,IAAhB,CAAqBJ,UAArB,CAApB;AACD;;AACD,WAAO,KAAKF,YAAZ;AACD;;AAEU,QAALO,KAAK,CAAIC,WAAJ,EAAiE;AAC1E,UAAM,CAACnB,MAAD,EAASZ,KAAT,IAAkB,MAAMU,OAAO,CAACsB,GAAR,CAAY,CACxC,KAAKC,iBAAL,GAAyB9B,IAAzB,CAA+BL,MAAD,IAAYA,MAAM,CAACiB,OAAP,EAA1C,CADwC,EAExC,KAAKlB,KAAL,CAAWG,KAAX,EAFwC,CAAZ,CAA9B;AAKA,WAAO+B,WAAW,CAAC;AACjBnB,MAAAA,MAAM,EAAEA,MAAM,CAACsB,GAAP,CAAW,KAAKb,WAAhB,CADS;AAEjBc,MAAAA,IAAI,EAAE;AAAEC,QAAAA,KAAK,EAAEpC;AAAT,OAFW;AAGjBqC,MAAAA,IAAI,EAAE;AACJC,QAAAA,IAAI,EAAE,KAAKlB,OAAL,CAAakB,IADf;AAEJ9B,QAAAA,KAAK,EAAE,KAAKY,OAAL,CAAaZ,KAFhB;AAGJ+B,QAAAA,OAAO,EAAE,KAAK1C,KAAL,CAAW0C;AAHhB;AAHW,KAAD,CAAlB;AASD;;AAEDC,EAAAA,UAAU,CACRC,QADQ,EAERC,eAFQ,EAGW;AACnB,UAAM7C,KAAK,GAAG,MAAM8C,iBAAN,EAAd;AACA,UAAMpB,YAA0B,GAAG,KAAKD,kBAAL,EAAnC;AAEA,UAAMsB,OAAsB,GAAGF,eAAe,GAC1C,KAAKZ,KAAL,CAAW,CAAC;AAAElB,MAAAA,MAAF;AAAUuB,MAAAA,IAAV;AAAgBE,MAAAA;AAAhB,KAAD,KAAiD;AAC1DI,MAAAA,QAAQ,CAAC,IAAD,EAAO,CACb;AACEI,QAAAA,IAAI,EAAE,SADR;AAEEC,QAAAA,OAAO,EAAElC,MAFX;AAGEmC,QAAAA,SAAS,EAAEV,IAHb;AAIEF,QAAAA;AAJF,OADa,CAAP,CAAR;AAQD,KATD,CAD0C,GAW1CzB,OAAO,CAACC,OAAR,EAXJ;AAaA,UAAMqC,WAAW,GAAGnD,KAAK,CAACoD,SAAN,CAAiBC,MAAD,IAA4B;AAC9D,YAAMC,OAAkC,GAAG,EAA3C;;AACA,cAAQD,MAAM,CAACL,IAAf;AACE,aAAK,UAAL;AAAiB;AACf,kBAAMO,QAAQ,GAAGF,MAAM,CAAChD,IAAP,CAAYmD,MAAZ,CAAmB9B,YAAnB,CAAjB;;AACA,gBAAI6B,QAAQ,CAACE,MAAT,GAAkB,CAAtB,EAAyB;AACvBH,cAAAA,OAAO,CAACI,IAAR,CAAa;AACXV,gBAAAA,IAAI,EAAE,UADK;AAEXjC,gBAAAA,MAAM,EAAEwC,QAAQ,CAAClB,GAAT,CAAa,KAAKb,WAAlB;AAFG,eAAb;AAID;;AACD;AACD;;AACD,aAAK,SAAL;AAAgB;AACd,kBAAM+B,QAAQ,GAAGF,MAAM,CAACM,IAAP,CAAYH,MAAZ,CAAmB9B,YAAnB,CAAjB;;AACA,gBAAI6B,QAAQ,CAACE,MAAT,GAAkB,CAAtB,EAAyB;AACvBH,cAAAA,OAAO,CAACI,IAAR,CAAa;AACXV,gBAAAA,IAAI,EAAE,SADK;AAEXY,gBAAAA,IAAI,EAAEL,QAAQ,CAAClB,GAAT,CAAcwB,MAAD,IAAYA,MAAM,CAAC,KAAK7D,KAAL,CAAW0C,OAAZ,CAA/B;AAFK,eAAb;AAID;;AACD;AACD;;AACD,aAAK,SAAL;AAAgB;AACd,kBAAM;AACJoB,cAAAA,OADI;AAEJC,cAAAA,OAFI;AAGJC,cAAAA;AAHI,gBAQF;AAAEF,cAAAA,OAAO,EAAE,EAAX;AAAeC,cAAAA,OAAO,EAAE,EAAxB;AAA4BC,cAAAA,QAAQ,EAAE;AAAtC,aARJ;AAUAX,YAAAA,MAAM,CAACC,OAAP,CAAeW,OAAf,CAAuB,CAAC,CAACC,UAAD,EAAaC,UAAb,CAAD,KAA8C;AACnE,kBAAIzC,YAAY,CAACwC,UAAD,CAAhB,EAA8B;AAC5B,oBAAI,CAACxC,YAAY,CAACyC,UAAD,CAAjB,EAA+B;AAC7BL,kBAAAA,OAAO,CAACJ,IAAR,CAAaQ,UAAU,CAAC,KAAKlE,KAAL,CAAW0C,OAAZ,CAAvB;AACD,iBAFD,MAEO;AACLqB,kBAAAA,OAAO,CAACL,IAAR,CAAa,KAAKlC,WAAL,CAAiB2C,UAAjB,CAAb;AACD;AACF,eAND,MAMO,IAAIzC,YAAY,CAACyC,UAAD,CAAhB,EAA8B;AACnCH,gBAAAA,QAAQ,CAACN,IAAT,CAAc,KAAKlC,WAAL,CAAiB2C,UAAjB,CAAd;AACD;AACF,aAVD;;AAYA,gBAAIL,OAAO,CAACL,MAAR,GAAiB,CAArB,EAAwB;AACtBH,cAAAA,OAAO,CAACI,IAAR,CAAa;AAAEV,gBAAAA,IAAI,EAAE,SAAR;AAAmBY,gBAAAA,IAAI,EAAEE;AAAzB,eAAb;AACD;;AACD,gBAAIC,OAAO,CAACN,MAAR,GAAiB,CAArB,EAAwB;AACtBH,cAAAA,OAAO,CAACI,IAAR,CAAa;AAAEV,gBAAAA,IAAI,EAAE,SAAR;AAAmBjC,gBAAAA,MAAM,EAAEgD;AAA3B,eAAb;AACD;;AACD,gBAAIC,QAAQ,CAACP,MAAT,GAAkB,CAAtB,EAAyB;AACvBH,cAAAA,OAAO,CAACI,IAAR,CAAa;AAAEV,gBAAAA,IAAI,EAAE,UAAR;AAAoBjC,gBAAAA,MAAM,EAAEiD;AAA5B,eAAb;AACD;;AAED;AACD;;AACD;AACE,gBAAM,IAAIhD,KAAJ,CAAU,kBAAV,CAAN;AAzDJ;;AA4DA,UAAIsC,OAAO,CAACG,MAAR,KAAmB,CAAvB,EAA0B;AAE1Bb,MAAAA,QAAQ,CAAC,IAAD,EAAOU,OAAP,CAAR;AACD,KAjEmB,CAApB,CAjBmB;AAoFnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAO;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;AANhB,KAAP;AAQD;;AAE8B,QAAjBlC,iBAAiB,GAE7B;AACA,UAAMnC,MAAM,GAAG,MAAM,KAAKD,KAAL,CAAWC,MAAX,CACnB,KAAKsB,OAAL,CAAaI,QADM,EAEnB,KAAKJ,OAAL,CAAakB,IAFM,CAArB;;AAKA,QAAI,KAAKlB,OAAL,CAAanB,IAAjB,EAAuB;AACrBH,MAAAA,MAAM,CAACC,OAAP,CAAe,KAAKqB,OAAL,CAAanB,IAA5B;AACD;;AAED,QAAI,KAAKmB,OAAL,CAAaZ,KAAjB,EAAwB;AACtB,YAAMV,MAAM,CAACU,KAAP,CAAa,KAAKY,OAAL,CAAaZ,KAA1B,CAAN;AACD;;AAED,WAAOV,MAAP;AACD;;AAtLD;;ACtBF,MAAMkB,mBAAmB,GAIvBC,KAJ0B,IAKVA,KALlB;;AASe,MAAMmD,oBAAN,SAKLjD,iDALK,CAYb;AASAvB,EAAAA,WAAW,CACTC,KADS,EAETuB,OAFS,EAGTC,WAAuC,GAAGL,mBAHjC,EAIT;AACA;AACA,SAAKnB,KAAL,GAAaA,KAAb;AACA,SAAKuB,OAAL,GAAeA,OAAf;AACA,SAAKC,WAAL,GAAmBA,WAAnB;AACD;;AAEDgD,EAAAA,uBAAuB,GAAiB;AACtC,QAAI,CAAC,KAAK9C,YAAV,EAAwB;AACtB,UAAI,CAAC,KAAKH,OAAL,CAAaI,QAAlB,EAA4B;AAC1B,eAAO,MAAM,IAAb;AACD;;AAED,YAAMC,UAAU,GAAG,IAAIC,cAAK,CAACC,KAAV,CAAgB,KAAKP,OAAL,CAAaI,QAA7B,CAAnB;AACA,WAAKD,YAAL,GAAoBE,UAAU,CAACG,IAAX,CAAgBC,IAAhB,CAAqBJ,UAArB,CAApB;AACD;;AAED,WAAO,KAAKF,YAAZ;AACD;;AAEU,QAALO,KAAK,CAAIC,WAAJ,EAAiE;AAC1E,UAAMjC,MAAM,GAAG,MAAM,KAAKmC,iBAAL,EAArB;AACA,UAAMnC,MAAM,CAACU,KAAP,CAAa,CAAb,CAAN;AACA,WAAOV,MAAM,CAACiB,OAAP,GAAiBZ,IAAjB,CAAuBS,MAAD,IAAqB;AAChD,YAAM0D,IAAY,GAChB1D,MAAM,CAAC0C,MAAP,KAAkB,CAAlB,GAAuB,IAAvB,GAAyC,KAAKjC,WAAL,CAAiBT,MAAM,CAAC,CAAD,CAAvB,CAD3C;AAEA,aAAOmB,WAAW,CAAC;AACjBnB,QAAAA,MAAM,EAAE0D,IADS;AAEjBnC,QAAAA,IAAI,EAAE;AAAEC,UAAAA,KAAK,EAAExB,MAAM,KAAK,IAAX,GAAkB,CAAlB,GAAsB;AAA/B,SAFW;AAGjByB,QAAAA,IAAI,EAAE;AACJ7B,UAAAA,KAAK,EAAE,CADH;AAEJ+B,UAAAA,OAAO,EAAE,KAAK1C,KAAL,CAAW0C;AAFhB;AAHW,OAAD,CAAlB;AAQD,KAXM,CAAP;AAYD;;AAEDC,EAAAA,UAAU,CACRC,QADQ,EAERC,eAFQ,EAGW;AACnB,UAAM7C,KAAK,GAAG,MAAM8C,iBAAN,EAAd;AACA,UAAMpB,YAA0B,GAAG,KAAK8C,uBAAL,EAAnC;AAEA,UAAMzB,OAAsB,GAAGF,eAAe,GAC1C,KAAKZ,KAAL,CAAW,CAAC;AAAElB,MAAAA,MAAF;AAAUuB,MAAAA,IAAV;AAAgBE,MAAAA;AAAhB,KAAD,KAAiD;AAC1DI,MAAAA,QAAQ,CAAC,IAAD,EAAO,CACb;AACEI,QAAAA,IAAI,EAAE,SADR;AAEEC,QAAAA,OAAO,EAAElC,MAFX;AAGEmC,QAAAA,SAAS,EAAEV,IAHb;AAIEF,QAAAA;AAJF,OADa,CAAP,CAAR;AAQD,KATD,CAD0C,GAW1CzB,OAAO,CAACC,OAAR,EAXJ;AAaA,UAAMqC,WAAW,GAAGnD,KAAK,CAACoD,SAAN,CAAgB,MAAOC,MAAP,IAAkC;AACpE,YAAMC,OAAkC,GAAG,EAA3C;;AACA,cAAQD,MAAM,CAACL,IAAf;AACE,aAAK,UAAL;AAAiB;AACf,kBAAMO,QAAQ,GAAGF,MAAM,CAAChD,IAAP,CAAYmD,MAAZ,CAAmB9B,YAAnB,CAAjB;;AACA,gBAAI6B,QAAQ,CAACE,MAAT,GAAkB,CAAtB,EAAyB;AACvBH,cAAAA,OAAO,CAACI,IAAR,CAAa;AACXV,gBAAAA,IAAI,EAAE,SADK;AAEXjC,gBAAAA,MAAM,EAAE,KAAKS,WAAL,CAAiB+B,QAAQ,CAAC,CAAD,CAAzB;AAFG,eAAb;AAID;;AACD;AACD;;AACD,aAAK,SAAL;AAAgB;AACd,kBAAMA,QAAQ,GAAGF,MAAM,CAACM,IAAP,CAAYH,MAAZ,CAAmB9B,YAAnB,CAAjB;;AACA,gBAAI6B,QAAQ,CAACE,MAAT,GAAkB,CAAtB,EAAyB;AACvBH,cAAAA,OAAO,CAACI,IAAR,CAAa;AACXV,gBAAAA,IAAI,EAAE,SADK;AAEXY,gBAAAA,IAAI,EAAEL,QAAQ,CAAClB,GAAT,CAAcwB,MAAD,IAAYA,MAAM,CAAC,KAAK7D,KAAL,CAAW0C,OAAZ,CAA/B;AAFK,eAAb;AAID;;AACD;AACD;;AACD,aAAK,SAAL;AAAgB;AACd,kBAAMa,QAAQ,GAAGF,MAAM,CAACC,OAAP,CAAeE,MAAf,CAAsB,CAAC,CAACG,IAAD,EAAOtD,IAAP,CAAD,KACrCqB,YAAY,CAACiC,IAAD,CADG,CAAjB;;AAGA,gBAAIJ,QAAQ,CAACE,MAAT,GAAkB,CAAtB,EAAyB;AACvB,kBAAI,KAAKlC,OAAL,CAAakB,IAAjB,EAAuB;AACrB,sBAAM;AAAE1B,kBAAAA;AAAF,oBAAa,MAAM,KAAKkB,KAAL,CAAYyC,GAAD,IAASA,GAApB,CAAzB;AACApB,gBAAAA,OAAO,CAACI,IAAR,CAAa;AACXV,kBAAAA,IAAI,EAAE,SADK;AAEXjC,kBAAAA;AAFW,iBAAb;AAID,eAND,MAMO,IAAIwC,QAAQ,CAACE,MAAT,KAAoB,CAAxB,EAA2B;AAChC,sBAAM,IAAIzC,KAAJ,CACJ,uEADI,CAAN;AAGD,eAJM,MAIA;AACL,sBAAM,GAAGX,IAAH,IAAWkD,QAAQ,CAAC,CAAD,CAAzB;AACAD,gBAAAA,OAAO,CAACI,IAAR,CAAa;AACXV,kBAAAA,IAAI,EAAE,SADK;AAEXjC,kBAAAA,MAAM,EAAEW,YAAY,CAACrB,IAAD,CAAZ,GAAqB,KAAKmB,WAAL,CAAiBnB,IAAjB,CAArB,GAA8C;AAF3C,iBAAb;AAID;AACF,aAlBD,MAkBO,IAAIkD,QAAQ,CAACE,MAAT,KAAoB,CAAxB,EAA2B;;AAElC;AACD;;AACD;AACE,gBAAM,IAAIzC,KAAJ,CAAU,kBAAV,CAAN;AAhDJ;;AAmDA,UAAIsC,OAAO,CAACG,MAAR,KAAmB,CAAvB,EAA0B;AAE1Bb,MAAAA,QAAQ,CAAC,IAAD,EAAOU,OAAP,CAAR;AACD,KAxDmB,CAApB;AA0DA,WAAO;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;AANhB,KAAP;AAQD;;AAE8B,QAAjBlC,iBAAiB,GAE7B;AACA,UAAMnC,MAAM,GAAG,MAAM,KAAKD,KAAL,CAAWC,MAAX,CACnB,KAAKsB,OAAL,CAAaI,QADM,EAEnB,KAAKJ,OAAL,CAAakB,IAFM,CAArB;;AAKA,QAAI,KAAKlB,OAAL,CAAaZ,KAAjB,EAAwB;AACtB,YAAMV,MAAM,CAACU,KAAP,CAAa,KAAKY,OAAL,CAAaZ,KAA1B,CAAN;AACD;;AAED,WAAOV,MAAP;AACD;;AAvJD;;AC5CF;AAyCe,MAAM0E,UAAN,CAWf;AACWjC,EAAAA,OAAO,GAAiB,KAAjB;;AAMhB3C,EAAAA,WAAW,CAAC6E,UAAD,EAA8BC,cAA9B,EAAsD;AAC/D,SAAKD,UAAL,GAAkBA,UAAlB;;AAEA,QAAI,CAACC,cAAL,EAAqB;AACnB,YAAM,IAAI7D,KAAJ,CAAW,4BAA2B6D,cAAe,GAArD,CAAN;AACD;;AAED,SAAKC,WAAL,GAAmBF,UAAU,CAACG,aAAX,GAA2BzE,IAA3B,CAChB0E,MAAD,IAAyB;AACvB,WAAKF,WAAL,GAAmBE,MAAM,CAACC,EAAP,GAAYC,UAAZ,CAAuBL,cAAvB,CAAnB;AACA,aAAO,KAAKC,WAAZ;AACD,KAJgB,EAKhBK,GAAD,IAAc;AACZ,WAAKL,WAAL,GAAmBjE,OAAO,CAACuE,MAAR,CAAeD,GAAf,CAAnB;AACA,aAAO,KAAKL,WAAZ;AACD,KARgB,CAAnB;AAUD;;AAEa,MAAVI,UAAU,GAA+B;AAC3C,QAAI,KAAKN,UAAL,CAAgBS,gBAApB,EAAsC;AACpC,aAAOxE,OAAO,CAACuE,MAAR,CAAe,IAAIpE,KAAJ,CAAU,2BAAV,CAAf,CAAP;AACD;;AAED,WAAOH,OAAO,CAACC,OAAR,CAAgB,KAAKgE,WAArB,CAAP;AACD;;AAEDQ,EAAAA,qBAAqB,CAInB/D,OAJmB,EAKnBC,WALmB,EAMoC;AACvD,WAAO,IAAI+C,oBAAJ,CACL,IADK,EAELhD,OAFK,EAGLC,WAHK,CAAP;AAKD;;AAED+D,EAAAA,qBAAqB,CAInBhE,OAJmB,EAKnBC,WALmB,EAMsC;AACzD,WAAO,IAAIH,oBAAJ,CACL,IADK,EAELE,OAFK,EAGLC,WAHK,CAAP;AAKD;;AAEc,QAATgE,SAAS,CAAC3B,MAAD,EAAiD;AAC9D,QAAI,CAACA,MAAM,CAACnD,GAAZ,EAAiB;AACfmD,MAAAA,MAAM,CAACnD,GAAP,GAAa,IAAI+E,gBAAO,CAACC,QAAZ,GAAuBC,QAAvB,EAAb;AACD;;AAED,QAAI,CAAC9B,MAAM,CAAC+B,OAAZ,EAAqB/B,MAAM,CAAC+B,OAAP,GAAiB,IAAIC,IAAJ,EAAjB;AACrB,QAAI,CAAChC,MAAM,CAACE,OAAZ,EAAqBF,MAAM,CAACE,OAAP,GAAiB,IAAI8B,IAAJ,EAAjB;AAErB,UAAMX,UAAU,GAAG,MAAM,KAAKA,UAA9B;AACA,UAAM;AAAEY,MAAAA,YAAY,EAAEC;AAAhB,QAAmC,MAAMb,UAAU,CAACM,SAAX;AAE7C3B,IAAAA,MAF6C,CAA/C;;AAIA,QAAI,CAACkC,cAAL,EAAqB;AACnB,YAAM,IAAI/E,KAAJ,CAAU,gBAAV,CAAN;AACD;;AAED,WAAO6C,MAAP;AACD;;AAEe,QAAVmC,UAAU,CAACnC,MAAD,EAAgC;AAC9C,QAAI,CAACA,MAAM,CAACE,OAAZ,EAAqBF,MAAM,CAACE,OAAP,GAAiB,IAAI8B,IAAJ,EAAjB;AAErB,UAAMX,UAAU,GAAG,MAAM,KAAKA,UAA9B;AACA,UAAMA,UAAU,CAACc,UAAX,CAAsB;AAAEtF,MAAAA,GAAG,EAAEmD,MAAM,CAACnD;AAAd,KAAtB,EAA8DmD,MAA9D,CAAN;AACA,WAAOA,MAAP;AACD;;AAEc,QAAToC,SAAS,CAMbpC,MANa,EAObqC,wBAPa,EAQG;AAChB,UAAMnF,MAAM,GAAG,MAAM,KAAKoF,iBAAL,CACnBtC,MADmB,EAEnBqC,wBAFmB,CAArB;AAIA,WAAOnF,MAAM,CAAC8C,MAAd;AACD;;AAEsB,QAAjBsC,iBAAiB,CAMrBtC,MANqB,EAOrBqC,wBAPqB,EAQwB;AAC7C,UAAME,YAAY,GAAG;AACnBR,MAAAA,OAAO,EAAE/B,MAAM,CAAC+B,OAAP,IAAkB,IAAIC,IAAJ,EADR;AAEnB,SAAGK;AAFgB,KAArB;;AAKA,QAAI,CAACrC,MAAM,CAACE,OAAZ,EAAqB;AAClBF,MAAAA,MAAD,CAA2BE,OAA3B,GAAqC,IAAI8B,IAAJ,EAArC;AACD;;AAED,UAAMQ,IAA4B,GAAG,EAAE,GAAGxC;AAAL,KAArC;AACA,WAAOwC,IAAI,CAACT,OAAZ;AAEA,UAAMV,UAAU,GAAG,MAAM,KAAKA,UAA9B;AAEA,UAAM;AAAEoB,MAAAA;AAAF,QAAoB,MAAMpB,UAAU,CAACqB,SAAX,CAC9B;AAAE7F,MAAAA,GAAG,EAAEmD,MAAM,CAACnD;AAAd,KAD8B,EAE9B;AAAE2F,MAAAA,IAAF;AAAQD,MAAAA;AAAR,KAF8B,EAG9B;AAAEI,MAAAA,MAAM,EAAE;AAAV,KAH8B,CAAhC;;AAMA,QAAIF,aAAJ,EAAmB;AACjBG,MAAAA,MAAM,CAACC,MAAP,CAAc7C,MAAd,EAAsBuC,YAAtB;AACD;;AAED,WAAO;AAAEvC,MAAAA,MAAM,EAAEA,MAAV;AAAsCG,MAAAA,QAAQ,EAAE,CAAC,CAACsC;AAAlD,KAAP;AACD;;AAEDK,EAAAA,cAAc,CAACC,OAAD,EAAqC;AACjD,WAAO/F,OAAO,CAACsB,GAAR,CAAYyE,OAAO,CAACvE,GAAR,CAAawB,MAAD,IAAmB,KAAKmC,UAAL,CAAgBnC,MAAhB,CAA/B,CAAZ,CAAP;AACD;;AAEuB,QAAlBgD,kBAAkB,CACtBpG,GADsB,EAEtBqG,aAFsB,EAGtBnF,QAHsB,EAIN;AAChB,UAAMuD,UAAU,GAAG,MAAM,KAAKA,UAA9B;AACA,UAAM6B,aAAa,GAAG,MAAM7B,UAAU,CAACqB,SAAX,CAC1B;AAAE7F,MAAAA,GAAG,EAAED,GAAP;AAAY,SAAGkB;AAAf,KAD0B,EAE1BmF,aAF0B,CAA5B;;AAIA,QAAI,CAACC,aAAa,CAACjB,YAAnB,EAAiC;AAC/BkB,MAAAA,OAAO,CAACC,KAAR,CAAcF,aAAd;AACA,YAAM,IAAI/F,KAAJ,CAAU,eAAV,CAAN;AACD;;AACD,UAAM6C,MAAM,GAAG,MAAM,KAAKqD,SAAL,CAAezG,GAAf,CAArB;AACA,WAAOoD,MAAP;AACD;;AAEDsD,EAAAA,gBAAgB,CACdtD,MADc,EAEdiD,aAFc,EAGE;AAChB,WAAO,KAAKD,kBAAL,CAAwBhD,MAAM,CAACnD,GAA/B,EAAoCoG,aAApC,CAAP;AACD;;AAEDM,EAAAA,iBAAiB,CACfzF,QADe,EAEfmF,aAFe,EAGA;AACf,WAAO,KAAK5B,UAAL,CACJ5E,IADI,CACE4E,UAAD;AAEJA,IAAAA,UAAU,CAACmC,UAAX,CAAsB1F,QAAtB,EAAgCmF,aAAhC,CAHG,EAKJxG,IALI,CAKC,MAASgH,SALV,CAAP,CADe;AAOhB;;AAEDC,EAAAA,WAAW,CAAC9G,GAAD,EAAgBkB,QAAhB,EAA2D;AACpE,WAAO,KAAKuD,UAAL,CACJ5E,IADI,CACE4E,UAAD,IACJA,UAAU,CAACsC,SAAX,CAAqB;AAAE9G,MAAAA,GAAG,EAAED,GAAP;AAAY,SAAGkB;AAAf,KAArB,CAFG,EAIJrB,IAJI,CAIC,MAAMgH,SAJP,CAAP;AAKD;;AAEDE,EAAAA,SAAS,CAAC3D,MAAD,EAA+B;AACtC,WAAO,KAAK0D,WAAL,CAAiB1D,MAAM,CAACnD,GAAxB,CAAP;AACD;;AAED+G,EAAAA,UAAU,CAACC,QAAD,EAA2C;AACnD,WAAO,KAAKxC,UAAL,CACJ5E,IADI,CACE4E,UAAD,IAAgBA,UAAU,CAACuC,UAAX,CAAsBC,QAAtB,CADjB,EAEJpH,IAFI,CAEC,MAAMgH,SAFP,CAAP;AAGD;;AAEU,QAALnH,KAAK,CAACqD,MAAD,EAA4C;AACrD,UAAM0B,UAAU,GAAG,MAAM,KAAKA,UAA9B;AACA,WAAO1B,MAAM,GACT0B,UAAU,CAACyC,cAAX,CAA0BnE,MAA1B,CADS,GAET0B,UAAU,CAACyC,cAAX,EAFJ;AAGD;;AAEW,QAAN1H,MAAM,CACVuD,MADU,EAEVf,IAFU,EAGqC;AAC/C,UAAMyC,UAAU,GAAG,MAAM,KAAKA,UAA9B;AACA,UAAM0C,UAAU,GAAGpE,MAAM,GACrB0B,UAAU,CAAC2C,IAAX,CAAwBrE,MAAxB,CADqB,GAEpB0B,UAAU,CAAC2C,IAAX,EAFL;AAGA,QAAIpF,IAAJ,EAAUmF,UAAU,CAACnF,IAAX,CAAgBA,IAAhB;AACV,WAAO,IAAI5C,WAAJ,CAAyC,IAAzC,EAA+C+H,UAA/C,CAAP;AACD;;AAEc,QAATV,SAAS,CACbzG,GADa,EAEbkB,QAFa,EAGe;AAC5B,UAAMuD,UAAU,GAAG,MAAM,KAAKA,UAA9B;AACA,UAAMnE,MAAM,GAAG,MAAMmE,UAAU,CAAC4C,OAAX,CAA0B;AAC7CpH,MAAAA,GAAG,EAAED,GADwC;AAE7C,SAAGkB;AAF0C,KAA1B,CAArB;AAIA,WAAOZ,MAAM,IAAIuG,SAAjB;AACD;;AAEDS,EAAAA,OAAO,CAACpG,QAAD,EAA6Bc,IAA7B,EAAmE;AACxE,WAAO,KAAKxC,MAAL,CAAmB0B,QAAnB,EAA6Bc,IAA7B,EAAmCnC,IAAnC,CAAyCL,MAAD,IAC7CA,MAAM,CAACiB,OAAP,EADK,CAAP;AAGD;;AAEY,QAAP4G,OAAO,CACXtE,MADW,EAEXf,IAFW,EAGiB;AAC5B,UAAMyC,UAAU,GAAG,MAAM,KAAKA,UAA9B;AACA,UAAMnE,MAAM,GAAG,MAAMmE,UAAU,CAAC4C,OAAX,CAA0BtE,MAA1B,EAAkC;AACrDf,MAAAA;AADqD,KAAlC,CAArB;AAGA,WAAO1B,MAAM,IAAIuG,SAAjB;AACD;;AAvPH;;AChDA,MAAMU,MAAM,GAAG,IAAIC,wBAAJ,CAAW,4BAAX,CAAf;AAEe,MAAMC,eAAN,SAA8BC,4BAA9B,CAAiD;AAO9D;AACApI,EAAAA,WAAW,CAACqI,MAAD,EAAuC;AAChD;;AAEA,QAAI,CAACA,MAAM,CAACC,GAAP,CAAW,MAAX,CAAL,EAAyB;AACvBD,MAAAA,MAAM,CAACE,GAAP,CAAW,MAAX,EAAmB,WAAnB;AACD;;AACD,QAAI,CAACF,MAAM,CAACC,GAAP,CAAW,MAAX,CAAL,EAAyB;AACvBD,MAAAA,MAAM,CAACE,GAAP,CAAW,MAAX,EAAmB,OAAnB;AACD;;AACD,QAAI,CAACF,MAAM,CAACC,GAAP,CAAW,UAAX,CAAL,EAA6B;AAC3B,YAAM,IAAIrH,KAAJ,CAAU,yBAAV,CAAN;AACD;;AAED,UAAMuH,gBAAgB,GACnB,aACCH,MAAM,CAACC,GAAP,CAAW,MAAX,IACK,GAAED,MAAM,CAACI,GAAP,CAAW,MAAX,CAA6B,IAC9BJ,MAAM,CAACI,GAAP,CAAW,UAAX,CACD,GAHL,GAII,EACL,EAND,GAOC,GAAEJ,MAAM,CAACI,GAAP,CAAW,MAAX,CAA6B,IAAGJ,MAAM,CAACI,GAAP,CAAW,MAAX,CAA6B,IAC9DJ,MAAM,CAACI,GAAP,CAAW,UAAX,CACD,EAVH;AAYA,SAAKC,OAAL,CAAaF,gBAAb;AACD;;AAEDE,EAAAA,OAAO,CAACF,gBAAD,EAAiC;AACtCP,IAAAA,MAAM,CAACxF,IAAP,CAAY,YAAZ,EAA0B;AAAE+F,MAAAA;AAAF,KAA1B;AAEA,UAAMG,cAAc,GAAGjD,gBAAO,CAACkD,WAAR,CAAoBF,OAApB,CAA4BF,gBAA5B,EACpBjI,IADoB,CACdsE,UAAD,IAAgB;AACpBoD,MAAAA,MAAM,CAACxF,IAAP,CAAY,WAAZ,EAAyB;AAAE+F,QAAAA;AAAF,OAAzB;AACA3D,MAAAA,UAAU,CAACgE,EAAX,CAAc,OAAd,EAAuB,MAAM;AAC3BZ,QAAAA,MAAM,CAACa,IAAP,CAAY,OAAZ,EAAqB;AAAEN,UAAAA;AAAF,SAArB;AACA,aAAKlD,gBAAL,GAAwB,IAAxB;;AACA,aAAKN,aAAL,GAAqB,MAAM;AACzB,gBAAM,IAAI/D,KAAJ,CAAU,2BAAV,CAAN;AACD,SAFD;AAGD,OAND;AAOA4D,MAAAA,UAAU,CAACgE,EAAX,CAAc,SAAd,EAAyB,MAAM;AAC7BZ,QAAAA,MAAM,CAACa,IAAP,CAAY,SAAZ,EAAuB;AAAEN,UAAAA;AAAF,SAAvB;AACA,aAAKlD,gBAAL,GAAwB,IAAxB;;AACA,aAAKN,aAAL,GAAqB,MAAM;AACzB,gBAAM,IAAI/D,KAAJ,CAAU,4BAAV,CAAN;AACD,SAFD;AAGD,OAND;AAOA4D,MAAAA,UAAU,CAACgE,EAAX,CAAc,WAAd,EAA2B,MAAM;AAC/BZ,QAAAA,MAAM,CAACa,IAAP,CAAY,WAAZ,EAAyB;AAAEN,UAAAA;AAAF,SAAzB;AACA,aAAKlD,gBAAL,GAAwB,KAAxB;;AACA,aAAKN,aAAL,GAAqB,MAAMlE,OAAO,CAACC,OAAR,CAAgB,KAAKgI,WAArB,CAA3B;AACD,OAJD;AAKAlE,MAAAA,UAAU,CAACgE,EAAX,CAAc,OAAd,EAAwBzD,GAAD,IAAS;AAC9B6C,QAAAA,MAAM,CAACa,IAAP,CAAY,OAAZ,EAAqB;AAAEN,UAAAA,gBAAF;AAAoBpD,UAAAA;AAApB,SAArB;AACD,OAFD;AAIA,WAAK2D,WAAL,GAAmBlE,UAAnB;AACA,WAAKmE,WAAL,GAAmBzB,SAAnB;;AACA,WAAKvC,aAAL,GAAqB,MAAMlE,OAAO,CAACC,OAAR,CAAgB,KAAKgI,WAArB,CAA3B;;AACA,aAAOlE,UAAP;AACD,KA9BoB,EA+BpBoE,KA/BoB,CA+Bb7D,GAAD,IAAS;AACd6C,MAAAA,MAAM,CAACxF,IAAP,CAAY,eAAZ,EAA6B;AAAE+F,QAAAA;AAAF,OAA7B;AACAvB,MAAAA,OAAO,CAACC,KAAR,CAAc9B,GAAG,CAAC8D,OAAJ,IAAe9D,GAA7B,EAFc;;AAId+D,MAAAA,OAAO,CAACC,QAAR,CAAiB,MAAM;AACrB;AACAD,QAAAA,OAAO,CAACE,IAAR,CAAa,CAAb;AACD,OAHD;AAKA,YAAMjE,GAAN;AACD,KAzCoB,CAAvB;;AA2CA,SAAKJ,aAAL,GAAqB,MAAMlE,OAAO,CAACC,OAAR,CAAgB4H,cAAhB,CAA3B;;AACA,SAAKK,WAAL,GAAmB,KAAKhE,aAAL,EAAnB;AACD;;AAEDA,EAAAA,aAAa,GAAiC;AAC5C,UAAM,IAAI/D,KAAJ,CAAU,gBAAV,CAAN;AACD;;AAEU,QAALC,KAAK,GAAkB;AAC3B,SAAK8D,aAAL,GAAqB,MAAMlE,OAAO,CAACuE,MAAR,CAAe,IAAIpE,KAAJ,CAAU,mBAAV,CAAf,CAA3B;;AACA,QAAI,KAAK8H,WAAT,EAAsB;AACpB,YAAM,KAAKA,WAAL,CAAiB7H,KAAjB,EAAN;AACA,WAAK6H,WAAL,GAAmBxB,SAAnB;AACD,KAHD,MAGO,IAAI,KAAKyB,WAAT,EAAsB;AAC3B,YAAM,KAAKA,WAAX;AACA,YAAM,KAAK9H,KAAL,EAAN;AACD;AACF;;AAnG6D;;ACIjD,SAASoI,yBAAT,CAIbC,UAJa,EAYb;AACA,SAAO,IAAIC,iCAAJ,CAAmBD,UAAnB,CAAP;AACD;;;;;;"}