Skip to content

Latest commit

 

History

History
384 lines (288 loc) · 25.1 KB

CHANGELOG.md

File metadata and controls

384 lines (288 loc) · 25.1 KB

Smithy Changelog

1.0.4 (2020-05-29)

Features

  • Ensure that when a property is removed from a JSON schema object, that a corresponding "required" entry is also removed. (#452)
  • Added the (unstable) @httpChecksumRequired trait to indicate an operation requires a checksum in its HTTP request. (#433, #453)

Bug Fixes

  • Fixed a bug in OpenApi conversion where removing authentication for an operation would result in the operation inheriting the global "security" configuration instead of having it set to none. (#451)

Documentation

  • Added examples of building models to various guides. (#449)
  • Fixed various documentation issues. (#449)

1.0.3 (2020-05-26)

Bug Fixes

  • Prevent parsing overly deep Node values (#442)
  • Fix an issue with the OpenAPI conversion where synthesized structure inputs reference required properties that were removed. (#443)

1.0.2 (2020-05-18)

Bug Fixes

  • Fix an issue that would squash exceptions thrown for invalid suppressions. (#440)

1.0.1 (2020-05-13)

Features

  • The smithy.api#httpPayload trait can now target document shapes. (#431)
  • Updated the IDL grammar to include many previously enforced parsing rules. (#434)
  • Added the select command to the CLI to print out shapes from a model that match a selector. (#430)
  • Added the ast command to the CLI to convert 0 or more Smithy models into a JSON AST. (#435)
  • Added a Dockerfile for building Smithy as a Docker image. (#427)

Optimizations

  • The Smithy IDL parser has been rewritten and optimized. (#434)
  • Generate a class data share to speed up the CLI. (#429)

Bug Fixes

  • Fix several ambiguities and issues in the IDL grammar. (#434)
  • JSON pretty printing of the AST now uses 4 spaces for indentation. (#435)
  • Fix CLI --help output alignment. (#429)

1.0.0 (2020-05-04)

Note: Changes marked with "[BC]" are breaking changes more accurately described in the specific section. A list of further intended breaking changes have a specific section near the end of this entry.

Features

General

  • The model format version has been updated to 1.0 and contains several updates: [BC] (#357, #381)
    • The JSON AST representation requires describing annotation traits as {} instead of true.
    • Annotation traits in the IDL are now provided as @foo or @foo(). Explicit @foo(true) and @foo(null) support was removed.
  • Smithy models can now be serialized to the IDL. (#284)
  • Added a Node-based object mapper to simplify the process of building and using Java components from Smithy Nodes. (#301)
    • Many packages have seen significant updates to use this functionality. (#305, #364)
  • Made error messages clearer when encountering duplicate shapes. (#324)
  • Model loaders now warn on additional shape properties instead of fail. (#374)
  • Added expect* methods to the base Shape. (#314)
  • Added @SmithyUnstableApi, @SmithyInternalApi and @SmithyGenerated Java annotations. (#297)
  • NodeValidationVisitors are marked as internal and/or unstable. (#375)
  • The $version control statement can now be set to only a major version (e.g., "1") to indicate that an implementation must support a version >= 1 and < 2. $version can now be set to major.minor (e.g., "1.1") to indicate that an implementation must support a version >= 1.1 and < 2.

Trait updates

  • Individual protocols are now defined as individual traits that are annotated with the protocolDefinition trait. [BC] (#273, #280, #379, #390)
  • Individual authentication schemes are now defined as individual traits that are annotated with the authDefinition trait. [BC] (#273, #280)
  • The smithy.api#enum trait is now a list of enum definitions instead of a map of string keys to enum definitions to improve clarity and encourage adding more properties to definitions. [BC] (#326)
  • The aws.api#streaming trait is now applied to shapes directly instead of members. [BC] (#340)
  • The smithy.api#eventStream trait has been removed. Event streams are now indicated by applying the smithy.api#streaming trait to unions. [BC] (#365)
  • The smithy.api#requiresLength trait has been split out of the smithy.api#streaming trait to improve clarity around event stream modeling. [BC] (#368)
  • The smithy.api#externalDocumentation trait is now a map instead of a single string to allow for multiple links per trait. [BC] (#363)
  • Added the smithy.api#noReplace trait to indicate a PUT lifecycle operation cannot replace the existing resource. (#351)
  • Added the smithy.api#unstable trait to indicate a shape MAY change. (#290)
  • Simplified aws.api#unsignedPayload to be an annotation. [BC] (#270)
  • Annotation traits are now lossless when loaded with additional properties, meaning they will contain those properties when serialized. (#385)

Selector updates

Selectors have received significant updates: (#388)

  • Attribute selectors can now evaluate scoped comparisons using @foo: to define a scope and @{bar} to define a context value. (#391)
  • And logic, via &&, has been added to allow multiple attribute comparisons. (#391)
  • Support for selecting nested trait properties with |, including list/object values and object keys, was added.
  • An opt-in trait relationship has been added. (#384)
  • The recursive neighbor selector, ~>, has been added. (#386)
  • A not equal comparison, !=, was added.
  • An exists comparison, ?=, was added. (#391)
  • Support for numbers in attribute selectors was added.
  • Numeric comparisons (>, >=, <, <=) were added.
  • The (length) function property was added. (#391)
  • Attribute selectors now support CSV values, allowing matching on one or more target values.
  • The :each selector is now :is for clarity. [BC]
  • The :of selector is now removed. Use reverse neighbors instead (e.g., member :test(< structure)). [BC]
  • The semantics of the :not selector have changed significantly. :not(list > member > string) now means "do not match list shapes that target strings", whereas this previously meant, "do not match string shapes targeted by lists". [BC]
  • Shape IDs with members must now be quoted. [BC]
  • Selector parsing and evaluating now tolerates unknown relationship types. (#377)

Validation updates

  • Services must now contain a closure of shapes that have case-insensitively unique names. [BC] (#337)
  • suppressions has been updated to now only suppress validation events that occur for an entire namespace or across the entire model. The @suppress trait was added to suppress validation events for a specific shape. [BC] (#397).
  • The UnreferencedShape validator has moved to smithy-model and is now always run. [BC] (#319)
  • EmitEachSelector and EmitNoneSelector were moved from smithy-linters into smithy-model.

JSON Schema conversion

The conversion to JSON schema was significantly overhauled. [BC] (#274)

  • Configuration for the build plugin was significantly overhauled. [BC] (#364)
  • The strategy for shape inlining has been changed. [BC]
  • The strategy for naming shapes and handling shape id conflicts has been changed. [BC]
  • Output schema error detection was improved.
  • The Java API surface has been reduced. [BC]
  • Added the ability to select schemas from a document using a JSON pointer.

OpenAPI conversion

The conversion to OpenAPI was significantly overhauled. [BC] (#275)

  • Configuration for the build plugin was significantly overhauled. [BC] (#364)
  • Protocol conversion was updated to utilize the new traits. (#275, #392)
  • Schemas are now generated for requests and responses instead of being inlined. [BC]
  • Fixed several issues with CORS integrations.

API Gateway OpenAPI conversion

The API Gateway specific OpenAPI mappers have been updated. [BC] (#367)

  • The ApiGatewayMapper interface was added, allowing mappers to control which API Gateway API type(s) they support.
  • Fixed several issues with CORS integrations. (#370)
  • Added support for JSON Patch-like OpenAPI schema changes based on JSON Pointers. (#293)
  • Added support for event streams in OpenAPI conversion. (#334)

Bug Fixes

  • Fixed an issue in JSON schema conversion where member traits were dropped in some scenarios. (#274)
  • Fixed an issue where authorization headers were not properly added to CORS configurations. (#328)
  • Fixed an issue where operation response headers were being applied to error responses in OpenAPI conversions. (#275)
  • Fixed an issue where apply statements wouldn't resolve target shapes properly in some cases. (#287)
  • Fixed an issue with the selector for the smithy.api#title trait. (#387)
  • Fixed several issues with the smithy.api#httpApiKeyAuth trait and its related conversions. (#291)
  • Fixed a bug with timestamp validation in specific versions of Java. (#316)

Optimizations

  • The TraitTargetValidator now performs as few checks on and selections of the entire model. (#389)
  • The dependency on jackson-core was replaced with a vendored version of minimal-json to reduce the chances of dependency conflicts. [BC] (#323)
  • Sped up model loading time by loading JSON models before IDL models to reduce forward reference lookups. (#287)

Breaking changes

All changes listed in this heading and any sub-headings are breaking changes.

  • The BooleanTrait abstract class in smithy-model was renamed AnnotationTrait. (#381)
  • The traits in the aws.apigateway namespace have moved from smithy-aws-traits to the smithy-aws-apigateway-traits package for more granular use. (#322)
    • Tooling that referenced these traits has also been updated.
  • The traits in the aws.iam namespace have moved from smithy-aws-traits to the smithy-aws-iam-traits package for more granular use. (#322)
    • Tooling that referenced these traits has also been updated.
  • The aws.api#ec2QueryName trait has moved to aws.protocols#ec2QueryName. (#286)
  • The aws.api#unsignedPayload trait has moved to aws.auth#unsignedPayload . (#286)
  • The smithy-codegen-freemarker package has been removed. (#382)
  • Traits can no longer be applied to public Smithy Prelude shapes. (#317)
  • Smithy's Pattern class is renamed to SmithyPattern to remove the conflict with Java's regex Pattern class. (#315)
  • Removed the Triple class from smithy-utils. (#313)
  • Normalized class names for OpenAPI SecurityScemeConverter implementations. (#291)
  • Removed alias functionality from software.amazon.smithy.build.SmithyBuildPlugin and software.amazon.smithy.build.ProjectionTransformer. (#409)
  • Removed software.amazon.smithy.model.shapes.Shape#visitor and software.amazon.smithy.model.shapes.ShapeVisitor$Builder. Use software.amazon.smithy.model.shapes.ShapeVisitor$Default instead. (#413)
  • software.amazon.smithy.model.Model#getTraitDefinitions and getTraitShapes were removed in favor of software.amazon.smithy.model.Model#getShapesWithTrait. (#412)

Deprecation cleanup

  • The deprecated IDL operation syntax has been removed (#373)
  • The deprecated NodeFactory interface has been removed. (#265)
  • The deprecated ShapeIndex class and all related APIs have been removed. (#266)
  • Support for the deprecated 0.4.0 model version has been removed. (#267)
  • The aws.api#service trait no longer supports the deprecated sdkServiceId, arnService, or productName properties. (#268)
  • The deprecated TemplateEngine and DefaultDataTemplateEngine have been removed. (#268)
  • The deprecated smithy.validators and smithy.suppressions are no longer used as aliases for validators and suppressions. (#268)
  • The smithy.api#references and smithy.api#idRef traits no longer support relative shape IDs. (#268)

Documentation

A significant overhaul of the specification and guides has been completed. This includes a better flow to the spec, more complete guides, deeper documentation of AWS specific components, and a complete redesign. Many direct links to components of the documentation will have changed.

0.9.9 (2020-04-01)

Bug Fixes

  • Add security to individual operations in OpenAPI conversion (#329)
  • Fix an issue with header casing for x-api-key integration with API Gateway (#330)
  • Fix discrepancies in smithy-aws-protocol-tests (#333, #335, #349)

0.9.8 (2020-03-26)

Features

  • Add RenameShapes model transformer (#318)
  • Build ValidationEvents are now sorted (#263)
  • Smithy CLI logging improvements (#263)
  • Model builds fail early when syntax errors occur (#264)
  • Warn when a deprecated trait is applied to a shape (#279)

Bug Fixes

  • Fix behavior of schemaDocumentExtensions when converting to OpenAPI (#320)
  • Fix discrepancies in smithy-aws-protocol-tests (#309, #321)
  • Properly format test case results (#271)
  • Fix dropping one character text block lines (#285)

Optimizations

  • Builds run parallel projections in parallel only if there are more than one (#263)
  • Run Smithy test suites as parameterized tests (#263)

Cleanup

  • Migrate protocol tests to new operation syntax (#260)
  • Build protocol tests with the Smithy Gradle plugin (#263)
  • Deprecate using explicitly smithy.api for trait removal (#306)

0.9.7 (2020-01-15)

Features

  • Updated Operation syntax in the Smithy IDL (#253)
  • Updated specification for XML traits (#242)
  • Add the @aws.api#ec2QueryName-trait trait (#251)
  • Add AWS protocol test models (#246, #247, #250, #255, and #258)

Optimizations

  • Use URLConnection cache setting in ModelAssembler (#244)

Bug Fixes

  • Use list of string for queryParams in the httpRequestTests trait (#240)

0.9.6 (2020-01-02)

Features

  • Allow XML maps to be flattened (#205)
  • Add and remove shape members to model automatically (#206)
  • Deprecate ShapeIndex in favor of Model (#209)
  • Allow the sensitive trait to be applied to all but operations, services, and resources (#212)
  • Added 0.5.0 IDL and AST format (#213)
  • Allow min to equal max in range trait (#216)
  • Added validation for length trait values (#217)
  • Limit streaming trait to top-level members (#221)
  • Added protocol compliance test traits (#226)
  • Added ability to configure timestamp validation (#229)
  • Moved TemplateEngine implementation into FreeMarker implementation (#230)
  • Added BoxIndex (#234)
  • Added more expect methods to Shape and Model (#237)

Optimizations

  • Update smithy-build to be streaming (#211)

Bug Fixes

  • Prevent bad list, set, and map recursion (#204)
  • Properly allow omitting endpoint discovery operation inputs (#220)

0.9.5 (2019-11-11)

Features

  • Allow overriding state management in CodeWriter (#186)
  • Allow the xmlFlattened trait to be applied to members (#191)
  • Add helper to determine HTTP-based timestamp formats (#193)
  • Allow specifying XML namespace prefixes (#195)
  • Add SymbolContainer, an abstraction over Symbols that enables easily creating and aggregating Symbols (#202)

Bug Fixes

  • Escape popped state content (#187)
  • Make shape ID serialization consistent (#196)
  • Exclude private members targeted in JSON schema converters (#199)
  • Fix naming collisions in JSON schema output (#200)
  • Update equals to included typed bag parents (#201)

0.9.4 (2019-10-09)

Features

  • Add support for AWS Client Endpoint Discovery (#165)
  • Refactor event streams to target members (#171)
  • Add support for aliasing referenced Symbols (#168)
  • Add support for Symbols to introduce dependencies (#169)
  • Add ability to manually escape reserved words in ReservedWordSymbolProvider (#174)
  • Add method to gather dependencies for Symbols (#170)
  • Add a caching SymbolProvider (#167)
  • Improve the usability of CodeWroter#openBlock (#175)
  • Improve the usability of PluginContext (#181)

Optimizations

  • Disable URLConnection cache in CLI (#180)

Bug Fixes

  • Fix issue with generated authentication for CORS checks (#179)
  • Set the defaultTimestampFormat to epoch-seconds for aws.rest-json protocols in OpenAPI (#184)

0.9.3 (2019-09-16)

Features

  • Clean up CodeWriter modifiers (#143)
  • Add typed ObjectNode member expectation functions (#144)
  • Add expectShapeId for fully-qualified shape ID (#147)
  • Add helper to EnumTrait to check if it has names (#148)
  • Add Symbol references (#149)
  • Add ReservedWords builder for simpler construction (#150)
  • Allow using path expressions in paginator outputs (#152)
  • Add method to get non-trait shapes (#153)
  • Add method to write class resource to manifest (#157)
  • Allow authType to be specified (#160)

Bug Fixes

  • Fix collection and gradle doc issues (#145)
  • Make AuthorizerDefinition definition private (#146)
  • Fix put handling on ResourceShape (#158)
  • Fix parse error when apply is at eof (#159)
  • Prevent list/set member from targeting container (#162)
  • Allow model assembling from symlink model files / directory (#163)