diff --git a/.circleci/local_publish_helpers_codebuild.sh b/.circleci/local_publish_helpers_codebuild.sh index fa197a61f7a..107533bd45f 100644 --- a/.circleci/local_publish_helpers_codebuild.sh +++ b/.circleci/local_publish_helpers_codebuild.sh @@ -139,10 +139,10 @@ function verifyPkgCli { fi } - # TODO: After V3 migrations are done, decrease 1090 back to 930 and 875 back to 750 - verifySinglePkg "amplify-pkg-linux-x64" "amplify-pkg-linux-x64.tgz" $((1090 * 1024 * 1024)) - verifySinglePkg "amplify-pkg-macos-x64" "amplify-pkg-macos-x64.tgz" $((1090 * 1024 * 1024)) - verifySinglePkg "amplify-pkg-win-x64.exe" "amplify-pkg-win-x64.tgz" $((1090 * 1024 * 1024)) + # TODO: After V3 migrations are done, decrease 1095 back to 930 and 875 back to 750 + verifySinglePkg "amplify-pkg-linux-x64" "amplify-pkg-linux-x64.tgz" $((1095 * 1024 * 1024)) + verifySinglePkg "amplify-pkg-macos-x64" "amplify-pkg-macos-x64.tgz" $((1095 * 1024 * 1024)) + verifySinglePkg "amplify-pkg-win-x64.exe" "amplify-pkg-win-x64.tgz" $((1095 * 1024 * 1024)) verifySinglePkg "amplify-pkg-linux-arm64" "amplify-pkg-linux-arm64.tgz" $((875 * 1024 * 1024)) } diff --git a/.eslint-dictionary.json b/.eslint-dictionary.json index f6324edd864..7610461e76e 100644 --- a/.eslint-dictionary.json +++ b/.eslint-dictionary.json @@ -237,6 +237,7 @@ "macos", "matcher", "matchers", + "marshall", "metafile", "mfas", "migrator", diff --git a/codebuild_specs/e2e_workflow_generated.yml b/codebuild_specs/e2e_workflow_generated.yml index 96b988e69be..3e5815101db 100644 --- a/codebuild_specs/e2e_workflow_generated.yml +++ b/codebuild_specs/e2e_workflow_generated.yml @@ -427,39 +427,46 @@ batch: TEST_SUITE: src/__tests__/schema-auth-1a.test.ts|src/__tests__/geo-headless.test.ts|src/__tests__/function_9a.test.ts depend-on: - upb - - identifier: l_export_pull_a_api_7_api_10 + - identifier: l_export_pull_a_api_7 buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/export-pull-a.test.ts|src/__tests__/api_7.test.ts|src/__tests__/api_10.test.ts + TEST_SUITE: src/__tests__/export-pull-a.test.ts|src/__tests__/api_7.test.ts depend-on: - upb - - identifier: l_api_key_migration5_schema_iterative_rollback_1_schema_auth_9_b + - identifier: l_api_10_api_key_migration5_schema_iterative_rollback_1 buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/migration/api.key.migration5.test.ts|src/__tests__/schema-iterative-rollback-1.test.ts|src/__tests__/schema-auth-9-b.test.ts + TEST_SUITE: src/__tests__/api_10.test.ts|src/__tests__/migration/api.key.migration5.test.ts|src/__tests__/schema-iterative-rollback-1.test.ts depend-on: - upb - - identifier: l_schema_auth_7b_schema_auth_7a_schema_auth_2a + - identifier: l_schema_auth_9_b_schema_auth_7b_schema_auth_7a buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/schema-auth-7b.test.ts|src/__tests__/schema-auth-7a.test.ts|src/__tests__/schema-auth-2a.test.ts + TEST_SUITE: src/__tests__/schema-auth-9-b.test.ts|src/__tests__/schema-auth-7b.test.ts|src/__tests__/schema-auth-7a.test.ts depend-on: - upb - - identifier: l_schema_auth_1b_schema_auth_11_b_predictions + - identifier: l_schema_auth_2a_schema_auth_1b_schema_auth_11_b buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/schema-auth-1b.test.ts|src/__tests__/schema-auth-11-b.test.ts|src/__tests__/predictions.test.ts + TEST_SUITE: src/__tests__/schema-auth-2a.test.ts|src/__tests__/schema-auth-1b.test.ts|src/__tests__/schema-auth-11-b.test.ts depend-on: - upb - - identifier: l_layer_3_hosting_geo_import_3 + - identifier: l_predictions_layer_3 buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/layer-3.test.ts|src/__tests__/hosting.test.ts|src/__tests__/geo-import-3.test.ts + TEST_SUITE: src/__tests__/predictions.test.ts|src/__tests__/layer-3.test.ts + depend-on: + - upb + - identifier: l_hosting_geo_import_3 + buildspec: codebuild_specs/run_e2e_tests_linux.yml + env: + variables: + TEST_SUITE: src/__tests__/hosting.test.ts|src/__tests__/geo-import-3.test.ts depend-on: - upb - identifier: l_geo_add_d_geo_add_c_delete @@ -560,152 +567,159 @@ batch: TEST_SUITE: src/__tests__/function_15.test.ts|src/__tests__/function_14.test.ts|src/__tests__/function_13.test.ts depend-on: - upb - - identifier: l_function_12_export_pull_c_custom_resource_with_storage + - identifier: l_function_12_export_pull_c buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/function_12.test.ts|src/__tests__/export-pull-c.test.ts|src/__tests__/custom-resource-with-storage.test.ts + TEST_SUITE: src/__tests__/function_12.test.ts|src/__tests__/export-pull-c.test.ts + depend-on: + - upb + - identifier: l_custom_resource_with_storage_build_function_build_function_yarn_modern + buildspec: codebuild_specs/run_e2e_tests_linux.yml + env: + variables: + TEST_SUITE: src/__tests__/custom-resource-with-storage.test.ts|src/__tests__/build-function.test.ts|src/__tests__/build-function-yarn-modern.test.ts CLI_REGION: us-west-2 depend-on: - upb - - identifier: l_build_function_build_function_yarn_modern_auth_5g + - identifier: l_auth_5g_auth_2h_auth_2g buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/build-function.test.ts|src/__tests__/build-function-yarn-modern.test.ts|src/__tests__/auth_5g.test.ts + TEST_SUITE: src/__tests__/auth_5g.test.ts|src/__tests__/auth_2h.test.ts|src/__tests__/auth_2g.test.ts depend-on: - upb - - identifier: l_auth_2h_auth_2g_auth_12 + - identifier: l_auth_12_api_9a buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/auth_2h.test.ts|src/__tests__/auth_2g.test.ts|src/__tests__/auth_12.test.ts + TEST_SUITE: src/__tests__/auth_12.test.ts|src/__tests__/api_9a.test.ts depend-on: - upb - - identifier: l_api_9a_api_6c + - identifier: l_api_6c_api_2b buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/api_9a.test.ts|src/__tests__/api_6c.test.ts + TEST_SUITE: src/__tests__/api_6c.test.ts|src/__tests__/api_2b.test.ts depend-on: - upb - - identifier: l_api_2b_api_2a_amplify_remove + - identifier: l_api_2a_amplify_remove_S3server buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/api_2b.test.ts|src/__tests__/api_2a.test.ts|src/__tests__/amplify-remove.test.ts + TEST_SUITE: src/__tests__/api_2a.test.ts|src/__tests__/amplify-remove.test.ts|src/__tests__/storage-simulator/S3server.test.ts depend-on: - upb - - identifier: l_S3server_smoketest_smoketest_ios + - identifier: l_smoketest_smoketest_ios_javascript_notifications_pinpoint_config buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/storage-simulator/S3server.test.ts|src/__tests__/smoke-tests/smoketest.test.ts|src/__tests__/smoke-tests/smoketest-ios.test.ts + TEST_SUITE: src/__tests__/smoke-tests/smoketest.test.ts|src/__tests__/smoke-tests/smoketest-ios.test.ts|src/__tests__/pinpoint/javascript-notifications-pinpoint-config.test.ts depend-on: - upb - - identifier: l_javascript_notifications_pinpoint_config_javascript_analytics_pinpoint_config_ios_notifications_pinpoint_config + - identifier: l_javascript_analytics_pinpoint_config_ios_notifications_pinpoint_config_ios_analytics_pinpoint_config buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/pinpoint/javascript-notifications-pinpoint-config.test.ts|src/__tests__/pinpoint/javascript-analytics-pinpoint-config.test.ts|src/__tests__/pinpoint/ios-notifications-pinpoint-config.test.ts + TEST_SUITE: src/__tests__/pinpoint/javascript-analytics-pinpoint-config.test.ts|src/__tests__/pinpoint/ios-notifications-pinpoint-config.test.ts|src/__tests__/pinpoint/ios-analytics-pinpoint-config.test.ts depend-on: - upb - - identifier: l_ios_analytics_pinpoint_config_flutter_notifications_pinpoint_config_flutter_analytics_pinpoint_config + - identifier: l_flutter_notifications_pinpoint_config_flutter_analytics_pinpoint_config_android_notifications_pinpoint_config buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/pinpoint/ios-analytics-pinpoint-config.test.ts|src/__tests__/pinpoint/flutter-notifications-pinpoint-config.test.ts|src/__tests__/pinpoint/flutter-analytics-pinpoint-config.test.ts + TEST_SUITE: src/__tests__/pinpoint/flutter-notifications-pinpoint-config.test.ts|src/__tests__/pinpoint/flutter-analytics-pinpoint-config.test.ts|src/__tests__/pinpoint/android-notifications-pinpoint-config.test.ts depend-on: - upb - - identifier: l_android_notifications_pinpoint_config_android_analytics_pinpoint_config_opensearch_simulator + - identifier: l_android_analytics_pinpoint_config_opensearch_simulator_general_config_headless_init buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/pinpoint/android-notifications-pinpoint-config.test.ts|src/__tests__/pinpoint/android-analytics-pinpoint-config.test.ts|src/__tests__/opensearch-simulator/opensearch-simulator.test.ts + TEST_SUITE: src/__tests__/pinpoint/android-analytics-pinpoint-config.test.ts|src/__tests__/opensearch-simulator/opensearch-simulator.test.ts|src/__tests__/general-config/general-config-headless-init.test.ts depend-on: - upb - - identifier: l_general_config_headless_init_dynamodb_simulator_user_groups + - identifier: l_dynamodb_simulator_user_groups_user_groups_s3_access buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/general-config/general-config-headless-init.test.ts|src/__tests__/dynamodb-simulator/dynamodb-simulator.test.ts|src/__tests__/auth/user-groups.test.ts + TEST_SUITE: src/__tests__/dynamodb-simulator/dynamodb-simulator.test.ts|src/__tests__/auth/user-groups.test.ts|src/__tests__/auth/user-groups-s3-access.test.ts depend-on: - upb - - identifier: l_user_groups_s3_access_hosted_ui_admin_api + - identifier: l_hosted_ui_admin_api_schema_iterative_update_locking buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/auth/user-groups-s3-access.test.ts|src/__tests__/auth/hosted-ui.test.ts|src/__tests__/auth/admin-api.test.ts + TEST_SUITE: src/__tests__/auth/hosted-ui.test.ts|src/__tests__/auth/admin-api.test.ts|src/__tests__/schema-iterative-update-locking.test.ts depend-on: - upb - - identifier: l_schema_iterative_update_locking_function_8_api_8 + - identifier: l_function_8_api_8_schema_auth_13 buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/schema-iterative-update-locking.test.ts|src/__tests__/function_8.test.ts|src/__tests__/api_8.test.ts + TEST_SUITE: src/__tests__/function_8.test.ts|src/__tests__/api_8.test.ts|src/__tests__/schema-auth-13.test.ts depend-on: - upb - - identifier: l_schema_auth_13_layer_2_api_lambda_auth_2 + - identifier: l_layer_2_api_lambda_auth_2_schema_iterative_update_1 buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/schema-auth-13.test.ts|src/__tests__/layer-2.test.ts|src/__tests__/graphql-v2/api_lambda_auth_2.test.ts + TEST_SUITE: src/__tests__/layer-2.test.ts|src/__tests__/graphql-v2/api_lambda_auth_2.test.ts|src/__tests__/schema-iterative-update-1.test.ts depend-on: - upb - - identifier: l_schema_iterative_update_1_function_5_schema_function_1 + - identifier: l_function_5_schema_function_1_schema_connection_2 buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/schema-iterative-update-1.test.ts|src/__tests__/function_5.test.ts|src/__tests__/schema-function-1.test.ts + TEST_SUITE: src/__tests__/function_5.test.ts|src/__tests__/schema-function-1.test.ts|src/__tests__/schema-connection-2.test.ts depend-on: - upb - - identifier: l_schema_connection_2_function_2a_auth_6 + - identifier: l_function_2a_auth_6_storage_1b buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/schema-connection-2.test.ts|src/__tests__/function_2a.test.ts|src/__tests__/auth_6.test.ts + TEST_SUITE: src/__tests__/function_2a.test.ts|src/__tests__/auth_6.test.ts|src/__tests__/storage-1b.test.ts depend-on: - upb - - identifier: l_storage_1b_storage_1a_schema_iterative_update_2 + - identifier: l_storage_1a_schema_iterative_update_2_function_9b buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/storage-1b.test.ts|src/__tests__/storage-1a.test.ts|src/__tests__/schema-iterative-update-2.test.ts + TEST_SUITE: src/__tests__/storage-1a.test.ts|src/__tests__/schema-iterative-update-2.test.ts|src/__tests__/function_9b.test.ts depend-on: - upb - - identifier: l_function_9b_custom_policies_container_api_9b + - identifier: l_custom_policies_container_api_9b_function_7 buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/function_9b.test.ts|src/__tests__/custom_policies_container.test.ts|src/__tests__/api_9b.test.ts + TEST_SUITE: src/__tests__/custom_policies_container.test.ts|src/__tests__/api_9b.test.ts|src/__tests__/function_7.test.ts depend-on: - upb - - identifier: l_function_7_function_2b_function_11 + - identifier: l_function_2b_function_11_api_connection_migration2 buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/function_7.test.ts|src/__tests__/function_2b.test.ts|src/__tests__/function_11.test.ts + TEST_SUITE: src/__tests__/function_2b.test.ts|src/__tests__/function_11.test.ts|src/__tests__/migration/api.connection.migration2.test.ts depend-on: - upb - - identifier: l_api_connection_migration2_storage_4_containers_api_secrets + - identifier: l_storage_4_containers_api_secrets_api_4 buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/migration/api.connection.migration2.test.ts|src/__tests__/storage-4.test.ts|src/__tests__/containers-api-secrets.test.ts + TEST_SUITE: src/__tests__/storage-4.test.ts|src/__tests__/containers-api-secrets.test.ts|src/__tests__/api_4.test.ts depend-on: - upb - - identifier: l_api_4_schema_auth_10_schema_key + - identifier: l_schema_auth_10_schema_key_resolvers buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/api_4.test.ts|src/__tests__/schema-auth-10.test.ts|src/__tests__/schema-key.test.ts + TEST_SUITE: src/__tests__/schema-auth-10.test.ts|src/__tests__/schema-key.test.ts|src/__tests__/resolvers.test.ts depend-on: - upb - - identifier: l_resolvers_geo_multi_env_searchable_datastore + - identifier: l_geo_multi_env_searchable_datastore buildspec: codebuild_specs/run_e2e_tests_linux.yml env: variables: - TEST_SUITE: src/__tests__/resolvers.test.ts|src/__tests__/geo-multi-env.test.ts|src/__tests__/graphql-v2/searchable-datastore.test.ts + TEST_SUITE: src/__tests__/geo-multi-env.test.ts|src/__tests__/graphql-v2/searchable-datastore.test.ts depend-on: - upb - identifier: l_schema_searchable_apigw diff --git a/codebuild_specs/wait_for_ids.json b/codebuild_specs/wait_for_ids.json index 17b05c5e793..a3b736e0f02 100644 --- a/codebuild_specs/wait_for_ids.json +++ b/codebuild_specs/wait_for_ids.json @@ -1,58 +1,61 @@ [ - "l_S3server_smoketest_smoketest_ios", "l_amplify_app", "l_analytics_pinpoint_flutter_analytics_kinesis_notifications_analytics_compatibility_sms_2", - "l_android_notifications_pinpoint_config_android_analytics_pinpoint_config_opensearch_simulator", - "l_api_2b_api_2a_amplify_remove", + "l_android_analytics_pinpoint_config_opensearch_simulator_general_config_headless_init", + "l_api_10_api_key_migration5_schema_iterative_rollback_1", + "l_api_2a_amplify_remove_S3server", "l_api_3_layer_1_api_1", - "l_api_4_schema_auth_10_schema_key", "l_api_5_api_key_migration2_api_lambda_auth_1", "l_api_6a_http_migration_schema_function_2", - "l_api_9a_api_6c", - "l_api_connection_migration2_storage_4_containers_api_secrets", + "l_api_6c_api_2b", "l_api_key_migration3_api_connection_migration_init_special_case", "l_api_key_migration4_schema_iterative_update_4", - "l_api_key_migration5_schema_iterative_rollback_1_schema_auth_9_b", "l_auth_10_init_f_init_d", + "l_auth_12_api_9a", "l_auth_1a_auth_trigger_schema_versioned", "l_auth_1b_auth_11_predictions_migration", "l_auth_2b_auth_2a_analytics_pinpoint_js", "l_auth_2c", "l_auth_2e", - "l_auth_2h_auth_2g_auth_12", "l_auth_4a_auth_3b_auth_3a", "l_auth_4c_auth_3c_schema_auth_8c", "l_auth_5b_schema_auth_8a_schema_auth_7c", "l_auth_5d_tags_schema_model_a", "l_auth_5e_auth_1c_schema_predictions", "l_auth_5f_model_migration_schema_auth_5c", + "l_auth_5g_auth_2h_auth_2g", "l_auth_8a_auth_4b_auth_migration", - "l_build_function_build_function_yarn_modern_auth_5g", "l_containers_api_1", "l_containers_api_2", + "l_custom_policies_container_api_9b_function_7", + "l_custom_resource_with_storage_build_function_build_function_yarn_modern", "l_custom_resources_auth_9", "l_datastore_modelgen", "l_diagnose_mock_api_hooks_a", + "l_dynamodb_simulator_user_groups_user_groups_s3_access", "l_env_1_auth_5c_auth_5a", "l_env_2_amplify_configure_layer_4", "l_env_3", - "l_export_pull_a_api_7_api_10", + "l_export_pull_a_api_7", "l_feature_flags_auth_8c_auth_7a", + "l_flutter_notifications_pinpoint_config_flutter_analytics_pinpoint_config_android_notifications_pinpoint_config", "l_function_10_function_permissions_env_5", - "l_function_12_export_pull_c_custom_resource_with_storage", + "l_function_12_export_pull_c", "l_function_15_function_14_function_13", "l_function_1_storage_5", + "l_function_2a_auth_6_storage_1b", + "l_function_2b_function_11_api_connection_migration2", "l_function_3a_dotnet_export_pull_b_auth_7b", "l_function_3a_python_function_3a_nodejs_function_3a_go", "l_function_4_function_3b_function_2c", - "l_function_7_function_2b_function_11", - "l_function_9b_custom_policies_container_api_9b", + "l_function_5_schema_function_1_schema_connection_2", + "l_function_8_api_8_schema_auth_13", "l_function_migration_storage_3_schema_auth_9_c", - "l_general_config_headless_init_dynamodb_simulator_user_groups", "l_geo_add_d_geo_add_c_delete", "l_geo_add_e", "l_geo_add_f", "l_geo_import_2_geo_import_1a_function_9c", + "l_geo_multi_env_searchable_datastore", "l_geo_remove_1", "l_geo_remove_2", "l_geo_remove_3", @@ -60,7 +63,9 @@ "l_geo_update_2", "l_global_sandbox_c_analytics_2_pull", "l_hooks_c_help_function_2d", + "l_hosted_ui_admin_api_schema_iterative_update_locking", "l_hostingPROD", + "l_hosting_geo_import_3", "l_iam_permissions_boundary_export_node_function", "l_import_auth_1a", "l_import_auth_1b", @@ -78,10 +83,9 @@ "l_import_s3_3", "l_init_c_git_clone_attach_configure_project", "l_init_e_global_sandbox_a_geo_import_1b", - "l_ios_analytics_pinpoint_config_flutter_notifications_pinpoint_config_flutter_analytics_pinpoint_config", - "l_javascript_notifications_pinpoint_config_javascript_analytics_pinpoint_config_ios_notifications_pinpoint_config", + "l_javascript_analytics_pinpoint_config_ios_notifications_pinpoint_config_ios_analytics_pinpoint_config", "l_js_frontend_config", - "l_layer_3_hosting_geo_import_3", + "l_layer_2_api_lambda_auth_2_schema_iterative_update_1", "l_notifications_analytics_compatibility_in_app_1_studio_modelgen", "l_notifications_apns_init_b_container_hosting", "l_notifications_in_app_messaging", @@ -90,38 +94,36 @@ "l_notifications_sms_pull_notifications_in_app_messaging_env_1_custom_transformers", "l_parameter_store_2_parameter_store_1_notifications_sms_update", "l_plugin_notifications_analytics_compatibility_sms_1_hooks_b", + "l_predictions_layer_3", "l_push_pull_2_pr_previews_multi_env_1", - "l_resolvers_geo_multi_env_searchable_datastore", "l_s3_sse_geo_add_b_auth_8b", + "l_schema_auth_10_schema_key_resolvers", "l_schema_auth_11_a", "l_schema_auth_11_c_notifications_analytics_compatibility_in_app_2", - "l_schema_auth_13_layer_2_api_lambda_auth_2", "l_schema_auth_14_api_key_migration1_api_6b", "l_schema_auth_15", "l_schema_auth_1a_geo_headless_function_9a", - "l_schema_auth_1b_schema_auth_11_b_predictions", + "l_schema_auth_2a_schema_auth_1b_schema_auth_11_b", "l_schema_auth_3_schema_auth_12_schema_iterative_update_3", "l_schema_auth_4c_init_a_geo_add_a", "l_schema_auth_4d_frontend_config_drift_env_4", "l_schema_auth_6b_schema_auth_5d_global_sandbox_b", "l_schema_auth_6d_schema_auth_6c_schema_auth_2b", - "l_schema_auth_7b_schema_auth_7a_schema_auth_2a", "l_schema_auth_9_a_schema_auth_8b_schema_auth_5b", + "l_schema_auth_9_b_schema_auth_7b_schema_auth_7a", "l_schema_connection_1", - "l_schema_connection_2_function_2a_auth_6", "l_schema_iterative_rollback_2_schema_auth_5a_export_pull_d", - "l_schema_iterative_update_1_function_5_schema_function_1", - "l_schema_iterative_update_locking_function_8_api_8", "l_schema_model_c_schema_data_access_patterns_schema_auth_6a", "l_schema_model_d_schema_model_b_schema_auth_4a", "l_schema_model_e_schema_auth_4b_notifications_sms", "l_schema_searchable_apigw", "l_searchable_migration", "l_smoketest_amplify_app", - "l_storage_1b_storage_1a_schema_iterative_update_2", + "l_smoketest_smoketest_ios_javascript_notifications_pinpoint_config", + "l_storage_1a_schema_iterative_update_2_function_9b", "l_storage_2_function_6_custom_policies_function", + "l_storage_4_containers_api_secrets_api_4", "l_uibuilder", - "l_user_groups_s3_access_hosted_ui_admin_api", "l_with_babel_config_notifications_in_app_messaging_env_2_notifications_fcm", "w_admin_api_schema_iterative_update_locking", "w_amplify_configure_layer_4", diff --git a/packages/amplify-appsync-simulator/package.json b/packages/amplify-appsync-simulator/package.json index df4cb5080d5..1489056a6ef 100644 --- a/packages/amplify-appsync-simulator/package.json +++ b/packages/amplify-appsync-simulator/package.json @@ -32,10 +32,11 @@ "dependencies": { "@aws-amplify/amplify-cli-core": "4.4.3", "@aws-amplify/amplify-prompts": "2.8.7", + "@aws-sdk/client-dynamodb": "^3.624.0", + "@aws-sdk/util-dynamodb": "^3.624.0", "@graphql-tools/schema": "^8.3.1", "@graphql-tools/utils": "^8.5.1", "amplify-velocity-template": "1.4.17", - "aws-sdk": "^2.1464.0", "chalk": "^4.1.1", "cors": "^2.8.5", "dataloader": "^2.0.0", diff --git a/packages/amplify-appsync-simulator/src/data-loader/dynamo-db/index.ts b/packages/amplify-appsync-simulator/src/data-loader/dynamo-db/index.ts index 9b645ecf96f..f3e8aa14f24 100644 --- a/packages/amplify-appsync-simulator/src/data-loader/dynamo-db/index.ts +++ b/packages/amplify-appsync-simulator/src/data-loader/dynamo-db/index.ts @@ -1,13 +1,28 @@ -import { AttributeMap } from 'aws-sdk/clients/dynamodb'; -import { DynamoDB } from 'aws-sdk'; +import { + AttributeValue, + DynamoDBClient, + GetItemCommand, + PutItemCommand, + UpdateItemCommand, + UpdateItemCommandInput, + DeleteItemCommand, + QueryCommand, + QueryInput, + ScanCommand, + ScanCommandInput, + Select, + ReturnValue, +} from '@aws-sdk/client-dynamodb'; import { unmarshall, nullIfEmpty } from './utils'; import { AmplifyAppSyncSimulatorDataLoader } from '..'; type DynamoDBConnectionConfig = { endpoint: string; region: 'us-fake-1'; - accessKeyId: 'fake'; - secretAccessKey: 'fake'; + credentials: { + accessKeyId: 'fake'; + secretAccessKey: 'fake'; + }; tableName: string; }; type DynamoDBLoaderConfig = { @@ -15,7 +30,7 @@ type DynamoDBLoaderConfig = { options: object; }; export class DynamoDBDataLoader implements AmplifyAppSyncSimulatorDataLoader { - private client: DynamoDB; + private client: DynamoDBClient; private tableName: string; constructor(private ddbConfig: DynamoDBLoaderConfig) { @@ -24,7 +39,10 @@ export class DynamoDBDataLoader implements AmplifyAppSyncSimulatorDataLoader { throw new Error(`Invalid DynamoDBConfig ${JSON.stringify(ddbConfig, null, 4)}`); } this.tableName = tableName; - this.client = new DynamoDB({ ...ddbConfig.config, ...ddbConfig.options }); + this.client = new DynamoDBClient({ + ...ddbConfig.config, + ...ddbConfig.options, + }); } async load(payload): Promise { @@ -53,11 +71,11 @@ export class DynamoDBDataLoader implements AmplifyAppSyncSimulatorDataLoader { throw new Error(`Unknown operation name: ${payload.operation}`); } } catch (e) { - if (e.code) { + if (e.name) { console.log('Error while executing Local DynamoDB'); console.log(JSON.stringify(payload, null, 4)); console.log(e); - e.extensions = { errorType: 'DynamoDB:' + e.code }; + e.extensions = { errorType: 'DynamoDB:' + e.name }; } throw e; } @@ -67,13 +85,13 @@ export class DynamoDBDataLoader implements AmplifyAppSyncSimulatorDataLoader { try { const items = await this.getAllItems(); for await (const item of items) { - await this.client - .deleteItem({ + await this.client.send( + new DeleteItemCommand({ TableName: this.tableName, Key: { id: item.id }, - ReturnValues: 'ALL_OLD', - }) - .promise(); + ReturnValues: 'ALL_OLD' as ReturnValue, + }), + ); } } catch (e) { throw new Error(`Error while deleting all items from ${this.tableName}`); @@ -81,17 +99,17 @@ export class DynamoDBDataLoader implements AmplifyAppSyncSimulatorDataLoader { return [this.tableName]; } // Gets all the records from the DynamoDB local table - private async getAllItems(): Promise | null> { + private async getAllItems(): Promise> | null> { let items = []; - let data = await this.client.scan({ TableName: this.tableName }).promise(); + let data = await this.client.send(new ScanCommand({ TableName: this.tableName })); items = [...items, ...data.Items]; while (typeof data.LastEvaluatedKey !== 'undefined') { - data = await this.client - .scan({ + data = await this.client.send( + new ScanCommand({ TableName: this.tableName, ExclusiveStartKey: data.LastEvaluatedKey, - }) - .promise(); + }), + ); items = [...items, ...data.Items]; } return items; @@ -99,13 +117,13 @@ export class DynamoDBDataLoader implements AmplifyAppSyncSimulatorDataLoader { private async getItem(payload: any): Promise { const { consistentRead = false } = payload; - const result = await this.client - .getItem({ + const result = await this.client.send( + new GetItemCommand({ TableName: this.tableName, - Key: payload.key, + Key: payload.key as Record, ConsistentRead: consistentRead, - }) - .promise(); + }), + ); if (!result.Item) return null; return unmarshall(result.Item); @@ -117,58 +135,59 @@ export class DynamoDBDataLoader implements AmplifyAppSyncSimulatorDataLoader { attributeValues, condition: { // we only provide limited support for condition update expressions. - expression = null, - expressionNames = null, - expressionValues = null, + expression = undefined, + expressionNames = undefined, + expressionValues = undefined, } = {}, } = payload; - await this.client - .putItem({ + + await this.client.send( + new PutItemCommand({ TableName: this.tableName, Item: { - ...attributeValues, ...key, - }, + ...attributeValues, + } as Record, ConditionExpression: expression, ExpressionAttributeNames: expressionNames, - ExpressionAttributeValues: expressionValues, - }) - .promise(); + ExpressionAttributeValues: expressionValues as Record, + }), + ); // put does not return us anything useful so we need to fetch the object. - return this.getItem({ key, consistentRead: true }); } private async query({ query: keyCondition, filter, index, nextToken, limit, scanIndexForward = true, consistentRead = false, select }) { keyCondition = keyCondition || { expression: null }; filter = filter || { expression: null }; + const params = { TableName: this.tableName, KeyConditionExpression: keyCondition.expression, FilterExpression: filter.expression, ExpressionAttributeValues: nullIfEmpty({ - ...(filter.expressionValues || {}), - ...(keyCondition.expressionValues || {}), - }), + ...(filter.expressionValues || undefined), + ...(keyCondition.expressionValues || undefined), + } as Record), ExpressionAttributeNames: nullIfEmpty({ - ...(filter.expressionNames || {}), - ...(keyCondition.expressionNames || {}), + ...(filter.expressionNames || undefined), + ...(keyCondition.expressionNames || undefined), }), ExclusiveStartKey: nextToken ? JSON.parse(Buffer.from(nextToken, 'base64').toString()) : null, IndexName: index, Limit: limit, ConsistentRead: consistentRead, ScanIndexForward: scanIndexForward, - Select: select || 'ALL_ATTRIBUTES', + Select: select || ('ALL_ATTRIBUTES' as Select), }; const { Items: items, ScannedCount: scannedCount, LastEvaluatedKey: resultNextToken = null, - } = await this.client.query(params as any).promise(); + } = await this.client.send(new QueryCommand(params as QueryInput)); return { - items: items.map((item) => unmarshall(item)), + items: (items || []).map((item) => unmarshall(item)), scannedCount, nextToken: resultNextToken ? Buffer.from(JSON.stringify(resultNextToken)).toString('base64') : null, }; @@ -176,7 +195,8 @@ export class DynamoDBDataLoader implements AmplifyAppSyncSimulatorDataLoader { private async updateItem(payload) { const { key, update = {}, condition = {} } = payload; - const params: any = { + + const params: UpdateItemCommandInput = { TableName: this.tableName, Key: key, UpdateExpression: update.expression, @@ -185,13 +205,15 @@ export class DynamoDBDataLoader implements AmplifyAppSyncSimulatorDataLoader { ExpressionAttributeNames: nullIfEmpty({ ...(condition.expressionNames || {}), ...(update.expressionNames || {}), - }), + } as Record), ExpressionAttributeValues: nullIfEmpty({ ...(condition.expressionValues || {}), ...(update.expressionValues || {}), - }), + } as Record), + ReturnValuesOnConditionCheckFailure: 'ALL_OLD', }; - const { Attributes: updated } = await this.client.updateItem(params).promise(); + + const { Attributes: updated } = await this.client.send(new UpdateItemCommand(params)); return unmarshall(updated); } @@ -200,21 +222,21 @@ export class DynamoDBDataLoader implements AmplifyAppSyncSimulatorDataLoader { key, condition: { // we only provide limited support for condition update expressions. - expression = null, - expressionNames = null, - expressionValues = null, + expression = undefined, + expressionNames = undefined, + expressionValues = undefined, } = {}, } = payload; - const { Attributes: deleted } = await this.client - .deleteItem({ + const { Attributes: deleted } = await this.client.send( + new DeleteItemCommand({ TableName: this.tableName, - Key: key, + Key: key as Record, ReturnValues: 'ALL_OLD', ConditionExpression: expression, ExpressionAttributeNames: expressionNames, - ExpressionAttributeValues: expressionValues, - }) - .promise(); + ExpressionAttributeValues: expressionValues as Record, + }), + ); return unmarshall(deleted); } @@ -222,7 +244,7 @@ export class DynamoDBDataLoader implements AmplifyAppSyncSimulatorDataLoader { private async scan(payload) { const { filter, index, limit, consistentRead = false, nextToken, select, totalSegments, segment } = payload; - const params = { + const params: ScanCommandInput = { TableName: this.tableName, ExclusiveStartKey: nextToken ? JSON.parse(Buffer.from(nextToken, 'base64').toString()) : null, IndexName: index, @@ -239,14 +261,18 @@ export class DynamoDBDataLoader implements AmplifyAppSyncSimulatorDataLoader { ...(filter.expressionNames || undefined), }), ExpressionAttributeValues: { - ...(filter.expressionValues || undefined), + ...(filter.expressionValues || {}), }, }); } - const { Items: items, ScannedCount: scannedCount, LastEvaluatedKey: resultNextToken = null } = await this.client.scan(params).promise(); + const { + Items: items, + ScannedCount: scannedCount, + LastEvaluatedKey: resultNextToken = null, + } = await this.client.send(new ScanCommand(params)); return { - items: items.map((item) => unmarshall(item)), + items: (items || []).map((item) => unmarshall(item)), scannedCount, nextToken: resultNextToken ? Buffer.from(JSON.stringify(resultNextToken)).toString('base64') : null, }; diff --git a/packages/amplify-appsync-simulator/src/data-loader/dynamo-db/utils/index.ts b/packages/amplify-appsync-simulator/src/data-loader/dynamo-db/utils/index.ts index 20faf7b67e2..d26c7a8da02 100644 --- a/packages/amplify-appsync-simulator/src/data-loader/dynamo-db/utils/index.ts +++ b/packages/amplify-appsync-simulator/src/data-loader/dynamo-db/utils/index.ts @@ -1,11 +1,12 @@ -import { Converter } from 'aws-sdk/clients/dynamodb'; +import { unmarshall as awsUnmarshall } from '@aws-sdk/util-dynamodb'; +import { AttributeValue } from '@aws-sdk/client-dynamodb'; -export function nullIfEmpty(obj: object): object | null { +export function nullIfEmpty>(obj: T): T | null { return Object.keys(obj).length === 0 ? null : obj; } export function unmarshall(raw, isRaw = true) { - const content = isRaw ? Converter.unmarshall(raw) : raw; + const content = isRaw ? awsUnmarshall(raw) : raw; // Because of the funky set type used in the aws-sdk, we need to further unwrap // to find if there is a set that needs to be unpacked into an array. diff --git a/packages/amplify-appsync-simulator/src/velocity/util/dynamodb-utils.ts b/packages/amplify-appsync-simulator/src/velocity/util/dynamodb-utils.ts index b4e9f1e3d82..463c1d2b15c 100644 --- a/packages/amplify-appsync-simulator/src/velocity/util/dynamodb-utils.ts +++ b/packages/amplify-appsync-simulator/src/velocity/util/dynamodb-utils.ts @@ -1,14 +1,28 @@ -import { Converter } from 'aws-sdk/clients/dynamodb'; -import { DynamoDBSet } from 'aws-sdk/lib/dynamodb/set'; +import { marshall } from '@aws-sdk/util-dynamodb'; import { toJSON } from '../value-mapper/to-json'; export const dynamodbUtils = { toDynamoDB(value: any) { - return Converter.input(toJSON(value)); + if (Array.isArray(value)) { + return { L: marshall(toJSON(value)) }; + } + const jsonValue = toJSON(value); + if (jsonValue !== null && typeof jsonValue === 'object' && !Array.isArray(jsonValue)) { + return { + M: marshall(jsonValue, { + removeUndefinedValues: true, + convertEmptyValues: true, + }), + }; + } + return marshall(jsonValue, { + removeUndefinedValues: true, + convertEmptyValues: true, + }); }, $toSet(values, fn = (value) => value) { - return this.toDynamoDB(new DynamoDBSet([].concat(values).map((value) => fn(value)))); + return this.toDynamoDB(new Set([].concat(values).map((value) => fn(value)))); }, toDynamoDBJson(value) { return JSON.stringify(this.toDynamoDB(value)); @@ -76,13 +90,12 @@ export const dynamodbUtils = { return JSON.stringify(this.toMap(value)); }, toMapValues(values) { - return Object.entries(toJSON(values)).reduce( - (sum, [key, value]) => ({ + return Object.entries(toJSON(values)).reduce((sum, [key, value]) => { + return { ...sum, [key]: this.toDynamoDB(value), - }), - {}, - ); + }; + }, {}); }, toMapValuesJson(values) { return JSON.stringify(this.toMapValues(values)); diff --git a/packages/amplify-dynamodb-simulator/index.js b/packages/amplify-dynamodb-simulator/index.js index 33dfb64eb36..a47ec059d4e 100644 --- a/packages/amplify-dynamodb-simulator/index.js +++ b/packages/amplify-dynamodb-simulator/index.js @@ -230,12 +230,14 @@ async function launch(givenOptions = {}, retry = 0, startTime = Date.now()) { } function getClient(emu, options = {}) { - const { DynamoDB } = require('aws-sdk'); - return new DynamoDB({ + const { DynamoDBClient } = require('@aws-sdk/client-dynamodb'); + return new DynamoDBClient({ endpoint: emu.url, region: 'us-fake-1', - accessKeyId: 'fake', - secretAccessKey: 'fake', + credentials: { + accessKeyId: 'fake', + secretAccessKey: 'fake', + }, ...options, }); } diff --git a/packages/amplify-dynamodb-simulator/package.json b/packages/amplify-dynamodb-simulator/package.json index 80a9b268e70..6afbffbea2e 100644 --- a/packages/amplify-dynamodb-simulator/package.json +++ b/packages/amplify-dynamodb-simulator/package.json @@ -22,7 +22,7 @@ }, "dependencies": { "@aws-amplify/amplify-cli-core": "4.4.3", - "aws-sdk": "^2.1464.0", + "@aws-sdk/client-dynamodb": "^3.624.0", "detect-port": "^1.3.0", "execa": "^5.1.1", "fs-extra": "^8.1.0", diff --git a/packages/amplify-e2e-tests/src/__tests__/dynamodb-simulator/dynamodb-simulator.test.ts b/packages/amplify-e2e-tests/src/__tests__/dynamodb-simulator/dynamodb-simulator.test.ts index 1c341f94d60..46facc54cfd 100644 --- a/packages/amplify-e2e-tests/src/__tests__/dynamodb-simulator/dynamodb-simulator.test.ts +++ b/packages/amplify-e2e-tests/src/__tests__/dynamodb-simulator/dynamodb-simulator.test.ts @@ -1,3 +1,5 @@ +import { AttributeDefinition, CreateTableCommand, KeySchemaElement, ListTablesCommand } from '@aws-sdk/client-dynamodb'; + const path = require('path'); const ddbSimulator = require('amplify-dynamodb-simulator'); const fs = require('fs-extra'); @@ -17,21 +19,21 @@ describe('emulator operations', () => { { AttributeName: 'Artist', AttributeType: 'S', - }, + } as AttributeDefinition, { AttributeName: 'SongTitle', AttributeType: 'S', - }, + } as AttributeDefinition, ], KeySchema: [ { AttributeName: 'Artist', KeyType: 'HASH', - }, + } as KeySchemaElement, { AttributeName: 'SongTitle', KeyType: 'RANGE', - }, + } as KeySchemaElement, ], ProvisionedThroughput: { ReadCapacityUnits: 5, @@ -70,29 +72,27 @@ describe('emulator operations', () => { emulators.push(emu); const dynamo = ddbSimulator.getClient(emu); - const tables = await dynamo.listTables().promise(); - expect(tables).toEqual({ TableNames: [] }); + const tables = await dynamo.send(new ListTablesCommand()); + expect(tables.TableNames).toEqual([]); }); it('should preserve state between restarts with dbPath', async () => { const emuOne = await ddbSimulator.launch({ dbPath }); emulators.push(emuOne); const dynamoOne = ddbSimulator.getClient(emuOne); - await dynamoOne - .createTable({ + await dynamoOne.send( + new CreateTableCommand({ TableName: 'foo', ...dbParams, - }) - .promise(); + }), + ); await emuOne.terminate(); emulators = []; const emuTwo = await ddbSimulator.launch({ dbPath }); emulators.push(emuTwo); const dynamoTwo = await ddbSimulator.getClient(emuTwo); - const t = await dynamoTwo.listTables().promise(); - expect(t).toEqual({ - TableNames: ['foo'], - }); + const t = await dynamoTwo.send(new ListTablesCommand()); + expect(t.TableNames).toEqual(['foo']); }); it('should start on specific port', async () => { diff --git a/packages/amplify-opensearch-simulator/package.json b/packages/amplify-opensearch-simulator/package.json index 911e27799d7..bad6a1c2f8f 100644 --- a/packages/amplify-opensearch-simulator/package.json +++ b/packages/amplify-opensearch-simulator/package.json @@ -27,7 +27,6 @@ "dependencies": { "@aws-amplify/amplify-cli-core": "4.4.3", "@aws-amplify/amplify-prompts": "2.8.7", - "aws-sdk": "^2.1464.0", "detect-port": "^1.3.0", "execa": "^5.1.1", "fs-extra": "^8.1.0", diff --git a/packages/amplify-storage-simulator/package.json b/packages/amplify-storage-simulator/package.json index 2053171a9ca..0da7bde7b9f 100644 --- a/packages/amplify-storage-simulator/package.json +++ b/packages/amplify-storage-simulator/package.json @@ -43,8 +43,7 @@ "@types/glob": "^7.1.1", "@types/serve-static": "^1.13.3", "@types/uuid": "^8.3.1", - "@types/xml": "^1.0.4", - "aws-sdk": "^2.1464.0" + "@types/xml": "^1.0.4" }, "berry": { "plugins": [ diff --git a/packages/amplify-util-mock/package.json b/packages/amplify-util-mock/package.json index 7c2bac217e4..e093f494c93 100644 --- a/packages/amplify-util-mock/package.json +++ b/packages/amplify-util-mock/package.json @@ -38,6 +38,8 @@ "@aws-amplify/amplify-opensearch-simulator": "1.7.21", "@aws-amplify/amplify-prompts": "2.8.7", "@aws-amplify/amplify-provider-awscloudformation": "8.11.13", + "@aws-sdk/client-dynamodb": "^3.624.0", + "@aws-sdk/client-dynamodb-streams": "^3.624.0", "@hapi/topo": "^5.0.0", "amplify-codegen": "^4.10.3", "amplify-dynamodb-simulator": "2.9.25", @@ -79,8 +81,8 @@ "amplify-nodejs-function-runtime-provider": "2.5.31", "aws-appsync": "^4.1.4", "aws-cdk-lib": "~2.189.1", - "aws-sdk": "^2.1464.0", - "aws-sdk-mock": "^6.2.0", + "aws-sdk-client-mock": "^4.1.0", + "aws-sdk-client-mock-jest": "^4.1.0", "axios": "^1.11.0", "constructs": "^10.0.5", "graphql": "^15.5.0", diff --git a/packages/amplify-util-mock/src/__e2e__/dynamo-db-model-transformer.e2e.test.ts b/packages/amplify-util-mock/src/__e2e__/dynamo-db-model-transformer.e2e.test.ts index f2e6f113903..f9bb7182cd6 100644 --- a/packages/amplify-util-mock/src/__e2e__/dynamo-db-model-transformer.e2e.test.ts +++ b/packages/amplify-util-mock/src/__e2e__/dynamo-db-model-transformer.e2e.test.ts @@ -128,14 +128,14 @@ test('Test createAuthor mutation', async () => { try { const response = await GRAPHQL_CLIENT.query( `mutation($input: CreateAuthorInput!) { - createAuthor(input: $input) { - id - name - entityMetadata { - isActive - } - } - }`, + createAuthor(input: $input) { + id + name + entityMetadata { + isActive + } + } + }`, { input: { name: 'Jeff B', @@ -161,13 +161,13 @@ test('Test createPost mutation', async () => { try { const response = await GRAPHQL_CLIENT.query( `mutation { - createPost(input: { title: "Hello, World!" }) { - id - title - createdAt - updatedAt - } - }`, + createPost(input: { title: "Hello, World!" }) { + id + title + createdAt + updatedAt + } + }`, {}, ); expect(response.data.createPost.id).toBeDefined(); @@ -441,30 +441,30 @@ test('Test listPosts query with filter', async () => { try { const createResponse = await GRAPHQL_CLIENT.query( `mutation { - createPost(input: { title: "Test List with filter" }) { - id - title - createdAt - updatedAt - } - }`, + createPost(input: { title: "Test List with filter" }) { + id + title + createdAt + updatedAt + } + }`, {}, ); expect(createResponse.data.createPost.id).toBeDefined(); expect(createResponse.data.createPost.title).toEqual('Test List with filter'); const listWithFilterResponse = await GRAPHQL_CLIENT.query( `query { - listPosts(filter: { - title: { - contains: "List with filter" - } - }) { - items { - id - title - } - } - }`, + listPosts(filter: { + title: { + contains: "List with filter" + } + }) { + items { + id + title + } + } + }`, {}, ); logDebug(JSON.stringify(listWithFilterResponse, null, 4)); @@ -483,29 +483,7 @@ test('Test enum filters List', async () => { try { await GRAPHQL_CLIENT.query( `mutation { - createPost(input: { title: "Appears in New Hope", appearsIn: [NEWHOPE], episode: NEWHOPE }) { - id - title - createdAt - updatedAt - } - }`, - {}, - ); - await GRAPHQL_CLIENT.query( - `mutation { - createPost(input: { title: "Appears in Jedi", appearsIn: [JEDI], episode: JEDI }) { - id - title - createdAt - updatedAt - } - }`, - {}, - ); - await GRAPHQL_CLIENT.query( - `mutation { - createPost(input: { title: "Appears in Empire", appearsIn: [EMPIRE], episode: EMPIRE }) { + createPost(input: { title: "Appears in New Hope", appearsIn: [NEWHOPE], episode: NEWHOPE }) { id title createdAt @@ -514,10 +492,9 @@ test('Test enum filters List', async () => { }`, {}, ); - await GRAPHQL_CLIENT.query( `mutation { - createPost(input: { title: "Appears in Empire & JEDI", appearsIn: [EMPIRE, JEDI] }) { + createPost(input: { title: "Appears in Jedi", appearsIn: [JEDI], episode: JEDI }) { id title createdAt @@ -526,18 +503,41 @@ test('Test enum filters List', async () => { }`, {}, ); + await GRAPHQL_CLIENT.query( + `mutation { + createPost(input: { title: "Appears in Empire", appearsIn: [EMPIRE], episode: EMPIRE }) { + id + title + createdAt + updatedAt + } + }`, + {}, + ); + + await GRAPHQL_CLIENT.query( + `mutation { + createPost(input: { title: "Appears in Empire & JEDI", appearsIn: [EMPIRE, JEDI] }) { + id + title + createdAt + updatedAt + } + }`, + {}, + ); // filter list of enums const appearsInWithFilterResponseJedi = await GRAPHQL_CLIENT.query( `query { - listPosts(filter: { appearsIn: {eq: [JEDI]}}) { - items { - title - id - } - } - } - `, + listPosts(filter: { appearsIn: {eq: [JEDI]}}) { + items { + title + id + } + } + } + `, {}, ); expect(appearsInWithFilterResponseJedi.data.listPosts.items).toBeDefined(); @@ -548,14 +548,14 @@ test('Test enum filters List', async () => { const appearsInWithFilterResponseNonJedi = await GRAPHQL_CLIENT.query( `query { - listPosts(filter: { appearsIn: {ne: [JEDI]}}) { - items { - title - id - } - } - } - `, + listPosts(filter: { appearsIn: {ne: [JEDI]}}) { + items { + title + id + } + } + } + `, {}, ); logDebug(JSON.stringify(appearsInWithFilterResponseNonJedi)); @@ -568,14 +568,14 @@ test('Test enum filters List', async () => { const appearsInContainingJedi = await GRAPHQL_CLIENT.query( `query { - listPosts(filter: { appearsIn: {contains: JEDI }}) { - items { - title - id - } - } - } - `, + listPosts(filter: { appearsIn: {contains: JEDI }}) { + items { + title + id + } + } + } + `, {}, ); expect(appearsInContainingJedi.data.listPosts.items).toBeDefined(); @@ -587,14 +587,14 @@ test('Test enum filters List', async () => { const appearsInNotContainingJedi = await GRAPHQL_CLIENT.query( `query { - listPosts(filter: { appearsIn: {notContains: JEDI }}) { - items { - title - id - } - } - } - `, + listPosts(filter: { appearsIn: {notContains: JEDI }}) { + items { + title + id + } + } + } + `, {}, ); expect(appearsInNotContainingJedi.data.listPosts.items).toBeDefined(); @@ -607,14 +607,14 @@ test('Test enum filters List', async () => { // enum filter const jediEpisode = await GRAPHQL_CLIENT.query( `query { - listPosts(filter: { episode: {eq: JEDI }}) { - items { - title - id - } - } - } - `, + listPosts(filter: { episode: {eq: JEDI }}) { + items { + title + id + } + } + } + `, {}, ); expect(jediEpisode.data.listPosts.items).toBeDefined(); @@ -624,14 +624,14 @@ test('Test enum filters List', async () => { const nonJediEpisode = await GRAPHQL_CLIENT.query( `query { - listPosts(filter: { episode: {ne: JEDI }}) { - items { - title - id - } - } - } - `, + listPosts(filter: { episode: {ne: JEDI }}) { + items { + title + id + } + } + } + `, {}, ); expect(nonJediEpisode.data.listPosts.items).toBeDefined(); @@ -651,24 +651,24 @@ test('Test createPost mutation with non-model types', async () => { try { const response = await GRAPHQL_CLIENT.query( `mutation CreatePost($input: CreatePostInput!) { - createPost(input: $input) { - id - title - createdAt - updatedAt - metadata { - tags { - published - metadata { - tags { - published - } - } - } - } - appearsIn - } - }`, + createPost(input: $input) { + id + title + createdAt + updatedAt + metadata { + tags { + published + metadata { + tags { + published + } + } + } + } + appearsIn + } + }`, { input: { title: 'Check that metadata exists', @@ -705,37 +705,37 @@ test('Test updatePost mutation with non-model types', async () => { try { const createResponse = await GRAPHQL_CLIENT.query( `mutation { - createPost(input: { title: "Test Update" }) { - id - title - createdAt - updatedAt - } - }`, + createPost(input: { title: "Test Update" }) { + id + title + createdAt + updatedAt + } + }`, {}, ); expect(createResponse.data.createPost.id).toBeDefined(); expect(createResponse.data.createPost.title).toEqual('Test Update'); const updateResponse = await GRAPHQL_CLIENT.query( `mutation UpdatePost($input: UpdatePostInput!) { - updatePost(input: $input) { - id - title - createdAt - updatedAt - metadata { - tags { - published - metadata { - tags { - published - } - } - } - } - appearsIn - } - }`, + updatePost(input: $input) { + id + title + createdAt + updatedAt + metadata { + tags { + published + metadata { + tags { + published + } + } + } + } + appearsIn + } + }`, { input: { id: createResponse.data.createPost.id, diff --git a/packages/amplify-util-mock/src/__e2e__/subscriptions-with-auth.e2e.test.ts b/packages/amplify-util-mock/src/__e2e__/subscriptions-with-auth.e2e.test.ts index c6581de21f5..f9a9ac7cd54 100644 --- a/packages/amplify-util-mock/src/__e2e__/subscriptions-with-auth.e2e.test.ts +++ b/packages/amplify-util-mock/src/__e2e__/subscriptions-with-auth.e2e.test.ts @@ -4,7 +4,6 @@ import { FeatureFlagProvider, GraphQLTransform } from 'graphql-transformer-core' import { deploy, launchDDBLocal, terminateDDB } from './utils/index'; import AWSAppSyncClient, { AUTH_TYPE } from 'aws-appsync'; import { signUpAddToGroupAndGetJwtToken } from './utils/cognito-utils'; -import AWS = require('aws-sdk'); import gql from 'graphql-tag'; import 'isomorphic-fetch'; import { GraphQLClient } from './utils/graphql-client'; @@ -12,13 +11,6 @@ import { GraphQLClient } from './utils/graphql-client'; // to deal with subscriptions in node env (global as any).WebSocket = require('ws'); -// To overcome of the way of how AmplifyJS picks up currentUserCredentials -const anyAWS = AWS as any; - -if (anyAWS && anyAWS.config && anyAWS.config.credentials) { - delete anyAWS.config.credentials; -} - // delays const SUBSCRIPTION_DELAY = 2000; const PROPAGATAION_DELAY = 5000; diff --git a/packages/amplify-util-mock/src/__e2e__/utils/index.ts b/packages/amplify-util-mock/src/__e2e__/utils/index.ts index 6dd6290796b..3dcb0b28969 100644 --- a/packages/amplify-util-mock/src/__e2e__/utils/index.ts +++ b/packages/amplify-util-mock/src/__e2e__/utils/index.ts @@ -8,7 +8,7 @@ import _ from 'lodash'; import { processTransformerStacks } from '../../CFNParser/appsync-resource-processor'; import { configureDDBDataSource, createAndUpdateTable } from '../../utils/dynamo-db'; import { getFunctionDetails } from './lambda-helper'; -import { DynamoDB } from 'aws-sdk'; +import { DynamoDBClient } from '@aws-sdk/client-dynamodb'; import { functionRuntimeContributorFactory } from 'amplify-nodejs-function-runtime-provider'; import { querySearchable } from '../../utils/opensearch'; import { isWindowsPlatform } from '@aws-amplify/amplify-cli-core'; @@ -37,14 +37,14 @@ export async function launchDDBLocal() { dbPath, port: null, }); - const client: DynamoDB = await dynamoEmulator.getClient(emulator); + const client: DynamoDBClient = await dynamoEmulator.getClient(emulator); logDebug(dbPath); return { emulator, dbPath, client }; } export async function deploy( transformerOutput: any, - client?: DynamoDB, + client?: DynamoDBClient, opensearchURL?: URL, ): Promise<{ config: any; simulator: AmplifyAppSyncSimulator }> { let config: any = processTransformerStacks(transformerOutput); @@ -52,7 +52,7 @@ export async function deploy( if (client) { await createAndUpdateTable(client, config); - config = configureDDBDataSource(config, client.config); + config = await configureDDBDataSource(config, client.config); } await configureLambdaDataSource(config); if (opensearchURL) { @@ -65,14 +65,14 @@ export async function deploy( export async function reDeploy( transformerOutput: any, simulator: AmplifyAppSyncSimulator, - client?: DynamoDB, + client?: DynamoDBClient, ): Promise<{ config: any; simulator: AmplifyAppSyncSimulator }> { let config: any = processTransformerStacks(transformerOutput); config.appSync.apiKey = 'da-fake-api-key'; if (client) { await createAndUpdateTable(client, config); - config = configureDDBDataSource(config, client.config); + config = await configureDDBDataSource(config, client.config); } await configureLambdaDataSource(config); simulator?.reload(config); diff --git a/packages/amplify-util-mock/src/__tests__/api/lambda-trigger-handler.test.ts b/packages/amplify-util-mock/src/__tests__/api/lambda-trigger-handler.test.ts index 2d8326bbd47..91d289543e7 100644 --- a/packages/amplify-util-mock/src/__tests__/api/lambda-trigger-handler.test.ts +++ b/packages/amplify-util-mock/src/__tests__/api/lambda-trigger-handler.test.ts @@ -2,7 +2,7 @@ import { $TSAny, $TSContext } from '@aws-amplify/amplify-cli-core'; import { invokeTrigger } from '../../api/lambda-invoke'; import { isMockable } from '@aws-amplify/amplify-category-function'; import * as lambdaTriggerHandlers from '../../api/lambda-trigger-handler'; -import { DynamoDBStreams, Endpoint } from 'aws-sdk'; +import { DynamoDBStreamsClient } from '@aws-sdk/client-dynamodb-streams'; jest.mock('../../api/lambda-invoke', () => ({ invokeTrigger: jest.fn(), @@ -17,7 +17,7 @@ const isMockableMock = isMockable as jest.MockedFunction; const mockContext = {} as $TSContext; const mockStreamArn = 'mock-arn'; const mockTrigger = { name: 'mock-trigger' }; -const mockDDBEndpoint = new Endpoint('mock'); +const mockDDBEndpoint = 'mock'; describe('Lambda Trigger Handler', () => { beforeEach(() => jest.clearAllMocks()); @@ -66,7 +66,7 @@ describe('Lambda Trigger Handler', () => { const pollForRecordsMock = jest.spyOn(lambdaTriggerHandlers, 'pollDDBStreamAndInvokeLambda').mockResolvedValueOnce(); await lambdaTriggerHandlers.ddbLambdaTriggerHandler(mockContext, mockStreamArn, mockTrigger, mockDDBEndpoint); expect(pollForRecordsMock).toBeCalledTimes(1); - expect(pollForRecordsMock).toBeCalledWith(mockContext, mockStreamArn, expect.any(DynamoDBStreams), mockTrigger); + expect(pollForRecordsMock).toBeCalledWith(mockContext, mockStreamArn, expect.any(DynamoDBStreamsClient), mockTrigger); }); it('Invokes the local lambda when records are available to be processed', async () => { diff --git a/packages/amplify-util-mock/src/__tests__/utils/dynamo-db/helper.test.ts b/packages/amplify-util-mock/src/__tests__/utils/dynamo-db/helper.test.ts index c3cb083e1d4..8ce021c40f2 100644 --- a/packages/amplify-util-mock/src/__tests__/utils/dynamo-db/helper.test.ts +++ b/packages/amplify-util-mock/src/__tests__/utils/dynamo-db/helper.test.ts @@ -1,82 +1,68 @@ import { waitTillTableStateIsActive } from '../../../utils/dynamo-db/helpers'; -import AWS_MOCK from 'aws-sdk-mock'; -import * as AWS from 'aws-sdk'; -import { DynamoDB } from 'aws-sdk'; +import { DynamoDBClient, DescribeTableCommand } from '@aws-sdk/client-dynamodb'; +import { mockClient } from 'aws-sdk-client-mock'; +import 'aws-sdk-client-mock-jest'; + +const ddbMock = mockClient(DynamoDBClient); describe('waitTillTableStateIsActive', () => { - const describeTableMock = jest.fn(); beforeEach(() => { jest.resetAllMocks(); jest.useFakeTimers(); - AWS_MOCK.setSDKInstance(AWS); + ddbMock.reset(); }); afterEach(() => { jest.useRealTimers(); }); it('should wait for table to be in active state', async () => { - describeTableMock.mockImplementation(({ TableName }) => ({ - promise: jest.fn().mockResolvedValue({ - Table: { - TableName, - TableStatus: 'ACTIVE', - }, - }), - })); - const dynamoDBClient = { - describeTable: describeTableMock, - }; + ddbMock.on(DescribeTableCommand).resolves({ + Table: { + TableName: 'table1', + TableStatus: 'ACTIVE', + }, + }); - const waitTillTableStateIsActivePromise = waitTillTableStateIsActive(dynamoDBClient as unknown as DynamoDB, 'table1'); + const waitTillTableStateIsActivePromise = waitTillTableStateIsActive(ddbMock as unknown as DynamoDBClient, 'table1'); jest.advanceTimersByTime(1000); await waitTillTableStateIsActivePromise; - expect(describeTableMock.mock.calls[0][0]).toEqual({ TableName: 'table1' }); + expect(ddbMock).toHaveReceivedNthCommandWith(1, DescribeTableCommand, { TableName: 'table1' }); + expect(ddbMock.commandCalls(DescribeTableCommand)).toHaveLength(1); }); it('should reject the promise when table does not become active for timeout period', async () => { - describeTableMock.mockImplementation(({ TableName }) => ({ - promise: jest.fn().mockResolvedValue({ - Table: { - TableName, - TableStatus: 'UPDATING', - }, - }), - })); + ddbMock.on(DescribeTableCommand).resolves({ + Table: { + TableName: 'table1', + TableStatus: 'UPDATING', + }, + }); - const dynamoDBClient = { - describeTable: describeTableMock, - }; - const waitTillTableStateIsActivePromise = waitTillTableStateIsActive(dynamoDBClient as unknown as DynamoDB, 'table1'); + const waitTillTableStateIsActivePromise = waitTillTableStateIsActive(ddbMock as unknown as DynamoDBClient, 'table1'); jest.runOnlyPendingTimers(); await expect(waitTillTableStateIsActivePromise).rejects.toMatchObject({ message: 'Waiting for table status to turn ACTIVE timed out' }); - expect(describeTableMock).toHaveBeenCalled(); + expect(ddbMock).toHaveReceivedCommand(DescribeTableCommand); }); it('should periodically call check status', async () => { let callCount = 0; - - describeTableMock.mockImplementation(({ TableName }) => { + ddbMock.on(DescribeTableCommand).callsFake(() => { callCount += 1; - return { - promise: jest.fn().mockResolvedValue({ - Table: { - TableName, - TableStatus: callCount === 3 ? 'ACTIVE' : 'UPDATING', - }, - }), - }; + return Promise.resolve({ + Table: { + TableName: 'table1', + TableStatus: callCount === 3 ? 'ACTIVE' : 'UPDATING', + }, + }); }); - const dynamoDBClient = { - describeTable: describeTableMock, - }; - const waitTillTableStateIsActivePromise = waitTillTableStateIsActive(dynamoDBClient as unknown as DynamoDB, 'table1'); + const waitTillTableStateIsActivePromise = waitTillTableStateIsActive(ddbMock as unknown as DynamoDBClient, 'table1'); jest.advanceTimersByTime(4000); await waitTillTableStateIsActivePromise; - expect(describeTableMock).toBeCalledTimes(4); - expect(describeTableMock.mock.calls[0][0]).toEqual({ TableName: 'table1' }); - expect(describeTableMock.mock.calls[1][0]).toEqual({ TableName: 'table1' }); - expect(describeTableMock.mock.calls[2][0]).toEqual({ TableName: 'table1' }); - expect(describeTableMock.mock.calls[3][0]).toEqual({ TableName: 'table1' }); + expect(ddbMock.commandCalls(DescribeTableCommand)).toHaveLength(4); + expect(ddbMock).toHaveReceivedNthCommandWith(1, DescribeTableCommand, { TableName: 'table1' }); + expect(ddbMock).toHaveReceivedNthCommandWith(2, DescribeTableCommand, { TableName: 'table1' }); + expect(ddbMock).toHaveReceivedNthCommandWith(3, DescribeTableCommand, { TableName: 'table1' }); + expect(ddbMock).toHaveReceivedNthCommandWith(4, DescribeTableCommand, { TableName: 'table1' }); }); }); diff --git a/packages/amplify-util-mock/src/__tests__/utils/dynamo-db/index.test.ts b/packages/amplify-util-mock/src/__tests__/utils/dynamo-db/index.test.ts index 4a77f76ea5e..0cb640835dd 100644 --- a/packages/amplify-util-mock/src/__tests__/utils/dynamo-db/index.test.ts +++ b/packages/amplify-util-mock/src/__tests__/utils/dynamo-db/index.test.ts @@ -1,36 +1,41 @@ import { createAndUpdateTable, MockDynamoDBConfig } from '../../../utils/dynamo-db'; -import AWS_MOCK from 'aws-sdk-mock'; -import * as AWS from 'aws-sdk'; -import { DynamoDB } from 'aws-sdk'; - +import { + AttributeDefinition, + CreateTableCommand, + DynamoDBClient, + KeySchemaElement, + ListTablesCommand, + UpdateTableCommand, +} from '@aws-sdk/client-dynamodb'; +import { mockClient } from 'aws-sdk-client-mock'; import { createTables, describeTables, getUpdateTableInput, updateTables } from '../../../utils/dynamo-db/utils'; -import { CreateTableInput, GlobalSecondaryIndex } from 'aws-sdk/clients/dynamodb'; + +const ddbMock = mockClient(DynamoDBClient); jest.mock('../../../utils/dynamo-db/utils'); describe('createAndUpdateTable', () => { - const describeTablesMock = jest.fn(); - const table1Input: CreateTableInput = { + const table1Input = { TableName: 'table1', AttributeDefinitions: [ { AttributeName: 'id', AttributeType: 'S', - }, + } as AttributeDefinition, { AttributeName: 'name', AttributeType: 'S', - }, + } as AttributeDefinition, ], KeySchema: [ { AttributeName: 'id', KeyType: 'HASH', - }, + } as KeySchemaElement, ], }; - const indexByName: GlobalSecondaryIndex = { + const indexByName = { IndexName: 'byName', KeySchema: [ { @@ -38,12 +43,11 @@ describe('createAndUpdateTable', () => { KeyType: 'HASH', }, ], - Projection: { ProjectionType: 'ALL', }, }; - const indexByContent: GlobalSecondaryIndex = { + const indexByContent = { IndexName: 'index1', KeySchema: [ { @@ -51,20 +55,19 @@ describe('createAndUpdateTable', () => { KeyType: 'HASH', }, ], - Projection: { ProjectionType: 'ALL', }, }; - const table2Input: CreateTableInput = { + const table2Input = { ...table1Input, AttributeDefinitions: [ ...table1Input.AttributeDefinitions, { AttributeName: 'content', AttributeType: 'S', - }, + } as AttributeDefinition, ], TableName: 'table2', GlobalSecondaryIndexes: [indexByName, indexByContent], @@ -73,7 +76,7 @@ describe('createAndUpdateTable', () => { beforeEach(() => { jest.resetAllMocks(); jest.useFakeTimers(); - AWS_MOCK.setSDKInstance(AWS); + ddbMock.reset(); }); it('should create new tables when they are missing', async () => { @@ -81,26 +84,18 @@ describe('createAndUpdateTable', () => { tables: [{ Properties: table1Input, isNewlyAdded: true }], }; - const mockListTables = jest.fn().mockReturnValue({ - promise: jest.fn().mockResolvedValue({ TableNames: [] }), - }); - - describeTablesMock.mockReturnValue({}); + ddbMock.on(ListTablesCommand).resolves({ TableNames: [] }); + ddbMock.on(CreateTableCommand).resolves({}); + ddbMock.on(UpdateTableCommand).resolves({}); - const ddbClient = { - describeTables: describeTablesMock, - listTables: mockListTables, - }; - await createAndUpdateTable(ddbClient as unknown as DynamoDB, mockDDBConfig); - expect(createTables).toHaveBeenCalledWith(ddbClient, [table1Input]); + //const ddbClient = new DynamoDBClient({}); + await createAndUpdateTable(ddbMock as unknown as DynamoDBClient, mockDDBConfig); + expect(createTables).toHaveBeenCalledWith(ddbMock as unknown as DynamoDBClient, [table1Input]); expect(getUpdateTableInput).not.toHaveBeenCalled(); - expect(updateTables).toHaveBeenCalledWith(ddbClient, []); + expect(updateTables).toHaveBeenCalledWith(ddbMock as unknown as DynamoDBClient, []); }); it('should update existing table with new GSI', async () => { - const createTablesMock = jest.fn(); - const mockListTables = jest.fn(); - const getUpdateTableInputResult = [ { ...table2Input, @@ -116,13 +111,9 @@ describe('createAndUpdateTable', () => { }, ]; - createTablesMock.mockReturnValue(() => { - jest.fn().mockResolvedValue([]); - }); - - mockListTables.mockReturnValue({ - promise: jest.fn().mockResolvedValue({ TableNames: [table1Input.TableName, table2Input.TableName] }), - }); + ddbMock.on(ListTablesCommand).resolves({ TableNames: [table1Input.TableName, table2Input.TableName] }); + ddbMock.on(CreateTableCommand).resolves({}); + ddbMock.on(UpdateTableCommand).resolves({}); (getUpdateTableInput as jest.Mock).mockImplementation((input) => (input === table2Input ? getUpdateTableInputResult : [])); @@ -137,15 +128,10 @@ describe('createAndUpdateTable', () => { { Properties: table2Input, isNewlyAdded: false }, ], }; - const ddbClient = { - createTables: createTablesMock, - listTables: mockListTables, - getUpdateTableInput, - }; - await createAndUpdateTable(ddbClient as unknown as DynamoDB, mockDDBConfig); - expect(createTables).toHaveBeenCalledWith(ddbClient, []); + await createAndUpdateTable(ddbMock as unknown as DynamoDBClient, mockDDBConfig); + expect(createTables).toHaveBeenCalledWith(ddbMock as unknown as DynamoDBClient, []); expect(getUpdateTableInput).toHaveBeenCalledWith(table2Input, { ...table2Input, GlobalSecondaryIndex: [] }); - expect(updateTables).toHaveBeenCalledWith(ddbClient, getUpdateTableInputResult); + expect(updateTables).toHaveBeenCalledWith(ddbMock as unknown as DynamoDBClient, getUpdateTableInputResult); }); }); diff --git a/packages/amplify-util-mock/src/__tests__/utils/dynamo-db/util.test.ts b/packages/amplify-util-mock/src/__tests__/utils/dynamo-db/util.test.ts index 2aad9996300..c0f6df3ac79 100644 --- a/packages/amplify-util-mock/src/__tests__/utils/dynamo-db/util.test.ts +++ b/packages/amplify-util-mock/src/__tests__/utils/dynamo-db/util.test.ts @@ -1,27 +1,32 @@ import * as ddbUtils from '../../../utils/dynamo-db/utils'; -import AWS_MOCK from 'aws-sdk-mock'; -import * as AWS from 'aws-sdk'; -import { DescribeTableOutput, CreateTableInput, UpdateTableInput, TableDescription } from 'aws-sdk/clients/dynamodb'; +import { + DynamoDBClient, + DescribeTableCommand, + CreateTableCommand, + UpdateTableCommand, + KeySchemaElement, + GlobalSecondaryIndexDescription, + AttributeDefinition, + GlobalSecondaryIndexUpdate, + ProjectionType, +} from '@aws-sdk/client-dynamodb'; +import { mockClient } from 'aws-sdk-client-mock'; +import 'aws-sdk-client-mock-jest'; import { waitTillTableStateIsActive } from '../../../utils/dynamo-db/helpers'; -import { DynamoDB } from 'aws-sdk'; + +const ddbMock = mockClient(DynamoDBClient); jest.mock('../../../utils/dynamo-db/helpers'); describe('DynamoDB Utils', () => { beforeEach(() => { - jest.resetAllMocks(); - AWS_MOCK.setSDKInstance(require('aws-sdk')); + ddbMock.reset(); }); describe('describeTables', () => { - const describeTableMock = jest.fn(); - beforeEach(() => { - AWS_MOCK.mock('DynamoDB', 'describeTable', describeTableMock); - }); - it('should call DynamoDB Clients describe table and collect the results', async () => { const tableNames = ['table1', 'table2']; - const describeTableResult: Record = { + const describeTableResult = { table1: { Table: { TableName: 'table1', @@ -29,11 +34,11 @@ describe('DynamoDB Utils', () => { { AttributeName: 'id', KeyType: 'HASH', - }, + } as KeySchemaElement, { AttributeName: 'createdAt', KeyType: 'RANGE', - }, + } as KeySchemaElement, ], GlobalSecondaryIndexes: [ { @@ -41,7 +46,7 @@ describe('DynamoDB Utils', () => { Projection: { ProjectionType: 'ALL', }, - }, + } as GlobalSecondaryIndexDescription, ], }, }, @@ -52,11 +57,11 @@ describe('DynamoDB Utils', () => { { AttributeName: 'table2_id', KeyType: 'HASH', - }, + } as KeySchemaElement, { AttributeName: 'createdAt', KeyType: 'RANGE', - }, + } as KeySchemaElement, ], GlobalSecondaryIndexes: [ { @@ -64,38 +69,33 @@ describe('DynamoDB Utils', () => { Projection: { ProjectionType: 'ALL', }, - }, + } as GlobalSecondaryIndexDescription, ], }, }, }; - describeTableMock.mockImplementation(function (params, cb) { - const tableName = params.TableName; - cb(null, describeTableResult[tableName]); - }); - const client = new AWS.DynamoDB(); + + ddbMock.on(DescribeTableCommand, { TableName: 'table1' }).resolves(describeTableResult.table1); + ddbMock.on(DescribeTableCommand, { TableName: 'table2' }).resolves(describeTableResult.table2); + + const client = new DynamoDBClient({}); await expect(ddbUtils.describeTables(client, tableNames)).resolves.toEqual({ table1: describeTableResult.table1.Table, table2: describeTableResult.table2.Table, }); - expect(describeTableMock).toHaveBeenCalledTimes(2); - expect(describeTableMock.mock.calls[0][0]).toEqual({ TableName: 'table1' }); - expect(describeTableMock.mock.calls[1][0]).toEqual({ TableName: 'table2' }); + expect(ddbMock).toHaveReceivedNthCommandWith(1, DescribeTableCommand, { TableName: 'table1' }); + expect(ddbMock).toHaveReceivedNthCommandWith(2, DescribeTableCommand, { TableName: 'table2' }); + expect(ddbMock.commandCalls(DescribeTableCommand)).toHaveLength(2); }); it('should early exit for empty tables', async () => { - const tableNames = []; - const client = { - describeTable: describeTableMock, - }; - await expect(ddbUtils.describeTables(client as unknown as DynamoDB, tableNames)).resolves.toEqual({}); - expect(describeTableMock).toHaveBeenCalledTimes(0); + const tableNames: string[] = []; + await expect(ddbUtils.describeTables(ddbMock as unknown as DynamoDBClient, tableNames)).resolves.toEqual({}); + expect(ddbMock.commandCalls(DescribeTableCommand)).toHaveLength(0); }); }); describe('createTables', () => { - const createTableMock = jest.fn(); - it('should call createTable for each table', async () => { const tableInputs = [ { @@ -104,13 +104,13 @@ describe('DynamoDB Utils', () => { { AttributeName: 'id', AttributeType: 'S', - }, + } as AttributeDefinition, ], KeySchema: [ { AttributeName: 'id', KeyType: 'HASH', - }, + } as KeySchemaElement, ], }, { @@ -119,46 +119,38 @@ describe('DynamoDB Utils', () => { { AttributeName: 'id', AttributeType: 'S', - }, + } as AttributeDefinition, ], KeySchema: [ { AttributeName: 'id', KeyType: 'HASH', - }, + } as KeySchemaElement, ], }, ]; - createTableMock.mockImplementation(() => { - return { - promise: jest.fn().mockResolvedValue(null), - }; - }); - const client = { - createTable: createTableMock, - }; - await ddbUtils.createTables(client as unknown as DynamoDB, tableInputs); - expect(createTableMock).toHaveBeenCalledTimes(2); - expect(createTableMock.mock.calls[0][0]).toEqual(tableInputs[0]); - expect(createTableMock.mock.calls[1][0]).toEqual(tableInputs[1]); + ddbMock.on(CreateTableCommand).resolves({}); + + await ddbUtils.createTables(ddbMock as unknown as DynamoDBClient, tableInputs); + expect(ddbMock).toHaveReceivedNthCommandWith(1, CreateTableCommand, tableInputs[0]); + expect(ddbMock).toHaveReceivedNthCommandWith(2, CreateTableCommand, tableInputs[1]); + expect(ddbMock.commandCalls(CreateTableCommand)).toHaveLength(2); }); }); describe('updateTables', () => { - const updateTableMock = jest.fn(); - it('should wait for table to be in ACTIVE state before updating', async () => { const waitTillTableStateIsActiveMock = (waitTillTableStateIsActive as jest.Mock).mockResolvedValue(undefined); - const tables: UpdateTableInput[] = [ + const tables = [ { TableName: 'table1', AttributeDefinitions: [ { AttributeName: 'id', AttributeType: 'S', - }, + } as AttributeDefinition, ], GlobalSecondaryIndexUpdates: [ { @@ -172,7 +164,7 @@ describe('DynamoDB Utils', () => { ], Projection: { ProjectionType: 'ALL' }, }, - }, + } as GlobalSecondaryIndexUpdate, ], }, { @@ -181,11 +173,11 @@ describe('DynamoDB Utils', () => { { AttributeName: 'id', AttributeType: 'S', - }, + } as AttributeDefinition, { AttributeName: 'createdAt', AttributeType: 'S', - }, + } as AttributeDefinition, ], GlobalSecondaryIndexUpdates: [ { @@ -203,40 +195,25 @@ describe('DynamoDB Utils', () => { ], Projection: { ProjectionType: 'ALL' }, }, - }, + } as GlobalSecondaryIndexUpdate, ], }, ]; - updateTableMock.mockImplementation((params, callback) => { - const { TableName, AttributeDefinitions, GlobalSecondaryIndexUpdates } = params; - const response = { - TableDescription: { - TableName, - AttributeDefinitions, - GlobalSecondaryIndexes: GlobalSecondaryIndexUpdates.filter((update) => update.Create).map((gsi) => gsi.Update), - }, - }; - if (typeof callback === 'function') { - callback(null, response); - return undefined; - } else { - return { - promise: jest.fn().mockResolvedValue(response), - }; - } + ddbMock.on(UpdateTableCommand).resolves({ + TableDescription: { + TableName: 'table1', + AttributeDefinitions: [], + GlobalSecondaryIndexes: [], + }, }); - const client = { - updateTable: updateTableMock, - }; - const updatePromise = ddbUtils.updateTables(client as unknown as DynamoDB, tables); - await updatePromise; - - expect(updateTableMock).toHaveBeenCalledTimes(2); - expect(updateTableMock.mock.calls[0][0]).toEqual(tables[0]); - expect(updateTableMock.mock.calls[1][0]).toEqual(tables[1]); + const client = new DynamoDBClient({}); + await ddbUtils.updateTables(client, tables); + expect(ddbMock).toHaveReceivedNthCommandWith(1, UpdateTableCommand, tables[0]); + expect(ddbMock).toHaveReceivedNthCommandWith(2, UpdateTableCommand, tables[1]); + expect(ddbMock.commandCalls(UpdateTableCommand)).toHaveLength(2); expect(waitTillTableStateIsActiveMock).toHaveBeenCalledTimes(2); expect(waitTillTableStateIsActiveMock).toHaveBeenNthCalledWith(1, client, tables[0].TableName); expect(waitTillTableStateIsActiveMock).toHaveBeenNthCalledWith(2, client, tables[1].TableName); @@ -250,21 +227,21 @@ describe('DynamoDB Utils', () => { { AttributeName: 'id', AttributeType: 'S', - }, + } as AttributeDefinition, { AttributeName: 'Name', AttributeType: 'S', - }, + } as AttributeDefinition, { AttributeName: 'Address', AttributeType: 'S', - }, + } as AttributeDefinition, ], KeySchema: [ { AttributeName: 'id', KeyType: 'HASH', - }, + } as KeySchemaElement, ], }; const existingIndex = { @@ -273,10 +250,10 @@ describe('DynamoDB Utils', () => { { AttributeName: 'address', KeyType: 'HASH', - }, + } as KeySchemaElement, ], Projection: { - ProjectionType: 'ALL', + ProjectionType: 'ALL' as ProjectionType, }, }; const newIndex = { @@ -285,18 +262,18 @@ describe('DynamoDB Utils', () => { { AttributeName: 'name', KeyType: 'HASH', - }, + } as KeySchemaElement, ], Projection: { - ProjectionType: 'ALL', + ProjectionType: 'ALL' as ProjectionType, }, }; it('should add a new index', () => { - const createTableInput: CreateTableInput = { + const createTableInput = { ...baseSchema, GlobalSecondaryIndexes: [newIndex, existingIndex], }; - const existingTableConfig: TableDescription = { + const existingTableConfig = { ...baseSchema, GlobalSecondaryIndexes: [existingIndex], }; @@ -312,10 +289,10 @@ describe('DynamoDB Utils', () => { ]); }); it('should delete a new index', () => { - const createTableInput: CreateTableInput = { + const createTableInput = { ...baseSchema, }; - const existingTableConfig: TableDescription = { + const existingTableConfig = { ...baseSchema, GlobalSecondaryIndexes: [existingIndex], }; @@ -328,11 +305,11 @@ describe('DynamoDB Utils', () => { }); it('should throw error if the table names dont match', () => { - const createTableInput: CreateTableInput = { + const createTableInput = { ...baseSchema, TableName: 'different-name', }; - const existingTableConfig: TableDescription = { + const existingTableConfig = { ...baseSchema, GlobalSecondaryIndexes: [existingIndex], }; @@ -340,11 +317,11 @@ describe('DynamoDB Utils', () => { }); it('should generate sepearate inputs when there is an addition and deletion of index', () => { - const createTableInput: CreateTableInput = { + const createTableInput = { ...baseSchema, GlobalSecondaryIndexes: [newIndex], }; - const existingTableConfig: TableDescription = { + const existingTableConfig = { ...baseSchema, GlobalSecondaryIndexes: [existingIndex], }; diff --git a/packages/amplify-util-mock/src/api/api.ts b/packages/amplify-util-mock/src/api/api.ts index 861e5627d47..66f84b9de9c 100644 --- a/packages/amplify-util-mock/src/api/api.ts +++ b/packages/amplify-util-mock/src/api/api.ts @@ -28,7 +28,7 @@ import { getInvoker } from '@aws-amplify/amplify-category-function'; import { lambdaArnToConfig } from './lambda-arn-to-config'; import { timeConstrainedInvoker } from '../func'; import { ddbLambdaTriggerHandler } from './lambda-trigger-handler'; -import { TableDescription } from 'aws-sdk/clients/dynamodb'; +import { TableDescription } from '@aws-sdk/client-dynamodb'; import { querySearchable } from '../utils/opensearch'; import { getMockOpensearchDataDirectory } from '../utils/mock-directory'; import { buildLambdaTrigger } from './lambda-invoke'; @@ -94,7 +94,7 @@ export class APITest { await this.generateCode(context, appSyncConfig); context.print.info(`AppSync Mock endpoint is running at ${this.appSyncSimulator.url}`); - context.print.info(`GraphiQL IDE is available for local testing at ${this.appSyncSimulator.localhostUrl}`); + context.print.info(`GraphQL IDE is available for local testing at ${this.appSyncSimulator.localhostUrl}`); await this.startDDBListeners(context, appSyncConfig, false); } catch (e) { const errMessage = 'Failed to start API Mocking.'; @@ -151,7 +151,7 @@ export class APITest { const { transformerOutput } = await runTransformer(context); let config: any = processAppSyncResources(transformerOutput, parameters); config = await this.ensureDDBTables(config); - config = this.configureDDBDataSource(config); + config = await this.configureDDBDataSource(config); this.transformerResult = await this.configureLambdaDataSource(context, config); this.transformerResult = await this.configureOpensearchDataSource(this.transformerResult); this.userOverriddenSlots = transformerOutput.userOverriddenSlots; @@ -375,9 +375,9 @@ export class APITest { }); } - private configureDDBDataSource(config) { + private async configureDDBDataSource(config) { const ddbConfig = this.ddbClient.config; - return configureDDBDataSource(config, ddbConfig); + return await configureDDBDataSource(config, ddbConfig); } public async getAppSyncAPI(context) { const currentMeta = await getAmplifyMeta(context); diff --git a/packages/amplify-util-mock/src/api/lambda-trigger-handler.ts b/packages/amplify-util-mock/src/api/lambda-trigger-handler.ts index dd28d25ed56..6b8bddad6c5 100644 --- a/packages/amplify-util-mock/src/api/lambda-trigger-handler.ts +++ b/packages/amplify-util-mock/src/api/lambda-trigger-handler.ts @@ -1,5 +1,11 @@ import { $TSContext, AmplifyFault, AMPLIFY_SUPPORT_DOCS } from '@aws-amplify/amplify-cli-core'; -import { DynamoDBStreams, Endpoint } from 'aws-sdk'; +import { + DynamoDBStreamsClient, + DescribeStreamCommand, + GetShardIteratorCommand, + GetRecordsCommand, + Shard, +} from '@aws-sdk/client-dynamodb-streams'; import { invokeTrigger } from './lambda-invoke'; import { isMockable } from '@aws-amplify/amplify-category-function'; import { printer } from '@aws-amplify/amplify-prompts'; @@ -17,7 +23,7 @@ export const ddbLambdaTriggerHandler = async ( context: $TSContext, streamArn?: string, lambdaTrigger?: LambdaTrigger, - localDynamoDBEndpoint?: Endpoint, + localDynamoDBEndpoint?: string, ): Promise => { if (!lambdaTrigger || (!lambdaTrigger?.name && !lambdaTrigger?.config)) { throw new AmplifyFault('MockProcessFault', { @@ -60,8 +66,8 @@ export const ddbLambdaTriggerHandler = async ( * @param streams DDB streams client * @returns latest active shard iterator */ -export const getLatestShardIterator = async (streamArn: string, streams: DynamoDBStreams): Promise => { - const stream = await streams.describeStream({ StreamArn: streamArn }).promise(); +export const getLatestShardIterator = async (streamArn: string, streams: DynamoDBStreamsClient): Promise => { + const stream = await streams.send(new DescribeStreamCommand({ StreamArn: streamArn })); if (!stream) { throw new AmplifyFault('MockProcessFault', { @@ -80,13 +86,13 @@ export const getLatestShardIterator = async (streamArn: string, streams: DynamoD }); } - const { ShardIterator: start } = await streams - .getShardIterator({ + const { ShardIterator: start } = await streams.send( + new GetShardIteratorCommand({ StreamArn: streamArn, ShardId: shardId, ShardIteratorType: DDBStreamsShardIteratorType.LATEST, - }) - .promise(); + }), + ); return start; }; @@ -98,7 +104,7 @@ enum DDBStreamsShardIteratorType { AFTER_SEQUENCE_NUMBER = 'AFTER_SEQUENCE_NUMBER', } -const isShardActive = (shard: DynamoDBStreams.Shard): boolean => { +const isShardActive = (shard: Shard): boolean => { return shard.SequenceNumberRange && shard.SequenceNumberRange.StartingSequenceNumber && !shard.SequenceNumberRange.EndingSequenceNumber; }; @@ -109,15 +115,15 @@ const isShardActive = (shard: DynamoDBStreams.Shard): boolean => { * @param streams DDB streams client * @returns latest available records from stream */ -export const getStreamRecords = async (shardIterator: string, streamArn: string, streams: DynamoDBStreams) => { +export const getStreamRecords = async (shardIterator: string, streamArn: string, streams: DynamoDBStreamsClient) => { const shardIteratorCopy = shardIterator; try { - const data = await streams.getRecords({ ShardIterator: shardIteratorCopy }).promise(); + const data = await streams.send(new GetRecordsCommand({ ShardIterator: shardIteratorCopy })); return { data: data, shardIterator: shardIteratorCopy }; } catch (error) { printer.info('Re-Trying with a new shard'); const latestShardIterator = await getLatestShardIterator(streamArn, streams); - const data = await streams.getRecords({ ShardIterator: latestShardIterator }).promise(); + const data = await streams.send(new GetRecordsCommand({ ShardIterator: latestShardIterator })); return { data: data, shardIterator: latestShardIterator }; } }; @@ -129,7 +135,7 @@ export const getStreamRecords = async (shardIterator: string, streamArn: string, export const pollDDBStreamAndInvokeLambda = async ( context: $TSContext, streamArn: string, - streams: DynamoDBStreams, + streams: DynamoDBStreamsClient, lambdaTrigger: LambdaTrigger, ) => { let shardIterator = await getLatestShardIterator(streamArn, streams); @@ -151,15 +157,17 @@ export const pollDDBStreamAndInvokeLambda = async ( } }; -export const getDDBStreamsClient = (localDynamoDBEndpoint: Endpoint): DynamoDBStreams => { +export const getDDBStreamsClient = (localDynamoDBEndpoint: string): DynamoDBStreamsClient => { const MOCK_REGION = 'us-fake-1'; const MOCK_ACCESS_KEY = 'fake'; const MOCK_SECRET_ACCESS_KEY = 'fake'; - return new DynamoDBStreams({ + return new DynamoDBStreamsClient({ endpoint: localDynamoDBEndpoint, region: MOCK_REGION, - accessKeyId: MOCK_ACCESS_KEY, - secretAccessKey: MOCK_SECRET_ACCESS_KEY, + credentials: { + accessKeyId: MOCK_ACCESS_KEY, + secretAccessKey: MOCK_SECRET_ACCESS_KEY, + }, }); }; diff --git a/packages/amplify-util-mock/src/utils/dynamo-db/helpers.ts b/packages/amplify-util-mock/src/utils/dynamo-db/helpers.ts index 76d4da04e50..052da8ab2dc 100644 --- a/packages/amplify-util-mock/src/utils/dynamo-db/helpers.ts +++ b/packages/amplify-util-mock/src/utils/dynamo-db/helpers.ts @@ -1,8 +1,8 @@ -import { DynamoDB } from 'aws-sdk'; +import { DynamoDBClient, DescribeTableCommand } from '@aws-sdk/client-dynamodb'; const MILLI_SECONDS = 1000; export async function waitTillTableStateIsActive( - dynamoDBClient: DynamoDB, + dynamoDBClient: DynamoDBClient, tableName: string, maximumWait: number = 15 * MILLI_SECONDS, ): Promise { @@ -12,7 +12,7 @@ export async function waitTillTableStateIsActive( let timeoutHandle; /* eslint-enable */ const checkStatus = async () => { - const tableDescription = await dynamoDBClient.describeTable({ TableName: tableName }).promise(); + const tableDescription = await dynamoDBClient.send(new DescribeTableCommand({ TableName: tableName })); if (tableDescription.Table.TableStatus === 'ACTIVE') { clearTimeout(timeoutHandle); clearInterval(intervalHandle); diff --git a/packages/amplify-util-mock/src/utils/dynamo-db/index.ts b/packages/amplify-util-mock/src/utils/dynamo-db/index.ts index 878d759567d..c8a837c0dd6 100644 --- a/packages/amplify-util-mock/src/utils/dynamo-db/index.ts +++ b/packages/amplify-util-mock/src/utils/dynamo-db/index.ts @@ -1,14 +1,14 @@ -import { DynamoDB } from 'aws-sdk'; +import { DynamoDBClient, ListTablesCommand } from '@aws-sdk/client-dynamodb'; import { createTables, describeTables, getUpdateTableInput, updateTables } from './utils'; -import { CreateTableInput } from 'aws-sdk/clients/dynamodb'; +import { CreateTableInput } from '@aws-sdk/client-dynamodb'; export type MockDynamoDBConfig = { tables: { Properties: CreateTableInput; isNewlyAdded: boolean }[]; }; -export async function createAndUpdateTable(dynamoDbClient: DynamoDB, config: MockDynamoDBConfig): Promise { +export async function createAndUpdateTable(dynamoDbClient: DynamoDBClient, config: MockDynamoDBConfig): Promise { const tables = config.tables.map((table) => table.Properties); - const existingTables = await dynamoDbClient.listTables().promise(); + const existingTables = await dynamoDbClient.send(new ListTablesCommand({})); const existingTablesWithDetails = await describeTables(dynamoDbClient, existingTables.TableNames); const tablesToCreate = tables.filter((t) => { const tableName = t.TableName; @@ -32,7 +32,8 @@ export async function createAndUpdateTable(dynamoDbClient: DynamoDB, config: Moc return config; } -export function configureDDBDataSource(config, ddbConfig) { +export async function configureDDBDataSource(config, ddbConfig) { + const creds = await ddbConfig.credentials(); return { ...config, dataSources: config.dataSources.map((d) => { @@ -45,9 +46,11 @@ export function configureDDBDataSource(config, ddbConfig) { ...d.config, endpoint: ddbConfig.endpoint, region: ddbConfig.region, - accessKeyId: ddbConfig.accessKeyId, - secretAccessKey: ddbConfig.secretAccessKey, - sessionToken: ddbConfig.sessionToken || process.env.AWS_SESSION_TOKEN, + credentials: { + accessKeyId: creds.accessKeyId, + secretAccessKey: creds.secretAccessKey, + sessionToken: creds.sessionToken || process.env.AWS_SESSION_TOKEN, + }, }, }; }), diff --git a/packages/amplify-util-mock/src/utils/dynamo-db/utils.ts b/packages/amplify-util-mock/src/utils/dynamo-db/utils.ts index 629a8ebfbef..3b6dced7d35 100644 --- a/packages/amplify-util-mock/src/utils/dynamo-db/utils.ts +++ b/packages/amplify-util-mock/src/utils/dynamo-db/utils.ts @@ -1,16 +1,16 @@ -import { DynamoDB } from 'aws-sdk'; -import { CreateTableInput, GlobalSecondaryIndexUpdate, TableDescription, UpdateTableInput } from 'aws-sdk/clients/dynamodb'; +import { DynamoDBClient, CreateTableCommand, UpdateTableCommand, DescribeTableCommand } from '@aws-sdk/client-dynamodb'; +import { CreateTableInput, GlobalSecondaryIndexUpdate, TableDescription, UpdateTableInput } from '@aws-sdk/client-dynamodb'; import _ from 'lodash'; import { waitTillTableStateIsActive } from './helpers'; -export async function createTables(dynamoDbClient: DynamoDB, tables: CreateTableInput[]): Promise { +export async function createTables(dynamoDbClient: DynamoDBClient, tables: CreateTableInput[]): Promise { for (const table of tables) { console.log(`Creating new table ${table.TableName}`); - await dynamoDbClient.createTable(table).promise(); + await dynamoDbClient.send(new CreateTableCommand(table)); } } -export async function updateTables(dynamoDbClient: DynamoDB, tables: UpdateTableInput[]): Promise { +export async function updateTables(dynamoDbClient: DynamoDBClient, tables: UpdateTableInput[]): Promise { for (const table of tables) { const updateType = table.GlobalSecondaryIndexUpdates[0].Delete ? 'Deleting' : 'Creating'; const indexName = @@ -19,17 +19,17 @@ export async function updateTables(dynamoDbClient: DynamoDB, tables: UpdateTable : table.GlobalSecondaryIndexUpdates[0].Create.IndexName; await waitTillTableStateIsActive(dynamoDbClient, table.TableName); console.log(`${updateType} index ${indexName} on ${table.TableName}`); - await dynamoDbClient.updateTable(table).promise(); + await dynamoDbClient.send(new UpdateTableCommand(table)); } } -export async function describeTables(dynamoDbClient: DynamoDB, tableNames: string[]): Promise> { +export async function describeTables(dynamoDbClient: DynamoDBClient, tableNames: string[]): Promise> { const tableDetails: Record = {}; if (_.isEmpty(tableNames)) { return tableDetails; } for (const tableName of tableNames) { - const tableDescription = await dynamoDbClient.describeTable({ TableName: tableName }).promise(); + const tableDescription = await dynamoDbClient.send(new DescribeTableCommand({ TableName: tableName })); if (tableDescription.Table) { tableDetails[tableName] = tableDescription.Table; } diff --git a/scripts/split-e2e-tests-codebuild.ts b/scripts/split-e2e-tests-codebuild.ts index e1ab803effd..ffa2598f602 100644 --- a/scripts/split-e2e-tests-codebuild.ts +++ b/scripts/split-e2e-tests-codebuild.ts @@ -45,6 +45,9 @@ const RUN_SOLO = [ const RUN_DUO = [ 'src/__tests__/api_6c.test.ts', 'src/__tests__/auth_9.test.ts', + 'src/__tests__/export-pull-a.test.ts', + 'src/__tests__/export-pull-c.test.ts', + 'src/__tests__/hosting.test.ts', 'src/__tests__/notifications-analytics-compatibility-in-app-2.test.ts', 'src/__tests__/schema-iterative-update-4.test.ts', 'src/__tests__/schema-searchable.test.ts', diff --git a/yarn.lock b/yarn.lock index f3e047bce97..aaf9601456c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -108,6 +108,8 @@ __metadata: "@aws-amplify/amplify-cli-core": 4.4.3 "@aws-amplify/amplify-graphiql-explorer": 2.6.4 "@aws-amplify/amplify-prompts": 2.8.7 + "@aws-sdk/client-dynamodb": ^3.624.0 + "@aws-sdk/util-dynamodb": ^3.624.0 "@graphql-tools/schema": ^8.3.1 "@graphql-tools/utils": ^8.5.1 "@types/cors": ^2.8.6 @@ -115,7 +117,6 @@ __metadata: "@types/node": ^20.9.0 "@types/ws": ^8.2.2 amplify-velocity-template: 1.4.17 - aws-sdk: ^2.1464.0 chalk: ^4.1.1 cors: ^2.8.5 dataloader: ^2.0.0 @@ -775,7 +776,6 @@ __metadata: "@aws-amplify/amplify-prompts": 2.8.7 "@types/node": ^20.9.0 "@types/openpgp": ^4.4.19 - aws-sdk: ^2.1464.0 detect-port: ^1.3.0 execa: ^5.1.1 fs-extra: ^8.1.0 @@ -933,6 +933,8 @@ __metadata: "@aws-amplify/graphql-transformer-core": ^2.11.2 "@aws-amplify/graphql-transformer-interfaces": ^3.12.1 "@aws-amplify/graphql-transformer-migrator": ^2.2.33 + "@aws-sdk/client-dynamodb": ^3.624.0 + "@aws-sdk/client-dynamodb-streams": ^3.624.0 "@hapi/topo": ^5.0.0 "@types/detect-port": ^1.3.0 "@types/jest": ^29.0.0 @@ -946,8 +948,8 @@ __metadata: amplify-storage-simulator: 1.11.7 aws-appsync: ^4.1.4 aws-cdk-lib: ~2.189.1 - aws-sdk: ^2.1464.0 - aws-sdk-mock: ^6.2.0 + aws-sdk-client-mock: ^4.1.0 + aws-sdk-client-mock-jest: ^4.1.0 axios: ^1.11.0 chokidar: ^3.5.3 constructs: ^10.0.5 @@ -2404,52 +2406,52 @@ __metadata: linkType: hard "@aws-sdk/client-cloudformation@npm:^3.624.0": - version: 3.844.0 - resolution: "@aws-sdk/client-cloudformation@npm:3.844.0" + version: 3.891.0 + resolution: "@aws-sdk/client-cloudformation@npm:3.891.0" dependencies: "@aws-crypto/sha256-browser": 5.2.0 "@aws-crypto/sha256-js": 5.2.0 - "@aws-sdk/core": 3.844.0 - "@aws-sdk/credential-provider-node": 3.844.0 - "@aws-sdk/middleware-host-header": 3.840.0 - "@aws-sdk/middleware-logger": 3.840.0 - "@aws-sdk/middleware-recursion-detection": 3.840.0 - "@aws-sdk/middleware-user-agent": 3.844.0 - "@aws-sdk/region-config-resolver": 3.840.0 - "@aws-sdk/types": 3.840.0 - "@aws-sdk/util-endpoints": 3.844.0 - "@aws-sdk/util-user-agent-browser": 3.840.0 - "@aws-sdk/util-user-agent-node": 3.844.0 - "@smithy/config-resolver": ^4.1.4 - "@smithy/core": ^3.7.0 - "@smithy/fetch-http-handler": ^5.1.0 - "@smithy/hash-node": ^4.0.4 - "@smithy/invalid-dependency": ^4.0.4 - "@smithy/middleware-content-length": ^4.0.4 - "@smithy/middleware-endpoint": ^4.1.14 - "@smithy/middleware-retry": ^4.1.15 - "@smithy/middleware-serde": ^4.0.8 - "@smithy/middleware-stack": ^4.0.4 - "@smithy/node-config-provider": ^4.1.3 - "@smithy/node-http-handler": ^4.1.0 - "@smithy/protocol-http": ^5.1.2 - "@smithy/smithy-client": ^4.4.6 - "@smithy/types": ^4.3.1 - "@smithy/url-parser": ^4.0.4 - "@smithy/util-base64": ^4.0.0 - "@smithy/util-body-length-browser": ^4.0.0 - "@smithy/util-body-length-node": ^4.0.0 - "@smithy/util-defaults-mode-browser": ^4.0.22 - "@smithy/util-defaults-mode-node": ^4.0.22 - "@smithy/util-endpoints": ^3.0.6 - "@smithy/util-middleware": ^4.0.4 - "@smithy/util-retry": ^4.0.6 - "@smithy/util-utf8": ^4.0.0 - "@smithy/util-waiter": ^4.0.6 + "@aws-sdk/core": 3.890.0 + "@aws-sdk/credential-provider-node": 3.891.0 + "@aws-sdk/middleware-host-header": 3.891.0 + "@aws-sdk/middleware-logger": 3.891.0 + "@aws-sdk/middleware-recursion-detection": 3.891.0 + "@aws-sdk/middleware-user-agent": 3.891.0 + "@aws-sdk/region-config-resolver": 3.890.0 + "@aws-sdk/types": 3.887.0 + "@aws-sdk/util-endpoints": 3.891.0 + "@aws-sdk/util-user-agent-browser": 3.887.0 + "@aws-sdk/util-user-agent-node": 3.891.0 + "@smithy/config-resolver": ^4.2.2 + "@smithy/core": ^3.11.0 + "@smithy/fetch-http-handler": ^5.2.1 + "@smithy/hash-node": ^4.1.1 + "@smithy/invalid-dependency": ^4.1.1 + "@smithy/middleware-content-length": ^4.1.1 + "@smithy/middleware-endpoint": ^4.2.2 + "@smithy/middleware-retry": ^4.2.3 + "@smithy/middleware-serde": ^4.1.1 + "@smithy/middleware-stack": ^4.1.1 + "@smithy/node-config-provider": ^4.2.2 + "@smithy/node-http-handler": ^4.2.1 + "@smithy/protocol-http": ^5.2.1 + "@smithy/smithy-client": ^4.6.2 + "@smithy/types": ^4.5.0 + "@smithy/url-parser": ^4.1.1 + "@smithy/util-base64": ^4.1.0 + "@smithy/util-body-length-browser": ^4.1.0 + "@smithy/util-body-length-node": ^4.1.0 + "@smithy/util-defaults-mode-browser": ^4.1.2 + "@smithy/util-defaults-mode-node": ^4.1.2 + "@smithy/util-endpoints": ^3.1.2 + "@smithy/util-middleware": ^4.1.1 + "@smithy/util-retry": ^4.1.2 + "@smithy/util-utf8": ^4.1.0 + "@smithy/util-waiter": ^4.1.1 "@types/uuid": ^9.0.1 tslib: ^2.6.2 uuid: ^9.0.1 - checksum: 872fe9c27a4dd519e4328ca45f82fc86f2802b196c7b78c9a73d7a4e0ac60b6be53246846865eaf67abf68ee4e4c3f080502ca375804cccbf21a0e9e59238baa + checksum: eac848cb46a39a07529afe9b9c46e997495af8e16f34fd3b03c9ed5576676b4de2ff9a906c152b5f21937af85232dd15a3688bf77046a7167c4a03b429c298c6 languageName: node linkType: hard @@ -2675,6 +2677,53 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/client-dynamodb-streams@npm:^3.624.0": + version: 3.891.0 + resolution: "@aws-sdk/client-dynamodb-streams@npm:3.891.0" + dependencies: + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/core": 3.890.0 + "@aws-sdk/credential-provider-node": 3.891.0 + "@aws-sdk/middleware-host-header": 3.891.0 + "@aws-sdk/middleware-logger": 3.891.0 + "@aws-sdk/middleware-recursion-detection": 3.891.0 + "@aws-sdk/middleware-user-agent": 3.891.0 + "@aws-sdk/region-config-resolver": 3.890.0 + "@aws-sdk/types": 3.887.0 + "@aws-sdk/util-endpoints": 3.891.0 + "@aws-sdk/util-user-agent-browser": 3.887.0 + "@aws-sdk/util-user-agent-node": 3.891.0 + "@smithy/config-resolver": ^4.2.2 + "@smithy/core": ^3.11.0 + "@smithy/fetch-http-handler": ^5.2.1 + "@smithy/hash-node": ^4.1.1 + "@smithy/invalid-dependency": ^4.1.1 + "@smithy/middleware-content-length": ^4.1.1 + "@smithy/middleware-endpoint": ^4.2.2 + "@smithy/middleware-retry": ^4.2.3 + "@smithy/middleware-serde": ^4.1.1 + "@smithy/middleware-stack": ^4.1.1 + "@smithy/node-config-provider": ^4.2.2 + "@smithy/node-http-handler": ^4.2.1 + "@smithy/protocol-http": ^5.2.1 + "@smithy/smithy-client": ^4.6.2 + "@smithy/types": ^4.5.0 + "@smithy/url-parser": ^4.1.1 + "@smithy/util-base64": ^4.1.0 + "@smithy/util-body-length-browser": ^4.1.0 + "@smithy/util-body-length-node": ^4.1.0 + "@smithy/util-defaults-mode-browser": ^4.1.2 + "@smithy/util-defaults-mode-node": ^4.1.2 + "@smithy/util-endpoints": ^3.1.2 + "@smithy/util-middleware": ^4.1.1 + "@smithy/util-retry": ^4.1.2 + "@smithy/util-utf8": ^4.1.0 + tslib: ^2.6.2 + checksum: 0f3a2af784560e3fa0f4864635c984df22959c27de6af718ad2f2538970911ad0b0f713695c288d9412772da8009e4446cc2047084ad8f29c6c3ed64f17a73aa + languageName: node + linkType: hard + "@aws-sdk/client-dynamodb@npm:3.624.0": version: 3.624.0 resolution: "@aws-sdk/client-dynamodb@npm:3.624.0" @@ -2728,53 +2777,52 @@ __metadata: linkType: hard "@aws-sdk/client-dynamodb@npm:^3.515.0, @aws-sdk/client-dynamodb@npm:^3.624.0": - version: 3.844.0 - resolution: "@aws-sdk/client-dynamodb@npm:3.844.0" + version: 3.902.0 + resolution: "@aws-sdk/client-dynamodb@npm:3.902.0" dependencies: "@aws-crypto/sha256-browser": 5.2.0 "@aws-crypto/sha256-js": 5.2.0 - "@aws-sdk/core": 3.844.0 - "@aws-sdk/credential-provider-node": 3.844.0 - "@aws-sdk/middleware-endpoint-discovery": 3.840.0 - "@aws-sdk/middleware-host-header": 3.840.0 - "@aws-sdk/middleware-logger": 3.840.0 - "@aws-sdk/middleware-recursion-detection": 3.840.0 - "@aws-sdk/middleware-user-agent": 3.844.0 - "@aws-sdk/region-config-resolver": 3.840.0 - "@aws-sdk/types": 3.840.0 - "@aws-sdk/util-endpoints": 3.844.0 - "@aws-sdk/util-user-agent-browser": 3.840.0 - "@aws-sdk/util-user-agent-node": 3.844.0 - "@smithy/config-resolver": ^4.1.4 - "@smithy/core": ^3.7.0 - "@smithy/fetch-http-handler": ^5.1.0 - "@smithy/hash-node": ^4.0.4 - "@smithy/invalid-dependency": ^4.0.4 - "@smithy/middleware-content-length": ^4.0.4 - "@smithy/middleware-endpoint": ^4.1.14 - "@smithy/middleware-retry": ^4.1.15 - "@smithy/middleware-serde": ^4.0.8 - "@smithy/middleware-stack": ^4.0.4 - "@smithy/node-config-provider": ^4.1.3 - "@smithy/node-http-handler": ^4.1.0 - "@smithy/protocol-http": ^5.1.2 - "@smithy/smithy-client": ^4.4.6 - "@smithy/types": ^4.3.1 - "@smithy/url-parser": ^4.0.4 - "@smithy/util-base64": ^4.0.0 - "@smithy/util-body-length-browser": ^4.0.0 - "@smithy/util-body-length-node": ^4.0.0 - "@smithy/util-defaults-mode-browser": ^4.0.22 - "@smithy/util-defaults-mode-node": ^4.0.22 - "@smithy/util-endpoints": ^3.0.6 - "@smithy/util-middleware": ^4.0.4 - "@smithy/util-retry": ^4.0.6 - "@smithy/util-utf8": ^4.0.0 - "@smithy/util-waiter": ^4.0.6 - "@types/uuid": ^9.0.1 + "@aws-sdk/core": 3.901.0 + "@aws-sdk/credential-provider-node": 3.901.0 + "@aws-sdk/middleware-endpoint-discovery": 3.901.0 + "@aws-sdk/middleware-host-header": 3.901.0 + "@aws-sdk/middleware-logger": 3.901.0 + "@aws-sdk/middleware-recursion-detection": 3.901.0 + "@aws-sdk/middleware-user-agent": 3.901.0 + "@aws-sdk/region-config-resolver": 3.901.0 + "@aws-sdk/types": 3.901.0 + "@aws-sdk/util-endpoints": 3.901.0 + "@aws-sdk/util-user-agent-browser": 3.901.0 + "@aws-sdk/util-user-agent-node": 3.901.0 + "@smithy/config-resolver": ^4.3.0 + "@smithy/core": ^3.14.0 + "@smithy/fetch-http-handler": ^5.3.0 + "@smithy/hash-node": ^4.2.0 + "@smithy/invalid-dependency": ^4.2.0 + "@smithy/middleware-content-length": ^4.2.0 + "@smithy/middleware-endpoint": ^4.3.0 + "@smithy/middleware-retry": ^4.4.0 + "@smithy/middleware-serde": ^4.2.0 + "@smithy/middleware-stack": ^4.2.0 + "@smithy/node-config-provider": ^4.3.0 + "@smithy/node-http-handler": ^4.3.0 + "@smithy/protocol-http": ^5.3.0 + "@smithy/smithy-client": ^4.7.0 + "@smithy/types": ^4.6.0 + "@smithy/url-parser": ^4.2.0 + "@smithy/util-base64": ^4.2.0 + "@smithy/util-body-length-browser": ^4.2.0 + "@smithy/util-body-length-node": ^4.2.0 + "@smithy/util-defaults-mode-browser": ^4.2.0 + "@smithy/util-defaults-mode-node": ^4.2.0 + "@smithy/util-endpoints": ^3.2.0 + "@smithy/util-middleware": ^4.2.0 + "@smithy/util-retry": ^4.2.0 + "@smithy/util-utf8": ^4.2.0 + "@smithy/util-waiter": ^4.2.0 + "@smithy/uuid": ^1.1.0 tslib: ^2.6.2 - uuid: ^9.0.1 - checksum: 1d00e78cebddbecc7a281c490a866c4a21be7c44b96beeea02b653ff52e6e618201f32dd0964fbb15a9f529921e90c356d4a02450293cbd30900246b12108abb + checksum: f9e7d5dc6e9d09614fcde0ed29a0ddf21d8f43d8f527d9a38250df70a938de0e1c0d55759f377ad3e089eb5dc21397c16afa1ad1bec2a435c8da5ed0f4b9a68a languageName: node linkType: hard @@ -4089,52 +4137,52 @@ __metadata: linkType: hard "@aws-sdk/client-ssm@npm:^3.624.0": - version: 3.844.0 - resolution: "@aws-sdk/client-ssm@npm:3.844.0" + version: 3.891.0 + resolution: "@aws-sdk/client-ssm@npm:3.891.0" dependencies: "@aws-crypto/sha256-browser": 5.2.0 "@aws-crypto/sha256-js": 5.2.0 - "@aws-sdk/core": 3.844.0 - "@aws-sdk/credential-provider-node": 3.844.0 - "@aws-sdk/middleware-host-header": 3.840.0 - "@aws-sdk/middleware-logger": 3.840.0 - "@aws-sdk/middleware-recursion-detection": 3.840.0 - "@aws-sdk/middleware-user-agent": 3.844.0 - "@aws-sdk/region-config-resolver": 3.840.0 - "@aws-sdk/types": 3.840.0 - "@aws-sdk/util-endpoints": 3.844.0 - "@aws-sdk/util-user-agent-browser": 3.840.0 - "@aws-sdk/util-user-agent-node": 3.844.0 - "@smithy/config-resolver": ^4.1.4 - "@smithy/core": ^3.7.0 - "@smithy/fetch-http-handler": ^5.1.0 - "@smithy/hash-node": ^4.0.4 - "@smithy/invalid-dependency": ^4.0.4 - "@smithy/middleware-content-length": ^4.0.4 - "@smithy/middleware-endpoint": ^4.1.14 - "@smithy/middleware-retry": ^4.1.15 - "@smithy/middleware-serde": ^4.0.8 - "@smithy/middleware-stack": ^4.0.4 - "@smithy/node-config-provider": ^4.1.3 - "@smithy/node-http-handler": ^4.1.0 - "@smithy/protocol-http": ^5.1.2 - "@smithy/smithy-client": ^4.4.6 - "@smithy/types": ^4.3.1 - "@smithy/url-parser": ^4.0.4 - "@smithy/util-base64": ^4.0.0 - "@smithy/util-body-length-browser": ^4.0.0 - "@smithy/util-body-length-node": ^4.0.0 - "@smithy/util-defaults-mode-browser": ^4.0.22 - "@smithy/util-defaults-mode-node": ^4.0.22 - "@smithy/util-endpoints": ^3.0.6 - "@smithy/util-middleware": ^4.0.4 - "@smithy/util-retry": ^4.0.6 - "@smithy/util-utf8": ^4.0.0 - "@smithy/util-waiter": ^4.0.6 + "@aws-sdk/core": 3.890.0 + "@aws-sdk/credential-provider-node": 3.891.0 + "@aws-sdk/middleware-host-header": 3.891.0 + "@aws-sdk/middleware-logger": 3.891.0 + "@aws-sdk/middleware-recursion-detection": 3.891.0 + "@aws-sdk/middleware-user-agent": 3.891.0 + "@aws-sdk/region-config-resolver": 3.890.0 + "@aws-sdk/types": 3.887.0 + "@aws-sdk/util-endpoints": 3.891.0 + "@aws-sdk/util-user-agent-browser": 3.887.0 + "@aws-sdk/util-user-agent-node": 3.891.0 + "@smithy/config-resolver": ^4.2.2 + "@smithy/core": ^3.11.0 + "@smithy/fetch-http-handler": ^5.2.1 + "@smithy/hash-node": ^4.1.1 + "@smithy/invalid-dependency": ^4.1.1 + "@smithy/middleware-content-length": ^4.1.1 + "@smithy/middleware-endpoint": ^4.2.2 + "@smithy/middleware-retry": ^4.2.3 + "@smithy/middleware-serde": ^4.1.1 + "@smithy/middleware-stack": ^4.1.1 + "@smithy/node-config-provider": ^4.2.2 + "@smithy/node-http-handler": ^4.2.1 + "@smithy/protocol-http": ^5.2.1 + "@smithy/smithy-client": ^4.6.2 + "@smithy/types": ^4.5.0 + "@smithy/url-parser": ^4.1.1 + "@smithy/util-base64": ^4.1.0 + "@smithy/util-body-length-browser": ^4.1.0 + "@smithy/util-body-length-node": ^4.1.0 + "@smithy/util-defaults-mode-browser": ^4.1.2 + "@smithy/util-defaults-mode-node": ^4.1.2 + "@smithy/util-endpoints": ^3.1.2 + "@smithy/util-middleware": ^4.1.1 + "@smithy/util-retry": ^4.1.2 + "@smithy/util-utf8": ^4.1.0 + "@smithy/util-waiter": ^4.1.1 "@types/uuid": ^9.0.1 tslib: ^2.6.2 uuid: ^9.0.1 - checksum: 726b62e961883f15f522e5783eb31a91f5050234031abf02232e56609a1047e0c4f5c069deee22d3beeb19469a53090f42bcb3ac95c32336407a0266ad54bc4a + checksum: 8607a2c2440f984237f2d3c1ce3ebd033a8d4114b9842423cc6f3bb1e8dbdb67f9f30b430a3072b0ab75ee3672d021379273f40925cc81eca46ad72dd628ae72 languageName: node linkType: hard @@ -4502,6 +4550,52 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/client-sso@npm:3.891.0": + version: 3.891.0 + resolution: "@aws-sdk/client-sso@npm:3.891.0" + dependencies: + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/core": 3.890.0 + "@aws-sdk/middleware-host-header": 3.891.0 + "@aws-sdk/middleware-logger": 3.891.0 + "@aws-sdk/middleware-recursion-detection": 3.891.0 + "@aws-sdk/middleware-user-agent": 3.891.0 + "@aws-sdk/region-config-resolver": 3.890.0 + "@aws-sdk/types": 3.887.0 + "@aws-sdk/util-endpoints": 3.891.0 + "@aws-sdk/util-user-agent-browser": 3.887.0 + "@aws-sdk/util-user-agent-node": 3.891.0 + "@smithy/config-resolver": ^4.2.2 + "@smithy/core": ^3.11.0 + "@smithy/fetch-http-handler": ^5.2.1 + "@smithy/hash-node": ^4.1.1 + "@smithy/invalid-dependency": ^4.1.1 + "@smithy/middleware-content-length": ^4.1.1 + "@smithy/middleware-endpoint": ^4.2.2 + "@smithy/middleware-retry": ^4.2.3 + "@smithy/middleware-serde": ^4.1.1 + "@smithy/middleware-stack": ^4.1.1 + "@smithy/node-config-provider": ^4.2.2 + "@smithy/node-http-handler": ^4.2.1 + "@smithy/protocol-http": ^5.2.1 + "@smithy/smithy-client": ^4.6.2 + "@smithy/types": ^4.5.0 + "@smithy/url-parser": ^4.1.1 + "@smithy/util-base64": ^4.1.0 + "@smithy/util-body-length-browser": ^4.1.0 + "@smithy/util-body-length-node": ^4.1.0 + "@smithy/util-defaults-mode-browser": ^4.1.2 + "@smithy/util-defaults-mode-node": ^4.1.2 + "@smithy/util-endpoints": ^3.1.2 + "@smithy/util-middleware": ^4.1.1 + "@smithy/util-retry": ^4.1.2 + "@smithy/util-utf8": ^4.1.0 + tslib: ^2.6.2 + checksum: 5e52e5b6fb6935c38a0453a9aa70ccdb7c82c71d9148466dfaa5b0741e8ea962843b245c3b08945feee38e718351f47d167a8bd3ac158b25bc0b778f41559a69 + languageName: node + linkType: hard + "@aws-sdk/client-sso@npm:3.901.0": version: 3.901.0 resolution: "@aws-sdk/client-sso@npm:3.901.0" @@ -4899,6 +4993,29 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/core@npm:3.890.0": + version: 3.890.0 + resolution: "@aws-sdk/core@npm:3.890.0" + dependencies: + "@aws-sdk/types": 3.887.0 + "@aws-sdk/xml-builder": 3.887.0 + "@smithy/core": ^3.11.0 + "@smithy/node-config-provider": ^4.2.2 + "@smithy/property-provider": ^4.1.1 + "@smithy/protocol-http": ^5.2.1 + "@smithy/signature-v4": ^5.2.1 + "@smithy/smithy-client": ^4.6.2 + "@smithy/types": ^4.5.0 + "@smithy/util-base64": ^4.1.0 + "@smithy/util-body-length-browser": ^4.1.0 + "@smithy/util-middleware": ^4.1.1 + "@smithy/util-utf8": ^4.1.0 + fast-xml-parser: 5.2.5 + tslib: ^2.6.2 + checksum: 20794214024add4ea9a9806659c9507b5914664d63c31dc78eb6fe3cf0f2bfdc435895292a706eaa358c5bac2643232d859408897f74a3334f588c2cdfa30fd2 + languageName: node + linkType: hard + "@aws-sdk/core@npm:3.901.0": version: 3.901.0 resolution: "@aws-sdk/core@npm:3.901.0" @@ -5032,6 +5149,19 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/credential-provider-env@npm:3.890.0": + version: 3.890.0 + resolution: "@aws-sdk/credential-provider-env@npm:3.890.0" + dependencies: + "@aws-sdk/core": 3.890.0 + "@aws-sdk/types": 3.887.0 + "@smithy/property-provider": ^4.1.1 + "@smithy/types": ^4.5.0 + tslib: ^2.6.2 + checksum: 52d648a385a25daf95e6884e2849158f6bf7f3f502258167d83fc278fd79b79d32408bbcacf2de5ff71f5e81b1b48f6133538f487de07210a3c5d97a235bb5d1 + languageName: node + linkType: hard + "@aws-sdk/credential-provider-env@npm:3.901.0": version: 3.901.0 resolution: "@aws-sdk/credential-provider-env@npm:3.901.0" @@ -5134,6 +5264,24 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/credential-provider-http@npm:3.890.0": + version: 3.890.0 + resolution: "@aws-sdk/credential-provider-http@npm:3.890.0" + dependencies: + "@aws-sdk/core": 3.890.0 + "@aws-sdk/types": 3.887.0 + "@smithy/fetch-http-handler": ^5.2.1 + "@smithy/node-http-handler": ^4.2.1 + "@smithy/property-provider": ^4.1.1 + "@smithy/protocol-http": ^5.2.1 + "@smithy/smithy-client": ^4.6.2 + "@smithy/types": ^4.5.0 + "@smithy/util-stream": ^4.3.1 + tslib: ^2.6.2 + checksum: c48bc17cacddfc47a1f5dbb8be2fdff68ae0c80cdab1192e406bc65744b13412f9100bc1af2126efafea427fafd9d58284e6d095c63a3957ac0dd087c5fc360b + languageName: node + linkType: hard + "@aws-sdk/credential-provider-http@npm:3.901.0": version: 3.901.0 resolution: "@aws-sdk/credential-provider-http@npm:3.901.0" @@ -5330,6 +5478,27 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/credential-provider-ini@npm:3.891.0": + version: 3.891.0 + resolution: "@aws-sdk/credential-provider-ini@npm:3.891.0" + dependencies: + "@aws-sdk/core": 3.890.0 + "@aws-sdk/credential-provider-env": 3.890.0 + "@aws-sdk/credential-provider-http": 3.890.0 + "@aws-sdk/credential-provider-process": 3.890.0 + "@aws-sdk/credential-provider-sso": 3.891.0 + "@aws-sdk/credential-provider-web-identity": 3.891.0 + "@aws-sdk/nested-clients": 3.891.0 + "@aws-sdk/types": 3.887.0 + "@smithy/credential-provider-imds": ^4.1.2 + "@smithy/property-provider": ^4.1.1 + "@smithy/shared-ini-file-loader": ^4.2.0 + "@smithy/types": ^4.5.0 + tslib: ^2.6.2 + checksum: 642d533f8e94c6b3b94659a7c8985d072c423fdd7d3d340875366656441857c83e1965a6305a438ce8db451ec83f597916bb01815baa0a0c12d8c75f4b0d9adf + languageName: node + linkType: hard + "@aws-sdk/credential-provider-ini@npm:3.901.0": version: 3.901.0 resolution: "@aws-sdk/credential-provider-ini@npm:3.901.0" @@ -5505,6 +5674,26 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/credential-provider-node@npm:3.891.0": + version: 3.891.0 + resolution: "@aws-sdk/credential-provider-node@npm:3.891.0" + dependencies: + "@aws-sdk/credential-provider-env": 3.890.0 + "@aws-sdk/credential-provider-http": 3.890.0 + "@aws-sdk/credential-provider-ini": 3.891.0 + "@aws-sdk/credential-provider-process": 3.890.0 + "@aws-sdk/credential-provider-sso": 3.891.0 + "@aws-sdk/credential-provider-web-identity": 3.891.0 + "@aws-sdk/types": 3.887.0 + "@smithy/credential-provider-imds": ^4.1.2 + "@smithy/property-provider": ^4.1.1 + "@smithy/shared-ini-file-loader": ^4.2.0 + "@smithy/types": ^4.5.0 + tslib: ^2.6.2 + checksum: 9f701c7fcf58f9421ede8ceeaa8d261a835216eb9f7910fc3ecf8f59ff4f4a84008be335ae329816ddc6119e30aa358ae92133081daa97ef2363561b81b44b5f + languageName: node + linkType: hard + "@aws-sdk/credential-provider-node@npm:3.901.0, @aws-sdk/credential-provider-node@npm:^3.624.0": version: 3.901.0 resolution: "@aws-sdk/credential-provider-node@npm:3.901.0" @@ -5619,6 +5808,20 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/credential-provider-process@npm:3.890.0": + version: 3.890.0 + resolution: "@aws-sdk/credential-provider-process@npm:3.890.0" + dependencies: + "@aws-sdk/core": 3.890.0 + "@aws-sdk/types": 3.887.0 + "@smithy/property-provider": ^4.1.1 + "@smithy/shared-ini-file-loader": ^4.2.0 + "@smithy/types": ^4.5.0 + tslib: ^2.6.2 + checksum: 4cb1864ad5318ceb8d6b6c0b97f1991ea309776139a19469128d19ebfe01127dbafc2f8cf7cf04e2308cedbf1ba5bee9129fadf07c66b6a88c91ecc819e2058a + languageName: node + linkType: hard + "@aws-sdk/credential-provider-process@npm:3.901.0": version: 3.901.0 resolution: "@aws-sdk/credential-provider-process@npm:3.901.0" @@ -5741,6 +5944,22 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/credential-provider-sso@npm:3.891.0": + version: 3.891.0 + resolution: "@aws-sdk/credential-provider-sso@npm:3.891.0" + dependencies: + "@aws-sdk/client-sso": 3.891.0 + "@aws-sdk/core": 3.890.0 + "@aws-sdk/token-providers": 3.891.0 + "@aws-sdk/types": 3.887.0 + "@smithy/property-provider": ^4.1.1 + "@smithy/shared-ini-file-loader": ^4.2.0 + "@smithy/types": ^4.5.0 + tslib: ^2.6.2 + checksum: 618e4ef6b6b0a58ddfa28cb80d883eb947be4ca6a91c3c62c6d83c615ccf4bb9ae5c371beac03fed31c3afde13dfea0c6ca6483ca5aa9baee7e41b4b94e4e006 + languageName: node + linkType: hard + "@aws-sdk/credential-provider-sso@npm:3.901.0": version: 3.901.0 resolution: "@aws-sdk/credential-provider-sso@npm:3.901.0" @@ -5852,6 +6071,21 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/credential-provider-web-identity@npm:3.891.0": + version: 3.891.0 + resolution: "@aws-sdk/credential-provider-web-identity@npm:3.891.0" + dependencies: + "@aws-sdk/core": 3.890.0 + "@aws-sdk/nested-clients": 3.891.0 + "@aws-sdk/types": 3.887.0 + "@smithy/property-provider": ^4.1.1 + "@smithy/shared-ini-file-loader": ^4.2.0 + "@smithy/types": ^4.5.0 + tslib: ^2.6.2 + checksum: 3efbf1c8bcb9438bf09673a6eaf6cb0ad1a1b39635e7462f515818f66748ca9dafe58208be152574c6b967d061616822f6dfd702bb385f32bc7090e981300e49 + languageName: node + linkType: hard + "@aws-sdk/credential-provider-web-identity@npm:3.901.0": version: 3.901.0 resolution: "@aws-sdk/credential-provider-web-identity@npm:3.901.0" @@ -5928,13 +6162,13 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/endpoint-cache@npm:3.804.0": - version: 3.804.0 - resolution: "@aws-sdk/endpoint-cache@npm:3.804.0" +"@aws-sdk/endpoint-cache@npm:3.893.0": + version: 3.893.0 + resolution: "@aws-sdk/endpoint-cache@npm:3.893.0" dependencies: mnemonist: 0.38.3 tslib: ^2.6.2 - checksum: 566bb7bb8633e95d40b8f622c3ff53d193b6b6e5f3e09ee86ef62d885e73ad5b75822e85c8ca920b0d8badc4e2c2b54697b2d87a8afae8920b4108798138d28a + checksum: 6f7725ab605b57ef6d19eec78cff1e3b21296640e16da496216671583fe0aef69f6bc4b982110460784c8c2c607f034944c88eda32a36da87482081847a9ce9e languageName: node linkType: hard @@ -6278,17 +6512,17 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-endpoint-discovery@npm:3.840.0": - version: 3.840.0 - resolution: "@aws-sdk/middleware-endpoint-discovery@npm:3.840.0" +"@aws-sdk/middleware-endpoint-discovery@npm:3.901.0": + version: 3.901.0 + resolution: "@aws-sdk/middleware-endpoint-discovery@npm:3.901.0" dependencies: - "@aws-sdk/endpoint-cache": 3.804.0 - "@aws-sdk/types": 3.840.0 - "@smithy/node-config-provider": ^4.1.3 - "@smithy/protocol-http": ^5.1.2 - "@smithy/types": ^4.3.1 + "@aws-sdk/endpoint-cache": 3.893.0 + "@aws-sdk/types": 3.901.0 + "@smithy/node-config-provider": ^4.3.0 + "@smithy/protocol-http": ^5.3.0 + "@smithy/types": ^4.6.0 tslib: ^2.6.2 - checksum: 683e23d0538f68e655c9db7a3f4e26149210aa7bb43edef6ab2163156694df41dced69580144e252bbba2f83b37c2c3b0e9952cb805b18c12dcc5a01b001c936 + checksum: acbabdc1626dabb47a47c76f36e9388c5618a0939858aa2a21822dab4286f3caa08a033b41d4b357e54c8a0989a4ea1dd8e901106ed8a6d968d7f3cd1717aa33 languageName: node linkType: hard @@ -6434,6 +6668,18 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/middleware-host-header@npm:3.891.0": + version: 3.891.0 + resolution: "@aws-sdk/middleware-host-header@npm:3.891.0" + dependencies: + "@aws-sdk/types": 3.887.0 + "@smithy/protocol-http": ^5.2.1 + "@smithy/types": ^4.5.0 + tslib: ^2.6.2 + checksum: 5716641a3732ffcae51387af289888dd771260b783e75b8c1c137ba18565a1e3a33318a1673f736baec36aaeba7f7cfd3446ce4844caed3fa2c080cf23d523f4 + languageName: node + linkType: hard + "@aws-sdk/middleware-host-header@npm:3.901.0": version: 3.901.0 resolution: "@aws-sdk/middleware-host-header@npm:3.901.0" @@ -6532,6 +6778,17 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/middleware-logger@npm:3.891.0": + version: 3.891.0 + resolution: "@aws-sdk/middleware-logger@npm:3.891.0" + dependencies: + "@aws-sdk/types": 3.887.0 + "@smithy/types": ^4.5.0 + tslib: ^2.6.2 + checksum: 6eab8cb71b14597e30334df164e211fadd093a380811efef156baa126b9ed42fdf005f54447cd48050e211e277719cd182f4534a44757d799b21a77ef39b460d + languageName: node + linkType: hard + "@aws-sdk/middleware-logger@npm:3.901.0": version: 3.901.0 resolution: "@aws-sdk/middleware-logger@npm:3.901.0" @@ -6602,6 +6859,19 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/middleware-recursion-detection@npm:3.891.0": + version: 3.891.0 + resolution: "@aws-sdk/middleware-recursion-detection@npm:3.891.0" + dependencies: + "@aws-sdk/types": 3.887.0 + "@aws/lambda-invoke-store": ^0.0.1 + "@smithy/protocol-http": ^5.2.1 + "@smithy/types": ^4.5.0 + tslib: ^2.6.2 + checksum: 3e8af5cc39f1d85a91d7856cce38070948e90b9cb0068e8e5cc861ce91d3d9370cdbdbef305bd5770e31e0f4fea330e3447df4030f1b9ce51c4e9974d0e001ad + languageName: node + linkType: hard + "@aws-sdk/middleware-recursion-detection@npm:3.901.0": version: 3.901.0 resolution: "@aws-sdk/middleware-recursion-detection@npm:3.901.0" @@ -6989,6 +7259,21 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/middleware-user-agent@npm:3.891.0": + version: 3.891.0 + resolution: "@aws-sdk/middleware-user-agent@npm:3.891.0" + dependencies: + "@aws-sdk/core": 3.890.0 + "@aws-sdk/types": 3.887.0 + "@aws-sdk/util-endpoints": 3.891.0 + "@smithy/core": ^3.11.0 + "@smithy/protocol-http": ^5.2.1 + "@smithy/types": ^4.5.0 + tslib: ^2.6.2 + checksum: 9a9bd85ebccbf705a40c53490e523a5e4a311fe9f8eb9d3e5cd8593b84011db03d90a153dcb2f984cb908b6e7e65fa23ecf0bc48234e73aca3ebf3b031bd0202 + languageName: node + linkType: hard + "@aws-sdk/middleware-user-agent@npm:3.901.0": version: 3.901.0 resolution: "@aws-sdk/middleware-user-agent@npm:3.901.0" @@ -7234,6 +7519,52 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/nested-clients@npm:3.891.0": + version: 3.891.0 + resolution: "@aws-sdk/nested-clients@npm:3.891.0" + dependencies: + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/core": 3.890.0 + "@aws-sdk/middleware-host-header": 3.891.0 + "@aws-sdk/middleware-logger": 3.891.0 + "@aws-sdk/middleware-recursion-detection": 3.891.0 + "@aws-sdk/middleware-user-agent": 3.891.0 + "@aws-sdk/region-config-resolver": 3.890.0 + "@aws-sdk/types": 3.887.0 + "@aws-sdk/util-endpoints": 3.891.0 + "@aws-sdk/util-user-agent-browser": 3.887.0 + "@aws-sdk/util-user-agent-node": 3.891.0 + "@smithy/config-resolver": ^4.2.2 + "@smithy/core": ^3.11.0 + "@smithy/fetch-http-handler": ^5.2.1 + "@smithy/hash-node": ^4.1.1 + "@smithy/invalid-dependency": ^4.1.1 + "@smithy/middleware-content-length": ^4.1.1 + "@smithy/middleware-endpoint": ^4.2.2 + "@smithy/middleware-retry": ^4.2.3 + "@smithy/middleware-serde": ^4.1.1 + "@smithy/middleware-stack": ^4.1.1 + "@smithy/node-config-provider": ^4.2.2 + "@smithy/node-http-handler": ^4.2.1 + "@smithy/protocol-http": ^5.2.1 + "@smithy/smithy-client": ^4.6.2 + "@smithy/types": ^4.5.0 + "@smithy/url-parser": ^4.1.1 + "@smithy/util-base64": ^4.1.0 + "@smithy/util-body-length-browser": ^4.1.0 + "@smithy/util-body-length-node": ^4.1.0 + "@smithy/util-defaults-mode-browser": ^4.1.2 + "@smithy/util-defaults-mode-node": ^4.1.2 + "@smithy/util-endpoints": ^3.1.2 + "@smithy/util-middleware": ^4.1.1 + "@smithy/util-retry": ^4.1.2 + "@smithy/util-utf8": ^4.1.0 + tslib: ^2.6.2 + checksum: f69d9f9cf0f94558367312e47741cdfe94472d7a3e94f44723c22fe796f007207bebc19c6fe2b12ac0f44bb067f7cd65499a0936ec91e94f445579e7147a7813 + languageName: node + linkType: hard + "@aws-sdk/nested-clients@npm:3.901.0": version: 3.901.0 resolution: "@aws-sdk/nested-clients@npm:3.901.0" @@ -7468,6 +7799,20 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/region-config-resolver@npm:3.890.0": + version: 3.890.0 + resolution: "@aws-sdk/region-config-resolver@npm:3.890.0" + dependencies: + "@aws-sdk/types": 3.887.0 + "@smithy/node-config-provider": ^4.2.2 + "@smithy/types": ^4.5.0 + "@smithy/util-config-provider": ^4.1.0 + "@smithy/util-middleware": ^4.1.1 + tslib: ^2.6.2 + checksum: a95432f7fc38653cd31b58c9ccc543d63a79184b7a67d8e880b3c171576b548616c8dcf0b12a995d78ace1f4893f0b3ed3cef6d9e8c65cf54683fe6bd7cf99c1 + languageName: node + linkType: hard + "@aws-sdk/region-config-resolver@npm:3.901.0": version: 3.901.0 resolution: "@aws-sdk/region-config-resolver@npm:3.901.0" @@ -7712,6 +8057,21 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/token-providers@npm:3.891.0": + version: 3.891.0 + resolution: "@aws-sdk/token-providers@npm:3.891.0" + dependencies: + "@aws-sdk/core": 3.890.0 + "@aws-sdk/nested-clients": 3.891.0 + "@aws-sdk/types": 3.887.0 + "@smithy/property-provider": ^4.1.1 + "@smithy/shared-ini-file-loader": ^4.2.0 + "@smithy/types": ^4.5.0 + tslib: ^2.6.2 + checksum: ed6f689a9e643dc240b65d8b109b841694f71cb9aeaf73df185b757be3311165b90bd5068437857e347094a4338deb2036b084eef7e66845f9f905342918c773 + languageName: node + linkType: hard + "@aws-sdk/token-providers@npm:3.901.0": version: 3.901.0 resolution: "@aws-sdk/token-providers@npm:3.901.0" @@ -7790,6 +8150,16 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/types@npm:3.887.0": + version: 3.887.0 + resolution: "@aws-sdk/types@npm:3.887.0" + dependencies: + "@smithy/types": ^4.5.0 + tslib: ^2.6.2 + checksum: 862ad368a8692cf75b0e44e96b2fe96c0e145f3c40bbb4a6fe07de1f5935722f0ecdc983fdf09789527a2555392a3cac08372d9a7cdec5f15849508083104413 + languageName: node + linkType: hard + "@aws-sdk/types@npm:3.901.0, @aws-sdk/types@npm:^3.1.0, @aws-sdk/types@npm:^3.222.0, @aws-sdk/types@npm:^3.25.0, @aws-sdk/types@npm:^3.624.0": version: 3.901.0 resolution: "@aws-sdk/types@npm:3.901.0" @@ -8002,6 +8372,17 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/util-dynamodb@npm:^3.624.0": + version: 3.891.0 + resolution: "@aws-sdk/util-dynamodb@npm:3.891.0" + dependencies: + tslib: ^2.6.2 + peerDependencies: + "@aws-sdk/client-dynamodb": ^3.891.0 + checksum: 0ce33995341973286e89b6af3c750949828fc84e808f9bcd62e978ab8c752611a786e9ceb5f77952a8cd8c7bac626ab97e46ba6d2ca570f9b07314993582a7d4 + languageName: node + linkType: hard + "@aws-sdk/util-endpoints@npm:3.614.0": version: 3.614.0 resolution: "@aws-sdk/util-endpoints@npm:3.614.0" @@ -8078,6 +8459,19 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/util-endpoints@npm:3.891.0": + version: 3.891.0 + resolution: "@aws-sdk/util-endpoints@npm:3.891.0" + dependencies: + "@aws-sdk/types": 3.887.0 + "@smithy/types": ^4.5.0 + "@smithy/url-parser": ^4.1.1 + "@smithy/util-endpoints": ^3.1.2 + tslib: ^2.6.2 + checksum: 78c0cf6956f4b866449ba535a4055a67c801f26f25e9839c96cec899a8e369f6db648739d4428ce7d3799103cd7aed76040bd817b31fdf907fb4bfe10de968d7 + languageName: node + linkType: hard + "@aws-sdk/util-endpoints@npm:3.901.0": version: 3.901.0 resolution: "@aws-sdk/util-endpoints@npm:3.901.0" @@ -8248,6 +8642,18 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/util-user-agent-browser@npm:3.887.0": + version: 3.887.0 + resolution: "@aws-sdk/util-user-agent-browser@npm:3.887.0" + dependencies: + "@aws-sdk/types": 3.887.0 + "@smithy/types": ^4.5.0 + bowser: ^2.11.0 + tslib: ^2.6.2 + checksum: f48410fbdb2f986e798072a7fb55ee0780fe90c57c35f8ad22bd9127914d911ea63b6d43b62ebb81edfb8b82ec5eed1f6bc93135bc55fad294f7e5b638d20f61 + languageName: node + linkType: hard + "@aws-sdk/util-user-agent-browser@npm:3.901.0": version: 3.901.0 resolution: "@aws-sdk/util-user-agent-browser@npm:3.901.0" @@ -8394,6 +8800,24 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/util-user-agent-node@npm:3.891.0": + version: 3.891.0 + resolution: "@aws-sdk/util-user-agent-node@npm:3.891.0" + dependencies: + "@aws-sdk/middleware-user-agent": 3.891.0 + "@aws-sdk/types": 3.887.0 + "@smithy/node-config-provider": ^4.2.2 + "@smithy/types": ^4.5.0 + tslib: ^2.6.2 + peerDependencies: + aws-crt: ">=1.0.0" + peerDependenciesMeta: + aws-crt: + optional: true + checksum: ec0da41bc610859ec2004cbd33cb934091bc92f857d5c4f1d21be5487afd7cc98dfd7afb1170e4507dc7a54f594a8898e0bef80543f5b7c2cfd1b66c680b50f1 + languageName: node + linkType: hard + "@aws-sdk/util-user-agent-node@npm:3.901.0": version: 3.901.0 resolution: "@aws-sdk/util-user-agent-node@npm:3.901.0" @@ -8501,6 +8925,16 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/xml-builder@npm:3.887.0": + version: 3.887.0 + resolution: "@aws-sdk/xml-builder@npm:3.887.0" + dependencies: + "@smithy/types": ^4.5.0 + tslib: ^2.6.2 + checksum: a8ec9b57934cba380ee72f7d5bab5305e61ffd12f8eed5957d062db0983de58a8a9f62f4979c036eccad4b74d8cf9267e8e6d21601f2dc85cc1db54a5eb17ce9 + languageName: node + linkType: hard + "@aws-sdk/xml-builder@npm:3.901.0": version: 3.901.0 resolution: "@aws-sdk/xml-builder@npm:3.901.0" @@ -11051,12 +11485,12 @@ __metadata: languageName: node linkType: hard -"@jest/expect-utils@npm:30.0.4": - version: 30.0.4 - resolution: "@jest/expect-utils@npm:30.0.4" +"@jest/expect-utils@npm:30.1.2": + version: 30.1.2 + resolution: "@jest/expect-utils@npm:30.1.2" dependencies: - "@jest/get-type": 30.0.1 - checksum: eda2d34b883e72b4ccccac04082701d37d35cc924bba8bbf044578f34257885b04c343fbfa2949831ee75429f665f3b157066025b1e587737b946a64aa75e973 + "@jest/get-type": 30.1.0 + checksum: 5b6c4d400ad0bd22960bd77750baf55b24bf1ebdc2cec328afe275967db76bf94f797ca4c9817cdb86bc7820b9219d3f493705f3fa94fe7720960e47805a8e1b languageName: node linkType: hard @@ -11121,10 +11555,10 @@ __metadata: languageName: node linkType: hard -"@jest/get-type@npm:30.0.1": - version: 30.0.1 - resolution: "@jest/get-type@npm:30.0.1" - checksum: 92437ae42d0df57e8acc2d067288151439db4752cde4f5e680c73c8a6e34568bbd8c1c81a2f2f9a637a619c2aac8bc87553fb80e31475b59e2ed789a71e5e540 +"@jest/get-type@npm:30.1.0": + version: 30.1.0 + resolution: "@jest/get-type@npm:30.1.0" + checksum: 3e65fd5015f551c51ec68fca31bbd25b466be0e8ee8075d9610fa1c686ea1e70a942a0effc7b10f4ea9a338c24337e1ad97ff69d3ebacc4681b7e3e80d1b24ac languageName: node linkType: hard @@ -11198,12 +11632,12 @@ __metadata: languageName: node linkType: hard -"@jest/schemas@npm:30.0.1": - version: 30.0.1 - resolution: "@jest/schemas@npm:30.0.1" +"@jest/schemas@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/schemas@npm:30.0.5" dependencies: "@sinclair/typebox": ^0.34.0 - checksum: 27977359edc4b33293af7c85c53de5014a87c29b9ab98b0a827fedfc6635abdb522aad8c3ff276080080911f519699b094bd6f4e151b43f0cc5856ccc83c04a7 + checksum: 449dcd7ec5c6505e9ac3169d1143937e67044ae3e66a729ce4baf31812dfd30535f2b3b2934393c97cfdf5984ff581120e6b38f62b8560c8b5b7cc07f4175f65 languageName: node linkType: hard @@ -11320,18 +11754,18 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:30.0.1": - version: 30.0.1 - resolution: "@jest/types@npm:30.0.1" +"@jest/types@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/types@npm:30.0.5" dependencies: "@jest/pattern": 30.0.1 - "@jest/schemas": 30.0.1 + "@jest/schemas": 30.0.5 "@types/istanbul-lib-coverage": ^2.0.6 "@types/istanbul-reports": ^3.0.4 "@types/node": "*" "@types/yargs": ^17.0.33 chalk: ^4.1.2 - checksum: 407469331e74f9bb1ffd40202c3a8cece2fd07ba535adeb60557bdcee13713cf2f14cf78869ba7ef50a7e6fe0ed7cc97ec775056dd640fc0a332e8fbfaec1ee8 + checksum: fd097a390e36edacbd2c92a8378ec0cd67abec5e234bab7a80aec6eb8625568052b0c32acf472388d04c4cf384b8fa2871d0d12a56b4b06eaea93f2c6df0ec6c languageName: node linkType: hard @@ -12476,9 +12910,9 @@ __metadata: linkType: hard "@sinclair/typebox@npm:^0.34.0": - version: 0.34.38 - resolution: "@sinclair/typebox@npm:0.34.38" - checksum: c1b9a1547c64de01ff5c89351baf289d2d5f19cfef3ae30fe4748a103eb58d0842618318543cd3de964cb0370d5a859e24aba231ade9b43ee2ef4d0bb4db7084 + version: 0.34.41 + resolution: "@sinclair/typebox@npm:0.34.41" + checksum: 0fb61fc2f90c25e30b19b0096eb8ab3ccef401d3e2acfce42168ff0ee877ba5981c8243fa6b1035ac756cde95316724e978b2837dd642d7e4e095de03a999c90 languageName: node linkType: hard @@ -12589,7 +13023,7 @@ __metadata: languageName: node linkType: hard -"@smithy/abort-controller@npm:^4.0.4, @smithy/abort-controller@npm:^4.0.5, @smithy/abort-controller@npm:^4.2.0": +"@smithy/abort-controller@npm:^4.0.4, @smithy/abort-controller@npm:^4.2.0": version: 4.2.0 resolution: "@smithy/abort-controller@npm:4.2.0" dependencies: @@ -12650,7 +13084,7 @@ __metadata: languageName: node linkType: hard -"@smithy/config-resolver@npm:^4.1.4, @smithy/config-resolver@npm:^4.1.5, @smithy/config-resolver@npm:^4.3.0": +"@smithy/config-resolver@npm:^4.1.4, @smithy/config-resolver@npm:^4.1.5, @smithy/config-resolver@npm:^4.2.2, @smithy/config-resolver@npm:^4.3.0": version: 4.3.0 resolution: "@smithy/config-resolver@npm:4.3.0" dependencies: @@ -12679,7 +13113,7 @@ __metadata: languageName: node linkType: hard -"@smithy/core@npm:^3.14.0, @smithy/core@npm:^3.5.3, @smithy/core@npm:^3.7.0, @smithy/core@npm:^3.8.0": +"@smithy/core@npm:^3.11.0, @smithy/core@npm:^3.14.0, @smithy/core@npm:^3.5.3, @smithy/core@npm:^3.7.0, @smithy/core@npm:^3.8.0": version: 3.14.0 resolution: "@smithy/core@npm:3.14.0" dependencies: @@ -12710,7 +13144,7 @@ __metadata: languageName: node linkType: hard -"@smithy/credential-provider-imds@npm:^4.0.6, @smithy/credential-provider-imds@npm:^4.0.7, @smithy/credential-provider-imds@npm:^4.2.0": +"@smithy/credential-provider-imds@npm:^4.0.6, @smithy/credential-provider-imds@npm:^4.0.7, @smithy/credential-provider-imds@npm:^4.1.2, @smithy/credential-provider-imds@npm:^4.2.0": version: 4.2.0 resolution: "@smithy/credential-provider-imds@npm:4.2.0" dependencies: @@ -12859,7 +13293,7 @@ __metadata: languageName: node linkType: hard -"@smithy/fetch-http-handler@npm:^5.0.4, @smithy/fetch-http-handler@npm:^5.1.0, @smithy/fetch-http-handler@npm:^5.1.1, @smithy/fetch-http-handler@npm:^5.3.0": +"@smithy/fetch-http-handler@npm:^5.0.4, @smithy/fetch-http-handler@npm:^5.1.0, @smithy/fetch-http-handler@npm:^5.1.1, @smithy/fetch-http-handler@npm:^5.2.1, @smithy/fetch-http-handler@npm:^5.3.0": version: 5.3.0 resolution: "@smithy/fetch-http-handler@npm:5.3.0" dependencies: @@ -12908,7 +13342,7 @@ __metadata: languageName: node linkType: hard -"@smithy/hash-node@npm:^4.0.4, @smithy/hash-node@npm:^4.0.5, @smithy/hash-node@npm:^4.2.0": +"@smithy/hash-node@npm:^4.0.4, @smithy/hash-node@npm:^4.0.5, @smithy/hash-node@npm:^4.1.1, @smithy/hash-node@npm:^4.2.0": version: 4.2.0 resolution: "@smithy/hash-node@npm:4.2.0" dependencies: @@ -12952,7 +13386,7 @@ __metadata: languageName: node linkType: hard -"@smithy/invalid-dependency@npm:^4.0.4, @smithy/invalid-dependency@npm:^4.0.5, @smithy/invalid-dependency@npm:^4.2.0": +"@smithy/invalid-dependency@npm:^4.0.4, @smithy/invalid-dependency@npm:^4.0.5, @smithy/invalid-dependency@npm:^4.1.1, @smithy/invalid-dependency@npm:^4.2.0": version: 4.2.0 resolution: "@smithy/invalid-dependency@npm:4.2.0" dependencies: @@ -13022,7 +13456,7 @@ __metadata: languageName: node linkType: hard -"@smithy/middleware-content-length@npm:^4.0.4, @smithy/middleware-content-length@npm:^4.0.5, @smithy/middleware-content-length@npm:^4.2.0": +"@smithy/middleware-content-length@npm:^4.0.4, @smithy/middleware-content-length@npm:^4.0.5, @smithy/middleware-content-length@npm:^4.1.1, @smithy/middleware-content-length@npm:^4.2.0": version: 4.2.0 resolution: "@smithy/middleware-content-length@npm:4.2.0" dependencies: @@ -13049,7 +13483,7 @@ __metadata: languageName: node linkType: hard -"@smithy/middleware-endpoint@npm:^4.1.11, @smithy/middleware-endpoint@npm:^4.1.14, @smithy/middleware-endpoint@npm:^4.1.15, @smithy/middleware-endpoint@npm:^4.1.18, @smithy/middleware-endpoint@npm:^4.3.0": +"@smithy/middleware-endpoint@npm:^4.1.11, @smithy/middleware-endpoint@npm:^4.1.14, @smithy/middleware-endpoint@npm:^4.1.15, @smithy/middleware-endpoint@npm:^4.1.18, @smithy/middleware-endpoint@npm:^4.2.2, @smithy/middleware-endpoint@npm:^4.3.0": version: 4.3.0 resolution: "@smithy/middleware-endpoint@npm:4.3.0" dependencies: @@ -13082,7 +13516,7 @@ __metadata: languageName: node linkType: hard -"@smithy/middleware-retry@npm:^4.1.12, @smithy/middleware-retry@npm:^4.1.15, @smithy/middleware-retry@npm:^4.1.16, @smithy/middleware-retry@npm:^4.1.19, @smithy/middleware-retry@npm:^4.4.0": +"@smithy/middleware-retry@npm:^4.1.12, @smithy/middleware-retry@npm:^4.1.15, @smithy/middleware-retry@npm:^4.1.16, @smithy/middleware-retry@npm:^4.1.19, @smithy/middleware-retry@npm:^4.2.3, @smithy/middleware-retry@npm:^4.4.0": version: 4.4.0 resolution: "@smithy/middleware-retry@npm:4.4.0" dependencies: @@ -13109,7 +13543,7 @@ __metadata: languageName: node linkType: hard -"@smithy/middleware-serde@npm:^4.0.8, @smithy/middleware-serde@npm:^4.0.9, @smithy/middleware-serde@npm:^4.2.0": +"@smithy/middleware-serde@npm:^4.0.8, @smithy/middleware-serde@npm:^4.0.9, @smithy/middleware-serde@npm:^4.1.1, @smithy/middleware-serde@npm:^4.2.0": version: 4.2.0 resolution: "@smithy/middleware-serde@npm:4.2.0" dependencies: @@ -13130,7 +13564,7 @@ __metadata: languageName: node linkType: hard -"@smithy/middleware-stack@npm:^4.0.4, @smithy/middleware-stack@npm:^4.0.5, @smithy/middleware-stack@npm:^4.2.0": +"@smithy/middleware-stack@npm:^4.0.4, @smithy/middleware-stack@npm:^4.0.5, @smithy/middleware-stack@npm:^4.1.1, @smithy/middleware-stack@npm:^4.2.0": version: 4.2.0 resolution: "@smithy/middleware-stack@npm:4.2.0" dependencies: @@ -13152,7 +13586,7 @@ __metadata: languageName: node linkType: hard -"@smithy/node-config-provider@npm:^4.1.3, @smithy/node-config-provider@npm:^4.1.4, @smithy/node-config-provider@npm:^4.3.0": +"@smithy/node-config-provider@npm:^4.1.3, @smithy/node-config-provider@npm:^4.1.4, @smithy/node-config-provider@npm:^4.2.2, @smithy/node-config-provider@npm:^4.3.0": version: 4.3.0 resolution: "@smithy/node-config-provider@npm:4.3.0" dependencies: @@ -13177,7 +13611,7 @@ __metadata: languageName: node linkType: hard -"@smithy/node-http-handler@npm:^4.0.6, @smithy/node-http-handler@npm:^4.1.0, @smithy/node-http-handler@npm:^4.1.1, @smithy/node-http-handler@npm:^4.3.0": +"@smithy/node-http-handler@npm:^4.0.6, @smithy/node-http-handler@npm:^4.1.0, @smithy/node-http-handler@npm:^4.1.1, @smithy/node-http-handler@npm:^4.2.1, @smithy/node-http-handler@npm:^4.3.0": version: 4.3.0 resolution: "@smithy/node-http-handler@npm:4.3.0" dependencies: @@ -13200,7 +13634,7 @@ __metadata: languageName: node linkType: hard -"@smithy/property-provider@npm:^4.0.4, @smithy/property-provider@npm:^4.0.5, @smithy/property-provider@npm:^4.2.0": +"@smithy/property-provider@npm:^4.0.4, @smithy/property-provider@npm:^4.0.5, @smithy/property-provider@npm:^4.1.1, @smithy/property-provider@npm:^4.2.0": version: 4.2.0 resolution: "@smithy/property-provider@npm:4.2.0" dependencies: @@ -13220,7 +13654,7 @@ __metadata: languageName: node linkType: hard -"@smithy/protocol-http@npm:^5.1.2, @smithy/protocol-http@npm:^5.1.3, @smithy/protocol-http@npm:^5.3.0": +"@smithy/protocol-http@npm:^5.1.2, @smithy/protocol-http@npm:^5.1.3, @smithy/protocol-http@npm:^5.2.1, @smithy/protocol-http@npm:^5.3.0": version: 5.3.0 resolution: "@smithy/protocol-http@npm:5.3.0" dependencies: @@ -13300,7 +13734,7 @@ __metadata: languageName: node linkType: hard -"@smithy/shared-ini-file-loader@npm:^4.0.4, @smithy/shared-ini-file-loader@npm:^4.0.5, @smithy/shared-ini-file-loader@npm:^4.3.0": +"@smithy/shared-ini-file-loader@npm:^4.0.4, @smithy/shared-ini-file-loader@npm:^4.0.5, @smithy/shared-ini-file-loader@npm:^4.2.0, @smithy/shared-ini-file-loader@npm:^4.3.0": version: 4.3.0 resolution: "@smithy/shared-ini-file-loader@npm:4.3.0" dependencies: @@ -13326,7 +13760,7 @@ __metadata: languageName: node linkType: hard -"@smithy/signature-v4@npm:^5.1.2, @smithy/signature-v4@npm:^5.1.3, @smithy/signature-v4@npm:^5.3.0": +"@smithy/signature-v4@npm:^5.1.2, @smithy/signature-v4@npm:^5.1.3, @smithy/signature-v4@npm:^5.2.1, @smithy/signature-v4@npm:^5.3.0": version: 5.3.0 resolution: "@smithy/signature-v4@npm:5.3.0" dependencies: @@ -13357,7 +13791,7 @@ __metadata: languageName: node linkType: hard -"@smithy/smithy-client@npm:^4.4.10, @smithy/smithy-client@npm:^4.4.3, @smithy/smithy-client@npm:^4.4.6, @smithy/smithy-client@npm:^4.4.7, @smithy/smithy-client@npm:^4.7.0": +"@smithy/smithy-client@npm:^4.4.10, @smithy/smithy-client@npm:^4.4.3, @smithy/smithy-client@npm:^4.4.6, @smithy/smithy-client@npm:^4.4.7, @smithy/smithy-client@npm:^4.6.2, @smithy/smithy-client@npm:^4.7.0": version: 4.7.0 resolution: "@smithy/smithy-client@npm:4.7.0" dependencies: @@ -13381,7 +13815,7 @@ __metadata: languageName: node linkType: hard -"@smithy/types@npm:^4.3.1, @smithy/types@npm:^4.3.2, @smithy/types@npm:^4.6.0": +"@smithy/types@npm:^4.3.1, @smithy/types@npm:^4.3.2, @smithy/types@npm:^4.5.0, @smithy/types@npm:^4.6.0": version: 4.6.0 resolution: "@smithy/types@npm:4.6.0" dependencies: @@ -13401,7 +13835,7 @@ __metadata: languageName: node linkType: hard -"@smithy/url-parser@npm:^4.0.4, @smithy/url-parser@npm:^4.0.5, @smithy/url-parser@npm:^4.2.0": +"@smithy/url-parser@npm:^4.0.4, @smithy/url-parser@npm:^4.0.5, @smithy/url-parser@npm:^4.1.1, @smithy/url-parser@npm:^4.2.0": version: 4.2.0 resolution: "@smithy/url-parser@npm:4.2.0" dependencies: @@ -13423,7 +13857,7 @@ __metadata: languageName: node linkType: hard -"@smithy/util-base64@npm:^4.0.0, @smithy/util-base64@npm:^4.2.0": +"@smithy/util-base64@npm:^4.0.0, @smithy/util-base64@npm:^4.1.0, @smithy/util-base64@npm:^4.2.0": version: 4.2.0 resolution: "@smithy/util-base64@npm:4.2.0" dependencies: @@ -13443,7 +13877,7 @@ __metadata: languageName: node linkType: hard -"@smithy/util-body-length-browser@npm:^4.0.0, @smithy/util-body-length-browser@npm:^4.2.0": +"@smithy/util-body-length-browser@npm:^4.0.0, @smithy/util-body-length-browser@npm:^4.1.0, @smithy/util-body-length-browser@npm:^4.2.0": version: 4.2.0 resolution: "@smithy/util-body-length-browser@npm:4.2.0" dependencies: @@ -13461,7 +13895,7 @@ __metadata: languageName: node linkType: hard -"@smithy/util-body-length-node@npm:^4.0.0, @smithy/util-body-length-node@npm:^4.2.0": +"@smithy/util-body-length-node@npm:^4.0.0, @smithy/util-body-length-node@npm:^4.1.0, @smithy/util-body-length-node@npm:^4.2.0": version: 4.2.0 resolution: "@smithy/util-body-length-node@npm:4.2.0" dependencies: @@ -13509,7 +13943,7 @@ __metadata: languageName: node linkType: hard -"@smithy/util-config-provider@npm:^4.0.0, @smithy/util-config-provider@npm:^4.2.0": +"@smithy/util-config-provider@npm:^4.0.0, @smithy/util-config-provider@npm:^4.1.0, @smithy/util-config-provider@npm:^4.2.0": version: 4.2.0 resolution: "@smithy/util-config-provider@npm:4.2.0" dependencies: @@ -13531,7 +13965,7 @@ __metadata: languageName: node linkType: hard -"@smithy/util-defaults-mode-browser@npm:^4.0.19, @smithy/util-defaults-mode-browser@npm:^4.0.22, @smithy/util-defaults-mode-browser@npm:^4.0.23, @smithy/util-defaults-mode-browser@npm:^4.0.26, @smithy/util-defaults-mode-browser@npm:^4.2.0": +"@smithy/util-defaults-mode-browser@npm:^4.0.19, @smithy/util-defaults-mode-browser@npm:^4.0.22, @smithy/util-defaults-mode-browser@npm:^4.0.23, @smithy/util-defaults-mode-browser@npm:^4.0.26, @smithy/util-defaults-mode-browser@npm:^4.1.2, @smithy/util-defaults-mode-browser@npm:^4.2.0": version: 4.2.0 resolution: "@smithy/util-defaults-mode-browser@npm:4.2.0" dependencies: @@ -13559,7 +13993,7 @@ __metadata: languageName: node linkType: hard -"@smithy/util-defaults-mode-node@npm:^4.0.19, @smithy/util-defaults-mode-node@npm:^4.0.22, @smithy/util-defaults-mode-node@npm:^4.0.23, @smithy/util-defaults-mode-node@npm:^4.0.26, @smithy/util-defaults-mode-node@npm:^4.2.0": +"@smithy/util-defaults-mode-node@npm:^4.0.19, @smithy/util-defaults-mode-node@npm:^4.0.22, @smithy/util-defaults-mode-node@npm:^4.0.23, @smithy/util-defaults-mode-node@npm:^4.0.26, @smithy/util-defaults-mode-node@npm:^4.1.2, @smithy/util-defaults-mode-node@npm:^4.2.0": version: 4.2.0 resolution: "@smithy/util-defaults-mode-node@npm:4.2.0" dependencies: @@ -13585,7 +14019,7 @@ __metadata: languageName: node linkType: hard -"@smithy/util-endpoints@npm:^3.0.6, @smithy/util-endpoints@npm:^3.0.7, @smithy/util-endpoints@npm:^3.2.0": +"@smithy/util-endpoints@npm:^3.0.6, @smithy/util-endpoints@npm:^3.0.7, @smithy/util-endpoints@npm:^3.1.2, @smithy/util-endpoints@npm:^3.2.0": version: 3.2.0 resolution: "@smithy/util-endpoints@npm:3.2.0" dependencies: @@ -13624,7 +14058,7 @@ __metadata: languageName: node linkType: hard -"@smithy/util-middleware@npm:^4.0.4, @smithy/util-middleware@npm:^4.0.5, @smithy/util-middleware@npm:^4.2.0": +"@smithy/util-middleware@npm:^4.0.4, @smithy/util-middleware@npm:^4.0.5, @smithy/util-middleware@npm:^4.1.1, @smithy/util-middleware@npm:^4.2.0": version: 4.2.0 resolution: "@smithy/util-middleware@npm:4.2.0" dependencies: @@ -13645,7 +14079,7 @@ __metadata: languageName: node linkType: hard -"@smithy/util-retry@npm:^4.0.5, @smithy/util-retry@npm:^4.0.6, @smithy/util-retry@npm:^4.0.7, @smithy/util-retry@npm:^4.2.0": +"@smithy/util-retry@npm:^4.0.5, @smithy/util-retry@npm:^4.0.6, @smithy/util-retry@npm:^4.0.7, @smithy/util-retry@npm:^4.1.2, @smithy/util-retry@npm:^4.2.0": version: 4.2.0 resolution: "@smithy/util-retry@npm:4.2.0" dependencies: @@ -13672,7 +14106,7 @@ __metadata: languageName: node linkType: hard -"@smithy/util-stream@npm:^4.2.2, @smithy/util-stream@npm:^4.2.3, @smithy/util-stream@npm:^4.2.4, @smithy/util-stream@npm:^4.4.0": +"@smithy/util-stream@npm:^4.2.2, @smithy/util-stream@npm:^4.2.3, @smithy/util-stream@npm:^4.2.4, @smithy/util-stream@npm:^4.3.1, @smithy/util-stream@npm:^4.4.0": version: 4.4.0 resolution: "@smithy/util-stream@npm:4.4.0" dependencies: @@ -13726,7 +14160,7 @@ __metadata: languageName: node linkType: hard -"@smithy/util-utf8@npm:^4.0.0, @smithy/util-utf8@npm:^4.2.0": +"@smithy/util-utf8@npm:^4.0.0, @smithy/util-utf8@npm:^4.1.0, @smithy/util-utf8@npm:^4.2.0": version: 4.2.0 resolution: "@smithy/util-utf8@npm:4.2.0" dependencies: @@ -13747,14 +14181,14 @@ __metadata: languageName: node linkType: hard -"@smithy/util-waiter@npm:^4.0.6, @smithy/util-waiter@npm:^4.0.7": - version: 4.0.7 - resolution: "@smithy/util-waiter@npm:4.0.7" +"@smithy/util-waiter@npm:^4.0.6, @smithy/util-waiter@npm:^4.0.7, @smithy/util-waiter@npm:^4.1.1, @smithy/util-waiter@npm:^4.2.0": + version: 4.2.0 + resolution: "@smithy/util-waiter@npm:4.2.0" dependencies: - "@smithy/abort-controller": ^4.0.5 - "@smithy/types": ^4.3.2 + "@smithy/abort-controller": ^4.2.0 + "@smithy/types": ^4.6.0 tslib: ^2.6.2 - checksum: 14caffd913b9b18ff4f33d6bb1f05eef2e354104a6db2b69654d7db4582c4be46b202d46af87a66177a8a3a99082fa8b0948195de8aeb63998c6ed5b04f2bd3d + checksum: fc72b46d83f66172328be84a48df969890ac2f88b449a4937ac1510edfce1f6792f03b28afd337735da6d9469461e35f8d56d69f1aa6f2b3eaf663e791829f42 languageName: node linkType: hard @@ -15917,7 +16351,7 @@ __metadata: resolution: "amplify-dynamodb-simulator@workspace:packages/amplify-dynamodb-simulator" dependencies: "@aws-amplify/amplify-cli-core": 4.4.3 - aws-sdk: ^2.1464.0 + "@aws-sdk/client-dynamodb": ^3.624.0 detect-port: ^1.3.0 execa: ^5.1.1 fs-extra: ^8.1.0 @@ -16089,7 +16523,6 @@ __metadata: "@types/serve-static": ^1.13.3 "@types/uuid": ^8.3.1 "@types/xml": ^1.0.4 - aws-sdk: ^2.1464.0 body-parser: ^1.19.2 cors: ^2.8.5 etag: ^1.8.1 @@ -16884,17 +17317,6 @@ __metadata: languageName: node linkType: hard -"aws-sdk-mock@npm:^6.2.0": - version: 6.2.0 - resolution: "aws-sdk-mock@npm:6.2.0" - dependencies: - aws-sdk: ^2.1231.0 - neotraverse: ^0.6.15 - sinon: ^18.0.1 - checksum: a8ef205ecc806225f5b7cc6a09864d73d23add434dc42213c2aa3bd9285741651cf56c8b9f6be5619c405cfd07c3caa64a2351ff597ace0c96b4ba30ac6c811a - languageName: node - linkType: hard - "aws-sdk@npm:^2.1464.0": version: 2.1464.0 resolution: "aws-sdk@npm:2.1464.0" @@ -18001,15 +18423,15 @@ __metadata: linkType: hard "chai@npm:^5.2.0": - version: 5.2.1 - resolution: "chai@npm:5.2.1" + version: 5.3.3 + resolution: "chai@npm:5.3.3" dependencies: assertion-error: ^2.0.1 check-error: ^2.1.1 deep-eql: ^5.0.1 loupe: ^3.1.0 pathval: ^2.0.0 - checksum: 58209c03ae9b2fd97cfa1cb0fbe372b1906e6091311b9ba1b0468cc4923b0766a50a1050a164df3ccefb9464944c9216b632f1477c9e429068013bdbb57220f6 + checksum: b360fd4d38861622e5010c2f709736988b05c7f31042305fa3f4e9911f6adb80ccfb4e302068bf8ed10e835c2e2520cba0f5edc13d878b886987e5aa62483f53 languageName: node linkType: hard @@ -21437,16 +21859,16 @@ __metadata: linkType: hard "expect@npm:>28.1.3": - version: 30.0.4 - resolution: "expect@npm:30.0.4" + version: 30.1.2 + resolution: "expect@npm:30.1.2" dependencies: - "@jest/expect-utils": 30.0.4 - "@jest/get-type": 30.0.1 - jest-matcher-utils: 30.0.4 - jest-message-util: 30.0.2 - jest-mock: 30.0.2 - jest-util: 30.0.2 - checksum: de0c7cf4068591feda6b4b1dfcb5711f085266bfa720a8498ac8c0d03fbfa84881f54b67f25c79bee4bf0f6040ee12ed004b209de7d0cff82fd06d7b42baabc2 + "@jest/expect-utils": 30.1.2 + "@jest/get-type": 30.1.0 + jest-matcher-utils: 30.1.2 + jest-message-util: 30.1.0 + jest-mock: 30.0.5 + jest-util: 30.0.5 + checksum: 467c1b69549e75a1a09f3feec335e0dc968cd71370361b5d83248351cf77e705e8ddf38a4885e32a50237502ced7fcc9106462f59f33c4796462e95938b8ca19 languageName: node linkType: hard @@ -24904,15 +25326,15 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:30.0.4": - version: 30.0.4 - resolution: "jest-diff@npm:30.0.4" +"jest-diff@npm:30.1.2": + version: 30.1.2 + resolution: "jest-diff@npm:30.1.2" dependencies: "@jest/diff-sequences": 30.0.1 - "@jest/get-type": 30.0.1 + "@jest/get-type": 30.1.0 chalk: ^4.1.2 - pretty-format: 30.0.2 - checksum: aceae3a2e90ec232305ba43082e34ec5d24867459a6f52169e47edfd5f55457788ad534ff781d12e6606a70bc7ddc5090e45748732772679065dfd56f46f8ab1 + pretty-format: 30.0.5 + checksum: 5baba5c54d044faf77540d2b97f947ce2a735c529bdca23ccd25669085ba3912eef2a8f66f4d765e8e416b1e10b95cb1dded0ebc1633efdbef37706b4e767ecb languageName: node linkType: hard @@ -25086,15 +25508,15 @@ __metadata: languageName: node linkType: hard -"jest-matcher-utils@npm:30.0.4": - version: 30.0.4 - resolution: "jest-matcher-utils@npm:30.0.4" +"jest-matcher-utils@npm:30.1.2": + version: 30.1.2 + resolution: "jest-matcher-utils@npm:30.1.2" dependencies: - "@jest/get-type": 30.0.1 + "@jest/get-type": 30.1.0 chalk: ^4.1.2 - jest-diff: 30.0.4 - pretty-format: 30.0.2 - checksum: 18f9f808e1de56a466d3a858acd5d253ea13e386619de05fe21b37316305b15feb078f12beae9228c878fc6b60b9bbbd1a6240f1878f80a222d241b38e54b53f + jest-diff: 30.1.2 + pretty-format: 30.0.5 + checksum: c4f81fc7d72f94b18dff807adf787d6fd081c3e150148fbbcb1559c353b27890989bcf7e10b15d763625565175bf30019e93a014078ff291646a88a9acdfc9a4 languageName: node linkType: hard @@ -25122,20 +25544,20 @@ __metadata: languageName: node linkType: hard -"jest-message-util@npm:30.0.2": - version: 30.0.2 - resolution: "jest-message-util@npm:30.0.2" +"jest-message-util@npm:30.1.0": + version: 30.1.0 + resolution: "jest-message-util@npm:30.1.0" dependencies: "@babel/code-frame": ^7.27.1 - "@jest/types": 30.0.1 + "@jest/types": 30.0.5 "@types/stack-utils": ^2.0.3 chalk: ^4.1.2 graceful-fs: ^4.2.11 micromatch: ^4.0.8 - pretty-format: 30.0.2 + pretty-format: 30.0.5 slash: ^3.0.0 stack-utils: ^2.0.6 - checksum: c010d5b7d86e735e2fb4c4a220f57004349f488f5d4663240a7e9f2694d01b5228136540d55036777fde4227b5e0b56f08885b7f69395b295cab878357b1aeb1 + checksum: 3884f7e772d64891eca63870f73b89af4e1dce715611c308e1115f7961ed378560bac66c5f9cbee025b06ca530dbd30685362cb8db7b5a48f5f53b75ba79023e languageName: node linkType: hard @@ -25190,14 +25612,14 @@ __metadata: languageName: node linkType: hard -"jest-mock@npm:30.0.2": - version: 30.0.2 - resolution: "jest-mock@npm:30.0.2" +"jest-mock@npm:30.0.5": + version: 30.0.5 + resolution: "jest-mock@npm:30.0.5" dependencies: - "@jest/types": 30.0.1 + "@jest/types": 30.0.5 "@types/node": "*" - jest-util: 30.0.2 - checksum: 7728997c1d654475b88e18b7ba33a2a1b9f89ce33a9082bf2d14dcc3e831f372f80c762e481777886a3a04b4489ea5390ecdeb21c4def57fba5b2c77086a3959 + jest-util: 30.0.5 + checksum: 207fd79297f514a8e26ede9b4b5035e70212b8850a2f460b51d3cc58e8e7c9585bd2dbc5df2475a3321c4cd114b90e0b24190f00d6eeb88c8f088a8ed00416d5 languageName: node linkType: hard @@ -25483,17 +25905,17 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:30.0.2": - version: 30.0.2 - resolution: "jest-util@npm:30.0.2" +"jest-util@npm:30.0.5": + version: 30.0.5 + resolution: "jest-util@npm:30.0.5" dependencies: - "@jest/types": 30.0.1 + "@jest/types": 30.0.5 "@types/node": "*" chalk: ^4.1.2 ci-info: ^4.2.0 graceful-fs: ^4.2.11 picomatch: ^4.0.2 - checksum: 07de384790b8e5a5925fba5448fa1475790a5b52271fbf99958c18e468da1af940f8b45e330d87766576cf6c5d1f4f41ce51c976483a5079653d9fcdba8aac8e + checksum: d3808b5f7720044d0464664c795e2b795ed82edf3b5871db74b8b603c3a0a38107668730348d26f92920ca3b8245a99cbbc2c93e77d0abb1f5e27524079a4ba8 languageName: node linkType: hard @@ -26622,9 +27044,9 @@ __metadata: linkType: hard "loupe@npm:^3.1.0, loupe@npm:^3.1.4": - version: 3.1.4 - resolution: "loupe@npm:3.1.4" - checksum: 5c2e6aefaad25f812d361c750b8cf4ff91d68de289f141d7c85c2ce9bb79eeefa06a93c85f7b87cba940531ed8f15e492f32681d47eed23842ad1963eb3a154d + version: 3.2.1 + resolution: "loupe@npm:3.2.1" + checksum: 910c872cba291309664c2d094368d31a68907b6f5913e989d301b5c25f30e97d76d77f23ab3bf3b46d0f601ff0b6af8810c10c31b91d2c6b2f132809ca2cc705 languageName: node linkType: hard @@ -27620,13 +28042,6 @@ __metadata: languageName: node linkType: hard -"neotraverse@npm:^0.6.15": - version: 0.6.18 - resolution: "neotraverse@npm:0.6.18" - checksum: 46f4c53cbbdc53671150916b544a9f46e27781f8003985237507542190173bec131168d89b846535f9c34c0a2a7debb1ab3a4f7a93d08218e2c194a363708ffa - languageName: node - linkType: hard - "netmask@npm:^2.0.2": version: 2.0.2 resolution: "netmask@npm:2.0.2" @@ -30122,14 +30537,14 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:30.0.2": - version: 30.0.2 - resolution: "pretty-format@npm:30.0.2" +"pretty-format@npm:30.0.5": + version: 30.0.5 + resolution: "pretty-format@npm:30.0.5" dependencies: - "@jest/schemas": 30.0.1 + "@jest/schemas": 30.0.5 ansi-styles: ^5.2.0 react-is: ^18.3.1 - checksum: cf542dc2d0be95e2b1c6e3a397a4fc13fce1c9f8feed6b56165c0d23c7a83423abb6b032ed8e3e1b7c1c0709f9b117dd30b5185f107e58f8766616be6de84850 + checksum: 9f6cf1af5c3169093866c80adbfdad32f69c692b62f24ba3ca8cdec8519336123323f896396f9fa40346a41b197c5f6be15aec4d8620819f12496afaaca93f81 languageName: node linkType: hard @@ -33289,9 +33704,9 @@ __metadata: linkType: hard "tinyspy@npm:^4.0.3": - version: 4.0.3 - resolution: "tinyspy@npm:4.0.3" - checksum: 0a92a18b5350945cc8a1da3a22c9ad9f4e2945df80aaa0c43e1b3a3cfb64d8501e607ebf0305e048e3c3d3e0e7f8eb10cea27dc17c21effb73e66c4a3be36373 + version: 4.0.4 + resolution: "tinyspy@npm:4.0.4" + checksum: a8020fc17799251e06a8398dcc352601d2770aa91c556b9531ecd7a12581161fd1c14e81cbdaff0c1306c93bfdde8ff6d1c1a3f9bbe6d91604f0fd4e01e2f1eb languageName: node linkType: hard