@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
|
@@ -1,22 +1,26 @@
|
|
|
1
|
-
|
|
2
1
|
import {
|
|
3
2
|
CodeModel,
|
|
4
3
|
Operation,
|
|
5
4
|
Parameter,
|
|
6
|
-
SchemaContext
|
|
5
|
+
SchemaContext,
|
|
6
|
+
Request as OperationRequest,
|
|
7
|
+
ParameterLocation
|
|
7
8
|
} from "@autorest/codemodel";
|
|
8
9
|
import {
|
|
9
10
|
InterfaceDeclarationStructure,
|
|
10
11
|
Project,
|
|
12
|
+
PropertySignatureStructure,
|
|
11
13
|
SourceFile,
|
|
12
14
|
StructureKind
|
|
13
15
|
} from "ts-morph";
|
|
16
|
+
import * as path from 'path';
|
|
14
17
|
import { getLanguageMetadata } from "../utils/languageHelpers";
|
|
15
18
|
import { NameType, normalizeName } from "../utils/nameUtils";
|
|
16
|
-
import {
|
|
19
|
+
import { getPropertySignature } from "./getPropertySignature";
|
|
17
20
|
import { primitiveSchemaToType } from "./schemaHelpers";
|
|
18
|
-
import { getOperationParameters } from "./helpers/
|
|
21
|
+
import { getOperationParameters } from "./helpers/operationHelpers";
|
|
19
22
|
import { hasInputModels } from "./helpers/modelHelpers";
|
|
23
|
+
import { getAutorestOptions } from "../autorestSession";
|
|
20
24
|
|
|
21
25
|
/**
|
|
22
26
|
* Generates the interfaces describing each operation parameters
|
|
@@ -25,8 +29,9 @@ export function generateParameterInterfaces(
|
|
|
25
29
|
model: CodeModel,
|
|
26
30
|
project: Project
|
|
27
31
|
) {
|
|
32
|
+
const { srcPath } = getAutorestOptions();
|
|
28
33
|
const parametersFile = project.createSourceFile(
|
|
29
|
-
`
|
|
34
|
+
path.join(srcPath, `parameters.ts`),
|
|
30
35
|
undefined,
|
|
31
36
|
{
|
|
32
37
|
overwrite: true
|
|
@@ -41,56 +46,106 @@ export function generateParameterInterfaces(
|
|
|
41
46
|
let hasHeaders = false;
|
|
42
47
|
|
|
43
48
|
for (const operation of operations) {
|
|
44
|
-
const internalReferences = new Set<string>();
|
|
45
49
|
const operationName = normalizeName(
|
|
46
50
|
getLanguageMetadata(operation.language).name,
|
|
47
51
|
NameType.Interface
|
|
48
52
|
);
|
|
49
|
-
const parameterInterfaceName = `${operationName}Parameters`;
|
|
50
|
-
const parameters = getOperationParameters(operation);
|
|
51
|
-
|
|
52
|
-
const headerParameterDefinitions = buildHeaderParameterDefinitions(
|
|
53
|
-
operationName,
|
|
54
|
-
parameters,
|
|
55
|
-
parametersFile,
|
|
56
|
-
internalReferences,
|
|
57
|
-
);
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const queryParameterDefinitions = buildQueryParameterDefinition(
|
|
61
|
-
operationName,
|
|
62
|
-
parameters,
|
|
63
|
-
[SchemaContext.Input],
|
|
64
|
-
importedModels,
|
|
65
|
-
internalReferences
|
|
66
|
-
);
|
|
67
|
-
|
|
68
|
-
const bodyParameterDefinition = buildBodyParametersDefinition(
|
|
69
|
-
operationName,
|
|
70
|
-
parameters,
|
|
71
|
-
[SchemaContext.Input],
|
|
72
|
-
importedModels,
|
|
73
|
-
internalReferences
|
|
74
|
-
);
|
|
75
|
-
|
|
76
|
-
// Add interfaces for body and query parameters
|
|
77
|
-
parametersFile.addInterfaces([
|
|
78
|
-
...(bodyParameterDefinition ? [bodyParameterDefinition] : []),
|
|
79
|
-
...(queryParameterDefinitions ?? []),
|
|
80
|
-
...(headerParameterDefinitions ? [headerParameterDefinitions] : [])
|
|
81
|
-
]);
|
|
82
53
|
|
|
83
|
-
|
|
84
|
-
|
|
54
|
+
const requestCount = operation?.requests?.length ?? 0;
|
|
55
|
+
const topParamName = `${operationName}Parameters`;
|
|
56
|
+
const subParamNames: string[] = [];
|
|
57
|
+
|
|
58
|
+
// We need to loop the requests. An operation with multiple requests means that
|
|
59
|
+
// the operation can get different values for content-type and each value may
|
|
60
|
+
// have a different type associated to it.
|
|
61
|
+
for (let i = 0; i < requestCount; i++) {
|
|
62
|
+
const internalReferences = new Set<string>();
|
|
63
|
+
// In case we have more than one request to model we need to add a suffix to differentiate
|
|
64
|
+
const nameSuffix = i > 0 ? `${i}` : "";
|
|
65
|
+
const parameterInterfaceName =
|
|
66
|
+
requestCount > 1
|
|
67
|
+
? `${operationName}RequestParameters${nameSuffix}`
|
|
68
|
+
: topParamName;
|
|
69
|
+
const parameters = getOperationParameters(operation, i);
|
|
70
|
+
const queryParameterDefinitions = buildQueryParameterDefinition(
|
|
71
|
+
operationName,
|
|
72
|
+
parameters,
|
|
73
|
+
[SchemaContext.Input],
|
|
74
|
+
importedModels,
|
|
75
|
+
internalReferences,
|
|
76
|
+
i
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
const request = operation.requests ? operation.requests[i] : undefined;
|
|
80
|
+
|
|
81
|
+
const pathParameterDefinitions = buildPathParameterDefinitions(
|
|
82
|
+
operationName,
|
|
83
|
+
parameters,
|
|
84
|
+
model,
|
|
85
|
+
parametersFile,
|
|
86
|
+
internalReferences,
|
|
87
|
+
i
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
const headerParameterDefinitions = buildHeaderParameterDefinitions(
|
|
91
|
+
operationName,
|
|
92
|
+
parameters,
|
|
93
|
+
parametersFile,
|
|
94
|
+
internalReferences,
|
|
95
|
+
i
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
const contentTypeParameterDefinition = buildContentTypeParametersDefinition(
|
|
99
|
+
operationName,
|
|
100
|
+
request,
|
|
101
|
+
internalReferences,
|
|
102
|
+
i
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
const bodyParameterDefinition = buildBodyParametersDefinition(
|
|
106
|
+
operationName,
|
|
107
|
+
parameters,
|
|
108
|
+
[SchemaContext.Input],
|
|
109
|
+
importedModels,
|
|
110
|
+
internalReferences,
|
|
111
|
+
i
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
// Add interfaces for body and query parameters
|
|
115
|
+
parametersFile.addInterfaces([
|
|
116
|
+
...(bodyParameterDefinition ?? []),
|
|
117
|
+
...(queryParameterDefinitions ?? []),
|
|
118
|
+
...(pathParameterDefinitions ? [pathParameterDefinitions]: []),
|
|
119
|
+
...(headerParameterDefinitions ? [headerParameterDefinitions] : []),
|
|
120
|
+
...(contentTypeParameterDefinition
|
|
121
|
+
? [contentTypeParameterDefinition]
|
|
122
|
+
: [])
|
|
123
|
+
]);
|
|
124
|
+
|
|
125
|
+
// Add Operation parameters type alias which is composed of the types we generated above
|
|
126
|
+
// plus the common type RequestParameters
|
|
127
|
+
parametersFile.addTypeAlias({
|
|
128
|
+
name: parameterInterfaceName,
|
|
129
|
+
isExported: true,
|
|
130
|
+
type: [...internalReferences, "RequestParameters"].join(" & ")
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
subParamNames.push(parameterInterfaceName);
|
|
134
|
+
|
|
135
|
+
if (headerParameterDefinitions !== undefined) {
|
|
136
|
+
hasHeaders = true;
|
|
137
|
+
}
|
|
85
138
|
}
|
|
86
139
|
|
|
87
140
|
// Add Operation parameters type alias which is composed of the types we generated above
|
|
88
141
|
// plus the common type RequestParameters
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
142
|
+
if (requestCount > 1) {
|
|
143
|
+
parametersFile.addTypeAlias({
|
|
144
|
+
name: topParamName,
|
|
145
|
+
isExported: true,
|
|
146
|
+
type: [...subParamNames].join(" | ")
|
|
147
|
+
});
|
|
148
|
+
}
|
|
94
149
|
}
|
|
95
150
|
|
|
96
151
|
if (hasHeaders) {
|
|
@@ -124,7 +179,9 @@ function getRequestHeaderInterfaceDefinition(
|
|
|
124
179
|
baseName: string
|
|
125
180
|
): undefined | InterfaceDeclarationStructure {
|
|
126
181
|
// Check if there are any required headers
|
|
127
|
-
const headerParameters = parameters.filter(
|
|
182
|
+
const headerParameters = parameters.filter(
|
|
183
|
+
p => p.protocol.http?.in === "header"
|
|
184
|
+
);
|
|
128
185
|
if (!headerParameters.length) {
|
|
129
186
|
return undefined;
|
|
130
187
|
}
|
|
@@ -138,27 +195,37 @@ function getRequestHeaderInterfaceDefinition(
|
|
|
138
195
|
return {
|
|
139
196
|
name: `"${getLanguageMetadata(h.language).serializedName}"`,
|
|
140
197
|
...(description && { docs: [{ description }] }),
|
|
141
|
-
type: primitiveSchemaToType(h.schema, [
|
|
198
|
+
type: primitiveSchemaToType(h.schema, [
|
|
199
|
+
SchemaContext.Input,
|
|
200
|
+
SchemaContext.Exception
|
|
201
|
+
]),
|
|
142
202
|
hasQuestionToken: !h.required
|
|
143
203
|
};
|
|
144
204
|
})
|
|
145
|
-
}
|
|
205
|
+
};
|
|
146
206
|
}
|
|
147
207
|
|
|
148
208
|
function buildHeaderParameterDefinitions(
|
|
149
209
|
operationName: string,
|
|
150
210
|
parameters: Parameter[],
|
|
151
211
|
parametersFile: SourceFile,
|
|
152
|
-
internalReferences: Set<string
|
|
212
|
+
internalReferences: Set<string>,
|
|
213
|
+
requestIndex: number
|
|
153
214
|
): InterfaceDeclarationStructure | undefined {
|
|
154
|
-
const headerParameters = parameters.filter(
|
|
215
|
+
const headerParameters = parameters.filter(
|
|
216
|
+
p => p.protocol.http?.in === "header"
|
|
217
|
+
);
|
|
155
218
|
if (!headerParameters.length) {
|
|
156
219
|
return undefined;
|
|
157
220
|
}
|
|
158
221
|
|
|
159
|
-
const
|
|
222
|
+
const nameSuffix = requestIndex > 0 ? `${requestIndex}` : "";
|
|
223
|
+
const headerParameterInterfaceName = `${operationName}HeaderParam${nameSuffix}`;
|
|
160
224
|
|
|
161
|
-
const headersInterface = getRequestHeaderInterfaceDefinition(
|
|
225
|
+
const headersInterface = getRequestHeaderInterfaceDefinition(
|
|
226
|
+
headerParameters,
|
|
227
|
+
operationName
|
|
228
|
+
);
|
|
162
229
|
|
|
163
230
|
if (headersInterface) {
|
|
164
231
|
parametersFile.addInterface(headersInterface);
|
|
@@ -180,6 +247,81 @@ function buildHeaderParameterDefinitions(
|
|
|
180
247
|
};
|
|
181
248
|
}
|
|
182
249
|
|
|
250
|
+
function getPathInterfaceDefinition(
|
|
251
|
+
parameters: Parameter[],
|
|
252
|
+
baseName: string,
|
|
253
|
+
model: CodeModel
|
|
254
|
+
): undefined | InterfaceDeclarationStructure {
|
|
255
|
+
// Check if there are any path parameters
|
|
256
|
+
const pathParameters = parameters.filter(
|
|
257
|
+
p => p.protocol.http?.in === ParameterLocation.Uri && model.globalParameters?.indexOf(p) === -1
|
|
258
|
+
);
|
|
259
|
+
if (!pathParameters.length) {
|
|
260
|
+
return undefined;
|
|
261
|
+
}
|
|
262
|
+
const pathInterfaceName = `${baseName}PathParameters`;
|
|
263
|
+
return {
|
|
264
|
+
kind: StructureKind.Interface,
|
|
265
|
+
isExported: true,
|
|
266
|
+
name: pathInterfaceName,
|
|
267
|
+
properties: pathParameters.map((h: Parameter) => {
|
|
268
|
+
const description = getLanguageMetadata(h.language).description;
|
|
269
|
+
return {
|
|
270
|
+
name: `"${getLanguageMetadata(h.language).serializedName}"`,
|
|
271
|
+
...(description && { docs: [{ description }] }),
|
|
272
|
+
type: primitiveSchemaToType(h.schema, [
|
|
273
|
+
SchemaContext.Input,
|
|
274
|
+
SchemaContext.Exception
|
|
275
|
+
]),
|
|
276
|
+
hasQuestionToken: !h.required
|
|
277
|
+
};
|
|
278
|
+
})
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
function buildPathParameterDefinitions(
|
|
283
|
+
operationName: string,
|
|
284
|
+
parameters: Parameter[],
|
|
285
|
+
model: CodeModel,
|
|
286
|
+
parametersFile: SourceFile,
|
|
287
|
+
internalReferences: Set<string>,
|
|
288
|
+
requestIndex: number
|
|
289
|
+
): InterfaceDeclarationStructure | undefined {
|
|
290
|
+
const pathParameters = parameters.filter(
|
|
291
|
+
p => p.protocol.http?.in === ParameterLocation.Uri && model.globalParameters?.indexOf(p) === -1
|
|
292
|
+
);
|
|
293
|
+
if (!pathParameters.length) {
|
|
294
|
+
return undefined;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
const nameSuffix = requestIndex > 0 ? `${requestIndex}` : "";
|
|
298
|
+
const pathParameterInterfaceName = `${operationName}PathParam${nameSuffix}`;
|
|
299
|
+
|
|
300
|
+
const pathInterface = getPathInterfaceDefinition(
|
|
301
|
+
pathParameters,
|
|
302
|
+
operationName,
|
|
303
|
+
model
|
|
304
|
+
);
|
|
305
|
+
|
|
306
|
+
if (pathInterface) {
|
|
307
|
+
parametersFile.addInterface(pathInterface);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
internalReferences.add(pathParameterInterfaceName);
|
|
311
|
+
|
|
312
|
+
return {
|
|
313
|
+
isExported: true,
|
|
314
|
+
kind: StructureKind.Interface,
|
|
315
|
+
name: pathParameterInterfaceName,
|
|
316
|
+
properties: [
|
|
317
|
+
{
|
|
318
|
+
name: "pathParameters",
|
|
319
|
+
type: `${operationName}PathParameters`,
|
|
320
|
+
kind: StructureKind.PropertySignature
|
|
321
|
+
}
|
|
322
|
+
]
|
|
323
|
+
};
|
|
324
|
+
}
|
|
183
325
|
/**
|
|
184
326
|
* Gets the interface definition for an operation bodyParameters
|
|
185
327
|
*/
|
|
@@ -188,33 +330,114 @@ function buildBodyParametersDefinition(
|
|
|
188
330
|
parameters: Parameter[],
|
|
189
331
|
schemaUsage: SchemaContext[],
|
|
190
332
|
importedModels: Set<string>,
|
|
191
|
-
internalReferences: Set<string
|
|
192
|
-
|
|
333
|
+
internalReferences: Set<string>,
|
|
334
|
+
requestIndex: number
|
|
335
|
+
): InterfaceDeclarationStructure[] {
|
|
193
336
|
const bodyParameters = parameters.filter(p => p.protocol.http?.in === "body");
|
|
194
337
|
if (!bodyParameters.length) {
|
|
338
|
+
return [];
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
const nameSuffix = requestIndex > 0 ? `${requestIndex}` : "";
|
|
342
|
+
const bodyParameterInterfaceName = `${operationName}BodyParam${nameSuffix}`;
|
|
343
|
+
internalReferences.add(bodyParameterInterfaceName);
|
|
344
|
+
|
|
345
|
+
// In case of formData we'd get multiple properties in body marked as partialBody
|
|
346
|
+
if (bodyParameters.some(p => p.isPartialBody)) {
|
|
347
|
+
let allOptionalParts = true;
|
|
348
|
+
const propertiesDefinitions: PropertySignatureStructure[] = [];
|
|
349
|
+
for (const param of bodyParameters) {
|
|
350
|
+
if (param.required) {
|
|
351
|
+
allOptionalParts = false;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
propertiesDefinitions.push(
|
|
355
|
+
getPropertySignature(param, schemaUsage, importedModels)
|
|
356
|
+
);
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
const formBodyName = `${operationName}FormBody`;
|
|
360
|
+
const formBodyInterface: InterfaceDeclarationStructure = {
|
|
361
|
+
isExported: true,
|
|
362
|
+
kind: StructureKind.Interface,
|
|
363
|
+
name: formBodyName,
|
|
364
|
+
properties: propertiesDefinitions
|
|
365
|
+
};
|
|
366
|
+
|
|
367
|
+
return [
|
|
368
|
+
{
|
|
369
|
+
isExported: true,
|
|
370
|
+
kind: StructureKind.Interface,
|
|
371
|
+
name: bodyParameterInterfaceName,
|
|
372
|
+
properties: [
|
|
373
|
+
{
|
|
374
|
+
name: "body",
|
|
375
|
+
type: formBodyName,
|
|
376
|
+
hasQuestionToken: allOptionalParts
|
|
377
|
+
}
|
|
378
|
+
]
|
|
379
|
+
},
|
|
380
|
+
formBodyInterface
|
|
381
|
+
];
|
|
382
|
+
} else {
|
|
383
|
+
const bodySignature = getPropertySignature(
|
|
384
|
+
bodyParameters[0],
|
|
385
|
+
schemaUsage,
|
|
386
|
+
importedModels
|
|
387
|
+
);
|
|
388
|
+
|
|
389
|
+
return [
|
|
390
|
+
{
|
|
391
|
+
isExported: true,
|
|
392
|
+
kind: StructureKind.Interface,
|
|
393
|
+
name: bodyParameterInterfaceName,
|
|
394
|
+
properties: [
|
|
395
|
+
{
|
|
396
|
+
docs: bodySignature.docs,
|
|
397
|
+
name: "body",
|
|
398
|
+
type: bodySignature.type,
|
|
399
|
+
hasQuestionToken: bodySignature.hasQuestionToken
|
|
400
|
+
}
|
|
401
|
+
]
|
|
402
|
+
}
|
|
403
|
+
];
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* Gets the interface definition for an operation bodyParameters
|
|
409
|
+
*/
|
|
410
|
+
function buildContentTypeParametersDefinition(
|
|
411
|
+
operationName: string,
|
|
412
|
+
request: OperationRequest | undefined,
|
|
413
|
+
internalReferences: Set<string>,
|
|
414
|
+
requestIndex: number
|
|
415
|
+
): InterfaceDeclarationStructure | undefined {
|
|
416
|
+
if (!request) {
|
|
195
417
|
return undefined;
|
|
196
418
|
}
|
|
419
|
+
const mediaTypes: string[] = request.protocol.http?.mediaTypes ?? [];
|
|
197
420
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
bodyParameters[0],
|
|
202
|
-
schemaUsage,
|
|
203
|
-
importedModels
|
|
204
|
-
);
|
|
421
|
+
if (!mediaTypes.length) {
|
|
422
|
+
return undefined;
|
|
423
|
+
}
|
|
205
424
|
|
|
206
|
-
|
|
425
|
+
const nameSuffix = requestIndex > 0 ? `${requestIndex}` : "";
|
|
426
|
+
const mediaTypesParameterInterfaceName = `${operationName}MediaTypesParam${nameSuffix}`;
|
|
427
|
+
|
|
428
|
+
// Mark the queryParameter interface for importing
|
|
429
|
+
internalReferences.add(mediaTypesParameterInterfaceName);
|
|
207
430
|
|
|
208
431
|
return {
|
|
209
432
|
isExported: true,
|
|
210
433
|
kind: StructureKind.Interface,
|
|
211
|
-
name:
|
|
434
|
+
name: mediaTypesParameterInterfaceName,
|
|
212
435
|
properties: [
|
|
213
436
|
{
|
|
214
|
-
docs:
|
|
215
|
-
name: "
|
|
216
|
-
type:
|
|
217
|
-
hasQuestionToken:
|
|
437
|
+
docs: ["Request content type"],
|
|
438
|
+
name: "contentType",
|
|
439
|
+
type: mediaTypes.map(mt => `"${mt}"`).join(" | "),
|
|
440
|
+
hasQuestionToken: true
|
|
218
441
|
}
|
|
219
442
|
]
|
|
220
443
|
};
|
|
@@ -228,7 +451,8 @@ function buildQueryParameterDefinition(
|
|
|
228
451
|
parameters: Parameter[],
|
|
229
452
|
schemaUsage: SchemaContext[],
|
|
230
453
|
importedModels: Set<string>,
|
|
231
|
-
internalReferences: Set<string
|
|
454
|
+
internalReferences: Set<string>,
|
|
455
|
+
requestIndex: number
|
|
232
456
|
): InterfaceDeclarationStructure[] | undefined {
|
|
233
457
|
const queryParameters = parameters.filter(
|
|
234
458
|
p => p.protocol.http?.in === "query"
|
|
@@ -238,7 +462,8 @@ function buildQueryParameterDefinition(
|
|
|
238
462
|
return undefined;
|
|
239
463
|
}
|
|
240
464
|
|
|
241
|
-
const
|
|
465
|
+
const nameSuffix = requestIndex > 0 ? `${requestIndex}` : "";
|
|
466
|
+
const queryParameterInterfaceName = `${operationName}QueryParam${nameSuffix}`;
|
|
242
467
|
const queryParameterPropertiesName = `${operationName}QueryParamProperties`;
|
|
243
468
|
|
|
244
469
|
// Get the property signature for each query parameter
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { readFileSync } from "fs";
|
|
2
|
-
import { getSession } from "../autorestSession";
|
|
3
|
-
import { extractPaginationDetails } from "../utils/extractPaginationDetails";
|
|
4
2
|
import * as path from "path";
|
|
5
3
|
import * as hbs from "handlebars";
|
|
6
4
|
import { Project } from "ts-morph";
|
|
5
|
+
import { getAutorestOptions } from "../autorestSession";
|
|
7
6
|
|
|
8
7
|
export function generatePollingHelper(project: Project) {
|
|
9
8
|
let file: string = "";
|
|
@@ -13,7 +12,8 @@ export function generatePollingHelper(project: Project) {
|
|
|
13
12
|
});
|
|
14
13
|
|
|
15
14
|
const readmeFileContents = hbs.compile(file, { noEscape: true });
|
|
16
|
-
|
|
15
|
+
const { srcPath } = getAutorestOptions();
|
|
16
|
+
project.createSourceFile(path.join(srcPath, "pollingHelper.ts"), readmeFileContents({}), {
|
|
17
17
|
overwrite: true
|
|
18
18
|
});
|
|
19
19
|
}
|
|
@@ -21,10 +21,14 @@ import {
|
|
|
21
21
|
import { NameType, normalizeName } from "../utils/nameUtils";
|
|
22
22
|
import { getElementType, getFormatDocs, primitiveSchemaToType } from "./schemaHelpers";
|
|
23
23
|
import { getLanguageMetadata } from "../utils/languageHelpers";
|
|
24
|
+
import { hasOutputModels } from "./helpers/modelHelpers";
|
|
25
|
+
import { getAutorestOptions } from "../autorestSession";
|
|
26
|
+
import * as path from 'path';
|
|
24
27
|
|
|
25
28
|
export function generateResponseInterfaces(model: CodeModel, project: Project) {
|
|
29
|
+
const { srcPath } = getAutorestOptions();
|
|
26
30
|
const responsesFile = project.createSourceFile(
|
|
27
|
-
`
|
|
31
|
+
path.join(srcPath, `responses.ts`),
|
|
28
32
|
undefined,
|
|
29
33
|
{
|
|
30
34
|
overwrite: true
|
|
@@ -118,12 +122,14 @@ export function generateResponseInterfaces(model: CodeModel, project: Project) {
|
|
|
118
122
|
|
|
119
123
|
|
|
120
124
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
125
|
+
if (hasOutputModels(model)) {
|
|
126
|
+
responsesFile.addImportDeclarations([
|
|
127
|
+
{
|
|
128
|
+
namedImports: [...importedModels],
|
|
129
|
+
moduleSpecifier: "./outputModels"
|
|
130
|
+
}
|
|
131
|
+
]);
|
|
132
|
+
}
|
|
127
133
|
}
|
|
128
134
|
|
|
129
135
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getHost, getSession } from "../autorestSession";
|
|
1
|
+
import { getAutorestOptions, getHost, getSession } from "../autorestSession";
|
|
2
2
|
import { Project, IndentationText } from "ts-morph";
|
|
3
3
|
import { generatePackageJson } from "../generators/static/packageFileGenerator";
|
|
4
4
|
import { generateLicenseFile } from "../generators/static/licenseFileGenerator";
|
|
@@ -10,12 +10,23 @@ import { generateSchemaTypes } from "./generateSchemaTypes";
|
|
|
10
10
|
import { format } from "prettier";
|
|
11
11
|
import { prettierJSONOptions, prettierTypeScriptOptions } from "./config";
|
|
12
12
|
import { generateParameterInterfaces } from "./generateParameterTypes";
|
|
13
|
-
import { generatePathFirstClient } from "./
|
|
13
|
+
import { generatePathFirstClient } from "./generateClientDefinition";
|
|
14
|
+
import { generateClient } from './generateClient';
|
|
14
15
|
import { generateIndexFile } from "../generators/indexGenerator";
|
|
15
16
|
import { generatePagingHelper } from "./generatePagingHelper";
|
|
16
17
|
import { generatePollingHelper } from "./generatePollingHelper";
|
|
18
|
+
import { generateTopLevelIndexFile } from './generateTopLevelIndexFile';
|
|
17
19
|
import { hasPagingOperations } from "../utils/extractPaginationDetails";
|
|
18
20
|
import { hasPollingOperations } from "./helpers/hasPollingOperations";
|
|
21
|
+
import { generateKarmaConfigFile } from "../generators/static/karmaConfigFileGenerator";
|
|
22
|
+
import { generateEnvFile } from "../generators/test/envFileGenerator";
|
|
23
|
+
import { generateEnvBrowserFile } from "../generators/test/envBrowserFileGenerator";
|
|
24
|
+
import { generateRecordedClientFile } from "../generators/test/recordedClientFileGenerator";
|
|
25
|
+
import { generateSampleTestFile } from "../generators/test/sampleTestGenerator";
|
|
26
|
+
import { generateEsLintConfig } from "../generators/static/esLintConfigGenerator";
|
|
27
|
+
import { generateRollupConfig } from "../generators/static/rollupConfigFileGenerator";
|
|
28
|
+
import { generateReadmeFile } from "../generators/static/readmeFileGenerator";
|
|
29
|
+
|
|
19
30
|
/**
|
|
20
31
|
* Generates a Rest Level Client library
|
|
21
32
|
*/
|
|
@@ -38,17 +49,31 @@ export async function generateRestLevelClient() {
|
|
|
38
49
|
generatePollingHelper(project);
|
|
39
50
|
}
|
|
40
51
|
|
|
52
|
+
|
|
41
53
|
performCodeModelMutations(model);
|
|
54
|
+
generateReadmeFile(model.language, model.info, project);
|
|
42
55
|
generatePackageJson(project);
|
|
43
56
|
generateLicenseFile(project);
|
|
44
57
|
generateTsConfig(project);
|
|
45
58
|
generateApiExtractorConfig(project);
|
|
59
|
+
generateRollupConfig(project);
|
|
60
|
+
generateEsLintConfig(project);
|
|
61
|
+
|
|
62
|
+
generateKarmaConfigFile(project)
|
|
63
|
+
generateEnvFile(project);
|
|
64
|
+
generateEnvBrowserFile(project);
|
|
65
|
+
generateRecordedClientFile(project);
|
|
66
|
+
generateSampleTestFile(project);
|
|
67
|
+
|
|
46
68
|
generateResponseInterfaces(model, project);
|
|
47
69
|
generateSchemaTypes(model, project);
|
|
48
70
|
generateParameterInterfaces(model, project);
|
|
49
71
|
generatePathFirstClient(model, project);
|
|
72
|
+
generateClient(model, project);
|
|
50
73
|
generateIndexFile(project);
|
|
51
74
|
|
|
75
|
+
generateTopLevelIndexFile(model, project);
|
|
76
|
+
|
|
52
77
|
// Save the source files to the virtual filesystem
|
|
53
78
|
project.saveSync();
|
|
54
79
|
const fs = project.getFileSystem();
|
|
@@ -61,7 +86,7 @@ export async function generateRestLevelClient() {
|
|
|
61
86
|
let fileContents = fs.readFileSync(filePath);
|
|
62
87
|
const licenseHeader = `// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n`;
|
|
63
88
|
|
|
64
|
-
if (
|
|
89
|
+
if (isSourceCode) {
|
|
65
90
|
fileContents = `${licenseHeader.trimLeft()}\n${fileContents}`;
|
|
66
91
|
}
|
|
67
92
|
|
|
@@ -74,9 +99,9 @@ export async function generateRestLevelClient() {
|
|
|
74
99
|
}
|
|
75
100
|
|
|
76
101
|
// Write the file to the AutoRest host
|
|
77
|
-
host.
|
|
78
|
-
filePath.substr(1), // Get rid of the leading slash '/'
|
|
79
|
-
fileContents
|
|
80
|
-
);
|
|
102
|
+
host.writeFile({
|
|
103
|
+
filename: filePath.substr(1), // Get rid of the leading slash '/'
|
|
104
|
+
content: fileContents
|
|
105
|
+
});
|
|
81
106
|
}
|
|
82
107
|
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { CodeModel, SchemaContext } from "@autorest/codemodel";
|
|
2
2
|
import { Project } from "ts-morph";
|
|
3
|
+
import * as path from 'path';
|
|
3
4
|
import {
|
|
4
5
|
buildObjectInterfaces,
|
|
5
6
|
buildPolymorphicAliases
|
|
6
7
|
} from "./generateObjectTypes";
|
|
8
|
+
import { getAutorestOptions } from "../autorestSession";
|
|
7
9
|
|
|
8
10
|
/**
|
|
9
11
|
* Generates types to represent schema definitions in the swagger
|
|
@@ -18,10 +20,10 @@ export function generateSchemaTypes(model: CodeModel, project: Project) {
|
|
|
18
20
|
const objectTypeAliases = buildPolymorphicAliases(model, [
|
|
19
21
|
SchemaContext.Input
|
|
20
22
|
]);
|
|
21
|
-
|
|
23
|
+
const { srcPath } = getAutorestOptions();
|
|
22
24
|
if (objectTypeAliases.length || objectsDefinitions.length) {
|
|
23
25
|
const inputModelsFile = project.createSourceFile(
|
|
24
|
-
`
|
|
26
|
+
path.join(srcPath, `models.ts`),
|
|
25
27
|
undefined,
|
|
26
28
|
{
|
|
27
29
|
overwrite: true
|
|
@@ -42,7 +44,7 @@ export function generateSchemaTypes(model: CodeModel, project: Project) {
|
|
|
42
44
|
|
|
43
45
|
if (outputObjectTypeAliases.length || outputObjectsDefinitions.length) {
|
|
44
46
|
const outputModelsFile = project.createSourceFile(
|
|
45
|
-
`
|
|
47
|
+
path.join(srcPath, `outputModels.ts`),
|
|
46
48
|
undefined,
|
|
47
49
|
{
|
|
48
50
|
overwrite: true
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Project } from 'ts-morph';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { getAutorestOptions } from '../autorestSession';
|
|
4
|
+
import { CodeModel } from '@autorest/codemodel';
|
|
5
|
+
import { NameType, normalizeName } from '../utils/nameUtils';
|
|
6
|
+
|
|
7
|
+
const batchOutputFolder: [string, string, string][] = [];
|
|
8
|
+
|
|
9
|
+
export function generateTopLevelIndexFile(model: CodeModel, project: Project) {
|
|
10
|
+
const { multiClient, batch, srcPath } = getAutorestOptions();
|
|
11
|
+
if (srcPath) {
|
|
12
|
+
const clientName = model.language.default.name;
|
|
13
|
+
const moduleName = normalizeName(clientName, NameType.File);
|
|
14
|
+
const relativePath = srcPath.replace('/src', '');
|
|
15
|
+
batchOutputFolder.push([relativePath, clientName, moduleName]);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (multiClient && batch && batch.length > 1 && batchOutputFolder.length === batch.length) {
|
|
19
|
+
const { srcPath } = getAutorestOptions();
|
|
20
|
+
const fileDirectory= path.join(srcPath as string, '../../');
|
|
21
|
+
const file = project.createSourceFile('/src/index.ts', undefined, {
|
|
22
|
+
overwrite: true
|
|
23
|
+
});
|
|
24
|
+
file.moveToDirectory(fileDirectory);
|
|
25
|
+
const allModules: string[] = [];
|
|
26
|
+
batchOutputFolder.forEach(item => {
|
|
27
|
+
file.addImportDeclaration({
|
|
28
|
+
namespaceImport: item[1],
|
|
29
|
+
moduleSpecifier: `${item[0]}`
|
|
30
|
+
});
|
|
31
|
+
file.addExportDeclaration({
|
|
32
|
+
moduleSpecifier: `${item[0]}/${item[2]}`,
|
|
33
|
+
namedExports: [`${item[1]} as ${item[1]}Client`]
|
|
34
|
+
})
|
|
35
|
+
allModules.push(item[1]);
|
|
36
|
+
});
|
|
37
|
+
file.addExportDeclaration({
|
|
38
|
+
namedExports: [...allModules]
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|