@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 +24 -6
- package/dist/generated-defs/TypeSpec.OpenAPI.d.ts +25 -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 +105 -25
- 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 +52 -2
- package/dist/src/lib.d.ts.map +1 -1
- package/dist/src/lib.js +19 -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 +32 -7
- package/package.json +3 -3
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,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
|
|
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
|
|
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
|
|
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":"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;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,oBAAoB,GAAG,CACjC,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,MAAM,KAChB,2BAA2B,GAAG,IAAI,CAAC;AAExC;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAC/B,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,IAAI,EACZ,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,KACX,2BAA2B,GAAG,IAAI,CAAC;AAExC;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,wBAAwB,GAAG,CACrC,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,KAAK,KACV,2BAA2B,GAAG,IAAI,CAAC;AAExC;;;;;;;;;;GAUG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAClC,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,IAAI,EACZ,GAAG,EAAE,MAAM,EACX,WAAW,CAAC,EAAE,MAAM,KACjB,2BAA2B,GAAG,IAAI,CAAC;AAExC;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,CAC1B,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,SAAS,EACjB,cAAc,EAAE,cAAc,KAC3B,2BAA2B,GAAG,IAAI,CAAC;AAExC
|
|
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,
|
|
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"}
|
package/dist/src/decorators.js
CHANGED
|
@@ -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
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
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
|
-
|
|
219
|
-
|
|
220
|
-
if
|
|
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":"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,YAAY,EACZ,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,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAG9F,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;IAEzD,OAAO;QACL,cAAc,EAAE,GAAG,EAAE;YACnB,MAAM,WAAW,GAA0C,EAAE,CAAC;YAE9D,uDAAuD;YACvD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC9C,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;oBAC7C,WAAW,CAAC,IAAI,CACd,gBAAgB,CAAC;wBACf,IAAI,EAAE,mCAAmC;wBACzC,SAAS,EAAE,YAAY;wBACvB,MAAM,EAAE,MAAM;qBACf,CAAC,CACH,CAAC;oBACF,MAAM;gBACR,CAAC;YACH,CAAC;YAED,0CAA0C;YAC1C,IAAI,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;gBAC1C,WAAW,CAAC,IAAI,CACd,gBAAgB,CAAC;oBACf,IAAI,EAAE,mCAAmC;oBACzC,SAAS,EAAE,OAAO;oBAClB,MAAM,EAAE,MAAM;iBACf,CAAC,CACH,CAAC;YACJ,CAAC;YAED,OAAO,WAAW,CAAC;QACrB,CAAC;KACF,CAAC;AACJ,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,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
|
-
|
|
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
|
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;;;;;;;;;;;;;;;;;;;;;;;;;;;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." },
|
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;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"}
|
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,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
|
|
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`. */
|
|
@@ -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
|
|
154
|
-
*
|
|
155
|
-
*
|
|
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
|
-
* @
|
|
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(
|
|
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.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.
|
|
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.
|
|
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",
|