@typespec/http 0.57.0-dev.5 → 0.57.0-dev.7
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 +27 -0
- package/dist/generated-defs/TypeSpec.Http.Private.d.ts +3 -1
- package/dist/generated-defs/TypeSpec.Http.Private.d.ts.map +1 -1
- package/dist/generated-defs/TypeSpec.Http.d.ts +16 -0
- package/dist/generated-defs/TypeSpec.Http.d.ts.map +1 -1
- package/dist/generated-defs/TypeSpec.Http.ts-test.js +2 -1
- package/dist/generated-defs/TypeSpec.Http.ts-test.js.map +1 -1
- package/dist/src/content-types.d.ts +1 -0
- package/dist/src/content-types.d.ts.map +1 -1
- package/dist/src/content-types.js +4 -0
- package/dist/src/content-types.js.map +1 -1
- package/dist/src/decorators.d.ts +3 -3
- package/dist/src/decorators.d.ts.map +1 -1
- package/dist/src/decorators.js +7 -24
- package/dist/src/decorators.js.map +1 -1
- package/dist/src/http-property.d.ts +52 -0
- package/dist/src/http-property.d.ts.map +1 -0
- package/dist/src/http-property.js +129 -0
- package/dist/src/http-property.js.map +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib.d.ts +64 -4
- package/dist/src/lib.d.ts.map +1 -1
- package/dist/src/lib.js +28 -0
- package/dist/src/lib.js.map +1 -1
- package/dist/src/linter.d.ts.map +1 -1
- package/dist/src/linter.js +0 -7
- package/dist/src/linter.js.map +1 -1
- package/dist/src/metadata.d.ts +1 -10
- package/dist/src/metadata.d.ts.map +1 -1
- package/dist/src/metadata.js +8 -53
- package/dist/src/metadata.js.map +1 -1
- package/dist/src/parameters.d.ts.map +1 -1
- package/dist/src/parameters.js +33 -87
- package/dist/src/parameters.js.map +1 -1
- package/dist/src/payload.d.ts +12 -0
- package/dist/src/payload.d.ts.map +1 -0
- package/dist/src/payload.js +301 -0
- package/dist/src/payload.js.map +1 -0
- package/dist/src/private.decorators.d.ts +28 -0
- package/dist/src/private.decorators.d.ts.map +1 -0
- package/dist/src/private.decorators.js +64 -0
- package/dist/src/private.decorators.js.map +1 -0
- package/dist/src/responses.d.ts.map +1 -1
- package/dist/src/responses.js +11 -44
- package/dist/src/responses.js.map +1 -1
- package/dist/src/types.d.ts +48 -27
- package/dist/src/types.d.ts.map +1 -1
- package/lib/{http-decorators.tsp → decorators.tsp} +15 -7
- package/lib/http.tsp +17 -1
- package/lib/private.decorators.tsp +14 -0
- package/package.json +1 -1
- package/dist/src/body.d.ts +0 -15
- package/dist/src/body.d.ts.map +0 -1
- package/dist/src/body.js +0 -112
- package/dist/src/body.js.map +0 -1
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
import { createDiagnosticCollector, filterModelProperties, getDiscriminator, getEncode, ignoreDiagnostics, isArrayModelType, navigateType, } from "@typespec/compiler";
|
|
2
|
+
import { DuplicateTracker } from "@typespec/compiler/utils";
|
|
3
|
+
import { getContentTypes } from "./content-types.js";
|
|
4
|
+
import { isHeader, isPathParam, isQueryParam, isStatusCode } from "./decorators.js";
|
|
5
|
+
import { resolvePayloadProperties, } from "./http-property.js";
|
|
6
|
+
import { createDiagnostic } from "./lib.js";
|
|
7
|
+
import { getHttpFileModel, getHttpPart } from "./private.decorators.js";
|
|
8
|
+
export function resolveHttpPayload(program, type, visibility, usedIn, options = {}) {
|
|
9
|
+
const diagnostics = createDiagnosticCollector();
|
|
10
|
+
const metadata = diagnostics.pipe(resolvePayloadProperties(program, type, visibility, options));
|
|
11
|
+
const body = diagnostics.pipe(resolveBody(program, type, metadata, visibility, usedIn));
|
|
12
|
+
if (body) {
|
|
13
|
+
if (body.contentTypes.includes("multipart/form-data") &&
|
|
14
|
+
body.bodyKind === "single" &&
|
|
15
|
+
body.type.kind !== "Model") {
|
|
16
|
+
diagnostics.add(createDiagnostic({
|
|
17
|
+
code: "multipart-model",
|
|
18
|
+
target: body.property ?? type,
|
|
19
|
+
}));
|
|
20
|
+
return diagnostics.wrap({ body: undefined, metadata });
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return diagnostics.wrap({ body, metadata });
|
|
24
|
+
}
|
|
25
|
+
function resolveBody(program, requestOrResponseType, metadata, visibility, usedIn) {
|
|
26
|
+
const diagnostics = createDiagnosticCollector();
|
|
27
|
+
const { contentTypes, contentTypeProperty } = diagnostics.pipe(resolveContentTypes(program, metadata, usedIn));
|
|
28
|
+
const file = getHttpFileModel(program, requestOrResponseType);
|
|
29
|
+
if (file !== undefined) {
|
|
30
|
+
const file = getHttpFileModel(program, requestOrResponseType);
|
|
31
|
+
return diagnostics.wrap({
|
|
32
|
+
bodyKind: "single",
|
|
33
|
+
contentTypes: diagnostics.pipe(getContentTypes(file.contentType)),
|
|
34
|
+
type: file.contents.type,
|
|
35
|
+
isExplicit: false,
|
|
36
|
+
containsMetadataAnnotations: false,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
// non-model or intrinsic/array model -> response body is response type
|
|
40
|
+
if (requestOrResponseType.kind !== "Model" || isArrayModelType(program, requestOrResponseType)) {
|
|
41
|
+
return diagnostics.wrap({
|
|
42
|
+
bodyKind: "single",
|
|
43
|
+
contentTypes,
|
|
44
|
+
type: requestOrResponseType,
|
|
45
|
+
isExplicit: false,
|
|
46
|
+
containsMetadataAnnotations: false,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
// look for explicit body
|
|
50
|
+
const resolvedBody = diagnostics.pipe(resolveExplicitBodyProperty(program, metadata, contentTypes, visibility, usedIn));
|
|
51
|
+
if (resolvedBody === undefined) {
|
|
52
|
+
// Special case if the model as a parent model then we'll return an empty object as this is assumed to be a nominal type.
|
|
53
|
+
// Special Case if the model has an indexer then it means it can return props so cannot be void.
|
|
54
|
+
if (requestOrResponseType.baseModel || requestOrResponseType.indexer) {
|
|
55
|
+
return diagnostics.wrap({
|
|
56
|
+
bodyKind: "single",
|
|
57
|
+
contentTypes,
|
|
58
|
+
type: requestOrResponseType,
|
|
59
|
+
isExplicit: false,
|
|
60
|
+
containsMetadataAnnotations: false,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
// Special case for legacy purposes if the return type is an empty model with only @discriminator("xyz")
|
|
64
|
+
// Then we still want to return that object as it technically always has a body with that implicit property.
|
|
65
|
+
if (requestOrResponseType.derivedModels.length > 0 &&
|
|
66
|
+
getDiscriminator(program, requestOrResponseType)) {
|
|
67
|
+
return diagnostics.wrap({
|
|
68
|
+
bodyKind: "single",
|
|
69
|
+
contentTypes,
|
|
70
|
+
type: requestOrResponseType,
|
|
71
|
+
isExplicit: false,
|
|
72
|
+
containsMetadataAnnotations: false,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const unannotatedProperties = filterModelProperties(program, requestOrResponseType, (p) => metadata.some((x) => x.property === p && x.kind === "bodyProperty"));
|
|
77
|
+
if (unannotatedProperties.properties.size > 0) {
|
|
78
|
+
if (resolvedBody === undefined) {
|
|
79
|
+
return diagnostics.wrap({
|
|
80
|
+
bodyKind: "single",
|
|
81
|
+
contentTypes,
|
|
82
|
+
type: unannotatedProperties,
|
|
83
|
+
isExplicit: false,
|
|
84
|
+
containsMetadataAnnotations: false,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
diagnostics.add(createDiagnostic({
|
|
89
|
+
code: "duplicate-body",
|
|
90
|
+
messageId: "bodyAndUnannotated",
|
|
91
|
+
target: requestOrResponseType,
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (resolvedBody === undefined && contentTypeProperty) {
|
|
96
|
+
diagnostics.add(createDiagnostic({
|
|
97
|
+
code: "content-type-ignored",
|
|
98
|
+
target: contentTypeProperty,
|
|
99
|
+
}));
|
|
100
|
+
}
|
|
101
|
+
return diagnostics.wrap(resolvedBody);
|
|
102
|
+
}
|
|
103
|
+
function resolveContentTypes(program, metadata, usedIn) {
|
|
104
|
+
for (const prop of metadata) {
|
|
105
|
+
if (prop.kind === "contentType") {
|
|
106
|
+
const [contentTypes, diagnostics] = getContentTypes(prop.property);
|
|
107
|
+
return [{ contentTypes, contentTypeProperty: prop.property }, diagnostics];
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
switch (usedIn) {
|
|
111
|
+
case "multipart":
|
|
112
|
+
// Figure this out later
|
|
113
|
+
return [{ contentTypes: [] }, []];
|
|
114
|
+
default:
|
|
115
|
+
return [{ contentTypes: ["application/json"] }, []];
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function resolveExplicitBodyProperty(program, metadata, contentTypes, visibility, usedIn) {
|
|
119
|
+
const diagnostics = createDiagnosticCollector();
|
|
120
|
+
let resolvedBody;
|
|
121
|
+
const duplicateTracker = new DuplicateTracker();
|
|
122
|
+
for (const item of metadata) {
|
|
123
|
+
if (item.kind === "body" || item.kind === "bodyRoot" || item.kind === "multipartBody") {
|
|
124
|
+
duplicateTracker.track("body", item.property);
|
|
125
|
+
}
|
|
126
|
+
switch (item.kind) {
|
|
127
|
+
case "body":
|
|
128
|
+
case "bodyRoot":
|
|
129
|
+
let containsMetadataAnnotations = false;
|
|
130
|
+
if (item.kind === "body") {
|
|
131
|
+
const valid = diagnostics.pipe(validateBodyProperty(program, item.property, usedIn));
|
|
132
|
+
containsMetadataAnnotations = !valid;
|
|
133
|
+
}
|
|
134
|
+
if (resolvedBody === undefined) {
|
|
135
|
+
resolvedBody = {
|
|
136
|
+
bodyKind: "single",
|
|
137
|
+
contentTypes,
|
|
138
|
+
type: item.property.type,
|
|
139
|
+
isExplicit: item.kind === "body",
|
|
140
|
+
containsMetadataAnnotations,
|
|
141
|
+
property: item.property,
|
|
142
|
+
parameter: item.property,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
break;
|
|
146
|
+
case "multipartBody":
|
|
147
|
+
resolvedBody = diagnostics.pipe(resolveMultiPartBody(program, item.property, contentTypes, visibility));
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
for (const [_, items] of duplicateTracker.entries()) {
|
|
152
|
+
for (const prop of items) {
|
|
153
|
+
diagnostics.add(createDiagnostic({
|
|
154
|
+
code: "duplicate-body",
|
|
155
|
+
target: prop,
|
|
156
|
+
}));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return diagnostics.wrap(resolvedBody);
|
|
160
|
+
}
|
|
161
|
+
/** Validate a property marked with `@body` */
|
|
162
|
+
function validateBodyProperty(program, property, usedIn) {
|
|
163
|
+
const diagnostics = createDiagnosticCollector();
|
|
164
|
+
navigateType(property.type, {
|
|
165
|
+
modelProperty: (prop) => {
|
|
166
|
+
const kind = isHeader(program, prop)
|
|
167
|
+
? "header"
|
|
168
|
+
: (usedIn === "request" || usedIn === "multipart") && isQueryParam(program, prop)
|
|
169
|
+
? "query"
|
|
170
|
+
: usedIn === "request" && isPathParam(program, prop)
|
|
171
|
+
? "path"
|
|
172
|
+
: usedIn === "response" && isStatusCode(program, prop)
|
|
173
|
+
? "statusCode"
|
|
174
|
+
: undefined;
|
|
175
|
+
if (kind) {
|
|
176
|
+
diagnostics.add(createDiagnostic({
|
|
177
|
+
code: "metadata-ignored",
|
|
178
|
+
format: { kind },
|
|
179
|
+
target: prop,
|
|
180
|
+
}));
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
}, {});
|
|
184
|
+
return diagnostics.wrap(diagnostics.diagnostics.length === 0);
|
|
185
|
+
}
|
|
186
|
+
function resolveMultiPartBody(program, property, contentTypes, visibility) {
|
|
187
|
+
const type = property.type;
|
|
188
|
+
if (type.kind === "Model") {
|
|
189
|
+
return resolveMultiPartBodyFromModel(program, property, type, contentTypes, visibility);
|
|
190
|
+
}
|
|
191
|
+
else if (type.kind === "Tuple") {
|
|
192
|
+
return resolveMultiPartBodyFromTuple(program, property, type, contentTypes, visibility);
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
return [undefined, [createDiagnostic({ code: "multipart-model", target: property })]];
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
function resolveMultiPartBodyFromModel(program, property, type, contentTypes, visibility) {
|
|
199
|
+
const diagnostics = createDiagnosticCollector();
|
|
200
|
+
const parts = [];
|
|
201
|
+
for (const item of type.properties.values()) {
|
|
202
|
+
const part = diagnostics.pipe(resolvePartOrParts(program, item.type, visibility));
|
|
203
|
+
if (part) {
|
|
204
|
+
parts.push({ ...part, name: item.name, optional: item.optional });
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return diagnostics.wrap({ bodyKind: "multipart", contentTypes, parts, property, type });
|
|
208
|
+
}
|
|
209
|
+
const multipartContentTypes = {
|
|
210
|
+
formData: "multipart/form-data",
|
|
211
|
+
mixed: "multipart/mixed",
|
|
212
|
+
};
|
|
213
|
+
const multipartContentTypesValues = Object.values(multipartContentTypes);
|
|
214
|
+
function resolveMultiPartBodyFromTuple(program, property, type, contentTypes, visibility) {
|
|
215
|
+
const diagnostics = createDiagnosticCollector();
|
|
216
|
+
const parts = [];
|
|
217
|
+
for (const contentType of contentTypes) {
|
|
218
|
+
if (!multipartContentTypesValues.includes(contentType)) {
|
|
219
|
+
diagnostics.add(createDiagnostic({
|
|
220
|
+
code: "multipart-invalid-content-type",
|
|
221
|
+
format: { contentType, valid: multipartContentTypesValues.join(", ") },
|
|
222
|
+
target: type,
|
|
223
|
+
}));
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
for (const [index, item] of type.values.entries()) {
|
|
227
|
+
const part = diagnostics.pipe(resolvePartOrParts(program, item, visibility));
|
|
228
|
+
if (part?.name === undefined && contentTypes.includes(multipartContentTypes.formData)) {
|
|
229
|
+
diagnostics.add(createDiagnostic({
|
|
230
|
+
code: "formdata-no-part-name",
|
|
231
|
+
target: type.node.values[index],
|
|
232
|
+
}));
|
|
233
|
+
}
|
|
234
|
+
if (part) {
|
|
235
|
+
parts.push(part);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return diagnostics.wrap({ bodyKind: "multipart", contentTypes, parts, property, type });
|
|
239
|
+
}
|
|
240
|
+
function resolvePartOrParts(program, type, visibility) {
|
|
241
|
+
if (type.kind === "Model" && isArrayModelType(program, type)) {
|
|
242
|
+
const [part, diagnostics] = resolvePart(program, type.indexer.value, visibility);
|
|
243
|
+
if (part) {
|
|
244
|
+
return [{ ...part, multi: true }, diagnostics];
|
|
245
|
+
}
|
|
246
|
+
return [part, diagnostics];
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
return resolvePart(program, type, visibility);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
function resolvePart(program, type, visibility) {
|
|
253
|
+
const part = getHttpPart(program, type);
|
|
254
|
+
if (part) {
|
|
255
|
+
let [{ body, metadata }, diagnostics] = resolveHttpPayload(program, part.type, visibility, "multipart");
|
|
256
|
+
if (body === undefined) {
|
|
257
|
+
return [undefined, diagnostics];
|
|
258
|
+
}
|
|
259
|
+
else if (body.bodyKind === "multipart") {
|
|
260
|
+
return [undefined, [createDiagnostic({ code: "multipart-nested", target: type })]];
|
|
261
|
+
}
|
|
262
|
+
if (body.contentTypes.length === 0) {
|
|
263
|
+
body = { ...body, contentTypes: resolveDefaultContentTypeForPart(program, body.type) };
|
|
264
|
+
}
|
|
265
|
+
return [
|
|
266
|
+
{
|
|
267
|
+
multi: false,
|
|
268
|
+
name: part.options.name,
|
|
269
|
+
body,
|
|
270
|
+
optional: false,
|
|
271
|
+
headers: metadata.filter((x) => x.kind === "header"),
|
|
272
|
+
},
|
|
273
|
+
diagnostics,
|
|
274
|
+
];
|
|
275
|
+
}
|
|
276
|
+
return [undefined, [createDiagnostic({ code: "multipart-part", target: type })]];
|
|
277
|
+
}
|
|
278
|
+
function resolveDefaultContentTypeForPart(program, type) {
|
|
279
|
+
function resolve(type) {
|
|
280
|
+
if (type.kind === "Scalar") {
|
|
281
|
+
const encodedAs = getEncode(program, type);
|
|
282
|
+
if (encodedAs) {
|
|
283
|
+
type = encodedAs.type;
|
|
284
|
+
}
|
|
285
|
+
if (ignoreDiagnostics(program.checker.isTypeAssignableTo(type.projectionBase ?? type, program.checker.getStdType("bytes"), type))) {
|
|
286
|
+
return ["application/octet-stream"];
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
return ["text/plain"];
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
else if (type.kind === "Union") {
|
|
293
|
+
return [...type.variants.values()].flatMap((x) => resolve(x.type));
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
return ["application/json"];
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return [...new Set(resolve(type))];
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=payload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload.js","sourceRoot":"","sources":["../../src/payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,yBAAyB,EACzB,qBAAqB,EACrB,gBAAgB,EAChB,SAAS,EACT,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAIL,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAQxE,MAAM,UAAU,kBAAkB,CAChC,OAAgB,EAChB,IAAU,EACV,UAAsB,EACtB,MAA4C,EAC5C,UAAyC,EAAE;IAE3C,MAAM,WAAW,GAAG,yBAAyB,EAAE,CAAC;IAEhD,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAEhG,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAExF,IAAI,IAAI,EAAE,CAAC;QACT,IACE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YACjD,IAAI,CAAC,QAAQ,KAAK,QAAQ;YAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,EAC1B,CAAC;YACD,WAAW,CAAC,GAAG,CACb,gBAAgB,CAAC;gBACf,IAAI,EAAE,iBAAiB;gBACvB,MAAM,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;aAC9B,CAAC,CACH,CAAC;YACF,OAAO,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,WAAW,CAClB,OAAgB,EAChB,qBAA2B,EAC3B,QAAwB,EACxB,UAAsB,EACtB,MAA4C;IAE5C,MAAM,WAAW,GAAG,yBAAyB,EAAE,CAAC;IAChD,MAAM,EAAE,YAAY,EAAE,mBAAmB,EAAE,GAAG,WAAW,CAAC,IAAI,CAC5D,mBAAmB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAC/C,CAAC;IAEF,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;IAC9D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,CAAE,CAAC;QAC/D,OAAO,WAAW,CAAC,IAAI,CAAC;YACtB,QAAQ,EAAE,QAAQ;YAClB,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACjE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;YACxB,UAAU,EAAE,KAAK;YACjB,2BAA2B,EAAE,KAAK;SACnC,CAAC,CAAC;IACL,CAAC;IAED,uEAAuE;IACvE,IAAI,qBAAqB,CAAC,IAAI,KAAK,OAAO,IAAI,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,CAAC,EAAE,CAAC;QAC/F,OAAO,WAAW,CAAC,IAAI,CAAC;YACtB,QAAQ,EAAE,QAAQ;YAClB,YAAY;YACZ,IAAI,EAAE,qBAAqB;YAC3B,UAAU,EAAE,KAAK;YACjB,2BAA2B,EAAE,KAAK;SACnC,CAAC,CAAC;IACL,CAAC;IAED,yBAAyB;IACzB,MAAM,YAAY,GAA+D,WAAW,CAAC,IAAI,CAC/F,2BAA2B,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,CAAC,CACjF,CAAC;IAEF,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,yHAAyH;QACzH,gGAAgG;QAChG,IAAI,qBAAqB,CAAC,SAAS,IAAI,qBAAqB,CAAC,OAAO,EAAE,CAAC;YACrE,OAAO,WAAW,CAAC,IAAI,CAAC;gBACtB,QAAQ,EAAE,QAAQ;gBAClB,YAAY;gBACZ,IAAI,EAAE,qBAAqB;gBAC3B,UAAU,EAAE,KAAK;gBACjB,2BAA2B,EAAE,KAAK;aACnC,CAAC,CAAC;QACL,CAAC;QACD,wGAAwG;QACxG,4GAA4G;QAC5G,IACE,qBAAqB,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;YAC9C,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,CAAC,EAChD,CAAC;YACD,OAAO,WAAW,CAAC,IAAI,CAAC;gBACtB,QAAQ,EAAE,QAAQ;gBAClB,YAAY;gBACZ,IAAI,EAAE,qBAAqB;gBAC3B,UAAU,EAAE,KAAK;gBACjB,2BAA2B,EAAE,KAAK;aACnC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE,CACxF,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CACpE,CAAC;IAEF,IAAI,qBAAqB,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAC9C,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,WAAW,CAAC,IAAI,CAAC;gBACtB,QAAQ,EAAE,QAAQ;gBAClB,YAAY;gBACZ,IAAI,EAAE,qBAAqB;gBAC3B,UAAU,EAAE,KAAK;gBACjB,2BAA2B,EAAE,KAAK;aACnC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,GAAG,CACb,gBAAgB,CAAC;gBACf,IAAI,EAAE,gBAAgB;gBACtB,SAAS,EAAE,oBAAoB;gBAC/B,MAAM,EAAE,qBAAqB;aAC9B,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IACD,IAAI,YAAY,KAAK,SAAS,IAAI,mBAAmB,EAAE,CAAC;QACtD,WAAW,CAAC,GAAG,CACb,gBAAgB,CAAC;YACf,IAAI,EAAE,sBAAsB;YAC5B,MAAM,EAAE,mBAAmB;SAC5B,CAAC,CACH,CAAC;IACJ,CAAC;IACD,OAAO,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,mBAAmB,CAC1B,OAAgB,EAChB,QAAwB,EACxB,MAA4C;IAE5C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YAChC,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnE,OAAO,CAAC,EAAE,YAAY,EAAE,mBAAmB,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,WAAW,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IACD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,WAAW;YACd,wBAAwB;YACxB,OAAO,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACpC;YACE,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B,CAClC,OAAgB,EAChB,QAAwB,EACxB,YAAsB,EACtB,UAAsB,EACtB,MAA4C;IAE5C,MAAM,WAAW,GAAG,yBAAyB,EAAE,CAAC;IAChD,IAAI,YAAwE,CAAC;IAC7E,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAgB,CAAC;IAE9D,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YACtF,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,CAAC;QAED,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,MAAM,CAAC;YACZ,KAAK,UAAU;gBACb,IAAI,2BAA2B,GAAG,KAAK,CAAC;gBACxC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBACzB,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;oBACrF,2BAA2B,GAAG,CAAC,KAAK,CAAC;gBACvC,CAAC;gBACD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;oBAC/B,YAAY,GAAG;wBACb,QAAQ,EAAE,QAAQ;wBAClB,YAAY;wBACZ,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;wBACxB,UAAU,EAAE,IAAI,CAAC,IAAI,KAAK,MAAM;wBAChC,2BAA2B;wBAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,SAAS,EAAE,IAAI,CAAC,QAAQ;qBACzB,CAAC;gBACJ,CAAC;gBACD,MAAM;YACR,KAAK,eAAe;gBAClB,YAAY,GAAG,WAAW,CAAC,IAAI,CAC7B,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,CACvE,CAAC;gBACF,MAAM;QACV,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;QACpD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,WAAW,CAAC,GAAG,CACb,gBAAgB,CAAC;gBACf,IAAI,EAAE,gBAAgB;gBACtB,MAAM,EAAE,IAAI;aACb,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACxC,CAAC;AAED,8CAA8C;AAC9C,SAAS,oBAAoB,CAC3B,OAAgB,EAChB,QAAuB,EACvB,MAA4C;IAE5C,MAAM,WAAW,GAAG,yBAAyB,EAAE,CAAC;IAChD,YAAY,CACV,QAAQ,CAAC,IAAI,EACb;QACE,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE;YACtB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;gBAClC,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,WAAW,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC;oBAC/E,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC;wBAClD,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC;4BACpD,CAAC,CAAC,YAAY;4BACd,CAAC,CAAC,SAAS,CAAC;YAEpB,IAAI,IAAI,EAAE,CAAC;gBACT,WAAW,CAAC,GAAG,CACb,gBAAgB,CAAC;oBACf,IAAI,EAAE,kBAAkB;oBACxB,MAAM,EAAE,EAAE,IAAI,EAAE;oBAChB,MAAM,EAAE,IAAI;iBACb,CAAC,CACH,CAAC;YACJ,CAAC;QACH,CAAC;KACF,EACD,EAAE,CACH,CAAC;IACF,OAAO,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,oBAAoB,CAC3B,OAAgB,EAChB,QAAuB,EACvB,YAAsB,EACtB,UAAsB;IAEtB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC1B,OAAO,6BAA6B,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IAC1F,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,6BAA6B,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IAC1F,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,SAAS,EAAE,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED,SAAS,6BAA6B,CACpC,OAAgB,EAChB,QAAuB,EACvB,IAAW,EACX,YAAsB,EACtB,UAAsB;IAEtB,MAAM,WAAW,GAAG,yBAAyB,EAAE,CAAC;IAChD,MAAM,KAAK,GAAwB,EAAE,CAAC;IACtC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QAClF,IAAI,IAAI,EAAE,CAAC;YACT,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,qBAAqB,GAAG;IAC5B,QAAQ,EAAE,qBAAqB;IAC/B,KAAK,EAAE,iBAAiB;CAChB,CAAC;AACX,MAAM,2BAA2B,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAEzE,SAAS,6BAA6B,CACpC,OAAgB,EAChB,QAAuB,EACvB,IAAW,EACX,YAAsB,EACtB,UAAsB;IAEtB,MAAM,WAAW,GAAG,yBAAyB,EAAE,CAAC;IAChD,MAAM,KAAK,GAAwB,EAAE,CAAC;IAEtC,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,WAAkB,CAAC,EAAE,CAAC;YAC9D,WAAW,CAAC,GAAG,CACb,gBAAgB,CAAC;gBACf,IAAI,EAAE,gCAAgC;gBACtC,MAAM,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACtE,MAAM,EAAE,IAAI;aACb,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QAC7E,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,IAAI,YAAY,CAAC,QAAQ,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtF,WAAW,CAAC,GAAG,CACb,gBAAgB,CAAC;gBACf,IAAI,EAAE,uBAAuB;gBAC7B,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;aAChC,CAAC,CACH,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1F,CAAC;AAED,SAAS,kBAAkB,CACzB,OAAgB,EAChB,IAAU,EACV,UAAsB;IAEtB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACjF,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,OAAO,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAClB,OAAgB,EAChB,IAAU,EACV,UAAsB;IAEtB,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACxC,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,CAAC,GAAG,kBAAkB,CACxD,OAAO,EACP,IAAI,CAAC,IAAI,EACT,UAAU,EACV,WAAW,CACZ,CAAC;QACF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;YACzC,OAAO,CAAC,SAAS,EAAE,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACrF,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,gCAAgC,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACzF,CAAC;QACD,OAAO;YACL;gBACE,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;gBACvB,IAAI;gBACJ,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAuB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;aAC1E;YACD,WAAW;SACZ,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,SAAS,EAAE,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,gCAAgC,CAAC,OAAgB,EAAE,IAAU;IACpE,SAAS,OAAO,CAAC,IAAU;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC3C,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;YACxB,CAAC;YAED,IACE,iBAAiB,CACf,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAChC,IAAI,CAAC,cAAc,IAAI,IAAI,EAC3B,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EACnC,IAAI,CACL,CACF,EACD,CAAC;gBACD,OAAO,CAAC,0BAA0B,CAAC,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,YAAY,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ModelProperty, Program, Type } from "@typespec/compiler";
|
|
2
|
+
import { HttpFileDecorator, HttpPartDecorator, PlainDataDecorator } from "../generated-defs/TypeSpec.Http.Private.js";
|
|
3
|
+
export declare const namespace = "TypeSpec.Http.Private";
|
|
4
|
+
export declare const $plainData: PlainDataDecorator;
|
|
5
|
+
export declare const $httpFile: HttpFileDecorator;
|
|
6
|
+
/**
|
|
7
|
+
* Check if the given type is an `HttpFile`
|
|
8
|
+
*/
|
|
9
|
+
export declare function isHttpFile(program: Program, type: Type): boolean;
|
|
10
|
+
export declare function isOrExtendsHttpFile(program: Program, type: Type): boolean;
|
|
11
|
+
export interface HttpFileModel {
|
|
12
|
+
readonly type: Type;
|
|
13
|
+
readonly contentType: ModelProperty;
|
|
14
|
+
readonly filename: ModelProperty;
|
|
15
|
+
readonly contents: ModelProperty;
|
|
16
|
+
}
|
|
17
|
+
export declare function getHttpFileModel(program: Program, type: Type): HttpFileModel | undefined;
|
|
18
|
+
export interface HttpPartOptions {
|
|
19
|
+
readonly name?: string;
|
|
20
|
+
}
|
|
21
|
+
export declare const $httpPart: HttpPartDecorator;
|
|
22
|
+
export interface HttpPart {
|
|
23
|
+
readonly type: Type;
|
|
24
|
+
readonly options: HttpPartOptions;
|
|
25
|
+
}
|
|
26
|
+
/** Return the http part information on a model that is an `HttpPart` */
|
|
27
|
+
export declare function getHttpPart(program: Program, target: Type): HttpPart | undefined;
|
|
28
|
+
//# sourceMappingURL=private.decorators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"private.decorators.d.ts","sourceRoot":"","sources":["../../src/private.decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,aAAa,EACb,OAAO,EACP,IAAI,EAEL,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,4CAA4C,CAAC;AAGpD,eAAO,MAAM,SAAS,0BAA0B,CAAC;AAEjD,eAAO,MAAM,UAAU,EAAE,kBA0BxB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,iBAEvB,CAAC;AAEF;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,WAEtD;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,WAgB/D;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,aAAa,GAAG,SAAS,CAUxF;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,SAAS,EAAE,iBAOvB,CAAC;AAEF,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;CACnC;AAED,wEAAwE;AACxE,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAG,QAAQ,GAAG,SAAS,CAEhF"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { getProperty, } from "@typespec/compiler";
|
|
2
|
+
import { HttpStateKeys } from "./lib.js";
|
|
3
|
+
export const namespace = "TypeSpec.Http.Private";
|
|
4
|
+
export const $plainData = (context, entity) => {
|
|
5
|
+
const { program } = context;
|
|
6
|
+
const decoratorsToRemove = ["$header", "$body", "$query", "$path", "$statusCode"];
|
|
7
|
+
const [headers, bodies, queries, paths, statusCodes] = [
|
|
8
|
+
program.stateMap(HttpStateKeys.header),
|
|
9
|
+
program.stateSet(HttpStateKeys.body),
|
|
10
|
+
program.stateMap(HttpStateKeys.query),
|
|
11
|
+
program.stateMap(HttpStateKeys.path),
|
|
12
|
+
program.stateMap(HttpStateKeys.statusCode),
|
|
13
|
+
];
|
|
14
|
+
for (const property of entity.properties.values()) {
|
|
15
|
+
// Remove the decorators so that they do not run in the future, for example,
|
|
16
|
+
// if this model is later spread into another.
|
|
17
|
+
property.decorators = property.decorators.filter((d) => !decoratorsToRemove.includes(d.decorator.name));
|
|
18
|
+
// Remove the impact the decorators already had on this model.
|
|
19
|
+
headers.delete(property);
|
|
20
|
+
bodies.delete(property);
|
|
21
|
+
queries.delete(property);
|
|
22
|
+
paths.delete(property);
|
|
23
|
+
statusCodes.delete(property);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
export const $httpFile = (context, target) => {
|
|
27
|
+
context.program.stateSet(HttpStateKeys.file).add(target);
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Check if the given type is an `HttpFile`
|
|
31
|
+
*/
|
|
32
|
+
export function isHttpFile(program, type) {
|
|
33
|
+
return program.stateSet(HttpStateKeys.file).has(type);
|
|
34
|
+
}
|
|
35
|
+
export function isOrExtendsHttpFile(program, type) {
|
|
36
|
+
if (type.kind !== "Model") {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
let current = type;
|
|
40
|
+
while (current) {
|
|
41
|
+
if (isHttpFile(program, current)) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
current = current.baseModel;
|
|
45
|
+
}
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
export function getHttpFileModel(program, type) {
|
|
49
|
+
if (type.kind !== "Model" || !isOrExtendsHttpFile(program, type)) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
const contentType = getProperty(type, "contentType");
|
|
53
|
+
const filename = getProperty(type, "filename");
|
|
54
|
+
const contents = getProperty(type, "contents");
|
|
55
|
+
return { contents, contentType, filename, type };
|
|
56
|
+
}
|
|
57
|
+
export const $httpPart = (context, target, type, options) => {
|
|
58
|
+
context.program.stateMap(HttpStateKeys.file).set(target, { type, options });
|
|
59
|
+
};
|
|
60
|
+
/** Return the http part information on a model that is an `HttpPart` */
|
|
61
|
+
export function getHttpPart(program, target) {
|
|
62
|
+
return program.stateMap(HttpStateKeys.file).get(target);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=private.decorators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"private.decorators.js","sourceRoot":"","sources":["../../src/private.decorators.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"responses.d.ts","sourceRoot":"","sources":["../../src/responses.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EAUV,SAAS,EACT,OAAO,EAER,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"responses.d.ts","sourceRoot":"","sources":["../../src/responses.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EAUV,SAAS,EACT,OAAO,EAER,MAAM,oBAAoB,CAAC;AAM5B,OAAO,EAGL,qBAAqB,EAGtB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,GACnB,CAAC,qBAAqB,EAAE,EAAE,SAAS,UAAU,EAAE,CAAC,CAiBlD"}
|
package/dist/src/responses.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { createDiagnosticCollector, getDoc, getErrorsDoc, getReturnsDoc, isErrorModel, isNullType, isVoidType, } from "@typespec/compiler";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { gatherMetadata, Visibility } from "./metadata.js";
|
|
2
|
+
import { getStatusCodeDescription, getStatusCodesWithDiagnostics } from "./decorators.js";
|
|
3
|
+
import { HttpStateKeys, reportDiagnostic } from "./lib.js";
|
|
4
|
+
import { Visibility } from "./metadata.js";
|
|
5
|
+
import { resolveHttpPayload } from "./payload.js";
|
|
7
6
|
/**
|
|
8
7
|
* Get the responses for a given operation.
|
|
9
8
|
*/
|
|
@@ -49,16 +48,12 @@ class ResponseIndex {
|
|
|
49
48
|
}
|
|
50
49
|
}
|
|
51
50
|
function processResponseType(program, diagnostics, operation, responses, responseType) {
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
// Get body
|
|
52
|
+
let { body: resolvedBody, metadata } = diagnostics.pipe(resolveHttpPayload(program, responseType, Visibility.Read, "response"));
|
|
54
53
|
// Get explicity defined status codes
|
|
55
54
|
const statusCodes = diagnostics.pipe(getResponseStatusCodes(program, responseType, metadata));
|
|
56
|
-
// Get explicitly defined content types
|
|
57
|
-
const contentTypes = getResponseContentTypes(program, diagnostics, metadata);
|
|
58
55
|
// Get response headers
|
|
59
56
|
const headers = getResponseHeaders(program, metadata);
|
|
60
|
-
// Get body
|
|
61
|
-
let resolvedBody = diagnostics.pipe(resolveBody(program, responseType, metadata, rootPropertyMap, Visibility.Read, "response"));
|
|
62
57
|
// If there is no explicit status code, check if it should be 204
|
|
63
58
|
if (statusCodes.length === 0) {
|
|
64
59
|
if (isErrorModel(program, responseType)) {
|
|
@@ -76,10 +71,6 @@ function processResponseType(program, diagnostics, operation, responses, respons
|
|
|
76
71
|
statusCodes.push(200);
|
|
77
72
|
}
|
|
78
73
|
}
|
|
79
|
-
// If there is a body but no explicit content types, use application/json
|
|
80
|
-
if (resolvedBody && contentTypes.length === 0) {
|
|
81
|
-
contentTypes.push("application/json");
|
|
82
|
-
}
|
|
83
74
|
// Put them into currentEndpoint.responses
|
|
84
75
|
for (const statusCode of statusCodes) {
|
|
85
76
|
// the first model for this statusCode/content type pair carries the
|
|
@@ -93,19 +84,10 @@ function processResponseType(program, diagnostics, operation, responses, respons
|
|
|
93
84
|
};
|
|
94
85
|
if (resolvedBody !== undefined) {
|
|
95
86
|
response.responses.push({
|
|
96
|
-
body:
|
|
97
|
-
contentTypes: contentTypes,
|
|
98
|
-
...resolvedBody,
|
|
99
|
-
},
|
|
87
|
+
body: resolvedBody,
|
|
100
88
|
headers,
|
|
101
89
|
});
|
|
102
90
|
}
|
|
103
|
-
else if (contentTypes.length > 0) {
|
|
104
|
-
diagnostics.add(createDiagnostic({
|
|
105
|
-
code: "content-type-ignored",
|
|
106
|
-
target: responseType,
|
|
107
|
-
}));
|
|
108
|
-
}
|
|
109
91
|
else {
|
|
110
92
|
response.responses.push({ headers });
|
|
111
93
|
}
|
|
@@ -122,7 +104,7 @@ function getResponseStatusCodes(program, responseType, metadata) {
|
|
|
122
104
|
const diagnostics = createDiagnosticCollector();
|
|
123
105
|
let statusFound = false;
|
|
124
106
|
for (const prop of metadata) {
|
|
125
|
-
if (
|
|
107
|
+
if (prop.kind === "statusCode") {
|
|
126
108
|
if (statusFound) {
|
|
127
109
|
reportDiagnostic(program, {
|
|
128
110
|
code: "multiple-status-codes",
|
|
@@ -130,7 +112,7 @@ function getResponseStatusCodes(program, responseType, metadata) {
|
|
|
130
112
|
});
|
|
131
113
|
}
|
|
132
114
|
statusFound = true;
|
|
133
|
-
codes.push(...diagnostics.pipe(getStatusCodesWithDiagnostics(program, prop)));
|
|
115
|
+
codes.push(...diagnostics.pipe(getStatusCodesWithDiagnostics(program, prop.property)));
|
|
134
116
|
}
|
|
135
117
|
}
|
|
136
118
|
// This is only needed to retrieve the * status code set by @defaultResponse.
|
|
@@ -145,29 +127,14 @@ function getResponseStatusCodes(program, responseType, metadata) {
|
|
|
145
127
|
function getExplicitSetStatusCode(program, entity) {
|
|
146
128
|
return program.stateMap(HttpStateKeys.statusCode).get(entity) ?? [];
|
|
147
129
|
}
|
|
148
|
-
/**
|
|
149
|
-
* Get explicity defined content-types from response metadata
|
|
150
|
-
* Return is an array of strings, possibly empty, which indicates no explicitly defined content-type.
|
|
151
|
-
* We do not check for duplicates here -- that will be done by the caller.
|
|
152
|
-
*/
|
|
153
|
-
function getResponseContentTypes(program, diagnostics, metadata) {
|
|
154
|
-
const contentTypes = [];
|
|
155
|
-
for (const prop of metadata) {
|
|
156
|
-
if (isHeader(program, prop) && isContentTypeHeader(program, prop)) {
|
|
157
|
-
contentTypes.push(...diagnostics.pipe(getContentTypes(prop)));
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
return contentTypes;
|
|
161
|
-
}
|
|
162
130
|
/**
|
|
163
131
|
* Get response headers from response metadata
|
|
164
132
|
*/
|
|
165
133
|
function getResponseHeaders(program, metadata) {
|
|
166
134
|
const responseHeaders = {};
|
|
167
135
|
for (const prop of metadata) {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
responseHeaders[headerName] = prop;
|
|
136
|
+
if (prop.kind === "header") {
|
|
137
|
+
responseHeaders[prop.options.name] = prop.property;
|
|
171
138
|
}
|
|
172
139
|
}
|
|
173
140
|
return responseHeaders;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"responses.js","sourceRoot":"","sources":["../../src/responses.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EAGzB,MAAM,EACN,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,UAAU,EACV,UAAU,GAMX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"responses.js","sourceRoot":"","sources":["../../src/responses.ts"],"names":[],"mappings":"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"}
|