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