@nxgt/mongo 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/collection/context.d.ts +64 -0
- package/dist/collection/context.d.ts.map +1 -0
- package/dist/collection/documents.d.ts +21 -0
- package/dist/collection/documents.d.ts.map +1 -0
- package/dist/collection/filters.d.ts +15 -0
- package/dist/collection/filters.d.ts.map +1 -0
- package/dist/collection/get-collection.d.ts +1 -1
- package/dist/collection/get-collection.d.ts.map +1 -1
- package/dist/collection/paginate.d.ts +6 -0
- package/dist/collection/paginate.d.ts.map +1 -0
- package/dist/collection/reads.d.ts +19 -0
- package/dist/collection/reads.d.ts.map +1 -0
- package/dist/collection/writes.d.ts +12 -0
- package/dist/collection/writes.d.ts.map +1 -0
- package/dist/index.js +694 -643
- package/dist/index.js.map +14 -8
- package/package.json +1 -1
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { ClientSession, Db, Collection as DriverCollection } from 'mongodb';
|
|
2
|
+
import type { z } from 'zod';
|
|
3
|
+
import { type AnyCollectionDefinition, stampsOf } from '../definition/define-collection';
|
|
4
|
+
import { NotFoundError } from '../errors/data-error';
|
|
5
|
+
import type { CollectionOptions } from './types';
|
|
6
|
+
/** Which of the fields the collection knows about a schema has. */
|
|
7
|
+
type Stamps = ReturnType<typeof stampsOf>;
|
|
8
|
+
/**
|
|
9
|
+
* What every method of a collection works from, resolved once: the
|
|
10
|
+
* definition, the driver's collection, and the options once they have been
|
|
11
|
+
* read against the schema.
|
|
12
|
+
*
|
|
13
|
+
* It holds **data only**. The operations are plain functions that take it as
|
|
14
|
+
* their first argument, in `filters.ts`, `documents.ts`, `reads.ts`,
|
|
15
|
+
* `writes.ts` and `paginate.ts` — a context of closures would only be the
|
|
16
|
+
* factory this package split up, one size down.
|
|
17
|
+
*
|
|
18
|
+
* `withSession` and `as` build another one, cheaply: they are the same
|
|
19
|
+
* collection with a single option changed.
|
|
20
|
+
*/
|
|
21
|
+
export interface CollectionContext {
|
|
22
|
+
readonly definition: AnyCollectionDefinition;
|
|
23
|
+
readonly db: Db;
|
|
24
|
+
/**
|
|
25
|
+
* The driver's collection, typed loosely on purpose: this layer works on
|
|
26
|
+
* any documents, and the public type is what callers see.
|
|
27
|
+
*/
|
|
28
|
+
readonly collection: DriverCollection<any>;
|
|
29
|
+
readonly name: string;
|
|
30
|
+
readonly shape: Record<string, z.ZodType>;
|
|
31
|
+
readonly stamps: Stamps;
|
|
32
|
+
/** Who is writing, stamped into the `*By` fields. */
|
|
33
|
+
readonly actor: unknown;
|
|
34
|
+
readonly session: ClientSession | undefined;
|
|
35
|
+
/** `{ session }` when there is one, to spread into the driver's options. */
|
|
36
|
+
readonly sessionOption: {
|
|
37
|
+
session?: ClientSession;
|
|
38
|
+
};
|
|
39
|
+
readonly maxPageSize: number;
|
|
40
|
+
/**
|
|
41
|
+
* Whether the schema declares an `id` field of its own. Then `id` is that
|
|
42
|
+
* field's, and this package neither computes it nor drops it.
|
|
43
|
+
*/
|
|
44
|
+
readonly hasOwnId: boolean;
|
|
45
|
+
/** Whether a write is checked against the schema, which fills its defaults. */
|
|
46
|
+
readonly parses: boolean;
|
|
47
|
+
/** Whether `delete` writes `deletedAt` rather than removing the document. */
|
|
48
|
+
readonly softDeletes: boolean;
|
|
49
|
+
/** Whether an update that does not set `updatedAt` gets it set. */
|
|
50
|
+
readonly touches: boolean;
|
|
51
|
+
/** Whether an update raises `version`. */
|
|
52
|
+
readonly locks: boolean;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Resolves a collection's options against its schema, and refuses the two
|
|
56
|
+
* that cannot be honoured: a soft delete without `deletedAt`, and an
|
|
57
|
+
* optimistic lock without `version`.
|
|
58
|
+
*/
|
|
59
|
+
export declare function createContext(db: Db, definition: AnyCollectionDefinition, options: CollectionOptions<never>): CollectionContext;
|
|
60
|
+
/** Runs an operation, turning a MongoDB error into a `DataError`. */
|
|
61
|
+
export declare function run<T>(ctx: CollectionContext, fn: () => Promise<T>): Promise<T>;
|
|
62
|
+
export declare function notFound(ctx: CollectionContext, id: unknown): NotFoundError;
|
|
63
|
+
export {};
|
|
64
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/collection/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,aAAa,EACb,EAAE,EACF,UAAU,IAAI,gBAAgB,EAC9B,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EACN,KAAK,uBAAuB,EAC5B,QAAQ,EACR,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,mEAAmE;AACnE,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAE1C;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,UAAU,EAAE,uBAAuB,CAAC;IAC7C,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAChB;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,CAAC;IAC5C,4EAA4E;IAC5E,QAAQ,CAAC,aAAa,EAAE;QAAE,OAAO,CAAC,EAAE,aAAa,CAAA;KAAE,CAAC;IACpD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,6EAA6E;IAC7E,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,mEAAmE;IACnE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,0CAA0C;IAC1C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC5B,EAAE,EAAE,EAAE,EACN,UAAU,EAAE,uBAAuB,EACnC,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAC/B,iBAAiB,CAkCnB;AAED,qEAAqE;AACrE,wBAAsB,GAAG,CAAC,CAAC,EAC1B,GAAG,EAAE,iBAAiB,EACtB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAClB,OAAO,CAAC,CAAC,CAAC,CAMZ;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,iBAAiB,EAAE,EAAE,EAAE,OAAO,GAAG,aAAa,CAK3E"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CollectionContext } from './context';
|
|
2
|
+
import { type Fields } from './filters';
|
|
3
|
+
/**
|
|
4
|
+
* `id` on a document a collection gives back: `_id` as a string, computed
|
|
5
|
+
* rather than stored — the collection holds `_id` alone.
|
|
6
|
+
*
|
|
7
|
+
* It is enumerable, so `JSON.stringify` and a spread carry it and a handler
|
|
8
|
+
* can return the document as it is. `toDocument` drops it again on a write,
|
|
9
|
+
* and it is no part of `DocumentOf`, so nothing can filter on it: the server
|
|
10
|
+
* would match nothing.
|
|
11
|
+
*/
|
|
12
|
+
export declare function withId<T>(ctx: CollectionContext, document: T): T;
|
|
13
|
+
/** The document to insert: checked against the schema, defaults filled. */
|
|
14
|
+
export declare function toDocument(ctx: CollectionContext, values: unknown): Fields;
|
|
15
|
+
/**
|
|
16
|
+
* The update to send: a patch of fields becomes `$set`, checked field by
|
|
17
|
+
* field against the schema, with the stamps this collection keeps. A patch
|
|
18
|
+
* that already speaks in operators is sent as it is, with the stamps added.
|
|
19
|
+
*/
|
|
20
|
+
export declare function toUpdate(ctx: CollectionContext, patch: unknown): Fields;
|
|
21
|
+
//# sourceMappingURL=documents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../src/collection/documents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,KAAK,MAAM,EAA4B,MAAM,WAAW,CAAC;AAElE;;;;;;;;GAQG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAehE;AAED,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAkB1E;AAkBD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CA6BvE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { CollectionContext } from './context';
|
|
2
|
+
/** A document as this package handles one internally: keys it cannot know. */
|
|
3
|
+
export type Fields = Record<string, unknown>;
|
|
4
|
+
export declare function isRecord(value: unknown): value is Fields;
|
|
5
|
+
/** Does this patch speak in MongoDB's operators rather than in fields? */
|
|
6
|
+
export declare function isUpdateFilter(patch: Fields): boolean;
|
|
7
|
+
/** `a` and `b`, without letting one's `$or` swallow the other's. */
|
|
8
|
+
export declare function mergeFilters(a: Fields | undefined, b: Fields | undefined): Fields;
|
|
9
|
+
/** The filter that leaves soft-deleted documents out. */
|
|
10
|
+
export declare function live(ctx: CollectionContext, withDeleted?: boolean): Fields | undefined;
|
|
11
|
+
/** A caller's filter, narrowed to the documents this collection shows. */
|
|
12
|
+
export declare function scoped(ctx: CollectionContext, filter: unknown, withDeleted?: boolean): Fields;
|
|
13
|
+
/** Refuses a call that would otherwise run on the whole collection. */
|
|
14
|
+
export declare function requireFilter(ctx: CollectionContext, method: string, filter: unknown): void;
|
|
15
|
+
//# sourceMappingURL=filters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../src/collection/filters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEnD,8EAA8E;AAC9E,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE7C,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,oEAAoE;AACpE,wBAAgB,YAAY,CAC3B,CAAC,EAAE,MAAM,GAAG,SAAS,EACrB,CAAC,EAAE,MAAM,GAAG,SAAS,GACnB,MAAM,CAMR;AAED,yDAAyD;AACzD,wBAAgB,IAAI,CACnB,GAAG,EAAE,iBAAiB,EACtB,WAAW,CAAC,EAAE,OAAO,GACnB,MAAM,GAAG,SAAS,CAEpB;AAED,0EAA0E;AAC1E,wBAAgB,MAAM,CACrB,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,OAAO,EACf,WAAW,CAAC,EAAE,OAAO,GACnB,MAAM,CAKR;AAED,uEAAuE;AACvE,wBAAgB,aAAa,CAC5B,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,GACb,IAAI,CAMN"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Db, MongoClient } from 'mongodb';
|
|
2
2
|
import type { z } from 'zod';
|
|
3
|
-
import {
|
|
3
|
+
import type { CollectionDefinition } from '../definition/define-collection';
|
|
4
4
|
import type { CollectionOptions, TypedCollection } from './types';
|
|
5
5
|
/** What a collection can be reached through: a database, or a client. */
|
|
6
6
|
export type CollectionSource = Db | MongoClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-collection.d.ts","sourceRoot":"","sources":["../../src/collection/get-collection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"get-collection.d.ts","sourceRoot":"","sources":["../../src/collection/get-collection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,EAAE,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAEX,oBAAoB,EACpB,MAAM,iCAAiC,CAAC;AAazC,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAalE,yEAAyE;AACzE,MAAM,MAAM,gBAAgB,GAAG,EAAE,GAAG,WAAW,CAAC;AAmBhD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,MAAM,SAAS,CAAC,CAAC,SAAS,EACvD,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,oBAAoB,CAAC,MAAM,CAAC,EACxC,OAAO,GAAE,iBAAiB,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAM,GAC3D,eAAe,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAG/C"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type CursorPage, type Page } from '../pagination/page';
|
|
2
|
+
import type { CollectionContext } from './context';
|
|
3
|
+
import { type Fields } from './filters';
|
|
4
|
+
export declare function paginate(ctx: CollectionContext, opts?: Fields): Promise<Page<Fields>>;
|
|
5
|
+
export declare function paginateByCursor(ctx: CollectionContext, opts?: Fields): Promise<CursorPage<Fields>>;
|
|
6
|
+
//# sourceMappingURL=paginate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paginate.d.ts","sourceRoot":"","sources":["../../src/collection/paginate.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,KAAK,UAAU,EAEf,KAAK,IAAI,EAGT,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,KAAK,MAAM,EAA0B,MAAM,WAAW,CAAC;AAIhE,wBAAsB,QAAQ,CAC7B,GAAG,EAAE,iBAAiB,EACtB,IAAI,GAAE,MAAW,GACf,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAevB;AAED,wBAAsB,gBAAgB,CACrC,GAAG,EAAE,iBAAiB,EACtB,IAAI,GAAE,MAAW,GACf,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CA+D7B"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type CollectionContext } from './context';
|
|
2
|
+
import { type Fields } from './filters';
|
|
3
|
+
/** One document, straight from the driver, carrying its computed `id`. */
|
|
4
|
+
export declare function findOne(ctx: CollectionContext, filter: Fields, projection?: unknown): Promise<Fields | null>;
|
|
5
|
+
export declare function findById(ctx: CollectionContext, id: unknown, opts?: {
|
|
6
|
+
withDeleted?: boolean;
|
|
7
|
+
}): Promise<Fields | undefined>;
|
|
8
|
+
export declare function getById(ctx: CollectionContext, id: unknown, opts?: {
|
|
9
|
+
withDeleted?: boolean;
|
|
10
|
+
}): Promise<Fields>;
|
|
11
|
+
export declare function findMany(ctx: CollectionContext, opts?: Fields): Promise<Fields[]>;
|
|
12
|
+
export declare function findFirst(ctx: CollectionContext, filter?: unknown, opts?: Fields): Promise<Fields | undefined>;
|
|
13
|
+
export declare function countDocuments(ctx: CollectionContext, filter?: unknown, opts?: {
|
|
14
|
+
withDeleted?: boolean;
|
|
15
|
+
}): Promise<number>;
|
|
16
|
+
export declare function exists(ctx: CollectionContext, filter: unknown, opts?: {
|
|
17
|
+
withDeleted?: boolean;
|
|
18
|
+
}): Promise<boolean>;
|
|
19
|
+
//# sourceMappingURL=reads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reads.d.ts","sourceRoot":"","sources":["../../src/collection/reads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAiB,MAAM,WAAW,CAAC;AAElE,OAAO,EAAE,KAAK,MAAM,EAAU,MAAM,WAAW,CAAC;AAEhD,0EAA0E;AAC1E,wBAAgB,OAAO,CACtB,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,OAAO,GAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQxB;AAED,wBAAsB,QAAQ,CAC7B,GAAG,EAAE,iBAAiB,EACtB,EAAE,EAAE,OAAO,EACX,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GAClC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAG7B;AAED,wBAAsB,OAAO,CAC5B,GAAG,EAAE,iBAAiB,EACtB,EAAE,EAAE,OAAO,EACX,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GAClC,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED,wBAAsB,QAAQ,CAC7B,GAAG,EAAE,iBAAiB,EACtB,IAAI,GAAE,MAAW,GACf,OAAO,CAAC,MAAM,EAAE,CAAC,CAenB;AAED,wBAAsB,SAAS,CAC9B,GAAG,EAAE,iBAAiB,EACtB,MAAM,CAAC,EAAE,OAAO,EAChB,IAAI,GAAE,MAAW,GACf,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAG7B;AAED,wBAAsB,cAAc,CACnC,GAAG,EAAE,iBAAiB,EACtB,MAAM,CAAC,EAAE,OAAO,EAChB,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GAClC,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED,wBAAsB,MAAM,CAC3B,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,OAAO,EACf,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GAClC,OAAO,CAAC,OAAO,CAAC,CAKlB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type CollectionContext } from './context';
|
|
2
|
+
import { type Fields } from './filters';
|
|
3
|
+
export declare function create(ctx: CollectionContext, values: unknown): Promise<Fields>;
|
|
4
|
+
export declare function createMany(ctx: CollectionContext, values: readonly unknown[]): Promise<Fields[]>;
|
|
5
|
+
export declare function update(ctx: CollectionContext, id: unknown, patch: unknown, opts?: Fields): Promise<Fields>;
|
|
6
|
+
export declare function updateMany(ctx: CollectionContext, filter: unknown, patch: unknown): Promise<number>;
|
|
7
|
+
export declare function hardDelete(ctx: CollectionContext, id: unknown): Promise<Fields>;
|
|
8
|
+
export declare function hardDeleteMany(ctx: CollectionContext, filter: unknown): Promise<number>;
|
|
9
|
+
export declare function deleteOne(ctx: CollectionContext, id: unknown): Promise<Fields>;
|
|
10
|
+
export declare function deleteMany(ctx: CollectionContext, filter: unknown): Promise<number>;
|
|
11
|
+
export declare function restore(ctx: CollectionContext, id: unknown): Promise<Fields>;
|
|
12
|
+
//# sourceMappingURL=writes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writes.d.ts","sourceRoot":"","sources":["../../src/collection/writes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,iBAAiB,EAAiB,MAAM,WAAW,CAAC;AAElE,OAAO,EACN,KAAK,MAAM,EAKX,MAAM,WAAW,CAAC;AAsDnB,wBAAsB,MAAM,CAC3B,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,OAAO,GACb,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,wBAAsB,UAAU,CAC/B,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,SAAS,OAAO,EAAE,GACxB,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB;AAED,wBAAsB,MAAM,CAC3B,GAAG,EAAE,iBAAiB,EACtB,EAAE,EAAE,OAAO,EACX,KAAK,EAAE,OAAO,EACd,IAAI,GAAE,MAAW,GACf,OAAO,CAAC,MAAM,CAAC,CAgBjB;AAED,wBAAsB,UAAU,CAC/B,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,OAAO,GACZ,OAAO,CAAC,MAAM,CAAC,CAWjB;AAED,wBAAsB,UAAU,CAC/B,GAAG,EAAE,iBAAiB,EACtB,EAAE,EAAE,OAAO,GACT,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED,wBAAsB,cAAc,CACnC,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,OAAO,GACb,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,wBAAsB,SAAS,CAC9B,GAAG,EAAE,iBAAiB,EACtB,EAAE,EAAE,OAAO,GACT,OAAO,CAAC,MAAM,CAAC,CASjB;AAED,wBAAsB,UAAU,CAC/B,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,OAAO,GACb,OAAO,CAAC,MAAM,CAAC,CAWjB;AAED,wBAAsB,OAAO,CAC5B,GAAG,EAAE,iBAAiB,EACtB,EAAE,EAAE,OAAO,GACT,OAAO,CAAC,MAAM,CAAC,CAUjB"}
|