@azure-tools/typespec-client-generator-core
TypeScript icon, indicating that this package has built-in type declarations

0.42.3 • Public • Published

@azure-tools/typespec-client-generator-core

TypeSpec Data Plane Generation library

Install

npm install @azure-tools/typespec-client-generator-core

Decorators

Azure.ClientGenerator.Core

@access

Set explicit access for operations, models and enums. When setting access for models, the access info wll not be propagated to models' properties, base models or sub models. When setting access for an operation, it will influence the access info for models/enums that are used by this operation. Models/enums that are used in any operations with @access(Access.public) will be implicitly set to access "public" Models/enums that are only used in operations with @access(Access.internal) will be implicitly set to access "internal". This influence will be propagated to models' properties, parent models, discriminated sub models. But this influence will be override by @usage decorator on models/enums directly. If an operation/model/enum has no @access decorator and is not influenced by any operation with @access decorator, the access result is undefined.

@Azure.ClientGenerator.Core.access(value: EnumMember, scope?: valueof string)
Target

Model | Operation | Enum | Union

Parameters
Name Type Description
value EnumMember The access info you want to set for this model or operation.
scope valueof string The language scope you want this decorator to apply to. If not specified, will apply to all language emitters
Examples
Set access
// Access.internal
@access(Access.internal)
model ModelToHide {
prop: string;
}
// Access.internal
@access(Access.internal)
op test: void;
Access propagation
// Access.internal
@discriminator("kind")
model Fish {
  age: int32;
}

// Access.internal
@discriminator("sharktype")
model Shark extends Fish {
  kind: "shark";
  origin: Origin;
}

// Access.internal
model Salmon extends Fish {
  kind: "salmon";
}

// Access.internal
model SawShark extends Shark {
  sharktype: "saw";
}

// Access.internal
model Origin {
  country: string;
  city: string;
  manufacture: string;
}

// Access.internal
@get
@access(Access.internal)
op getModel(): Fish;
Access influence from operation
// Access.internal
model Test1 {}

// Access.internal
@access(Access.internal)
@route("/func1")
op func1(@body body: Test1): void;

// undefined
model Test2 {}

// undefined
@route("/func2")
op func2(@body body: Test2): void;

// Access.public
model Test3 {}

// Access.public
@access(Access.public)
@route("/func3")
op func3(@body body: Test3): void;

// undefined
model Test4 {}

// Access.internal
@access(Access.internal)
@route("/func4")
op func4(@body body: Test4): void;

// undefined
@route("/func5")
op func5(@body body: Test4): void;

// Access.public
model Test5 {}

// Access.internal
@access(Access.internal)
@route("/func6")
op func6(@body body: Test5): void;

// undefined
@route("/func7")
op func7(@body body: Test5): void;

// Access.public
@access(Access.public)
@route("/func8")
op func8(@body body: Test5): void;

@client

Create a ClientGenerator.Core client out of a namespace or interface

@Azure.ClientGenerator.Core.client(value?: {}, scope?: valueof string)
Target

Namespace | Interface

Parameters
Name Type Description
value {} Optional configuration for the service.
scope valueof string The language scope you want this decorator to apply to. If not specified, will apply to all language emitters
Examples
Basic client setting
@client
namespace MyService {

}
Setting with other service
namespace MyService {

}

@client({
  service: MyService,
})
interface MyInterface {}
Changing client name if you don't want <Interface/Namespace>Client
@client({
  client: MySpecialClient,
})
interface MyInterface {}

@clientFormat

DEPRECATED: Use @encode decorator in @typespec/compiler instead.

Can be used to explain the client type that the current TYPESPEC type should map to.

@Azure.ClientGenerator.Core.clientFormat(value: valueof "unixtime" | "iso8601" | "rfc1123" | "seconds")
Target

ModelProperty

Parameters
Name Type Description
value valueof "unixtime" | "iso8601" | "rfc1123" | "seconds" The client format to apply.
Examples
model MyModel {
  @clientFormat("unixtime")
  created_at?: int64;
}

@clientName

Changes the name of a method, parameter, property, or model generated in the client SDK

@Azure.ClientGenerator.Core.clientName(rename: valueof string, scope?: valueof string)
Target

unknown

Parameters
Name Type Description
rename valueof string The rename you want applied to the object
scope valueof string The language scope you want this decorator to apply to. If not specified, will apply to all language emitters
Examples
@clientName("nameInClient")
op nameInService: void;
@clientName("nameForJava", "java")
@clientName("name_for_python", "python")
@clientName("nameForCsharp", "csharp")
@clientName("nameForJavascript", "javascript")
op nameInService: void;

@convenientAPI

Whether you want to generate an operation as a convenient operation.

