aws-sdk-js-v3 icon indicating copy to clipboard operation
aws-sdk-js-v3 copied to clipboard

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

Open everett1992 opened this issue 3 years ago • 1 comments

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.

  • If users install different patch versions of aws-sdk clients they will have multiple versions of @aws-sdk dependencies. Users have to be careful to update all aws-sdk clients at the same time. At least aws-sdk coordinates releases so there are matching versions with the same dependencies.
  • Users of generic smithy-typescript clients will have a hard time matching versions of their generic clients and aws-sdk clients because there is no one to coordinate the versions. smithy-typescript-codegen and smithy-typescript-aws-codegen do not have release automation and the latest code is not always available from maven. All generic clients are not owned by the same group so package may have one set of @aws-sdk dependencies for aws clients and one set of @aws-sdk dependencie for each generic client.

[^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

  • [ ] I may be able to implement this feature request
  • [ ] This feature might incur a breaking change

SDK version used

codgen 0.12

Environment details (OS name and version, etc.)

linux

everett1992 avatar Dec 12 '22 16:12 everett1992

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

gosar avatar Feb 08 '23 08:02 gosar