diff --git a/javascriptv3/biome.json b/javascriptv3/biome.json index 01380d4621a..d23d6c62596 100644 --- a/javascriptv3/biome.json +++ b/javascriptv3/biome.json @@ -12,6 +12,7 @@ "./example_code/medical-imaging/scenarios/health-image-sets/pixel-data-verification", "./example_code/kinesis/kinesis-cdk", "./example_code/medical-imaging/scenarios/health-image-sets/pixel-data-verification/openjphjs/openjphjs.js", + "./example_code/cross-services/textract-react", "**/dist" ] }, @@ -25,7 +26,12 @@ "linter": { "enabled": true, "rules": { - "recommended": true + "recommended": true, + "correctness": { + "noUndeclaredVariables": { + "level": "error" + } + } } }, "javascript": { diff --git a/javascriptv3/example_code/bedrock-agent/tests/bedrock-agent-actions.integration.test.js b/javascriptv3/example_code/bedrock-agent/tests/bedrock-agent-actions.integration.test.js index 61f262adc34..0e0382b14fe 100644 --- a/javascriptv3/example_code/bedrock-agent/tests/bedrock-agent-actions.integration.test.js +++ b/javascriptv3/example_code/bedrock-agent/tests/bedrock-agent-actions.integration.test.js @@ -5,7 +5,7 @@ import { afterAll, beforeAll, describe, expect, it } from "vitest"; import { getRandomAlphanumericString } from "@aws-doc-sdk-examples/lib/utils/util-string.js"; import { wait } from "@aws-doc-sdk-examples/lib/utils/util-timers.js"; -import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; +import { logger } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; import { CreateRoleCommand, @@ -97,7 +97,7 @@ describe("create-list-get-delete", () => { }), ); } catch (err) { - log(err); + logger.error(err); throw err; } }); @@ -152,7 +152,7 @@ describe("create-list-get-delete", () => { ); await iam.send(new DeleteRoleCommand({ RoleName: agentRoleName })); } catch (err) { - log(err); + logger.error(err); throw err; } }); diff --git a/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/admin-get-user-handler.js b/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/admin-get-user-handler.js index 31e884a4b28..b5acd941689 100644 --- a/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/admin-get-user-handler.js +++ b/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/admin-get-user-handler.js @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import { getFirstEntry } from "@aws-doc-sdk-examples/lib/utils/util-csv.js"; -import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; +import { logger } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; import { adminGetUser } from "../../../actions/admin-get-user.js"; import { FILE_USER_POOLS } from "./constants.js"; @@ -41,9 +41,9 @@ const adminGetUserHandler = async ([_cmd, username]) => { const user = await getUser(username); - log(formatUser(user)); + logger.log(formatUser(user)); } catch (err) { - log(err); + logger.error(err); } }; diff --git a/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/admin-initiate-auth-handler.js b/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/admin-initiate-auth-handler.js index e142346bf84..6a82d3fdc1e 100644 --- a/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/admin-initiate-auth-handler.js +++ b/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/admin-initiate-auth-handler.js @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 /** snippet-start:[javascript.v3.cognito-idp.scenarios.basic.AdminInitiateAuthHandler] **/ import qrcode from "qrcode-terminal"; -import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; +import { logger } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; import { adminInitiateAuth } from "../../../actions/admin-initiate-auth.js"; import { associateSoftwareToken } from "../../../actions/associate-software-token.js"; import { FILE_USER_POOLS } from "./constants.js"; @@ -61,7 +61,7 @@ const adminInitiateAuthHandler = async (commands) => { validateId(userPoolId); validateClient(clientId); - log("Signing in."); + logger.log("Signing in."); const { ChallengeName, Session } = await adminInitiateAuth({ clientId, userPoolId, @@ -70,16 +70,16 @@ const adminInitiateAuthHandler = async (commands) => { }); if (ChallengeName === "MFA_SETUP") { - log("MFA setup is required."); + logger.log("MFA setup is required."); return handleMfaSetup(Session, username); } if (ChallengeName === "SOFTWARE_TOKEN_MFA") { handleSoftwareTokenMfa(Session); - log(`Run 'admin-respond-to-auth-challenge ${username} '`); + logger.log(`Run 'admin-respond-to-auth-challenge ${username} '`); } } catch (err) { - log(err); + logger.error(err); } }; diff --git a/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/admin-respond-to-auth-challenge-handler.js b/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/admin-respond-to-auth-challenge-handler.js index 5ab41beeffc..099c4d5528b 100644 --- a/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/admin-respond-to-auth-challenge-handler.js +++ b/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/admin-respond-to-auth-challenge-handler.js @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 /** snippet-start:[javascript.v3.cognito-idp.scenarios.basic.AdminRespondToAuthChallengeHandler] **/ -import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; +import { logger } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; import { adminRespondToAuthChallenge } from "../../../actions/admin-respond-to-auth-challenge.js"; import { getFirstEntry } from "@aws-doc-sdk-examples/lib/utils/util-csv.js"; import { FILE_USER_POOLS } from "./constants.js"; @@ -47,9 +47,9 @@ const adminRespondToAuthChallengeHandler = async (commands) => { storeAccessToken(AuthenticationResult.AccessToken); - log("Successfully authenticated."); + logger.log("Successfully authenticated."); } catch (err) { - log(err); + logger.error(err); } }; diff --git a/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/clean-up-handler.js b/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/clean-up-handler.js index 3190ae364d8..38a3b6bd3b8 100644 --- a/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/clean-up-handler.js +++ b/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/clean-up-handler.js @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import { deleteFiles } from "@aws-doc-sdk-examples/lib/utils/util-fs.js"; -import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; +import { logger } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; import { deleteUserPool } from "../../../actions/delete-user-pool.js"; import { FILE_USER_POOLS } from "./constants.js"; import { getFirstValuesFromEntries } from "@aws-doc-sdk-examples/lib/utils/util-csv.js"; @@ -12,7 +12,7 @@ import { getFirstValuesFromEntries } from "@aws-doc-sdk-examples/lib/utils/util- */ function cleanUpUserPools(userPoolIds) { const deletePromises = userPoolIds.map((id) => - deleteUserPool(id).catch((err) => log(err)), + deleteUserPool(id).catch((err) => logger.error(err)), ); return Promise.all(deletePromises); } @@ -26,24 +26,24 @@ function createUserPoolList(userPoolIds) { const cleanUpHandler = async () => { try { - log("Tidying up"); + logger.log("Tidying up"); /** * @type {string[]} */ const userPoolIds = getFirstValuesFromEntries(FILE_USER_POOLS); if (userPoolIds[0].length > 0) { - log(`Deleting user pools: \n${createUserPoolList(userPoolIds)}`); + logger.log(`Deleting user pools: \n${createUserPoolList(userPoolIds)}`); await cleanUpUserPools(userPoolIds); - log("User pools deleted."); + logger.log("User pools deleted."); } - log("Removing temporary files."); + logger.log("Removing temporary files."); await deleteFiles([`./${FILE_USER_POOLS}.tmp`]); - log("All done ✨."); + logger.log("All done ✨."); } catch (err) { - log(err); + logger.error(err); } }; diff --git a/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/confirm-sign-up-handler.js b/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/confirm-sign-up-handler.js index 0d910b5fd10..d5874722162 100644 --- a/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/confirm-sign-up-handler.js +++ b/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/confirm-sign-up-handler.js @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 /** snippet-start:[javascript.v3.cognito-idp.scenarios.basic.ConfirmSignUpHandler] **/ -import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; +import { logger } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; import { confirmSignUp } from "../../../actions/confirm-sign-up.js"; import { FILE_USER_POOLS } from "./constants.js"; import { getSecondValuesFromEntries } from "@aws-doc-sdk-examples/lib/utils/util-csv.js"; @@ -43,13 +43,13 @@ const confirmSignUpHandler = async (commands) => { const values = getSecondValuesFromEntries(FILE_USER_POOLS); const clientId = values[0]; validateClient(clientId); - log("Confirming user."); + logger.log("Confirming user."); await confirmSignUp({ clientId, username, code }); - log( + logger.log( `User confirmed. Run 'admin-initiate-auth ${username} ' to sign in.`, ); } catch (err) { - log(err); + logger.error(err); } }; diff --git a/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/create-user-pool-handler.js b/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/create-user-pool-handler.js index 93cd6a073d1..33fca4525b9 100644 --- a/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/create-user-pool-handler.js +++ b/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/create-user-pool-handler.js @@ -1,7 +1,7 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; +import { logger } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; import { getTmp, setTmp } from "@aws-doc-sdk-examples/lib/utils/util-fs.js"; import { createUserPool } from "../../../actions/create-user-pool.js"; import { FILE_USER_POOLS, NAME_CLIENT } from "./constants.js"; @@ -36,26 +36,28 @@ const createUserPoolHandler = async (commands) => { try { validateUserPool(poolName); - log(`Creating user pool: ${poolName}`); + logger.log(`Creating user pool: ${poolName}`); const { UserPool: { Id }, } = await createUserPool(poolName); - log("User pool created."); + logger.log("User pool created."); - log("Configuring user pool to only allow MFA via an authenticator app."); + logger.log( + "Configuring user pool to only allow MFA via an authenticator app.", + ); await setUserPoolMfaConfig(Id); - log("MFA configured."); + logger.log("MFA configured."); - log(`Creating user pool client: ${NAME_CLIENT}`); + logger.log(`Creating user pool client: ${NAME_CLIENT}`); const { UserPoolClient: { ClientId }, } = await createUserPoolClient(NAME_CLIENT, Id); - log("Client created."); + logger.log("Client created."); storeUserPoolMeta(Id, ClientId, poolName); } catch (err) { - log(err); + logger.error(err); } }; diff --git a/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/list-users-handler.js b/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/list-users-handler.js index 591f0bc8d5e..aa5a3d88474 100644 --- a/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/list-users-handler.js +++ b/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/list-users-handler.js @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import { getFirstEntry } from "@aws-doc-sdk-examples/lib/utils/util-csv.js"; -import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; +import { logger } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; import { listUsers } from "../../../actions/list-users.js"; import { FILE_USER_POOLS } from "./constants.js"; @@ -27,9 +27,9 @@ const listUsersHandler = async () => { try { const response = await getUsers(); - log(formatUsers(response.Users)); + logger.log(formatUsers(response.Users)); } catch (err) { - log(err); + logger.error(err); } }; diff --git a/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/resend-confirmation-code-handler.js b/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/resend-confirmation-code-handler.js index 0980c8d4a1a..9e9920e1fc8 100644 --- a/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/resend-confirmation-code-handler.js +++ b/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/resend-confirmation-code-handler.js @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import { getFirstEntry } from "@aws-doc-sdk-examples/lib/utils/util-csv.js"; -import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; +import { logger } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; import { resendConfirmationCode } from "../../../actions/resend-confirmation-code.js"; import { FILE_USER_POOLS } from "./constants.js"; @@ -10,9 +10,9 @@ const resendConfirmationCodeHandler = async ([_cmd, username]) => { try { const [_userPoolId, clientId] = getFirstEntry(FILE_USER_POOLS); await resendConfirmationCode({ clientId, username }); - log("Confirmation code sent."); + logger.log("Confirmation code sent."); } catch (err) { - log(err); + logger.error(err); } }; diff --git a/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/sign-up-handler.js b/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/sign-up-handler.js index 9e94964ecaa..466c54d6ea7 100644 --- a/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/sign-up-handler.js +++ b/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/sign-up-handler.js @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 /** snippet-start:[javascript.v3.cognito-idp.scenarios.basic.SignUpHandler] **/ -import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; +import { logger } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; import { signUp } from "../../../actions/sign-up.js"; import { FILE_USER_POOLS } from "./constants.js"; import { getSecondValuesFromEntries } from "@aws-doc-sdk-examples/lib/utils/util-csv.js"; @@ -34,12 +34,14 @@ const signUpHandler = async (commands) => { const values = getSecondValuesFromEntries(FILE_USER_POOLS); const clientId = values[0]; validateClient(clientId); - log("Signing up."); + logger.log("Signing up."); await signUp({ clientId, username, password, email }); - log(`Signed up. A confirmation email has been sent to: ${email}.`); - log(`Run 'confirm-sign-up ${username} ' to confirm your account.`); + logger.log(`Signed up. A confirmation email has been sent to: ${email}.`); + logger.log( + `Run 'confirm-sign-up ${username} ' to confirm your account.`, + ); } catch (err) { - log(err); + logger.error(err); } }; diff --git a/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/verify-software-token-handler.js b/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/verify-software-token-handler.js index 87682bd37a6..63dfafd8d74 100644 --- a/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/verify-software-token-handler.js +++ b/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/command-handlers/verify-software-token-handler.js @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 /** snippet-start:[javascript.v3.cognito-idp.scenarios.basic.VerifySoftwareTokenHandler] **/ -import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; +import { logger } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; import { verifySoftwareToken } from "../../../actions/verify-software-token.js"; const validateTotp = (totp) => { @@ -18,11 +18,11 @@ const verifySoftwareTokenHandler = async (commands) => { try { validateTotp(totp); - log("Verifying TOTP."); + logger.log("Verifying TOTP."); await verifySoftwareToken(totp); - log("TOTP Verified. Run 'admin-initiate-auth' again to sign-in."); + logger.log("TOTP Verified. Run 'admin-initiate-auth' again to sign-in."); } catch (err) { - console.log(err); + logger.error(err); } }; diff --git a/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/index.js b/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/index.js index 9320c34366c..3aeb32ff66f 100644 --- a/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/index.js +++ b/javascriptv3/example_code/cognito-identity-provider/scenarios/basic/index.js @@ -4,7 +4,6 @@ import { createInterface } from "node:readline"; import { stdin as input, stdout as output } from "node:process"; import { readCommands } from "@aws-doc-sdk-examples/lib/cmd-runner.js"; -import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; import { startsWith } from "@aws-doc-sdk-examples/lib/utils/util-array.js"; import { createUserPoolHandler } from "./command-handlers/create-user-pool-handler.js"; @@ -61,7 +60,7 @@ const help = ` `; const handlers = [ - [startsWith(["help"]), () => log(help)], + [startsWith(["help"]), () => console.log(help)], [startsWith(["create-user-pool"]), createUserPoolHandler], [startsWith(["sign-up"]), signUpHandler], [startsWith(["resend-confirmation-code"]), resendConfirmationCodeHandler], diff --git a/javascriptv3/example_code/cross-services/aurora-serverless-app/src/handlers/get-items-handler.ts b/javascriptv3/example_code/cross-services/aurora-serverless-app/src/handlers/get-items-handler.ts index 8b0292648f8..6a77ec901ab 100644 --- a/javascriptv3/example_code/cross-services/aurora-serverless-app/src/handlers/get-items-handler.ts +++ b/javascriptv3/example_code/cross-services/aurora-serverless-app/src/handlers/get-items-handler.ts @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import type { Handler } from "src/types/handler.js"; +import type { DBRecords } from "src/types/db-record.js"; import { command as getAllItemsCommand } from "../statement-commands/get-all-items.js"; import { command as getArchivedItemsCommand } from "../statement-commands/get-archived-items.js"; import { command as getActiveItemsCommand } from "../statement-commands/get-active-items.js"; diff --git a/javascriptv3/example_code/cross-services/aurora-serverless-app/src/handlers/parse-item.ts b/javascriptv3/example_code/cross-services/aurora-serverless-app/src/handlers/parse-item.ts index e39f954cb55..ec28ec46792 100644 --- a/javascriptv3/example_code/cross-services/aurora-serverless-app/src/handlers/parse-item.ts +++ b/javascriptv3/example_code/cross-services/aurora-serverless-app/src/handlers/parse-item.ts @@ -1,6 +1,7 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import type { Item } from "../types/item.js"; +import type { DBRecord } from "../types/db-record.js"; const parseItem = (record: DBRecord): Item => { return { diff --git a/javascriptv3/example_code/cross-services/aurora-serverless-app/src/handlers/post-items-report-handler.ts b/javascriptv3/example_code/cross-services/aurora-serverless-app/src/handlers/post-items-report-handler.ts index cf88a576ba4..1de17cca76c 100644 --- a/javascriptv3/example_code/cross-services/aurora-serverless-app/src/handlers/post-items-report-handler.ts +++ b/javascriptv3/example_code/cross-services/aurora-serverless-app/src/handlers/post-items-report-handler.ts @@ -5,6 +5,7 @@ import { SendRawEmailCommand } from "@aws-sdk/client-ses"; import { createMimeMessage, type TextFormat } from "mimetext"; import { format } from "prettier"; import type { Handler } from "src/types/handler.js"; +import type { DBRecords } from "src/types/db-record.js"; import { command as getActiveItemsCommand } from "../statement-commands/get-active-items.js"; const makeCsv = (records: DBRecords) => { diff --git a/javascriptv3/example_code/cross-services/aurora-serverless-app/src/middleware/validate-db.ts b/javascriptv3/example_code/cross-services/aurora-serverless-app/src/middleware/validate-db.ts index efe50e8a43f..a106fa26efb 100644 --- a/javascriptv3/example_code/cross-services/aurora-serverless-app/src/middleware/validate-db.ts +++ b/javascriptv3/example_code/cross-services/aurora-serverless-app/src/middleware/validate-db.ts @@ -5,6 +5,7 @@ import type { RequestHandler } from "express"; import { command as createTableCommand } from "../statement-commands/create-table.js"; import { command as getAllItemsCommand } from "../statement-commands/get-all-items.js"; import type { Handler } from "src/types/handler.js"; +import type { Sendable } from "src/types/sendable.js"; const errorCodes = { TABLE_NOT_FOUND: "Error code: 1146", diff --git a/javascriptv3/example_code/cross-services/aurora-serverless-app/src/types/db-record.d.ts b/javascriptv3/example_code/cross-services/aurora-serverless-app/src/types/db-record.d.ts deleted file mode 100644 index 06df8f6dad3..00000000000 --- a/javascriptv3/example_code/cross-services/aurora-serverless-app/src/types/db-record.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. -// SPDX-License-Identifier: Apache-2.0 -declare type DBRecordValue = Record; -declare type DBRecord = DBRecordValue[]; -declare type DBRecords = DBRecord[]; diff --git a/javascriptv3/example_code/cross-services/aurora-serverless-app/src/types/db-record.ts b/javascriptv3/example_code/cross-services/aurora-serverless-app/src/types/db-record.ts new file mode 100644 index 00000000000..eac42191733 --- /dev/null +++ b/javascriptv3/example_code/cross-services/aurora-serverless-app/src/types/db-record.ts @@ -0,0 +1,6 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +export type DBRecordValue = Record; +export type DBRecord = DBRecordValue[]; +export type DBRecords = DBRecord[]; diff --git a/javascriptv3/example_code/cross-services/aurora-serverless-app/src/types/handler.d.ts b/javascriptv3/example_code/cross-services/aurora-serverless-app/src/types/handler.ts similarity index 82% rename from javascriptv3/example_code/cross-services/aurora-serverless-app/src/types/handler.d.ts rename to javascriptv3/example_code/cross-services/aurora-serverless-app/src/types/handler.ts index 7bcf2ddc365..f736237c8c9 100644 --- a/javascriptv3/example_code/cross-services/aurora-serverless-app/src/types/handler.d.ts +++ b/javascriptv3/example_code/cross-services/aurora-serverless-app/src/types/handler.ts @@ -1,8 +1,10 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 + import type { RequestHandler } from "express"; +import type { Sendable } from "./sendable.js"; -declare type Handler = { +export type Handler = { withClient: ({ rdsDataClient, sesClient, diff --git a/javascriptv3/example_code/cross-services/aurora-serverless-app/src/types/item.d.ts b/javascriptv3/example_code/cross-services/aurora-serverless-app/src/types/item.ts similarity index 94% rename from javascriptv3/example_code/cross-services/aurora-serverless-app/src/types/item.d.ts rename to javascriptv3/example_code/cross-services/aurora-serverless-app/src/types/item.ts index 3544cd094fb..25ae57cd064 100644 --- a/javascriptv3/example_code/cross-services/aurora-serverless-app/src/types/item.d.ts +++ b/javascriptv3/example_code/cross-services/aurora-serverless-app/src/types/item.ts @@ -1,6 +1,7 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -declare type Item = { + +export type Item = { /** * A UUID that is generated by the middleware. */ @@ -31,5 +32,3 @@ declare type Item = { */ archived: boolean; }; - -export type { Item }; diff --git a/javascriptv3/example_code/cross-services/aurora-serverless-app/src/types/sendable.d.ts b/javascriptv3/example_code/cross-services/aurora-serverless-app/src/types/sendable.ts similarity index 84% rename from javascriptv3/example_code/cross-services/aurora-serverless-app/src/types/sendable.d.ts rename to javascriptv3/example_code/cross-services/aurora-serverless-app/src/types/sendable.ts index 3fe0d16c6d2..8938b37e934 100644 --- a/javascriptv3/example_code/cross-services/aurora-serverless-app/src/types/sendable.d.ts +++ b/javascriptv3/example_code/cross-services/aurora-serverless-app/src/types/sendable.ts @@ -1,6 +1,6 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -declare interface Sendable { +export interface Sendable { send: (command: unknown) => Promise; } diff --git a/javascriptv3/example_code/cross-services/aurora-serverless-app/tests/parse-item.unit.test.ts b/javascriptv3/example_code/cross-services/aurora-serverless-app/tests/parse-item.unit.test.ts index 0e6f14bfbc6..659dc0df219 100644 --- a/javascriptv3/example_code/cross-services/aurora-serverless-app/tests/parse-item.unit.test.ts +++ b/javascriptv3/example_code/cross-services/aurora-serverless-app/tests/parse-item.unit.test.ts @@ -1,8 +1,10 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 + import { describe, it, expect } from "vitest"; import type { Item } from "src/types/item.js"; import { parseItem } from "../src/handlers/parse-item.js"; +import type { DBRecord } from "../src/types/db-record.js"; describe("parseItem", () => { it("should convert a DBRecord into an Item", () => { diff --git a/javascriptv3/example_code/cross-services/aurora-serverless-app/tests/validate-db.unit.test.ts b/javascriptv3/example_code/cross-services/aurora-serverless-app/tests/validate-db.unit.test.ts index 0fd75d8bef6..37265ea20f2 100644 --- a/javascriptv3/example_code/cross-services/aurora-serverless-app/tests/validate-db.unit.test.ts +++ b/javascriptv3/example_code/cross-services/aurora-serverless-app/tests/validate-db.unit.test.ts @@ -3,6 +3,7 @@ import { describe, expect, it, vi } from "vitest"; import type { NextFunction, Request, Response } from "express"; import { errorCodes, validateDb } from "../src/middleware/validate-db.js"; +import type { Sendable } from "../src/types/sendable.ts"; describe("validate-db", () => { describe("generated handler", () => { diff --git a/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/clean-up-handler.js b/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/clean-up-handler.js index 64bda8684f3..7dac95704fc 100644 --- a/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/clean-up-handler.js +++ b/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/clean-up-handler.js @@ -1,7 +1,7 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import { readdirSync } from "node:fs"; -import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; +import { logger } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; import { deleteFiles, dirnameFromMetaUrl, @@ -38,7 +38,7 @@ const getTmpFiles = getFilesByExt(".tmp"); * @param {string[]} functionNames */ const cleanUpFunctions = (functionNames) => - Promise.all(functionNames.map((n) => deleteFunction(n).catch(log))); + Promise.all(functionNames.map((n) => deleteFunction(n).catch(logger.error))); /** * @param {string[]} tmpFileNames @@ -47,9 +47,9 @@ const cleanUpTmpFiles = (tmpFileNames) => deleteFiles(tmpFileNames.map((tmpFileName) => `./${tmpFileName}`)); const cleanUpRolePolicy = (policyArn, roleName) => - detachRolePolicy(policyArn, roleName).catch(log); + detachRolePolicy(policyArn, roleName).catch(logger.error); -const cleanUpRole = (roleName) => deleteRole(roleName).catch(log); +const cleanUpRole = (roleName) => deleteRole(roleName).catch(logger.error); const cleanUpHandler = async () => { const zippedFuncs = getZipFiles(`${dirname}../../../functions/`); @@ -57,26 +57,26 @@ const cleanUpHandler = async () => { const funcNames = zippedFuncs.map((zip) => zip.split(".zip")[0]); try { - log("Tidying up"); + logger.log("Tidying up"); - log("Deleting Lambda functions."); + logger.log("Deleting Lambda functions."); await cleanUpFunctions(funcNames); - log("Removing policy from role created during initialization."); + logger.log("Removing policy from role created during initialization."); await cleanUpRolePolicy( ARN_POLICY_LAMBDA_BASIC_EXECUTION, NAME_ROLE_LAMBDA, ); - log("Deleting role created during initialization."); + logger.log("Deleting role created during initialization."); await cleanUpRole(NAME_ROLE_LAMBDA); - log("Removing temporary files."); + logger.log("Removing temporary files."); cleanUpTmpFiles(tmpFiles); - log("All done ✨."); + logger.log("All done ✨."); } catch (err) { - log(err); + logger.error(err); } }; diff --git a/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/create-function-handler.js b/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/create-function-handler.js index 5a57df22e98..43b9e4f558e 100644 --- a/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/create-function-handler.js +++ b/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/create-function-handler.js @@ -1,6 +1,6 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; +import { logger } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; import { getTmp } from "@aws-doc-sdk-examples/lib/utils/util-fs.js"; import { createFunction } from "../../../actions/create-function.js"; @@ -12,18 +12,20 @@ const createFunctionHandler = async (commands) => { const roleArn = getTmp("roleArn"); if (!(funcName && roleArn)) { - log( + logger.log( "Either the function name or .tmp file is missing. Did you initialize?", ); return; } try { - log(`Asking Lambda to create ${funcName}...`); + logger.log(`Asking Lambda to create ${funcName}...`); await createFunction(funcName, roleArn); - log(`Lambda is creating ${funcName}. Check the AWS Management Console.`); + logger.log( + `Lambda is creating ${funcName}. Check the AWS Management Console.`, + ); } catch (err) { - log(err); + logger.error(err); } }; diff --git a/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/initialize-handler.js b/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/initialize-handler.js index 0e2e0f2ce72..21f0a602f5a 100644 --- a/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/initialize-handler.js +++ b/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/initialize-handler.js @@ -1,6 +1,6 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; +import { logger } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; import { getTmp, setTmp } from "@aws-doc-sdk-examples/lib/utils/util-fs.js"; import { attachRolePolicy } from "../../../../iam/actions/attach-role-policy.js"; import { createRole } from "../../../../iam/actions/create-role.js"; @@ -12,31 +12,31 @@ import { const initializeHandler = async () => { const tmp = getTmp("roleArn"); if (tmp) { - log("You've already initialized."); + logger.log("You've already initialized."); return; } try { /** snippet-start:[javascript.v3.lambda.scenarios.basic.CreateRole] */ - log(`Creating role (${NAME_ROLE_LAMBDA})...`); + logger.log(`Creating role (${NAME_ROLE_LAMBDA})...`); const response = await createRole(NAME_ROLE_LAMBDA); /** snippet-end:[javascript.v3.lambda.scenarios.basic.CreateRole] */ - log( + logger.log( `${NAME_ROLE_LAMBDA} created successfully. Saving Role ARN for later use.`, ); setTmp("roleArn", response.Role ? response.Role.Arn : null); - log( + logger.log( `Attaching policy ${ARN_POLICY_LAMBDA_BASIC_EXECUTION} to ${NAME_ROLE_LAMBDA}...`, ); await attachRolePolicy(ARN_POLICY_LAMBDA_BASIC_EXECUTION, NAME_ROLE_LAMBDA); - log( + logger.log( `${ARN_POLICY_LAMBDA_BASIC_EXECUTION} successfully attached to ${NAME_ROLE_LAMBDA}`, ); } catch (err) { - log(err); + logger.error(err); } }; diff --git a/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/invoke-handler.js b/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/invoke-handler.js index 5a31bd37499..47f13948462 100644 --- a/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/invoke-handler.js +++ b/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/invoke-handler.js @@ -1,29 +1,29 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; +import { logger } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; import { invoke } from "../../../actions/invoke.js"; const invokeHandler = async (commands) => { const [_, funcName, ...funcArgs] = commands; if (!funcName) { - log( + logger.log( `Function name is missing. It must be provided as an argument to the 'invoke' command.`, ); return; } try { - log( + logger.log( `Invoking ${funcName} with ${typeof funcArgs}(${JSON.stringify( funcArgs, )})...`, ); const { logs, result } = await invoke(funcName, funcArgs); - log(`${funcName} invoked successfully. Result was: ${result}`); - log(`Logs: ${logs}`); + logger.log(`${funcName} invoked successfully. Result was: ${result}`); + logger.log(`Logs: ${logs}`); } catch (err) { - log(err); + logger.error(err); } }; diff --git a/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/list-functions-handler.js b/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/list-functions-handler.js index 357d9afd78d..a023dec69fe 100644 --- a/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/list-functions-handler.js +++ b/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/list-functions-handler.js @@ -1,6 +1,6 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; +import { logger } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; import { listFunctions } from "../../../actions/list-functions.js"; const makeListItem = (s) => `• ${s}`; @@ -21,13 +21,13 @@ const getFunctionNames = (response) => const listFunctionsHandler = async () => { try { - log("Getting function list..."); + logger.log("Getting function list..."); const response = await listFunctions(); const functionList = getFunctionNames(response); - log(functionList); + logger.log(functionList); } catch (err) { - log(err); + logger.error(err); } }; diff --git a/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/update-function-code-handler.js b/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/update-function-code-handler.js index ea27ff99f63..3181a8d07e5 100644 --- a/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/update-function-code-handler.js +++ b/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/update-function-code-handler.js @@ -1,6 +1,6 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; +import { logger } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; import { updateFunctionCode } from "../../../actions/update-function-code.js"; const updateFunctionHandler = async (commands) => { @@ -8,11 +8,11 @@ const updateFunctionHandler = async (commands) => { const replacementFunc = funcCode || funcName; try { - log(`Updating ${funcName} with code from ${replacementFunc}...`); + logger.log(`Updating ${funcName} with code from ${replacementFunc}...`); await updateFunctionCode(funcName, replacementFunc); - log(`${funcName} updated successfully.`); + logger.log(`${funcName} updated successfully.`); } catch (err) { - log(err); + logger.error(err); } }; diff --git a/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/update-function-configuration-handler.js b/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/update-function-configuration-handler.js index 3d81f7309fc..982a041d93d 100644 --- a/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/update-function-configuration-handler.js +++ b/javascriptv3/example_code/lambda/scenarios/basic/command-handlers/update-function-configuration-handler.js @@ -1,16 +1,16 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; +import { logger } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; import { updateFunctionConfiguration } from "../../../actions/update-function-configuration.js"; const updateFunctionConfigurationHandler = async (commands) => { const [_, funcName] = commands; try { - log(`Updating configuration for ${funcName}...`); + logger.log(`Updating configuration for ${funcName}...`); await updateFunctionConfiguration(funcName); - log(`Configuration for ${funcName} updated.`); + logger.log(`Configuration for ${funcName} updated.`); } catch (err) { - log(err); + logger.error(err); } }; diff --git a/javascriptv3/example_code/lambda/scenarios/basic/index.js b/javascriptv3/example_code/lambda/scenarios/basic/index.js index 533b76b9f14..75e467a93e5 100644 --- a/javascriptv3/example_code/lambda/scenarios/basic/index.js +++ b/javascriptv3/example_code/lambda/scenarios/basic/index.js @@ -4,7 +4,6 @@ import { createInterface } from "node:readline"; import { stdin as input, stdout as output } from "node:process"; import { readCommands } from "@aws-doc-sdk-examples/lib/cmd-runner.js"; -import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; import { startsWith } from "@aws-doc-sdk-examples/lib/utils/util-array.js"; import { initializeHandler } from "./command-handlers/initialize-handler.js"; @@ -49,7 +48,7 @@ usage: [] `; const handlers = [ - [startsWith(["help"]), () => log(help)], + [startsWith(["help"]), () => console.log(help)], [startsWith(["initialize"]), initializeHandler], [startsWith(["create-function"]), createFunctionHandler], [startsWith(["update-function-code"]), updateFunctionHandler], diff --git a/javascriptv3/example_code/lambda/tests/lambda-actions.integration.test.js b/javascriptv3/example_code/lambda/tests/lambda-actions.integration.test.js index 09c222c6e00..79b8ad13dcc 100644 --- a/javascriptv3/example_code/lambda/tests/lambda-actions.integration.test.js +++ b/javascriptv3/example_code/lambda/tests/lambda-actions.integration.test.js @@ -10,7 +10,7 @@ import { waitUntilRoleExists, } from "@aws-sdk/client-iam"; -import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; +import { logger } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; import { retry } from "@aws-doc-sdk-examples/lib/utils/util-timers.js"; import { @@ -66,7 +66,7 @@ describe("Creating, getting, invoking, listing, updating, and deleting", () => { }); await iamClient.send(attachRolePolicyCommand); } catch (err) { - log(err); + logger.error(err); throw err; } }); @@ -81,7 +81,7 @@ describe("Creating, getting, invoking, listing, updating, and deleting", () => { const deleteRoleCommand = new DeleteRoleCommand({ RoleName: roleName }); await iamClient.send(deleteRoleCommand); } catch (err) { - log(err); + logger.error(err); throw err; } @@ -90,7 +90,7 @@ describe("Creating, getting, invoking, listing, updating, and deleting", () => { // before the deletion step. await deleteFunction(funcName); } catch (err) { - log(err); + logger.error(err); } }); diff --git a/javascriptv3/example_code/libs/cmd-runner.js b/javascriptv3/example_code/libs/cmd-runner.js index 807995b0b78..6cc44430e00 100644 --- a/javascriptv3/example_code/libs/cmd-runner.js +++ b/javascriptv3/example_code/libs/cmd-runner.js @@ -1,7 +1,7 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import { startsWith } from "./utils/util-array.js"; -import { log } from "./utils/util-log.js"; +import { logger } from "./utils/util-log.js"; /** * @typedef {(...args: unknown[]) => void} HandlerFn @@ -42,7 +42,7 @@ function readCommands({ reader, handlers }) { return reader.close(); } - return log("Command not recognized."); + return logger.error("Command not recognized."); }); } diff --git a/javascriptv3/example_code/libs/tests/util-log.unit.test.js b/javascriptv3/example_code/libs/tests/util-log.unit.test.js deleted file mode 100644 index 75f4b3750d4..00000000000 --- a/javascriptv3/example_code/libs/tests/util-log.unit.test.js +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. -// SPDX-License-Identifier: Apache-2.0 -import { it, describe, expect } from "vitest"; -import { log } from "../utils/util-log"; - -describe("log", () => { - it("should parse a string from an object", () => { - expect(log({})).toEqual("{}"); - }); -}); diff --git a/javascriptv3/example_code/libs/utils/util-fs.js b/javascriptv3/example_code/libs/utils/util-fs.js index f290e3f3b38..1e5cb16338e 100644 --- a/javascriptv3/example_code/libs/utils/util-fs.js +++ b/javascriptv3/example_code/libs/utils/util-fs.js @@ -12,7 +12,7 @@ import { } from "node:fs"; import archiver from "archiver"; import { fileURLToPath } from "node:url"; -import { log } from "./util-log.js"; +import { logger } from "./util-log.js"; import { splitMapTrim } from "./util-string.js"; /** @@ -40,12 +40,12 @@ export const setTmp = (name, data) => writeFileSync(`./${name}.tmp`, data, { encoding: "utf-8" }); export const handleZipWarning = (resolve) => (w) => { - log(w); + logger.log(w); resolve(); }; export const handleZipEnd = (resolve, path) => async () => { - log("Zipped successfully."); + logger.log("Zipped successfully."); const buffer = await readFile(path); resolve(buffer); }; @@ -72,7 +72,7 @@ export const zip = (inputPath) => return; } const archive = archiver("zip"); - log(`Zipping ${inputPath}...`); + logger.log(`Zipping ${inputPath}...`); const output = createWriteStream(`${inputPath}.zip`); output.on("close", handleZipEnd(resolve, `${inputPath}.zip`)); diff --git a/javascriptv3/example_code/libs/utils/util-log.js b/javascriptv3/example_code/libs/utils/util-log.js index fd24cdbe9d1..8c2de93421a 100644 --- a/javascriptv3/example_code/libs/utils/util-log.js +++ b/javascriptv3/example_code/libs/utils/util-log.js @@ -10,6 +10,19 @@ export const log = (str) => { return parsed; }; +export const logger = { + log: console.log, + warn: (message) => { + console.warn(`[WARNING] ${message}`); + }, + debug: (message) => { + console.debug(`[DEBUG ${new Date().toISOString()}] ${message}`); + }, + error: (message) => { + console.error(`[ERROR] ${message}`); + }, +}; + export class ProgressBar { /** * Create a progress bar that will display in the console. diff --git a/javascriptv3/example_code/s3/scenarios/multipart-upload.js b/javascriptv3/example_code/s3/scenarios/multipart-upload.js index 9bfdc2876d8..15c96f20077 100644 --- a/javascriptv3/example_code/s3/scenarios/multipart-upload.js +++ b/javascriptv3/example_code/s3/scenarios/multipart-upload.js @@ -5,7 +5,10 @@ import { S3Client } from "@aws-sdk/client-s3"; import { Upload } from "@aws-sdk/lib-storage"; -import { ProgressBar } from "@aws-doc-sdk-examples/lib/utils/util-log.js"; +import { + ProgressBar, + logger, +} from "@aws-doc-sdk-examples/lib/utils/util-log.js"; const twentyFiveMB = 25 * 1024 * 1024; @@ -43,7 +46,7 @@ export const main = async ({ bucketName, key }) => { await upload.done(); } catch (caught) { if (caught instanceof Error && caught.name === "AbortError") { - console.error(`Multipart upload was aborted. ${caught.message}`); + logger.error(`Multipart upload was aborted. ${caught.message}`); } else { throw caught; } @@ -80,6 +83,6 @@ if (isMain(import.meta.url)) { if (!errors) { main(results.values); } else { - console.error(errors.join("\n")); + logger.error(errors.join("\n")); } } diff --git a/javascriptv3/example_code/ssm/scenarios/ssm-basics.js b/javascriptv3/example_code/ssm/scenarios/ssm-basics.js index 83f33594232..a7f54e6cd65 100644 --- a/javascriptv3/example_code/ssm/scenarios/ssm-basics.js +++ b/javascriptv3/example_code/ssm/scenarios/ssm-basics.js @@ -162,7 +162,7 @@ const sdkCreateSSMDoc = new ScenarioAction( }), ); } catch (caught) { - console.log(`Exception type: (${typeof e})`); + console.log(`Exception type: (${typeof caught})`); if (caught instanceof DocumentAlreadyExists) { console.log("Document already exists. Continuing...\n"); } else {