@typespec/http-server-js 0.58.0-alpha.10-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.
Files changed (215) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/LICENSE +21 -0
  3. package/README.md +183 -0
  4. package/build-helpers.ts +170 -0
  5. package/dist/generated-defs/helpers/header.d.ts +4 -0
  6. package/dist/generated-defs/helpers/header.d.ts.map +1 -0
  7. package/dist/generated-defs/helpers/header.js +76 -0
  8. package/dist/generated-defs/helpers/header.js.map +1 -0
  9. package/dist/generated-defs/helpers/http.d.ts +4 -0
  10. package/dist/generated-defs/helpers/http.d.ts.map +1 -0
  11. package/dist/generated-defs/helpers/http.js +134 -0
  12. package/dist/generated-defs/helpers/http.js.map +1 -0
  13. package/dist/generated-defs/helpers/index.d.ts +4 -0
  14. package/dist/generated-defs/helpers/index.d.ts.map +1 -0
  15. package/dist/generated-defs/helpers/index.js +21 -0
  16. package/dist/generated-defs/helpers/index.js.map +1 -0
  17. package/dist/generated-defs/helpers/multipart.d.ts +4 -0
  18. package/dist/generated-defs/helpers/multipart.d.ts.map +1 -0
  19. package/dist/generated-defs/helpers/multipart.js +249 -0
  20. package/dist/generated-defs/helpers/multipart.js.map +1 -0
  21. package/dist/generated-defs/helpers/router.d.ts +4 -0
  22. package/dist/generated-defs/helpers/router.d.ts.map +1 -0
  23. package/dist/generated-defs/helpers/router.js +259 -0
  24. package/dist/generated-defs/helpers/router.js.map +1 -0
  25. package/dist/src/common/declaration.d.ts +13 -0
  26. package/dist/src/common/declaration.d.ts.map +1 -0
  27. package/dist/src/common/declaration.js +45 -0
  28. package/dist/src/common/declaration.js.map +1 -0
  29. package/dist/src/common/documentation.d.ts +12 -0
  30. package/dist/src/common/documentation.d.ts.map +1 -0
  31. package/dist/src/common/documentation.js +21 -0
  32. package/dist/src/common/documentation.js.map +1 -0
  33. package/dist/src/common/enum.d.ts +10 -0
  34. package/dist/src/common/enum.d.ts.map +1 -0
  35. package/dist/src/common/enum.js +21 -0
  36. package/dist/src/common/enum.js.map +1 -0
  37. package/dist/src/common/interface.d.ts +50 -0
  38. package/dist/src/common/interface.d.ts.map +1 -0
  39. package/dist/src/common/interface.js +194 -0
  40. package/dist/src/common/interface.js.map +1 -0
  41. package/dist/src/common/model.d.ts +26 -0
  42. package/dist/src/common/model.d.ts.map +1 -0
  43. package/dist/src/common/model.js +115 -0
  44. package/dist/src/common/model.js.map +1 -0
  45. package/dist/src/common/namespace.d.ts +38 -0
  46. package/dist/src/common/namespace.d.ts.map +1 -0
  47. package/dist/src/common/namespace.js +184 -0
  48. package/dist/src/common/namespace.js.map +1 -0
  49. package/dist/src/common/reference.d.ts +46 -0
  50. package/dist/src/common/reference.d.ts.map +1 -0
  51. package/dist/src/common/reference.js +243 -0
  52. package/dist/src/common/reference.js.map +1 -0
  53. package/dist/src/common/scalar.d.ts +50 -0
  54. package/dist/src/common/scalar.d.ts.map +1 -0
  55. package/dist/src/common/scalar.js +144 -0
  56. package/dist/src/common/scalar.js.map +1 -0
  57. package/dist/src/common/serialization/index.d.ts +11 -0
  58. package/dist/src/common/serialization/index.d.ts.map +1 -0
  59. package/dist/src/common/serialization/index.js +72 -0
  60. package/dist/src/common/serialization/index.js.map +1 -0
  61. package/dist/src/common/serialization/json.d.ts +6 -0
  62. package/dist/src/common/serialization/json.d.ts.map +1 -0
  63. package/dist/src/common/serialization/json.js +341 -0
  64. package/dist/src/common/serialization/json.js.map +1 -0
  65. package/dist/src/common/union.d.ts +23 -0
  66. package/dist/src/common/union.d.ts.map +1 -0
  67. package/dist/src/common/union.js +57 -0
  68. package/dist/src/common/union.js.map +1 -0
  69. package/dist/src/ctx.d.ts +242 -0
  70. package/dist/src/ctx.d.ts.map +1 -0
  71. package/dist/src/ctx.js +211 -0
  72. package/dist/src/ctx.js.map +1 -0
  73. package/dist/src/helpers/header.d.ts +14 -0
  74. package/dist/src/helpers/header.d.ts.map +1 -0
  75. package/dist/src/helpers/header.js +38 -0
  76. package/dist/src/helpers/header.js.map +1 -0
  77. package/dist/src/helpers/http.d.ts +70 -0
  78. package/dist/src/helpers/http.d.ts.map +1 -0
  79. package/dist/src/helpers/http.js +86 -0
  80. package/dist/src/helpers/http.js.map +1 -0
  81. package/dist/src/helpers/multipart.d.ts +26 -0
  82. package/dist/src/helpers/multipart.d.ts.map +1 -0
  83. package/dist/src/helpers/multipart.js +182 -0
  84. package/dist/src/helpers/multipart.js.map +1 -0
  85. package/dist/src/helpers/router.d.ts +176 -0
  86. package/dist/src/helpers/router.d.ts.map +1 -0
  87. package/dist/src/helpers/router.js +55 -0
  88. package/dist/src/helpers/router.js.map +1 -0
  89. package/dist/src/http/index.d.ts +24 -0
  90. package/dist/src/http/index.d.ts.map +1 -0
  91. package/dist/src/http/index.js +52 -0
  92. package/dist/src/http/index.js.map +1 -0
  93. package/dist/src/http/server/index.d.ts +11 -0
  94. package/dist/src/http/server/index.d.ts.map +1 -0
  95. package/dist/src/http/server/index.js +413 -0
  96. package/dist/src/http/server/index.js.map +1 -0
  97. package/dist/src/http/server/multipart.d.ts +16 -0
  98. package/dist/src/http/server/multipart.d.ts.map +1 -0
  99. package/dist/src/http/server/multipart.js +214 -0
  100. package/dist/src/http/server/multipart.js.map +1 -0
  101. package/dist/src/http/server/router.d.ts +15 -0
  102. package/dist/src/http/server/router.d.ts.map +1 -0
  103. package/dist/src/http/server/router.js +459 -0
  104. package/dist/src/http/server/router.js.map +1 -0
  105. package/dist/src/index.d.ts +5 -0
  106. package/dist/src/index.d.ts.map +1 -0
  107. package/dist/src/index.js +38 -0
  108. package/dist/src/index.js.map +1 -0
  109. package/dist/src/lib.d.ts +141 -0
  110. package/dist/src/lib.d.ts.map +1 -0
  111. package/dist/src/lib.js +116 -0
  112. package/dist/src/lib.js.map +1 -0
  113. package/dist/src/scripts/scaffold/bin.d.mts +14 -0
  114. package/dist/src/scripts/scaffold/bin.d.mts.map +1 -0
  115. package/dist/src/scripts/scaffold/bin.mjs +559 -0
  116. package/dist/src/scripts/scaffold/bin.mjs.map +1 -0
  117. package/dist/src/testing/index.d.ts +3 -0
  118. package/dist/src/testing/index.d.ts.map +1 -0
  119. package/dist/src/testing/index.js +6 -0
  120. package/dist/src/testing/index.js.map +1 -0
  121. package/dist/src/util/case.d.ts +81 -0
  122. package/dist/src/util/case.d.ts.map +1 -0
  123. package/dist/src/util/case.js +111 -0
  124. package/dist/src/util/case.js.map +1 -0
  125. package/dist/src/util/differentiate.d.ts +251 -0
  126. package/dist/src/util/differentiate.d.ts.map +1 -0
  127. package/dist/src/util/differentiate.js +580 -0
  128. package/dist/src/util/differentiate.js.map +1 -0
  129. package/dist/src/util/error.d.ts +13 -0
  130. package/dist/src/util/error.d.ts.map +1 -0
  131. package/dist/src/util/error.js +25 -0
  132. package/dist/src/util/error.js.map +1 -0
  133. package/dist/src/util/extends.d.ts +10 -0
  134. package/dist/src/util/extends.d.ts.map +1 -0
  135. package/dist/src/util/extends.js +31 -0
  136. package/dist/src/util/extends.js.map +1 -0
  137. package/dist/src/util/iter.d.ts +39 -0
  138. package/dist/src/util/iter.d.ts.map +1 -0
  139. package/dist/src/util/iter.js +72 -0
  140. package/dist/src/util/iter.js.map +1 -0
  141. package/dist/src/util/keywords.d.ts +10 -0
  142. package/dist/src/util/keywords.d.ts.map +1 -0
  143. package/dist/src/util/keywords.js +85 -0
  144. package/dist/src/util/keywords.js.map +1 -0
  145. package/dist/src/util/name.d.ts +12 -0
  146. package/dist/src/util/name.d.ts.map +1 -0
  147. package/dist/src/util/name.js +26 -0
  148. package/dist/src/util/name.js.map +1 -0
  149. package/dist/src/util/once-queue.d.ts +24 -0
  150. package/dist/src/util/once-queue.d.ts.map +1 -0
  151. package/dist/src/util/once-queue.js +34 -0
  152. package/dist/src/util/once-queue.js.map +1 -0
  153. package/dist/src/util/openapi3.d.ts +23 -0
  154. package/dist/src/util/openapi3.d.ts.map +1 -0
  155. package/dist/src/util/openapi3.js +40 -0
  156. package/dist/src/util/openapi3.js.map +1 -0
  157. package/dist/src/util/pluralism.d.ts +23 -0
  158. package/dist/src/util/pluralism.d.ts.map +1 -0
  159. package/dist/src/util/pluralism.js +36 -0
  160. package/dist/src/util/pluralism.js.map +1 -0
  161. package/dist/src/util/scope.d.ts +85 -0
  162. package/dist/src/util/scope.d.ts.map +1 -0
  163. package/dist/src/util/scope.js +111 -0
  164. package/dist/src/util/scope.js.map +1 -0
  165. package/dist/src/write.d.ts +23 -0
  166. package/dist/src/write.d.ts.map +1 -0
  167. package/dist/src/write.js +62 -0
  168. package/dist/src/write.js.map +1 -0
  169. package/generated-defs/helpers/header.ts +83 -0
  170. package/generated-defs/helpers/http.ts +141 -0
  171. package/generated-defs/helpers/index.ts +27 -0
  172. package/generated-defs/helpers/multipart.ts +256 -0
  173. package/generated-defs/helpers/router.ts +266 -0
  174. package/package.json +71 -0
  175. package/src/common/declaration.ts +52 -0
  176. package/src/common/documentation.ts +26 -0
  177. package/src/common/enum.ts +28 -0
  178. package/src/common/interface.ts +264 -0
  179. package/src/common/model.ts +160 -0
  180. package/src/common/namespace.ts +243 -0
  181. package/src/common/reference.ts +319 -0
  182. package/src/common/scalar.ts +173 -0
  183. package/src/common/serialization/index.ts +124 -0
  184. package/src/common/serialization/json.ts +444 -0
  185. package/src/common/union.ts +76 -0
  186. package/src/ctx.ts +497 -0
  187. package/src/helpers/header.ts +55 -0
  188. package/src/helpers/http.ts +113 -0
  189. package/src/helpers/multipart.ts +228 -0
  190. package/src/helpers/router.ts +238 -0
  191. package/src/http/index.ts +81 -0
  192. package/src/http/server/index.ts +548 -0
  193. package/src/http/server/multipart.ts +272 -0
  194. package/src/http/server/router.ts +686 -0
  195. package/src/index.ts +56 -0
  196. package/src/lib.ts +130 -0
  197. package/src/scripts/scaffold/bin.mts +781 -0
  198. package/src/testing/index.ts +10 -0
  199. package/src/util/case.ts +182 -0
  200. package/src/util/differentiate.ts +957 -0
  201. package/src/util/error.ts +28 -0
  202. package/src/util/extends.ts +43 -0
  203. package/src/util/iter.ts +85 -0
  204. package/src/util/keywords.ts +90 -0
  205. package/src/util/name.ts +33 -0
  206. package/src/util/once-queue.ts +55 -0
  207. package/src/util/openapi3.ts +53 -0
  208. package/src/util/pluralism.ts +37 -0
  209. package/src/util/scope.ts +211 -0
  210. package/src/write.ts +88 -0
  211. package/temp/tsconfig.tsbuildinfo +1 -0
  212. package/test/header.test.ts +26 -0
  213. package/test/multipart.test.ts +169 -0
  214. package/tsconfig.json +10 -0
  215. package/vitest.config.ts +4 -0
