@azure-tools/typespec-go 0.8.2 → 0.8.4
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/README.md +7 -1
- package/dist/codegen.go/src/clientFactory.d.ts.map +1 -1
- package/dist/codegen.go/src/clientFactory.js +33 -18
- package/dist/codegen.go/src/clientFactory.js.map +1 -1
- package/dist/codegen.go/src/cloudConfig.d.ts +10 -0
- package/dist/codegen.go/src/cloudConfig.d.ts.map +1 -0
- package/dist/codegen.go/src/cloudConfig.js +70 -0
- package/dist/codegen.go/src/cloudConfig.js.map +1 -0
- package/dist/codegen.go/src/example.d.ts.map +1 -1
- package/dist/codegen.go/src/example.js +104 -109
- package/dist/codegen.go/src/example.js.map +1 -1
- package/dist/codegen.go/src/fake/factory.d.ts.map +1 -1
- package/dist/codegen.go/src/fake/factory.js +11 -2
- package/dist/codegen.go/src/fake/factory.js.map +1 -1
- package/dist/codegen.go/src/fake/servers.d.ts.map +1 -1
- package/dist/codegen.go/src/fake/servers.js +58 -65
- package/dist/codegen.go/src/fake/servers.js.map +1 -1
- package/dist/codegen.go/src/gomod.js +1 -1
- package/dist/codegen.go/src/helpers.d.ts +45 -3
- package/dist/codegen.go/src/helpers.d.ts.map +1 -1
- package/dist/codegen.go/src/helpers.js +119 -33
- package/dist/codegen.go/src/helpers.js.map +1 -1
- package/dist/codegen.go/src/imports.d.ts +1 -1
- package/dist/codegen.go/src/imports.d.ts.map +1 -1
- package/dist/codegen.go/src/imports.js +4 -6
- package/dist/codegen.go/src/imports.js.map +1 -1
- package/dist/codegen.go/src/license.d.ts +10 -0
- package/dist/codegen.go/src/license.d.ts.map +1 -0
- package/dist/codegen.go/src/license.js +45 -0
- package/dist/codegen.go/src/license.js.map +1 -0
- package/dist/codegen.go/src/models.d.ts +0 -1
- package/dist/codegen.go/src/models.d.ts.map +1 -1
- package/dist/codegen.go/src/models.js +1 -7
- package/dist/codegen.go/src/models.js.map +1 -1
- package/dist/codegen.go/src/operations.d.ts.map +1 -1
- package/dist/codegen.go/src/operations.js +359 -146
- package/dist/codegen.go/src/operations.js.map +1 -1
- package/dist/codegen.go/src/responses.d.ts.map +1 -1
- package/dist/codegen.go/src/responses.js +2 -3
- package/dist/codegen.go/src/responses.js.map +1 -1
- package/dist/codemodel.go/src/client.d.ts +109 -35
- package/dist/codemodel.go/src/client.d.ts.map +1 -1
- package/dist/codemodel.go/src/client.js +71 -19
- package/dist/codemodel.go/src/client.js.map +1 -1
- package/dist/codemodel.go/src/examples.d.ts +17 -18
- package/dist/codemodel.go/src/examples.d.ts.map +1 -1
- package/dist/codemodel.go/src/examples.js +6 -7
- package/dist/codemodel.go/src/examples.js.map +1 -1
- package/dist/codemodel.go/src/index.d.ts +1 -0
- package/dist/codemodel.go/src/index.d.ts.map +1 -1
- package/dist/codemodel.go/src/index.js +1 -0
- package/dist/codemodel.go/src/index.js.map +1 -1
- package/dist/codemodel.go/src/method.d.ts +44 -0
- package/dist/codemodel.go/src/method.d.ts.map +1 -0
- package/dist/codemodel.go/src/method.js +30 -0
- package/dist/codemodel.go/src/method.js.map +1 -0
- package/dist/codemodel.go/src/package.d.ts +7 -0
- package/dist/codemodel.go/src/package.d.ts.map +1 -1
- package/dist/codemodel.go/src/package.js +8 -0
- package/dist/codemodel.go/src/package.js.map +1 -1
- package/dist/codemodel.go/src/param.d.ts +58 -45
- package/dist/codemodel.go/src/param.d.ts.map +1 -1
- package/dist/codemodel.go/src/param.js +28 -30
- package/dist/codemodel.go/src/param.js.map +1 -1
- package/dist/codemodel.go/src/result.d.ts +1 -1
- package/dist/codemodel.go/src/result.d.ts.map +1 -1
- package/dist/codemodel.go/src/result.js +1 -1
- package/dist/codemodel.go/src/result.js.map +1 -1
- package/dist/codemodel.go/src/type.d.ts +85 -28
- package/dist/codemodel.go/src/type.d.ts.map +1 -1
- package/dist/codemodel.go/src/type.js +71 -21
- package/dist/codemodel.go/src/type.js.map +1 -1
- package/dist/naming.go/src/index.d.ts +3 -0
- package/dist/naming.go/src/index.d.ts.map +1 -0
- package/dist/naming.go/src/index.js +7 -0
- package/dist/naming.go/src/index.js.map +1 -0
- package/dist/naming.go/src/mappings.d.ts +1 -0
- package/dist/naming.go/src/mappings.d.ts.map +1 -1
- package/dist/naming.go/src/mappings.js +5 -1
- package/dist/naming.go/src/mappings.js.map +1 -1
- package/dist/typespec-go/src/emitter.d.ts +9 -0
- package/dist/typespec-go/src/emitter.d.ts.map +1 -1
- package/dist/typespec-go/src/emitter.js +44 -1
- package/dist/typespec-go/src/emitter.js.map +1 -1
- package/dist/typespec-go/src/lib.d.ts +1 -0
- package/dist/typespec-go/src/lib.d.ts.map +1 -1
- package/dist/typespec-go/src/lib.js +5 -0
- package/dist/typespec-go/src/lib.js.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/adapter.d.ts.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/adapter.js +17 -12
- package/dist/typespec-go/src/tcgcadapter/adapter.js.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/clients.d.ts +18 -2
- package/dist/typespec-go/src/tcgcadapter/clients.d.ts.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/clients.js +290 -62
- package/dist/typespec-go/src/tcgcadapter/clients.js.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/types.d.ts +7 -0
- package/dist/typespec-go/src/tcgcadapter/types.d.ts.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/types.js +17 -10
- package/dist/typespec-go/src/tcgcadapter/types.js.map +1 -1
- package/package.json +22 -21
package/README.md
CHANGED
|
@@ -96,6 +96,12 @@ Enables generation of spans for distributed tracing. The default is false.
|
|
|
96
96
|
|
|
97
97
|
The module identity to use in go.mod. Mutually exclusive with containing-module.
|
|
98
98
|
|
|
99
|
+
### `omit-constructors`
|
|
100
|
+
|
|
101
|
+
**Type:** `boolean`
|
|
102
|
+
|
|
103
|
+
When true, client constructors are not emitted. The default is false.
|
|
104
|
+
|
|
99
105
|
### `rawjson-as-bytes`
|
|
100
106
|
|
|
101
107
|
**Type:** `boolean`
|
|
@@ -142,4 +148,4 @@ When true, generate example tests. The default is false.
|
|
|
142
148
|
|
|
143
149
|
**Type:** `boolean`
|
|
144
150
|
|
|
145
|
-
When true, the `NewClientFactory` constructor gathers all parameters. When false, it only gathers common parameters of clients. The default is true.
|
|
151
|
+
When true, the `NewClientFactory` constructor gathers all parameters. When false, it only gathers common parameters of clients. The default is true.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clientFactory.d.ts","sourceRoot":"","sources":["../../../../codegen.go/src/clientFactory.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"clientFactory.d.ts","sourceRoot":"","sources":["../../../../codegen.go/src/clientFactory.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAKtD,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAiHpF"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
import
|
|
5
|
+
import * as go from '../../codemodel.go/src/index.js';
|
|
6
6
|
import * as helpers from './helpers.js';
|
|
7
7
|
import { ImportManager } from './imports.js';
|
|
8
8
|
// Creates the content for client_factory.go (ARM only)
|
|
@@ -30,7 +30,11 @@ export async function generateClientFactory(codeModel) {
|
|
|
30
30
|
result += '// ClientFactory is a client factory used to create any client in this module.\n';
|
|
31
31
|
result += '// Don\'t use this type directly, use NewClientFactory instead.\n';
|
|
32
32
|
result += 'type ClientFactory struct {\n';
|
|
33
|
-
for (const clientParam of
|
|
33
|
+
for (const clientParam of clientFactoryParams) {
|
|
34
|
+
if (clientParam.kind === 'credentialParam') {
|
|
35
|
+
// credentials aren't persisted on the client
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
34
38
|
result += `\t${clientParam.name} ${helpers.formatParameterTypeName(clientParam)}\n`;
|
|
35
39
|
}
|
|
36
40
|
result += '\tinternal *arm.Client\n';
|
|
@@ -39,18 +43,22 @@ export async function generateClientFactory(codeModel) {
|
|
|
39
43
|
imports.add('github.com/Azure/azure-sdk-for-go/sdk/azcore/arm');
|
|
40
44
|
result += '// NewClientFactory creates a new instance of ClientFactory with the specified values.\n';
|
|
41
45
|
result += '// The parameter values will be propagated to any client created from this factory.\n';
|
|
42
|
-
for (const clientParam of
|
|
46
|
+
for (const clientParam of clientFactoryParams) {
|
|
43
47
|
result += helpers.formatCommentAsBulletItem(clientParam.name, clientParam.docs);
|
|
44
48
|
}
|
|
45
49
|
result += helpers.formatCommentAsBulletItem('credential', { summary: 'used to authorize requests. Usually a credential from azidentity.' });
|
|
46
50
|
result += helpers.formatCommentAsBulletItem('options', { summary: 'pass nil to accept the default values.' });
|
|
47
|
-
result += `func NewClientFactory(${clientFactoryParams.map(param => { return `${param.name} ${helpers.formatParameterTypeName(param)}`; }).join(', ')}${clientFactoryParams.length > 0 ? ',' : ''}
|
|
51
|
+
result += `func NewClientFactory(${clientFactoryParams.map(param => { return `${param.name} ${helpers.formatParameterTypeName(param)}`; }).join(', ')}${clientFactoryParams.length > 0 ? ',' : ''} options *arm.ClientOptions) (*ClientFactory, error) {\n`;
|
|
48
52
|
result += '\tinternal, err := arm.NewClient(moduleName, moduleVersion, credential, options)\n';
|
|
49
53
|
result += '\tif err != nil {\n';
|
|
50
54
|
result += '\t\treturn nil, err\n';
|
|
51
55
|
result += '\t}\n';
|
|
52
56
|
result += '\treturn &ClientFactory{\n';
|
|
53
|
-
for (const clientParam of
|
|
57
|
+
for (const clientParam of clientFactoryParams) {
|
|
58
|
+
if (clientParam.kind === 'credentialParam') {
|
|
59
|
+
// credentials aren't persisted on the client
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
54
62
|
result += `\t\t${clientParam.name}: ${clientParam.name},\n`;
|
|
55
63
|
}
|
|
56
64
|
result += '\t\tinternal: internal,\n';
|
|
@@ -60,12 +68,19 @@ export async function generateClientFactory(codeModel) {
|
|
|
60
68
|
for (const client of codeModel.clients) {
|
|
61
69
|
const clientPrivateParams = new Array();
|
|
62
70
|
const clientCommonParams = new Array();
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
71
|
+
if (client.instance?.kind === 'constructable') {
|
|
72
|
+
for (const ctor of client.instance.constructors) {
|
|
73
|
+
for (const param of ctor.parameters) {
|
|
74
|
+
if (go.isAPIVersionParameter(param)) {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
else if (clientFactoryParamsMap.has(param.name)) {
|
|
78
|
+
clientCommonParams.push(param);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
clientPrivateParams.push(param);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
69
84
|
}
|
|
70
85
|
}
|
|
71
86
|
const ctorName = `New${client.name}`;
|
|
@@ -79,15 +94,15 @@ export async function generateClientFactory(codeModel) {
|
|
|
79
94
|
result += `) *${client.name} {\n`;
|
|
80
95
|
result += `\treturn &${client.name}{\n`;
|
|
81
96
|
// some clients (e.g. operations client) don't utilize the client params
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
result += `\t\t${clientParam.name}: ${clientParam.name},\n`;
|
|
85
|
-
}
|
|
97
|
+
for (const clientParam of clientPrivateParams) {
|
|
98
|
+
result += `\t\t${clientParam.name}: ${clientParam.name},\n`;
|
|
86
99
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
100
|
+
for (const clientParam of clientCommonParams) {
|
|
101
|
+
if (clientParam.kind === 'credentialParam') {
|
|
102
|
+
// credentials aren't persisted on the client
|
|
103
|
+
continue;
|
|
90
104
|
}
|
|
105
|
+
result += `\t\t${clientParam.name}: c.${clientParam.name},\n`;
|
|
91
106
|
}
|
|
92
107
|
result += '\t\tinternal: c.internal,\n';
|
|
93
108
|
result += '\t}\n';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clientFactory.js","sourceRoot":"","sources":["../../../../codegen.go/src/clientFactory.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;
|
|
1
|
+
{"version":3,"file":"clientFactory.js","sourceRoot":"","sources":["../../../../codegen.go/src/clientFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as go from '../../codemodel.go/src/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* generates the contents for the cloud_config.go file.
|
|
4
|
+
* if cloud config info isn't required, the empty string is returned.
|
|
5
|
+
*
|
|
6
|
+
* @param codeModel the code model for which to generate the file
|
|
7
|
+
* @returns the text for the file or the empty string
|
|
8
|
+
*/
|
|
9
|
+
export declare function generateCloudConfig(codeModel: go.CodeModel): string;
|
|
10
|
+
//# sourceMappingURL=cloudConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudConfig.d.ts","sourceRoot":"","sources":["../../../../codegen.go/src/cloudConfig.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAEtD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,GAAG,MAAM,CA8DnE"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import * as helpers from './helpers.js';
|
|
6
|
+
/**
|
|
7
|
+
* generates the contents for the cloud_config.go file.
|
|
8
|
+
* if cloud config info isn't required, the empty string is returned.
|
|
9
|
+
*
|
|
10
|
+
* @param codeModel the code model for which to generate the file
|
|
11
|
+
* @returns the text for the file or the empty string
|
|
12
|
+
*/
|
|
13
|
+
export function generateCloudConfig(codeModel) {
|
|
14
|
+
if (codeModel.type === 'azure-arm') {
|
|
15
|
+
// this is handled in azcore
|
|
16
|
+
return '';
|
|
17
|
+
}
|
|
18
|
+
// check if this SDK uses token auth
|
|
19
|
+
let tokenCred;
|
|
20
|
+
for (const client of codeModel.clients) {
|
|
21
|
+
if (client.instance?.kind !== 'constructable') {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
for (const constructor of client.instance.constructors) {
|
|
25
|
+
for (const param of constructor.parameters) {
|
|
26
|
+
if (param.kind === 'credentialParam' && param.type.kind === 'tokenCredential') {
|
|
27
|
+
tokenCred = param.type;
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (tokenCred) {
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (tokenCred) {
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (!tokenCred) {
|
|
40
|
+
// cloud config is only required for token auth
|
|
41
|
+
return '';
|
|
42
|
+
}
|
|
43
|
+
let cloudConfig = helpers.contentPreamble(codeModel);
|
|
44
|
+
cloudConfig += 'import "github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud"\n\n';
|
|
45
|
+
cloudConfig += '// ServiceName is the [cloud.ServiceName] for this module, used to identify the respective [cloud.ServiceConfiguration].\n';
|
|
46
|
+
let serviceName;
|
|
47
|
+
if (codeModel.options.module) {
|
|
48
|
+
serviceName = codeModel.options.module;
|
|
49
|
+
}
|
|
50
|
+
else if (codeModel.options.containingModule) {
|
|
51
|
+
serviceName = `${codeModel.options.containingModule}/${codeModel.packageName}`;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
throw new Error('unreachable');
|
|
55
|
+
}
|
|
56
|
+
const azureSdkPrefix = 'github.com/Azure/azure-sdk-for-go/sdk/';
|
|
57
|
+
if (serviceName.startsWith(azureSdkPrefix)) {
|
|
58
|
+
serviceName = serviceName.substring(azureSdkPrefix.length);
|
|
59
|
+
}
|
|
60
|
+
cloudConfig += `const ServiceName cloud.ServiceName = "${serviceName}"\n\n`;
|
|
61
|
+
// we omit the Endpoint field as all client constructors take an endpoint parameter
|
|
62
|
+
cloudConfig += `func init() {\n`;
|
|
63
|
+
cloudConfig += 'cloud.AzurePublic.Services[ServiceName] = cloud.ServiceConfiguration{\n';
|
|
64
|
+
// we assume a single scope. this is enforced when adapting the data from tcgc
|
|
65
|
+
cloudConfig += `\t\tAudience: "${helpers.splitScope(tokenCred.scopes[0]).audience}",\n`;
|
|
66
|
+
cloudConfig += '\t}\n';
|
|
67
|
+
cloudConfig += `}\n\n`;
|
|
68
|
+
return cloudConfig;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=cloudConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudConfig.js","sourceRoot":"","sources":["../../../../codegen.go/src/cloudConfig.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AAGxC;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAuB;IACzD,IAAI,SAAS,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACnC,4BAA4B;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,oCAAoC;IACpC,IAAI,SAAyC,CAAC;IAC9C,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACvC,IAAI,MAAM,CAAC,QAAQ,EAAE,IAAI,KAAK,eAAe,EAAE,CAAC;YAC9C,SAAS;QACX,CAAC;QACD,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;YACvD,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;gBAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;oBAC9E,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;oBACvB,MAAM;gBACR,CAAC;YACH,CAAC;YACD,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM;YACR,CAAC;QACH,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,+CAA+C;QAC/C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IACrD,WAAW,IAAI,iEAAiE,CAAC;IAEjF,WAAW,IAAI,4HAA4H,CAAC;IAE5I,IAAI,WAAmB,CAAC;IACxB,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAC7B,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;IACzC,CAAC;SAAM,IAAI,SAAS,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC9C,WAAW,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,gBAAgB,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;IACjF,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,cAAc,GAAG,wCAAwC,CAAC;IAChE,IAAI,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAC3C,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC;IACD,WAAW,IAAI,0CAA0C,WAAW,OAAO,CAAC;IAE5E,mFAAmF;IACnF,WAAW,IAAI,iBAAiB,CAAC;IACjC,WAAW,IAAI,yEAAyE,CAAC;IACzF,8EAA8E;IAC9E,WAAW,IAAI,kBAAkB,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,MAAM,CAAC;IACxF,WAAW,IAAI,OAAO,CAAC;IACvB,WAAW,IAAI,OAAO,CAAC;IAEvB,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"example.d.ts","sourceRoot":"","sources":["../../../../codegen.go/src/example.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAOtD,qBAAa,cAAc;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEb,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI1C;AAGD,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"example.d.ts","sourceRoot":"","sources":["../../../../codegen.go/src/example.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAOtD,qBAAa,cAAc;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEb,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI1C;AAGD,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CA0M9F"}
|
|
@@ -26,6 +26,10 @@ export async function generateExamples(codeModel) {
|
|
|
26
26
|
}
|
|
27
27
|
const azureARM = codeModel.type === 'azure-arm';
|
|
28
28
|
for (const client of codeModel.clients) {
|
|
29
|
+
// client must be constructable to create a sample
|
|
30
|
+
if (client.instance?.kind != 'constructable') {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
29
33
|
const imports = new ImportManager();
|
|
30
34
|
// the list of packages to import
|
|
31
35
|
if (client.methods.length > 0) {
|
|
@@ -87,11 +91,11 @@ export async function generateExamples(codeModel) {
|
|
|
87
91
|
clientFactoryParamsExample.push({ parameter: clientParam, value: generateFakeExample(clientParam.type, clientParam.name) });
|
|
88
92
|
}
|
|
89
93
|
}
|
|
90
|
-
exampleText += `\tclientFactory, err := ${codeModel.packageName}.NewClientFactory(${clientFactoryParamsExample.map(p => getExampleValue(codeModel, p.value, '\t', imports,
|
|
94
|
+
exampleText += `\tclientFactory, err := ${codeModel.packageName}.NewClientFactory(${clientFactoryParamsExample.map(p => getExampleValue(codeModel, p.value, '\t', imports, p.parameter.byValue)).join(', ')}, nil)\n`;
|
|
91
95
|
exampleText += `\tif err != nil {\n`;
|
|
92
96
|
exampleText += `\t\tlog.Fatalf("failed to create client: %v", err)\n`;
|
|
93
97
|
exampleText += `\t}\n`;
|
|
94
|
-
clientRef = `clientFactory.${client.constructors[0]
|
|
98
|
+
clientRef = `clientFactory.${client.instance.constructors[0].name}(`;
|
|
95
99
|
const clientPrivateParameters = [];
|
|
96
100
|
for (const clientParam of clientParameters) {
|
|
97
101
|
if (!clientFactoryParamsMap.has(clientParam.parameter.name)) {
|
|
@@ -99,12 +103,12 @@ export async function generateExamples(codeModel) {
|
|
|
99
103
|
}
|
|
100
104
|
}
|
|
101
105
|
if (clientPrivateParameters.length > 0) {
|
|
102
|
-
clientRef += `${clientPrivateParameters.map(p => getExampleValue(codeModel, p.value, '\t', imports,
|
|
106
|
+
clientRef += `${clientPrivateParameters.map(p => getExampleValue(codeModel, p.value, '\t', imports, p.parameter.byValue).slice(1)).join(', ')}`;
|
|
103
107
|
}
|
|
104
108
|
clientRef += `)`;
|
|
105
109
|
}
|
|
106
110
|
else {
|
|
107
|
-
exampleText += `\tclient, err := ${codeModel.packageName}.${client.constructors[0]
|
|
111
|
+
exampleText += `\tclient, err := ${codeModel.packageName}.${client.instance.constructors[0].name}(${clientParameters.map(p => getExampleValue(codeModel, p.value, '\t', imports, p.parameter.byValue).slice(1)).join(', ')}, cred, nil)\n`;
|
|
108
112
|
exampleText += `\tif err != nil {\n`;
|
|
109
113
|
exampleText += `\t\tlog.Fatalf("failed to create client: %v", err)\n`;
|
|
110
114
|
exampleText += `\t}\n`;
|
|
@@ -125,13 +129,13 @@ export async function generateExamples(codeModel) {
|
|
|
125
129
|
let methodOptionalParametersText = 'nil';
|
|
126
130
|
if (methodOptionalParameters.length > 0) {
|
|
127
131
|
methodOptionalParametersText = `&${codeModel.packageName}.${method.optionalParamsGroup.groupName}{\n`;
|
|
128
|
-
methodOptionalParametersText += methodOptionalParameters.map(p => `${capitalize(p.parameter.name)}: ${getExampleValue(codeModel, p.value, '\t', imports,
|
|
132
|
+
methodOptionalParametersText += methodOptionalParameters.map(p => `${capitalize(p.parameter.name)}: ${getExampleValue(codeModel, p.value, '\t', imports, p.parameter.byValue).slice(1)}`).join(',\n');
|
|
129
133
|
methodOptionalParametersText += `}`;
|
|
130
134
|
}
|
|
131
135
|
switch (method.kind) {
|
|
132
136
|
case 'lroMethod':
|
|
133
137
|
case 'lroPageableMethod':
|
|
134
|
-
exampleText += `\tpoller, err := ${clientRef}.${fixUpMethodName(method)}(ctx, ${methodParameters.map(p => getExampleValue(codeModel, p.value, '\t', imports,
|
|
138
|
+
exampleText += `\tpoller, err := ${clientRef}.${fixUpMethodName(method)}(ctx, ${methodParameters.map(p => getExampleValue(codeModel, p.value, '\t', imports, p.parameter.byValue).slice(1)).join(', ')}${methodParameters.length > 0 ? ', ' : ''}${methodOptionalParametersText.split('\n').join('\n\t')})\n`;
|
|
135
139
|
exampleText += `\tif err != nil {\n`;
|
|
136
140
|
exampleText += `\t\tlog.Fatalf("failed to finish the request: %v", err)\n`;
|
|
137
141
|
exampleText += `\t}\n`;
|
|
@@ -141,13 +145,13 @@ export async function generateExamples(codeModel) {
|
|
|
141
145
|
exampleText += `\t}\n`;
|
|
142
146
|
break;
|
|
143
147
|
case 'method':
|
|
144
|
-
exampleText += `\t${checkResponse ? 'res' : '_'}, err ${checkResponse ? ':=' : '='} ${clientRef}.${fixUpMethodName(method)}(ctx, ${methodParameters.map(p => getExampleValue(codeModel, p.value, '\t', imports,
|
|
148
|
+
exampleText += `\t${checkResponse ? 'res' : '_'}, err ${checkResponse ? ':=' : '='} ${clientRef}.${fixUpMethodName(method)}(ctx, ${methodParameters.map(p => getExampleValue(codeModel, p.value, '\t', imports, p.parameter.byValue).slice(1)).join(', ')}${methodParameters.length > 0 ? ', ' : ''}${methodOptionalParametersText.split('\n').join('\n\t')})\n`;
|
|
145
149
|
exampleText += `\tif err != nil {\n`;
|
|
146
150
|
exampleText += `\t\tlog.Fatalf("failed to finish the request: %v", err)\n`;
|
|
147
151
|
exampleText += `\t}\n`;
|
|
148
152
|
break;
|
|
149
153
|
case 'pageableMethod':
|
|
150
|
-
exampleText += `\tpager := ${clientRef}.${fixUpMethodName(method)}(${methodParameters.map(p => getExampleValue(codeModel, p.value, '\t', imports,
|
|
154
|
+
exampleText += `\tpager := ${clientRef}.${fixUpMethodName(method)}(${methodParameters.map(p => getExampleValue(codeModel, p.value, '\t', imports, p.parameter.byValue).slice(1)).join(', ')}${methodParameters.length > 0 ? ', ' : ''}${methodOptionalParametersText.split('\n').join('\n\t')})\n`;
|
|
151
155
|
break;
|
|
152
156
|
default:
|
|
153
157
|
method;
|
|
@@ -158,7 +162,7 @@ export async function generateExamples(codeModel) {
|
|
|
158
162
|
if (method.kind === 'lroPageableMethod') {
|
|
159
163
|
resultName = 'res';
|
|
160
164
|
}
|
|
161
|
-
const itemType = method.
|
|
165
|
+
const itemType = method.returns.result.modelType.fields.find(f => f.type.kind === 'slice');
|
|
162
166
|
exampleText += `\tfor ${resultName}.More() {\n`;
|
|
163
167
|
exampleText += `\t\tpage, err := ${resultName}.NextPage(ctx)\n`;
|
|
164
168
|
exampleText += `\t\tif err != nil {\n`;
|
|
@@ -179,7 +183,7 @@ export async function generateExamples(codeModel) {
|
|
|
179
183
|
}
|
|
180
184
|
else if (checkResponse) {
|
|
181
185
|
// if has fieldName, then the result is not a model type
|
|
182
|
-
const fieldName = method.
|
|
186
|
+
const fieldName = method.returns.fieldName;
|
|
183
187
|
exampleText += `\t// You could use response here. We use blank identifier for just demo purposes.\n`;
|
|
184
188
|
exampleText += `\t_ = res\n`;
|
|
185
189
|
exampleText += `\t// If the HTTP response code is 200 as defined in example definition, your response structure would look as follows. Please pay attention that all the values in the output are fake values for just demo purposes.\n`;
|
|
@@ -207,115 +211,103 @@ export async function generateExamples(codeModel) {
|
|
|
207
211
|
return examples;
|
|
208
212
|
}
|
|
209
213
|
function getExampleValue(codeModel, example, indent, imports, byValue = false, inArray = false) {
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
}
|
|
218
|
-
else if (example.type.kind === 'encodedBytes') {
|
|
219
|
-
exampleText = `[]byte("${escapeString(example.value)}")`;
|
|
220
|
-
}
|
|
221
|
-
else if (example.type.kind === 'literal' && example.type.type.kind === 'constant') {
|
|
222
|
-
exampleText = getConstantValue(codeModel, example.type.type, example.type.literal.value);
|
|
223
|
-
}
|
|
224
|
-
return `${indent}${getPointerValue(example.type, exampleText, byValue, imports)}`;
|
|
225
|
-
}
|
|
226
|
-
else if (example.kind === 'number') {
|
|
227
|
-
let exampleText = `${example.value}`;
|
|
228
|
-
switch (example.type.kind) {
|
|
229
|
-
case 'constant':
|
|
230
|
-
exampleText = `${indent}${getConstantValue(codeModel, example.type, example.value)}`;
|
|
231
|
-
break;
|
|
232
|
-
case 'time':
|
|
214
|
+
switch (example.kind) {
|
|
215
|
+
case 'string': {
|
|
216
|
+
let exampleText = `"${escapeString(example.value)}"`;
|
|
217
|
+
if (example.type.kind === 'constant') {
|
|
218
|
+
exampleText = getConstantValue(codeModel, example.type, example.value);
|
|
219
|
+
}
|
|
220
|
+
else if (example.type.kind === 'time') {
|
|
233
221
|
exampleText = getTimeValue(example.type, example.value, imports);
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
222
|
+
}
|
|
223
|
+
else if (example.type.kind === 'encodedBytes') {
|
|
224
|
+
exampleText = `[]byte("${escapeString(example.value)}")`;
|
|
225
|
+
}
|
|
226
|
+
else if (example.type.kind === 'literal' && example.type.type.kind === 'constant') {
|
|
227
|
+
exampleText = getConstantValue(codeModel, example.type.type, example.type.literal.value);
|
|
228
|
+
}
|
|
229
|
+
else if (example.type.kind === 'etag') {
|
|
230
|
+
imports?.add(example.type.module);
|
|
231
|
+
return `${indent}${getRef(byValue)}${go.getTypeDeclaration(example.type, codeModel.packageName)}(${jsonToGo(example.value, '')})`;
|
|
232
|
+
}
|
|
233
|
+
return `${indent}${getPointerValue(example.type, exampleText, byValue, imports)}`;
|
|
242
234
|
}
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
// if other case, no need to add type name in array, so inArray will be set to true
|
|
255
|
-
const isElementPolymorphic = example.type.elementType.kind === 'interface';
|
|
256
|
-
let exampleText = `${indent}${getRef(byValue)}${go.getTypeDeclaration(example.type, codeModel.packageName)}{\n`;
|
|
257
|
-
for (const element of example.value) {
|
|
258
|
-
exampleText += `${getExampleValue(codeModel, element, indent + '\t', imports, isElementByValue && !isElementPolymorphic, !isElementPolymorphic)},\n`;
|
|
235
|
+
case 'number': {
|
|
236
|
+
let exampleText = `${example.value}`;
|
|
237
|
+
switch (example.type.kind) {
|
|
238
|
+
case 'constant':
|
|
239
|
+
exampleText = `${indent}${getConstantValue(codeModel, example.type, example.value)}`;
|
|
240
|
+
break;
|
|
241
|
+
case 'time':
|
|
242
|
+
exampleText = getTimeValue(example.type, example.value, imports);
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
return `${indent}${getPointerValue(example.type, exampleText, byValue, imports)}`;
|
|
259
246
|
}
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
const isValuePolymorphic = example.type.valueType.kind === 'interface';
|
|
267
|
-
for (const key in example.value) {
|
|
268
|
-
exampleText += `${indent}\t"${key}": ${getExampleValue(codeModel, example.value[key], indent + '\t', imports, isValueByValue && !isValuePolymorphic).slice(indent.length + 1)},\n`;
|
|
247
|
+
case 'boolean': {
|
|
248
|
+
let exampleText = `${example.value}`;
|
|
249
|
+
if (example.type.kind === 'constant') {
|
|
250
|
+
exampleText = `${indent}${getConstantValue(codeModel, example.type, example.value)}`;
|
|
251
|
+
}
|
|
252
|
+
return `${indent}${getPointerValue(example.type, exampleText, byValue, imports)}`;
|
|
269
253
|
}
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
254
|
+
case 'null':
|
|
255
|
+
return `${indent}nil`;
|
|
256
|
+
case 'any':
|
|
257
|
+
return jsonToGo(example.value, indent);
|
|
258
|
+
case 'array': {
|
|
259
|
+
const isElementByValue = example.type.elementTypeByValue;
|
|
260
|
+
// if polymorphic, need to add type name in array, so inArray will be set to false
|
|
261
|
+
// if other case, no need to add type name in array, so inArray will be set to true
|
|
262
|
+
const isElementPolymorphic = example.type.elementType.kind === 'interface';
|
|
263
|
+
let exampleText = `${indent}${getRef(byValue)}${go.getTypeDeclaration(example.type, codeModel.packageName)}{\n`;
|
|
264
|
+
for (const element of example.value) {
|
|
265
|
+
exampleText += `${getExampleValue(codeModel, element, indent + '\t', imports, isElementByValue && !isElementPolymorphic, !isElementPolymorphic)},\n`;
|
|
266
|
+
}
|
|
267
|
+
exampleText += `${indent}}`;
|
|
268
|
+
return exampleText;
|
|
278
269
|
}
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
const
|
|
282
|
-
const
|
|
283
|
-
|
|
270
|
+
case 'dictionary': {
|
|
271
|
+
let exampleText = `${indent}${getRef(byValue)}${go.getTypeDeclaration(example.type, codeModel.packageName)}{\n`;
|
|
272
|
+
const isValueByValue = example.type.valueTypeByValue;
|
|
273
|
+
const isValuePolymorphic = example.type.valueType.kind === 'interface';
|
|
274
|
+
for (const key in example.value) {
|
|
275
|
+
exampleText += `${indent}\t"${key}": ${getExampleValue(codeModel, example.value[key], indent + '\t', imports, isValueByValue && !isValuePolymorphic).slice(indent.length + 1)},\n`;
|
|
276
|
+
}
|
|
277
|
+
exampleText += `${indent}}`;
|
|
278
|
+
return exampleText;
|
|
284
279
|
}
|
|
285
|
-
|
|
286
|
-
const
|
|
287
|
-
|
|
288
|
-
|
|
280
|
+
case 'model': {
|
|
281
|
+
const isModelPolymorphic = example.type.kind === 'polymorphicModel';
|
|
282
|
+
let exampleText = `${indent}${getRef(byValue && !isModelPolymorphic)}${go.getTypeDeclaration(example.type, codeModel.packageName)}{\n`;
|
|
283
|
+
if (inArray) {
|
|
284
|
+
exampleText = `${indent}{\n`;
|
|
289
285
|
}
|
|
290
|
-
const
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
exampleText += `${indent}\t
|
|
286
|
+
for (const field in example.value) {
|
|
287
|
+
const goField = example.type.fields.find(f => f.name === field);
|
|
288
|
+
const isFieldByValue = goField.byValue ?? false;
|
|
289
|
+
const isFieldPolymorphic = goField.type.kind === 'interface';
|
|
290
|
+
exampleText += `${indent}\t${field}: ${getExampleValue(codeModel, example.value[field], indent + '\t', imports, isFieldByValue && !isFieldPolymorphic).slice(indent.length + 1)},\n`;
|
|
295
291
|
}
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
// TODO: support MultipartContent
|
|
312
|
-
throw new CodegenError('InternalError', `ReadSeekCloser example type is not supported yet`);
|
|
313
|
-
}
|
|
314
|
-
else {
|
|
315
|
-
throw new CodegenError('InternalError', `qualified example type ${example.type.exportName} is not supported yet`);
|
|
292
|
+
if (example.additionalProperties) {
|
|
293
|
+
const additionalPropertiesField = example.type.fields.find(f => f.annotations.isAdditionalProperties);
|
|
294
|
+
if (additionalPropertiesField.type.kind !== 'map') {
|
|
295
|
+
throw new CodegenError('InternalError', `additional properties field type should be map type`);
|
|
296
|
+
}
|
|
297
|
+
const isAdditionalPropertiesFieldByValue = additionalPropertiesField.type.valueTypeByValue ?? false;
|
|
298
|
+
const isAdditionalPropertiesPolymorphic = additionalPropertiesField.type.valueType.kind === 'interface';
|
|
299
|
+
exampleText += `${indent}\t${additionalPropertiesField.name}: ${getRef(additionalPropertiesField.byValue)}${go.getTypeDeclaration(additionalPropertiesField.type, codeModel.packageName)}{\n`;
|
|
300
|
+
for (const key in example.additionalProperties) {
|
|
301
|
+
exampleText += `${indent}\t"${key}": ${getExampleValue(codeModel, example.additionalProperties[key], indent + '\t', imports, isAdditionalPropertiesFieldByValue && !isAdditionalPropertiesPolymorphic).slice(indent.length + 1)},\n`;
|
|
302
|
+
}
|
|
303
|
+
exampleText += `${indent}},\n`;
|
|
304
|
+
}
|
|
305
|
+
exampleText += `${indent}}`;
|
|
306
|
+
return exampleText;
|
|
316
307
|
}
|
|
308
|
+
case 'tokenCredential':
|
|
309
|
+
return example.value;
|
|
317
310
|
}
|
|
318
|
-
return '';
|
|
319
311
|
}
|
|
320
312
|
function getRef(byValue) {
|
|
321
313
|
return byValue ? '' : '&';
|
|
@@ -455,6 +447,9 @@ function generateFakeExample(goType, name) {
|
|
|
455
447
|
}
|
|
456
448
|
case 'string':
|
|
457
449
|
return new go.StringExample(`<${name ?? 'test'}>`, goType);
|
|
450
|
+
case 'tokenCredential':
|
|
451
|
+
// we hard code the credential var name to cred
|
|
452
|
+
return new go.TokenCredentialExample('cred');
|
|
458
453
|
default:
|
|
459
454
|
throw new CodegenError('InternalError', `unhandled fake example kind ${goType.kind}`);
|
|
460
455
|
}
|