@Azure.ClientGenerator.Core.convenientAPI(value?: valueof boolean, scope?: valueof string)
Target

Operation

Parameters
Name Type Description
value valueof boolean Whether to generate the operation as convenience method or not.
scope valueof string The language scope you want this decorator to apply to. If not specified, will apply to all language emitters
Examples
@convenientAPI(false)
op test: void;

@exclude

DEPRECATED: Use @usage and @access decorator instead.

Whether to exclude a model from generation for specific languages. By default we generate all models that are included in operations.

@Azure.ClientGenerator.Core.exclude(scope?: valueof string)
Target

Model

Parameters
Name Type Description
scope valueof string The language scope you want this decorator to apply to. If not specified, will apply to all language emitters
Examples
@exclude("python")
model ModelToExclude {
  prop: string;
}

@flattenProperty

Set whether a model property should be flattened or not.

@Azure.ClientGenerator.Core.flattenProperty(scope?: valueof string)
Target

ModelProperty

Parameters
Name Type Description
scope valueof string The language scope you want this decorator to apply to. If not specified, will apply to all language emitters
Examples
model Foo {
  @flattenProperty
  prop: Bar;
}
model Bar {}

@include

DEPRECATED: Use @usage and @access decorator instead.

Whether to include a model in generation for specific languages. By default we generate all models that are included in operations.

@Azure.ClientGenerator.Core.include(scope?: valueof string)
Target

Model

Parameters
Name Type Description
scope valueof string The language scope you want this decorator to apply to. If not specified, will apply to all language emitters
Examples
@include("python")
model ModelToInclude {
  prop: string;
}

@internal

DEPRECATED: Use @access decorator instead.

Whether to mark an operation as internal for specific languages, meaning it should not be exposed to end SDK users

@Azure.ClientGenerator.Core.internal(scope?: valueof string)
Target

Operation

Parameters
Name Type Description
scope valueof string The language scope you want this decorator to apply to. If not specified, will apply to all language emitters
Examples
@internal("python")
op test: void;

@operationGroup

Create a ClientGenerator.Core operation group out of a namespace or interface

@Azure.ClientGenerator.Core.operationGroup(scope?: valueof string)
Target

Namespace | Interface

Parameters
Name Type Description
scope valueof string The language scope you want this decorator to apply to. If not specified, will apply to all language emitters
Examples
@operationGroup
interface MyInterface {}

@protocolAPI

Whether you want to generate an operation as a protocol operation.

@Azure.ClientGenerator.Core.protocolAPI(value?: valueof boolean, scope?: valueof string)
Target

Operation

Parameters
Name Type Description
value valueof boolean Whether to generate the operation as protocol or not.
scope valueof string The language scope you want this decorator to apply to. If not specified, will apply to all language emitters
Examples
@protocolAPI(false)
op test: void;

@usage

Expand usage for models/enums. A model/enum's default usage info is always calculated by the operations that use it. You could use this decorator to expand the default usage info. For example, with operation definition op test(): OutputModel, the model OutputModel has default usage Usage.output. After adding decorator @@usage(OutputModel, Usage.input), the final usage result for OutputModel is Usage.input | Usage.output. The calculation of default usage info for models will be propagated to models' properties, parent models, discriminated sub models. But the expanded usage from @usage decorator will not be propagated. If you want to do any customization for the usage of a model, you need to take care of all related models/enums.

@Azure.ClientGenerator.Core.usage(value: EnumMember | Union, scope?: valueof string)
Target

Model | Enum | Union

Parameters
Name Type Description
value EnumMember | Union The usage info you want to set for this model.
scope valueof string The language scope you want this decorator to apply to. If not specified, will apply to all language emitters
Examples
Expand usage for model
op test(): OutputModel;

// usage result for `OutputModel` is `Usage.input | Usage.output`
@usage(Usage.input)
model OutputModel {
  prop: string;
}
Propagation of usage
// Usage.output
@discriminator("kind")
model Fish {
  age: int32;
}

// Usage.input | Usage.output
@discriminator("sharktype")
@usage(Usage.input)
model Shark extends Fish {
  kind: "shark";
  origin: Origin;
}

// Usage.output
model Salmon extends Fish {
  kind: "salmon";
}

// Usage.output
model SawShark extends Shark {
  sharktype: "saw";
}

// Usage.output
model Origin {
  country: string;
  city: string;
  manufacture: string;
}

@get
op getModel(): Fish;

Package Sidebar

Install

npm i @azure-tools/typespec-client-generator-core

Weekly Downloads

9,577

Version

0.42.3

License

MIT

Unpacked Size

412 kB

Total Files

54

Last publish

Collaborators

  • microsoft1es
  • azure-sdk