@@ -0,0 +1,214 @@
1
+ import { isHttpFile } from "@typespec/http";
2
+ import { module as headerHelpers } from "../../../generated-defs/helpers/header.js";
3
+ import { module as multipartHelpers } from "../../../generated-defs/helpers/multipart.js";
4
+ import { emitTypeReference } from "../../common/reference.js";
5
+ import { requireSerialization } from "../../common/serialization/index.js";
6
+ import { requiresJsonSerialization } from "../../common/serialization/json.js";
7
+ import { parseCase } from "../../util/case.js";
8
+ import { UnimplementedError } from "../../util/error.js";
9
+ /**
10
+ * Parse a multipart request body according to the given body spec.
11
+ *
12
+ * @param ctx - The emitter context.
13
+ * @param module - The module that this parser is written into.
14
+ * @param operation - The HTTP operation this body is being parsed for.
15
+ * @param body - The multipart body spec
16
+ * @param bodyName - The name of the variable to store the parsed body in.
17
+ * @param bodyTypeName - The name of the type of the parsed body.
18
+ */
19
+ export function* emitMultipart(ctx, module, operation, body, ctxName, bodyName, bodyTypeName) {
20
+ module.imports.push({ binder: ["parseHeaderValueParameters"], from: headerHelpers }, { binder: ["createMultipartReadable"], from: multipartHelpers });
21
+ yield `const ${bodyName} = await new Promise<${bodyTypeName}>(`;
22
+ yield `// eslint-disable-next-line no-async-promise-executor`;
23
+ yield `async function parse${bodyTypeName}MultipartRequest(resolve, reject) {`;
24
+ // Wrap this whole thing in a try/catch because the executor is async. If anything in here throws, we want to reject the promise instead of
25
+ // just letting the executor die and the promise never settle.
26
+ yield ` try {`;
27
+ const stream = ctx.gensym("stream");
28
+ yield ` const ${stream} = createMultipartReadable(${ctxName}.request);`;
29
+ yield "";
30
+ const contentDisposition = ctx.gensym("contentDisposition");
31
+ const contentType = ctx.gensym("contentType");
32
+ const name = ctx.gensym("name");
33
+ const fields = ctx.gensym("fields");
34
+ yield ` const ${fields}: { [k: string]: any } = {};`;
35
+ yield "";
36
+ const partsWithMulti = body.parts.filter((part) => part.name && part.multi);
37
+ const anonymousParts = body.parts.filter((part) => !part.name);
38
+ const anonymousPartsAreMulti = anonymousParts.some((part) => part.multi);
39
+ if (anonymousParts.length > 0) {
40
+ throw new UnimplementedError("Anonymous parts are not yet supported in multipart parsing.");
41
+ }
42
+ let hadMulti = false;
43
+ for (const partWithMulti of partsWithMulti) {
44
+ if (!partWithMulti.optional) {
45
+ hadMulti = true;
46
+ const name = partWithMulti.name;
47
+ const propName = parseCase(name).camelCase;
48
+ yield ` ${fields}.${propName} = [];`;
49
+ }
50
+ }
51
+ if (anonymousPartsAreMulti) {
52
+ hadMulti = true;
53
+ yield ` const ${fields}.__anonymous = [];`;
54
+ }
55
+ if (hadMulti)
56
+ yield "";
57
+ const partName = ctx.gensym("part");
58
+ yield ` for await (const ${partName} of ${stream}) {`;
59
+ yield ` const ${contentDisposition} = parseHeaderValueParameters(${partName}.headers["content-disposition"]);`;
60
+ yield ` if (!${contentDisposition}) {`;
61
+ yield ` return reject("Invalid request: missing content-disposition in part.");`;
62
+ yield ` }`;
63
+ yield "";
64
+ yield ` const ${contentType} = parseHeaderValueParameters(${partName}.headers["content-type"]);`;
65
+ yield "";
66
+ yield ` const ${name} = ${contentDisposition}.params.name ?? "";`;
67
+ yield "";
68
+ yield ` switch (${name}) {`;
69
+ for (const namedPart of body.parts.filter((part) => part.name)) {
70
+ // TODO: this is wrong. The name of the part is not necessarily the name of the property in the body.
71
+ // The HTTP library does not provide the property that maps to this part if it's explicitly named.
72
+ const propName = parseCase(namedPart.name).camelCase;
73
+ let value = ctx.gensym("value");
74
+ yield ` case ${JSON.stringify(namedPart.name)}: {`;
75
+ // HTTP API is doing too much work for us. I need to know whether I'm looking at an HTTP file, and the only way to do that is to
76
+ // look at the model that the body is a property of. This is more than a bit of a hack, but it will work for now.
77
+ if (namedPart.body.contentTypeProperty?.model &&
78
+ isHttpFile(ctx.program, namedPart.body.contentTypeProperty.model)) {
79
+ // We have an http file, so we will buffer the body and then optionally get the filename and content type.
80
+ // TODO: support models that inherit from File and have other optional metadata. The Http.File structure
81
+ // doesn't make this easy to do, since it doesn't describe where the fields of the file come from in the
82
+ // multipart request. However, we could recognize models that extend File and handle the special fields
83
+ // of Http.File specially.
84
+ // TODO: find a way to avoid buffering the entire file in memory. I have to do this to return an object that
85
+ // has the keys described in the TypeSpec model and because the underlying multipart stream has to be
86
+ // drained sequentially. Server authors could stall the stream by trying to read part bodies out of order if
87
+ // I represented the file contents as a stream. We will need some way to identify the whole multipart
88
+ // envelope and represent it as a stream of named parts. The backend for multipart streaming supports this,
89
+ // and it's how we receive the part data in this handler, but we don't have a way to represent it to the
90
+ // implementor yet.
91
+ yield ` const __chunks = [];`;
92
+ yield "";
93
+ yield ` for await (const __chunk of ${partName}.body) {`;
94
+ yield ` __chunks.push(__chunk);`;
95
+ yield ` }`;
96
+ yield "";
97
+ yield ` const ${value}: { filename?: string; contentType?: string; contents: Buffer; } = { contents: Buffer.concat(__chunks) };`;
98
+ yield "";
99
+ yield ` if (${contentType}) {`;
100
+ yield ` ${value}.contentType = ${contentType}.verbatim;`;
101
+ yield ` }`;
102
+ yield "";
103
+ yield ` const __filename = ${contentDisposition}.params.filename;`;
104
+ yield ` if (__filename) {`;
105
+ yield ` ${value}.filename = __filename;`;
106
+ yield ` }`;
107
+ }
108
+ else {
109
+ // Not a file. We just use the given content-type to determine how to parse the body.
110
+ yield ` if (${contentType}?.value && ${contentType}.value !== "application/json") {`;
111
+ yield ` throw new Error("Unsupported content-type for part: " + ${contentType}.value);`;
112
+ yield ` }`;
113
+ yield "";
114
+ if (namedPart.headers.length > 0) {
115
+ // TODO: support reconstruction of mixed objects with headers and bodies.
116
+ throw new UnimplementedError("Named parts with headers are not yet supported in multipart parsing.");
117
+ }
118
+ yield ` const __chunks = [];`;
119
+ yield "";
120
+ yield ` for await (const __chunk of ${partName}.body) {`;
121
+ yield ` __chunks.push(__chunk);`;
122
+ yield ` }`;
123
+ yield ` const __object = JSON.parse(Buffer.concat(__chunks).toString("utf-8"));`;
124
+ yield "";
125
+ if (requiresJsonSerialization(ctx, namedPart.body.type)) {
126
+ const bodyTypeReference = emitTypeReference(ctx, namedPart.body.type, namedPart.body.property ?? namedPart.body.type, module, { altName: bodyTypeName + "Body", requireDeclaration: true });
127
+ requireSerialization(ctx, namedPart.body.type, "application/json");
128
+ value = `${bodyTypeReference}.fromJsonObject(__object)`;
129
+ }
130
+ else {
131
+ value = "__object";
132
+ }
133
+ }
134
+ if (namedPart.multi) {
135
+ if (namedPart.optional) {
136
+ yield ` (${fields}.${propName} ??= []).push(${value});`;
137
+ }
138
+ else {
139
+ yield ` ${fields}.${propName}.push(${value});`;
140
+ }
141
+ }
142
+ else {
143
+ yield ` ${fields}.${propName} = ${value};`;
144
+ }
145
+ yield ` break;`;
146
+ yield ` }`;
147
+ }
148
+ if (anonymousParts.length > 0) {
149
+ yield ` "": {`;
150
+ if (anonymousPartsAreMulti) {
151
+ yield ` ${fields}.__anonymous.push({`;
152
+ yield ` headers: ${partName}.headers,`;
153
+ yield ` body: ${partName}.body,`;
154
+ yield ` });`;
155
+ yield ` break;`;
156
+ }
157
+ else {
158
+ yield ` ${fields}.__anonymous = {}`;
159
+ yield ` break;`;
160
+ }
161
+ yield ` }`;
162
+ }
163
+ yield ` default: {`;
164
+ yield ` reject("Invalid request: unknown part name.");`;
165
+ yield ` return;`;
166
+ yield ` }`;
167
+ yield ` }`;
168
+ yield ` }`;
169
+ yield "";
170
+ yield ` resolve(${fields} as ${bodyTypeName});`;
171
+ yield ` } catch (err) { reject(err); }`;
172
+ yield "});";
173
+ }
174
+ // This function is old and broken. I'm not likely to fix it unless we decide to continue supporting legacy multipart
175
+ // parsing after 1.0.
176
+ export function* emitMultipartLegacy(ctxName, bodyName, bodyTypeName) {
177
+ yield `const ${bodyName} = await new Promise(function parse${bodyTypeName}MultipartRequest(resolve, reject) {`;
178
+ yield ` const boundary = ${ctxName}.request.headers["content-type"]?.split(";").find((s) => s.includes("boundary="))?.split("=", 2)[1];`;
179
+ yield ` if (!boundary) {`;
180
+ yield ` return reject("Invalid request: missing boundary in content-type.");`;
181
+ yield ` }`;
182
+ yield "";
183
+ yield ` const chunks: Array<Buffer> = [];`;
184
+ yield ` ${ctxName}.request.on("data", function appendChunk(chunk) { chunks.push(chunk); });`;
185
+ yield ` ${ctxName}.request.on("end", function finalize() {`;
186
+ yield ` const text = Buffer.concat(chunks).toString();`;
187
+ yield ` const parts = text.split(boundary).slice(1, -1);`;
188
+ yield ` const fields: { [k: string]: any } = {};`;
189
+ yield "";
190
+ yield ` for (const part of parts) {`;
191
+ yield ` const [headerText, body] = part.split("\\r\\n\\r\\n", 2);`;
192
+ yield " const headers = Object.fromEntries(";
193
+ yield ` headerText.split("\\r\\n").map((line) => line.split(": ", 2))`;
194
+ yield " ) as { [k: string]: string };";
195
+ yield ` const name = headers["Content-Disposition"].split("name=\\"")[1].split("\\"")[0];`;
196
+ yield ` const contentType = headers["Content-Type"] ?? "text/plain";`;
197
+ yield "";
198
+ yield ` switch (contentType) {`;
199
+ yield ` case "application/json":`;
200
+ yield ` fields[name] = JSON.parse(body);`;
201
+ yield ` break;`;
202
+ yield ` case "application/octet-stream":`;
203
+ yield ` fields[name] = Buffer.from(body, "utf-8");`;
204
+ yield ` break;`;
205
+ yield ` default:`;
206
+ yield ` fields[name] = body;`;
207
+ yield ` }`;
208
+ yield ` }`;
209
+ yield "";
210
+ yield ` resolve(fields as ${bodyTypeName});`;
211
+ yield ` });`;
212
+ yield `}) as ${bodyTypeName};`;
213
+ }
214
+ //# sourceMappingURL=multipart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multipart.js","sourceRoot":"","sources":["../../../../src/http/server/multipart.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { HttpService } from "@typespec/http";
2
+ import { Module } from "../../ctx.js";
3
+ import { HttpContext } from "../index.js";
4
+ /**
5
+ * Emit a router for the HTTP operations defined in a given service.
6
+ *
7
+ * The generated router will use optimal prefix matching to dispatch requests to the appropriate underlying
8
+ * implementation using the raw server.
9
+ *
10
+ * @param ctx - The emitter context.
11
+ * @param service - The HTTP service to emit a router for.
12
+ * @param serverRawModule - The module that contains the raw server implementation.
13
+ */
14
+ export declare function emitRouter(ctx: HttpContext, service: HttpService, serverRawModule: Module): void;
15
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../../src/http/server/router.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,WAAW,EAIZ,MAAM,gBAAgB,CAAC;AAMxB,OAAO,EAAE,MAAM,EAAgB,MAAM,cAAc,CAAC;AAIpD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAQ1C;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,QAqBzF"}