microsoft/typespec

Public

mirrored from https://github.com/microsoft/typespecAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
35f5c90343dae1fc612de312ebb42d3982c25c11

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

packages/http-client-csharp/src/options.ts

153lines · modecode

1import { SdkEmitterOptions } from "@azure-tools/typespec-client-generator-core";
2import { EmitContext, JSONSchemaType, resolvePath } from "@typespec/compiler";
3import { tspOutputFileName } from "./constants.js";
4import { LoggerLevel } from "./lib/logger.js";
5
6export type NetEmitterOptions = {
7 outputFile?: string;
8 logFile?: string;
9 namespace: string;
10 "library-name": string;
11 "single-top-level-client"?: boolean;
12 skipSDKGeneration?: boolean;
13 "unreferenced-types-handling"?: "removeOrInternalize" | "internalize" | "keepAll";
14 "new-project"?: boolean;
15 csharpGeneratorPath?: string;
16 "clear-output-folder"?: boolean;
17 "save-inputs"?: boolean;
18 "model-namespace"?: boolean;
19 "existing-project-folder"?: string;
20 "keep-non-overloadable-protocol-signature"?: boolean;
21 debug?: boolean;
22 "models-to-treat-empty-string-as-null"?: string[];
23 "additional-intrinsic-types-to-treat-empty-string-as-null"?: string[];
24 "methods-to-keep-client-default-value"?: string[];
25 "deserialize-null-collection-as-null-value"?: boolean;
26 logLevel?: string;
27 "package-dir"?: string;
28 "head-as-boolean"?: boolean;
29 flavor?: string;
30 "generate-sample-project"?: boolean;
31 "generate-test-project"?: boolean;
32 "use-model-reader-writer"?: boolean;
33} & SdkEmitterOptions;
34
35export const NetEmitterOptionsSchema: JSONSchemaType<NetEmitterOptions> = {
36 type: "object",
37 additionalProperties: false,
38 properties: {
39 outputFile: { type: "string", nullable: true },
40 logFile: { type: "string", nullable: true },
41 namespace: { type: "string" },
42 "library-name": { type: "string" },
43 "single-top-level-client": { type: "boolean", nullable: true },
44 skipSDKGeneration: { type: "boolean", default: false, nullable: true },
45 "unreferenced-types-handling": {
46 type: "string",
47 enum: ["removeOrInternalize", "internalize", "keepAll"],
48 nullable: true,
49 },
50 "new-project": { type: "boolean", nullable: true },
51 csharpGeneratorPath: {
52 type: "string",
53 default: "fake-location",
54 nullable: true,
55 },
56 "clear-output-folder": { type: "boolean", nullable: true },
57 "save-inputs": { type: "boolean", nullable: true },
58 "model-namespace": { type: "boolean", nullable: true },
59 "generate-protocol-methods": { type: "boolean", nullable: true },
60 "generate-convenience-methods": { type: "boolean", nullable: true },
61 "filter-out-core-models": { type: "boolean", nullable: true },
62 "package-name": { type: "string", nullable: true },
63 "existing-project-folder": { type: "string", nullable: true },
64 "keep-non-overloadable-protocol-signature": {
65 type: "boolean",
66 nullable: true,
67 },
68 debug: { type: "boolean", nullable: true },
69 "models-to-treat-empty-string-as-null": {
70 type: "array",
71 nullable: true,
72 items: { type: "string" },
73 },
74 "additional-intrinsic-types-to-treat-empty-string-as-null": {
75 type: "array",
76 nullable: true,
77 items: { type: "string" },
78 },
79 "methods-to-keep-client-default-value": {
80 type: "array",
81 nullable: true,
82 items: { type: "string" },
83 },
84 "deserialize-null-collection-as-null-value": {
85 type: "boolean",
86 nullable: true,
87 },
88 logLevel: {
89 type: "string",
90 enum: [
91 LoggerLevel.ERROR,
92 LoggerLevel.WARN,
93 LoggerLevel.INFO,
94 LoggerLevel.DEBUG,
95 LoggerLevel.VERBOSE,
96 ],
97 nullable: true,
98 },
99 "package-dir": { type: "string", nullable: true },
100 "head-as-boolean": { type: "boolean", nullable: true },
101 flavor: { type: "string", nullable: true },
102 "generate-sample-project": {
103 type: "boolean",
104 nullable: true,
105 default: true,
106 },
107 "generate-test-project": {
108 type: "boolean",
109 nullable: true,
110 default: false,
111 },
112 "use-model-reader-writer": { type: "boolean", nullable: true },
113 },
114 required: [],
115};
116
117const defaultOptions = {
118 outputFile: tspOutputFileName,
119 logFile: "log.json",
120 skipSDKGeneration: false,
121 "new-project": false,
122 csharpGeneratorPath: "fake-location",
123 "clear-output-folder": false,
124 "save-inputs": false,
125 "generate-protocol-methods": true,
126 "generate-convenience-methods": true,
127 "package-name": undefined,
128 debug: undefined,
129 "models-to-treat-empty-string-as-null": undefined,
130 "additional-intrinsic-types-to-treat-empty-string-as-null": [],
131 "methods-to-keep-client-default-value": undefined,
132 "deserialize-null-collection-as-null-value": undefined,
133 logLevel: LoggerLevel.INFO,
134 flavor: undefined,
135 "generate-test-project": false,
136};
137
138export function resolveOptions(context: EmitContext<NetEmitterOptions>) {
139 const emitterOptions = context.options;
140 const emitterOutputDir = context.emitterOutputDir;
141 const resolvedOptions = { ...defaultOptions, ...emitterOptions };
142
143 const outputFolder = resolveOutputFolder(context);
144 return {
145 ...resolvedOptions,
146 outputFile: resolvePath(outputFolder, resolvedOptions.outputFile),
147 logFile: resolvePath(emitterOutputDir ?? "./tsp-output", resolvedOptions.logFile),
148 };
149}
150
151export function resolveOutputFolder(context: EmitContext<NetEmitterOptions>): string {
152 return resolvePath(context.emitterOutputDir ?? "./tsp-output");
153}
154