@autorest/typescript 6.0.0-beta.13 → 6.0.0-beta.16
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 +8 -3
- 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 +3 -0
- package/dist/src/conflictResolver.d.ts.map +1 -0
- package/dist/src/conflictResolver.js +43 -0
- package/dist/src/conflictResolver.js.map +1 -0
- 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 +85 -12
- package/dist/src/generators/indexGenerator.js.map +1 -1
- package/dist/src/generators/mappersGenerator.d.ts.map +1 -1
- package/dist/src/generators/mappersGenerator.js +81 -7
- package/dist/src/generators/mappersGenerator.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.js +6 -6
- 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/README.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 +100 -25
- package/dist/src/generators/static/packageFileGenerator.js.map +1 -1
- package/dist/src/generators/static/readmeFileGenerator.d.ts.map +1 -1
- package/dist/src/generators/static/readmeFileGenerator.js +5 -1
- package/dist/src/generators/static/readmeFileGenerator.js.map +1 -1
- package/dist/src/generators/static/rollupConfigFileGenerator.d.ts.map +1 -1
- package/dist/src/generators/static/rollupConfigFileGenerator.js +7 -70
- 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 +9 -10
- 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 +3 -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 +48 -159
- 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 +3 -3
- package/dist/src/restLevelClient/generateObjectTypes.d.ts.map +1 -1
- package/dist/src/restLevelClient/generateObjectTypes.js +28 -20
- 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 +246 -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 +23 -14
- 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 +19 -3
- 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 +29 -7
- 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/getPropertySignature.d.ts +2 -2
- package/dist/src/restLevelClient/getPropertySignature.d.ts.map +1 -1
- package/dist/src/restLevelClient/getPropertySignature.js +2 -2
- package/dist/src/restLevelClient/getPropertySignature.js.map +1 -1
- package/dist/src/restLevelClient/helpers/modelHelpers.d.ts +4 -0
- package/dist/src/restLevelClient/helpers/modelHelpers.d.ts.map +1 -0
- package/dist/src/restLevelClient/helpers/modelHelpers.js +19 -0
- package/dist/src/restLevelClient/helpers/modelHelpers.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 +8 -2
- package/dist/src/restLevelClient/schemaHelpers.d.ts.map +1 -1
- package/dist/src/restLevelClient/schemaHelpers.js +19 -9
- 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 +4 -1
- package/dist/src/transforms/operationTransforms.js.map +1 -1
- package/dist/src/transforms/parameterTransforms.d.ts.map +1 -1
- package/dist/src/transforms/parameterTransforms.js +1 -1
- package/dist/src/transforms/parameterTransforms.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 +20 -29
- 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 +70 -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 +11 -6
- 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 +18 -12
- package/src/autorestSession.ts +16 -15
- package/src/conflictResolver.ts +61 -0
- package/src/generators/clientFileGenerator.ts +262 -33
- package/src/generators/indexGenerator.ts +98 -13
- package/src/generators/mappersGenerator.ts +108 -8
- package/src/generators/modelsGenerator.ts +21 -1
- package/src/generators/operationGenerator.ts +7 -7
- 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/README.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 +113 -28
- package/src/generators/static/readmeFileGenerator.ts +8 -2
- package/src/generators/static/rollupConfigFileGenerator.ts +7 -70
- package/src/generators/static/samples.ts.hbs +49 -0
- package/src/generators/static/tsConfigFileGenerator.ts +12 -12
- 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 +9 -5
- package/src/models/clientDetails.ts +3 -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 +55 -243
- package/src/restLevelClient/generateClientDefinition.ts +343 -0
- package/src/restLevelClient/generateMethodShortcuts.ts +121 -0
- package/src/restLevelClient/generateObjectTypes.ts +57 -20
- package/src/restLevelClient/generatePagingHelper.ts +3 -2
- package/src/restLevelClient/generateParameterTypes.ts +377 -48
- package/src/restLevelClient/generatePollingHelper.ts +3 -3
- package/src/restLevelClient/generateResponseTypes.ts +30 -16
- package/src/restLevelClient/generateRestLevel.ts +24 -6
- package/src/restLevelClient/generateSchemaTypes.ts +43 -8
- package/src/restLevelClient/generateTopLevelIndexFile.ts +41 -0
- package/src/restLevelClient/getPropertySignature.ts +3 -2
- package/src/restLevelClient/helpers/modelHelpers.ts +15 -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 +25 -7
- package/src/transforms/operationTransforms.ts +6 -1
- package/src/transforms/parameterTransforms.ts +3 -1
- package/src/transforms/samplesTransforms.ts +300 -0
- package/src/transforms/transforms.ts +6 -6
- package/src/typescriptGenerator.ts +22 -46
- package/src/utils/autorestOptions.ts +121 -58
- package/src/utils/nameUtils.ts +18 -9
- 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,9 +1,11 @@
|
|
|
1
|
-
import { CodeModel } from "@autorest/codemodel";
|
|
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
|
|
@@ -11,12 +13,45 @@ import {
|
|
|
11
13
|
export function generateSchemaTypes(model: CodeModel, project: Project) {
|
|
12
14
|
// Track models that need to be imported
|
|
13
15
|
const importedModels = new Set<string>();
|
|
14
|
-
const modelsFile = project.createSourceFile(`src/models.ts`, undefined, {
|
|
15
|
-
overwrite: true
|
|
16
|
-
});
|
|
17
16
|
|
|
18
|
-
const objectsDefinitions = buildObjectInterfaces(model, importedModels
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
const objectsDefinitions = buildObjectInterfaces(model, importedModels, [
|
|
18
|
+
SchemaContext.Input
|
|
19
|
+
]);
|
|
20
|
+
const objectTypeAliases = buildPolymorphicAliases(model, [
|
|
21
|
+
SchemaContext.Input
|
|
22
|
+
]);
|
|
23
|
+
const { srcPath } = getAutorestOptions();
|
|
24
|
+
if (objectTypeAliases.length || objectsDefinitions.length) {
|
|
25
|
+
const inputModelsFile = project.createSourceFile(
|
|
26
|
+
path.join(srcPath, `models.ts`),
|
|
27
|
+
undefined,
|
|
28
|
+
{
|
|
29
|
+
overwrite: true
|
|
30
|
+
}
|
|
31
|
+
);
|
|
32
|
+
inputModelsFile.addInterfaces(objectsDefinitions);
|
|
33
|
+
inputModelsFile.addTypeAliases(objectTypeAliases);
|
|
34
|
+
}
|
|
35
|
+
const outputObjectsDefinitions = buildObjectInterfaces(
|
|
36
|
+
model,
|
|
37
|
+
importedModels,
|
|
38
|
+
[SchemaContext.Output, SchemaContext.Exception]
|
|
39
|
+
);
|
|
40
|
+
const outputObjectTypeAliases = buildPolymorphicAliases(model, [
|
|
41
|
+
SchemaContext.Output,
|
|
42
|
+
SchemaContext.Exception
|
|
43
|
+
]);
|
|
44
|
+
|
|
45
|
+
if (outputObjectTypeAliases.length || outputObjectsDefinitions.length) {
|
|
46
|
+
const outputModelsFile = project.createSourceFile(
|
|
47
|
+
path.join(srcPath, `outputModels.ts`),
|
|
48
|
+
undefined,
|
|
49
|
+
{
|
|
50
|
+
overwrite: true
|
|
51
|
+
}
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
outputModelsFile.addInterfaces(outputObjectsDefinitions);
|
|
55
|
+
outputModelsFile.addTypeAliases(outputObjectTypeAliases);
|
|
56
|
+
}
|
|
22
57
|
}
|
|
@@ -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
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Parameter, Property } from "@autorest/codemodel";
|
|
1
|
+
import { Parameter, Property, SchemaContext } from "@autorest/codemodel";
|
|
2
2
|
import { PropertySignatureStructure, StructureKind } from "ts-morph";
|
|
3
3
|
import { getLanguageMetadata } from "../utils/languageHelpers";
|
|
4
4
|
import { getElementType, getFormatDocs } from "./schemaHelpers";
|
|
@@ -11,6 +11,7 @@ import { getElementType, getFormatDocs } from "./schemaHelpers";
|
|
|
11
11
|
*/
|
|
12
12
|
export function getPropertySignature(
|
|
13
13
|
property: Property | Parameter,
|
|
14
|
+
schemaUsage: SchemaContext[],
|
|
14
15
|
importedModels = new Set<string>()
|
|
15
16
|
): PropertySignatureStructure {
|
|
16
17
|
const propertyLangMetadata = getLanguageMetadata(property.language);
|
|
@@ -24,7 +25,7 @@ export function getPropertySignature(
|
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
const description = getDocs(property);
|
|
27
|
-
const type = getElementType(property.schema, importedModels);
|
|
28
|
+
const type = getElementType(property.schema, schemaUsage, importedModels);
|
|
28
29
|
return {
|
|
29
30
|
name: propertyName,
|
|
30
31
|
...(description && { docs: [{ description }] }),
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { CodeModel, SchemaContext } from "@autorest/codemodel";
|
|
2
|
+
|
|
3
|
+
export function hasInputModels(model: CodeModel) {
|
|
4
|
+
return model.schemas.objects?.some(o =>
|
|
5
|
+
o.usage?.includes(SchemaContext.Input)
|
|
6
|
+
);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function hasOutputModels(model: CodeModel) {
|
|
10
|
+
return model.schemas.objects?.some(
|
|
11
|
+
o =>
|
|
12
|
+
o.usage?.includes(SchemaContext.Output) ||
|
|
13
|
+
o.usage?.includes(SchemaContext.Exception)
|
|
14
|
+
);
|
|
15
|
+
}
|
|
@@ -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,
|
|
@@ -9,6 +8,7 @@ import {
|
|
|
9
8
|
ObjectSchema,
|
|
10
9
|
PrimitiveSchema,
|
|
11
10
|
Schema,
|
|
11
|
+
SchemaContext,
|
|
12
12
|
SchemaType
|
|
13
13
|
} from "@autorest/codemodel";
|
|
14
14
|
import { getLanguageMetadata } from "../utils/languageHelpers";
|
|
@@ -21,15 +21,20 @@ import { NameType, normalizeName } from "../utils/nameUtils";
|
|
|
21
21
|
*/
|
|
22
22
|
export function getElementType(
|
|
23
23
|
schema: Schema,
|
|
24
|
+
schemaUsage: SchemaContext[],
|
|
24
25
|
importedModels = new Set<string>()
|
|
25
26
|
): string {
|
|
26
27
|
if (isArraySchema(schema)) {
|
|
27
28
|
// Recursively find out the type for the elements in the array.
|
|
28
|
-
return `Array<${getElementType(
|
|
29
|
+
return `Array<${getElementType(
|
|
30
|
+
schema.elementType,
|
|
31
|
+
schemaUsage,
|
|
32
|
+
importedModels
|
|
33
|
+
)}>`;
|
|
29
34
|
}
|
|
30
35
|
|
|
31
36
|
if (isPrimitiveSchema(schema)) {
|
|
32
|
-
return `${primitiveSchemaToType(schema)}`;
|
|
37
|
+
return `${primitiveSchemaToType(schema, schemaUsage)}`;
|
|
33
38
|
}
|
|
34
39
|
|
|
35
40
|
if (isAnyObjectSchema(schema)) {
|
|
@@ -37,7 +42,11 @@ export function getElementType(
|
|
|
37
42
|
}
|
|
38
43
|
|
|
39
44
|
if (isObjectSchema(schema)) {
|
|
40
|
-
const
|
|
45
|
+
const nameSuffix = schemaUsage.includes(SchemaContext.Output)
|
|
46
|
+
? "Output"
|
|
47
|
+
: "";
|
|
48
|
+
const schemaInfo = getObjectInfo(schema);
|
|
49
|
+
const name = `${schemaInfo.name}${nameSuffix}`;
|
|
41
50
|
importedModels.add(name);
|
|
42
51
|
return `${name}`;
|
|
43
52
|
}
|
|
@@ -45,6 +54,7 @@ export function getElementType(
|
|
|
45
54
|
if (isDictionarySchema(schema)) {
|
|
46
55
|
return `Record<string, ${getElementType(
|
|
47
56
|
schema.elementType,
|
|
57
|
+
schemaUsage,
|
|
48
58
|
importedModels
|
|
49
59
|
)}>`;
|
|
50
60
|
}
|
|
@@ -85,7 +95,10 @@ function isPrimitiveSchema(schema: Schema): boolean {
|
|
|
85
95
|
* @param schema - Schema to generate a type for
|
|
86
96
|
* @returns a string with the Typescript type to generate for the given schema
|
|
87
97
|
*/
|
|
88
|
-
function primitiveSchemaToType(
|
|
98
|
+
export function primitiveSchemaToType(
|
|
99
|
+
schema: PrimitiveSchema,
|
|
100
|
+
schemaUse: SchemaContext[]
|
|
101
|
+
): string {
|
|
89
102
|
switch (schema.type) {
|
|
90
103
|
case SchemaType.Any:
|
|
91
104
|
return "any";
|
|
@@ -95,11 +108,12 @@ function primitiveSchemaToType(schema: PrimitiveSchema): string {
|
|
|
95
108
|
case SchemaType.Date:
|
|
96
109
|
case SchemaType.Time:
|
|
97
110
|
case SchemaType.DateTime:
|
|
98
|
-
return
|
|
111
|
+
return schemaUse.includes(SchemaContext.Output)
|
|
112
|
+
? "string"
|
|
113
|
+
: "Date | string";
|
|
99
114
|
case SchemaType.Char:
|
|
100
115
|
return "string";
|
|
101
116
|
case SchemaType.ByteArray:
|
|
102
|
-
case SchemaType.Binary:
|
|
103
117
|
case SchemaType.Duration:
|
|
104
118
|
case SchemaType.Credential:
|
|
105
119
|
case SchemaType.UnixTime:
|
|
@@ -107,6 +121,10 @@ function primitiveSchemaToType(schema: PrimitiveSchema): string {
|
|
|
107
121
|
case SchemaType.Uuid:
|
|
108
122
|
case SchemaType.String:
|
|
109
123
|
return "string";
|
|
124
|
+
case SchemaType.Binary:
|
|
125
|
+
return schemaUse.includes(SchemaContext.Output)
|
|
126
|
+
? "Uint8Array"
|
|
127
|
+
: "string | Uint8Array";
|
|
110
128
|
case SchemaType.Boolean:
|
|
111
129
|
return "boolean";
|
|
112
130
|
case SchemaType.Choice:
|
|
@@ -388,7 +388,11 @@ export async function transformOperation(
|
|
|
388
388
|
NameType.Interface,
|
|
389
389
|
true /** shouldGuard */
|
|
390
390
|
);
|
|
391
|
-
|
|
391
|
+
|
|
392
|
+
const typeName =
|
|
393
|
+
normalizedOperationGroupName === clientName
|
|
394
|
+
? `${normalizedOperationName}`
|
|
395
|
+
: `${normalizedOperationGroupName}${normalizedOperationName}`;
|
|
392
396
|
|
|
393
397
|
const typeDetails: TypeDetails = {
|
|
394
398
|
typeName,
|
|
@@ -487,6 +491,7 @@ export async function transformOperationGroup(
|
|
|
487
491
|
return {
|
|
488
492
|
name: operationGroupClassName,
|
|
489
493
|
key: operationGroup.$key,
|
|
494
|
+
originalKey: operationGroup.$key,
|
|
490
495
|
operations,
|
|
491
496
|
isTopLevel,
|
|
492
497
|
mediaTypes
|
|
@@ -236,7 +236,9 @@ export function populateOperationParameters(
|
|
|
236
236
|
true /** shouldGuard */
|
|
237
237
|
);
|
|
238
238
|
|
|
239
|
-
const sameNameParams = operationParameters.filter(
|
|
239
|
+
const sameNameParams = operationParameters.filter(
|
|
240
|
+
p => p.name === name || p.nameRef === name
|
|
241
|
+
);
|
|
240
242
|
description += getSchemaTypeDocumentation(parameter.schema);
|
|
241
243
|
const isRequired = getParameterRequired(parameter);
|
|
242
244
|
const isNullable = !!parameter.nullable;
|