aws / aws-sdk-js-v3

Modularized AWS SDK for JavaScript.
Apache License 2.0
3.04k stars 569 forks source link

stabilise remaining @aws-sdk/* packages and generate clients with ^ ranges #4271

Open everett1992 opened 1 year ago

everett1992 commented 1 year ago

Describe the feature

The majority of @aws-sdk/* dependencies shared between aws-sdk (and smithy-typescript) clients are documented as 'internal' stability.

One effect of the instable api is that clients are generated with exact dependencies[^1][^2]. This causes a number of problems.


[^1]: Example of aws-sdk client dependencies

    $ npm info @aws-sdk/client-accessanalyzer dependencies
    {
      '@aws-crypto/sha256-browser': '2.0.0',
      '@aws-crypto/sha256-js': '2.0.0',
      '@aws-sdk/client-sts': '3.226.0',
      '@aws-sdk/config-resolver': '3.226.0',
      '@aws-sdk/credential-provider-node': '3.226.0',
      '@aws-sdk/fetch-http-handler': '3.226.0',
      '@aws-sdk/hash-node': '3.226.0',
      '@aws-sdk/invalid-dependency': '3.226.0',
      '@aws-sdk/middleware-content-length': '3.226.0',
      '@aws-sdk/middleware-endpoint': '3.226.0',
      '@aws-sdk/middleware-host-header': '3.226.0',
      '@aws-sdk/middleware-logger': '3.226.0',
      '@aws-sdk/middleware-recursion-detection': '3.226.0',
      '@aws-sdk/middleware-retry': '3.226.0',
      '@aws-sdk/middleware-serde': '3.226.0',
      '@aws-sdk/middleware-signing': '3.226.0',
      '@aws-sdk/middleware-stack': '3.226.0',
      '@aws-sdk/middleware-user-agent': '3.226.0',
      '@aws-sdk/node-config-provider': '3.226.0',
      '@aws-sdk/node-http-handler': '3.226.0',
      '@aws-sdk/protocol-http': '3.226.0',
      '@aws-sdk/smithy-client': '3.226.0',
      '@aws-sdk/types': '3.226.0',
      '@aws-sdk/url-parser': '3.226.0',
      '@aws-sdk/util-base64': '3.208.0',
      '@aws-sdk/util-body-length-browser': '3.188.0',
      '@aws-sdk/util-body-length-node': '3.208.0',
      '@aws-sdk/util-defaults-mode-browser': '3.226.0',
      '@aws-sdk/util-defaults-mode-node': '3.226.0',
      '@aws-sdk/util-endpoints': '3.226.0',
      '@aws-sdk/util-user-agent-browser': '3.226.0',
      '@aws-sdk/util-user-agent-node': '3.226.0',
      '@aws-sdk/util-utf8-browser': '3.188.0',
      '@aws-sdk/util-utf8-node': '3.208.0',
      tslib: '^2.3.1',
      uuid: '^8.3.2'
    }

[^2] Example smithy-typescript generic client (generated from smithy-typescript-codegen 0.12.0

    npm info example-client dependencies
    {
      tslib: '^2.3.1',
      '@aws-crypto/sha256-browser': '2.0.0',
      '@aws-crypto/sha256-js': '2.0.0',
      '@aws-sdk/config-resolver': '3.171.0',
      '@aws-sdk/fetch-http-handler': '3.171.0',
      '@aws-sdk/hash-node': '3.171.0',
      '@aws-sdk/invalid-dependency': '3.171.0',
      '@aws-sdk/middleware-content-length': '3.171.0',
      '@aws-sdk/middleware-host-header': '3.171.0',
      '@aws-sdk/middleware-logger': '3.171.0',
      '@aws-sdk/middleware-recursion-detection': '3.171.0',
      '@aws-sdk/middleware-retry': '3.171.0',
      '@aws-sdk/middleware-serde': '3.171.0',
      '@aws-sdk/middleware-stack': '3.171.0',
      '@aws-sdk/middleware-user-agent': '3.171.0',
      '@aws-sdk/node-config-provider': '3.171.0',
      '@aws-sdk/node-http-handler': '3.171.0',
      '@aws-sdk/protocol-http': '3.171.0',
      '@aws-sdk/smithy-client': '3.171.0',
      '@aws-sdk/types': '3.171.0',
      '@aws-sdk/url-parser': '3.171.0',
      '@aws-sdk/util-base64-browser': '3.170.0',
      '@aws-sdk/util-base64-node': '3.170.0',
      '@aws-sdk/util-body-length-browser': '3.170.0',
      '@aws-sdk/util-body-length-node': '3.170.0',
      '@aws-sdk/util-defaults-mode-browser': '3.171.0',
      '@aws-sdk/util-defaults-mode-node': '3.171.0',
      '@aws-sdk/util-user-agent-browser': '3.171.0',
      '@aws-sdk/util-user-agent-node': '3.171.0',
      '@aws-sdk/util-utf8-browser': '3.170.0',
      '@aws-sdk/util-utf8-node': '3.170.0'
    }

Use Case

Using generic smithy-typescript clients without duplicate dependencies.

Proposed Solution

Stabilize the interfaces of @aws-sdk/ dependencies used by smithy-typescript, maintain backward comparability or semantic versioning, and generate clients with carat ranges.

Other Information

No response

Acknowledgements

SDK version used

codgen 0.12

Environment details (OS name and version, etc.)

linux

gosar commented 1 year ago

For reference, https://github.com/aws/aws-sdk-js-v3/pull/2361 is where move to pinned version happened.