Skip to content

July 2022

This release contains breaking changes

  • Emitter options normalized to use kebab-case instead of camelCase.
  • @serviceHost decorator replaced by @server decorator
  • Versioning decorators now use enumerated values instead of strings

Emitter options

This release brings a stricter option definition for emitters and requires usage of those options to be specified with the fully qualified name to prevent conflicts. All options have also been renamed to match kebab-case naming. The options can also be specified via the tspconfig.yaml file.

Migrating Command Line Scripts

If you had for example --option operationPollingLocation=tenant

  1. Use tspconfig.yaml project file Recommended

    If you donโ€™t have that file yet, create it next to package.json, this file can be used to configure the emitters.

    emitters:
    <fully-qualified-emitter-package-name>:
    <optionName>: <optionValue>
    # For example
    emitters:
    @typespec/openapi3:
    output-file: ./openapi.json
  2. Via the --option flag

    You can still use the --option flag but youโ€™ll need to specify the fully qualified name of the option.

    Terminal window
    --option @<emitter-package>.<optionName>=<optionValue>
    # For example
    --option @typespec/openapi3.output-file=openapi.json

Renamed Emitter Options

BeforeNow
@typespec/openapi3
outputFileoutput-file

@serviceHost decorator replaced with @server decorator

The @serviceHost decorator that decorated the root namespace was used to specify the domain name of the base service endpoint. This functionality has been replaced by the @server decorator, which allows specifying full and parametrized Uris for the service endpoint, as described here

Before

@serviceHost("example.com")
namespace MyService;

After

@server("https://example.com")
namespace MyService;

Versioning uses enums instead of strings

Versions must now be specified using string-valued enumerations, and each of the versioning decorators must reference an enum value rather than using the version string directly.

// Before
@versioned("2021-01-12" | "2022-01-15-preview")
namespace Api;
// After
@versioned(Versions)
namespace Api;
enum Versions { v2021_01_12: "2021-01-12", v2022_01_15_preview: "2022-01-15-preview" }
// Before
@added("2022-01-15-preview")
model Foo {}
// After
@added(Versions.v2022_01_15_preview)
model Foo {}