@typespec/openapi 1.13.0-dev.0 → 1.13.0-dev.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -6
- package/dist/generated-defs/TypeSpec.OpenAPI.d.ts +27 -5
- package/dist/generated-defs/TypeSpec.OpenAPI.d.ts.map +1 -1
- package/dist/src/decorators.d.ts +9 -7
- package/dist/src/decorators.d.ts.map +1 -1
- package/dist/src/decorators.js +78 -23
- package/dist/src/decorators.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib.d.ts +32 -2
- package/dist/src/lib.d.ts.map +1 -1
- package/dist/src/lib.js +12 -0
- package/dist/src/lib.js.map +1 -1
- package/dist/src/types.d.ts +24 -0
- package/dist/src/types.d.ts.map +1 -1
- package/lib/decorators.tsp +38 -7
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -147,10 +147,13 @@ op read(): string;
|
|
|
147
147
|
|
|
148
148
|
#### `@tagMetadata`
|
|
149
149
|
|
|
150
|
-
Specify OpenAPI
|
|
150
|
+
Specify OpenAPI tag metadata. Can be used in two forms:
|
|
151
|
+
|
|
152
|
+
- Inline form: specify a single tag by name with optional metadata.
|
|
153
|
+
- Array form: specify an ordered list of tags with their metadata in a single decorator call.
|
|
151
154
|
|
|
152
155
|
```typespec
|
|
153
|
-
@TypeSpec.OpenAPI.tagMetadata(name: valueof string, tagMetadata
|
|
156
|
+
@TypeSpec.OpenAPI.tagMetadata(name: valueof string | TypeSpec.OpenAPI.TagMetadataWithName[], tagMetadata?: valueof TypeSpec.OpenAPI.TagMetadata)
|
|
154
157
|
```
|
|
155
158
|
|
|
156
159
|
##### Target
|
|
@@ -159,13 +162,15 @@ Specify OpenAPI additional information.
|
|
|
159
162
|
|
|
160
163
|
##### Parameters
|
|
161
164
|
|
|
162
|
-
| Name | Type
|
|
163
|
-
| ----------- |
|
|
164
|
-
| name | `valueof string`
|
|
165
|
-
| tagMetadata | [valueof `TagMetadata`](#tagmetadata)
|
|
165
|
+
| Name | Type | Description |
|
|
166
|
+
| ----------- | ---------------------------------------------------------- | ------------------------------------------------------------------- |
|
|
167
|
+
| name | `valueof string \| TypeSpec.OpenAPI.TagMetadataWithName[]` | Tag name (inline form) or array of tags with metadata (array form). |
|
|
168
|
+
| tagMetadata | [valueof `TagMetadata`](#tagmetadata) | Additional information for the tag. Only used in inline form. |
|
|
166
169
|
|
|
167
170
|
##### Examples
|
|
168
171
|
|
|
172
|
+
###### Inline form
|
|
173
|
+
|
|
169
174
|
```typespec
|
|
170
175
|
@service
|
|
171
176
|
@tagMetadata(
|
|
@@ -181,3 +186,16 @@ namespace PetStore {
|
|
|
181
186
|
|
|
182
187
|
}
|
|
183
188
|
```
|
|
189
|
+
|
|
190
|
+
###### Array form (preserves explicit tag order)
|
|
191
|
+
|
|
192
|
+
```typespec
|
|
193
|
+
@service
|
|
194
|
+
@tagMetadata(#[
|
|
195
|
+
#{ name: "First Tag", description: "First tag description" },
|
|
196
|
+
#{ name: "Second Tag", description: "Second tag description" }
|
|
197
|
+
])
|
|
198
|
+
namespace PetStore {
|
|
199
|
+
|
|
200
|
+
}
|
|
201
|
+
```
|
|
@@ -8,11 +8,22 @@ export interface AdditionalInfo {
|
|
|
8
8
|
readonly contact?: Contact;
|
|
9
9
|
readonly license?: License;
|
|
10
10
|
}
|
|
11
|
+
export interface TagMetadataWithName {
|
|
12
|
+
readonly [key: string]: unknown;
|
|
13
|
+
readonly name: string;
|
|
14
|
+
readonly description?: string;
|
|
15
|
+
readonly externalDocs?: ExternalDocs;
|
|
16
|
+
readonly parent?: string;
|
|
17
|
+
readonly summary?: string;
|
|
18
|
+
readonly kind?: string;
|
|
19
|
+
}
|
|
11
20
|
export interface TagMetadata {
|
|
12
21
|
readonly [key: string]: unknown;
|
|
13
22
|
readonly description?: string;
|
|
14
23
|
readonly externalDocs?: ExternalDocs;
|
|
15
24
|
readonly parent?: string;
|
|
25
|
+
readonly summary?: string;
|
|
26
|
+
readonly kind?: string;
|
|
16
27
|
}
|
|
17
28
|
export interface Contact {
|
|
18
29
|
readonly [key: string]: unknown;
|
|
@@ -87,19 +98,30 @@ export type ExternalDocsDecorator = (context: DecoratorContext, target: Type, ur
|
|
|
87
98
|
*/
|
|
88
99
|
export type InfoDecorator = (context: DecoratorContext, target: Namespace, additionalInfo: AdditionalInfo) => DecoratorValidatorCallbacks | void;
|
|
89
100
|
/**
|
|
90
|
-
* Specify OpenAPI
|
|
101
|
+
* Specify OpenAPI tag metadata. Can be used in two forms:
|
|
102
|
+
* - Inline form: specify a single tag by name with optional metadata.
|
|
103
|
+
* - Array form: specify an ordered list of tags with their metadata in a single decorator call.
|
|
91
104
|
*
|
|
92
|
-
* @param name
|
|
93
|
-
* @param tagMetadata Additional information
|
|
94
|
-
* @example
|
|
105
|
+
* @param name Tag name (inline form) or array of tags with metadata (array form).
|
|
106
|
+
* @param tagMetadata Additional information for the tag. Only used in inline form.
|
|
107
|
+
* @example Inline form
|
|
95
108
|
* ```typespec
|
|
96
109
|
* @service()
|
|
97
110
|
* @tagMetadata("Tag Name", #{description: "Tag description", externalDocs: #{url: "https://example.com", description: "More info.", `x-custom`: "string"}, `x-custom`: "string"})
|
|
98
111
|
* @tagMetadata("Child Tag", #{description: "Child tag description", parent: "Tag Name"})
|
|
99
112
|
* namespace PetStore {}
|
|
100
113
|
* ```
|
|
114
|
+
* @example Array form (preserves explicit tag order)
|
|
115
|
+
* ```typespec
|
|
116
|
+
* @service()
|
|
117
|
+
* @tagMetadata(#[
|
|
118
|
+
* #{ name: "First Tag", description: "First tag description" },
|
|
119
|
+
* #{ name: "Second Tag", description: "Second tag description" },
|
|
120
|
+
* ])
|
|
121
|
+
* namespace PetStore {}
|
|
122
|
+
* ```
|
|
101
123
|
*/
|
|
102
|
-
export type TagMetadataDecorator = (context: DecoratorContext, target: Namespace, name: string, tagMetadata
|
|
124
|
+
export type TagMetadataDecorator = (context: DecoratorContext, target: Namespace, name: string | readonly TagMetadataWithName[], tagMetadata?: TagMetadata) => DecoratorValidatorCallbacks | void;
|
|
103
125
|
export type TypeSpecOpenAPIDecorators = {
|
|
104
126
|
operationId: OperationIdDecorator;
|
|
105
127
|
extension: ExtensionDecorator;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypeSpec.OpenAPI.d.ts","sourceRoot":"","sources":["../../generated-defs/TypeSpec.OpenAPI.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,2BAA2B,EAC3B,KAAK,EACL,SAAS,EACT,SAAS,EACT,IAAI,EACL,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"TypeSpec.OpenAPI.d.ts","sourceRoot":"","sources":["../../generated-defs/TypeSpec.OpenAPI.ts"],"names":[],"mappings":"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"}
|
package/dist/src/decorators.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Namespace, Operation, Program, Type } from "@typespec/compiler";
|
|
2
|
-
import { DefaultResponseDecorator, ExtensionDecorator, ExternalDocsDecorator, InfoDecorator, OperationIdDecorator,
|
|
3
|
-
import { AdditionalInfo, ExtensionKey, ExternalDocs } from "./types.js";
|
|
2
|
+
import { DefaultResponseDecorator, ExtensionDecorator, ExternalDocsDecorator, InfoDecorator, OperationIdDecorator, TagMetadataDecorator } from "../generated-defs/TypeSpec.OpenAPI.js";
|
|
3
|
+
import { AdditionalInfo, ExtensionKey, ExternalDocs, TagMetadataWithName } from "./types.js";
|
|
4
4
|
export declare const
|
|
5
5
|
/**
|
|
6
6
|
* Returns operationId set via the `@operationId` decorator or `undefined`
|
|
@@ -75,15 +75,17 @@ export declare function getInfo(program: Program, entity: Namespace): Additional
|
|
|
75
75
|
/** Resolve the info entry by merging data specified with `@service`, `@summary` and `@info`. */
|
|
76
76
|
export declare function resolveInfo(program: Program, entity: Namespace): AdditionalInfo | undefined;
|
|
77
77
|
/** Get TagsMetadata set with `@tagMetadata` decorator */
|
|
78
|
-
declare const getTagsMetadata: (program: Program, type: Type) =>
|
|
79
|
-
[name: string]: TagMetadata;
|
|
80
|
-
} | undefined;
|
|
78
|
+
declare const getTagsMetadata: (program: Program, type: Type) => TagMetadataWithName[] | undefined;
|
|
81
79
|
/**
|
|
82
80
|
* Decorator to add metadata to a tag associated with a namespace.
|
|
81
|
+
* Supports two forms:
|
|
82
|
+
* - Inline form: `@tagMetadata("tag-name", #{...})` - adds a single tag by name
|
|
83
|
+
* - Array form: `@tagMetadata(#[#{name: "tag1", ...}, ...])` - sets an ordered list of tags
|
|
84
|
+
*
|
|
83
85
|
* @param context - The decorator context.
|
|
84
86
|
* @param entity - The namespace entity to associate the tag with.
|
|
85
|
-
* @param name - The name of the tag.
|
|
86
|
-
* @param tagMetadata - Optional metadata for the tag.
|
|
87
|
+
* @param name - The name of the tag (inline form) or an array of tag metadata objects (array form).
|
|
88
|
+
* @param tagMetadata - Optional metadata for the tag. Only used in inline form.
|
|
87
89
|
*/
|
|
88
90
|
export declare const tagMetadataDecorator: TagMetadataDecorator;
|
|
89
91
|
export { getTagsMetadata };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,SAAS,EACT,SAAS,EACT,OAAO,EAEP,IAAI,EAEL,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,EACb,oBAAoB,
|
|
1
|
+
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,SAAS,EACT,SAAS,EACT,OAAO,EAEP,IAAI,EAEL,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,EACb,oBAAoB,EAEpB,oBAAoB,EAErB,MAAM,uCAAuC,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE7F,eAAO;AACL;;GAEG;AACH,cAAc;AAEd;;;;;GAKG;AACH,cAAc,4DACqD,CAAC;AACtE;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,oBAM1B,CAAC;AAIF,uCAAuC;AACvC,eAAO,MAAM,UAAU,EAAE,kBAaxB,CAAC;AAuCF;;;;;GAKG;AACH,wBAAgB,OAAO,CACrB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,cAAc,GAAG,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,QAGrD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,QAKhG;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAG,WAAW,CAAC,YAAY,EAAE,GAAG,CAAC,CAE5F;AAQD,6CAA6C;AAC7C,eAAO,MAAM,gBAAgB,EAAE,wBAM9B,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAG,OAAO,CAEzE;AAID;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,qBAW3B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAG,YAAY,GAAG,SAAS,CAExF;AAID,kCAAkC;AAClC,eAAO,MAAM,KAAK,EAAE,aAmCnB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,GAAG,cAAc,GAAG,SAAS,CAEvF;AAED,gGAAgG;AAChG,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,GAAG,cAAc,GAAG,SAAS,CAU3F;AAMD,yDAAyD;AACzD,QAAA,MAAO,eAAe,qEAErB,CAAC;AAUF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,EAAE,oBAqIlC,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
package/dist/src/decorators.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { compilerAssert, getDoc, getService, getSummary, isType, serializeValueAsJson, } from "@typespec/compiler";
|
|
2
|
-
import { useStateMap } from "@typespec/compiler/utils";
|
|
2
|
+
import { useStateMap, useStateSet } from "@typespec/compiler/utils";
|
|
3
3
|
import * as http from "@typespec/http";
|
|
4
4
|
import { validateAdditionalInfoModel, validateIsUri } from "./helpers.js";
|
|
5
5
|
import { createStateSymbol, OpenAPIKeys, reportDiagnostic } from "./lib.js";
|
|
@@ -180,12 +180,21 @@ function omitUndefined(data) {
|
|
|
180
180
|
}
|
|
181
181
|
/** Get TagsMetadata set with `@tagMetadata` decorator */
|
|
182
182
|
const [getTagsMetadata, setTagsMetadata] = useStateMap(OpenAPIKeys.tagsMetadata);
|
|
183
|
+
/**
|
|
184
|
+
* State set tracking namespaces that have used the array form of @tagMetadata.
|
|
185
|
+
* Used to detect mixing of array and inline forms.
|
|
186
|
+
*/
|
|
187
|
+
const [isTagsMetadataArrayFormUsed, setTagsMetadataArrayFormUsed] = useStateSet(createStateSymbol("tagsMetadataArrayForm"));
|
|
183
188
|
/**
|
|
184
189
|
* Decorator to add metadata to a tag associated with a namespace.
|
|
190
|
+
* Supports two forms:
|
|
191
|
+
* - Inline form: `@tagMetadata("tag-name", #{...})` - adds a single tag by name
|
|
192
|
+
* - Array form: `@tagMetadata(#[#{name: "tag1", ...}, ...])` - sets an ordered list of tags
|
|
193
|
+
*
|
|
185
194
|
* @param context - The decorator context.
|
|
186
195
|
* @param entity - The namespace entity to associate the tag with.
|
|
187
|
-
* @param name - The name of the tag.
|
|
188
|
-
* @param tagMetadata - Optional metadata for the tag.
|
|
196
|
+
* @param name - The name of the tag (inline form) or an array of tag metadata objects (array form).
|
|
197
|
+
* @param tagMetadata - Optional metadata for the tag. Only used in inline form.
|
|
189
198
|
*/
|
|
190
199
|
export const tagMetadataDecorator = (context, entity, name, tagMetadata) => {
|
|
191
200
|
// Check if the namespace is a service namespace
|
|
@@ -200,30 +209,76 @@ export const tagMetadataDecorator = (context, entity, name, tagMetadata) => {
|
|
|
200
209
|
});
|
|
201
210
|
return;
|
|
202
211
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
212
|
+
if (typeof name !== "string") {
|
|
213
|
+
// Array form: @tagMetadata(#[#{name: "tag1", ...}, ...])
|
|
214
|
+
// Check that no tagMetadata argument was provided (third argument not allowed with array form)
|
|
215
|
+
if (tagMetadata !== undefined) {
|
|
216
|
+
reportDiagnostic(context.program, {
|
|
217
|
+
code: "tag-metadata-array-with-metadata-arg",
|
|
218
|
+
target: context.getArgumentTarget(1),
|
|
219
|
+
});
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
// Check if either inline form or array form was already used (cannot mix or call twice)
|
|
223
|
+
const existingTags = getTagsMetadata(context.program, entity);
|
|
224
|
+
if ((existingTags && existingTags.length > 0) ||
|
|
225
|
+
isTagsMetadataArrayFormUsed(context.program, entity)) {
|
|
226
|
+
reportDiagnostic(context.program, {
|
|
227
|
+
code: "mixed-tag-metadata-form",
|
|
228
|
+
target: context.getArgumentTarget(0),
|
|
229
|
+
});
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
// Validate and store all tags from the array
|
|
233
|
+
for (const tagItem of name) {
|
|
234
|
+
if (!validateAdditionalInfoModel(context.program, context.getArgumentTarget(0), tagItem, "TypeSpec.OpenAPI.TagMetadataWithName")) {
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
if (tagItem.externalDocs?.url) {
|
|
238
|
+
if (!validateIsUri(context.program, context.getArgumentTarget(0), tagItem.externalDocs.url, "externalDocs.url")) {
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
setTagsMetadataArrayFormUsed(context.program, entity);
|
|
244
|
+
setTagsMetadata(context.program, entity, [...name]);
|
|
217
245
|
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
if
|
|
246
|
+
else {
|
|
247
|
+
// Inline form: @tagMetadata("tag-name", #{...})
|
|
248
|
+
// Check if array form was already used
|
|
249
|
+
if (isTagsMetadataArrayFormUsed(context.program, entity)) {
|
|
250
|
+
reportDiagnostic(context.program, {
|
|
251
|
+
code: "mixed-tag-metadata-form",
|
|
252
|
+
target: context.getArgumentTarget(0),
|
|
253
|
+
});
|
|
221
254
|
return;
|
|
222
255
|
}
|
|
256
|
+
// Retrieve existing tags metadata or initialize an empty array
|
|
257
|
+
const tags = getTagsMetadata(context.program, entity) ?? [];
|
|
258
|
+
// Check for duplicate tag names
|
|
259
|
+
if (tags.some((t) => t.name === name)) {
|
|
260
|
+
reportDiagnostic(context.program, {
|
|
261
|
+
code: "duplicate-tag",
|
|
262
|
+
format: { tagName: name },
|
|
263
|
+
target: context.getArgumentTarget(0),
|
|
264
|
+
});
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
const resolvedMetadata = tagMetadata ?? {};
|
|
268
|
+
// Validate the additionalInfo model
|
|
269
|
+
if (!validateAdditionalInfoModel(context.program, context.getArgumentTarget(0), resolvedMetadata, "TypeSpec.OpenAPI.TagMetadata")) {
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
// Validate the externalDocs.url property
|
|
273
|
+
if (resolvedMetadata.externalDocs?.url) {
|
|
274
|
+
if (!validateIsUri(context.program, context.getArgumentTarget(0), resolvedMetadata.externalDocs.url, "externalDocs.url")) {
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
// Update the tags metadata with the new tag
|
|
279
|
+
tags.push({ name, ...resolvedMetadata });
|
|
280
|
+
setTagsMetadata(context.program, entity, tags);
|
|
223
281
|
}
|
|
224
|
-
// Update the tags metadata with the new tag
|
|
225
|
-
tags[name] = tagMetadata;
|
|
226
|
-
setTagsMetadata(context.program, entity, tags);
|
|
227
282
|
};
|
|
228
283
|
export { getTagsMetadata };
|
|
229
284
|
//# sourceMappingURL=decorators.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAEd,MAAM,EACN,UAAU,EACV,UAAU,EACV,MAAM,EAKN,oBAAoB,GAGrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAEd,MAAM,EACN,UAAU,EACV,UAAU,EACV,MAAM,EAKN,oBAAoB,GAGrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AAWvC,OAAO,EAAE,2BAA2B,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAG5E,MAAM,CAAC,MAAM;AACX;;GAEG;AACH,cAAc;AAEd;;;;;GAKG;AACH,cAAc,EACf,GAAG,WAAW,CAAoB,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;AACtE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAyB,CAChD,OAAyB,EACzB,MAAiB,EACjB,IAAY,EACZ,EAAE;IACF,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;AAElE,uCAAuC;AACvC,MAAM,CAAC,MAAM,UAAU,GAAuB,CAC5C,OAAyB,EACzB,MAAY,EACZ,aAAqB,EACrB,KAAc,EACd,EAAE;IACF,cAAc,CACZ,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAY,CAAC,EAC/B,wDAAwD,EACxD,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAC7B,CAAC;IACF,MAAM,SAAS,GAAG,kCAAkC,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC7E,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,aAA6B,EAAE,SAAS,CAAC,CAAC;AAClF,CAAC,CAAC;AAEF,+FAA+F;AAC/F,oDAAoD;AACpD,SAAS,kCAAkC,CAAC,OAAgB,EAAE,KAAc;IAC1E,QAAQ,OAAO,KAAK,EAAE,CAAC;QACrB,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC;QACf,KAAK,QAAQ;YACX,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kCAAkC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1E,CAAC;YAED,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAA4B,EAAE,CAAC;gBAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC/C,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;wBACtB,SAAS;oBACX,CAAC;oBACD,MAAM,CAAC,GAAG,CAAC,GAAG,kCAAkC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACjE,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC;QACH;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,YAAY,IAAI,KAAK,IAAI,KAAK,CAAC,UAAU,KAAK,OAAO,CAAC;AAC/D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CACrB,OAAgB,EAChB,MAAiB,EACjB,IAAoD;IAEpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,OAAgB,EAAE,MAAY,EAAE,aAAqB,EAAE,IAAa;IAC/F,MAAM,iBAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAe,CAAC;IAC/E,cAAc,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IACxC,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,OAAgB,EAAE,MAAY;IAC1D,OAAO,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAqB,CAAC;AAC3F,CAAC;AAED;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;AAChE,6CAA6C;AAC7C,MAAM,CAAC,MAAM,gBAAgB,GAA6B,CACxD,OAAyB,EACzB,MAAa,EACb,EAAE;IACD,IAAY,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC3D,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAgB,EAAE,MAAY;IAC9D,OAAO,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,eAAe,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC;AAE1D;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAA0B,CAClD,OAAyB,EACzB,MAAY,EACZ,GAAW,EACX,WAAoB,EACpB,EAAE;IACF,MAAM,GAAG,GAAiB,EAAE,GAAG,EAAE,CAAC;IAClC,IAAI,WAAW,EAAE,CAAC;QAChB,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC7D,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgB,EAAE,MAAY;IAC5D,OAAO,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAE1C,kCAAkC;AAClC,MAAM,CAAC,MAAM,KAAK,GAAkB,CAClC,OAAyB,EACzB,MAAiB,EACjB,IAAoD,EACpD,EAAE;IACF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,oCAAoC;IACpC,IACE,CAAC,2BAA2B,CAC1B,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAE,EAC7B,IAAI,EACJ,iCAAiC,CAClC,EACD,CAAC;QACD,OAAO;IACT,CAAC;IAED,0BAA0B;IAC1B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,IACE,CAAC,aAAa,CACZ,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAE,EAC7B,IAAI,CAAC,cAAc,EACnB,gBAAgB,CACjB,EACD,CAAC;YACD,OAAO;QACT,CAAC;IACH,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,OAAgB,EAAE,MAAiB;IACzD,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,WAAW,CAAC,OAAgB,EAAE,MAAiB;IAC7D,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC5C,OAAO,aAAa,CAAC;QACnB,GAAG,IAAI;QACP,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,OAAO,EAAE,KAAK;QACpC,OAAO,EAAE,IAAI,EAAE,OAAO;QACtB,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;QACrD,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC;KAC1D,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAoC,IAAO;IAC/D,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAQ,CAAC;AAC7F,CAAC;AAED,yDAAyD;AACzD,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC,GAAG,WAAW,CACpD,WAAW,CAAC,YAAY,CACzB,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,2BAA2B,EAAE,4BAA4B,CAAC,GAAG,WAAW,CAC7E,iBAAiB,CAAC,uBAAuB,CAAC,CAC3C,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAyB,CACxD,OAAyB,EACzB,MAAiB,EACjB,IAAkD,EAClD,WAAyB,EACzB,EAAE;IACF,gDAAgD;IAChD,IACE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CACrB,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,UAAU,EAAE,IAAI,KAAK,UAAU;QACzC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,KAAK,UAAU,CACtD,EACD,CAAC;QACD,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE;YAChC,IAAI,EAAE,6BAA6B;YACnC,MAAM,EAAE;gBACN,SAAS,EAAE,MAAM,CAAC,IAAI;aACvB;YACD,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAE;SACtC,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,yDAAyD;QACzD,+FAA+F;QAC/F,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE;gBAChC,IAAI,EAAE,sCAAsC;gBAC5C,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAE;aACtC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,wFAAwF;QACxF,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC9D,IACE,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;YACzC,2BAA2B,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,EACpD,CAAC;YACD,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE;gBAChC,IAAI,EAAE,yBAAyB;gBAC/B,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAE;aACtC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,6CAA6C;QAC7C,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,CAAC;YAC3B,IACE,CAAC,2BAA2B,CAC1B,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAE,EAC7B,OAAO,EACP,sCAAsC,CACvC,EACD,CAAC;gBACD,OAAO;YACT,CAAC;YAED,IAAI,OAAO,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC;gBAC9B,IACE,CAAC,aAAa,CACZ,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAE,EAC7B,OAAO,CAAC,YAAY,CAAC,GAAG,EACxB,kBAAkB,CACnB,EACD,CAAC;oBACD,OAAO;gBACT,CAAC;YACH,CAAC;QACH,CAAC;QAED,4BAA4B,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACtD,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,gDAAgD;QAChD,uCAAuC;QACvC,IAAI,2BAA2B,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;YACzD,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE;gBAChC,IAAI,EAAE,yBAAyB;gBAC/B,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAE;aACtC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,+DAA+D;QAC/D,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QAE5D,gCAAgC;QAChC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACtC,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE;gBAChC,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;gBACzB,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAE;aACtC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,gBAAgB,GAAgB,WAAW,IAAI,EAAE,CAAC;QAExD,oCAAoC;QACpC,IACE,CAAC,2BAA2B,CAC1B,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAE,EAC7B,gBAAgB,EAChB,8BAA8B,CAC/B,EACD,CAAC;YACD,OAAO;QACT,CAAC;QAED,yCAAyC;QACzC,IAAI,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC;YACvC,IACE,CAAC,aAAa,CACZ,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAE,EAC7B,gBAAgB,CAAC,YAAY,CAAC,GAAG,EACjC,kBAAkB,CACnB,EACD,CAAC;gBACD,OAAO;YACT,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,gBAAgB,EAAE,CAAC,CAAC;QACzC,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;AACH,CAAC,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type { DefaultResponseDecorator, ExtensionDecorator, ExternalDocsDecorator, InfoDecorator, } from "../generated-defs/TypeSpec.OpenAPI.js";
|
|
2
2
|
export { $defaultResponse, $extension, $externalDocs, $info, $operationId, getExtensions, getExternalDocs, getInfo, getOperationId, getTagsMetadata, isDefaultResponse, resolveInfo, setExtension, setInfo, setOperationId, } from "./decorators.js";
|
|
3
3
|
export { checkDuplicateTypeName, getOpenAPITypeName, getParameterKey, isReadonlyProperty, resolveOperationId, shouldInline, } from "./helpers.js";
|
|
4
|
-
export { AdditionalInfo, Contact, ExtensionKey, ExternalDocs, License } from "./types.js";
|
|
4
|
+
export { AdditionalInfo, Contact, ExtensionKey, ExternalDocs, License, TagMetadata, TagMetadataWithName, } from "./types.js";
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,GACd,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,KAAK,EACL,YAAY,EACZ,aAAa,EACb,eAAe,EACf,OAAO,EACP,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,OAAO,EACP,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,GACd,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,KAAK,EACL,YAAY,EACZ,aAAa,EACb,eAAe,EACf,OAAO,EACP,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,OAAO,EACP,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,EACd,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,WAAW,EACX,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,KAAK,EACL,YAAY,EACZ,aAAa,EACb,eAAe,EACf,OAAO,EACP,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,OAAO,EACP,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,GACb,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,KAAK,EACL,YAAY,EACZ,aAAa,EACb,eAAe,EACf,OAAO,EACP,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,OAAO,EACP,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,GACb,MAAM,cAAc,CAAC;AAWtB,gBAAgB;AAChB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/src/lib.d.ts
CHANGED
|
@@ -12,11 +12,17 @@ export declare const $lib: import("@typespec/compiler").TypeSpecLibrary<{
|
|
|
12
12
|
"duplicate-tag": {
|
|
13
13
|
readonly default: import("@typespec/compiler").CallableMessage<["tagName"]>;
|
|
14
14
|
};
|
|
15
|
+
"mixed-tag-metadata-form": {
|
|
16
|
+
readonly default: "Cannot mix the array form and the inline form of @tagMetadata on the same namespace. Use either @tagMetadata(#[...]) or multiple @tagMetadata(\"name\", #{...}) calls, not both.";
|
|
17
|
+
};
|
|
18
|
+
"tag-metadata-array-with-metadata-arg": {
|
|
19
|
+
readonly default: "When using the array form of @tagMetadata, the second argument (tagMetadata) must not be provided. Include all tag metadata inside the array elements.";
|
|
20
|
+
};
|
|
15
21
|
"tag-metadata-target-service": {
|
|
16
22
|
readonly default: import("@typespec/compiler").CallableMessage<["namespace"]>;
|
|
17
23
|
};
|
|
18
24
|
}, Record<string, any>, "tagsMetadata">;
|
|
19
|
-
export declare const createDiagnostic: <C extends "invalid-extension-key" | "duplicate-type-name" | "not-url" | "duplicate-tag" | "tag-metadata-target-service", M extends keyof {
|
|
25
|
+
export declare const createDiagnostic: <C extends "invalid-extension-key" | "duplicate-type-name" | "not-url" | "duplicate-tag" | "mixed-tag-metadata-form" | "tag-metadata-array-with-metadata-arg" | "tag-metadata-target-service", M extends keyof {
|
|
20
26
|
"invalid-extension-key": {
|
|
21
27
|
readonly default: import("@typespec/compiler").CallableMessage<["value"]>;
|
|
22
28
|
};
|
|
@@ -30,6 +36,12 @@ export declare const createDiagnostic: <C extends "invalid-extension-key" | "dup
|
|
|
30
36
|
"duplicate-tag": {
|
|
31
37
|
readonly default: import("@typespec/compiler").CallableMessage<["tagName"]>;
|
|
32
38
|
};
|
|
39
|
+
"mixed-tag-metadata-form": {
|
|
40
|
+
readonly default: "Cannot mix the array form and the inline form of @tagMetadata on the same namespace. Use either @tagMetadata(#[...]) or multiple @tagMetadata(\"name\", #{...}) calls, not both.";
|
|
41
|
+
};
|
|
42
|
+
"tag-metadata-array-with-metadata-arg": {
|
|
43
|
+
readonly default: "When using the array form of @tagMetadata, the second argument (tagMetadata) must not be provided. Include all tag metadata inside the array elements.";
|
|
44
|
+
};
|
|
33
45
|
"tag-metadata-target-service": {
|
|
34
46
|
readonly default: import("@typespec/compiler").CallableMessage<["namespace"]>;
|
|
35
47
|
};
|
|
@@ -47,10 +59,16 @@ export declare const createDiagnostic: <C extends "invalid-extension-key" | "dup
|
|
|
47
59
|
"duplicate-tag": {
|
|
48
60
|
readonly default: import("@typespec/compiler").CallableMessage<["tagName"]>;
|
|
49
61
|
};
|
|
62
|
+
"mixed-tag-metadata-form": {
|
|
63
|
+
readonly default: "Cannot mix the array form and the inline form of @tagMetadata on the same namespace. Use either @tagMetadata(#[...]) or multiple @tagMetadata(\"name\", #{...}) calls, not both.";
|
|
64
|
+
};
|
|
65
|
+
"tag-metadata-array-with-metadata-arg": {
|
|
66
|
+
readonly default: "When using the array form of @tagMetadata, the second argument (tagMetadata) must not be provided. Include all tag metadata inside the array elements.";
|
|
67
|
+
};
|
|
50
68
|
"tag-metadata-target-service": {
|
|
51
69
|
readonly default: import("@typespec/compiler").CallableMessage<["namespace"]>;
|
|
52
70
|
};
|
|
53
|
-
}, C, M>) => import("@typespec/compiler").Diagnostic, reportDiagnostic: <C extends "invalid-extension-key" | "duplicate-type-name" | "not-url" | "duplicate-tag" | "tag-metadata-target-service", M extends keyof {
|
|
71
|
+
}, C, M>) => import("@typespec/compiler").Diagnostic, reportDiagnostic: <C extends "invalid-extension-key" | "duplicate-type-name" | "not-url" | "duplicate-tag" | "mixed-tag-metadata-form" | "tag-metadata-array-with-metadata-arg" | "tag-metadata-target-service", M extends keyof {
|
|
54
72
|
"invalid-extension-key": {
|
|
55
73
|
readonly default: import("@typespec/compiler").CallableMessage<["value"]>;
|
|
56
74
|
};
|
|
@@ -64,6 +82,12 @@ export declare const createDiagnostic: <C extends "invalid-extension-key" | "dup
|
|
|
64
82
|
"duplicate-tag": {
|
|
65
83
|
readonly default: import("@typespec/compiler").CallableMessage<["tagName"]>;
|
|
66
84
|
};
|
|
85
|
+
"mixed-tag-metadata-form": {
|
|
86
|
+
readonly default: "Cannot mix the array form and the inline form of @tagMetadata on the same namespace. Use either @tagMetadata(#[...]) or multiple @tagMetadata(\"name\", #{...}) calls, not both.";
|
|
87
|
+
};
|
|
88
|
+
"tag-metadata-array-with-metadata-arg": {
|
|
89
|
+
readonly default: "When using the array form of @tagMetadata, the second argument (tagMetadata) must not be provided. Include all tag metadata inside the array elements.";
|
|
90
|
+
};
|
|
67
91
|
"tag-metadata-target-service": {
|
|
68
92
|
readonly default: import("@typespec/compiler").CallableMessage<["namespace"]>;
|
|
69
93
|
};
|
|
@@ -81,6 +105,12 @@ export declare const createDiagnostic: <C extends "invalid-extension-key" | "dup
|
|
|
81
105
|
"duplicate-tag": {
|
|
82
106
|
readonly default: import("@typespec/compiler").CallableMessage<["tagName"]>;
|
|
83
107
|
};
|
|
108
|
+
"mixed-tag-metadata-form": {
|
|
109
|
+
readonly default: "Cannot mix the array form and the inline form of @tagMetadata on the same namespace. Use either @tagMetadata(#[...]) or multiple @tagMetadata(\"name\", #{...}) calls, not both.";
|
|
110
|
+
};
|
|
111
|
+
"tag-metadata-array-with-metadata-arg": {
|
|
112
|
+
readonly default: "When using the array form of @tagMetadata, the second argument (tagMetadata) must not be provided. Include all tag metadata inside the array elements.";
|
|
113
|
+
};
|
|
84
114
|
"tag-metadata-target-service": {
|
|
85
115
|
readonly default: import("@typespec/compiler").CallableMessage<["namespace"]>;
|
|
86
116
|
};
|
package/dist/src/lib.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../src/lib.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../src/lib.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;uCAkDf,CAAC;AAEH,eAAO,MACL,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sDAChB,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAChB,iBAAiB,4BACN,WAAW,gCAChB,CAAC"}
|
package/dist/src/lib.js
CHANGED
|
@@ -27,6 +27,18 @@ export const $lib = createTypeSpecLibrary({
|
|
|
27
27
|
default: paramMessage `"Metadata for tag '${"tagName"}' was specified twice."`,
|
|
28
28
|
},
|
|
29
29
|
},
|
|
30
|
+
"mixed-tag-metadata-form": {
|
|
31
|
+
severity: "error",
|
|
32
|
+
messages: {
|
|
33
|
+
default: `Cannot mix the array form and the inline form of @tagMetadata on the same namespace. Use either @tagMetadata(#[...]) or multiple @tagMetadata("name", #{...}) calls, not both.`,
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
"tag-metadata-array-with-metadata-arg": {
|
|
37
|
+
severity: "error",
|
|
38
|
+
messages: {
|
|
39
|
+
default: `When using the array form of @tagMetadata, the second argument (tagMetadata) must not be provided. Include all tag metadata inside the array elements.`,
|
|
40
|
+
},
|
|
41
|
+
},
|
|
30
42
|
"tag-metadata-target-service": {
|
|
31
43
|
severity: "error",
|
|
32
44
|
messages: {
|
package/dist/src/lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEzE,MAAM,CAAC,MAAM,IAAI,GAAG,qBAAqB,CAAC;IACxC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE;QACX,uBAAuB,EAAE;YACvB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,mDAAmD,OAAO,GAAG;aACnF;SACF;QACD,qBAAqB,EAAE;YACrB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,yBAAyB,OAAO,4FAA4F;gBACjJ,SAAS,EAAE,YAAY,CAAA,6BAA6B,OAAO,4FAA4F;aACxJ;SACF;QACD,SAAS,EAAE;YACT,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,GAAG,UAAU,KAAK,OAAO,sBAAsB;aACrE;SACF;QACD,eAAe,EAAE;YACf,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,sBAAsB,SAAS,yBAAyB;aAC9E;SACF;QACD,6BAA6B,EAAE;YAC7B,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,iFAAiF,WAAW,qBAAqB;aACvI;SACF;KACF;IACD,KAAK,EAAE;QACL,YAAY,EAAE,EAAE,WAAW,EAAE,uCAAuC,EAAE;KACvE;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,EACX,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EAAE,WAAW,GACvB,GAAG,IAAI,CAAC"}
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEzE,MAAM,CAAC,MAAM,IAAI,GAAG,qBAAqB,CAAC;IACxC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE;QACX,uBAAuB,EAAE;YACvB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,mDAAmD,OAAO,GAAG;aACnF;SACF;QACD,qBAAqB,EAAE;YACrB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,yBAAyB,OAAO,4FAA4F;gBACjJ,SAAS,EAAE,YAAY,CAAA,6BAA6B,OAAO,4FAA4F;aACxJ;SACF;QACD,SAAS,EAAE;YACT,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,GAAG,UAAU,KAAK,OAAO,sBAAsB;aACrE;SACF;QACD,eAAe,EAAE;YACf,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,sBAAsB,SAAS,yBAAyB;aAC9E;SACF;QACD,yBAAyB,EAAE;YACzB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,gLAAgL;aAC1L;SACF;QACD,sCAAsC,EAAE;YACtC,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,wJAAwJ;aAClK;SACF;QACD,6BAA6B,EAAE;YAC7B,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,iFAAiF,WAAW,qBAAqB;aACvI;SACF;KACF;IACD,KAAK,EAAE;QACL,YAAY,EAAE,EAAE,WAAW,EAAE,uCAAuC,EAAE;KACvE;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,EACX,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EAAE,WAAW,GACvB,GAAG,IAAI,CAAC"}
|
package/dist/src/types.d.ts
CHANGED
|
@@ -51,4 +51,28 @@ export interface ExternalDocs {
|
|
|
51
51
|
/** Optional description */
|
|
52
52
|
description?: string;
|
|
53
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Metadata for a tag.
|
|
56
|
+
*/
|
|
57
|
+
export interface TagMetadata {
|
|
58
|
+
/** A description of the tag. */
|
|
59
|
+
description?: string;
|
|
60
|
+
/** External documentation for the tag. */
|
|
61
|
+
externalDocs?: ExternalDocs;
|
|
62
|
+
/** The name of a parent tag (only supported natively in OpenAPI 3.2; emitted as `x-oai-parent` for 3.0 and 3.1). */
|
|
63
|
+
parent?: string;
|
|
64
|
+
/** A short summary of the tag, used for display purposes. Only supported natively in OpenAPI 3.2. For 3.0 and 3.1, this will be emitted as `x-oai-summary`. */
|
|
65
|
+
summary?: string;
|
|
66
|
+
/** A machine-readable string to categorize what sort of tag it is. Only supported natively in OpenAPI 3.2. For 3.0 and 3.1, this will be emitted as `x-oai-kind`. */
|
|
67
|
+
kind?: string;
|
|
68
|
+
/** Additional extension data. Keys must start with `x-`. */
|
|
69
|
+
[extensionKey: string]: unknown;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Metadata for a tag including the tag name. Used with the array form of `@tagMetadata`.
|
|
73
|
+
*/
|
|
74
|
+
export interface TagMetadataWithName extends TagMetadata {
|
|
75
|
+
/** The name of the tag. */
|
|
76
|
+
name: string;
|
|
77
|
+
}
|
|
54
78
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/src/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,MAAM,EAAE,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,8FAA8F;IAC9F,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,wIAAwI;IACxI,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,iFAAiF;IACjF,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,mDAAmD;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,mDAAmD;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,mFAAmF;IACnF,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,uGAAuG;IACvG,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IAEb,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,MAAM,EAAE,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,8FAA8F;IAC9F,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,wIAAwI;IACxI,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,iFAAiF;IACjF,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,mDAAmD;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,mDAAmD;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,mFAAmF;IACnF,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,uGAAuG;IACvG,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IAEb,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,YAAY,CAAC;IAE5B,oHAAoH;IACpH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,+JAA+J;IAC/J,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,qKAAqK;IACrK,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,4DAA4D;IAC5D,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd"}
|
package/lib/decorators.tsp
CHANGED
|
@@ -118,19 +118,33 @@ extern dec info(target: Namespace, additionalInfo: valueof AdditionalInfo);
|
|
|
118
118
|
|
|
119
119
|
/** Metadata to a single tag that is used by operations. */
|
|
120
120
|
model TagMetadata {
|
|
121
|
-
/** A description of the
|
|
121
|
+
/** A description of the tag. */
|
|
122
122
|
description?: string;
|
|
123
123
|
|
|
124
|
-
/**
|
|
124
|
+
/** External documentation information for the tag. */
|
|
125
125
|
externalDocs?: ExternalDocs;
|
|
126
126
|
|
|
127
127
|
/** The name of a tag that this tag is nested under. Only supported in OpenAPI 3.2. For 3.0 and 3.1, this will be converted to `x-parent`. */
|
|
128
128
|
parent?: string;
|
|
129
129
|
|
|
130
|
+
/** A short summary of the tag, used for display purposes. Only supported natively in OpenAPI 3.2. For 3.0 and 3.1, this will be emitted as `x-oai-summary`. */
|
|
131
|
+
summary?: string;
|
|
132
|
+
|
|
133
|
+
/** A machine-readable string to categorize what sort of tag it is. Any string value can be used. Only supported natively in OpenAPI 3.2. For 3.0 and 3.1, this will be emitted as `x-oai-kind`. */
|
|
134
|
+
kind?: string;
|
|
135
|
+
|
|
130
136
|
/** Attach some custom data, The extension key must start with `x-`. */
|
|
131
137
|
...Record<unknown>;
|
|
132
138
|
}
|
|
133
139
|
|
|
140
|
+
/** Metadata for a tag that includes the name of the tag. Used with the array form of `@tagMetadata`. */
|
|
141
|
+
model TagMetadataWithName {
|
|
142
|
+
/** The name of the tag. */
|
|
143
|
+
name: string;
|
|
144
|
+
|
|
145
|
+
...TagMetadata;
|
|
146
|
+
}
|
|
147
|
+
|
|
134
148
|
/** External Docs information. */
|
|
135
149
|
model ExternalDocs {
|
|
136
150
|
/** Documentation url */
|
|
@@ -144,16 +158,33 @@ model ExternalDocs {
|
|
|
144
158
|
}
|
|
145
159
|
|
|
146
160
|
/**
|
|
147
|
-
* Specify OpenAPI
|
|
148
|
-
*
|
|
149
|
-
*
|
|
161
|
+
* Specify OpenAPI tag metadata. Can be used in two forms:
|
|
162
|
+
* - Inline form: specify a single tag by name with optional metadata.
|
|
163
|
+
* - Array form: specify an ordered list of tags with their metadata in a single decorator call.
|
|
150
164
|
*
|
|
151
|
-
* @
|
|
165
|
+
* @param name Tag name (inline form) or array of tags with metadata (array form).
|
|
166
|
+
* @param tagMetadata Additional information for the tag. Only used in inline form.
|
|
167
|
+
*
|
|
168
|
+
* @example Inline form
|
|
152
169
|
* ```typespec
|
|
153
170
|
* @service()
|
|
154
171
|
* @tagMetadata("Tag Name", #{description: "Tag description", externalDocs: #{url: "https://example.com", description: "More info.", `x-custom`: "string"}, `x-custom`: "string"})
|
|
155
172
|
* @tagMetadata("Child Tag", #{description: "Child tag description", parent: "Tag Name"})
|
|
156
173
|
* namespace PetStore {}
|
|
157
174
|
* ```
|
|
175
|
+
*
|
|
176
|
+
* @example Array form (preserves explicit tag order)
|
|
177
|
+
* ```typespec
|
|
178
|
+
* @service()
|
|
179
|
+
* @tagMetadata(#[
|
|
180
|
+
* #{ name: "First Tag", description: "First tag description" },
|
|
181
|
+
* #{ name: "Second Tag", description: "Second tag description" },
|
|
182
|
+
* ])
|
|
183
|
+
* namespace PetStore {}
|
|
184
|
+
* ```
|
|
158
185
|
*/
|
|
159
|
-
extern dec tagMetadata(
|
|
186
|
+
extern dec tagMetadata(
|
|
187
|
+
target: Namespace,
|
|
188
|
+
name: valueof string | TagMetadataWithName[],
|
|
189
|
+
tagMetadata?: valueof TagMetadata
|
|
190
|
+
);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@typespec/openapi",
|
|
3
|
-
"version": "1.13.0-dev.
|
|
3
|
+
"version": "1.13.0-dev.2",
|
|
4
4
|
"author": "Microsoft Corporation",
|
|
5
5
|
"description": "TypeSpec library providing OpenAPI concepts",
|
|
6
6
|
"homepage": "https://typespec.io",
|
|
@@ -39,16 +39,16 @@
|
|
|
39
39
|
"!dist/test/**"
|
|
40
40
|
],
|
|
41
41
|
"peerDependencies": {
|
|
42
|
-
"@typespec/compiler": "^1.12.0 || >= 1.13.0-dev.
|
|
42
|
+
"@typespec/compiler": "^1.12.0 || >= 1.13.0-dev.6",
|
|
43
43
|
"@typespec/http": "^1.12.0 || >= 1.13.0-dev.0"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@types/node": "^25.5.2",
|
|
47
|
-
"@typespec/compiler": "^1.12.0 || >= 1.13.0-dev.
|
|
47
|
+
"@typespec/compiler": "^1.12.0 || >= 1.13.0-dev.6",
|
|
48
48
|
"@typespec/http": "^1.12.0 || >= 1.13.0-dev.0",
|
|
49
49
|
"@typespec/library-linter": "^0.82.0 || >= 0.83.0-dev.0",
|
|
50
50
|
"@typespec/rest": "^0.82.0 || >= 0.83.0-dev.0",
|
|
51
|
-
"@typespec/tspd": "^0.74.2 || >= 0.74.3-dev.
|
|
51
|
+
"@typespec/tspd": "^0.74.2 || >= 0.74.3-dev.3",
|
|
52
52
|
"@vitest/coverage-v8": "^4.1.3",
|
|
53
53
|
"@vitest/ui": "^4.1.3",
|
|
54
54
|
"rimraf": "^6.1.3",
|