@typespec/http-server-csharp 0.58.0-alpha.1 → 0.58.0-alpha.10-dev.1

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 (66) hide show
  1. package/cmd/hscs.js +2 -0
  2. package/dist/src/cli/cli.d.ts +2 -0
  3. package/dist/src/cli/cli.d.ts.map +1 -0
  4. package/dist/src/cli/cli.js +124 -0
  5. package/dist/src/cli/cli.js.map +1 -0
  6. package/dist/src/{attributes.d.ts → lib/attributes.d.ts} +1 -1
  7. package/dist/src/lib/attributes.d.ts.map +1 -0
  8. package/dist/src/{attributes.js → lib/attributes.js} +52 -8
  9. package/dist/src/lib/attributes.js.map +1 -0
  10. package/dist/src/{boilerplate.d.ts → lib/boilerplate.d.ts} +2 -0
  11. package/dist/src/lib/boilerplate.d.ts.map +1 -0
  12. package/dist/src/{boilerplate.js → lib/boilerplate.js} +105 -40
  13. package/dist/src/lib/boilerplate.js.map +1 -0
  14. package/dist/src/lib/index.d.ts.map +1 -0
  15. package/dist/src/lib/index.js.map +1 -0
  16. package/dist/src/{interfaces.d.ts → lib/interfaces.d.ts} +23 -0
  17. package/dist/src/lib/interfaces.d.ts.map +1 -0
  18. package/dist/src/{interfaces.js → lib/interfaces.js} +7 -3
  19. package/dist/src/lib/interfaces.js.map +1 -0
  20. package/dist/src/{lib.d.ts → lib/lib.d.ts} +25 -1
  21. package/dist/src/lib/lib.d.ts.map +1 -0
  22. package/dist/src/{lib.js → lib/lib.js} +31 -0
  23. package/dist/src/lib/lib.js.map +1 -0
  24. package/dist/src/lib/scaffolding.d.ts +21 -0
  25. package/dist/src/lib/scaffolding.d.ts.map +1 -0
  26. package/dist/src/lib/scaffolding.js +412 -0
  27. package/dist/src/lib/scaffolding.js.map +1 -0
  28. package/dist/src/lib/service.d.ts.map +1 -0
  29. package/dist/src/{service.js → lib/service.js} +332 -230
  30. package/dist/src/lib/service.js.map +1 -0
  31. package/dist/src/lib/testing/index.d.ts.map +1 -0
  32. package/dist/src/{testing → lib/testing}/index.js +1 -0
  33. package/dist/src/lib/testing/index.js.map +1 -0
  34. package/dist/src/lib/type-helpers.d.ts.map +1 -0
  35. package/dist/src/lib/type-helpers.js.map +1 -0
  36. package/dist/src/lib/utils.d.ts +88 -0
  37. package/dist/src/lib/utils.d.ts.map +1 -0
  38. package/dist/src/lib/utils.js +1173 -0
  39. package/dist/src/lib/utils.js.map +1 -0
  40. package/package.json +32 -23
  41. package/dist/src/attributes.d.ts.map +0 -1
  42. package/dist/src/attributes.js.map +0 -1
  43. package/dist/src/boilerplate.d.ts.map +0 -1
  44. package/dist/src/boilerplate.js.map +0 -1
  45. package/dist/src/index.d.ts.map +0 -1
  46. package/dist/src/index.js.map +0 -1
  47. package/dist/src/interfaces.d.ts.map +0 -1
  48. package/dist/src/interfaces.js.map +0 -1
  49. package/dist/src/lib.d.ts.map +0 -1
  50. package/dist/src/lib.js.map +0 -1
  51. package/dist/src/service.d.ts.map +0 -1
  52. package/dist/src/service.js.map +0 -1
  53. package/dist/src/testing/index.d.ts.map +0 -1
  54. package/dist/src/testing/index.js.map +0 -1
  55. package/dist/src/type-helpers.d.ts.map +0 -1
  56. package/dist/src/type-helpers.js.map +0 -1
  57. package/dist/src/utils.d.ts +0 -48
  58. package/dist/src/utils.d.ts.map +0 -1
  59. package/dist/src/utils.js +0 -628
  60. package/dist/src/utils.js.map +0 -1
  61. /package/dist/src/{index.d.ts → lib/index.d.ts} +0 -0
  62. /package/dist/src/{index.js → lib/index.js} +0 -0
  63. /package/dist/src/{service.d.ts → lib/service.d.ts} +0 -0
  64. /package/dist/src/{testing → lib/testing}/index.d.ts +0 -0
  65. /package/dist/src/{type-helpers.d.ts → lib/type-helpers.d.ts} +0 -0
  66. /package/dist/src/{type-helpers.js → lib/type-helpers.js} +0 -0
