@autorest/typescript 6.0.0-beta.14 → 6.0.0-beta.17
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/CHANGELOG.md +13 -0
- package/README.md +41 -5
- package/dist/src/autorestSession.d.ts +12 -4
- package/dist/src/autorestSession.d.ts.map +1 -1
- package/dist/src/autorestSession.js +3 -9
- package/dist/src/autorestSession.js.map +1 -1
- package/dist/src/conflictResolver.d.ts.map +1 -1
- package/dist/src/conflictResolver.js.map +1 -1
- package/dist/src/generators/clientFileGenerator.d.ts.map +1 -1
- package/dist/src/generators/clientFileGenerator.js +181 -31
- package/dist/src/generators/clientFileGenerator.js.map +1 -1
- package/dist/src/generators/indexGenerator.d.ts.map +1 -1
- package/dist/src/generators/indexGenerator.js +70 -9
- package/dist/src/generators/indexGenerator.js.map +1 -1
- package/dist/src/generators/modelsGenerator.d.ts.map +1 -1
- package/dist/src/generators/modelsGenerator.js +20 -2
- package/dist/src/generators/modelsGenerator.js.map +1 -1
- package/dist/src/generators/operationGenerator.d.ts.map +1 -1
- package/dist/src/generators/operationGenerator.js +10 -8
- package/dist/src/generators/operationGenerator.js.map +1 -1
- package/dist/src/generators/samples/sampleEnv.hbs +4 -0
- package/dist/src/generators/samples/sampleEnvGenerator.d.ts +3 -0
- package/dist/src/generators/samples/sampleEnvGenerator.d.ts.map +1 -0
- package/dist/src/generators/samples/sampleEnvGenerator.js +17 -0
- package/dist/src/generators/samples/sampleEnvGenerator.js.map +1 -0
- package/dist/src/generators/samples/sampleGenerator.d.ts +13 -0
- package/dist/src/generators/samples/sampleGenerator.d.ts.map +1 -0
- package/dist/src/generators/samples/sampleGenerator.js +43 -0
- package/dist/src/generators/samples/sampleGenerator.js.map +1 -0
- package/dist/src/generators/static/apiExtractorConfig.js +2 -2
- package/dist/src/generators/static/apiExtractorConfig.js.map +1 -1
- package/dist/src/generators/static/esLintConfigGenerator.d.ts +3 -0
- package/dist/src/generators/static/esLintConfigGenerator.d.ts.map +1 -0
- package/dist/src/generators/static/esLintConfigGenerator.js +26 -0
- package/dist/src/generators/static/esLintConfigGenerator.js.map +1 -0
- package/dist/src/generators/static/{README.md.hbs → hlcREADME.md.hbs} +23 -0
- package/dist/src/generators/static/karma.conf.js.hbs +141 -0
- package/dist/src/generators/static/karmaConfigFileGenerator.d.ts +3 -0
- package/dist/src/generators/static/karmaConfigFileGenerator.d.ts.map +1 -0
- package/dist/src/generators/static/karmaConfigFileGenerator.js +23 -0
- package/dist/src/generators/static/karmaConfigFileGenerator.js.map +1 -0
- package/dist/src/generators/static/packageFileGenerator.d.ts.map +1 -1
- package/dist/src/generators/static/packageFileGenerator.js +174 -48
- package/dist/src/generators/static/packageFileGenerator.js.map +1 -1
- package/dist/src/generators/static/readmeFileGenerator.d.ts +2 -2
- package/dist/src/generators/static/readmeFileGenerator.d.ts.map +1 -1
- package/dist/src/generators/static/readmeFileGenerator.js +35 -17
- package/dist/src/generators/static/readmeFileGenerator.js.map +1 -1
- package/dist/src/generators/static/rlcREADME.md.hbs +71 -0
- package/dist/src/generators/static/rollupConfigFileGenerator.d.ts.map +1 -1
- package/dist/src/generators/static/rollupConfigFileGenerator.js +12 -71
- package/dist/src/generators/static/rollupConfigFileGenerator.js.map +1 -1
- package/dist/src/generators/static/samples.ts.hbs +49 -0
- package/dist/src/generators/static/tsConfigFileGenerator.d.ts.map +1 -1
- package/dist/src/generators/static/tsConfigFileGenerator.js +40 -18
- package/dist/src/generators/static/tsConfigFileGenerator.js.map +1 -1
- package/dist/src/generators/test/envBrowserFileGenerator.d.ts +3 -0
- package/dist/src/generators/test/envBrowserFileGenerator.d.ts.map +1 -0
- package/dist/src/generators/test/envBrowserFileGenerator.js +15 -0
- package/dist/src/generators/test/envBrowserFileGenerator.js.map +1 -0
- package/dist/src/generators/test/envFileGenerator.d.ts +3 -0
- package/dist/src/generators/test/envFileGenerator.d.ts.map +1 -0
- package/dist/src/generators/test/envFileGenerator.js +23 -0
- package/dist/src/generators/test/envFileGenerator.js.map +1 -0
- package/dist/src/generators/test/recordedClientFileGenerator.d.ts +3 -0
- package/dist/src/generators/test/recordedClientFileGenerator.d.ts.map +1 -0
- package/dist/src/generators/test/recordedClientFileGenerator.js +23 -0
- package/dist/src/generators/test/recordedClientFileGenerator.js.map +1 -0
- package/dist/src/generators/test/rlcEnv.ts.hbs +3 -0
- package/dist/src/generators/test/rlcRecordedClient.ts.hbs +35 -0
- package/dist/src/generators/test/rlcSampleTest.spec.ts.hbs +19 -0
- package/dist/src/generators/{static → test}/sampleTest.ts.hbs +0 -0
- package/dist/src/generators/test/sampleTestGenerator.d.ts.map +1 -1
- package/dist/src/generators/test/sampleTestGenerator.js +23 -7
- package/dist/src/generators/test/sampleTestGenerator.js.map +1 -1
- package/dist/src/generators/utils/pagingOperations.d.ts +5 -0
- package/dist/src/generators/utils/pagingOperations.d.ts.map +1 -1
- package/dist/src/generators/utils/pagingOperations.js +2 -1
- package/dist/src/generators/utils/pagingOperations.js.map +1 -1
- package/dist/src/main.d.ts +2 -2
- package/dist/src/main.d.ts.map +1 -1
- package/dist/src/main.js +3 -3
- package/dist/src/main.js.map +1 -1
- package/dist/src/models/clientDetails.d.ts +7 -0
- package/dist/src/models/clientDetails.d.ts.map +1 -1
- package/dist/src/models/modelDetails.d.ts +2 -2
- package/dist/src/models/modelDetails.d.ts.map +1 -1
- package/dist/src/models/operationDetails.d.ts +1 -0
- package/dist/src/models/operationDetails.d.ts.map +1 -1
- package/dist/src/models/sampleDetails.d.ts +22 -0
- package/dist/src/models/sampleDetails.d.ts.map +1 -0
- package/dist/src/models/sampleDetails.js +3 -0
- package/dist/src/models/sampleDetails.js.map +1 -0
- package/dist/src/restLevelClient/generateClient.d.ts +1 -1
- package/dist/src/restLevelClient/generateClient.d.ts.map +1 -1
- package/dist/src/restLevelClient/generateClient.js +81 -163
- package/dist/src/restLevelClient/generateClient.js.map +1 -1
- package/dist/src/restLevelClient/generateClientDefinition.d.ts +6 -0
- package/dist/src/restLevelClient/generateClientDefinition.d.ts.map +1 -0
- package/dist/src/restLevelClient/generateClientDefinition.js +231 -0
- package/dist/src/restLevelClient/generateClientDefinition.js.map +1 -0
- package/dist/src/restLevelClient/generateMethodShortcuts.d.ts +8 -0
- package/dist/src/restLevelClient/generateMethodShortcuts.d.ts.map +1 -0
- package/dist/src/restLevelClient/generateMethodShortcuts.js +70 -0
- package/dist/src/restLevelClient/generateMethodShortcuts.js.map +1 -0
- package/dist/src/restLevelClient/generateObjectTypes.d.ts.map +1 -1
- package/dist/src/restLevelClient/generateObjectTypes.js.map +1 -1
- package/dist/src/restLevelClient/generatePagingHelper.d.ts.map +1 -1
- package/dist/src/restLevelClient/generatePagingHelper.js +2 -1
- package/dist/src/restLevelClient/generatePagingHelper.js.map +1 -1
- package/dist/src/restLevelClient/generateParameterTypes.d.ts.map +1 -1
- package/dist/src/restLevelClient/generateParameterTypes.js +186 -36
- package/dist/src/restLevelClient/generateParameterTypes.js.map +1 -1
- package/dist/src/restLevelClient/generatePollingHelper.d.ts.map +1 -1
- package/dist/src/restLevelClient/generatePollingHelper.js +3 -1
- package/dist/src/restLevelClient/generatePollingHelper.js.map +1 -1
- package/dist/src/restLevelClient/generateResponseTypes.d.ts.map +1 -1
- package/dist/src/restLevelClient/generateResponseTypes.js +13 -7
- package/dist/src/restLevelClient/generateResponseTypes.js.map +1 -1
- package/dist/src/restLevelClient/generateRestLevel.d.ts.map +1 -1
- package/dist/src/restLevelClient/generateRestLevel.js +26 -4
- package/dist/src/restLevelClient/generateRestLevel.js.map +1 -1
- package/dist/src/restLevelClient/generateSchemaTypes.d.ts.map +1 -1
- package/dist/src/restLevelClient/generateSchemaTypes.js +5 -2
- package/dist/src/restLevelClient/generateSchemaTypes.js.map +1 -1
- package/dist/src/restLevelClient/generateTopLevelIndexFile.d.ts +4 -0
- package/dist/src/restLevelClient/generateTopLevelIndexFile.d.ts.map +1 -0
- package/dist/src/restLevelClient/generateTopLevelIndexFile.js +41 -0
- package/dist/src/restLevelClient/generateTopLevelIndexFile.js.map +1 -0
- package/dist/src/restLevelClient/helpers/operationHelpers.d.ts +10 -0
- package/dist/src/restLevelClient/helpers/operationHelpers.d.ts.map +1 -0
- package/dist/src/restLevelClient/helpers/operationHelpers.js +64 -0
- package/dist/src/restLevelClient/helpers/operationHelpers.js.map +1 -0
- package/dist/src/restLevelClient/interfaces.d.ts +24 -0
- package/dist/src/restLevelClient/interfaces.d.ts.map +1 -0
- package/dist/src/restLevelClient/interfaces.js +3 -0
- package/dist/src/restLevelClient/interfaces.js.map +1 -0
- package/dist/src/restLevelClient/operationHelpers.d.ts.map +1 -1
- package/dist/src/restLevelClient/operationHelpers.js +4 -1
- package/dist/src/restLevelClient/operationHelpers.js.map +1 -1
- package/dist/src/restLevelClient/schemaHelpers.d.ts.map +1 -1
- package/dist/src/restLevelClient/schemaHelpers.js +4 -1
- package/dist/src/restLevelClient/schemaHelpers.js.map +1 -1
- package/dist/src/transforms/operationTransforms.d.ts.map +1 -1
- package/dist/src/transforms/operationTransforms.js +1 -0
- package/dist/src/transforms/operationTransforms.js.map +1 -1
- package/dist/src/transforms/samplesTransforms.d.ts +7 -0
- package/dist/src/transforms/samplesTransforms.d.ts.map +1 -0
- package/dist/src/transforms/samplesTransforms.js +283 -0
- package/dist/src/transforms/samplesTransforms.js.map +1 -0
- package/dist/src/transforms/transforms.d.ts +1 -2
- package/dist/src/transforms/transforms.d.ts.map +1 -1
- package/dist/src/transforms/transforms.js +4 -3
- package/dist/src/transforms/transforms.js.map +1 -1
- package/dist/src/typescriptGenerator.d.ts +2 -2
- package/dist/src/typescriptGenerator.d.ts.map +1 -1
- package/dist/src/typescriptGenerator.js +19 -8
- package/dist/src/typescriptGenerator.js.map +1 -1
- package/dist/src/utils/autorestOptions.d.ts +2 -2
- package/dist/src/utils/autorestOptions.d.ts.map +1 -1
- package/dist/src/utils/autorestOptions.js +107 -30
- package/dist/src/utils/autorestOptions.js.map +1 -1
- package/dist/src/utils/nameUtils.d.ts +6 -2
- package/dist/src/utils/nameUtils.d.ts.map +1 -1
- package/dist/src/utils/nameUtils.js +9 -5
- package/dist/src/utils/nameUtils.js.map +1 -1
- package/dist/src/utils/schemaHelpers.js +8 -3
- package/dist/src/utils/schemaHelpers.js.map +1 -1
- package/package.json +16 -10
- package/src/autorestSession.ts +20 -16
- package/src/conflictResolver.ts +0 -1
- package/src/generators/clientFileGenerator.ts +264 -33
- package/src/generators/indexGenerator.ts +78 -9
- package/src/generators/modelsGenerator.ts +21 -1
- package/src/generators/operationGenerator.ts +11 -9
- package/src/generators/samples/sampleEnv.hbs +4 -0
- package/src/generators/samples/sampleEnvGenerator.ts +14 -0
- package/src/generators/samples/sampleGenerator.ts +50 -0
- package/src/generators/static/apiExtractorConfig.ts +2 -2
- package/src/generators/static/esLintConfigGenerator.ts +24 -0
- package/src/generators/static/{README.md.hbs → hlcREADME.md.hbs} +23 -0
- package/src/generators/static/karma.conf.js.hbs +141 -0
- package/src/generators/static/karmaConfigFileGenerator.ts +20 -0
- package/src/generators/static/packageFileGenerator.ts +187 -48
- package/src/generators/static/readmeFileGenerator.ts +64 -35
- package/src/generators/static/rlcREADME.md.hbs +71 -0
- package/src/generators/static/rollupConfigFileGenerator.ts +13 -71
- package/src/generators/static/samples.ts.hbs +49 -0
- package/src/generators/static/tsConfigFileGenerator.ts +47 -20
- package/src/generators/test/envBrowserFileGenerator.ts +14 -0
- package/src/generators/test/envFileGenerator.ts +22 -0
- package/src/generators/test/recordedClientFileGenerator.ts +22 -0
- package/src/generators/test/rlcEnv.ts.hbs +3 -0
- package/src/generators/test/rlcRecordedClient.ts.hbs +35 -0
- package/src/generators/test/rlcSampleTest.spec.ts.hbs +19 -0
- package/src/generators/{static → test}/sampleTest.ts.hbs +0 -0
- package/src/generators/test/sampleTestGenerator.ts +23 -8
- package/src/generators/utils/pagingOperations.ts +1 -1
- package/src/main.ts +8 -5
- package/src/models/clientDetails.ts +8 -0
- package/src/models/modelDetails.ts +2 -2
- package/src/models/operationDetails.ts +1 -0
- package/src/models/sampleDetails.ts +22 -0
- package/src/restLevelClient/generateClient.ts +99 -250
- package/src/restLevelClient/generateClientDefinition.ts +343 -0
- package/src/restLevelClient/generateMethodShortcuts.ts +121 -0
- package/src/restLevelClient/generateObjectTypes.ts +1 -3
- package/src/restLevelClient/generatePagingHelper.ts +3 -2
- package/src/restLevelClient/generateParameterTypes.ts +295 -70
- package/src/restLevelClient/generatePollingHelper.ts +3 -3
- package/src/restLevelClient/generateResponseTypes.ts +13 -7
- package/src/restLevelClient/generateRestLevel.ts +32 -7
- package/src/restLevelClient/generateSchemaTypes.ts +5 -3
- package/src/restLevelClient/generateTopLevelIndexFile.ts +41 -0
- package/src/restLevelClient/helpers/operationHelpers.ts +93 -0
- package/src/restLevelClient/interfaces.ts +26 -0
- package/src/restLevelClient/operationHelpers.ts +8 -2
- package/src/restLevelClient/schemaHelpers.ts +4 -2
- package/src/transforms/operationTransforms.ts +1 -0
- package/src/transforms/samplesTransforms.ts +300 -0
- package/src/transforms/transforms.ts +6 -6
- package/src/typescriptGenerator.ts +20 -11
- package/src/utils/autorestOptions.ts +170 -59
- package/src/utils/nameUtils.ts +16 -8
- package/src/utils/schemaHelpers.ts +2 -2
- package/dist/src/generators/clientContextFileGenerator.d.ts +0 -5
- package/dist/src/generators/clientContextFileGenerator.d.ts.map +0 -1
- package/dist/src/generators/clientContextFileGenerator.js +0 -263
- package/dist/src/generators/clientContextFileGenerator.js.map +0 -1
- package/dist/src/restLevelClient/helpers/getOperationParameters.d.ts +0 -6
- package/dist/src/restLevelClient/helpers/getOperationParameters.d.ts.map +0 -1
- package/dist/src/restLevelClient/helpers/getOperationParameters.js +0 -29
- package/dist/src/restLevelClient/helpers/getOperationParameters.js.map +0 -1
- package/src/generators/clientContextFileGenerator.ts +0 -405
- package/src/restLevelClient/helpers/getOperationParameters.ts +0 -34
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ImplementationLocation,
|
|
3
|
+
Operation,
|
|
4
|
+
Parameter,
|
|
5
|
+
SchemaContext
|
|
6
|
+
} from "@autorest/codemodel";
|
|
7
|
+
import {
|
|
8
|
+
OptionalKind,
|
|
9
|
+
MethodSignatureStructure,
|
|
10
|
+
ParameterDeclarationStructure
|
|
11
|
+
} from "ts-morph";
|
|
12
|
+
import { Methods, PathParameter } from "../interfaces";
|
|
13
|
+
import { getElementType } from "../schemaHelpers";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Given an operation, extract all its parameters
|
|
17
|
+
*/
|
|
18
|
+
export function getOperationParameters(
|
|
19
|
+
operation: Operation,
|
|
20
|
+
requestIndex = 0
|
|
21
|
+
): Parameter[] {
|
|
22
|
+
const operationParams = [
|
|
23
|
+
...(operation.parameters ?? []),
|
|
24
|
+
...(operation.signatureParameters ?? [])
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
const distinctParams = new Set(operationParams);
|
|
28
|
+
|
|
29
|
+
if (operation.requests) {
|
|
30
|
+
[
|
|
31
|
+
...(operation.requests[requestIndex].parameters ?? []),
|
|
32
|
+
...(operation.requests[requestIndex].signatureParameters ?? [])
|
|
33
|
+
].forEach(p => distinctParams.add(p));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return [...distinctParams].filter(filterMethodNotSynthetic);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function filterMethodNotSynthetic(parameter: Parameter) {
|
|
40
|
+
const isApiVersion =
|
|
41
|
+
parameter.origin &&
|
|
42
|
+
parameter.language.default.serializedName === "api-version" &&
|
|
43
|
+
parameter.implementation === ImplementationLocation.Method;
|
|
44
|
+
// Origin is added by M4 on synthetic parameters
|
|
45
|
+
return (
|
|
46
|
+
(!parameter.origin || isApiVersion) &&
|
|
47
|
+
parameter.implementation === ImplementationLocation.Method
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function buildMethodDefinitions(
|
|
52
|
+
methods: Methods,
|
|
53
|
+
pathParams: PathParameter[] = []
|
|
54
|
+
): OptionalKind<MethodSignatureStructure>[] {
|
|
55
|
+
const methodDefinitions: OptionalKind<MethodSignatureStructure>[] = [];
|
|
56
|
+
for (const key of Object.keys(methods)) {
|
|
57
|
+
const method = methods[key];
|
|
58
|
+
const description = methods[key][0].description;
|
|
59
|
+
|
|
60
|
+
let areAllOptional = methods[key][0].hasOptionalOptions;
|
|
61
|
+
|
|
62
|
+
methodDefinitions.push({
|
|
63
|
+
name: key,
|
|
64
|
+
...(description && { docs: [{ description }] }),
|
|
65
|
+
parameters: [
|
|
66
|
+
...getPathParamDefinitions(pathParams),
|
|
67
|
+
{
|
|
68
|
+
name: "options",
|
|
69
|
+
hasQuestionToken: areAllOptional,
|
|
70
|
+
type: method.map(m => m.optionsName).join(" | ")
|
|
71
|
+
}
|
|
72
|
+
],
|
|
73
|
+
returnType: method.map(m => m.returnType).join(" | ")
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return methodDefinitions;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export function getPathParamDefinitions(
|
|
81
|
+
pathParams: PathParameter[]
|
|
82
|
+
): OptionalKind<ParameterDeclarationStructure>[] {
|
|
83
|
+
return pathParams.map(p => {
|
|
84
|
+
return {
|
|
85
|
+
name: p.name,
|
|
86
|
+
type: getElementType(p.schema, [
|
|
87
|
+
SchemaContext.Input,
|
|
88
|
+
SchemaContext.Exception
|
|
89
|
+
]),
|
|
90
|
+
description: p.description
|
|
91
|
+
};
|
|
92
|
+
});
|
|
93
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Schema } from "@autorest/codemodel";
|
|
2
|
+
|
|
3
|
+
export type PathParameter = {
|
|
4
|
+
name: string;
|
|
5
|
+
schema: Schema;
|
|
6
|
+
description?: string;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export type Methods = {
|
|
10
|
+
[key: string]: [
|
|
11
|
+
{
|
|
12
|
+
optionsName: string;
|
|
13
|
+
description: string;
|
|
14
|
+
hasOptionalOptions: boolean;
|
|
15
|
+
returnType: string;
|
|
16
|
+
}
|
|
17
|
+
];
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export type Paths = {
|
|
21
|
+
[key: string]: {
|
|
22
|
+
name: string;
|
|
23
|
+
pathParameters: PathParameter[];
|
|
24
|
+
methods: Methods;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
@@ -2,7 +2,9 @@ import {
|
|
|
2
2
|
AnyObjectSchema,
|
|
3
3
|
Operation,
|
|
4
4
|
SchemaResponse,
|
|
5
|
-
Response
|
|
5
|
+
Response,
|
|
6
|
+
Schema,
|
|
7
|
+
BinarySchema
|
|
6
8
|
} from "@autorest/codemodel";
|
|
7
9
|
import { getLanguageMetadata } from "../utils/languageHelpers";
|
|
8
10
|
import { NameType, normalizeName } from "../utils/nameUtils";
|
|
@@ -22,7 +24,11 @@ export function getResponseTypeName(
|
|
|
22
24
|
|
|
23
25
|
export function responseToSchemaResponse(response: Response | SchemaResponse) {
|
|
24
26
|
if (!isSchemaResponse(response)) {
|
|
25
|
-
|
|
27
|
+
let schema: Schema = (response as any).binary
|
|
28
|
+
? new BinarySchema("Binary schema")
|
|
29
|
+
: new AnyObjectSchema("AnyObject schema");
|
|
30
|
+
|
|
31
|
+
return new SchemaResponse(schema, {
|
|
26
32
|
...response
|
|
27
33
|
});
|
|
28
34
|
} else {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AnyObjectSchema,
|
|
3
3
|
ArraySchema,
|
|
4
|
-
ByteArraySchema,
|
|
5
4
|
ChoiceSchema,
|
|
6
5
|
ConstantSchema,
|
|
7
6
|
DictionarySchema,
|
|
@@ -115,7 +114,6 @@ export function primitiveSchemaToType(
|
|
|
115
114
|
case SchemaType.Char:
|
|
116
115
|
return "string";
|
|
117
116
|
case SchemaType.ByteArray:
|
|
118
|
-
case SchemaType.Binary:
|
|
119
117
|
case SchemaType.Duration:
|
|
120
118
|
case SchemaType.Credential:
|
|
121
119
|
case SchemaType.UnixTime:
|
|
@@ -123,6 +121,10 @@ export function primitiveSchemaToType(
|
|
|
123
121
|
case SchemaType.Uuid:
|
|
124
122
|
case SchemaType.String:
|
|
125
123
|
return "string";
|
|
124
|
+
case SchemaType.Binary:
|
|
125
|
+
return schemaUse.includes(SchemaContext.Output)
|
|
126
|
+
? "Uint8Array"
|
|
127
|
+
: "string | Uint8Array";
|
|
126
128
|
case SchemaType.Boolean:
|
|
127
129
|
return "boolean";
|
|
128
130
|
case SchemaType.Choice:
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ChoiceSchema,
|
|
3
|
+
CodeModel,
|
|
4
|
+
ConstantSchema,
|
|
5
|
+
ImplementationLocation,
|
|
6
|
+
Operation,
|
|
7
|
+
OperationGroup,
|
|
8
|
+
SchemaType
|
|
9
|
+
} from "@autorest/codemodel";
|
|
10
|
+
import { ClientDetails } from "../models/clientDetails";
|
|
11
|
+
import { SampleGroup, SampleDetails } from "../models/sampleDetails";
|
|
12
|
+
import { ExampleValue, TestCodeModel } from "@autorest/testmodeler";
|
|
13
|
+
import { getLanguageMetadata } from "../utils/languageHelpers";
|
|
14
|
+
import { getAutorestOptions, getSession } from "../autorestSession";
|
|
15
|
+
import { getOperationFullName, NameType, normalizeName } from "../utils/nameUtils";
|
|
16
|
+
import { calculateMethodName } from "../generators/utils/operationsUtils";
|
|
17
|
+
import { camelCase } from "@azure-tools/codegen";
|
|
18
|
+
import { OperationGroupDetails } from "../models/operationDetails";
|
|
19
|
+
import { getPublicMethodName } from '../generators/utils/pagingOperations';
|
|
20
|
+
import { getTypeForSchema } from "../utils/schemaHelpers";
|
|
21
|
+
|
|
22
|
+
export async function transformSamples(
|
|
23
|
+
codeModel: CodeModel,
|
|
24
|
+
clientDetails: ClientDetails
|
|
25
|
+
): Promise<SampleGroup[]> {
|
|
26
|
+
return await getAllExamples(codeModel as TestCodeModel, clientDetails);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function getTransformedOperationGroup(operationGroup: OperationGroup, operationGroupDetails: OperationGroupDetails[]) {
|
|
30
|
+
return operationGroupDetails.filter(operationGroupDetail => operationGroup.$key === operationGroupDetail.originalKey)[0];
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function getTransformedOperation(operationGroup: OperationGroup, operation: Operation, operationGroupDetails: OperationGroupDetails, clientName: string) {
|
|
34
|
+
return operationGroupDetails.operations.filter(operationDetail => operationDetail.fullName === getOperationFullName(operationGroup, operation, clientName))[0];
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export async function getAllExamples(codeModel: TestCodeModel, clientDetails: ClientDetails) {
|
|
38
|
+
const operationGroupDetails = clientDetails.operationGroups;
|
|
39
|
+
const { packageDetails } = getAutorestOptions();
|
|
40
|
+
const session = getSession();
|
|
41
|
+
let examplesModels: SampleGroup[] = [];
|
|
42
|
+
if (codeModel?.testModel?.mockTest?.exampleGroups !== undefined) {
|
|
43
|
+
for (const exampleGroup of codeModel.testModel.mockTest.exampleGroups) {
|
|
44
|
+
const clientName = getLanguageMetadata(codeModel.language).name;
|
|
45
|
+
const ogDetails = getTransformedOperationGroup(exampleGroup.operationGroup, operationGroupDetails);
|
|
46
|
+
if (ogDetails === undefined) {
|
|
47
|
+
session.error("An error was encountered while transforming sample", [
|
|
48
|
+
exampleGroup.operationId
|
|
49
|
+
]);
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (!(exampleGroup?.examples?.length > 0)) {
|
|
53
|
+
// Skip tranforming sample detail no given example in group
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
const opDetails = getTransformedOperation(
|
|
57
|
+
exampleGroup.operationGroup,
|
|
58
|
+
exampleGroup.operation,
|
|
59
|
+
ogDetails,
|
|
60
|
+
clientName
|
|
61
|
+
);
|
|
62
|
+
let methodName = calculateMethodName(opDetails);
|
|
63
|
+
if (opDetails.isLro && opDetails.pagination === undefined) {
|
|
64
|
+
methodName = `${methodName}AndWait`;
|
|
65
|
+
} else if (opDetails.pagination) {
|
|
66
|
+
methodName = getPublicMethodName(opDetails);
|
|
67
|
+
}
|
|
68
|
+
const opGroupName = ogDetails.name;
|
|
69
|
+
const importedTypeSet = new Set<string>();
|
|
70
|
+
const operatonConcante = `${exampleGroup?.operationGroup?.language?.default?.name}${exampleGroup?.operation?.language?.default?.name}`;
|
|
71
|
+
const sampleGroup: SampleGroup = {
|
|
72
|
+
sampleFileName: `${camelCase(_transformSpecialLetterToSpace(operatonConcante))}Sample`,
|
|
73
|
+
clientClassName: clientName,
|
|
74
|
+
clientPackageName: packageDetails.name,
|
|
75
|
+
samples: [],
|
|
76
|
+
importedTypes: []
|
|
77
|
+
};
|
|
78
|
+
try {
|
|
79
|
+
for (const example of exampleGroup.examples) {
|
|
80
|
+
const sample: SampleDetails = {
|
|
81
|
+
sampleFunctionName: camelCase(_transformSpecialLetterToSpace(example?.name)),
|
|
82
|
+
clientParameterNames: "",
|
|
83
|
+
methodParameterNames: "",
|
|
84
|
+
clientParamAssignments: [],
|
|
85
|
+
methodParamAssignments: [],
|
|
86
|
+
originalFileLocation: example.originalFile,
|
|
87
|
+
isTopLevel: ogDetails.isTopLevel,
|
|
88
|
+
isPaging: opDetails.pagination !== undefined,
|
|
89
|
+
operationName: methodName,
|
|
90
|
+
clientClassName: clientName,
|
|
91
|
+
operationGroupName: normalizeName(opGroupName, NameType.Property, true),
|
|
92
|
+
operationDescription: getLanguageMetadata(
|
|
93
|
+
exampleGroup.operation.language
|
|
94
|
+
).description,
|
|
95
|
+
};
|
|
96
|
+
const clientParameterNames = ["credential"];
|
|
97
|
+
const requiredParams = clientDetails.parameters.filter(
|
|
98
|
+
param =>
|
|
99
|
+
param.required &&
|
|
100
|
+
param.implementationLocation === ImplementationLocation.Client &&
|
|
101
|
+
!param.defaultValue &&
|
|
102
|
+
param.schemaType !== SchemaType.Constant
|
|
103
|
+
);
|
|
104
|
+
for (const clientParameter of example.clientParameters) {
|
|
105
|
+
if (
|
|
106
|
+
clientParameter.exampleValue.schema.type === SchemaType.Constant
|
|
107
|
+
) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
const parameterName = normalizeName(
|
|
111
|
+
getLanguageMetadata(clientParameter.exampleValue.language).name,
|
|
112
|
+
NameType.Parameter,
|
|
113
|
+
true
|
|
114
|
+
);
|
|
115
|
+
const paramAssignment =
|
|
116
|
+
`const ${parameterName} = ` +
|
|
117
|
+
getParameterAssignment(clientParameter.exampleValue);
|
|
118
|
+
sample.clientParamAssignments.push(paramAssignment);
|
|
119
|
+
clientParameterNames.push(parameterName);
|
|
120
|
+
}
|
|
121
|
+
if (clientParameterNames.indexOf("subscriptionId") < 0 && requiredParams.find(param => param.name === 'subscriptionId')) {
|
|
122
|
+
const subscriptionIdAssignment = `const subscriptionId = "00000000-0000-0000-0000-000000000000"`;
|
|
123
|
+
sample.clientParamAssignments.push(subscriptionIdAssignment);
|
|
124
|
+
clientParameterNames.push('subscriptionId');
|
|
125
|
+
}
|
|
126
|
+
if (clientParameterNames.length > 0) {
|
|
127
|
+
sample.clientParameterNames = clientParameterNames.join(", ");
|
|
128
|
+
}
|
|
129
|
+
const methodParameterNames = [];
|
|
130
|
+
const optionalParams: [string, string][] = [];
|
|
131
|
+
for (const methodParameter of example.methodParameters) {
|
|
132
|
+
if (
|
|
133
|
+
methodParameter.exampleValue.schema.type === SchemaType.Constant
|
|
134
|
+
) {
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
const parameterName = normalizeName(
|
|
138
|
+
getLanguageMetadata(methodParameter.exampleValue.language).name,
|
|
139
|
+
NameType.Parameter,
|
|
140
|
+
true
|
|
141
|
+
);
|
|
142
|
+
const parameterTypeDetails = getTypeForSchema(
|
|
143
|
+
methodParameter.exampleValue.schema
|
|
144
|
+
);
|
|
145
|
+
const parameterTypeName = parameterTypeDetails.typeName;
|
|
146
|
+
let paramAssignment = "";
|
|
147
|
+
if (methodParameter.parameter.protocol?.http?.["in"] === "body") {
|
|
148
|
+
let bodySchemaName = parameterTypeName;
|
|
149
|
+
if (methodParameter.exampleValue.schema.type === SchemaType.AnyObject || methodParameter.exampleValue.schema.type === SchemaType.Any) {
|
|
150
|
+
bodySchemaName = "Record<string, unknown>";
|
|
151
|
+
} else {
|
|
152
|
+
importedTypeSet.add(parameterTypeName);
|
|
153
|
+
}
|
|
154
|
+
paramAssignment =
|
|
155
|
+
`const ${parameterName}: ${bodySchemaName} = ` +
|
|
156
|
+
getParameterAssignment(methodParameter.exampleValue);
|
|
157
|
+
} else {
|
|
158
|
+
paramAssignment =
|
|
159
|
+
`const ${parameterName} = ` +
|
|
160
|
+
getParameterAssignment(methodParameter.exampleValue);
|
|
161
|
+
}
|
|
162
|
+
if (!methodParameter.parameter.required) {
|
|
163
|
+
optionalParams.push([parameterName, parameterTypeName]);
|
|
164
|
+
} else {
|
|
165
|
+
methodParameterNames.push(parameterName);
|
|
166
|
+
}
|
|
167
|
+
sample.methodParamAssignments.push(paramAssignment);
|
|
168
|
+
}
|
|
169
|
+
if (optionalParams.length > 0) {
|
|
170
|
+
const optionTypeName = `${opDetails.typeDetails.typeName}OptionalParams`;
|
|
171
|
+
importedTypeSet.add(optionTypeName);
|
|
172
|
+
const optionAssignment = `const options: ${optionTypeName} = {${optionalParams
|
|
173
|
+
.map(item => { return item[0]; })
|
|
174
|
+
.join(", ")}}`;
|
|
175
|
+
sample.methodParamAssignments.push(optionAssignment);
|
|
176
|
+
methodParameterNames.push("options");
|
|
177
|
+
}
|
|
178
|
+
if (methodParameterNames.length > 0) {
|
|
179
|
+
sample.methodParameterNames = methodParameterNames.join(", ");
|
|
180
|
+
}
|
|
181
|
+
sampleGroup.samples.push(sample);
|
|
182
|
+
}
|
|
183
|
+
} catch (error) {
|
|
184
|
+
session.error("An error was encountered while transforming sample", [
|
|
185
|
+
exampleGroup.operationId
|
|
186
|
+
]);
|
|
187
|
+
throw error;
|
|
188
|
+
}
|
|
189
|
+
if (sampleGroup.samples.length > 0) {
|
|
190
|
+
// enrich the importedTypes after all examples resolved
|
|
191
|
+
sampleGroup.importedTypes = Array.from(importedTypeSet);
|
|
192
|
+
examplesModels.push(sampleGroup);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return examplesModels;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
function _transformSpecialLetterToSpace(str: string) {
|
|
200
|
+
if (!str) {
|
|
201
|
+
return str;
|
|
202
|
+
}
|
|
203
|
+
return str.replace(/_/g, ' ').replace(/\//g, ' Or ').replace(/,|\.|\(|\)/g, ' ').replace('\'s ', ' ');
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
function getParameterAssignment(exampleValue: ExampleValue) {
|
|
207
|
+
let schemaType = exampleValue.schema.type;
|
|
208
|
+
const rawValue = exampleValue.rawValue;
|
|
209
|
+
let retValue = rawValue;
|
|
210
|
+
switch (schemaType) {
|
|
211
|
+
case SchemaType.Constant:
|
|
212
|
+
const contentSchema = exampleValue.schema as ConstantSchema;
|
|
213
|
+
schemaType = contentSchema.valueType.type;
|
|
214
|
+
break;
|
|
215
|
+
case SchemaType.Choice:
|
|
216
|
+
case SchemaType.SealedChoice:
|
|
217
|
+
const choiceSchema = exampleValue.schema as ChoiceSchema;
|
|
218
|
+
schemaType = choiceSchema.choiceType.type;
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
221
|
+
if (rawValue === null) {
|
|
222
|
+
switch (schemaType) {
|
|
223
|
+
case SchemaType.Object:
|
|
224
|
+
case SchemaType.Any:
|
|
225
|
+
case SchemaType.Dictionary:
|
|
226
|
+
case SchemaType.AnyObject:
|
|
227
|
+
retValue = `{}`;
|
|
228
|
+
break;
|
|
229
|
+
case SchemaType.Array:
|
|
230
|
+
retValue = `[]`;
|
|
231
|
+
break;
|
|
232
|
+
default:
|
|
233
|
+
retValue = undefined;
|
|
234
|
+
}
|
|
235
|
+
return retValue;
|
|
236
|
+
}
|
|
237
|
+
switch (schemaType) {
|
|
238
|
+
case SchemaType.String:
|
|
239
|
+
case SchemaType.Char:
|
|
240
|
+
case SchemaType.Time:
|
|
241
|
+
case SchemaType.Uuid:
|
|
242
|
+
case SchemaType.Uri:
|
|
243
|
+
case SchemaType.Credential:
|
|
244
|
+
case SchemaType.Duration:
|
|
245
|
+
retValue = `"${rawValue?.toString().replace(/"/g, '\\"').replace(/\n/g, '\\n')}"`;
|
|
246
|
+
break;
|
|
247
|
+
case SchemaType.Boolean:
|
|
248
|
+
(retValue = rawValue), toString();
|
|
249
|
+
break;
|
|
250
|
+
case SchemaType.Object:
|
|
251
|
+
case SchemaType.Dictionary:
|
|
252
|
+
const values = [];
|
|
253
|
+
for (const prop in exampleValue.properties) {
|
|
254
|
+
const property = exampleValue.properties[prop];
|
|
255
|
+
if (property === undefined || property === null) {
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
const initPropName = property.language?.default?.name
|
|
259
|
+
? property.language?.default?.name
|
|
260
|
+
: prop;
|
|
261
|
+
const propName = normalizeName(initPropName, NameType.Property, true);
|
|
262
|
+
let propRetValue: string;
|
|
263
|
+
if (propName.indexOf("/") > -1 || propName.match(/^\d/)) {
|
|
264
|
+
propRetValue = `"${propName}": ` + getParameterAssignment(property);
|
|
265
|
+
} else {
|
|
266
|
+
propRetValue = `${propName}: ` + getParameterAssignment(property);
|
|
267
|
+
}
|
|
268
|
+
values.push(propRetValue);
|
|
269
|
+
}
|
|
270
|
+
if (values.length > 0) {
|
|
271
|
+
retValue = `{${values.join(", ")}}`;
|
|
272
|
+
} else {
|
|
273
|
+
retValue = "{}";
|
|
274
|
+
}
|
|
275
|
+
break;
|
|
276
|
+
case SchemaType.Array:
|
|
277
|
+
const valuesArr = [];
|
|
278
|
+
for (const element of <ExampleValue[]>exampleValue.elements) {
|
|
279
|
+
let propRetValueArr = getParameterAssignment(element);
|
|
280
|
+
valuesArr.push(propRetValueArr);
|
|
281
|
+
}
|
|
282
|
+
if (valuesArr.length > 0) {
|
|
283
|
+
retValue = `[${valuesArr.join(", ")}]`;
|
|
284
|
+
} else {
|
|
285
|
+
retValue = "[]";
|
|
286
|
+
}
|
|
287
|
+
break;
|
|
288
|
+
case SchemaType.Date:
|
|
289
|
+
case SchemaType.DateTime:
|
|
290
|
+
retValue = `new Date("${rawValue}")`;
|
|
291
|
+
break;
|
|
292
|
+
case SchemaType.Any:
|
|
293
|
+
case SchemaType.AnyObject:
|
|
294
|
+
retValue = `${JSON.stringify(rawValue)}`;
|
|
295
|
+
break;
|
|
296
|
+
default:
|
|
297
|
+
break;
|
|
298
|
+
}
|
|
299
|
+
return retValue;
|
|
300
|
+
}
|
|
@@ -18,8 +18,8 @@ import { transformOperationGroups } from "./operationTransforms";
|
|
|
18
18
|
import { transformOptions } from "./optionsTransforms";
|
|
19
19
|
import { transformParameters } from "./parameterTransforms";
|
|
20
20
|
import { transformObjects, transformObject } from "./objectTransforms";
|
|
21
|
+
import { transformSamples } from "./samplesTransforms";
|
|
21
22
|
import { ObjectDetails } from "../models/modelDetails";
|
|
22
|
-
import { Host } from "@autorest/extension-base";
|
|
23
23
|
import { transformBaseUrl } from "./urlTransforms";
|
|
24
24
|
import { normalizeModelWithExtensions } from "./extensions";
|
|
25
25
|
import { transformGroups } from "./groupTransforms";
|
|
@@ -80,8 +80,7 @@ export function transformChoice(
|
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
export async function transformCodeModel(
|
|
83
|
-
codeModel: CodeModel
|
|
84
|
-
host: Host
|
|
83
|
+
codeModel: CodeModel
|
|
85
84
|
): Promise<ClientDetails> {
|
|
86
85
|
const { name: clientName } = getLanguageMetadata(codeModel.language);
|
|
87
86
|
const className = normalizeName(
|
|
@@ -101,12 +100,12 @@ export async function transformCodeModel(
|
|
|
101
100
|
|
|
102
101
|
const options = await transformOptions(operationGroups);
|
|
103
102
|
|
|
104
|
-
const [objects, groups, mappers, unions, parameters] = await Promise.all([
|
|
103
|
+
const [objects, groups, mappers, unions, parameters ] = await Promise.all([
|
|
105
104
|
transformObjects(codeModel, uberParents),
|
|
106
105
|
transformGroups(codeModel),
|
|
107
106
|
transformMappers(codeModel, uberParents, options),
|
|
108
107
|
transformChoices(codeModel),
|
|
109
|
-
transformParameters(codeModel, options)
|
|
108
|
+
transformParameters(codeModel, options),
|
|
110
109
|
]);
|
|
111
110
|
|
|
112
111
|
const baseUrl = transformBaseUrl(codeModel);
|
|
@@ -122,7 +121,8 @@ export async function transformCodeModel(
|
|
|
122
121
|
operationGroups,
|
|
123
122
|
parameters,
|
|
124
123
|
options,
|
|
125
|
-
endpoint: baseUrl
|
|
124
|
+
endpoint: baseUrl,
|
|
125
|
+
allTypes: []
|
|
126
126
|
};
|
|
127
127
|
}
|
|
128
128
|
|
|
@@ -6,10 +6,10 @@ import * as fsextra from "fs-extra";
|
|
|
6
6
|
import * as path from "path";
|
|
7
7
|
import { CodeModel } from "@autorest/codemodel";
|
|
8
8
|
import { Project, IndentationText } from "ts-morph";
|
|
9
|
-
import {
|
|
9
|
+
import { AutorestExtensionHost } from "@autorest/extension-base";
|
|
10
10
|
import { transformCodeModel } from "./transforms/transforms";
|
|
11
|
+
import { transformSamples } from './transforms/samplesTransforms';
|
|
11
12
|
import { generateClient } from "./generators/clientFileGenerator";
|
|
12
|
-
import { generateClientContext } from "./generators/clientContextFileGenerator";
|
|
13
13
|
import { generateModels } from "./generators/modelsGenerator";
|
|
14
14
|
import { generateMappers } from "./generators/mappersGenerator";
|
|
15
15
|
import { generateIndexFile } from "./generators/indexGenerator";
|
|
@@ -22,6 +22,8 @@ import { generateTsConfig } from "./generators/static/tsConfigFileGenerator";
|
|
|
22
22
|
import { generateRollupConfig } from "./generators/static/rollupConfigFileGenerator";
|
|
23
23
|
import { generateOperations } from "./generators/operationGenerator";
|
|
24
24
|
import { generateOperationsInterfaces } from "./generators/operationInterfaceGenerator";
|
|
25
|
+
import { generateSampleEnv } from './generators/samples/sampleEnvGenerator';
|
|
26
|
+
import { generateSamples } from './generators/samples/sampleGenerator';
|
|
25
27
|
import { generateParameters } from "./generators/parametersGenerator";
|
|
26
28
|
import { generateLroFiles } from "./generators/LROGenerator";
|
|
27
29
|
import { generateTracingFile } from "./generators/tracingFileGenerator";
|
|
@@ -48,7 +50,7 @@ const prettierJSONOptions: prettier.Options = {
|
|
|
48
50
|
|
|
49
51
|
export async function generateTypeScriptLibrary(
|
|
50
52
|
codeModel: CodeModel,
|
|
51
|
-
host:
|
|
53
|
+
host: AutorestExtensionHost
|
|
52
54
|
): Promise<void> {
|
|
53
55
|
const project = new Project({
|
|
54
56
|
useInMemoryFileSystem: true,
|
|
@@ -61,17 +63,22 @@ export async function generateTypeScriptLibrary(
|
|
|
61
63
|
packageDetails,
|
|
62
64
|
licenseHeader: shouldGenerateLicense,
|
|
63
65
|
generateTest,
|
|
66
|
+
generateSample,
|
|
64
67
|
outputPath,
|
|
65
68
|
srcPath
|
|
66
69
|
} = getAutorestOptions();
|
|
67
70
|
|
|
68
|
-
const clientDetails = await transformCodeModel(codeModel
|
|
71
|
+
const clientDetails = await transformCodeModel(codeModel);
|
|
69
72
|
conflictResolver(clientDetails);
|
|
70
73
|
|
|
74
|
+
generateModels(clientDetails, project);
|
|
75
|
+
if (generateSample) {
|
|
76
|
+
clientDetails.samples = await transformSamples(codeModel, clientDetails);
|
|
77
|
+
}
|
|
71
78
|
// Skip metadata generation if `generate-metadata` is explicitly false
|
|
72
79
|
generatePackageJson(project, clientDetails);
|
|
73
80
|
generateLicenseFile(project);
|
|
74
|
-
generateReadmeFile(
|
|
81
|
+
generateReadmeFile(codeModel.language, codeModel.info, project);
|
|
75
82
|
if (generateTest) {
|
|
76
83
|
generateSampleTestFile(project);
|
|
77
84
|
}
|
|
@@ -80,12 +87,14 @@ export async function generateTypeScriptLibrary(
|
|
|
80
87
|
generateApiExtractorConfig(project);
|
|
81
88
|
|
|
82
89
|
generateClient(clientDetails, project);
|
|
83
|
-
generateClientContext(clientDetails, packageDetails, project);
|
|
84
|
-
generateModels(clientDetails, project);
|
|
85
90
|
|
|
86
91
|
generateMappers(clientDetails, project);
|
|
87
92
|
generateOperations(clientDetails, project);
|
|
88
93
|
generateOperationsInterfaces(clientDetails, project);
|
|
94
|
+
if (generateSample && clientDetails?.samples?.length && clientDetails?.samples?.length > 0) {
|
|
95
|
+
generateSamples(clientDetails, project);
|
|
96
|
+
generateSampleEnv(project);
|
|
97
|
+
}
|
|
89
98
|
generateParameters(clientDetails, project);
|
|
90
99
|
generateIndexFile(project, clientDetails);
|
|
91
100
|
await generateLroFiles(clientDetails, project);
|
|
@@ -128,9 +137,9 @@ export async function generateTypeScriptLibrary(
|
|
|
128
137
|
}
|
|
129
138
|
|
|
130
139
|
// Write the file to the AutoRest host
|
|
131
|
-
host.
|
|
132
|
-
filePath.substr(1), // Get rid of the leading slash '/'
|
|
133
|
-
fileContents
|
|
134
|
-
);
|
|
140
|
+
host.writeFile({
|
|
141
|
+
filename: filePath.substr(1), // Get rid of the leading slash '/'
|
|
142
|
+
content: fileContents
|
|
143
|
+
});
|
|
135
144
|
}
|
|
136
145
|
}
|