TypeSpec library for emitting TypeSpec to JSON Schema and converting JSON Schema to TypeSpec
npm install @typespec/json-schema
Add the @jsonSchema
decorator to any types or namespaces you want to emit as JSON Schema.
import "@typespec/json-schema";
using TypeSpec.JsonSchema;
@jsonSchema
namespace Example;
model Car {
make: string;
model: string;
}
- Via the command line
tsp compile . --emit=@typespec/json-schema
- Via the config
emit:
- "@typespec/json-schema"
Type: "yaml" | "json"
Serialize the schema as either yaml or json.
Type: "string" | "number"
How to handle 64 bit integers on the wire. Options are:
- string: serialize as a string (widely interoperable)
- number: serialize as a number (not widely interoperable)
Type: string
When provided, bundle all the schemas into a single json schema document with schemas under $defs. The provided id is the id of the root document and is also used for the file name.
Type: boolean
When true, emit all model declarations to JSON Schema without requiring the @jsonSchema decorator.
Type: boolean
When true, emit all references as json schema files, even if the referenced type does not have the @jsonSchema
decorator or is not within a namespace with the @jsonSchema
decorator.
@baseUri
@contains
@contentEncoding
@contentMediaType
@contentSchema
@extension
@id
@jsonSchema
@maxContains
@maxProperties
@minContains
@minProperties
@multipleOf
@prefixItems
@uniqueItems
Set the base URI for any schemas emitted from types within this namespace.
@TypeSpec.JsonSchema.baseUri(baseUri: valueof string)
Namespace
Name | Type | Description |
---|---|---|
baseUri | valueof scalar string |
the base URI. Schema IDs inside this namespace are relative to this URI. |
Specify that the array must contain at least one instance of the provided type.
Use @minContains
and @maxContains
to customize how many instances to expect.
@TypeSpec.JsonSchema.contains(value: unknown)
union unknown[] | ModelProperty
Name | Type | Description |
---|---|---|
value | (intrinsic) unknown |
The type the array must contain. |
Specify the encoding used for the contents of a string.
@TypeSpec.JsonSchema.contentEncoding(value: valueof string)
union string | ModelProperty
Name | Type | Description |
---|---|---|
value | valueof scalar string |
Specify the content type of content stored in a string.
@TypeSpec.JsonSchema.contentMediaType(value: valueof string)
union string | ModelProperty
Name | Type | Description |
---|---|---|
value | valueof scalar string |
the media type of the string contents |
Specify the schema for the contents of a string when interpreted according to the content's media type and encoding.
@TypeSpec.JsonSchema.contentSchema(value: unknown)
union string | ModelProperty
Name | Type | Description |
---|---|---|
value | (intrinsic) unknown |
the schema of the string contents |
Specify a custom property to add to the emitted schema. Useful for adding custom keywords
and other vendor-specific extensions. The value will be converted to a schema unless the parameter
is wrapped in the Json<Data>
template. For example, @extension("x-schema", { x: "value" })
will
emit a JSON schema value for x-schema
, whereas @extension("x-schema", Json<{x: "value"}>)
will
emit the raw JSON code {x: "value"}
.
@TypeSpec.JsonSchema.extension(key: valueof string, value: unknown)
(intrinsic) unknown
Name | Type | Description |
---|---|---|
key | valueof scalar string |
the name of the keyword of vendor extension, e.g. x-custom . |
value | (intrinsic) unknown |
the value of the keyword. Will be converted to a schema unless wrapped in Json<Data> . |
Specify the JSON Schema id. If this model or a parent namespace has a base URI, the provided ID will be relative to that base URI.
By default, the id will be constructed based on the declaration's name.
@TypeSpec.JsonSchema.id(id: valueof string)
(intrinsic) unknown
Name | Type | Description |
---|---|---|
id | valueof scalar string |
the id of the JSON schema for this declaration. |
Add to namespaces to emit models within that namespace to JSON schema. Add to another declaration to emit that declaration to JSON schema.
Optionally, for namespaces, you can provide a baseUri, and for other declarations, you can provide the id.
@TypeSpec.JsonSchema.jsonSchema(baseUri?: valueof string)
(intrinsic) unknown
Name | Type | Description |
---|---|---|
baseUri | valueof scalar string |
Schema IDs are interpreted as relative to this URI. |
Specify that the array must contain at most some number of the types provided by the contains decorator.
@TypeSpec.JsonSchema.maxContains(value: valueof int32)
union unknown[] | ModelProperty
Name | Type | Description |
---|---|---|
value | valueof scalar int32 |
The maximum number of instances the array must contain |
Specify the maximum number of properties this object can have.
@TypeSpec.JsonSchema.maxProperties(value: valueof int32)
union Record<unknown> | ModelProperty
Name | Type | Description |
---|---|---|
value | valueof scalar int32 |
The maximum number of properties this object can have. |
Specify that the array must contain at least some number of the types provided by the contains decorator.
@TypeSpec.JsonSchema.minContains(value: valueof int32)
union unknown[] | ModelProperty
Name | Type | Description |
---|---|---|
value | valueof scalar int32 |
The minimum number of instances the array must contain |
Specify the minimum number of properties this object can have.
@TypeSpec.JsonSchema.minProperties(value: valueof int32)
union Record<unknown> | ModelProperty
Name | Type | Description |
---|---|---|
value | valueof scalar int32 |
The minimum number of properties this object can have. |
Specify that the numeric type must be a multiple of some numeric value.
@TypeSpec.JsonSchema.multipleOf(value: valueof numeric)
union numeric | ModelProperty
Name | Type | Description |
---|---|---|
value | valueof scalar numeric |
The numeric type must be a multiple of this value. |
Specify that the target array must begin with the provided types.
@TypeSpec.JsonSchema.prefixItems(value: unknown[])
union unknown[] | ModelProperty
Name | Type | Description |
---|---|---|
value | model unknown[] |
a tuple containing the types that must be present at the start of the array |
Specify that every item in the array must be unique.
@TypeSpec.JsonSchema.uniqueItems
union unknown[] | ModelProperty
None