@autorest/typescript 6.0.0-beta.19 → 6.0.0-beta.20

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 (184) hide show
  1. package/README.md +3 -3
  2. package/dist/hlcREADME.md.hbs +144 -0
  3. package/dist/karma.conf.js.hbs +126 -0
  4. package/dist/paginateHelper.ts.hbs +208 -0
  5. package/dist/pollingHelper.ts.hbs +69 -0
  6. package/dist/rlcEnv.ts.hbs +3 -0
  7. package/dist/rlcREADME.md.hbs +71 -0
  8. package/dist/rlcRecordedClient.ts.hbs +26 -0
  9. package/dist/rlcSampleTest.spec.ts.hbs +20 -0
  10. package/dist/sampleEnv.hbs +4 -0
  11. package/dist/sampleTest.ts.hbs +32 -0
  12. package/dist/samples.ts.hbs +49 -0
  13. package/dist/src/autorestSession.js +2 -2
  14. package/dist/src/autorestSession.js.map +1 -1
  15. package/dist/src/generators/LROGenerator.js +4 -4
  16. package/dist/src/generators/LROGenerator.js.map +1 -1
  17. package/dist/src/generators/clientFileGenerator.d.ts.map +1 -1
  18. package/dist/src/generators/clientFileGenerator.js +78 -19
  19. package/dist/src/generators/clientFileGenerator.js.map +1 -1
  20. package/dist/src/generators/indexGenerator.js +14 -14
  21. package/dist/src/generators/indexGenerator.js.map +1 -1
  22. package/dist/src/generators/mappersGenerator.js +14 -14
  23. package/dist/src/generators/mappersGenerator.js.map +1 -1
  24. package/dist/src/generators/modelsGenerator.js +22 -22
  25. package/dist/src/generators/modelsGenerator.js.map +1 -1
  26. package/dist/src/generators/operationGenerator.d.ts.map +1 -1
  27. package/dist/src/generators/operationGenerator.js +58 -89
  28. package/dist/src/generators/operationGenerator.js.map +1 -1
  29. package/dist/src/generators/operationInterfaceGenerator.js +20 -20
  30. package/dist/src/generators/operationInterfaceGenerator.js.map +1 -1
  31. package/dist/src/generators/parametersGenerator.d.ts.map +1 -1
  32. package/dist/src/generators/parametersGenerator.js +7 -8
  33. package/dist/src/generators/parametersGenerator.js.map +1 -1
  34. package/dist/src/generators/samples/sampleGenerator.js +1 -1
  35. package/dist/src/generators/samples/sampleGenerator.js.map +1 -1
  36. package/dist/src/generators/static/apiExtractorConfig.js +1 -1
  37. package/dist/src/generators/static/apiExtractorConfig.js.map +1 -1
  38. package/dist/src/generators/static/esLintConfigGenerator.js +1 -1
  39. package/dist/src/generators/static/esLintConfigGenerator.js.map +1 -1
  40. package/dist/src/generators/static/karma.conf.js.hbs +4 -19
  41. package/dist/src/generators/static/karmaConfigFileGenerator.js +1 -1
  42. package/dist/src/generators/static/karmaConfigFileGenerator.js.map +1 -1
  43. package/dist/src/generators/static/licenseFileGenerator.js +1 -1
  44. package/dist/src/generators/static/licenseFileGenerator.js.map +1 -1
  45. package/dist/src/generators/static/packageFileGenerator.js +46 -40
  46. package/dist/src/generators/static/packageFileGenerator.js.map +1 -1
  47. package/dist/src/generators/static/readmeFileGenerator.js +4 -4
  48. package/dist/src/generators/static/readmeFileGenerator.js.map +1 -1
  49. package/dist/src/generators/static/rollupConfigFileGenerator.js +1 -1
  50. package/dist/src/generators/static/rollupConfigFileGenerator.js.map +1 -1
  51. package/dist/src/generators/static/tsConfigFileGenerator.js +1 -1
  52. package/dist/src/generators/static/tsConfigFileGenerator.js.map +1 -1
  53. package/dist/src/generators/test/envBrowserFileGenerator.js +1 -1
  54. package/dist/src/generators/test/envBrowserFileGenerator.js.map +1 -1
  55. package/dist/src/generators/test/envFileGenerator.js +1 -1
  56. package/dist/src/generators/test/envFileGenerator.js.map +1 -1
  57. package/dist/src/generators/test/recordedClientFileGenerator.js +1 -1
  58. package/dist/src/generators/test/recordedClientFileGenerator.js.map +1 -1
  59. package/dist/src/generators/test/rlcRecordedClient.ts.hbs +15 -24
  60. package/dist/src/generators/test/rlcSampleTest.spec.ts.hbs +4 -3
  61. package/dist/src/generators/test/sampleTest.ts.hbs +18 -18
  62. package/dist/src/generators/test/sampleTestGenerator.js +1 -1
  63. package/dist/src/generators/test/sampleTestGenerator.js.map +1 -1
  64. package/dist/src/generators/tracingFileGenerator.d.ts.map +1 -1
  65. package/dist/src/generators/tracingFileGenerator.js +7 -21
  66. package/dist/src/generators/tracingFileGenerator.js.map +1 -1
  67. package/dist/src/generators/utils/docsUtils.js +2 -2
  68. package/dist/src/generators/utils/docsUtils.js.map +1 -1
  69. package/dist/src/generators/utils/operationsUtils.js +1 -1
  70. package/dist/src/generators/utils/operationsUtils.js.map +1 -1
  71. package/dist/src/generators/utils/pagingOperations.js +13 -13
  72. package/dist/src/generators/utils/pagingOperations.js.map +1 -1
  73. package/dist/src/generators/utils/parameterUtils.js +9 -9
  74. package/dist/src/generators/utils/parameterUtils.js.map +1 -1
  75. package/dist/src/generators/utils/responseTypeUtils.js +2 -2
  76. package/dist/src/generators/utils/responseTypeUtils.js.map +1 -1
  77. package/dist/src/generators/utils/tracingUtils.d.ts.map +1 -1
  78. package/dist/src/generators/utils/tracingUtils.js +2 -6
  79. package/dist/src/generators/utils/tracingUtils.js.map +1 -1
  80. package/dist/src/main.js +5 -5
  81. package/dist/src/main.js.map +1 -1
  82. package/dist/src/models/clientDetails.d.ts +1 -1
  83. package/dist/src/models/clientDetails.d.ts.map +1 -1
  84. package/dist/src/restLevelClient/generateClient.js +14 -14
  85. package/dist/src/restLevelClient/generateClient.js.map +1 -1
  86. package/dist/src/restLevelClient/generateClientDefinition.d.ts.map +1 -1
  87. package/dist/src/restLevelClient/generateClientDefinition.js +23 -25
  88. package/dist/src/restLevelClient/generateClientDefinition.js.map +1 -1
  89. package/dist/src/restLevelClient/generateMethodShortcuts.js +5 -5
  90. package/dist/src/restLevelClient/generateMethodShortcuts.js.map +1 -1
  91. package/dist/src/restLevelClient/generateObjectTypes.js +10 -10
  92. package/dist/src/restLevelClient/generateObjectTypes.js.map +1 -1
  93. package/dist/src/restLevelClient/generatePagingHelper.js +4 -4
  94. package/dist/src/restLevelClient/generatePagingHelper.js.map +1 -1
  95. package/dist/src/restLevelClient/generateParameterTypes.js +11 -11
  96. package/dist/src/restLevelClient/generateParameterTypes.js.map +1 -1
  97. package/dist/src/restLevelClient/generatePollingHelper.js +2 -2
  98. package/dist/src/restLevelClient/generatePollingHelper.js.map +1 -1
  99. package/dist/src/restLevelClient/generateResponseTypes.js +12 -12
  100. package/dist/src/restLevelClient/generateResponseTypes.js.map +1 -1
  101. package/dist/src/restLevelClient/generateRestLevel.d.ts.map +1 -1
  102. package/dist/src/restLevelClient/generateRestLevel.js +32 -28
  103. package/dist/src/restLevelClient/generateRestLevel.js.map +1 -1
  104. package/dist/src/restLevelClient/generateSchemaTypes.js +5 -5
  105. package/dist/src/restLevelClient/generateSchemaTypes.js.map +1 -1
  106. package/dist/src/restLevelClient/generateTopLevelIndexFile.js +3 -3
  107. package/dist/src/restLevelClient/generateTopLevelIndexFile.js.map +1 -1
  108. package/dist/src/restLevelClient/getPropertySignature.js +4 -4
  109. package/dist/src/restLevelClient/getPropertySignature.js.map +1 -1
  110. package/dist/src/restLevelClient/helpers/operationHelpers.js +1 -1
  111. package/dist/src/restLevelClient/helpers/operationHelpers.js.map +1 -1
  112. package/dist/src/restLevelClient/mutateCodeModel.js +2 -2
  113. package/dist/src/restLevelClient/mutateCodeModel.js.map +1 -1
  114. package/dist/src/restLevelClient/operationHelpers.js +2 -2
  115. package/dist/src/restLevelClient/operationHelpers.js.map +1 -1
  116. package/dist/src/restLevelClient/schemaHelpers.js +4 -4
  117. package/dist/src/restLevelClient/schemaHelpers.js.map +1 -1
  118. package/dist/src/transforms/extensions.js +10 -10
  119. package/dist/src/transforms/extensions.js.map +1 -1
  120. package/dist/src/transforms/groupTransforms.js +2 -2
  121. package/dist/src/transforms/groupTransforms.js.map +1 -1
  122. package/dist/src/transforms/mapperTransforms.js +25 -25
  123. package/dist/src/transforms/mapperTransforms.js.map +1 -1
  124. package/dist/src/transforms/objectTransforms.js +22 -22
  125. package/dist/src/transforms/objectTransforms.js.map +1 -1
  126. package/dist/src/transforms/operationTransforms.js +25 -25
  127. package/dist/src/transforms/operationTransforms.js.map +1 -1
  128. package/dist/src/transforms/optionsTransforms.js +1 -1
  129. package/dist/src/transforms/optionsTransforms.js.map +1 -1
  130. package/dist/src/transforms/parameterTransforms.js +23 -23
  131. package/dist/src/transforms/parameterTransforms.js.map +1 -1
  132. package/dist/src/transforms/samplesTransforms.d.ts +1 -1
  133. package/dist/src/transforms/samplesTransforms.d.ts.map +1 -1
  134. package/dist/src/transforms/samplesTransforms.js +30 -20
  135. package/dist/src/transforms/samplesTransforms.js.map +1 -1
  136. package/dist/src/transforms/transforms.d.ts.map +1 -1
  137. package/dist/src/transforms/transforms.js +21 -21
  138. package/dist/src/transforms/transforms.js.map +1 -1
  139. package/dist/src/transforms/urlTransforms.js +3 -3
  140. package/dist/src/transforms/urlTransforms.js.map +1 -1
  141. package/dist/src/typescriptGenerator.d.ts.map +1 -1
  142. package/dist/src/typescriptGenerator.js +25 -23
  143. package/dist/src/typescriptGenerator.js.map +1 -1
  144. package/dist/src/utils/autorestOptions.d.ts.map +1 -1
  145. package/dist/src/utils/autorestOptions.js +19 -13
  146. package/dist/src/utils/autorestOptions.js.map +1 -1
  147. package/dist/src/utils/cloneOperation.js +2 -2
  148. package/dist/src/utils/cloneOperation.js.map +1 -1
  149. package/dist/src/utils/extractHeaders.js +4 -4
  150. package/dist/src/utils/extractHeaders.js.map +1 -1
  151. package/dist/src/utils/extractPaginationDetails.js +9 -9
  152. package/dist/src/utils/extractPaginationDetails.js.map +1 -1
  153. package/dist/src/utils/headersToSchema.js +1 -1
  154. package/dist/src/utils/headersToSchema.js.map +1 -1
  155. package/dist/src/utils/logger.js +1 -1
  156. package/dist/src/utils/logger.js.map +1 -1
  157. package/dist/src/utils/nameUtils.js +2 -2
  158. package/dist/src/utils/nameUtils.js.map +1 -1
  159. package/dist/src/utils/schemaHelpers.js +3 -3
  160. package/dist/src/utils/schemaHelpers.js.map +1 -1
  161. package/dist/src/utils/sortObjectSchemasHierarchically.js +1 -1
  162. package/dist/src/utils/sortObjectSchemasHierarchically.js.map +1 -1
  163. package/dist/src/utils/valueHelpers.js +1 -1
  164. package/dist/src/utils/valueHelpers.js.map +1 -1
  165. package/package.json +29 -30
  166. package/src/generators/clientFileGenerator.ts +74 -5
  167. package/src/generators/modelsGenerator.ts +2 -2
  168. package/src/generators/operationGenerator.ts +39 -85
  169. package/src/generators/parametersGenerator.ts +2 -3
  170. package/src/generators/static/karma.conf.js.hbs +4 -19
  171. package/src/generators/static/packageFileGenerator.ts +39 -33
  172. package/src/generators/test/rlcRecordedClient.ts.hbs +15 -24
  173. package/src/generators/test/rlcSampleTest.spec.ts.hbs +4 -3
  174. package/src/generators/test/sampleTest.ts.hbs +18 -18
  175. package/src/generators/tracingFileGenerator.ts +6 -24
  176. package/src/generators/utils/tracingUtils.ts +1 -5
  177. package/src/models/clientDetails.ts +1 -1
  178. package/src/restLevelClient/generateClientDefinition.ts +10 -8
  179. package/src/restLevelClient/generateRestLevel.ts +5 -2
  180. package/src/transforms/samplesTransforms.ts +325 -276
  181. package/src/transforms/transforms.ts +2 -3
  182. package/src/typescriptGenerator.ts +7 -3
  183. package/src/utils/autorestOptions.ts +16 -10
  184. package/CHANGELOG.md +0 -106
