@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.
- package/CHANGELOG.md +69 -0
- package/LICENSE +21 -0
- package/README.md +183 -0
- package/build-helpers.ts +170 -0
- package/dist/generated-defs/helpers/header.d.ts +4 -0
- package/dist/generated-defs/helpers/header.d.ts.map +1 -0
- package/dist/generated-defs/helpers/header.js +76 -0
- package/dist/generated-defs/helpers/header.js.map +1 -0
- package/dist/generated-defs/helpers/http.d.ts +4 -0
- package/dist/generated-defs/helpers/http.d.ts.map +1 -0
- package/dist/generated-defs/helpers/http.js +134 -0
- package/dist/generated-defs/helpers/http.js.map +1 -0
- package/dist/generated-defs/helpers/index.d.ts +4 -0
- package/dist/generated-defs/helpers/index.d.ts.map +1 -0
- package/dist/generated-defs/helpers/index.js +21 -0
- package/dist/generated-defs/helpers/index.js.map +1 -0
- package/dist/generated-defs/helpers/multipart.d.ts +4 -0
- package/dist/generated-defs/helpers/multipart.d.ts.map +1 -0
- package/dist/generated-defs/helpers/multipart.js +249 -0
- package/dist/generated-defs/helpers/multipart.js.map +1 -0
- package/dist/generated-defs/helpers/router.d.ts +4 -0
- package/dist/generated-defs/helpers/router.d.ts.map +1 -0
- package/dist/generated-defs/helpers/router.js +259 -0
- package/dist/generated-defs/helpers/router.js.map +1 -0
- package/dist/src/common/declaration.d.ts +13 -0
- package/dist/src/common/declaration.d.ts.map +1 -0
- package/dist/src/common/declaration.js +45 -0
- package/dist/src/common/declaration.js.map +1 -0
- package/dist/src/common/documentation.d.ts +12 -0
- package/dist/src/common/documentation.d.ts.map +1 -0
- package/dist/src/common/documentation.js +21 -0
- package/dist/src/common/documentation.js.map +1 -0
- package/dist/src/common/enum.d.ts +10 -0
- package/dist/src/common/enum.d.ts.map +1 -0
- package/dist/src/common/enum.js +21 -0
- package/dist/src/common/enum.js.map +1 -0
- package/dist/src/common/interface.d.ts +50 -0
- package/dist/src/common/interface.d.ts.map +1 -0
- package/dist/src/common/interface.js +194 -0
- package/dist/src/common/interface.js.map +1 -0
- package/dist/src/common/model.d.ts +26 -0
- package/dist/src/common/model.d.ts.map +1 -0
- package/dist/src/common/model.js +115 -0
- package/dist/src/common/model.js.map +1 -0
- package/dist/src/common/namespace.d.ts +38 -0
- package/dist/src/common/namespace.d.ts.map +1 -0
- package/dist/src/common/namespace.js +184 -0
- package/dist/src/common/namespace.js.map +1 -0
- package/dist/src/common/reference.d.ts +46 -0
- package/dist/src/common/reference.d.ts.map +1 -0
- package/dist/src/common/reference.js +243 -0
- package/dist/src/common/reference.js.map +1 -0
- package/dist/src/common/scalar.d.ts +50 -0
- package/dist/src/common/scalar.d.ts.map +1 -0
- package/dist/src/common/scalar.js +144 -0
- package/dist/src/common/scalar.js.map +1 -0
- package/dist/src/common/serialization/index.d.ts +11 -0
- package/dist/src/common/serialization/index.d.ts.map +1 -0
- package/dist/src/common/serialization/index.js +72 -0
- package/dist/src/common/serialization/index.js.map +1 -0
- package/dist/src/common/serialization/json.d.ts +6 -0
- package/dist/src/common/serialization/json.d.ts.map +1 -0
- package/dist/src/common/serialization/json.js +341 -0
- package/dist/src/common/serialization/json.js.map +1 -0
- package/dist/src/common/union.d.ts +23 -0
- package/dist/src/common/union.d.ts.map +1 -0
- package/dist/src/common/union.js +57 -0
- package/dist/src/common/union.js.map +1 -0
- package/dist/src/ctx.d.ts +242 -0
- package/dist/src/ctx.d.ts.map +1 -0
- package/dist/src/ctx.js +211 -0
- package/dist/src/ctx.js.map +1 -0
- package/dist/src/helpers/header.d.ts +14 -0
- package/dist/src/helpers/header.d.ts.map +1 -0
- package/dist/src/helpers/header.js +38 -0
- package/dist/src/helpers/header.js.map +1 -0
- package/dist/src/helpers/http.d.ts +70 -0
- package/dist/src/helpers/http.d.ts.map +1 -0
- package/dist/src/helpers/http.js +86 -0
- package/dist/src/helpers/http.js.map +1 -0
- package/dist/src/helpers/multipart.d.ts +26 -0
- package/dist/src/helpers/multipart.d.ts.map +1 -0
- package/dist/src/helpers/multipart.js +182 -0
- package/dist/src/helpers/multipart.js.map +1 -0
- package/dist/src/helpers/router.d.ts +176 -0
- package/dist/src/helpers/router.d.ts.map +1 -0
- package/dist/src/helpers/router.js +55 -0
- package/dist/src/helpers/router.js.map +1 -0
- package/dist/src/http/index.d.ts +24 -0
- package/dist/src/http/index.d.ts.map +1 -0
- package/dist/src/http/index.js +52 -0
- package/dist/src/http/index.js.map +1 -0
- package/dist/src/http/server/index.d.ts +11 -0
- package/dist/src/http/server/index.d.ts.map +1 -0
- package/dist/src/http/server/index.js +413 -0
- package/dist/src/http/server/index.js.map +1 -0
- package/dist/src/http/server/multipart.d.ts +16 -0
- package/dist/src/http/server/multipart.d.ts.map +1 -0
- package/dist/src/http/server/multipart.js +214 -0
- package/dist/src/http/server/multipart.js.map +1 -0
- package/dist/src/http/server/router.d.ts +15 -0
- package/dist/src/http/server/router.d.ts.map +1 -0
- package/dist/src/http/server/router.js +459 -0
- package/dist/src/http/server/router.js.map +1 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +38 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lib.d.ts +141 -0
- package/dist/src/lib.d.ts.map +1 -0
- package/dist/src/lib.js +116 -0
- package/dist/src/lib.js.map +1 -0
- package/dist/src/scripts/scaffold/bin.d.mts +14 -0
- package/dist/src/scripts/scaffold/bin.d.mts.map +1 -0
- package/dist/src/scripts/scaffold/bin.mjs +559 -0
- package/dist/src/scripts/scaffold/bin.mjs.map +1 -0
- package/dist/src/testing/index.d.ts +3 -0
- package/dist/src/testing/index.d.ts.map +1 -0
- package/dist/src/testing/index.js +6 -0
- package/dist/src/testing/index.js.map +1 -0
- package/dist/src/util/case.d.ts +81 -0
- package/dist/src/util/case.d.ts.map +1 -0
- package/dist/src/util/case.js +111 -0
- package/dist/src/util/case.js.map +1 -0
- package/dist/src/util/differentiate.d.ts +251 -0
- package/dist/src/util/differentiate.d.ts.map +1 -0
- package/dist/src/util/differentiate.js +580 -0
- package/dist/src/util/differentiate.js.map +1 -0
- package/dist/src/util/error.d.ts +13 -0
- package/dist/src/util/error.d.ts.map +1 -0
- package/dist/src/util/error.js +25 -0
- package/dist/src/util/error.js.map +1 -0
- package/dist/src/util/extends.d.ts +10 -0
- package/dist/src/util/extends.d.ts.map +1 -0
- package/dist/src/util/extends.js +31 -0
- package/dist/src/util/extends.js.map +1 -0
- package/dist/src/util/iter.d.ts +39 -0
- package/dist/src/util/iter.d.ts.map +1 -0
- package/dist/src/util/iter.js +72 -0
- package/dist/src/util/iter.js.map +1 -0
- package/dist/src/util/keywords.d.ts +10 -0
- package/dist/src/util/keywords.d.ts.map +1 -0
- package/dist/src/util/keywords.js +85 -0
- package/dist/src/util/keywords.js.map +1 -0
- package/dist/src/util/name.d.ts +12 -0
- package/dist/src/util/name.d.ts.map +1 -0
- package/dist/src/util/name.js +26 -0
- package/dist/src/util/name.js.map +1 -0
- package/dist/src/util/once-queue.d.ts +24 -0
- package/dist/src/util/once-queue.d.ts.map +1 -0
- package/dist/src/util/once-queue.js +34 -0
- package/dist/src/util/once-queue.js.map +1 -0
- package/dist/src/util/openapi3.d.ts +23 -0
- package/dist/src/util/openapi3.d.ts.map +1 -0
- package/dist/src/util/openapi3.js +40 -0
- package/dist/src/util/openapi3.js.map +1 -0
- package/dist/src/util/pluralism.d.ts +23 -0
- package/dist/src/util/pluralism.d.ts.map +1 -0
- package/dist/src/util/pluralism.js +36 -0
- package/dist/src/util/pluralism.js.map +1 -0
- package/dist/src/util/scope.d.ts +85 -0
- package/dist/src/util/scope.d.ts.map +1 -0
- package/dist/src/util/scope.js +111 -0
- package/dist/src/util/scope.js.map +1 -0
- package/dist/src/write.d.ts +23 -0
- package/dist/src/write.d.ts.map +1 -0
- package/dist/src/write.js +62 -0
- package/dist/src/write.js.map +1 -0
- package/generated-defs/helpers/header.ts +83 -0
- package/generated-defs/helpers/http.ts +141 -0
- package/generated-defs/helpers/index.ts +27 -0
- package/generated-defs/helpers/multipart.ts +256 -0
- package/generated-defs/helpers/router.ts +266 -0
- package/package.json +71 -0
- package/src/common/declaration.ts +52 -0
- package/src/common/documentation.ts +26 -0
- package/src/common/enum.ts +28 -0
- package/src/common/interface.ts +264 -0
- package/src/common/model.ts +160 -0
- package/src/common/namespace.ts +243 -0
- package/src/common/reference.ts +319 -0
- package/src/common/scalar.ts +173 -0
- package/src/common/serialization/index.ts +124 -0
- package/src/common/serialization/json.ts +444 -0
- package/src/common/union.ts +76 -0
- package/src/ctx.ts +497 -0
- package/src/helpers/header.ts +55 -0
- package/src/helpers/http.ts +113 -0
- package/src/helpers/multipart.ts +228 -0
- package/src/helpers/router.ts +238 -0
- package/src/http/index.ts +81 -0
- package/src/http/server/index.ts +548 -0
- package/src/http/server/multipart.ts +272 -0
- package/src/http/server/router.ts +686 -0
- package/src/index.ts +56 -0
- package/src/lib.ts +130 -0
- package/src/scripts/scaffold/bin.mts +781 -0
- package/src/testing/index.ts +10 -0
- package/src/util/case.ts +182 -0
- package/src/util/differentiate.ts +957 -0
- package/src/util/error.ts +28 -0
- package/src/util/extends.ts +43 -0
- package/src/util/iter.ts +85 -0
- package/src/util/keywords.ts +90 -0
- package/src/util/name.ts +33 -0
- package/src/util/once-queue.ts +55 -0
- package/src/util/openapi3.ts +53 -0
- package/src/util/pluralism.ts +37 -0
- package/src/util/scope.ts +211 -0
- package/src/write.ts +88 -0
- package/temp/tsconfig.tsbuildinfo +1 -0
- package/test/header.test.ts +26 -0
- package/test/multipart.test.ts +169 -0
- package/tsconfig.json +10 -0
- package/vitest.config.ts +4 -0
package/src/index.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation
|
|
2
|
+
// Licensed under the MIT license.
|
|
3
|
+
|
|
4
|
+
import { EmitContext } from "@typespec/compiler";
|
|
5
|
+
import { visitAllTypes } from "./common/namespace.js";
|
|
6
|
+
import { createInitialContext } from "./ctx.js";
|
|
7
|
+
import { JsEmitterOptions } from "./lib.js";
|
|
8
|
+
import { writeModuleTree } from "./write.js";
|
|
9
|
+
|
|
10
|
+
// #region features
|
|
11
|
+
|
|
12
|
+
import path from "node:path";
|
|
13
|
+
import { emitSerialization } from "./common/serialization/index.js";
|
|
14
|
+
import { emitHttp } from "./http/index.js";
|
|
15
|
+
|
|
16
|
+
// #endregion
|
|
17
|
+
|
|
18
|
+
export { $lib } from "./lib.js";
|
|
19
|
+
|
|
20
|
+
export async function $onEmit(context: EmitContext<JsEmitterOptions>) {
|
|
21
|
+
const jsCtx = await createInitialContext(context.program, context.options);
|
|
22
|
+
|
|
23
|
+
if (!jsCtx) return;
|
|
24
|
+
|
|
25
|
+
await emitHttp(jsCtx);
|
|
26
|
+
|
|
27
|
+
if (!context.options["omit-unreachable-types"]) {
|
|
28
|
+
// Visit everything in the service namespace to ensure we emit a full `models` module and not just the subparts that
|
|
29
|
+
// are reachable from the service impl.
|
|
30
|
+
|
|
31
|
+
visitAllTypes(jsCtx, jsCtx.service.type);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Emit serialization code for all required types.
|
|
35
|
+
emitSerialization(jsCtx);
|
|
36
|
+
|
|
37
|
+
const srcGeneratedPath = path.join(context.emitterOutputDir, "src", "generated");
|
|
38
|
+
|
|
39
|
+
if (!context.program.compilerOptions.noEmit) {
|
|
40
|
+
try {
|
|
41
|
+
const stat = await context.program.host.stat(srcGeneratedPath);
|
|
42
|
+
if (stat.isDirectory()) {
|
|
43
|
+
await context.program.host.rm(srcGeneratedPath, {
|
|
44
|
+
recursive: true,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
} catch {}
|
|
48
|
+
|
|
49
|
+
await writeModuleTree(
|
|
50
|
+
jsCtx,
|
|
51
|
+
context.emitterOutputDir,
|
|
52
|
+
jsCtx.rootModule,
|
|
53
|
+
!context.options["no-format"],
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
}
|
package/src/lib.ts
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation
|
|
2
|
+
// Licensed under the MIT license.
|
|
3
|
+
|
|
4
|
+
import { JSONSchemaType, createTypeSpecLibrary, paramMessage } from "@typespec/compiler";
|
|
5
|
+
|
|
6
|
+
export interface JsEmitterOptions {
|
|
7
|
+
express?: boolean;
|
|
8
|
+
"omit-unreachable-types": boolean;
|
|
9
|
+
"no-format": boolean;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const EmitterOptionsSchema: JSONSchemaType<JsEmitterOptions> = {
|
|
13
|
+
type: "object",
|
|
14
|
+
additionalProperties: false,
|
|
15
|
+
properties: {
|
|
16
|
+
express: { type: "boolean", nullable: true, default: false },
|
|
17
|
+
"omit-unreachable-types": {
|
|
18
|
+
type: "boolean",
|
|
19
|
+
default: false,
|
|
20
|
+
},
|
|
21
|
+
"no-format": {
|
|
22
|
+
type: "boolean",
|
|
23
|
+
default: false,
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
required: [],
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const $lib = createTypeSpecLibrary({
|
|
30
|
+
name: "@typespec/http-server-js",
|
|
31
|
+
requireImports: [],
|
|
32
|
+
emitter: {
|
|
33
|
+
options: EmitterOptionsSchema,
|
|
34
|
+
},
|
|
35
|
+
diagnostics: {
|
|
36
|
+
"unrecognized-intrinsic": {
|
|
37
|
+
severity: "warning",
|
|
38
|
+
messages: {
|
|
39
|
+
default: paramMessage`unrecognized intrinsic '${"intrinsic"}' is treated as 'unknown'`,
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
"unrecognized-scalar": {
|
|
43
|
+
severity: "warning",
|
|
44
|
+
messages: {
|
|
45
|
+
default: paramMessage`unrecognized scalar '${"scalar"}' is treated as 'unknown'`,
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
"unrecognized-encoding": {
|
|
49
|
+
severity: "error",
|
|
50
|
+
messages: {
|
|
51
|
+
default: paramMessage`unrecognized encoding '${"encoding"}' for type '${"type"}'`,
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
"http-emit-disabled": {
|
|
55
|
+
severity: "warning",
|
|
56
|
+
messages: {
|
|
57
|
+
default: "HTTP emit is disabled because the HTTP library returned errors.",
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
"no-services-in-program": {
|
|
61
|
+
severity: "warning",
|
|
62
|
+
messages: {
|
|
63
|
+
default: "No services found in program.",
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
"undifferentiable-route": {
|
|
67
|
+
severity: "error",
|
|
68
|
+
messages: {
|
|
69
|
+
default: "Shared route cannot be differentiated from other routes.",
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
"undifferentiable-scalar": {
|
|
73
|
+
severity: "error",
|
|
74
|
+
messages: {
|
|
75
|
+
default: paramMessage`Scalar type cannot be differentiated from other scalar type '${"competitor"}'.`,
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
"undifferentiable-model": {
|
|
79
|
+
severity: "error",
|
|
80
|
+
messages: {
|
|
81
|
+
default:
|
|
82
|
+
"Model type does not have enough unique properties to be differentiated from other models in some contexts.",
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
"unrepresentable-numeric-constant": {
|
|
86
|
+
severity: "error",
|
|
87
|
+
messages: {
|
|
88
|
+
default: "JavaScript cannot accurately represent this numeric constant.",
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
"undifferentiable-union-variant": {
|
|
92
|
+
severity: "error",
|
|
93
|
+
messages: {
|
|
94
|
+
default:
|
|
95
|
+
"Union variant cannot be differentiated from other variants of the union an an ambiguous context.",
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
"unspeakable-status-code": {
|
|
99
|
+
severity: "error",
|
|
100
|
+
messages: {
|
|
101
|
+
default: paramMessage`Status code property '${"name"}' is unspeakable and does not have an exact value. Provide an exact status code value or rename the property.`,
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
"name-conflict": {
|
|
105
|
+
severity: "error",
|
|
106
|
+
messages: {
|
|
107
|
+
default: paramMessage`Name ${"name"} conflicts with a prior declaration and must be unique.`,
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
"dynamic-request-content-type": {
|
|
111
|
+
severity: "error",
|
|
112
|
+
messages: {
|
|
113
|
+
default: "Operation has multiple possible content-type values and cannot be emitted.",
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
"openapi3-document-not-generated": {
|
|
117
|
+
severity: "warning",
|
|
118
|
+
messages: {
|
|
119
|
+
unable:
|
|
120
|
+
"@typespec/openapi3 is installed, but the OpenAPI 3 document could not be generated.",
|
|
121
|
+
versioned:
|
|
122
|
+
"An OpenAPI3 document could not be generated for this service because versioned services are not yet supported by the HTTP server emitter for JavaScript.",
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
const { reportDiagnostic } = $lib;
|
|
129
|
+
|
|
130
|
+
export { reportDiagnostic };
|