@typespec/openapi 1.13.0-dev.1 → 1.13.0-dev.3

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 CHANGED
@@ -147,10 +147,13 @@ op read(): string;
147
147
 
148
148
  #### `@tagMetadata`
149
149
 
150
- Specify OpenAPI additional information.
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: valueof TypeSpec.OpenAPI.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 | Description |
163
- | ----------- | ------------------------------------- | ---------------------- |
164
- | name | `valueof string` | tag name |
165
- | tagMetadata | [valueof `TagMetadata`](#tagmetadata) | Additional information |
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,6 +8,15 @@ 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;
@@ -89,19 +98,30 @@ export type ExternalDocsDecorator = (context: DecoratorContext, target: Type, ur
89
98
  */
90
99
  export type InfoDecorator = (context: DecoratorContext, target: Namespace, additionalInfo: AdditionalInfo) => DecoratorValidatorCallbacks | void;
91
100
  /**
92
- * Specify OpenAPI additional information.
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.
93
104
  *
94
- * @param name tag name
95
- * @param tagMetadata Additional information
96
- * @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
97
108
  * ```typespec
98
109
  * @service()
99
110
  * @tagMetadata("Tag Name", #{description: "Tag description", externalDocs: #{url: "https://example.com", description: "More info.", `x-custom`: "string"}, `x-custom`: "string"})
100
111
  * @tagMetadata("Child Tag", #{description: "Child tag description", parent: "Tag Name"})
101
112
  * namespace PetStore {}
102
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
+ * ```
103
123
  */
104
- export type TagMetadataDecorator = (context: DecoratorContext, target: Namespace, name: string, tagMetadata: TagMetadata) => DecoratorValidatorCallbacks | void;
124
+ export type TagMetadataDecorator = (context: DecoratorContext, target: Namespace, name: string | readonly TagMetadataWithName[], tagMetadata?: TagMetadata) => DecoratorValidatorCallbacks | void;
105
125
  export type TypeSpecOpenAPIDecorators = {
106
126
  operationId: OperationIdDecorator;
107
127
  extension: ExtensionDecorator;
@@ -1 +1 @@
1
- {"version":3,"file":"TypeSpec.OpenAPI.d.ts","sourceRoot":"","sources":["../../generated-defs/TypeSpec.OpenAPI.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TypeSpec.OpenAPI.d.ts","sourceRoot":"","sources":["../../generated-defs/TypeSpec.OpenAPI.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Namespace, Operation, Program, Type } from "@typespec/compiler";
2
- import { DefaultResponseDecorator, ExtensionDecorator, ExternalDocsDecorator, InfoDecorator, OperationIdDecorator, TagMetadata, TagMetadataDecorator } from "../generated-defs/TypeSpec.OpenAPI.js";
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,EACpB,WAAW,EACX,oBAAoB,EACrB,MAAM,uCAAuC,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAExE,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;;aAErB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAE,oBAkElC,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,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,wBAuC9B,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"}
@@ -1,8 +1,8 @@
1
- import { compilerAssert, getDoc, getService, getSummary, isType, serializeValueAsJson, } from "@typespec/compiler";
2
- import { useStateMap } from "@typespec/compiler/utils";
1
+ import { compilerAssert, getDoc, getService, getSummary, isErrorModel, isType, serializeValueAsJson, } from "@typespec/compiler";
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
- import { createStateSymbol, OpenAPIKeys, reportDiagnostic } from "./lib.js";
5
+ import { createDiagnostic, createStateSymbol, OpenAPIKeys, reportDiagnostic } from "./lib.js";
6
6
  export const [
7
7
  /**
8
8
  * Returns operationId set via the `@operationId` decorator or `undefined`
@@ -106,6 +106,31 @@ const defaultResponseKey = createStateSymbol("defaultResponse");
106
106
  export const $defaultResponse = (context, entity) => {
107
107
  http.setStatusCode(context.program, entity, ["*"]);
108
108
  context.program.stateSet(defaultResponseKey).add(entity);
109
+ return {
110
+ onTargetFinish: () => {
111
+ const diagnostics = [];
112
+ // Warn if the model already has a @statusCode property
113
+ for (const prop of entity.properties.values()) {
114
+ if (http.isStatusCode(context.program, prop)) {
115
+ diagnostics.push(createDiagnostic({
116
+ code: "default-response-with-status-code",
117
+ messageId: "statusCode",
118
+ target: entity,
119
+ }));
120
+ break;
121
+ }
122
+ }
123
+ // Warn if the model is marked with @error
124
+ if (isErrorModel(context.program, entity)) {
125
+ diagnostics.push(createDiagnostic({
126
+ code: "default-response-with-status-code",
127
+ messageId: "error",
128
+ target: entity,
129
+ }));
130
+ }
131
+ return diagnostics;
132
+ },
133
+ };
109
134
  };
110
135
  /**
111
136
  * Check if the given model has been mark as a default response.
@@ -180,12 +205,21 @@ function omitUndefined(data) {
180
205
  }
181
206
  /** Get TagsMetadata set with `@tagMetadata` decorator */
182
207
  const [getTagsMetadata, setTagsMetadata] = useStateMap(OpenAPIKeys.tagsMetadata);
208
+ /**
209
+ * State set tracking namespaces that have used the array form of @tagMetadata.
210
+ * Used to detect mixing of array and inline forms.
211
+ */
212
+ const [isTagsMetadataArrayFormUsed, setTagsMetadataArrayFormUsed] = useStateSet(createStateSymbol("tagsMetadataArrayForm"));
183
213
  /**
184
214
  * Decorator to add metadata to a tag associated with a namespace.
215
+ * Supports two forms:
216
+ * - Inline form: `@tagMetadata("tag-name", #{...})` - adds a single tag by name
217
+ * - Array form: `@tagMetadata(#[#{name: "tag1", ...}, ...])` - sets an ordered list of tags
218
+ *
185
219
  * @param context - The decorator context.
186
220
  * @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.
221
+ * @param name - The name of the tag (inline form) or an array of tag metadata objects (array form).
222
+ * @param tagMetadata - Optional metadata for the tag. Only used in inline form.
189
223
  */
190
224
  export const tagMetadataDecorator = (context, entity, name, tagMetadata) => {
191
225
  // Check if the namespace is a service namespace
@@ -200,30 +234,76 @@ export const tagMetadataDecorator = (context, entity, name, tagMetadata) => {
200
234
  });
201
235
  return;
202
236
  }
203
- // Retrieve existing tags metadata or initialize an empty object
204
- const tags = getTagsMetadata(context.program, entity) ?? {};
205
- // Check for duplicate tag names
206
- if (tags[name]) {
207
- reportDiagnostic(context.program, {
208
- code: "duplicate-tag",
209
- format: { tagName: name },
210
- target: context.getArgumentTarget(0),
211
- });
212
- return;
213
- }
214
- // Validate the additionalInfo model
215
- if (!validateAdditionalInfoModel(context.program, context.getArgumentTarget(0), tagMetadata, "TypeSpec.OpenAPI.TagMetadata")) {
216
- return;
237
+ if (typeof name !== "string") {
238
+ // Array form: @tagMetadata(#[#{name: "tag1", ...}, ...])
239
+ // Check that no tagMetadata argument was provided (third argument not allowed with array form)
240
+ if (tagMetadata !== undefined) {
241
+ reportDiagnostic(context.program, {
242
+ code: "tag-metadata-array-with-metadata-arg",
243
+ target: context.getArgumentTarget(1),
244
+ });
245
+ return;
246
+ }
247
+ // Check if either inline form or array form was already used (cannot mix or call twice)
248
+ const existingTags = getTagsMetadata(context.program, entity);
249
+ if ((existingTags && existingTags.length > 0) ||
250
+ isTagsMetadataArrayFormUsed(context.program, entity)) {
251
+ reportDiagnostic(context.program, {
252
+ code: "mixed-tag-metadata-form",
253
+ target: context.getArgumentTarget(0),
254
+ });
255
+ return;
256
+ }
257
+ // Validate and store all tags from the array
258
+ for (const tagItem of name) {
259
+ if (!validateAdditionalInfoModel(context.program, context.getArgumentTarget(0), tagItem, "TypeSpec.OpenAPI.TagMetadataWithName")) {
260
+ return;
261
+ }
262
+ if (tagItem.externalDocs?.url) {
263
+ if (!validateIsUri(context.program, context.getArgumentTarget(0), tagItem.externalDocs.url, "externalDocs.url")) {
264
+ return;
265
+ }
266
+ }
267
+ }
268
+ setTagsMetadataArrayFormUsed(context.program, entity);
269
+ setTagsMetadata(context.program, entity, [...name]);
217
270
  }
218
- // Validate the externalDocs.url property
219
- if (tagMetadata.externalDocs?.url) {
220
- if (!validateIsUri(context.program, context.getArgumentTarget(0), tagMetadata.externalDocs.url, "externalDocs.url")) {
271
+ else {
272
+ // Inline form: @tagMetadata("tag-name", #{...})
273
+ // Check if array form was already used
274
+ if (isTagsMetadataArrayFormUsed(context.program, entity)) {
275
+ reportDiagnostic(context.program, {
276
+ code: "mixed-tag-metadata-form",
277
+ target: context.getArgumentTarget(0),
278
+ });
221
279
  return;
222
280
  }
281
+ // Retrieve existing tags metadata or initialize an empty array
282
+ const tags = getTagsMetadata(context.program, entity) ?? [];
283
+ // Check for duplicate tag names
284
+ if (tags.some((t) => t.name === name)) {
285
+ reportDiagnostic(context.program, {
286
+ code: "duplicate-tag",
287
+ format: { tagName: name },
288
+ target: context.getArgumentTarget(0),
289
+ });
290
+ return;
291
+ }
292
+ const resolvedMetadata = tagMetadata ?? {};
293
+ // Validate the additionalInfo model
294
+ if (!validateAdditionalInfoModel(context.program, context.getArgumentTarget(0), resolvedMetadata, "TypeSpec.OpenAPI.TagMetadata")) {
295
+ return;
296
+ }
297
+ // Validate the externalDocs.url property
298
+ if (resolvedMetadata.externalDocs?.url) {
299
+ if (!validateIsUri(context.program, context.getArgumentTarget(0), resolvedMetadata.externalDocs.url, "externalDocs.url")) {
300
+ return;
301
+ }
302
+ }
303
+ // Update the tags metadata with the new tag
304
+ tags.push({ name, ...resolvedMetadata });
305
+ setTagsMetadata(context.program, entity, tags);
223
306
  }
224
- // Update the tags metadata with the new tag
225
- tags[name] = tagMetadata;
226
- setTagsMetadata(context.program, entity, tags);
227
307
  };
228
308
  export { getTagsMetadata };
229
309
  //# sourceMappingURL=decorators.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"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"}
@@ -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
@@ -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,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC"}
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"}
@@ -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;AAGtB,gBAAgB;AAChB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,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,21 @@ 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
  };
24
+ "default-response-with-status-code": {
25
+ readonly statusCode: "@defaultResponse should not be used on a model that already has a status code defined. The status code will be ignored in favor of the default response.";
26
+ readonly error: "@defaultResponse should not be used on a model that is marked with @error. Use either @defaultResponse or @error, not both.";
27
+ };
18
28
  }, 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 {
29
+ 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" | "default-response-with-status-code", M extends keyof {
20
30
  "invalid-extension-key": {
21
31
  readonly default: import("@typespec/compiler").CallableMessage<["value"]>;
22
32
  };
@@ -30,9 +40,19 @@ export declare const createDiagnostic: <C extends "invalid-extension-key" | "dup
30
40
  "duplicate-tag": {
31
41
  readonly default: import("@typespec/compiler").CallableMessage<["tagName"]>;
32
42
  };
43
+ "mixed-tag-metadata-form": {
44
+ 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.";
45
+ };
46
+ "tag-metadata-array-with-metadata-arg": {
47
+ 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.";
48
+ };
33
49
  "tag-metadata-target-service": {
34
50
  readonly default: import("@typespec/compiler").CallableMessage<["namespace"]>;
35
51
  };
52
+ "default-response-with-status-code": {
53
+ readonly statusCode: "@defaultResponse should not be used on a model that already has a status code defined. The status code will be ignored in favor of the default response.";
54
+ readonly error: "@defaultResponse should not be used on a model that is marked with @error. Use either @defaultResponse or @error, not both.";
55
+ };
36
56
  }[C]>(diag: import("@typespec/compiler").DiagnosticReport<{
37
57
  "invalid-extension-key": {
38
58
  readonly default: import("@typespec/compiler").CallableMessage<["value"]>;
@@ -47,10 +67,20 @@ export declare const createDiagnostic: <C extends "invalid-extension-key" | "dup
47
67
  "duplicate-tag": {
48
68
  readonly default: import("@typespec/compiler").CallableMessage<["tagName"]>;
49
69
  };
70
+ "mixed-tag-metadata-form": {
71
+ 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.";
72
+ };
73
+ "tag-metadata-array-with-metadata-arg": {
74
+ 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.";
75
+ };
50
76
  "tag-metadata-target-service": {
51
77
  readonly default: import("@typespec/compiler").CallableMessage<["namespace"]>;
52
78
  };
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 {
79
+ "default-response-with-status-code": {
80
+ readonly statusCode: "@defaultResponse should not be used on a model that already has a status code defined. The status code will be ignored in favor of the default response.";
81
+ readonly error: "@defaultResponse should not be used on a model that is marked with @error. Use either @defaultResponse or @error, not both.";
82
+ };
83
+ }, 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" | "default-response-with-status-code", M extends keyof {
54
84
  "invalid-extension-key": {
55
85
  readonly default: import("@typespec/compiler").CallableMessage<["value"]>;
56
86
  };
@@ -64,9 +94,19 @@ export declare const createDiagnostic: <C extends "invalid-extension-key" | "dup
64
94
  "duplicate-tag": {
65
95
  readonly default: import("@typespec/compiler").CallableMessage<["tagName"]>;
66
96
  };
97
+ "mixed-tag-metadata-form": {
98
+ 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.";
99
+ };
100
+ "tag-metadata-array-with-metadata-arg": {
101
+ 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.";
102
+ };
67
103
  "tag-metadata-target-service": {
68
104
  readonly default: import("@typespec/compiler").CallableMessage<["namespace"]>;
69
105
  };
106
+ "default-response-with-status-code": {
107
+ readonly statusCode: "@defaultResponse should not be used on a model that already has a status code defined. The status code will be ignored in favor of the default response.";
108
+ readonly error: "@defaultResponse should not be used on a model that is marked with @error. Use either @defaultResponse or @error, not both.";
109
+ };
70
110
  }[C]>(program: import("@typespec/compiler").Program, diag: import("@typespec/compiler").DiagnosticReport<{
71
111
  "invalid-extension-key": {
72
112
  readonly default: import("@typespec/compiler").CallableMessage<["value"]>;
@@ -81,8 +121,18 @@ export declare const createDiagnostic: <C extends "invalid-extension-key" | "dup
81
121
  "duplicate-tag": {
82
122
  readonly default: import("@typespec/compiler").CallableMessage<["tagName"]>;
83
123
  };
124
+ "mixed-tag-metadata-form": {
125
+ 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.";
126
+ };
127
+ "tag-metadata-array-with-metadata-arg": {
128
+ 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.";
129
+ };
84
130
  "tag-metadata-target-service": {
85
131
  readonly default: import("@typespec/compiler").CallableMessage<["namespace"]>;
86
132
  };
133
+ "default-response-with-status-code": {
134
+ readonly statusCode: "@defaultResponse should not be used on a model that already has a status code defined. The status code will be ignored in favor of the default response.";
135
+ readonly error: "@defaultResponse should not be used on a model that is marked with @error. Use either @defaultResponse or @error, not both.";
136
+ };
87
137
  }, C, M>) => void, createStateSymbol: (name: string) => symbol, OpenAPIKeys: Record<"tagsMetadata", symbol>;
88
138
  //# sourceMappingURL=lib.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../src/lib.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;uCAsCf,CAAC;AAEH,eAAO,MACL,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sDAChB,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAChB,iBAAiB,4BACN,WAAW,gCAChB,CAAC"}
1
+ {"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../src/lib.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;uCAyDf,CAAC;AAEH,eAAO,MACL,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sDAChB,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAChB,iBAAiB,4BACN,WAAW,gCAChB,CAAC"}
package/dist/src/lib.js CHANGED
@@ -27,12 +27,31 @@ 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: {
33
45
  default: paramMessage `@tagMetadata must be used on the service namespace. Did you mean to annotate '${"namespace"}' with '@service'?`,
34
46
  },
35
47
  },
48
+ "default-response-with-status-code": {
49
+ severity: "warning",
50
+ messages: {
51
+ statusCode: `@defaultResponse should not be used on a model that already has a status code defined. The status code will be ignored in favor of the default response.`,
52
+ error: `@defaultResponse should not be used on a model that is marked with @error. Use either @defaultResponse or @error, not both.`,
53
+ },
54
+ },
36
55
  },
37
56
  state: {
38
57
  tagsMetadata: { description: "State for the @tagMetadata decorator." },
@@ -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;QACD,mCAAmC,EAAE;YACnC,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE;gBACR,UAAU,EAAE,0JAA0J;gBACtK,KAAK,EAAE,6HAA6H;aACrI;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"}
@@ -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
@@ -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"}
@@ -118,10 +118,10 @@ 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 API. */
121
+ /** A description of the tag. */
122
122
  description?: string;
123
123
 
124
- /** An external Docs information of the API. */
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`. */
@@ -137,6 +137,14 @@ model TagMetadata {
137
137
  ...Record<unknown>;
138
138
  }
139
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
+
140
148
  /** External Docs information. */
141
149
  model ExternalDocs {
142
150
  /** Documentation url */
@@ -150,16 +158,33 @@ model ExternalDocs {
150
158
  }
151
159
 
152
160
  /**
153
- * Specify OpenAPI additional information.
154
- * @param name tag name
155
- * @param tagMetadata Additional information
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.
156
164
  *
157
- * @example
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
158
169
  * ```typespec
159
170
  * @service()
160
171
  * @tagMetadata("Tag Name", #{description: "Tag description", externalDocs: #{url: "https://example.com", description: "More info.", `x-custom`: "string"}, `x-custom`: "string"})
161
172
  * @tagMetadata("Child Tag", #{description: "Child tag description", parent: "Tag Name"})
162
173
  * namespace PetStore {}
163
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
+ * ```
164
185
  */
165
- extern dec tagMetadata(target: Namespace, name: valueof string, tagMetadata: valueof 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.1",
3
+ "version": "1.13.0-dev.3",
4
4
  "author": "Microsoft Corporation",
5
5
  "description": "TypeSpec library providing OpenAPI concepts",
6
6
  "homepage": "https://typespec.io",
@@ -39,12 +39,12 @@
39
39
  "!dist/test/**"
40
40
  ],
41
41
  "peerDependencies": {
42
- "@typespec/compiler": "^1.12.0 || >= 1.13.0-dev.6",
42
+ "@typespec/compiler": "^1.12.0 || >= 1.13.0-dev.9",
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.6",
47
+ "@typespec/compiler": "^1.12.0 || >= 1.13.0-dev.9",
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",