@azure-tools/typespec-java 0.27.9 → 0.28.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/dist/src/code-model-builder.d.ts +31 -3
- package/dist/src/code-model-builder.d.ts.map +1 -1
- package/dist/src/code-model-builder.js +32 -11
- package/dist/src/code-model-builder.js.map +1 -1
- package/dist/src/emitter.d.ts +1 -1
- package/dist/src/emitter.d.ts.map +1 -1
- package/dist/src/emitter.js.map +1 -1
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib.d.ts +18 -35
- package/dist/src/lib.d.ts.map +1 -1
- package/dist/src/lib.js +7 -35
- package/dist/src/lib.js.map +1 -1
- package/dist/src/options.d.ts +27 -0
- package/dist/src/options.d.ts.map +1 -0
- package/dist/src/options.js +62 -0
- package/dist/src/options.js.map +1 -0
- package/dist/src/utils.d.ts +1 -0
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.js +56 -0
- package/dist/src/utils.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/generator/http-client-generator/target/emitter.jar +0 -0
- package/package.json +38 -29
- package/readme.md +1 -1
|
@@ -1,9 +1,35 @@
|
|
|
1
1
|
import { AnySchema, BinarySchema, BooleanSchema, NumberSchema, ObjectSchema, Schema, StringSchema } from "@autorest/codemodel";
|
|
2
2
|
import { SdkType } from "@azure-tools/typespec-client-generator-core";
|
|
3
|
-
import { EmitContext, Program
|
|
3
|
+
import { EmitContext, Program } from "@typespec/compiler";
|
|
4
4
|
import { CodeModel } from "./common/code-model.js";
|
|
5
|
-
import { EmitterOptions } from "./
|
|
5
|
+
import { DevOptions, EmitterOptions } from "./options.js";
|
|
6
6
|
import { ProcessingCache } from "./type-utils.js";
|
|
7
|
+
export interface EmitterOptionsDev {
|
|
8
|
+
flavor?: string;
|
|
9
|
+
namespace?: string;
|
|
10
|
+
"service-name"?: string;
|
|
11
|
+
"service-versions"?: string[];
|
|
12
|
+
"generate-samples"?: boolean;
|
|
13
|
+
"generate-tests"?: boolean;
|
|
14
|
+
"partial-update"?: boolean;
|
|
15
|
+
"models-subpackage"?: string;
|
|
16
|
+
"custom-types"?: string;
|
|
17
|
+
"custom-types-subpackage"?: string;
|
|
18
|
+
"customization-class"?: string;
|
|
19
|
+
polling?: any;
|
|
20
|
+
"skip-special-headers"?: string[];
|
|
21
|
+
"enable-subclient"?: boolean;
|
|
22
|
+
"group-etag-headers"?: boolean;
|
|
23
|
+
"enable-sync-stack"?: boolean;
|
|
24
|
+
"stream-style-serialization"?: boolean;
|
|
25
|
+
"use-object-for-unknown"?: boolean;
|
|
26
|
+
"api-version"?: string;
|
|
27
|
+
"advanced-versioning"?: boolean;
|
|
28
|
+
"service-version-exclude-preview"?: boolean;
|
|
29
|
+
"dev-options"?: DevOptions;
|
|
30
|
+
"output-dir": string;
|
|
31
|
+
arm?: boolean;
|
|
32
|
+
}
|
|
7
33
|
export declare class CodeModelBuilder {
|
|
8
34
|
private program;
|
|
9
35
|
private typeNameOptions;
|
|
@@ -15,8 +41,8 @@ export declare class CodeModelBuilder {
|
|
|
15
41
|
private codeModel;
|
|
16
42
|
private emitterContext;
|
|
17
43
|
private serviceNamespace;
|
|
44
|
+
private readonly javaNamespaceCache;
|
|
18
45
|
readonly schemaCache: ProcessingCache<SdkType, Schema>;
|
|
19
|
-
readonly typeUnionRefCache: Map<Type, Union | null | undefined>;
|
|
20
46
|
private apiVersion;
|
|
21
47
|
constructor(program1: Program, context: EmitContext<EmitterOptions>);
|
|
22
48
|
build(): Promise<CodeModel>;
|
|
@@ -95,6 +121,7 @@ export declare class CodeModelBuilder {
|
|
|
95
121
|
private getConvenienceApiName;
|
|
96
122
|
private getBaseJavaNamespace;
|
|
97
123
|
private getJavaNamespace;
|
|
124
|
+
private escapeJavaNamespace;
|
|
98
125
|
private trace;
|
|
99
126
|
private _stringSchema?;
|
|
100
127
|
get stringSchema(): StringSchema;
|
|
@@ -111,6 +138,7 @@ export declare class CodeModelBuilder {
|
|
|
111
138
|
private _pollResultSchema?;
|
|
112
139
|
get pollResultSchema(): ObjectSchema;
|
|
113
140
|
private createApiVersionParameter;
|
|
141
|
+
private isApiVersionParameter;
|
|
114
142
|
private _apiVersionParameter?;
|
|
115
143
|
private _apiVersionParameterInPath?;
|
|
116
144
|
private _apiVersionParameterInHeader?;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-model-builder.d.ts","sourceRoot":"","sources":["../../src/code-model-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAIT,YAAY,EACZ,aAAa,EAeb,YAAY,EAEZ,YAAY,EAOZ,MAAM,EAMN,YAAY,EAKb,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAwBL,OAAO,EAOR,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACL,WAAW,EAKX,OAAO,
|
|
1
|
+
{"version":3,"file":"code-model-builder.d.ts","sourceRoot":"","sources":["../../src/code-model-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,18 +17,19 @@ import { OrSchema } from "./common/schemas/relationship.js";
|
|
|
17
17
|
import { DurationSchema } from "./common/schemas/time.js";
|
|
18
18
|
import { SchemaContext } from "./common/schemas/usage.js";
|
|
19
19
|
import { createPollOperationDetailsSchema, getFileDetailsSchema } from "./external-schemas.js";
|
|
20
|
-
import {
|
|
20
|
+
import { createDiagnostic, reportDiagnostic } from "./lib.js";
|
|
21
21
|
import { ClientContext } from "./models.js";
|
|
22
22
|
import { CONTENT_TYPE_KEY, ORIGIN_API_VERSION, SPECIAL_HEADER_NAMES, cloneOperationParameter, getServiceVersion, isKnownContentType, isLroNewPollingStrategy, operationIsJsonMergePatch, operationIsMultipart, operationIsMultipleContentTypes, } from "./operation-utils.js";
|
|
23
|
+
import { LIB_NAME } from "./options.js";
|
|
23
24
|
import { BYTES_KNOWN_ENCODING, DATETIME_KNOWN_ENCODING, DURATION_KNOWN_ENCODING, ProcessingCache, getAccess, getDurationFormat, getNonNullSdkType, getPropertySerializedName, getUnionDescription, getUsage, modelIs, pushDistinct, } from "./type-utils.js";
|
|
24
|
-
import { DiagnosticError, getNamespace, isStableApiVersion, pascalCase, removeClientSuffix, stringArrayContainsIgnoreCase, trace, } from "./utils.js";
|
|
25
|
+
import { DiagnosticError, escapeJavaKeywords, getNamespace, isStableApiVersion, pascalCase, removeClientSuffix, stringArrayContainsIgnoreCase, trace, } from "./utils.js";
|
|
25
26
|
const { isEqual } = pkg;
|
|
26
27
|
const AZURE_CORE_FOUNDATIONS_ERROR_ID = "Azure.Core.Foundations.Error";
|
|
27
28
|
export class CodeModelBuilder {
|
|
28
29
|
constructor(program1, context) {
|
|
29
30
|
var _a, _b;
|
|
31
|
+
this.javaNamespaceCache = new Map();
|
|
30
32
|
this.schemaCache = new ProcessingCache((type, name) => this.processSchemaImpl(type, name));
|
|
31
|
-
this.typeUnionRefCache = new Map(); // Union means it ref a Union type, null means it does not ref any Union, undefined means type visited but not completed
|
|
32
33
|
this.options = context.options;
|
|
33
34
|
this.program = program1;
|
|
34
35
|
this.emitterContext = context;
|
|
@@ -78,6 +79,7 @@ export class CodeModelBuilder {
|
|
|
78
79
|
additionalDecorators: ["Azure\\.ClientGenerator\\.Core\\.@override"],
|
|
79
80
|
versioning: { previewStringRegex: /$/ },
|
|
80
81
|
}); // include all versions and do the filter by ourselves
|
|
82
|
+
this.program.reportDiagnostics(this.sdkContext.diagnostics);
|
|
81
83
|
// java namespace
|
|
82
84
|
if (this.options.namespace) {
|
|
83
85
|
// legacy mode, clientNamespace from TCGC will be ignored
|
|
@@ -92,8 +94,6 @@ export class CodeModelBuilder {
|
|
|
92
94
|
this.baseJavaNamespace = this.getBaseJavaNamespace();
|
|
93
95
|
}
|
|
94
96
|
this.codeModel.language.java.namespace = this.baseJavaNamespace;
|
|
95
|
-
// potential problem https://github.com/Azure/typespec-azure/issues/1675
|
|
96
|
-
this.program.reportDiagnostics(this.sdkContext.diagnostics);
|
|
97
97
|
// auth
|
|
98
98
|
// TODO: it is not very likely, but different client could have different auth
|
|
99
99
|
const auth = getAuthentication(this.program, this.serviceNamespace);
|
|
@@ -116,7 +116,7 @@ export class CodeModelBuilder {
|
|
|
116
116
|
let parameter;
|
|
117
117
|
sdkPathParameters.forEach((arg) => {
|
|
118
118
|
var _a;
|
|
119
|
-
if (arg
|
|
119
|
+
if (this.isApiVersionParameter(arg)) {
|
|
120
120
|
parameter = this.createApiVersionParameter(arg.name, ParameterLocation.Uri);
|
|
121
121
|
}
|
|
122
122
|
else {
|
|
@@ -589,7 +589,6 @@ export class CodeModelBuilder {
|
|
|
589
589
|
const operationName = sdkMethod.name;
|
|
590
590
|
const httpOperation = sdkMethod.operation;
|
|
591
591
|
const operationId = groupName ? `${groupName}_${operationName}` : `${operationName}`;
|
|
592
|
-
const operationGroup = this.codeModel.getOperationGroup(groupName);
|
|
593
592
|
const operationExamples = this.getOperationExample(sdkMethod);
|
|
594
593
|
const codeModelOperation = new CodeModelOperation(operationName, (_a = sdkMethod.doc) !== null && _a !== void 0 ? _a : "", {
|
|
595
594
|
operationId: operationId,
|
|
@@ -711,7 +710,6 @@ export class CodeModelBuilder {
|
|
|
711
710
|
this.processRouteForPaged(codeModelOperation, sdkMethod);
|
|
712
711
|
// check for long-running operation
|
|
713
712
|
this.processRouteForLongRunning(codeModelOperation, lroMetadata);
|
|
714
|
-
operationGroup.addOperation(codeModelOperation);
|
|
715
713
|
return codeModelOperation;
|
|
716
714
|
}
|
|
717
715
|
processRouteForPaged(op, sdkMethod) {
|
|
@@ -920,7 +918,7 @@ export class CodeModelBuilder {
|
|
|
920
918
|
}
|
|
921
919
|
processParameter(op, param, clientContext) {
|
|
922
920
|
var _a, _b, _c;
|
|
923
|
-
if (clientContext.apiVersions && param
|
|
921
|
+
if (clientContext.apiVersions && this.isApiVersionParameter(param) && param.kind !== "cookie") {
|
|
924
922
|
// pre-condition for "isApiVersion": the client supports ApiVersions
|
|
925
923
|
if (this.isArm()) {
|
|
926
924
|
// Currently we assume ARM tsp only have one client and one api-version.
|
|
@@ -2294,7 +2292,7 @@ export class CodeModelBuilder {
|
|
|
2294
2292
|
if (!baseJavaNamespace) {
|
|
2295
2293
|
baseJavaNamespace = this.namespace;
|
|
2296
2294
|
}
|
|
2297
|
-
return baseJavaNamespace.toLowerCase();
|
|
2295
|
+
return this.escapeJavaNamespace(baseJavaNamespace.toLowerCase());
|
|
2298
2296
|
}
|
|
2299
2297
|
getJavaNamespace(type = undefined) {
|
|
2300
2298
|
// clientNamespace from TCGC
|
|
@@ -2344,7 +2342,27 @@ export class CodeModelBuilder {
|
|
|
2344
2342
|
return this.baseJavaNamespace;
|
|
2345
2343
|
}
|
|
2346
2344
|
else {
|
|
2347
|
-
return clientNamespace.toLowerCase();
|
|
2345
|
+
return this.escapeJavaNamespace(clientNamespace.toLowerCase());
|
|
2346
|
+
}
|
|
2347
|
+
}
|
|
2348
|
+
escapeJavaNamespace(namespace) {
|
|
2349
|
+
if (this.javaNamespaceCache.has(namespace)) {
|
|
2350
|
+
return this.javaNamespaceCache.get(namespace);
|
|
2351
|
+
}
|
|
2352
|
+
else {
|
|
2353
|
+
const processedJavaNamespace = namespace
|
|
2354
|
+
.split(".")
|
|
2355
|
+
.map((segment) => escapeJavaKeywords(segment, "namespace"))
|
|
2356
|
+
.join(".");
|
|
2357
|
+
if (processedJavaNamespace !== namespace) {
|
|
2358
|
+
reportDiagnostic(this.program, {
|
|
2359
|
+
code: "invalid-java-namespace",
|
|
2360
|
+
format: { namespace: namespace, processedNamespace: processedJavaNamespace },
|
|
2361
|
+
target: NoTarget,
|
|
2362
|
+
});
|
|
2363
|
+
}
|
|
2364
|
+
this.javaNamespaceCache.set(namespace, processedJavaNamespace);
|
|
2365
|
+
return processedJavaNamespace;
|
|
2348
2366
|
}
|
|
2349
2367
|
}
|
|
2350
2368
|
trace(msg) {
|
|
@@ -2396,6 +2414,9 @@ export class CodeModelBuilder {
|
|
|
2396
2414
|
},
|
|
2397
2415
|
});
|
|
2398
2416
|
}
|
|
2417
|
+
isApiVersionParameter(param) {
|
|
2418
|
+
return param.isApiVersionParam;
|
|
2419
|
+
}
|
|
2399
2420
|
getApiVersionParameter(param) {
|
|
2400
2421
|
// apiVersionParameter is cached by param.kind
|
|
2401
2422
|
// we didn't expect Azure service have more than 1 type of api-version, and certainly not more than 1 of each kind.
|