@typespec/http-server-js 0.58.0-alpha.13-dev.3 → 0.58.0-alpha.13-dev.4

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.
@@ -112,7 +112,7 @@ export function differentiateTypes(ctx, module, cases, renderPropertyName = PROP
112
112
  const scalars = categories.Scalar ?? [];
113
113
  const intrinsics = categories.Intrinsic ?? [];
114
114
  if (literals.length + scalars.length + intrinsics.length === 0) {
115
- return differentiateModelTypes(ctx, module, select(models, cases), renderPropertyName);
115
+ return differentiateModelTypes(ctx, module, select(models, cases), { renderPropertyName });
116
116
  }
117
117
  else {
118
118
  const branches = [];
@@ -226,7 +226,7 @@ export function differentiateTypes(ctx, module, cases, renderPropertyName = PROP
226
226
  kind: "if-chain",
227
227
  branches,
228
228
  else: models.length > 0
229
- ? differentiateModelTypes(ctx, module, select(models, cases), renderPropertyName)
229
+ ? differentiateModelTypes(ctx, module, select(models, cases), { renderPropertyName })
230
230
  : undefined,
231
231
  };
232
232
  }
@@ -288,18 +288,13 @@ function getIntegerRange(ctx, module, property) {
288
288
  function overlaps(range, other) {
289
289
  return range[0] <= other[1] && range[1] >= other[0];
290
290
  }
291
- /**
292
- * Differentiate a set of model types based on their properties. This function returns a CodeTree that will test an input
293
- * "subject" and determine which of the cases it matches, executing the corresponding code block.
294
- *
295
- * @param ctx - The emitter context.
296
- * @param models - A map of models to differentiate to their respective code blocks.
297
- * @param renderPropertyName - A function that converts a model property reference over the subject to a string.
298
- * @returns a CodeTree to use with `writeCodeTree`
299
- */
300
- export function differentiateModelTypes(ctx, module, models, renderPropertyName = PROPERTY_ID) {
301
- // Horrible n^2 operation to get the unique properties of all models in the map, but hopefully n is small, so it should
302
- // be okay until you have a lot of models to differentiate.
291
+ const DEFAULT_DIFFERENTIATE_OPTIONS = {
292
+ renderPropertyName: PROPERTY_ID,
293
+ filter: () => true,
294
+ else: undefined,
295
+ };
296
+ export function differentiateModelTypes(ctx, module, models, _options = {}) {
297
+ const options = { ...DEFAULT_DIFFERENTIATE_OPTIONS, ..._options };
303
298
  const uniqueProps = new Map();
304
299
  // Map of property names to maps of literal values that identify a model.
305
300
  const propertyLiterals = new Map();
@@ -309,14 +304,14 @@ export function differentiateModelTypes(ctx, module, models, renderPropertyName
309
304
  const uniqueRanges = new Map();
310
305
  for (const model of models) {
311
306
  const props = new Set();
312
- for (const prop of getAllProperties(model)) {
307
+ for (const prop of getAllProperties(model).filter(options.filter)) {
313
308
  // Don't consider optional properties for differentiation.
314
309
  if (prop.optional)
315
310
  continue;
316
311
  // Ignore properties that have no parseable name.
317
312
  if (isUnspeakable(prop.name))
318
313
  continue;
319
- const renderedPropName = renderPropertyName(prop);
314
+ const renderedPropName = options.renderPropertyName(prop);
320
315
  // CASE - literal value
321
316
  if (isLiteralValueType(prop.type)) {
322
317
  let literals = propertyLiterals.get(renderedPropName);
@@ -387,7 +382,7 @@ export function differentiateModelTypes(ctx, module, models, renderPropertyName
387
382
  uniqueProps.set(model, props);
388
383
  }
389
384
  const branches = [];
390
- let defaultCase = undefined;
385
+ let defaultCase = options.else;
391
386
  for (const [model, unique] of uniqueProps) {
392
387
  const literals = uniqueLiterals.get(model);
393
388
  const ranges = uniqueRanges.get(model);
@@ -397,28 +392,25 @@ export function differentiateModelTypes(ctx, module, models, renderPropertyName
397
392
  code: "undifferentiable-model",
398
393
  target: model,
399
394
  });
400
- return {
401
- kind: "result",
402
- type: defaultCase,
403
- };
395
+ return defaultCase;
404
396
  }
405
397
  else {
406
398
  // Allow a single default case. This covers more APIs that have a single model that is not differentiated by a
407
399
  // unique property, in which case we can make it the `else` case.
408
- defaultCase = model;
400
+ defaultCase = { kind: "result", type: model };
409
401
  continue;
410
402
  }
411
403
  }
412
404
  if (literals && literals.size > 0) {
413
405
  // A literal property value exists that can differentiate this model.
414
406
  const firstUniqueLiteral = literals.values().next().value;
415
- const property = [...model.properties.values()].find((p) => renderPropertyName(p) === firstUniqueLiteral);
407
+ const property = [...model.properties.values()].find((p) => options.renderPropertyName(p) === firstUniqueLiteral);
416
408
  branches.push({
417
409
  condition: {
418
410
  kind: "binary-op",
419
411
  left: {
420
412
  kind: "binary-op",
421
- left: { kind: "literal", value: renderPropertyName(property) },
413
+ left: { kind: "literal", value: options.renderPropertyName(property) },
422
414
  operator: "in",
423
415
  right: SUBJECT,
424
416
  },
@@ -439,14 +431,14 @@ export function differentiateModelTypes(ctx, module, models, renderPropertyName
439
431
  else if (ranges && ranges.size > 0) {
440
432
  // A range property value exists that can differentiate this model.
441
433
  const firstUniqueRange = ranges.values().next().value;
442
- const property = [...model.properties.values()].find((p) => renderPropertyName(p) === firstUniqueRange);
434
+ const property = [...model.properties.values()].find((p) => options.renderPropertyName(p) === firstUniqueRange);
443
435
  const range = [...propertyRanges.get(firstUniqueRange).entries()].find(([range, candidate]) => candidate === model)[0];
444
436
  branches.push({
445
437
  condition: {
446
438
  kind: "binary-op",
447
439
  left: {
448
440
  kind: "binary-op",
449
- left: { kind: "literal", value: renderPropertyName(property) },
441
+ left: { kind: "literal", value: options.renderPropertyName(property) },
450
442
  operator: "in",
451
443
  right: SUBJECT,
452
444
  },
@@ -476,12 +468,7 @@ export function differentiateModelTypes(ctx, module, models, renderPropertyName
476
468
  return {
477
469
  kind: "if-chain",
478
470
  branches,
479
- else: defaultCase
480
- ? {
481
- kind: "result",
482
- type: defaultCase,
483
- }
484
- : undefined,
471
+ else: defaultCase,
485
472
  };
486
473
  }
487
474
  /**
@@ -532,7 +519,12 @@ export function* writeCodeTree(ctx, tree, options) {
532
519
  break;
533
520
  }
534
521
  case "verbatim":
535
- yield* tree.body;
522
+ if (typeof tree.body === "function") {
523
+ yield* tree.body();
524
+ }
525
+ else {
526
+ yield* tree.body;
527
+ }
536
528
  break;
537
529
  default:
538
530
  throw new UnreachableError("writeCodeTree for " + tree.kind, {
@@ -1 +1 @@
1
- {"version":3,"file":"differentiate.js","sourceRoot":"","sources":["../../../src/util/differentiate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"differentiate.js","sourceRoot":"","sources":["../../../src/util/differentiate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typespec/http-server-js",
3
- "version": "0.58.0-alpha.13-dev.3",
3
+ "version": "0.58.0-alpha.13-dev.4",
4
4
  "author": "Microsoft Corporation",
5
5
  "description": "TypeSpec HTTP server code generator for JavaScript",
6
6
  "homepage": "https://github.com/microsoft/typespec",
@@ -41,6 +41,7 @@ import { module as headerHelpers } from "../../../generated-defs/helpers/header.
41
41
  import { module as httpHelpers } from "../../../generated-defs/helpers/http.js";
42
42
  import { getJsScalar } from "../../common/scalar.js";
43
43
  import { requiresJsonSerialization } from "../../common/serialization/json.js";
44
+ import { getFullyQualifiedTypeName } from "../../util/name.js";
44
45
 
45
46
  const DEFAULT_CONTENT_TYPE = "application/json";
46
47
 
@@ -296,7 +297,7 @@ function* emitRawServerOperation(
296
297
 
297
298
  break;
298
299
  }
299
- case "multipart/form-data":
300
+ case "multipart/form-data": {
300
301
  if (body.bodyKind === "multipart") {
301
302
  yield* indent(
302
303
  emitMultipart(ctx, module, operation, body, names.ctx, bodyName, bodyTypeName),
@@ -305,7 +306,88 @@ function* emitRawServerOperation(
305
306
  yield* indent(emitMultipartLegacy(names.ctx, bodyName, bodyTypeName));
306
307
  }
307
308
  break;
309
+ }
310
+ case "text/plain": {
311
+ const string = ctx.program.checker.getStdType("string");
312
+ const [assignable] = ctx.program.checker.isTypeAssignableTo(
313
+ body.type,
314
+ string,
315
+ body.property ?? body.type,
316
+ );
317
+ if (!assignable) {
318
+ const name =
319
+ ("namespace" in body.type &&
320
+ body.type.namespace &&
321
+ getFullyQualifiedTypeName(body.type)) ||
322
+ ("name" in body.type && typeof body.type.name === "string" && body.type.name) ||
323
+ "<unknown>";
324
+ reportDiagnostic(ctx.program, {
325
+ code: "unrecognized-media-type",
326
+ target: body.property ?? body.type,
327
+ format: {
328
+ mediaType: contentType,
329
+ type: name,
330
+ },
331
+ });
332
+ }
333
+
334
+ yield ` const ${bodyName} = await new Promise(function parse${bodyNameCase.pascalCase}(resolve, reject) {`;
335
+ yield ` const chunks: Array<Buffer> = [];`;
336
+ yield ` ${names.ctx}.request.on("data", function appendChunk(chunk) { chunks.push(chunk); });`;
337
+ yield ` ${names.ctx}.request.on("end", function finalize() {`;
338
+ yield ` try {`;
339
+ yield ` const body = Buffer.concat(chunks).toString();`;
340
+ yield ` resolve(body);`;
341
+ yield ` } catch (e) {`;
342
+ yield ` ${names.ctx}.errorHandlers.onInvalidRequest(`;
343
+ yield ` ${names.ctx},`;
344
+ yield ` ${JSON.stringify(operation.path)},`;
345
+ yield ` "invalid text in request body",`;
346
+ yield ` );`;
347
+ yield ` reject(e);`;
348
+ yield ` }`;
349
+ yield ` });`;
350
+ yield ` ${names.ctx}.request.on("error", reject);`;
351
+ yield ` }) as string;`;
352
+ yield "";
353
+ break;
354
+ }
355
+ case "application/octet-stream":
308
356
  default:
357
+ {
358
+ if (!ctx.program.checker.isStdType(body.type, "bytes")) {
359
+ const name =
360
+ ("namespace" in body.type &&
361
+ body.type.namespace &&
362
+ getFullyQualifiedTypeName(body.type)) ||
363
+ ("name" in body.type && typeof body.type.name === "string" && body.type.name) ||
364
+ "<unknown>";
365
+
366
+ reportDiagnostic(ctx.program, {
367
+ code: "unrecognized-media-type",
368
+ target: body.property ?? body.type,
369
+ format: {
370
+ mediaType: contentType,
371
+ type: name,
372
+ },
373
+ });
374
+ }
375
+ yield ` const ${bodyName} = await new Promise(function parse${bodyNameCase.pascalCase}(resolve, reject) {`;
376
+ yield ` const chunks: Array<Buffer> = [];`;
377
+ yield ` ${names.ctx}.request.on("data", function appendChunk(chunk) { chunks.push(chunk); });`;
378
+ yield ` ${names.ctx}.request.on("end", function finalize() {`;
379
+ yield ` try {`;
380
+ yield ` const body = Buffer.concat(chunks);`;
381
+ yield ` resolve(body);`;
382
+ yield ` } catch (e) {`;
383
+ yield ` reject(e);`;
384
+ yield ` }`;
385
+ yield ` });`;
386
+ yield ` ${names.ctx}.request.on("error", reject);`;
387
+ yield ` }) as Buffer;`;
388
+ yield "";
389
+ break;
390
+ }
309
391
  throw new UnimplementedError(`request deserialization for content-type: '${contentType}'`);
310
392
  }
311
393
 
@@ -7,7 +7,8 @@ import {
7
7
  HttpService,
8
8
  HttpVerb,
9
9
  OperationContainer,
10
- getHttpOperation,
10
+ getHeaderFieldName,
11
+ isHeader,
11
12
  } from "@typespec/http";
12
13
  import {
13
14
  createOrGetModuleForNamespace,
@@ -22,9 +23,7 @@ import { HttpContext } from "../index.js";
22
23
 
23
24
  import { module as headerHelpers } from "../../../generated-defs/helpers/header.js";
24
25
  import { module as routerHelper } from "../../../generated-defs/helpers/router.js";
25
- import { parseHeaderValueParameters } from "../../helpers/header.js";
26
- import { reportDiagnostic } from "../../lib.js";
27
- import { UnimplementedError } from "../../util/error.js";
26
+ import { differentiateModelTypes, writeCodeTree } from "../../util/differentiate.js";
28
27
 
29
28
  /**
30
29
  * Emit a router for the HTTP operations defined in a given service.
@@ -261,7 +260,9 @@ function* emitRouteHandler(
261
260
 
262
261
  yield `if (path.length === 0) {`;
263
262
  if (routeTree.operations.size > 0) {
264
- yield* indent(emitRouteOperationDispatch(ctx, routeHandlers, routeTree.operations, backends));
263
+ yield* indent(
264
+ emitRouteOperationDispatch(ctx, routeHandlers, routeTree.operations, backends, module),
265
+ );
265
266
  } else {
266
267
  // Not found
267
268
  yield ` return ${onRouteNotFound}(ctx);`;
@@ -318,6 +319,7 @@ function* emitRouteOperationDispatch(
318
319
  routeHandlers: string,
319
320
  operations: Map<HttpVerb, RouteOperation[]>,
320
321
  backends: Map<OperationContainer, [ReCase, string]>,
322
+ module: Module,
321
323
  ): Iterable<string> {
322
324
  yield `switch (request.method) {`;
323
325
  for (const [verb, operationList] of operations.entries()) {
@@ -339,11 +341,10 @@ function* emitRouteOperationDispatch(
339
341
  yield ` return ${routeHandlers}.${operationName}(ctx, ${backendMemberName}${parameters});`;
340
342
  } else {
341
343
  // Shared route
342
- const route = getHttpOperation(ctx.program, operationList[0].operation)[0].path;
343
344
  yield ` case ${JSON.stringify(verb.toUpperCase())}:`;
344
345
  yield* indent(
345
346
  indent(
346
- emitRouteOperationDispatchMultiple(ctx, routeHandlers, operationList, route, backends),
347
+ emitRouteOperationDispatchMultiple(ctx, routeHandlers, operationList, backends, module),
347
348
  ),
348
349
  );
349
350
  }
@@ -366,64 +367,50 @@ function* emitRouteOperationDispatchMultiple(
366
367
  ctx: HttpContext,
367
368
  routeHandlers: string,
368
369
  operations: RouteOperation[],
369
- route: string,
370
370
  backends: Map<OperationContainer, [ReCase, string]>,
371
+ module: Module,
371
372
  ): Iterable<string> {
372
- const usedContentTypes = new Set<string>();
373
- const contentTypeMap = new Map<RouteOperation, string>();
373
+ const differentiated = differentiateModelTypes(
374
+ ctx,
375
+ module,
376
+ new Set(operations.map((op) => op.operation.parameters)),
377
+ {
378
+ renderPropertyName(prop): string {
379
+ return getHeaderFieldName(ctx.program, prop);
380
+ },
381
+ filter(prop): boolean {
382
+ return isHeader(ctx.program, prop);
383
+ },
384
+ else: {
385
+ kind: "verbatim",
386
+ body: [`return ctx.errorHandlers.onRequestNotFound(ctx);`],
387
+ },
388
+ },
389
+ );
374
390
 
375
- for (const operation of operations) {
376
- const [httpOperation] = getHttpOperation(ctx.program, operation.operation);
377
- const operationContentType = httpOperation.parameters.parameters.find(
378
- (param) => param.type === "header" && param.name.toLowerCase() === "content-type",
379
- )?.param.type;
380
-
381
- if (!operationContentType || operationContentType.kind !== "String") {
382
- throw new UnimplementedError(
383
- "Only string content-types are supported for route differentiation.",
391
+ yield* writeCodeTree(ctx, differentiated, {
392
+ referenceModelProperty(p) {
393
+ const headerName = getHeaderFieldName(ctx.program, p);
394
+ return `request.headers["${headerName}"]`;
395
+ },
396
+ *renderResult(type) {
397
+ const operation = operations.find((op) => op.operation.parameters === type)!;
398
+ const [backend] = backends.get(operation.container)!;
399
+ const operationName = keywordSafe(
400
+ backend.snakeCase + "_" + parseCase(operation.operation.name).snakeCase,
384
401
  );
385
- }
386
-
387
- if (usedContentTypes.has(operationContentType.value)) {
388
- reportDiagnostic(ctx.program, {
389
- code: "undifferentiable-route",
390
- target: httpOperation.operation,
391
- });
392
- }
393
-
394
- usedContentTypes.add(operationContentType.value);
395
-
396
- contentTypeMap.set(operation, operationContentType.value);
397
- }
398
-
399
- const contentTypeName = ctx.gensym("contentType");
400
402
 
401
- yield `const ${contentTypeName} = parseHeaderValueParameters(request.headers["content-type"])?.value;`;
402
-
403
- yield `switch (${contentTypeName}) {`;
404
-
405
- for (const [operation, contentType] of contentTypeMap.entries()) {
406
- const [backend] = backends.get(operation.container)!;
407
- const operationName = keywordSafe(
408
- backend.snakeCase + "_" + parseCase(operation.operation.name).snakeCase,
409
- );
410
-
411
- const backendMemberName = keywordSafe(backend.camelCase);
412
-
413
- const parameters =
414
- operation.parameters.length > 0
415
- ? ", " + operation.parameters.map((param) => parseCase(param.name).camelCase).join(", ")
416
- : "";
417
-
418
- const contentTypeValue = parseHeaderValueParameters(contentType).value;
403
+ const backendMemberName = keywordSafe(backend.camelCase);
419
404
 
420
- yield ` case ${JSON.stringify(contentTypeValue)}:`;
421
- yield ` return ${routeHandlers}.${operationName}(ctx, ${backendMemberName}${parameters});`;
422
- }
405
+ const parameters =
406
+ operation.parameters.length > 0
407
+ ? ", " + operation.parameters.map((param) => parseCase(param.name).camelCase).join(", ")
408
+ : "";
423
409
 
424
- yield ` default:`;
425
- yield ` return ctx.errorHandlers.onInvalidRequest(ctx, ${JSON.stringify(route)}, \`No operation in route '${route}' matched content-type "\${${contentTypeName}}"\`);`;
426
- yield "}";
410
+ yield `return ${routeHandlers}.${operationName}(ctx, ${backendMemberName}${parameters});`;
411
+ },
412
+ subject: "(request.headers)",
413
+ });
427
414
  }
428
415
 
429
416
  /**
package/src/lib.ts CHANGED
@@ -148,6 +148,12 @@ export const $lib = createTypeSpecLibrary({
148
148
  default: paramMessage`Unknown encoding '${"encoding"}' to type '${"target"}' for type '${"type"}'.`,
149
149
  },
150
150
  },
151
+ "unrecognized-media-type": {
152
+ severity: "error",
153
+ messages: {
154
+ default: paramMessage`unrecognized media (MIME) type '${"mediaType"}' for type '${"type"}'.`,
155
+ },
156
+ },
151
157
  },
152
158
  });
153
159