@ogcio/building-blocks-sdk 0.0.10 → 0.0.12
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 +55 -0
- package/dist/client/auth/index.d.ts.map +1 -1
- package/dist/client/auth/index.js +3 -1
- package/dist/client/auth/index.js.map +1 -1
- package/dist/client/clients/featureFlags/const.d.ts +3 -0
- package/dist/client/clients/featureFlags/const.d.ts.map +1 -0
- package/dist/client/clients/featureFlags/const.js +3 -0
- package/dist/client/clients/featureFlags/const.js.map +1 -0
- package/dist/client/clients/featureFlags/index.d.ts +34 -0
- package/dist/client/clients/featureFlags/index.d.ts.map +1 -0
- package/dist/client/clients/featureFlags/index.js +55 -0
- package/dist/client/clients/featureFlags/index.js.map +1 -0
- package/dist/client/clients/featureFlags/index.test.d.ts +2 -0
- package/dist/client/clients/featureFlags/index.test.d.ts.map +1 -0
- package/dist/client/clients/featureFlags/index.test.js +47 -0
- package/dist/client/clients/featureFlags/index.test.js.map +1 -0
- package/dist/client/clients/featureFlags/schema.d.ts +33769 -0
- package/dist/client/clients/featureFlags/schema.d.ts.map +1 -0
- package/dist/client/clients/featureFlags/schema.js +2 -0
- package/dist/client/clients/featureFlags/schema.js.map +1 -0
- package/dist/client/clients/featureFlags/utils.d.ts +4 -0
- package/dist/client/clients/featureFlags/utils.d.ts.map +1 -0
- package/dist/client/clients/featureFlags/utils.js +28 -0
- package/dist/client/clients/featureFlags/utils.js.map +1 -0
- package/dist/client/clients/featureFlags/utils.test.d.ts +2 -0
- package/dist/client/clients/featureFlags/utils.test.d.ts.map +1 -0
- package/dist/client/clients/featureFlags/utils.test.js +37 -0
- package/dist/client/clients/featureFlags/utils.test.js.map +1 -0
- package/dist/clients-configurations/clients-configuration.json +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +4 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/package.json +14 -3
- package/src/client/auth/index.ts +3 -1
- package/src/client/clients/featureFlags/const.ts +3 -0
- package/src/client/clients/featureFlags/index.test.ts +63 -0
- package/src/client/clients/featureFlags/index.ts +74 -0
- package/src/client/clients/featureFlags/open-api-definition.json +40422 -0
- package/src/client/clients/featureFlags/schema.ts +33768 -0
- package/src/client/clients/featureFlags/utils.test.ts +51 -0
- package/src/client/clients/featureFlags/utils.ts +42 -0
- package/src/clients-configurations/clients-configuration.json +8 -0
- package/src/index.ts +5 -0
- package/src/types/index.ts +5 -1
- package/tap.yml +14 -0
- package/tsconfig.json +1 -0
- package/vitest.config.cts +9 -0
package/README.md
CHANGED
|
@@ -162,3 +162,58 @@ To fix the formatting and linting errors run:
|
|
|
162
162
|
npm run fix:formatting
|
|
163
163
|
npm run fix:linting
|
|
164
164
|
```
|
|
165
|
+
|
|
166
|
+
### Testing
|
|
167
|
+
|
|
168
|
+
The project uses `vitest` for testing. To run the tests:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
npm test
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Feature Flags
|
|
175
|
+
|
|
176
|
+
### Pre-requisites
|
|
177
|
+
For local development, you should have the Feature Flags service running.
|
|
178
|
+
Refer to the [unleash](https://github.com/ogcio/unleash) repository for instructions on how to run the service.
|
|
179
|
+
You can also find examples on how to run Unleash with different auth strategies in the [unleash-examples](https://github.com/ogcio/unleash-examples/tree/feat/oidc-auth) repository.
|
|
180
|
+
|
|
181
|
+
### Usage
|
|
182
|
+
|
|
183
|
+
To use the Feature Flags service you will need:
|
|
184
|
+
|
|
185
|
+
- `baseUrl` A valid `Feature Flags` service URL. Use `http://localhost:4242` for local development.
|
|
186
|
+
- `token` A valid `Feature Flags` service token. Refer to [Client Tokens](https://docs.getunleash.io/reference/api-tokens-and-client-keys#client-tokens)
|
|
187
|
+
for instructions on how to generate a token.
|
|
188
|
+
|
|
189
|
+
Initialize the SDK with the `featureFlags` service:
|
|
190
|
+
|
|
191
|
+
```typescript
|
|
192
|
+
const sdk = getBuildingBlockSDK({
|
|
193
|
+
services: {
|
|
194
|
+
featureFlags: {
|
|
195
|
+
baseUrl,
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
getTokenFn: () => token,
|
|
199
|
+
});
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Use the `featureFlags` service to check if a feature is enabled (without any context):
|
|
203
|
+
|
|
204
|
+
```typescript
|
|
205
|
+
const isEnabled = await sdk.featureFlags.isFlagEnabled("feature-name");
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Use the `featureFlags` service to check if a feature is enabled with context:
|
|
209
|
+
|
|
210
|
+
```typescript
|
|
211
|
+
const isEnabled = await sdk.featureFlags.isFlagEnabled("feature-name", {
|
|
212
|
+
userId: "userId",
|
|
213
|
+
sessionId: "sessionId",
|
|
214
|
+
});
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
*Note*: The `isFlagEnabled` is asynchronous because if the client is not connected yet,
|
|
218
|
+
it will wait for the connection to be established before checking the flag.
|
|
219
|
+
Once the client is connected, the flag will be checked synchronously.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/auth/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/auth/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAGV,gBAAgB,EAEhB,aAAa,EAEd,MAAM,sBAAsB,CAAC;AAmF9B,eAAO,MAAM,aAAa,mBACR,gBAAgB,KAC/B,aAqCF,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import configFile from "../../clients-configurations/clients-configuration.json"
|
|
1
|
+
import configFile from "../../clients-configurations/clients-configuration.json" with {
|
|
2
|
+
type: "json"
|
|
3
|
+
};
|
|
2
4
|
const fetchToken = async (params) => {
|
|
3
5
|
const body = {
|
|
4
6
|
...params.specificBodyFields,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,yDAAyD,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/auth/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../../../src/client/clients/featureFlags/const.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,kBAAkB,YAAY,CAAC;AAErC,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"","sources":["../../../../src/client/clients/featureFlags/const.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAErC,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type createClient from "openapi-fetch";
|
|
2
|
+
import { type Context } from "unleash-client";
|
|
3
|
+
import type { BaseApiClientParams } from "../../../types/index.js";
|
|
4
|
+
import BaseClient from "../../base-client.js";
|
|
5
|
+
import type { components, paths } from "./schema.js";
|
|
6
|
+
declare class FeatureFlags extends BaseClient<paths> {
|
|
7
|
+
client: ReturnType<typeof createClient<paths>>;
|
|
8
|
+
protected serviceName: "featureFlags";
|
|
9
|
+
private unleashClient;
|
|
10
|
+
isConnected: boolean;
|
|
11
|
+
constructor({ baseUrl, getTokenFn }: BaseApiClientParams);
|
|
12
|
+
isFlagEnabled(name: string, context?: Context): Promise<boolean>;
|
|
13
|
+
getFeatureFlags(projectId?: string): Promise<{
|
|
14
|
+
data: components["schemas"]["projectFeatureSchema"][];
|
|
15
|
+
metadata: any;
|
|
16
|
+
error: {
|
|
17
|
+
id?: string;
|
|
18
|
+
name?: string;
|
|
19
|
+
message?: string;
|
|
20
|
+
} | {
|
|
21
|
+
id?: string;
|
|
22
|
+
name?: string;
|
|
23
|
+
message?: string;
|
|
24
|
+
} | {
|
|
25
|
+
id?: string;
|
|
26
|
+
name?: string;
|
|
27
|
+
message?: string;
|
|
28
|
+
};
|
|
29
|
+
}>;
|
|
30
|
+
private waitForConnection;
|
|
31
|
+
}
|
|
32
|
+
export default FeatureFlags;
|
|
33
|
+
export type { Context as FeatureFlagsEvaluationContext };
|
|
34
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/client/clients/featureFlags/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAC9C,OAAO,EACL,KAAK,OAAO,EAIb,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,OAAO,UAAU,MAAM,sBAAsB,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGrD,cAAM,YAAa,SAAQ,UAAU,CAAC,KAAK,CAAC;IAClC,MAAM,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,SAAS,CAAC,WAAW,iBAAiB;IAEtC,OAAO,CAAC,aAAa,CAAwB;IACtC,WAAW,UAAS;gBAEf,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,mBAAmB;IAkBlD,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;IAK7C,eAAe,CAAC,SAAS,SAAqB;cAclB,UAAU,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC,EAAE;;;;;;;;;;;;;;;;YASnE,iBAAiB;CAGhC;AAED,eAAe,YAAY,CAAC;AAC5B,YAAY,EAAE,OAAO,IAAI,6BAA6B,EAAE,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { InMemStorageProvider, initialize, } from "unleash-client";
|
|
2
|
+
import { FEATURE_FLAGS } from "../../../types/index.js";
|
|
3
|
+
import BaseClient from "../../base-client.js";
|
|
4
|
+
import { DEFAULT_PROJECT_ID } from "./const.js";
|
|
5
|
+
import { waitForConnection } from "./utils.js";
|
|
6
|
+
class FeatureFlags extends BaseClient {
|
|
7
|
+
serviceName = FEATURE_FLAGS;
|
|
8
|
+
unleashClient = null;
|
|
9
|
+
isConnected = false;
|
|
10
|
+
constructor({ baseUrl, getTokenFn }) {
|
|
11
|
+
super({ baseUrl, getTokenFn });
|
|
12
|
+
const token = getTokenFn ? getTokenFn(FEATURE_FLAGS) : "";
|
|
13
|
+
this.unleashClient = initialize({
|
|
14
|
+
appName: this.serviceName,
|
|
15
|
+
url: `${baseUrl}/api`,
|
|
16
|
+
refreshInterval: 1000,
|
|
17
|
+
customHeaders: {
|
|
18
|
+
Authorization: token,
|
|
19
|
+
},
|
|
20
|
+
storageProvider: new InMemStorageProvider(),
|
|
21
|
+
});
|
|
22
|
+
this.unleashClient.on("error", console.error);
|
|
23
|
+
this.unleashClient.on("synchronized", () => {
|
|
24
|
+
this.isConnected = true;
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
async isFlagEnabled(name, context) {
|
|
28
|
+
await this.waitForConnection();
|
|
29
|
+
return this.unleashClient?.isEnabled(name, context, () => false) ?? false;
|
|
30
|
+
}
|
|
31
|
+
async getFeatureFlags(projectId = DEFAULT_PROJECT_ID) {
|
|
32
|
+
return await this.client
|
|
33
|
+
.GET("/api/admin/projects/{projectId}/features", {
|
|
34
|
+
params: {
|
|
35
|
+
path: {
|
|
36
|
+
projectId,
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
})
|
|
40
|
+
.then((response) => {
|
|
41
|
+
// @ts-expect-error: TODO: fix me
|
|
42
|
+
const { data, metadata, error } = this.formatResponse(response);
|
|
43
|
+
return {
|
|
44
|
+
data: data?.features,
|
|
45
|
+
metadata,
|
|
46
|
+
error,
|
|
47
|
+
};
|
|
48
|
+
}, (reason) => this.formatError(reason));
|
|
49
|
+
}
|
|
50
|
+
async waitForConnection(everyMs = 10) {
|
|
51
|
+
return waitForConnection(this, everyMs);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export default FeatureFlags;
|
|
55
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/client/clients/featureFlags/index.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,oBAAoB,EAEpB,UAAU,GACX,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,UAAU,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,YAAa,SAAQ,UAAiB;IAEhC,WAAW,GAAG,aAAa,CAAC;IAE9B,aAAa,GAAmB,IAAI,CAAC;IACtC,WAAW,GAAG,KAAK,CAAC;IAE3B,YAAY,EAAE,OAAO,EAAE,UAAU,EAAuB;QACtD,KAAK,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAE,UAAU,CAAC,aAAa,CAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC;YAC9B,OAAO,EAAE,IAAI,CAAC,WAAW;YACzB,GAAG,EAAE,GAAG,OAAO,MAAM;YACrB,eAAe,EAAE,IAAI;YACrB,aAAa,EAAE;gBACb,aAAa,EAAE,KAAK;aACrB;YACD,eAAe,EAAE,IAAI,oBAAoB,EAAE;SAC5C,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;YACzC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAY,EAAE,OAAiB;QACjD,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,SAAS,GAAG,kBAAkB;QAClD,OAAO,MAAM,IAAI,CAAC,MAAM;aACrB,GAAG,CAAC,0CAA0C,EAAE;YAC/C,MAAM,EAAE;gBACN,IAAI,EAAE;oBACJ,SAAS;iBACV;aACF;SACF,CAAC;aACD,IAAI,CACH,CAAC,QAAQ,EAAE,EAAE;YACX,iCAAiC;YACjC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAChE,OAAO;gBACL,IAAI,EAAE,IAAI,EAAE,QAA2D;gBACvE,QAAQ;gBACR,KAAK;aACN,CAAC;QACJ,CAAC,EACD,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CACrC,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,OAAO,GAAG,EAAE;QAC1C,OAAO,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../../../src/client/clients/featureFlags/index.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import t from "tap";
|
|
2
|
+
import * as td from "testdouble";
|
|
3
|
+
import FeatureFlags from "./index.js";
|
|
4
|
+
let isEnabled = true;
|
|
5
|
+
await td.replaceEsm("unleash-client", {
|
|
6
|
+
initialize: td.func(),
|
|
7
|
+
InMemStorageProvider: td.func(),
|
|
8
|
+
});
|
|
9
|
+
let fetchResponse = {};
|
|
10
|
+
global.fetch = async () => ({
|
|
11
|
+
ok: true,
|
|
12
|
+
status: 200,
|
|
13
|
+
json: async () => fetchResponse,
|
|
14
|
+
headers: new Headers(),
|
|
15
|
+
});
|
|
16
|
+
t.test("FeatureFlags", async (t) => {
|
|
17
|
+
const baseUrl = "http://fakehost";
|
|
18
|
+
const getTokenFn = () => "test-token";
|
|
19
|
+
let featureFlags;
|
|
20
|
+
t.beforeEach(async () => {
|
|
21
|
+
featureFlags = new FeatureFlags({ baseUrl, getTokenFn });
|
|
22
|
+
});
|
|
23
|
+
t.test("should initialize unleash client with correct parameters", async (t) => {
|
|
24
|
+
t.ok(featureFlags.isConnected);
|
|
25
|
+
});
|
|
26
|
+
t.test("should return false if flag is not enabled", async (t) => {
|
|
27
|
+
isEnabled = false;
|
|
28
|
+
const result = await featureFlags.isFlagEnabled("test-flag");
|
|
29
|
+
t.equal(result, isEnabled);
|
|
30
|
+
});
|
|
31
|
+
t.test("should return true if flag is enabled", async (t) => {
|
|
32
|
+
isEnabled = true;
|
|
33
|
+
const result = await featureFlags.isFlagEnabled("test-flag");
|
|
34
|
+
t.equal(result, isEnabled);
|
|
35
|
+
});
|
|
36
|
+
t.test("should call GET method on client when getFeatureFlags is called", async () => {
|
|
37
|
+
fetchResponse = { data: { features: [] }, metadata: {} };
|
|
38
|
+
const result = await featureFlags.getFeatureFlags();
|
|
39
|
+
t.ok(result);
|
|
40
|
+
t.same(result, {
|
|
41
|
+
data: [],
|
|
42
|
+
metadata: {},
|
|
43
|
+
error: null,
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../src/client/clients/featureFlags/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,YAAY,MAAM,YAAY,CAAC;AAEtC,IAAI,SAAS,GAAG,IAAI,CAAC;AAErB,MAAM,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE;IACpC,UAAU,EAAE,EAAE,CAAC,IAAI,EAAE;IACrB,oBAAoB,EAAE,EAAE,CAAC,IAAI,EAAE;CAChC,CAAC,CAAC;AAEH,IAAI,aAAa,GAAG,EAAE,CAAC;AAEvB,MAAM,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE,CACxB,CAAC;IACC,EAAE,EAAE,IAAI;IACR,MAAM,EAAE,GAAG;IACX,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,aAAa;IAC/B,OAAO,EAAE,IAAI,OAAO,EAAE;CACvB,CAAa,CAAC;AAEjB,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACjC,MAAM,OAAO,GAAG,iBAAiB,CAAC;IAClC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC;IACtC,IAAI,YAA0B,CAAC;IAE/B,CAAC,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;QACtB,YAAY,GAAG,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,CAAC,CAAC,IAAI,CACJ,0DAA0D,EAC1D,KAAK,EAAE,CAAC,EAAE,EAAE;QACV,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IACjC,CAAC,CACF,CAAC;IAEF,CAAC,CAAC,IAAI,CAAC,4CAA4C,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC/D,SAAS,GAAG,KAAK,CAAC;QAClB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QAC7D,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,CAAC,CAAC,IAAI,CAAC,uCAAuC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1D,SAAS,GAAG,IAAI,CAAC;QACjB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QAC7D,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,CAAC,CAAC,IAAI,CACJ,iEAAiE,EACjE,KAAK,IAAI,EAAE;QACT,aAAa,GAAG,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,eAAe,EAAE,CAAC;QACpD,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QACb,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,EAAE,EAAE;YACR,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;IACL,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC"}
|