diff --git a/packages/middleware-endpoint-discovery/package.json b/packages/middleware-endpoint-discovery/package.json index 3a3d5eaa65f3..1eb7ebc6a0bb 100644 --- a/packages/middleware-endpoint-discovery/package.json +++ b/packages/middleware-endpoint-discovery/package.json @@ -21,7 +21,6 @@ }, "license": "Apache-2.0", "devDependencies": { - "@smithy/node-config-provider": "^2.0.10", "@tsconfig/recommended": "1.0.1", "concurrently": "7.0.0", "downlevel-dts": "0.10.1", @@ -32,6 +31,7 @@ "dependencies": { "@aws-sdk/endpoint-cache": "*", "@aws-sdk/types": "*", + "@smithy/node-config-provider": "^2.0.10", "@smithy/protocol-http": "^3.0.3", "@smithy/types": "^2.3.1", "tslib": "^2.5.0" diff --git a/packages/rds-signer/package.json b/packages/rds-signer/package.json index 7787ba3c37a1..02511de19a2a 100644 --- a/packages/rds-signer/package.json +++ b/packages/rds-signer/package.json @@ -35,11 +35,11 @@ "@smithy/node-config-provider": "^2.0.10", "@smithy/protocol-http": "^3.0.3", "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.3.1", "tslib": "^2.5.0" }, "devDependencies": { "@aws-sdk/types": "*", - "@smithy/types": "^2.3.1", "@types/node": "^14.14.31", "concurrently": "7.0.0", "downlevel-dts": "0.10.1", diff --git a/packages/signature-v4-crt/package.json b/packages/signature-v4-crt/package.json index dd58165c202a..2d91f84f4383 100644 --- a/packages/signature-v4-crt/package.json +++ b/packages/signature-v4-crt/package.json @@ -25,6 +25,7 @@ "@aws-sdk/signature-v4-multi-region": "*", "@smithy/querystring-parser": "^2.0.0", "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.3.1", "@smithy/util-middleware": "^2.0.0", "aws-crt": "^1.15.9", "tslib": "^2.5.0" @@ -33,7 +34,6 @@ "@aws-crypto/sha256-js": "3.0.0", "@aws-sdk/types": "*", "@smithy/protocol-http": "^3.0.3", - "@smithy/types": "^2.3.1", "@tsconfig/recommended": "1.0.1", "concurrently": "7.0.0", "downlevel-dts": "0.10.1", diff --git a/packages/util-create-request/src/foo.fixture.ts b/packages/util-create-request/src/foo.fixture.ts deleted file mode 100644 index 75ab00970d81..000000000000 --- a/packages/util-create-request/src/foo.fixture.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { constructStack } from "@smithy/middleware-stack"; -import { HttpRequest } from "@smithy/protocol-http"; -import { Client, Command } from "@smithy/smithy-client"; -import { MetadataBearer, MiddlewareStack } from "@smithy/types"; - -export interface OperationInput { - String: string; -} - -export type InputTypesUnion = OperationInput; - -export interface OperationOutput extends MetadataBearer { - Data: string; - $metadata: {}; -} - -export type OutputTypesUnion = OperationOutput; - -const output: OperationOutput = { Data: "data", $metadata: {} }; - -const input: OperationInput = { String: "input" }; - -export const fooClient: Client = { - config: {}, - middlewareStack: constructStack(), - send: (command: Command) => - command.resolveMiddleware(fooClient.middlewareStack, fooClient.config, undefined)({ input }), - destroy: () => {}, -}; - -export const operationCommand: Command = { - middlewareStack: constructStack(), - input: {} as any, - // @ts-ignore - resolveMiddleware: (stack: MiddlewareStack) => { - const concatStack = stack.concat(operationCommand.middlewareStack); - return concatStack.resolve(() => Promise.resolve({ output, response: {} }), {} as any); - }, -}; - -export const httpRequest = new HttpRequest({ - protocol: "https:", - path: "/foo", - hostname: "foo-service.us-east-1.amazonaws.com", - headers: {}, - method: "GET", - body: "", -}); diff --git a/packages/util-create-request/src/index.spec.ts b/packages/util-create-request/src/index.spec.ts index 57b6e3b7eec0..f420bda48953 100644 --- a/packages/util-create-request/src/index.spec.ts +++ b/packages/util-create-request/src/index.spec.ts @@ -1,15 +1,60 @@ +import { constructStack } from "@smithy/middleware-stack"; import { HttpRequest } from "@smithy/protocol-http"; -import { Client } from "@smithy/smithy-client"; +import { Client, Command } from "@smithy/smithy-client"; import { BuildHandlerArguments, FinalizeHandlerArguments, MetadataBearer, + MiddlewareStack, SerializeHandlerArguments, } from "@smithy/types"; -import { fooClient, httpRequest, InputTypesUnion, operationCommand, OperationInput } from "./foo.fixture"; import { createRequest } from "./index"; +export interface OperationInput { + String: string; +} + +export type InputTypesUnion = OperationInput; + +export interface OperationOutput extends MetadataBearer { + Data: string; + $metadata: {}; +} + +export type OutputTypesUnion = OperationOutput; + +const output: OperationOutput = { Data: "data", $metadata: {} }; + +const input: OperationInput = { String: "input" }; + +export const fooClient: Client = { + config: {}, + middlewareStack: constructStack(), + send: (command: Command) => + command.resolveMiddleware(fooClient.middlewareStack, fooClient.config, undefined)({ input }), + destroy: () => {}, +}; + +export const operationCommand: Command = { + middlewareStack: constructStack(), + input: {} as any, + // @ts-ignore + resolveMiddleware: (stack: MiddlewareStack) => { + const concatStack = stack.concat(operationCommand.middlewareStack); + return concatStack.resolve(() => Promise.resolve({ output, response: {} }), {} as any); + }, +}; + +export const httpRequest = new HttpRequest({ + protocol: "https:", + path: "/foo", + hostname: "foo-service.us-east-1.amazonaws.com", + headers: {}, + method: "GET", + body: "", +}); + describe("create-request", () => { it("should concat initialize and serialize middlewares from client and command", async () => { operationCommand.middlewareStack.add( diff --git a/packages/util-dns/package.json b/packages/util-dns/package.json index e95fc1145adf..f8e01871f6ff 100644 --- a/packages/util-dns/package.json +++ b/packages/util-dns/package.json @@ -23,10 +23,10 @@ }, "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.5.0", + "@aws-sdk/types": "*" }, "devDependencies": { - "@aws-sdk/types": "*", "@tsconfig/recommended": "1.0.1", "@types/node": "^14.14.31", "concurrently": "7.0.0", diff --git a/packages/util-dynamodb/package.json b/packages/util-dynamodb/package.json index 87ab08e72538..46ad2b391f2f 100644 --- a/packages/util-dynamodb/package.json +++ b/packages/util-dynamodb/package.json @@ -24,7 +24,7 @@ "tslib": "^2.5.0" }, "devDependencies": { - "@aws-sdk/client-dynamodb": "*", + "@aws-sdk/client-dynamodb": "^3.0.0", "@tsconfig/recommended": "1.0.1", "concurrently": "7.0.0", "downlevel-dts": "0.10.1", @@ -32,6 +32,9 @@ "typedoc": "0.23.23", "typescript": "~4.9.5" }, + "peerDependencies": { + "@aws-sdk/client-dynamodb": "^3.0.0" + }, "engines": { "node": ">=14.0.0" }, diff --git a/scripts/runtime-dependency-version-check/check-dev-dependencies.js b/scripts/runtime-dependency-version-check/check-dev-dependencies.js new file mode 100644 index 000000000000..8abdbf02ab04 --- /dev/null +++ b/scripts/runtime-dependency-version-check/check-dev-dependencies.js @@ -0,0 +1,49 @@ +/** + * Checks devDependency declarations for runtime packages. + * They should be moved to the dependencies section even if only imported for types. + */ + +const fs = require("node:fs"); +const path = require("node:path"); + +const root = path.join(__dirname, "..", ".."); +const packages = path.join(root, "packages"); +const walk = require("../utils/walk"); + +(async () => { + for (const folder of fs.readdirSync(packages)) { + if (folder === "util-dynamodb") { + // exempt + continue; + } + + const pkgJsonPath = path.join(packages, folder, "package.json"); + const srcPath = path.join(packages, folder, "src"); + const pkgJson = require(pkgJsonPath); + + for await (const file of walk(srcPath, ["node_modules"])) { + const contents = fs.readFileSync(file); + + if (file.endsWith(".spec.ts")) { + continue; + } + + if (!file.endsWith(".ts")) { + continue; + } + + 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}`); + delete pkgJson.devDependencies[dep]; + if (!pkgJson.dependencies) { + pkgJson.dependencies = {}; + } + pkgJson.dependencies[dep] = version; + + fs.writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2)); + } + } + } + } +})();