@@ -4,11 +4,13 @@ export class CSharpType {
4
4
  namespace;
5
5
  isBuiltIn;
6
6
  isValueType;
7
+ isNullable;
7
8
  constructor(input) {
8
9
  this.name = input.name;
9
10
  this.namespace = input.namespace;
10
11
  this.isBuiltIn = input.isBuiltIn !== undefined ? input.isBuiltIn : input.namespace === "System";
11
12
  this.isValueType = input.isValueType !== undefined ? input.isValueType : false;
13
+ this.isNullable = input.isNullable !== undefined ? input.isNullable : false;
12
14
  }
13
15
  isNamespaceInScope(scope, visited) {
14
16
  if (this.isBuiltIn)
@@ -75,7 +77,7 @@ export class NumericValue extends CSharpValue {
75
77
  this.value = value;
76
78
  }
77
79
  emitValue(scope) {
78
- return `${this.value}` ?? "0";
80
+ return `${this.value ?? 0}`;
79
81
  }
80
82
  }
81
83
  export class BooleanValue extends CSharpValue {
@@ -85,7 +87,7 @@ export class BooleanValue extends CSharpValue {
85
87
  this.value = value;
86
88
  }
87
89
  emitValue(scope) {
88
- return `${this.value}` ?? false;
90
+ return `${this.value}`;
89
91
  }
90
92
  }
91
93
  export class NullValue extends CSharpValue {
@@ -208,8 +210,9 @@ export var NameCasingType;
208
210
  })(NameCasingType || (NameCasingType = {}));
