@typespec/http-server-csharp 0.58.0-alpha.1 → 0.58.0-alpha.10-dev.0
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/cmd/hscs.js +2 -0
- package/dist/src/cli/cli.d.ts +2 -0
- package/dist/src/cli/cli.d.ts.map +1 -0
- package/dist/src/cli/cli.js +124 -0
- package/dist/src/cli/cli.js.map +1 -0
- package/dist/src/{attributes.d.ts → lib/attributes.d.ts} +1 -1
- package/dist/src/lib/attributes.d.ts.map +1 -0
- package/dist/src/{attributes.js → lib/attributes.js} +48 -4
- package/dist/src/{attributes.js.map → lib/attributes.js.map} +1 -1
- package/dist/src/{boilerplate.d.ts → lib/boilerplate.d.ts} +2 -0
- package/dist/src/lib/boilerplate.d.ts.map +1 -0
- package/dist/src/{boilerplate.js → lib/boilerplate.js} +101 -36
- package/dist/src/lib/boilerplate.js.map +1 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js.map +1 -0
- package/dist/src/{interfaces.d.ts → lib/interfaces.d.ts} +10 -0
- package/dist/src/lib/interfaces.d.ts.map +1 -0
- package/dist/src/{interfaces.js → lib/interfaces.js} +7 -3
- package/dist/src/lib/interfaces.js.map +1 -0
- package/dist/src/{lib.d.ts → lib/lib.d.ts} +25 -1
- package/dist/src/lib/lib.d.ts.map +1 -0
- package/dist/src/{lib.js → lib/lib.js} +31 -0
- package/dist/src/lib/lib.js.map +1 -0
- package/dist/src/lib/scaffolding.d.ts +20 -0
- package/dist/src/lib/scaffolding.d.ts.map +1 -0
- package/dist/src/lib/scaffolding.js +388 -0
- package/dist/src/lib/scaffolding.js.map +1 -0
- package/dist/src/lib/service.d.ts.map +1 -0
- package/dist/src/{service.js → lib/service.js} +584 -125
- package/dist/src/lib/service.js.map +1 -0
- package/dist/src/lib/testing/index.d.ts.map +1 -0
- package/dist/src/{testing → lib/testing}/index.js +1 -0
- package/dist/src/lib/testing/index.js.map +1 -0
- package/dist/src/lib/type-helpers.d.ts.map +1 -0
- package/dist/src/lib/type-helpers.js.map +1 -0
- package/dist/src/{utils.d.ts → lib/utils.d.ts} +3 -3
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/{utils.js → lib/utils.js} +67 -50
- package/dist/src/lib/utils.js.map +1 -0
- package/package.json +32 -23
- package/dist/src/attributes.d.ts.map +0 -1
- package/dist/src/boilerplate.d.ts.map +0 -1
- package/dist/src/boilerplate.js.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/interfaces.d.ts.map +0 -1
- package/dist/src/interfaces.js.map +0 -1
- package/dist/src/lib.d.ts.map +0 -1
- package/dist/src/lib.js.map +0 -1
- package/dist/src/service.d.ts.map +0 -1
- package/dist/src/service.js.map +0 -1
- package/dist/src/testing/index.d.ts.map +0 -1
- package/dist/src/testing/index.js.map +0 -1
- package/dist/src/type-helpers.d.ts.map +0 -1
- package/dist/src/type-helpers.js.map +0 -1
- package/dist/src/utils.d.ts.map +0 -1
- package/dist/src/utils.js.map +0 -1
- /package/dist/src/{index.d.ts → lib/index.d.ts} +0 -0
- /package/dist/src/{index.js → lib/index.js} +0 -0
- /package/dist/src/{service.d.ts → lib/service.d.ts} +0 -0
- /package/dist/src/{testing → lib/testing}/index.d.ts +0 -0
- /package/dist/src/{type-helpers.d.ts → lib/type-helpers.d.ts} +0 -0
- /package/dist/src/{type-helpers.js → lib/type-helpers.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/lib/interfaces.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,11 +3,20 @@ export interface CSharpServiceEmitterOptions {
|
|
|
3
3
|
"skip-format"?: boolean;
|
|
4
4
|
/** Choose which service artifacts to emit. Default is 'all'.*/
|
|
5
5
|
"output-type"?: "models" | "all";
|
|
6
|
+
/** Emit mock implementations of business logic and setup code. Allows the service to respond to requests with mock responses.*/
|
|
7
|
+
"emit-mocks"?: "none" | "all";
|
|
8
|
+
/** Configure a Swagger UI endpoint in the development configuration. */
|
|
9
|
+
"use-swaggerui"?: boolean;
|
|
10
|
+
/** Use openapi at the given path for generating SwaggerUI endpoints. By default, this will be 'openapi/openapi.yaml' if the 'use-swaggerui' option is enabled. */
|
|
11
|
+
"openapi-path"?: string;
|
|
6
12
|
}
|
|
7
13
|
export declare const $lib: import("@typespec/compiler").TypeSpecLibrary<{
|
|
8
14
|
"invalid-identifier": {
|
|
9
15
|
readonly default: import("@typespec/compiler").CallableMessage<["identifier", "location"]>;
|
|
10
16
|
};
|
|
17
|
+
"anonymous-model": {
|
|
18
|
+
readonly default: import("@typespec/compiler").CallableMessage<["emittedName"]>;
|
|
19
|
+
};
|
|
11
20
|
"missing-type-parent": {
|
|
12
21
|
readonly default: import("@typespec/compiler").CallableMessage<["type", "name"]>;
|
|
13
22
|
};
|
|
@@ -20,11 +29,17 @@ export declare const $lib: import("@typespec/compiler").TypeSpecLibrary<{
|
|
|
20
29
|
"invalid-intrinsic": {
|
|
21
30
|
readonly default: import("@typespec/compiler").CallableMessage<["typeName"]>;
|
|
22
31
|
};
|
|
32
|
+
"invalid-interpolation": {
|
|
33
|
+
readonly default: import("@typespec/compiler").CallableMessage<[]>;
|
|
34
|
+
};
|
|
23
35
|
}, CSharpServiceEmitterOptions, never>;
|
|
24
|
-
export declare const reportDiagnostic: <C extends "invalid-identifier" | "missing-type-parent" | "no-numeric" | "unrecognized-scalar" | "invalid-intrinsic", M extends keyof {
|
|
36
|
+
export declare const reportDiagnostic: <C extends "invalid-identifier" | "anonymous-model" | "missing-type-parent" | "no-numeric" | "unrecognized-scalar" | "invalid-intrinsic" | "invalid-interpolation", M extends keyof {
|
|
25
37
|
"invalid-identifier": {
|
|
26
38
|
readonly default: import("@typespec/compiler").CallableMessage<["identifier", "location"]>;
|
|
27
39
|
};
|
|
40
|
+
"anonymous-model": {
|
|
41
|
+
readonly default: import("@typespec/compiler").CallableMessage<["emittedName"]>;
|
|
42
|
+
};
|
|
28
43
|
"missing-type-parent": {
|
|
29
44
|
readonly default: import("@typespec/compiler").CallableMessage<["type", "name"]>;
|
|
30
45
|
};
|
|
@@ -37,10 +52,16 @@ export declare const reportDiagnostic: <C extends "invalid-identifier" | "missin
|
|
|
37
52
|
"invalid-intrinsic": {
|
|
38
53
|
readonly default: import("@typespec/compiler").CallableMessage<["typeName"]>;
|
|
39
54
|
};
|
|
55
|
+
"invalid-interpolation": {
|
|
56
|
+
readonly default: import("@typespec/compiler").CallableMessage<[]>;
|
|
57
|
+
};
|
|
40
58
|
}[C]>(program: import("@typespec/compiler").Program, diag: import("@typespec/compiler").DiagnosticReport<{
|
|
41
59
|
"invalid-identifier": {
|
|
42
60
|
readonly default: import("@typespec/compiler").CallableMessage<["identifier", "location"]>;
|
|
43
61
|
};
|
|
62
|
+
"anonymous-model": {
|
|
63
|
+
readonly default: import("@typespec/compiler").CallableMessage<["emittedName"]>;
|
|
64
|
+
};
|
|
44
65
|
"missing-type-parent": {
|
|
45
66
|
readonly default: import("@typespec/compiler").CallableMessage<["type", "name"]>;
|
|
46
67
|
};
|
|
@@ -53,6 +74,9 @@ export declare const reportDiagnostic: <C extends "invalid-identifier" | "missin
|
|
|
53
74
|
"invalid-intrinsic": {
|
|
54
75
|
readonly default: import("@typespec/compiler").CallableMessage<["typeName"]>;
|
|
55
76
|
};
|
|
77
|
+
"invalid-interpolation": {
|
|
78
|
+
readonly default: import("@typespec/compiler").CallableMessage<[]>;
|
|
79
|
+
};
|
|
56
80
|
}, C, M>) => void, createStateSymbol: (name: string) => symbol, getTracer: (program: import("@typespec/compiler").Program) => import("@typespec/compiler").Tracer;
|
|
57
81
|
export type CSharpServiceLibrary = typeof $lib;
|
|
58
82
|
//# sourceMappingURL=lib.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../../src/lib/lib.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,2BAA2B;IAC1C,yFAAyF;IACzF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gEAAgE;IAChE,aAAa,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;IACjC,gIAAgI;IAChI,YAAY,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC9B,wEAAwE;IACxE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kKAAkK;IAClK,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AA6CD,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;sCAiDf,CAAC;AAEH,eAAO,MAAQ,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAAE,iBAAiB,4BAAE,SAAS,wFAAS,CAAC;AAEvE,MAAM,MAAM,oBAAoB,GAAG,OAAO,IAAI,CAAC"}
|
|
@@ -15,6 +15,25 @@ const EmitterOptionsSchema = {
|
|
|
15
15
|
default: "all",
|
|
16
16
|
description: "Chooses which service artifacts to emit. choices include 'models' or 'all' artifacts.",
|
|
17
17
|
},
|
|
18
|
+
"emit-mocks": {
|
|
19
|
+
type: "string",
|
|
20
|
+
enum: ["all", "none"],
|
|
21
|
+
nullable: true,
|
|
22
|
+
default: "none",
|
|
23
|
+
description: "Emits mock implementations of business logic, enabling the service to respond to requests before a real implementation is provided",
|
|
24
|
+
},
|
|
25
|
+
"use-swaggerui": {
|
|
26
|
+
type: "boolean",
|
|
27
|
+
nullable: true,
|
|
28
|
+
default: false,
|
|
29
|
+
description: "Configure a Swagger UI endpoint in the development configuration",
|
|
30
|
+
},
|
|
31
|
+
"openapi-path": {
|
|
32
|
+
type: "string",
|
|
33
|
+
nullable: true,
|
|
34
|
+
default: null,
|
|
35
|
+
description: "Use openapi at the given path for generating SwaggerUI endpoints. By default, this will be 'openapi/openapi.yaml' if the 'use-swaggerui' option is enabled. ",
|
|
36
|
+
},
|
|
18
37
|
},
|
|
19
38
|
required: [],
|
|
20
39
|
};
|
|
@@ -27,6 +46,12 @@ export const $lib = createTypeSpecLibrary({
|
|
|
27
46
|
default: paramMessage `Invalid identifier '${"identifier"}' in ${"location"}`,
|
|
28
47
|
},
|
|
29
48
|
},
|
|
49
|
+
"anonymous-model": {
|
|
50
|
+
severity: "warning",
|
|
51
|
+
messages: {
|
|
52
|
+
default: paramMessage `Inline models use generated names in emitted code. Consider defining each model with an explicit name. This model will be named '${"emittedName"}' in emitted code`,
|
|
53
|
+
},
|
|
54
|
+
},
|
|
30
55
|
"missing-type-parent": {
|
|
31
56
|
severity: "warning",
|
|
32
57
|
messages: {
|
|
@@ -51,6 +76,12 @@ export const $lib = createTypeSpecLibrary({
|
|
|
51
76
|
default: paramMessage `Intrinsic type ${"typeName"} is not valid in this context. Please use a model, enum, union, scalar, or the unknown type`,
|
|
52
77
|
},
|
|
53
78
|
},
|
|
79
|
+
"invalid-interpolation": {
|
|
80
|
+
severity: "warning",
|
|
81
|
+
messages: {
|
|
82
|
+
default: paramMessage `StringTemplate types should only reference literal-valued constants, enum members, or literal-valued model properties. The interpolated value will not contain one or more referenced elements in generated code.`,
|
|
83
|
+
},
|
|
84
|
+
},
|
|
54
85
|
},
|
|
55
86
|
emitter: {
|
|
56
87
|
options: EmitterOptionsSchema,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../../src/lib/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAkB,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAezF,MAAM,oBAAoB,GAAgD;IACxE,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE;QACV,aAAa,EAAE;YACb,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,IAAI;YACd,WAAW,EACT,oGAAoG;SACvG;QACD,aAAa,EAAE;YACb,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;YACvB,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,KAAK;YACd,WAAW,EACT,uFAAuF;SAC1F;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;YACrB,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,MAAM;YACf,WAAW,EACT,oIAAoI;SACvI;QACD,eAAe,EAAE;YACf,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,kEAAkE;SAChF;QACD,cAAc,EAAE;YACd,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,IAAI;YACb,WAAW,EACT,8JAA8J;SACjK;KACF;IACD,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,qBAAqB,CAAC;IACxC,IAAI,EAAE,8BAA8B;IACpC,WAAW,EAAE;QACX,oBAAoB,EAAE;YACpB,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,uBAAuB,YAAY,QAAQ,UAAU,EAAE;aAC7E;SACF;QACD,iBAAiB,EAAE;YACjB,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,qIAAqI,aAAa,mBAAmB;aAC3L;SACF;QACD,qBAAqB,EAAE;YACrB,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,uBAAuB,MAAM,IAAI,MAAM,GAAG;aAChE;SACF;QACD,YAAY,EAAE;YACZ,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,SAAS,YAAY,sFAAsF,YAAY,yGAAyG;aACtP;SACF;QACD,qBAAqB,EAAE;YACrB,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,eAAe,UAAU,iFAAiF;aAChI;SACF;QACD,mBAAmB,EAAE;YACnB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,kBAAkB,UAAU,8FAA8F;aAChJ;SACF;QACD,uBAAuB,EAAE;YACvB,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,oNAAoN;aAC1O;SACF;KACF;IACD,OAAO,EAAE;QACP,OAAO,EAAE,oBAAmE;KAC7E;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AssetEmitter } from "@typespec/compiler/emitter-framework";
|
|
2
|
+
import { LibrarySourceFile } from "./interfaces.js";
|
|
3
|
+
export interface BusinessLogicImplementation {
|
|
4
|
+
namespace: string;
|
|
5
|
+
interfaceName: string;
|
|
6
|
+
usings: string[];
|
|
7
|
+
className: string;
|
|
8
|
+
methods: BusinessLogicMethod[];
|
|
9
|
+
}
|
|
10
|
+
export interface BusinessLogicMethod {
|
|
11
|
+
methodName: string;
|
|
12
|
+
methodParams: string;
|
|
13
|
+
returnType: string;
|
|
14
|
+
instantiatedReturnType?: string;
|
|
15
|
+
}
|
|
16
|
+
export type BusinessLogicRegistrations = Map<string, BusinessLogicImplementation>;
|
|
17
|
+
export type BusinessLogicRegistration = [string, BusinessLogicImplementation];
|
|
18
|
+
export declare function getScaffoldingHelpers(emitter: AssetEmitter<string, Record<string, never>>, useSwagger: boolean, openApiPath: string): LibrarySourceFile[];
|
|
19
|
+
export declare function getBusinessLogicImplementations(emitter: AssetEmitter<string, Record<string, never>>, registrations: BusinessLogicRegistrations): LibrarySourceFile[];
|
|
20
|
+
//# sourceMappingURL=scaffolding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffolding.d.ts","sourceRoot":"","sources":["../../../src/lib/scaffolding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAQ,MAAM,sCAAsC,CAAC;AAE1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,MAAM,0BAA0B,GAAG,GAAG,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;AAClF,MAAM,MAAM,yBAAyB,GAAG,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;AAE9E,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EACpD,UAAU,EAAE,OAAO,EACnB,WAAW,EAAE,MAAM,GAClB,iBAAiB,EAAE,CAqBrB;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EACpD,aAAa,EAAE,0BAA0B,GACxC,iBAAiB,EAAE,CAyBrB"}
|
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
import { code } from "@typespec/compiler/emitter-framework";
|
|
2
|
+
import { GeneratedFileHeaderWithNullable } from "./boilerplate.js";
|
|
3
|
+
import { LibrarySourceFile } from "./interfaces.js";
|
|
4
|
+
export function getScaffoldingHelpers(emitter, useSwagger, openApiPath) {
|
|
5
|
+
const sourceFiles = [];
|
|
6
|
+
sourceFiles.push(new LibrarySourceFile({
|
|
7
|
+
filename: "IInitializer.cs",
|
|
8
|
+
emitter: emitter,
|
|
9
|
+
getContents: getInitializerInterface,
|
|
10
|
+
}), new LibrarySourceFile({
|
|
11
|
+
filename: "Initializer.cs",
|
|
12
|
+
emitter: emitter,
|
|
13
|
+
getContents: getInitializerImplementation,
|
|
14
|
+
}), new LibrarySourceFile({
|
|
15
|
+
filename: "Program.cs",
|
|
16
|
+
emitter: emitter,
|
|
17
|
+
getContents: () => getProjectStartup(useSwagger, openApiPath),
|
|
18
|
+
path: "../",
|
|
19
|
+
}));
|
|
20
|
+
return sourceFiles;
|
|
21
|
+
}
|
|
22
|
+
export function getBusinessLogicImplementations(emitter, registrations) {
|
|
23
|
+
const sourceFiles = [];
|
|
24
|
+
const mocks = [];
|
|
25
|
+
for (const [name, impl] of registrations) {
|
|
26
|
+
sourceFiles.push(new LibrarySourceFile({
|
|
27
|
+
filename: `${impl.className}.cs`,
|
|
28
|
+
emitter: emitter,
|
|
29
|
+
getContents: () => getBusinessLogicImplementation(name, impl),
|
|
30
|
+
path: "../mocks/",
|
|
31
|
+
}));
|
|
32
|
+
mocks.push(impl);
|
|
33
|
+
}
|
|
34
|
+
if (mocks.length > 0) {
|
|
35
|
+
sourceFiles.push(new LibrarySourceFile({
|
|
36
|
+
filename: "MockRegistration.cs",
|
|
37
|
+
emitter: emitter,
|
|
38
|
+
getContents: () => getMockRegistration(mocks),
|
|
39
|
+
path: "../mocks/",
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
return sourceFiles;
|
|
43
|
+
}
|
|
44
|
+
function getBusinessLogicImplementation(iface, mock) {
|
|
45
|
+
const methods = [];
|
|
46
|
+
for (const method of mock.methods) {
|
|
47
|
+
const methodCode = method.instantiatedReturnType !== undefined
|
|
48
|
+
? `return Task.FromResult(_initializer.Initialize<${method.instantiatedReturnType}>());`
|
|
49
|
+
: "return Task.CompletedTask;";
|
|
50
|
+
methods.push(` public ${method.returnType} ${method.methodName}( ${method.methodParams})
|
|
51
|
+
{
|
|
52
|
+
${methodCode}
|
|
53
|
+
}`);
|
|
54
|
+
}
|
|
55
|
+
return `${GeneratedFileHeaderWithNullable}
|
|
56
|
+
|
|
57
|
+
using System;
|
|
58
|
+
using System.Net;
|
|
59
|
+
using System.Text.Json;
|
|
60
|
+
using System.Text.Json.Serialization;
|
|
61
|
+
using System.Threading.Tasks;
|
|
62
|
+
using Microsoft.AspNetCore.Mvc;${mock.methods.some((m) => m.methodParams.includes("MultipartReader")) ? `\nusing Microsoft.AspNetCore.WebUtilities;` : ""}
|
|
63
|
+
using ${mock.namespace}.Models;
|
|
64
|
+
using TypeSpec.Helpers;
|
|
65
|
+
|
|
66
|
+
namespace ${mock.namespace}
|
|
67
|
+
{
|
|
68
|
+
/// <summary>
|
|
69
|
+
/// This is a mock implementation of the business logic interface for
|
|
70
|
+
/// demonstration and early development. Feel free to overwrite this file.
|
|
71
|
+
/// Or replace it with another implementation, and register that implementation
|
|
72
|
+
/// in the dependency injection container
|
|
73
|
+
/// </summary>
|
|
74
|
+
/// <param name="initializer">The initializer class, registered with dependency injection</param>
|
|
75
|
+
public class ${mock.className} : ${mock.interfaceName}
|
|
76
|
+
{
|
|
77
|
+
public ${mock.className}(IInitializer initializer)
|
|
78
|
+
{
|
|
79
|
+
_initializer = initializer;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
private IInitializer _initializer;
|
|
83
|
+
|
|
84
|
+
${methods.join("\n\n")}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
`;
|
|
88
|
+
}
|
|
89
|
+
function getMockRegistration(mocks) {
|
|
90
|
+
if (mocks.length < 1)
|
|
91
|
+
return "";
|
|
92
|
+
const cache = new Map();
|
|
93
|
+
return `${GeneratedFileHeaderWithNullable}
|
|
94
|
+
|
|
95
|
+
using Microsoft.AspNetCore.Http.Features;
|
|
96
|
+
${mocks
|
|
97
|
+
.flatMap((m) => m.usings)
|
|
98
|
+
.filter((t) => {
|
|
99
|
+
const result = !cache.has(t);
|
|
100
|
+
cache.set(t, t);
|
|
101
|
+
return result;
|
|
102
|
+
})
|
|
103
|
+
.flatMap((e) => `using ${e};`)
|
|
104
|
+
.join("\n")}
|
|
105
|
+
using ${mocks[0].namespace};
|
|
106
|
+
|
|
107
|
+
namespace TypeSpec.Helpers
|
|
108
|
+
{
|
|
109
|
+
/// <summary>
|
|
110
|
+
/// Register Business Logic implementations. Replace with actual implementations when available.
|
|
111
|
+
/// </summary>
|
|
112
|
+
public static class MockRegistration
|
|
113
|
+
{
|
|
114
|
+
public static void Register(WebApplicationBuilder builder)
|
|
115
|
+
{
|
|
116
|
+
builder.Services.AddScoped<IJsonSerializationProvider, JsonSerializationProvider>();
|
|
117
|
+
// Used for mock implementation only. Remove once business logic interfaces are implemented.
|
|
118
|
+
builder.Services.AddSingleton<IDictionary<Type, object?>>(new Dictionary<Type, object?>());
|
|
119
|
+
builder.Services.AddScoped<IInitializer, Initializer>();
|
|
120
|
+
// Mock business logic implementations
|
|
121
|
+
${mocks.flatMap((m) => ` builder.Services.AddScoped<${m.interfaceName}, ${m.className}>();`).join("\n")}
|
|
122
|
+
// Included for multipart/form-data support
|
|
123
|
+
builder.Services.Configure<FormOptions>(options =>
|
|
124
|
+
{
|
|
125
|
+
options.MemoryBufferThreshold = int.MaxValue;
|
|
126
|
+
options.MultipartBodyLengthLimit = int.MaxValue;
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}`;
|
|
131
|
+
}
|
|
132
|
+
function getProjectStartup(useSwagger, openApiPath) {
|
|
133
|
+
return `${GeneratedFileHeaderWithNullable}
|
|
134
|
+
|
|
135
|
+
using TypeSpec.Helpers;
|
|
136
|
+
|
|
137
|
+
var builder = WebApplication.CreateBuilder(args);
|
|
138
|
+
|
|
139
|
+
// Add services to the container.
|
|
140
|
+
builder.Services.AddControllersWithViews();
|
|
141
|
+
builder.Services.AddEndpointsApiExplorer();
|
|
142
|
+
${useSwagger ? "builder.Services.AddSwaggerGen();" : ""}
|
|
143
|
+
MockRegistration.Register(builder);
|
|
144
|
+
|
|
145
|
+
var app = builder.Build();
|
|
146
|
+
|
|
147
|
+
// Configure the HTTP request pipeline.
|
|
148
|
+
if (!app.Environment.IsDevelopment())
|
|
149
|
+
{
|
|
150
|
+
app.UseExceptionHandler("/Home/Error");
|
|
151
|
+
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
|
|
152
|
+
app.UseHsts();
|
|
153
|
+
}
|
|
154
|
+
${useSwagger
|
|
155
|
+
? code `else
|
|
156
|
+
{
|
|
157
|
+
app.UseSwagger();
|
|
158
|
+
app.UseSwaggerUI( c=> {
|
|
159
|
+
c.DocumentTitle = "TypeSpec Generated OpenAPI Viewer";
|
|
160
|
+
c.SwaggerEndpoint("/openapi.yaml", "TypeSpec Generated OpenAPI Docs");
|
|
161
|
+
c.RoutePrefix = "swagger";
|
|
162
|
+
});
|
|
163
|
+
}\n`
|
|
164
|
+
: ""}
|
|
165
|
+
|
|
166
|
+
app.UseHttpsRedirection();
|
|
167
|
+
app.UseStaticFiles();
|
|
168
|
+
app.Use(async (context, next) =>
|
|
169
|
+
{
|
|
170
|
+
context.Request.EnableBuffering();
|
|
171
|
+
await next();
|
|
172
|
+
});
|
|
173
|
+
${useSwagger
|
|
174
|
+
? code `
|
|
175
|
+
app.MapGet("/openapi.yaml", async (HttpContext context) =>
|
|
176
|
+
{
|
|
177
|
+
var externalFilePath = "${openApiPath}"; // Full path to the file outside the project
|
|
178
|
+
if (!File.Exists(externalFilePath))
|
|
179
|
+
{
|
|
180
|
+
context.Response.StatusCode = StatusCodes.Status404NotFound;
|
|
181
|
+
await context.Response.WriteAsync("OpenAPI spec not found.");
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
context.Response.ContentType = "application/json";
|
|
185
|
+
await context.Response.SendFileAsync(externalFilePath);
|
|
186
|
+
});\n`
|
|
187
|
+
: ""}
|
|
188
|
+
|
|
189
|
+
app.UseRouting();
|
|
190
|
+
|
|
191
|
+
app.UseAuthorization();
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
app.MapControllerRoute(
|
|
195
|
+
name: "default",
|
|
196
|
+
pattern: "{controller=Home}/{action=Index}/{id?}");
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
app.Run();`;
|
|
200
|
+
}
|
|
201
|
+
function getInitializerInterface() {
|
|
202
|
+
return `${GeneratedFileHeaderWithNullable}
|
|
203
|
+
|
|
204
|
+
namespace TypeSpec.Helpers
|
|
205
|
+
{
|
|
206
|
+
/// <summary>
|
|
207
|
+
/// Interface for object initialization in mocks
|
|
208
|
+
/// </summary>
|
|
209
|
+
public interface IInitializer
|
|
210
|
+
{
|
|
211
|
+
/// <summary>
|
|
212
|
+
/// Initialize an object fo the given type
|
|
213
|
+
/// </summary>
|
|
214
|
+
/// <param name="type"> The type to initialize</param>
|
|
215
|
+
/// <returns>An instance of the given type. Or null if initialization was impossible.</returns>
|
|
216
|
+
object? Initialize(System.Type type);
|
|
217
|
+
|
|
218
|
+
/// <summary>
|
|
219
|
+
/// Initialize an object of the given type
|
|
220
|
+
/// </summary>
|
|
221
|
+
/// <typeparam name="T">The type to initialize</typeparam>
|
|
222
|
+
/// <returns>An instance of the given type</returns>
|
|
223
|
+
T Initialize<T>() where T : class, new();
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
`;
|
|
227
|
+
}
|
|
228
|
+
function getInitializerImplementation() {
|
|
229
|
+
return `${GeneratedFileHeaderWithNullable}
|
|
230
|
+
|
|
231
|
+
namespace TypeSpec.Helpers
|
|
232
|
+
{
|
|
233
|
+
/// <summary>
|
|
234
|
+
/// Default initializer for mock implementations of business logic interfaces
|
|
235
|
+
/// </summary>
|
|
236
|
+
public class Initializer : IInitializer
|
|
237
|
+
{
|
|
238
|
+
/// <summary>
|
|
239
|
+
/// Instantiate the initializer. The cache *should* be instantiated using ASP.Net Core's dependency injection
|
|
240
|
+
/// </summary>
|
|
241
|
+
/// <param name="cache"></param>
|
|
242
|
+
public Initializer(IDictionary<Type, object?> cache)
|
|
243
|
+
{
|
|
244
|
+
Cache = cache;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
internal virtual IDictionary<Type, object?> Cache { get; }
|
|
248
|
+
|
|
249
|
+
internal object? CacheAndReturn(Type type, object? instance)
|
|
250
|
+
{
|
|
251
|
+
Cache[type] = instance;
|
|
252
|
+
return instance;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/// <summary>
|
|
256
|
+
/// Initialize an object fo the given type
|
|
257
|
+
/// </summary>
|
|
258
|
+
/// <param name="type"> The type to initialize</param>
|
|
259
|
+
/// <returns>An instance of the given type. Or null if initialization was impossible.</returns>
|
|
260
|
+
public object? Initialize (Type type)
|
|
261
|
+
{
|
|
262
|
+
if (Cache.ContainsKey(type))
|
|
263
|
+
{
|
|
264
|
+
return Cache[type];
|
|
265
|
+
}
|
|
266
|
+
if (type == typeof(string))
|
|
267
|
+
{
|
|
268
|
+
return CacheAndReturn(type, string.Empty);
|
|
269
|
+
}
|
|
270
|
+
if (type == typeof(int))
|
|
271
|
+
{
|
|
272
|
+
return CacheAndReturn(type, 0);
|
|
273
|
+
}
|
|
274
|
+
if (type == typeof(long))
|
|
275
|
+
{
|
|
276
|
+
return CacheAndReturn(type, 0L);
|
|
277
|
+
}
|
|
278
|
+
if (type == typeof(float))
|
|
279
|
+
{
|
|
280
|
+
return CacheAndReturn(type, 0.0f);
|
|
281
|
+
}
|
|
282
|
+
if (type == typeof(double))
|
|
283
|
+
{
|
|
284
|
+
return CacheAndReturn(type, 0.0);
|
|
285
|
+
}
|
|
286
|
+
if (type == typeof(decimal))
|
|
287
|
+
{
|
|
288
|
+
return CacheAndReturn(type, 0.0m);
|
|
289
|
+
}
|
|
290
|
+
if (type == typeof(bool))
|
|
291
|
+
{
|
|
292
|
+
return CacheAndReturn(type, false);
|
|
293
|
+
}
|
|
294
|
+
if (type == typeof(byte))
|
|
295
|
+
{
|
|
296
|
+
return CacheAndReturn(type, (byte)0);
|
|
297
|
+
}
|
|
298
|
+
if (type == typeof(char))
|
|
299
|
+
{
|
|
300
|
+
return CacheAndReturn(type, (char)0);
|
|
301
|
+
}
|
|
302
|
+
if (type == typeof(short))
|
|
303
|
+
{
|
|
304
|
+
return CacheAndReturn(type, (short)0);
|
|
305
|
+
}
|
|
306
|
+
if (type == typeof(uint))
|
|
307
|
+
{
|
|
308
|
+
return CacheAndReturn(type, (uint)0);
|
|
309
|
+
}
|
|
310
|
+
if (type == typeof(ulong))
|
|
311
|
+
{
|
|
312
|
+
return CacheAndReturn(type, (ulong)0);
|
|
313
|
+
}
|
|
314
|
+
if (type == typeof(ushort))
|
|
315
|
+
{
|
|
316
|
+
return CacheAndReturn(type, (ushort)0);
|
|
317
|
+
}
|
|
318
|
+
if (type == typeof(sbyte))
|
|
319
|
+
{
|
|
320
|
+
return CacheAndReturn(type, (sbyte)0);
|
|
321
|
+
}
|
|
322
|
+
if (type == typeof(DateTime))
|
|
323
|
+
{
|
|
324
|
+
return CacheAndReturn(type, DateTime.UtcNow);
|
|
325
|
+
}
|
|
326
|
+
if (type == typeof(DateTimeOffset))
|
|
327
|
+
{
|
|
328
|
+
return CacheAndReturn(type, DateTimeOffset.UtcNow);
|
|
329
|
+
}
|
|
330
|
+
if ( type == typeof(TimeSpan))
|
|
331
|
+
{
|
|
332
|
+
return CacheAndReturn(type, TimeSpan.Zero);
|
|
333
|
+
}
|
|
334
|
+
if (type.IsArray)
|
|
335
|
+
{
|
|
336
|
+
var element = type.GetElementType();
|
|
337
|
+
if (element == null) return null;
|
|
338
|
+
return CacheAndReturn(type, Array.CreateInstance(element, 0));
|
|
339
|
+
}
|
|
340
|
+
if (type.IsClass)
|
|
341
|
+
{
|
|
342
|
+
return InitializeClass(type);
|
|
343
|
+
}
|
|
344
|
+
var genericType = Nullable.GetUnderlyingType(type);
|
|
345
|
+
if ( (genericType != null))
|
|
346
|
+
{
|
|
347
|
+
return Initialize(genericType);
|
|
348
|
+
}
|
|
349
|
+
return new object();
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/// <summary>
|
|
353
|
+
/// Initialize an object of the given type
|
|
354
|
+
/// </summary>
|
|
355
|
+
/// <typeparam name="T">The type to initialize</typeparam>
|
|
356
|
+
/// <returns>An instance of the given type</returns>
|
|
357
|
+
public T Initialize<T>() where T: class, new()
|
|
358
|
+
{
|
|
359
|
+
var result = new T();
|
|
360
|
+
var initialized = InitializeClass(typeof(T), result);
|
|
361
|
+
return initialized as T ?? result;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
private object? InitializeClass(Type type, object? instance = null)
|
|
365
|
+
{
|
|
366
|
+
if (Cache.ContainsKey(type))
|
|
367
|
+
{
|
|
368
|
+
instance = Cache[type];
|
|
369
|
+
return instance;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
var result = instance == null ? Activator.CreateInstance(type) : instance;
|
|
373
|
+
foreach (var property in type.GetProperties())
|
|
374
|
+
{
|
|
375
|
+
if (property.CanWrite)
|
|
376
|
+
{
|
|
377
|
+
var propertyType = property.PropertyType;
|
|
378
|
+
property.SetValue(result, Initialize(propertyType));
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
return CacheAndReturn(type, result);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
`;
|
|
387
|
+
}
|
|
388
|
+
//# sourceMappingURL=scaffolding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffolding.js","sourceRoot":"","sources":["../../../src/lib/scaffolding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/lib/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EA0BZ,MAAM,oBAAoB,CAAC;AA+C5B,OAAO,EAAE,2BAA2B,EAAoB,MAAM,UAAU,CAAC;AA2BzE,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,2BAA2B,CAAC,iBAgjD9E"}
|