diff --git a/package.json b/package.json index a7302a489a8a..438843c4a599 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "lint:ci": "lerna exec --since origin/main --exclude-dependents --ignore '@aws-sdk/client-*' --ignore '@aws-sdk/aws-*' 'eslint --quiet src/**/*.ts'", "lint:release": "lerna exec --ignore '@aws-sdk/client-*' --ignore '@aws-sdk/aws-*' 'eslint --quiet src/**/*.ts'", "lint:versions": "node scripts/runtime-dependency-version-check/runtime-dep-version-check.js", + "lint:dependencies": "node scripts/runtime-dependency-version-check/check-dependencies.js", "local-publish": "node ./scripts/verdaccio-publish/index.js", "test:all": "yarn build:all && jest --coverage --passWithNoTests && lerna run test --scope '@aws-sdk/{fetch-http-handler,hash-blob-browser}' && yarn test:versions && yarn test:integration", "test:ci": "lerna run test --since origin/main", @@ -146,7 +147,7 @@ }, "husky": { "hooks": { - "pre-commit": "lint-staged && yarn lint:versions", + "pre-commit": "lint-staged && yarn lint:versions && yarn lint:dependencies", "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" } }, diff --git a/packages/credential-provider-http/package.json b/packages/credential-provider-http/package.json index c352ce33b5c5..4d8bcc1ced6f 100644 --- a/packages/credential-provider-http/package.json +++ b/packages/credential-provider-http/package.json @@ -33,6 +33,7 @@ "@smithy/protocol-http": "^3.0.8", "@smithy/smithy-client": "^2.1.12", "@smithy/types": "^2.4.0", + "@smithy/util-stream": "^2.0.17", "tslib": "^2.5.0" }, "devDependencies": { diff --git a/packages/token-providers/package.json b/packages/token-providers/package.json index 8f95a31e320f..8e28c2c24d38 100644 --- a/packages/token-providers/package.json +++ b/packages/token-providers/package.json @@ -33,6 +33,7 @@ "@aws-sdk/middleware-logger": "*", "@aws-sdk/middleware-recursion-detection": "*", "@aws-sdk/middleware-user-agent": "*", + "@aws-sdk/region-config-resolver": "*", "@aws-sdk/types": "*", "@aws-sdk/util-endpoints": "*", "@aws-sdk/util-user-agent-browser": "*", diff --git a/scripts/runtime-dependency-version-check/check-dev-dependencies.js b/scripts/runtime-dependency-version-check/check-dependencies.js similarity index 66% rename from scripts/runtime-dependency-version-check/check-dev-dependencies.js rename to scripts/runtime-dependency-version-check/check-dependencies.js index 8abdbf02ab04..866045712046 100644 --- a/scripts/runtime-dependency-version-check/check-dev-dependencies.js +++ b/scripts/runtime-dependency-version-check/check-dependencies.js @@ -11,6 +11,8 @@ const packages = path.join(root, "packages"); const walk = require("../utils/walk"); (async () => { + const errors = []; + for (const folder of fs.readdirSync(packages)) { if (folder === "util-dynamodb") { // exempt @@ -32,9 +34,24 @@ const walk = require("../utils/walk"); continue; } + const importedDependencies = []; + importedDependencies.push( + ...new Set( + [...(contents.toString().match(/from "(@(aws-sdk|smithy)\/.*?)"/g) || [])] + .slice(1) + .map((_) => _.replace(/from "/g, "").replace(/"$/, "")) + ) + ); + + for (const dependency of importedDependencies) { + if (!(dependency in pkgJson.dependencies) && dependency !== pkgJson.name) { + errors.push(`${dependency} undeclared but imported in ${pkgJson.name} ${file}}`); + } + } + for (const [dep, version] of Object.entries(pkgJson.devDependencies ?? {})) { if ((dep.startsWith("@smithy") || dep.startsWith("@aws-sdk")) && contents.includes(`from "${dep}";`)) { - console.warn(`${dep} incorrectly declared in devDependencies of ${folder}`); + errors.push(`${dep} incorrectly declared in devDependencies of ${folder}`); delete pkgJson.devDependencies[dep]; if (!pkgJson.dependencies) { pkgJson.dependencies = {}; @@ -46,4 +63,8 @@ const walk = require("../utils/walk"); } } } + + if (errors.length) { + throw new Error(errors.join("\n")); + } })();