@@ -768,30 +768,12 @@ function writeNoOverloadsOperationBody(
768
768
  const vanillaOptionsName = "options";
769
769
  let options = vanillaOptionsName;
770
770
 
771
- if (tracingInfo) {
772
- const operationName = operationMethod.getName();
773
- const {
774
- outputOptionsVarName: updatedOptionsName,
775
- statement: tracingStatement
776
- } = getTracingSpanStatement(
777
- clientDetails,
778
- operationName,
779
- `${options} || {}`
780
- );
781
- operationMethod.addStatements([tracingStatement]);
782
- // Options from createSpan should be used as operation options, updating
783
- options = compileOperationOptionsToRequestOptionsBase(
784
- updatedOptionsName,
785
- operation.isLro,
786
- lroResourceLocationConfig
787
- );
788
- } else {
789
- options = compileOperationOptionsToRequestOptionsBase(
790
- vanillaOptionsName,
791
- operation.isLro,
792
- lroResourceLocationConfig
793
- );
794
- }
771
+ // Options from createSpan should be used as operation options, updating
772
+ options = compileOperationOptionsToRequestOptionsBase(
773
+ vanillaOptionsName,
774
+ operation.isLro,
775
+ lroResourceLocationConfig
776
+ );
795
777
 
796
778
  const sendParams = parameterDeclarations
797
779
  .map(p =>
@@ -813,6 +795,7 @@ function writeNoOverloadsOperationBody(
813
795
  if (operation.isLro) {
814
796
  if (!useCoreV2) {
815
797
  writeLroOperationBody(
798
+ clientDetails,
816
799
  "operationArguments",
817
800
  responseName,
818
801
  operationSpecName,
@@ -823,6 +806,7 @@ function writeNoOverloadsOperationBody(
823
806
  );
824
807
  } else {
825
808
  writeLroOperationBody(
809
+ clientDetails,
826
810
  `{${sendParams}}`,
827
811
  responseName,
828
812
  operationSpecName,
@@ -850,18 +834,6 @@ interface OptionsStatement {
850
834
  outputOptionsVarName: string;
851
835
  }
852
836
 
853
- function getTracingSpanStatement(
854
- clientDetails: ClientDetails,
855
- operationName: string,
856
- options: string
857
- ): OptionsStatement {
858
- const outputOptionsVarName = "updatedOptions";
859
- return {
860
- statement: `const { span, ${outputOptionsVarName} } = createSpan("${clientDetails.className}-${operationName}", ${options});`,
861
- outputOptionsVarName: outputOptionsVarName
862
- };
863
- }
864
-
865
837
  function writeSendOperationRequest(
866
838
  responseName: string,
867
839
  operationMethod: MethodDeclaration,
@@ -871,6 +843,7 @@ function writeSendOperationRequest(
871
843
  sendParams: string
872
844
  ) {
873
845
  const { useCoreV2, tracingInfo } = getAutorestOptions();
846
+ const operationName = operationMethod.getName();
874
847
  const client = isInline ? "" : ".client";
875
848
  const sendRequestStatement = !useCoreV2
876
849
  ? `this${client}.sendOperationRequest(operationArguments, ${operationSpecName})`
@@ -879,10 +852,11 @@ function writeSendOperationRequest(
879
852
  // When tracing is enabled we want to report success and failures through OpenTelemetry
880
853
  // so we create a span and mark it as succeeded or failed
881
854
  operationMethod.addStatements(
882
- getTracingTryCatchStatement(
855
+ getTracingClientWithSpanStatement(
883
856
  sendRequestStatement,
884
857
  responseName,
885
- !!tracingInfo
858
+ !!tracingInfo,
859
+ `${clientDetails.className}.${operationName}`
886
860
  )
887
861
  );
888
862
  }
@@ -891,25 +865,18 @@ function getSpanStatusCode() {
891
865
  return "coreTracing.SpanStatusCode.UNSET";
892
866
  }
893
867
 
894
- function getTracingTryCatchStatement(
868
+ function getTracingClientWithSpanStatement(
895
869
  sendRequestStatement: string,
896
870
  responseName: string,
897
- isTracingEnabled: boolean
871
+ isTracingEnabled: boolean,
872
+ spanName: string
898
873
  ) {
899
874
  const { useCoreV2 } = getAutorestOptions();
900
875
  if (isTracingEnabled) {
901
- return `try {
902
- const result = await ${sendRequestStatement}
903
- return result as ${responseName};
904
- } catch(error) {
905
- span.setStatus({
906
- code: ${getSpanStatusCode()},
907
- message: error.message
908
- });
909
- throw error;
910
- } finally {
911
- span.end();
912
- }`;
876
+ return `
877
+ return tracingClient.withSpan("${spanName}", options ?? {}, async options => {
878
+ return ${sendRequestStatement} as Promise<${responseName}>;
879
+ });`;
913
880
  } else {
914
881
  return !useCoreV2
915
882
  ? `return ${sendRequestStatement} as Promise<${responseName}>`
@@ -918,6 +885,7 @@ function getTracingTryCatchStatement(
918
885
  }
919
886
 
920
887
  function writeLroOperationBody(
888
+ clientDetails: ClientDetails,
921
889
  operationParamsName: string,
922
890
  responseName: string,
923
891
  operationSpecName: string,
@@ -927,14 +895,16 @@ function writeLroOperationBody(
927
895
  isTracingEnabled = false
928
896
  ) {
929
897
  const { useCoreV2 } = getAutorestOptions();
898
+ const spanName = `${clientDetails.className}.${methodDeclaration.getName()}`;
930
899
  const client = isInline ? "" : ".client";
931
900
  const sendRequestStatement = `this${client}.sendOperationRequest(args, spec)`;
932
901
  const sendOperationStatement = !useCoreV2
933
902
  ? `const directSendOperation = async (args: coreHttp.OperationArguments, spec: coreHttp.OperationSpec): Promise<${responseName}> => {
934
- ${getTracingTryCatchStatement(
903
+ ${getTracingClientWithSpanStatement(
935
904
  sendRequestStatement,
936
905
  responseName,
937
- isTracingEnabled
906
+ isTracingEnabled,
907
+ spanName
938
908
  )}
939
909
  };
940
910
  const sendOperation = async (args: coreHttp.OperationArguments, spec: coreHttp.OperationSpec) => {
@@ -946,10 +916,11 @@ function writeLroOperationBody(
946
916
  }};
947
917
  }`
948
918
  : `const directSendOperation = async (args: coreClient.OperationArguments, spec: coreClient.OperationSpec): Promise<${responseName}> => {
949
- ${getTracingTryCatchStatement(
919
+ ${getTracingClientWithSpanStatement(
950
920
  sendRequestStatement,
951
921
  responseName,
952
- isTracingEnabled
922
+ isTracingEnabled,
923
+ spanName
953
924
  )}
954
925
  };
955
926
  const sendOperation = async (args: coreClient.OperationArguments, spec: coreClient.OperationSpec) => {
@@ -984,8 +955,8 @@ function writeLroOperationBody(
984
955
  ? `, lroResourceLocationConfig: "${lroResourceLocationConfig.toLowerCase()}"`
985
956
  : ""
986
957
  } });`,
987
- 'await poller.poll();',
988
- 'return poller;'
958
+ "await poller.poll();",
959
+ "return poller;"
989
960
  ]);
990
961
 
991
962
  methodDeclaration.setReturnType(
@@ -1008,6 +979,7 @@ function writeMultiMediaTypeOperationBody(
1008
979
  ): void {
1009
980
  const { useCoreV2, tracingInfo } = getAutorestOptions();
1010
981
  const coreImport = !useCoreV2 ? "coreHttp" : "coreClient";
982
+
1011
983
  operationMethod.addStatements([
1012
984
  `let operationSpec: ${coreImport}.OperationSpec;`,
1013
985
  `let operationArguments: ${coreImport}.OperationArguments;`
@@ -1089,29 +1061,13 @@ function writeMultiMediaTypeOperationBody(
1089
1061
  const lroResourceLocationConfig =
1090
1062
  operation.lroOptions && operation.lroOptions["final-state-via"];
1091
1063
 
1092
- if (tracingInfo) {
1093
- const operationName = operationMethod.getName();
1094
- const {
1095
- outputOptionsVarName,
1096
- statement: tracingStatement
1097
- } = getTracingSpanStatement(clientDetails, operationName, optionsVarName);
1098
- operationMethod.addStatements([
1099
- tracingStatement,
1100
- `operationArguments.options = ${compileOperationOptionsToRequestOptionsBase(
1101
- outputOptionsVarName,
1102
- operation.isLro,
1103
- lroResourceLocationConfig
1104
- )};`
1105
- ]);
1106
- } else {
1107
- operationMethod.addStatements([
1108
- `operationArguments.options = ${compileOperationOptionsToRequestOptionsBase(
1109
- optionsVarName,
1110
- operation.isLro,
1111
- lroResourceLocationConfig
1112
- )};`
1113
- ]);
1114
- }
1064
+ operationMethod.addStatements([
1065
+ `operationArguments.options = ${compileOperationOptionsToRequestOptionsBase(
1066
+ optionsVarName,
1067
+ operation.isLro,
1068
+ lroResourceLocationConfig
1069
+ )};`
1070
+ ]);
1115
1071
 
1116
1072
  if (!operation.isLro) {
1117
1073
  writeSendOperationRequest(
@@ -1124,6 +1080,7 @@ function writeMultiMediaTypeOperationBody(
1124
1080
  );
1125
1081
  } else {
1126
1082
  writeLroOperationBody(
1083
+ clientDetails,
1127
1084
  "operationArguments",
1128
1085
  responseName,
1129
1086
  "operationSpec",
@@ -1323,10 +1280,7 @@ function addImports(
1323
1280
 
1324
1281
  const clientClassName = `${className}`;
1325
1282
 
1326
- const clientFileName = normalizeName(
1327
- clientClassName,
1328
- NameType.File
1329
- );
1283
+ const clientFileName = normalizeName(clientClassName, NameType.File);
1330
1284
 
1331
1285
  operationGroupFile.addImportDeclaration({
1332
1286
  namedImports: [`${clientClassName}`],
@@ -11,7 +11,6 @@ import {
11
11
  } from "ts-morph";
12
12
  import { ClientDetails } from "../models/clientDetails";
13
13
  import { ParameterDetails } from "../models/parameterDetails";
14
- import { isString } from "util";
15
14
  import { writeMapper } from "./mappersGenerator";
16
15
  import { shouldImportParameters } from "./utils/importUtils";
17
16
  import { logger } from "../utils/logger";
@@ -143,7 +142,7 @@ function writeParameterMapper(
143
142
  { mapper }: ParameterDetails
144
143
  ) {
145
144
  writer.write("mapper: ");
146
- if (isString(mapper)) {
145
+ if (typeof mapper === "string") {
147
146
  writer.write(`${mapper}Mapper`);
148
147
  } else {
149
148
  writeMapper(writer, mapper);
@@ -184,7 +183,7 @@ function getCoreHttpImports(clientDetails: ClientDetails) {
184
183
 
185
184
  function getImportedMappers(clientDetails: ClientDetails) {
186
185
  const mappers = clientDetails.parameters
187
- .filter(p => !p.isSynthetic && isString(p.mapper))
186
+ .filter(p => !p.isSynthetic && typeof p.mapper === "string")
188
187
  .map(p => `${p.mapper} as ${p.mapper}Mapper`);
189
188
 
190
189
  return [...new Set<string>(mappers)];
@@ -1,12 +1,8 @@
1
1
  // https://github.com/karma-runner/karma-chrome-launcher
2
2
  process.env.CHROME_BIN = require("puppeteer").executablePath();
3
3
  require("dotenv").config();
4
- const {
5
- jsonRecordingFilterFunction,
6
- isPlaybackMode,
7
- isSoftRecordMode,
8
- isRecordMode,
9
- } = require("@azure-tools/test-recorder");
4
+ const { relativeRecordingsPath } = require("@azure-tools/test-recorder");
5
+ process.env.RECORDINGS_RELATIVE_PATH = relativeRecordingsPath();
10
6
 
11
7
  module.exports = function (config) {
12
8
  config.set({
@@ -28,16 +24,14 @@ module.exports = function (config) {
28
24
  "karma-coverage",
29
25
  "karma-sourcemap-loader",
30
26
  "karma-junit-reporter",
31
- "karma-json-to-file-reporter",
32
27
  "karma-source-map-support",
33
- "karma-json-preprocessor",
34
28
  ],
35
29
 
36
30
  // list of files / patterns to load in the browser
37
31
  files: [
38
32
  "dist-test/index.browser.js",
39
33
  { pattern: "dist-test/index.browser.js.map", type: "html", included: false, served: true },
40
- ].concat(isPlaybackMode() || isSoftRecordMode() ? ["recordings/browsers/**/*.json"] : []),
34
+ ],
41
35
 
42
36
  // list of files / patterns to exclude
43
37
  exclude: [],
@@ -46,7 +40,6 @@ module.exports = function (config) {
46
40
  // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
47
41
  preprocessors: {
48
42
  "**/*.js": ["sourcemap", "env"],
49
- "recordings/browsers/**/*.json": ["json"],
50
43
  // IMPORTANT: COMMENT following line if you want to debug in your browsers!!
51
44
  // Preprocess source file to calculate code coverage, however this will make source file unreadable
52
45
  // "dist-test/index.js": ["coverage"]
@@ -64,7 +57,7 @@ module.exports = function (config) {
64
57
  // test results reporter to use
65
58
  // possible values: 'dots', 'progress'
66
59
  // available reporters: https://npmjs.org/browse/keyword/karma-reporter
67
- reporters: ["mocha", "coverage", "junit", "json-to-file"],
60
+ reporters: ["mocha", "coverage", "junit"],
68
61
 
69
62
  coverageReporter: {
70
63
  // specify a common output directory
@@ -87,11 +80,6 @@ module.exports = function (config) {
87
80
  properties: {}, // key value pair of properties to add to the <properties> section of the report
88
81
  },
89
82
 
90
- jsonToFileReporter: {
91
- filter: jsonRecordingFilterFunction,
92
- outputPath: ".",
93
- },
94
-
95
83
  // web server port
96
84
  port: 9876,
97
85
 
@@ -126,9 +114,6 @@ module.exports = function (config) {
126
114
  browserNoActivityTimeout: 60000000,
127
115
  browserDisconnectTimeout: 10000,
128
116
  browserDisconnectTolerance: 3,
129
- browserConsoleLogOptions: {
130
- terminal: !isRecordMode(),
131
- },
132
117
 
133
118
  client: {
134
119
  mocha: {
@@ -60,7 +60,7 @@ function restLevelPackage(packageDetails: PackageDetails) {
60
60
  const hasLRO = hasPollingOperations(model);
61
61
  const packageInfo: Record<string, any> = {
62
62
  name: `${packageDetails.name}`,
63
- "sdk-type": `${azureArm ? "mgmt" : "client"}`,
63
+ "sdk-type": "client",
64
64
  author: "Microsoft Corporation",
65
65
  version: `${packageDetails.version}`,
66
66
  description: `${packageDetails.description}`,
@@ -132,7 +132,7 @@ function restLevelPackage(packageDetails: PackageDetails) {
132
132
  autoPublish: false,
133
133
  dependencies: {
134
134
  "@azure/core-auth": "^1.3.0",
135
- "@azure-rest/core-client": "1.0.0-beta.8",
135
+ "@azure-rest/core-client": "1.0.0-beta.9",
136
136
  "@azure/core-rest-pipeline": "^1.8.0",
137
137
  "@azure/logger": "^1.0.0",
138
138
  tslib: "^2.2.0",
@@ -144,7 +144,7 @@ function restLevelPackage(packageDetails: PackageDetails) {
144
144
  })
145
145
  },
146
146
  devDependencies: {
147
- "@microsoft/api-extractor": "^7.18.11",
147
+ "@microsoft/api-extractor": "7.18.11",
148
148
  autorest: "latest",
149
149
  "@types/node": "^12.0.0",
150
150
  dotenv: "^8.2.0",
@@ -184,11 +184,13 @@ function restLevelPackage(packageDetails: PackageDetails) {
184
184
 
185
185
  if (generateTest) {
186
186
  packageInfo.module = `./dist-esm/src/index.js`;
187
+ packageInfo.devDependencies["@azure-tools/test-credential"] = "^1.0.0";
187
188
  packageInfo.devDependencies["@azure/identity"] = "^2.0.1";
188
- packageInfo.devDependencies["@azure-tools/test-recorder"] = "^1.0.0";
189
+ packageInfo.devDependencies["@azure-tools/test-recorder"] = "^2.0.0";
189
190
  packageInfo.devDependencies["mocha"] = "^7.1.1";
190
191
  packageInfo.devDependencies["mocha-junit-reporter"] = "^1.18.0";
191
192
  packageInfo.devDependencies["cross-env"] = "^7.0.2";
193
+ packageInfo.devDependencies["@types/chai"] = "^4.2.8";
192
194
  packageInfo.devDependencies["chai"] = "^4.2.0";
193
195
  packageInfo.devDependencies["cross-env"] = "^7.0.2";
194
196
  packageInfo.devDependencies["karma-chrome-launcher"] = "^3.0.0";
@@ -197,8 +199,6 @@ function restLevelPackage(packageDetails: PackageDetails) {
197
199
  packageInfo.devDependencies["karma-env-preprocessor"] = "^0.1.1";
198
200
  packageInfo.devDependencies["karma-firefox-launcher"] = "^1.1.0";
199
201
  packageInfo.devDependencies["karma-ie-launcher"] = "^1.0.0";
200
- packageInfo.devDependencies["karma-json-preprocessor"] = "^0.3.3";
201
- packageInfo.devDependencies["karma-json-to-file-reporter"] = "^1.0.1";
202
202
  packageInfo.devDependencies["karma-junit-reporter"] = "^2.0.1";
203
203
  packageInfo.devDependencies["karma-mocha-reporter"] = "^2.2.5";
204
204
  packageInfo.devDependencies["karma-mocha"] = "^2.0.1";
@@ -207,31 +207,27 @@ function restLevelPackage(packageDetails: PackageDetails) {
207
207
  packageInfo.devDependencies["karma"] = "^6.2.0";
208
208
  packageInfo.devDependencies["nyc"] = "^14.0.0";
209
209
  packageInfo.devDependencies["source-map-support"] = "^0.5.9";
210
-
211
- packageInfo.scripts["test"] =
212
- "npm run clean && npm run build:test && npm run unit-test";
213
- packageInfo.scripts["test:node"] =
214
- "npm run clean && npm run build:test && npm run unit-test:node";
215
- packageInfo.scripts["test:browser"] =
216
- "tsc -p . && cross-env ONLY_BROWSER=true rollup -c 2>&1";
217
- packageInfo.scripts["unit-test"] =
218
- "npm run unit-test:node && npm run unit-test:browser";
219
- packageInfo.scripts["unit-test:node"] =
220
- 'mocha -r esm --require ts-node/register --reporter ../../../common/tools/mocha-multi-reporter.js --timeout 1200000 --full-trace "test/{,!(browser)/**/}*.spec.ts"';
210
+ packageInfo.scripts["test"] = "npm run clean && npm run build:test && npm run unit-test";
211
+ packageInfo.scripts["test:node"] = "npm run clean && npm run build:test && npm run unit-test:node";
212
+ packageInfo.scripts["test:browser"] = "npm run clean && npm run build:test && npm run unit-test:browser";
213
+ packageInfo.scripts["build:browser"] = "tsc -p . && cross-env ONLY_BROWSER=true rollup -c 2>&1";
214
+ packageInfo.scripts["build:node"] = "tsc -p . && cross-env ONLY_NODE=true rollup -c 2>&1";
215
+ packageInfo.scripts["build:test"] = "tsc -p . && rollup -c 2>&1";
216
+ packageInfo.scripts["unit-test"] = "npm run unit-test:node && npm run unit-test:browser";
217
+ packageInfo.scripts["unit-test:node"] = "mocha -r esm --require ts-node/register --reporter ../../../common/tools/mocha-multi-reporter.js --timeout 1200000 --full-trace \"test/{,!(browser)/**/}*.spec.ts\"";
221
218
  packageInfo.scripts["unit-test:browser"] = "karma start --single-run";
222
- packageInfo.scripts["integration-test"] =
223
- "npm run integration-test:node && npm run integration-test:browser";
224
- packageInfo.scripts["integration-test:node"] =
225
- 'nyc mocha -r esm --require source-map-support/register --reporter ../../../common/tools/mocha-multi-reporter.js --timeout 5000000 --full-trace "dist-esm/test/{,!(browser)/**/}*.spec.js"';
226
-
219
+ packageInfo.scripts["integration-test:browser"] = "karma start --single-run";
220
+ packageInfo.scripts["integration-test:node"] = "nyc mocha -r esm --require source-map-support/register --reporter ../../../common/tools/mocha-multi-reporter.js --timeout 5000000 --full-trace \"dist-esm/test/{,!(browser)/**/}*.spec.js\"";
221
+ packageInfo.scripts["integration-test"] = "npm run integration-test:node && npm run integration-test:browser";
227
222
  if (azureSdkForJs) {
228
223
  packageInfo.scripts["build:test"] = "tsc -p . && dev-tool run bundle";
229
224
  packageInfo.scripts["integration-test:browser"] =
230
225
  "dev-tool run test:browser";
231
- } else {
232
- packageInfo.scripts["build:test"] = "tsc -p . && rollup -c 2>&1";
233
- packageInfo.scripts["integration-test:browser"] =
234
- "karma start --single-run";
226
+ packageInfo.scripts["unit-test:browser"] = "dev-tool run test:browser";
227
+ packageInfo.scripts["unit-test:node"] =
228
+ "dev-tool run test:node-ts-input -- --timeout 1200000 --exclude 'test/**/browser/*.spec.ts' 'test/**/*.spec.ts'";
229
+ packageInfo.scripts["integration-test:node"] =
230
+ "dev-tool run test:node-js-input -- --timeout 5000000 'dist-esm/test/**/*.spec.js'";
235
231
  }
236
232
 
237
233
  packageInfo["browser"] = {
@@ -261,7 +257,8 @@ function regularAutorestPackage(
261
257
  azureOutputDirectory,
262
258
  generateTest,
263
259
  generateSample,
264
- coreHttpCompatMode
260
+ coreHttpCompatMode,
261
+ azureSdkForJs
265
262
  } = getAutorestOptions();
266
263
  const { model } = getSession();
267
264
  const hasLro = hasPollingOperations(model);
@@ -298,8 +295,7 @@ function regularAutorestPackage(
298
295
  "@azure/core-rest-pipeline": "^1.8.0"
299
296
  }),
300
297
  ...(tracingInfo && {
301
- "@azure/core-tracing": "1.0.0-preview.13",
302
- "@opentelemetry/api": "^0.10.2"
298
+ "@azure/core-tracing": "^1.0.0"
303
299
  }),
304
300
  tslib: "^2.2.0"
305
301
  },
@@ -309,7 +305,7 @@ function regularAutorestPackage(
309
305
  module: `./dist-esm/index.js`,
310
306
  types: `./types/${packageDetails.nameWithoutScope}.d.ts`,
311
307
  devDependencies: {
312
- "@microsoft/api-extractor": "^7.18.11",
308
+ "@microsoft/api-extractor": "7.18.11",
313
309
  "@rollup/plugin-commonjs": "^21.0.1",
314
310
  "@rollup/plugin-json": "^4.1.0",
315
311
  "@rollup/plugin-multi-entry": "^4.1.0",
@@ -391,8 +387,11 @@ function regularAutorestPackage(
391
387
  if (generateTest) {
392
388
  packageInfo.module = `./dist-esm/src/index.js`;
393
389
  packageInfo.devDependencies["@azure/identity"] = "^2.0.1";
394
- packageInfo.devDependencies["@azure-tools/test-recorder"] = "^1.0.0";
390
+ packageInfo.devDependencies["@azure-tools/test-recorder"] = "^2.0.0";
391
+ packageInfo.devDependencies["@azure-tools/test-credential"] = "^1.0.0";
395
392
  packageInfo.devDependencies["mocha"] = "^7.1.1";
393
+ packageInfo.devDependencies["@types/chai"] = "^4.2.8";
394
+ packageInfo.devDependencies["chai"] = "^4.2.0";
396
395
  packageInfo.devDependencies["cross-env"] = "^7.0.2";
397
396
  packageInfo.scripts["test"] = "npm run integration-test";
398
397
  packageInfo.scripts["unit-test"] =
@@ -401,8 +400,15 @@ function regularAutorestPackage(
401
400
  "cross-env TEST_MODE=playback npm run integration-test:node";
402
401
  packageInfo.scripts["integration-test"] =
403
402
  "npm run integration-test:node && npm run integration-test:browser";
404
- packageInfo.scripts["integration-test:node"] =
405
- "mocha -r esm --require ts-node/register --timeout 1200000 --full-trace test/*.ts --reporter ../../../common/tools/mocha-multi-reporter.js";
403
+
404
+ if (azureSdkForJs) {
405
+ packageInfo.devDependencies["@azure/dev-tool"] = "^1.0.0";
406
+ packageInfo.scripts["integration-test:node"] =
407
+ "dev-tool run test:node-ts-input -- --timeout 1200000 'test/*.ts'";
408
+ } else {
409
+ packageInfo.scripts["integration-test:node"] =
410
+ "mocha -r esm --require ts-node/register --timeout 1200000 --full-trace test/*.ts --reporter ../../../common/tools/mocha-multi-reporter.js";
411
+ }
406
412
  }
407
413
  if (
408
414
  generateSample &&
@@ -1,28 +1,17 @@
1
1
  import { Context } from "mocha";
2
- import { record, RecorderEnvironmentSetup, Recorder } from "@azure-tools/test-recorder";
2
+ import { Recorder, RecorderStartOptions } from "@azure-tools/test-recorder";
3
3
  import "./env";
4
4
 
5
- const recorderEnvSetup: RecorderEnvironmentSetup = {
6
- replaceableVariables: {
7
- ENDPOINT: "https://endpoint",
8
- AZURE_CLIENT_ID: "azure_client_id",
9
- AZURE_CLIENT_SECRET: "azure_client_secret",
10
- AZURE_TENANT_ID: "88888888-8888-8888-8888-888888888888",
11
- SUBSCRIPTION_ID: "azure_subscription_id"
12
- },
13
- customizationsOnRecordings: [
14
- (recording: any): any =>
15
- recording.replace(/"access_token":"[^"]*"/g, `"access_token":"access_token"`),
16
- // If we put ENDPOINT in replaceableVariables above, it will not capture
17
- // the endpoint string used with nock, which will be expanded to
18
- // https://<endpoint>:443/ and therefore will not match, so we have to do
19
- // this instead.
20
- (recording: string): string => {
21
- const replaced = recording.replace("endpoint:443", "endpoint");
22
- return replaced;
23
- },
24
- ],
25
- queryParametersToSkip: []
5
+ const envSetupForPlayback: Record<string, string> = {
6
+ ENDPOINT: "https://endpoint",
7
+ AZURE_CLIENT_ID: "azure_client_id",
8
+ AZURE_CLIENT_SECRET: "azure_client_secret",
9
+ AZURE_TENANT_ID: "88888888-8888-8888-8888-888888888888",
10
+ SUBSCRIPTION_ID: "azure_subscription_id"
11
+ };
12
+
13
+ const recorderEnvSetup: RecorderStartOptions = {
14
+ envSetupForPlayback
26
15
  };
27
16
 
28
17
  /**
@@ -30,6 +19,8 @@ const recorderEnvSetup: RecorderEnvironmentSetup = {
30
19
  * Should be called first in the test suite to make sure environment variables are
31
20
  * read before they are being used.
32
21
  */
33
- export function createRecorder(context: Context): Recorder {
34
- return record(context, recorderEnvSetup);
22
+ export async function createRecorder(context: Context): Promise<Recorder> {
23
+ const recorder = new Recorder(context.currentTest);
24
+ await recorder.start(recorderEnvSetup);
25
+ return recorder;
35
26
  }
@@ -1,12 +1,13 @@
1
1
  import { Recorder } from "@azure-tools/test-recorder";
2
- import * as assert from "assert";
2
+ import { assert } from "chai";
3
3
  import { createRecorder } from "./utils/recordedClient";
4
+ import { Context } from "mocha";
4
5
 
5
6
  describe("My test", () => {
6
7
  let recorder: Recorder;
7
8
 
8
- beforeEach(async function() {
9
- recorder = createRecorder(this);
9
+ beforeEach(async function(this: Context) {
10
+ recorder = await createRecorder(this);
10
11
  });
11
12
 
12
13
  afterEach(async function() {
@@ -1,32 +1,32 @@
1
- import { env, record, RecorderEnvironmentSetup, Recorder } from "@azure-tools/test-recorder";
2
- import * as assert from "assert";
1
+ import { Recorder, RecorderStartOptions, env } from "@azure-tools/test-recorder";
2
+ import { assert } from "chai";
3
+ import { Context } from "mocha";
3
4
 
4
- const recorderEnvSetup: RecorderEnvironmentSetup = {
5
- replaceableVariables: {
6
- AZURE_CLIENT_ID: "azure_client_id",
7
- AZURE_CLIENT_SECRET: "azure_client_secret",
8
- AZURE_TENANT_ID: "88888888-8888-8888-8888-888888888888",
9
- SUBSCRIPTION_ID: "azure_subscription_id"
10
- },
11
- customizationsOnRecordings: [
12
- (recording: any): any =>
13
- recording.replace(/"access_token":"[^"]*"/g, `"access_token":"access_token"`)
14
- ],
15
- queryParametersToSkip: []
5
+
6
+ const replaceableVariables: Record<string, string> = {
7
+ AZURE_CLIENT_ID: "azure_client_id",
8
+ AZURE_CLIENT_SECRET: "azure_client_secret",
9
+ AZURE_TENANT_ID: "88888888-8888-8888-8888-888888888888",
10
+ SUBSCRIPTION_ID: "azure_subscription_id"
11
+ };
12
+
13
+ const recorderOptions: RecorderStartOptions = {
14
+ envSetupForPlayback: replaceableVariables,
16
15
  };
17
16
 
18
17
  describe("My test", () => {
19
18
  let recorder: Recorder;
20
19
 
21
- beforeEach(async function() {
22
- recorder = record(this, recorderEnvSetup);
20
+ beforeEach(async function (this: Context) {
21
+ recorder = new Recorder(this.currentTest);
22
+ await recorder.start(recorderOptions);
23
23
  });
24
24
 
25
- afterEach(async function() {
25
+ afterEach(async function () {
26
26
  await recorder.stop();
27
27
  });
28
28
 
29
- it("sample test", async function() {
29
+ it("sample test", async function () {
30
30
  console.log("Hi, I'm a test!");
31
31
  });
32
32
  });