@webiny/api-sync-system 0.0.0-unstable.e6f0dc8ca7 → 0.0.0-unstable.e9333b3f0b
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/constants.js +2 -1
- package/constants.js.map +1 -1
- package/index.d.ts +11 -3
- package/index.js +8 -5
- package/package.json +23 -18
- package/resolver/SyncResolverConfig.d.ts +17 -0
- package/resolver/SyncResolverConfig.js +5 -0
- package/resolver/SyncResolverConfig.js.map +1 -0
- package/resolver/SyncResolverLambdaHandler.d.ts +14 -0
- package/resolver/SyncResolverLambdaHandler.js +159 -0
- package/resolver/SyncResolverLambdaHandler.js.map +1 -0
- package/resolver/app/RecordHandler.js +83 -105
- package/resolver/app/RecordHandler.js.map +1 -1
- package/resolver/app/RecordsValidation.js +11 -14
- package/resolver/app/RecordsValidation.js.map +1 -1
- package/resolver/app/ResolverApplication.js +24 -31
- package/resolver/app/ResolverApplication.js.map +1 -1
- package/resolver/app/abstractions/RecordHandler.js +0 -3
- package/resolver/app/abstractions/RecordsValidation.js +0 -3
- package/resolver/app/abstractions/ResolverApplication.js +0 -3
- package/resolver/app/abstractions/ResolverRecord.js +0 -3
- package/resolver/app/bundler/BaseBundle.js +17 -16
- package/resolver/app/bundler/BaseBundle.js.map +1 -1
- package/resolver/app/bundler/Bundler.js +13 -18
- package/resolver/app/bundler/Bundler.js.map +1 -1
- package/resolver/app/bundler/Bundles.js +21 -26
- package/resolver/app/bundler/Bundles.js.map +1 -1
- package/resolver/app/bundler/CommandBundle.js +7 -16
- package/resolver/app/bundler/CommandBundle.js.map +1 -1
- package/resolver/app/bundler/TableBundle.js +6 -13
- package/resolver/app/bundler/TableBundle.js.map +1 -1
- package/resolver/app/bundler/types.js +0 -3
- package/resolver/app/commandHandler/DeleteCommandHandler.js +22 -29
- package/resolver/app/commandHandler/DeleteCommandHandler.js.map +1 -1
- package/resolver/app/commandHandler/PutCommandHandler.js +16 -22
- package/resolver/app/commandHandler/PutCommandHandler.js.map +1 -1
- package/resolver/app/commandHandler/delete.js +11 -12
- package/resolver/app/commandHandler/delete.js.map +1 -1
- package/resolver/app/commandHandler/put.js +11 -12
- package/resolver/app/commandHandler/put.js.map +1 -1
- package/resolver/app/data/SourceDataContainer.js +28 -30
- package/resolver/app/data/SourceDataContainer.js.map +1 -1
- package/resolver/app/data/types.js +0 -3
- package/resolver/app/fetcher/Fetcher.js +84 -109
- package/resolver/app/fetcher/Fetcher.js.map +1 -1
- package/resolver/app/fetcher/types.js +0 -3
- package/resolver/app/ingestor/Ingestor.js +27 -32
- package/resolver/app/ingestor/Ingestor.js.map +1 -1
- package/resolver/app/ingestor/IngestorResult.js +28 -32
- package/resolver/app/ingestor/IngestorResult.js.map +1 -1
- package/resolver/app/ingestor/types.js +0 -3
- package/resolver/app/storer/Storer.js +71 -85
- package/resolver/app/storer/Storer.js.map +1 -1
- package/resolver/app/storer/types.js +0 -3
- package/resolver/app/transform/TransformHandler.js +45 -56
- package/resolver/app/transform/TransformHandler.js.map +1 -1
- package/resolver/app/transform/middleware.js +13 -20
- package/resolver/app/transform/middleware.js.map +1 -1
- package/resolver/app/utils/Retry.js +21 -24
- package/resolver/app/utils/Retry.js.map +1 -1
- package/resolver/app/utils/sleep.js +4 -5
- package/resolver/app/utils/sleep.js.map +1 -1
- package/resolver/app/validation/body.d.ts +5 -5
- package/resolver/app/validation/body.js +26 -31
- package/resolver/app/validation/body.js.map +1 -1
- package/resolver/app/validation/createJsonTransform.js +12 -13
- package/resolver/app/validation/createJsonTransform.js.map +1 -1
- package/resolver/app/validation/detail.d.ts +5 -5
- package/resolver/app/validation/detail.js +30 -35
- package/resolver/app/validation/detail.js.map +1 -1
- package/resolver/app/validation/event.d.ts +5 -5
- package/resolver/app/validation/event.js +17 -18
- package/resolver/app/validation/event.js.map +1 -1
- package/resolver/app/validation/numericString.js +8 -11
- package/resolver/app/validation/numericString.js.map +1 -1
- package/resolver/app/validation/system.js +8 -9
- package/resolver/app/validation/system.js.map +1 -1
- package/resolver/deployment/Deployment.js +28 -31
- package/resolver/deployment/Deployment.js.map +1 -1
- package/resolver/deployment/Deployments.js +20 -23
- package/resolver/deployment/Deployments.js.map +1 -1
- package/resolver/deployment/DeploymentsFetcher.js +75 -84
- package/resolver/deployment/DeploymentsFetcher.js.map +1 -1
- package/resolver/deployment/types.js +0 -3
- package/resolver/lambda/LambdaTrigger.js +24 -26
- package/resolver/lambda/LambdaTrigger.js.map +1 -1
- package/resolver/plugins/CommandHandlerPlugin.js +16 -15
- package/resolver/plugins/CommandHandlerPlugin.js.map +1 -1
- package/resolver/plugins/StorerAfterEachPlugin.js +20 -19
- package/resolver/plugins/StorerAfterEachPlugin.js.map +1 -1
- package/resolver/plugins/TransformRecordPlugin.js +19 -18
- package/resolver/plugins/TransformRecordPlugin.js.map +1 -1
- package/resolver/recordTypes/fileManager/CopyFile.js +44 -67
- package/resolver/recordTypes/fileManager/CopyFile.js.map +1 -1
- package/resolver/recordTypes/fileManager/DeleteFile.js +40 -58
- package/resolver/recordTypes/fileManager/DeleteFile.js.map +1 -1
- package/resolver/recordTypes/fileManager/fileManager.js +5 -3
- package/resolver/recordTypes/fileManager/fileManager.js.map +1 -1
- package/resolver/recordTypes/fileManager/fileManagerOnDelete.js +24 -35
- package/resolver/recordTypes/fileManager/fileManagerOnDelete.js.map +1 -1
- package/resolver/recordTypes/fileManager/fileManagerOnPut.js +24 -35
- package/resolver/recordTypes/fileManager/fileManagerOnPut.js.map +1 -1
- package/resolver/recordTypes/fileManager/shouldBeHandled.js +10 -27
- package/resolver/recordTypes/fileManager/shouldBeHandled.js.map +1 -1
- package/resolver/recordTypes/fileManager/types.js +0 -3
- package/resolver/recordTypes/users/CopyUser.js +44 -54
- package/resolver/recordTypes/users/CopyUser.js.map +1 -1
- package/resolver/recordTypes/users/DeleteUser.js +40 -51
- package/resolver/recordTypes/users/DeleteUser.js.map +1 -1
- package/resolver/recordTypes/users/shouldBeHandled.js +10 -26
- package/resolver/recordTypes/users/shouldBeHandled.js.map +1 -1
- package/resolver/recordTypes/users/types.js +0 -3
- package/resolver/recordTypes/users/users.js +5 -3
- package/resolver/recordTypes/users/users.js.map +1 -1
- package/resolver/recordTypes/users/usersOnDelete.js +23 -34
- package/resolver/recordTypes/users/usersOnDelete.js.map +1 -1
- package/resolver/recordTypes/users/usersOnPut.js +24 -35
- package/resolver/recordTypes/users/usersOnPut.js.map +1 -1
- package/sync/ApiGatewaySyncDecorator.d.ts +14 -0
- package/sync/ApiGatewaySyncDecorator.js +49 -0
- package/sync/ApiGatewaySyncDecorator.js.map +1 -0
- package/sync/FilterOutRecord.js +9 -17
- package/sync/FilterOutRecord.js.map +1 -1
- package/sync/SyncSystemConfig.d.ts +11 -0
- package/sync/SyncSystemConfig.js +5 -0
- package/sync/SyncSystemConfig.js.map +1 -0
- package/sync/attachToDynamoDbDocument.js +46 -65
- package/sync/attachToDynamoDbDocument.js.map +1 -1
- package/sync/createHandler.js +31 -40
- package/sync/createHandler.js.map +1 -1
- package/sync/filter/createDefaultFilterOutRecordPlugins.js +37 -76
- package/sync/filter/createDefaultFilterOutRecordPlugins.js.map +1 -1
- package/sync/handler/Handler.js +64 -76
- package/sync/handler/Handler.js.map +1 -1
- package/sync/handler/HandlerConverter.js +21 -29
- package/sync/handler/HandlerConverter.js.map +1 -1
- package/sync/handler/converter/BatchGetCommandConverter.js +12 -11
- package/sync/handler/converter/BatchGetCommandConverter.js.map +1 -1
- package/sync/handler/converter/BatchWriteCommandConverter.js +12 -11
- package/sync/handler/converter/BatchWriteCommandConverter.js.map +1 -1
- package/sync/handler/converter/DeleteCommandConverter.js +12 -11
- package/sync/handler/converter/DeleteCommandConverter.js.map +1 -1
- package/sync/handler/converter/GetCommandConverter.js +12 -11
- package/sync/handler/converter/GetCommandConverter.js.map +1 -1
- package/sync/handler/converter/PutCommandConverter.js +12 -11
- package/sync/handler/converter/PutCommandConverter.js.map +1 -1
- package/sync/handler/converter/QueryCommandConverter.js +12 -11
- package/sync/handler/converter/QueryCommandConverter.js.map +1 -1
- package/sync/handler/converter/ScanCommandConverter.js +12 -11
- package/sync/handler/converter/ScanCommandConverter.js.map +1 -1
- package/sync/handler/converter/UpdateCommandConverter.js +12 -11
- package/sync/handler/converter/UpdateCommandConverter.js.map +1 -1
- package/sync/handler/converter/commands/BatchWriteCommandValue.js +34 -37
- package/sync/handler/converter/commands/BatchWriteCommandValue.js.map +1 -1
- package/sync/handler/converter/commands/DeleteCommandValue.js +19 -16
- package/sync/handler/converter/commands/DeleteCommandValue.js.map +1 -1
- package/sync/handler/converter/commands/NullCommandValue.js +8 -8
- package/sync/handler/converter/commands/NullCommandValue.js.map +1 -1
- package/sync/handler/converter/commands/PutCommandValue.js +19 -16
- package/sync/handler/converter/commands/PutCommandValue.js.map +1 -1
- package/sync/handler/converter/commands/UpdateCommandValue.js +19 -16
- package/sync/handler/converter/commands/UpdateCommandValue.js.map +1 -1
- package/sync/handler/types.js +0 -3
- package/sync/plugins/FilterOutRecordPlugin.js +17 -19
- package/sync/plugins/FilterOutRecordPlugin.js.map +1 -1
- package/sync/types.js +0 -3
- package/sync/utils/getTableType.js +10 -9
- package/sync/utils/getTableType.js.map +1 -1
- package/sync/utils/manifest.d.ts +2 -6
- package/sync/utils/manifest.js +27 -36
- package/sync/utils/manifest.js.map +1 -1
- package/sync/utils/validateSystemInput.js +21 -29
- package/sync/utils/validateSystemInput.js.map +1 -1
- package/types.d.ts +0 -2
- package/types.js +6 -5
- package/types.js.map +1 -1
- package/utils/createSystemName.js +5 -3
- package/utils/createSystemName.js.map +1 -1
- package/worker/SyncWorkerConfig.d.ts +9 -0
- package/worker/SyncWorkerConfig.js +5 -0
- package/worker/SyncWorkerConfig.js.map +1 -0
- package/worker/SyncWorkerEventHandler.d.ts +14 -0
- package/worker/SyncWorkerEventHandler.js +5 -0
- package/worker/SyncWorkerEventHandler.js.map +1 -0
- package/worker/SyncWorkerEventType.d.ts +10 -0
- package/worker/SyncWorkerEventType.js +24 -0
- package/worker/SyncWorkerEventType.js.map +1 -0
- package/worker/SyncWorkerLambdaHandler.d.ts +13 -0
- package/worker/SyncWorkerLambdaHandler.js +61 -0
- package/worker/SyncWorkerLambdaHandler.js.map +1 -0
- package/worker/actions/copyFile/CopyFile.js +183 -258
- package/worker/actions/copyFile/CopyFile.js.map +1 -1
- package/worker/actions/copyFile/copyFileAction.js +26 -34
- package/worker/actions/copyFile/copyFileAction.js.map +1 -1
- package/worker/actions/copyFile/copyFileSchema.js +13 -14
- package/worker/actions/copyFile/copyFileSchema.js.map +1 -1
- package/worker/actions/copyFile/types.js +0 -3
- package/worker/actions/createUser/CreateUser.js +51 -74
- package/worker/actions/createUser/CreateUser.js.map +1 -1
- package/worker/actions/createUser/createUserAction.js +24 -28
- package/worker/actions/createUser/createUserAction.js.map +1 -1
- package/worker/actions/createUser/createUserSchema.js +13 -14
- package/worker/actions/createUser/createUserSchema.js.map +1 -1
- package/worker/actions/createUser/types.js +0 -3
- package/worker/actions/deleteFile/DeleteFile.js +52 -67
- package/worker/actions/deleteFile/DeleteFile.js.map +1 -1
- package/worker/actions/deleteFile/deleteFileAction.js +21 -29
- package/worker/actions/deleteFile/deleteFileAction.js.map +1 -1
- package/worker/actions/deleteFile/deleteFileSchema.js +13 -14
- package/worker/actions/deleteFile/deleteFileSchema.js.map +1 -1
- package/worker/actions/deleteFile/types.js +0 -3
- package/worker/actions/deleteUser/DeleteUser.js +38 -52
- package/worker/actions/deleteUser/DeleteUser.js.map +1 -1
- package/worker/actions/deleteUser/deleteUserAction.js +22 -26
- package/worker/actions/deleteUser/deleteUserAction.js.map +1 -1
- package/worker/actions/deleteUser/deleteUserSchema.js +12 -13
- package/worker/actions/deleteUser/deleteUserSchema.js.map +1 -1
- package/worker/actions/deleteUser/types.js +0 -3
- package/worker/actions/logValidationError.js +5 -6
- package/worker/actions/logValidationError.js.map +1 -1
- package/worker/actions/removeCognitoUserAttributes.js +9 -15
- package/worker/actions/removeCognitoUserAttributes.js.map +1 -1
- package/worker/actions/updateUser/UpdateUser.js +48 -65
- package/worker/actions/updateUser/UpdateUser.js.map +1 -1
- package/worker/actions/updateUser/types.js +0 -3
- package/worker/actions/updateUser/updateUserAction.js +24 -28
- package/worker/actions/updateUser/updateUserAction.js.map +1 -1
- package/worker/actions/updateUser/updateUserSchema.js +13 -14
- package/worker/actions/updateUser/updateUserSchema.js.map +1 -1
- package/worker/handler/WorkerActionHandler.js +19 -21
- package/worker/handler/WorkerActionHandler.js.map +1 -1
- package/worker/plugins/WorkerActionPlugin.js +17 -16
- package/worker/plugins/WorkerActionPlugin.js.map +1 -1
- package/worker/types.js +0 -3
- package/index.js.map +0 -1
- package/resolver/app/abstractions/RecordHandler.js.map +0 -1
- package/resolver/app/abstractions/RecordsValidation.js.map +0 -1
- package/resolver/app/abstractions/ResolverApplication.js.map +0 -1
- package/resolver/app/abstractions/ResolverRecord.js.map +0 -1
- package/resolver/app/bundler/types.js.map +0 -1
- package/resolver/app/data/types.js.map +0 -1
- package/resolver/app/fetcher/types.js.map +0 -1
- package/resolver/app/ingestor/types.js.map +0 -1
- package/resolver/app/storer/types.js.map +0 -1
- package/resolver/createEventHandlerPlugin.d.ts +0 -11
- package/resolver/createEventHandlerPlugin.js +0 -120
- package/resolver/createEventHandlerPlugin.js.map +0 -1
- package/resolver/createResolverHandler.d.ts +0 -21
- package/resolver/createResolverHandler.js +0 -72
- package/resolver/createResolverHandler.js.map +0 -1
- package/resolver/deployment/types.js.map +0 -1
- package/resolver/recordTypes/fileManager/types.js.map +0 -1
- package/resolver/recordTypes/users/types.js.map +0 -1
- package/sync/createSendDataToEventBridgeOnRequestEnd.d.ts +0 -2
- package/sync/createSendDataToEventBridgeOnRequestEnd.js +0 -44
- package/sync/createSendDataToEventBridgeOnRequestEnd.js.map +0 -1
- package/sync/createSyncSystem.d.ts +0 -16
- package/sync/createSyncSystem.js +0 -35
- package/sync/createSyncSystem.js.map +0 -1
- package/sync/handler/types.js.map +0 -1
- package/sync/requestPlugin.d.ts +0 -9
- package/sync/requestPlugin.js +0 -58
- package/sync/requestPlugin.js.map +0 -1
- package/sync/types.js.map +0 -1
- package/worker/actions/copyFile/types.js.map +0 -1
- package/worker/actions/createUser/types.js.map +0 -1
- package/worker/actions/deleteFile/types.js.map +0 -1
- package/worker/actions/deleteUser/types.js.map +0 -1
- package/worker/actions/updateUser/types.js.map +0 -1
- package/worker/createWorkerHandler.d.ts +0 -11
- package/worker/createWorkerHandler.js +0 -41
- package/worker/createWorkerHandler.js.map +0 -1
- package/worker/handler/eventHandler.d.ts +0 -1
- package/worker/handler/eventHandler.js +0 -24
- package/worker/handler/eventHandler.js.map +0 -1
- package/worker/types.js.map +0 -1
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import zod from "zod";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
};
|
|
2
|
+
const createJsonTransform = (name)=>zod.string().transform((value, ctx)=>{
|
|
3
|
+
try {
|
|
4
|
+
return JSON.parse(value);
|
|
5
|
+
} catch {
|
|
6
|
+
ctx.addIssue({
|
|
7
|
+
code: zod.ZodIssueCode.custom,
|
|
8
|
+
message: `${name} must be a valid JSON string.`
|
|
9
|
+
});
|
|
10
|
+
return zod.NEVER;
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
export { createJsonTransform };
|
|
15
14
|
|
|
16
15
|
//# sourceMappingURL=createJsonTransform.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"resolver/app/validation/createJsonTransform.js","sources":["../../../../src/resolver/app/validation/createJsonTransform.ts"],"sourcesContent":["import zod from \"zod\";\n\nexport const createJsonTransform = (name: string) => {\n return zod.string().transform((value, ctx) => {\n try {\n return JSON.parse(value);\n } catch {\n ctx.addIssue({\n code: zod.ZodIssueCode.custom,\n message: `${name} must be a valid JSON string.`\n });\n return zod.NEVER;\n }\n });\n};\n"],"names":["createJsonTransform","name","zod","value","ctx","JSON"],"mappings":";AAEO,MAAMA,sBAAsB,CAACC,OACzBC,IAAI,MAAM,GAAG,SAAS,CAAC,CAACC,OAAOC;QAClC,IAAI;YACA,OAAOC,KAAK,KAAK,CAACF;QACtB,EAAE,OAAM;YACJC,IAAI,QAAQ,CAAC;gBACT,MAAMF,IAAI,YAAY,CAAC,MAAM;gBAC7B,SAAS,GAAGD,KAAK,6BAA6B,CAAC;YACnD;YACA,OAAOC,IAAI,KAAK;QACpB;IACJ"}
|
|
@@ -8,14 +8,14 @@ export declare const createDetailValidation: () => zod.ZodObject<{
|
|
|
8
8
|
SK: zod.ZodString;
|
|
9
9
|
tableName: zod.ZodString;
|
|
10
10
|
tableType: zod.ZodPipe<zod.ZodEnum<{
|
|
11
|
-
|
|
11
|
+
log: "log";
|
|
12
12
|
opensearch: "opensearch";
|
|
13
|
+
regular: "regular";
|
|
13
14
|
unknown: "unknown";
|
|
14
|
-
|
|
15
|
-
}>, zod.ZodTransform<DynamoDBTableType, "regular" | "opensearch" | "unknown" | "log">>;
|
|
15
|
+
}>, zod.ZodTransform<DynamoDBTableType, "log" | "opensearch" | "regular" | "unknown">>;
|
|
16
16
|
command: zod.ZodEnum<{
|
|
17
|
-
put: "put";
|
|
18
17
|
delete: "delete";
|
|
18
|
+
put: "put";
|
|
19
19
|
update: "update";
|
|
20
20
|
}>;
|
|
21
21
|
}, zod.core.$strip>>, zod.ZodTransform<NonEmptyArray<IResolverRecordBodyItem>, {
|
|
@@ -23,7 +23,7 @@ export declare const createDetailValidation: () => zod.ZodObject<{
|
|
|
23
23
|
SK: string;
|
|
24
24
|
tableName: string;
|
|
25
25
|
tableType: DynamoDBTableType;
|
|
26
|
-
command: "
|
|
26
|
+
command: "delete" | "put" | "update";
|
|
27
27
|
}[]>>;
|
|
28
28
|
source: zod.ZodObject<{
|
|
29
29
|
name: zod.ZodString;
|
|
@@ -1,42 +1,37 @@
|
|
|
1
1
|
import zod from "zod";
|
|
2
2
|
import { createSystemValidation } from "./system.js";
|
|
3
3
|
import { DynamoDBTableType } from "../../../types.js";
|
|
4
|
-
const convert = input
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const transformTableType = input => {
|
|
11
|
-
const keys = Object.keys(DynamoDBTableType);
|
|
12
|
-
for (const key of keys) {
|
|
13
|
-
const value = DynamoDBTableType[key];
|
|
14
|
-
if (value === input) {
|
|
15
|
-
return value;
|
|
4
|
+
const convert = (input)=>input;
|
|
5
|
+
const transformTableType = (input)=>{
|
|
6
|
+
const keys = Object.keys(DynamoDBTableType);
|
|
7
|
+
for (const key of keys){
|
|
8
|
+
const value = DynamoDBTableType[key];
|
|
9
|
+
if (value === input) return value;
|
|
16
10
|
}
|
|
17
|
-
|
|
18
|
-
return DynamoDBTableType.UNKNOWN;
|
|
19
|
-
};
|
|
20
|
-
export const createDetailValidation = () => {
|
|
21
|
-
return zod.object({
|
|
22
|
-
items: zod.array(zod.object({
|
|
23
|
-
PK: zod.string(),
|
|
24
|
-
SK: zod.string(),
|
|
25
|
-
tableName: zod.string(),
|
|
26
|
-
tableType: zod.enum(["regular", "opensearch", "log", "unknown"]).transform(input => {
|
|
27
|
-
return transformTableType(input);
|
|
28
|
-
}),
|
|
29
|
-
command: zod.enum(["update", "put", "delete"])
|
|
30
|
-
})).refine(values => {
|
|
31
|
-
return values.length > 0;
|
|
32
|
-
}, {
|
|
33
|
-
message: `"items" array must not be empty.`
|
|
34
|
-
}).transform(values => {
|
|
35
|
-
return convert(values);
|
|
36
|
-
}),
|
|
37
|
-
source: createSystemValidation(),
|
|
38
|
-
id: zod.string()
|
|
39
|
-
});
|
|
11
|
+
return DynamoDBTableType.UNKNOWN;
|
|
40
12
|
};
|
|
13
|
+
const createDetailValidation = ()=>zod.object({
|
|
14
|
+
items: zod.array(zod.object({
|
|
15
|
+
PK: zod.string(),
|
|
16
|
+
SK: zod.string(),
|
|
17
|
+
tableName: zod.string(),
|
|
18
|
+
tableType: zod["enum"]([
|
|
19
|
+
"regular",
|
|
20
|
+
"opensearch",
|
|
21
|
+
"log",
|
|
22
|
+
"unknown"
|
|
23
|
+
]).transform((input)=>transformTableType(input)),
|
|
24
|
+
command: zod["enum"]([
|
|
25
|
+
"update",
|
|
26
|
+
"put",
|
|
27
|
+
"delete"
|
|
28
|
+
])
|
|
29
|
+
})).refine((values)=>values.length > 0, {
|
|
30
|
+
message: '"items" array must not be empty.'
|
|
31
|
+
}).transform((values)=>convert(values)),
|
|
32
|
+
source: createSystemValidation(),
|
|
33
|
+
id: zod.string()
|
|
34
|
+
});
|
|
35
|
+
export { createDetailValidation };
|
|
41
36
|
|
|
42
37
|
//# sourceMappingURL=detail.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"resolver/app/validation/detail.js","sources":["../../../../src/resolver/app/validation/detail.ts"],"sourcesContent":["import zod from \"zod\";\nimport type { NonEmptyArray } from \"@webiny/api/types.js\";\nimport type { IResolverRecordBodyItem } from \"~/resolver/app/abstractions/ResolverRecord.js\";\nimport { createSystemValidation } from \"./system.js\";\nimport { DynamoDBTableType } from \"~/types.js\";\n\nconst convert = (input: IResolverRecordBodyItem[]) => {\n /**\n * We can safely cast as NonEmptyArray<IResolverRecordBodyItem> here because we already validated that the array is not empty.\n */\n return input as NonEmptyArray<IResolverRecordBodyItem>;\n};\n\nconst transformTableType = (input: string): DynamoDBTableType => {\n const keys = Object.keys(DynamoDBTableType) as (keyof typeof DynamoDBTableType)[];\n for (const key of keys) {\n const value = DynamoDBTableType[key];\n if (value === input) {\n return value;\n }\n }\n return DynamoDBTableType.UNKNOWN;\n};\n\nexport const createDetailValidation = () => {\n return zod.object({\n items: zod\n .array(\n zod.object({\n PK: zod.string(),\n SK: zod.string(),\n tableName: zod.string(),\n tableType: zod\n .enum([\"regular\", \"opensearch\", \"log\", \"unknown\"])\n .transform(input => {\n return transformTableType(input);\n }),\n command: zod.enum([\"update\", \"put\", \"delete\"])\n })\n )\n .refine(\n values => {\n return values.length > 0;\n },\n {\n message: `\"items\" array must not be empty.`\n }\n )\n .transform(values => {\n return convert(values);\n }),\n source: createSystemValidation(),\n id: zod.string()\n });\n};\n"],"names":["convert","input","transformTableType","keys","Object","DynamoDBTableType","key","value","createDetailValidation","zod","values","createSystemValidation"],"mappings":";;;AAMA,MAAMA,UAAU,CAACC,QAINA;AAGX,MAAMC,qBAAqB,CAACD;IACxB,MAAME,OAAOC,OAAO,IAAI,CAACC;IACzB,KAAK,MAAMC,OAAOH,KAAM;QACpB,MAAMI,QAAQF,iBAAiB,CAACC,IAAI;QACpC,IAAIC,UAAUN,OACV,OAAOM;IAEf;IACA,OAAOF,kBAAkB,OAAO;AACpC;AAEO,MAAMG,yBAAyB,IAC3BC,IAAI,MAAM,CAAC;QACd,OAAOA,IAAAA,KACG,CACFA,IAAI,MAAM,CAAC;YACP,IAAIA,IAAI,MAAM;YACd,IAAIA,IAAI,MAAM;YACd,WAAWA,IAAI,MAAM;YACrB,WAAWA,GAAG,CAAHA,OACF,CAAC;gBAAC;gBAAW;gBAAc;gBAAO;aAAU,EAChD,SAAS,CAACR,CAAAA,QACAC,mBAAmBD;YAElC,SAASQ,GAAG,CAAHA,OAAQ,CAAC;gBAAC;gBAAU;gBAAO;aAAS;QACjD,IAEH,MAAM,CACHC,CAAAA,SACWA,OAAO,MAAM,GAAG,GAE3B;YACI,SAAS;QACb,GAEH,SAAS,CAACA,CAAAA,SACAV,QAAQU;QAEvB,QAAQC;QACR,IAAIF,IAAI,MAAM;IAClB"}
|
|
@@ -17,14 +17,14 @@ export declare const createEventValidation: () => zod.ZodArray<zod.ZodObject<{
|
|
|
17
17
|
SK: zod.ZodString;
|
|
18
18
|
tableName: zod.ZodString;
|
|
19
19
|
tableType: zod.ZodPipe<zod.ZodEnum<{
|
|
20
|
-
|
|
20
|
+
log: "log";
|
|
21
21
|
opensearch: "opensearch";
|
|
22
|
+
regular: "regular";
|
|
22
23
|
unknown: "unknown";
|
|
23
|
-
|
|
24
|
-
}>, zod.ZodTransform<import("../../../types").DynamoDBTableType, "regular" | "opensearch" | "unknown" | "log">>;
|
|
24
|
+
}>, zod.ZodTransform<import("../../../types").DynamoDBTableType, "log" | "opensearch" | "regular" | "unknown">>;
|
|
25
25
|
command: zod.ZodEnum<{
|
|
26
|
-
put: "put";
|
|
27
26
|
delete: "delete";
|
|
27
|
+
put: "put";
|
|
28
28
|
update: "update";
|
|
29
29
|
}>;
|
|
30
30
|
}, zod.core.$strip>>, zod.ZodTransform<import("@webiny/api/types").NonEmptyArray<import("../abstractions/ResolverRecord").IResolverRecordBodyItem>, {
|
|
@@ -32,7 +32,7 @@ export declare const createEventValidation: () => zod.ZodArray<zod.ZodObject<{
|
|
|
32
32
|
SK: string;
|
|
33
33
|
tableName: string;
|
|
34
34
|
tableType: import("../../../types").DynamoDBTableType;
|
|
35
|
-
command: "
|
|
35
|
+
command: "delete" | "put" | "update";
|
|
36
36
|
}[]>>;
|
|
37
37
|
source: zod.ZodObject<{
|
|
38
38
|
name: zod.ZodString;
|
|
@@ -2,23 +2,22 @@ import zod from "zod";
|
|
|
2
2
|
import { createJsonTransform } from "./createJsonTransform.js";
|
|
3
3
|
import { createBodyValidation } from "./body.js";
|
|
4
4
|
const bodyTransform = createJsonTransform("Body");
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
};
|
|
5
|
+
const createEventValidation = ()=>zod.array(zod.object({
|
|
6
|
+
messageId: zod.string(),
|
|
7
|
+
receiptHandle: zod.string(),
|
|
8
|
+
body: bodyTransform.pipe(createBodyValidation()),
|
|
9
|
+
attributes: zod.object({
|
|
10
|
+
ApproximateReceiveCount: zod.string(),
|
|
11
|
+
SentTimestamp: zod.string(),
|
|
12
|
+
SenderId: zod.string(),
|
|
13
|
+
ApproximateFirstReceiveTimestamp: zod.string()
|
|
14
|
+
}),
|
|
15
|
+
messageAttributes: zod.looseObject({}).optional(),
|
|
16
|
+
md5OfBody: zod.string(),
|
|
17
|
+
eventSource: zod.string(),
|
|
18
|
+
eventSourceARN: zod.string(),
|
|
19
|
+
awsRegion: zod.string()
|
|
20
|
+
}));
|
|
21
|
+
export { createEventValidation };
|
|
23
22
|
|
|
24
23
|
//# sourceMappingURL=event.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"resolver/app/validation/event.js","sources":["../../../../src/resolver/app/validation/event.ts"],"sourcesContent":["import zod from \"zod\";\nimport { createJsonTransform } from \"~/resolver/app/validation/createJsonTransform.js\";\nimport { createBodyValidation } from \"~/resolver/app/validation/body.js\";\n\nconst bodyTransform = createJsonTransform(\"Body\");\n\nexport const createEventValidation = () => {\n return zod.array(\n zod.object({\n messageId: zod.string(),\n receiptHandle: zod.string(),\n body: bodyTransform.pipe(createBodyValidation()),\n attributes: zod.object({\n ApproximateReceiveCount: zod.string(),\n SentTimestamp: zod.string(),\n SenderId: zod.string(),\n ApproximateFirstReceiveTimestamp: zod.string()\n }),\n messageAttributes: zod.looseObject({}).optional(),\n md5OfBody: zod.string(),\n eventSource: zod.string(),\n eventSourceARN: zod.string(),\n awsRegion: zod.string()\n })\n );\n};\n"],"names":["bodyTransform","createJsonTransform","createEventValidation","zod","createBodyValidation"],"mappings":";;;AAIA,MAAMA,gBAAgBC,oBAAoB;AAEnC,MAAMC,wBAAwB,IAC1BC,IAAI,KAAK,CACZA,IAAI,MAAM,CAAC;QACP,WAAWA,IAAI,MAAM;QACrB,eAAeA,IAAI,MAAM;QACzB,MAAMH,cAAc,IAAI,CAACI;QACzB,YAAYD,IAAI,MAAM,CAAC;YACnB,yBAAyBA,IAAI,MAAM;YACnC,eAAeA,IAAI,MAAM;YACzB,UAAUA,IAAI,MAAM;YACpB,kCAAkCA,IAAI,MAAM;QAChD;QACA,mBAAmBA,IAAI,WAAW,CAAC,CAAC,GAAG,QAAQ;QAC/C,WAAWA,IAAI,MAAM;QACrB,aAAaA,IAAI,MAAM;QACvB,gBAAgBA,IAAI,MAAM;QAC1B,WAAWA,IAAI,MAAM;IACzB"}
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
import zod from "zod";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
message: `"${name}" must be a numeric string.`
|
|
2
|
+
const createNumericStringValidation = (name)=>zod.string().transform((value, ctx)=>{
|
|
3
|
+
if (/^\d+$/.test(value)) return value;
|
|
4
|
+
ctx.addIssue({
|
|
5
|
+
code: zod.ZodIssueCode.custom,
|
|
6
|
+
message: `"${name}" must be a numeric string.`
|
|
7
|
+
});
|
|
8
|
+
return zod.NEVER;
|
|
10
9
|
});
|
|
11
|
-
|
|
12
|
-
});
|
|
13
|
-
};
|
|
10
|
+
export { createNumericStringValidation };
|
|
14
11
|
|
|
15
12
|
//# sourceMappingURL=numericString.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"resolver/app/validation/numericString.js","sources":["../../../../src/resolver/app/validation/numericString.ts"],"sourcesContent":["import zod from \"zod\";\n\nexport const createNumericStringValidation = (name: string) => {\n return zod.string().transform((value, ctx) => {\n if (/^\\d+$/.test(value)) {\n return value as `${number}`;\n }\n ctx.addIssue({\n code: zod.ZodIssueCode.custom,\n message: `\"${name}\" must be a numeric string.`\n });\n return zod.NEVER;\n });\n};\n"],"names":["createNumericStringValidation","name","zod","value","ctx"],"mappings":";AAEO,MAAMA,gCAAgC,CAACC,OACnCC,IAAI,MAAM,GAAG,SAAS,CAAC,CAACC,OAAOC;QAClC,IAAI,QAAQ,IAAI,CAACD,QACb,OAAOA;QAEXC,IAAI,QAAQ,CAAC;YACT,MAAMF,IAAI,YAAY,CAAC,MAAM;YAC7B,SAAS,CAAC,CAAC,EAAED,KAAK,2BAA2B,CAAC;QAClD;QACA,OAAOC,IAAI,KAAK;IACpB"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import zod from "zod";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
};
|
|
2
|
+
const createSystemValidation = ()=>zod.object({
|
|
3
|
+
name: zod.string(),
|
|
4
|
+
env: zod.string(),
|
|
5
|
+
variant: zod.string().optional().nullish().transform((value)=>value || void 0),
|
|
6
|
+
region: zod.string(),
|
|
7
|
+
version: zod.string()
|
|
8
|
+
});
|
|
9
|
+
export { createSystemValidation };
|
|
11
10
|
|
|
12
11
|
//# sourceMappingURL=system.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"resolver/app/validation/system.js","sources":["../../../../src/resolver/app/validation/system.ts"],"sourcesContent":["import zod from \"zod\";\n\nexport const createSystemValidation = () => {\n return zod.object({\n name: zod.string(),\n env: zod.string(),\n variant: zod\n .string()\n .optional()\n .nullish()\n .transform(value => value || undefined),\n region: zod.string(),\n version: zod.string()\n });\n};\n"],"names":["createSystemValidation","zod","value","undefined"],"mappings":";AAEO,MAAMA,yBAAyB,IAC3BC,IAAI,MAAM,CAAC;QACd,MAAMA,IAAI,MAAM;QAChB,KAAKA,IAAI,MAAM;QACf,SAASA,IAAAA,MACE,GACN,QAAQ,GACR,OAAO,GACP,SAAS,CAACC,CAAAA,QAASA,SAASC;QACjC,QAAQF,IAAI,MAAM;QAClB,SAASA,IAAI,MAAM;IACvB"}
|
|
@@ -1,36 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
1
|
+
class Deployment {
|
|
2
|
+
constructor(params){
|
|
3
|
+
this.name = params.name;
|
|
4
|
+
this.env = params.env;
|
|
5
|
+
this.variant = params.variant;
|
|
6
|
+
this.region = params.region;
|
|
7
|
+
this.services = params.services;
|
|
8
|
+
this.version = params.version;
|
|
9
|
+
}
|
|
10
|
+
getTable(type) {
|
|
11
|
+
switch(type){
|
|
12
|
+
case "regular":
|
|
13
|
+
return {
|
|
14
|
+
name: this.services.primaryDynamoDbName,
|
|
15
|
+
arn: this.services.primaryDynamoDbArn,
|
|
16
|
+
type
|
|
17
|
+
};
|
|
18
|
+
case "opensearch":
|
|
19
|
+
if (!this.services.opensearchDynamodbTableName || !this.services.opensearchDynamodbTableArn) throw new Error(`Unknown table type "${type}" - no data.`);
|
|
20
|
+
return {
|
|
21
|
+
name: this.services.opensearchDynamodbTableName,
|
|
22
|
+
arn: this.services.opensearchDynamodbTableArn,
|
|
23
|
+
type
|
|
24
|
+
};
|
|
25
|
+
default:
|
|
26
|
+
throw new Error(`Unknown table type "${type}".`);
|
|
21
27
|
}
|
|
22
|
-
return {
|
|
23
|
-
name: this.services.opensearchDynamodbTableName,
|
|
24
|
-
arn: this.services.opensearchDynamodbTableArn,
|
|
25
|
-
type
|
|
26
|
-
};
|
|
27
|
-
default:
|
|
28
|
-
throw new Error(`Unknown table type "${type}".`);
|
|
29
28
|
}
|
|
30
|
-
}
|
|
31
29
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
};
|
|
30
|
+
const createDeployment = (params)=>new Deployment(params);
|
|
31
|
+
export { Deployment, createDeployment };
|
|
35
32
|
|
|
36
33
|
//# sourceMappingURL=Deployment.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"resolver/deployment/Deployment.js","sources":["../../../src/resolver/deployment/Deployment.ts"],"sourcesContent":["import type { SemVer } from \"semver\";\nimport type { IDeployment, IDeploymentServices } from \"./types.js\";\nimport type { DynamoDBTableType } from \"~/types.js\";\nimport type { ITable } from \"~/sync/types.js\";\n\nexport type IDeploymentParams = Omit<IDeployment, \"getTable\">;\n\nexport class Deployment implements IDeployment {\n public readonly name: string;\n public readonly env: string;\n public readonly variant: string | undefined;\n public readonly region: string;\n public readonly services: IDeploymentServices;\n public readonly version: SemVer;\n\n public constructor(params: IDeploymentParams) {\n this.name = params.name;\n this.env = params.env;\n this.variant = params.variant;\n this.region = params.region;\n this.services = params.services;\n this.version = params.version;\n }\n\n public getTable(type: DynamoDBTableType): ITable {\n switch (type) {\n case \"regular\":\n return {\n name: this.services.primaryDynamoDbName,\n arn: this.services.primaryDynamoDbArn,\n type\n };\n case \"opensearch\":\n if (\n !this.services.opensearchDynamodbTableName ||\n !this.services.opensearchDynamodbTableArn\n ) {\n throw new Error(`Unknown table type \"${type}\" - no data.`);\n }\n return {\n name: this.services.opensearchDynamodbTableName,\n arn: this.services.opensearchDynamodbTableArn,\n type\n };\n default:\n throw new Error(`Unknown table type \"${type}\".`);\n }\n }\n}\n\nexport const createDeployment = (params: IDeploymentParams): IDeployment => {\n return new Deployment(params);\n};\n"],"names":["Deployment","params","type","Error","createDeployment"],"mappings":"AAOO,MAAMA;IAQT,YAAmBC,MAAyB,CAAE;QAC1C,IAAI,CAAC,IAAI,GAAGA,OAAO,IAAI;QACvB,IAAI,CAAC,GAAG,GAAGA,OAAO,GAAG;QACrB,IAAI,CAAC,OAAO,GAAGA,OAAO,OAAO;QAC7B,IAAI,CAAC,MAAM,GAAGA,OAAO,MAAM;QAC3B,IAAI,CAAC,QAAQ,GAAGA,OAAO,QAAQ;QAC/B,IAAI,CAAC,OAAO,GAAGA,OAAO,OAAO;IACjC;IAEO,SAASC,IAAuB,EAAU;QAC7C,OAAQA;YACJ,KAAK;gBACD,OAAO;oBACH,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB;oBACvC,KAAK,IAAI,CAAC,QAAQ,CAAC,kBAAkB;oBACrCA;gBACJ;YACJ,KAAK;gBACD,IACI,CAAC,IAAI,CAAC,QAAQ,CAAC,2BAA2B,IAC1C,CAAC,IAAI,CAAC,QAAQ,CAAC,0BAA0B,EAEzC,MAAM,IAAIC,MAAM,CAAC,oBAAoB,EAAED,KAAK,YAAY,CAAC;gBAE7D,OAAO;oBACH,MAAM,IAAI,CAAC,QAAQ,CAAC,2BAA2B;oBAC/C,KAAK,IAAI,CAAC,QAAQ,CAAC,0BAA0B;oBAC7CA;gBACJ;YACJ;gBACI,MAAM,IAAIC,MAAM,CAAC,oBAAoB,EAAED,KAAK,EAAE,CAAC;QACvD;IACJ;AACJ;AAEO,MAAME,mBAAmB,CAACH,SACtB,IAAID,WAAWC"}
|
|
@@ -1,26 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
});
|
|
20
|
-
}
|
|
1
|
+
class Deployments {
|
|
2
|
+
constructor(params){
|
|
3
|
+
this.deployments = params.deployments;
|
|
4
|
+
}
|
|
5
|
+
hasAny() {
|
|
6
|
+
return this.deployments.length > 0;
|
|
7
|
+
}
|
|
8
|
+
all() {
|
|
9
|
+
return this.deployments;
|
|
10
|
+
}
|
|
11
|
+
get(name) {
|
|
12
|
+
return this.deployments.find((deployment)=>deployment.name === name) || null;
|
|
13
|
+
}
|
|
14
|
+
without(input) {
|
|
15
|
+
return createDeployments({
|
|
16
|
+
deployments: this.deployments.filter((deployment)=>deployment.name !== input.name)
|
|
17
|
+
});
|
|
18
|
+
}
|
|
21
19
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
20
|
+
const createDeployments = (params)=>new Deployments(params);
|
|
21
|
+
export { Deployments, createDeployments };
|
|
25
22
|
|
|
26
23
|
//# sourceMappingURL=Deployments.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"resolver/deployment/Deployments.js","sources":["../../../src/resolver/deployment/Deployments.ts"],"sourcesContent":["import type { IDeployment, IDeployments } from \"./types.js\";\n\nexport interface IDeploymentsParams {\n deployments: IDeployment[];\n}\n\nexport class Deployments implements IDeployments {\n private readonly deployments: IDeployment[];\n\n public constructor(params: IDeploymentsParams) {\n this.deployments = params.deployments;\n }\n\n public hasAny(): boolean {\n return this.deployments.length > 0;\n }\n\n public all(): IDeployment[] {\n return this.deployments;\n }\n\n public get(name: string): IDeployment | null {\n return this.deployments.find(deployment => deployment.name === name) || null;\n }\n\n public without(input: Pick<IDeployment, \"name\">): IDeployments {\n return createDeployments({\n deployments: this.deployments.filter(deployment => {\n return deployment.name !== input.name;\n })\n });\n }\n}\n\nexport const createDeployments = (params: IDeploymentsParams): IDeployments => {\n return new Deployments(params);\n};\n"],"names":["Deployments","params","name","deployment","input","createDeployments"],"mappings":"AAMO,MAAMA;IAGT,YAAmBC,MAA0B,CAAE;QAC3C,IAAI,CAAC,WAAW,GAAGA,OAAO,WAAW;IACzC;IAEO,SAAkB;QACrB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG;IACrC;IAEO,MAAqB;QACxB,OAAO,IAAI,CAAC,WAAW;IAC3B;IAEO,IAAIC,IAAY,EAAsB;QACzC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAACC,CAAAA,aAAcA,WAAW,IAAI,KAAKD,SAAS;IAC5E;IAEO,QAAQE,KAAgC,EAAgB;QAC3D,OAAOC,kBAAkB;YACrB,aAAa,IAAI,CAAC,WAAW,CAAC,MAAM,CAACF,CAAAA,aAC1BA,WAAW,IAAI,KAAKC,MAAM,IAAI;QAE7C;IACJ;AACJ;AAEO,MAAMC,oBAAoB,CAACJ,SACvB,IAAID,YAAYC"}
|