@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.
Files changed (100) hide show
  1. package/README.md +7 -1
  2. package/dist/codegen.go/src/clientFactory.d.ts.map +1 -1
  3. package/dist/codegen.go/src/clientFactory.js +33 -18
  4. package/dist/codegen.go/src/clientFactory.js.map +1 -1
  5. package/dist/codegen.go/src/cloudConfig.d.ts +10 -0
  6. package/dist/codegen.go/src/cloudConfig.d.ts.map +1 -0
  7. package/dist/codegen.go/src/cloudConfig.js +70 -0
  8. package/dist/codegen.go/src/cloudConfig.js.map +1 -0
  9. package/dist/codegen.go/src/example.d.ts.map +1 -1
  10. package/dist/codegen.go/src/example.js +104 -109
  11. package/dist/codegen.go/src/example.js.map +1 -1
  12. package/dist/codegen.go/src/fake/factory.d.ts.map +1 -1
  13. package/dist/codegen.go/src/fake/factory.js +11 -2
  14. package/dist/codegen.go/src/fake/factory.js.map +1 -1
  15. package/dist/codegen.go/src/fake/servers.d.ts.map +1 -1
  16. package/dist/codegen.go/src/fake/servers.js +58 -65
  17. package/dist/codegen.go/src/fake/servers.js.map +1 -1
  18. package/dist/codegen.go/src/gomod.js +1 -1
  19. package/dist/codegen.go/src/helpers.d.ts +45 -3
  20. package/dist/codegen.go/src/helpers.d.ts.map +1 -1
  21. package/dist/codegen.go/src/helpers.js +119 -33
  22. package/dist/codegen.go/src/helpers.js.map +1 -1
  23. package/dist/codegen.go/src/imports.d.ts +1 -1
  24. package/dist/codegen.go/src/imports.d.ts.map +1 -1
  25. package/dist/codegen.go/src/imports.js +4 -6
  26. package/dist/codegen.go/src/imports.js.map +1 -1
  27. package/dist/codegen.go/src/license.d.ts +10 -0
  28. package/dist/codegen.go/src/license.d.ts.map +1 -0
  29. package/dist/codegen.go/src/license.js +45 -0
  30. package/dist/codegen.go/src/license.js.map +1 -0
  31. package/dist/codegen.go/src/models.d.ts +0 -1
  32. package/dist/codegen.go/src/models.d.ts.map +1 -1
  33. package/dist/codegen.go/src/models.js +1 -7
  34. package/dist/codegen.go/src/models.js.map +1 -1
  35. package/dist/codegen.go/src/operations.d.ts.map +1 -1
  36. package/dist/codegen.go/src/operations.js +359 -146
  37. package/dist/codegen.go/src/operations.js.map +1 -1
  38. package/dist/codegen.go/src/responses.d.ts.map +1 -1
  39. package/dist/codegen.go/src/responses.js +2 -3
  40. package/dist/codegen.go/src/responses.js.map +1 -1
  41. package/dist/codemodel.go/src/client.d.ts +109 -35
  42. package/dist/codemodel.go/src/client.d.ts.map +1 -1
  43. package/dist/codemodel.go/src/client.js +71 -19
  44. package/dist/codemodel.go/src/client.js.map +1 -1
  45. package/dist/codemodel.go/src/examples.d.ts +17 -18
  46. package/dist/codemodel.go/src/examples.d.ts.map +1 -1
  47. package/dist/codemodel.go/src/examples.js +6 -7
  48. package/dist/codemodel.go/src/examples.js.map +1 -1
  49. package/dist/codemodel.go/src/index.d.ts +1 -0
  50. package/dist/codemodel.go/src/index.d.ts.map +1 -1
  51. package/dist/codemodel.go/src/index.js +1 -0
  52. package/dist/codemodel.go/src/index.js.map +1 -1
  53. package/dist/codemodel.go/src/method.d.ts +44 -0
  54. package/dist/codemodel.go/src/method.d.ts.map +1 -0
  55. package/dist/codemodel.go/src/method.js +30 -0
  56. package/dist/codemodel.go/src/method.js.map +1 -0
  57. package/dist/codemodel.go/src/package.d.ts +7 -0
  58. package/dist/codemodel.go/src/package.d.ts.map +1 -1
  59. package/dist/codemodel.go/src/package.js +8 -0
  60. package/dist/codemodel.go/src/package.js.map +1 -1
  61. package/dist/codemodel.go/src/param.d.ts +58 -45
  62. package/dist/codemodel.go/src/param.d.ts.map +1 -1
  63. package/dist/codemodel.go/src/param.js +28 -30
  64. package/dist/codemodel.go/src/param.js.map +1 -1
  65. package/dist/codemodel.go/src/result.d.ts +1 -1
  66. package/dist/codemodel.go/src/result.d.ts.map +1 -1
  67. package/dist/codemodel.go/src/result.js +1 -1
  68. package/dist/codemodel.go/src/result.js.map +1 -1
  69. package/dist/codemodel.go/src/type.d.ts +85 -28
  70. package/dist/codemodel.go/src/type.d.ts.map +1 -1
  71. package/dist/codemodel.go/src/type.js +71 -21
  72. package/dist/codemodel.go/src/type.js.map +1 -1
  73. package/dist/naming.go/src/index.d.ts +3 -0
  74. package/dist/naming.go/src/index.d.ts.map +1 -0
  75. package/dist/naming.go/src/index.js +7 -0
  76. package/dist/naming.go/src/index.js.map +1 -0
  77. package/dist/naming.go/src/mappings.d.ts +1 -0
  78. package/dist/naming.go/src/mappings.d.ts.map +1 -1
  79. package/dist/naming.go/src/mappings.js +5 -1
  80. package/dist/naming.go/src/mappings.js.map +1 -1
  81. package/dist/typespec-go/src/emitter.d.ts +9 -0
  82. package/dist/typespec-go/src/emitter.d.ts.map +1 -1
  83. package/dist/typespec-go/src/emitter.js +44 -1
  84. package/dist/typespec-go/src/emitter.js.map +1 -1
  85. package/dist/typespec-go/src/lib.d.ts +1 -0
  86. package/dist/typespec-go/src/lib.d.ts.map +1 -1
  87. package/dist/typespec-go/src/lib.js +5 -0
  88. package/dist/typespec-go/src/lib.js.map +1 -1
  89. package/dist/typespec-go/src/tcgcadapter/adapter.d.ts.map +1 -1
  90. package/dist/typespec-go/src/tcgcadapter/adapter.js +17 -12
  91. package/dist/typespec-go/src/tcgcadapter/adapter.js.map +1 -1
  92. package/dist/typespec-go/src/tcgcadapter/clients.d.ts +18 -2
  93. package/dist/typespec-go/src/tcgcadapter/clients.d.ts.map +1 -1
  94. package/dist/typespec-go/src/tcgcadapter/clients.js +290 -62
  95. package/dist/typespec-go/src/tcgcadapter/clients.js.map +1 -1
  96. package/dist/typespec-go/src/tcgcadapter/types.d.ts +7 -0
  97. package/dist/typespec-go/src/tcgcadapter/types.d.ts.map +1 -1
  98. package/dist/typespec-go/src/tcgcadapter/types.js +17 -10
  99. package/dist/typespec-go/src/tcgcadapter/types.js.map +1 -1
  100. 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;AAMtD,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAmGpF"}
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 { values } from '@azure-tools/linq';
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 values(clientFactoryParams)) {
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 values(clientFactoryParams)) {
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 ? ',' : ''} credential azcore.TokenCredential, options *arm.ClientOptions) (*ClientFactory, error) {\n`;
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 values(clientFactoryParams)) {
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
- for (const param of client.parameters) {
64
- if (clientFactoryParamsMap.has(param.name)) {
65
- clientCommonParams.push(param);
66
- }
67
- else {
68
- clientPrivateParams.push(param);
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
- if (clientPrivateParams.length > 0) {
83
- for (const clientParam of values(clientPrivateParams)) {
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
- if (clientCommonParams.length > 0) {
88
- for (const clientParam of values(clientCommonParams)) {
89
- result += `\t\t${clientParam.name}: c.${clientParam.name},\n`;
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":"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"}
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,CAsM9F"}
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, helpers.parameterByValue(p.parameter)).slice(1)).join(', ')}${clientFactoryParams.length > 0 ? ', ' : ''}cred, nil)\n`;
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]?.name}(`;
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, helpers.parameterByValue(p.parameter)).slice(1)).join(', ')}`;
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]?.name}(${clientParameters.map(p => getExampleValue(codeModel, p.value, '\t', imports, helpers.parameterByValue(p.parameter)).slice(1)).join(', ')}, cred, nil)\n`;
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, helpers.parameterByValue(p.parameter)).slice(1)}`).join(',\n');
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, helpers.parameterByValue(p.parameter)).slice(1)).join(', ')}${methodParameters.length > 0 ? ', ' : ''}${methodOptionalParametersText.split('\n').join('\n\t')})\n`;
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, helpers.parameterByValue(p.parameter)).slice(1)).join(', ')}${methodParameters.length > 0 ? ', ' : ''}${methodOptionalParametersText.split('\n').join('\n\t')})\n`;
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, helpers.parameterByValue(p.parameter)).slice(1)).join(', ')}${methodParameters.length > 0 ? ', ' : ''}${methodOptionalParametersText.split('\n').join('\n\t')})\n`;
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.responseEnvelope.result.modelType.fields.find(f => f.type.kind === 'slice');
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.responseEnvelope.fieldName;
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
- if (example.kind === 'string') {
211
- let exampleText = `"${escapeString(example.value)}"`;
212
- if (example.type.kind === 'constant') {
213
- exampleText = getConstantValue(codeModel, example.type, example.value);
214
- }
215
- else if (example.type.kind === 'time') {
216
- exampleText = getTimeValue(example.type, example.value, imports);
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
- break;
235
- }
236
- return `${indent}${getPointerValue(example.type, exampleText, byValue, imports)}`;
237
- }
238
- else if (example.kind === 'boolean') {
239
- let exampleText = `${example.value}`;
240
- if (example.type.kind === 'constant') {
241
- exampleText = `${indent}${getConstantValue(codeModel, example.type, example.value)}`;
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
- return `${indent}${getPointerValue(example.type, exampleText, byValue, imports)}`;
244
- }
245
- else if (example.kind === 'null') {
246
- return `${indent}nil`;
247
- }
248
- else if (example.kind === 'any') {
249
- return jsonToGo(example.value, indent);
250
- }
251
- else if (example.kind === 'array') {
252
- const isElementByValue = example.type.elementTypeByValue;
253
- // if polymorphic, need to add type name in array, so inArray will be set to false
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
- exampleText += `${indent}}`;
261
- return exampleText;
262
- }
263
- else if (example.kind === 'dictionary') {
264
- let exampleText = `${indent}${getRef(byValue)}${go.getTypeDeclaration(example.type, codeModel.packageName)}{\n`;
265
- const isValueByValue = example.type.valueTypeByValue;
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
- exampleText += `${indent}}`;
271
- return exampleText;
272
- }
273
- else if (example.kind === 'model') {
274
- const isModelPolymorphic = example.type.kind === 'polymorphicModel';
275
- let exampleText = `${indent}${getRef(byValue && !isModelPolymorphic)}${go.getTypeDeclaration(example.type, codeModel.packageName)}{\n`;
276
- if (inArray) {
277
- exampleText = `${indent}{\n`;
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
- for (const field in example.value) {
280
- const goField = example.type.fields.find(f => f.name === field);
281
- const isFieldByValue = goField.byValue ?? false;
282
- const isFieldPolymorphic = goField.type.kind === 'interface';
283
- exampleText += `${indent}\t${field}: ${getExampleValue(codeModel, example.value[field], indent + '\t', imports, isFieldByValue && !isFieldPolymorphic).slice(indent.length + 1)},\n`;
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
- if (example.additionalProperties) {
286
- const additionalPropertiesField = example.type.fields.find(f => f.annotations.isAdditionalProperties);
287
- if (additionalPropertiesField.type.kind !== 'map') {
288
- throw new CodegenError('InternalError', `additional properties field type should be map type`);
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 isAdditionalPropertiesFieldByValue = additionalPropertiesField.type.valueTypeByValue ?? false;
291
- const isAdditionalPropertiesPolymorphic = additionalPropertiesField.type.valueType.kind === 'interface';
292
- exampleText += `${indent}\t${additionalPropertiesField.name}: ${getRef(additionalPropertiesField.byValue)}${go.getTypeDeclaration(additionalPropertiesField.type, codeModel.packageName)}{\n`;
293
- for (const key in example.additionalProperties) {
294
- exampleText += `${indent}\t"${key}": ${getExampleValue(codeModel, example.additionalProperties[key], indent + '\t', imports, isAdditionalPropertiesFieldByValue && !isAdditionalPropertiesPolymorphic).slice(indent.length + 1)},\n`;
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
- exampleText += `${indent}},\n`;
297
- }
298
- exampleText += `${indent}}`;
299
- return exampleText;
300
- }
301
- else if (example.kind === 'qualified') {
302
- imports?.add(example.type.packageName);
303
- if (example.type.exportName === 'ETag') {
304
- return `${indent}${getRef(byValue)}${go.getTypeDeclaration(example.type, codeModel.packageName)}(${jsonToGo(example.value, '')})`;
305
- }
306
- else if (example.type.exportName === 'MultipartContent') {
307
- // TODO: support MultipartContent
308
- throw new CodegenError('InternalError', `MultipartContent example type is not supported yet`);
309
- }
310
- else if (example.type.exportName === 'ReadSeekCloser') {
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
  }