0.59 - August 2024
Breaking Changes
Section titled âBreaking Changesâ@typespec/compiler
Section titled â@typespec/compilerâ-
#4050 Fix issue where naming a namespace with the same name as the blockless namespace would merge with it instead of creating a subnamespace like any other name would.
namespace MyOrg.MyProject;namespace MyOrg.MyProject.MyArea {model A {}}namespace MyArea2 {model B {}}Previously model
Awould end-up in namespaceMyOrg.MyProject.MyAreaand modelBinMyOrg.MyProject.MyArea2. With this change modelAwill now be inMyOrg.MyProject.MyOrg.MyProject.MyArea. To achieve the previous behavior the above code should be written as:namespace MyOrg.MyProject;namespace MyArea {model A {}}namespace MyArea2 {model B {}}
@typespec/json-schema
Section titled â@typespec/json-schemaâ- #3558 Updates
@extensiondecorator to support TypeSpec values in addition to types.
In previous versions of the json-schema emitter, the @extension decorator only accepted types as the value. These are emitted as JSON schemas. In order to add extensions as raw values, types had to be wrapped in the Json<> template when being passed to the @extension decorator.
This change allows setting TypeSpec values (introduced in TypeSpec 0.57.0) directly instead.
The following example demonstrates using values directly:
@extension("x-example", #{ foo: "bar" })model Foo {}This change results in scalars being treated as values instead of types. This will result in the @extension decorator emitting raw values for scalar types instead of JSON schema. To preserve the previous behavior, use typeof when passing in a scalar value.
The following example demonstrates how to pass a scalar value that emits a JSON schema:
@extension("x-example", "foo")model Foo {}To preserve this same behavior, the above example can be updated to the following:
@extension("x-example", typeof "foo")model Foo {}Deprecations
Section titled âDeprecationsâ@typespec/http
Section titled â@typespec/httpâ-
#3932 API deprecation:
HttpOperation#pathSegmentsis deprecated. UseHttpOperation#uriTemplateinstead. -
#3932 Deprecated
@query({format: })option. Use@query(#{explode: true})instead offormormultiformat. Previouslycsv/simpleis the default now. Decorator is also expecting an object value now instead of a model. A deprecation warning with a codefix will help migrating.@query({format: "form"}) select: string[];@query(#{explode: true}) select: string[];
Features
Section titled âFeaturesâ@typespec/compiler
Section titled â@typespec/compilerâ-
#3906 Support completion for template parameter extending model or object value
Example
model User<T extends {name: string;age: int16}> {}alias user = User<{â: [age] | [name];}>; -
#4020 Add support for encoding numeric types as string
-
#4023 Warn when using
\in config file field that expect a path. -
#3932 Add
ArrayEncodingenum to define simple serialization of arrays
@typespec/http
Section titled â@typespec/httpâ-
#4046 API: Expose
properties: HttpProperty[]on operation parameter and response which reference all the properties of interest(Body, statusCode, contentType, implicitBodyProperty, etc.) -
#3932
@routecan now take a uri template as defined by RFC-6570@route("files{+path}") download(path: string): void;
@typespec/rest
Section titled â@typespec/restâ- #3932 Add support for URI templates in routes
@typespec/openapi3
Section titled â@typespec/openapi3â- #3894 Add support for
@useRefon responses - #4020 Add support for encoding numeric types as string
- #3890
@extensionused on the service namespace will set extension at the root of the document - #3932 Add support for URI templates in routes
Bug Fixes
Section titled âBug Fixesâ@typespec/compiler
Section titled â@typespec/compilerâ-
#3881 Fixes a bug where ending a non-terminal line in a multi-line comment with a backslash caused the next star to show up in the parsed doc string.
-
#4050 Allow using compact namespace form
Foo.Barwhen inside another namespacenamespace MyOrg.MyProject {namespace MyModule.MySubmodule { // <-- this used to emit an error// ...}} -
#3898 Fix decimal numeric with leading zeros
-
#4046 Fix type comparison of literal and scalar when in projection context
-
#4022
tsp compile --watchwill not stop when a crash happens during compilation -
#3933 Add
consttemplate parameter to get the precise lib type
@typespec/http
Section titled â@typespec/httpâ- #3909 Fix
HttpPartnot respecting explicit part name by always using the property name - #3933 Fix some diagnostic not showing the right message
@typespec/versioning
Section titled â@typespec/versioningâ- #3911 Allow spreading a model that has props added in previous version
- #3951 Fixes issue where spreading a versioned model as a parameter to an incompatible versioned operation would cause the compiler to crash.
@typespec/openapi3
Section titled â@typespec/openapi3â- #4046 Fix issue where operation example would produce an empty object when
@body/@bodyRootwas used - #4046 Fix operation response body examples showing up for each response.
- #3912 Fixes bug where union documentation was being applied to each union member in emitted output.
- #3908 Fixes bug where circular references in unions caused an empty object to be emitted instead of a ref.
@typespec/protobuf
Section titled â@typespec/protobufâ- #3933 Fix some diagnostic not showing the right message