@factorialco/api-client 1.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/README.md +194 -0
- package/dist/cjs/generated/client/client.d.ts +3 -0
- package/dist/cjs/generated/client/client.d.ts.map +1 -0
- package/dist/cjs/generated/client/client.js +145 -0
- package/dist/cjs/generated/client/client.js.map +1 -0
- package/dist/cjs/generated/client/index.d.ts +8 -0
- package/dist/cjs/generated/client/index.d.ts.map +1 -0
- package/dist/cjs/generated/client/index.js +15 -0
- package/dist/cjs/generated/client/index.js.map +1 -0
- package/dist/cjs/generated/client/types.d.ts +120 -0
- package/dist/cjs/generated/client/types.d.ts.map +1 -0
- package/dist/cjs/generated/client/types.js +3 -0
- package/dist/cjs/generated/client/types.js.map +1 -0
- package/dist/cjs/generated/client/utils.d.ts +46 -0
- package/dist/cjs/generated/client/utils.d.ts.map +1 -0
- package/dist/cjs/generated/client/utils.js +297 -0
- package/dist/cjs/generated/client/utils.js.map +1 -0
- package/dist/cjs/generated/client.gen.d.ts +13 -0
- package/dist/cjs/generated/client.gen.d.ts.map +1 -0
- package/dist/cjs/generated/client.gen.js +9 -0
- package/dist/cjs/generated/client.gen.js.map +1 -0
- package/dist/cjs/generated/core/auth.d.ts +19 -0
- package/dist/cjs/generated/core/auth.d.ts.map +1 -0
- package/dist/cjs/generated/core/auth.js +18 -0
- package/dist/cjs/generated/core/auth.js.map +1 -0
- package/dist/cjs/generated/core/bodySerializer.d.ts +18 -0
- package/dist/cjs/generated/core/bodySerializer.d.ts.map +1 -0
- package/dist/cjs/generated/core/bodySerializer.js +57 -0
- package/dist/cjs/generated/core/bodySerializer.js.map +1 -0
- package/dist/cjs/generated/core/params.d.ts +24 -0
- package/dist/cjs/generated/core/params.d.ts.map +1 -0
- package/dist/cjs/generated/core/params.js +92 -0
- package/dist/cjs/generated/core/params.js.map +1 -0
- package/dist/cjs/generated/core/pathSerializer.d.ts +34 -0
- package/dist/cjs/generated/core/pathSerializer.d.ts.map +1 -0
- package/dist/cjs/generated/core/pathSerializer.js +123 -0
- package/dist/cjs/generated/core/pathSerializer.js.map +1 -0
- package/dist/cjs/generated/core/types.d.ts +68 -0
- package/dist/cjs/generated/core/types.d.ts.map +1 -0
- package/dist/cjs/generated/core/types.js +3 -0
- package/dist/cjs/generated/core/types.js.map +1 -0
- package/dist/cjs/generated/index.d.ts +3 -0
- package/dist/cjs/generated/index.d.ts.map +1 -0
- package/dist/cjs/generated/index.js +20 -0
- package/dist/cjs/generated/index.js.map +1 -0
- package/dist/cjs/generated/sdk.gen.d.ts +3132 -0
- package/dist/cjs/generated/sdk.gen.d.ts.map +1 -0
- package/dist/cjs/generated/sdk.gen.js +12931 -0
- package/dist/cjs/generated/sdk.gen.js.map +1 -0
- package/dist/cjs/generated/types.gen.d.ts +22848 -0
- package/dist/cjs/generated/types.gen.d.ts.map +1 -0
- package/dist/cjs/generated/types.gen.js +4 -0
- package/dist/cjs/generated/types.gen.js.map +1 -0
- package/dist/cjs/index.d.ts +5 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +24 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/pagination.d.ts +78 -0
- package/dist/cjs/pagination.d.ts.map +1 -0
- package/dist/cjs/pagination.js +73 -0
- package/dist/cjs/pagination.js.map +1 -0
- package/dist/cjs/sdk.d.ts +4968 -0
- package/dist/cjs/sdk.d.ts.map +1 -0
- package/dist/cjs/sdk.js +5574 -0
- package/dist/cjs/sdk.js.map +1 -0
- package/dist/esm/generated/client/client.d.ts +3 -0
- package/dist/esm/generated/client/client.d.ts.map +1 -0
- package/dist/esm/generated/client/client.js +141 -0
- package/dist/esm/generated/client/client.js.map +1 -0
- package/dist/esm/generated/client/index.d.ts +8 -0
- package/dist/esm/generated/client/index.d.ts.map +1 -0
- package/dist/esm/generated/client/index.js +5 -0
- package/dist/esm/generated/client/index.js.map +1 -0
- package/dist/esm/generated/client/types.d.ts +120 -0
- package/dist/esm/generated/client/types.d.ts.map +1 -0
- package/dist/esm/generated/client/types.js +2 -0
- package/dist/esm/generated/client/types.js.map +1 -0
- package/dist/esm/generated/client/utils.d.ts +46 -0
- package/dist/esm/generated/client/utils.d.ts.map +1 -0
- package/dist/esm/generated/client/utils.js +285 -0
- package/dist/esm/generated/client/utils.js.map +1 -0
- package/dist/esm/generated/client.gen.d.ts +13 -0
- package/dist/esm/generated/client.gen.d.ts.map +1 -0
- package/dist/esm/generated/client.gen.js +6 -0
- package/dist/esm/generated/client.gen.js.map +1 -0
- package/dist/esm/generated/core/auth.d.ts +19 -0
- package/dist/esm/generated/core/auth.d.ts.map +1 -0
- package/dist/esm/generated/core/auth.js +14 -0
- package/dist/esm/generated/core/auth.js.map +1 -0
- package/dist/esm/generated/core/bodySerializer.d.ts +18 -0
- package/dist/esm/generated/core/bodySerializer.d.ts.map +1 -0
- package/dist/esm/generated/core/bodySerializer.js +54 -0
- package/dist/esm/generated/core/bodySerializer.js.map +1 -0
- package/dist/esm/generated/core/params.d.ts +24 -0
- package/dist/esm/generated/core/params.d.ts.map +1 -0
- package/dist/esm/generated/core/params.js +88 -0
- package/dist/esm/generated/core/params.js.map +1 -0
- package/dist/esm/generated/core/pathSerializer.d.ts +34 -0
- package/dist/esm/generated/core/pathSerializer.d.ts.map +1 -0
- package/dist/esm/generated/core/pathSerializer.js +114 -0
- package/dist/esm/generated/core/pathSerializer.js.map +1 -0
- package/dist/esm/generated/core/types.d.ts +68 -0
- package/dist/esm/generated/core/types.d.ts.map +1 -0
- package/dist/esm/generated/core/types.js +2 -0
- package/dist/esm/generated/core/types.js.map +1 -0
- package/dist/esm/generated/index.d.ts +3 -0
- package/dist/esm/generated/index.d.ts.map +1 -0
- package/dist/esm/generated/index.js +4 -0
- package/dist/esm/generated/index.js.map +1 -0
- package/dist/esm/generated/sdk.gen.d.ts +3132 -0
- package/dist/esm/generated/sdk.gen.d.ts.map +1 -0
- package/dist/esm/generated/sdk.gen.js +12363 -0
- package/dist/esm/generated/sdk.gen.js.map +1 -0
- package/dist/esm/generated/types.gen.d.ts +22848 -0
- package/dist/esm/generated/types.gen.d.ts.map +1 -0
- package/dist/esm/generated/types.gen.js +3 -0
- package/dist/esm/generated/types.gen.js.map +1 -0
- package/dist/esm/index.d.ts +5 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/pagination.d.ts +78 -0
- package/dist/esm/pagination.d.ts.map +1 -0
- package/dist/esm/pagination.js +69 -0
- package/dist/esm/pagination.js.map +1 -0
- package/dist/esm/sdk.d.ts +4968 -0
- package/dist/esm/sdk.d.ts.map +1 -0
- package/dist/esm/sdk.js +5362 -0
- package/dist/esm/sdk.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.gen.js","sourceRoot":"","sources":["../../../src/generated/types.gen.ts"],"names":[],"mappings":";AAAA,qDAAqD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,YAAY,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACtD,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClE,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.FactorialClient = void 0;
|
|
18
|
+
// Public entry point for @factorialco/api-client.
|
|
19
|
+
// Import FactorialClient to get started:
|
|
20
|
+
// import { FactorialClient } from "@factorialco/api-client";
|
|
21
|
+
var sdk_js_1 = require("./sdk.js");
|
|
22
|
+
Object.defineProperty(exports, "FactorialClient", { enumerable: true, get: function () { return sdk_js_1.FactorialClient; } });
|
|
23
|
+
__exportStar(require("./generated/types.gen.js"), exports);
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,kDAAkD;AAClD,yCAAyC;AACzC,+DAA+D;AAC/D,mCAA2C;AAAlC,yGAAA,eAAe,OAAA;AAGxB,2DAAyC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pagination utilities for the Factorial API.
|
|
3
|
+
*
|
|
4
|
+
* The Factorial API uses cursor-based pagination. Every list endpoint returns:
|
|
5
|
+
* { data: T[], meta: PagedMeta }
|
|
6
|
+
*
|
|
7
|
+
* To fetch the next page, pass `after_id` equal to the `end_cursor` from the
|
|
8
|
+
* previous response's `meta`. The maximum page size is 100 (the default).
|
|
9
|
+
*/
|
|
10
|
+
/** Pagination metadata returned by every list endpoint. */
|
|
11
|
+
export type PagedMeta = {
|
|
12
|
+
/** Cursor pointing to the first item in the current page. */
|
|
13
|
+
start_cursor?: string;
|
|
14
|
+
/** Cursor pointing to the last item in the current page. Pass as `after_id` to fetch the next page. */
|
|
15
|
+
end_cursor?: string;
|
|
16
|
+
/** Whether there is a previous page. */
|
|
17
|
+
has_previous_page: boolean;
|
|
18
|
+
/** Whether there is a next page. */
|
|
19
|
+
has_next_page: boolean;
|
|
20
|
+
/** Number of items in the current page. */
|
|
21
|
+
limit: number;
|
|
22
|
+
/** Total number of items across all pages. */
|
|
23
|
+
total: number;
|
|
24
|
+
};
|
|
25
|
+
/** Shape of a paged API response. */
|
|
26
|
+
export type PagedResponse<T> = {
|
|
27
|
+
data?: T[];
|
|
28
|
+
meta?: PagedMeta;
|
|
29
|
+
};
|
|
30
|
+
/** Options for pagination helpers. */
|
|
31
|
+
export type PaginateOptions = {
|
|
32
|
+
/**
|
|
33
|
+
* Maximum number of items to fetch in total across all pages.
|
|
34
|
+
* Useful as a safety cap when consuming large datasets.
|
|
35
|
+
* Defaults to no limit.
|
|
36
|
+
*/
|
|
37
|
+
maxItems?: number;
|
|
38
|
+
/**
|
|
39
|
+
* Number of items per page (max 100, Factorial default is 100).
|
|
40
|
+
*/
|
|
41
|
+
limit?: number;
|
|
42
|
+
};
|
|
43
|
+
/** Parameters passed to the underlying fetcher on each page request. */
|
|
44
|
+
type FetchParams = {
|
|
45
|
+
limit?: number;
|
|
46
|
+
after_id?: string;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Async generator that auto-paginates through all pages of a list endpoint,
|
|
50
|
+
* yielding one item at a time.
|
|
51
|
+
*
|
|
52
|
+
* @param fetcher - A function that accepts pagination params and returns a paged response.
|
|
53
|
+
* @param options - Optional limit and maxItems cap.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```ts
|
|
57
|
+
* // Used internally by resource classes — prefer client.employees.employees.paginate()
|
|
58
|
+
* for await (const employee of client.employees.employees.paginate()) {
|
|
59
|
+
* console.log(employee.full_name);
|
|
60
|
+
* }
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export declare function paginate<T>(fetcher: (params: FetchParams) => Promise<{
|
|
64
|
+
data: PagedResponse<T> | undefined;
|
|
65
|
+
error: unknown;
|
|
66
|
+
}>, options?: PaginateOptions): AsyncGenerator<T>;
|
|
67
|
+
/**
|
|
68
|
+
* Collects all items from an async generator into a plain array.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts
|
|
72
|
+
* // Used internally by resource classes — prefer client.employees.employees.all()
|
|
73
|
+
* const employees = await client.employees.employees.all({ maxItems: 500 });
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
export declare function collectAll<T>(generator: AsyncGenerator<T>): Promise<T[]>;
|
|
77
|
+
export {};
|
|
78
|
+
//# sourceMappingURL=pagination.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/pagination.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,2DAA2D;AAC3D,MAAM,MAAM,SAAS,GAAG;IACtB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uGAAuG;IACvG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oCAAoC;IACpC,aAAa,EAAE,OAAO,CAAC;IACvB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,qCAAqC;AACrC,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI;IAC7B,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IACX,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,CAAC;AAEF,sCAAsC;AACtC,MAAM,MAAM,eAAe,GAAG;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wEAAwE;AACxE,KAAK,WAAW,GAAG;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,wBAAuB,QAAQ,CAAC,CAAC,EAC/B,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC;IAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,EACjG,OAAO,GAAE,eAAoB,GAC5B,cAAc,CAAC,CAAC,CAAC,CA6BnB;AAED;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAM9E"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Pagination utilities for the Factorial API.
|
|
4
|
+
*
|
|
5
|
+
* The Factorial API uses cursor-based pagination. Every list endpoint returns:
|
|
6
|
+
* { data: T[], meta: PagedMeta }
|
|
7
|
+
*
|
|
8
|
+
* To fetch the next page, pass `after_id` equal to the `end_cursor` from the
|
|
9
|
+
* previous response's `meta`. The maximum page size is 100 (the default).
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.paginate = paginate;
|
|
13
|
+
exports.collectAll = collectAll;
|
|
14
|
+
/**
|
|
15
|
+
* Async generator that auto-paginates through all pages of a list endpoint,
|
|
16
|
+
* yielding one item at a time.
|
|
17
|
+
*
|
|
18
|
+
* @param fetcher - A function that accepts pagination params and returns a paged response.
|
|
19
|
+
* @param options - Optional limit and maxItems cap.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* // Used internally by resource classes — prefer client.employees.employees.paginate()
|
|
24
|
+
* for await (const employee of client.employees.employees.paginate()) {
|
|
25
|
+
* console.log(employee.full_name);
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
async function* paginate(fetcher, options = {}) {
|
|
30
|
+
const { maxItems, limit } = options;
|
|
31
|
+
let afterId;
|
|
32
|
+
let totalYielded = 0;
|
|
33
|
+
while (true) {
|
|
34
|
+
const params = {};
|
|
35
|
+
if (limit !== undefined)
|
|
36
|
+
params.limit = limit;
|
|
37
|
+
if (afterId !== undefined)
|
|
38
|
+
params.after_id = afterId;
|
|
39
|
+
const response = await fetcher(params);
|
|
40
|
+
if (response.error) {
|
|
41
|
+
throw response.error;
|
|
42
|
+
}
|
|
43
|
+
const paged = response.data;
|
|
44
|
+
if (!paged || !paged.data?.length)
|
|
45
|
+
break;
|
|
46
|
+
for (const item of paged.data) {
|
|
47
|
+
yield item;
|
|
48
|
+
totalYielded++;
|
|
49
|
+
if (maxItems !== undefined && totalYielded >= maxItems)
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (!paged.meta?.has_next_page || !paged.meta?.end_cursor)
|
|
53
|
+
break;
|
|
54
|
+
afterId = paged.meta.end_cursor;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Collects all items from an async generator into a plain array.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```ts
|
|
62
|
+
* // Used internally by resource classes — prefer client.employees.employees.all()
|
|
63
|
+
* const employees = await client.employees.employees.all({ maxItems: 500 });
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
async function collectAll(generator) {
|
|
67
|
+
const results = [];
|
|
68
|
+
for await (const item of generator) {
|
|
69
|
+
results.push(item);
|
|
70
|
+
}
|
|
71
|
+
return results;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/pagination.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AA2DH,4BAgCC;AAWD,gCAMC;AAhED;;;;;;;;;;;;;;GAcG;AACI,KAAK,SAAS,CAAC,CAAC,QAAQ,CAC7B,OAAiG,EACjG,UAA2B,EAAE;IAE7B,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IACpC,IAAI,OAA2B,CAAC;IAChC,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,MAAM,GAAgB,EAAE,CAAC;QAC/B,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAC9C,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC;QAErD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;QAEvC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,QAAQ,CAAC,KAAK,CAAC;QACvB,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM;YAAE,MAAM;QAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,IAAI,CAAC;YACX,YAAY,EAAE,CAAC;YACf,IAAI,QAAQ,KAAK,SAAS,IAAI,YAAY,IAAI,QAAQ;gBAAE,OAAO;QACjE,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU;YAAE,MAAM;QAEjE,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;IAClC,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,UAAU,CAAI,SAA4B;IAC9D,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|