209
211
  export class LibrarySourceFile {
210
212
  constructor(params) {
213
+ this.path = params.path !== undefined ? params.path : "lib/";
211
214
  this.filename = params.filename;
212
- this.source = params.emitter.createSourceFile(`lib/${this.filename}`);
215
+ this.source = params.emitter.createSourceFile(`${this.path}/${this.filename}`);
213
216
  this.emitted = {
214
217
  path: this.source.path,
215
218
  contents: params.getContents(),
@@ -218,5 +221,6 @@ export class LibrarySourceFile {
218
221
  filename;
219
222
  source;
220
223
  emitted;
224
+ path;
221
225
  }
222
226
  //# sourceMappingURL=interfaces.js.map
@@ -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,21 @@
1
+ import { AssetEmitter } from "@typespec/compiler/emitter-framework";
2
+ import { CSharpType, 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
+ returnTypeName: string;
14
+ returnType: CSharpType;
15
+ instantiatedReturnType?: string;
16
+ }
17
+ export type BusinessLogicRegistrations = Map<string, BusinessLogicImplementation>;
18
+ export type BusinessLogicRegistration = [string, BusinessLogicImplementation];
19
+ export declare function getScaffoldingHelpers(emitter: AssetEmitter<string, Record<string, never>>, useSwagger: boolean, openApiPath: string, hasMockRegistration: boolean): LibrarySourceFile[];
20
+ export declare function getBusinessLogicImplementations(emitter: AssetEmitter<string, Record<string, never>>, registrations: BusinessLogicRegistrations, useSwagger: boolean, openApiPath: string): LibrarySourceFile[];
21
+ //# 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,UAAU,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEhE,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,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,UAAU,CAAC;IACvB,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,EACnB,mBAAmB,EAAE,OAAO,GAC3B,iBAAiB,EAAE,CA2BrB;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EACpD,aAAa,EAAE,0BAA0B,EACzC,UAAU,EAAE,OAAO,EACnB,WAAW,EAAE,MAAM,GAClB,iBAAiB,EAAE,CA0BrB"}
@@ -0,0 +1,412 @@
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, hasMockRegistration) {
5
+ const sourceFiles = [
6
+ new LibrarySourceFile({
7
+ filename: "Program.cs",
8
+ emitter: emitter,
9
+ getContents: () => getProjectStartup(useSwagger, openApiPath, hasMockRegistration),
10
+ path: "../",
11
+ }),
12
+ ];
13
+ if (hasMockRegistration) {
14
+ sourceFiles.push(new LibrarySourceFile({
15
+ filename: "IInitializer.cs",
16
+ emitter: emitter,
17
+ getContents: getInitializerInterface,
18
+ path: "../mocks/",
19
+ }), new LibrarySourceFile({
20
+ filename: "Initializer.cs",
21
+ emitter: emitter,
22
+ getContents: getInitializerImplementation,
23
+ path: "../mocks/",
24
+ }));
25
+ }
26
+ return sourceFiles;
27
+ }
28
+ export function getBusinessLogicImplementations(emitter, registrations, useSwagger, openApiPath) {
29
+ const sourceFiles = [];
30
+ const mocks = [];
31
+ for (const [_, impl] of registrations) {
32
+ sourceFiles.push(new LibrarySourceFile({
33
+ filename: `${impl.className}.cs`,
34
+ emitter: emitter,
35
+ getContents: () => getBusinessLogicImplementation(impl),
36
+ path: "../mocks/",
37
+ }));
38
+ mocks.push(impl);
39
+ }
40
+ if (mocks.length > 0) {
41
+ sourceFiles.push(new LibrarySourceFile({
42
+ filename: "MockRegistration.cs",
43
+ emitter: emitter,
44
+ getContents: () => getMockRegistration(mocks),
45
+ path: "../mocks/",
46
+ }));
47
+ }
48
+ sourceFiles.push(...getScaffoldingHelpers(emitter, useSwagger, openApiPath, mocks.length > 0));
49
+ return sourceFiles;
50
+ }
51
+ function getReturnStatement(returnType) {
52
+ if (returnType.isValueType && returnType.isNullable) {
53
+ return `return Task.FromResult(_initializer.Initialize(typeof(${returnType.getTypeReference()})) as ${returnType.getTypeReference()} ?? default);`;
54
+ }
55
+ if (returnType.isValueType) {
56
+ return `return Task.FromResult<${returnType.getTypeReference()}>(default);`;
57
+ }
58
+ if (returnType.name.endsWith("[]")) {
59
+ return `return Task.FromResult<${returnType.getTypeReference()}>([]);`;
60
+ }
61
+ if (returnType.name === "string") {
62
+ return `return Task.FromResult("");`;
63
+ }
64
+ else {
65
+ return `return Task.FromResult(_initializer.Initialize<${returnType.getTypeReference()}>());`;
66
+ }
67
+ }
68
+ function getBusinessLogicImplementation(mock) {
69
+ const methods = [];
70
+ for (const method of mock.methods) {
71
+ const methodCode = method.instantiatedReturnType !== undefined
72
+ ? getReturnStatement(method.returnType)
73
+ : "return Task.CompletedTask;";
74
+ methods.push(` public ${method.returnTypeName} ${method.methodName}( ${method.methodParams})
75
+ {
76
+ ${methodCode}
77
+ }`);
78
+ }
79
+ return `${GeneratedFileHeaderWithNullable}
80
+
81
+ using System;
82
+ using System.Net;
83
+ using System.Text.Json;
84
+ using System.Text.Json.Serialization;
85
+ using System.Threading.Tasks;
86
+ using Microsoft.AspNetCore.Mvc;${mock.methods.some((m) => m.methodParams.includes("MultipartReader")) ? `\nusing Microsoft.AspNetCore.WebUtilities;` : ""}
87
+ using ${mock.namespace}.Models;
88
+ using TypeSpec.Helpers;
89
+
90
+ namespace ${mock.namespace}
91
+ {
92
+ /// <summary>
93
+ /// This is a mock implementation of the business logic interface for
94
+ /// demonstration and early development. Feel free to overwrite this file.
95
+ /// Or replace it with another implementation, and register that implementation
96
+ /// in the dependency injection container
97
+ /// </summary>
98
+ /// <param name="initializer">The initializer class, registered with dependency injection</param>
99
+ public class ${mock.className} : ${mock.interfaceName}
100
+ {
101
+ public ${mock.className}(IInitializer initializer)
102
+ {
103
+ _initializer = initializer;
104
+ }
105
+
106
+ private IInitializer _initializer;
107
+
108
+ ${methods.join("\n\n")}
109
+ }
110
+ }
111
+ `;
112
+ }
113
+ function getMockRegistration(mocks) {
114
+ if (mocks.length < 1)
115
+ return "";
116
+ const cache = new Map();
117
+ return `${GeneratedFileHeaderWithNullable}
118
+
119
+ using Microsoft.AspNetCore.Http.Features;
120
+ ${mocks
121
+ .flatMap((m) => m.usings)
122
+ .filter((t) => {
123
+ const result = !cache.has(t);
124
+ cache.set(t, t);
125
+ return result;
126
+ })
127
+ .flatMap((e) => `using ${e};`)
128
+ .join("\n")}
129
+ using ${mocks[0].namespace};
130
+
131
+ namespace TypeSpec.Helpers
132
+ {
133
+ /// <summary>
134
+ /// Register Business Logic implementations. Replace with actual implementations when available.
135
+ /// </summary>
136
+ public static class MockRegistration
137
+ {
138
+ public static void Register(WebApplicationBuilder builder)
139
+ {
140
+ builder.Services.AddScoped<IJsonSerializationProvider, JsonSerializationProvider>();
141
+ // Used for mock implementation only. Remove once business logic interfaces are implemented.
142
+ builder.Services.AddSingleton<IDictionary<Type, object?>>(new Dictionary<Type, object?>());
143
+ builder.Services.AddScoped<IInitializer, Initializer>();
144
+ // Mock business logic implementations
145
+ ${mocks.flatMap((m) => ` builder.Services.AddScoped<${m.interfaceName}, ${m.className}>();`).join("\n")}
146
+ // Included for multipart/form-data support
147
+ builder.Services.Configure<FormOptions>(options =>
148
+ {
149
+ options.MemoryBufferThreshold = int.MaxValue;
150
+ options.MultipartBodyLengthLimit = int.MaxValue;
151
+ });
152
+ }
153
+ }
154
+ }`;
155
+ }
156
+ function getProjectStartup(useSwagger, openApiPath, hasMocks) {
157
+ return `${GeneratedFileHeaderWithNullable}
158
+
159
+ using TypeSpec.Helpers;
160
+
161
+ var builder = WebApplication.CreateBuilder(args);
162
+
163
+ // Add services to the container.
164
+ builder.Services.AddControllersWithViews();
165
+ builder.Services.AddEndpointsApiExplorer();
166
+ ${useSwagger ? "builder.Services.AddSwaggerGen();" : ""}
167
+ ${hasMocks ? "MockRegistration.Register(builder);" : ""}
168
+
169
+ var app = builder.Build();
170
+
171
+ // Configure the HTTP request pipeline.
172
+ if (!app.Environment.IsDevelopment())
173
+ {
174
+ app.UseExceptionHandler("/Home/Error");
175
+ // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
176
+ app.UseHsts();
177
+ }
178
+ ${useSwagger
179
+ ? code `else
180
+ {
181
+ app.UseSwagger();
182
+ app.UseSwaggerUI( c=> {
183
+ c.DocumentTitle = "TypeSpec Generated OpenAPI Viewer";
184
+ c.SwaggerEndpoint("/openapi.yaml", "TypeSpec Generated OpenAPI Docs");
185
+ c.RoutePrefix = "swagger";
186
+ });
187
+ }\n`
188
+ : ""}
189
+
190
+ app.UseHttpsRedirection();
191
+ app.UseStaticFiles();
192
+ app.Use(async (context, next) =>
193
+ {
194
+ context.Request.EnableBuffering();
195
+ await next();
196
+ });
197
+ ${useSwagger
198
+ ? code `
199
+ app.MapGet("/openapi.yaml", async (HttpContext context) =>
200
+ {
201
+ var externalFilePath = "${openApiPath}"; // Full path to the file outside the project
202
+ if (!File.Exists(externalFilePath))
203
+ {
204
+ context.Response.StatusCode = StatusCodes.Status404NotFound;
205
+ await context.Response.WriteAsync("OpenAPI spec not found.");
206
+ return;
207
+ }
208
+ context.Response.ContentType = "application/json";
209
+ await context.Response.SendFileAsync(externalFilePath);
210
+ });\n`
211
+ : ""}
212
+
213
+ app.UseRouting();
214
+
215
+ app.UseAuthorization();
216
+
217
+
218
+ app.MapControllerRoute(
219
+ name: "default",
220
+ pattern: "{controller=Home}/{action=Index}/{id?}");
221
+
222
+
223
+ app.Run();`;
224
+ }
225
+ function getInitializerInterface() {
226
+ return `${GeneratedFileHeaderWithNullable}
227
+
228
+ namespace TypeSpec.Helpers
229
+ {
230
+ /// <summary>
231
+ /// Interface for object initialization in mocks
232
+ /// </summary>
233
+ public interface IInitializer
234
+ {
235
+ /// <summary>
236
+ /// Initialize an object fo the given type
237
+ /// </summary>
238
+ /// <param name="type"> The type to initialize</param>
239
+ /// <returns>An instance of the given type. Or null if initialization was impossible.</returns>
240
+ object? Initialize(System.Type type);
241
+
242
+ /// <summary>
243
+ /// Initialize an object of the given type
244
+ /// </summary>
245
+ /// <typeparam name="T">The type to initialize</typeparam>
246
+ /// <returns>An instance of the given type</returns>
247
+ T Initialize<T>() where T : class, new();
248
+ }
249
+ }
250
+ `;
251
+ }
252
+ function getInitializerImplementation() {
253
+ return `${GeneratedFileHeaderWithNullable}
254
+
255
+ namespace TypeSpec.Helpers
256
+ {
257
+ /// <summary>
258
+ /// Default initializer for mock implementations of business logic interfaces
259
+ /// </summary>
260
+ public class Initializer : IInitializer
261
+ {
262
+ /// <summary>
263
+ /// Instantiate the initializer. The cache *should* be instantiated using ASP.Net Core's dependency injection
264
+ /// </summary>
265
+ /// <param name="cache"></param>
266
+ public Initializer(IDictionary<Type, object?> cache)
267
+ {
268
+ Cache = cache;
269
+ }
270
+
271
+ internal virtual IDictionary<Type, object?> Cache { get; }
272
+
273
+ internal object? CacheAndReturn(Type type, object? instance)
274
+ {
275
+ Cache[type] = instance;
276
+ return instance;
277
+ }
278
+
279
+ /// <summary>
280
+ /// Initialize an object fo the given type
281
+ /// </summary>
282
+ /// <param name="type"> The type to initialize</param>
283
+ /// <returns>An instance of the given type. Or null if initialization was impossible.</returns>
284
+ public object? Initialize (Type type)
285
+ {
286
+ if (Cache.ContainsKey(type))
287
+ {
288
+ return Cache[type];
289
+ }
290
+ if (type == typeof(string))
291
+ {
292
+ return CacheAndReturn(type, string.Empty);
293
+ }
294
+ if (type == typeof(int))
295
+ {
296
+ return CacheAndReturn(type, 0);
297
+ }
298
+ if (type == typeof(long))
299
+ {
300
+ return CacheAndReturn(type, 0L);
301
+ }
302
+ if (type == typeof(float))
303
+ {
304
+ return CacheAndReturn(type, 0.0f);
305
+ }
306
+ if (type == typeof(double))
307
+ {
308
+ return CacheAndReturn(type, 0.0);
309
+ }
310
+ if (type == typeof(decimal))
311
+ {
312
+ return CacheAndReturn(type, 0.0m);
313
+ }
314
+ if (type == typeof(bool))
315
+ {
316
+ return CacheAndReturn(type, false);
317
+ }
318
+ if (type == typeof(byte))
319
+ {
320
+ return CacheAndReturn(type, (byte)0);
321
+ }
322
+ if (type == typeof(char))
323
+ {
324
+ return CacheAndReturn(type, (char)0);
325
+ }
326
+ if (type == typeof(short))
327
+ {
328
+ return CacheAndReturn(type, (short)0);
329
+ }
330
+ if (type == typeof(uint))
331
+ {
332
+ return CacheAndReturn(type, (uint)0);
333
+ }
334
+ if (type == typeof(ulong))
335
+ {
336
+ return CacheAndReturn(type, (ulong)0);
337
+ }
338
+ if (type == typeof(ushort))
339
+ {
340
+ return CacheAndReturn(type, (ushort)0);
341
+ }
342
+ if (type == typeof(sbyte))
343
+ {
344
+ return CacheAndReturn(type, (sbyte)0);
345
+ }
346
+ if (type == typeof(DateTime))
347
+ {
348
+ return CacheAndReturn(type, DateTime.UtcNow);
349
+ }
350
+ if (type == typeof(DateTimeOffset))
351
+ {
352
+ return CacheAndReturn(type, DateTimeOffset.UtcNow);
353
+ }
354
+ if ( type == typeof(TimeSpan))
355
+ {
356
+ return CacheAndReturn(type, TimeSpan.Zero);
357
+ }
358
+ if (type.IsArray)
359
+ {
360
+ var element = type.GetElementType();
361
+ if (element == null) return null;
362
+ return CacheAndReturn(type, Array.CreateInstance(element, 0));
363
+ }
364
+ if (type.IsClass)
365
+ {
366
+ return InitializeClass(type);
367
+ }
368
+ var genericType = Nullable.GetUnderlyingType(type);
369
+ if ( (genericType != null))
370
+ {
371
+ return Initialize(genericType);
372
+ }
373
+ return new object();
374
+ }
375
+
376
+ /// <summary>
377
+ /// Initialize an object of the given type
378
+ /// </summary>
379
+ /// <typeparam name="T">The type to initialize</typeparam>
380
+ /// <returns>An instance of the given type</returns>
381
+ public T Initialize<T>() where T: class, new()
382
+ {
383
+ var result = new T();
384
+ var initialized = InitializeClass(typeof(T), result);
385
+ return initialized as T ?? result;
386
+ }
387
+
388
+ private object? InitializeClass(Type type, object? instance = null)
389
+ {
390
+ if (Cache.ContainsKey(type))
391
+ {
392
+ instance = Cache[type];
393
+ return instance;
394
+ }
395
+
396
+ var result = instance == null ? Activator.CreateInstance(type) : instance;
397
+ foreach (var property in type.GetProperties())
398
+ {
399
+ if (property.CanWrite)
400
+ {
401
+ var propertyType = property.PropertyType;
402
+ property.SetValue(result, Initialize(propertyType));
403
+ }
404
+ }
405
+
406
+ return CacheAndReturn(type, result);
407
+ }
408
+ }
409
+ }
410
+ `;
411
+ }
412
+ //# sourceMappingURL=scaffolding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffolding.js","sourceRoot":"","sources":["../../../src/lib/scaffolding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,IAAI,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,+BAA+B,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAc,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAqBhE,MAAM,UAAU,qBAAqB,CACnC,OAAoD,EACpD,UAAmB,EACnB,WAAmB,EACnB,mBAA4B;IAE5B,MAAM,WAAW,GAAwB;QACvC,IAAI,iBAAiB,CAAC;YACpB,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,UAAU,EAAE,WAAW,EAAE,mBAAmB,CAAC;YAClF,IAAI,EAAE,KAAK;SACZ,CAAC;KACH,CAAC;IACF,IAAI,mBAAmB,EAAE,CAAC;QACxB,WAAW,CAAC,IAAI,CACd,IAAI,iBAAiB,CAAC;YACpB,QAAQ,EAAE,iBAAiB;YAC3B,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,uBAAuB;YACpC,IAAI,EAAE,WAAW;SAClB,CAAC,EACF,IAAI,iBAAiB,CAAC;YACpB,QAAQ,EAAE,gBAAgB;YAC1B,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,4BAA4B;YACzC,IAAI,EAAE,WAAW;SAClB,CAAC,CACH,CAAC;IACJ,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,OAAoD,EACpD,aAAyC,EACzC,UAAmB,EACnB,WAAmB;IAEnB,MAAM,WAAW,GAAwB,EAAE,CAAC;IAC5C,MAAM,KAAK,GAAkC,EAAE,CAAC;IAChD,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,aAAa,EAAE,CAAC;QACtC,WAAW,CAAC,IAAI,CACd,IAAI,iBAAiB,CAAC;YACpB,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,KAAK;YAChC,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,GAAG,EAAE,CAAC,8BAA8B,CAAC,IAAI,CAAC;YACvD,IAAI,EAAE,WAAW;SAClB,CAAC,CACH,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,WAAW,CAAC,IAAI,CACd,IAAI,iBAAiB,CAAC;YACpB,QAAQ,EAAE,qBAAqB;YAC/B,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC;YAC7C,IAAI,EAAE,WAAW;SAClB,CAAC,CACH,CAAC;IACJ,CAAC;IACD,WAAW,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/F,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,kBAAkB,CAAC,UAAsB;IAChD,IAAI,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;QACpD,OAAO,yDAAyD,UAAU,CAAC,gBAAgB,EAAE,SAAS,UAAU,CAAC,gBAAgB,EAAE,eAAe,CAAC;IACrJ,CAAC;IACD,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;QAC3B,OAAO,0BAA0B,UAAU,CAAC,gBAAgB,EAAE,aAAa,CAAC;IAC9E,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,OAAO,0BAA0B,UAAU,CAAC,gBAAgB,EAAE,QAAQ,CAAC;IACzE,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,6BAA6B,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,OAAO,kDAAkD,UAAU,CAAC,gBAAgB,EAAE,OAAO,CAAC;IAChG,CAAC;AACH,CAAC;AACD,SAAS,8BAA8B,CAAC,IAAiC;IACvE,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,UAAU,GACd,MAAM,CAAC,sBAAsB,KAAK,SAAS;YACzC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC;YACvC,CAAC,CAAC,4BAA4B,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,YAAY;;cAEvF,UAAU;UACd,CAAC,CAAC;IACV,CAAC;IACD,OAAO,GAAG,+BAA+B;;;;;;;iCAOV,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,4CAA4C,CAAC,CAAC,CAAC,EAAE;QACjJ,IAAI,CAAC,SAAS;;;YAGV,IAAI,CAAC,SAAS;;;;;;;;;mBASP,IAAI,CAAC,SAAS,MAAM,IAAI,CAAC,aAAa;;iBAExC,IAAI,CAAC,SAAS;;;;;;;EAO7B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;;;GAGnB,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAoC;IAC/D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,MAAM,KAAK,GAAwB,IAAI,GAAG,EAAkB,CAAC;IAC7D,OAAO,GAAG,+BAA+B;;;EAGzC,KAAK;SACJ,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;SACxB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACZ,MAAM,MAAM,GAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAChB,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;SACD,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC;SAC7B,IAAI,CAAC,IAAI,CAAC;QACL,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;;;;;;;;;;;;;;;;EAgBxB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,0CAA0C,CAAC,CAAC,aAAa,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;EAShH,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,UAAmB,EAAE,WAAmB,EAAE,QAAiB;IACpF,OAAO,GAAG,+BAA+B;;;;;;;;;EASzC,UAAU,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,EAAE;EACrD,QAAQ,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;EAYrD,UAAU;QACR,CAAC,CAAC,IAAI,CAAA;;;;;;;;IAQN;QACA,CAAC,CAAC,EACN;;;;;;;;;EAUE,UAAU;QACR,CAAC,CAAC,IAAI,CAAA;;;8BAGoB,WAAW;;;;;;;;;MASnC;QACF,CAAC,CAAC,EACN;;;;;;;;;;;;WAYW,CAAC;AACZ,CAAC;AAED,SAAS,uBAAuB;IAC9B,OAAO,GAAG,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;CAwB1C,CAAC;AACF,CAAC;AAED,SAAS,4BAA4B;IACnC,OAAO,GAAG,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6J1C,CAAC;AACF,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/lib/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EAyBZ,MAAM,oBAAoB,CAAC;AAwC5B,OAAO,EAAE,2BAA2B,EAAoB,MAAM,UAAU,CAAC;AAkCzE,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,2BAA2B,CAAC,iBA6mC9E"}