diff --git a/package-lock.json b/package-lock.json index d529d4a6f38..e4a27321110 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12740,6 +12740,1575 @@ "node": ">=16.0.0" } }, + "node_modules/@aws-sdk/client-redshift": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-redshift/-/client-redshift-3.693.0.tgz", + "integrity": "sha512-k+4emXXK7iOOYjTAU+Erj5RVxu68Hi6iI48h5r8iNMhWRUMqUq346tK5qkD4C4x9SzJu5j0WgPWpVUiHu8ufDw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.693.0", + "@aws-sdk/client-sts": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.1.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-data": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-redshift-data/-/client-redshift-data-3.693.0.tgz", + "integrity": "sha512-uG5LdlXz80KcauRIucMdiRSQJ2WutewQRHpcTQW4vFUf/kEhUha5fD9FMn+/eJ1NFA2N8hv64vhpzGvu7EiP6Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.693.0", + "@aws-sdk/client-sts": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "@types/uuid": "^9.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/client-sso": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.693.0.tgz", + "integrity": "sha512-QEynrBC26x6TG9ZMzApR/kZ3lmt4lEIs2D+cHuDxt6fDGzahBUsQFBwJqhizzsM97JJI5YvmJhmihoYjdSSaXA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.693.0.tgz", + "integrity": "sha512-UEDbYlYtK/e86OOMyFR4zEPyenIxDzO2DRdz3fwVW7RzZ94wfmSwBh/8skzPTuY1G7sI064cjHW0b0QG01Sdtg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/client-sts": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.693.0.tgz", + "integrity": "sha512-4S2y7VEtvdnjJX4JPl4kDQlslxXEZFnC50/UXVUYSt/AMc5A/GgspFNA5FVz4E3Gwpfobbf23hR2NBF8AGvYoQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/core": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.693.0.tgz", + "integrity": "sha512-v6Z/kWmLFqRLDPEwl9hJGhtTgIFHjZugSfF1Yqffdxf4n1AWgtHS7qSegakuMyN5pP4K2tvUD8qHJ+gGe2Bw2A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/core": "^2.5.2", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/property-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.6", + "@smithy/signature-v4": "^4.2.2", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/util-middleware": "^3.0.9", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.693.0.tgz", + "integrity": "sha512-sL8MvwNJU7ZpD7/d2VVb3by1GknIJUxzTIgYtVkDVA/ojo+KRQSSHxcj0EWWXF5DTSh2Tm+LrEug3y1ZyKHsDA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/util-stream": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.693.0.tgz", + "integrity": "sha512-kvaa4mXhCCOuW7UQnBhYqYfgWmwy7WSBSDClutwSLPZvgrhYj2l16SD2lN4IfYdxARYMJJ1lFYp3/jJG/9Yk4Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-env": "3.693.0", + "@aws-sdk/credential-provider-http": "3.693.0", + "@aws-sdk/credential-provider-process": "3.693.0", + "@aws-sdk/credential-provider-sso": "3.693.0", + "@aws-sdk/credential-provider-web-identity": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/credential-provider-imds": "^3.2.6", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.693.0.tgz", + "integrity": "sha512-42WMsBjTNnjYxYuM3qD/Nq+8b7UdMopUq5OduMDxoM3mFTV6PXMMnfI4Z1TNnR4tYRvPXAnuNltF6xmjKbSJRA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.693.0", + "@aws-sdk/credential-provider-http": "3.693.0", + "@aws-sdk/credential-provider-ini": "3.693.0", + "@aws-sdk/credential-provider-process": "3.693.0", + "@aws-sdk/credential-provider-sso": "3.693.0", + "@aws-sdk/credential-provider-web-identity": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/credential-provider-imds": "^3.2.6", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.693.0.tgz", + "integrity": "sha512-479UlJxY+BFjj3pJFYUNC0DCMrykuG7wBAXfsvZqQxKUa83DnH5Q1ID/N2hZLkxjGd4ZW0AC3lTOMxFelGzzpQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/token-providers": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.693.0.tgz", + "integrity": "sha512-8LB210Pr6VeCiSb2hIra+sAH4KUBLyGaN50axHtIgufVK8jbKIctTZcVY5TO9Se+1107TsruzeXS7VeqVdJfFA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.693.0.tgz", + "integrity": "sha512-BCki6sAZ5jYwIN/t3ElCiwerHad69ipHwPsDCxJQyeiOnJ8HG+lEpnVIfrnI8A0fLQNSF3Gtx6ahfBpKiv1Oug==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/middleware-logger": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.693.0.tgz", + "integrity": "sha512-dXnXDPr+wIiJ1TLADACI1g9pkSB21KkMIko2u4CJ2JCBoxi5IqeTnVoa6YcC8GdFNVRl+PorZ3Zqfmf1EOTC6w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.693.0.tgz", + "integrity": "sha512-0LDmM+VxXp0u3rG0xQRWD/q6Ubi7G8I44tBPahevD5CaiDZTkmNTrVUf0VEJgVe0iCKBppACMBDkLB0/ETqkFw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.693.0.tgz", + "integrity": "sha512-/KUq/KEpFFbQmNmpp7SpAtFAdViquDfD2W0QcG07zYBfz9MwE2ig48ALynXm5sMpRmnG7sJXjdvPtTsSVPfkiw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@smithy/core": "^2.5.2", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.693.0.tgz", + "integrity": "sha512-YLUkMsUY0GLW/nfwlZ69cy1u07EZRmsv8Z9m0qW317/EZaVx59hcvmcvb+W4bFqj5E8YImTjoGfE4cZ0F9mkyw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/types": "^3.7.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.9", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/token-providers": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.693.0.tgz", + "integrity": "sha512-nDBTJMk1l/YmFULGfRbToOA2wjf+FkQT4dMgYCv+V9uSYsMzQj8A7Tha2dz9yv4vnQgYaEiErQ8d7HVyXcVEoA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/util-endpoints": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.693.0.tgz", + "integrity": "sha512-eo4F6DRQ/kxS3gxJpLRv+aDNy76DxQJL5B3DPzpr9Vkq0ygVoi4GT5oIZLVaAVIJmi6k5qq9dLsYZfWLUxJJSg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", + "@smithy/util-endpoints": "^2.1.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.693.0.tgz", + "integrity": "sha512-6EUfuKOujtddy18OLJUaXfKBgs+UcbZ6N/3QV4iOkubCUdeM1maIqs++B9bhCbWeaeF5ORizJw5FTwnyNjE/mw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.693.0.tgz", + "integrity": "sha512-td0OVX8m5ZKiXtecIDuzY3Y3UZIzvxEr57Hp21NOwieqKCG2UeyQWWeGPv0FQaU7dpTkvFmVNI+tx9iB8V/Nhg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/client-redshift-data/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-data/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-data/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-serverless": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-redshift-serverless/-/client-redshift-serverless-3.693.0.tgz", + "integrity": "sha512-m6Bhw0Xx/x0KGKP9N7c+Jqs5VT6nkZbfwO+QTxllggsuNfAzGwluCw1hoY++/MQ9oFtioEu+ud7xWOlTIK8w/A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.693.0", + "@aws-sdk/client-sts": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/client-sso": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.693.0.tgz", + "integrity": "sha512-QEynrBC26x6TG9ZMzApR/kZ3lmt4lEIs2D+cHuDxt6fDGzahBUsQFBwJqhizzsM97JJI5YvmJhmihoYjdSSaXA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.693.0.tgz", + "integrity": "sha512-UEDbYlYtK/e86OOMyFR4zEPyenIxDzO2DRdz3fwVW7RzZ94wfmSwBh/8skzPTuY1G7sI064cjHW0b0QG01Sdtg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/client-sts": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.693.0.tgz", + "integrity": "sha512-4S2y7VEtvdnjJX4JPl4kDQlslxXEZFnC50/UXVUYSt/AMc5A/GgspFNA5FVz4E3Gwpfobbf23hR2NBF8AGvYoQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/core": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.693.0.tgz", + "integrity": "sha512-v6Z/kWmLFqRLDPEwl9hJGhtTgIFHjZugSfF1Yqffdxf4n1AWgtHS7qSegakuMyN5pP4K2tvUD8qHJ+gGe2Bw2A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/core": "^2.5.2", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/property-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.6", + "@smithy/signature-v4": "^4.2.2", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/util-middleware": "^3.0.9", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.693.0.tgz", + "integrity": "sha512-sL8MvwNJU7ZpD7/d2VVb3by1GknIJUxzTIgYtVkDVA/ojo+KRQSSHxcj0EWWXF5DTSh2Tm+LrEug3y1ZyKHsDA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/util-stream": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.693.0.tgz", + "integrity": "sha512-kvaa4mXhCCOuW7UQnBhYqYfgWmwy7WSBSDClutwSLPZvgrhYj2l16SD2lN4IfYdxARYMJJ1lFYp3/jJG/9Yk4Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-env": "3.693.0", + "@aws-sdk/credential-provider-http": "3.693.0", + "@aws-sdk/credential-provider-process": "3.693.0", + "@aws-sdk/credential-provider-sso": "3.693.0", + "@aws-sdk/credential-provider-web-identity": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/credential-provider-imds": "^3.2.6", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.693.0.tgz", + "integrity": "sha512-42WMsBjTNnjYxYuM3qD/Nq+8b7UdMopUq5OduMDxoM3mFTV6PXMMnfI4Z1TNnR4tYRvPXAnuNltF6xmjKbSJRA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.693.0", + "@aws-sdk/credential-provider-http": "3.693.0", + "@aws-sdk/credential-provider-ini": "3.693.0", + "@aws-sdk/credential-provider-process": "3.693.0", + "@aws-sdk/credential-provider-sso": "3.693.0", + "@aws-sdk/credential-provider-web-identity": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/credential-provider-imds": "^3.2.6", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.693.0.tgz", + "integrity": "sha512-479UlJxY+BFjj3pJFYUNC0DCMrykuG7wBAXfsvZqQxKUa83DnH5Q1ID/N2hZLkxjGd4ZW0AC3lTOMxFelGzzpQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/token-providers": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.693.0.tgz", + "integrity": "sha512-8LB210Pr6VeCiSb2hIra+sAH4KUBLyGaN50axHtIgufVK8jbKIctTZcVY5TO9Se+1107TsruzeXS7VeqVdJfFA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.693.0.tgz", + "integrity": "sha512-BCki6sAZ5jYwIN/t3ElCiwerHad69ipHwPsDCxJQyeiOnJ8HG+lEpnVIfrnI8A0fLQNSF3Gtx6ahfBpKiv1Oug==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/middleware-logger": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.693.0.tgz", + "integrity": "sha512-dXnXDPr+wIiJ1TLADACI1g9pkSB21KkMIko2u4CJ2JCBoxi5IqeTnVoa6YcC8GdFNVRl+PorZ3Zqfmf1EOTC6w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.693.0.tgz", + "integrity": "sha512-0LDmM+VxXp0u3rG0xQRWD/q6Ubi7G8I44tBPahevD5CaiDZTkmNTrVUf0VEJgVe0iCKBppACMBDkLB0/ETqkFw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.693.0.tgz", + "integrity": "sha512-/KUq/KEpFFbQmNmpp7SpAtFAdViquDfD2W0QcG07zYBfz9MwE2ig48ALynXm5sMpRmnG7sJXjdvPtTsSVPfkiw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@smithy/core": "^2.5.2", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.693.0.tgz", + "integrity": "sha512-YLUkMsUY0GLW/nfwlZ69cy1u07EZRmsv8Z9m0qW317/EZaVx59hcvmcvb+W4bFqj5E8YImTjoGfE4cZ0F9mkyw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/types": "^3.7.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.9", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/token-providers": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.693.0.tgz", + "integrity": "sha512-nDBTJMk1l/YmFULGfRbToOA2wjf+FkQT4dMgYCv+V9uSYsMzQj8A7Tha2dz9yv4vnQgYaEiErQ8d7HVyXcVEoA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/util-endpoints": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.693.0.tgz", + "integrity": "sha512-eo4F6DRQ/kxS3gxJpLRv+aDNy76DxQJL5B3DPzpr9Vkq0ygVoi4GT5oIZLVaAVIJmi6k5qq9dLsYZfWLUxJJSg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", + "@smithy/util-endpoints": "^2.1.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.693.0.tgz", + "integrity": "sha512-6EUfuKOujtddy18OLJUaXfKBgs+UcbZ6N/3QV4iOkubCUdeM1maIqs++B9bhCbWeaeF5ORizJw5FTwnyNjE/mw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.693.0.tgz", + "integrity": "sha512-td0OVX8m5ZKiXtecIDuzY3Y3UZIzvxEr57Hp21NOwieqKCG2UeyQWWeGPv0FQaU7dpTkvFmVNI+tx9iB8V/Nhg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/client-sso": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.693.0.tgz", + "integrity": "sha512-QEynrBC26x6TG9ZMzApR/kZ3lmt4lEIs2D+cHuDxt6fDGzahBUsQFBwJqhizzsM97JJI5YvmJhmihoYjdSSaXA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.693.0.tgz", + "integrity": "sha512-UEDbYlYtK/e86OOMyFR4zEPyenIxDzO2DRdz3fwVW7RzZ94wfmSwBh/8skzPTuY1G7sI064cjHW0b0QG01Sdtg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/client-sts": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.693.0.tgz", + "integrity": "sha512-4S2y7VEtvdnjJX4JPl4kDQlslxXEZFnC50/UXVUYSt/AMc5A/GgspFNA5FVz4E3Gwpfobbf23hR2NBF8AGvYoQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/core": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.693.0.tgz", + "integrity": "sha512-v6Z/kWmLFqRLDPEwl9hJGhtTgIFHjZugSfF1Yqffdxf4n1AWgtHS7qSegakuMyN5pP4K2tvUD8qHJ+gGe2Bw2A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/core": "^2.5.2", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/property-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.6", + "@smithy/signature-v4": "^4.2.2", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/util-middleware": "^3.0.9", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.693.0.tgz", + "integrity": "sha512-sL8MvwNJU7ZpD7/d2VVb3by1GknIJUxzTIgYtVkDVA/ojo+KRQSSHxcj0EWWXF5DTSh2Tm+LrEug3y1ZyKHsDA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/util-stream": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.693.0.tgz", + "integrity": "sha512-kvaa4mXhCCOuW7UQnBhYqYfgWmwy7WSBSDClutwSLPZvgrhYj2l16SD2lN4IfYdxARYMJJ1lFYp3/jJG/9Yk4Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-env": "3.693.0", + "@aws-sdk/credential-provider-http": "3.693.0", + "@aws-sdk/credential-provider-process": "3.693.0", + "@aws-sdk/credential-provider-sso": "3.693.0", + "@aws-sdk/credential-provider-web-identity": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/credential-provider-imds": "^3.2.6", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.693.0.tgz", + "integrity": "sha512-42WMsBjTNnjYxYuM3qD/Nq+8b7UdMopUq5OduMDxoM3mFTV6PXMMnfI4Z1TNnR4tYRvPXAnuNltF6xmjKbSJRA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.693.0", + "@aws-sdk/credential-provider-http": "3.693.0", + "@aws-sdk/credential-provider-ini": "3.693.0", + "@aws-sdk/credential-provider-process": "3.693.0", + "@aws-sdk/credential-provider-sso": "3.693.0", + "@aws-sdk/credential-provider-web-identity": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/credential-provider-imds": "^3.2.6", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.693.0.tgz", + "integrity": "sha512-479UlJxY+BFjj3pJFYUNC0DCMrykuG7wBAXfsvZqQxKUa83DnH5Q1ID/N2hZLkxjGd4ZW0AC3lTOMxFelGzzpQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/token-providers": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.693.0.tgz", + "integrity": "sha512-8LB210Pr6VeCiSb2hIra+sAH4KUBLyGaN50axHtIgufVK8jbKIctTZcVY5TO9Se+1107TsruzeXS7VeqVdJfFA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.693.0.tgz", + "integrity": "sha512-BCki6sAZ5jYwIN/t3ElCiwerHad69ipHwPsDCxJQyeiOnJ8HG+lEpnVIfrnI8A0fLQNSF3Gtx6ahfBpKiv1Oug==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/middleware-logger": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.693.0.tgz", + "integrity": "sha512-dXnXDPr+wIiJ1TLADACI1g9pkSB21KkMIko2u4CJ2JCBoxi5IqeTnVoa6YcC8GdFNVRl+PorZ3Zqfmf1EOTC6w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.693.0.tgz", + "integrity": "sha512-0LDmM+VxXp0u3rG0xQRWD/q6Ubi7G8I44tBPahevD5CaiDZTkmNTrVUf0VEJgVe0iCKBppACMBDkLB0/ETqkFw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.693.0.tgz", + "integrity": "sha512-/KUq/KEpFFbQmNmpp7SpAtFAdViquDfD2W0QcG07zYBfz9MwE2ig48ALynXm5sMpRmnG7sJXjdvPtTsSVPfkiw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@smithy/core": "^2.5.2", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.693.0.tgz", + "integrity": "sha512-YLUkMsUY0GLW/nfwlZ69cy1u07EZRmsv8Z9m0qW317/EZaVx59hcvmcvb+W4bFqj5E8YImTjoGfE4cZ0F9mkyw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/types": "^3.7.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.9", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/token-providers": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.693.0.tgz", + "integrity": "sha512-nDBTJMk1l/YmFULGfRbToOA2wjf+FkQT4dMgYCv+V9uSYsMzQj8A7Tha2dz9yv4vnQgYaEiErQ8d7HVyXcVEoA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/util-endpoints": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.693.0.tgz", + "integrity": "sha512-eo4F6DRQ/kxS3gxJpLRv+aDNy76DxQJL5B3DPzpr9Vkq0ygVoi4GT5oIZLVaAVIJmi6k5qq9dLsYZfWLUxJJSg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", + "@smithy/util-endpoints": "^2.1.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.693.0.tgz", + "integrity": "sha512-6EUfuKOujtddy18OLJUaXfKBgs+UcbZ6N/3QV4iOkubCUdeM1maIqs++B9bhCbWeaeF5ORizJw5FTwnyNjE/mw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.693.0.tgz", + "integrity": "sha512-td0OVX8m5ZKiXtecIDuzY3Y3UZIzvxEr57Hp21NOwieqKCG2UeyQWWeGPv0FQaU7dpTkvFmVNI+tx9iB8V/Nhg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/client-redshift/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/@aws-sdk/client-s3": { "version": "3.693.0", "license": "Apache-2.0", @@ -35570,6 +37139,9 @@ "@aws-sdk/client-iot": "~3.693.0", "@aws-sdk/client-iotsecuretunneling": "~3.693.0", "@aws-sdk/client-lambda": "<3.731.0", + "@aws-sdk/client-redshift": "~3.693.0", + "@aws-sdk/client-redshift-data": "~3.693.0", + "@aws-sdk/client-redshift-serverless": "~3.693.0", "@aws-sdk/client-s3": "<3.731.0", "@aws-sdk/client-s3-control": "^3.830.0", "@aws-sdk/client-sagemaker": "<3.696.0", diff --git a/packages/core/package.json b/packages/core/package.json index 2db36548f68..3189af9588b 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -584,6 +584,9 @@ "@aws-sdk/client-iot": "~3.693.0", "@aws-sdk/client-iotsecuretunneling": "~3.693.0", "@aws-sdk/client-lambda": "<3.731.0", + "@aws-sdk/client-redshift": "~3.693.0", + "@aws-sdk/client-redshift-data": "~3.693.0", + "@aws-sdk/client-redshift-serverless": "~3.693.0", "@aws-sdk/client-s3": "<3.731.0", "@aws-sdk/client-s3-control": "^3.830.0", "@aws-sdk/client-sagemaker": "<3.696.0", diff --git a/packages/core/src/awsService/redshift/notebook/redshiftNotebookController.ts b/packages/core/src/awsService/redshift/notebook/redshiftNotebookController.ts index 1db972314d3..f71b93362ee 100644 --- a/packages/core/src/awsService/redshift/notebook/redshiftNotebookController.ts +++ b/packages/core/src/awsService/redshift/notebook/redshiftNotebookController.ts @@ -7,7 +7,7 @@ import * as vscode from 'vscode' import { DefaultRedshiftClient } from '../../../shared/clients/redshiftClient' import { ConnectionParams } from '../models/models' -import { RedshiftData } from 'aws-sdk' +import { ColumnMetadata, Field } from '@aws-sdk/client-redshift-data' import { telemetry } from '../../../shared/telemetry/telemetry' export class RedshiftNotebookController { @@ -79,8 +79,8 @@ export class RedshiftNotebookController { } let executionId: string | undefined - let columnMetadata: RedshiftData.ColumnMetadataList | undefined - const records: RedshiftData.SqlRecords = [] + let columnMetadata: ColumnMetadata[] | undefined + const records: Field[][] = [] let nextToken: string | undefined // get all the pages of the result do { @@ -90,7 +90,7 @@ export class RedshiftNotebookController { nextToken, executionId ) - if (result) { + if (result && result.statementResultResponse.Records) { nextToken = result.statementResultResponse.NextToken executionId = result.executionId columnMetadata = result.statementResultResponse.ColumnMetadata @@ -116,7 +116,7 @@ export class RedshiftNotebookController { }) } - public getAsTable(connectionParams: ConnectionParams, columns: string[], records: RedshiftData.SqlRecords) { + public getAsTable(connectionParams: ConnectionParams, columns: string[], records: Field[][]) { if (!records || records.length === 0) { return '

No records to display

' } diff --git a/packages/core/src/shared/clients/redshiftClient.ts b/packages/core/src/shared/clients/redshiftClient.ts index a0e98bc405e..5464f58f1d2 100644 --- a/packages/core/src/shared/clients/redshiftClient.ts +++ b/packages/core/src/shared/clients/redshiftClient.ts @@ -4,22 +4,43 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { Redshift, RedshiftServerless, RedshiftData } from 'aws-sdk' -import globals from '../extensionGlobals' -import { ClusterCredentials, ClustersMessage, GetClusterCredentialsMessage } from 'aws-sdk/clients/redshift' import { - GetCredentialsRequest, - GetCredentialsResponse, - ListWorkgroupsResponse, -} from 'aws-sdk/clients/redshiftserverless' + ClusterCredentials, + ClustersMessage, + DescribeClustersCommand, + DescribeClustersMessage, + GetClusterCredentialsCommand, + GetClusterCredentialsMessage, + RedshiftClient, +} from '@aws-sdk/client-redshift' import { + DescribeStatementCommand, DescribeStatementRequest, + ExecuteStatementCommand, + GetStatementResultCommand, GetStatementResultRequest, GetStatementResultResponse, + ListDatabasesCommand, + ListDatabasesRequest, ListDatabasesResponse, + ListSchemasCommand, + ListSchemasRequest, ListSchemasResponse, + ListTablesCommand, + ListTablesRequest, ListTablesResponse, -} from 'aws-sdk/clients/redshiftdata' + RedshiftDataClient, +} from '@aws-sdk/client-redshift-data' +import { + GetCredentialsCommand, + GetCredentialsRequest, + GetCredentialsResponse, + ListWorkgroupsCommand, + ListWorkgroupsRequest, + ListWorkgroupsResponse, + RedshiftServerlessClient, +} from '@aws-sdk/client-redshift-serverless' +import globals from '../extensionGlobals' import { ConnectionParams, ConnectionType, RedshiftWarehouseType } from '../../awsService/redshift/models/models' import { sleep } from '../utilities/timeoutUtils' import { SecretsManagerClient } from './secretsManagerClient' @@ -37,21 +58,21 @@ export class DefaultRedshiftClient { public readonly regionCode: string, private readonly redshiftDataClientProvider: ( regionCode: string - ) => Promise = createRedshiftDataClient, - private readonly redshiftClientProvider: (regionCode: string) => Promise = createRedshiftSdkClient, + ) => RedshiftDataClient = createRedshiftDataClient, + private readonly redshiftClientProvider: (regionCode: string) => RedshiftClient = createRedshiftSdkClient, private readonly redshiftServerlessClientProvider: ( regionCode: string - ) => Promise = createRedshiftServerlessSdkClient + ) => RedshiftServerlessClient = createRedshiftServerlessSdkClient ) {} // eslint-disable-next-line require-yield public async describeProvisionedClusters(nextToken?: string): Promise { - const redshiftClient = await this.redshiftClientProvider(this.regionCode) - const request: Redshift.DescribeClustersMessage = { + const redshiftClient = this.redshiftClientProvider(this.regionCode) + const request: DescribeClustersMessage = { Marker: nextToken, MaxRecords: 20, } - const response = await redshiftClient.describeClusters(request).promise() + const response = await redshiftClient.send(new DescribeClustersCommand(request)) if (response.Clusters) { response.Clusters = response.Clusters.filter( (cluster) => cluster.ClusterAvailabilityStatus?.toLowerCase() === 'available' @@ -61,12 +82,12 @@ export class DefaultRedshiftClient { } public async listServerlessWorkgroups(nextToken?: string): Promise { - const redshiftServerlessClient = await this.redshiftServerlessClientProvider(this.regionCode) - const request: RedshiftServerless.ListWorkgroupsRequest = { + const redshiftServerlessClient = this.redshiftServerlessClientProvider(this.regionCode) + const request: ListWorkgroupsRequest = { nextToken: nextToken, maxResults: 20, } - const response = await redshiftServerlessClient.listWorkgroups(request).promise() + const response = await redshiftServerlessClient.send(new ListWorkgroupsCommand(request)) if (response.workgroups) { response.workgroups = response.workgroups.filter( (workgroup) => workgroup.status?.toLowerCase() === 'available' @@ -76,10 +97,10 @@ export class DefaultRedshiftClient { } public async listDatabases(connectionParams: ConnectionParams, nextToken?: string): Promise { - const redshiftDataClient = await this.redshiftDataClientProvider(this.regionCode) + const redshiftDataClient = this.redshiftDataClientProvider(this.regionCode) const warehouseType = connectionParams.warehouseType const warehouseIdentifier = connectionParams.warehouseIdentifier - const input: RedshiftData.ListDatabasesRequest = { + const input: ListDatabasesRequest = { ClusterIdentifier: warehouseType === RedshiftWarehouseType.PROVISIONED ? warehouseIdentifier : undefined, Database: connectionParams.database, DbUser: @@ -94,13 +115,13 @@ export class DefaultRedshiftClient { ? connectionParams.secret : undefined, } - return redshiftDataClient.listDatabases(input).promise() + return redshiftDataClient.send(new ListDatabasesCommand(input)) } public async listSchemas(connectionParams: ConnectionParams, nextToken?: string): Promise { - const redshiftDataClient = await this.redshiftDataClientProvider(this.regionCode) + const redshiftDataClient = this.redshiftDataClientProvider(this.regionCode) const warehouseType = connectionParams.warehouseType const warehouseIdentifier = connectionParams.warehouseIdentifier - const input: RedshiftData.ListSchemasRequest = { + const input: ListSchemasRequest = { ClusterIdentifier: warehouseType === RedshiftWarehouseType.PROVISIONED ? warehouseIdentifier : undefined, Database: connectionParams.database, DbUser: @@ -114,7 +135,7 @@ export class DefaultRedshiftClient { ? connectionParams.secret : undefined, } - return redshiftDataClient.listSchemas(input).promise() + return redshiftDataClient.send(new ListSchemasCommand(input)) } public async listTables( @@ -122,10 +143,10 @@ export class DefaultRedshiftClient { schemaName: string, nextToken?: string ): Promise { - const redshiftDataClient = await this.redshiftDataClientProvider(this.regionCode) + const redshiftDataClient = this.redshiftDataClientProvider(this.regionCode) const warehouseType = connectionParams.warehouseType const warehouseIdentifier = connectionParams.warehouseIdentifier - const input: RedshiftData.ListTablesRequest = { + const input: ListTablesRequest = { ClusterIdentifier: warehouseType === RedshiftWarehouseType.PROVISIONED ? warehouseIdentifier : undefined, DbUser: connectionParams.username && connectionParams.connectionType !== ConnectionType.DatabaseUser @@ -140,7 +161,7 @@ export class DefaultRedshiftClient { ? connectionParams.secret : undefined, } - const ListTablesResponse = redshiftDataClient.listTables(input).promise() + const ListTablesResponse = redshiftDataClient.send(new ListTablesCommand(input)) return ListTablesResponse } @@ -150,11 +171,11 @@ export class DefaultRedshiftClient { nextToken?: string, executionId?: string ): Promise { - const redshiftData = await this.redshiftDataClientProvider(this.regionCode) + const redshiftData = this.redshiftDataClientProvider(this.regionCode) // if executionId is not passed in, that means that we're executing and retrieving the results of the query for the first time. if (!executionId) { - const execution = await redshiftData - .executeStatement({ + const execution = await redshiftData.send( + new ExecuteStatementCommand({ ClusterIdentifier: connectionParams.warehouseType === RedshiftWarehouseType.PROVISIONED ? connectionParams.warehouseIdentifier @@ -174,15 +195,15 @@ export class DefaultRedshiftClient { ? connectionParams.secret : undefined, }) - .promise() + ) executionId = execution.Id type Status = 'RUNNING' | 'FAILED' | 'FINISHED' let status: Status = 'RUNNING' while (status === 'RUNNING') { - const describeStatementResponse = await redshiftData - .describeStatement({ Id: executionId } as DescribeStatementRequest) - .promise() + const describeStatementResponse = await redshiftData.send( + new DescribeStatementCommand({ Id: executionId } as DescribeStatementRequest) + ) if (describeStatementResponse.Status === 'FAILED' || describeStatementResponse.Status === 'FINISHED') { status = describeStatementResponse.Status if (status === 'FAILED') { @@ -198,9 +219,9 @@ export class DefaultRedshiftClient { } } } - const result = await redshiftData - .getStatementResult({ Id: executionId, NextToken: nextToken } as GetStatementResultRequest) - .promise() + const result = await redshiftData.send( + new GetStatementResultCommand({ Id: executionId, NextToken: nextToken } as GetStatementResultRequest) + ) return { statementResultResponse: result, executionId: executionId } as ExecuteQueryResponse } @@ -210,20 +231,20 @@ export class DefaultRedshiftClient { connectionParams: ConnectionParams ): Promise { if (warehouseType === RedshiftWarehouseType.PROVISIONED) { - const redshiftClient = await this.redshiftClientProvider(this.regionCode) + const redshiftClient = this.redshiftClientProvider(this.regionCode) const getClusterCredentialsRequest: GetClusterCredentialsMessage = { DbUser: connectionParams.username!, DbName: connectionParams.database, ClusterIdentifier: connectionParams.warehouseIdentifier, } - return redshiftClient.getClusterCredentials(getClusterCredentialsRequest).promise() + return redshiftClient.send(new GetClusterCredentialsCommand(getClusterCredentialsRequest)) } else { - const redshiftServerless = await this.redshiftServerlessClientProvider(this.regionCode) + const redshiftServerless = this.redshiftServerlessClientProvider(this.regionCode) const getCredentialsRequest: GetCredentialsRequest = { dbName: connectionParams.database, workgroupName: connectionParams.warehouseIdentifier, } - return redshiftServerless.getCredentials(getCredentialsRequest).promise() + return redshiftServerless.send(new GetCredentialsCommand(getCredentialsRequest)) } } public genUniqueId(connectionParams: ConnectionParams): string { @@ -258,13 +279,22 @@ export class DefaultRedshiftClient { } } -async function createRedshiftSdkClient(regionCode: string): Promise { - return await globals.sdkClientBuilder.createAwsService(Redshift, { computeChecksums: true }, regionCode) +function createRedshiftSdkClient(regionCode: string): RedshiftClient { + return globals.sdkClientBuilderV3.createAwsService({ + serviceClient: RedshiftClient, + clientOptions: { region: regionCode }, + }) } -async function createRedshiftServerlessSdkClient(regionCode: string): Promise { - return await globals.sdkClientBuilder.createAwsService(RedshiftServerless, { computeChecksums: true }, regionCode) +function createRedshiftServerlessSdkClient(regionCode: string): RedshiftServerlessClient { + return globals.sdkClientBuilderV3.createAwsService({ + serviceClient: RedshiftServerlessClient, + clientOptions: { region: regionCode }, + }) } -async function createRedshiftDataClient(regionCode: string): Promise { - return await globals.sdkClientBuilder.createAwsService(RedshiftData, { computeChecksums: true }, regionCode) +function createRedshiftDataClient(regionCode: string): RedshiftDataClient { + return globals.sdkClientBuilderV3.createAwsService({ + serviceClient: RedshiftDataClient, + clientOptions: { region: regionCode }, + }) } diff --git a/packages/core/src/test/awsService/redshift/explorer/redshiftDatabaseNode.test.ts b/packages/core/src/test/awsService/redshift/explorer/redshiftDatabaseNode.test.ts index 07f81a0dfea..f291b926c0c 100644 --- a/packages/core/src/test/awsService/redshift/explorer/redshiftDatabaseNode.test.ts +++ b/packages/core/src/test/awsService/redshift/explorer/redshiftDatabaseNode.test.ts @@ -3,9 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -import sinon = require('sinon') +import { mockClient } from 'aws-sdk-client-mock' import { RedshiftDatabaseNode } from '../../../../awsService/redshift/explorer/redshiftDatabaseNode' -import { RedshiftData } from 'aws-sdk' +import { RedshiftDataClient, ListSchemasCommand } from '@aws-sdk/client-redshift-data' import { DefaultRedshiftClient } from '../../../../shared/clients/redshiftClient' import { ConnectionParams, ConnectionType, RedshiftWarehouseType } from '../../../../awsService/redshift/models/models' import assert = require('assert') @@ -14,44 +14,37 @@ import { AWSTreeNodeBase } from '../../../../shared/treeview/nodes/awsTreeNodeBa import { MoreResultsNode } from '../../../../awsexplorer/moreResultsNode' describe('RedshiftDatabaseNode', function () { - const sandbox = sinon.createSandbox() - const mockRedshiftData = {} - const redshiftClient = new DefaultRedshiftClient('us-east-1', async () => mockRedshiftData, undefined, undefined) + const mockRedshiftData = mockClient(RedshiftDataClient) + const redshiftClient = new DefaultRedshiftClient('us-east-1', () => mockRedshiftData as any, undefined, undefined) const connectionParams = new ConnectionParams( ConnectionType.TempCreds, 'testDb1', 'warehouseId', RedshiftWarehouseType.PROVISIONED ) - let listSchemasStub: sinon.SinonStub describe('getChildren', function () { - beforeEach(function () { - listSchemasStub = sandbox.stub() - mockRedshiftData.listSchemas = listSchemasStub - }) - afterEach(function () { - sandbox.reset() + mockRedshiftData.reset() }) it('loads schemas successfully', async () => { const node = new RedshiftDatabaseNode('testDB1', redshiftClient, connectionParams) - listSchemasStub.returns({ promise: () => Promise.resolve({ Schemas: ['schema1'] }) }) + mockRedshiftData.on(ListSchemasCommand).resolves({ Schemas: ['schema1'] }) const childNodes = await node.getChildren() verifyChildNodes(childNodes, false) }) it('loads schemas and shows load more node when there are more schemas', async () => { const node = new RedshiftDatabaseNode('testDB1', redshiftClient, connectionParams) - listSchemasStub.returns({ promise: () => Promise.resolve({ Schemas: ['schema1'], NextToken: 'next' }) }) + mockRedshiftData.on(ListSchemasCommand).resolves({ Schemas: ['schema1'], NextToken: 'next' }) const childNodes = await node.getChildren() verifyChildNodes(childNodes, true) }) it('shows error node when listSchema fails', async () => { const node = new RedshiftDatabaseNode('testDB1', redshiftClient, connectionParams) - listSchemasStub.returns({ promise: () => Promise.reject('Failed') }) + mockRedshiftData.on(ListSchemasCommand).rejects('Failed') const childNodes = await node.getChildren() assert.strictEqual(childNodes.length, 1) assert.strictEqual(childNodes[0].contextValue, 'awsErrorNode') diff --git a/packages/core/src/test/awsService/redshift/explorer/redshiftNode.test.ts b/packages/core/src/test/awsService/redshift/explorer/redshiftNode.test.ts index af9c9ffd5ce..26df4f5abf7 100644 --- a/packages/core/src/test/awsService/redshift/explorer/redshiftNode.test.ts +++ b/packages/core/src/test/awsService/redshift/explorer/redshiftNode.test.ts @@ -3,29 +3,27 @@ * SPDX-License-Identifier: Apache-2.0 */ // eslint-disable-next-line header/header -import sinon = require('sinon') +import { mockClient, AwsClientStub } from 'aws-sdk-client-mock' import { RedshiftNode } from '../../../../awsService/redshift/explorer/redshiftNode' import { DefaultRedshiftClient } from '../../../../shared/clients/redshiftClient' -import { AWSError, Redshift, RedshiftServerless, Request } from 'aws-sdk' import assert = require('assert') import { RedshiftWarehouseNode } from '../../../../awsService/redshift/explorer/redshiftWarehouseNode' -import { ClusterList, ClustersMessage } from 'aws-sdk/clients/redshift' -import { ListWorkgroupsResponse, WorkgroupList } from 'aws-sdk/clients/redshiftserverless' +import { Cluster, ClustersMessage, RedshiftClient, DescribeClustersCommand } from '@aws-sdk/client-redshift' +import { + ListWorkgroupsResponse, + Workgroup, + RedshiftServerlessClient, + ListWorkgroupsCommand, +} from '@aws-sdk/client-redshift-serverless' import { RedshiftWarehouseType } from '../../../../awsService/redshift/models/models' import { MoreResultsNode } from '../../../../awsexplorer/moreResultsNode' import { AWSTreeNodeBase } from '../../../../shared/treeview/nodes/awsTreeNodeBase' -function success(output?: T): Request { - return { - promise: () => Promise.resolve(output), - } as Request -} - function getExpectedProvisionedResponse(withNextToken: boolean): ClustersMessage { const response = { Clusters: [ { ClusterNamespaceArn: 'testArn', ClusterIdentifier: 'testId', ClusterAvailabilityStatus: 'available' }, - ] as ClusterList, + ] as Cluster[], } as ClustersMessage if (withNextToken) { response.Marker = 'next' @@ -35,7 +33,7 @@ function getExpectedProvisionedResponse(withNextToken: boolean): ClustersMessage function getExpectedServerlessResponse(withNextToken: boolean): ListWorkgroupsResponse { const response = { - workgroups: [{ workgroupArn: 'testArn', workgroupName: 'testWorkgroup', status: 'available' }] as WorkgroupList, + workgroups: [{ workgroupArn: 'testArn', workgroupName: 'testWorkgroup', status: 'AVAILABLE' }] as Workgroup[], } as ListWorkgroupsResponse if (withNextToken) { response.nextToken = 'next' @@ -70,79 +68,59 @@ describe('redshiftNode', function () { describe('getChildren', function () { let node: RedshiftNode let redshiftClient: DefaultRedshiftClient - let mockRedshift: Redshift - let mockRedshiftServerless: RedshiftServerless - const sandbox: sinon.SinonSandbox = sinon.createSandbox() - const describeClustersStub = sandbox.stub() - const listWorkgroupsStub = sandbox.stub() - - function verifyStubCallCounts(describeClustersStubCallCount: number, listWorkgroupsStubCallCount: number) { - assert.strictEqual( - describeClustersStub.callCount, - describeClustersStubCallCount, - 'DescribeClustersStub call count mismatch' - ) - assert.strictEqual( - listWorkgroupsStub.callCount, - listWorkgroupsStubCallCount, - 'ListWorkgroupsStub call count mismatch' - ) - } + let mockRedshift: AwsClientStub + let mockRedshiftServerless: AwsClientStub beforeEach(function () { - mockRedshift = {} - mockRedshiftServerless = {} + mockRedshift = mockClient(RedshiftClient) + mockRedshiftServerless = mockClient(RedshiftServerlessClient) redshiftClient = new DefaultRedshiftClient( 'us-east-1', undefined, - async (r) => Promise.resolve(mockRedshift), - async (r) => Promise.resolve(mockRedshiftServerless) + // @ts-expect-error + () => mockRedshift, + () => mockRedshiftServerless ) - mockRedshift.describeClusters = describeClustersStub - mockRedshiftServerless.listWorkgroups = listWorkgroupsStub node = new RedshiftNode(redshiftClient) }) afterEach(function () { - sandbox.reset() + mockRedshift.reset() + mockRedshiftServerless.reset() }) it('gets both provisioned and serverless warehouses when no results have been loaded', async () => { - describeClustersStub.returns(success(getExpectedProvisionedResponse(false))) - listWorkgroupsStub.returns(success(getExpectedServerlessResponse(false))) + mockRedshift.on(DescribeClustersCommand).resolves(getExpectedProvisionedResponse(false)) + mockRedshiftServerless.on(ListWorkgroupsCommand).resolves(getExpectedServerlessResponse(false)) const childNodes = await node.getChildren() verifyChildNodeCounts(childNodes, 1, 1, 0) - verifyStubCallCounts(1, 1) }) it('gets both provisioned and serverless warehouses if results have been loaded but there are more results', async () => { - describeClustersStub.returns(success(getExpectedProvisionedResponse(true))) - listWorkgroupsStub.returns(success(getExpectedServerlessResponse(true))) + mockRedshift.on(DescribeClustersCommand).resolves(getExpectedProvisionedResponse(true)) + mockRedshiftServerless.on(ListWorkgroupsCommand).resolves(getExpectedServerlessResponse(true)) const childNodes = await node.getChildren() verifyChildNodeCounts(childNodes, 1, 1, 1) - verifyStubCallCounts(1, 1) }) it('gets only provisioned warehouses if results have been loaded and there are only more provisioned warehouses', async () => { - describeClustersStub.returns(success(getExpectedProvisionedResponse(true))) - listWorkgroupsStub.returns(success(getExpectedServerlessResponse(false))) + mockRedshift.on(DescribeClustersCommand).resolves(getExpectedProvisionedResponse(true)) + mockRedshiftServerless.on(ListWorkgroupsCommand).resolves(getExpectedServerlessResponse(false)) const childNodes = await node.getChildren() verifyChildNodeCounts(childNodes, 1, 1, 1) await node.loadMoreChildren() const newChildNodes = await node.getChildren() verifyChildNodeCounts(newChildNodes, 2, 1, 1) - verifyStubCallCounts(2, 1) }) it('gets only serverless warehouses if results have been loaded and there are only more serverless warehouses', async () => { - describeClustersStub.returns(success(getExpectedProvisionedResponse(false))) - listWorkgroupsStub.returns(success(getExpectedServerlessResponse(true))) + mockRedshift.on(DescribeClustersCommand).resolves(getExpectedProvisionedResponse(false)) + mockRedshiftServerless.on(ListWorkgroupsCommand).resolves(getExpectedServerlessResponse(true)) const childNodes = await node.getChildren() verifyChildNodeCounts(childNodes, 1, 1, 1) await node.loadMoreChildren() const newChildNodes = await node.getChildren() verifyChildNodeCounts(newChildNodes, 1, 2, 1) - verifyStubCallCounts(1, 2) }) }) }) diff --git a/packages/core/src/test/awsService/redshift/explorer/redshiftSchemaNode.test.ts b/packages/core/src/test/awsService/redshift/explorer/redshiftSchemaNode.test.ts index a3e4a17f4aa..68c2d792cfa 100644 --- a/packages/core/src/test/awsService/redshift/explorer/redshiftSchemaNode.test.ts +++ b/packages/core/src/test/awsService/redshift/explorer/redshiftSchemaNode.test.ts @@ -3,22 +3,21 @@ * SPDX-License-Identifier: Apache-2.0 */ -import * as sinon from 'sinon' +import { mockClient, AwsClientStub } from 'aws-sdk-client-mock' import * as assert from 'assert' import { DefaultRedshiftClient } from '../../../../shared/clients/redshiftClient' -import { RedshiftData } from 'aws-sdk' +import { RedshiftDataClient, ListTablesCommand, ListTablesResponse } from '@aws-sdk/client-redshift-data' import { RedshiftSchemaNode } from '../../../../awsService/redshift/explorer/redshiftSchemaNode' import { ConnectionParams, ConnectionType, RedshiftWarehouseType } from '../../../../awsService/redshift/models/models' import { RedshiftTableNode } from '../../../../awsService/redshift/explorer/redshiftTableNode' -import { ListTablesResponse } from 'aws-sdk/clients/redshiftdata' import { MoreResultsNode } from '../../../../awsexplorer/moreResultsNode' describe('RedshiftSchemaNode', function () { - const sandbox = sinon.createSandbox() - const mockRedshiftData: RedshiftData = {} + const mockRedshiftData: AwsClientStub = mockClient(RedshiftDataClient) const redshiftClient: DefaultRedshiftClient = new DefaultRedshiftClient( 'us-east-1', - async () => mockRedshiftData, + // @ts-expect-error + () => mockRedshiftData, undefined, undefined ) @@ -28,23 +27,16 @@ describe('RedshiftSchemaNode', function () { 'warehouseId', RedshiftWarehouseType.PROVISIONED ) - let listTablesStub: sinon.SinonStub describe('getChildren', function () { - beforeEach(function () { - listTablesStub = sandbox.stub() - mockRedshiftData.listTables = listTablesStub - }) - afterEach(function () { - sandbox.reset() + mockRedshiftData.reset() }) it('gets table nodes and filters out tables with pkey', async () => { - listTablesStub.returns({ - promise: () => - Promise.resolve({ Tables: [{ name: 'test' }, { name: 'test_pkey' }] } as ListTablesResponse), - }) + mockRedshiftData + .on(ListTablesCommand) + .resolves({ Tables: [{ name: 'test' }, { name: 'test_pkey' }] } as ListTablesResponse) const node = new RedshiftSchemaNode('testSchema', redshiftClient, connectionParams) const childNodes = await node.getChildren() assert.strictEqual(childNodes.length, 1) @@ -52,13 +44,10 @@ describe('RedshiftSchemaNode', function () { }) it('gets table nodes & adds load more node if there are more nodes to be loaded', async () => { - listTablesStub.returns({ - promise: () => - Promise.resolve({ - Tables: [{ name: 'test' }, { name: 'test_pkey' }], - NextToken: 'next', - } as ListTablesResponse), - }) + mockRedshiftData.on(ListTablesCommand).resolves({ + Tables: [{ name: 'test' }, { name: 'test_pkey' }], + NextToken: 'next', + } as ListTablesResponse) const node = new RedshiftSchemaNode('testSchema', redshiftClient, connectionParams) const childNodes = await node.getChildren() assert.strictEqual(childNodes.length, 2) @@ -67,7 +56,7 @@ describe('RedshiftSchemaNode', function () { }) it('shows error node when list table API errors out', async () => { - listTablesStub.returns({ promise: () => Promise.reject('failed') }) + mockRedshiftData.on(ListTablesCommand).rejects('failed') const node = new RedshiftSchemaNode('testSchema', redshiftClient, connectionParams) const childNodes = await node.getChildren() assert.strictEqual(childNodes.length, 1) diff --git a/packages/core/src/test/awsService/redshift/explorer/redshiftWarehouseNode.test.ts b/packages/core/src/test/awsService/redshift/explorer/redshiftWarehouseNode.test.ts index d06128b2585..b82e9c972f9 100644 --- a/packages/core/src/test/awsService/redshift/explorer/redshiftWarehouseNode.test.ts +++ b/packages/core/src/test/awsService/redshift/explorer/redshiftWarehouseNode.test.ts @@ -5,7 +5,7 @@ import sinon = require('sinon') import { DefaultRedshiftClient } from '../../../../shared/clients/redshiftClient' -import { ListDatabasesResponse } from 'aws-sdk/clients/redshiftdata' +import { ListDatabasesResponse, RedshiftDataClient, ListDatabasesCommand } from '@aws-sdk/client-redshift-data' import { ConnectionParams, ConnectionType, RedshiftWarehouseType } from '../../../../awsService/redshift/models/models' import { RedshiftWarehouseNode, @@ -17,9 +17,9 @@ import * as assert from 'assert' import { RedshiftDatabaseNode } from '../../../../awsService/redshift/explorer/redshiftDatabaseNode' import { AWSCommandTreeNode } from '../../../../shared/treeview/nodes/awsCommandTreeNode' import { RedshiftNodeConnectionWizard } from '../../../../awsService/redshift/wizards/connectionWizard' -import RedshiftData = require('aws-sdk/clients/redshiftdata') import { MoreResultsNode } from '../../../../awsexplorer/moreResultsNode' import { AWSTreeNodeBase } from '../../../../shared/treeview/nodes/awsTreeNodeBase' +import { mockClient, AwsClientStub } from 'aws-sdk-client-mock' function verifyChildNodes(childNodes: AWSTreeNodeBase[], databaseNodeCount: number, shouldHaveLoadMore: boolean) { assert.strictEqual(childNodes.length, databaseNodeCount + (shouldHaveLoadMore ? 1 : 0) + 1) @@ -41,7 +41,6 @@ function verifyRetryNode(childNodes: AWSTreeNodeBase[]) { describe('redshiftWarehouseNode', function () { describe('getChildren', function () { - const sandbox = sinon.createSandbox() const expectedResponse = { Databases: ['testDb1'] } as ListDatabasesResponse const expectedResponseWithNextToken = { Databases: ['testDb1'], NextToken: 'next' } as ListDatabasesResponse const connectionParams = new ConnectionParams( @@ -51,31 +50,32 @@ describe('redshiftWarehouseNode', function () { RedshiftWarehouseType.PROVISIONED ) const resourceNode = { arn: 'testARN', name: 'warehouseId' } as AWSResourceNode - const mockRedshiftData = {} - const redshiftClient = new DefaultRedshiftClient( - 'us-east-1', - async (r) => Promise.resolve(mockRedshiftData), - undefined, - undefined - ) - const redshiftNode = new RedshiftNode(redshiftClient) - let listDatabasesStub: sinon.SinonStub + let mockRedshiftData: AwsClientStub + let redshiftClient: DefaultRedshiftClient + let redshiftNode: RedshiftNode let warehouseNode: RedshiftWarehouseNode let connectionWizardStub: sinon.SinonStub beforeEach(function () { - listDatabasesStub = sandbox.stub() - mockRedshiftData.listDatabases = listDatabasesStub + mockRedshiftData = mockClient(RedshiftDataClient) + redshiftClient = new DefaultRedshiftClient( + 'us-east-1', + // @ts-expect-error + () => mockRedshiftData, + undefined, + undefined + ) + redshiftNode = new RedshiftNode(redshiftClient) }) afterEach(function () { - sandbox.reset() + mockRedshiftData.reset() connectionWizardStub.restore() }) it('gets databases for a warehouse and adds a start button', async () => { connectionWizardStub = sinon.stub(RedshiftNodeConnectionWizard.prototype, 'run').resolves(connectionParams) warehouseNode = new RedshiftWarehouseNode(redshiftNode, resourceNode, RedshiftWarehouseType.PROVISIONED) - listDatabasesStub.returns({ promise: () => Promise.resolve(expectedResponse) }) + mockRedshiftData.on(ListDatabasesCommand).resolves(expectedResponse) const childNodes = await warehouseNode.getChildren() @@ -85,7 +85,7 @@ describe('redshiftWarehouseNode', function () { it('gets databases for a warehouse, adds a start button and a load more button if there are more results', async () => { connectionWizardStub = sinon.stub(RedshiftNodeConnectionWizard.prototype, 'run').resolves(connectionParams) warehouseNode = new RedshiftWarehouseNode(redshiftNode, resourceNode, RedshiftWarehouseType.PROVISIONED) - listDatabasesStub.returns({ promise: () => Promise.resolve(expectedResponseWithNextToken) }) + mockRedshiftData.on(ListDatabasesCommand).resolves(expectedResponseWithNextToken) const childNodes = await warehouseNode.getChildren() @@ -102,7 +102,7 @@ describe('redshiftWarehouseNode', function () { it('shows a node with retry if there is error fetching databases', async () => { connectionWizardStub = sinon.stub(RedshiftNodeConnectionWizard.prototype, 'run').resolves(connectionParams) warehouseNode = new RedshiftWarehouseNode(redshiftNode, resourceNode, RedshiftWarehouseType.PROVISIONED) - listDatabasesStub.returns({ promise: () => Promise.reject('Failed') }) + mockRedshiftData.on(ListDatabasesCommand).rejects('Failed') const childNodes = await warehouseNode.getChildren() verifyRetryNode(childNodes) }) diff --git a/packages/core/src/test/awsService/redshift/notebook/redshiftNotebookController.test.ts b/packages/core/src/test/awsService/redshift/notebook/redshiftNotebookController.test.ts index 982ce2a6c9c..8b9bfd5b546 100644 --- a/packages/core/src/test/awsService/redshift/notebook/redshiftNotebookController.test.ts +++ b/packages/core/src/test/awsService/redshift/notebook/redshiftNotebookController.test.ts @@ -5,19 +5,19 @@ import * as vscode from 'vscode' import { RedshiftNotebookController } from '../../../../awsService/redshift/notebook/redshiftNotebookController' -import sinon = require('sinon') +import { mockClient, AwsClientStub } from 'aws-sdk-client-mock' import assert = require('assert') import { DefaultRedshiftClient } from '../../../../shared/clients/redshiftClient' -import { RedshiftData } from 'aws-sdk' +import { RedshiftDataClient } from '@aws-sdk/client-redshift-data' +import sinon = require('sinon') describe('RedshiftNotebookController', () => { - const mockRedshiftData = {} - const redshiftClient = new DefaultRedshiftClient('us-east-1', async () => mockRedshiftData, undefined, undefined) + const mockRedshiftData: AwsClientStub = mockClient(RedshiftDataClient) + // @ts-expect-error + const redshiftClient = new DefaultRedshiftClient('us-east-1', () => mockRedshiftData, undefined, undefined) let notebookController: any let createNotebookControllerStub: any - let executeQueryStub: sinon.SinonStub beforeEach(() => { - redshiftClient.executeQuery = executeQueryStub createNotebookControllerStub = sinon.stub(vscode.notebooks, 'createNotebookController') const controllerInstanceValue = { supportedLanguages: ['sql'], @@ -29,6 +29,7 @@ describe('RedshiftNotebookController', () => { notebookController = new RedshiftNotebookController(redshiftClient) }) afterEach(() => { + mockRedshiftData.reset() sinon.restore() }) it('validating parameters of a notebook controller instance', () => { diff --git a/packages/core/src/test/shared/clients/defaultRedshiftClient.test.ts b/packages/core/src/test/shared/clients/defaultRedshiftClient.test.ts index 5a7241aefd6..77e2fced64b 100644 --- a/packages/core/src/test/shared/clients/defaultRedshiftClient.test.ts +++ b/packages/core/src/test/shared/clients/defaultRedshiftClient.test.ts @@ -3,24 +3,30 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { Redshift, RedshiftData, RedshiftServerless, AWSError, Request } from 'aws-sdk' +import { ClustersMessage, RedshiftClient, DescribeClustersCommand } from '@aws-sdk/client-redshift' +import { + ListDatabasesResponse, + ListSchemasResponse, + RedshiftDataClient, + ListDatabasesCommand, + ListSchemasCommand, +} from '@aws-sdk/client-redshift-data' +import { + ListWorkgroupsResponse, + RedshiftServerlessClient, + ListWorkgroupsCommand, +} from '@aws-sdk/client-redshift-serverless' import { DefaultRedshiftClient } from '../../../shared/clients/redshiftClient' import assert = require('assert') import { ConnectionParams, ConnectionType, RedshiftWarehouseType } from '../../../awsService/redshift/models/models' -import sinon = require('sinon') - -function success(output?: T): Request { - return { - promise: () => Promise.resolve(output), - } as Request -} +import { mockClient, AwsClientStub } from 'aws-sdk-client-mock' const nextToken = 'testNextToken' describe('DefaultRedshiftClient', function () { let defaultRedshiftClient: DefaultRedshiftClient - let mockRedshift: Redshift - let mockRedshiftData: RedshiftData - let mockRedshiftServerless: RedshiftServerless + let mockRedshift: AwsClientStub + let mockRedshiftData: AwsClientStub + let mockRedshiftServerless: AwsClientStub const clusterIdentifier = 'ClusterId' const workgroupName = 'Workgroup' const dbName = 'DB' @@ -38,116 +44,127 @@ describe('DefaultRedshiftClient', function () { workgroupName, RedshiftWarehouseType.SERVERLESS ) - let sandbox: sinon.SinonSandbox - - before(function () { - sandbox = sinon.createSandbox() - }) - beforeEach(function () { - mockRedshift = {} - mockRedshiftData = {} - mockRedshiftServerless = {} + mockRedshift = mockClient(RedshiftClient) + mockRedshiftData = mockClient(RedshiftDataClient) + mockRedshiftServerless = mockClient(RedshiftServerlessClient) defaultRedshiftClient = new DefaultRedshiftClient( 'us-east-1', - async (r) => Promise.resolve(mockRedshiftData), - async (r) => Promise.resolve(mockRedshift), - async (r) => Promise.resolve(mockRedshiftServerless) + // @ts-expect-error + () => mockRedshiftData, + () => mockRedshift, + () => mockRedshiftServerless ) }) + afterEach(function () { + mockRedshift.reset() + mockRedshiftData.reset() + mockRedshiftServerless.reset() + }) + describe('describeProvisionedClusters', function () { - const expectedResponse = { Clusters: [] } as Redshift.ClustersMessage - let describeClustersStub: sinon.SinonStub + const expectedResponse = { Clusters: [] } as ClustersMessage beforeEach(function () { - describeClustersStub = sandbox.stub() - mockRedshift.describeClusters = describeClustersStub - describeClustersStub.returns(success(expectedResponse)) + mockRedshift.on(DescribeClustersCommand).resolves(expectedResponse) }) it('without nextToken should not set Marker', async () => { const response = await defaultRedshiftClient.describeProvisionedClusters() - describeClustersStub.alwaysCalledWith({ Marker: undefined, MaxRecords: 20 }) + const calls = mockRedshift.commandCalls(DescribeClustersCommand) + assert.strictEqual(calls.length, 1) + assert.deepStrictEqual(calls[0].args[0].input, { Marker: undefined, MaxRecords: 20 }) assert.deepStrictEqual(response.Clusters, []) }) it('with nextToken should set the Marker', async () => { const response = await defaultRedshiftClient.describeProvisionedClusters(nextToken) - describeClustersStub.alwaysCalledWith({ Marker: nextToken, MaxRecords: 20 }) + const calls = mockRedshift.commandCalls(DescribeClustersCommand) + assert.strictEqual(calls.length, 1) + assert.deepStrictEqual(calls[0].args[0].input, { Marker: nextToken, MaxRecords: 20 }) assert.deepStrictEqual(response.Clusters, []) }) }) describe('listServerlessWorkgroups', function () { - const expectedResponse = { workgroups: [] } as RedshiftServerless.ListWorkgroupsResponse - let listServerlessWorkgroupsStub: sinon.SinonStub + const expectedResponse = { workgroups: [] } as ListWorkgroupsResponse + beforeEach(function () { - listServerlessWorkgroupsStub = sandbox.stub() - mockRedshiftServerless.listWorkgroups = listServerlessWorkgroupsStub - listServerlessWorkgroupsStub.returns(success(expectedResponse)) + mockRedshiftServerless.on(ListWorkgroupsCommand).resolves(expectedResponse) }) it('without nextToken should not set nextToken in RedshiftServerless request', async () => { const response = await defaultRedshiftClient.listServerlessWorkgroups() - listServerlessWorkgroupsStub.alwaysCalledWith({ nextToken: undefined, maxResults: 20 }) + const calls = mockRedshiftServerless.commandCalls(ListWorkgroupsCommand) + assert.strictEqual(calls.length, 1) + assert.deepStrictEqual(calls[0].args[0].input, { nextToken: undefined, maxResults: 20 }) assert.deepStrictEqual(response.workgroups, []) }) it('with nextToken should set nextToken in RedshiftServerless request', async () => { const response = await defaultRedshiftClient.listServerlessWorkgroups(nextToken) - listServerlessWorkgroupsStub.alwaysCalledWith({ nextToken: nextToken, maxResults: 20 }) + const calls = mockRedshiftServerless.commandCalls(ListWorkgroupsCommand) + assert.strictEqual(calls.length, 1) + assert.deepStrictEqual(calls[0].args[0].input, { nextToken: nextToken, maxResults: 20 }) assert.deepStrictEqual(response.workgroups, []) }) }) describe('listDatabases', function () { - const expectedResponse = { Databases: [] } as RedshiftData.ListDatabasesResponse - let listDatabasesStub: sinon.SinonStub + const expectedResponse = { Databases: [] } as ListDatabasesResponse + beforeEach(function () { - listDatabasesStub = sandbox.stub() - mockRedshiftData.listDatabases = listDatabasesStub - listDatabasesStub.returns(success(expectedResponse)) + mockRedshiftData.on(ListDatabasesCommand).resolves(expectedResponse) }) + it('should list databases for provisioned clusters', async () => { const response = await defaultRedshiftClient.listDatabases(provisionedDbUserAndPasswordParams) - listDatabasesStub.alwaysCalledWith({ - ClusterIdentifier: clusterIdentifier, - Database: dbName, - DbUser: dbUsername, - }) + const calls = mockRedshiftData.commandCalls(ListDatabasesCommand) + assert.strictEqual(calls.length, 1) + const input = calls[0].args[0].input + assert.strictEqual(input.ClusterIdentifier, clusterIdentifier) + assert.strictEqual(input.Database, dbName) + assert.strictEqual(input.DbUser, dbUsername) assert.deepStrictEqual(response.Databases, []) }) it('should list databases for serverless workgroups', async () => { const response = await defaultRedshiftClient.listDatabases(serverlessFederatedParams) - listDatabasesStub.alwaysCalledWith({ WorkgroupName: workgroupName, Database: dbName }) + const calls = mockRedshiftData.commandCalls(ListDatabasesCommand) + assert.strictEqual(calls.length, 1) + const input = calls[0].args[0].input + assert.strictEqual(input.WorkgroupName, workgroupName) + assert.strictEqual(input.Database, dbName) assert.deepStrictEqual(response.Databases, []) }) }) describe('listSchemas', function () { - const expectedResponse = { Schemas: [] } as RedshiftData.ListSchemasResponse - let listSchemasStub: sinon.SinonStub + const expectedResponse = { Schemas: [] } as ListSchemasResponse + beforeEach(function () { - listSchemasStub = sandbox.stub() - mockRedshiftData.listSchemas = listSchemasStub - listSchemasStub.returns(success(expectedResponse)) + mockRedshiftData.on(ListSchemasCommand).resolves(expectedResponse) }) it('should list schemas for databases in provisioned clusters', async () => { const response = await defaultRedshiftClient.listSchemas(provisionedDbUserAndPasswordParams, dbName) - listSchemasStub.alwaysCalledWith({ - ClusterIdentifier: clusterIdentifier, - Database: dbName, - DbUser: dbUsername, - }) + const calls = mockRedshiftData.commandCalls(ListSchemasCommand) + assert.strictEqual(calls.length, 1) + const input = calls[0].args[0].input + assert.strictEqual(input.ClusterIdentifier, clusterIdentifier) + assert.strictEqual(input.Database, dbName) + assert.strictEqual(input.DbUser, dbUsername) assert.deepStrictEqual(response.Schemas, []) }) it('should list schemas for databases in serverless workgroups', async () => { const response = await defaultRedshiftClient.listSchemas(serverlessFederatedParams, dbName) - listSchemasStub.alwaysCalledWith({ WorkgroupName: workgroupName, Database: dbName }) + const calls = mockRedshiftData.commandCalls(ListSchemasCommand) + assert.strictEqual(calls.length, 1) + const input = calls[0].args[0].input + assert.strictEqual(input.WorkgroupName, workgroupName) + assert.strictEqual(input.Database, dbName) assert.deepStrictEqual(response.Schemas, []) }) })